diff --git a/.github/workflows/bench-graphql.yml b/.github/workflows/bench-graphql.yml index 193d94c494..86f375a7e4 100644 --- a/.github/workflows/bench-graphql.yml +++ b/.github/workflows/bench-graphql.yml @@ -27,14 +27,16 @@ jobs: - name: Install maturin run: pip install maturin==1.8.3 - name: Build raphtory - run: make install-python + run: cd python && maturin build --release --out /tmp/wheels # If this fails, try adding --strip back again + - run: rm -fr target + - run: pip install /tmp/wheels/*.whl - name: Set up pnpm uses: pnpm/action-setup@v4 with: version: 9 - uses: grafana/setup-k6-action@v1 with: - k6-version: '1.0.0' + k6-version: "1.0.0" - name: Run GraphQL benchmarks run: cd graphql-bench && make bench-local - name: Restore metadata file @@ -46,10 +48,10 @@ jobs: uses: benchmark-action/github-action-benchmark@v1 with: name: GraphQL Benchmark - tool: 'customBiggerIsBetter' + tool: "customBiggerIsBetter" output-file-path: graphql-bench/output.json github-token: ${{ secrets.GITHUB_TOKEN }} - alert-threshold: '200%' + alert-threshold: "200%" comment-on-alert: true summary-always: true fail-on-alert: false @@ -60,10 +62,10 @@ jobs: uses: benchmark-action/github-action-benchmark@v1 with: name: GraphQL Benchmark - tool: 'customBiggerIsBetter' + tool: "customBiggerIsBetter" output-file-path: graphql-bench/output.json github-token: ${{ secrets.GITHUB_TOKEN }} - alert-threshold: '200%' + alert-threshold: "200%" comment-on-alert: true summary-always: true fail-on-alert: false diff --git a/.github/workflows/stress-test.yml b/.github/workflows/stress-test.yml index 024112bb7f..8ee72b2ee8 100644 --- a/.github/workflows/stress-test.yml +++ b/.github/workflows/stress-test.yml @@ -24,14 +24,16 @@ jobs: - name: Install maturin run: pip install maturin==1.8.3 - name: Build raphtory - run: make install-python + run: cd python && maturin build --strip --out /tmp/wheels # double-check --strip acutally makes sense + - run: rm -fr target + - run: pip install /tmp/wheels/*.whl - name: Set up pnpm uses: pnpm/action-setup@v4 with: version: 9 - uses: grafana/setup-k6-action@v1 with: - k6-version: '1.0.0' + k6-version: "1.0.0" - name: Run stress test run: | cd graphql-bench diff --git a/.github/workflows/test_python_workflow.yml b/.github/workflows/test_python_workflow.yml index 102547627d..58bbe29f3c 100644 --- a/.github/workflows/test_python_workflow.yml +++ b/.github/workflows/test_python_workflow.yml @@ -29,8 +29,8 @@ jobs: strategy: matrix: python: ${{ fromJson(needs.select-strategy.outputs.python-versions) }} - os: [ macos-latest, ubuntu-latest, windows-latest ] - runs-on: '${{ matrix.os }}' + os: [macos-latest, ubuntu-latest, windows-latest] + runs-on: "${{ matrix.os }}" steps: - uses: actions/checkout@v4 name: Checkout @@ -55,7 +55,7 @@ jobs: uses: actions/setup-python@v4 with: python-version: ${{ matrix.python }} - cache: 'pip' + cache: "pip" - name: Install Python dependencies run: | echo "Installing test dependencies..." diff --git a/.github/workflows/test_rust_workflow.yml b/.github/workflows/test_rust_workflow.yml index c84a380c84..f63e453d9a 100644 --- a/.github/workflows/test_rust_workflow.yml +++ b/.github/workflows/test_rust_workflow.yml @@ -1,5 +1,5 @@ name: Run Rust test -permissions: { } +permissions: {} on: workflow_call: inputs: @@ -12,9 +12,12 @@ jobs: rust-test-no-storage: if: ${{ !inputs.skip_tests }} name: Rust Tests - runs-on: '${{ matrix.os }}' + runs-on: "${{ matrix.os }}" env: RUST_BACKTRACE: 1 + CARGO_BUILD_JOBS: 2 + CARGO_INCREMENTAL: 0 + RUSTFLAGS: "-C debuginfo=0" strategy: matrix: include: @@ -54,7 +57,7 @@ jobs: tool: nextest@0.9.99 - uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version: "3.12" - name: Run all Tests (no disk_graph) env: RUSTFLAGS: -Awarnings @@ -64,7 +67,7 @@ jobs: doc-test: if: ${{ !inputs.skip_tests }} name: "Doc tests" - runs-on: '${{ matrix.os }}' + runs-on: "${{ matrix.os }}" strategy: matrix: include: diff --git a/Cargo.lock b/Cargo.lock index 08b12ddc55..ad7c676b99 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -413,34 +413,24 @@ dependencies = [ "regex-syntax", ] -[[package]] -name = "arroy" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8578a72223dfa13dfd9fc144d15260d134361789ebdea9b16e85a511edc73c7d" -dependencies = [ - "bytemuck", - "byteorder", - "enum-iterator", - "heed", - "memmap2", - "nohash", - "ordered-float 4.6.0", - "page_size", - "rand 0.8.5", - "rayon", - "roaring", - "tempfile", - "thiserror 2.0.17", - "tracing", -] - [[package]] name = "ascii_utils" version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71938f30533e4d95a6d17aa530939da3842c2ab6f4f84b9dae68447e4129f74a" +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + [[package]] name = "async-compression" version = "0.4.19" @@ -487,7 +477,7 @@ dependencies = [ "futures-timer", "futures-util", "handlebars", - "http", + "http 1.4.0", "indexmap 2.13.0", "mime", "multer", @@ -539,7 +529,7 @@ checksum = "1ff5480bfb998f5405f4ad3d861b69a0467e8667f9f4174e86e85bf896c1f8c9" dependencies = [ "async-graphql", "futures-util", - "http", + "http 1.4.0", "mime", "poem", "serde_json", @@ -597,6 +587,17 @@ dependencies = [ "tracing", ] +[[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.114", +] + [[package]] name = "async-stream" version = "0.3.6" @@ -630,6 +631,15 @@ dependencies = [ "syn 2.0.114", ] +[[package]] +name = "async_cell" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "447ab28afbb345f5408b120702a44e5529ebf90b1796ec76e9528df8e288e6c2" +dependencies = [ + "loom", +] + [[package]] name = "asynk-strim" version = "0.1.5" @@ -662,925 +672,1505 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] -name = "axum" -version = "0.7.9" +name = "aws-config" +version = "1.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +checksum = "96571e6996817bf3d58f6b569e4b9fd2e9d2fcf9f7424eed07b2ce9bb87535e5" dependencies = [ - "async-trait", - "axum-core", + "aws-credential-types", + "aws-runtime", + "aws-sdk-sso", + "aws-sdk-ssooidc", + "aws-sdk-sts", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", "bytes", - "futures-util", - "http", - "http-body", - "http-body-util", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "sync_wrapper", - "tower 0.5.3", - "tower-layer", - "tower-service", + "fastrand", + "hex", + "http 1.4.0", + "ring", + "time", + "tokio", + "tracing", + "url", + "zeroize", ] [[package]] -name = "axum-core" -version = "0.4.5" +name = "aws-credential-types" +version = "1.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +checksum = "3cd362783681b15d136480ad555a099e82ecd8e2d10a841e14dfd0078d67fee3" dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http", - "http-body", - "http-body-util", - "mime", - "pin-project-lite", - "rustversion", - "sync_wrapper", - "tower-layer", - "tower-service", + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "zeroize", ] [[package]] -name = "backoff" -version = "0.4.0" +name = "aws-lc-rs" +version = "1.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" +checksum = "e84ce723ab67259cfeb9877c6a639ee9eb7a27b28123abd71db7f0d5d0cc9d86" dependencies = [ - "futures-core", - "getrandom 0.2.17", - "instant", - "pin-project-lite", - "rand 0.8.5", - "tokio", + "aws-lc-sys", + "zeroize", ] [[package]] -name = "base64" -version = "0.21.7" +name = "aws-lc-sys" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "43a442ece363113bd4bd4c8b18977a7798dd4d3c3383f34fb61936960e8f4ad8" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", +] [[package]] -name = "base64" -version = "0.22.1" +name = "aws-runtime" +version = "1.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +checksum = "959dab27ce613e6c9658eb3621064d0e2027e5f2acb65bc526a43577facea557" +dependencies = [ + "aws-credential-types", + "aws-sigv4", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand", + "http 0.2.12", + "http-body 0.4.6", + "percent-encoding", + "pin-project-lite", + "tracing", + "uuid", +] [[package]] -name = "base64-compat" -version = "1.0.0" +name = "aws-sdk-dynamodb" +version = "1.103.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a8d4d2746f89841e49230dd26917df1876050f95abafafbe34f47cb534b88d7" +checksum = "6df2a8b03419775bfaf4f3ebbb65a9772e9e69eed4467a1b33f22226722340fb" dependencies = [ - "byteorder", + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-observability", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand", + "http 0.2.12", + "regex-lite", + "tracing", ] [[package]] -name = "bigdecimal" -version = "0.4.10" +name = "aws-sdk-sso" +version = "1.92.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d6867f1565b3aad85681f1015055b087fcfd840d6aeee6eee7f2da317603695" +checksum = "b7d63bd2bdeeb49aa3f9b00c15e18583503b778b2e792fc06284d54e7d5b6566" dependencies = [ - "autocfg", - "libm", - "num-bigint", - "num-integer", - "num-traits", - "serde", + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-observability", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand", + "http 0.2.12", + "regex-lite", + "tracing", ] [[package]] -name = "bincode" -version = "1.3.3" +name = "aws-sdk-ssooidc" +version = "1.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +checksum = "532d93574bf731f311bafb761366f9ece345a0416dbcc273d81d6d1a1205239b" dependencies = [ - "serde", + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-observability", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand", + "http 0.2.12", + "regex-lite", + "tracing", ] [[package]] -name = "bit-set" -version = "0.8.0" +name = "aws-sdk-sts" +version = "1.96.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +checksum = "357e9a029c7524db6a0099cd77fbd5da165540339e7296cca603531bc783b56c" dependencies = [ - "bit-vec", + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-observability", + "aws-smithy-query", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-smithy-xml", + "aws-types", + "fastrand", + "http 0.2.12", + "regex-lite", + "tracing", ] [[package]] -name = "bit-vec" -version = "0.8.0" +name = "aws-sigv4" +version = "1.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +checksum = "69e523e1c4e8e7e8ff219d732988e22bfeae8a1cafdbe6d9eca1546fa080be7c" +dependencies = [ + "aws-credential-types", + "aws-smithy-http", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "form_urlencoded", + "hex", + "hmac", + "http 0.2.12", + "http 1.4.0", + "percent-encoding", + "sha2", + "time", + "tracing", +] [[package]] -name = "bitflags" -version = "2.10.0" +name = "aws-smithy-async" +version = "1.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "9ee19095c7c4dda59f1697d028ce704c24b2d33c6718790c7f1d5a3015b4107c" dependencies = [ - "serde_core", + "futures-util", + "pin-project-lite", + "tokio", ] [[package]] -name = "bitpacking" -version = "0.9.3" +name = "aws-smithy-http" +version = "0.62.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96a7139abd3d9cebf8cd6f920a389cf3dc9576172e32f4563f188cae3c3eb019" +checksum = "826141069295752372f8203c17f28e30c464d22899a43a0c9fd9c458d469c88b" dependencies = [ - "crunchy", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "bytes-utils", + "futures-core", + "futures-util", + "http 0.2.12", + "http 1.4.0", + "http-body 0.4.6", + "percent-encoding", + "pin-project-lite", + "pin-utils", + "tracing", ] [[package]] -name = "blake2" -version = "0.10.6" +name = "aws-smithy-http-client" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest", +checksum = "59e62db736db19c488966c8d787f52e6270be565727236fd5579eaa301e7bc4a" +dependencies = [ + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "h2 0.3.27", + "h2 0.4.13", + "http 0.2.12", + "http 1.4.0", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper 1.8.1", + "hyper-rustls 0.24.2", + "hyper-rustls 0.27.7", + "hyper-util", + "pin-project-lite", + "rustls 0.21.12", + "rustls 0.23.36", + "rustls-native-certs 0.8.3", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.4", + "tower 0.5.3", + "tracing", ] [[package]] -name = "blake3" -version = "1.8.3" +name = "aws-smithy-json" +version = "0.61.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2468ef7d57b3fb7e16b576e8377cdbde2320c60e1491e961d11da40fc4f02a2d" +checksum = "49fa1213db31ac95288d981476f78d05d9cbb0353d22cdf3472cc05bb02f6551" dependencies = [ - "arrayref", - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq 0.4.2", - "cpufeatures", + "aws-smithy-types", ] [[package]] -name = "block-buffer" -version = "0.10.4" +name = "aws-smithy-observability" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "ef1fcbefc7ece1d70dcce29e490f269695dfca2d2bacdeaf9e5c3f799e4e6a42" dependencies = [ - "generic-array", + "aws-smithy-runtime-api", ] [[package]] -name = "brotli" -version = "7.0.0" +name = "aws-smithy-query" +version = "0.60.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" +checksum = "ae5d689cf437eae90460e944a58b5668530d433b4ff85789e69d2f2a556e057d" dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor 4.0.3", + "aws-smithy-types", + "urlencoding", ] [[package]] -name = "brotli" -version = "8.0.2" +name = "aws-smithy-runtime" +version = "1.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" +checksum = "bb5b6167fcdf47399024e81ac08e795180c576a20e4d4ce67949f9a88ae37dc1" dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor 5.0.0", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-http-client", + "aws-smithy-observability", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "fastrand", + "http 0.2.12", + "http 1.4.0", + "http-body 0.4.6", + "http-body 1.0.1", + "pin-project-lite", + "pin-utils", + "tokio", + "tracing", ] [[package]] -name = "brotli-decompressor" -version = "4.0.3" +name = "aws-smithy-runtime-api" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a334ef7c9e23abf0ce748e8cd309037da93e606ad52eb372e4ce327a0dcfbdfd" +checksum = "efce7aaaf59ad53c5412f14fc19b2d5c6ab2c3ec688d272fd31f76ec12f44fb0" dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", + "aws-smithy-async", + "aws-smithy-types", + "bytes", + "http 0.2.12", + "http 1.4.0", + "pin-project-lite", + "tokio", + "tracing", + "zeroize", ] [[package]] -name = "brotli-decompressor" -version = "5.0.0" +name = "aws-smithy-types" +version = "1.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +checksum = "65f172bcb02424eb94425db8aed1b6d583b5104d4d5ddddf22402c661a320048" dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", + "base64-simd", + "bytes", + "bytes-utils", + "futures-core", + "http 0.2.12", + "http 1.4.0", + "http-body 0.4.6", + "http-body 1.0.1", + "http-body-util", + "itoa", + "num-integer", + "pin-project-lite", + "pin-utils", + "ryu", + "serde", + "time", + "tokio", + "tokio-util", ] [[package]] -name = "bumpalo" -version = "3.19.1" +name = "aws-smithy-xml" +version = "0.60.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" +checksum = "11b2f670422ff42bf7065031e72b45bc52a3508bd089f743ea90731ca2b6ea57" +dependencies = [ + "xmlparser", +] [[package]] -name = "bytemuck" -version = "1.24.0" +name = "aws-types" +version = "1.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" +checksum = "1d980627d2dd7bfc32a3c025685a033eeab8d365cc840c631ef59d1b8f428164" dependencies = [ - "bytemuck_derive", + "aws-credential-types", + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "rustc_version", + "tracing", ] [[package]] -name = "bytemuck_derive" -version = "1.10.2" +name = "axum" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", + "async-trait", + "axum-core 0.4.5", + "bytes", + "futures-util", + "http 1.4.0", + "http-body 1.0.1", + "http-body-util", + "itoa", + "matchit 0.7.3", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper", + "tower 0.5.3", + "tower-layer", + "tower-service", ] [[package]] -name = "byteorder" -version = "1.5.0" +name = "axum" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8" +dependencies = [ + "axum-core 0.5.6", + "bytes", + "form_urlencoded", + "futures-util", + "http 1.4.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.8.1", + "hyper-util", + "itoa", + "matchit 0.8.4", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "serde_core", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tower 0.5.3", + "tower-layer", + "tower-service", + "tracing", +] [[package]] -name = "bytes" -version = "1.11.0" +name = "axum-core" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" dependencies = [ - "serde", + "async-trait", + "bytes", + "futures-util", + "http 1.4.0", + "http-body 1.0.1", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper", + "tower-layer", + "tower-service", ] [[package]] -name = "bzip2" -version = "0.4.4" +name = "axum-core" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" dependencies = [ - "bzip2-sys", - "libc", + "bytes", + "futures-core", + "http 1.4.0", + "http-body 1.0.1", + "http-body-util", + "mime", + "pin-project-lite", + "sync_wrapper", + "tower-layer", + "tower-service", + "tracing", ] [[package]] -name = "bzip2" -version = "0.5.2" +name = "backoff" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ecfb22d906f800d4fe833b6282cf4dc1c298f5057ca0b5445e5c209735ca47" +checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" dependencies = [ - "bzip2-sys", + "futures-core", + "getrandom 0.2.17", + "instant", + "pin-project-lite", + "rand 0.8.5", + "tokio", ] [[package]] -name = "bzip2" -version = "0.6.1" +name = "backon" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a53fac24f34a81bc9954b5d6cfce0c21e18ec6959f44f56e8e90e4bb7c346c" +checksum = "cffb0e931875b666fc4fcb20fee52e9bbd1ef836fd9e9e04ec21555f9f85f7ef" dependencies = [ - "libbz2-rs-sys", + "fastrand", + "gloo-timers", + "tokio", ] [[package]] -name = "bzip2-sys" -version = "0.1.13+1.0.8" +name = "base64" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" -dependencies = [ - "cc", - "pkg-config", -] +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] -name = "cast" -version = "0.3.0" +name = "base64" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] -name = "cc" -version = "1.2.52" +name = "base64-compat" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd4932aefd12402b36c60956a4fe0035421f544799057659ff86f923657aada3" +checksum = "5a8d4d2746f89841e49230dd26917df1876050f95abafafbe34f47cb534b88d7" dependencies = [ - "find-msvc-tools", - "jobserver", - "libc", - "shlex", + "byteorder", ] [[package]] -name = "census" -version = "0.4.2" +name = "base64-simd" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4c707c6a209cbe82d10abd08e1ea8995e9ea937d2550646e02798948992be0" +checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" +dependencies = [ + "outref", + "vsimd", +] [[package]] -name = "cfg-if" -version = "1.0.4" +name = "base64ct" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] -name = "cfg_aliases" -version = "0.2.1" +name = "bigdecimal" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "4d6867f1565b3aad85681f1015055b087fcfd840d6aeee6eee7f2da317603695" +dependencies = [ + "autocfg", + "libm", + "num-bigint", + "num-integer", + "num-traits", + "serde", +] [[package]] -name = "chrono" -version = "0.4.42" +name = "bincode" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" dependencies = [ - "iana-time-zone", - "js-sys", - "num-traits", "serde", - "wasm-bindgen", - "windows-link", ] [[package]] -name = "chrono-tz" -version = "0.8.6" +name = "bit-set" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59ae0466b83e838b81a54256c39d5d7c20b9d7daa10510a242d9b75abd5936e" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ - "chrono", - "chrono-tz-build", - "phf 0.11.3", + "bit-vec", ] [[package]] -name = "chrono-tz" -version = "0.10.4" +name = "bit-vec" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6139a8597ed92cf816dfb33f5dd6cf0bb93a6adc938f11039f371bc5bcd26c3" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitflags" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" dependencies = [ - "chrono", - "phf 0.12.1", + "serde_core", ] [[package]] -name = "chrono-tz-build" -version = "0.2.1" +name = "bitpacking" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433e39f13c9a060046954e0592a8d0a4bcb1040125cbf91cb8ee58964cfb350f" +checksum = "96a7139abd3d9cebf8cd6f920a389cf3dc9576172e32f4563f188cae3c3eb019" dependencies = [ - "parse-zoneinfo", - "phf 0.11.3", - "phf_codegen", + "crunchy", ] [[package]] -name = "ciborium" -version = "0.2.2" +name = "bitvec" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", + "funty", + "radium", + "tap", + "wyz", ] [[package]] -name = "ciborium-io" -version = "0.2.2" +name = "blake2" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] [[package]] -name = "ciborium-ll" -version = "0.2.2" +name = "blake3" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +checksum = "2468ef7d57b3fb7e16b576e8377cdbde2320c60e1491e961d11da40fc4f02a2d" dependencies = [ - "ciborium-io", - "half", + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq 0.4.2", + "cpufeatures", ] [[package]] -name = "cipher" -version = "0.4.4" +name = "block-buffer" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "crypto-common", - "inout", + "generic-array", ] [[package]] -name = "clap" -version = "4.5.54" +name = "block-padding" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" dependencies = [ - "clap_builder", - "clap_derive", + "generic-array", ] [[package]] -name = "clap_builder" -version = "4.5.54" +name = "bon" +version = "3.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00" +checksum = "234655ec178edd82b891e262ea7cf71f6584bcd09eff94db786be23f1821825c" dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", + "bon-macros", + "rustversion", ] [[package]] -name = "clap_derive" -version = "4.5.49" +name = "bon-macros" +version = "3.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +checksum = "89ec27229c38ed0eb3c0feee3d2c1d6a4379ae44f418a29a658890e062d8f365" dependencies = [ - "heck 0.5.0", + "darling 0.23.0", + "ident_case", + "prettyplease", "proc-macro2", "quote", + "rustversion", "syn 2.0.114", ] [[package]] -name = "clap_lex" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" - -[[package]] -name = "colorchoice" -version = "1.0.4" +name = "brotli" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor 4.0.3", +] [[package]] -name = "comfy-table" -version = "7.1.2" +name = "brotli" +version = "8.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0d05af1e006a2407bedef5af410552494ce5be9090444dbbcb57258c1af3d56" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" dependencies = [ - "strum 0.26.3", - "strum_macros 0.26.4", - "unicode-width", + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor 5.0.0", ] [[package]] -name = "concurrent-queue" -version = "2.5.0" +name = "brotli-decompressor" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +checksum = "a334ef7c9e23abf0ce748e8cd309037da93e606ad52eb372e4ce327a0dcfbdfd" dependencies = [ - "crossbeam-utils", + "alloc-no-stdlib", + "alloc-stdlib", ] [[package]] -name = "config" -version = "0.14.1" +name = "brotli-decompressor" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68578f196d2a33ff61b27fae256c3164f65e36382648e30666dde05b8cc9dfdf" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" dependencies = [ - "async-trait", - "convert_case", - "json5", - "nom", - "pathdiff", - "ron", - "rust-ini", - "serde", - "serde_json", - "toml", - "yaml-rust2", + "alloc-no-stdlib", + "alloc-stdlib", ] [[package]] -name = "const-oid" -version = "0.9.6" +name = "bumpalo" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" [[package]] -name = "const-random" -version = "0.1.18" +name = "bytemuck" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" dependencies = [ - "const-random-macro", + "bytemuck_derive", ] [[package]] -name = "const-random-macro" -version = "0.1.16" +name = "bytemuck_derive" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ - "getrandom 0.2.17", - "once_cell", - "tiny-keccak", + "proc-macro2", + "quote", + "syn 2.0.114", ] [[package]] -name = "constant_time_eq" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" - -[[package]] -name = "constant_time_eq" -version = "0.4.2" +name = "byteorder" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] -name = "convert_case" -version = "0.6.0" +name = "bytes" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" dependencies = [ - "unicode-segmentation", + "serde", ] [[package]] -name = "core-foundation" -version = "0.9.4" +name = "bytes-utils" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +checksum = "7dafe3a8757b027e2be6e4e5601ed563c55989fcf1546e933c66c8eb3a058d35" dependencies = [ - "core-foundation-sys", - "libc", + "bytes", + "either", ] [[package]] -name = "core-foundation" -version = "0.10.1" +name = "bzip2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" dependencies = [ - "core-foundation-sys", + "bzip2-sys", "libc", ] [[package]] -name = "core-foundation-sys" -version = "0.8.7" +name = "bzip2" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +checksum = "49ecfb22d906f800d4fe833b6282cf4dc1c298f5057ca0b5445e5c209735ca47" +dependencies = [ + "bzip2-sys", +] [[package]] -name = "cpufeatures" -version = "0.2.17" +name = "bzip2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +checksum = "f3a53fac24f34a81bc9954b5d6cfce0c21e18ec6959f44f56e8e90e4bb7c346c" dependencies = [ - "libc", + "libbz2-rs-sys", ] [[package]] -name = "crc" -version = "3.4.0" +name = "bzip2-sys" +version = "0.1.13+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" +checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" dependencies = [ - "crc-catalog", + "cc", + "pkg-config", ] [[package]] -name = "crc-catalog" -version = "2.4.0" +name = "cast" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] -name = "crc32fast" -version = "1.5.0" +name = "cbc" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" dependencies = [ - "cfg-if", + "cipher", ] [[package]] -name = "criterion" -version = "0.5.1" +name = "cc" +version = "1.2.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" +checksum = "cd4932aefd12402b36c60956a4fe0035421f544799057659ff86f923657aada3" dependencies = [ - "anes", - "cast", - "ciborium", - "clap", - "criterion-plot", - "is-terminal", - "itertools 0.10.5", - "num-traits", - "once_cell", - "oorandom", - "plotters", - "rayon", - "regex", - "serde", - "serde_derive", - "serde_json", - "tinytemplate", - "walkdir", + "find-msvc-tools", + "jobserver", + "libc", + "shlex", ] [[package]] -name = "criterion-plot" -version = "0.5.0" +name = "census" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" -dependencies = [ - "cast", - "itertools 0.10.5", -] +checksum = "4f4c707c6a209cbe82d10abd08e1ea8995e9ea937d2550646e02798948992be0" [[package]] -name = "crossbeam-channel" -version = "0.5.15" +name = "cfg-if" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "crossbeam-utils", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-link", ] [[package]] -name = "crossbeam-deque" +name = "chrono-tz" version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "d59ae0466b83e838b81a54256c39d5d7c20b9d7daa10510a242d9b75abd5936e" dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", + "chrono", + "chrono-tz-build", + "phf 0.11.3", ] [[package]] -name = "crossbeam-epoch" -version = "0.9.18" +name = "chrono-tz" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "a6139a8597ed92cf816dfb33f5dd6cf0bb93a6adc938f11039f371bc5bcd26c3" dependencies = [ - "crossbeam-utils", + "chrono", + "phf 0.12.1", ] [[package]] -name = "crossbeam-queue" -version = "0.3.12" +name = "chrono-tz-build" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +checksum = "433e39f13c9a060046954e0592a8d0a4bcb1040125cbf91cb8ee58964cfb350f" dependencies = [ - "crossbeam-utils", + "parse-zoneinfo", + "phf 0.11.3", + "phf_codegen", ] [[package]] -name = "crossbeam-utils" -version = "0.8.21" +name = "ciborium" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - -[[package]] -name = "crunchy" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] [[package]] -name = "crypto-common" -version = "0.1.7" +name = "ciborium-io" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" -dependencies = [ - "generic-array", - "typenum", -] +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" [[package]] -name = "csv" -version = "1.4.0" +name = "ciborium-ll" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" dependencies = [ - "csv-core", - "itoa", - "ryu", - "serde_core", + "ciborium-io", + "half", ] [[package]] -name = "csv-core" -version = "0.1.13" +name = "cipher" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "memchr", + "crypto-common", + "inout", ] [[package]] -name = "darling" -version = "0.20.11" +name = "clap" +version = "4.5.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394" dependencies = [ - "darling_core 0.20.11", - "darling_macro 0.20.11", + "clap_builder", + "clap_derive", ] [[package]] -name = "darling" -version = "0.23.0" +name = "clap_builder" +version = "4.5.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00" dependencies = [ - "darling_core 0.23.0", - "darling_macro 0.23.0", + "anstream", + "anstyle", + "clap_lex", + "strsim", ] [[package]] -name = "darling_core" -version = "0.20.11" +name = "clap_derive" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ - "fnv", - "ident_case", + "heck 0.5.0", "proc-macro2", "quote", - "strsim", "syn 2.0.114", ] [[package]] -name = "darling_core" -version = "0.23.0" +name = "clap_lex" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" + +[[package]] +name = "cmake" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" dependencies = [ - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.114", + "cc", ] [[package]] -name = "darling_macro" -version = "0.20.11" +name = "colorchoice" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + +[[package]] +name = "comfy-table" +version = "7.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0d05af1e006a2407bedef5af410552494ce5be9090444dbbcb57258c1af3d56" dependencies = [ - "darling_core 0.20.11", - "quote", - "syn 2.0.114", + "strum 0.26.3", + "strum_macros 0.26.4", + "unicode-width", ] [[package]] -name = "darling_macro" -version = "0.23.0" +name = "concurrent-queue" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ - "darling_core 0.23.0", - "quote", - "syn 2.0.114", + "crossbeam-utils", ] [[package]] -name = "dashmap" -version = "6.1.0" +name = "config" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +checksum = "68578f196d2a33ff61b27fae256c3164f65e36382648e30666dde05b8cc9dfdf" dependencies = [ - "cfg-if", - "crossbeam-utils", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", - "rayon", + "async-trait", + "convert_case", + "json5", + "nom 7.1.3", + "pathdiff", + "ron", + "rust-ini 0.20.0", "serde", + "serde_json", + "toml", + "yaml-rust2", ] [[package]] -name = "data-encoding" -version = "2.10.0" +name = "const-oid" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] -name = "datafusion" -version = "50.3.0" +name = "const-random" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af15bb3c6ffa33011ef579f6b0bcbe7c26584688bd6c994f548e44df67f011a" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" dependencies = [ - "arrow", - "arrow-ipc", - "arrow-schema", - "async-trait", - "bytes", - "bzip2 0.6.1", - "chrono", - "datafusion-catalog", - "datafusion-catalog-listing", - "datafusion-common", - "datafusion-common-runtime", - "datafusion-datasource", - "datafusion-datasource-csv", - "datafusion-datasource-json", - "datafusion-datasource-parquet", - "datafusion-execution", - "datafusion-expr", - "datafusion-expr-common", - "datafusion-functions", - "datafusion-functions-aggregate", - "datafusion-functions-nested", - "datafusion-functions-table", - "datafusion-functions-window", - "datafusion-optimizer", - "datafusion-physical-expr", - "datafusion-physical-expr-adapter", - "datafusion-physical-expr-common", - "datafusion-physical-optimizer", - "datafusion-physical-plan", - "datafusion-session", - "datafusion-sql", - "flate2", - "futures", - "itertools 0.14.0", - "log", - "object_store", - "parking_lot", - "parquet", - "rand 0.9.2", - "regex", - "sqlparser", - "tempfile", - "tokio", - "url", - "uuid", - "xz2", - "zstd", + "const-random-macro", ] [[package]] -name = "datafusion-catalog" -version = "50.3.0" +name = "const-random-macro" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "187622262ad8f7d16d3be9202b4c1e0116f1c9aa387e5074245538b755261621" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ - "arrow", - "async-trait", - "dashmap", - "datafusion-common", - "datafusion-common-runtime", - "datafusion-datasource", - "datafusion-execution", - "datafusion-expr", - "datafusion-physical-expr", - "datafusion-physical-plan", - "datafusion-session", - "datafusion-sql", - "futures", - "itertools 0.14.0", - "log", - "object_store", - "parking_lot", - "tokio", + "getrandom 0.2.17", + "once_cell", + "tiny-keccak", ] [[package]] -name = "datafusion-catalog-listing" -version = "50.3.0" +name = "constant_time_eq" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9657314f0a32efd0382b9a46fdeb2d233273ece64baa68a7c45f5a192daf0f83" -dependencies = [ - "arrow", - "async-trait", - "datafusion-catalog", - "datafusion-common", - "datafusion-datasource", - "datafusion-execution", - "datafusion-expr", - "datafusion-physical-expr", - "datafusion-physical-expr-common", - "datafusion-physical-plan", - "datafusion-session", - "futures", - "log", - "object_store", - "tokio", -] +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] -name = "datafusion-common" -version = "50.3.0" +name = "constant_time_eq" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a83760d9a13122d025fbdb1d5d5aaf93dd9ada5e90ea229add92aa30898b2d1" -dependencies = [ - "ahash", - "arrow", +checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32c" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a47af21622d091a8f0fb295b88bc886ac74efcc613efc19f5d0b21de5c89e47" +dependencies = [ + "rustc_version", +] + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "criterion" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" +dependencies = [ + "anes", + "cast", + "ciborium", + "clap", + "criterion-plot", + "is-terminal", + "itertools 0.10.5", + "num-traits", + "once_cell", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools 0.10.5", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "csv" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde_core", +] + +[[package]] +name = "csv-core" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" +dependencies = [ + "memchr", +] + +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core 0.21.3", + "darling_macro 0.21.3", +] + +[[package]] +name = "darling" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +dependencies = [ + "darling_core 0.23.0", + "darling_macro 0.23.0", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.114", +] + +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.114", +] + +[[package]] +name = "darling_core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.114", +] + +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core 0.20.11", + "quote", + "syn 2.0.114", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core 0.21.3", + "quote", + "syn 2.0.114", +] + +[[package]] +name = "darling_macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +dependencies = [ + "darling_core 0.23.0", + "quote", + "syn 2.0.114", +] + +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", + "rayon", + "serde", +] + +[[package]] +name = "data-encoding" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" + +[[package]] +name = "datafusion" +version = "50.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2af15bb3c6ffa33011ef579f6b0bcbe7c26584688bd6c994f548e44df67f011a" +dependencies = [ + "arrow", + "arrow-ipc", + "arrow-schema", + "async-trait", + "bytes", + "bzip2 0.6.1", + "chrono", + "datafusion-catalog", + "datafusion-catalog-listing", + "datafusion-common", + "datafusion-common-runtime", + "datafusion-datasource", + "datafusion-datasource-csv", + "datafusion-datasource-json", + "datafusion-datasource-parquet", + "datafusion-execution", + "datafusion-expr", + "datafusion-expr-common", + "datafusion-functions", + "datafusion-functions-aggregate", + "datafusion-functions-nested", + "datafusion-functions-table", + "datafusion-functions-window", + "datafusion-optimizer", + "datafusion-physical-expr", + "datafusion-physical-expr-adapter", + "datafusion-physical-expr-common", + "datafusion-physical-optimizer", + "datafusion-physical-plan", + "datafusion-session", + "datafusion-sql", + "flate2", + "futures", + "itertools 0.14.0", + "log", + "object_store", + "parking_lot", + "parquet", + "rand 0.9.2", + "regex", + "sqlparser", + "tempfile", + "tokio", + "url", + "uuid", + "xz2", + "zstd", +] + +[[package]] +name = "datafusion-catalog" +version = "50.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "187622262ad8f7d16d3be9202b4c1e0116f1c9aa387e5074245538b755261621" +dependencies = [ + "arrow", + "async-trait", + "dashmap", + "datafusion-common", + "datafusion-common-runtime", + "datafusion-datasource", + "datafusion-execution", + "datafusion-expr", + "datafusion-physical-expr", + "datafusion-physical-plan", + "datafusion-session", + "datafusion-sql", + "futures", + "itertools 0.14.0", + "log", + "object_store", + "parking_lot", + "tokio", +] + +[[package]] +name = "datafusion-catalog-listing" +version = "50.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9657314f0a32efd0382b9a46fdeb2d233273ece64baa68a7c45f5a192daf0f83" +dependencies = [ + "arrow", + "async-trait", + "datafusion-catalog", + "datafusion-common", + "datafusion-datasource", + "datafusion-execution", + "datafusion-expr", + "datafusion-physical-expr", + "datafusion-physical-expr-common", + "datafusion-physical-plan", + "datafusion-session", + "futures", + "log", + "object_store", + "tokio", +] + +[[package]] +name = "datafusion-common" +version = "50.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a83760d9a13122d025fbdb1d5d5aaf93dd9ada5e90ea229add92aa30898b2d1" +dependencies = [ + "ahash", + "arrow", "arrow-ipc", "base64 0.22.1", "chrono", @@ -2131,6 +2721,26 @@ 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 = "deflate64" version = "0.1.10" @@ -2155,6 +2765,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid", + "pem-rfc7468", + "zeroize", ] [[package]] @@ -2239,6 +2851,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", + "const-oid", "crypto-common", "subtle", ] @@ -2302,6 +2915,12 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +[[package]] +name = "downcast-rs" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc" + [[package]] name = "doxygen-rs" version = "0.4.2" @@ -2311,6 +2930,18 @@ dependencies = [ "phf 0.11.3", ] +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + [[package]] name = "dynamic-graphql" version = "0.10.1" @@ -2352,26 +2983,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "enum-iterator" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4549325971814bda7a44061bf3fe7e487d447cba01e4220a4b454d630d7a016" -dependencies = [ - "enum-iterator-derive", -] - -[[package]] -name = "enum-iterator-derive" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685adfa4d6f3d765a26bc5dbc936577de9abf756c1feeb3089b01dd395034842" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", -] - [[package]] name = "env_logger" version = "0.8.4" @@ -2398,6 +3009,12 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "ethnum" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca81e6b4777c89fd810c25a4be2b1bd93ea034fbe58e6a75216a34c6b82c539b" + [[package]] name = "event-listener" version = "5.4.1" @@ -2426,7 +3043,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74fef4569247a5f429d9156b9d0a2599914385dd189c539334c625d8099d90ab" dependencies = [ "futures-core", - "nom", + "nom 7.1.3", "pin-project-lite", ] @@ -2441,6 +3058,12 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "fast-float2" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8eb564c5c7423d25c886fb561d1e4ee69f72354d16918afa32c08811f6b6a55" + [[package]] name = "fast_chemail" version = "0.9.6" @@ -2526,6 +3149,37 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + +[[package]] +name = "fsst" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2475ce218217196b161b025598f77e2b405d5e729f7c37bfff145f5df00a41" +dependencies = [ + "arrow-array", + "rand 0.9.2", +] + +[[package]] +name = "fst" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab85b9b05e3978cc9a9cf8fea7f01b494e1a09ed3037e16ba39edc7a29eb61a" +dependencies = [ + "utf8-ranges", +] + +[[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" @@ -2621,6 +3275,21 @@ dependencies = [ "slab", ] +[[package]] +name = "generator" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f04ae4152da20c76fe800fa48659201d5cf627c5149ca0b707b69d7eef6cf9" +dependencies = [ + "cc", + "cfg-if", + "libc", + "log", + "rustversion", + "windows-link", + "windows-result", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -2670,6 +3339,37 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "h2" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.13.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "h2" version = "0.4.13" @@ -2681,7 +3381,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http", + "http 1.4.0", "indexmap 2.13.0", "slab", "tokio", @@ -2768,7 +3468,7 @@ dependencies = [ "base64 0.22.1", "bytes", "headers-core", - "http", + "http 1.4.0", "httpdate", "mime", "sha1", @@ -2780,7 +3480,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" dependencies = [ - "http", + "http 1.4.0", ] [[package]] @@ -2854,12 +3554,32 @@ dependencies = [ "digest", ] +[[package]] +name = "home" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" +dependencies = [ + "windows-sys 0.61.2", +] + [[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http" version = "1.4.0" @@ -2870,6 +3590,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + [[package]] name = "http-body" version = "1.0.1" @@ -2877,7 +3608,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http", + "http 1.4.0", ] [[package]] @@ -2888,8 +3619,8 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http", - "http-body", + "http 1.4.0", + "http-body 1.0.1", "pin-project-lite", ] @@ -2911,6 +3642,30 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.27", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.5.10", + "tokio", + "tower-service", + "tracing", + "want", +] + [[package]] name = "hyper" version = "1.8.1" @@ -2921,9 +3676,9 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "h2", - "http", - "http-body", + "h2 0.4.13", + "http 1.4.0", + "http-body 1.0.1", "httparse", "httpdate", "itoa", @@ -2934,20 +3689,35 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.32", + "log", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", +] + [[package]] name = "hyper-rustls" version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "http", - "hyper", + "http 1.4.0", + "hyper 1.8.1", "hyper-util", - "rustls", + "rustls 0.23.36", "rustls-native-certs 0.8.3", "rustls-pki-types", "tokio", - "tokio-rustls", + "tokio-rustls 0.26.4", "tower-service", "webpki-roots 1.0.5", ] @@ -2958,7 +3728,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper", + "hyper 1.8.1", "hyper-util", "pin-project-lite", "tokio", @@ -2976,9 +3746,9 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "http", - "http-body", - "hyper", + "http 1.4.0", + "http-body 1.0.1", + "hyper 1.8.1", "ipnet", "libc", "percent-encoding", @@ -2989,6 +3759,15 @@ dependencies = [ "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.64" @@ -3129,6 +3908,7 @@ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", + "serde", ] [[package]] @@ -3141,202 +3921,807 @@ dependencies = [ "hashbrown 0.16.1", "rayon", "serde", - "serde_core", + "serde_core", +] + +[[package]] +name = "indoc" +version = "2.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" +dependencies = [ + "rustversion", +] + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "block-padding", + "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 = "integer-encoding" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" + +[[package]] +name = "inventory" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" +dependencies = [ + "rustversion", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "iri-string" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "is-terminal" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + +[[package]] +name = "iter-enum" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c52f2d5e063459674b4735f21870dd911e0d96dbfebb984650068195c2df838" +dependencies = [ + "derive_utils", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" + +[[package]] +name = "jiff" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67e8da4c49d6d9909fe03361f9b620f58898859f5c7aded68351e85e71ecf50" +dependencies = [ + "jiff-static", + "jiff-tzdb-platform", + "log", + "portable-atomic", + "portable-atomic-util", + "serde_core", + "windows-sys 0.61.2", +] + +[[package]] +name = "jiff-static" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0c84ee7f197eca9a86c6fd6cb771e55eb991632f15f2bc3ca6ec838929e6e78" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.114", +] + +[[package]] +name = "jiff-tzdb" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68971ebff725b9e2ca27a601c5eb38a4c5d64422c4cbab0c535f248087eda5c2" + +[[package]] +name = "jiff-tzdb-platform" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8" +dependencies = [ + "jiff-tzdb", +] + +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "json5" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +dependencies = [ + "pest", + "pest_derive", + "serde", +] + +[[package]] +name = "jsonb" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a901f06163d352fbe41c3c2ff5e08b75330a003cc941e988fb501022f5421e6" +dependencies = [ + "byteorder", + "ethnum", + "fast-float2", + "itoa", + "jiff", + "nom 8.0.0", + "num-traits", + "ordered-float 5.1.0", + "rand 0.9.2", + "ryu", + "serde", + "serde_json", ] [[package]] -name = "indoc" -version = "2.0.7" +name = "jsonwebtoken" +version = "9.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" +checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" dependencies = [ - "rustversion", + "base64 0.22.1", + "js-sys", + "pem", + "ring", + "serde", + "serde_json", + "simple_asn1", ] [[package]] -name = "inout" -version = "0.1.4" +name = "kdam" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +checksum = "5740f66a8d86a086ebcacfb937070e8be6eb2f8fb45e4ae7fa428ca2a98a7b1f" dependencies = [ - "generic-array", + "pyo3", + "terminal_size", + "windows-sys 0.59.0", ] [[package]] -name = "instant" -version = "0.1.13" +name = "lance" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +checksum = "a2f0ca022d0424d991933a62d2898864cf5621873962bd84e65e7d1f023f9c36" dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", + "arrow", + "arrow-arith", + "arrow-array", + "arrow-buffer", + "arrow-ipc", + "arrow-ord", + "arrow-row", + "arrow-schema", + "arrow-select", + "async-recursion", + "async-trait", + "async_cell", + "aws-credential-types", + "aws-sdk-dynamodb", + "byteorder", + "bytes", + "chrono", + "dashmap", + "datafusion", + "datafusion-expr", + "datafusion-functions", + "datafusion-physical-expr", + "datafusion-physical-plan", + "deepsize", + "either", + "futures", + "half", + "humantime", + "itertools 0.13.0", + "lance-arrow", + "lance-core", + "lance-datafusion", + "lance-encoding", + "lance-file", + "lance-index", + "lance-io", + "lance-linalg", + "lance-namespace", + "lance-table", + "log", + "moka", + "object_store", + "permutation", + "pin-project", + "prost", + "prost-types", + "rand 0.9.2", + "roaring", + "semver", + "serde", + "serde_json", + "snafu", + "tantivy 0.24.2", + "tokio", + "tokio-stream", + "tracing", + "url", + "uuid", ] [[package]] -name = "integer-encoding" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" - -[[package]] -name = "inventory" -version = "0.3.21" +name = "lance-arrow" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" +checksum = "7552f8d528775bf0ab21e1f75dcb70bdb2a828eeae58024a803b5a4655fd9a11" dependencies = [ - "rustversion", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "arrow-select", + "bytes", + "getrandom 0.2.17", + "half", + "jsonb", + "num-traits", + "rand 0.9.2", ] [[package]] -name = "ipnet" -version = "2.11.0" +name = "lance-bitpacking" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +checksum = "a2ea14583cc6fa0bb190bcc2d3bc364b0aa545b345702976025f810e4740e8ce" +dependencies = [ + "arrayref", + "paste", + "seq-macro", +] [[package]] -name = "iri-string" -version = "0.7.10" +name = "lance-core" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" +checksum = "69c752dedd207384892006c40930f898d6634e05e3d489e89763abfe4b9307e7" dependencies = [ - "memchr", - "serde", + "arrow-array", + "arrow-buffer", + "arrow-schema", + "async-trait", + "byteorder", + "bytes", + "chrono", + "datafusion-common", + "datafusion-sql", + "deepsize", + "futures", + "lance-arrow", + "libc", + "log", + "mock_instant", + "moka", + "num_cpus", + "object_store", + "pin-project", + "prost", + "rand 0.9.2", + "roaring", + "serde_json", + "snafu", + "tempfile", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", + "url", ] [[package]] -name = "is-terminal" -version = "0.4.17" +name = "lance-datafusion" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" +checksum = "21e1e98ca6e5cd337bdda2d9fb66063f295c0c2852d2bc6831366fea833ee608" dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.61.2", + "arrow", + "arrow-array", + "arrow-buffer", + "arrow-ord", + "arrow-schema", + "arrow-select", + "async-trait", + "chrono", + "datafusion", + "datafusion-common", + "datafusion-functions", + "datafusion-physical-expr", + "futures", + "jsonb", + "lance-arrow", + "lance-core", + "lance-datagen", + "log", + "pin-project", + "prost", + "snafu", + "tokio", + "tracing", ] [[package]] -name = "is_terminal_polyfill" -version = "1.70.2" +name = "lance-datagen" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" +checksum = "483c643fc2806ed1a2766edf4d180511bbd1d549bcc60373e33f4785c6185891" +dependencies = [ + "arrow", + "arrow-array", + "arrow-cast", + "arrow-schema", + "chrono", + "futures", + "half", + "hex", + "rand 0.9.2", + "rand_xoshiro", + "random_word", +] [[package]] -name = "iter-enum" -version = "1.2.0" +name = "lance-encoding" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c52f2d5e063459674b4735f21870dd911e0d96dbfebb984650068195c2df838" +checksum = "a199d1fa3487529c5ffc433fbd1721231330b9350c2ff9b0c7b7dbdb98f0806a" dependencies = [ - "derive_utils", + "arrow-arith", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "arrow-select", + "bytemuck", + "byteorder", + "bytes", + "fsst", + "futures", + "hex", + "hyperloglogplus", + "itertools 0.13.0", + "lance-arrow", + "lance-bitpacking", + "lance-core", + "log", + "lz4", + "num-traits", + "prost", + "prost-build", + "prost-types", + "rand 0.9.2", + "snafu", + "strum 0.26.3", + "tokio", + "tracing", + "xxhash-rust", + "zstd", ] [[package]] -name = "itertools" -version = "0.10.5" +name = "lance-file" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "b57def2279465232cf5a8cd996300c632442e368745768bbed661c7f0a35334b" dependencies = [ - "either", + "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", + "prost-build", + "prost-types", + "snafu", + "tokio", + "tracing", ] [[package]] -name = "itertools" -version = "0.11.0" +name = "lance-index" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +checksum = "a75938c61e986aef8c615dc44c92e4c19e393160a59e2b57402ccfe08c5e63af" dependencies = [ - "either", + "arrow", + "arrow-arith", + "arrow-array", + "arrow-ord", + "arrow-schema", + "arrow-select", + "async-channel", + "async-recursion", + "async-trait", + "bitpacking", + "bitvec", + "bytes", + "crossbeam-queue", + "datafusion", + "datafusion-common", + "datafusion-expr", + "datafusion-physical-expr", + "datafusion-sql", + "deepsize", + "dirs", + "fst", + "futures", + "half", + "itertools 0.13.0", + "jsonb", + "lance-arrow", + "lance-core", + "lance-datafusion", + "lance-datagen", + "lance-encoding", + "lance-file", + "lance-io", + "lance-linalg", + "lance-table", + "libm", + "log", + "ndarray", + "num-traits", + "object_store", + "prost", + "prost-build", + "prost-types", + "rand 0.9.2", + "rand_distr 0.5.1", + "rayon", + "roaring", + "serde", + "serde_json", + "snafu", + "tantivy 0.24.2", + "tempfile", + "tokio", + "tracing", + "twox-hash", + "uuid", ] [[package]] -name = "itertools" -version = "0.12.1" +name = "lance-io" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "fa6c3b5b28570d6c951206c5b043f1b35c936928af14fca6f2ac25b0097e4c32" dependencies = [ - "either", + "arrow", + "arrow-arith", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "arrow-select", + "async-recursion", + "async-trait", + "aws-config", + "aws-credential-types", + "byteorder", + "bytes", + "chrono", + "deepsize", + "futures", + "lance-arrow", + "lance-core", + "lance-namespace", + "log", + "object_store", + "object_store_opendal", + "opendal", + "path_abs", + "pin-project", + "prost", + "rand 0.9.2", + "serde", + "shellexpand", + "snafu", + "tokio", + "tracing", + "url", ] [[package]] -name = "itertools" -version = "0.13.0" +name = "lance-linalg" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +checksum = "b3cbc7e85a89ff9cb3a4627559dea3fd1c1fb16c0d8bc46ede75eefef51eec06" dependencies = [ - "either", + "arrow-array", + "arrow-buffer", + "arrow-schema", + "cc", + "deepsize", + "half", + "lance-arrow", + "lance-core", + "num-traits", + "rand 0.9.2", ] [[package]] -name = "itertools" -version = "0.14.0" +name = "lance-namespace" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +checksum = "897dd6726816515bb70a698ce7cda44670dca5761637696d7905b45f405a8cd9" dependencies = [ - "either", + "arrow", + "async-trait", + "bytes", + "lance-core", + "lance-namespace-reqwest-client", + "snafu", ] [[package]] -name = "itoa" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" - -[[package]] -name = "jobserver" -version = "0.1.34" +name = "lance-namespace-impls" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "5e3cfcd3ba369de2719abf6fb6233f69cda639eb5cbcb328487a790e745ab988" dependencies = [ - "getrandom 0.3.4", - "libc", + "arrow", + "arrow-ipc", + "arrow-schema", + "async-trait", + "bytes", + "lance", + "lance-core", + "lance-io", + "lance-namespace", + "object_store", + "reqwest", + "serde_json", + "snafu", + "url", ] [[package]] -name = "js-sys" -version = "0.3.83" +name = "lance-namespace-reqwest-client" +version = "0.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" +checksum = "3ea349999bcda4eea53fc05d334b3775ec314761e6a706555c777d7a29b18d19" dependencies = [ - "once_cell", - "wasm-bindgen", + "reqwest", + "serde", + "serde_json", + "serde_repr", + "url", ] [[package]] -name = "json5" -version = "0.4.1" +name = "lance-table" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +checksum = "c8facc13760ba034b6c38767b16adba85e44cbcbea8124dc0c63c43865c60630" dependencies = [ - "pest", - "pest_derive", + "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", + "log", + "object_store", + "prost", + "prost-build", + "prost-types", + "rand 0.9.2", + "rangemap", + "roaring", + "semver", "serde", + "serde_json", + "snafu", + "tokio", + "tracing", + "url", + "uuid", ] [[package]] -name = "jsonwebtoken" -version = "9.3.1" +name = "lance-testing" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" +checksum = "b05052ef86188d6ae6339bdd9f2c5d77190e8ad1158f3dc8a42fa91bde9e5246" dependencies = [ - "base64 0.22.1", - "js-sys", - "pem", - "ring", - "serde", - "serde_json", - "simple_asn1", + "arrow-array", + "arrow-schema", + "lance-arrow", + "num-traits", + "rand 0.9.2", ] [[package]] -name = "kdam" -version = "0.6.3" +name = "lancedb" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5740f66a8d86a086ebcacfb937070e8be6eb2f8fb45e4ae7fa428ca2a98a7b1f" +checksum = "e1da241266792d8caa58005a3deb06ba1388a99350d89b5c904ef6f8de5d936f" dependencies = [ - "pyo3", - "terminal_size", - "windows-sys 0.59.0", + "ahash", + "arrow", + "arrow-array", + "arrow-cast", + "arrow-data", + "arrow-ipc", + "arrow-ord", + "arrow-schema", + "arrow-select", + "async-trait", + "bytes", + "chrono", + "datafusion", + "datafusion-catalog", + "datafusion-common", + "datafusion-execution", + "datafusion-expr", + "datafusion-physical-plan", + "futures", + "half", + "lance", + "lance-arrow", + "lance-core", + "lance-datafusion", + "lance-datagen", + "lance-encoding", + "lance-file", + "lance-index", + "lance-io", + "lance-linalg", + "lance-namespace", + "lance-namespace-impls", + "lance-table", + "lance-testing", + "lazy_static", + "log", + "moka", + "num-traits", + "object_store", + "pin-project", + "rand 0.9.2", + "regex", + "semver", + "serde", + "serde_json", + "serde_with", + "snafu", + "tempfile", + "tokio", + "url", + "uuid", ] [[package]] @@ -3344,6 +4729,9 @@ name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] [[package]] name = "levenshtein_automata" @@ -3481,6 +4869,19 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +[[package]] +name = "loom" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "tracing", + "tracing-subscriber", +] + [[package]] name = "lru" version = "0.12.5" @@ -3496,6 +4897,25 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" +[[package]] +name = "lz4" +version = "1.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a20b523e860d03443e98350ceaac5e71c6ba89aea7d960769ec3ce37f4de5af4" +dependencies = [ + "lz4-sys", +] + +[[package]] +name = "lz4-sys" +version = "1.11.1+lz4-1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bd8c0d6c6ed0cd30b3652886bb8711dc4bb01d637a68105a3d5158039b418e6" +dependencies = [ + "cc", + "libc", +] + [[package]] name = "lz4_flex" version = "0.11.5" @@ -3541,6 +4961,12 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +[[package]] +name = "matchit" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" + [[package]] name = "matrixmultiply" version = "0.3.10" @@ -3548,7 +4974,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" dependencies = [ "autocfg", + "num_cpus", + "once_cell", "rawpointer", + "thread-tree", ] [[package]] @@ -3571,6 +5000,15 @@ dependencies = [ "log", ] +[[package]] +name = "measure_time" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51c55d61e72fc3ab704396c5fa16f4c184db37978ae4e94ca8959693a235fc0e" +dependencies = [ + "log", +] + [[package]] name = "memchr" version = "2.7.6" @@ -3658,6 +5096,12 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "mock_instant" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce6dd36094cac388f119d2e9dc82dc730ef91c32a6222170d630e5414b956e6" + [[package]] name = "moka" version = "0.12.12" @@ -3687,7 +5131,7 @@ dependencies = [ "bytes", "encoding_rs", "futures-util", - "http", + "http 1.4.0", "httparse", "memchr", "mime", @@ -3745,7 +5189,7 @@ dependencies = [ "serde", "thiserror 1.0.69", "tokio", - "tokio-rustls", + "tokio-rustls 0.26.4", "url", "webpki-roots 0.26.11", ] @@ -3772,12 +5216,6 @@ dependencies = [ "libc", ] -[[package]] -name = "nohash" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0f889fb66f7acdf83442c35775764b51fed3c606ab9cee51500dbde2cf528ca" - [[package]] name = "nom" version = "7.1.3" @@ -3788,6 +5226,15 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nom" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" +dependencies = [ + "memchr", +] + [[package]] name = "nu-ansi-term" version = "0.50.3" @@ -3821,6 +5268,22 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-bigint-dig" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" +dependencies = [ + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + [[package]] name = "num-complex" version = "0.4.6" @@ -3935,14 +5398,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c1be0c6c22ec0817cdc77d3842f721a17fd30ab6965001415b5402a74e6b740" dependencies = [ "async-trait", + "base64 0.22.1", "bytes", "chrono", + "form_urlencoded", "futures", - "http", + "http 1.4.0", + "http-body-util", + "httparse", "humantime", + "hyper 1.8.1", "itertools 0.14.0", + "md-5", "parking_lot", "percent-encoding", + "quick-xml 0.38.4", + "rand 0.9.2", + "reqwest", + "ring", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", "thiserror 2.0.17", "tokio", "tracing", @@ -3952,6 +5429,21 @@ dependencies = [ "web-time", ] +[[package]] +name = "object_store_opendal" +version = "0.54.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b88fc0e0c4890c1d99e2b8c519c5db40f7d9b69a0f562ff1ad4967a4c8bbc6" +dependencies = [ + "async-trait", + "bytes", + "futures", + "object_store", + "opendal", + "pin-project", + "tokio", +] + [[package]] name = "once_cell" version = "1.21.3" @@ -3976,6 +5468,35 @@ version = "11.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" +[[package]] +name = "opendal" +version = "0.54.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42afda58fa2cf50914402d132cc1caacff116a85d10c72ab2082bb7c50021754" +dependencies = [ + "anyhow", + "backon", + "base64 0.22.1", + "bytes", + "chrono", + "crc32c", + "futures", + "getrandom 0.2.17", + "http 1.4.0", + "http-body 1.0.1", + "log", + "md-5", + "percent-encoding", + "quick-xml 0.38.4", + "reqsign", + "reqwest", + "serde", + "serde_json", + "sha2", + "tokio", + "uuid", +] + [[package]] name = "openssl-probe" version = "0.1.6" @@ -4010,7 +5531,7 @@ checksum = "91cf61a1868dacc576bf2b2a1c3e9ab150af7272909e80085c3173384fe11f76" dependencies = [ "async-trait", "futures-core", - "http", + "http 1.4.0", "opentelemetry", "opentelemetry-proto", "opentelemetry_sdk", @@ -4078,6 +5599,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "ordered-float" +version = "5.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4779c6901a562440c3786d08192c6fbda7c1c2060edd10006b05ee35d10f2d" +dependencies = [ + "num-traits", +] + [[package]] name = "ordered-multimap" version = "0.7.3" @@ -4112,6 +5642,12 @@ dependencies = [ "syn 2.0.114", ] +[[package]] +name = "outref" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" + [[package]] name = "ownedbytes" version = "0.7.0" @@ -4121,6 +5657,15 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "ownedbytes" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fbd56f7631767e61784dc43f8580f403f4475bd4aaa4da003e6295e1bab4a7e" +dependencies = [ + "stable_deref_trait", +] + [[package]] name = "page_size" version = "0.6.0" @@ -4212,6 +5757,18 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "path_abs" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05ef02f6342ac01d8a93b65f96db53fe68a92a15f41144f97fb00a9e669633c3" +dependencies = [ + "serde", + "serde_derive", + "std_prelude", + "stfu8", +] + [[package]] name = "pathdiff" version = "0.2.3" @@ -4238,12 +5795,27 @@ dependencies = [ "serde_core", ] +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +[[package]] +name = "permutation" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df202b0b0f5b8e389955afd5f27b007b00fb948162953f1db9c70d2c7e3157d7" + [[package]] name = "pest" version = "2.8.5" @@ -4411,6 +5983,44 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs5" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e847e2c91a18bfa887dd028ec33f2fe6f25db77db3619024764914affe8b69a6" +dependencies = [ + "aes", + "cbc", + "der", + "pbkdf2", + "scrypt", + "sha2", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "pkcs5", + "rand_core 0.6.4", + "spki", +] + [[package]] name = "pkg-config" version = "0.3.32" @@ -4457,10 +6067,10 @@ dependencies = [ "futures-util", "headers", "hex", - "http", + "http 1.4.0", "http-body-util", "httpdate", - "hyper", + "hyper 1.8.1", "hyper-util", "mime", "mime_guess", @@ -4780,6 +6390,26 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +[[package]] +name = "quick-xml" +version = "0.37.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "quick-xml" +version = "0.38.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "quickcheck" version = "1.0.3" @@ -4814,7 +6444,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash 2.1.1", - "rustls", + "rustls 0.23.36", "socket2 0.6.1", "thiserror 2.0.17", "tokio", @@ -4834,7 +6464,7 @@ dependencies = [ "rand 0.9.2", "ring", "rustc-hash 2.1.1", - "rustls", + "rustls 0.23.36", "rustls-pki-types", "slab", "thiserror 2.0.17", @@ -4872,6 +6502,12 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + [[package]] name = "rand" version = "0.8.5" @@ -4941,6 +6577,16 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "rand_distr" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8615d50dcf34fa31f7ab52692afec947c4dd0ab803cc87cb3b0b4570ff7463" +dependencies = [ + "num-traits", + "rand 0.9.2", +] + [[package]] name = "rand_xorshift" version = "0.4.0" @@ -4950,17 +6596,46 @@ dependencies = [ "rand_core 0.9.5", ] +[[package]] +name = "rand_xoshiro" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f703f4665700daf5512dcca5f43afa6af89f09db47fb56be587f80636bda2d41" +dependencies = [ + "rand_core 0.9.5", +] + +[[package]] +name = "random_word" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e47a395bdb55442b883c89062d6bcff25dc90fa5f8369af81e0ac6d49d78cf81" +dependencies = [ + "ahash", + "brotli 8.0.2", + "paste", + "rand 0.9.2", + "unicase", +] + +[[package]] +name = "rangemap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "973443cf09a9c8656b574a866ab68dfa19f0867d0340648c7d2f6a71b8a8ea68" + [[package]] name = "raphtory" version = "0.17.0" dependencies = [ "ahash", "arrow", + "arrow-array", "arrow-csv", "arrow-json", - "arroy", "async-openai", "async-trait", + "axum 0.8.8", "bigdecimal", "bincode", "bytemuck", @@ -4981,6 +6656,7 @@ dependencies = [ "iter-enum", "itertools 0.13.0", "kdam", + "lancedb", "memmap2", "minijinja", "minijinja-contrib", @@ -5008,7 +6684,7 @@ dependencies = [ "quickcheck", "quickcheck_macros", "rand 0.8.5", - "rand_distr", + "rand_distr 0.4.3", "raphtory", "raphtory-api", "raphtory-core", @@ -5022,7 +6698,7 @@ dependencies = [ "serde_json", "streaming-stats", "strsim", - "tantivy", + "tantivy 0.22.1", "tempfile", "thiserror 2.0.17", "tokio", @@ -5310,6 +6986,26 @@ dependencies = [ "thiserror 2.0.17", ] +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.114", +] + [[package]] name = "regex" version = "1.12.2" @@ -5333,12 +7029,50 @@ dependencies = [ "regex-syntax", ] +[[package]] +name = "regex-lite" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d942b98df5e658f56f20d592c7f868833fe38115e65c33003d8cd224b0155da" + [[package]] name = "regex-syntax" version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" +[[package]] +name = "reqsign" +version = "0.16.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43451dbf3590a7590684c25fb8d12ecdcc90ed3ac123433e500447c7d77ed701" +dependencies = [ + "anyhow", + "async-trait", + "base64 0.22.1", + "chrono", + "form_urlencoded", + "getrandom 0.2.17", + "hex", + "hmac", + "home", + "http 1.4.0", + "jsonwebtoken", + "log", + "once_cell", + "percent-encoding", + "quick-xml 0.37.5", + "rand 0.8.5", + "reqwest", + "rsa", + "rust-ini 0.21.3", + "serde", + "serde_json", + "sha1", + "sha2", + "tokio", +] + [[package]] name = "reqwest" version = "0.12.28" @@ -5347,22 +7081,25 @@ checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64 0.22.1", "bytes", + "encoding_rs", "futures-channel", "futures-core", "futures-util", - "http", - "http-body", + "h2 0.4.13", + "http 1.4.0", + "http-body 1.0.1", "http-body-util", - "hyper", - "hyper-rustls", + "hyper 1.8.1", + "hyper-rustls 0.27.7", "hyper-util", "js-sys", "log", + "mime", "mime_guess", "percent-encoding", "pin-project-lite", "quinn", - "rustls", + "rustls 0.23.36", "rustls-native-certs 0.8.3", "rustls-pki-types", "serde", @@ -5370,7 +7107,7 @@ dependencies = [ "serde_urlencoded", "sync_wrapper", "tokio", - "tokio-rustls", + "tokio-rustls 0.26.4", "tokio-util", "tower 0.5.3", "tower-http", @@ -5393,7 +7130,7 @@ dependencies = [ "futures-core", "futures-timer", "mime", - "nom", + "nom 7.1.3", "pin-project-lite", "reqwest", "thiserror 1.0.69", @@ -5450,6 +7187,27 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "rsa" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" +dependencies = [ + "const-oid", + "digest", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core 0.6.4", + "sha2", + "signature", + "spki", + "subtle", + "zeroize", +] + [[package]] name = "rust-embed" version = "8.10.0" @@ -5507,6 +7265,16 @@ dependencies = [ "ordered-multimap", ] +[[package]] +name = "rust-ini" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "796e8d2b6696392a43bea58116b667fb4c29727dc5abd27d6acf338bb4f688c7" +dependencies = [ + "cfg-if", + "ordered-multimap", +] + [[package]] name = "rust-stemmers" version = "1.2.0" @@ -5564,16 +7332,29 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki 0.101.7", + "sct", +] + [[package]] name = "rustls" version = "0.23.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" dependencies = [ + "aws-lc-rs", "once_cell", "ring", "rustls-pki-types", - "rustls-webpki", + "rustls-webpki 0.103.8", "subtle", "zeroize", ] @@ -5622,12 +7403,23 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustls-webpki" version = "0.103.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" dependencies = [ + "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -5652,34 +7444,94 @@ dependencies = [ ] [[package]] -name = "ryu" -version = "1.0.22" +name = "ryu" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" + +[[package]] +name = "salsa20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +dependencies = [ + "cipher", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e910108742c57a770f492731f99be216a52fadd361b06c8fb59d74ccc267d2" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] -name = "same-file" -version = "1.0.6" +name = "scopeguard" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] -name = "schannel" -version = "0.1.28" +name = "scrypt" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" dependencies = [ - "windows-sys 0.61.2", + "pbkdf2", + "salsa20", + "sha2", ] [[package]] -name = "scopeguard" -version = "1.2.0" +name = "sct" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] [[package]] name = "secrecy" @@ -5782,6 +7634,28 @@ dependencies = [ "zmij", ] +[[package]] +name = "serde_path_to_error" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" +dependencies = [ + "itoa", + "serde", + "serde_core", +] + +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.114", +] + [[package]] name = "serde_spanned" version = "0.6.9" @@ -5803,6 +7677,37 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.13.0", + "schemars 0.9.0", + "schemars 1.2.0", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" +dependencies = [ + "darling 0.21.3", + "proc-macro2", + "quote", + "syn 2.0.114", +] + [[package]] name = "sha1" version = "0.10.6" @@ -5859,6 +7764,16 @@ dependencies = [ "libc", ] +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core 0.6.4", +] + [[package]] name = "simd-adler32" version = "0.3.8" @@ -5898,6 +7813,15 @@ dependencies = [ "serde", ] +[[package]] +name = "sketches-ddsketch" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e9a774a6c28142ac54bb25d25562e6bcf957493a184f15ad4eebccb23e410a" +dependencies = [ + "serde", +] + [[package]] name = "slab" version = "0.4.11" @@ -5910,6 +7834,27 @@ version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +[[package]] +name = "snafu" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2" +dependencies = [ + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.114", +] + [[package]] name = "snap" version = "1.1.1" @@ -5958,6 +7903,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ + "base64ct", "der", ] @@ -6014,6 +7960,18 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7beae5182595e9a8b683fa98c4317f956c9a2dec3b9716990d20023cc60c766" +[[package]] +name = "std_prelude" +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 = "streaming-stats" version = "0.2.3" @@ -6034,6 +7992,9 @@ name = "strum" version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros 0.26.4", +] [[package]] name = "strum" @@ -6146,7 +8107,7 @@ dependencies = [ "census", "crc32fast", "crossbeam-channel", - "downcast-rs", + "downcast-rs 1.2.1", "fastdivide", "fnv", "fs4", @@ -6156,7 +8117,7 @@ dependencies = [ "log", "lru", "lz4_flex", - "measure_time", + "measure_time 0.8.3", "memmap2", "num_cpus", "once_cell", @@ -6167,15 +8128,15 @@ dependencies = [ "rustc-hash 1.1.0", "serde", "serde_json", - "sketches-ddsketch", + "sketches-ddsketch 0.2.2", "smallvec", - "tantivy-bitpacker", - "tantivy-columnar", - "tantivy-common", + "tantivy-bitpacker 0.6.0", + "tantivy-columnar 0.3.0", + "tantivy-common 0.7.0", "tantivy-fst", - "tantivy-query-grammar", - "tantivy-stacker", - "tantivy-tokenizer-api", + "tantivy-query-grammar 0.22.0", + "tantivy-stacker 0.3.0", + "tantivy-tokenizer-api 0.3.0", "tempfile", "thiserror 1.0.69", "time", @@ -6183,6 +8144,58 @@ dependencies = [ "winapi", ] +[[package]] +name = "tantivy" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a966cb0e76e311f09cf18507c9af192f15d34886ee43d7ba7c7e3803660c43" +dependencies = [ + "aho-corasick", + "arc-swap", + "base64 0.22.1", + "bitpacking", + "bon", + "byteorder", + "census", + "crc32fast", + "crossbeam-channel", + "downcast-rs 2.0.2", + "fastdivide", + "fnv", + "fs4", + "htmlescape", + "hyperloglogplus", + "itertools 0.14.0", + "levenshtein_automata", + "log", + "lru", + "lz4_flex", + "measure_time 0.9.0", + "memmap2", + "once_cell", + "oneshot", + "rayon", + "regex", + "rust-stemmers", + "rustc-hash 2.1.1", + "serde", + "serde_json", + "sketches-ddsketch 0.3.0", + "smallvec", + "tantivy-bitpacker 0.8.0", + "tantivy-columnar 0.5.0", + "tantivy-common 0.9.0", + "tantivy-fst", + "tantivy-query-grammar 0.24.0", + "tantivy-stacker 0.5.0", + "tantivy-tokenizer-api 0.5.0", + "tempfile", + "thiserror 2.0.17", + "time", + "uuid", + "winapi", +] + [[package]] name = "tantivy-bitpacker" version = "0.6.0" @@ -6192,20 +8205,45 @@ dependencies = [ "bitpacking", ] +[[package]] +name = "tantivy-bitpacker" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1adc286a39e089ae9938935cd488d7d34f14502544a36607effd2239ff0e2494" +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", + "downcast-rs 1.2.1", "fastdivide", "itertools 0.12.1", "serde", - "tantivy-bitpacker", - "tantivy-common", - "tantivy-sstable", - "tantivy-stacker", + "tantivy-bitpacker 0.6.0", + "tantivy-common 0.7.0", + "tantivy-sstable 0.3.0", + "tantivy-stacker 0.3.0", +] + +[[package]] +name = "tantivy-columnar" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6300428e0c104c4f7db6f95b466a6f5c1b9aece094ec57cdd365337908dc7344" +dependencies = [ + "downcast-rs 2.0.2", + "fastdivide", + "itertools 0.14.0", + "serde", + "tantivy-bitpacker 0.8.0", + "tantivy-common 0.9.0", + "tantivy-sstable 0.5.0", + "tantivy-stacker 0.5.0", ] [[package]] @@ -6216,7 +8254,20 @@ checksum = "8019e3cabcfd20a1380b491e13ff42f57bb38bf97c3d5fa5c07e50816e0621f4" dependencies = [ "async-trait", "byteorder", - "ownedbytes", + "ownedbytes 0.7.0", + "serde", + "time", +] + +[[package]] +name = "tantivy-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91b6ea6090ce03dc72c27d0619e77185d26cc3b20775966c346c6d4f7e99d7f" +dependencies = [ + "async-trait", + "byteorder", + "ownedbytes 0.9.0", "serde", "time", ] @@ -6238,7 +8289,18 @@ version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "847434d4af57b32e309f4ab1b4f1707a6c566656264caa427ff4285c4d9d0b82" dependencies = [ - "nom", + "nom 7.1.3", +] + +[[package]] +name = "tantivy-query-grammar" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e810cdeeebca57fc3f7bfec5f85fdbea9031b2ac9b990eb5ff49b371d52bbe6a" +dependencies = [ + "nom 7.1.3", + "serde", + "serde_json", ] [[package]] @@ -6247,8 +8309,22 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c69578242e8e9fc989119f522ba5b49a38ac20f576fc778035b96cc94f41f98e" dependencies = [ - "tantivy-bitpacker", - "tantivy-common", + "tantivy-bitpacker 0.6.0", + "tantivy-common 0.7.0", + "tantivy-fst", + "zstd", +] + +[[package]] +name = "tantivy-sstable" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709f22c08a4c90e1b36711c1c6cad5ae21b20b093e535b69b18783dd2cb99416" +dependencies = [ + "futures-util", + "itertools 0.14.0", + "tantivy-bitpacker 0.8.0", + "tantivy-common 0.9.0", "tantivy-fst", "zstd", ] @@ -6260,8 +8336,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c56d6ff5591fc332739b3ce7035b57995a3ce29a93ffd6012660e0949c956ea8" dependencies = [ "murmurhash32", - "rand_distr", - "tantivy-common", + "rand_distr 0.4.3", + "tantivy-common 0.7.0", +] + +[[package]] +name = "tantivy-stacker" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bcdebb267671311d1e8891fd9d1301803fdb8ad21ba22e0a30d0cab49ba59c1" +dependencies = [ + "murmurhash32", + "rand_distr 0.4.3", + "tantivy-common 0.9.0", ] [[package]] @@ -6273,6 +8360,21 @@ dependencies = [ "serde", ] +[[package]] +name = "tantivy-tokenizer-api" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa942fcee81e213e09715bbce8734ae2180070b97b33839a795ba1de201547d" +dependencies = [ + "serde", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + [[package]] name = "target-lexicon" version = "0.13.4" @@ -6342,6 +8444,15 @@ dependencies = [ "syn 2.0.114", ] +[[package]] +name = "thread-tree" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbd370cb847953a25954d9f63e14824a36113f8c72eecf6eccef5dc4b45d630" +dependencies = [ + "crossbeam-channel", +] + [[package]] name = "thread_local" version = "1.1.9" @@ -6465,13 +8576,23 @@ dependencies = [ "syn 2.0.114", ] +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + [[package]] name = "tokio-rustls" version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls", + "rustls 0.23.36", "tokio", ] @@ -6591,14 +8712,14 @@ checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" dependencies = [ "async-stream", "async-trait", - "axum", + "axum 0.7.9", "base64 0.22.1", "bytes", - "h2", - "http", - "http-body", + "h2 0.4.13", + "http 1.4.0", + "http-body 1.0.1", "http-body-util", - "hyper", + "hyper 1.8.1", "hyper-timeout", "hyper-util", "percent-encoding", @@ -6646,6 +8767,7 @@ dependencies = [ "tokio", "tower-layer", "tower-service", + "tracing", ] [[package]] @@ -6654,13 +8776,18 @@ version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ + "async-compression", "bitflags", "bytes", + "futures-core", "futures-util", - "http", - "http-body", + "http 1.4.0", + "http-body 1.0.1", + "http-body-util", "iri-string", "pin-project-lite", + "tokio", + "tokio-util", "tower 0.5.3", "tower-layer", "tower-service", @@ -6684,6 +8811,7 @@ version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -6771,7 +8899,7 @@ checksum = "eadc29d668c91fcc564941132e17b28a7ceb2f3ebf0b9dae3e03fd7a6748eb0d" dependencies = [ "bytes", "data-encoding", - "http", + "http 1.4.0", "httparse", "log", "rand 0.9.2", @@ -6864,6 +8992,12 @@ dependencies = [ "serde", ] +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + [[package]] name = "utf-8" version = "0.7.6" @@ -6912,6 +9046,12 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "vsimd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" + [[package]] name = "wait-timeout" version = "0.2.1" @@ -7346,6 +9486,27 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "xmlparser" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" + +[[package]] +name = "xxhash-rust" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" + [[package]] name = "xz2" version = "0.1.7" diff --git a/Cargo.toml b/Cargo.toml index dc06b9ff38..792505b04c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -87,7 +87,7 @@ parking_lot = { version = "0.12.1", features = [ "send_guard", ] } ordered-float = "4.2.0" -chrono = { version = "0.4.42", features = ["serde"] } +chrono = { version = "0.4.41", features = ["serde"] } tempfile = "3.10.0" futures-util = "0.3.30" thiserror = "2.0.0" @@ -154,7 +154,7 @@ pest_derive = "2.7.8" minijinja = "2.2.0" minijinja-contrib = { version = "2.2.0", features = ["datetime"] } datafusion = { version = "50.0.0" } -arroy = "0.6.1" +lancedb = { version = "0.22.2", features = [] } # this is the latest and asks for chrono 0.4.41 heed = "0.22.0" sqlparser = "0.58.0" futures = "0.3" @@ -174,4 +174,3 @@ strsim = { version = "0.11.1" } uuid = { version = "1.16.0", features = ["v4"] } strum = "0.27.2" strum_macros = "0.27.2" - diff --git a/docs/reference/graphql/graphql_API.md b/docs/reference/graphql/graphql_API.md index 7edbcac96a..929655c5d2 100644 --- a/docs/reference/graphql/graphql_API.md +++ b/docs/reference/graphql/graphql_API.md @@ -59,6 +59,37 @@ Returns:: GqlMutableGraph +vectoriseGraph +Boolean! + + +Update graph query, has side effects to update graph state + +Returns:: GqlMutableGraph + + + + +path +String! + + + +model +EmbeddingModel + + + +nodes +Template + + + +edges +Template + + + vectorisedGraph VectorisedGraph @@ -6125,6 +6156,15 @@ Add the adjacent edges with higher score for query to the selection up to a spec +optimizeIndex +Boolean! + + +Optmize the vector index + + + + emptySelection VectorSelection! @@ -6844,6 +6884,29 @@ Edge filter +### EmbeddingModel + + + + + + + + + + + + + + + + +
FieldTypeDescription
openAIOpenAIConfig + +OpenAI embedding models or compatible providers + +
+ ### GraphFilter @@ -8002,6 +8065,45 @@ Value.
+### OpenAIConfig + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
modelString!
apiBaseString
apiKeyEnvString
orgIdString
projectIdString
+ ### PathFromNodeViewCollection @@ -8399,6 +8501,38 @@ List of properties.
+### Template + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
enabledBoolean + +The default template. + +
customString + +A custom template. + +
+ ### TemporalPropertyInput diff --git a/milvus/docker-compose.yml b/milvus/docker-compose.yml new file mode 100644 index 0000000000..3589060510 --- /dev/null +++ b/milvus/docker-compose.yml @@ -0,0 +1,26 @@ +version: "3.9" + +services: + milvus: + image: milvusdb/milvus:v2.6.1 + container_name: milvus + command: ["milvus", "run", "standalone"] + security_opt: + - seccomp:unconfined + environment: + ETCD_USE_EMBED: "true" + COMMON_STORAGETYPE: "local" + DEPLOY_MODE: "STANDALONE" + ports: + - "9091:9091" + - "19530:19530" + + attu: + image: zilliz/attu:v2.6 + container_name: attu + environment: + MILVUS_URL: "http://milvus:19530" + ports: + - "8000:3000" + depends_on: + - milvus diff --git a/python/python/raphtory/graphql/__init__.pyi b/python/python/raphtory/graphql/__init__.pyi index 8e9b65c289..689dc25c8c 100644 --- a/python/python/raphtory/graphql/__init__.pyi +++ b/python/python/raphtory/graphql/__init__.pyi @@ -94,26 +94,6 @@ class GraphServer(object): None: """ - def set_embeddings( - self, - cache: str, - embedding: Optional[Callable] = None, - nodes: bool | str = True, - edges: bool | str = True, - ) -> GraphServer: - """ - Setup the server to vectorise graphs with a default template. - - Arguments: - cache (str): the directory to use as cache for the embeddings. - embedding (Callable, optional): the embedding function to translate documents to embeddings. - nodes (bool | str): if nodes have to be embedded or not or the custom template to use if a str is provided. Defaults to True. - edges (bool | str): if edges have to be embedded or not or the custom template to use if a str is provided. Defaults to True. - - Returns: - GraphServer: A new server object with embeddings setup. - """ - def start(self, port: int = 1736, timeout_ms: int = 5000) -> RunningGraphServer: """ Start the server and return a handle to it. @@ -128,22 +108,21 @@ class GraphServer(object): RunningGraphServer: The running server """ - def turn_off_index(self) -> GraphServer: - """ - Turn off index for all graphs + def turn_off_index(self): + """Turn off index for all graphs""" - Returns: - GraphServer: The server with indexing disabled - """ - - def with_vectorised_graphs( - self, graph_names: list[str], nodes: bool | str = True, edges: bool | str = True + def vectorise_graph( + self, + name: list[str], + embeddings, + nodes: bool | str = True, + edges: bool | str = True, ) -> GraphServer: """ - Vectorise a subset of the graphs of the server. + Vectorise the graph name in the server working directory. Arguments: - graph_names (list[str]): the names of the graphs to vectorise. All by default. + name (list[str]): the name of the graph to vectorise. nodes (bool | str): if nodes have to be embedded or not or the custom template to use if a str is provided. Defaults to True. edges (bool | str): if edges have to be embedded or not or the custom template to use if a str is provided. Defaults to True. diff --git a/python/python/raphtory/vectors/__init__.pyi b/python/python/raphtory/vectors/__init__.pyi index b2eeadef7a..57db1e2a27 100644 --- a/python/python/raphtory/vectors/__init__.pyi +++ b/python/python/raphtory/vectors/__init__.pyi @@ -26,7 +26,14 @@ import networkx as nx # type: ignore import pyvis # type: ignore from raphtory.iterables import * -__all__ = ["VectorisedGraph", "Document", "Embedding", "VectorSelection"] +__all__ = [ + "VectorisedGraph", + "Document", + "Embedding", + "VectorSelection", + "OpenAIEmbeddings", + "embedding_server", +] class VectorisedGraph(object): """VectorisedGraph object that contains embedded documents that correspond to graph entities.""" @@ -38,10 +45,10 @@ class VectorisedGraph(object): window: Optional[Tuple[int | str, int | str]] = None, ) -> VectorSelection: """ - Perform a similarity search between each edge's associated document and a specified `query`. Returns a number of edges up to a specified `limit` ranked in descending order of similarity score. + Perform a similarity search between each edge's associated document and a specified `query`. Returns a number of edges up to a specified `limit` ranked in ascending order of distance. Args: - query (str | list): The text or the embedding to score against. + query (str | list): The text or the embedding to calculate the distance from. limit (int): The maximum number of new edges in the results. window (Tuple[int | str, int | str], optional): The window that documents need to belong to in order to be considered. @@ -59,10 +66,10 @@ class VectorisedGraph(object): window: Optional[Tuple[int | str, int | str]] = None, ) -> VectorSelection: """ - Perform a similarity search between each entity's associated document and a specified `query`. Returns a number of entities up to a specified `limit` ranked in descending order of similarity score. + Perform a similarity search between each entity's associated document and a specified `query`. Returns a number of entities up to a specified `limit` ranked in ascending order of distance. Args: - query (str | list): The text or the embedding to score against. + query (str | list): The text or the embedding to calculate the distance from. limit (int): The maximum number of new entities in the result. window (Tuple[int | str, int | str], optional): The window that documents need to belong to in order to be considered. @@ -77,17 +84,20 @@ class VectorisedGraph(object): window: Optional[Tuple[int | str, int | str]] = None, ) -> VectorSelection: """ - Perform a similarity search between each node's associated document and a specified `query`. Returns a number of nodes up to a specified `limit` ranked in descending order of similarity score. + Perform a similarity search between each node's associated document and a specified `query`. Returns a number of nodes up to a specified `limit` ranked in ascending order of distance. Args: - query (str | list): The text or the embedding to score against. + query (str | list): The text or the embedding to calculate the distance from. limit (int): The maximum number of new nodes in the result. - window (Tuple[int | str, int | str], optional): The window that documents need to belong to in order to be considered. + window (Tuple[int | str, int | str], optional): The window where documents need to belong to in order to be considered. Returns: VectorSelection: The vector selection resulting from the search. """ + def optimize_index(self): + """Optmize the vector index""" + class Document(object): """A document corresponding to a graph entity. Used to generate embeddings.""" @@ -130,7 +140,7 @@ class VectorSelection(object): """ Add all the documents associated with the specified `edges` to the current selection. - Documents added by this call are assumed to have a score of 0. + Documents added by this call are assumed to have a distance of 0. Args: edges (list): List of the edge ids or edges to add. @@ -143,7 +153,7 @@ class VectorSelection(object): """ Add all the documents associated with the specified `nodes` to the current selection. - Documents added by this call are assumed to have a score of 0. + Documents added by this call are assumed to have a distance of 0. Args: nodes (list): List of the node ids or nodes to add. @@ -197,12 +207,12 @@ class VectorSelection(object): window: Optional[Tuple[int | str, int | str]] = None, ) -> None: """ - Add the top `limit` adjacent edges with higher score for `query` to the selection + Add to the selection the `limit` adjacent edges closest to `query` This function has the same behaviour as expand_entities_by_similarity but it only considers edges. Args: - query (str | list): The text or the embedding to score against. + query (str | list): The text or the embedding to calculate the distance from. limit (int): The maximum number of new edges to add. window (Tuple[int | str, int | str], optional): The window that documents need to belong to in order to be considered. @@ -217,20 +227,19 @@ class VectorSelection(object): window: Optional[Tuple[int | str, int | str]] = None, ) -> None: """ - Add the top `limit` adjacent entities with higher score for `query` to the selection + Add to the selection the `limit` adjacent entities closest to `query` The expansion algorithm is a loop with two steps on each iteration: 1. All the entities 1 hop away of some of the entities included on the selection (and not already selected) are marked as candidates. - 2. Those candidates are added to the selection in descending order according to the - similarity score obtained against the `query`. + 2. Those candidates are added to the selection in ascending distance from `query`. This loops goes on until the number of new entities reaches a total of `limit` entities or until no more documents are available Args: - query (str | list): The text or the embedding to score against. + query (str | list): The text or the embedding to calculate the distance from. limit (int): The number of documents to add. window (Tuple[int | str, int | str], optional): The window that documents need to belong to in order to be considered. @@ -245,12 +254,12 @@ class VectorSelection(object): window: Optional[Tuple[int | str, int | str]] = None, ) -> None: """ - Add the top `limit` adjacent nodes with higher score for `query` to the selection + Add to the selection the `limit` adjacent nodes closest to `query` This function has the same behaviour as expand_entities_by_similarity but it only considers nodes. Args: - query (str | list): The text or the embedding to score against. + query (str | list): The text or the embedding to calculate the distance from. limit (int): The maximum number of new nodes to add. window (Tuple[int | str, int | str], optional): The window that documents need to belong to in order to be considered. @@ -266,12 +275,12 @@ class VectorSelection(object): list[Document]: List of documents in the current selection. """ - def get_documents_with_scores(self) -> list[Tuple[Document, float]]: + def get_documents_with_distances(self) -> list[Tuple[Document, float]]: """ - Returns the documents present in the current selection alongside their scores. + Returns the documents present in the current selection alongside their distances. Returns: - list[Tuple[Document, float]]: List of documents and scores. + list[Tuple[Document, float]]: List of documents and distances. """ def nodes(self) -> list[Node]: @@ -281,3 +290,16 @@ class VectorSelection(object): Returns: list[Node]: List of nodes in the current selection. """ + +class OpenAIEmbeddings(object): + def __new__( + cls, + model="text-embedding-3-small", + api_base=None, + api_key_env=None, + org_id=None, + project_id=None, + ) -> OpenAIEmbeddings: + """Create and return a new object. See help(type) for accurate signature.""" + +def embedding_server(address): ... diff --git a/python/tests/test_base_install/test_graphql/misc/test_graphql_vectors.py b/python/tests/test_base_install/test_graphql/misc/test_graphql_vectors.py index 438c9ad31a..b0aa5fdd43 100644 --- a/python/tests/test_base_install/test_graphql/misc/test_graphql_vectors.py +++ b/python/tests/test_base_install/test_graphql/misc/test_graphql_vectors.py @@ -1,15 +1,12 @@ import tempfile from raphtory.graphql import GraphServer, RaphtoryClient from raphtory import Graph +from raphtory.vectors import OpenAIEmbeddings, embedding_server -def embedding(texts): - return [[text.count("a"), text.count("b")] for text in texts] - - -def test_embedding(): - result = embedding(texts=["aaa", "b", "ab", "ba"]) - assert result == [[3, 0], [0, 1], [1, 1], [1, 1]] +@embedding_server +def embeddings(text: str): + return [text.count("a"), text.count("b")] def setup_graph(g): @@ -58,51 +55,63 @@ def assert_correct_documents(client): } -def setup_server(work_dir): - server = GraphServer(work_dir) - server = server.set_embeddings( - cache="/tmp/graph-cache", - embedding=embedding, - nodes="{{ name }}", - edges=False, - ) - return server - - def test_new_graph(): print("test_new_graph") work_dir = tempfile.TemporaryDirectory() - server = setup_server(work_dir.name) - with server.start(): - client = RaphtoryClient("http://localhost:1736") - client.new_graph("abb", "EVENT") - rg = client.remote_graph("abb") - setup_graph(rg) - assert_correct_documents(client) + server = GraphServer(work_dir.name) + with embeddings.start(7340): + with server.start(): + client = RaphtoryClient("http://localhost:1736") + client.new_graph("abb", "EVENT") + rg = client.remote_graph("abb") + setup_graph(rg) + client.query(""" + { + vectoriseGraph(path: "abb", model: { openAI: { model: "whatever", apiBase: "http://localhost:7340" } }, nodes: { custom: "{{ name }}" }, edges: { enabled: false }) + } + """) + assert_correct_documents(client) def test_upload_graph(): print("test_upload_graph") - work_dir = tempfile.mkdtemp() - temp_dir = tempfile.mkdtemp() - server = setup_server(work_dir) - with server.start(): - client = RaphtoryClient("http://localhost:1736") - g = Graph() - setup_graph(g) - g_path = temp_dir + "/abb" - g.save_to_zip(g_path) - client.upload_graph(path="abb", file_path=g_path, overwrite=True) - assert_correct_documents(client) + work_dir = tempfile.TemporaryDirectory() + temp_dir = tempfile.TemporaryDirectory() + server = GraphServer(work_dir.name) + with embeddings.start(7340): + with server.start(): + client = RaphtoryClient("http://localhost:1736") + g = Graph() + setup_graph(g) + g_path = temp_dir.name + "/abb" + g.save_to_zip(g_path) + client.upload_graph(path="abb", file_path=g_path, overwrite=True) + client.query(""" + { + vectoriseGraph(path: "abb", model: { openAI: { model: "whatever", apiBase: "http://localhost:7340" } }, nodes: { custom: "{{ name }}" }, edges: { enabled: false }) + } + """) + assert_correct_documents(client) + + +GRAPH_NAME = "abb" def test_include_graph(): - work_dir = tempfile.mkdtemp() - g_path = work_dir + "/abb" + work_dir = tempfile.TemporaryDirectory() + g_path = work_dir.name + "/" + GRAPH_NAME g = Graph() setup_graph(g) g.save_to_file(g_path) - server = setup_server(work_dir) - with server.start(): - client = RaphtoryClient("http://localhost:1736") - assert_correct_documents(client) + server = GraphServer(work_dir.name) + with embeddings.start(7340): + embedding_client = OpenAIEmbeddings(api_base="http://localhost:7340") + server.vectorise_graph( + name=GRAPH_NAME, + embeddings=embedding_client, + nodes="{{ name }}", + edges=False, + ) + with server.start(): + client = RaphtoryClient("http://localhost:1736") + assert_correct_documents(client) diff --git a/python/tests/test_base_install/test_vectors.py b/python/tests/test_base_install/test_vectors.py index 9eb455eae4..084ba92be4 100644 --- a/python/tests/test_base_install/test_vectors.py +++ b/python/tests/test_base_install/test_vectors.py @@ -1,7 +1,12 @@ +import pytest +import json +from urllib.request import Request, urlopen +from urllib.error import HTTPError from raphtory import Graph -from raphtory.vectors import VectorisedGraph +from raphtory.vectors import VectorisedGraph, OpenAIEmbeddings, embedding_server embedding_map = { + "raphtory": [1.0, 0.0, 0.0], # this is now needed, "node1": [1.0, 0.0, 0.0], "node2": [0.0, 1.0, 0.0], "node3": [0.0, 0.0, 1.0], @@ -12,19 +17,46 @@ } -def single_embedding(text: str): - try: +@pytest.fixture(autouse=True) +def test_server(): + @embedding_server + def custom_embeddings(text: str): return embedding_map[text] - except: - raise Exception(f"unexpected document content: {text}") + with custom_embeddings.start(7340): + yield + + +def post_json(url, payload): + data = json.dumps(payload).encode() + req = Request( + url, + data=data, + headers={"Content-Type": "application/json"}, + method="POST", + ) + try: + with urlopen(req, timeout=10) as r: + return r.status, r.read() + except HTTPError as e: + return e.code, e.read() + + +def test_failing_python_embeddings(): + @embedding_server + def failing_embeddings(text: str): + assert False -def embedding(texts): - return [single_embedding(text) for text in texts] + with failing_embeddings.start(7342): + payload = {"model": "whatever", "input": ["Hello world"]} + status, _ = post_json("http://localhost:7342/embeddings", payload) + assert status == 500 + status, _ = post_json("http://localhost:7342/embeddings", payload) + assert status == 500 def floats_are_equals(float1: float, float2: float) -> bool: - return float1 + 0.001 > float2 and float1 - 0.001 < float2 + return float1 + 0.00001 > float2 and float1 - 0.01 < float2 # the graph generated by this function looks like this: @@ -48,26 +80,34 @@ def create_graph() -> VectorisedGraph: g.add_edge(3, "node1", "node3", {"name": "edge2"}) g.add_edge(4, "node3", "node4", {"name": "edge3"}) - vg = g.vectorise(embedding, nodes="{{ name }}", edges="{{ properties.name }}") + embeddings = OpenAIEmbeddings(api_base="http://localhost:7340") + vg = g.vectorise(embeddings, nodes="{{ name }}", edges="{{ properties.name }}") return vg +def test_embedding_sever_context_manager(): + @embedding_server + def constant(text: str): + return [1.0] + + with constant.start(7341): + payload = { + # "model": "whatever", + "input": ["The text to vectorise"] + } + status, body = post_json("http://localhost:7341/embeddings", payload) + assert status == 200 + result = json.loads(body) + vector = result["data"][0]["embedding"] + assert vector == [1.0] + + def test_selection(): vg = create_graph() - ################################ - selection = vg.empty_selection() - nodes_to_select = ["node1", "node2"] - edges_to_select = [("node1", "node2"), ("node1", "node3")] - selection = vg.empty_selection() - selection.add_nodes(nodes_to_select) - selection.add_edges(edges_to_select) - nodes = selection.nodes() - ########################### - assert len(vg.empty_selection().get_documents()) == 0 - assert len(vg.empty_selection().get_documents_with_scores()) == 0 + assert len(vg.empty_selection().get_documents_with_distances()) == 0 nodes_to_select = ["node1", "node2"] edges_to_select = [("node1", "node2"), ("node1", "node3")] @@ -77,7 +117,9 @@ def test_selection(): nodes = selection.nodes() node_names_returned = [node.name for node in nodes] assert node_names_returned == nodes_to_select + print("before get documents") docs = [doc.content for doc in selection.get_documents()] + print("after get documents") assert docs == ["node1", "node2"] selection = vg.empty_selection() @@ -113,8 +155,10 @@ def test_search(): assert edge_names_returned == [("node1", "node2")] # TODO: same for edges ? - [(doc1, score1)] = vg.entities_by_similarity("node1", 1).get_documents_with_scores() - assert floats_are_equals(score1, 1.0) + [(doc1, distance1)] = vg.entities_by_similarity( + "node1", 1 + ).get_documents_with_distances() + assert floats_are_equals(distance1, 0.0) assert (doc1.entity.name, doc1.content) == ("node1", "node1") # chained search @@ -205,8 +249,9 @@ def test_filtering_by_entity_type(): assert contents == ["edge1", "edge2", "edge3"] -def constant_embedding(texts): - return [[1.0, 0.0, 0.0] for text in texts] +@embedding_server +def constant_embedding(_text): + return [1.0, 0.0, 0.0] def test_default_template(): @@ -214,7 +259,9 @@ def test_default_template(): g.add_node(1, "node1") g.add_edge(2, "node1", "node1") - vg = g.vectorise(constant_embedding) + running = constant_embedding.start(7341) + + vg = g.vectorise(OpenAIEmbeddings(api_base="http://localhost:7341")) node_docs = vg.nodes_by_similarity(query="whatever", limit=10).get_documents() assert len(node_docs) == 1 @@ -226,3 +273,5 @@ def test_default_template(): edge_docs[0].content == "There is an edge from node1 to node1 with events at:\n- Jan 1 1970 00:00\n" ) + + running.stop() diff --git a/raphtory-benchmark/src/common/vectors.rs b/raphtory-benchmark/src/common/vectors.rs index 701ace6db2..e5d5299461 100644 --- a/raphtory-benchmark/src/common/vectors.rs +++ b/raphtory-benchmark/src/common/vectors.rs @@ -4,8 +4,9 @@ use rand::{rngs::StdRng, Rng, SeedableRng}; use raphtory::{ prelude::{AdditionOps, Graph, NO_PROPS}, vectors::{ - cache::VectorCache, embeddings::EmbeddingResult, template::DocumentTemplate, - vectorisable::Vectorisable, vectorised_graph::VectorisedGraph, Embedding, + cache::VectorCache, embeddings::EmbeddingResult, storage::OpenAIEmbeddings, + template::DocumentTemplate, vectorisable::Vectorisable, vectorised_graph::VectorisedGraph, + Embedding, }, }; use tokio::runtime::Runtime; @@ -35,12 +36,22 @@ pub fn create_graph_for_vector_bench(size: usize) -> Graph { } pub async fn vectorise_graph_for_bench_async(graph: Graph) -> VectorisedGraph { - let cache = VectorCache::in_memory(embedding_model); + let cache = VectorCache::in_memory(); + let model = cache + .openai(OpenAIEmbeddings { + model: "whatever".to_owned(), + api_base: Some("localhost://1783".to_owned()), // TODO: run embedding server as well on the background so that this works + api_key_env: None, + project_id: None, + org_id: None, + }) + .await + .unwrap(); let template = DocumentTemplate { node_template: Some("{{name}}".to_owned()), edge_template: None, }; - graph.vectorise(cache, template, None, true).await.unwrap() + graph.vectorise(model, template, None, true).await.unwrap() } // TODO: remove this version diff --git a/raphtory-graphql/schema.graphql b/raphtory-graphql/schema.graphql index c6e9db4087..128fe41d97 100644 --- a/raphtory-graphql/schema.graphql +++ b/raphtory-graphql/schema.graphql @@ -748,6 +748,13 @@ type EdgesWindowSet { list: [Edges!]! } +input EmbeddingModel @oneOf { + """ + OpenAI embedding models or compatible providers + """ + openAI: OpenAIConfig +} + """ Raphtory’s EventTime. Represents a unique timepoint in the graph’s history as (timestamp, event_id). @@ -2290,6 +2297,14 @@ input ObjectEntry { value: Value! } +input OpenAIConfig { + model: String! + apiBase: String + apiKeyEnv: String + orgId: String + projectId: String +} + """ PageRank score. """ @@ -2601,6 +2616,12 @@ type QueryRoot { """ updateGraph(path: String!): MutableGraph! """ + Update graph query, has side effects to update graph state + + Returns:: GqlMutableGraph + """ + vectoriseGraph(path: String!, model: EmbeddingModel, nodes: Template, edges: Template): Boolean! + """ Create vectorised graph in the format used for queries Returns:: GqlVectorisedGraph @@ -2667,6 +2688,17 @@ enum SortByTime { EARLIEST } +input Template @oneOf { + """ + The default template. + """ + enabled: Boolean + """ + A custom template. + """ + custom: String +} + type TemporalProperties { """ Get property value matching the specified key. @@ -2823,6 +2855,10 @@ type VectorSelection { } type VectorisedGraph { + """ + Optmize the vector index + """ + optimizeIndex: Boolean! """ Returns an empty selection of documents. """ diff --git a/raphtory-graphql/src/data.rs b/raphtory-graphql/src/data.rs index dbcaa30c6a..fa6b80b561 100644 --- a/raphtory-graphql/src/data.rs +++ b/raphtory-graphql/src/data.rs @@ -8,15 +8,14 @@ use itertools::Itertools; use moka::future::Cache; use raphtory::{ db::api::view::MaterializedGraph, - errors::{GraphError, InvalidPathReason}, + errors::{GraphError, GraphResult, InvalidPathReason}, prelude::CacheOps, vectors::{ - cache::VectorCache, template::DocumentTemplate, vectorisable::Vectorisable, - vectorised_graph::VectorisedGraph, + cache::CachedEmbeddingModel, storage::LazyDiskVectorCache, template::DocumentTemplate, + vectorisable::Vectorisable, vectorised_graph::VectorisedGraph, }, }; use std::{ - collections::HashMap, path::{Path, PathBuf}, sync::Arc, }; @@ -24,13 +23,6 @@ use tokio::fs; use tracing::{error, warn}; use walkdir::WalkDir; -#[derive(Clone)] -pub struct EmbeddingConf { - pub(crate) cache: VectorCache, - pub(crate) global_template: Option, - pub(crate) individual_templates: HashMap, -} - pub(crate) fn get_relative_path( work_dir: PathBuf, path: &Path, @@ -46,7 +38,6 @@ pub(crate) fn get_relative_path( .ok_or(InvalidPathReason::NonUTFCharacters) }) .collect::, _>>()?; - //a safe unwrap as checking above let path_str = components.into_iter().join("/"); valid_path(work_dir, &path_str, namespace)?; Ok(path_str) @@ -54,10 +45,10 @@ pub(crate) fn get_relative_path( #[derive(Clone)] pub struct Data { - pub(crate) work_dir: PathBuf, + pub(crate) work_dir: PathBuf, // TODO: move this to config? cache: Cache, - pub(crate) create_index: bool, - pub(crate) embedding_conf: Option, + pub(crate) create_index: bool, // TODO: move this to config? + pub(crate) vector_cache: LazyDiskVectorCache, } impl Data { @@ -80,11 +71,13 @@ impl Data { #[cfg(not(feature = "search"))] let create_index = false; + // TODO: make vector feature optional? + Self { work_dir: work_dir.to_path_buf(), cache, create_index, - embedding_conf: Default::default(), + vector_cache: LazyDiskVectorCache::new(work_dir.join(".vector-cache")), } } @@ -116,8 +109,7 @@ impl Data { let folder_clone = folder.clone(); let graph_clone = graph.clone(); blocking_io(move || graph_clone.cache(folder_clone)).await?; - let vectors = self.vectorise(graph.clone(), &folder).await; - let graph = GraphWithVectors::new(graph, vectors); + let graph = GraphWithVectors::new(graph, None); graph .folder .get_or_try_init(|| Ok::<_, GraphError>(folder.into()))?; @@ -134,23 +126,16 @@ impl Data { Ok(()) } - fn resolve_template(&self, graph: &Path) -> Option<&DocumentTemplate> { - let conf = self.embedding_conf.as_ref()?; - conf.individual_templates - .get(graph) - .or(conf.global_template.as_ref()) - } - async fn vectorise_with_template( &self, graph: MaterializedGraph, folder: &ValidGraphFolder, template: &DocumentTemplate, + model: CachedEmbeddingModel, ) -> Option> { - let conf = self.embedding_conf.as_ref()?; let vectors = graph .vectorise( - conf.cache.clone(), + model, template.clone(), Some(&folder.get_vectors_path()), true, // verbose @@ -166,34 +151,18 @@ impl Data { } } - async fn vectorise( + pub(crate) async fn vectorise_folder( &self, - graph: MaterializedGraph, - folder: &ValidGraphFolder, - ) -> Option> { - let template = self.resolve_template(folder.get_original_path())?; - self.vectorise_with_template(graph, folder, template).await - } - - async fn vectorise_folder(&self, folder: &ExistingGraphFolder) -> Option<()> { - // it's important that we check if there is a valid template set for this graph path - // before actually loading the graph, otherwise we are loading the graph for no reason - let template = self.resolve_template(folder.get_original_path())?; - let graph = self - .read_graph_from_folder(folder.clone()) - .await - .ok()? - .graph; - self.vectorise_with_template(graph, folder, template).await; - Some(()) - } - - pub(crate) async fn vectorise_all_graphs_that_are_not(&self) -> Result<(), GraphError> { - for folder in self.get_all_graph_folders() { - if !folder.get_vectors_path().exists() { - self.vectorise_folder(&folder).await; - } - } + folder: &ExistingGraphFolder, + template: &DocumentTemplate, + model: CachedEmbeddingModel, + ) -> GraphResult<()> { + let graph = self.read_graph_from_folder(folder.clone()).await?.graph; + self.vectorise_with_template(graph, folder, template, model) + .await; + self.cache + .remove(&folder.get_original_path().to_path_buf()) + .await; Ok(()) } @@ -216,9 +185,8 @@ impl Data { &self, folder: ExistingGraphFolder, ) -> Result { - let cache = self.embedding_conf.as_ref().map(|conf| conf.cache.clone()); - let create_index = self.create_index; - blocking_io(move || GraphWithVectors::read_from_folder(&folder, cache, create_index)).await + GraphWithVectors::read_from_folder(&folder, &self.vector_cache, self.create_index).await + // FIXME: I need some blocking_io inside of GraphWithVectors::read_from_folder } } @@ -276,7 +244,7 @@ pub(crate) mod data_tests { File::create(path.join("graph")).unwrap(); } - pub(crate) fn save_graphs_to_work_dir( + pub(crate) async fn save_graphs_to_work_dir( work_dir: &Path, graphs: &HashMap, ) -> Result<(), GraphError> { @@ -368,7 +336,9 @@ pub(crate) mod data_tests { #[cfg(feature = "storage")] graphs.insert("test_dg".to_string(), graph2); - save_graphs_to_work_dir(tmp_work_dir.path(), &graphs).unwrap(); + save_graphs_to_work_dir(tmp_work_dir.path(), &graphs) + .await + .unwrap(); let data = Data::new(tmp_work_dir.path(), &Default::default()); diff --git a/raphtory-graphql/src/embeddings.rs b/raphtory-graphql/src/embeddings.rs deleted file mode 100644 index d65b59ee6e..0000000000 --- a/raphtory-graphql/src/embeddings.rs +++ /dev/null @@ -1,16 +0,0 @@ -use crate::data::Data; -use async_graphql::Context; -use raphtory::{errors::GraphResult, vectors::Embedding}; - -pub(crate) trait EmbedQuery { - async fn embed_query(&self, text: String) -> GraphResult; -} - -impl EmbedQuery for Context<'_> { - /// this is meant to be called from a vector context, so the embedding conf is assumed to exist - async fn embed_query(&self, text: String) -> GraphResult { - let data = self.data_unchecked::(); - let cache = &data.embedding_conf.as_ref().unwrap().cache; - cache.get_single(text).await - } -} diff --git a/raphtory-graphql/src/graph.rs b/raphtory-graphql/src/graph.rs index 50a3468e60..fb47251b53 100644 --- a/raphtory-graphql/src/graph.rs +++ b/raphtory-graphql/src/graph.rs @@ -15,7 +15,9 @@ use raphtory::{ prelude::{CacheOps, EdgeViewOps, IndexMutationOps}, serialise::GraphFolder, storage::core_ops::CoreGraphOps, - vectors::{cache::VectorCache, vectorised_graph::VectorisedGraph}, + vectors::{ + cache::VectorCache, storage::LazyDiskVectorCache, vectorised_graph::VectorisedGraph, + }, }; use raphtory_storage::{ core_ops::InheritCoreGraphOps, graph::graph::GraphStorage, layer_ops::InheritLayerOps, @@ -76,9 +78,9 @@ impl GraphWithVectors { } } - pub(crate) fn read_from_folder( + pub(crate) async fn read_from_folder( folder: &ExistingGraphFolder, - cache: Option, + cache: &LazyDiskVectorCache, create_index: bool, ) -> Result { let graph_path = &folder.get_graph_path(); @@ -87,9 +89,11 @@ impl GraphWithVectors { } else { MaterializedGraph::load_cached(folder.clone())? }; - let vectors = cache.and_then(|cache| { - VectorisedGraph::read_from_path(&folder.get_vectors_path(), graph.clone(), cache).ok() - }); + let vectors = + VectorisedGraph::read_from_path(&folder.get_vectors_path(), graph.clone(), cache) + .await + .ok(); + println!("Graph loaded = {}", folder.get_original_path_str()); if create_index { graph.create_index()?; diff --git a/raphtory-graphql/src/lib.rs b/raphtory-graphql/src/lib.rs index 8cfc174410..0aaae5a881 100644 --- a/raphtory-graphql/src/lib.rs +++ b/raphtory-graphql/src/lib.rs @@ -1,7 +1,6 @@ pub use crate::server::GraphServer; mod auth; pub mod data; -mod embeddings; mod graph; pub mod model; pub mod observability; @@ -99,7 +98,9 @@ mod graphql_test { let graphs = HashMap::from([("master".to_string(), graph)]); let tmp_dir = tempdir().unwrap(); - save_graphs_to_work_dir(tmp_dir.path(), &graphs).unwrap(); + save_graphs_to_work_dir(tmp_dir.path(), &graphs) + .await + .unwrap(); let config = AppConfigBuilder::new().with_create_index(true).build(); let data = Data::new(tmp_dir.path(), &config); @@ -204,7 +205,9 @@ mod graphql_test { let graph: MaterializedGraph = graph.into(); let graphs = HashMap::from([("lotr".to_string(), graph)]); let tmp_dir = tempdir().unwrap(); - save_graphs_to_work_dir(tmp_dir.path(), &graphs).unwrap(); + save_graphs_to_work_dir(tmp_dir.path(), &graphs) + .await + .unwrap(); let data = Data::new(tmp_dir.path(), &AppConfig::default()); @@ -315,7 +318,9 @@ mod graphql_test { let graphs = HashMap::from([("graph".to_string(), graph)]); let tmp_dir = tempdir().unwrap(); - save_graphs_to_work_dir(tmp_dir.path(), &graphs).unwrap(); + save_graphs_to_work_dir(tmp_dir.path(), &graphs) + .await + .unwrap(); let data = Data::new(tmp_dir.path(), &AppConfig::default()); let schema = App::create_schema().data(data).finish().unwrap(); @@ -418,7 +423,9 @@ mod graphql_test { let graphs = HashMap::from([("graph".to_string(), graph)]); let tmp_dir = tempdir().unwrap(); - save_graphs_to_work_dir(tmp_dir.path(), &graphs).unwrap(); + save_graphs_to_work_dir(tmp_dir.path(), &graphs) + .await + .unwrap(); let data = Data::new(tmp_dir.path(), &AppConfig::default()); let schema = App::create_schema().data(data).finish().unwrap(); @@ -483,7 +490,9 @@ mod graphql_test { let graph: MaterializedGraph = g.into(); let graphs = HashMap::from([("graph".to_string(), graph)]); let tmp_dir = tempdir().unwrap(); - save_graphs_to_work_dir(tmp_dir.path(), &graphs).unwrap(); + save_graphs_to_work_dir(tmp_dir.path(), &graphs) + .await + .unwrap(); let expected = json!({ "graph": { @@ -634,7 +643,9 @@ mod graphql_test { let g = g.into(); let graphs = HashMap::from([("graph".to_string(), g)]); let tmp_dir = tempdir().unwrap(); - save_graphs_to_work_dir(tmp_dir.path(), &graphs).unwrap(); + save_graphs_to_work_dir(tmp_dir.path(), &graphs) + .await + .unwrap(); let data = Data::new(tmp_dir.path(), &AppConfig::default()); let schema = App::create_schema().data(data).finish().unwrap(); @@ -961,7 +972,9 @@ mod graphql_test { let graph = graph.into(); let graphs = HashMap::from([("graph".to_string(), graph)]); let tmp_dir = tempdir().unwrap(); - save_graphs_to_work_dir(tmp_dir.path(), &graphs).unwrap(); + save_graphs_to_work_dir(tmp_dir.path(), &graphs) + .await + .unwrap(); let data = Data::new(tmp_dir.path(), &AppConfig::default()); let schema = App::create_schema().data(data).finish().unwrap(); @@ -1136,7 +1149,9 @@ mod graphql_test { let graph = graph.into(); let graphs = HashMap::from([("graph".to_string(), graph)]); let tmp_dir = tempdir().unwrap(); - save_graphs_to_work_dir(tmp_dir.path(), &graphs).unwrap(); + save_graphs_to_work_dir(tmp_dir.path(), &graphs) + .await + .unwrap(); let data = Data::new(tmp_dir.path(), &AppConfig::default()); let schema = App::create_schema().data(data).finish().unwrap(); @@ -1277,7 +1292,9 @@ mod graphql_test { ("graph6".to_string(), graph6.into()), ]); let tmp_dir = tempdir().unwrap(); - save_graphs_to_work_dir(tmp_dir.path(), &graphs).unwrap(); + save_graphs_to_work_dir(tmp_dir.path(), &graphs) + .await + .unwrap(); let data = Data::new(tmp_dir.path(), &AppConfig::default()); let schema = App::create_schema().data(data).finish().unwrap(); @@ -1574,7 +1591,9 @@ mod graphql_test { let graph = graph.into(); let graphs = HashMap::from([("graph".to_string(), graph)]); let tmp_dir = tempdir().unwrap(); - save_graphs_to_work_dir(tmp_dir.path(), &graphs).unwrap(); + save_graphs_to_work_dir(tmp_dir.path(), &graphs) + .await + .unwrap(); let data = Data::new(tmp_dir.path(), &AppConfig::default()); let schema = App::create_schema().data(data).finish().unwrap(); diff --git a/raphtory-graphql/src/main.rs b/raphtory-graphql/src/main.rs index b42ab3e5e6..f75272e635 100644 --- a/raphtory-graphql/src/main.rs +++ b/raphtory-graphql/src/main.rs @@ -105,7 +105,8 @@ async fn main() -> IoResult<()> { let app_config = Some(builder.build()); - GraphServer::new(args.working_dir, app_config, None)? + GraphServer::new(args.working_dir, app_config, None) + .await? .run_with_port(args.port) .await?; } diff --git a/raphtory-graphql/src/model/graph/mutable_graph.rs b/raphtory-graphql/src/model/graph/mutable_graph.rs index dbccd49d9e..27b5638283 100644 --- a/raphtory-graphql/src/model/graph/mutable_graph.rs +++ b/raphtory-graphql/src/model/graph/mutable_graph.rs @@ -598,32 +598,22 @@ impl GqlMutableEdge { #[cfg(test)] mod tests { use super::*; - use crate::{ - config::app_config::AppConfig, - data::{Data, EmbeddingConf}, - }; + use crate::{config::app_config::AppConfig, data::Data}; use itertools::Itertools; use raphtory::{ db::api::view::MaterializedGraph, vectors::{ - cache::VectorCache, embeddings::EmbeddingResult, template::DocumentTemplate, Embedding, + custom::{serve_custom_embedding, EmbeddingServer}, + embeddings::EmbeddingResult, + storage::OpenAIEmbeddings, + template::DocumentTemplate, + Embedding, }, }; - use std::collections::HashMap; use tempfile::tempdir; - async fn fake_embedding(texts: Vec) -> EmbeddingResult> { - Ok(texts - .into_iter() - .map(|_| vec![1.0, 0.0, 0.0].into()) - .collect_vec()) - } - - fn custom_template() -> DocumentTemplate { - DocumentTemplate { - node_template: Some("{{ name }} is a {{ node_type }}".to_string()), - edge_template: Some("{{ src.name }} appeared with {{ dst.name}}".to_string()), - } + fn fake_embedding(_: &str) -> Vec { + vec![1.0] } fn create_test_graph() -> MaterializedGraph { @@ -631,42 +621,65 @@ mod tests { graph.into() } - async fn create_mutable_graph() -> (GqlMutableGraph, tempfile::TempDir) { + async fn create_mutable_graph( + port: u16, + ) -> (GqlMutableGraph, tempfile::TempDir, EmbeddingServer) { let graph = create_test_graph(); let tmp_dir = tempdir().unwrap(); let config = AppConfig::default(); - let mut data = Data::new(tmp_dir.path(), &config); + let data = Data::new(tmp_dir.path(), &config); + + let graph_name = "test_graph"; - // Override the embedding function with a mock for testing. - data.embedding_conf = Some(EmbeddingConf { - cache: VectorCache::in_memory(fake_embedding), - global_template: Some(custom_template()), - individual_templates: HashMap::new(), - }); + data.insert_graph(graph_name, graph).await.unwrap(); - data.insert_graph("test_graph", graph).await.unwrap(); + let template = DocumentTemplate { + node_template: Some("{{ name }} is a {{ node_type }}".to_string()), + edge_template: Some("{{ src.name }} appeared with {{ dst.name}}".to_string()), + }; + + let embedding_server = serve_custom_embedding(None, port, fake_embedding).await; + + let api_base = format!("http://localhost:{port}"); + let config = OpenAIEmbeddings { + model: "whatever".to_owned(), + api_base: Some(api_base), + api_key_env: None, + project_id: None, + org_id: None, + }; + let vector_cache = data.vector_cache.resolve().await.unwrap(); + let model = vector_cache.openai(config).await.unwrap(); + data.vectorise_folder( + &ExistingGraphFolder::try_from(tmp_dir.path().to_path_buf(), graph_name).unwrap(), + &template, + model, + ) + .await + .unwrap(); - let (graph_with_vectors, path) = data.get_graph("test_graph").await.unwrap(); + let (graph_with_vectors, path) = data.get_graph(graph_name).await.unwrap(); let mutable_graph = GqlMutableGraph::new(path, graph_with_vectors); - (mutable_graph, tmp_dir) + (mutable_graph, tmp_dir, embedding_server) } #[tokio::test] async fn test_add_nodes_empty_list() { - let (mutable_graph, _tmp_dir) = create_mutable_graph().await; + let (mutable_graph, _tmp_dir, _embedding_server) = create_mutable_graph(1745).await; let nodes = vec![]; let result = mutable_graph.add_nodes(nodes).await; assert!(result.is_ok()); assert!(result.unwrap()); + _embedding_server.stop(); } #[tokio::test] async fn test_add_nodes_simple() { - let (mutable_graph, _tmp_dir) = create_mutable_graph().await; + let (mutable_graph, _tmp_dir, _embedding_server) = create_mutable_graph(1746).await; let nodes = vec![ NodeAddition { @@ -694,22 +707,22 @@ mod tests { assert!(result.is_ok()); assert!(result.unwrap()); - let query = "node1".to_string(); - let embedding = &fake_embedding(vec![query]).await.unwrap().remove(0); + let embedding = fake_embedding("node1"); let limit = 5; let result = mutable_graph .graph .vectors .unwrap() - .nodes_by_similarity(embedding, limit, None); + .nodes_by_similarity(&embedding.into(), limit, None) + .await; assert!(result.is_ok()); - assert!(result.unwrap().get_documents().unwrap().len() == 2); + assert!(result.unwrap().get_documents().await.unwrap().len() == 2); } #[tokio::test] async fn test_add_nodes_with_properties() { - let (mutable_graph, _tmp_dir) = create_mutable_graph().await; + let (mutable_graph, _tmp_dir, _embedding_server) = create_mutable_graph(1747).await; let nodes = vec![ NodeAddition { @@ -764,22 +777,22 @@ mod tests { assert!(result.is_ok()); assert!(result.unwrap()); - let query = "complex_node_1".to_string(); - let embedding = &fake_embedding(vec![query]).await.unwrap().remove(0); + let embedding = fake_embedding("complex_node_1"); let limit = 5; let result = mutable_graph .graph .vectors .unwrap() - .nodes_by_similarity(embedding, limit, None); + .nodes_by_similarity(&embedding.into(), limit, None) + .await; assert!(result.is_ok()); - assert!(result.unwrap().get_documents().unwrap().len() == 3); + assert!(result.unwrap().get_documents().await.unwrap().len() == 3); } #[tokio::test] async fn test_add_edges_simple() { - let (mutable_graph, _tmp_dir) = create_mutable_graph().await; + let (mutable_graph, _tmp_dir, _embedding_server) = create_mutable_graph(1748).await; // First add some nodes. let nodes = vec![ @@ -839,16 +852,16 @@ mod tests { assert!(result.unwrap()); // Test that edge embeddings were generated. - let query = "node1 appeared with node2".to_string(); - let embedding = &fake_embedding(vec![query]).await.unwrap().remove(0); + let embedding = fake_embedding("node1 appeared with node2"); let limit = 5; let result = mutable_graph .graph .vectors .unwrap() - .edges_by_similarity(embedding, limit, None); + .edges_by_similarity(&embedding.into(), limit, None) + .await; assert!(result.is_ok()); - assert!(result.unwrap().get_documents().unwrap().len() == 2); + assert!(result.unwrap().get_documents().await.unwrap().len() == 2); } } diff --git a/raphtory-graphql/src/model/graph/vector_selection.rs b/raphtory-graphql/src/model/graph/vector_selection.rs index 74dce55449..5a3cba81b4 100644 --- a/raphtory-graphql/src/model/graph/vector_selection.rs +++ b/raphtory-graphql/src/model/graph/vector_selection.rs @@ -4,12 +4,12 @@ use super::{ node::GqlNode, vectorised_graph::{IntoWindowTuple, VectorisedGraphWindow}, }; -use crate::{embeddings::EmbedQuery, rayon::blocking_compute}; -use async_graphql::Context; +use crate::rayon::blocking_compute; use dynamic_graphql::{InputObject, ResolvedObject, ResolvedObjectFields}; use raphtory::{ - db::api::view::MaterializedGraph, errors::GraphResult, - vectors::vector_selection::VectorSelection, + db::api::view::MaterializedGraph, + errors::GraphResult, + vectors::{vector_selection::VectorSelection, Embedding}, }; #[derive(InputObject)] @@ -45,18 +45,15 @@ impl GqlVectorSelection { /// Returns a list of documents in the current selection. async fn get_documents(&self) -> GraphResult> { let cloned = self.0.clone(); - blocking_compute(move || { - let docs = cloned.get_documents_with_scores()?.into_iter(); - Ok(docs - .map(|(doc, score)| GqlDocument { - content: doc.content, - entity: doc.entity.into(), - embedding: doc.embedding.to_vec(), - score, - }) - .collect()) - }) - .await + let docs = cloned.get_documents_with_distances().await?.into_iter(); + Ok(docs + .map(|(doc, score)| GqlDocument { + content: doc.content, + entity: doc.entity.into(), + embedding: doc.embedding.to_vec(), + score, + }) + .collect()) } /// Adds all the documents associated with the specified nodes to the current selection. @@ -64,11 +61,8 @@ impl GqlVectorSelection { /// Documents added by this call are assumed to have a score of 0. async fn add_nodes(&self, nodes: Vec) -> Self { let mut selection = self.cloned(); - blocking_compute(move || { - selection.add_nodes(nodes); - selection.into() - }) - .await + selection.add_nodes(nodes); + selection.into() } /// Adds all the documents associated with the specified edges to the current selection. @@ -76,12 +70,9 @@ impl GqlVectorSelection { /// Documents added by this call are assumed to have a score of 0. async fn add_edges(&self, edges: Vec) -> Self { let mut selection = self.cloned(); - blocking_compute(move || { - let edges = edges.into_iter().map(|edge| (edge.src, edge.dst)).collect(); - selection.add_edges(edges); - selection.into() - }) - .await + let edges = edges.into_iter().map(|edge| (edge.src, edge.dst)).collect(); + selection.add_edges(edges); + selection.into() } /// Add all the documents a specified number of hops away to the selection. @@ -100,55 +91,49 @@ impl GqlVectorSelection { /// Adds documents, from the set of one hop neighbours to the current selection, to the selection based on their similarity score with the specified query. This function loops so that the set of one hop neighbours expands on each loop and number of documents added is determined by the specified limit. async fn expand_entities_by_similarity( &self, - ctx: &Context<'_>, query: String, limit: usize, window: Option, ) -> GraphResult { - let vector = ctx.embed_query(query).await?; + let vector = self.embed_text(query).await?; let window = window.into_window_tuple(); let mut selection = self.cloned(); - blocking_compute(move || { - selection.expand_entities_by_similarity(&vector, limit, window)?; - Ok(selection.into()) - }) - .await + selection + .expand_entities_by_similarity(&vector, limit, window) + .await?; + Ok(selection.into()) } /// Add the adjacent nodes with higher score for query to the selection up to a specified limit. This function loops like expand_entities_by_similarity but is restricted to nodes. async fn expand_nodes_by_similarity( &self, - ctx: &Context<'_>, query: String, limit: usize, window: Option, ) -> GraphResult { - let vector = ctx.embed_query(query).await?; + let vector = self.embed_text(query).await?; let window = window.into_window_tuple(); let mut selection = self.cloned(); - blocking_compute(move || { - selection.expand_nodes_by_similarity(&vector, limit, window)?; - Ok(selection.into()) - }) - .await + selection + .expand_nodes_by_similarity(&vector, limit, window) + .await?; + Ok(selection.into()) } /// Add the adjacent edges with higher score for query to the selection up to a specified limit. This function loops like expand_entities_by_similarity but is restricted to edges. async fn expand_edges_by_similarity( &self, - ctx: &Context<'_>, query: String, limit: usize, window: Option, ) -> GraphResult { - let vector = ctx.embed_query(query).await?; + let vector = self.embed_text(query).await?; let window = window.into_window_tuple(); let mut selection = self.cloned(); - blocking_compute(move || { - selection.expand_edges_by_similarity(&vector, limit, window)?; - Ok(selection.into()) - }) - .await + selection + .expand_edges_by_similarity(&vector, limit, window) + .await?; + Ok(selection.into()) } } @@ -156,4 +141,8 @@ impl GqlVectorSelection { fn cloned(&self) -> VectorSelection { self.0.clone() } + + async fn embed_text(&self, text: String) -> GraphResult { + self.0.get_vectorised_graph().embed_text(text).await + } } diff --git a/raphtory-graphql/src/model/graph/vectorised_graph.rs b/raphtory-graphql/src/model/graph/vectorised_graph.rs index 55920fc76c..68a5a17415 100644 --- a/raphtory-graphql/src/model/graph/vectorised_graph.rs +++ b/raphtory-graphql/src/model/graph/vectorised_graph.rs @@ -1,6 +1,4 @@ use super::vector_selection::GqlVectorSelection; -use crate::{embeddings::EmbedQuery, model::blocking_io}; -use async_graphql::Context; use dynamic_graphql::{InputObject, ResolvedObject, ResolvedObjectFields}; use raphtory::{ db::api::view::MaterializedGraph, errors::GraphResult, @@ -37,6 +35,12 @@ impl From> for GqlVectorisedGraph { #[ResolvedObjectFields] impl GqlVectorisedGraph { + /// Optmize the vector index + async fn optimize_index(&self) -> GraphResult { + self.0.optimize_index().await?; + Ok(true) + } + /// Returns an empty selection of documents. async fn empty_selection(&self) -> GqlVectorSelection { self.0.empty_selection().into() @@ -45,42 +49,42 @@ impl GqlVectorisedGraph { /// Search the top scoring entities according to a specified query returning no more than a specified limit of entities. async fn entities_by_similarity( &self, - ctx: &Context<'_>, query: String, limit: usize, window: Option, ) -> GraphResult { - let vector = ctx.embed_query(query).await?; + let vector = self.0.embed_text(query).await?; let w = window.into_window_tuple(); let cloned = self.0.clone(); - blocking_io(move || Ok(cloned.entities_by_similarity(&vector, limit, w)?.into())).await + Ok(cloned + .entities_by_similarity(&vector, limit, w) + .await? + .into()) } /// Search the top scoring nodes according to a specified query returning no more than a specified limit of nodes. async fn nodes_by_similarity( &self, - ctx: &Context<'_>, query: String, limit: usize, window: Option, ) -> GraphResult { - let vector = ctx.embed_query(query).await?; + let vector = self.0.embed_text(query).await?; let w = window.into_window_tuple(); let cloned = self.0.clone(); - blocking_io(move || Ok(cloned.nodes_by_similarity(&vector, limit, w)?.into())).await + Ok(cloned.nodes_by_similarity(&vector, limit, w).await?.into()) } /// Search the top scoring edges according to a specified query returning no more than a specified limit of edges. async fn edges_by_similarity( &self, - ctx: &Context<'_>, query: String, limit: usize, window: Option, ) -> GraphResult { - let vector = ctx.embed_query(query).await?; + let vector = self.0.embed_text(query).await?; let w = window.into_window_tuple(); let cloned = self.0.clone(); - blocking_io(move || Ok(cloned.edges_by_similarity(&vector, limit, w)?.into())).await + Ok(cloned.edges_by_similarity(&vector, limit, w).await?.into()) } } diff --git a/raphtory-graphql/src/model/mod.rs b/raphtory-graphql/src/model/mod.rs index eadf0ec654..dc95838a51 100644 --- a/raphtory-graphql/src/model/mod.rs +++ b/raphtory-graphql/src/model/mod.rs @@ -9,20 +9,25 @@ use crate::{ }, plugins::{mutation_plugin::MutationPlugin, query_plugin::QueryPlugin}, }, - paths::valid_path, + paths::{valid_path, ExistingGraphFolder}, rayon::blocking_compute, url_encode::{url_decode_graph, url_encode_graph}, }; use async_graphql::Context; use dynamic_graphql::{ - App, Enum, Mutation, MutationFields, MutationRoot, ResolvedObject, ResolvedObjectFields, - Result, Upload, + App, Enum, InputObject, Mutation, MutationFields, MutationRoot, OneOfInput, ResolvedObject, + ResolvedObjectFields, Result, Upload, }; use raphtory::{ db::{api::view::MaterializedGraph, graph::views::deletion_graph::PersistentGraph}, - errors::{GraphError, InvalidPathReason}, + errors::{GraphError, GraphResult, InvalidPathReason}, prelude::*, serialise::InternalStableDecode, + vectors::{ + cache::CachedEmbeddingModel, + storage::OpenAIEmbeddings, + template::{DocumentTemplate, DEFAULT_EDGE_TEMPLATE, DEFAULT_NODE_TEMPLATE}, + }, version, }; #[cfg(feature = "storage")] @@ -40,6 +45,46 @@ pub mod plugins; pub(crate) mod schema; pub(crate) mod sorting; +#[derive(InputObject, Debug, Clone, Default)] +pub struct OpenAIConfig { + model: String, + api_base: Option, + api_key_env: Option, + org_id: Option, + project_id: Option, +} + +#[derive(OneOfInput, Clone, Debug)] +pub enum EmbeddingModel { + /// OpenAI embedding models or compatible providers + OpenAI(OpenAIConfig), +} + +impl EmbeddingModel { + async fn cache<'a>(self, ctx: &Context<'a>) -> GraphResult { + let data = ctx.data_unchecked::(); + match self { + Self::OpenAI(OpenAIConfig { + model, + api_base, + api_key_env, + org_id, + project_id, + }) => { + let embeddings = OpenAIEmbeddings { + model, + api_base, + api_key_env, + org_id, + project_id, + }; + let vector_cache = data.vector_cache.resolve().await?; + vector_cache.openai(embeddings).await + } + } + } +} + /// a thin wrapper around spawn_blocking that unwraps the join handle pub(crate) async fn blocking_io(f: F) -> R where @@ -87,6 +132,22 @@ pub enum GqlGraphType { #[graphql(root)] pub(crate) struct QueryRoot; +#[derive(OneOfInput, Clone, Debug)] +pub enum Template { + /// The default template. + Enabled(bool), + /// A custom template. + Custom(String), +} + +fn resolve(template: Option