diff --git a/.github/workflows/bench-graphql.yml b/.github/workflows/bench-graphql.yml index 193d94c494..aeb7f806a6 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 --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 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..080c82db35 100644 --- a/.github/workflows/test_python_workflow.yml +++ b/.github/workflows/test_python_workflow.yml @@ -29,8 +29,12 @@ 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 }}" + # env: + # CARGO_BUILD_JOBS: 2 + # CARGO_INCREMENTAL: 0 + # RUSTFLAGS: "-C debuginfo=0" steps: - uses: actions/checkout@v4 name: Checkout @@ -55,7 +59,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 b13bf243ae..d32e396662 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -410,34 +410,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" @@ -484,7 +474,7 @@ dependencies = [ "futures-timer", "futures-util", "handlebars", - "http", + "http 1.3.1", "indexmap 2.11.4", "mime", "multer", @@ -507,7 +497,7 @@ checksum = "fd45deb3dbe5da5cdb8d6a670a7736d735ba65b455328440f236dfb113727a3d" dependencies = [ "Inflector", "async-graphql-parser", - "darling", + "darling 0.20.11", "proc-macro-crate", "proc-macro2", "quote", @@ -536,7 +526,7 @@ checksum = "4dcb6b3a79ee6cecec0ffbef55add2be12ca362540b775b0cb6c66a47d61c3ae" dependencies = [ "async-graphql", "futures-util", - "http", + "http 1.3.1", "mime", "poem", "serde_json", @@ -594,6 +584,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.106", +] + [[package]] name = "async-stream" version = "0.3.6" @@ -627,6 +628,15 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "async_cell" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "447ab28afbb345f5408b120702a44e5529ebf90b1796ec76e9528df8e288e6c2" +dependencies = [ + "loom", +] + [[package]] name = "atoi" version = "2.0.0" @@ -649,932 +659,1508 @@ 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.2", - "tower-layer", - "tower-service", + "fastrand", + "hex", + "http 1.3.1", + "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.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" +checksum = "6a88aab2464f1f25453baa7a07c84c5b7684e274054ba06817f382357f77a288" dependencies = [ - "futures-core", - "getrandom 0.2.16", - "instant", - "pin-project-lite", - "rand 0.8.5", - "tokio", + "aws-lc-sys", + "zeroize", ] [[package]] -name = "backtrace" -version = "0.3.76" +name = "aws-lc-sys" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" +checksum = "b45afffdee1e7c9126814751f88dddc747f41d91da16c9551a0f1e8a11e788a1" dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-link", + "cc", + "cmake", + "dunce", + "fs_extra", ] [[package]] -name = "base64" -version = "0.21.7" +name = "aws-runtime" +version = "1.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "d81b5b2898f6798ad58f484856768bca817e3cd9de0974c24ae0f1113fe88f1b" +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" -version = "0.22.1" +name = "aws-sdk-dynamodb" +version = "1.101.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +checksum = "b6f98cd9e5f2fc790aff1f393bc3c8680deea31c05d3c6f23b625cdc50b1b6b4" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand", + "http 0.2.12", + "regex-lite", + "tracing", +] [[package]] -name = "base64-compat" -version = "1.0.0" +name = "aws-sdk-sso" +version = "1.91.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a8d4d2746f89841e49230dd26917df1876050f95abafafbe34f47cb534b88d7" +checksum = "8ee6402a36f27b52fe67661c6732d684b2635152b676aa2babbfb5204f99115d" dependencies = [ - "byteorder", + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "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.8" +name = "aws-sdk-ssooidc" +version = "1.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a22f228ab7a1b23027ccc6c350b72868017af7ea8356fbdf19f8d991c690013" +checksum = "a45a7f750bbd170ee3677671ad782d90b894548f4e4ae168302c57ec9de5cb3e" 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-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-sts" +version = "1.95.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +checksum = "55542378e419558e6b1f398ca70adb0b2088077e79ad9f14eb09441f2f7b2164" dependencies = [ - "serde", + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "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-set" -version = "0.8.0" +name = "aws-sigv4" +version = "1.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +checksum = "69e523e1c4e8e7e8ff219d732988e22bfeae8a1cafdbe6d9eca1546fa080be7c" dependencies = [ - "bit-vec", + "aws-credential-types", + "aws-smithy-http", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "form_urlencoded", + "hex", + "hmac", + "http 0.2.12", + "http 1.3.1", + "percent-encoding", + "sha2", + "time", + "tracing", ] [[package]] -name = "bit-vec" -version = "0.8.0" +name = "aws-smithy-async" +version = "1.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +checksum = "9ee19095c7c4dda59f1697d028ce704c24b2d33c6718790c7f1d5a3015b4107c" +dependencies = [ + "futures-util", + "pin-project-lite", + "tokio", +] [[package]] -name = "bitflags" -version = "2.9.4" +name = "aws-smithy-http" +version = "0.62.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "826141069295752372f8203c17f28e30c464d22899a43a0c9fd9c458d469c88b" dependencies = [ - "serde", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "bytes-utils", + "futures-core", + "futures-util", + "http 0.2.12", + "http 1.3.1", + "http-body 0.4.6", + "percent-encoding", + "pin-project-lite", + "pin-utils", + "tracing", ] [[package]] -name = "bitpacking" -version = "0.9.2" +name = "aws-smithy-http-client" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c1d3e2bfd8d06048a179f7b17afc3188effa10385e7b00dc65af6aae732ea92" +checksum = "59e62db736db19c488966c8d787f52e6270be565727236fd5579eaa301e7bc4a" dependencies = [ - "crunchy", + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "h2 0.3.27", + "h2 0.4.12", + "http 0.2.12", + "http 1.3.1", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper 1.7.0", + "hyper-rustls 0.24.2", + "hyper-rustls 0.27.7", + "hyper-util", + "pin-project-lite", + "rustls 0.21.12", + "rustls 0.23.32", + "rustls-native-certs 0.8.1", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.4", + "tower 0.5.2", + "tracing", ] [[package]] -name = "blake2" -version = "0.10.6" +name = "aws-smithy-json" +version = "0.61.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +checksum = "49fa1213db31ac95288d981476f78d05d9cbb0353d22cdf3472cc05bb02f6551" dependencies = [ - "digest", + "aws-smithy-types", ] [[package]] -name = "blake3" -version = "1.8.2" +name = "aws-smithy-observability" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +checksum = "17f616c3f2260612fe44cede278bafa18e73e6479c4e393e2c4518cf2a9a228a" dependencies = [ - "arrayref", - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq", + "aws-smithy-runtime-api", ] [[package]] -name = "block-buffer" -version = "0.10.4" +name = "aws-smithy-query" +version = "0.60.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "ae5d689cf437eae90460e944a58b5668530d433b4ff85789e69d2f2a556e057d" dependencies = [ - "generic-array", + "aws-smithy-types", + "urlencoding", ] [[package]] -name = "brotli" -version = "7.0.0" +name = "aws-smithy-runtime" +version = "1.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" +checksum = "65fda37911905ea4d3141a01364bc5509a0f32ae3f3b22d6e330c0abfb62d247" dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor 4.0.3", + "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.3.1", + "http-body 0.4.6", + "http-body 1.0.1", + "pin-project-lite", + "pin-utils", + "tokio", + "tracing", ] [[package]] -name = "brotli" -version = "8.0.2" +name = "aws-smithy-runtime-api" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" +checksum = "ab0d43d899f9e508300e587bf582ba54c27a452dd0a9ea294690669138ae14a2" dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor 5.0.0", + "aws-smithy-async", + "aws-smithy-types", + "bytes", + "http 0.2.12", + "http 1.3.1", + "pin-project-lite", + "tokio", + "tracing", + "zeroize", ] [[package]] -name = "brotli-decompressor" -version = "4.0.3" +name = "aws-smithy-types" +version = "1.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a334ef7c9e23abf0ce748e8cd309037da93e606ad52eb372e4ce327a0dcfbdfd" +checksum = "905cb13a9895626d49cf2ced759b062d913834c7482c38e49557eac4e6193f01" dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", + "base64-simd", + "bytes", + "bytes-utils", + "futures-core", + "http 0.2.12", + "http 1.3.1", + "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 = "brotli-decompressor" -version = "5.0.0" +name = "aws-smithy-xml" +version = "0.60.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +checksum = "11b2f670422ff42bf7065031e72b45bc52a3508bd089f743ea90731ca2b6ea57" dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", + "xmlparser", ] [[package]] -name = "bumpalo" -version = "3.19.0" +name = "aws-types" +version = "1.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" - -[[package]] -name = "bytemuck" -version = "1.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" +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.1" +name = "axum" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", + "async-trait", + "axum-core 0.4.5", + "bytes", + "futures-util", + "http 1.3.1", + "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.2", + "tower-layer", + "tower-service", ] [[package]] -name = "byteorder" -version = "1.5.0" +name = "axum" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +checksum = "5b098575ebe77cb6d14fc7f32749631a6e44edbef6b796f89b020e99ba20d425" +dependencies = [ + "axum-core 0.5.5", + "bytes", + "form_urlencoded", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.7.0", + "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.2", + "tower-layer", + "tower-service", + "tracing", +] [[package]] -name = "bytes" -version = "1.10.1" +name = "axum-core" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" dependencies = [ - "serde", + "async-trait", + "bytes", + "futures-util", + "http 1.3.1", + "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.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22" dependencies = [ - "bzip2-sys", - "libc", + "bytes", + "futures-core", + "http 1.3.1", + "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.16", + "instant", + "pin-project-lite", + "rand 0.8.5", + "tokio", ] [[package]] -name = "bzip2" -version = "0.6.0" +name = "backon" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bea8dcd42434048e4f7a304411d9273a411f647446c1234a65ce0554923f4cff" +checksum = "cffb0e931875b666fc4fcb20fee52e9bbd1ef836fd9e9e04ec21555f9f85f7ef" dependencies = [ - "libbz2-rs-sys", + "fastrand", + "gloo-timers", + "tokio", ] [[package]] -name = "bzip2-sys" -version = "0.1.13+1.0.8" +name = "backtrace" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ - "cc", - "pkg-config", + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-link", ] [[package]] -name = "cast" -version = "0.3.0" +name = "base64" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] -name = "cc" -version = "1.2.39" +name = "base64" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1354349954c6fc9cb0deab020f27f783cf0b604e8bb754dc4658ecf0d29c35f" -dependencies = [ - "find-msvc-tools", - "jobserver", - "libc", - "shlex", -] +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] -name = "census" -version = "0.4.2" +name = "base64-compat" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4c707c6a209cbe82d10abd08e1ea8995e9ea937d2550646e02798948992be0" +checksum = "5a8d4d2746f89841e49230dd26917df1876050f95abafafbe34f47cb534b88d7" +dependencies = [ + "byteorder", +] [[package]] -name = "cfg-if" -version = "1.0.3" +name = "base64-simd" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" +dependencies = [ + "outref", + "vsimd", +] [[package]] -name = "cfg_aliases" -version = "0.2.1" +name = "base64ct" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "0e050f626429857a27ddccb31e0aca21356bfa709c04041aefddac081a8f068a" [[package]] -name = "chrono" -version = "0.4.42" +name = "bigdecimal" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +checksum = "1a22f228ab7a1b23027ccc6c350b72868017af7ea8356fbdf19f8d991c690013" dependencies = [ - "iana-time-zone", - "js-sys", + "autocfg", + "libm", + "num-bigint", + "num-integer", "num-traits", "serde", - "wasm-bindgen", - "windows-link", ] [[package]] -name = "chrono-tz" -version = "0.8.6" +name = "bincode" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59ae0466b83e838b81a54256c39d5d7c20b9d7daa10510a242d9b75abd5936e" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" dependencies = [ - "chrono", - "chrono-tz-build", - "phf 0.11.3", + "serde", ] [[package]] -name = "chrono-tz" -version = "0.10.4" +name = "bit-set" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6139a8597ed92cf816dfb33f5dd6cf0bb93a6adc938f11039f371bc5bcd26c3" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ - "chrono", - "phf 0.12.1", + "bit-vec", ] [[package]] -name = "chrono-tz-build" -version = "0.2.1" +name = "bit-vec" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433e39f13c9a060046954e0592a8d0a4bcb1040125cbf91cb8ee58964cfb350f" -dependencies = [ - "parse-zoneinfo", - "phf 0.11.3", - "phf_codegen", -] +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] -name = "ciborium" -version = "0.2.2" +name = "bitflags" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" dependencies = [ - "ciborium-io", - "ciborium-ll", "serde", ] [[package]] -name = "ciborium-io" -version = "0.2.2" +name = "bitpacking" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" +checksum = "4c1d3e2bfd8d06048a179f7b17afc3188effa10385e7b00dc65af6aae732ea92" +dependencies = [ + "crunchy", +] [[package]] -name = "ciborium-ll" -version = "0.2.2" +name = "bitvec" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ - "ciborium-io", - "half", + "funty", + "radium", + "tap", + "wyz", ] [[package]] -name = "cipher" -version = "0.4.4" +name = "blake2" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "crypto-common", - "inout", + "digest", ] [[package]] -name = "clap" -version = "4.5.48" +name = "blake3" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" dependencies = [ - "clap_builder", - "clap_derive", + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", ] [[package]] -name = "clap_builder" -version = "4.5.48" +name = "block-buffer" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", + "generic-array", ] [[package]] -name = "clap_derive" -version = "4.5.47" +name = "block-padding" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.106", + "generic-array", ] [[package]] -name = "clap_lex" -version = "0.7.5" +name = "bon" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +checksum = "ebeb9aaf9329dff6ceb65c689ca3db33dbf15f324909c60e4e5eef5701ce31b1" +dependencies = [ + "bon-macros", + "rustversion", +] [[package]] -name = "colorchoice" -version = "1.0.4" +name = "bon-macros" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +checksum = "77e9d642a7e3a318e37c2c9427b5a6a48aa1ad55dcd986f3034ab2239045a645" +dependencies = [ + "darling 0.21.3", + "ident_case", + "prettyplease", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.106", +] [[package]] -name = "comfy-table" -version = "7.1.2" +name = "brotli" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0d05af1e006a2407bedef5af410552494ce5be9090444dbbcb57258c1af3d56" +checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" dependencies = [ - "strum 0.26.3", - "strum_macros 0.26.4", - "unicode-width", + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor 4.0.3", ] [[package]] -name = "concurrent-queue" -version = "2.5.0" +name = "brotli" +version = "8.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" dependencies = [ - "crossbeam-utils", + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor 5.0.0", ] [[package]] -name = "config" -version = "0.14.1" +name = "brotli-decompressor" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68578f196d2a33ff61b27fae256c3164f65e36382648e30666dde05b8cc9dfdf" +checksum = "a334ef7c9e23abf0ce748e8cd309037da93e606ad52eb372e4ce327a0dcfbdfd" 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 = "brotli-decompressor" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] [[package]] -name = "const-random" -version = "0.1.18" +name = "bumpalo" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "bytemuck" +version = "1.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" dependencies = [ - "const-random-macro", + "bytemuck_derive", ] [[package]] -name = "const-random-macro" -version = "0.1.16" +name = "bytemuck_derive" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" dependencies = [ - "getrandom 0.2.16", - "once_cell", - "tiny-keccak", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] -name = "constant_time_eq" -version = "0.3.1" +name = "byteorder" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] -name = "convert_case" -version = "0.6.0" +name = "bytes" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 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.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +checksum = "bea8dcd42434048e4f7a304411d9273a411f647446c1234a65ce0554923f4cff" dependencies = [ - "libc", + "libbz2-rs-sys", ] [[package]] -name = "crc" -version = "3.3.0" +name = "bzip2-sys" +version = "0.1.13+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +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.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" +checksum = "e1354349954c6fc9cb0deab020f27f783cf0b604e8bb754dc4658ecf0d29c35f" 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.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" -dependencies = [ - "crossbeam-utils", -] +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] -name = "crossbeam-deque" -version = "0.8.6" +name = "cfg_aliases" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] -name = "crossbeam-epoch" -version = "0.9.18" +name = "chrono" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "crossbeam-utils", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-link", ] [[package]] -name = "crossbeam-queue" -version = "0.3.12" +name = "chrono-tz" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +checksum = "d59ae0466b83e838b81a54256c39d5d7c20b9d7daa10510a242d9b75abd5936e" dependencies = [ - "crossbeam-utils", + "chrono", + "chrono-tz-build", + "phf 0.11.3", ] [[package]] -name = "crossbeam-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +name = "chrono-tz" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6139a8597ed92cf816dfb33f5dd6cf0bb93a6adc938f11039f371bc5bcd26c3" +dependencies = [ + "chrono", + "phf 0.12.1", +] [[package]] -name = "crunchy" -version = "0.2.4" +name = "chrono-tz-build" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" +checksum = "433e39f13c9a060046954e0592a8d0a4bcb1040125cbf91cb8ee58964cfb350f" +dependencies = [ + "parse-zoneinfo", + "phf 0.11.3", + "phf_codegen", +] [[package]] -name = "crypto-common" -version = "0.1.6" +name = "ciborium" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" dependencies = [ - "generic-array", - "typenum", + "ciborium-io", + "ciborium-ll", + "serde", ] [[package]] -name = "csv" -version = "1.3.1" +name = "ciborium-io" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" dependencies = [ - "csv-core", - "itoa", - "ryu", - "serde", + "ciborium-io", + "half", ] [[package]] -name = "csv-core" -version = "0.1.12" +name = "cipher" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "memchr", + "crypto-common", + "inout", ] [[package]] -name = "darling" -version = "0.20.11" +name = "clap" +version = "4.5.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae" dependencies = [ - "darling_core", - "darling_macro", + "clap_builder", + "clap_derive", ] [[package]] -name = "darling_core" -version = "0.20.11" +name = "clap_builder" +version = "4.5.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9" dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", + "anstream", + "anstyle", + "clap_lex", "strsim", - "syn 2.0.106", ] [[package]] -name = "darling_macro" -version = "0.20.11" +name = "clap_derive" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" dependencies = [ - "darling_core", + "heck 0.5.0", + "proc-macro2", "quote", "syn 2.0.106", ] [[package]] -name = "dashmap" -version = "6.1.0" +name = "clap_lex" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" + +[[package]] +name = "cmake" +version = "0.1.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" dependencies = [ - "cfg-if", - "crossbeam-utils", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", - "rayon", - "serde", + "cc", ] [[package]] -name = "data-encoding" -version = "2.9.0" +name = "colorchoice" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] -name = "datafusion" -version = "50.0.0" +name = "comfy-table" +version = "7.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "481d0c1cad7606cee11233abcdff8eec46e43dd25abda007db6d5d26ae8483c4" +checksum = "e0d05af1e006a2407bedef5af410552494ce5be9090444dbbcb57258c1af3d56" dependencies = [ - "arrow", - "arrow-ipc", - "arrow-schema", - "async-trait", - "bytes", - "bzip2 0.6.0", - "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", + "strum 0.26.3", + "strum_macros 0.26.4", + "unicode-width", ] [[package]] -name = "datafusion-catalog" -version = "50.0.0" +name = "concurrent-queue" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d70327e81ab3a1f5832d8b372d55fa607851d7cea6d1f8e65ff0c98fcc32d222" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 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", + "crossbeam-utils", ] [[package]] -name = "datafusion-catalog-listing" -version = "50.0.0" +name = "config" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "268819e6bb20ba70a664abddc20deac604f30d3267f8c91847064542a8c0720c" +checksum = "68578f196d2a33ff61b27fae256c3164f65e36382648e30666dde05b8cc9dfdf" 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", + "convert_case", + "json5", + "nom 7.1.3", + "pathdiff", + "ron", + "rust-ini 0.20.0", + "serde", + "serde_json", + "toml", + "yaml-rust2", ] [[package]] -name = "datafusion-common" -version = "50.0.0" +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const-random" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "054873d5563f115f83ef4270b560ac2ce4de713905e825a40cac49d6ff348254" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" dependencies = [ - "ahash", - "arrow", - "arrow-ipc", - "base64 0.22.1", - "chrono", - "half", - "hashbrown 0.14.5", - "indexmap 2.11.4", - "libc", - "log", - "object_store", - "parquet", - "paste", - "recursive", - "sqlparser", - "tokio", - "web-time", + "const-random-macro", ] [[package]] -name = "datafusion-common-runtime" -version = "50.0.0" +name = "const-random-macro" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a1d1bc69aaaadb8008b65329ed890b33e845dc063225c190f77b20328fbe1d" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ - "futures", - "log", - "tokio", + "getrandom 0.2.16", + "once_cell", + "tiny-keccak", ] [[package]] -name = "datafusion-datasource" -version = "50.0.0" +name = "constant_time_eq" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d855160469020982880fd9bd0962e033d2f4728f56f85a83d8c90785638b6519" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[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.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +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.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "csv" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" +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_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.106", +] + +[[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.106", +] + +[[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.106", +] + +[[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.106", +] + +[[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.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" + +[[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.0", + "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", + "half", + "hashbrown 0.14.5", + "indexmap 2.11.4", + "libc", + "log", + "object_store", + "parquet", + "paste", + "recursive", + "sqlparser", + "tokio", + "web-time", +] + +[[package]] +name = "datafusion-common-runtime" +version = "50.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b6234a6c7173fe5db1c6c35c01a12b2aa0f803a3007feee53483218817f8b1e" +dependencies = [ + "futures", + "log", + "tokio", +] + +[[package]] +name = "datafusion-datasource" +version = "50.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7256c9cb27a78709dd42d0c80f0178494637209cac6e29d5c93edd09b6721b86" dependencies = [ "arrow", "async-compression", @@ -1609,9 +2195,9 @@ dependencies = [ [[package]] name = "datafusion-datasource-csv" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ec3aa7575378d23aae96b955b5233bea6f9d461648174f6ccc8f3c160f2b7a7" +checksum = "64533a90f78e1684bfb113d200b540f18f268134622d7c96bbebc91354d04825" dependencies = [ "arrow", "async-trait", @@ -1634,9 +2220,9 @@ dependencies = [ [[package]] name = "datafusion-datasource-json" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00cfb8f33e2864eeb3188b6818acf5546d56a5a487d423cce9b684a554caabfa" +checksum = "8d7ebeb12c77df0aacad26f21b0d033aeede423a64b2b352f53048a75bf1d6e6" dependencies = [ "arrow", "async-trait", @@ -1659,9 +2245,9 @@ dependencies = [ [[package]] name = "datafusion-datasource-parquet" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3bfb48fb4ff42ac1485a12ea56434eaab53f7da8f00b2443b1a3d35a0b6d10" +checksum = "09e783c4c7d7faa1199af2df4761c68530634521b176a8d1331ddbc5a5c75133" dependencies = [ "arrow", "async-trait", @@ -1692,15 +2278,15 @@ dependencies = [ [[package]] name = "datafusion-doc" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fbf41013cf55c2369b5229594898e8108c8a1beeb49d97feb5e0cce9933eb8f" +checksum = "99ee6b1d9a80d13f9deb2291f45c07044b8e62fb540dbde2453a18be17a36429" [[package]] name = "datafusion-execution" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fd0c1ffe3885687758f985ed548184bf63b17b2a7a5ae695de422ad6432118" +checksum = "a4cec0a57653bec7b933fb248d3ffa3fa3ab3bd33bd140dc917f714ac036f531" dependencies = [ "arrow", "async-trait", @@ -1718,9 +2304,9 @@ dependencies = [ [[package]] name = "datafusion-expr" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4fe6411218a9dab656437b1e69b00a470a7a2d7db087867a366c145eb164a7" +checksum = "ef76910bdca909722586389156d0aa4da4020e1631994d50fadd8ad4b1aa05fe" dependencies = [ "arrow", "async-trait", @@ -1740,9 +2326,9 @@ dependencies = [ [[package]] name = "datafusion-expr-common" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a45bee7d2606bfb41ceb1d904ba7cecf69bd5a6f8f3e6c57c3f5a83d84bdd97" +checksum = "6d155ccbda29591ca71a1344dd6bed26c65a4438072b400df9db59447f590bb6" dependencies = [ "arrow", "datafusion-common", @@ -1753,9 +2339,9 @@ dependencies = [ [[package]] name = "datafusion-functions" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7e1c532ff9d14f291160bca23e55ffd4899800301dd2389786c2f02d76904a" +checksum = "7de2782136bd6014670fd84fe3b0ca3b3e4106c96403c3ae05c0598577139977" dependencies = [ "arrow", "arrow-buffer", @@ -1782,9 +2368,9 @@ dependencies = [ [[package]] name = "datafusion-functions-aggregate" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05d47426645aef1e73b1a034c75ab2401bc504175feb191accbe211ec24a342" +checksum = "07331fc13603a9da97b74fd8a273f4238222943dffdbbed1c4c6f862a30105bf" dependencies = [ "ahash", "arrow", @@ -1803,9 +2389,9 @@ dependencies = [ [[package]] name = "datafusion-functions-aggregate-common" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05c99f648b2b1743de0c1c19eef07e8cc5a085237f172b2e20bf6934e0a804e4" +checksum = "b5951e572a8610b89968a09b5420515a121fbc305c0258651f318dc07c97ab17" dependencies = [ "ahash", "arrow", @@ -1816,9 +2402,9 @@ dependencies = [ [[package]] name = "datafusion-functions-nested" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4227782023f4fb68d3d5c5eb190665212f43c9a0b437553e4b938b379aff6cf6" +checksum = "fdacca9302c3d8fc03f3e94f338767e786a88a33f5ebad6ffc0e7b50364b9ea3" dependencies = [ "arrow", "arrow-ord", @@ -1838,9 +2424,9 @@ dependencies = [ [[package]] name = "datafusion-functions-table" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d902b1769f69058236e89f04f3bff2cf62f24311adb7bf3c6c3e945c9451076" +checksum = "8c37ff8a99434fbbad604a7e0669717c58c7c4f14c472d45067c4b016621d981" dependencies = [ "arrow", "async-trait", @@ -1854,9 +2440,9 @@ dependencies = [ [[package]] name = "datafusion-functions-window" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8ee43974c92eb9920fe8e97e0fab48675e93b062abcb48bef4c1d4305b6ee4" +checksum = "48e2aea7c79c926cffabb13dc27309d4eaeb130f4a21c8ba91cdd241c813652b" dependencies = [ "arrow", "datafusion-common", @@ -1872,9 +2458,9 @@ dependencies = [ [[package]] name = "datafusion-functions-window-common" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e149d36cdd44fb425dc815c5fac55025aa9a592dd65cb3c421881096292c02" +checksum = "0fead257ab5fd2ffc3b40fda64da307e20de0040fe43d49197241d9de82a487f" dependencies = [ "datafusion-common", "datafusion-physical-expr-common", @@ -1882,9 +2468,9 @@ dependencies = [ [[package]] name = "datafusion-macros" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07c9faa0cdefb6e6e756482b846397b5c2d84d369e30b009472b9ab9b1430fbd" +checksum = "ec6f637bce95efac05cdfb9b6c19579ed4aa5f6b94d951cfa5bb054b7bb4f730" dependencies = [ "datafusion-expr", "quote", @@ -1893,9 +2479,9 @@ dependencies = [ [[package]] name = "datafusion-optimizer" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f16a4f7059302ad1de6e97ab0eebb5c34405917b1f80806a30a66e38ad118251" +checksum = "c6583ef666ae000a613a837e69e456681a9faa96347bf3877661e9e89e141d8a" dependencies = [ "arrow", "chrono", @@ -1913,9 +2499,9 @@ dependencies = [ [[package]] name = "datafusion-physical-expr" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10bb87a605d8ce9672d5347c0293c12211b0c03923fc12fbdc665fe76e6f9e01" +checksum = "c8668103361a272cbbe3a61f72eca60c9b7c706e87cc3565bcf21e2b277b84f6" dependencies = [ "ahash", "arrow", @@ -1936,9 +2522,9 @@ dependencies = [ [[package]] name = "datafusion-physical-expr-adapter" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da3a7429a555dd5ff0bec4d24bd5532ec43876764088da635cad55b2f178dc2" +checksum = "815acced725d30601b397e39958e0e55630e0a10d66ef7769c14ae6597298bb0" dependencies = [ "arrow", "datafusion-common", @@ -1951,9 +2537,9 @@ dependencies = [ [[package]] name = "datafusion-physical-expr-common" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "845eb44ef1e04d2a15c6d955cb146b40a41814a7be4377f0a541857d3e257d6f" +checksum = "6652fe7b5bf87e85ed175f571745305565da2c0b599d98e697bcbedc7baa47c3" dependencies = [ "ahash", "arrow", @@ -1965,9 +2551,9 @@ dependencies = [ [[package]] name = "datafusion-physical-optimizer" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b9b648ee2785722c79eae366528e52e93ece6808aef9297cf8e5521de381da" +checksum = "49b7d623eb6162a3332b564a0907ba00895c505d101b99af78345f1acf929b5c" dependencies = [ "arrow", "datafusion-common", @@ -1985,9 +2571,9 @@ dependencies = [ [[package]] name = "datafusion-physical-plan" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e6688d17b78104e169d7069749832c20ff50f112be853d2c058afe46c889064" +checksum = "e2f7f778a1a838dec124efb96eae6144237d546945587557c9e6936b3414558c" dependencies = [ "ahash", "arrow", @@ -2016,9 +2602,9 @@ dependencies = [ [[package]] name = "datafusion-pruning" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a893a46c56f5f190085e13949eb8ec163672c7ec2ac33bdb82c84572e71ca73" +checksum = "cd1e59e2ca14fe3c30f141600b10ad8815e2856caa59ebbd0e3e07cd3d127a65" dependencies = [ "arrow", "arrow-schema", @@ -2034,9 +2620,9 @@ dependencies = [ [[package]] name = "datafusion-session" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8b62684c7a1db6121a8c83100209cffa1e664a8d9ced87e1a32f8cdc2fff3c2" +checksum = "21ef8e2745583619bd7a49474e8f45fbe98ebb31a133f27802217125a7b3d58d" dependencies = [ "arrow", "async-trait", @@ -2058,9 +2644,9 @@ dependencies = [ [[package]] name = "datafusion-sql" -version = "50.0.0" +version = "50.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09cff94b8242843e1da5d069e9d2cfc53807f1f00b1c0da78c297f47c21456e" +checksum = "89abd9868770386fede29e5a4b14f49c0bf48d652c3b9d7a8a0332329b87d50b" dependencies = [ "arrow", "bigdecimal", @@ -2092,6 +2678,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.9" @@ -2116,6 +2722,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid", + "pem-rfc7468", + "zeroize", ] [[package]] @@ -2154,7 +2762,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" dependencies = [ - "darling", + "darling 0.20.11", "proc-macro2", "quote", "syn 2.0.106", @@ -2200,6 +2808,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", + "const-oid", "crypto-common", "subtle", ] @@ -2263,6 +2872,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" @@ -2272,6 +2887,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" @@ -2290,7 +2917,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6027c3698e530bf88b37a618a05fd7a5e761dc2777771d5757ff07103f66189" dependencies = [ "Inflector", - "darling", + "darling 0.20.11", "proc-macro-crate", "proc-macro2", "quote", @@ -2313,26 +2940,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.106", -] - [[package]] name = "env_logger" version = "0.8.4" @@ -2359,6 +2966,12 @@ dependencies = [ "windows-sys 0.61.1", ] +[[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" @@ -2387,7 +3000,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74fef4569247a5f429d9156b9d0a2599914385dd189c539334c625d8099d90ab" dependencies = [ "futures-core", - "nom", + "nom 7.1.3", "pin-project-lite", ] @@ -2402,6 +3015,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" @@ -2487,6 +3106,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" @@ -2582,6 +3232,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" @@ -2637,6 +3302,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.11.4", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "h2" version = "0.4.12" @@ -2648,7 +3344,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http", + "http 1.3.1", "indexmap 2.11.4", "slab", "tokio", @@ -2732,7 +3428,7 @@ dependencies = [ "base64 0.22.1", "bytes", "headers-core", - "http", + "http 1.3.1", "httpdate", "mime", "sha1", @@ -2744,7 +3440,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" dependencies = [ - "http", + "http 1.3.1", ] [[package]] @@ -2818,12 +3514,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.1", +] + [[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.3.1" @@ -2835,6 +3551,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" @@ -2842,7 +3569,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http", + "http 1.3.1", ] [[package]] @@ -2853,8 +3580,8 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http", - "http-body", + "http 1.3.1", + "http-body 1.0.1", "pin-project-lite", ] @@ -2876,6 +3603,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.7.0" @@ -2886,9 +3637,9 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "h2", - "http", - "http-body", + "h2 0.4.12", + "http 1.3.1", + "http-body 1.0.1", "httparse", "httpdate", "itoa", @@ -2899,20 +3650,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.3.1", + "hyper 1.7.0", "hyper-util", - "rustls", + "rustls 0.23.32", "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio", - "tokio-rustls", + "tokio-rustls 0.26.4", "tower-service", "webpki-roots 1.0.2", ] @@ -2923,7 +3689,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper", + "hyper 1.7.0", "hyper-util", "pin-project-lite", "tokio", @@ -2941,9 +3707,9 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "http", - "http-body", - "hyper", + "http 1.3.1", + "http-body 1.0.1", + "hyper 1.7.0", "ipnet", "libc", "percent-encoding", @@ -2954,6 +3720,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" @@ -3099,222 +3874,828 @@ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +dependencies = [ + "equivalent", + "hashbrown 0.16.0", + "rayon", + "serde", + "serde_core", +] + +[[package]] +name = "indoc" +version = "2.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" + +[[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 = "io-uring" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" +dependencies = [ + "bitflags", + "cfg-if", + "libc", +] + +[[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.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "is-terminal" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[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.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jiff" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49cce2b81f2098e7e3efc35bc2e0a6b7abec9d34128283d7a26fa8f32a6dbb35" +dependencies = [ + "jiff-static", + "jiff-tzdb-platform", + "log", + "portable-atomic", + "portable-atomic-util", + "serde_core", + "windows-sys 0.61.1", +] + +[[package]] +name = "jiff-static" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "980af8b43c3ad5d8d349ace167ec8170839f753a42d233ba19e08afe1850fa69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[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.3", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +dependencies = [ + "once_cell", + "wasm-bindgen", ] [[package]] -name = "indexmap" -version = "2.11.4" +name = "json5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" dependencies = [ - "equivalent", - "hashbrown 0.16.0", - "rayon", + "pest", + "pest_derive", "serde", - "serde_core", ] [[package]] -name = "indoc" -version = "2.0.6" +name = "jsonb" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" +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 = "inout" -version = "0.1.4" +name = "jsonwebtoken" +version = "9.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" dependencies = [ - "generic-array", + "base64 0.22.1", + "js-sys", + "pem", + "ring", + "serde", + "serde_json", + "simple_asn1", ] [[package]] -name = "instant" -version = "0.1.13" +name = "kdam" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +checksum = "5740f66a8d86a086ebcacfb937070e8be6eb2f8fb45e4ae7fa428ca2a98a7b1f" dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", + "pyo3", + "terminal_size", + "windows-sys 0.59.0", ] [[package]] -name = "integer-encoding" -version = "3.0.4" +name = "lance" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" +checksum = "a2f0ca022d0424d991933a62d2898864cf5621873962bd84e65e7d1f023f9c36" +dependencies = [ + "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 = "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.16", + "half", + "jsonb", + "num-traits", + "rand 0.9.2", ] [[package]] -name = "io-uring" -version = "0.7.10" +name = "lance-bitpacking" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" +checksum = "a2ea14583cc6fa0bb190bcc2d3bc364b0aa545b345702976025f810e4740e8ce" dependencies = [ - "bitflags", - "cfg-if", - "libc", + "arrayref", + "paste", + "seq-macro", ] [[package]] -name = "ipnet" -version = "2.11.0" +name = "lance-core" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +checksum = "69c752dedd207384892006c40930f898d6634e05e3d489e89763abfe4b9307e7" +dependencies = [ + "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 = "iri-string" -version = "0.7.8" +name = "lance-datafusion" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +checksum = "21e1e98ca6e5cd337bdda2d9fb66063f295c0c2852d2bc6831366fea833ee608" dependencies = [ - "memchr", - "serde", + "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" -version = "0.4.16" +name = "lance-datagen" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" +checksum = "483c643fc2806ed1a2766edf4d180511bbd1d549bcc60373e33f4785c6185891" dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.59.0", + "arrow", + "arrow-array", + "arrow-cast", + "arrow-schema", + "chrono", + "futures", + "half", + "hex", + "rand 0.9.2", + "rand_xoshiro", + "random_word", ] [[package]] -name = "is_terminal_polyfill" -version = "1.70.1" +name = "lance-encoding" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a199d1fa3487529c5ffc433fbd1721231330b9350c2ff9b0c7b7dbdb98f0806a" +dependencies = [ + "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 = "iter-enum" -version = "1.2.0" +name = "lance-file" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c52f2d5e063459674b4735f21870dd911e0d96dbfebb984650068195c2df838" +checksum = "b57def2279465232cf5a8cd996300c632442e368745768bbed661c7f0a35334b" dependencies = [ - "derive_utils", + "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.10.5" +name = "lance-index" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +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.11.0" +name = "lance-io" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +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.12.1" +name = "lance-linalg" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +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.13.0" +name = "lance-namespace" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +checksum = "897dd6726816515bb70a698ce7cda44670dca5761637696d7905b45f405a8cd9" dependencies = [ - "either", + "arrow", + "async-trait", + "bytes", + "lance-core", + "lance-namespace-reqwest-client", + "snafu", ] [[package]] -name = "itertools" -version = "0.14.0" +name = "lance-namespace-impls" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +checksum = "5e3cfcd3ba369de2719abf6fb6233f69cda639eb5cbcb328487a790e745ab988" dependencies = [ - "either", + "arrow", + "arrow-ipc", + "arrow-schema", + "async-trait", + "bytes", + "lance", + "lance-core", + "lance-io", + "lance-namespace", + "object_store", + "reqwest", + "serde_json", + "snafu", + "url", ] [[package]] -name = "itoa" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" - -[[package]] -name = "jobserver" -version = "0.1.34" +name = "lance-namespace-reqwest-client" +version = "0.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "3ea349999bcda4eea53fc05d334b3775ec314761e6a706555c777d7a29b18d19" dependencies = [ - "getrandom 0.3.3", - "libc", + "reqwest", + "serde", + "serde_json", + "serde_repr", + "url", ] [[package]] -name = "js-sys" -version = "0.3.81" +name = "lance-table" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +checksum = "c8facc13760ba034b6c38767b16adba85e44cbcbea8124dc0c63c43865c60630" dependencies = [ - "once_cell", - "wasm-bindgen", + "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 = "json5" -version = "0.4.1" +name = "lance-testing" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +checksum = "b05052ef86188d6ae6339bdd9f2c5d77190e8ad1158f3dc8a42fa91bde9e5246" dependencies = [ - "pest", - "pest_derive", - "serde", + "arrow-array", + "arrow-schema", + "lance-arrow", + "num-traits", + "rand 0.9.2", ] [[package]] -name = "jsonwebtoken" -version = "9.3.1" +name = "lancedb" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" +checksum = "e1da241266792d8caa58005a3deb06ba1388a99350d89b5c904ef6f8de5d936f" dependencies = [ - "base64 0.22.1", - "js-sys", - "pem", - "ring", + "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", - "simple_asn1", -] - -[[package]] -name = "kdam" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5740f66a8d86a086ebcacfb937070e8be6eb2f8fb45e4ae7fa428ca2a98a7b1f" -dependencies = [ - "pyo3", - "terminal_size", - "windows-sys 0.59.0", + "serde_with", + "snafu", + "tempfile", + "tokio", + "url", + "uuid", ] [[package]] @@ -3322,6 +4703,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" @@ -3469,6 +4853,19 @@ version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +[[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" @@ -3484,6 +4881,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" @@ -3529,6 +4945,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" @@ -3536,7 +4958,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" dependencies = [ "autocfg", + "num_cpus", + "once_cell", "rawpointer", + "thread-tree", ] [[package]] @@ -3559,6 +4984,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" @@ -3645,6 +5079,12 @@ dependencies = [ "windows-sys 0.59.0", ] +[[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.11" @@ -3675,7 +5115,7 @@ dependencies = [ "bytes", "encoding_rs", "futures-util", - "http", + "http 1.3.1", "httparse", "memchr", "mime", @@ -3733,7 +5173,7 @@ dependencies = [ "serde", "thiserror 1.0.69", "tokio", - "tokio-rustls", + "tokio-rustls 0.26.4", "url", "webpki-roots 0.26.11", ] @@ -3760,12 +5200,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" @@ -3776,6 +5210,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.1" @@ -3794,19 +5237,35 @@ dependencies = [ "num-bigint", "num-complex", "num-integer", - "num-iter", - "num-rational", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", "num-traits", ] [[package]] -name = "num-bigint" -version = "0.4.6" +name = "num-bigint-dig" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" dependencies = [ + "lazy_static", + "libm", "num-integer", + "num-iter", "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", ] [[package]] @@ -3908,14 +5367,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.3.1", + "http-body-util", + "httparse", "humantime", + "hyper 1.7.0", "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", @@ -3925,6 +5398,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" @@ -3949,6 +5437,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.16", + "http 1.3.1", + "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" @@ -3977,7 +5494,7 @@ checksum = "91cf61a1868dacc576bf2b2a1c3e9ab150af7272909e80085c3173384fe11f76" dependencies = [ "async-trait", "futures-core", - "http", + "http 1.3.1", "opentelemetry", "opentelemetry-proto", "opentelemetry_sdk", @@ -4045,6 +5562,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" @@ -4079,6 +5605,12 @@ dependencies = [ "syn 2.0.106", ] +[[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" @@ -4088,6 +5620,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" @@ -4179,6 +5720,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" @@ -4205,12 +5758,27 @@ dependencies = [ "serde", ] +[[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.2" @@ -4379,6 +5947,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" @@ -4425,10 +6031,10 @@ dependencies = [ "futures-util", "headers", "hex", - "http", + "http 1.3.1", "http-body-util", "httpdate", - "hyper", + "hyper 1.7.0", "hyper-util", "mime", "mime_guess", @@ -4748,6 +6354,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" @@ -4771,7 +6397,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash 2.1.1", - "rustls", + "rustls 0.23.32", "socket2 0.6.0", "thiserror 2.0.17", "tokio", @@ -4791,7 +6417,7 @@ dependencies = [ "rand 0.9.2", "ring", "rustc-hash 2.1.1", - "rustls", + "rustls 0.23.32", "rustls-pki-types", "slab", "thiserror 2.0.17", @@ -4829,6 +6455,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" @@ -4898,6 +6530,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" @@ -4907,16 +6549,45 @@ dependencies = [ "rand_core 0.9.3", ] +[[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.3", +] + +[[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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbbbbea733ec66275512d0b9694f34102e7d5406fdbe2ad8d21b28dce92887c" + [[package]] name = "raphtory" version = "0.17.0" dependencies = [ "ahash", "arrow", + "arrow-array", "arrow-json", - "arroy", "async-openai", "async-trait", + "axum 0.8.7", "bigdecimal", "bincode", "bytemuck", @@ -4937,6 +6608,7 @@ dependencies = [ "iter-enum", "itertools 0.13.0", "kdam", + "lancedb", "memmap2", "minijinja", "minijinja-contrib", @@ -4962,7 +6634,7 @@ dependencies = [ "pyo3-arrow", "quad-rand", "rand 0.8.5", - "rand_distr", + "rand_distr 0.4.3", "raphtory", "raphtory-api", "raphtory-core", @@ -4976,7 +6648,7 @@ dependencies = [ "serde_json", "streaming-stats", "strsim", - "tantivy", + "tantivy 0.22.1", "tempfile", "thiserror 2.0.17", "tokio", @@ -5264,6 +6936,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.106", +] + [[package]] name = "regex" version = "1.11.3" @@ -5287,36 +6979,78 @@ 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.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +[[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.16", + "hex", + "hmac", + "home", + "http 1.3.1", + "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.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" dependencies = [ + "async-compression", "base64 0.22.1", "bytes", + "encoding_rs", "futures-channel", "futures-core", "futures-util", - "http", - "http-body", + "h2 0.4.12", + "http 1.3.1", + "http-body 1.0.1", "http-body-util", - "hyper", - "hyper-rustls", + "hyper 1.7.0", + "hyper-rustls 0.27.7", "hyper-util", "js-sys", "log", + "mime", "mime_guess", "percent-encoding", "pin-project-lite", "quinn", - "rustls", + "rustls 0.23.32", "rustls-native-certs 0.8.1", "rustls-pki-types", "serde", @@ -5324,7 +7058,7 @@ dependencies = [ "serde_urlencoded", "sync_wrapper", "tokio", - "tokio-rustls", + "tokio-rustls 0.26.4", "tokio-util", "tower 0.5.2", "tower-http", @@ -5347,7 +7081,7 @@ dependencies = [ "futures-core", "futures-timer", "mime", - "nom", + "nom 7.1.3", "pin-project-lite", "reqwest", "thiserror 1.0.69", @@ -5404,6 +7138,27 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "rsa" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40a0376c50d0358279d9d643e4bf7b7be212f1f4ff1da9070a7b54d22ef75c88" +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.7.2" @@ -5461,6 +7216,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" @@ -5524,16 +7289,29 @@ dependencies = [ "windows-sys 0.61.1", ] +[[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.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" dependencies = [ + "aws-lc-rs", "once_cell", "ring", "rustls-pki-types", - "rustls-webpki", + "rustls-webpki 0.103.6", "subtle", "zeroize", ] @@ -5582,12 +7360,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.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8572f3c2cb9934231157b45499fc41e1f58c589fdfb81a844ba873265e80f8eb" dependencies = [ + "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -5617,6 +7406,15 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +[[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" @@ -5635,12 +7433,63 @@ dependencies = [ "windows-sys 0.61.1", ] +[[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.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" +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 = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "scrypt" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" +dependencies = [ + "pbkdf2", + "salsa20", + "sha2", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "secrecy" version = "0.8.0" @@ -5742,6 +7591,28 @@ dependencies = [ "serde_core", ] +[[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.106", +] + [[package]] name = "serde_spanned" version = "0.6.9" @@ -5763,6 +7634,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.11.4", + "schemars 0.9.0", + "schemars 1.1.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.106", +] + [[package]] name = "sha1" version = "0.10.6" @@ -5818,6 +7720,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.7" @@ -5857,6 +7769,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" @@ -5869,6 +7790,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.106", +] + [[package]] name = "snap" version = "1.1.1" @@ -5917,6 +7859,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ + "base64ct", "der", ] @@ -5973,6 +7916,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" @@ -6105,7 +8060,7 @@ dependencies = [ "census", "crc32fast", "crossbeam-channel", - "downcast-rs", + "downcast-rs 1.2.1", "fastdivide", "fnv", "fs4", @@ -6115,7 +8070,7 @@ dependencies = [ "log", "lru", "lz4_flex", - "measure_time", + "measure_time 0.8.3", "memmap2", "num_cpus", "once_cell", @@ -6126,15 +8081,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", @@ -6142,6 +8097,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" @@ -6151,20 +8158,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]] @@ -6175,7 +8207,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", ] @@ -6197,7 +8242,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]] @@ -6206,8 +8262,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", ] @@ -6219,8 +8289,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]] @@ -6232,6 +8313,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.3" @@ -6301,6 +8397,15 @@ dependencies = [ "syn 2.0.106", ] +[[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" @@ -6427,13 +8532,23 @@ dependencies = [ "syn 2.0.106", ] +[[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.32", "tokio", ] @@ -6553,14 +8668,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.12", + "http 1.3.1", + "http-body 1.0.1", "http-body-util", - "hyper", + "hyper 1.7.0", "hyper-timeout", "hyper-util", "percent-encoding", @@ -6608,6 +8723,7 @@ dependencies = [ "tokio", "tower-layer", "tower-service", + "tracing", ] [[package]] @@ -6619,8 +8735,8 @@ dependencies = [ "bitflags", "bytes", "futures-util", - "http", - "http-body", + "http 1.3.1", + "http-body 1.0.1", "iri-string", "pin-project-lite", "tower 0.5.2", @@ -6646,6 +8762,7 @@ version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -6733,7 +8850,7 @@ checksum = "eadc29d668c91fcc564941132e17b28a7ceb2f3ebf0b9dae3e03fd7a6748eb0d" dependencies = [ "bytes", "data-encoding", - "http", + "http 1.3.1", "httparse", "log", "rand 0.9.2", @@ -6826,6 +8943,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" @@ -6874,6 +8997,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" @@ -7331,6 +9460,27 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +[[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 e4495c644f..2deb701061 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,7 +24,7 @@ readme = "README.md" homepage = "https://github.com/Raphtory/raphtory/" keywords = ["graph", "temporal-graph", "temporal"] authors = ["Pometry"] -rust-version = "1.86.0" +rust-version = "1.88.0" edition = "2021" # debug symbols are using a lot of resources @@ -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" @@ -153,7 +153,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" @@ -172,4 +172,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 449956e126..0bb0a8e72e 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 @@ -6000,6 +6031,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! @@ -6583,6 +6623,29 @@ Set the window end to a specified time. +### EmbeddingModel + + + + + + + + + + + + + + + + +
FieldTypeDescription
openAIOpenAIConfig + +OpenAI embedding models or compatible providers + +
+ ### GraphViewCollection @@ -7466,6 +7529,45 @@ Value.
+### OpenAIConfig + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
modelString!
apiBaseString
apiKeyEnvString
orgIdString
projectIdString
+ ### PathFromNodeViewCollection @@ -7745,6 +7847,38 @@ List of properties.
+### Template + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
enabledBoolean + +The default template. + +
customString + +A custom template. + +
+ ### TemporalPropertyFilterExpr 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 a95c9f6125..8f433b7225 100644 --- a/python/python/raphtory/graphql/__init__.pyi +++ b/python/python/raphtory/graphql/__init__.pyi @@ -93,26 +93,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. @@ -127,22 +107,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 c9011c1357..73b98cb4b5 100644 --- a/python/python/raphtory/vectors/__init__.pyi +++ b/python/python/raphtory/vectors/__init__.pyi @@ -25,7 +25,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.""" @@ -37,10 +44,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. @@ -58,10 +65,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. @@ -76,17 +83,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.""" @@ -129,7 +139,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. @@ -142,7 +152,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. @@ -196,12 +206,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. @@ -216,20 +226,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. @@ -244,12 +253,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. @@ -265,12 +274,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]: @@ -280,3 +289,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..f78184e465 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(address="0.0.0.0:7340") +def embeddings(text: str): + return [text.count("a"), text.count("b")] def setup_graph(g): @@ -58,51 +55,67 @@ 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(): + 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(): + 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(): + 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..91a75d071c 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(address="0.0.0.0:7340") # TODO: ask only for PORT!!! + def custom_embeddings(text: str): return embedding_map[text] - except: - raise Exception(f"unexpected document content: {text}") + with custom_embeddings.start(): + 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(address="0.0.0.0:7342") + def failing_embeddings(text: str): + assert False -def embedding(texts): - return [single_embedding(text) for text in texts] + with failing_embeddings.start(): + 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(address="0.0.0.0:7341") + def constant(text: str): + return [1.0] + + with constant.start(): + 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(address="0.0.0.0:7341") +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() + + 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 893c3ea2d1..8ed275b41b 100644 --- a/raphtory-graphql/schema.graphql +++ b/raphtory-graphql/schema.graphql @@ -711,6 +711,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). @@ -2207,6 +2214,14 @@ input ObjectEntry { value: Value! } +input OpenAIConfig { + model: String! + apiBase: String + apiKeyEnv: String + orgId: String + projectId: String +} + enum Operator { """ Equality operator. @@ -2546,6 +2561,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 @@ -2612,6 +2633,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. @@ -2775,6 +2807,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 0706e8d966..da18c17492 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); @@ -199,7 +200,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()); @@ -310,7 +313,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(); @@ -413,7 +418,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(); @@ -478,7 +485,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": { @@ -629,7 +638,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(); @@ -956,7 +967,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(); @@ -1131,7 +1144,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(); @@ -1272,7 +1287,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(); @@ -1569,7 +1586,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..b826cdd2c3 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,66 @@ 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 address = format!("0.0.0.0:{port}"); + let embedding_server = serve_custom_embedding(&address, 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 +708,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 +778,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 +853,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..61d2f7b200 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,47 @@ pub mod plugins; pub(crate) mod schema; pub(crate) mod sorting; +// TODO: move somewhere else +#[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 +133,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