diff --git a/Cargo.lock b/Cargo.lock index eeab7b562ab5..6813180c075f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -174,12 +174,6 @@ dependencies = [ "derive_arbitrary", ] -[[package]] -name = "arc-swap" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" - [[package]] name = "arg_enum_proc_macro" version = "0.3.4" @@ -256,7 +250,6 @@ dependencies = [ "arrow-data", "arrow-schema", "chrono", - "chrono-tz", "half", "hashbrown 0.14.5", "num", @@ -287,7 +280,6 @@ dependencies = [ "atoi", "base64 0.22.1", "chrono", - "comfy-table", "half", "lexical-core", "num", @@ -337,8 +329,6 @@ dependencies = [ "arrow-data", "arrow-schema", "flatbuffers", - "lz4_flex", - "zstd", ] [[package]] @@ -395,9 +385,6 @@ name = "arrow-schema" version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e972cd1ff4a4ccd22f86d3e53e835c2ed92e0eea6a3e8eadb72b4f1ac802cf8" -dependencies = [ - "bitflags 2.9.0", -] [[package]] name = "arrow-select" @@ -456,55 +443,6 @@ dependencies = [ "zstd-safe", ] -[[package]] -name = "async-io" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" -dependencies = [ - "async-lock", - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-lite", - "log", - "parking", - "polling", - "rustix 0.37.28", - "slab", - "socket2 0.4.10", - "waker-fn", -] - -[[package]] -name = "async-lock" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" -dependencies = [ - "event-listener 2.5.3", -] - -[[package]] -name = "async-priority-channel" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acde96f444d31031f760c5c43dc786b97d3e1cb2ee49dd06898383fe9a999758" -dependencies = [ - "event-listener 4.0.3", -] - -[[package]] -name = "async-recursion" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.99", -] - [[package]] name = "async-stream" version = "0.3.6" @@ -538,12 +476,6 @@ dependencies = [ "syn 2.0.99", ] -[[package]] -name = "async_cell" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "834eee9ce518130a3b4d5af09ecc43e9d6b57ee76613f227a1ddd6b77c7a62bc" - [[package]] name = "atoi" version = "2.0.0" @@ -607,7 +539,7 @@ dependencies = [ "aws-smithy-types", "aws-types", "bytes", - "fastrand 2.3.0", + "fastrand", "hex", "http 0.2.12", "ring", @@ -646,7 +578,7 @@ dependencies = [ "aws-smithy-types", "aws-types", "bytes", - "fastrand 2.3.0", + "fastrand", "http 0.2.12", "http-body 0.4.6", "once_cell", @@ -673,30 +605,7 @@ dependencies = [ "aws-smithy-types", "aws-types", "bytes", - "fastrand 2.3.0", - "http 0.2.12", - "once_cell", - "regex-lite", - "tracing", -] - -[[package]] -name = "aws-sdk-dynamodb" -version = "1.67.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "250a727b598ad84f28a41165e6d7a1fcbfb13b5da88723f42d04e9122948f4a5" -dependencies = [ - "aws-credential-types", - "aws-runtime", - "aws-smithy-async", - "aws-smithy-http 0.61.1", - "aws-smithy-json", - "aws-smithy-runtime", - "aws-smithy-runtime-api", - "aws-smithy-types", - "aws-types", - "bytes", - "fastrand 2.3.0", + "fastrand", "http 0.2.12", "once_cell", "regex-lite", @@ -910,7 +819,7 @@ dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", "bytes", - "fastrand 2.3.0", + "fastrand", "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", @@ -1248,33 +1157,12 @@ dependencies = [ "serde", ] -[[package]] -name = "bitpacking" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c1d3e2bfd8d06048a179f7b17afc3188effa10385e7b00dc65af6aae732ea92" -dependencies = [ - "crunchy", -] - [[package]] name = "bitstream-io" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - [[package]] name = "blake3" version = "1.6.1" @@ -1413,37 +1301,6 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d2c12f985c78475a6b8d629afd0c360260ef34cfef52efccdcfd31972f81c2e" -[[package]] -name = "camino" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", -] - [[package]] name = "cast" version = "0.3.0" @@ -1470,12 +1327,6 @@ dependencies = [ "shlex", ] -[[package]] -name = "census" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4c707c6a209cbe82d10abd08e1ea8995e9ea937d2550646e02798948992be0" - [[package]] name = "cesu8" version = "1.1.0" @@ -1530,28 +1381,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "chrono-tz" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb" -dependencies = [ - "chrono", - "chrono-tz-build", - "phf", -] - -[[package]] -name = "chrono-tz-build" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1" -dependencies = [ - "parse-zoneinfo", - "phf", - "phf_codegen", -] - [[package]] name = "ciborium" version = "0.2.2" @@ -1618,7 +1447,7 @@ version = "4.5.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", "syn 2.0.99", @@ -1696,25 +1525,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "comfy-table" -version = "7.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a65ebfec4fb190b6f90e944a817d60499ee0744e582530e2c9900a22e591d9a" -dependencies = [ - "unicode-segmentation", - "unicode-width 0.2.0", -] - -[[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 = "config" version = "0.14.1" @@ -1961,15 +1771,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "crossbeam-queue" -version = "0.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" version = "0.8.21" @@ -2092,19 +1893,6 @@ dependencies = [ "syn 2.0.99", ] -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", -] - [[package]] name = "dashmap" version = "6.1.0" @@ -2126,430 +1914,87 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" [[package]] -name = "datafusion" -version = "41.0.0" +name = "dbus" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4fd4a99fc70d40ef7e52b243b4a399c3f8d353a40d5ecb200deee05e49c61bb" +checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b" dependencies = [ - "ahash", - "arrow", - "arrow-array", - "arrow-ipc", - "arrow-schema", - "async-trait", - "bytes", - "chrono", - "dashmap 6.1.0", - "datafusion-catalog", - "datafusion-common", - "datafusion-common-runtime", - "datafusion-execution", - "datafusion-expr", - "datafusion-functions", - "datafusion-functions-aggregate", - "datafusion-functions-nested", - "datafusion-optimizer", - "datafusion-physical-expr", - "datafusion-physical-expr-common", - "datafusion-physical-optimizer", - "datafusion-physical-plan", - "datafusion-sql", - "futures", - "glob", - "half", - "hashbrown 0.14.5", - "indexmap 2.7.1", - "itertools 0.12.1", - "log", - "num_cpus", - "object_store", - "parking_lot", - "paste", - "pin-project-lite", - "rand 0.8.5", - "sqlparser", - "tempfile", - "tokio", - "url", - "uuid", + "libc", + "libdbus-sys", + "winapi", ] [[package]] -name = "datafusion-catalog" -version = "41.0.0" +name = "dbus-secret-service" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13b3cfbd84c6003594ae1972314e3df303a27ce8ce755fcea3240c90f4c0529" +checksum = "b42a16374481d92aed73ae45b1f120207d8e71d24fb89f357fadbd8f946fd84b" dependencies = [ - "arrow-schema", - "async-trait", - "datafusion-common", - "datafusion-execution", - "datafusion-expr", - "datafusion-physical-plan", + "dbus", + "futures-util", + "num", + "once_cell", + "openssl", + "rand 0.8.5", ] [[package]] -name = "datafusion-common" -version = "41.0.0" +name = "deadpool" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44fdbc877e3e40dcf88cc8f283d9f5c8851f0a3aa07fee657b1b75ac1ad49b9c" +checksum = "fb84100978c1c7b37f09ed3ce3e5f843af02c2a2c431bae5b19230dad2c1b490" dependencies = [ - "ahash", - "arrow", - "arrow-array", - "arrow-buffer", - "arrow-schema", - "chrono", - "half", - "hashbrown 0.14.5", - "instant", - "libc", + "async-trait", + "deadpool-runtime", "num_cpus", - "object_store", - "sqlparser", + "tokio", ] [[package]] -name = "datafusion-common-runtime" -version = "41.0.0" +name = "deadpool-runtime" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7496d1f664179f6ce3a5cbef6566056ccaf3ea4aa72cc455f80e62c1dd86b1" -dependencies = [ - "tokio", -] +checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" [[package]] -name = "datafusion-execution" -version = "41.0.0" +name = "deranged" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799e70968c815b611116951e3dd876aef04bf217da31b72eec01ee6a959336a1" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ - "arrow", - "chrono", - "dashmap 6.1.0", - "datafusion-common", - "datafusion-expr", - "futures", - "hashbrown 0.14.5", - "log", - "object_store", - "parking_lot", - "rand 0.8.5", - "tempfile", - "url", + "powerfmt", + "serde", ] [[package]] -name = "datafusion-expr" -version = "41.0.0" +name = "derive_arbitrary" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c1841c409d9518c17971d15c9bae62e629eb937e6fb6c68cd32e9186f8b30d2" +checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ - "ahash", - "arrow", - "arrow-array", - "arrow-buffer", - "chrono", - "datafusion-common", - "paste", - "serde_json", - "sqlparser", - "strum", - "strum_macros", + "proc-macro2", + "quote", + "syn 2.0.99", ] [[package]] -name = "datafusion-functions" -version = "41.0.0" +name = "digest" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8e481cf34d2a444bd8fa09b65945f0ce83dc92df8665b761505b3d9f351bebb" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "arrow", - "arrow-buffer", - "base64 0.22.1", - "chrono", - "datafusion-common", - "datafusion-execution", - "datafusion-expr", - "hashbrown 0.14.5", - "hex", - "itertools 0.12.1", - "log", - "rand 0.8.5", - "regex", - "unicode-segmentation", - "uuid", + "block-buffer", + "crypto-common", + "subtle", ] [[package]] -name = "datafusion-functions-aggregate" -version = "41.0.0" +name = "dirs" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b4ece19f73c02727e5e8654d79cd5652de371352c1df3c4ac3e419ecd6943fb" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" dependencies = [ - "ahash", - "arrow", - "arrow-schema", - "datafusion-common", - "datafusion-execution", - "datafusion-expr", - "datafusion-physical-expr-common", - "log", - "paste", - "sqlparser", -] - -[[package]] -name = "datafusion-functions-nested" -version = "41.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1474552cc824e8c9c88177d454db5781d4b66757d4aca75719306b8343a5e8d" -dependencies = [ - "arrow", - "arrow-array", - "arrow-buffer", - "arrow-ord", - "arrow-schema", - "datafusion-common", - "datafusion-execution", - "datafusion-expr", - "datafusion-functions", - "datafusion-functions-aggregate", - "itertools 0.12.1", - "log", - "paste", - "rand 0.8.5", -] - -[[package]] -name = "datafusion-optimizer" -version = "41.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791ff56f55608bc542d1ea7a68a64bdc86a9413f5a381d06a39fd49c2a3ab906" -dependencies = [ - "arrow", - "async-trait", - "chrono", - "datafusion-common", - "datafusion-expr", - "datafusion-physical-expr", - "hashbrown 0.14.5", - "indexmap 2.7.1", - "itertools 0.12.1", - "log", - "paste", - "regex-syntax 0.8.5", -] - -[[package]] -name = "datafusion-physical-expr" -version = "41.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a223962b3041304a3e20ed07a21d5de3d88d7e4e71ca192135db6d24e3365a4" -dependencies = [ - "ahash", - "arrow", - "arrow-array", - "arrow-buffer", - "arrow-ord", - "arrow-schema", - "arrow-string", - "base64 0.22.1", - "chrono", - "datafusion-common", - "datafusion-execution", - "datafusion-expr", - "datafusion-physical-expr-common", - "half", - "hashbrown 0.14.5", - "hex", - "indexmap 2.7.1", - "itertools 0.12.1", - "log", - "paste", - "petgraph", - "regex", -] - -[[package]] -name = "datafusion-physical-expr-common" -version = "41.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db5e7d8532a1601cd916881db87a70b0a599900d23f3db2897d389032da53bc6" -dependencies = [ - "ahash", - "arrow", - "datafusion-common", - "datafusion-expr", - "hashbrown 0.14.5", - "rand 0.8.5", -] - -[[package]] -name = "datafusion-physical-optimizer" -version = "41.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb9c78f308e050f5004671039786a925c3fee83b90004e9fcfd328d7febdcc0" -dependencies = [ - "datafusion-common", - "datafusion-execution", - "datafusion-physical-expr", - "datafusion-physical-plan", -] - -[[package]] -name = "datafusion-physical-plan" -version = "41.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d1116949432eb2d30f6362707e2846d942e491052a206f2ddcb42d08aea1ffe" -dependencies = [ - "ahash", - "arrow", - "arrow-array", - "arrow-buffer", - "arrow-ord", - "arrow-schema", - "async-trait", - "chrono", - "datafusion-common", - "datafusion-common-runtime", - "datafusion-execution", - "datafusion-expr", - "datafusion-functions-aggregate", - "datafusion-physical-expr", - "datafusion-physical-expr-common", - "futures", - "half", - "hashbrown 0.14.5", - "indexmap 2.7.1", - "itertools 0.12.1", - "log", - "once_cell", - "parking_lot", - "pin-project-lite", - "rand 0.8.5", - "tokio", -] - -[[package]] -name = "datafusion-sql" -version = "41.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45d0180711165fe94015d7c4123eb3e1cf5fb60b1506453200b8d1ce666bef0" -dependencies = [ - "arrow", - "arrow-array", - "arrow-schema", - "datafusion-common", - "datafusion-expr", - "log", - "regex", - "sqlparser", - "strum", -] - -[[package]] -name = "dbus" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b" -dependencies = [ - "libc", - "libdbus-sys", - "winapi", -] - -[[package]] -name = "dbus-secret-service" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42a16374481d92aed73ae45b1f120207d8e71d24fb89f357fadbd8f946fd84b" -dependencies = [ - "dbus", - "futures-util", - "num", - "once_cell", - "openssl", - "rand 0.8.5", -] - -[[package]] -name = "deadpool" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb84100978c1c7b37f09ed3ce3e5f843af02c2a2c431bae5b19230dad2c1b490" -dependencies = [ - "async-trait", - "deadpool-runtime", - "num_cpus", - "tokio", -] - -[[package]] -name = "deadpool-runtime" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" - -[[package]] -name = "deepsize" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cdb987ec36f6bf7bfbea3f928b75590b736fc42af8e54d97592481351b2b96c" -dependencies = [ - "deepsize_derive", -] - -[[package]] -name = "deepsize_derive" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990101d41f3bc8c1a45641024377ee284ecc338e5ecf3ea0f0e236d897c72796" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "deranged" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", - "serde", -] - -[[package]] -name = "derive_arbitrary" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.99", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", - "subtle", -] - -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys", + "dirs-sys", ] [[package]] @@ -2626,12 +2071,6 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" -[[package]] -name = "downcast-rs" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" - [[package]] name = "dyn-clone" version = "1.0.19" @@ -2690,15 +2129,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "error-chain" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" -dependencies = [ - "version_check", -] - [[package]] name = "error-code" version = "3.3.1" @@ -2716,23 +2146,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - [[package]] name = "eventsource-client" version = "0.12.2" @@ -2786,21 +2199,6 @@ dependencies = [ "regex-syntax 0.8.5", ] -[[package]] -name = "fastdivide" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afc2bd4d5a73106dd53d10d73d3401c2f32730ba2c0b93ddb888a8983680471" - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - [[package]] name = "fastrand" version = "2.3.0" @@ -2839,12 +2237,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - [[package]] name = "flatbuffers" version = "24.12.23" @@ -2882,12 +2274,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "foreign-types" version = "0.3.2" @@ -2965,31 +2351,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "fs4" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7e180ac76c23b45e767bd7ae9579bc0bb458618c4bc71835926e098e61d15f8" -dependencies = [ - "rustix 0.38.44", - "windows-sys 0.52.0", -] - -[[package]] -name = "fsst" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac423dce38c8aafc3d348d9f9c207ac030385ba2edda08bcff43c74a29ce3eac" -dependencies = [ - "rand 0.8.5", -] - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - [[package]] name = "futures" version = "0.3.31" @@ -3039,23 +2400,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] -name = "futures-lite" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - -[[package]] -name = "futures-macro" -version = "0.3.31" +name = "futures-macro" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ @@ -3299,7 +2645,7 @@ dependencies = [ "chrono", "criterion", "ctor", - "dashmap 6.1.0", + "dashmap", "dirs", "dotenvy", "etcetera", @@ -3310,7 +2656,6 @@ dependencies = [ "jsonschema", "jsonwebtoken", "keyring", - "lancedb", "lazy_static", "mcp-client", "mcp-core", @@ -3610,11 +2955,6 @@ name = "hashbrown" version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", -] [[package]] name = "hashlink" @@ -3625,12 +2965,6 @@ dependencies = [ "hashbrown 0.14.5", ] -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - [[package]] name = "heck" version = "0.5.0" @@ -3688,12 +3022,6 @@ dependencies = [ "thiserror 1.0.69", ] -[[package]] -name = "htmlescape" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9025058dae765dee5070ec375f591e2ba14638c63feff74f13805a72e523163" - [[package]] name = "http" version = "0.2.12" @@ -3768,12 +3096,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" -[[package]] -name = "humantime" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" - [[package]] name = "hyper" version = "0.14.32" @@ -3791,7 +3113,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.5.8", + "socket2", "tokio", "tower-service", "tracing", @@ -3892,21 +3214,12 @@ dependencies = [ "http-body 1.0.1", "hyper 1.6.0", "pin-project-lite", - "socket2 0.5.8", + "socket2", "tokio", "tower-service", "tracing", ] -[[package]] -name = "hyperloglogplus" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "621debdf94dcac33e50475fdd76d34d5ea9c0362a834b9db08c3024696c1fbe3" -dependencies = [ - "serde", -] - [[package]] name = "iana-time-zone" version = "0.1.61" @@ -4218,18 +3531,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "interpolate_name" version = "0.2.4" @@ -4241,17 +3542,6 @@ dependencies = [ "syn 2.0.99", ] -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.48.0", -] - [[package]] name = "ipnet" version = "2.11.0" @@ -4403,461 +3693,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" dependencies = [ "base64 0.22.1", - "js-sys", - "pem", - "ring", - "serde", - "serde_json", - "simple_asn1", -] - -[[package]] -name = "keyring" -version = "3.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1961983669d57bdfe6c0f3ef8e4c229b5ef751afcc7d87e4271d2f71f6ccfa8b" -dependencies = [ - "byteorder", - "dbus-secret-service", - "log", - "openssl", - "security-framework 2.11.1", - "security-framework 3.2.0", - "windows-sys 0.59.0", -] - -[[package]] -name = "lance" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cd1ece8f8ca17955c805e846b43acc61922bf9729977807037a3b1e26584e4" -dependencies = [ - "arrow", - "arrow-arith", - "arrow-array", - "arrow-buffer", - "arrow-ord", - "arrow-row", - "arrow-schema", - "arrow-select", - "async-recursion", - "async-trait", - "async_cell", - "aws-credential-types", - "aws-sdk-dynamodb", - "byteorder", - "bytes", - "chrono", - "dashmap 5.5.3", - "datafusion", - "datafusion-functions", - "datafusion-physical-expr", - "deepsize", - "futures", - "half", - "itertools 0.12.1", - "lance-arrow", - "lance-core", - "lance-datafusion", - "lance-encoding", - "lance-file", - "lance-index", - "lance-io", - "lance-linalg", - "lance-table", - "lazy_static", - "log", - "moka", - "object_store", - "permutation", - "pin-project", - "prost 0.12.6", - "prost-build", - "rand 0.8.5", - "roaring", - "serde", - "serde_json", - "snafu", - "tantivy", - "tempfile", - "tokio", - "tracing", - "url", - "uuid", -] - -[[package]] -name = "lance-arrow" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385c62668af77d75da2242c6e86b9c0868d92f13961643ba3d8dc7eb05deb5da" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-cast", - "arrow-data", - "arrow-schema", - "arrow-select", - "getrandom 0.2.15", - "half", - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "lance-core" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03ca182e47d2926aa59526e2573dd1e634b72111b275410cb42dca30aef9f315" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-schema", - "async-trait", - "byteorder", - "bytes", - "chrono", - "datafusion-common", - "datafusion-sql", - "deepsize", - "futures", - "lance-arrow", - "lazy_static", - "libc", - "log", - "mock_instant", - "moka", - "num_cpus", - "object_store", - "pin-project", - "prost 0.12.6", - "rand 0.8.5", - "roaring", - "serde_json", - "snafu", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "lance-datafusion" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d90f3f250a6761d5f7e2a2d6838402defdad18367a122b260a2fadb1dea30464" -dependencies = [ - "arrow", - "arrow-array", - "arrow-buffer", - "arrow-ord", - "arrow-schema", - "arrow-select", - "async-trait", - "datafusion", - "datafusion-common", - "datafusion-functions", - "datafusion-physical-expr", - "futures", - "lance-arrow", - "lance-core", - "lazy_static", - "log", - "prost 0.12.6", - "snafu", - "tokio", -] - -[[package]] -name = "lance-encoding" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d187963282728ba0c756ae7dfdeef3e47a4ac6db56385860c665f07b6e59ae" -dependencies = [ - "arrayref", - "arrow", - "arrow-arith", - "arrow-array", - "arrow-buffer", - "arrow-cast", - "arrow-data", - "arrow-schema", - "arrow-select", - "bytemuck", - "byteorder", - "bytes", - "fsst", - "futures", - "hex", - "hyperloglogplus", - "itertools 0.12.1", - "lance-arrow", - "lance-core", - "lazy_static", - "log", - "num-traits", - "paste", - "prost 0.12.6", - "prost-build", - "prost-types", - "rand 0.8.5", - "seq-macro", - "snafu", - "tokio", - "tracing", - "zstd", -] - -[[package]] -name = "lance-file" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bdc8b00b0664e3944648f43b61785e5317ecc25b0015a80e2deba6f28a76e4a" -dependencies = [ - "arrow-arith", - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "arrow-select", - "async-recursion", - "async-trait", - "byteorder", - "bytes", - "datafusion-common", - "deepsize", - "futures", - "lance-arrow", - "lance-core", - "lance-encoding", - "lance-io", - "log", - "num-traits", - "object_store", - "prost 0.12.6", - "prost-build", - "prost-types", - "roaring", - "snafu", - "tempfile", - "tokio", - "tracing", -] - -[[package]] -name = "lance-index" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7051aa7a28c3dc0708cddd6f4448fa86968d183bc2be14a5acd7495fb8d8fd9" -dependencies = [ - "arrow", - "arrow-array", - "arrow-ord", - "arrow-schema", - "arrow-select", - "async-recursion", - "async-trait", - "bitvec", - "bytes", - "crossbeam-queue", - "datafusion", - "datafusion-common", - "datafusion-expr", - "datafusion-physical-expr", - "datafusion-sql", - "deepsize", - "futures", - "half", - "itertools 0.12.1", - "lance-arrow", - "lance-core", - "lance-datafusion", - "lance-encoding", - "lance-file", - "lance-io", - "lance-linalg", - "lance-table", - "lazy_static", - "log", - "moka", - "num-traits", - "object_store", - "prost 0.12.6", - "prost-build", - "rand 0.8.5", - "rayon", - "roaring", - "serde", - "serde_json", - "snafu", - "tantivy", - "tempfile", - "tokio", - "tracing", - "uuid", -] - -[[package]] -name = "lance-io" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d612eebbb3d9feca9c2b860f176f920142c859b3e175248a20b0250b898b149" -dependencies = [ - "arrow", - "arrow-arith", - "arrow-array", - "arrow-buffer", - "arrow-cast", - "arrow-data", - "arrow-schema", - "arrow-select", - "async-priority-channel", - "async-recursion", - "async-trait", - "aws-config", - "aws-credential-types", - "byteorder", - "bytes", - "chrono", - "deepsize", - "futures", - "lance-arrow", - "lance-core", - "lazy_static", - "log", - "object_store", - "path_abs", - "pin-project", - "prost 0.12.6", - "prost-build", - "rand 0.8.5", - "shellexpand", - "snafu", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "lance-linalg" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d642bfbece852f40e0aa01daa445940f80ede9c2914bd25cd720dac266ce41a9" -dependencies = [ - "arrow-array", - "arrow-ord", - "arrow-schema", - "bitvec", - "cc", - "deepsize", - "futures", - "half", - "lance-arrow", - "lance-core", - "lazy_static", - "log", - "num-traits", - "rand 0.8.5", - "rayon", - "tokio", - "tracing", -] - -[[package]] -name = "lance-table" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd8c8aaf1b74110fbd1a24cb30f54280cb7a0dc2cdd87513a7679385ca97f952" -dependencies = [ - "arrow", - "arrow-array", - "arrow-buffer", - "arrow-ipc", - "arrow-schema", - "async-trait", - "aws-credential-types", - "aws-sdk-dynamodb", - "byteorder", - "bytes", - "chrono", - "deepsize", - "futures", - "lance-arrow", - "lance-core", - "lance-file", - "lance-io", - "lazy_static", - "log", - "object_store", - "prost 0.12.6", - "prost-build", - "prost-types", - "rand 0.8.5", - "rangemap", - "roaring", - "serde", - "serde_json", - "snafu", - "tokio", - "tracing", - "url", - "uuid", -] - -[[package]] -name = "lance-testing" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc37f345c06661a29cf9d89ad4c52f84ba2f037ff94403c1f4b486edd7713103" -dependencies = [ - "arrow-array", - "arrow-schema", - "lance-arrow", - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "lancedb" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c041835505f86cb5cc5cc6238a6bb981f7addda58afb40eabd76c2f91e47b9b0" -dependencies = [ - "arrow", - "arrow-array", - "arrow-cast", - "arrow-data", - "arrow-ipc", - "arrow-ord", - "arrow-schema", - "async-trait", - "bytes", - "chrono", - "datafusion-common", - "datafusion-physical-plan", - "futures", - "half", - "lance", - "lance-datafusion", - "lance-encoding", - "lance-index", - "lance-linalg", - "lance-table", - "lance-testing", - "lazy_static", - "log", - "moka", - "num-traits", - "object_store", - "pin-project", - "regex", + "js-sys", + "pem", + "ring", "serde", "serde_json", - "serde_with", - "snafu", - "tokio", - "url", + "simple_asn1", +] + +[[package]] +name = "keyring" +version = "3.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1961983669d57bdfe6c0f3ef8e4c229b5ef751afcc7d87e4271d2f71f6ccfa8b" +dependencies = [ + "byteorder", + "dbus-secret-service", + "log", + "openssl", + "security-framework 2.11.1", + "security-framework 3.2.0", + "windows-sys 0.59.0", ] [[package]] @@ -4872,12 +3728,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" -[[package]] -name = "levenshtein_automata" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2cdeb66e45e9f36bfad5bbdb4d2384e70936afbee843c6f6543f0c551ebb25" - [[package]] name = "lexical-core" version = "0.8.5" @@ -5015,12 +3865,6 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" -[[package]] -name = "linux-raw-sys" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - [[package]] name = "linux-raw-sys" version = "0.4.15" @@ -5100,33 +3944,6 @@ dependencies = [ "weezl", ] -[[package]] -name = "lru" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" -dependencies = [ - "hashbrown 0.15.2", -] - -[[package]] -name = "lz4_flex" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75761162ae2b0e580d7e7c390558127e5f01b4194debd6221fd8c207fc80e3f5" -dependencies = [ - "twox-hash", -] - -[[package]] -name = "mach2" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" -dependencies = [ - "libc", -] - [[package]] name = "malloc_buf" version = "0.0.6" @@ -5240,31 +4057,12 @@ dependencies = [ "digest", ] -[[package]] -name = "measure_time" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbefd235b0aadd181626f281e1d684e116972988c14c264e42069d5e8a5775cc" -dependencies = [ - "instant", - "log", -] - [[package]] name = "memchr" version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" -[[package]] -name = "memmap2" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" -dependencies = [ - "libc", -] - [[package]] name = "memo-map" version = "0.3.3" @@ -5325,15 +4123,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "mock_instant" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9366861eb2a2c436c20b12c8dbec5f798cea6b47ad99216be0282942e2c81ea0" -dependencies = [ - "once_cell", -] - [[package]] name = "mockall" version = "0.13.1" @@ -5384,43 +4173,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "moka" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa6e72583bf6830c956235bff0d5afec8cf2952f579ebad18ae7821a917d950f" -dependencies = [ - "async-io", - "async-lock", - "crossbeam-channel", - "crossbeam-epoch", - "crossbeam-utils", - "futures-util", - "once_cell", - "parking_lot", - "quanta", - "rustc_version", - "scheduled-thread-pool", - "skeptic", - "smallvec", - "tagptr", - "thiserror 1.0.69", - "triomphe", - "uuid", -] - -[[package]] -name = "multimap" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" - -[[package]] -name = "murmurhash32" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2195bf6aa996a481483b29d62a7663eed3fe39600c460e323f8ff41e90bdd89b" - [[package]] name = "nanoid" version = "0.4.0" @@ -5715,49 +4467,12 @@ dependencies = [ "memchr", ] -[[package]] -name = "object_store" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6da452820c715ce78221e8202ccc599b4a52f3e1eb3eedb487b680c81a8e3f3" -dependencies = [ - "async-trait", - "base64 0.22.1", - "bytes", - "chrono", - "futures", - "humantime", - "hyper 1.6.0", - "itertools 0.13.0", - "md-5", - "parking_lot", - "percent-encoding", - "quick-xml 0.36.2", - "rand 0.8.5", - "reqwest 0.12.12", - "ring", - "rustls-pemfile 2.2.0", - "serde", - "serde_json", - "snafu", - "tokio", - "tracing", - "url", - "walkdir", -] - [[package]] name = "once_cell" version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" -[[package]] -name = "oneshot" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ce411919553d3f9fa53a0880544cda985a112117a0444d5ff1e870a893d6ea" - [[package]] name = "onig" version = "6.5.1" @@ -5880,7 +4595,7 @@ dependencies = [ "opentelemetry-http", "opentelemetry-proto", "opentelemetry_sdk", - "prost 0.13.5", + "prost", "reqwest 0.12.12", "thiserror 1.0.69", "tokio", @@ -5896,7 +4611,7 @@ checksum = "a6e05acbfada5ec79023c85368af14abd0b307c015e9064d249b2a950ef459a6" dependencies = [ "opentelemetry", "opentelemetry_sdk", - "prost 0.13.5", + "prost", "tonic", ] @@ -5949,21 +4664,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" -[[package]] -name = "ownedbytes" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a059efb063b8f425b948e042e6b9bd85edfe60e913630ed727b23e2dfcc558" -dependencies = [ - "stable_deref_trait", -] - -[[package]] -name = "parking" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" - [[package]] name = "parking_lot" version = "0.12.3" @@ -5987,15 +4687,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "parse-zoneinfo" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" -dependencies = [ - "regex", -] - [[package]] name = "paste" version = "1.0.15" @@ -6008,10 +4699,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05ef02f6342ac01d8a93b65f96db53fe68a92a15f41144f97fb00a9e669633c3" dependencies = [ - "serde", - "serde_derive", "std_prelude", - "stfu8", ] [[package]] @@ -6036,12 +4724,6 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" -[[package]] -name = "permutation" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df202b0b0f5b8e389955afd5f27b007b00fb948162953f1db9c70d2c7e3157d7" - [[package]] name = "pest" version = "2.7.15" @@ -6087,54 +4769,6 @@ dependencies = [ "sha2", ] -[[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" -dependencies = [ - "fixedbitset", - "indexmap 2.7.1", -] - -[[package]] -name = "phf" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" -dependencies = [ - "phf_shared", -] - -[[package]] -name = "phf_codegen" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" -dependencies = [ - "phf_generator", - "phf_shared", -] - -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared", - "rand 0.8.5", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher", -] - [[package]] name = "pin-project" version = "1.1.10" @@ -6227,22 +4861,6 @@ dependencies = [ "miniz_oxide", ] -[[package]] -name = "polling" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", -] - [[package]] name = "portable-atomic" version = "1.11.0" @@ -6290,16 +4908,6 @@ dependencies = [ "termtree", ] -[[package]] -name = "prettyplease" -version = "0.2.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1ccf34da56fc294e7d4ccf69a85992b7dfb826b7cf57bac6a70bba3494cc08a" -dependencies = [ - "proc-macro2", - "syn 2.0.99", -] - [[package]] name = "proc-macro-error" version = "1.0.4" @@ -6366,16 +4974,6 @@ dependencies = [ "syn 2.0.99", ] -[[package]] -name = "prost" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" -dependencies = [ - "bytes", - "prost-derive 0.12.6", -] - [[package]] name = "prost" version = "0.13.5" @@ -6383,41 +4981,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" dependencies = [ "bytes", - "prost-derive 0.13.5", -] - -[[package]] -name = "prost-build" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" -dependencies = [ - "bytes", - "heck 0.5.0", - "itertools 0.12.1", - "log", - "multimap", - "once_cell", - "petgraph", - "prettyplease", - "prost 0.12.6", - "prost-types", - "regex", - "syn 2.0.99", - "tempfile", -] - -[[package]] -name = "prost-derive" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" -dependencies = [ - "anyhow", - "itertools 0.12.1", - "proc-macro2", - "quote", - "syn 2.0.99", + "prost-derive", ] [[package]] @@ -6433,15 +4997,6 @@ dependencies = [ "syn 2.0.99", ] -[[package]] -name = "prost-types" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" -dependencies = [ - "prost 0.12.6", -] - [[package]] name = "psl-types" version = "2.0.11" @@ -6458,17 +5013,6 @@ dependencies = [ "psl-types", ] -[[package]] -name = "pulldown-cmark" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" -dependencies = [ - "bitflags 2.9.0", - "memchr", - "unicase", -] - [[package]] name = "qoi" version = "0.4.1" @@ -6478,22 +5022,6 @@ dependencies = [ "bytemuck", ] -[[package]] -name = "quanta" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17e662a7a8291a865152364c20c7abc5e60486ab2001e8ec10b24862de0b9ab" -dependencies = [ - "crossbeam-utils", - "libc", - "mach2", - "once_cell", - "raw-cpuid", - "wasi 0.11.0+wasi-snapshot-preview1", - "web-sys", - "winapi", -] - [[package]] name = "quick-error" version = "2.0.1" @@ -6513,19 +5041,9 @@ dependencies = [ name = "quick-xml" version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" -dependencies = [ - "memchr", -] - -[[package]] -name = "quick-xml" -version = "0.36.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe" +checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" dependencies = [ "memchr", - "serde", ] [[package]] @@ -6550,7 +5068,7 @@ dependencies = [ "quinn-udp", "rustc-hash 2.1.1", "rustls 0.23.23", - "socket2 0.5.8", + "socket2", "thiserror 2.0.12", "tokio", "tracing", @@ -6585,7 +5103,7 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.5.8", + "socket2", "tracing", "windows-sys 0.59.0", ] @@ -6599,12 +5117,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - [[package]] name = "radix_trie" version = "0.2.1" @@ -6674,16 +5186,6 @@ dependencies = [ "getrandom 0.3.1", ] -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - [[package]] name = "rangemap" version = "1.5.1" @@ -6740,15 +5242,6 @@ dependencies = [ "rgb", ] -[[package]] -name = "raw-cpuid" -version = "10.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "raw-window-handle" version = "0.5.2" @@ -7039,16 +5532,6 @@ dependencies = [ "syn 2.0.99", ] -[[package]] -name = "roaring" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41589aba99537475bf697f2118357cad1c31590c5a1b9f6d9fc4ad6d07503661" -dependencies = [ - "bytemuck", - "byteorder", -] - [[package]] name = "ron" version = "0.8.1" @@ -7071,16 +5554,6 @@ dependencies = [ "ordered-multimap", ] -[[package]] -name = "rust-stemmers" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54" -dependencies = [ - "serde", - "serde_derive", -] - [[package]] name = "rustc-demangle" version = "0.1.24" @@ -7108,20 +5581,6 @@ dependencies = [ "semver", ] -[[package]] -name = "rustix" -version = "0.37.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "519165d378b97752ca44bbe15047d5d3409e875f39327546b42ac81d7e18c1b6" -dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", -] - [[package]] name = "rustix" version = "0.38.44" @@ -7307,15 +5766,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "scheduled-thread-pool" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cbc66816425a074528352f5789333ecff06ca41b36b0b0efdfbb29edc391a19" -dependencies = [ - "parking_lot", -] - [[package]] name = "schemars" version = "1.0.4" @@ -7417,15 +5867,6 @@ name = "semver" version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" -dependencies = [ - "serde", -] - -[[package]] -name = "seq-macro" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" [[package]] name = "serde" @@ -7670,36 +6111,6 @@ dependencies = [ "time", ] -[[package]] -name = "siphasher" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" - -[[package]] -name = "skeptic" -version = "0.13.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16d23b015676c90a0f01c197bfdc786c20342c73a0afdda9025adb0bc42940a8" -dependencies = [ - "bytecount", - "cargo_metadata", - "error-chain", - "glob", - "pulldown-cmark", - "tempfile", - "walkdir", -] - -[[package]] -name = "sketches-ddsketch" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85636c14b73d81f541e525f585c0a2109e6744e1565b5c1668e31c70c10ed65c" -dependencies = [ - "serde", -] - [[package]] name = "slab" version = "0.4.9" @@ -7721,38 +6132,6 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" -[[package]] -name = "snafu" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" -dependencies = [ - "doc-comment", - "snafu-derive", -] - -[[package]] -name = "snafu-derive" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "socket2" version = "0.5.8" @@ -7763,27 +6142,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "sqlparser" -version = "0.49.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a404d0e14905361b918cb8afdb73605e25c1d5029312bd9785142dcb3aa49e" -dependencies = [ - "log", - "sqlparser_derive", -] - -[[package]] -name = "sqlparser_derive" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b2e185515564f15375f593fb966b5718bc624ba77fe49fa4616ad619690554" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.99", -] - [[package]] name = "sse-stream" version = "0.2.1" @@ -7815,40 +6173,12 @@ version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8207e78455ffdf55661170876f88daf85356e4edd54e0a3dbc79586ca1e50cbe" -[[package]] -name = "stfu8" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51f1e89f093f99e7432c491c382b88a6860a5adbe6bf02574bf0a08efff1978" - [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "strum" -version = "0.26.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.99", -] - [[package]] name = "subtle" version = "2.6.1" @@ -7862,7 +6192,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", - "quote", "unicode-ident", ] @@ -7981,165 +6310,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" dependencies = [ "cfg-expr", - "heck 0.5.0", + "heck", "pkg-config", "toml", "version-compare", ] -[[package]] -name = "tagptr" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" - -[[package]] -name = "tantivy" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8d0582f186c0a6d55655d24543f15e43607299425c5ad8352c242b914b31856" -dependencies = [ - "aho-corasick", - "arc-swap", - "base64 0.22.1", - "bitpacking", - "byteorder", - "census", - "crc32fast", - "crossbeam-channel", - "downcast-rs", - "fastdivide", - "fnv", - "fs4", - "htmlescape", - "itertools 0.12.1", - "levenshtein_automata", - "log", - "lru", - "lz4_flex", - "measure_time", - "memmap2", - "num_cpus", - "once_cell", - "oneshot", - "rayon", - "regex", - "rust-stemmers", - "rustc-hash 1.1.0", - "serde", - "serde_json", - "sketches-ddsketch", - "smallvec", - "tantivy-bitpacker", - "tantivy-columnar", - "tantivy-common", - "tantivy-fst", - "tantivy-query-grammar", - "tantivy-stacker", - "tantivy-tokenizer-api", - "tempfile", - "thiserror 1.0.69", - "time", - "uuid", - "winapi", -] - -[[package]] -name = "tantivy-bitpacker" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284899c2325d6832203ac6ff5891b297fc5239c3dc754c5bc1977855b23c10df" -dependencies = [ - "bitpacking", -] - -[[package]] -name = "tantivy-columnar" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12722224ffbe346c7fec3275c699e508fd0d4710e629e933d5736ec524a1f44e" -dependencies = [ - "downcast-rs", - "fastdivide", - "itertools 0.12.1", - "serde", - "tantivy-bitpacker", - "tantivy-common", - "tantivy-sstable", - "tantivy-stacker", -] - -[[package]] -name = "tantivy-common" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8019e3cabcfd20a1380b491e13ff42f57bb38bf97c3d5fa5c07e50816e0621f4" -dependencies = [ - "async-trait", - "byteorder", - "ownedbytes", - "serde", - "time", -] - -[[package]] -name = "tantivy-fst" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d60769b80ad7953d8a7b2c70cdfe722bbcdcac6bccc8ac934c40c034d866fc18" -dependencies = [ - "byteorder", - "regex-syntax 0.8.5", - "utf8-ranges", -] - -[[package]] -name = "tantivy-query-grammar" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "847434d4af57b32e309f4ab1b4f1707a6c566656264caa427ff4285c4d9d0b82" -dependencies = [ - "nom", -] - -[[package]] -name = "tantivy-sstable" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c69578242e8e9fc989119f522ba5b49a38ac20f576fc778035b96cc94f41f98e" -dependencies = [ - "tantivy-bitpacker", - "tantivy-common", - "tantivy-fst", - "zstd", -] - -[[package]] -name = "tantivy-stacker" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56d6ff5591fc332739b3ce7035b57995a3ce29a93ffd6012660e0949c956ea8" -dependencies = [ - "murmurhash32", - "rand_distr", - "tantivy-common", -] - -[[package]] -name = "tantivy-tokenizer-api" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0dcade25819a89cfe6f17d932c9cedff11989936bf6dd4f336d50392053b04" -dependencies = [ - "serde", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - [[package]] name = "tar" version = "0.4.44" @@ -8174,7 +6350,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22e5a0acb1f3f55f65cc4a866c361b2fb2a0ff6366785ae6fbb5f85df07ba230" dependencies = [ "cfg-if", - "fastrand 2.3.0", + "fastrand", "getrandom 0.3.1", "once_cell", "rustix 0.38.44", @@ -8429,7 +6605,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.8", + "socket2", "tokio-macros", "windows-sys 0.52.0", ] @@ -8580,8 +6756,8 @@ dependencies = [ "hyper-util", "percent-encoding", "pin-project", - "prost 0.13.5", - "socket2 0.5.8", + "prost", + "socket2", "tokio", "tokio-stream", "tower 0.4.13", @@ -8769,12 +6945,6 @@ dependencies = [ "tracing-serde", ] -[[package]] -name = "triomphe" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8f7726da4807b58ea5c96fdc122f80702030edc33b35aff9190a51148ccc85" - [[package]] name = "try-lock" version = "0.2.5" @@ -8798,16 +6968,6 @@ dependencies = [ "utf-8", ] -[[package]] -name = "twox-hash" -version = "1.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" -dependencies = [ - "cfg-if", - "static_assertions", -] - [[package]] name = "typenum" version = "1.18.0" @@ -8936,12 +7096,6 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" -[[package]] -name = "utf8-ranges" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcfc827f90e53a02eaef5e535ee14266c1d569214c6aa70133a624d8a3164ba" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -8986,7 +7140,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0f540e3240398cce6128b64ba83fdbdd86129c16a3aa1a3a252efd66eb3d587" dependencies = [ "getrandom 0.3.1", - "serde", ] [[package]] @@ -9041,12 +7194,6 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" -[[package]] -name = "waker-fn" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" - [[package]] name = "walkdir" version = "2.5.0" @@ -9841,15 +7988,6 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - [[package]] name = "xattr" version = "1.5.0" diff --git a/crates/goose-cli/src/commands/configure.rs b/crates/goose-cli/src/commands/configure.rs index c89986ff551a..87eee36a5234 100644 --- a/crates/goose-cli/src/commands/configure.rs +++ b/crates/goose-cli/src/commands/configure.rs @@ -1179,7 +1179,7 @@ pub async fn configure_settings_dialog() -> Result<(), Box> { .item( "goose_router_strategy", "Router Tool Selection Strategy", - "Configure the strategy for selecting tools to use", + "Experimental: configure a strategy for auto selecting tools to use", ) .item( "tool_permission", @@ -1300,40 +1300,27 @@ pub fn configure_goose_mode_dialog() -> Result<(), Box> { pub fn configure_goose_router_strategy_dialog() -> Result<(), Box> { let config = Config::global(); - // Check if GOOSE_ROUTER_STRATEGY is set as an environment variable - if std::env::var("GOOSE_ROUTER_TOOL_SELECTION_STRATEGY").is_ok() { - let _ = cliclack::log::info("Notice: GOOSE_ROUTER_TOOL_SELECTION_STRATEGY environment variable is set. Configuration will override this."); - } - - let strategy = cliclack::select("Which router strategy would you like to use?") + let enable_router = cliclack::select("Would you like to enable smart tool routing?") .item( - "vector", - "Vector Strategy", - "Use vector-based similarity to select tools", + "true", + "Enable Router", + "Use LLM-based intelligence to select tools", ) .item( - "default", - "Default Strategy", + "false", + "Disable Router", "Use the default tool selection strategy", ) .interact()?; - match strategy { - "vector" => { - config.set_param( - "GOOSE_ROUTER_TOOL_SELECTION_STRATEGY", - Value::String("vector".to_string()), - )?; - cliclack::outro( - "Set to Vector Strategy - using vector-based similarity for tool selection", - )?; + match enable_router { + "true" => { + config.set_param("GOOSE_ENABLE_ROUTER", Value::String("true".to_string()))?; + cliclack::outro("Router enabled - using LLM-based intelligence for tool selection")?; } - "default" => { - config.set_param( - "GOOSE_ROUTER_TOOL_SELECTION_STRATEGY", - Value::String("default".to_string()), - )?; - cliclack::outro("Set to Default Strategy - using default tool selection")?; + "false" => { + config.set_param("GOOSE_ENABLE_ROUTER", Value::String("false".to_string()))?; + cliclack::outro("Router disabled - using default tool selection")?; } _ => unreachable!(), }; diff --git a/crates/goose/Cargo.toml b/crates/goose/Cargo.toml index 473b6320dcdc..b8653bec3b5a 100644 --- a/crates/goose/Cargo.toml +++ b/crates/goose/Cargo.toml @@ -97,8 +97,6 @@ ahash = "0.8" tokio-util = "0.7.15" unicode-normalization = "0.1" -# Vector database for tool selection -lancedb = "0.13" arrow = "52.2" oauth2 = "5.0.0" diff --git a/crates/goose/src/agents/agent.rs b/crates/goose/src/agents/agent.rs index a093cf314eb6..dff5945259c5 100644 --- a/crates/goose/src/agents/agent.rs +++ b/crates/goose/src/agents/agent.rs @@ -21,8 +21,7 @@ use crate::agents::recipe_tools::dynamic_task_tools::{ create_dynamic_task, create_dynamic_task_tool, DYNAMIC_TASK_TOOL_NAME_PREFIX, }; use crate::agents::retry::{RetryManager, RetryResult}; -use crate::agents::router_tool_selector::RouterToolSelectionStrategy; -use crate::agents::router_tools::{ROUTER_LLM_SEARCH_TOOL_NAME, ROUTER_VECTOR_SEARCH_TOOL_NAME}; +use crate::agents::router_tools::ROUTER_LLM_SEARCH_TOOL_NAME; use crate::agents::sub_recipe_manager::SubRecipeManager; use crate::agents::subagent_execution_tool::subagent_execute_task_tool::{ self, SUBAGENT_EXECUTE_TASK_TOOL_NAME, @@ -530,9 +529,7 @@ impl Agent { "Updated ({} chars)", char_count ))])) - } else if tool_call.name == ROUTER_VECTOR_SEARCH_TOOL_NAME - || tool_call.name == ROUTER_LLM_SEARCH_TOOL_NAME - { + } else if tool_call.name == ROUTER_LLM_SEARCH_TOOL_NAME { match self .tool_route_manager .dispatch_route_search_tool(tool_call.arguments) @@ -575,8 +572,8 @@ impl Agent { extension_name: String, request_id: String, ) -> (String, Result, ErrorData>) { - let selector = self.tool_route_manager.get_router_tool_selector().await; - if ToolRouterIndexManager::is_tool_router_enabled(&selector) { + if self.tool_route_manager.is_router_functional().await { + let selector = self.tool_route_manager.get_router_tool_selector().await; if let Some(selector) = selector { let selector_action = if action == "disable" { "remove" } else { "add" }; let extension_manager = self.extension_manager.read().await; @@ -593,7 +590,7 @@ impl Agent { request_id, Err(ErrorData::new( ErrorCode::INTERNAL_ERROR, - format!("Failed to update vector index: {}", e), + format!("Failed to update LLM index: {}", e), None, )), ); @@ -653,31 +650,29 @@ impl Agent { .map_err(|e| ErrorData::new(ErrorCode::INTERNAL_ERROR, e.to_string(), None)); drop(extension_manager); - // Update vector index if operation was successful and vector routing is enabled - if result.is_ok() { + // Update LLM index if operation was successful and LLM routing is functional + if result.is_ok() && self.tool_route_manager.is_router_functional().await { let selector = self.tool_route_manager.get_router_tool_selector().await; - if ToolRouterIndexManager::is_tool_router_enabled(&selector) { - if let Some(selector) = selector { - let vector_action = if action == "disable" { "remove" } else { "add" }; - let extension_manager = self.extension_manager.read().await; - let selector = Arc::new(selector); - if let Err(e) = ToolRouterIndexManager::update_extension_tools( - &selector, - &extension_manager, - &extension_name, - vector_action, - ) - .await - { - return ( - request_id, - Err(ErrorData::new( - ErrorCode::INTERNAL_ERROR, - format!("Failed to update vector index: {}", e), - None, - )), - ); - } + if let Some(selector) = selector { + let llm_action = if action == "disable" { "remove" } else { "add" }; + let extension_manager = self.extension_manager.read().await; + let selector = Arc::new(selector); + if let Err(e) = ToolRouterIndexManager::update_extension_tools( + &selector, + &extension_manager, + &extension_name, + llm_action, + ) + .await + { + return ( + request_id, + Err(ErrorData::new( + ErrorCode::INTERNAL_ERROR, + format!("Failed to update LLM index: {}", e), + None, + )), + ); } } } @@ -718,9 +713,9 @@ impl Agent { } } - // If vector tool selection is enabled, index the tools - let selector = self.tool_route_manager.get_router_tool_selector().await; - if ToolRouterIndexManager::is_tool_router_enabled(&selector) { + // If LLM tool selection is functional, index the tools + if self.tool_route_manager.is_router_functional().await { + let selector = self.tool_route_manager.get_router_tool_selector().await; if let Some(selector) = selector { let extension_manager = self.extension_manager.read().await; let selector = Arc::new(selector); @@ -787,12 +782,9 @@ impl Agent { prefixed_tools } - pub async fn list_tools_for_router( - &self, - strategy: Option, - ) -> Vec { + pub async fn list_tools_for_router(&self) -> Vec { self.tool_route_manager - .list_tools_for_router(strategy, &self.extension_manager) + .list_tools_for_router(&self.extension_manager) .await } @@ -801,9 +793,9 @@ impl Agent { extension_manager.remove_extension(name).await?; drop(extension_manager); - // If vector tool selection is enabled, remove tools from the index - let selector = self.tool_route_manager.get_router_tool_selector().await; - if ToolRouterIndexManager::is_tool_router_enabled(&selector) { + // If LLM tool selection is functional, remove tools from the index + if self.tool_route_manager.is_router_functional().await { + let selector = self.tool_route_manager.get_router_tool_selector().await; if let Some(selector) = selector { let extension_manager = self.extension_manager.read().await; ToolRouterIndexManager::update_extension_tools( @@ -1350,7 +1342,7 @@ impl Agent { self.frontend_instructions.lock().await.clone(), extension_manager.suggest_disable_extensions_prompt().await, Some(model_name), - None, + false, ); let recipe_prompt = prompt_manager.get_recipe_prompt().await; @@ -1509,7 +1501,7 @@ mod tests { let prompt_manager = agent.prompt_manager.lock().await; let system_prompt = - prompt_manager.build_system_prompt(vec![], None, Value::Null, None, None); + prompt_manager.build_system_prompt(vec![], None, Value::Null, None, false); let final_output_tool_ref = agent.final_output_tool.lock().await; let final_output_tool_system_prompt = diff --git a/crates/goose/src/agents/mod.rs b/crates/goose/src/agents/mod.rs index 8fb20fbc15ff..c18cfd916075 100644 --- a/crates/goose/src/agents/mod.rs +++ b/crates/goose/src/agents/mod.rs @@ -21,7 +21,6 @@ pub mod todo_tools; mod tool_execution; mod tool_route_manager; mod tool_router_index_manager; -pub(crate) mod tool_vectordb; pub mod types; pub use agent::{Agent, AgentEvent}; diff --git a/crates/goose/src/agents/prompt_manager.rs b/crates/goose/src/agents/prompt_manager.rs index e2973d3b8989..87c3bbb93809 100644 --- a/crates/goose/src/agents/prompt_manager.rs +++ b/crates/goose/src/agents/prompt_manager.rs @@ -3,8 +3,7 @@ use serde_json::Value; use std::collections::HashMap; use crate::agents::extension::ExtensionInfo; -use crate::agents::router_tool_selector::RouterToolSelectionStrategy; -use crate::agents::router_tools::{llm_search_tool_prompt, vector_search_tool_prompt}; +use crate::agents::router_tools::llm_search_tool_prompt; use crate::providers::base::get_current_model; use crate::{config::Config, prompt_template, utils::sanitize_unicode_tags}; @@ -69,7 +68,7 @@ impl PromptManager { frontend_instructions: Option, suggest_disable_extensions_prompt: Value, model_name: Option<&str>, - tool_selection_strategy: Option, + router_enabled: bool, ) -> String { let mut context: HashMap<&str, Value> = HashMap::new(); let mut extensions_info = extensions_info.clone(); @@ -96,20 +95,11 @@ impl PromptManager { serde_json::to_value(sanitized_extensions_info).unwrap(), ); - match tool_selection_strategy { - Some(RouterToolSelectionStrategy::Vector) => { - context.insert( - "tool_selection_strategy", - Value::String(vector_search_tool_prompt()), - ); - } - Some(RouterToolSelectionStrategy::Llm) => { - context.insert( - "tool_selection_strategy", - Value::String(llm_search_tool_prompt()), - ); - } - None => {} + if router_enabled { + context.insert( + "tool_selection_strategy", + Value::String(llm_search_tool_prompt()), + ); } context.insert( @@ -246,7 +236,7 @@ mod tests { manager.set_system_prompt_override(malicious_override.to_string()); let result = - manager.build_system_prompt(vec![], None, Value::String("".to_string()), None, None); + manager.build_system_prompt(vec![], None, Value::String("".to_string()), None, false); assert!(!result.contains('\u{E0041}')); assert!(!result.contains('\u{E0042}')); @@ -262,7 +252,7 @@ mod tests { manager.add_system_prompt_extra(malicious_extra.to_string()); let result = - manager.build_system_prompt(vec![], None, Value::String("".to_string()), None, None); + manager.build_system_prompt(vec![], None, Value::String("".to_string()), None, false); assert!(!result.contains('\u{E0041}')); assert!(!result.contains('\u{E0042}')); @@ -279,7 +269,7 @@ mod tests { manager.add_system_prompt_extra("Third\u{E0043}instruction".to_string()); let result = - manager.build_system_prompt(vec![], None, Value::String("".to_string()), None, None); + manager.build_system_prompt(vec![], None, Value::String("".to_string()), None, false); assert!(!result.contains('\u{E0041}')); assert!(!result.contains('\u{E0042}')); @@ -296,7 +286,7 @@ mod tests { manager.add_system_prompt_extra(legitimate_unicode.to_string()); let result = - manager.build_system_prompt(vec![], None, Value::String("".to_string()), None, None); + manager.build_system_prompt(vec![], None, Value::String("".to_string()), None, false); assert!(result.contains("δΈ–η•Œ")); assert!(result.contains("🌍")); @@ -318,7 +308,7 @@ mod tests { None, Value::String("".to_string()), None, - None, + false, ); assert!(!result.contains('\u{E0041}')); diff --git a/crates/goose/src/agents/reply_parts.rs b/crates/goose/src/agents/reply_parts.rs index db302add6ec8..46178c8933de 100644 --- a/crates/goose/src/agents/reply_parts.rs +++ b/crates/goose/src/agents/reply_parts.rs @@ -6,7 +6,6 @@ use async_stream::try_stream; use futures::stream::StreamExt; use super::super::agents::Agent; -use crate::agents::router_tool_selector::RouterToolSelectionStrategy; use crate::conversation::message::{Message, MessageContent, ToolRequest}; use crate::conversation::Conversation; use crate::providers::base::{stream_from_single_message, MessageStream, Provider, ProviderUsage}; @@ -35,24 +34,17 @@ async fn toolshim_postprocess( impl Agent { /// Prepares tools and system prompt for a provider request pub async fn prepare_tools_and_prompt(&self) -> anyhow::Result<(Vec, Vec, String)> { - // Get tool selection strategy from config - let tool_selection_strategy = self - .tool_route_manager - .get_router_tool_selection_strategy() - .await; + // Get router enabled status + let router_enabled = self.tool_route_manager.is_router_enabled().await; // Get tools from extension manager - let mut tools = match tool_selection_strategy { - Some(RouterToolSelectionStrategy::Vector) => { - self.list_tools_for_router(Some(RouterToolSelectionStrategy::Vector)) - .await - } - Some(RouterToolSelectionStrategy::Llm) => { - self.list_tools_for_router(Some(RouterToolSelectionStrategy::Llm)) - .await - } - _ => self.list_tools(None).await, - }; + let mut tools = self.list_tools_for_router().await; + + // If router is disabled and no tools were returned, fall back to regular tools + if !router_enabled && tools.is_empty() { + tools = self.list_tools(None).await; + } + // Add frontend tools let frontend_tools = self.frontend_tools.lock().await; for frontend_tool in frontend_tools.values() { @@ -74,7 +66,7 @@ impl Agent { self.frontend_instructions.lock().await.clone(), extension_manager.suggest_disable_extensions_prompt().await, Some(model_name), - tool_selection_strategy, + router_enabled, ); // Handle toolshim if enabled diff --git a/crates/goose/src/agents/router_tool_selector.rs b/crates/goose/src/agents/router_tool_selector.rs index f1ec402f0868..6ed4f199c568 100644 --- a/crates/goose/src/agents/router_tool_selector.rs +++ b/crates/goose/src/agents/router_tool_selector.rs @@ -1,22 +1,19 @@ use rmcp::model::Tool; use rmcp::model::{Content, ErrorCode, ErrorData}; -use anyhow::{Context, Result}; +use anyhow::Result; use async_trait::async_trait; use serde::Serialize; use serde_json::Value; use std::borrow::Cow; use std::collections::HashMap; use std::collections::VecDeque; -use std::env; use std::sync::Arc; use tokio::sync::RwLock; -use crate::agents::tool_vectordb::ToolVectorDB; use crate::conversation::message::Message; -use crate::model::ModelConfig; use crate::prompt_template::render_global_file; -use crate::providers::{self, base::Provider}; +use crate::providers::base::Provider; #[derive(Serialize)] struct ToolSelectorContext { @@ -24,12 +21,6 @@ struct ToolSelectorContext { query: String, } -#[derive(Debug, Clone, PartialEq)] -pub enum RouterToolSelectionStrategy { - Vector, - Llm, -} - #[async_trait] pub trait RouterToolSelector: Send + Sync { async fn select_tools(&self, params: Value) -> Result, ErrorData>; @@ -37,240 +28,6 @@ pub trait RouterToolSelector: Send + Sync { async fn remove_tool(&self, tool_name: &str) -> Result<(), ErrorData>; async fn record_tool_call(&self, tool_name: &str) -> Result<(), ErrorData>; async fn get_recent_tool_calls(&self, limit: usize) -> Result, ErrorData>; - fn selector_type(&self) -> RouterToolSelectionStrategy; -} - -pub struct VectorToolSelector { - vector_db: Arc>, - embedding_provider: Arc, - recent_tool_calls: Arc>>, -} - -impl VectorToolSelector { - pub async fn new(provider: Arc, table_name: String) -> Result { - let vector_db = ToolVectorDB::new(Some(table_name)).await?; - - let embedding_provider = if env::var("GOOSE_EMBEDDING_MODEL_PROVIDER").is_ok() { - // If env var is set, create a new provider for embeddings - // Get embedding model and provider from environment variables - let embedding_model = env::var("GOOSE_EMBEDDING_MODEL") - .unwrap_or_else(|_| "text-embedding-3-small".to_string()); - let embedding_provider_name = - env::var("GOOSE_EMBEDDING_MODEL_PROVIDER").unwrap_or_else(|_| "openai".to_string()); - - // Create the provider using the factory - let model_config = ModelConfig::new(embedding_model.as_str()) - .context("Failed to create model config for embedding provider")?; - providers::create(&embedding_provider_name, model_config).context(format!( - "Failed to create {} provider for embeddings. If using OpenAI, make sure OPENAI_API_KEY env var is set or that you have configured the OpenAI provider via Goose before.", - embedding_provider_name - ))? - } else { - // Otherwise fall back to using the same provider instance as used for base goose model - provider.clone() - }; - - Ok(Self { - vector_db: Arc::new(RwLock::new(vector_db)), - embedding_provider, - recent_tool_calls: Arc::new(RwLock::new(VecDeque::with_capacity(100))), - }) - } -} - -#[async_trait] -impl RouterToolSelector for VectorToolSelector { - async fn select_tools(&self, params: Value) -> Result, ErrorData> { - let query = params - .get("query") - .and_then(|v| v.as_str()) - .ok_or_else(|| ErrorData { - code: ErrorCode::INVALID_PARAMS, - message: Cow::from("Missing 'query' parameter"), - data: None, - })?; - - let k = params.get("k").and_then(|v| v.as_u64()).unwrap_or(5) as usize; - - // Extract extension_name from params if present - let extension_name = params.get("extension_name").and_then(|v| v.as_str()); - - // Check if provider supports embeddings - if !self.embedding_provider.supports_embeddings() { - return Err(ErrorData { - code: ErrorCode::INTERNAL_ERROR, - message: Cow::from("Embedding provider does not support embeddings"), - data: None, - }); - } - - let embeddings = self - .embedding_provider - .create_embeddings(vec![query.to_string()]) - .await - .map_err(|e| ErrorData { - code: ErrorCode::INTERNAL_ERROR, - message: Cow::from(format!("Failed to generate query embedding: {}", e)), - data: None, - })?; - - let query_embedding = embeddings.into_iter().next().ok_or_else(|| ErrorData { - code: ErrorCode::INTERNAL_ERROR, - message: Cow::from("No embedding returned"), - data: None, - })?; - - let vector_db = self.vector_db.read().await; - let tools = vector_db - .search_tools(query_embedding, k, extension_name) - .await - .map_err(|e| ErrorData { - code: ErrorCode::INTERNAL_ERROR, - message: Cow::from(format!("Failed to search tools: {}", e)), - data: None, - })?; - - let selected_tools: Vec = tools - .into_iter() - .map(|tool| { - let text = format!( - "Tool: {}\nDescription: {}\nSchema: {}", - tool.tool_name, tool.description, tool.schema - ); - Content::text(text) - }) - .collect(); - - Ok(selected_tools) - } - - async fn index_tools(&self, tools: &[Tool], extension_name: &str) -> Result<(), ErrorData> { - let texts_to_embed: Vec = tools - .iter() - .map(|tool| { - let schema_str = serde_json::to_string_pretty(&tool.input_schema) - .unwrap_or_else(|_| "{}".to_string()); - format!( - "{} {} {}", - tool.name, - tool.description - .as_ref() - .map(|d| d.as_ref()) - .unwrap_or_default(), - schema_str - ) - }) - .collect(); - - if !self.embedding_provider.supports_embeddings() { - return Err(ErrorData { - code: ErrorCode::INTERNAL_ERROR, - message: Cow::from("Embedding provider does not support embeddings"), - data: None, - }); - } - - let embeddings = self - .embedding_provider - .create_embeddings(texts_to_embed) - .await - .map_err(|e| ErrorData { - code: ErrorCode::INTERNAL_ERROR, - message: Cow::from(format!("Failed to generate tool embeddings: {}", e)), - data: None, - })?; - - // Create tool records - let tool_records: Vec = tools - .iter() - .zip(embeddings.into_iter()) - .map(|(tool, vector)| { - let schema_str = serde_json::to_string_pretty(&tool.input_schema) - .unwrap_or_else(|_| "{}".to_string()); - crate::agents::tool_vectordb::ToolRecord { - tool_name: tool.name.to_string(), - description: tool - .description - .as_ref() - .map(|d| d.to_string()) - .unwrap_or_default(), - schema: schema_str, - vector, - extension_name: extension_name.to_string(), - } - }) - .collect(); - - // Get vector_db lock - let vector_db = self.vector_db.read().await; - - // Filter out tools that already exist in the database - let mut new_tool_records = Vec::new(); - for record in tool_records { - // Check if tool exists by searching for it - let existing_tools = vector_db - .search_tools(record.vector.clone(), 1, Some(&record.extension_name)) - .await - .map_err(|e| ErrorData { - code: ErrorCode::INTERNAL_ERROR, - message: Cow::from(format!("Failed to search for existing tools: {}", e)), - data: None, - })?; - - // Only add if no exact match found - if !existing_tools - .iter() - .any(|t| t.tool_name == record.tool_name) - { - new_tool_records.push(record); - } - } - - // Only index if there are new tools to add - if !new_tool_records.is_empty() { - vector_db - .index_tools(new_tool_records) - .await - .map_err(|e| ErrorData { - code: ErrorCode::INTERNAL_ERROR, - message: Cow::from(format!("Failed to index tools: {}", e)), - data: None, - })?; - } - - Ok(()) - } - - async fn remove_tool(&self, tool_name: &str) -> Result<(), ErrorData> { - let vector_db = self.vector_db.read().await; - vector_db - .remove_tool(tool_name) - .await - .map_err(|e| ErrorData { - code: ErrorCode::INTERNAL_ERROR, - message: Cow::from(format!("Failed to remove tool {}: {}", tool_name, e)), - data: None, - })?; - Ok(()) - } - - async fn record_tool_call(&self, tool_name: &str) -> Result<(), ErrorData> { - let mut recent_calls = self.recent_tool_calls.write().await; - if recent_calls.len() >= 100 { - recent_calls.pop_front(); - } - recent_calls.push_back(tool_name.to_string()); - Ok(()) - } - - async fn get_recent_tool_calls(&self, limit: usize) -> Result, ErrorData> { - let recent_calls = self.recent_tool_calls.read().await; - Ok(recent_calls.iter().rev().take(limit).cloned().collect()) - } - - fn selector_type(&self) -> RouterToolSelectionStrategy { - RouterToolSelectionStrategy::Vector - } } pub struct LLMToolSelector { @@ -338,7 +95,7 @@ impl RouterToolSelector for LLMToolSelector { let user_message = Message::user().with_text(&user_prompt); let response = self .llm_provider - .complete("", &[user_message], &[]) + .complete("system", &[user_message], &[]) .await .map_err(|e| ErrorData { code: ErrorCode::INTERNAL_ERROR, @@ -413,30 +170,12 @@ impl RouterToolSelector for LLMToolSelector { let recent_calls = self.recent_tool_calls.read().await; Ok(recent_calls.iter().rev().take(limit).cloned().collect()) } - - fn selector_type(&self) -> RouterToolSelectionStrategy { - RouterToolSelectionStrategy::Llm - } } // Helper function to create a boxed tool selector pub async fn create_tool_selector( - strategy: Option, provider: Arc, - table_name: Option, ) -> Result> { - match strategy { - Some(RouterToolSelectionStrategy::Vector) => { - let selector = VectorToolSelector::new(provider, table_name.unwrap()).await?; - Ok(Box::new(selector)) - } - Some(RouterToolSelectionStrategy::Llm) => { - let selector = LLMToolSelector::new(provider).await?; - Ok(Box::new(selector)) - } - None => { - let selector = LLMToolSelector::new(provider).await?; - Ok(Box::new(selector)) - } - } + let selector = LLMToolSelector::new(provider).await?; + Ok(Box::new(selector)) } diff --git a/crates/goose/src/agents/router_tools.rs b/crates/goose/src/agents/router_tools.rs index a4440f66bfb4..263e2226f579 100644 --- a/crates/goose/src/agents/router_tools.rs +++ b/crates/goose/src/agents/router_tools.rs @@ -6,65 +6,8 @@ use indoc::indoc; use rmcp::model::{Tool, ToolAnnotations}; use rmcp::object; -pub const ROUTER_VECTOR_SEARCH_TOOL_NAME: &str = "router__vector_search"; pub const ROUTER_LLM_SEARCH_TOOL_NAME: &str = "router__llm_search"; -pub fn vector_search_tool() -> Tool { - Tool::new( - ROUTER_VECTOR_SEARCH_TOOL_NAME.to_string(), - indoc! {r#" - Searches for relevant tools based on the user's messages. - Format a query to search for the most relevant tools based on the user's messages. - Pay attention to the keywords in the user's messages, especially the last message and potential tools they are asking for. - This tool should be invoked when the user's messages suggest they are asking for a tool to be run. - You have the list of extension names available to you in your system prompt. - Use the extension_name parameter to filter tools by the appropriate extension. - For example, if the user is asking to list the files in the current directory, you filter for the "developer" extension. - Example: {"User": "list the files in the current directory", "Query": "list files in current directory", "Extension Name": "developer", "k": 5} - Extension name is not optional, it is required. - "#} - .to_string(), - object!({ - "type": "object", - "required": ["query", "extension_name"], - "properties": { - "query": {"type": "string", "description": "The query to search for the most relevant tools based on the user's messages"}, - "k": {"type": "integer", "description": "The number of tools to retrieve (defaults to 5)", "default": 5}, - "extension_name": {"type": "string", "description": "Name of the extension to filter tools by"} - } - }) - ).annotate(ToolAnnotations { - title: Some("Vector search for relevant tools".to_string()), - read_only_hint: Some(true), - destructive_hint: Some(false), - idempotent_hint: Some(false), - open_world_hint: Some(false), - }) -} - -pub fn vector_search_tool_prompt() -> String { - format!( - r#"# Tool Selection Instructions - Important: the user has opted to dynamically enable tools, so although an extension could be enabled, \ - please invoke the vector search tool to actually retrieve the most relevant tools to use according to the user's messages. - For example, if the user has 3 extensions enabled, but they are asking for a tool to read a pdf file, \ - you would invoke the vector_search tool to find the most relevant read pdf tool. - By dynamically enabling tools, you (Goose) as the agent save context window space and allow the user to dynamically retrieve the most relevant tools. - Be sure to format the query to search rather than pass in the user's messages directly. - In addition to the extension names available to you, you also have platform extension tools available to you. - The platform extension contains the following tools: - - {} - - {} - - {} - - {} - "#, - PLATFORM_SEARCH_AVAILABLE_EXTENSIONS_TOOL_NAME, - PLATFORM_MANAGE_EXTENSIONS_TOOL_NAME, - PLATFORM_READ_RESOURCE_TOOL_NAME, - PLATFORM_LIST_RESOURCES_TOOL_NAME - ) -} - pub fn llm_search_tool() -> Tool { Tool::new( ROUTER_LLM_SEARCH_TOOL_NAME.to_string(), diff --git a/crates/goose/src/agents/tool_route_manager.rs b/crates/goose/src/agents/tool_route_manager.rs index 6c1be91fc92f..11c44f4b326e 100644 --- a/crates/goose/src/agents/tool_route_manager.rs +++ b/crates/goose/src/agents/tool_route_manager.rs @@ -1,11 +1,8 @@ use crate::agents::extension_manager::ExtensionManager; -use crate::agents::router_tool_selector::{ - create_tool_selector, RouterToolSelectionStrategy, RouterToolSelector, -}; +use crate::agents::router_tool_selector::{create_tool_selector, RouterToolSelector}; use crate::agents::router_tools::{self}; use crate::agents::tool_execution::ToolCallResult; use crate::agents::tool_router_index_manager::ToolRouterIndexManager; -use crate::agents::tool_vectordb::generate_table_id; use crate::config::Config; use crate::conversation::message::ToolRequest; use crate::providers::base::Provider; @@ -70,21 +67,18 @@ impl ToolRouteManager { } } - pub async fn get_router_tool_selection_strategy(&self) -> Option { + pub async fn is_router_enabled(&self) -> bool { if *self.router_disabled_override.lock().await { - return None; + return false; } let config = Config::global(); - let router_tool_selection_strategy = config - .get_param("GOOSE_ROUTER_TOOL_SELECTION_STRATEGY") - .unwrap_or_else(|_| "default".to_string()); - - match router_tool_selection_strategy.to_lowercase().as_str() { - "vector" => Some(RouterToolSelectionStrategy::Vector), - "llm" => Some(RouterToolSelectionStrategy::Llm), - _ => None, + if let Ok(config_value) = config.get_param::("GOOSE_ENABLE_ROUTER") { + return config_value.to_lowercase() == "true"; } + + // Default to false if neither is set + false } pub async fn update_router_tool_selector( @@ -93,33 +87,27 @@ impl ToolRouteManager { reindex_all: Option, extension_manager: &Arc>, ) -> Result<()> { - let strategy = self.get_router_tool_selection_strategy().await; - let selector = match strategy { - Some(RouterToolSelectionStrategy::Vector) => { - let table_name = generate_table_id(); - let selector = create_tool_selector(strategy, provider.clone(), Some(table_name)) - .await - .map_err(|e| anyhow!("Failed to create tool selector: {}", e))?; - Arc::new(selector) - } - Some(RouterToolSelectionStrategy::Llm) => { - let selector = create_tool_selector(strategy, provider.clone(), None) - .await - .map_err(|e| anyhow!("Failed to create tool selector: {}", e))?; - Arc::new(selector) - } - None => return Ok(()), - }; + let enabled = self.is_router_enabled().await; + if !enabled { + return Ok(()); + } + + let selector = create_tool_selector(provider.clone()) + .await + .map_err(|e| anyhow!("Failed to create tool selector: {}", e))?; + + // Wrap selector in Arc for the index manager methods + let selector_arc = Arc::new(selector); // First index platform tools let extension_manager = extension_manager.read().await; - ToolRouterIndexManager::index_platform_tools(&selector, &extension_manager).await?; + ToolRouterIndexManager::index_platform_tools(&selector_arc, &extension_manager).await?; if reindex_all.unwrap_or(false) { let enabled_extensions = extension_manager.list_extensions().await?; for extension_name in enabled_extensions { if let Err(e) = ToolRouterIndexManager::update_extension_tools( - &selector, + &selector_arc, &extension_manager, &extension_name, "add", @@ -135,7 +123,7 @@ impl ToolRouteManager { } // Update the selector - *self.router_tool_selector.lock().await = Some(selector.clone()); + *self.router_tool_selector.lock().await = Some(selector_arc); Ok(()) } @@ -144,27 +132,34 @@ impl ToolRouteManager { self.router_tool_selector.lock().await.clone() } + /// Check if the router is actually functional (enabled in config AND initialized) + pub async fn is_router_functional(&self) -> bool { + if !self.is_router_enabled().await { + return false; + } + + // Check if the selector actually exists (meaning it was successfully initialized) + self.router_tool_selector.lock().await.is_some() + } + pub async fn list_tools_for_router( &self, - strategy: Option, extension_manager: &Arc>, ) -> Vec { + // If router is disabled or overridden, return empty if *self.router_disabled_override.lock().await { return vec![]; } let mut prefixed_tools = vec![]; - match strategy { - Some(RouterToolSelectionStrategy::Vector) => { - prefixed_tools.push(router_tools::vector_search_tool()); - } - Some(RouterToolSelectionStrategy::Llm) => { - prefixed_tools.push(router_tools::llm_search_tool()); - } - None => {} + + // If router is enabled but not functional (no provider), just return the search tool + if !self.is_router_functional().await { + return prefixed_tools; } + prefixed_tools.push(router_tools::llm_search_tool()); - // Get recent tool calls from router tool selector if available + // Get recent tool calls from router tool selector let selector = self.router_tool_selector.lock().await.clone(); if let Some(selector) = selector { if let Ok(recent_calls) = selector.get_recent_tool_calls(20).await { diff --git a/crates/goose/src/agents/tool_router_index_manager.rs b/crates/goose/src/agents/tool_router_index_manager.rs index ec1a3ac9b925..c419de174870 100644 --- a/crates/goose/src/agents/tool_router_index_manager.rs +++ b/crates/goose/src/agents/tool_router_index_manager.rs @@ -4,13 +4,13 @@ use tracing; use crate::agents::extension_manager::ExtensionManager; use crate::agents::platform_tools; -use crate::agents::router_tool_selector::{RouterToolSelectionStrategy, RouterToolSelector}; +use crate::agents::router_tool_selector::RouterToolSelector; -/// Manages tool indexing operations for the router when vector routing is enabled +/// Manages tool indexing operations for the router when LLM routing is enabled pub struct ToolRouterIndexManager; impl ToolRouterIndexManager { - /// Updates the vector index for tools when extensions are added or removed + /// Updates the LLM index for tools when extensions are added or removed pub async fn update_extension_tools( selector: &Arc>, extension_manager: &ExtensionManager, @@ -98,14 +98,7 @@ impl ToolRouterIndexManager { .await .map_err(|e| anyhow!("Failed to index platform tools: {}", e))?; - tracing::info!("Indexed platform tools for vector search"); + tracing::info!("Indexed platform tools for LLM search"); Ok(()) } - - /// Helper to check if vector or llm tool router is enabled - pub fn is_tool_router_enabled(selector: &Option>>) -> bool { - selector.is_some() - && (selector.as_ref().unwrap().selector_type() == RouterToolSelectionStrategy::Vector - || selector.as_ref().unwrap().selector_type() == RouterToolSelectionStrategy::Llm) - } } diff --git a/crates/goose/src/agents/tool_vectordb.rs b/crates/goose/src/agents/tool_vectordb.rs deleted file mode 100644 index 0cc86b876eea..000000000000 --- a/crates/goose/src/agents/tool_vectordb.rs +++ /dev/null @@ -1,605 +0,0 @@ -use anyhow::{Context, Result}; -use arrow::array::{FixedSizeListBuilder, StringArray}; -use arrow::datatypes::{DataType, Field, Schema}; -use chrono::Local; -use etcetera::base_strategy::{BaseStrategy, Xdg}; -use futures::TryStreamExt; -use lancedb::connect; -use lancedb::connection::Connection; -use lancedb::query::{ExecutableQuery, QueryBase}; -use serde::{Deserialize, Serialize}; -use std::path::PathBuf; -use std::sync::Arc; -use tokio::sync::RwLock; - -use crate::config::Config; - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct ToolRecord { - pub tool_name: String, - pub description: String, - pub schema: String, - pub vector: Vec, - pub extension_name: String, -} - -pub struct ToolVectorDB { - connection: Arc>, - table_name: String, -} - -impl ToolVectorDB { - pub async fn new(table_name: Option) -> Result { - let db_path = Self::get_db_path()?; - - // Ensure the directory exists - if let Some(parent) = db_path.parent() { - tokio::fs::create_dir_all(parent) - .await - .context("Failed to create database directory")?; - } - - let connection = connect(db_path.to_str().unwrap()) - .execute() - .await - .context("Failed to connect to LanceDB")?; - - let tool_db = Self { - connection: Arc::new(RwLock::new(connection)), - table_name: table_name.unwrap_or_else(|| "tools".to_string()), - }; - - // Initialize the table if it doesn't exist - tool_db.init_table().await?; - - Ok(tool_db) - } - - pub fn get_db_path() -> Result { - let config = Config::global(); - - // Check for custom database path override - if let Ok(custom_path) = config.get_param::("GOOSE_VECTOR_DB_PATH") { - let path = PathBuf::from(custom_path); - - // Validate the path is absolute - if !path.is_absolute() { - return Err(anyhow::anyhow!( - "GOOSE_VECTOR_DB_PATH must be an absolute path, got: {}", - path.display() - )); - } - - return Ok(path); - } - - // Fall back to default XDG-based path - let data_dir = Xdg::new() - .context("Failed to determine base strategy")? - .data_dir(); - - Ok(data_dir.join("goose").join("tool_db")) - } - - async fn init_table(&self) -> Result<()> { - let connection = self.connection.read().await; - - // Check if table exists - let table_names = connection - .table_names() - .execute() - .await - .context("Failed to list tables")?; - - if !table_names.contains(&self.table_name) { - // Create the table schema - let schema = Arc::new(Schema::new(vec![ - Field::new("tool_name", DataType::Utf8, false), - Field::new("description", DataType::Utf8, false), - Field::new("schema", DataType::Utf8, false), - Field::new( - "vector", - DataType::FixedSizeList( - Arc::new(Field::new("item", DataType::Float32, true)), - 1536, // OpenAI embedding dimension - ), - false, - ), - Field::new("extension_name", DataType::Utf8, false), - ])); - - // Create empty table - let tool_names = StringArray::from(vec![] as Vec<&str>); - let descriptions = StringArray::from(vec![] as Vec<&str>); - let schemas = StringArray::from(vec![] as Vec<&str>); - let extension_names = StringArray::from(vec![] as Vec<&str>); - - // Create empty fixed size list array for vectors - let mut vectors_builder = - FixedSizeListBuilder::new(arrow::array::Float32Builder::new(), 1536); - let vectors = vectors_builder.finish(); - - let batch = arrow::record_batch::RecordBatch::try_new( - schema.clone(), - vec![ - Arc::new(tool_names), - Arc::new(descriptions), - Arc::new(schemas), - Arc::new(vectors), - Arc::new(extension_names), - ], - ) - .context("Failed to create record batch")?; - // Create an empty table with the schema - // LanceDB will create the table from the RecordBatch - drop(connection); - let connection = self.connection.write().await; - - // Use the RecordBatch directly - let reader = arrow::record_batch::RecordBatchIterator::new( - vec![Ok(batch)].into_iter(), - schema.clone(), - ); - - connection - .create_table(&self.table_name, Box::new(reader)) - .execute() - .await - .map_err(|e| { - anyhow::anyhow!("Failed to create tools table '{}': {}", self.table_name, e) - })?; - } - - Ok(()) - } - - #[cfg(test)] - pub async fn clear_tools(&self) -> Result<()> { - let connection = self.connection.write().await; - - // Try to open the table first - match connection.open_table(&self.table_name).execute().await { - Ok(table) => { - // Delete all records instead of dropping the table - table - .delete("1=1") // This will match all records - .await - .context("Failed to delete all records")?; - } - Err(_) => { - // If table doesn't exist, that's fine - we'll create it - } - } - - drop(connection); - - // Ensure table exists with correct schema - self.init_table().await?; - - Ok(()) - } - - pub async fn index_tools(&self, tools: Vec) -> Result<()> { - if tools.is_empty() { - return Ok(()); - } - - let tool_names: Vec<&str> = tools.iter().map(|t| t.tool_name.as_str()).collect(); - let descriptions: Vec<&str> = tools.iter().map(|t| t.description.as_str()).collect(); - let schemas: Vec<&str> = tools.iter().map(|t| t.schema.as_str()).collect(); - let extension_names: Vec<&str> = tools.iter().map(|t| t.extension_name.as_str()).collect(); - - let vectors_data: Vec>>> = tools - .iter() - .map(|t| Some(t.vector.iter().map(|&v| Some(v)).collect())) - .collect(); - - let schema = Arc::new(Schema::new(vec![ - Field::new("tool_name", DataType::Utf8, false), - Field::new("description", DataType::Utf8, false), - Field::new("schema", DataType::Utf8, false), - Field::new( - "vector", - DataType::FixedSizeList( - Arc::new(Field::new("item", DataType::Float32, true)), - 1536, - ), - false, - ), - Field::new("extension_name", DataType::Utf8, false), - ])); - - let tool_names_array = StringArray::from(tool_names); - let descriptions_array = StringArray::from(descriptions); - let schemas_array = StringArray::from(schemas); - let extension_names_array = StringArray::from(extension_names); - // Build vectors array - let mut vectors_builder = - FixedSizeListBuilder::new(arrow::array::Float32Builder::new(), 1536); - for vector_opt in vectors_data { - if let Some(vector) = vector_opt { - let values = vectors_builder.values(); - for val_opt in vector { - if let Some(val) = val_opt { - values.append_value(val); - } else { - values.append_null(); - } - } - vectors_builder.append(true); - } else { - vectors_builder.append(false); - } - } - let vectors_array = vectors_builder.finish(); - - let batch = arrow::record_batch::RecordBatch::try_new( - schema.clone(), - vec![ - Arc::new(tool_names_array), - Arc::new(descriptions_array), - Arc::new(schemas_array), - Arc::new(vectors_array), - Arc::new(extension_names_array), - ], - ) - .context("Failed to create record batch")?; - - let connection = self.connection.read().await; - let table = connection - .open_table(&self.table_name) - .execute() - .await - .context("Failed to open tools table")?; - - // Add batch to table using RecordBatchIterator - let reader = arrow::record_batch::RecordBatchIterator::new( - vec![Ok(batch)].into_iter(), - schema.clone(), - ); - - table - .add(Box::new(reader)) - .execute() - .await - .context("Failed to add tools to table")?; - - Ok(()) - } - - pub async fn search_tools( - &self, - query_vector: Vec, - k: usize, - extension_name: Option<&str>, - ) -> Result> { - let connection = self.connection.read().await; - - let table = connection - .open_table(&self.table_name) - .execute() - .await - .context("Failed to open tools table")?; - - let search = table - .vector_search(query_vector) - .context("Failed to create vector search")?; - - let results = search - .limit(k) - .execute() - .await - .context("Failed to execute vector search")?; - - let batches: Vec<_> = results.try_collect().await?; - - let mut tools = Vec::new(); - for batch in batches { - let tool_names = batch - .column_by_name("tool_name") - .context("Missing tool_name column")? - .as_any() - .downcast_ref::() - .context("Invalid tool_name column type")?; - - let descriptions = batch - .column_by_name("description") - .context("Missing description column")? - .as_any() - .downcast_ref::() - .context("Invalid description column type")?; - - let schemas = batch - .column_by_name("schema") - .context("Missing schema column")? - .as_any() - .downcast_ref::() - .context("Invalid schema column type")?; - - let extension_names = batch - .column_by_name("extension_name") - .context("Missing extension_name column")? - .as_any() - .downcast_ref::() - .context("Invalid extension_name column type")?; - - // Get the distance scores - let distances = batch - .column_by_name("_distance") - .context("Missing _distance column")? - .as_any() - .downcast_ref::() - .context("Invalid _distance column type")?; - - for i in 0..batch.num_rows() { - let tool_name = tool_names.value(i).to_string(); - let _distance = distances.value(i); - let ext_name = extension_names.value(i).to_string(); - - // Filter by extension name if provided - if let Some(filter_ext) = extension_name { - if ext_name != filter_ext { - continue; - } - } - - tools.push(ToolRecord { - tool_name, - description: descriptions.value(i).to_string(), - schema: schemas.value(i).to_string(), - vector: vec![], // We don't need to return the vector - extension_name: ext_name, - }); - } - } - Ok(tools) - } - - pub async fn remove_tool(&self, tool_name: &str) -> Result<()> { - let connection = self.connection.read().await; - - let table = connection - .open_table(&self.table_name) - .execute() - .await - .context("Failed to open tools table")?; - - // Delete records matching the tool name - table - .delete(&format!("tool_name = '{}'", tool_name)) - .await - .context("Failed to delete tool")?; - - Ok(()) - } -} - -pub fn generate_table_id() -> String { - Local::now().format("%Y%m%d_%H%M%S").to_string() -} - -#[cfg(test)] -mod tests { - use super::*; - - impl ToolVectorDB { - async fn new_test_db( - base_name: &str, - ) -> Result<(Self, impl std::future::Future)> { - let unique_name = format!("{}_{}", base_name, uuid::Uuid::new_v4().simple()); - let db = Self::new(Some(unique_name)).await?; - - let table_name = db.table_name.clone(); - let connection = db.connection.clone(); - - let cleanup = async move { - let _ = async move { - let _ = connection.read().await.drop_table(&table_name).await; - }; - }; - - Ok((db, cleanup)) - } - } - - #[tokio::test] - #[serial_test::serial] - async fn test_tool_vectordb_creation() -> Result<()> { - let (db, cleanup) = ToolVectorDB::new_test_db("test_tools_vectordb_creation").await?; - - let result = async { - db.clear_tools().await?; - assert!(db.table_name.contains("test_tools_vectordb_creation")); - Ok(()) - } - .await; - - cleanup.await; - result - } - - #[tokio::test] - #[serial_test::serial] - async fn test_tool_vectordb_operations() -> Result<()> { - let (db, cleanup) = ToolVectorDB::new_test_db("test_tool_vectordb_operations").await?; - - let result = async { - db.clear_tools().await?; - - let test_tools = vec![ - ToolRecord { - tool_name: "test_tool_1".to_string(), - description: "A test tool for reading files".to_string(), - schema: r#"{"type": "object", "properties": {"path": {"type": "string"}}}"# - .to_string(), - vector: vec![0.1; 1536], - extension_name: "test_extension".to_string(), - }, - ToolRecord { - tool_name: "test_tool_2".to_string(), - description: "A test tool for writing files".to_string(), - schema: r#"{"type": "object", "properties": {"path": {"type": "string"}}}"# - .to_string(), - vector: vec![0.2; 1536], - extension_name: "test_extension".to_string(), - }, - ]; - - db.index_tools(test_tools).await?; - - let query_vector = vec![0.1; 1536]; - let results = db.search_tools(query_vector.clone(), 2, None).await?; - - assert_eq!(results.len(), 2, "Should find both tools"); - assert_eq!( - results[0].tool_name, "test_tool_1", - "First result should be test_tool_1" - ); - assert_eq!( - results[1].tool_name, "test_tool_2", - "Second result should be test_tool_2" - ); - - let results = db - .search_tools(query_vector.clone(), 2, Some("test_extension")) - .await?; - assert_eq!( - results.len(), - 2, - "Should find both tools with test_extension" - ); - - let results = db - .search_tools(query_vector.clone(), 2, Some("nonexistent_extension")) - .await?; - assert_eq!( - results.len(), - 0, - "Should find no tools with nonexistent_extension" - ); - - Ok(()) - } - .await; - - cleanup.await; - result - } - - #[tokio::test] - #[serial_test::serial] - async fn test_empty_db() -> Result<()> { - let (db, cleanup) = ToolVectorDB::new_test_db("test_empty_db").await?; - - let result = async { - db.clear_tools().await?; - - let query_vector = vec![0.1; 1536]; - let results = db.search_tools(query_vector, 2, None).await?; - - assert_eq!(results.len(), 0, "Empty database should return no results"); - Ok(()) - } - .await; - - cleanup.await; - result - } - - #[tokio::test] - #[serial_test::serial] - async fn test_tool_deletion() -> Result<()> { - let (db, cleanup) = ToolVectorDB::new_test_db("test_tool_deletion").await?; - - let result = async { - db.clear_tools().await?; - - let test_tool = ToolRecord { - tool_name: "test_tool_to_delete".to_string(), - description: "A test tool that will be deleted".to_string(), - schema: r#"{"type": "object", "properties": {"path": {"type": "string"}}}"# - .to_string(), - vector: vec![0.1; 1536], - extension_name: "test_extension".to_string(), - }; - - db.index_tools(vec![test_tool]).await?; - - let query_vector = vec![0.1; 1536]; - let results = db.search_tools(query_vector.clone(), 1, None).await?; - assert_eq!(results.len(), 1, "Tool should exist before deletion"); - - db.remove_tool("test_tool_to_delete").await?; - - let results = db.search_tools(query_vector.clone(), 1, None).await?; - assert_eq!(results.len(), 0, "Tool should be deleted"); - - Ok(()) - } - .await; - - cleanup.await; - result - } - - #[test] - #[serial_test::serial] - fn test_custom_db_path_override() -> Result<()> { - use std::env; - use tempfile::TempDir; - - let temp_dir = TempDir::new().unwrap(); - let custom_path = temp_dir.path().join("custom_vector_db"); - - env::set_var("GOOSE_VECTOR_DB_PATH", custom_path.to_str().unwrap()); - - let db_path = ToolVectorDB::get_db_path()?; - assert_eq!(db_path, custom_path); - - env::remove_var("GOOSE_VECTOR_DB_PATH"); - Ok(()) - } - - #[test] - #[serial_test::serial] - fn test_custom_db_path_validation() { - use std::env; - - env::set_var("GOOSE_VECTOR_DB_PATH", "relative/path"); - - let result = ToolVectorDB::get_db_path(); - assert!( - result.is_err(), - "Expected error for relative path, got: {:?}", - result - ); - assert!(result - .unwrap_err() - .to_string() - .contains("must be an absolute path")); - - env::remove_var("GOOSE_VECTOR_DB_PATH"); - } - - #[test] - #[serial_test::serial] - fn test_fallback_to_default_path() -> Result<()> { - use std::env; - - env::remove_var("GOOSE_VECTOR_DB_PATH"); - - let db_path = ToolVectorDB::get_db_path()?; - assert!( - db_path.to_string_lossy().contains("goose"), - "Path should contain 'goose', got: {}", - db_path.display() - ); - assert!( - db_path.to_string_lossy().contains("tool_db"), - "Path should contain 'tool_db', got: {}", - db_path.display() - ); - - Ok(()) - } -} diff --git a/documentation/docs/guides/environment-variables.md b/documentation/docs/guides/environment-variables.md index 326bc62dc273..1116a0799f43 100644 --- a/documentation/docs/guides/environment-variables.md +++ b/documentation/docs/guides/environment-variables.md @@ -232,36 +232,6 @@ export GOOSE_EDITOR_HOST="http://localhost:8000/v1" export GOOSE_EDITOR_MODEL="your-model" ``` - -## Tool Selection Strategy - -These variables configure the [tool selection strategy](/docs/guides/managing-tools/tool-router). - -| Variable | Purpose | Values | Default | -|----------|---------|---------|--------| -| `GOOSE_ROUTER_TOOL_SELECTION_STRATEGY` | The tool selection strategy to use | "default", "vector", "llm" | "default" | -| `GOOSE_EMBEDDING_MODEL_PROVIDER` | The provider to use for generating embeddings for the "vector" strategy | [See available providers](/docs/getting-started/providers#available-providers) (must support embeddings) | "openai" | -| `GOOSE_EMBEDDING_MODEL` | The model to use for generating embeddings for the "vector" strategy | Model name (provider-specific) | "text-embedding-3-small" | - -**Examples** - -```bash -# Use vector-based tool selection with custom settings -export GOOSE_ROUTER_TOOL_SELECTION_STRATEGY=vector -export GOOSE_EMBEDDING_MODEL_PROVIDER=ollama -export GOOSE_EMBEDDING_MODEL=nomic-embed-text - -# Or use LLM-based selection -export GOOSE_ROUTER_TOOL_SELECTION_STRATEGY=llm -``` - -**Embedding Provider Support** - -The default embedding provider is OpenAI. If using a different provider: -- Ensure the provider supports embeddings -- Specify an appropriate embedding model for that provider -- Ensure the provider is properly configured with necessary credentials - ## Security Configuration These variables control security related features. diff --git a/ui/desktop/src/components/settings/chat/ChatSettingsSection.tsx b/ui/desktop/src/components/settings/chat/ChatSettingsSection.tsx index 24bf92abd921..9e7c0fc402d8 100644 --- a/ui/desktop/src/components/settings/chat/ChatSettingsSection.tsx +++ b/ui/desktop/src/components/settings/chat/ChatSettingsSection.tsx @@ -54,8 +54,8 @@ export default function ChatSettingsSection() { Tool Selection Strategy (preview) - Configure how Goose selects tools for your requests. Recommended when many extensions - are enabled. Available only with Claude models served on Databricks for now. + Experimental: configure how Goose selects tools for your requests, useful when there are + many tools. Only tested with Claude models currently. diff --git a/ui/desktop/src/components/settings/tool_selection_strategy/ToolSelectionStrategySection.tsx b/ui/desktop/src/components/settings/tool_selection_strategy/ToolSelectionStrategySection.tsx index 842dae0fd499..3d40b547bb40 100644 --- a/ui/desktop/src/components/settings/tool_selection_strategy/ToolSelectionStrategySection.tsx +++ b/ui/desktop/src/components/settings/tool_selection_strategy/ToolSelectionStrategySection.tsx @@ -3,37 +3,32 @@ import { useConfig } from '../../ConfigContext'; import { getApiUrl } from '../../../config'; interface ToolSelectionStrategy { - key: string; + key: boolean; label: string; description: string; } export const all_tool_selection_strategies: ToolSelectionStrategy[] = [ { - key: 'default', - label: 'Default', - description: 'Loads all tools from enabled extensions', + key: false, + label: 'Disabled', + description: 'Use the default tool selection strategy', }, { - key: 'vector', - label: 'Vector', - description: 'Filter tools based on vector similarity.', - }, - { - key: 'llm', - label: 'LLM-based', + key: true, + label: 'Enabled', description: - 'Uses LLM to intelligently select the most relevant tools based on the user query context.', + 'Use LLM-based intelligence to select the most relevant tools based on the user query context.', }, ]; export const ToolSelectionStrategySection = () => { - const [currentStrategy, setCurrentStrategy] = useState('default'); + const [routerEnabled, setRouterEnabled] = useState(false); const [_error, setError] = useState(null); const [isLoading, setIsLoading] = useState(false); const { read, upsert } = useConfig(); - const handleStrategyChange = async (newStrategy: string) => { + const handleStrategyChange = async (enableRouter: boolean) => { if (isLoading) return; // Prevent multiple simultaneous requests setError(null); // Clear any previous errors @@ -42,7 +37,7 @@ export const ToolSelectionStrategySection = () => { try { // First update the configuration try { - await upsert('GOOSE_ROUTER_TOOL_SELECTION_STRATEGY', newStrategy, false); + await upsert('GOOSE_ENABLE_ROUTER', enableRouter.toString(), false); } catch (error) { console.error('Error updating configuration:', error); setError(`Failed to update configuration: ${error}`); @@ -82,7 +77,7 @@ export const ToolSelectionStrategySection = () => { } // If both succeeded, update the UI - setCurrentStrategy(newStrategy); + setRouterEnabled(enableRouter); } catch (error) { console.error('Error updating tool selection strategy:', error); setError(`Failed to update tool selection strategy: ${error}`); @@ -93,13 +88,13 @@ export const ToolSelectionStrategySection = () => { const fetchCurrentStrategy = useCallback(async () => { try { - const strategy = (await read('GOOSE_ROUTER_TOOL_SELECTION_STRATEGY', false)) as string; + const strategy = (await read('GOOSE_ENABLE_ROUTER', false)) as string; if (strategy) { - setCurrentStrategy(strategy); + setRouterEnabled(strategy === 'true'); } } catch (error) { - console.error('Error fetching current tool selection strategy:', error); - setError(`Failed to fetch current strategy: ${error}`); + console.error('Error fetching current router setting:', error); + setError(`Failed to fetch current router setting: ${error}`); } }, [read]); @@ -110,9 +105,9 @@ export const ToolSelectionStrategySection = () => { return (
{all_tool_selection_strategies.map((strategy) => ( -
+
handleStrategyChange(strategy.key)} >
@@ -126,8 +121,8 @@ export const ToolSelectionStrategySection = () => { handleStrategyChange(strategy.key)} disabled={isLoading} className="peer sr-only"