diff --git a/Cargo.lock b/Cargo.lock index 2b494010..cf8e1c0f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,9 +10,9 @@ checksum = "415ed64958754dbe991900f3940677e6a7eefb4d7367afd70d642677b0c7d19d" [[package]] name = "addr2line" -version = "0.21.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" dependencies = [ "gimli", ] @@ -61,47 +61,48 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.13" +version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" [[package]] name = "anstyle-parse" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -109,13 +110,34 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.82" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" dependencies = [ "backtrace", ] +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" +dependencies = [ + "derive_arbitrary", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + [[package]] name = "async-stream" version = "0.3.5" @@ -135,7 +157,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] @@ -146,14 +168,47 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "autocfg" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "aws-lc-rs" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8a47f2fb521b70c11ce7369a6c5fa4bd6af7e5d62ec06303875bafe7c6ba245" +dependencies = [ + "aws-lc-sys", + "mirai-annotations", + "paste", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2927c7af777b460b7ccd95f8b67acd7b4c04ec8896bf0c8e80ba30523cffc057" +dependencies = [ + "bindgen", + "cc", + "cmake", + "dunce", + "fs_extra", + "libc", + "paste", +] [[package]] name = "axum" @@ -168,7 +223,7 @@ dependencies = [ "futures-util", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.28", + "hyper 0.14.29", "itoa", "matchit", "memchr", @@ -257,19 +312,19 @@ dependencies = [ [[package]] name = "axum-tracing-opentelemetry" -version = "0.17.1" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91387a3e9f6aa45f112cd05d1e5430f9ba40b51440849e4760a5dd51b736149f" +checksum = "f26965dca35be1ca4a128177b9302c4c04f0661443621171adb09d002dcdf1d5" dependencies = [ "axum 0.7.5", "futures-core", "futures-util", "http 1.1.0", - "opentelemetry 0.21.0", + "opentelemetry 0.22.0", "pin-project-lite", "tower", "tracing", - "tracing-opentelemetry 0.22.0", + "tracing-opentelemetry 0.23.0", "tracing-opentelemetry-instrumentation-sdk", ] @@ -290,9 +345,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" dependencies = [ "addr2line", "cc", @@ -323,9 +378,32 @@ checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64" -version = "0.22.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9475866fec1451be56a3c2400fd081ff546538961565ccb5b7142cbd22bc7a51" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bindgen" +version = "0.69.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" +dependencies = [ + "bitflags 2.6.0", + "cexpr", + "clang-sys", + "itertools 0.12.1", + "lazy_static", + "lazycell", + "log", + "prettyplease 0.2.20", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.68", + "which", +] [[package]] name = "bindgen_cuda" @@ -361,9 +439,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "block" @@ -388,22 +466,22 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.15.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15" +checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4da9a32f3fed317401fa3c862968128267c3106685286e15d5aaa3d7389c2f60" +checksum = "1ee891b04274a59bd38b412188e24b849617b2e45a0fd8d057deb63e7403761b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] @@ -442,7 +520,7 @@ dependencies = [ "safetensors", "thiserror", "yoke", - "zip", + "zip 0.6.6", ] [[package]] @@ -558,9 +636,23 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.95" +version = "1.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac367972e516d45567c7eafc73d24e1c193dcf200a8d94e9db7b3d38b349572d" +dependencies = [ + "jobserver", + "libc", + "once_cell", +] + +[[package]] +name = "cexpr" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32a725bc159af97c3e629873bb9f88fb8cf8a4867175f76dc987815ea07c83b" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] [[package]] name = "cfg-if" @@ -582,11 +674,22 @@ dependencies = [ "windows-targets 0.52.5", ] +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + [[package]] name = "clap" -version = "4.5.4" +version = "4.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "5db83dced34638ad474f39f250d7fea9598bdd239eaced1bdf45d597da0f433f" dependencies = [ "clap_builder", "clap_derive", @@ -594,39 +697,57 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "f7e204572485eb3fbf28f871612191521df159bc3e15a9f5064c66dba3a8c05f" dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim 0.11.1", + "strsim", ] [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" + +[[package]] +name = "cmake" +version = "0.1.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" +dependencies = [ + "cc", +] [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] [[package]] name = "console" @@ -679,18 +800,18 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" -version = "0.5.12" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ "crossbeam-utils", ] @@ -716,9 +837,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crunchy" @@ -746,9 +867,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.8" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" dependencies = [ "darling_core", "darling_macro", @@ -756,27 +877,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.8" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", - "strsim 0.10.0", - "syn 2.0.60", + "strsim", + "syn 2.0.68", ] [[package]] name = "darling_macro" -version = "0.20.8" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" dependencies = [ "darling_core", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] @@ -786,7 +907,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown 0.14.3", + "hashbrown 0.14.5", "lock_api", "once_cell", "parking_lot_core", @@ -801,6 +922,17 @@ dependencies = [ "powerfmt", ] +[[package]] +name = "derive_arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.68", +] + [[package]] name = "derive_builder" version = "0.20.0" @@ -819,7 +951,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] @@ -829,7 +961,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "206868b8242f27cecce124c19fd88157fbd0dd334df2587f36417bafbc85097b" dependencies = [ "derive_builder_core", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] @@ -872,6 +1004,23 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.68", +] + +[[package]] +name = "dunce" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + [[package]] name = "dyn-stack" version = "0.10.0" @@ -884,9 +1033,9 @@ dependencies = [ [[package]] name = "either" -version = "1.11.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "encode_unicode" @@ -912,7 +1061,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] @@ -923,9 +1072,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", @@ -940,6 +1089,27 @@ dependencies = [ "cc", ] +[[package]] +name = "event-listener" +version = "5.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +dependencies = [ + "event-listener", + "pin-project-lite", +] + [[package]] name = "fancy-regex" version = "0.13.0" @@ -947,15 +1117,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "531e46835a22af56d1e3b66f04844bed63158bc094a628bec1d321d9b4c44bf2" dependencies = [ "bit-set", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", ] [[package]] name = "fastrand" -version = "2.0.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" [[package]] name = "filetime" @@ -965,7 +1135,7 @@ checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.4.1", "windows-sys 0.52.0", ] @@ -977,9 +1147,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.28" +version = "1.0.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" dependencies = [ "crc32fast", "miniz_oxide", @@ -1018,7 +1188,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] @@ -1042,6 +1212,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "futures" version = "0.3.30" @@ -1098,7 +1274,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] @@ -1147,7 +1323,7 @@ dependencies = [ "num-complex", "num-traits", "paste", - "raw-cpuid", + "raw-cpuid 10.7.0", "seq-macro", ] @@ -1162,7 +1338,7 @@ dependencies = [ "num-complex", "num-traits", "paste", - "raw-cpuid", + "raw-cpuid 10.7.0", "seq-macro", ] @@ -1177,7 +1353,7 @@ dependencies = [ "num-complex", "num-traits", "paste", - "raw-cpuid", + "raw-cpuid 10.7.0", "seq-macro", ] @@ -1195,7 +1371,7 @@ dependencies = [ "once_cell", "paste", "pulp", - "raw-cpuid", + "raw-cpuid 10.7.0", "rayon", "seq-macro", "sysctl", @@ -1214,7 +1390,7 @@ dependencies = [ "num-complex", "num-traits", "paste", - "raw-cpuid", + "raw-cpuid 10.7.0", "rayon", "seq-macro", ] @@ -1230,7 +1406,7 @@ dependencies = [ "num-complex", "num-traits", "paste", - "raw-cpuid", + "raw-cpuid 10.7.0", "seq-macro", ] @@ -1245,7 +1421,7 @@ dependencies = [ "num-complex", "num-traits", "paste", - "raw-cpuid", + "raw-cpuid 10.7.0", "seq-macro", ] @@ -1261,9 +1437,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -1284,9 +1460,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" [[package]] name = "glob" @@ -1323,6 +1499,25 @@ dependencies = [ "tracing", ] +[[package]] +name = "h2" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.1.0", + "indexmap 2.2.6", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "half" version = "2.4.1" @@ -1345,19 +1540,13 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.13.1" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ff8ae62cd3a9102e5637afc8452c55acf3844001bd5374e0b0bd7b6616c038" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash", ] -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - [[package]] name = "heck" version = "0.4.1" @@ -1379,17 +1568,17 @@ checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hf-hub" version = "0.3.2" -source = "git+https://github.com/huggingface/hf-hub?rev=b167f69692be5f49eb8003788f7f8a499a98b096#b167f69692be5f49eb8003788f7f8a499a98b096" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b780635574b3d92f036890d8373433d6f9fc7abb320ee42a5c25897fc8ed732" dependencies = [ "dirs", "futures", - "http 1.1.0", "indicatif", "log", "native-tls", "num_cpus", "rand", - "reqwest", + "reqwest 0.11.27", "serde", "serde_json", "thiserror", @@ -1451,12 +1640,12 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", - "futures-core", + "futures-util", "http 1.1.0", "http-body 1.0.0", "pin-project-lite", @@ -1464,9 +1653,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" [[package]] name = "httpdate" @@ -1476,15 +1665,15 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.28" +version = "0.14.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33" dependencies = [ "bytes", "futures-channel", "futures-core", "futures-util", - "h2", + "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", "httparse", @@ -1507,6 +1696,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", + "h2 0.4.5", "http 1.1.0", "http-body 1.0.0", "httparse", @@ -1515,6 +1705,27 @@ dependencies = [ "pin-project-lite", "smallvec", "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +dependencies = [ + "futures-util", + "http 1.1.0", + "hyper 1.3.1", + "hyper-util", + "log", + "rustls 0.23.10", + "rustls-native-certs", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", ] [[package]] @@ -1523,7 +1734,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" dependencies = [ - "hyper 0.14.28", + "hyper 0.14.29", "pin-project-lite", "tokio", "tokio-io-timeout", @@ -1536,19 +1747,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper 0.14.28", + "hyper 0.14.29", "native-tls", "tokio", "tokio-native-tls", ] +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.3.1", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + [[package]] name = "hyper-util" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" +checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56" dependencies = [ "bytes", + "futures-channel", "futures-util", "http 1.1.0", "http-body 1.0.0", @@ -1556,6 +1784,9 @@ dependencies = [ "pin-project-lite", "socket2", "tokio", + "tower", + "tower-service", + "tracing", ] [[package]] @@ -1614,7 +1845,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", - "hashbrown 0.14.3", + "hashbrown 0.14.5", "serde", ] @@ -1633,15 +1864,16 @@ dependencies = [ [[package]] name = "init-tracing-opentelemetry" -version = "0.14.1" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94bd26b1b737bc11f183620072e188d1c6ede67e0e78682228d66b49ec510e17" +checksum = "754367a7e7f9314afe3ee9780ba8b8ea2cab487cdc8017c9794793051242f878" dependencies = [ - "opentelemetry 0.20.0", - "opentelemetry-otlp", + "opentelemetry 0.22.0", + "opentelemetry-otlp 0.15.0", + "opentelemetry_sdk 0.22.1", "thiserror", "tracing", - "tracing-opentelemetry 0.21.0", + "tracing-opentelemetry 0.23.0", ] [[package]] @@ -1660,9 +1892,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] @@ -1704,6 +1936,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + [[package]] name = "itertools" version = "0.10.5" @@ -1737,6 +1975,15 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +[[package]] +name = "jobserver" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +dependencies = [ + "libc", +] + [[package]] name = "js-sys" version = "0.3.69" @@ -1748,15 +1995,31 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.153" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libloading" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e310b3a6b5907f99202fcdb4960ff45b93735d7c7d96b760fcff8db2dc0e103d" +dependencies = [ + "cfg-if", + "windows-targets 0.52.5", +] [[package]] name = "libm" @@ -1766,9 +2029,9 @@ checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] name = "libmimalloc-sys" -version = "0.1.37" +version = "0.1.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81eb4061c0582dedea1cbc7aff2240300dd6982e0239d1c99e65c1dbf4a30ba7" +checksum = "23aa6811d3bd4deb8a84dde645f943476d13b248d818edcf8ce0b2f37f036b44" dependencies = [ "cc", "libc", @@ -1780,7 +2043,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "libc", ] @@ -1792,15 +2055,15 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "lock_api" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -1812,15 +2075,6 @@ version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" -[[package]] -name = "mach2" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" -dependencies = [ - "libc", -] - [[package]] name = "macro_rules_attribute" version = "0.2.0" @@ -1863,9 +2117,9 @@ checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memmap2" @@ -1883,7 +2137,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "block", "core-graphics-types", "foreign-types 0.5.0", @@ -1894,24 +2148,26 @@ dependencies = [ [[package]] name = "metrics" -version = "0.21.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fde3af1a009ed76a778cb84fdef9e7dbbdf5775ae3e4cc1f434a6a307f6f76c5" +checksum = "884adb57038347dfbaf2d5065887b6cf4312330dc8e94bc30a1a839bd79d3261" dependencies = [ "ahash", - "metrics-macros", "portable-atomic", ] [[package]] name = "metrics-exporter-prometheus" -version = "0.12.2" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d4fa7ce7c4862db464a37b0b31d89bca874562f034bd7993895572783d02950" +checksum = "bf0af7a0d7ced10c0151f870e5e3f3f8bc9ffc5992d32873566ca1f9169ae776" dependencies = [ - "base64 0.21.7", - "hyper 0.14.28", - "indexmap 1.9.3", + "base64 0.22.1", + "http-body-util", + "hyper 1.3.1", + "hyper-rustls", + "hyper-util", + "indexmap 2.2.6", "ipnet", "metrics", "metrics-util", @@ -1921,26 +2177,15 @@ dependencies = [ "tracing", ] -[[package]] -name = "metrics-macros" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b4faf00617defe497754acde3024865bc143d44a86799b24e191ecff91354f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - [[package]] name = "metrics-util" -version = "0.15.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4de2ed6e491ed114b40b732e4d1659a9d53992ebd87490c44a6ffe23739d973e" +checksum = "4259040465c955f9f2f1a4a8a16dc46726169bca0f88e8fb2dbeced487c3e828" dependencies = [ "crossbeam-epoch", "crossbeam-utils", - "hashbrown 0.13.1", + "hashbrown 0.14.5", "metrics", "num_cpus", "quanta", @@ -1949,9 +2194,9 @@ dependencies = [ [[package]] name = "mimalloc" -version = "0.1.41" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f41a2280ded0da56c8cf898babb86e8f10651a34adcfff190ae9a1159c6908d" +checksum = "68914350ae34959d83f732418d51e2427a794055d0b9529f48259ac07af65633" dependencies = [ "libmimalloc-sys", ] @@ -1980,9 +2225,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", ] @@ -1998,11 +2243,17 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "mirai-annotations" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1" + [[package]] name = "monostate" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a20fffcd8ca4c69d31e036a71abc400147b41f90895df4edcb36497a1f8af8bf" +checksum = "0d208407d7552cd041d8cdb69a1bc3303e029c598738177a3d87082004dc0e1e" dependencies = [ "monostate-impl", "serde", @@ -2010,13 +2261,13 @@ dependencies = [ [[package]] name = "monostate-impl" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf307cbbbd777a9c10cec88ddafee572b3484caad5cce0c9236523c3803105a6" +checksum = "a7ce64b975ed4f123575d11afd9491f2e37bbd5813fbfbc0f09ae1fbddea74e0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] @@ -2033,11 +2284,10 @@ checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -2077,9 +2327,9 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "bytemuck", "num-traits", @@ -2093,9 +2343,9 @@ checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] name = "num-traits" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", "libm", @@ -2111,6 +2361,27 @@ dependencies = [ "libc", ] +[[package]] +name = "num_enum" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.68", +] + [[package]] name = "num_threads" version = "0.1.7" @@ -2147,9 +2418,9 @@ dependencies = [ [[package]] name = "object" -version = "0.32.2" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434" dependencies = [ "memchr", ] @@ -2174,7 +2445,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bb3293021f06540803301af45e7ab81693d50e89a7398a3420bdab139e7ba5e" dependencies = [ "base16ct", - "base64 0.22.0", + "base64 0.22.1", "chrono", "directories", "flate2", @@ -2228,7 +2499,7 @@ version = "0.10.64" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "cfg-if", "foreign-types 0.3.2", "libc", @@ -2245,7 +2516,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] @@ -2272,102 +2543,116 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f4b8347cc26099d3aeee044065ecc3ae11469796b4d65d065a23a584ed92a6f" dependencies = [ - "opentelemetry_api 0.19.0", + "opentelemetry_api", "opentelemetry_sdk 0.19.0", ] [[package]] name = "opentelemetry" -version = "0.20.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9591d937bc0e6d2feb6f71a559540ab300ea49955229c347a517a28d27784c54" +checksum = "900d57987be3f2aeb70d385fff9b27fb74c5723cc9a52d904d4f9c807a0667bf" dependencies = [ - "opentelemetry_api 0.20.0", - "opentelemetry_sdk 0.20.0", + "futures-core", + "futures-sink", + "js-sys", + "once_cell", + "pin-project-lite", + "thiserror", + "urlencoding", ] [[package]] name = "opentelemetry" -version = "0.21.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e32339a5dc40459130b3bd269e9892439f55b33e772d2a9d402a789baaf4e8a" +checksum = "1b69a91d4893e713e06f724597ad630f1fa76057a5e1026c0ca67054a9032a76" dependencies = [ "futures-core", "futures-sink", - "indexmap 2.2.6", "js-sys", "once_cell", "pin-project-lite", "thiserror", - "urlencoding", ] [[package]] name = "opentelemetry-otlp" -version = "0.13.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e5e5a5c4135864099f3faafbe939eb4d7f9b80ebf68a8448da961b32a7c1275" +checksum = "1a016b8d9495c639af2145ac22387dcb88e44118e45320d9238fbf4e7889abcb" dependencies = [ "async-trait", "futures-core", "http 0.2.12", - "opentelemetry-proto", + "opentelemetry 0.22.0", + "opentelemetry-proto 0.5.0", "opentelemetry-semantic-conventions", - "opentelemetry_api 0.20.0", - "opentelemetry_sdk 0.20.0", - "prost 0.11.9", + "opentelemetry_sdk 0.22.1", + "prost 0.12.6", "thiserror", "tokio", - "tonic 0.9.2", + "tonic 0.11.0", ] [[package]] -name = "opentelemetry-proto" -version = "0.3.0" +name = "opentelemetry-otlp" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e3f814aa9f8c905d0ee4bde026afd3b2577a97c10e1699912e3e44f0c4cbeb" +checksum = "a94c69209c05319cdf7460c6d4c055ed102be242a0a6245835d7bc42c6ec7f54" dependencies = [ - "opentelemetry_api 0.20.0", - "opentelemetry_sdk 0.20.0", - "prost 0.11.9", - "tonic 0.9.2", + "async-trait", + "futures-core", + "http 0.2.12", + "opentelemetry 0.23.0", + "opentelemetry-proto 0.6.0", + "opentelemetry_sdk 0.23.0", + "prost 0.12.6", + "thiserror", + "tokio", + "tonic 0.11.0", ] [[package]] -name = "opentelemetry-semantic-conventions" -version = "0.12.0" +name = "opentelemetry-proto" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73c9f9340ad135068800e7f1b24e9e09ed9e7143f5bf8518ded3d3ec69789269" +checksum = "3a8fddc9b68f5b80dae9d6f510b88e02396f006ad48cac349411fbecc80caae4" dependencies = [ - "opentelemetry 0.20.0", + "opentelemetry 0.22.0", + "opentelemetry_sdk 0.22.1", + "prost 0.12.6", + "tonic 0.11.0", ] [[package]] -name = "opentelemetry_api" -version = "0.19.0" +name = "opentelemetry-proto" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2" +checksum = "984806e6cf27f2b49282e2a05e288f30594f3dbc74eb7a6e99422bc48ed78162" dependencies = [ - "fnv", - "futures-channel", - "futures-util", - "indexmap 1.9.3", - "once_cell", - "pin-project-lite", - "thiserror", - "urlencoding", + "opentelemetry 0.23.0", + "opentelemetry_sdk 0.23.0", + "prost 0.12.6", + "tonic 0.11.0", ] +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9ab5bd6c42fb9349dcf28af2ba9a0667f697f9bdcca045d39f2cec5543e2910" + [[package]] name = "opentelemetry_api" -version = "0.20.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a81f725323db1b1206ca3da8bb19874bbd3f57c3bcd59471bfb04525b265b9b" +checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2" dependencies = [ + "fnv", "futures-channel", "futures-util", "indexmap 1.9.3", - "js-sys", "once_cell", "pin-project-lite", "thiserror", @@ -2388,7 +2673,7 @@ dependencies = [ "futures-executor", "futures-util", "once_cell", - "opentelemetry_api 0.19.0", + "opentelemetry_api", "percent-encoding", "rand", "thiserror", @@ -2396,22 +2681,21 @@ dependencies = [ [[package]] name = "opentelemetry_sdk" -version = "0.20.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa8e705a0612d48139799fcbaba0d4a90f06277153e43dd2bdc16c6f0edd8026" +checksum = "9e90c7113be649e31e9a0f8b5ee24ed7a16923b322c3c5ab6367469c049d6b7e" dependencies = [ "async-trait", "crossbeam-channel", "futures-channel", "futures-executor", "futures-util", + "glob", "once_cell", - "opentelemetry_api 0.20.0", - "ordered-float 3.9.2", + "opentelemetry 0.22.0", + "ordered-float", "percent-encoding", "rand", - "regex", - "serde_json", "thiserror", "tokio", "tokio-stream", @@ -2419,38 +2703,31 @@ dependencies = [ [[package]] name = "opentelemetry_sdk" -version = "0.21.2" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f16aec8a98a457a52664d69e0091bac3a0abd18ead9b641cb00202ba4e0efe4" +checksum = "ae312d58eaa90a82d2e627fd86e075cf5230b3f11794e2ed74199ebbe572d4fd" dependencies = [ "async-trait", - "crossbeam-channel", "futures-channel", "futures-executor", "futures-util", "glob", + "lazy_static", "once_cell", - "opentelemetry 0.21.0", - "ordered-float 4.2.0", + "opentelemetry 0.23.0", + "ordered-float", "percent-encoding", "rand", "thiserror", + "tokio", + "tokio-stream", ] [[package]] name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "ordered-float" -version = "3.9.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc" -dependencies = [ - "num-traits", -] +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "ordered-float" @@ -2467,11 +2744,17 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -2479,22 +2762,22 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.5.2", "smallvec", - "windows-targets 0.48.5", + "windows-targets 0.52.5", ] [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "percent-encoding" @@ -2504,9 +2787,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "petgraph" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", "indexmap 2.2.6", @@ -2529,7 +2812,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] @@ -2580,12 +2863,21 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.19" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ac2cf0f2e4f42b49f5ffd07dae8d746508ef7526c13940e5f524012ae6c6550" +checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ "proc-macro2", - "syn 2.0.60", + "syn 2.0.68", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.1", ] [[package]] @@ -2614,9 +2906,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.81" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] @@ -2633,12 +2925,12 @@ dependencies = [ [[package]] name = "prost" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f5d036824e4761737860779c906171497f6d55681139d8312388f8fe398922" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ "bytes", - "prost-derive 0.12.4", + "prost-derive 0.12.6", ] [[package]] @@ -2665,9 +2957,9 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80b776a1b2dc779f5ee0641f8ade0125bc1298dd41a9a0c16d8bd57b42d222b1" +checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" dependencies = [ "bytes", "heck 0.5.0", @@ -2676,11 +2968,11 @@ dependencies = [ "multimap 0.10.0", "once_cell", "petgraph", - "prettyplease 0.2.19", - "prost 0.12.4", - "prost-types 0.12.4", + "prettyplease 0.2.20", + "prost 0.12.6", + "prost-types 0.12.6", "regex", - "syn 2.0.60", + "syn 2.0.68", "tempfile", ] @@ -2699,15 +2991,15 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19de2de2a00075bf566bee3bd4db014b11587e84184d3f7a791bc17f1a8e9e48" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] @@ -2721,18 +3013,18 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3235c33eb02c1f1e212abdbe34c78b264b038fb58ca612664343271e36e55ffe" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" dependencies = [ - "prost 0.12.4", + "prost 0.12.6", ] [[package]] name = "pulp" -version = "0.18.10" +version = "0.18.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14989307e408d9f4245d4fda09a7b144a08114ba124e26cab60ab83dc98db10" +checksum = "0ec8d02258294f59e4e223b41ad7e81c874aa6b15bc4ced9ba3965826da0eed5" dependencies = [ "bytemuck", "libm", @@ -2742,20 +3034,66 @@ dependencies = [ [[package]] name = "quanta" -version = "0.11.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17e662a7a8291a865152364c20c7abc5e60486ab2001e8ec10b24862de0b9ab" +checksum = "8e5167a477619228a0b284fac2674e3c388cba90631d7b7de620e6f1fcd08da5" dependencies = [ "crossbeam-utils", "libc", - "mach2", "once_cell", - "raw-cpuid", + "raw-cpuid 11.0.2", "wasi", "web-sys", "winapi", ] +[[package]] +name = "quinn" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ceeeeabace7857413798eb1ffa1e9c905a9946a57d81fb69b4b71c4d8eb3ad" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls 0.23.10", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddf517c03a109db8100448a4be38d498df8a210a99fe0e1b9eaf39e78c640efe" +dependencies = [ + "bytes", + "rand", + "ring", + "rustc-hash", + "rustls 0.23.10", + "slab", + "thiserror", + "tinyvec", + "tracing", +] + +[[package]] +name = "quinn-udp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9096629c45860fc7fb143e125eb826b5e721e10be3263160c7d60ca832cf8c46" +dependencies = [ + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.52.0", +] + [[package]] name = "quote" version = "1.0.36" @@ -2814,6 +3152,15 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "raw-cpuid" +version = "11.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e29830cbb1290e404f24c73af91c5d8d631ce7e128691e9477556b540cd01ecd" +dependencies = [ + "bitflags 2.6.0", +] + [[package]] name = "rayon" version = "1.10.0" @@ -2860,6 +3207,15 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_syscall" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +dependencies = [ + "bitflags 2.6.0", +] + [[package]] name = "redox_users" version = "0.4.5" @@ -2873,14 +3229,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.4" +version = "1.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", ] [[package]] @@ -2894,13 +3250,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.3", + "regex-syntax 0.8.4", ] [[package]] @@ -2911,9 +3267,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "reqwest" @@ -2926,11 +3282,11 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2", + "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.28", - "hyper-tls", + "hyper 0.14.29", + "hyper-tls 0.5.0", "ipnet", "js-sys", "log", @@ -2939,7 +3295,7 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls-pemfile", + "rustls-pemfile 1.0.4", "serde", "serde_json", "serde_urlencoded", @@ -2952,7 +3308,56 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg", + "winreg 0.50.0", +] + +[[package]] +name = "reqwest" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +dependencies = [ + "base64 0.22.1", + "bytes", + "encoding_rs", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.4.5", + "http 1.1.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.3.1", + "hyper-rustls", + "hyper-tls 0.6.0", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls 0.23.10", + "rustls-pemfile 2.1.2", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "system-configuration", + "tokio", + "tokio-native-tls", + "tokio-rustls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg 0.52.0", ] [[package]] @@ -2972,9 +3377,9 @@ dependencies = [ [[package]] name = "rust-embed" -version = "8.3.0" +version = "8.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb78f46d0066053d16d4ca7b898e9343bc3530f71c61d5ad84cd404ada068745" +checksum = "19549741604902eb99a7ed0ee177a0663ee1eda51a29f71401f166e47e77806a" dependencies = [ "rust-embed-impl", "rust-embed-utils", @@ -2983,22 +3388,22 @@ dependencies = [ [[package]] name = "rust-embed-impl" -version = "8.3.0" +version = "8.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91ac2a3c6c0520a3fb3dd89321177c3c692937c4eb21893378219da10c44fc8" +checksum = "cb9f96e283ec64401f30d3df8ee2aaeb2561f34c824381efa24a35f79bf40ee4" dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.60", + "syn 2.0.68", "walkdir", ] [[package]] name = "rust-embed-utils" -version = "8.3.0" +version = "8.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f69089032567ffff4eada41c573fc43ff466c7db7c5688b2e7969584345581" +checksum = "38c74a686185620830701348de757fd36bef4aa9680fd23c49fc539ddcc1af32" dependencies = [ "sha2", "walkdir", @@ -3006,9 +3411,15 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustix" @@ -3016,7 +3427,7 @@ version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "errno", "libc", "linux-raw-sys", @@ -3037,6 +3448,35 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls" +version = "0.23.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05cff451f60db80f490f3c182b77c35260baace73209e9cdbbe526bfe3a4d402" +dependencies = [ + "aws-lc-rs", + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.1.2", + "rustls-pki-types", + "schannel", + "security-framework", +] + [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -3046,18 +3486,29 @@ dependencies = [ "base64 0.21.7", ] +[[package]] +name = "rustls-pemfile" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + [[package]] name = "rustls-pki-types" -version = "1.5.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "beb461507cee2c2ff151784c52762cf4d9ff6a61f3e80968600ed24fa837fa54" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" [[package]] name = "rustls-webpki" -version = "0.102.3" +version = "0.102.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3bce581c0dd41bce533ce695a1437fa16a7ab5ac3ccfa99fe1a620a7885eabf" +checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" dependencies = [ + "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -3065,15 +3516,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "safetensors" @@ -3111,11 +3562,11 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "security-framework" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" +checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "core-foundation", "core-foundation-sys", "libc", @@ -3124,9 +3575,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f3cc463c0ef97e11c3461a9d3787412d30e8e7eb907c79180c4a57bf7c04ef" +checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" dependencies = [ "core-foundation-sys", "libc", @@ -3140,29 +3591,29 @@ checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" [[package]] name = "serde" -version = "1.0.198" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.198" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] name = "serde_json" -version = "1.0.116" +version = "1.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" +checksum = "d947f6b3163d8857ea16c4fa0dd4840d52f3041039a85decd46867eb1abef2e4" dependencies = [ "itoa", "ryu", @@ -3190,9 +3641,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" dependencies = [ "serde", ] @@ -3244,7 +3695,7 @@ checksum = "91d129178576168c589c9ec973feedf7d3126c01ac2bf08795109aa35b69fb8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] @@ -3267,6 +3718,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -3305,25 +3762,14 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", "windows-sys 0.52.0", ] -[[package]] -name = "socks" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c3dbbd9ae980613c6dd8e28a9407b50509d3803b57624d5dfe8315218cd58b" -dependencies = [ - "byteorder", - "libc", - "winapi", -] - [[package]] name = "spin" version = "0.9.8" @@ -3348,12 +3794,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - [[package]] name = "strsim" version = "0.11.1" @@ -3362,9 +3802,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" @@ -3379,9 +3819,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.60" +version = "2.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +checksum = "901fa70d88b9d6c98022e23b4136f9f3e54e4662c3bc1bd1d84a42a9a0f0c1e9" dependencies = [ "proc-macro2", "quote", @@ -3408,7 +3848,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] @@ -3417,7 +3857,7 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec7dddc5f0fee506baf8b9fdb989e242f17e4b11c61dfbb0635b705217199eea" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "byteorder", "enum-as-inner", "libc", @@ -3448,9 +3888,9 @@ dependencies = [ [[package]] name = "tar" -version = "0.4.40" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" +checksum = "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909" dependencies = [ "filetime", "libc", @@ -3538,6 +3978,7 @@ dependencies = [ name = "text-embeddings-core" version = "1.2.3" dependencies = [ + "async-channel", "hf-hub", "metrics", "text-embeddings-backend", @@ -3555,7 +3996,7 @@ dependencies = [ "async-stream", "axum 0.7.5", "axum-tracing-opentelemetry", - "base64 0.21.7", + "base64 0.22.1", "clap", "futures", "hf-hub", @@ -3563,14 +4004,16 @@ dependencies = [ "init-tracing-opentelemetry", "insta", "is_close", + "libc", "metrics", "metrics-exporter-prometheus", "mimalloc", "num_cpus", - "opentelemetry 0.20.0", - "opentelemetry-otlp", - "prost 0.12.4", - "reqwest", + "opentelemetry 0.23.0", + "opentelemetry-otlp 0.16.0", + "opentelemetry_sdk 0.23.0", + "prost 0.12.6", + "reqwest 0.12.5", "serde", "serde_json", "text-embeddings-backend", @@ -3580,12 +4023,12 @@ dependencies = [ "tokio", "tokio-stream", "tonic 0.11.0", - "tonic-build 0.10.2", + "tonic-build 0.11.0", "tonic-health", "tonic-reflection", "tower-http", "tracing", - "tracing-opentelemetry 0.21.0", + "tracing-opentelemetry 0.24.0", "tracing-subscriber", "utoipa", "utoipa-swagger-ui", @@ -3595,22 +4038,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.59" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.59" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] @@ -3658,9 +4101,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "c55115c6fbe2d2bef26eb09ad74bde02d8255476fc0c7b515ef09fbb35742d82" dependencies = [ "tinyvec_macros", ] @@ -3692,7 +4135,7 @@ dependencies = [ "rayon", "rayon-cond", "regex", - "regex-syntax 0.8.3", + "regex-syntax 0.8.4", "serde", "serde_json", "spm_precompiled", @@ -3704,9 +4147,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.37.0" +version = "1.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" dependencies = [ "backtrace", "bytes", @@ -3733,13 +4176,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] @@ -3752,6 +4195,17 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.10", + "rustls-pki-types", + "tokio", +] + [[package]] name = "tokio-stream" version = "0.1.15" @@ -3765,50 +4219,60 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] name = "toml" -version = "0.8.12" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" +checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.22.14", ] [[package]] name = "toml_datetime" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.22.12" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap 2.2.6", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3328d4f68a705b2a4498da1d580585d39a6510f98318a2cec3018a7ec61ddef" +checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" dependencies = [ "indexmap 2.2.6", "serde", "serde_spanned", "toml_datetime", - "winnow", + "winnow 0.6.13", ] [[package]] @@ -3823,10 +4287,10 @@ dependencies = [ "bytes", "futures-core", "futures-util", - "h2", + "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.28", + "hyper 0.14.29", "hyper-timeout", "percent-encoding", "pin-project", @@ -3850,14 +4314,14 @@ dependencies = [ "axum 0.6.20", "base64 0.21.7", "bytes", - "h2", + "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.28", + "hyper 0.14.29", "hyper-timeout", "percent-encoding", "pin-project", - "prost 0.12.4", + "prost 0.12.6", "tokio", "tokio-stream", "tower", @@ -3881,15 +4345,15 @@ dependencies = [ [[package]] name = "tonic-build" -version = "0.10.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d021fc044c18582b9a2408cd0dd05b1596e3ecdb5c4df822bb0183545683889" +checksum = "be4ef6dd70a610078cb4e338a0f79d06bc759ff1b22d2120c2ff02ae264ba9c2" dependencies = [ - "prettyplease 0.2.19", + "prettyplease 0.2.20", "proc-macro2", - "prost-build 0.12.4", + "prost-build 0.12.6", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] @@ -3899,7 +4363,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2cef6e24bc96871001a7e48e820ab240b3de2201e59b517cf52835df2f1d2350" dependencies = [ "async-stream", - "prost 0.12.4", + "prost 0.12.6", "tokio", "tokio-stream", "tonic 0.11.0", @@ -3911,8 +4375,8 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "548c227bd5c0fae5925812c4ec6c66ffcfced23ea370cb823f4d18f0fc1cb6a7" dependencies = [ - "prost 0.12.4", - "prost-types 0.12.4", + "prost 0.12.6", + "prost-types 0.12.6", "tokio", "tokio-stream", "tonic 0.11.0", @@ -3944,7 +4408,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "bytes", "http 1.1.0", "http-body 1.0.0", @@ -3986,7 +4450,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] @@ -4037,30 +4501,32 @@ dependencies = [ [[package]] name = "tracing-opentelemetry" -version = "0.21.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75327c6b667828ddc28f5e3f169036cb793c3f588d83bf0f262a7f062ffed3c8" +checksum = "a9be14ba1bbe4ab79e9229f7f89fab8d120b865859f10527f31c033e599d2284" dependencies = [ + "js-sys", "once_cell", - "opentelemetry 0.20.0", - "opentelemetry_sdk 0.20.0", + "opentelemetry 0.22.0", + "opentelemetry_sdk 0.22.1", "smallvec", "tracing", "tracing-core", - "tracing-log 0.1.4", + "tracing-log 0.2.0", "tracing-subscriber", + "web-time", ] [[package]] name = "tracing-opentelemetry" -version = "0.22.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c67ac25c5407e7b961fafc6f7e9aa5958fd297aada2d20fa2ae1737357e55596" +checksum = "f68803492bf28ab40aeccaecc7021096bd256baf7ca77c3d425d89b35a7be4e4" dependencies = [ "js-sys", "once_cell", - "opentelemetry 0.21.0", - "opentelemetry_sdk 0.21.2", + "opentelemetry 0.23.0", + "opentelemetry_sdk 0.23.0", "smallvec", "tracing", "tracing-core", @@ -4071,14 +4537,14 @@ dependencies = [ [[package]] name = "tracing-opentelemetry-instrumentation-sdk" -version = "0.17.1" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9db99a4f5224920c499515a737e2749eb9a19b729b3880afc24594524e9861de" +checksum = "9a276058193f1b03d8279356215ec4c8c1bb21e40e5554bb239aa94fb2d8e189" dependencies = [ "http 1.1.0", - "opentelemetry 0.21.0", + "opentelemetry 0.22.0", "tracing", - "tracing-opentelemetry 0.22.0", + "tracing-opentelemetry 0.23.0", ] [[package]] @@ -4171,9 +4637,9 @@ checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" [[package]] name = "unicode-width" -version = "0.1.11" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" [[package]] name = "unicode_categories" @@ -4195,30 +4661,29 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "ureq" -version = "2.9.6" +version = "2.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11f214ce18d8b2cbe84ed3aa6486ed3f5b285cf8d8fbdbce9f3f767a724adc35" +checksum = "d11a831e3c0b56e438a28308e7c810799e3c118417f342d30ecec080105395cd" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "flate2", "log", "native-tls", "once_cell", - "rustls", + "rustls 0.22.4", "rustls-pki-types", "rustls-webpki", "serde", "serde_json", - "socks", "url", "webpki-roots", ] [[package]] name = "url" -version = "2.5.0" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", "idna", @@ -4233,15 +4698,15 @@ checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" [[package]] name = "utf8parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "utoipa" -version = "4.2.0" +version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "272ebdfbc99111033031d2f10e018836056e4d2c8e2acda76450ec7974269fa7" +checksum = "c5afb1a60e207dca502682537fefcfd9921e71d0b83e9576060f09abc6efab23" dependencies = [ "indexmap 2.2.6", "serde", @@ -4251,38 +4716,40 @@ dependencies = [ [[package]] name = "utoipa-gen" -version = "4.2.0" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3c9f4d08338c1bfa70dde39412a040a884c6f318b3d09aaaf3437a1e52027fc" +checksum = "7bf0e16c02bc4bf5322ab65f10ab1149bdbcaa782cba66dc7057370a3f8190be" dependencies = [ "proc-macro-error", "proc-macro2", "quote", "regex", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] name = "utoipa-swagger-ui" -version = "6.0.0" +version = "7.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b39868d43c011961e04b41623e050aedf2cc93652562ff7935ce0f819aaf2da" +checksum = "943e0ff606c6d57d410fd5663a4d7c074ab2c5f14ab903b9514565e59fa1189e" dependencies = [ "axum 0.7.5", "mime_guess", "regex", + "reqwest 0.12.5", "rust-embed", "serde", "serde_json", + "url", "utoipa", - "zip", + "zip 1.1.4", ] [[package]] name = "uuid" -version = "1.8.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "5de17fd2f7da591098415cff336e12965a28061ddace43b59cb3c430179c9439" dependencies = [ "getrandom", ] @@ -4317,7 +4784,7 @@ checksum = "cff2381c6b31ab2555441e382d699a56c3551d0cfdf0c4df5617bf271c1dd102" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] @@ -4384,7 +4851,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", "wasm-bindgen-shared", ] @@ -4418,7 +4885,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4441,9 +4908,9 @@ dependencies = [ [[package]] name = "web-time" -version = "0.2.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", @@ -4451,9 +4918,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.1" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3de34ae270483955a94f4b21bdaaeb83d508bb84a01435f393818edb0012009" +checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" dependencies = [ "rustls-pki-types", ] @@ -4651,9 +5118,18 @@ checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" [[package]] name = "winnow" -version = "0.6.6" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c976aaaa0e1f90dbb21e9587cdaf1d9679a1cde8875c0d6bd83ab96a208352" +checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" dependencies = [ "memchr", ] @@ -4668,6 +5144,16 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + [[package]] name = "xattr" version = "1.3.1" @@ -4690,9 +5176,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e71b2e4f287f467794c671e2b8f8a5f3716b3c829079a1c44740148eff07e4" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" dependencies = [ "serde", "stable_deref_trait", @@ -4702,62 +5188,76 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e6936f0cce458098a201c245a11bef556c6a0181129c7034d10d76d1ec3a2b8" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", "synstructure", ] [[package]] name = "zerocopy" -version = "0.7.32" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.32" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", ] [[package]] name = "zerofrom" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "655b0814c5c0b19ade497851070c640773304939a6c0fd5f5fb43da0696d05b7" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6a647510471d372f2e6c2e6b7219e44d8c574d24fdc11c610a61455782f18c3" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.68", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.0" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63381fa6624bf92130a6b87c0d07380116f80b565c42cf0d754136f0238359ef" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.68", +] [[package]] name = "zip" @@ -4768,5 +5268,20 @@ dependencies = [ "byteorder", "crc32fast", "crossbeam-utils", +] + +[[package]] +name = "zip" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cc23c04387f4da0374be4533ad1208cbb091d5c11d070dfef13676ad6497164" +dependencies = [ + "arbitrary", + "crc32fast", + "crossbeam-utils", + "displaydoc", "flate2", + "indexmap 2.2.6", + "num_enum", + "thiserror", ] diff --git a/Cargo.toml b/Cargo.toml index f8198679..950c900c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,13 +16,26 @@ edition = "2021" authors = ["Olivier Dehaene"] homepage = "https://github.com/huggingface/text-embeddings-inference" +[workspace.dependencies] +anyhow = "1.0.75" +clap = { version = "4.1", features = ["derive", "env"] } +hf-hub = { version = "0.3.2", features = ["tokio", "online"], default-features = false } +metrics = "0.23" +nohash-hasher = "0.2" +tokenizers = { version = "0.19.1", default-features = false, features = ["onig", "esaxx_fast"] } +tokio = { version = "1.25", features = ["rt", "rt-multi-thread", "parking_lot", "sync", "signal"] } +tracing = "0.1" +serde = { version = "1.0", features = ["serde_derive"] } +serde_json = "1.0" +thiserror = "1.0" + + [patch.crates-io] cudarc = { git = "https://github.com/coreylowman/cudarc", rev = "c388e724af93a3e8fbe484f5ded2d8b3c1badd8e" } candle = { git = "https://github.com/OlivierDehaene/candle", rev = "33b7ecf9ed82bb7c20f1a94555218fabfbaa2fe3", package = "candle-core" } candle-nn = { git = "https://github.com/OlivierDehaene/candle", rev = "33b7ecf9ed82bb7c20f1a94555218fabfbaa2fe3", package = "candle-nn" } candle-transformers = { git = "https://github.com/OlivierDehaene/candle", rev = "33b7ecf9ed82bb7c20f1a94555218fabfbaa2fe3", package = "candle-transformers" } candle-flash-attn = { git = "https://github.com/OlivierDehaene/candle", rev = "33b7ecf9ed82bb7c20f1a94555218fabfbaa2fe3", package = "candle-flash-attn" } -hf-hub = { git = "https://github.com/huggingface/hf-hub", rev = "b167f69692be5f49eb8003788f7f8a499a98b096" } [profile.release] debug = 0 diff --git a/backends/Cargo.toml b/backends/Cargo.toml index 3a6797cb..d5659b18 100644 --- a/backends/Cargo.toml +++ b/backends/Cargo.toml @@ -6,12 +6,12 @@ authors.workspace = true homepage.workspace = true [dependencies] -clap = { version = "4.1.4", features = ["derive"], optional = true } +clap = { workspace = true, optional = true } text-embeddings-backend-core = { path = "core" } text-embeddings-backend-python = { path = "python", optional = true } text-embeddings-backend-candle = { path = "candle", optional = true } -tokio = { version = "^1.25", features = ["sync"] } -tracing = "^0.1" +tokio = { workspace = true } +tracing = { workspace = true } [features] clap = ["dep:clap", "text-embeddings-backend-core/clap"] diff --git a/backends/candle/Cargo.toml b/backends/candle/Cargo.toml index 9fb300b9..f26d213a 100644 --- a/backends/candle/Cargo.toml +++ b/backends/candle/Cargo.toml @@ -6,7 +6,7 @@ authors.workspace = true homepage.workspace = true [dependencies] -anyhow = "^1.0" +anyhow = { workspace = true } accelerate-src = { version = "0.3.2", optional = true } intel-mkl-src = { version = "0.8.1", optional = true } candle = { version = "*", package = "candle-core", default-features = false } @@ -17,21 +17,21 @@ candle-flash-attn-v1 = { git = "https://github.com/huggingface/candle-flash-attn candle-cublaslt = { git = "https://github.com/huggingface/candle-cublaslt", rev = "cf789b7dd6d4abb19b03b9556442f94f0588b4a0", optional = true } candle-layer-norm = { git = "https://github.com/huggingface/candle-layer-norm", rev = "94c2add7d94c2d63aebde77f7534614e04dbaea1", optional = true } candle-rotary = { git = "https://github.com/huggingface/candle-rotary", rev = "0a718a0856569a92f3112e64f10d07e4447822e8", optional = true } -nohash-hasher = "^0.2" +nohash-hasher = { workspace = true } text-embeddings-backend-core = { path = "../core" } -tracing = "^0.1" +tracing = { workspace = true } safetensors = "^0.4" -thiserror = "^1.0" -serde = { version = "^1.0", features = ["serde_derive"] } -serde_json = "^1.0" +thiserror = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } memmap2 = "^0.9" [dev-dependencies] insta = { git = "https://github.com/OlivierDehaene/insta", rev = "f4f98c0410b91fb5a28b10df98e4422955be9c2c", features = ["yaml"] } is_close = "0.1.3" hf-hub = "0.3.2" -anyhow = "1.0.75" -tokenizers = { version = "^0.19.1", default-features = false, features = ["onig", "esaxx_fast"] } +anyhow = { workspace = true } +tokenizers = { workspace = true } serial_test = "2.0.0" [build-dependencies] diff --git a/backends/core/Cargo.toml b/backends/core/Cargo.toml index 5e330715..754f9526 100644 --- a/backends/core/Cargo.toml +++ b/backends/core/Cargo.toml @@ -6,9 +6,9 @@ authors.workspace = true homepage.workspace = true [dependencies] -thiserror = "^1.0" -clap = { version = "^4.1", features = ["derive"], optional = true } -nohash-hasher = "^0.2" +thiserror = { workspace = true } +clap = { workspace = true, optional = true } +nohash-hasher = { workspace = true } [features] clap = ["dep:clap"] diff --git a/backends/src/lib.rs b/backends/src/lib.rs index d332b4a7..220e05cb 100644 --- a/backends/src/lib.rs +++ b/backends/src/lib.rs @@ -22,7 +22,7 @@ use text_embeddings_backend_python::PythonBackend; #[derive(Debug, Clone)] pub struct Backend { /// Channel to communicate with the background thread - backend_sender: mpsc::UnboundedSender, + backend_sender: mpsc::Sender, /// Health status health_receiver: watch::Receiver, _backend_thread: Arc, @@ -40,7 +40,7 @@ impl Backend { otlp_endpoint: Option, otlp_service_name: String, ) -> Result { - let (backend_sender, backend_receiver) = mpsc::unbounded_channel(); + let (backend_sender, backend_receiver) = mpsc::channel(8); let backend = init_backend( model_path, @@ -76,6 +76,7 @@ impl Backend { let (sender, receiver) = oneshot::channel(); self.backend_sender .send(BackendCommand::Health(Span::current(), sender)) + .await .expect("No backend receiver. This is a bug."); receiver.await.expect( "Backend blocking task dropped the sender without sending a response. This is a bug.", @@ -110,7 +111,7 @@ impl Backend { let (sender, receiver) = oneshot::channel(); self.backend_sender - .send(BackendCommand::Embed(batch, Span::current(), sender)) + .try_send(BackendCommand::Embed(batch, Span::current(), sender)) .expect("No backend receiver. This is a bug."); receiver.await.expect( "Backend blocking task dropped the sender without send a response. This is a bug.", @@ -122,7 +123,7 @@ impl Backend { let (sender, receiver) = oneshot::channel(); self.backend_sender - .send(BackendCommand::Predict(batch, Span::current(), sender)) + .try_send(BackendCommand::Predict(batch, Span::current(), sender)) .expect("No backend receiver. This is a bug."); receiver.await.expect( "Backend blocking task dropped the sender without send a response. This is a bug.", @@ -174,7 +175,7 @@ struct BackendThread(Option>); impl BackendThread { fn new( backend: Box, - mut backend_receiver: mpsc::UnboundedReceiver, + mut backend_receiver: mpsc::Receiver, health_sender: watch::Sender, ) -> Self { let handle = std::thread::spawn(move || { diff --git a/core/Cargo.toml b/core/Cargo.toml index 0e83c744..d2f23eb0 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -6,10 +6,11 @@ authors.workspace = true homepage.workspace = true [dependencies] -hf-hub = { version = "^0.3.0", features = ["tokio"], default-features = false } -metrics = "^0.21" +async-channel = "^2.3" +hf-hub = { workspace = true } +metrics = { workspace = true } text-embeddings-backend = { path = "../backends" } -thiserror = "^1.0" -tokenizers = { version = "^0.19.1", default-features = false, features = ["onig", "esaxx_fast"] } -tracing = "^0.1" -tokio = { version = "^1.25", features = ["rt", "rt-multi-thread", "parking_lot", "sync"] } +thiserror = { workspace = true } +tokenizers = { workspace = true } +tracing = { workspace = true } +tokio = { workspace = true } diff --git a/core/src/infer.rs b/core/src/infer.rs index 0f95ff8b..66d04e19 100644 --- a/core/src/infer.rs +++ b/core/src/infer.rs @@ -30,14 +30,10 @@ impl Infer { ) -> Self { let notify_batching_task = Arc::new(Notify::new()); - let (embed_sender, embed_receiver) = mpsc::unbounded_channel(); + // Bound channel to 1 to be able to prefetch one batch + let (embed_sender, embed_receiver) = mpsc::channel(1); - // Create two batching tasks to prefetch batches - tokio::spawn(batching_task( - queue.clone(), - notify_batching_task.clone(), - embed_sender.clone(), - )); + // Batching task tokio::spawn(batching_task( queue.clone(), notify_batching_task.clone(), @@ -59,7 +55,7 @@ impl Infer { } } - #[instrument(skip(self))] + #[instrument(skip(self, inputs))] pub async fn tokenize + std::fmt::Debug>( &self, inputs: I, @@ -69,13 +65,14 @@ impl Infer { .tokenize(inputs.into(), add_special_tokens) .await .map_err(|err| { - metrics::increment_counter!("te_request_failure", "err" => "tokenization"); + let counter = metrics::counter!("te_request_failure", "err" => "tokenization"); + counter.increment(1); tracing::error!("{err}"); err }) } - #[instrument(skip(self))] + #[instrument(skip(self, ids))] pub async fn decode( &self, ids: Vec, @@ -85,7 +82,8 @@ impl Infer { .decode(ids, skip_special_tokens) .await .map_err(|err| { - metrics::increment_counter!("te_request_failure", "err" => "tokenization"); + let counter = metrics::counter!("te_request_failure", "err" => "tokenization"); + counter.increment(1); tracing::error!("{err}"); err }) @@ -98,11 +96,13 @@ impl Infer { .limit_concurrent_requests .try_acquire_owned() .map_err(|err| { - metrics::increment_counter!("te_request_failure", "err" => "overloaded"); + let counter = metrics::counter!("te_request_failure", "err" => "overloaded"); + counter.increment(1); tracing::error!("{err}"); TextEmbeddingsError::from(err) }) } + #[instrument(skip(self))] pub async fn acquire_permit(&self) -> OwnedSemaphorePermit { // Limit concurrent requests by acquiring a permit from the semaphore @@ -113,7 +113,7 @@ impl Infer { .expect("Semaphore has been closed. This is a bug.") } - #[instrument(skip(self, permit))] + #[instrument(skip(self, inputs, permit))] pub async fn embed_all + std::fmt::Debug>( &self, inputs: I, @@ -124,7 +124,8 @@ impl Infer { let start_time = Instant::now(); if self.is_splade() { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); + counter.increment(1); let message = "`embed_all` is not available for SPLADE models".to_string(); tracing::error!("{message}"); return Err(TextEmbeddingsError::Backend(BackendError::Inference( @@ -151,25 +152,21 @@ impl Infer { let total_time = start_time.elapsed(); // Metrics - metrics::increment_counter!("te_embed_success"); - metrics::histogram!("te_embed_duration", total_time.as_secs_f64()); - metrics::histogram!( - "te_embed_tokenization_duration", - response.metadata.tokenization.as_secs_f64() - ); - metrics::histogram!( - "te_embed_queue_duration", - response.metadata.queue.as_secs_f64() - ); - metrics::histogram!( - "te_embed_inference_duration", - response.metadata.inference.as_secs_f64() - ); + let counter = metrics::counter!("te_embed_success"); + counter.increment(1); + let histogram = metrics::histogram!("te_embed_duration"); + histogram.record(total_time.as_secs_f64()); + let histogram = metrics::histogram!("te_embed_tokenization_duration"); + histogram.record(response.metadata.tokenization.as_secs_f64()); + let histogram = metrics::histogram!("te_embed_queue_duration"); + histogram.record(response.metadata.queue.as_secs_f64()); + let histogram = metrics::histogram!("te_embed_inference_duration"); + histogram.record(response.metadata.inference.as_secs_f64()); Ok(response) } - #[instrument(skip(self, permit))] + #[instrument(skip(self, inputs, permit))] pub async fn embed_sparse + std::fmt::Debug>( &self, inputs: I, @@ -180,7 +177,8 @@ impl Infer { let start_time = Instant::now(); if !self.is_splade() { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); + counter.increment(1); let message = "Model is not an embedding model with SPLADE pooling".to_string(); tracing::error!("{message}"); return Err(TextEmbeddingsError::Backend(BackendError::Inference( @@ -207,25 +205,21 @@ impl Infer { let total_time = start_time.elapsed(); // Metrics - metrics::increment_counter!("te_embed_success"); - metrics::histogram!("te_embed_duration", total_time.as_secs_f64()); - metrics::histogram!( - "te_embed_tokenization_duration", - response.metadata.tokenization.as_secs_f64() - ); - metrics::histogram!( - "te_embed_queue_duration", - response.metadata.queue.as_secs_f64() - ); - metrics::histogram!( - "te_embed_inference_duration", - response.metadata.inference.as_secs_f64() - ); + let counter = metrics::counter!("te_embed_success"); + counter.increment(1); + let histogram = metrics::histogram!("te_embed_duration"); + histogram.record(total_time.as_secs_f64()); + let histogram = metrics::histogram!("te_embed_tokenization_duration"); + histogram.record(response.metadata.tokenization.as_secs_f64()); + let histogram = metrics::histogram!("te_embed_queue_duration"); + histogram.record(response.metadata.queue.as_secs_f64()); + let histogram = metrics::histogram!("te_embed_inference_duration"); + histogram.record(response.metadata.inference.as_secs_f64()); Ok(response) } - #[instrument(skip(self, permit))] + #[instrument(skip(self, inputs, permit))] pub async fn embed_pooled + std::fmt::Debug>( &self, inputs: I, @@ -237,7 +231,8 @@ impl Infer { let start_time = Instant::now(); if self.is_splade() && normalize { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); + counter.increment(1); let message = "`normalize` is not available for SPLADE models".to_string(); tracing::error!("{message}"); return Err(TextEmbeddingsError::Backend(BackendError::Inference( @@ -281,20 +276,16 @@ impl Infer { let total_time = start_time.elapsed(); // Metrics - metrics::increment_counter!("te_embed_success"); - metrics::histogram!("te_embed_duration", total_time.as_secs_f64()); - metrics::histogram!( - "te_embed_tokenization_duration", - response.metadata.tokenization.as_secs_f64() - ); - metrics::histogram!( - "te_embed_queue_duration", - response.metadata.queue.as_secs_f64() - ); - metrics::histogram!( - "te_embed_inference_duration", - response.metadata.inference.as_secs_f64() - ); + let counter = metrics::counter!("te_embed_success"); + counter.increment(1); + let histogram = metrics::histogram!("te_embed_duration"); + histogram.record(total_time.as_secs_f64()); + let histogram = metrics::histogram!("te_embed_tokenization_duration"); + histogram.record(response.metadata.tokenization.as_secs_f64()); + let histogram = metrics::histogram!("te_embed_queue_duration"); + histogram.record(response.metadata.queue.as_secs_f64()); + let histogram = metrics::histogram!("te_embed_inference_duration"); + histogram.record(response.metadata.inference.as_secs_f64()); Ok(response) } @@ -309,7 +300,8 @@ impl Infer { _permit: OwnedSemaphorePermit, ) -> Result { if self.is_classifier() { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); + counter.increment(1); let message = "Model is not an embedding model".to_string(); tracing::error!("{message}"); return Err(TextEmbeddingsError::Backend(BackendError::Inference( @@ -317,7 +309,8 @@ impl Infer { ))); } - metrics::increment_counter!("te_embed_count"); + let counter = metrics::counter!("te_embed_count"); + counter.increment(1); // Tokenization let encoding = self @@ -325,7 +318,8 @@ impl Infer { .encode(inputs.into(), truncate, truncation_direction) .await .map_err(|err| { - metrics::increment_counter!("te_request_failure", "err" => "tokenization"); + let counter = metrics::counter!("te_request_failure", "err" => "tokenization"); + counter.increment(1); tracing::error!("{err}"); err })?; @@ -353,7 +347,8 @@ impl Infer { "Infer batching task dropped the sender without sending a response. This is a bug.", ) .map_err(|err| { - metrics::increment_counter!("te_request_failure", "err" => "inference"); + let counter = metrics::counter!("te_request_failure", "err" => "inference"); + counter.increment(1); tracing::error!("{err}"); err })?; @@ -361,7 +356,7 @@ impl Infer { Ok(response) } - #[instrument(skip(self, _permit))] + #[instrument(skip(self, inputs, _permit))] pub async fn predict + std::fmt::Debug>( &self, inputs: I, @@ -371,7 +366,8 @@ impl Infer { _permit: OwnedSemaphorePermit, ) -> Result { if !self.is_classifier() { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); + counter.increment(1); let message = "Model is not a classifier model".to_string(); return Err(TextEmbeddingsError::Backend(BackendError::Inference( message, @@ -379,7 +375,8 @@ impl Infer { } let start_time = Instant::now(); - metrics::increment_counter!("te_predict_count"); + let counter = metrics::counter!("te_predict_count"); + counter.increment(1); // Tokenization let encoding = self @@ -387,7 +384,8 @@ impl Infer { .encode(inputs.into(), truncate, truncation_direction) .await .map_err(|err| { - metrics::increment_counter!("te_request_failure", "err" => "tokenization"); + let counter = metrics::counter!("te_request_failure", "err" => "tokenization"); + counter.increment(1); tracing::error!("{err}"); err })?; @@ -415,7 +413,8 @@ impl Infer { "Infer batching task dropped the sender without sending a response. This is a bug.", ) .map_err(|err| { - metrics::increment_counter!("te_request_failure", "err" => "inference"); + let counter = metrics::counter!("te_request_failure", "err" => "inference"); + counter.increment(1); tracing::error!("{err}"); err })?; @@ -452,20 +451,16 @@ impl Infer { let total_time = start_time.elapsed(); // Metrics - metrics::increment_counter!("te_predict_success"); - metrics::histogram!("te_predict_duration", total_time.as_secs_f64()); - metrics::histogram!( - "te_predict_tokenization_duration", - response.metadata.tokenization.as_secs_f64() - ); - metrics::histogram!( - "te_predict_queue_duration", - response.metadata.queue.as_secs_f64() - ); - metrics::histogram!( - "te_predict_inference_duration", - response.metadata.inference.as_secs_f64() - ); + let counter = metrics::counter!("te_predict_success"); + counter.increment(1); + let histogram = metrics::histogram!("te_predict_duration"); + histogram.record(total_time.as_secs_f64()); + let histogram = metrics::histogram!("te_predict_tokenization_duration"); + histogram.record(response.metadata.tokenization.as_secs_f64()); + let histogram = metrics::histogram!("te_predict_queue_duration"); + histogram.record(response.metadata.queue.as_secs_f64()); + let histogram = metrics::histogram!("te_predict_inference_duration"); + histogram.record(response.metadata.inference.as_secs_f64()); Ok(response) } @@ -495,30 +490,22 @@ impl Infer { } #[instrument(skip_all)] -async fn batching_task( - queue: Queue, - notify: Arc, - embed_sender: mpsc::UnboundedSender<(NextBatch, oneshot::Sender<()>)>, -) { +async fn batching_task(queue: Queue, notify: Arc, embed_sender: mpsc::Sender) { loop { notify.notified().await; while let Some(next_batch) = queue.next_batch().await { - let (callback_sender, callback_receiver) = oneshot::channel(); embed_sender - .send((next_batch, callback_sender)) + .send(next_batch) + .await .expect("embed receiver was dropped. This is a bug."); - let _ = callback_receiver.await; } } } #[instrument(skip_all)] -async fn backend_task( - backend: Backend, - mut embed_receiver: mpsc::UnboundedReceiver<(NextBatch, oneshot::Sender<()>)>, -) { - while let Some((batch, _callback)) = embed_receiver.recv().await { +async fn backend_task(backend: Backend, mut embed_receiver: mpsc::Receiver) { + while let Some(batch) = embed_receiver.recv().await { match &backend.model_type { ModelType::Classifier => { let results = backend.predict(batch.1).await; diff --git a/core/src/queue.rs b/core/src/queue.rs index dfefda21..3fd8b771 100644 --- a/core/src/queue.rs +++ b/core/src/queue.rs @@ -35,7 +35,7 @@ pub struct Metadata { #[derive(Debug, Clone)] pub struct Queue { /// Channel to communicate with the background queue task - queue_sender: mpsc::UnboundedSender, + queue_sender: mpsc::Sender, } impl Queue { @@ -46,7 +46,7 @@ impl Queue { max_concurrent_requests: usize, ) -> Self { // Create channels - let (queue_sender, queue_receiver) = mpsc::unbounded_channel(); + let (queue_sender, queue_receiver) = mpsc::channel(max_concurrent_requests); // Launch background queue task std::thread::spawn(move || { @@ -68,8 +68,8 @@ impl Queue { // Send append command to the background task managing the state // Unwrap is safe here self.queue_sender - .send(QueueCommand::Append(Box::new(entry), Span::current())) - .expect("Queue background task dropped the receiver. This is a bug."); + .try_send(QueueCommand::Append(Box::new(entry), Span::current())) + .expect("Queue background task dropped the receiver or the receiver is too behind. This is a bug."); } /// Get the next batch from the queue @@ -80,11 +80,11 @@ impl Queue { // Send next batch command to the background task managing the state // Unwrap is safe here self.queue_sender - .send(QueueCommand::NextBatch { + .try_send(QueueCommand::NextBatch { response_sender, span: Span::current(), }) - .expect("Queue background task dropped the receiver. This is a bug."); + .expect("Queue background task dropped the receiver or the receiver is too behind. This is a bug."); // Await on response channel // Unwrap is safe here response_receiver.await.expect( @@ -99,7 +99,7 @@ fn queue_blocking_task( max_batch_tokens: usize, max_batch_requests: Option, max_concurrent_requests: usize, - mut queue_receiver: mpsc::UnboundedReceiver, + mut queue_receiver: mpsc::Receiver, ) { let capacity = max_batch_requests.unwrap_or(max_concurrent_requests); @@ -110,7 +110,8 @@ fn queue_blocking_task( QueueCommand::Append(entry, span) => { let _span = span.entered(); entries.push_back(*entry); - metrics::increment_gauge!("te_queue_size", 1.0); + let gauge = metrics::gauge!("te_queue_size"); + gauge.increment(1.0); } QueueCommand::NextBatch { response_sender, @@ -137,7 +138,8 @@ fn queue_blocking_task( // Filter entries where the response receiver was dropped (== entries where the request // was dropped by the client) if entry.metadata.response_tx.is_closed() { - metrics::increment_counter!("te_request_failure", "err" => "dropped"); + let counter = metrics::counter!("te_request_failure", "err" => "dropped"); + counter.increment(1); continue; } @@ -197,9 +199,12 @@ fn queue_blocking_task( let _ = response_sender.send(next_batch); - metrics::histogram!("te_batch_next_size", batch_size as f64); - metrics::histogram!("te_batch_next_tokens", current_tokens as f64); - metrics::gauge!("te_queue_size", entries.len() as f64); + let histogram = metrics::histogram!("te_batch_next_size"); + histogram.record(batch_size as f64); + let histogram = metrics::histogram!("te_batch_next_tokens"); + histogram.record(current_tokens as f64); + let gauge = metrics::gauge!("te_queue_size"); + gauge.set(entries.len() as f64) } } } diff --git a/core/src/tokenization.rs b/core/src/tokenization.rs index 07226823..ae281691 100644 --- a/core/src/tokenization.rs +++ b/core/src/tokenization.rs @@ -3,14 +3,14 @@ use crate::TextEmbeddingsError; use tokenizers::tokenizer::Tokenizer; pub use tokenizers::Encoding as RawEncoding; use tokenizers::{TruncationDirection, TruncationParams, TruncationStrategy}; -use tokio::sync::{mpsc, oneshot}; +use tokio::sync::oneshot; use tracing::{instrument, Span}; /// Validation #[derive(Debug, Clone)] pub struct Tokenization { /// Channel to communicate with the background tokenization task - sender: mpsc::UnboundedSender, + sender: async_channel::Sender, } impl Tokenization { @@ -23,39 +23,23 @@ impl Tokenization { tracing::info!("Starting {workers} tokenization workers"); // Create channel - let (sender, mut round_robin_receiver) = mpsc::unbounded_channel(); - let mut senders = Vec::with_capacity(workers); + let (sender, receiver) = async_channel::bounded(workers * 4); // Create workers for _ in 0..workers { let tokenizer_clone = tokenizer.clone(); - let (tokenizer_sender, tokenizer_receiver) = mpsc::unbounded_channel(); - senders.push(tokenizer_sender); - + let receiver_clone = receiver.clone(); // Spawn worker std::thread::spawn(move || { tokenizer_worker( tokenizer_clone, max_input_length, position_offset, - tokenizer_receiver, + receiver_clone, ) }); } - // Create tokenization round robin task - tokio::spawn(async move { - // Loop over requests - loop { - for sender in &senders { - match round_robin_receiver.recv().await { - None => return, - Some(request) => sender.send(request).unwrap(), - }; - } - } - }); - Self { sender } } @@ -85,6 +69,7 @@ impl Tokenization { response_sender, Span::current(), )) + .await .expect("Tokenization background task dropped the receiver. This is a bug."); // Await on response channel @@ -116,6 +101,7 @@ impl Tokenization { response_sender, Span::current(), )) + .await .expect("Tokenization background task dropped the receiver. This is a bug."); // Await on response channel @@ -147,6 +133,7 @@ impl Tokenization { response_sender, Span::current(), )) + .await .expect("Tokenization background task dropped the receiver. This is a bug."); // Await on response channel @@ -160,10 +147,10 @@ fn tokenizer_worker( mut tokenizer: Tokenizer, max_input_length: usize, position_offset: usize, - mut receiver: mpsc::UnboundedReceiver, + receiver: async_channel::Receiver, ) { // Loop over requests - while let Some(request) = receiver.blocking_recv() { + while let Ok(request) = receiver.recv_blocking() { match request { TokenizerRequest::Encode( inputs, @@ -277,7 +264,8 @@ fn encode_input( "`inputs` must have less than {max_input_length} tokens. Given: {seq_len}" ))); } - metrics::histogram!("te_request_input_length", seq_len as f64); + let histogram = metrics::histogram!("te_request_input_length"); + histogram.record(seq_len as f64); Ok(ValidEncoding { input_ids: encoding.get_ids().to_vec(), token_type_ids: encoding.get_type_ids().to_vec(), diff --git a/load_tests/load.js b/load_tests/load.js index b7e4524e..86719b25 100644 --- a/load_tests/load.js +++ b/load_tests/load.js @@ -2,7 +2,7 @@ import {check} from 'k6'; import http from 'k6/http'; import {Trend} from 'k6/metrics'; -const host = __ENV.HOST || '127.0.0.1:8080'; +const host = __ENV.HOST || '127.0.0.1:3000'; const totalTime = new Trend('total_time', true); const tokenizationTIme = new Trend('tokenization_time', true); @@ -36,8 +36,9 @@ export const options = { export default function () { const payload = JSON.stringify({ - query: inputs, - texts: [inputs], + inputs: inputs, + // query: inputs, + // texts: [inputs], truncate: true, }); diff --git a/load_tests/load_grpc.js b/load_tests/load_grpc.js index bce6834e..30d2676a 100644 --- a/load_tests/load_grpc.js +++ b/load_tests/load_grpc.js @@ -2,7 +2,7 @@ import {check} from 'k6'; import grpc from 'k6/experimental/grpc'; import {Trend} from 'k6/metrics'; -const host = __ENV.HOST || '127.0.0.1:8080'; +const host = __ENV.HOST || '127.0.0.1:3000'; const totalTime = new Trend('total_time', true); const tokenizationTIme = new Trend('tokenization_time', true); @@ -25,7 +25,7 @@ export const options = { // }, load_test: { executor: 'constant-arrival-rate', - duration: '30s', + duration: '5m', preAllocatedVUs: 5000, rate: 1000, timeUnit: '1s', diff --git a/router/Cargo.toml b/router/Cargo.toml index 2f2b0815..44e56015 100644 --- a/router/Cargo.toml +++ b/router/Cargo.toml @@ -15,38 +15,38 @@ name = "text-embeddings-router" path = "src/main.rs" [dependencies] -anyhow = "1.0.71" +anyhow = { workspace = true } text-embeddings-backend = { path = "../backends", features = ["clap"] } text-embeddings-core = { path = "../core" } -clap = { version = "4.1.4", features = ["derive", "env"] } +clap = { workspace = true } futures = "^0.3" -init-tracing-opentelemetry = { version = "0.14.1", features = ["opentelemetry-otlp"] } -hf-hub = { version = "0.3.0", features = ["tokio"] } +init-tracing-opentelemetry = { version = "0.18.1", features = ["opentelemetry-otlp"] } +hf-hub = { workspace = true } http = "1.0.0" num_cpus = "1.16.0" -metrics = "0.21.0" -metrics-exporter-prometheus = { version = "0.12.1", features = [] } -opentelemetry = { version = "0.20.0", features = ["rt-tokio"] } -opentelemetry-otlp = "0.13.0" -reqwest = { version = "0.11.14", features = [] } -serde = "1.0.152" -serde_json = "1.0.93" -thiserror = "1.0.38" -tokenizers = { version = "0.19.1", default-features=false, features=["onig", "esaxx_fast"] } -tokio = { version = "1.25.0", features = ["rt", "rt-multi-thread", "parking_lot", "signal", "sync"] } -tracing = "0.1.37" -tracing-opentelemetry = "0.21.0" +metrics = { workspace = true } +metrics-exporter-prometheus = { version = "0.15.1", features = [] } +opentelemetry = "0.23.0" +opentelemetry_sdk = { version = "0.23.0", features = ["rt-tokio"] } +opentelemetry-otlp = "0.16.0" +reqwest = { version = "0.12.5", features = [] } +serde = { workspace = true } +serde_json = { workspace = true } +thiserror = { workspace = true } +tokenizers = { workspace = true } +tokio = { workspace = true } +tracing = { workspace = true } +tracing-opentelemetry = "0.24.0" tracing-subscriber = { version = "0.3.16", features = ["json", "env-filter"] } veil = "0.1.6" -mimalloc = { version = "*", default-features = false } # HTTP dependencies axum = { version = "0.7.4", features = ["json"], optional = true } -axum-tracing-opentelemetry = { version = "0.17.0", optional = true } -base64 = { version = "0.21.4", optional = true } +axum-tracing-opentelemetry = { version = "0.18.1", optional = true } +base64 = { version = "0.22.1", optional = true } tower-http = { version = "0.5.1", features = ["cors"], optional = true } utoipa = { version = "4.2", features = ["axum_extras"], optional = true } -utoipa-swagger-ui = { version = "6.0", features = ["axum"], optional = true } +utoipa-swagger-ui = { version = "7.1", features = ["axum"], optional = true } # gRPC dependencies async-stream = { version = "0.3.5", optional = true } @@ -56,14 +56,21 @@ tonic-health = { version = "0.11.0", optional = true } tonic-reflection = { version = "0.11.0", optional = true } tokio-stream = { version = "0.1.14", optional = true } +# Malloc trim hack for linux +[target.'cfg(target_os = "linux")'.dependencies] +libc = "0.2.149" +# else use mimalloc +[target.'cfg(not(target_os = "linux"))'.dependencies] +mimalloc = { version = "*", features = ["no_thp"] } + [dev-dependencies] insta = { git = "https://github.com/OlivierDehaene/insta", rev = "f4f98c0410b91fb5a28b10df98e4422955be9c2c", features = ["yaml"] } is_close = "0.1.3" -reqwest = { version = "0.11.22", features = ["json"] } +reqwest = { version = "0.12.5", features = ["json"] } [build-dependencies] vergen = { version = "8.0.0", features = ["build", "git", "gitcl"] } -tonic-build = { version = "0.10.2", optional = true } +tonic-build = { version = "0.11.0", optional = true } [features] default = ["candle", "http"] diff --git a/router/src/grpc/server.rs b/router/src/grpc/server.rs index 98ee5601..389e3848 100644 --- a/router/src/grpc/server.rs +++ b/router/src/grpc/server.rs @@ -589,7 +589,8 @@ impl grpc::embed_server::Embed for TextEmbeddingsService { &self, request: Request, ) -> Result, Status> { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let permit = self .infer @@ -600,7 +601,8 @@ impl grpc::embed_server::Embed for TextEmbeddingsService { let (response, metadata) = self.embed_pooled_inner(request, permit).await?; let headers = HeaderMap::from(metadata); - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); Ok(Response::from_parts( MetadataMap::from_headers(headers), @@ -629,7 +631,8 @@ impl grpc::embed_server::Embed for TextEmbeddingsService { &self, request: Request, ) -> Result, Status> { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let permit = self .infer @@ -640,7 +643,8 @@ impl grpc::embed_server::Embed for TextEmbeddingsService { let (response, metadata) = self.embed_sparse_inner(request, permit).await?; let headers = HeaderMap::from(metadata); - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); Ok(Response::from_parts( MetadataMap::from_headers(headers), @@ -669,7 +673,8 @@ impl grpc::embed_server::Embed for TextEmbeddingsService { &self, request: Request, ) -> Result, Status> { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let permit = self .infer @@ -680,7 +685,8 @@ impl grpc::embed_server::Embed for TextEmbeddingsService { let (response, metadata) = self.embed_all_inner(request, permit).await?; let headers = HeaderMap::from(metadata); - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); Ok(Response::from_parts( MetadataMap::from_headers(headers), @@ -713,7 +719,8 @@ impl grpc::predict_server::Predict for TextEmbeddingsService { &self, request: Request, ) -> Result, Status> { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let permit = self .infer @@ -733,7 +740,8 @@ impl grpc::predict_server::Predict for TextEmbeddingsService { .await?; let headers = HeaderMap::from(metadata); - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); Ok(Response::from_parts( MetadataMap::from_headers(headers), @@ -746,7 +754,8 @@ impl grpc::predict_server::Predict for TextEmbeddingsService { &self, request: Request, ) -> Result, Status> { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let request = request.into_inner(); let mut inputs = request.inputs; @@ -782,7 +791,8 @@ impl grpc::predict_server::Predict for TextEmbeddingsService { .await?; let headers = HeaderMap::from(metadata); - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); Ok(Response::from_parts( MetadataMap::from_headers(headers), @@ -886,20 +896,21 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "validation"); + let counter = metrics::counter!("te_request_failure", "err" => "validation"); + counter.increment(1); Err(err)?; } match &self.info.model_type { ModelType::Classifier(_) => { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); let message = "model is not a re-ranker model".to_string(); tracing::error!("{message}"); Err(Status::new(Code::FailedPrecondition, message)) } ModelType::Reranker(_) => Ok(()), ModelType::Embedding(_) => { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); let message = "model is not a classifier model".to_string(); tracing::error!("{message}"); Err(Status::new(Code::FailedPrecondition, message)) @@ -937,7 +948,8 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { )) }; - metrics::increment_counter!("te_request_count", "method" => "batch"); + let counter = metrics::counter!("te_request_count", "method" => "batch"); + counter.increment(1); let batch_size = request.texts.len(); if batch_size > self.info.max_client_batch_size { @@ -950,7 +962,8 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "batch_size"); + let counter = metrics::counter!("te_request_failure", "err" => "batch_size"); + counter.increment(1); Err(err)?; } @@ -1015,7 +1028,8 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { let batch_size = batch_size as u64; - metrics::increment_counter!("te_request_success", "method" => "batch"); + let counter = metrics::counter!("te_request_success", "method" => "batch"); + counter.increment(1); let response_metadata = ResponseMetadata::new( total_compute_chars, @@ -1065,14 +1079,14 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { // Check model type match &self.info.model_type { ModelType::Classifier(_) => { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); let message = "model is not a re-ranker model".to_string(); tracing::error!("{message}"); Err(Status::new(Code::FailedPrecondition, message)) } ModelType::Reranker(_) => Ok(()), ModelType::Embedding(_) => { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); let message = "model is not a classifier model".to_string(); tracing::error!("{message}"); Err(Status::new(Code::FailedPrecondition, message)) @@ -1112,7 +1126,8 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { )) }; - metrics::increment_counter!("te_request_count", "method" => "batch"); + let counter = metrics::counter!("te_request_count", "method" => "batch"); + counter.increment(1); let mut request_stream = request.into_inner(); @@ -1261,7 +1276,8 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { error: message, error_type: ErrorType::Backend, }; - metrics::increment_counter!("te_request_failure", "err" => "missing_values"); + let counter = metrics::counter!("te_request_failure", "err" => "missing_values"); + counter.increment(1); Err(err)?; } @@ -1271,7 +1287,8 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { let batch_size = batch_size as u64; - metrics::increment_counter!("te_request_success", "method" => "batch"); + let counter = metrics::counter!("te_request_success", "method" => "batch"); + counter.increment(1); let response_metadata = ResponseMetadata::new( total_compute_chars, diff --git a/router/src/http/server.rs b/router/src/http/server.rs index 11b3a521..3e09101d 100644 --- a/router/src/http/server.rs +++ b/router/src/http/server.rs @@ -163,14 +163,16 @@ async fn predict( let (response, metadata) = match req.inputs { PredictInput::Single(inputs) => { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let compute_chars = inputs.count_chars(); let permit = infer.try_acquire_permit().map_err(ErrorResponse::from)?; let (prompt_tokens, tokenization, queue, inference, predictions) = predict_inner(inputs, truncate, infer.0, info.0, Some(permit)).await?; - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); ( PredictResponse::Single(predictions), @@ -185,7 +187,8 @@ async fn predict( ) } PredictInput::Batch(inputs) => { - metrics::increment_counter!("te_request_count", "method" => "batch"); + let counter = metrics::counter!("te_request_count", "method" => "batch"); + counter.increment(1); let batch_size = inputs.len(); if batch_size > info.max_client_batch_size { @@ -198,7 +201,8 @@ async fn predict( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "batch_size"); + let counter = metrics::counter!("te_request_failure", "err" => "batch_size"); + counter.increment(1); Err(err)?; } @@ -237,7 +241,8 @@ async fn predict( } let batch_size = batch_size as u64; - metrics::increment_counter!("te_request_success", "method" => "batch"); + let counter = metrics::counter!("te_request_success", "method" => "batch"); + counter.increment(1); ( PredictResponse::Batch(predictions), @@ -301,14 +306,16 @@ async fn rerank( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "validation"); + let counter = metrics::counter!("te_request_failure", "err" => "validation"); + counter.increment(1); Err(err)?; } match &info.model_type { ModelType::Reranker(_) => Ok(()), ModelType::Classifier(_) | ModelType::Embedding(_) => { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); + counter.increment(1); let message = "model is not a re-ranker model".to_string(); Err(TextEmbeddingsError::Backend(BackendError::Inference( message, @@ -349,7 +356,8 @@ async fn rerank( let truncate = req.truncate.unwrap_or(info.auto_truncate); let (response, metadata) = { - metrics::increment_counter!("te_request_count", "method" => "batch"); + let counter = metrics::counter!("te_request_count", "method" => "batch"); + counter.increment(1); let batch_size = req.texts.len(); if batch_size > info.max_client_batch_size { @@ -362,7 +370,8 @@ async fn rerank( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "batch_size"); + let counter = metrics::counter!("te_request_failure", "err" => "batch_size"); + counter.increment(1); Err(err)?; } @@ -420,7 +429,8 @@ async fn rerank( let batch_size = batch_size as u64; - metrics::increment_counter!("te_request_success", "method" => "batch"); + let counter = metrics::counter!("te_request_success", "method" => "batch"); + counter.increment(1); ( RerankResponse(ranks), @@ -479,7 +489,8 @@ async fn embed( let (response, metadata) = match req.inputs { Input::Single(input) => { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let compute_chars = input.count_chars(); @@ -495,7 +506,8 @@ async fn embed( .await .map_err(ErrorResponse::from)?; - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); ( EmbedResponse(vec![response.results]), @@ -510,7 +522,8 @@ async fn embed( ) } Input::Batch(inputs) => { - metrics::increment_counter!("te_request_count", "method" => "batch"); + let counter = metrics::counter!("te_request_count", "method" => "batch"); + counter.increment(1); if inputs.is_empty() { let message = "`inputs` cannot be empty".to_string(); @@ -519,7 +532,8 @@ async fn embed( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "validation"); + let counter = metrics::counter!("te_request_failure", "err" => "validation"); + counter.increment(1); Err(err)?; } @@ -534,7 +548,8 @@ async fn embed( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "batch_size"); + let counter = metrics::counter!("te_request_failure", "err" => "batch_size"); + counter.increment(1); Err(err)?; } @@ -579,7 +594,8 @@ async fn embed( } let batch_size = batch_size as u64; - metrics::increment_counter!("te_request_success", "method" => "batch"); + let counter = metrics::counter!("te_request_success", "method" => "batch"); + counter.increment(1); ( EmbedResponse(embeddings), @@ -648,7 +664,8 @@ async fn embed_sparse( let (response, metadata) = match req.inputs { Input::Single(input) => { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let compute_chars = input.count_chars(); @@ -658,7 +675,8 @@ async fn embed_sparse( .await .map_err(ErrorResponse::from)?; - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); ( EmbedSparseResponse(vec![sparsify(response.results)]), @@ -673,7 +691,8 @@ async fn embed_sparse( ) } Input::Batch(inputs) => { - metrics::increment_counter!("te_request_count", "method" => "batch"); + let counter = metrics::counter!("te_request_count", "method" => "batch"); + counter.increment(1); if inputs.is_empty() { let message = "`inputs` cannot be empty".to_string(); @@ -682,7 +701,8 @@ async fn embed_sparse( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "validation"); + let counter = metrics::counter!("te_request_failure", "err" => "validation"); + counter.increment(1); Err(err)?; } @@ -697,7 +717,8 @@ async fn embed_sparse( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "batch_size"); + let counter = metrics::counter!("te_request_failure", "err" => "batch_size"); + counter.increment(1); Err(err)?; } @@ -737,7 +758,8 @@ async fn embed_sparse( } let batch_size = batch_size as u64; - metrics::increment_counter!("te_request_success", "method" => "batch"); + let counter = metrics::counter!("te_request_success", "method" => "batch"); + counter.increment(1); ( EmbedSparseResponse(embeddings), @@ -798,7 +820,8 @@ async fn embed_all( let (response, metadata) = match req.inputs { Input::Single(input) => { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let compute_chars = input.count_chars(); @@ -808,7 +831,8 @@ async fn embed_all( .await .map_err(ErrorResponse::from)?; - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); ( EmbedAllResponse(vec![response.results]), @@ -823,7 +847,8 @@ async fn embed_all( ) } Input::Batch(inputs) => { - metrics::increment_counter!("te_request_count", "method" => "batch"); + let counter = metrics::counter!("te_request_count", "method" => "batch"); + counter.increment(1); if inputs.is_empty() { let message = "`inputs` cannot be empty".to_string(); @@ -832,7 +857,8 @@ async fn embed_all( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "validation"); + let counter = metrics::counter!("te_request_failure", "err" => "validation"); + counter.increment(1); Err(err)?; } @@ -847,7 +873,8 @@ async fn embed_all( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "batch_size"); + let counter = metrics::counter!("te_request_failure", "err" => "batch_size"); + counter.increment(1); Err(err)?; } @@ -886,7 +913,8 @@ async fn embed_all( } let batch_size = batch_size as u64; - metrics::increment_counter!("te_request_success", "method" => "batch"); + let counter = metrics::counter!("te_request_success", "method" => "batch"); + counter.increment(1); ( EmbedAllResponse(embeddings), @@ -962,7 +990,8 @@ async fn openai_embed( let (embeddings, metadata) = match req.input { Input::Single(input) => { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let compute_chars = input.count_chars(); @@ -972,7 +1001,8 @@ async fn openai_embed( .await .map_err(ErrorResponse::from)?; - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let embedding = encode_embedding(response.results); ( @@ -992,7 +1022,8 @@ async fn openai_embed( ) } Input::Batch(inputs) => { - metrics::increment_counter!("te_request_count", "method" => "batch"); + let counter = metrics::counter!("te_request_count", "method" => "batch"); + counter.increment(1); if inputs.is_empty() { let message = "`inputs` cannot be empty".to_string(); @@ -1001,7 +1032,8 @@ async fn openai_embed( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "validation"); + let counter = metrics::counter!("te_request_failure", "err" => "validation"); + counter.increment(1); Err(err)?; } @@ -1016,7 +1048,8 @@ async fn openai_embed( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "batch_size"); + let counter = metrics::counter!("te_request_failure", "err" => "batch_size"); + counter.increment(1); Err(err)?; } @@ -1060,7 +1093,8 @@ async fn openai_embed( } let batch_size = batch_size as u64; - metrics::increment_counter!("te_request_success", "method" => "batch"); + let counter = metrics::counter!("te_request_success", "method" => "batch"); + counter.increment(1); ( embeddings, @@ -1163,7 +1197,8 @@ async fn tokenize( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "validation"); + let counter = metrics::counter!("te_request_failure", "err" => "validation"); + counter.increment(1); Err(err)?; } @@ -1178,7 +1213,8 @@ async fn tokenize( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "batch_size"); + let counter = metrics::counter!("te_request_failure", "err" => "batch_size"); + counter.increment(1); Err(err)?; } @@ -1236,7 +1272,8 @@ async fn decode( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "validation"); + let counter = metrics::counter!("te_request_failure", "err" => "validation"); + counter.increment(1); Err(err)?; } @@ -1251,7 +1288,8 @@ async fn decode( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "batch_size"); + let counter = metrics::counter!("te_request_failure", "err" => "batch_size"); + counter.increment(1); Err(err)?; } diff --git a/router/src/lib.rs b/router/src/lib.rs index d2023515..eca9c61f 100644 --- a/router/src/lib.rs +++ b/router/src/lib.rs @@ -289,7 +289,7 @@ pub async fn run( api_key, cors_allow_origin, ) - .await?; + .await } #[cfg(feature = "grpc")] @@ -297,10 +297,8 @@ pub async fn run( // cors_allow_origin and payload_limit are not used for gRPC servers let _ = cors_allow_origin; let _ = payload_limit; - grpc::server::run(infer, info, addr, prom_builder, api_key).await?; + grpc::server::run(infer, info, addr, prom_builder, api_key).await } - - Ok(()) } fn get_backend_model_type( @@ -512,19 +510,14 @@ impl ResponseMetadata { fn record_metrics(&self) { // Metrics - metrics::histogram!( - "te_request_duration", - self.start_time.elapsed().as_secs_f64() - ); - metrics::histogram!( - "te_request_tokenization_duration", - self.tokenization_time.as_secs_f64() - ); - metrics::histogram!("te_request_queue_duration", self.queue_time.as_secs_f64()); - metrics::histogram!( - "te_request_inference_duration", - self.inference_time.as_secs_f64() - ); + let histogram = metrics::histogram!("te_request_duration"); + histogram.record(self.start_time.elapsed().as_secs_f64()); + let histogram = metrics::histogram!("te_request_tokenization_duration"); + histogram.record(self.tokenization_time.as_secs_f64()); + let histogram = metrics::histogram!("te_request_queue_duration"); + histogram.record(self.queue_time.as_secs_f64()); + let histogram = metrics::histogram!("te_request_inference_duration"); + histogram.record(self.inference_time.as_secs_f64()); } } diff --git a/router/src/logging.rs b/router/src/logging.rs index 7d5eb11e..7a8fe810 100644 --- a/router/src/logging.rs +++ b/router/src/logging.rs @@ -1,8 +1,8 @@ -use opentelemetry::sdk::propagation::TraceContextPropagator; -use opentelemetry::sdk::trace::Sampler; -use opentelemetry::sdk::{trace, Resource}; use opentelemetry::{global, KeyValue}; use opentelemetry_otlp::WithExportConfig; +use opentelemetry_sdk::propagation::TraceContextPropagator; +use opentelemetry_sdk::trace::Sampler; +use opentelemetry_sdk::{trace, Resource}; use tracing_subscriber::layer::SubscriberExt; use tracing_subscriber::util::SubscriberInitExt; use tracing_subscriber::{EnvFilter, Layer}; @@ -48,7 +48,7 @@ pub fn init_logging( )])) .with_sampler(Sampler::AlwaysOn), ) - .install_batch(opentelemetry::runtime::Tokio); + .install_batch(opentelemetry_sdk::runtime::Tokio); if let Ok(tracer) = tracer { layers.push(tracing_opentelemetry::layer().with_tracer(tracer).boxed()); diff --git a/router/src/main.rs b/router/src/main.rs index 2cdc7095..3c85f5f7 100644 --- a/router/src/main.rs +++ b/router/src/main.rs @@ -1,12 +1,12 @@ use anyhow::Result; use clap::Parser; -use mimalloc::MiMalloc; use opentelemetry::global; use text_embeddings_backend::DType; use veil::Redact; +#[cfg(not(target_os = "linux"))] #[global_allocator] -static GLOBAL: MiMalloc = MiMalloc; +static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; /// App Configuration #[derive(Parser, Redact)] @@ -147,6 +147,20 @@ async fn main() -> Result<()> { tracing::info!("{args:?}"); + // Hack to trim pages regularly + // see: https://www.algolia.com/blog/engineering/when-allocators-are-hoarding-your-precious-memory/ + // and: https://github.com/huggingface/text-embeddings-inference/issues/156 + #[cfg(target_os = "linux")] + tokio::spawn(async move { + use tokio::time::Duration; + loop { + tokio::time::sleep(Duration::from_millis(100)).await; + unsafe { + libc::malloc_trim(0); + } + } + }); + text_embeddings_router::run( args.model_id, args.revision, diff --git a/router/src/shutdown.rs b/router/src/shutdown.rs index 471eaf14..15fc8ea7 100644 --- a/router/src/shutdown.rs +++ b/router/src/shutdown.rs @@ -25,5 +25,4 @@ pub(crate) async fn shutdown_signal() { } tracing::info!("signal received, starting graceful shutdown"); - opentelemetry::global::shutdown_tracer_provider(); }