From 149c92593cd2caa14d803d49793d58aecfa60792 Mon Sep 17 00:00:00 2001 From: Dan Ballard Date: Sat, 7 May 2022 17:11:58 -0700 Subject: [PATCH] demo of an Imp bot using rust-bert to chat --- .gitignore | 1 + Cargo.lock | 1873 ++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 14 + README.md | 17 + rust-bert.png | Bin 0 -> 88514 bytes src/main.rs | 102 +++ user_config.json | 3 + 7 files changed, 2010 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 README.md create mode 100644 rust-bert.png create mode 100644 src/main.rs create mode 100644 user_config.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..d704518 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,1873 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +dependencies = [ + "memchr", +] + +[[package]] +name = "anyhow" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "block-buffer" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bstr" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" +dependencies = [ + "lazy_static", + "memchr", + "regex-automata", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" + +[[package]] +name = "bzip2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "cached-path" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f1c56d30236522ab3393a08746b138d4e16372001f42d29c88d513aeb8ab7ef" +dependencies = [ + "flate2", + "fs2", + "glob", + "indicatif", + "log", + "rand", + "reqwest", + "serde", + "serde_json", + "sha2", + "tar", + "tempfile", + "thiserror", + "zip", + "zip-extensions", +] + +[[package]] +name = "cc" +version = "1.0.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] + +[[package]] +name = "console" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28b32d32ca44b70c3e4acd7db1babf555fa026e385fb95f18028f88848b3c31" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "terminal_size", + "winapi", +] + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" + +[[package]] +name = "cpufeatures" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "lazy_static", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" +dependencies = [ + "cfg-if", + "lazy_static", +] + +[[package]] +name = "crypto-common" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "csv" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" +dependencies = [ + "bstr", + "csv-core", + "itoa 0.4.8", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +dependencies = [ + "memchr", +] + +[[package]] +name = "curl" +version = "0.4.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d855aeef205b43f65a5001e0997d81f8efca7badad4fad7d897aa7f0d0651f" +dependencies = [ + "curl-sys", + "libc", + "openssl-probe", + "openssl-sys", + "schannel", + "socket2", + "winapi", +] + +[[package]] +name = "curl-sys" +version = "0.4.54+curl-7.83.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25debbc3365c3e7ee79e30918df5759e84dbd4485807a18829188abf1786ec4e" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", + "winapi", +] + +[[package]] +name = "darling" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "digest" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "encoding_rs" +version = "0.8.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "fastrand" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" +dependencies = [ + "instant", +] + +[[package]] +name = "filetime" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "winapi", +] + +[[package]] +name = "flate2" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39522e96686d38f4bc984b9198e3a0613264abaebaff2c5c918bfa6b6da09af" +dependencies = [ + "cfg-if", + "crc32fast", + "libc", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +dependencies = [ + "matches", + "percent-encoding", +] + +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "futures-channel" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" + +[[package]] +name = "futures-io" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" + +[[package]] +name = "futures-sink" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" + +[[package]] +name = "futures-task" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" + +[[package]] +name = "futures-util" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +dependencies = [ + "futures-core", + "futures-io", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", +] + +[[package]] +name = "glob" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" + +[[package]] +name = "h2" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" + +[[package]] +name = "hashbrown" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3" +dependencies = [ + "ahash", +] + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hex-literal" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" + +[[package]] +name = "http" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff8670570af52249509a86f5e3e18a08c60b177071826898fde8997cf5f6bfbb" +dependencies = [ + "bytes", + "fnv", + "itoa 1.0.1", +] + +[[package]] +name = "http-body" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" + +[[package]] +name = "httpdate" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" + +[[package]] +name = "hyper" +version = "0.14.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa 1.0.1", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "imp" +version = "0.1.0" +dependencies = [ + "chrono", + "libcwtch", + "serde_json", +] + +[[package]] +name = "indexmap" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" +dependencies = [ + "autocfg", + "hashbrown 0.11.2", +] + +[[package]] +name = "indicatif" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d207dc617c7a380ab07ff572a6e52fa202a2a8f355860ac9c38e23f8196be1b" +dependencies = [ + "console", + "lazy_static", + "number_prefix", + "regex", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "ipnet" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" + +[[package]] +name = "itertools" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "itoa" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" + +[[package]] +name = "js-sys" +version = "0.3.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.125" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5916d2ae698f6de9bfb891ad7a8d65c09d232dc58cc4ac433c7da3b2fd84bc2b" + +[[package]] +name = "libcwtch" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82cfe2b14be43f9f77596fa12beb3a12a3e2c12eaa82b25be933d537e6e3d4f9" +dependencies = [ + "hex-literal", + "libc", + "serde", + "serde_json", + "serde_with", + "sha2", +] + +[[package]] +name = "libz-sys" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e7e15d7610cce1d9752e137625f14e61a28cd45929b6e12e47b50fe154ee2e" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "matches" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" + +[[package]] +name = "matrixmultiply" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84" +dependencies = [ + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + +[[package]] +name = "miniz_oxide" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9" +dependencies = [ + "libc", + "log", + "miow", + "ntapi", + "wasi 0.11.0+wasi-snapshot-preview1", + "winapi", +] + +[[package]] +name = "miow" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" +dependencies = [ + "winapi", +] + +[[package]] +name = "native-tls" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "ndarray" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dec23e6762830658d2b3d385a75aa212af2f67a4586d4442907144f3bb6a1ca8" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "rawpointer", +] + +[[package]] +name = "ntapi" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" +dependencies = [ + "winapi", +] + +[[package]] +name = "num-complex" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fbc387afefefd5e9e39493299f3069e14a140dd34dc19b4c1c1a8fddb6a790" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + +[[package]] +name = "once_cell" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" + +[[package]] +name = "openssl" +version = "0.10.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb81a6430ac911acb25fe5ac8f1d2af1b4ea8a4fdfda0f1ee4292af2e2d8eb0e" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5fd19fb3e0a8191c1e34935718976a3e70c112ab9a24af6d7cadccd9d90bc0" +dependencies = [ + "autocfg", + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "ordered-float" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87" +dependencies = [ + "num-traits", +] + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" + +[[package]] +name = "ppv-lite86" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" + +[[package]] +name = "proc-macro2" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9027b48e9d4c9175fa2218adf3557f91c1137021739951d4932f5f8268ac48aa" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "protobuf" +version = "2.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf7e6d18738ecd0902d30d1ad232c9125985a3422929b16c65517b38adc14f96" + +[[package]] +name = "quote" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd249e82c21598a9a426a4e00dd7adc1d640b22445ec8545feef801d1a74c221" +dependencies = [ + "autocfg", + "crossbeam-deque", + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f51245e1e62e1f1629cbfec37b5793bbabcaeb90f30e94d2ba03564687353e4" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "num_cpus", +] + +[[package]] +name = "redox_syscall" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom", + "redox_syscall", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" + +[[package]] +name = "regex-syntax" +version = "0.6.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi", +] + +[[package]] +name = "reqwest" +version = "0.11.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a1f7aa4f35e5e8b4160449f51afc758f0ce6454315a9fa7d0d113e958c41eb" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "lazy_static", + "log", + "mime", + "native-tls", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-native-tls", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "rust-bert" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f74d53d058c1478224f08146fb1af6e4466660464a323fb957c2105728c62bf" +dependencies = [ + "cached-path", + "dirs", + "half", + "lazy_static", + "ordered-float", + "rust_tokenizers", + "serde", + "serde_json", + "tch", + "thiserror", + "uuid", +] + +[[package]] +name = "rust-bert-bot" +version = "0.1.0" +dependencies = [ + "imp", + "libcwtch", + "rust-bert", + "serde", + "serde_json", + "serde_with", +] + +[[package]] +name = "rust_tokenizers" +version = "7.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "196e3b77b07fd5bfcbc8187ecaef5d5931820d9abd6c3fe0a9dc6d3ddb035d72" +dependencies = [ + "csv", + "hashbrown 0.12.1", + "itertools", + "lazy_static", + "protobuf", + "rayon", + "regex", + "serde", + "serde_json", + "thiserror", + "unicode-normalization", + "unicode-normalization-alignments", +] + +[[package]] +name = "rustversion" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" + +[[package]] +name = "ryu" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" + +[[package]] +name = "schannel" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +dependencies = [ + "lazy_static", + "winapi", +] + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "security-framework" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "serde" +version = "1.0.137" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.137" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" +dependencies = [ + "itoa 1.0.1", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa 1.0.1", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b827f2113224f3f19a665136f006709194bdfdcb1fdc1e4b2b5cbac8e0cced54" +dependencies = [ + "rustversion", + "serde", + "serde_with_macros", +] + +[[package]] +name = "serde_with_macros" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sha2" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "slab" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" + +[[package]] +name = "smallvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" + +[[package]] +name = "socket2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "syn" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ff7c592601f11445996a06f8ad0c27f094a58857c2f89e97974ab9235b92c52" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "tar" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "tch" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b73f876b186599e22b01fa6ebfeea2dee2f11e8083463ab3572933d8201436b" +dependencies = [ + "half", + "lazy_static", + "libc", + "ndarray", + "rand", + "thiserror", + "torch-sys", + "zip", +] + +[[package]] +name = "tempfile" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +dependencies = [ + "cfg-if", + "fastrand", + "libc", + "redox_syscall", + "remove_dir_all", + "winapi", +] + +[[package]] +name = "terminal_size" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "thiserror" +version = "1.0.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "tokio" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce653fb475565de9f6fb0614b28bca8df2c430c0cf84bcd9c843f15de5414cc" +dependencies = [ + "bytes", + "libc", + "memchr", + "mio", + "num_cpus", + "once_cell", + "pin-project-lite", + "socket2", + "winapi", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "torch-sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34cc0f21b1aad5d71d529e9fe4dbbbdbf53918d7b4bde946f523839aa32cffae" +dependencies = [ + "anyhow", + "cc", + "curl", + "libc", + "zip", +] + +[[package]] +name = "tower-service" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" + +[[package]] +name = "tracing" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09" +dependencies = [ + "cfg-if", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "try-lock" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" + +[[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + +[[package]] +name = "unicode-bidi" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" + +[[package]] +name = "unicode-normalization" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-normalization-alignments" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43f613e4fa046e69818dd287fdc4bc78175ff20331479dab6e1b0f98d57062de" +dependencies = [ + "smallvec", +] + +[[package]] +name = "unicode-xid" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" + +[[package]] +name = "url" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +dependencies = [ + "form_urlencoded", + "idna", + "matches", + "percent-encoding", +] + +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" + +[[package]] +name = "web-sys" +version = "0.3.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi", +] + +[[package]] +name = "xattr" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" +dependencies = [ + "libc", +] + +[[package]] +name = "zip" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815" +dependencies = [ + "byteorder", + "bzip2", + "crc32fast", + "flate2", + "thiserror", + "time", +] + +[[package]] +name = "zip-extensions" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a64c3c977bc3434ce2d4bcea8ad3c644672de0f2c402b72b9171ca80a8885d14" +dependencies = [ + "zip", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..5f81364 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "rust-bert-bot" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +libcwtch = "0.3.2" +imp = {path = "../imp"} +serde_json = "1.0" +serde = { version = "1.0.127", features = ["derive"] } +serde_with = { version = "1.10.0" } +rust-bert = "0.17.0" diff --git a/README.md b/README.md new file mode 100644 index 0000000..33f8301 --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +# Rust-Bert-Bot + +An Imp Cwtch bot demo using [rust-bert](https://github.com/guillaume-be/rust-bert) to chat + +## Usage + +Create a `user_config.json` with an allow list of bot peer admins with their cwtch addresses: + +Example: + +``` +{ + "allow_list": ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"] +} +``` + +![Rust-Bert bot in Cwtch](rust-bert.png) diff --git a/rust-bert.png b/rust-bert.png new file mode 100644 index 0000000000000000000000000000000000000000..e3de2bb4ff7b8e846701c8c425bb0f9ebcad0ade GIT binary patch literal 88514 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 zɋ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 +} + +struct RustBertBot { + allow_list: Vec, + conversation_model : ConversationModel, + conversation_manager: ConversationManager, +} + +impl RustBertBot { + pub fn new() -> Self { + let file = File::open(USER_CONFIG_FILE).expect(&format!("could not open allow list file: {}", USER_CONFIG_FILE)); + let config: UserConfig = serde_json::from_reader(file) + .expect("file should be proper JSON"); + + let conversation_model = match ConversationModel::new(Default::default()) { + Ok(cm) => cm, + Err(err) => panic!("ConversationModel::new error: {:?}", err), + }; + let mut conversation_manager = ConversationManager::new(); + + RustBertBot {allow_list: config.allow_list, conversation_model, conversation_manager } + } +} + +fn main() { + let mut rust_bert_bot = RustBertBot::new(); + let allow_list = AllowListMembers::new(rust_bert_bot.allow_list.clone(), vec!()); + let behaviour: Behaviour = BehaviourBuilder::new().name(BOT_NAME.to_string()).new_contact_policy(NewContactPolicy::AllowList(allow_list)).build(); + + let event_loop_handle = thread::spawn(move || { + let mut bot = Imp::spawn(behaviour, PASSWORD.to_string(), BOT_HOME.to_string()); + + bot.event_loop::(rust_bert_bot.borrow_mut()); + }); + + event_loop_handle.join().expect("Error running event loop"); +} + +impl imp::EventHandler for RustBertBot { + fn handle(&mut self, cwtch: &dyn CwtchLib, profile_opt: Option<&Profile>, event: Event) { + match event { + Event::NewMessageFromPeer { conversation_id, handle, timestamp_received, message } => { + match profile_opt { + Some(profile) => { + let from = profile.handle.as_str(); + let message_wrapper: Message = + serde_json::from_str(&message).expect("Error parsing message"); + let mut message = message_wrapper.d.clone(); + + let bert_conversation_id = self.conversation_manager.create(&message); + let output = self.conversation_model.generate_responses(&mut self.conversation_manager); + + let response = Message { + o: 1, + d: output[&bert_conversation_id].to_string(), + }; + match serde_json::to_string(&response) { + Ok(response_json) => cwtch.send_message(&profile.handle, conversation_id, &response_json), + Err(e) => { println!("Error parsing json response: {}", e.to_string()); "".to_string() } + }; + + } + _ => {} + } + } + Event::ErrUnhandled { name, data } => eprintln!("unhandled event: {}!", name), + _ => () + }; + } +} \ No newline at end of file diff --git a/user_config.json b/user_config.json new file mode 100644 index 0000000..ea3ef15 --- /dev/null +++ b/user_config.json @@ -0,0 +1,3 @@ +{ + "allow_list": [] +}