mirror of
https://github.com/lancedb/lancedb.git
synced 2026-09-09 14:52:25 +00:00
Compare commits
13
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
237c0ae572 | ||
|
|
02783bf440 | ||
|
|
4323ca0147 | ||
|
|
bd3dd6a8e5 | ||
|
|
3c1162612e | ||
|
|
53c7c560c9 | ||
|
|
de4f77800d | ||
|
|
b6ab721cf7 | ||
|
|
027d53500b | ||
|
|
9098f47e73 | ||
|
|
826a3e5ee9 | ||
|
|
9fac56252e | ||
|
|
c55ca20c1b |
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
[tool.bumpversion]
|
[tool.bumpversion]
|
||||||
current_version = "0.26.0"
|
current_version = "0.26.2"
|
||||||
parse = """(?x)
|
parse = """(?x)
|
||||||
(?P<major>0|[1-9]\\d*)\\.
|
(?P<major>0|[1-9]\\d*)\\.
|
||||||
(?P<minor>0|[1-9]\\d*)\\.
|
(?P<minor>0|[1-9]\\d*)\\.
|
||||||
|
|||||||
Generated
+37
-54
@@ -3072,9 +3072,8 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fsst"
|
name = "fsst"
|
||||||
version = "2.0.0"
|
version = "2.0.1-rc.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.1-rc.1#230f285e1c0a72d0ccb723721591e78dd871a419"
|
||||||
checksum = "0f03a771ab914e207dd26bd2f12666839555ec8ecc7e1770e1ed6f9900d899a4"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
"rand 0.9.2",
|
"rand 0.9.2",
|
||||||
@@ -4405,9 +4404,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance"
|
name = "lance"
|
||||||
version = "2.0.0"
|
version = "2.0.1-rc.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.1-rc.1#230f285e1c0a72d0ccb723721591e78dd871a419"
|
||||||
checksum = "47b685aca3f97ee02997c83ded16f59c747ccb69e74c8abbbae4aa3d22cf1301"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow",
|
"arrow",
|
||||||
"arrow-arith",
|
"arrow-arith",
|
||||||
@@ -4472,9 +4470,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-arrow"
|
name = "lance-arrow"
|
||||||
version = "2.0.0"
|
version = "2.0.1-rc.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.1-rc.1#230f285e1c0a72d0ccb723721591e78dd871a419"
|
||||||
checksum = "daf00c7537df524cc518a089f0d156a036d95ca3f5bc2bc1f0a9f9293e9b62ef"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
"arrow-buffer",
|
"arrow-buffer",
|
||||||
@@ -4493,9 +4490,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-bitpacking"
|
name = "lance-bitpacking"
|
||||||
version = "2.0.0"
|
version = "2.0.1-rc.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.1-rc.1#230f285e1c0a72d0ccb723721591e78dd871a419"
|
||||||
checksum = "46752e4ac8fc5590a445e780b63a8800adc7a770bd74770a8dc66963778e4e77"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayref",
|
"arrayref",
|
||||||
"paste",
|
"paste",
|
||||||
@@ -4504,9 +4500,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-core"
|
name = "lance-core"
|
||||||
version = "2.0.0"
|
version = "2.0.1-rc.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.1-rc.1#230f285e1c0a72d0ccb723721591e78dd871a419"
|
||||||
checksum = "3d13d87d07305c6d4b4dc7780fb1107babf782a0e5b1dc7872e17ae1f8fd11ca"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
"arrow-buffer",
|
"arrow-buffer",
|
||||||
@@ -4543,9 +4538,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-datafusion"
|
name = "lance-datafusion"
|
||||||
version = "2.0.0"
|
version = "2.0.1-rc.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.1-rc.1#230f285e1c0a72d0ccb723721591e78dd871a419"
|
||||||
checksum = "6451b5af876eaef8bec4b38a39dadac9d44621e1ecf85d0cdf6097a5d0aa8721"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow",
|
"arrow",
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
@@ -4575,9 +4569,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-datagen"
|
name = "lance-datagen"
|
||||||
version = "2.0.0"
|
version = "2.0.1-rc.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.1-rc.1#230f285e1c0a72d0ccb723721591e78dd871a419"
|
||||||
checksum = "e1736708dd7867dfbab8fcc930b21c96717c6c00be73b7d9a240336a4ed80375"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow",
|
"arrow",
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
@@ -4595,9 +4588,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-encoding"
|
name = "lance-encoding"
|
||||||
version = "2.0.0"
|
version = "2.0.1-rc.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.1-rc.1#230f285e1c0a72d0ccb723721591e78dd871a419"
|
||||||
checksum = "d6b6ca4ff94833240d5ba4a94a742cba786d1949b3c3fa7e11d6f0050443432a"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow-arith",
|
"arrow-arith",
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
@@ -4634,9 +4626,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-file"
|
name = "lance-file"
|
||||||
version = "2.0.0"
|
version = "2.0.1-rc.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.1-rc.1#230f285e1c0a72d0ccb723721591e78dd871a419"
|
||||||
checksum = "55fbe959bffe185543aed3cbeb14484f1aa2e55886034fdb1ea3d8cc9b70aad8"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow-arith",
|
"arrow-arith",
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
@@ -4668,9 +4659,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-geo"
|
name = "lance-geo"
|
||||||
version = "2.0.0"
|
version = "2.0.1-rc.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.1-rc.1#230f285e1c0a72d0ccb723721591e78dd871a419"
|
||||||
checksum = "a52b0adabc953d457f336a784a3b37353a180e6a79905f544949746e0d4c6483"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"datafusion",
|
"datafusion",
|
||||||
"geo-traits",
|
"geo-traits",
|
||||||
@@ -4684,9 +4674,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-index"
|
name = "lance-index"
|
||||||
version = "2.0.0"
|
version = "2.0.1-rc.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.1-rc.1#230f285e1c0a72d0ccb723721591e78dd871a419"
|
||||||
checksum = "6b67654bf86fd942dd2cf08294ee7e91053427cd148225f49c9ff398ff9a40fd"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow",
|
"arrow",
|
||||||
"arrow-arith",
|
"arrow-arith",
|
||||||
@@ -4753,9 +4742,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-io"
|
name = "lance-io"
|
||||||
version = "2.0.0"
|
version = "2.0.1-rc.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.1-rc.1#230f285e1c0a72d0ccb723721591e78dd871a419"
|
||||||
checksum = "8eb0ccc1c414e31687d83992d546af0a0237c8d2f4bf2ae3d347d539fd0fc141"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow",
|
"arrow",
|
||||||
"arrow-arith",
|
"arrow-arith",
|
||||||
@@ -4795,9 +4783,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-linalg"
|
name = "lance-linalg"
|
||||||
version = "2.0.0"
|
version = "2.0.1-rc.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.1-rc.1#230f285e1c0a72d0ccb723721591e78dd871a419"
|
||||||
checksum = "083404cf12dcdb1a7df98fb58f9daf626b6e43a2f794b37b6b89b4012a0e1f78"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
"arrow-buffer",
|
"arrow-buffer",
|
||||||
@@ -4813,9 +4800,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-namespace"
|
name = "lance-namespace"
|
||||||
version = "2.0.0"
|
version = "2.0.1-rc.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.1-rc.1#230f285e1c0a72d0ccb723721591e78dd871a419"
|
||||||
checksum = "c12778d2aabf9c2bfd16e2509ebe120e562a288d8ae630ec6b6b204868df41b2"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow",
|
"arrow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@@ -4827,9 +4813,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-namespace-impls"
|
name = "lance-namespace-impls"
|
||||||
version = "2.0.0"
|
version = "2.0.1-rc.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.1-rc.1#230f285e1c0a72d0ccb723721591e78dd871a419"
|
||||||
checksum = "8863aababdd13a6d2c8d6179dc6981f4f8f49d8b66a00c5dd75115aec4cadc99"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow",
|
"arrow",
|
||||||
"arrow-ipc",
|
"arrow-ipc",
|
||||||
@@ -4872,9 +4857,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-table"
|
name = "lance-table"
|
||||||
version = "2.0.0"
|
version = "2.0.1-rc.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.1-rc.1#230f285e1c0a72d0ccb723721591e78dd871a419"
|
||||||
checksum = "f0fcc83f197ce2000c4abe4f5e0873490ab1f41788fa76571c4209b87d4daf50"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow",
|
"arrow",
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
@@ -4913,9 +4897,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-testing"
|
name = "lance-testing"
|
||||||
version = "2.0.0"
|
version = "2.0.1-rc.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.1-rc.1#230f285e1c0a72d0ccb723721591e78dd871a419"
|
||||||
checksum = "7fb1f7c7e06f91360e141ecee1cf2110f858c231705f69f2cd2fda9e30c1e9f4"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
"arrow-schema",
|
"arrow-schema",
|
||||||
@@ -4926,7 +4909,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lancedb"
|
name = "lancedb"
|
||||||
version = "0.26.0"
|
version = "0.26.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ahash",
|
"ahash",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
@@ -5006,7 +4989,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lancedb-nodejs"
|
name = "lancedb-nodejs"
|
||||||
version = "0.26.0"
|
version = "0.26.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
"arrow-ipc",
|
"arrow-ipc",
|
||||||
@@ -5026,7 +5009,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lancedb-python"
|
name = "lancedb-python"
|
||||||
version = "0.29.0"
|
version = "0.29.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow",
|
"arrow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
|
|||||||
+14
-14
@@ -15,20 +15,20 @@ categories = ["database-implementations"]
|
|||||||
rust-version = "1.88.0"
|
rust-version = "1.88.0"
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
lance = { "version" = "=2.0.0", default-features = false }
|
lance = { "version" = "=2.0.1-rc.1", default-features = false, "tag" = "v2.0.1-rc.1", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-core = "=2.0.0"
|
lance-core = { "version" = "=2.0.1-rc.1", "tag" = "v2.0.1-rc.1", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-datagen = "=2.0.0"
|
lance-datagen = { "version" = "=2.0.1-rc.1", "tag" = "v2.0.1-rc.1", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-file = "=2.0.0"
|
lance-file = { "version" = "=2.0.1-rc.1", "tag" = "v2.0.1-rc.1", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-io = { "version" = "=2.0.0", default-features = false }
|
lance-io = { "version" = "=2.0.1-rc.1", default-features = false, "tag" = "v2.0.1-rc.1", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-index = "=2.0.0"
|
lance-index = { "version" = "=2.0.1-rc.1", "tag" = "v2.0.1-rc.1", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-linalg = "=2.0.0"
|
lance-linalg = { "version" = "=2.0.1-rc.1", "tag" = "v2.0.1-rc.1", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-namespace = "=2.0.0"
|
lance-namespace = { "version" = "=2.0.1-rc.1", "tag" = "v2.0.1-rc.1", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-namespace-impls = { "version" = "=2.0.0", default-features = false }
|
lance-namespace-impls = { "version" = "=2.0.1-rc.1", default-features = false, "tag" = "v2.0.1-rc.1", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-table = "=2.0.0"
|
lance-table = { "version" = "=2.0.1-rc.1", "tag" = "v2.0.1-rc.1", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-testing = "=2.0.0"
|
lance-testing = { "version" = "=2.0.1-rc.1", "tag" = "v2.0.1-rc.1", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-datafusion = "=2.0.0"
|
lance-datafusion = { "version" = "=2.0.1-rc.1", "tag" = "v2.0.1-rc.1", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-encoding = "=2.0.0"
|
lance-encoding = { "version" = "=2.0.1-rc.1", "tag" = "v2.0.1-rc.1", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-arrow = "=2.0.0"
|
lance-arrow = { "version" = "=2.0.1-rc.1", "tag" = "v2.0.1-rc.1", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
ahash = "0.8"
|
ahash = "0.8"
|
||||||
# Note that this one does not include pyarrow
|
# Note that this one does not include pyarrow
|
||||||
arrow = { version = "57.2", optional = false }
|
arrow = { version = "57.2", optional = false }
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
.PHONY: licenses
|
||||||
|
|
||||||
|
licenses:
|
||||||
|
cargo about generate about.hbs -o RUST_THIRD_PARTY_LICENSES.html -c about.toml
|
||||||
|
cd python && cargo about generate ../about.hbs -o RUST_THIRD_PARTY_LICENSES.html -c ../about.toml
|
||||||
|
cd python && uv sync --all-extras && uv tool run pip-licenses --python .venv/bin/python --format=markdown --with-urls --output-file=PYTHON_THIRD_PARTY_LICENSES.md
|
||||||
|
cd nodejs && cargo about generate ../about.hbs -o RUST_THIRD_PARTY_LICENSES.html -c ../about.toml
|
||||||
|
cd nodejs && npx license-checker --markdown --out NODEJS_THIRD_PARTY_LICENSES.md
|
||||||
|
cd java && ./mvnw license:aggregate-add-third-party -q
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,70 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body {
|
||||||
|
background: #333;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
color: skyblue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.container {
|
||||||
|
font-family: sans-serif;
|
||||||
|
max-width: 800px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
.intro {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.licenses-list {
|
||||||
|
list-style-type: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.license-used-by {
|
||||||
|
margin-top: -10px;
|
||||||
|
}
|
||||||
|
.license-text {
|
||||||
|
max-height: 200px;
|
||||||
|
overflow-y: scroll;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<main class="container">
|
||||||
|
<div class="intro">
|
||||||
|
<h1>Third Party Licenses</h1>
|
||||||
|
<p>This page lists the licenses of the projects used in cargo-about.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>Overview of licenses:</h2>
|
||||||
|
<ul class="licenses-overview">
|
||||||
|
{{#each overview}}
|
||||||
|
<li><a href="#{{id}}">{{name}}</a> ({{count}})</li>
|
||||||
|
{{/each}}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>All license text:</h2>
|
||||||
|
<ul class="licenses-list">
|
||||||
|
{{#each licenses}}
|
||||||
|
<li class="license">
|
||||||
|
<h3 id="{{id}}">{{name}}</h3>
|
||||||
|
<h4>Used by:</h4>
|
||||||
|
<ul class="license-used-by">
|
||||||
|
{{#each used_by}}
|
||||||
|
<li><a href="{{#if crate.repository}} {{crate.repository}} {{else}} https://crates.io/crates/{{crate.name}} {{/if}}">{{crate.name}} {{crate.version}}</a></li>
|
||||||
|
{{/each}}
|
||||||
|
</ul>
|
||||||
|
<pre class="license-text">{{text}}</pre>
|
||||||
|
</li>
|
||||||
|
{{/each}}
|
||||||
|
</ul>
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
+18
@@ -0,0 +1,18 @@
|
|||||||
|
accepted = [
|
||||||
|
"0BSD",
|
||||||
|
"Apache-2.0",
|
||||||
|
"Apache-2.0 WITH LLVM-exception",
|
||||||
|
"BSD-2-Clause",
|
||||||
|
"BSD-3-Clause",
|
||||||
|
"BSL-1.0",
|
||||||
|
"bzip2-1.0.6",
|
||||||
|
"CC0-1.0",
|
||||||
|
"CDDL-1.0",
|
||||||
|
"CDLA-Permissive-2.0",
|
||||||
|
"ISC",
|
||||||
|
"MIT",
|
||||||
|
"MPL-2.0",
|
||||||
|
"OpenSSL",
|
||||||
|
"Unicode-3.0",
|
||||||
|
"Zlib",
|
||||||
|
]
|
||||||
@@ -14,7 +14,7 @@ Add the following dependency to your `pom.xml`:
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.lancedb</groupId>
|
<groupId>com.lancedb</groupId>
|
||||||
<artifactId>lancedb-core</artifactId>
|
<artifactId>lancedb-core</artifactId>
|
||||||
<version>0.26.0</version>
|
<version>0.26.2</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,71 @@
|
|||||||
|
|
||||||
|
List of third-party dependencies grouped by their license type.
|
||||||
|
|
||||||
|
Apache 2.0:
|
||||||
|
|
||||||
|
* error-prone annotations (com.google.errorprone:error_prone_annotations:2.28.0 - https://errorprone.info/error_prone_annotations)
|
||||||
|
|
||||||
|
Apache License 2.0:
|
||||||
|
|
||||||
|
* JsonNullable Jackson module (org.openapitools:jackson-databind-nullable:0.2.6 - https://github.com/OpenAPITools/jackson-databind-nullable)
|
||||||
|
|
||||||
|
Apache License V2.0:
|
||||||
|
|
||||||
|
* FlatBuffers Java API (com.google.flatbuffers:flatbuffers-java:23.5.26 - https://github.com/google/flatbuffers)
|
||||||
|
|
||||||
|
Apache License, Version 2.0:
|
||||||
|
|
||||||
|
* Apache Commons Codec (commons-codec:commons-codec:1.15 - https://commons.apache.org/proper/commons-codec/)
|
||||||
|
* Apache HttpClient (org.apache.httpcomponents.client5:httpclient5:5.2.1 - https://hc.apache.org/httpcomponents-client-5.0.x/5.2.1/httpclient5/)
|
||||||
|
* Apache HttpComponents Core HTTP/1.1 (org.apache.httpcomponents.core5:httpcore5:5.2 - https://hc.apache.org/httpcomponents-core-5.2.x/5.2/httpcore5/)
|
||||||
|
* Apache HttpComponents Core HTTP/2 (org.apache.httpcomponents.core5:httpcore5-h2:5.2 - https://hc.apache.org/httpcomponents-core-5.2.x/5.2/httpcore5-h2/)
|
||||||
|
* Arrow Format (org.apache.arrow:arrow-format:15.0.0 - https://arrow.apache.org/arrow-format/)
|
||||||
|
* Arrow Java C Data Interface (org.apache.arrow:arrow-c-data:15.0.0 - https://arrow.apache.org/arrow-c-data/)
|
||||||
|
* Arrow Java Dataset (org.apache.arrow:arrow-dataset:15.0.0 - https://arrow.apache.org/arrow-dataset/)
|
||||||
|
* Arrow Memory - Core (org.apache.arrow:arrow-memory-core:15.0.0 - https://arrow.apache.org/arrow-memory/arrow-memory-core/)
|
||||||
|
* Arrow Memory - Netty (org.apache.arrow:arrow-memory-netty:15.0.0 - https://arrow.apache.org/arrow-memory/arrow-memory-netty/)
|
||||||
|
* Arrow Vectors (org.apache.arrow:arrow-vector:15.0.0 - https://arrow.apache.org/arrow-vector/)
|
||||||
|
* Guava: Google Core Libraries for Java (com.google.guava:guava:33.3.1-jre - https://github.com/google/guava)
|
||||||
|
* J2ObjC Annotations (com.google.j2objc:j2objc-annotations:3.0.0 - https://github.com/google/j2objc/)
|
||||||
|
* Netty/Buffer (io.netty:netty-buffer:4.1.104.Final - https://netty.io/netty-buffer/)
|
||||||
|
* Netty/Common (io.netty:netty-common:4.1.104.Final - https://netty.io/netty-common/)
|
||||||
|
|
||||||
|
Apache-2.0:
|
||||||
|
|
||||||
|
* Apache Commons Lang (org.apache.commons:commons-lang3:3.18.0 - https://commons.apache.org/proper/commons-lang/)
|
||||||
|
* lance-namespace-apache-client (org.lance:lance-namespace-apache-client:0.4.5 - https://github.com/openapitools/openapi-generator)
|
||||||
|
* lance-namespace-core (org.lance:lance-namespace-core:0.4.5 - https://lance.org/format/namespace/lance-namespace-core/)
|
||||||
|
|
||||||
|
EDL 1.0:
|
||||||
|
|
||||||
|
* Jakarta Activation API jar (jakarta.activation:jakarta.activation-api:1.2.2 - https://github.com/eclipse-ee4j/jaf/jakarta.activation-api)
|
||||||
|
|
||||||
|
Eclipse Distribution License - v 1.0:
|
||||||
|
|
||||||
|
* Eclipse Collections API (org.eclipse.collections:eclipse-collections-api:11.1.0 - https://github.com/eclipse/eclipse-collections/eclipse-collections-api)
|
||||||
|
* Eclipse Collections Main Library (org.eclipse.collections:eclipse-collections:11.1.0 - https://github.com/eclipse/eclipse-collections/eclipse-collections)
|
||||||
|
* Jakarta XML Binding API (jakarta.xml.bind:jakarta.xml.bind-api:2.3.3 - https://github.com/eclipse-ee4j/jaxb-api/jakarta.xml.bind-api)
|
||||||
|
|
||||||
|
Eclipse Public License - v 1.0:
|
||||||
|
|
||||||
|
* Eclipse Collections API (org.eclipse.collections:eclipse-collections-api:11.1.0 - https://github.com/eclipse/eclipse-collections/eclipse-collections-api)
|
||||||
|
* Eclipse Collections Main Library (org.eclipse.collections:eclipse-collections:11.1.0 - https://github.com/eclipse/eclipse-collections/eclipse-collections)
|
||||||
|
|
||||||
|
The Apache Software License, Version 2.0:
|
||||||
|
|
||||||
|
* FindBugs-jsr305 (com.google.code.findbugs:jsr305:3.0.2 - http://findbugs.sourceforge.net/)
|
||||||
|
* Guava InternalFutureFailureAccess and InternalFutures (com.google.guava:failureaccess:1.0.2 - https://github.com/google/guava/failureaccess)
|
||||||
|
* Guava ListenableFuture only (com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava - https://github.com/google/guava/listenablefuture)
|
||||||
|
* Jackson datatype: JSR310 (com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310)
|
||||||
|
* Jackson module: Old JAXB Annotations (javax.xml.bind) (com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.17.1 - https://github.com/FasterXML/jackson-modules-base)
|
||||||
|
* Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.16.0 - https://github.com/FasterXML/jackson)
|
||||||
|
* Jackson-core (com.fasterxml.jackson.core:jackson-core:2.16.0 - https://github.com/FasterXML/jackson-core)
|
||||||
|
* jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.15.2 - https://github.com/FasterXML/jackson)
|
||||||
|
* Jackson-JAXRS: base (com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.17.1 - https://github.com/FasterXML/jackson-jaxrs-providers/jackson-jaxrs-base)
|
||||||
|
* Jackson-JAXRS: JSON (com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.17.1 - https://github.com/FasterXML/jackson-jaxrs-providers/jackson-jaxrs-json-provider)
|
||||||
|
* JAR JNI Loader (org.questdb:jar-jni:1.1.1 - https://github.com/questdb/rust-maven-plugin)
|
||||||
|
* Lance Core (org.lance:lance-core:2.0.0 - https://lance.org/)
|
||||||
|
|
||||||
|
The MIT License:
|
||||||
|
|
||||||
|
* Checker Qual (org.checkerframework:checker-qual:3.43.0 - https://checkerframework.org/)
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
|
||||||
|
List of third-party dependencies grouped by their license type.
|
||||||
|
|
||||||
|
Apache 2.0:
|
||||||
|
|
||||||
|
* error-prone annotations (com.google.errorprone:error_prone_annotations:2.28.0 - https://errorprone.info/error_prone_annotations)
|
||||||
|
|
||||||
|
Apache License 2.0:
|
||||||
|
|
||||||
|
* JsonNullable Jackson module (org.openapitools:jackson-databind-nullable:0.2.6 - https://github.com/OpenAPITools/jackson-databind-nullable)
|
||||||
|
|
||||||
|
Apache License V2.0:
|
||||||
|
|
||||||
|
* FlatBuffers Java API (com.google.flatbuffers:flatbuffers-java:23.5.26 - https://github.com/google/flatbuffers)
|
||||||
|
|
||||||
|
Apache License, Version 2.0:
|
||||||
|
|
||||||
|
* Apache Commons Codec (commons-codec:commons-codec:1.15 - https://commons.apache.org/proper/commons-codec/)
|
||||||
|
* Apache HttpClient (org.apache.httpcomponents.client5:httpclient5:5.2.1 - https://hc.apache.org/httpcomponents-client-5.0.x/5.2.1/httpclient5/)
|
||||||
|
* Apache HttpComponents Core HTTP/1.1 (org.apache.httpcomponents.core5:httpcore5:5.2 - https://hc.apache.org/httpcomponents-core-5.2.x/5.2/httpcore5/)
|
||||||
|
* Apache HttpComponents Core HTTP/2 (org.apache.httpcomponents.core5:httpcore5-h2:5.2 - https://hc.apache.org/httpcomponents-core-5.2.x/5.2/httpcore5-h2/)
|
||||||
|
* Arrow Format (org.apache.arrow:arrow-format:15.0.0 - https://arrow.apache.org/arrow-format/)
|
||||||
|
* Arrow Java C Data Interface (org.apache.arrow:arrow-c-data:15.0.0 - https://arrow.apache.org/arrow-c-data/)
|
||||||
|
* Arrow Java Dataset (org.apache.arrow:arrow-dataset:15.0.0 - https://arrow.apache.org/arrow-dataset/)
|
||||||
|
* Arrow Memory - Core (org.apache.arrow:arrow-memory-core:15.0.0 - https://arrow.apache.org/arrow-memory/arrow-memory-core/)
|
||||||
|
* Arrow Memory - Netty (org.apache.arrow:arrow-memory-netty:15.0.0 - https://arrow.apache.org/arrow-memory/arrow-memory-netty/)
|
||||||
|
* Arrow Vectors (org.apache.arrow:arrow-vector:15.0.0 - https://arrow.apache.org/arrow-vector/)
|
||||||
|
* Guava: Google Core Libraries for Java (com.google.guava:guava:33.3.1-jre - https://github.com/google/guava)
|
||||||
|
* J2ObjC Annotations (com.google.j2objc:j2objc-annotations:3.0.0 - https://github.com/google/j2objc/)
|
||||||
|
* Netty/Buffer (io.netty:netty-buffer:4.1.104.Final - https://netty.io/netty-buffer/)
|
||||||
|
* Netty/Common (io.netty:netty-common:4.1.104.Final - https://netty.io/netty-common/)
|
||||||
|
|
||||||
|
Apache-2.0:
|
||||||
|
|
||||||
|
* Apache Commons Lang (org.apache.commons:commons-lang3:3.18.0 - https://commons.apache.org/proper/commons-lang/)
|
||||||
|
* lance-namespace-apache-client (org.lance:lance-namespace-apache-client:0.4.5 - https://github.com/openapitools/openapi-generator)
|
||||||
|
* lance-namespace-core (org.lance:lance-namespace-core:0.4.5 - https://lance.org/format/namespace/lance-namespace-core/)
|
||||||
|
|
||||||
|
EDL 1.0:
|
||||||
|
|
||||||
|
* Jakarta Activation API jar (jakarta.activation:jakarta.activation-api:1.2.2 - https://github.com/eclipse-ee4j/jaf/jakarta.activation-api)
|
||||||
|
|
||||||
|
Eclipse Distribution License - v 1.0:
|
||||||
|
|
||||||
|
* Eclipse Collections API (org.eclipse.collections:eclipse-collections-api:11.1.0 - https://github.com/eclipse/eclipse-collections/eclipse-collections-api)
|
||||||
|
* Eclipse Collections Main Library (org.eclipse.collections:eclipse-collections:11.1.0 - https://github.com/eclipse/eclipse-collections/eclipse-collections)
|
||||||
|
* Jakarta XML Binding API (jakarta.xml.bind:jakarta.xml.bind-api:2.3.3 - https://github.com/eclipse-ee4j/jaxb-api/jakarta.xml.bind-api)
|
||||||
|
|
||||||
|
Eclipse Public License - v 1.0:
|
||||||
|
|
||||||
|
* Eclipse Collections API (org.eclipse.collections:eclipse-collections-api:11.1.0 - https://github.com/eclipse/eclipse-collections/eclipse-collections-api)
|
||||||
|
* Eclipse Collections Main Library (org.eclipse.collections:eclipse-collections:11.1.0 - https://github.com/eclipse/eclipse-collections/eclipse-collections)
|
||||||
|
|
||||||
|
The Apache Software License, Version 2.0:
|
||||||
|
|
||||||
|
* FindBugs-jsr305 (com.google.code.findbugs:jsr305:3.0.2 - http://findbugs.sourceforge.net/)
|
||||||
|
* Guava InternalFutureFailureAccess and InternalFutures (com.google.guava:failureaccess:1.0.2 - https://github.com/google/guava/failureaccess)
|
||||||
|
* Guava ListenableFuture only (com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava - https://github.com/google/guava/listenablefuture)
|
||||||
|
* Jackson datatype: JSR310 (com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310)
|
||||||
|
* Jackson module: Old JAXB Annotations (javax.xml.bind) (com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.17.1 - https://github.com/FasterXML/jackson-modules-base)
|
||||||
|
* Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.16.0 - https://github.com/FasterXML/jackson)
|
||||||
|
* Jackson-core (com.fasterxml.jackson.core:jackson-core:2.16.0 - https://github.com/FasterXML/jackson-core)
|
||||||
|
* jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.15.2 - https://github.com/FasterXML/jackson)
|
||||||
|
* Jackson-JAXRS: base (com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.17.1 - https://github.com/FasterXML/jackson-jaxrs-providers/jackson-jaxrs-base)
|
||||||
|
* Jackson-JAXRS: JSON (com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.17.1 - https://github.com/FasterXML/jackson-jaxrs-providers/jackson-jaxrs-json-provider)
|
||||||
|
* JAR JNI Loader (org.questdb:jar-jni:1.1.1 - https://github.com/questdb/rust-maven-plugin)
|
||||||
|
* Lance Core (org.lance:lance-core:2.0.0 - https://lance.org/)
|
||||||
|
|
||||||
|
The MIT License:
|
||||||
|
|
||||||
|
* Checker Qual (org.checkerframework:checker-qual:3.43.0 - https://checkerframework.org/)
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.lancedb</groupId>
|
<groupId>com.lancedb</groupId>
|
||||||
<artifactId>lancedb-parent</artifactId>
|
<artifactId>lancedb-parent</artifactId>
|
||||||
<version>0.26.0-final.0</version>
|
<version>0.26.2-final.0</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
+15
-2
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>com.lancedb</groupId>
|
<groupId>com.lancedb</groupId>
|
||||||
<artifactId>lancedb-parent</artifactId>
|
<artifactId>lancedb-parent</artifactId>
|
||||||
<version>0.26.0-final.0</version>
|
<version>0.26.2-final.0</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<name>${project.artifactId}</name>
|
<name>${project.artifactId}</name>
|
||||||
<description>LanceDB Java SDK Parent POM</description>
|
<description>LanceDB Java SDK Parent POM</description>
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
<properties>
|
<properties>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<arrow.version>15.0.0</arrow.version>
|
<arrow.version>15.0.0</arrow.version>
|
||||||
<lance-core.version>2.0.0</lance-core.version>
|
<lance-core.version>2.0.1-rc.1</lance-core.version>
|
||||||
<spotless.skip>false</spotless.skip>
|
<spotless.skip>false</spotless.skip>
|
||||||
<spotless.version>2.30.0</spotless.version>
|
<spotless.version>2.30.0</spotless.version>
|
||||||
<spotless.java.googlejavaformat.version>1.7</spotless.java.googlejavaformat.version>
|
<spotless.java.googlejavaformat.version>1.7</spotless.java.googlejavaformat.version>
|
||||||
@@ -160,6 +160,19 @@
|
|||||||
<groupId>com.diffplug.spotless</groupId>
|
<groupId>com.diffplug.spotless</groupId>
|
||||||
<artifactId>spotless-maven-plugin</artifactId>
|
<artifactId>spotless-maven-plugin</artifactId>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>license-maven-plugin</artifactId>
|
||||||
|
<version>2.4.0</version>
|
||||||
|
<configuration>
|
||||||
|
<outputDirectory>${project.basedir}</outputDirectory>
|
||||||
|
<thirdPartyFilename>JAVA_THIRD_PARTY_LICENSES.md</thirdPartyFilename>
|
||||||
|
<fileTemplate>/org/codehaus/mojo/license/third-party-file-groupByLicense.ftl</fileTemplate>
|
||||||
|
<includedScopes>compile,runtime</includedScopes>
|
||||||
|
<excludedScopes>test,provided</excludedScopes>
|
||||||
|
<sortArtifactByName>true</sortArtifactByName>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
<pluginManagement>
|
<pluginManagement>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "lancedb-nodejs"
|
name = "lancedb-nodejs"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
version = "0.26.0"
|
version = "0.26.2"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
description.workspace = true
|
description.workspace = true
|
||||||
repository.workspace = true
|
repository.workspace = true
|
||||||
|
|||||||
@@ -0,0 +1,668 @@
|
|||||||
|
[@75lb/deep-merge@1.1.2](https://github.com/75lb/deep-merge) - MIT
|
||||||
|
[@aashutoshrathi/word-wrap@1.2.6](https://github.com/aashutoshrathi/word-wrap) - MIT
|
||||||
|
[@ampproject/remapping@2.2.1](https://github.com/ampproject/remapping) - Apache-2.0
|
||||||
|
[@aws-crypto/crc32@3.0.0](https://github.com/aws/aws-sdk-js-crypto-helpers) - Apache-2.0
|
||||||
|
[@aws-crypto/crc32c@3.0.0](https://github.com/aws/aws-sdk-js-crypto-helpers) - Apache-2.0
|
||||||
|
[@aws-crypto/ie11-detection@3.0.0](https://github.com/aws/aws-sdk-js-crypto-helpers) - Apache-2.0
|
||||||
|
[@aws-crypto/sha1-browser@3.0.0](https://github.com/aws/aws-sdk-js-crypto-helpers) - Apache-2.0
|
||||||
|
[@aws-crypto/sha256-browser@3.0.0](https://github.com/aws/aws-sdk-js-crypto-helpers) - Apache-2.0
|
||||||
|
[@aws-crypto/sha256-browser@5.2.0](https://github.com/aws/aws-sdk-js-crypto-helpers) - Apache-2.0
|
||||||
|
[@aws-crypto/sha256-js@3.0.0](https://github.com/aws/aws-sdk-js-crypto-helpers) - Apache-2.0
|
||||||
|
[@aws-crypto/sha256-js@5.2.0](https://github.com/aws/aws-sdk-js-crypto-helpers) - Apache-2.0
|
||||||
|
[@aws-crypto/supports-web-crypto@3.0.0](https://github.com/aws/aws-sdk-js-crypto-helpers) - Apache-2.0
|
||||||
|
[@aws-crypto/supports-web-crypto@5.2.0](https://github.com/aws/aws-sdk-js-crypto-helpers) - Apache-2.0
|
||||||
|
[@aws-crypto/util@3.0.0](https://github.com/aws/aws-sdk-js-crypto-helpers) - Apache-2.0
|
||||||
|
[@aws-crypto/util@5.2.0](https://github.com/aws/aws-sdk-js-crypto-helpers) - Apache-2.0
|
||||||
|
[@aws-sdk/client-dynamodb@3.602.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/client-kms@3.549.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/client-s3@3.550.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/client-sso-oidc@3.549.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/client-sso-oidc@3.600.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/client-sso@3.549.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/client-sso@3.598.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/client-sts@3.549.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/client-sts@3.600.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/core@3.549.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/core@3.598.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/credential-provider-env@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/credential-provider-env@3.598.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/credential-provider-http@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/credential-provider-http@3.598.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/credential-provider-ini@3.549.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/credential-provider-ini@3.598.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/credential-provider-node@3.549.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/credential-provider-node@3.600.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/credential-provider-process@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/credential-provider-process@3.598.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/credential-provider-sso@3.549.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/credential-provider-sso@3.598.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/credential-provider-web-identity@3.549.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/credential-provider-web-identity@3.598.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/endpoint-cache@3.572.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/middleware-bucket-endpoint@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/middleware-endpoint-discovery@3.598.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/middleware-expect-continue@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/middleware-flexible-checksums@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/middleware-host-header@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/middleware-host-header@3.598.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/middleware-location-constraint@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/middleware-logger@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/middleware-logger@3.598.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/middleware-recursion-detection@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/middleware-recursion-detection@3.598.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/middleware-sdk-s3@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/middleware-signing@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/middleware-ssec@3.537.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/middleware-user-agent@3.540.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/middleware-user-agent@3.598.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/region-config-resolver@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/region-config-resolver@3.598.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/signature-v4-multi-region@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/token-providers@3.549.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/token-providers@3.598.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/types@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/types@3.598.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/util-arn-parser@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/util-endpoints@3.540.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/util-endpoints@3.598.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/util-locate-window@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/util-user-agent-browser@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/util-user-agent-browser@3.598.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/util-user-agent-node@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/util-user-agent-node@3.598.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/util-utf8-browser@3.259.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@aws-sdk/xml-builder@3.535.0](https://github.com/aws/aws-sdk-js-v3) - Apache-2.0
|
||||||
|
[@babel/code-frame@7.26.2](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/compat-data@7.23.5](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/core@7.23.7](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/generator@7.23.6](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/helper-compilation-targets@7.23.6](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/helper-environment-visitor@7.22.20](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/helper-function-name@7.23.0](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/helper-hoist-variables@7.22.5](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/helper-module-imports@7.22.15](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/helper-module-transforms@7.23.3](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/helper-plugin-utils@7.22.5](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/helper-simple-access@7.22.5](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/helper-split-export-declaration@7.22.6](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/helper-string-parser@7.25.9](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/helper-validator-identifier@7.25.9](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/helper-validator-option@7.23.5](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/helpers@7.27.0](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/parser@7.27.0](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/plugin-syntax-async-generators@7.8.4](https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-async-generators) - MIT
|
||||||
|
[@babel/plugin-syntax-bigint@7.8.3](https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-bigint) - MIT
|
||||||
|
[@babel/plugin-syntax-class-properties@7.12.13](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/plugin-syntax-import-meta@7.10.4](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/plugin-syntax-json-strings@7.8.3](https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-json-strings) - MIT
|
||||||
|
[@babel/plugin-syntax-jsx@7.23.3](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/plugin-syntax-logical-assignment-operators@7.10.4](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/plugin-syntax-nullish-coalescing-operator@7.8.3](https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-nullish-coalescing-operator) - MIT
|
||||||
|
[@babel/plugin-syntax-numeric-separator@7.10.4](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/plugin-syntax-object-rest-spread@7.8.3](https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-object-rest-spread) - MIT
|
||||||
|
[@babel/plugin-syntax-optional-catch-binding@7.8.3](https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-optional-catch-binding) - MIT
|
||||||
|
[@babel/plugin-syntax-optional-chaining@7.8.3](https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-optional-chaining) - MIT
|
||||||
|
[@babel/plugin-syntax-top-level-await@7.14.5](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/plugin-syntax-typescript@7.23.3](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/template@7.27.0](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/traverse@7.23.7](https://github.com/babel/babel) - MIT
|
||||||
|
[@babel/types@7.27.0](https://github.com/babel/babel) - MIT
|
||||||
|
[@bcoe/v8-coverage@0.2.3](https://github.com/demurgos/v8-coverage) - MIT
|
||||||
|
[@biomejs/biome@1.8.3](https://github.com/biomejs/biome) - MIT OR Apache-2.0
|
||||||
|
[@biomejs/cli-darwin-arm64@1.8.3](https://github.com/biomejs/biome) - MIT OR Apache-2.0
|
||||||
|
[@eslint-community/eslint-utils@4.4.0](https://github.com/eslint-community/eslint-utils) - MIT
|
||||||
|
[@eslint-community/regexpp@4.10.0](https://github.com/eslint-community/regexpp) - MIT
|
||||||
|
[@eslint/eslintrc@2.1.4](https://github.com/eslint/eslintrc) - MIT
|
||||||
|
[@eslint/js@8.57.0](https://github.com/eslint/eslint) - MIT
|
||||||
|
[@huggingface/jinja@0.3.2](https://github.com/huggingface/huggingface.js) - MIT
|
||||||
|
[@huggingface/transformers@3.0.2](https://github.com/huggingface/transformers.js) - Apache-2.0
|
||||||
|
[@humanwhocodes/config-array@0.11.14](https://github.com/humanwhocodes/config-array) - Apache-2.0
|
||||||
|
[@humanwhocodes/module-importer@1.0.1](https://github.com/humanwhocodes/module-importer) - Apache-2.0
|
||||||
|
[@humanwhocodes/object-schema@2.0.2](https://github.com/humanwhocodes/object-schema) - BSD-3-Clause
|
||||||
|
[@img/sharp-darwin-arm64@0.33.5](https://github.com/lovell/sharp) - Apache-2.0
|
||||||
|
[@img/sharp-libvips-darwin-arm64@1.0.4](https://github.com/lovell/sharp-libvips) - LGPL-3.0-or-later
|
||||||
|
[@isaacs/cliui@8.0.2](https://github.com/yargs/cliui) - ISC
|
||||||
|
[@isaacs/fs-minipass@4.0.1](https://github.com/npm/fs-minipass) - ISC
|
||||||
|
[@istanbuljs/load-nyc-config@1.1.0](https://github.com/istanbuljs/load-nyc-config) - ISC
|
||||||
|
[@istanbuljs/schema@0.1.3](https://github.com/istanbuljs/schema) - MIT
|
||||||
|
[@jest/console@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[@jest/core@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[@jest/environment@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[@jest/expect-utils@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[@jest/expect@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[@jest/fake-timers@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[@jest/globals@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[@jest/reporters@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[@jest/schemas@29.6.3](https://github.com/jestjs/jest) - MIT
|
||||||
|
[@jest/source-map@29.6.3](https://github.com/jestjs/jest) - MIT
|
||||||
|
[@jest/test-result@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[@jest/test-sequencer@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[@jest/transform@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[@jest/types@29.6.3](https://github.com/jestjs/jest) - MIT
|
||||||
|
[@jridgewell/gen-mapping@0.3.3](https://github.com/jridgewell/gen-mapping) - MIT
|
||||||
|
[@jridgewell/resolve-uri@3.1.1](https://github.com/jridgewell/resolve-uri) - MIT
|
||||||
|
[@jridgewell/set-array@1.1.2](https://github.com/jridgewell/set-array) - MIT
|
||||||
|
[@jridgewell/sourcemap-codec@1.4.15](https://github.com/jridgewell/sourcemap-codec) - MIT
|
||||||
|
[@jridgewell/trace-mapping@0.3.22](https://github.com/jridgewell/trace-mapping) - MIT
|
||||||
|
[@lancedb/lancedb@0.26.2](https://github.com/lancedb/lancedb) - Apache-2.0
|
||||||
|
[@napi-rs/cli@2.18.3](https://github.com/napi-rs/napi-rs) - MIT
|
||||||
|
[@nodelib/fs.scandir@2.1.5](https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.scandir) - MIT
|
||||||
|
[@nodelib/fs.stat@2.0.5](https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.stat) - MIT
|
||||||
|
[@nodelib/fs.walk@1.2.8](https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.walk) - MIT
|
||||||
|
[@pkgjs/parseargs@0.11.0](https://github.com/pkgjs/parseargs) - MIT
|
||||||
|
[@protobufjs/aspromise@1.1.2](https://github.com/dcodeIO/protobuf.js) - BSD-3-Clause
|
||||||
|
[@protobufjs/base64@1.1.2](https://github.com/dcodeIO/protobuf.js) - BSD-3-Clause
|
||||||
|
[@protobufjs/codegen@2.0.4](https://github.com/dcodeIO/protobuf.js) - BSD-3-Clause
|
||||||
|
[@protobufjs/eventemitter@1.1.0](https://github.com/dcodeIO/protobuf.js) - BSD-3-Clause
|
||||||
|
[@protobufjs/fetch@1.1.0](https://github.com/dcodeIO/protobuf.js) - BSD-3-Clause
|
||||||
|
[@protobufjs/float@1.0.2](https://github.com/dcodeIO/protobuf.js) - BSD-3-Clause
|
||||||
|
[@protobufjs/inquire@1.1.0](https://github.com/dcodeIO/protobuf.js) - BSD-3-Clause
|
||||||
|
[@protobufjs/path@1.1.2](https://github.com/dcodeIO/protobuf.js) - BSD-3-Clause
|
||||||
|
[@protobufjs/pool@1.1.0](https://github.com/dcodeIO/protobuf.js) - BSD-3-Clause
|
||||||
|
[@protobufjs/utf8@1.1.0](https://github.com/dcodeIO/protobuf.js) - BSD-3-Clause
|
||||||
|
[@shikijs/core@1.10.3](https://github.com/shikijs/shiki) - MIT
|
||||||
|
[@sinclair/typebox@0.27.8](https://github.com/sinclairzx81/typebox) - MIT
|
||||||
|
[@sinonjs/commons@3.0.1](https://github.com/sinonjs/commons) - BSD-3-Clause
|
||||||
|
[@sinonjs/fake-timers@10.3.0](https://github.com/sinonjs/fake-timers) - BSD-3-Clause
|
||||||
|
[@smithy/abort-controller@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/abort-controller@3.1.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/chunked-blob-reader-native@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/chunked-blob-reader@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/config-resolver@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/config-resolver@3.0.3](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/core@1.4.2](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/core@2.2.3](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/credential-provider-imds@2.3.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/credential-provider-imds@3.1.2](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/eventstream-codec@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/eventstream-serde-browser@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/eventstream-serde-config-resolver@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/eventstream-serde-node@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/eventstream-serde-universal@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/fetch-http-handler@2.5.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/fetch-http-handler@3.1.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/hash-blob-browser@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/hash-node@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/hash-node@3.0.2](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/hash-stream-node@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/invalid-dependency@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/invalid-dependency@3.0.2](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/is-array-buffer@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/is-array-buffer@3.0.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/md5-js@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/middleware-content-length@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/middleware-content-length@3.0.2](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/middleware-endpoint@2.5.1](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/middleware-endpoint@3.0.3](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/middleware-retry@2.3.1](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/middleware-retry@3.0.6](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/middleware-serde@2.3.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/middleware-serde@3.0.2](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/middleware-stack@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/middleware-stack@3.0.2](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/node-config-provider@2.3.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/node-config-provider@3.1.2](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/node-http-handler@2.5.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/node-http-handler@3.1.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/property-provider@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/property-provider@3.1.2](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/protocol-http@3.3.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/protocol-http@4.0.2](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/querystring-builder@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/querystring-builder@3.0.2](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/querystring-parser@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/querystring-parser@3.0.2](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/service-error-classification@2.1.5](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/service-error-classification@3.0.2](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/shared-ini-file-loader@2.4.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/shared-ini-file-loader@3.1.2](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/signature-v4@2.2.1](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/signature-v4@3.1.1](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/smithy-client@2.5.1](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/smithy-client@3.1.4](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/types@2.12.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/types@3.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/url-parser@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/url-parser@3.0.2](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-base64@2.3.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-base64@3.0.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-body-length-browser@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-body-length-browser@3.0.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-body-length-node@2.3.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-body-length-node@3.0.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-buffer-from@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-buffer-from@3.0.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-config-provider@2.3.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-config-provider@3.0.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-defaults-mode-browser@2.2.1](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-defaults-mode-browser@3.0.6](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-defaults-mode-node@2.3.1](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-defaults-mode-node@3.0.6](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-endpoints@1.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-endpoints@2.0.3](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-hex-encoding@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-hex-encoding@3.0.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-middleware@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-middleware@3.0.2](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-retry@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-retry@3.0.2](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-stream@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-stream@3.0.4](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-uri-escape@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-uri-escape@3.0.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-utf8@2.3.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-utf8@3.0.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-waiter@2.2.0](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@smithy/util-waiter@3.1.1](https://github.com/awslabs/smithy-typescript) - Apache-2.0
|
||||||
|
[@swc/helpers@0.5.12](https://github.com/swc-project/swc) - Apache-2.0
|
||||||
|
[@types/axios@0.14.0](https://github.com/mzabriskie/axios) - MIT
|
||||||
|
[@types/babel__core@7.20.5](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/babel__generator@7.6.8](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/babel__template@7.4.4](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/babel__traverse@7.20.5](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/command-line-args@5.2.3](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/command-line-usage@5.0.2](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/command-line-usage@5.0.4](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/graceful-fs@4.1.9](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/hast@3.0.4](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/istanbul-lib-coverage@2.0.6](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/istanbul-lib-report@3.0.3](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/istanbul-reports@3.0.4](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/jest@29.5.12](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/json-schema@7.0.15](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/node-fetch@2.6.11](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/node@18.19.26](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/node@20.16.10](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/node@20.17.9](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/node@22.7.4](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/semver@7.5.6](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/stack-utils@2.0.3](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/tmp@0.2.6](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/unist@3.0.2](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/yargs-parser@21.0.3](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@types/yargs@17.0.32](https://github.com/DefinitelyTyped/DefinitelyTyped) - MIT
|
||||||
|
[@typescript-eslint/eslint-plugin@7.1.0](https://github.com/typescript-eslint/typescript-eslint) - MIT
|
||||||
|
[@typescript-eslint/parser@7.1.0](https://github.com/typescript-eslint/typescript-eslint) - BSD-2-Clause
|
||||||
|
[@typescript-eslint/scope-manager@7.1.0](https://github.com/typescript-eslint/typescript-eslint) - MIT
|
||||||
|
[@typescript-eslint/type-utils@7.1.0](https://github.com/typescript-eslint/typescript-eslint) - MIT
|
||||||
|
[@typescript-eslint/types@7.1.0](https://github.com/typescript-eslint/typescript-eslint) - MIT
|
||||||
|
[@typescript-eslint/typescript-estree@7.1.0](https://github.com/typescript-eslint/typescript-eslint) - BSD-2-Clause
|
||||||
|
[@typescript-eslint/utils@7.1.0](https://github.com/typescript-eslint/typescript-eslint) - MIT
|
||||||
|
[@typescript-eslint/visitor-keys@7.1.0](https://github.com/typescript-eslint/typescript-eslint) - MIT
|
||||||
|
[@ungap/structured-clone@1.2.0](https://github.com/ungap/structured-clone) - ISC
|
||||||
|
[abort-controller@3.0.0](https://github.com/mysticatea/abort-controller) - MIT
|
||||||
|
[acorn-jsx@5.3.2](https://github.com/acornjs/acorn-jsx) - MIT
|
||||||
|
[acorn@8.11.3](https://github.com/acornjs/acorn) - MIT
|
||||||
|
[agentkeepalive@4.5.0](https://github.com/node-modules/agentkeepalive) - MIT
|
||||||
|
[ajv@6.12.6](https://github.com/ajv-validator/ajv) - MIT
|
||||||
|
[ansi-escapes@4.3.2](https://github.com/sindresorhus/ansi-escapes) - MIT
|
||||||
|
[ansi-regex@5.0.1](https://github.com/chalk/ansi-regex) - MIT
|
||||||
|
[ansi-regex@6.1.0](https://github.com/chalk/ansi-regex) - MIT
|
||||||
|
[ansi-styles@4.3.0](https://github.com/chalk/ansi-styles) - MIT
|
||||||
|
[ansi-styles@5.2.0](https://github.com/chalk/ansi-styles) - MIT
|
||||||
|
[ansi-styles@6.2.1](https://github.com/chalk/ansi-styles) - MIT
|
||||||
|
[anymatch@3.1.3](https://github.com/micromatch/anymatch) - ISC
|
||||||
|
[apache-arrow@15.0.0](https://github.com/apache/arrow) - Apache-2.0
|
||||||
|
[apache-arrow@16.0.0](https://github.com/apache/arrow) - Apache-2.0
|
||||||
|
[apache-arrow@17.0.0](https://github.com/apache/arrow) - Apache-2.0
|
||||||
|
[apache-arrow@18.0.0](https://github.com/apache/arrow) - Apache-2.0
|
||||||
|
[argparse@1.0.10](https://github.com/nodeca/argparse) - MIT
|
||||||
|
[argparse@2.0.1](https://github.com/nodeca/argparse) - Python-2.0
|
||||||
|
[array-back@3.1.0](https://github.com/75lb/array-back) - MIT
|
||||||
|
[array-back@6.2.2](https://github.com/75lb/array-back) - MIT
|
||||||
|
[array-union@2.1.0](https://github.com/sindresorhus/array-union) - MIT
|
||||||
|
[asynckit@0.4.0](https://github.com/alexindigo/asynckit) - MIT
|
||||||
|
[axios@1.8.4](https://github.com/axios/axios) - MIT
|
||||||
|
[babel-jest@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[babel-plugin-istanbul@6.1.1](https://github.com/istanbuljs/babel-plugin-istanbul) - BSD-3-Clause
|
||||||
|
[babel-plugin-jest-hoist@29.6.3](https://github.com/jestjs/jest) - MIT
|
||||||
|
[babel-preset-current-node-syntax@1.0.1](https://github.com/nicolo-ribaudo/babel-preset-current-node-syntax) - MIT
|
||||||
|
[babel-preset-jest@29.6.3](https://github.com/jestjs/jest) - MIT
|
||||||
|
[balanced-match@1.0.2](https://github.com/juliangruber/balanced-match) - MIT
|
||||||
|
[base-64@0.1.0](https://github.com/mathiasbynens/base64) - MIT
|
||||||
|
[bowser@2.11.0](https://github.com/lancedikson/bowser) - MIT
|
||||||
|
[brace-expansion@1.1.11](https://github.com/juliangruber/brace-expansion) - MIT
|
||||||
|
[brace-expansion@2.0.1](https://github.com/juliangruber/brace-expansion) - MIT
|
||||||
|
[braces@3.0.3](https://github.com/micromatch/braces) - MIT
|
||||||
|
[browserslist@4.22.2](https://github.com/browserslist/browserslist) - MIT
|
||||||
|
[bs-logger@0.2.6](https://github.com/huafu/bs-logger) - MIT
|
||||||
|
[bser@2.1.1](https://github.com/facebook/watchman) - Apache-2.0
|
||||||
|
[buffer-from@1.1.2](https://github.com/LinusU/buffer-from) - MIT
|
||||||
|
[callsites@3.1.0](https://github.com/sindresorhus/callsites) - MIT
|
||||||
|
[camelcase@5.3.1](https://github.com/sindresorhus/camelcase) - MIT
|
||||||
|
[camelcase@6.3.0](https://github.com/sindresorhus/camelcase) - MIT
|
||||||
|
[caniuse-lite@1.0.30001579](https://github.com/browserslist/caniuse-lite) - CC-BY-4.0
|
||||||
|
[chalk-template@0.4.0](https://github.com/chalk/chalk-template) - MIT
|
||||||
|
[chalk@4.1.2](https://github.com/chalk/chalk) - MIT
|
||||||
|
[char-regex@1.0.2](https://github.com/Richienb/char-regex) - MIT
|
||||||
|
[charenc@0.0.2](https://github.com/pvorb/node-charenc) - BSD-3-Clause
|
||||||
|
[chownr@3.0.0](https://github.com/isaacs/chownr) - BlueOak-1.0.0
|
||||||
|
[ci-info@3.9.0](https://github.com/watson/ci-info) - MIT
|
||||||
|
[cjs-module-lexer@1.2.3](https://github.com/nodejs/cjs-module-lexer) - MIT
|
||||||
|
[cliui@8.0.1](https://github.com/yargs/cliui) - ISC
|
||||||
|
[co@4.6.0](https://github.com/tj/co) - MIT
|
||||||
|
[collect-v8-coverage@1.0.2](https://github.com/SimenB/collect-v8-coverage) - MIT
|
||||||
|
[color-convert@2.0.1](https://github.com/Qix-/color-convert) - MIT
|
||||||
|
[color-name@1.1.4](https://github.com/colorjs/color-name) - MIT
|
||||||
|
[color-string@1.9.1](https://github.com/Qix-/color-string) - MIT
|
||||||
|
[color@4.2.3](https://github.com/Qix-/color) - MIT
|
||||||
|
[combined-stream@1.0.8](https://github.com/felixge/node-combined-stream) - MIT
|
||||||
|
[command-line-args@5.2.1](https://github.com/75lb/command-line-args) - MIT
|
||||||
|
[command-line-usage@7.0.1](https://github.com/75lb/command-line-usage) - MIT
|
||||||
|
[concat-map@0.0.1](https://github.com/substack/node-concat-map) - MIT
|
||||||
|
[convert-source-map@2.0.0](https://github.com/thlorenz/convert-source-map) - MIT
|
||||||
|
[create-jest@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[cross-spawn@7.0.6](https://github.com/moxystudio/node-cross-spawn) - MIT
|
||||||
|
[crypt@0.0.2](https://github.com/pvorb/node-crypt) - BSD-3-Clause
|
||||||
|
[debug@4.3.4](https://github.com/debug-js/debug) - MIT
|
||||||
|
[dedent@1.5.1](https://github.com/dmnd/dedent) - MIT
|
||||||
|
[deep-is@0.1.4](https://github.com/thlorenz/deep-is) - MIT
|
||||||
|
[deepmerge@4.3.1](https://github.com/TehShrike/deepmerge) - MIT
|
||||||
|
[delayed-stream@1.0.0](https://github.com/felixge/node-delayed-stream) - MIT
|
||||||
|
[detect-libc@2.0.3](https://github.com/lovell/detect-libc) - Apache-2.0
|
||||||
|
[detect-newline@3.1.0](https://github.com/sindresorhus/detect-newline) - MIT
|
||||||
|
[diff-sequences@29.6.3](https://github.com/jestjs/jest) - MIT
|
||||||
|
[digest-fetch@1.3.0](https://github.com/devfans/digest-fetch) - ISC
|
||||||
|
[dir-glob@3.0.1](https://github.com/kevva/dir-glob) - MIT
|
||||||
|
[doctrine@3.0.0](https://github.com/eslint/doctrine) - Apache-2.0
|
||||||
|
[eastasianwidth@0.2.0](https://github.com/komagata/eastasianwidth) - MIT
|
||||||
|
[electron-to-chromium@1.4.642](https://github.com/kilian/electron-to-chromium) - ISC
|
||||||
|
[emittery@0.13.1](https://github.com/sindresorhus/emittery) - MIT
|
||||||
|
[emoji-regex@8.0.0](https://github.com/mathiasbynens/emoji-regex) - MIT
|
||||||
|
[emoji-regex@9.2.2](https://github.com/mathiasbynens/emoji-regex) - MIT
|
||||||
|
[entities@4.5.0](https://github.com/fb55/entities) - BSD-2-Clause
|
||||||
|
[error-ex@1.3.2](https://github.com/qix-/node-error-ex) - MIT
|
||||||
|
[escalade@3.1.1](https://github.com/lukeed/escalade) - MIT
|
||||||
|
[escape-string-regexp@2.0.0](https://github.com/sindresorhus/escape-string-regexp) - MIT
|
||||||
|
[escape-string-regexp@4.0.0](https://github.com/sindresorhus/escape-string-regexp) - MIT
|
||||||
|
[eslint-scope@7.2.2](https://github.com/eslint/eslint-scope) - BSD-2-Clause
|
||||||
|
[eslint-visitor-keys@3.4.3](https://github.com/eslint/eslint-visitor-keys) - Apache-2.0
|
||||||
|
[eslint@8.57.0](https://github.com/eslint/eslint) - MIT
|
||||||
|
[espree@9.6.1](https://github.com/eslint/espree) - BSD-2-Clause
|
||||||
|
[esprima@4.0.1](https://github.com/jquery/esprima) - BSD-2-Clause
|
||||||
|
[esquery@1.5.0](https://github.com/estools/esquery) - BSD-3-Clause
|
||||||
|
[esrecurse@4.3.0](https://github.com/estools/esrecurse) - BSD-2-Clause
|
||||||
|
[estraverse@5.3.0](https://github.com/estools/estraverse) - BSD-2-Clause
|
||||||
|
[esutils@2.0.3](https://github.com/estools/esutils) - BSD-2-Clause
|
||||||
|
[event-target-shim@5.0.1](https://github.com/mysticatea/event-target-shim) - MIT
|
||||||
|
[execa@5.1.1](https://github.com/sindresorhus/execa) - MIT
|
||||||
|
[exit@0.1.2](https://github.com/cowboy/node-exit) - MIT
|
||||||
|
[expect@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[fast-deep-equal@3.1.3](https://github.com/epoberezkin/fast-deep-equal) - MIT
|
||||||
|
[fast-glob@3.3.2](https://github.com/mrmlnc/fast-glob) - MIT
|
||||||
|
[fast-json-stable-stringify@2.1.0](https://github.com/epoberezkin/fast-json-stable-stringify) - MIT
|
||||||
|
[fast-levenshtein@2.0.6](https://github.com/hiddentao/fast-levenshtein) - MIT
|
||||||
|
[fast-xml-parser@4.2.5](https://github.com/NaturalIntelligence/fast-xml-parser) - MIT
|
||||||
|
[fastq@1.16.0](https://github.com/mcollina/fastq) - ISC
|
||||||
|
[fb-watchman@2.0.2](https://github.com/facebook/watchman) - Apache-2.0
|
||||||
|
[file-entry-cache@6.0.1](https://github.com/royriojas/file-entry-cache) - MIT
|
||||||
|
[fill-range@7.1.1](https://github.com/jonschlinkert/fill-range) - MIT
|
||||||
|
[find-replace@3.0.0](https://github.com/75lb/find-replace) - MIT
|
||||||
|
[find-up@4.1.0](https://github.com/sindresorhus/find-up) - MIT
|
||||||
|
[find-up@5.0.0](https://github.com/sindresorhus/find-up) - MIT
|
||||||
|
[flat-cache@3.2.0](https://github.com/jaredwray/flat-cache) - MIT
|
||||||
|
[flatbuffers@1.12.0](https://github.com/google/flatbuffers) - Apache*
|
||||||
|
[flatbuffers@23.5.26](https://github.com/google/flatbuffers) - Apache*
|
||||||
|
[flatbuffers@24.3.25](https://github.com/google/flatbuffers) - Apache-2.0
|
||||||
|
[flatted@3.2.9](https://github.com/WebReflection/flatted) - ISC
|
||||||
|
[follow-redirects@1.15.6](https://github.com/follow-redirects/follow-redirects) - MIT
|
||||||
|
[foreground-child@3.3.0](https://github.com/tapjs/foreground-child) - ISC
|
||||||
|
[form-data-encoder@1.7.2](https://github.com/octet-stream/form-data-encoder) - MIT
|
||||||
|
[form-data@4.0.0](https://github.com/form-data/form-data) - MIT
|
||||||
|
[formdata-node@4.4.1](https://github.com/octet-stream/form-data) - MIT
|
||||||
|
[fs.realpath@1.0.0](https://github.com/isaacs/fs.realpath) - ISC
|
||||||
|
[fsevents@2.3.3](https://github.com/fsevents/fsevents) - MIT
|
||||||
|
[function-bind@1.1.2](https://github.com/Raynos/function-bind) - MIT
|
||||||
|
[gensync@1.0.0-beta.2](https://github.com/loganfsmyth/gensync) - MIT
|
||||||
|
[get-caller-file@2.0.5](https://github.com/stefanpenner/get-caller-file) - ISC
|
||||||
|
[get-package-type@0.1.0](https://github.com/cfware/get-package-type) - MIT
|
||||||
|
[get-stream@6.0.1](https://github.com/sindresorhus/get-stream) - MIT
|
||||||
|
[glob-parent@5.1.2](https://github.com/gulpjs/glob-parent) - ISC
|
||||||
|
[glob-parent@6.0.2](https://github.com/gulpjs/glob-parent) - ISC
|
||||||
|
[glob@10.4.5](https://github.com/isaacs/node-glob) - ISC
|
||||||
|
[glob@7.2.3](https://github.com/isaacs/node-glob) - ISC
|
||||||
|
[globals@11.12.0](https://github.com/sindresorhus/globals) - MIT
|
||||||
|
[globals@13.24.0](https://github.com/sindresorhus/globals) - MIT
|
||||||
|
[globby@11.1.0](https://github.com/sindresorhus/globby) - MIT
|
||||||
|
[graceful-fs@4.2.11](https://github.com/isaacs/node-graceful-fs) - ISC
|
||||||
|
[graphemer@1.4.0](https://github.com/flmnt/graphemer) - MIT
|
||||||
|
[guid-typescript@1.0.9](https://github.com/NicolasDeveloper/guid-typescript) - ISC
|
||||||
|
[has-flag@4.0.0](https://github.com/sindresorhus/has-flag) - MIT
|
||||||
|
[hasown@2.0.0](https://github.com/inspect-js/hasOwn) - MIT
|
||||||
|
[html-escaper@2.0.2](https://github.com/WebReflection/html-escaper) - MIT
|
||||||
|
[human-signals@2.1.0](https://github.com/ehmicky/human-signals) - Apache-2.0
|
||||||
|
[humanize-ms@1.2.1](https://github.com/node-modules/humanize-ms) - MIT
|
||||||
|
[ignore@5.3.0](https://github.com/kaelzhang/node-ignore) - MIT
|
||||||
|
[import-fresh@3.3.0](https://github.com/sindresorhus/import-fresh) - MIT
|
||||||
|
[import-local@3.1.0](https://github.com/sindresorhus/import-local) - MIT
|
||||||
|
[imurmurhash@0.1.4](https://github.com/jensyt/imurmurhash-js) - MIT
|
||||||
|
[inflight@1.0.6](https://github.com/npm/inflight) - ISC
|
||||||
|
[inherits@2.0.4](https://github.com/isaacs/inherits) - ISC
|
||||||
|
[interpret@1.4.0](https://github.com/gulpjs/interpret) - MIT
|
||||||
|
[is-arrayish@0.2.1](https://github.com/qix-/node-is-arrayish) - MIT
|
||||||
|
[is-arrayish@0.3.2](https://github.com/qix-/node-is-arrayish) - MIT
|
||||||
|
[is-buffer@1.1.6](https://github.com/feross/is-buffer) - MIT
|
||||||
|
[is-core-module@2.13.1](https://github.com/inspect-js/is-core-module) - MIT
|
||||||
|
[is-extglob@2.1.1](https://github.com/jonschlinkert/is-extglob) - MIT
|
||||||
|
[is-fullwidth-code-point@3.0.0](https://github.com/sindresorhus/is-fullwidth-code-point) - MIT
|
||||||
|
[is-generator-fn@2.1.0](https://github.com/sindresorhus/is-generator-fn) - MIT
|
||||||
|
[is-glob@4.0.3](https://github.com/micromatch/is-glob) - MIT
|
||||||
|
[is-number@7.0.0](https://github.com/jonschlinkert/is-number) - MIT
|
||||||
|
[is-path-inside@3.0.3](https://github.com/sindresorhus/is-path-inside) - MIT
|
||||||
|
[is-stream@2.0.1](https://github.com/sindresorhus/is-stream) - MIT
|
||||||
|
[isexe@2.0.0](https://github.com/isaacs/isexe) - ISC
|
||||||
|
[istanbul-lib-coverage@3.2.2](https://github.com/istanbuljs/istanbuljs) - BSD-3-Clause
|
||||||
|
[istanbul-lib-instrument@5.2.1](https://github.com/istanbuljs/istanbuljs) - BSD-3-Clause
|
||||||
|
[istanbul-lib-instrument@6.0.1](https://github.com/istanbuljs/istanbuljs) - BSD-3-Clause
|
||||||
|
[istanbul-lib-report@3.0.1](https://github.com/istanbuljs/istanbuljs) - BSD-3-Clause
|
||||||
|
[istanbul-lib-source-maps@4.0.1](https://github.com/istanbuljs/istanbuljs) - BSD-3-Clause
|
||||||
|
[istanbul-reports@3.1.6](https://github.com/istanbuljs/istanbuljs) - BSD-3-Clause
|
||||||
|
[jackspeak@3.4.3](https://github.com/isaacs/jackspeak) - BlueOak-1.0.0
|
||||||
|
[jest-changed-files@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-circus@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-cli@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-config@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-diff@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-docblock@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-each@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-environment-node@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-get-type@29.6.3](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-haste-map@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-leak-detector@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-matcher-utils@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-message-util@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-mock@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-pnp-resolver@1.2.3](https://github.com/arcanis/jest-pnp-resolver) - MIT
|
||||||
|
[jest-regex-util@29.6.3](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-resolve-dependencies@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-resolve@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-runner@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-runtime@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-snapshot@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-util@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-validate@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-watcher@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest-worker@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[jest@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[js-tokens@4.0.0](https://github.com/lydell/js-tokens) - MIT
|
||||||
|
[js-yaml@3.14.1](https://github.com/nodeca/js-yaml) - MIT
|
||||||
|
[js-yaml@4.1.0](https://github.com/nodeca/js-yaml) - MIT
|
||||||
|
[jsesc@2.5.2](https://github.com/mathiasbynens/jsesc) - MIT
|
||||||
|
[json-bignum@0.0.3](https://github.com/datalanche/json-bignum) - MIT
|
||||||
|
[json-buffer@3.0.1](https://github.com/dominictarr/json-buffer) - MIT
|
||||||
|
[json-parse-even-better-errors@2.3.1](https://github.com/npm/json-parse-even-better-errors) - MIT
|
||||||
|
[json-schema-traverse@0.4.1](https://github.com/epoberezkin/json-schema-traverse) - MIT
|
||||||
|
[json-stable-stringify-without-jsonify@1.0.1](https://github.com/samn/json-stable-stringify) - MIT
|
||||||
|
[json5@2.2.3](https://github.com/json5/json5) - MIT
|
||||||
|
[keyv@4.5.4](https://github.com/jaredwray/keyv) - MIT
|
||||||
|
[kleur@3.0.3](https://github.com/lukeed/kleur) - MIT
|
||||||
|
[leven@3.1.0](https://github.com/sindresorhus/leven) - MIT
|
||||||
|
[levn@0.4.1](https://github.com/gkz/levn) - MIT
|
||||||
|
[lines-and-columns@1.2.4](https://github.com/eventualbuddha/lines-and-columns) - MIT
|
||||||
|
[linkify-it@5.0.0](https://github.com/markdown-it/linkify-it) - MIT
|
||||||
|
[locate-path@5.0.0](https://github.com/sindresorhus/locate-path) - MIT
|
||||||
|
[locate-path@6.0.0](https://github.com/sindresorhus/locate-path) - MIT
|
||||||
|
[lodash.camelcase@4.3.0](https://github.com/lodash/lodash) - MIT
|
||||||
|
[lodash.memoize@4.1.2](https://github.com/lodash/lodash) - MIT
|
||||||
|
[lodash.merge@4.6.2](https://github.com/lodash/lodash) - MIT
|
||||||
|
[lodash@4.17.21](https://github.com/lodash/lodash) - MIT
|
||||||
|
[long@5.2.3](https://github.com/dcodeIO/long.js) - Apache-2.0
|
||||||
|
[lru-cache@10.4.3](https://github.com/isaacs/node-lru-cache) - ISC
|
||||||
|
[lru-cache@5.1.1](https://github.com/isaacs/node-lru-cache) - ISC
|
||||||
|
[lunr@2.3.9](https://github.com/olivernn/lunr.js) - MIT
|
||||||
|
[make-dir@4.0.0](https://github.com/sindresorhus/make-dir) - MIT
|
||||||
|
[make-error@1.3.6](https://github.com/JsCommunity/make-error) - ISC
|
||||||
|
[makeerror@1.0.12](https://github.com/daaku/nodejs-makeerror) - BSD-3-Clause
|
||||||
|
[markdown-it@14.1.0](https://github.com/markdown-it/markdown-it) - MIT
|
||||||
|
[md5@2.3.0](https://github.com/pvorb/node-md5) - BSD-3-Clause
|
||||||
|
[mdurl@2.0.0](https://github.com/markdown-it/mdurl) - MIT
|
||||||
|
[merge-stream@2.0.0](https://github.com/grncdr/merge-stream) - MIT
|
||||||
|
[merge2@1.4.1](https://github.com/teambition/merge2) - MIT
|
||||||
|
[micromatch@4.0.8](https://github.com/micromatch/micromatch) - MIT
|
||||||
|
[mime-db@1.52.0](https://github.com/jshttp/mime-db) - MIT
|
||||||
|
[mime-types@2.1.35](https://github.com/jshttp/mime-types) - MIT
|
||||||
|
[mimic-fn@2.1.0](https://github.com/sindresorhus/mimic-fn) - MIT
|
||||||
|
[minimatch@3.1.2](https://github.com/isaacs/minimatch) - ISC
|
||||||
|
[minimatch@9.0.3](https://github.com/isaacs/minimatch) - ISC
|
||||||
|
[minimatch@9.0.5](https://github.com/isaacs/minimatch) - ISC
|
||||||
|
[minimist@1.2.8](https://github.com/minimistjs/minimist) - MIT
|
||||||
|
[minipass@7.1.2](https://github.com/isaacs/minipass) - ISC
|
||||||
|
[minizlib@3.0.1](https://github.com/isaacs/minizlib) - MIT
|
||||||
|
[mkdirp@3.0.1](https://github.com/isaacs/node-mkdirp) - MIT
|
||||||
|
[mnemonist@0.38.3](https://github.com/yomguithereal/mnemonist) - MIT
|
||||||
|
[ms@2.1.2](https://github.com/zeit/ms) - MIT
|
||||||
|
[ms@2.1.3](https://github.com/vercel/ms) - MIT
|
||||||
|
[natural-compare@1.4.0](https://github.com/litejs/natural-compare-lite) - MIT
|
||||||
|
[node-domexception@1.0.0](https://github.com/jimmywarting/node-domexception) - MIT
|
||||||
|
[node-fetch@2.7.0](https://github.com/bitinn/node-fetch) - MIT
|
||||||
|
[node-int64@0.4.0](https://github.com/broofa/node-int64) - MIT
|
||||||
|
[node-releases@2.0.14](https://github.com/chicoxyzzy/node-releases) - MIT
|
||||||
|
[normalize-path@3.0.0](https://github.com/jonschlinkert/normalize-path) - MIT
|
||||||
|
[npm-run-path@4.0.1](https://github.com/sindresorhus/npm-run-path) - MIT
|
||||||
|
[obliterator@1.6.1](https://github.com/yomguithereal/obliterator) - MIT
|
||||||
|
[once@1.4.0](https://github.com/isaacs/once) - ISC
|
||||||
|
[onetime@5.1.2](https://github.com/sindresorhus/onetime) - MIT
|
||||||
|
[onnxruntime-common@1.19.2](https://github.com/Microsoft/onnxruntime) - MIT
|
||||||
|
[onnxruntime-common@1.20.0-dev.20241016-2b8fc5529b](https://github.com/Microsoft/onnxruntime) - MIT
|
||||||
|
[onnxruntime-node@1.19.2](https://github.com/Microsoft/onnxruntime) - MIT
|
||||||
|
[onnxruntime-web@1.21.0-dev.20241024-d9ca84ef96](https://github.com/Microsoft/onnxruntime) - MIT
|
||||||
|
[openai@4.29.2](https://github.com/openai/openai-node) - Apache-2.0
|
||||||
|
[optionator@0.9.3](https://github.com/gkz/optionator) - MIT
|
||||||
|
[p-limit@2.3.0](https://github.com/sindresorhus/p-limit) - MIT
|
||||||
|
[p-limit@3.1.0](https://github.com/sindresorhus/p-limit) - MIT
|
||||||
|
[p-locate@4.1.0](https://github.com/sindresorhus/p-locate) - MIT
|
||||||
|
[p-locate@5.0.0](https://github.com/sindresorhus/p-locate) - MIT
|
||||||
|
[p-try@2.2.0](https://github.com/sindresorhus/p-try) - MIT
|
||||||
|
[package-json-from-dist@1.0.1](https://github.com/isaacs/package-json-from-dist) - BlueOak-1.0.0
|
||||||
|
[parent-module@1.0.1](https://github.com/sindresorhus/parent-module) - MIT
|
||||||
|
[parse-json@5.2.0](https://github.com/sindresorhus/parse-json) - MIT
|
||||||
|
[path-exists@4.0.0](https://github.com/sindresorhus/path-exists) - MIT
|
||||||
|
[path-is-absolute@1.0.1](https://github.com/sindresorhus/path-is-absolute) - MIT
|
||||||
|
[path-key@3.1.1](https://github.com/sindresorhus/path-key) - MIT
|
||||||
|
[path-parse@1.0.7](https://github.com/jbgutierrez/path-parse) - MIT
|
||||||
|
[path-scurry@1.11.1](https://github.com/isaacs/path-scurry) - BlueOak-1.0.0
|
||||||
|
[path-type@4.0.0](https://github.com/sindresorhus/path-type) - MIT
|
||||||
|
[picocolors@1.0.0](https://github.com/alexeyraspopov/picocolors) - ISC
|
||||||
|
[picomatch@2.3.1](https://github.com/micromatch/picomatch) - MIT
|
||||||
|
[pirates@4.0.6](https://github.com/danez/pirates) - MIT
|
||||||
|
[pkg-dir@4.2.0](https://github.com/sindresorhus/pkg-dir) - MIT
|
||||||
|
[platform@1.3.6](https://github.com/bestiejs/platform.js) - MIT
|
||||||
|
[prelude-ls@1.2.1](https://github.com/gkz/prelude-ls) - MIT
|
||||||
|
[pretty-format@29.7.0](https://github.com/jestjs/jest) - MIT
|
||||||
|
[prompts@2.4.2](https://github.com/terkelg/prompts) - MIT
|
||||||
|
[protobufjs@7.4.0](https://github.com/protobufjs/protobuf.js) - BSD-3-Clause
|
||||||
|
[proxy-from-env@1.1.0](https://github.com/Rob--W/proxy-from-env) - MIT
|
||||||
|
[punycode.js@2.3.1](https://github.com/mathiasbynens/punycode.js) - MIT
|
||||||
|
[punycode@2.3.1](https://github.com/mathiasbynens/punycode.js) - MIT
|
||||||
|
[pure-rand@6.0.4](https://github.com/dubzzz/pure-rand) - MIT
|
||||||
|
[queue-microtask@1.2.3](https://github.com/feross/queue-microtask) - MIT
|
||||||
|
[react-is@18.2.0](https://github.com/facebook/react) - MIT
|
||||||
|
[rechoir@0.6.2](https://github.com/tkellen/node-rechoir) - MIT
|
||||||
|
[reflect-metadata@0.2.2](https://github.com/rbuckton/reflect-metadata) - Apache-2.0
|
||||||
|
[require-directory@2.1.1](https://github.com/troygoode/node-require-directory) - MIT
|
||||||
|
[resolve-cwd@3.0.0](https://github.com/sindresorhus/resolve-cwd) - MIT
|
||||||
|
[resolve-from@4.0.0](https://github.com/sindresorhus/resolve-from) - MIT
|
||||||
|
[resolve-from@5.0.0](https://github.com/sindresorhus/resolve-from) - MIT
|
||||||
|
[resolve.exports@2.0.2](https://github.com/lukeed/resolve.exports) - MIT
|
||||||
|
[resolve@1.22.8](https://github.com/browserify/resolve) - MIT
|
||||||
|
[reusify@1.0.4](https://github.com/mcollina/reusify) - MIT
|
||||||
|
[rimraf@3.0.2](https://github.com/isaacs/rimraf) - ISC
|
||||||
|
[rimraf@5.0.10](https://github.com/isaacs/rimraf) - ISC
|
||||||
|
[run-parallel@1.2.0](https://github.com/feross/run-parallel) - MIT
|
||||||
|
[semver@6.3.1](https://github.com/npm/node-semver) - ISC
|
||||||
|
[semver@7.6.3](https://github.com/npm/node-semver) - ISC
|
||||||
|
[sharp@0.33.5](https://github.com/lovell/sharp) - Apache-2.0
|
||||||
|
[shebang-command@2.0.0](https://github.com/kevva/shebang-command) - MIT
|
||||||
|
[shebang-regex@3.0.0](https://github.com/sindresorhus/shebang-regex) - MIT
|
||||||
|
[shelljs@0.8.5](https://github.com/shelljs/shelljs) - BSD-3-Clause
|
||||||
|
[shiki@1.10.3](https://github.com/shikijs/shiki) - MIT
|
||||||
|
[shx@0.3.4](https://github.com/shelljs/shx) - MIT
|
||||||
|
[signal-exit@3.0.7](https://github.com/tapjs/signal-exit) - ISC
|
||||||
|
[signal-exit@4.1.0](https://github.com/tapjs/signal-exit) - ISC
|
||||||
|
[simple-swizzle@0.2.2](https://github.com/qix-/node-simple-swizzle) - MIT
|
||||||
|
[sisteransi@1.0.5](https://github.com/terkelg/sisteransi) - MIT
|
||||||
|
[slash@3.0.0](https://github.com/sindresorhus/slash) - MIT
|
||||||
|
[source-map-support@0.5.13](https://github.com/evanw/node-source-map-support) - MIT
|
||||||
|
[source-map@0.6.1](https://github.com/mozilla/source-map) - BSD-3-Clause
|
||||||
|
[sprintf-js@1.0.3](https://github.com/alexei/sprintf.js) - BSD-3-Clause
|
||||||
|
[stack-utils@2.0.6](https://github.com/tapjs/stack-utils) - MIT
|
||||||
|
[stream-read-all@3.0.1](https://github.com/75lb/stream-read-all) - MIT
|
||||||
|
[string-length@4.0.2](https://github.com/sindresorhus/string-length) - MIT
|
||||||
|
[string-width@4.2.3](https://github.com/sindresorhus/string-width) - MIT
|
||||||
|
[string-width@5.1.2](https://github.com/sindresorhus/string-width) - MIT
|
||||||
|
[strip-ansi@6.0.1](https://github.com/chalk/strip-ansi) - MIT
|
||||||
|
[strip-ansi@7.1.0](https://github.com/chalk/strip-ansi) - MIT
|
||||||
|
[strip-bom@4.0.0](https://github.com/sindresorhus/strip-bom) - MIT
|
||||||
|
[strip-final-newline@2.0.0](https://github.com/sindresorhus/strip-final-newline) - MIT
|
||||||
|
[strip-json-comments@3.1.1](https://github.com/sindresorhus/strip-json-comments) - MIT
|
||||||
|
[strnum@1.0.5](https://github.com/NaturalIntelligence/strnum) - MIT
|
||||||
|
[supports-color@7.2.0](https://github.com/chalk/supports-color) - MIT
|
||||||
|
[supports-color@8.1.1](https://github.com/chalk/supports-color) - MIT
|
||||||
|
[supports-preserve-symlinks-flag@1.0.0](https://github.com/inspect-js/node-supports-preserve-symlinks-flag) - MIT
|
||||||
|
[table-layout@3.0.2](https://github.com/75lb/table-layout) - MIT
|
||||||
|
[tar@7.4.3](https://github.com/isaacs/node-tar) - ISC
|
||||||
|
[test-exclude@6.0.0](https://github.com/istanbuljs/test-exclude) - ISC
|
||||||
|
[text-table@0.2.0](https://github.com/substack/text-table) - MIT
|
||||||
|
[tmp@0.2.3](https://github.com/raszi/node-tmp) - MIT
|
||||||
|
[tmpl@1.0.5](https://github.com/daaku/nodejs-tmpl) - BSD-3-Clause
|
||||||
|
[to-regex-range@5.0.1](https://github.com/micromatch/to-regex-range) - MIT
|
||||||
|
[tr46@0.0.3](https://github.com/Sebmaster/tr46.js) - MIT
|
||||||
|
[ts-api-utils@1.0.3](https://github.com/JoshuaKGoldberg/ts-api-utils) - MIT
|
||||||
|
[ts-jest@29.1.2](https://github.com/kulshekhar/ts-jest) - MIT
|
||||||
|
[tslib@1.14.1](https://github.com/Microsoft/tslib) - 0BSD
|
||||||
|
[tslib@2.6.2](https://github.com/Microsoft/tslib) - 0BSD
|
||||||
|
[type-check@0.4.0](https://github.com/gkz/type-check) - MIT
|
||||||
|
[type-detect@4.0.8](https://github.com/chaijs/type-detect) - MIT
|
||||||
|
[type-fest@0.20.2](https://github.com/sindresorhus/type-fest) - (MIT OR CC0-1.0)
|
||||||
|
[type-fest@0.21.3](https://github.com/sindresorhus/type-fest) - (MIT OR CC0-1.0)
|
||||||
|
[typedoc-plugin-markdown@4.2.1](https://github.com/typedoc2md/typedoc-plugin-markdown) - MIT
|
||||||
|
[typedoc@0.26.4](https://github.com/TypeStrong/TypeDoc) - Apache-2.0
|
||||||
|
[typescript-eslint@7.1.0](https://github.com/typescript-eslint/typescript-eslint) - MIT
|
||||||
|
[typescript@5.5.4](https://github.com/Microsoft/TypeScript) - Apache-2.0
|
||||||
|
[typical@4.0.0](https://github.com/75lb/typical) - MIT
|
||||||
|
[typical@7.1.1](https://github.com/75lb/typical) - MIT
|
||||||
|
[uc.micro@2.1.0](https://github.com/markdown-it/uc.micro) - MIT
|
||||||
|
[undici-types@5.26.5](https://github.com/nodejs/undici) - MIT
|
||||||
|
[undici-types@6.19.8](https://github.com/nodejs/undici) - MIT
|
||||||
|
[update-browserslist-db@1.0.13](https://github.com/browserslist/update-db) - MIT
|
||||||
|
[uri-js@4.4.1](https://github.com/garycourt/uri-js) - BSD-2-Clause
|
||||||
|
[uuid@9.0.1](https://github.com/uuidjs/uuid) - MIT
|
||||||
|
[v8-to-istanbul@9.2.0](https://github.com/istanbuljs/v8-to-istanbul) - ISC
|
||||||
|
[walker@1.0.8](https://github.com/daaku/nodejs-walker) - Apache-2.0
|
||||||
|
[web-streams-polyfill@3.3.3](https://github.com/MattiasBuelens/web-streams-polyfill) - MIT
|
||||||
|
[web-streams-polyfill@4.0.0-beta.3](https://github.com/MattiasBuelens/web-streams-polyfill) - MIT
|
||||||
|
[webidl-conversions@3.0.1](https://github.com/jsdom/webidl-conversions) - BSD-2-Clause
|
||||||
|
[whatwg-url@5.0.0](https://github.com/jsdom/whatwg-url) - MIT
|
||||||
|
[which@2.0.2](https://github.com/isaacs/node-which) - ISC
|
||||||
|
[wordwrapjs@5.1.0](https://github.com/75lb/wordwrapjs) - MIT
|
||||||
|
[wrap-ansi@7.0.0](https://github.com/chalk/wrap-ansi) - MIT
|
||||||
|
[wrap-ansi@8.1.0](https://github.com/chalk/wrap-ansi) - MIT
|
||||||
|
[wrappy@1.0.2](https://github.com/npm/wrappy) - ISC
|
||||||
|
[write-file-atomic@4.0.2](https://github.com/npm/write-file-atomic) - ISC
|
||||||
|
[y18n@5.0.8](https://github.com/yargs/y18n) - ISC
|
||||||
|
[yallist@3.1.1](https://github.com/isaacs/yallist) - ISC
|
||||||
|
[yallist@5.0.0](https://github.com/isaacs/yallist) - BlueOak-1.0.0
|
||||||
|
[yaml@2.4.5](https://github.com/eemeli/yaml) - ISC
|
||||||
|
[yargs-parser@21.1.1](https://github.com/yargs/yargs-parser) - ISC
|
||||||
|
[yargs@17.7.2](https://github.com/yargs/yargs) - MIT
|
||||||
|
[yocto-queue@0.1.0](https://github.com/sindresorhus/yocto-queue) - MIT
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@lancedb/lancedb-darwin-arm64",
|
"name": "@lancedb/lancedb-darwin-arm64",
|
||||||
"version": "0.26.0",
|
"version": "0.26.2",
|
||||||
"os": ["darwin"],
|
"os": ["darwin"],
|
||||||
"cpu": ["arm64"],
|
"cpu": ["arm64"],
|
||||||
"main": "lancedb.darwin-arm64.node",
|
"main": "lancedb.darwin-arm64.node",
|
||||||
@@ -8,5 +8,9 @@
|
|||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 18"
|
"node": ">= 18"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/lancedb/lancedb"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@lancedb/lancedb-linux-arm64-gnu",
|
"name": "@lancedb/lancedb-linux-arm64-gnu",
|
||||||
"version": "0.26.0",
|
"version": "0.26.2",
|
||||||
"os": ["linux"],
|
"os": ["linux"],
|
||||||
"cpu": ["arm64"],
|
"cpu": ["arm64"],
|
||||||
"main": "lancedb.linux-arm64-gnu.node",
|
"main": "lancedb.linux-arm64-gnu.node",
|
||||||
@@ -9,5 +9,9 @@
|
|||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 18"
|
"node": ">= 18"
|
||||||
},
|
},
|
||||||
"libc": ["glibc"]
|
"libc": ["glibc"],
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/lancedb/lancedb"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@lancedb/lancedb-linux-arm64-musl",
|
"name": "@lancedb/lancedb-linux-arm64-musl",
|
||||||
"version": "0.26.0",
|
"version": "0.26.2",
|
||||||
"os": ["linux"],
|
"os": ["linux"],
|
||||||
"cpu": ["arm64"],
|
"cpu": ["arm64"],
|
||||||
"main": "lancedb.linux-arm64-musl.node",
|
"main": "lancedb.linux-arm64-musl.node",
|
||||||
@@ -9,5 +9,9 @@
|
|||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 18"
|
"node": ">= 18"
|
||||||
},
|
},
|
||||||
"libc": ["musl"]
|
"libc": ["musl"],
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/lancedb/lancedb"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@lancedb/lancedb-linux-x64-gnu",
|
"name": "@lancedb/lancedb-linux-x64-gnu",
|
||||||
"version": "0.26.0",
|
"version": "0.26.2",
|
||||||
"os": ["linux"],
|
"os": ["linux"],
|
||||||
"cpu": ["x64"],
|
"cpu": ["x64"],
|
||||||
"main": "lancedb.linux-x64-gnu.node",
|
"main": "lancedb.linux-x64-gnu.node",
|
||||||
@@ -9,5 +9,9 @@
|
|||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 18"
|
"node": ">= 18"
|
||||||
},
|
},
|
||||||
"libc": ["glibc"]
|
"libc": ["glibc"],
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/lancedb/lancedb"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@lancedb/lancedb-linux-x64-musl",
|
"name": "@lancedb/lancedb-linux-x64-musl",
|
||||||
"version": "0.26.0",
|
"version": "0.26.2",
|
||||||
"os": ["linux"],
|
"os": ["linux"],
|
||||||
"cpu": ["x64"],
|
"cpu": ["x64"],
|
||||||
"main": "lancedb.linux-x64-musl.node",
|
"main": "lancedb.linux-x64-musl.node",
|
||||||
@@ -9,5 +9,9 @@
|
|||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 18"
|
"node": ">= 18"
|
||||||
},
|
},
|
||||||
"libc": ["musl"]
|
"libc": ["musl"],
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/lancedb/lancedb"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@lancedb/lancedb-win32-arm64-msvc",
|
"name": "@lancedb/lancedb-win32-arm64-msvc",
|
||||||
"version": "0.26.0",
|
"version": "0.26.2",
|
||||||
"os": [
|
"os": [
|
||||||
"win32"
|
"win32"
|
||||||
],
|
],
|
||||||
@@ -14,5 +14,9 @@
|
|||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 18"
|
"node": ">= 18"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/lancedb/lancedb"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@lancedb/lancedb-win32-x64-msvc",
|
"name": "@lancedb/lancedb-win32-x64-msvc",
|
||||||
"version": "0.26.0",
|
"version": "0.26.2",
|
||||||
"os": ["win32"],
|
"os": ["win32"],
|
||||||
"cpu": ["x64"],
|
"cpu": ["x64"],
|
||||||
"main": "lancedb.win32-x64-msvc.node",
|
"main": "lancedb.win32-x64-msvc.node",
|
||||||
@@ -8,5 +8,9 @@
|
|||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 18"
|
"node": ">= 18"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/lancedb/lancedb"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "@lancedb/lancedb",
|
"name": "@lancedb/lancedb",
|
||||||
"version": "0.26.0",
|
"version": "0.26.2",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@lancedb/lancedb",
|
"name": "@lancedb/lancedb",
|
||||||
"version": "0.26.0",
|
"version": "0.26.2",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64",
|
"x64",
|
||||||
"arm64"
|
"arm64"
|
||||||
|
|||||||
+5
-1
@@ -11,7 +11,7 @@
|
|||||||
"ann"
|
"ann"
|
||||||
],
|
],
|
||||||
"private": false,
|
"private": false,
|
||||||
"version": "0.26.0",
|
"version": "0.26.2",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./dist/index.js",
|
".": "./dist/index.js",
|
||||||
@@ -36,6 +36,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/lancedb/lancedb"
|
||||||
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@aws-sdk/client-dynamodb": "^3.33.0",
|
"@aws-sdk/client-dynamodb": "^3.33.0",
|
||||||
"@aws-sdk/client-kms": "^3.33.0",
|
"@aws-sdk/client-kms": "^3.33.0",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[tool.bumpversion]
|
[tool.bumpversion]
|
||||||
current_version = "0.29.1"
|
current_version = "0.29.2"
|
||||||
parse = """(?x)
|
parse = """(?x)
|
||||||
(?P<major>0|[1-9]\\d*)\\.
|
(?P<major>0|[1-9]\\d*)\\.
|
||||||
(?P<minor>0|[1-9]\\d*)\\.
|
(?P<minor>0|[1-9]\\d*)\\.
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "lancedb-python"
|
name = "lancedb-python"
|
||||||
version = "0.29.1"
|
version = "0.29.2"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
description = "Python bindings for LanceDB"
|
description = "Python bindings for LanceDB"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -0,0 +1,206 @@
|
|||||||
|
| Name | Version | License | URL |
|
||||||
|
|--------------------------------|-----------------|--------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|
|
||||||
|
| InstructorEmbedding | 1.0.1 | Apache License 2.0 | https://github.com/HKUNLP/instructor-embedding |
|
||||||
|
| Jinja2 | 3.1.6 | BSD License | https://github.com/pallets/jinja/ |
|
||||||
|
| Markdown | 3.10.2 | BSD-3-Clause | https://Python-Markdown.github.io/ |
|
||||||
|
| MarkupSafe | 3.0.3 | BSD-3-Clause | https://github.com/pallets/markupsafe/ |
|
||||||
|
| PyJWT | 2.11.0 | MIT | https://github.com/jpadilla/pyjwt |
|
||||||
|
| PyYAML | 6.0.3 | MIT License | https://pyyaml.org/ |
|
||||||
|
| Pygments | 2.19.2 | BSD License | https://pygments.org |
|
||||||
|
| accelerate | 1.12.0 | Apache Software License | https://github.com/huggingface/accelerate |
|
||||||
|
| adlfs | 2026.2.0 | BSD License | UNKNOWN |
|
||||||
|
| aiohappyeyeballs | 2.6.1 | Python Software Foundation License | https://github.com/aio-libs/aiohappyeyeballs |
|
||||||
|
| aiohttp | 3.13.3 | Apache-2.0 AND MIT | https://github.com/aio-libs/aiohttp |
|
||||||
|
| aiosignal | 1.4.0 | Apache Software License | https://github.com/aio-libs/aiosignal |
|
||||||
|
| annotated-types | 0.7.0 | MIT License | https://github.com/annotated-types/annotated-types |
|
||||||
|
| anyio | 4.12.1 | MIT | https://anyio.readthedocs.io/en/stable/versionhistory.html |
|
||||||
|
| appnope | 0.1.4 | BSD License | http://github.com/minrk/appnope |
|
||||||
|
| asttokens | 3.0.1 | Apache 2.0 | https://github.com/gristlabs/asttokens |
|
||||||
|
| attrs | 25.4.0 | MIT | https://www.attrs.org/en/stable/changelog.html |
|
||||||
|
| awscli | 1.44.35 | Apache Software License | http://aws.amazon.com/cli/ |
|
||||||
|
| azure-core | 1.38.0 | MIT License | https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/core/azure-core |
|
||||||
|
| azure-datalake-store | 0.0.53 | MIT License | https://github.com/Azure/azure-data-lake-store-python |
|
||||||
|
| azure-identity | 1.25.1 | MIT | https://github.com/Azure/azure-sdk-for-python |
|
||||||
|
| azure-storage-blob | 12.28.0 | MIT License | https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/storage/azure-storage-blob |
|
||||||
|
| babel | 2.18.0 | BSD License | https://babel.pocoo.org/ |
|
||||||
|
| backrefs | 6.1 | MIT | https://github.com/facelessuser/backrefs |
|
||||||
|
| beautifulsoup4 | 4.14.3 | MIT License | https://www.crummy.com/software/BeautifulSoup/bs4/ |
|
||||||
|
| bleach | 6.3.0 | Apache Software License | https://github.com/mozilla/bleach |
|
||||||
|
| boto3 | 1.42.45 | Apache-2.0 | https://github.com/boto/boto3 |
|
||||||
|
| botocore | 1.42.45 | Apache-2.0 | https://github.com/boto/botocore |
|
||||||
|
| cachetools | 7.0.0 | MIT | https://github.com/tkem/cachetools/ |
|
||||||
|
| certifi | 2026.1.4 | Mozilla Public License 2.0 (MPL 2.0) | https://github.com/certifi/python-certifi |
|
||||||
|
| cffi | 2.0.0 | MIT | https://cffi.readthedocs.io/en/latest/whatsnew.html |
|
||||||
|
| cfgv | 3.5.0 | MIT | https://github.com/asottile/cfgv |
|
||||||
|
| charset-normalizer | 3.4.4 | MIT | https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md |
|
||||||
|
| click | 8.3.1 | BSD-3-Clause | https://github.com/pallets/click/ |
|
||||||
|
| cohere | 5.20.4 | MIT License | https://github.com/cohere-ai/cohere-python |
|
||||||
|
| colorama | 0.4.6 | BSD License | https://github.com/tartley/colorama |
|
||||||
|
| colpali_engine | 0.3.13 | MIT License | https://github.com/illuin-tech/colpali |
|
||||||
|
| comm | 0.2.3 | BSD License | https://github.com/ipython/comm |
|
||||||
|
| cryptography | 46.0.4 | Apache-2.0 OR BSD-3-Clause | https://github.com/pyca/cryptography |
|
||||||
|
| datafusion | 51.0.0 | Apache Software License | https://datafusion.apache.org/python |
|
||||||
|
| debugpy | 1.8.20 | MIT License | https://aka.ms/debugpy |
|
||||||
|
| decorator | 5.2.1 | BSD License | UNKNOWN |
|
||||||
|
| defusedxml | 0.7.1 | Python Software Foundation License | https://github.com/tiran/defusedxml |
|
||||||
|
| deprecation | 2.1.0 | Apache Software License | http://deprecation.readthedocs.io/ |
|
||||||
|
| distlib | 0.4.0 | Python Software Foundation License | https://github.com/pypa/distlib |
|
||||||
|
| distro | 1.9.0 | Apache Software License | https://github.com/python-distro/distro |
|
||||||
|
| docutils | 0.19 | BSD License; GNU General Public License (GPL); Public Domain; Python Software Foundation License | https://docutils.sourceforge.io/ |
|
||||||
|
| duckdb | 1.4.4 | MIT License | https://github.com/duckdb/duckdb-python |
|
||||||
|
| executing | 2.2.1 | MIT License | https://github.com/alexmojaki/executing |
|
||||||
|
| fastavro | 1.12.1 | MIT | https://github.com/fastavro/fastavro |
|
||||||
|
| fastjsonschema | 2.21.2 | BSD License | https://github.com/horejsek/python-fastjsonschema |
|
||||||
|
| filelock | 3.20.3 | Unlicense | https://github.com/tox-dev/py-filelock |
|
||||||
|
| frozenlist | 1.8.0 | Apache-2.0 | https://github.com/aio-libs/frozenlist |
|
||||||
|
| fsspec | 2026.2.0 | BSD-3-Clause | https://github.com/fsspec/filesystem_spec |
|
||||||
|
| ftfy | 6.3.1 | Apache-2.0 | https://ftfy.readthedocs.io/en/latest/ |
|
||||||
|
| ghp-import | 2.1.0 | Apache Software License | https://github.com/c-w/ghp-import |
|
||||||
|
| google-ai-generativelanguage | 0.6.15 | Apache Software License | https://github.com/googleapis/google-cloud-python/tree/main/packages/google-ai-generativelanguage |
|
||||||
|
| google-api-core | 2.25.2 | Apache Software License | https://github.com/googleapis/python-api-core |
|
||||||
|
| google-api-python-client | 2.189.0 | Apache Software License | https://github.com/googleapis/google-api-python-client/ |
|
||||||
|
| google-auth | 2.48.0 | Apache Software License | https://github.com/googleapis/google-auth-library-python |
|
||||||
|
| google-auth-httplib2 | 0.3.0 | Apache Software License | https://github.com/GoogleCloudPlatform/google-auth-library-python-httplib2 |
|
||||||
|
| google-generativeai | 0.8.6 | Apache Software License | https://github.com/google/generative-ai-python |
|
||||||
|
| googleapis-common-protos | 1.72.0 | Apache Software License | https://github.com/googleapis/google-cloud-python/tree/main/packages/googleapis-common-protos |
|
||||||
|
| griffe | 2.0.0 | ISC | https://mkdocstrings.github.io/griffe |
|
||||||
|
| griffecli | 2.0.0 | ISC | UNKNOWN |
|
||||||
|
| griffelib | 2.0.0 | ISC | UNKNOWN |
|
||||||
|
| grpcio | 1.78.0 | Apache-2.0 | https://grpc.io |
|
||||||
|
| grpcio-status | 1.71.2 | Apache Software License | https://grpc.io |
|
||||||
|
| h11 | 0.16.0 | MIT License | https://github.com/python-hyper/h11 |
|
||||||
|
| hf-xet | 1.2.0 | Apache-2.0 | https://github.com/huggingface/xet-core |
|
||||||
|
| httpcore | 1.0.9 | BSD-3-Clause | https://www.encode.io/httpcore/ |
|
||||||
|
| httplib2 | 0.31.2 | MIT License | https://github.com/httplib2/httplib2 |
|
||||||
|
| httpx | 0.28.1 | BSD License | https://github.com/encode/httpx |
|
||||||
|
| huggingface_hub | 0.36.2 | Apache Software License | https://github.com/huggingface/huggingface_hub |
|
||||||
|
| ibm-cos-sdk | 2.14.3 | Apache Software License | https://github.com/ibm/ibm-cos-sdk-python |
|
||||||
|
| ibm-cos-sdk-core | 2.14.3 | Apache Software License | https://github.com/ibm/ibm-cos-sdk-python-core |
|
||||||
|
| ibm-cos-sdk-s3transfer | 2.14.3 | Apache Software License | https://github.com/IBM/ibm-cos-sdk-python-s3transfer |
|
||||||
|
| ibm_watsonx_ai | 1.5.1 | BSD License | https://ibm.github.io/watsonx-ai-python-sdk/changelog.html |
|
||||||
|
| identify | 2.6.16 | MIT | https://github.com/pre-commit/identify |
|
||||||
|
| idna | 3.11 | BSD-3-Clause | https://github.com/kjd/idna |
|
||||||
|
| iniconfig | 2.3.0 | MIT | https://github.com/pytest-dev/iniconfig |
|
||||||
|
| ipykernel | 6.31.0 | BSD-3-Clause | https://ipython.org |
|
||||||
|
| ipython | 9.10.0 | BSD-3-Clause | https://ipython.org |
|
||||||
|
| ipython_pygments_lexers | 1.1.1 | BSD License | https://github.com/ipython/ipython-pygments-lexers |
|
||||||
|
| isodate | 0.7.2 | BSD License | https://github.com/gweis/isodate/ |
|
||||||
|
| jedi | 0.19.2 | MIT License | https://github.com/davidhalter/jedi |
|
||||||
|
| jiter | 0.13.0 | MIT License | https://github.com/pydantic/jiter/ |
|
||||||
|
| jmespath | 1.0.1 | MIT License | https://github.com/jmespath/jmespath.py |
|
||||||
|
| joblib | 1.5.3 | BSD-3-Clause | https://joblib.readthedocs.io |
|
||||||
|
| jsonschema | 4.26.0 | MIT | https://github.com/python-jsonschema/jsonschema |
|
||||||
|
| jsonschema-specifications | 2025.9.1 | MIT | https://github.com/python-jsonschema/jsonschema-specifications |
|
||||||
|
| jupyter_client | 8.8.0 | BSD License | https://jupyter.org |
|
||||||
|
| jupyter_core | 5.9.1 | BSD-3-Clause | https://jupyter.org |
|
||||||
|
| jupyterlab_pygments | 0.3.0 | BSD License | https://github.com/jupyterlab/jupyterlab_pygments |
|
||||||
|
| jupytext | 1.19.1 | MIT License | https://github.com/mwouts/jupytext |
|
||||||
|
| lance-namespace | 0.4.5 | Apache-2.0 | https://github.com/lance-format/lance-namespace |
|
||||||
|
| lance-namespace-urllib3-client | 0.4.5 | Apache-2.0 | https://github.com/lance-format/lance-namespace |
|
||||||
|
| lancedb | 0.29.2 | Apache Software License | https://github.com/lancedb/lancedb |
|
||||||
|
| lomond | 0.3.3 | BSD License | https://github.com/wildfoundry/dataplicity-lomond |
|
||||||
|
| markdown-it-py | 4.0.0 | MIT License | https://github.com/executablebooks/markdown-it-py |
|
||||||
|
| matplotlib-inline | 0.2.1 | UNKNOWN | https://github.com/ipython/matplotlib-inline |
|
||||||
|
| mdit-py-plugins | 0.5.0 | MIT License | https://github.com/executablebooks/mdit-py-plugins |
|
||||||
|
| mdurl | 0.1.2 | MIT License | https://github.com/executablebooks/mdurl |
|
||||||
|
| mergedeep | 1.3.4 | MIT License | https://github.com/clarketm/mergedeep |
|
||||||
|
| mistune | 3.2.0 | BSD License | https://github.com/lepture/mistune |
|
||||||
|
| mkdocs | 1.6.1 | BSD-2-Clause | https://github.com/mkdocs/mkdocs |
|
||||||
|
| mkdocs-autorefs | 1.4.3 | ISC | https://mkdocstrings.github.io/autorefs |
|
||||||
|
| mkdocs-get-deps | 0.2.0 | MIT | https://github.com/mkdocs/get-deps |
|
||||||
|
| mkdocs-jupyter | 0.25.1 | Apache-2.0 | https://github.com/danielfrg/mkdocs-jupyter |
|
||||||
|
| mkdocs-material | 9.7.1 | MIT | https://github.com/squidfunk/mkdocs-material |
|
||||||
|
| mkdocs-material-extensions | 1.3.1 | MIT | https://github.com/facelessuser/mkdocs-material-extensions |
|
||||||
|
| mkdocstrings | 1.0.3 | ISC | https://mkdocstrings.github.io |
|
||||||
|
| mkdocstrings-python | 2.0.2 | ISC | https://mkdocstrings.github.io/python |
|
||||||
|
| mpmath | 1.3.0 | BSD License | http://mpmath.org/ |
|
||||||
|
| msal | 1.34.0 | MIT License | https://github.com/AzureAD/microsoft-authentication-library-for-python |
|
||||||
|
| msal-extensions | 1.3.1 | MIT License | https://github.com/AzureAD/microsoft-authentication-extensions-for-python/releases |
|
||||||
|
| multidict | 6.7.1 | Apache License 2.0 | https://github.com/aio-libs/multidict |
|
||||||
|
| nbclient | 0.10.4 | BSD License | https://jupyter.org |
|
||||||
|
| nbconvert | 7.17.0 | BSD License | https://jupyter.org |
|
||||||
|
| nbformat | 5.10.4 | BSD License | https://jupyter.org |
|
||||||
|
| nest-asyncio | 1.6.0 | BSD License | https://github.com/erdewit/nest_asyncio |
|
||||||
|
| networkx | 3.6.1 | BSD-3-Clause | https://networkx.org/ |
|
||||||
|
| nodeenv | 1.10.0 | BSD License | https://github.com/ekalinin/nodeenv |
|
||||||
|
| numpy | 2.4.2 | BSD-3-Clause AND 0BSD AND MIT AND Zlib AND CC0-1.0 | https://numpy.org |
|
||||||
|
| ollama | 0.6.1 | MIT | https://ollama.com |
|
||||||
|
| open_clip_torch | 3.2.0 | MIT License | https://github.com/mlfoundations/open_clip |
|
||||||
|
| openai | 2.18.0 | Apache Software License | https://github.com/openai/openai-python |
|
||||||
|
| packaging | 26.0 | Apache-2.0 OR BSD-2-Clause | https://github.com/pypa/packaging |
|
||||||
|
| paginate | 0.5.7 | MIT License | https://github.com/Signum/paginate |
|
||||||
|
| pandas | 2.3.3 | BSD License | https://pandas.pydata.org |
|
||||||
|
| pandocfilters | 1.5.1 | BSD License | http://github.com/jgm/pandocfilters |
|
||||||
|
| parso | 0.8.6 | MIT License | https://github.com/davidhalter/parso |
|
||||||
|
| pathspec | 1.0.4 | Mozilla Public License 2.0 (MPL 2.0) | UNKNOWN |
|
||||||
|
| peft | 0.17.1 | Apache Software License | https://github.com/huggingface/peft |
|
||||||
|
| pexpect | 4.9.0 | ISC License (ISCL) | https://pexpect.readthedocs.io/ |
|
||||||
|
| pillow | 12.1.0 | MIT-CMU | https://python-pillow.github.io |
|
||||||
|
| platformdirs | 4.5.1 | MIT | https://github.com/tox-dev/platformdirs |
|
||||||
|
| pluggy | 1.6.0 | MIT License | UNKNOWN |
|
||||||
|
| polars | 1.3.0 | MIT License | https://www.pola.rs/ |
|
||||||
|
| pre_commit | 4.5.1 | MIT | https://github.com/pre-commit/pre-commit |
|
||||||
|
| prompt_toolkit | 3.0.52 | BSD License | https://github.com/prompt-toolkit/python-prompt-toolkit |
|
||||||
|
| propcache | 0.4.1 | Apache Software License | https://github.com/aio-libs/propcache |
|
||||||
|
| proto-plus | 1.27.1 | Apache Software License | https://github.com/googleapis/proto-plus-python |
|
||||||
|
| protobuf | 5.29.6 | 3-Clause BSD License | https://developers.google.com/protocol-buffers/ |
|
||||||
|
| psutil | 7.2.2 | BSD-3-Clause | https://github.com/giampaolo/psutil |
|
||||||
|
| ptyprocess | 0.7.0 | ISC License (ISCL) | https://github.com/pexpect/ptyprocess |
|
||||||
|
| pure_eval | 0.2.3 | MIT License | http://github.com/alexmojaki/pure_eval |
|
||||||
|
| pyarrow | 23.0.0 | Apache-2.0 | https://arrow.apache.org/ |
|
||||||
|
| pyarrow-stubs | 20.0.0.20251215 | BSD-2-Clause | https://github.com/zen-xu/pyarrow-stubs |
|
||||||
|
| pyasn1 | 0.6.2 | BSD-2-Clause | https://github.com/pyasn1/pyasn1 |
|
||||||
|
| pyasn1_modules | 0.4.2 | BSD License | https://github.com/pyasn1/pyasn1-modules |
|
||||||
|
| pycparser | 3.0 | BSD-3-Clause | https://github.com/eliben/pycparser |
|
||||||
|
| pydantic | 2.12.5 | MIT | https://github.com/pydantic/pydantic |
|
||||||
|
| pydantic_core | 2.41.5 | MIT | https://github.com/pydantic/pydantic-core |
|
||||||
|
| pylance | 2.0.0 | Apache Software License | UNKNOWN |
|
||||||
|
| pymdown-extensions | 10.20.1 | MIT | https://github.com/facelessuser/pymdown-extensions |
|
||||||
|
| pyparsing | 3.3.2 | MIT | https://github.com/pyparsing/pyparsing/ |
|
||||||
|
| pyright | 1.1.408 | MIT | https://github.com/RobertCraigie/pyright-python |
|
||||||
|
| pytest | 9.0.2 | MIT | https://docs.pytest.org/en/latest/ |
|
||||||
|
| pytest-asyncio | 1.3.0 | Apache-2.0 | https://github.com/pytest-dev/pytest-asyncio |
|
||||||
|
| pytest-mock | 3.15.1 | MIT License | https://github.com/pytest-dev/pytest-mock/ |
|
||||||
|
| python-dateutil | 2.9.0.post0 | Apache Software License; BSD License | https://github.com/dateutil/dateutil |
|
||||||
|
| pytz | 2025.2 | MIT License | http://pythonhosted.org/pytz |
|
||||||
|
| pyyaml_env_tag | 1.1 | MIT | https://github.com/waylan/pyyaml-env-tag |
|
||||||
|
| pyzmq | 27.1.0 | BSD License | https://pyzmq.readthedocs.org |
|
||||||
|
| referencing | 0.37.0 | MIT | https://github.com/python-jsonschema/referencing |
|
||||||
|
| regex | 2026.1.15 | Apache-2.0 AND CNRI-Python | https://github.com/mrabarnett/mrab-regex |
|
||||||
|
| requests | 2.32.5 | Apache Software License | https://requests.readthedocs.io |
|
||||||
|
| rpds-py | 0.30.0 | MIT | https://github.com/crate-py/rpds |
|
||||||
|
| rsa | 4.7.2 | Apache Software License | https://stuvel.eu/rsa |
|
||||||
|
| ruff | 0.15.0 | MIT License | https://docs.astral.sh/ruff |
|
||||||
|
| s3transfer | 0.16.0 | Apache Software License | https://github.com/boto/s3transfer |
|
||||||
|
| safetensors | 0.7.0 | Apache Software License | https://github.com/huggingface/safetensors |
|
||||||
|
| scikit-learn | 1.8.0 | BSD-3-Clause | https://scikit-learn.org |
|
||||||
|
| scipy | 1.17.0 | BSD License | https://scipy.org/ |
|
||||||
|
| sentence-transformers | 5.2.2 | Apache Software License | https://www.SBERT.net |
|
||||||
|
| sentencepiece | 0.2.1 | UNKNOWN | https://github.com/google/sentencepiece |
|
||||||
|
| six | 1.17.0 | MIT License | https://github.com/benjaminp/six |
|
||||||
|
| sniffio | 1.3.1 | Apache Software License; MIT License | https://github.com/python-trio/sniffio |
|
||||||
|
| soupsieve | 2.8.3 | MIT | https://github.com/facelessuser/soupsieve |
|
||||||
|
| stack-data | 0.6.3 | MIT License | http://github.com/alexmojaki/stack_data |
|
||||||
|
| sympy | 1.14.0 | BSD License | https://sympy.org |
|
||||||
|
| tabulate | 0.9.0 | MIT License | https://github.com/astanin/python-tabulate |
|
||||||
|
| tantivy | 0.25.1 | UNKNOWN | UNKNOWN |
|
||||||
|
| threadpoolctl | 3.6.0 | BSD License | https://github.com/joblib/threadpoolctl |
|
||||||
|
| timm | 1.0.24 | Apache Software License | https://github.com/huggingface/pytorch-image-models |
|
||||||
|
| tinycss2 | 1.4.0 | BSD License | https://www.courtbouillon.org/tinycss2 |
|
||||||
|
| tokenizers | 0.22.2 | Apache Software License | https://github.com/huggingface/tokenizers |
|
||||||
|
| torch | 2.8.0 | BSD License | https://pytorch.org/ |
|
||||||
|
| torchvision | 0.23.0 | BSD | https://github.com/pytorch/vision |
|
||||||
|
| tornado | 6.5.4 | Apache Software License | http://www.tornadoweb.org/ |
|
||||||
|
| tqdm | 4.67.3 | MPL-2.0 AND MIT | https://tqdm.github.io |
|
||||||
|
| traitlets | 5.14.3 | BSD License | https://github.com/ipython/traitlets |
|
||||||
|
| transformers | 4.57.6 | Apache Software License | https://github.com/huggingface/transformers |
|
||||||
|
| types-requests | 2.32.4.20260107 | Apache-2.0 | https://github.com/python/typeshed |
|
||||||
|
| typing-inspection | 0.4.2 | MIT | https://github.com/pydantic/typing-inspection |
|
||||||
|
| typing_extensions | 4.15.0 | PSF-2.0 | https://github.com/python/typing_extensions |
|
||||||
|
| tzdata | 2025.3 | Apache-2.0 | https://github.com/python/tzdata |
|
||||||
|
| uritemplate | 4.2.0 | BSD 3-Clause OR Apache-2.0 | https://uritemplate.readthedocs.org |
|
||||||
|
| urllib3 | 2.6.3 | MIT | https://github.com/urllib3/urllib3/blob/main/CHANGES.rst |
|
||||||
|
| virtualenv | 20.36.1 | MIT | https://github.com/pypa/virtualenv |
|
||||||
|
| watchdog | 6.0.0 | Apache Software License | https://github.com/gorakhargosh/watchdog |
|
||||||
|
| webencodings | 0.5.1 | BSD License | https://github.com/SimonSapin/python-webencodings |
|
||||||
|
| yarl | 1.22.0 | Apache Software License | https://github.com/aio-libs/yarl |
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -746,15 +746,20 @@ class Permutation:
|
|||||||
|
|
||||||
def __getitem__(self, index: int) -> Any:
|
def __getitem__(self, index: int) -> Any:
|
||||||
"""
|
"""
|
||||||
Return a single row from the permutation
|
Returns a single row from the permutation by offset
|
||||||
|
|
||||||
The output will always be a python dictionary regardless of the format.
|
|
||||||
|
|
||||||
This method is mostly useful for debugging and exploration. For actual
|
|
||||||
processing use [iter](#iter) or a torch data loader to perform batched
|
|
||||||
processing.
|
|
||||||
"""
|
"""
|
||||||
pass
|
return self.__getitems__([index])
|
||||||
|
|
||||||
|
def __getitems__(self, indices: list[int]) -> Any:
|
||||||
|
"""
|
||||||
|
Returns rows from the permutation by offset
|
||||||
|
"""
|
||||||
|
|
||||||
|
async def do_getitems():
|
||||||
|
return await self.reader.take_offsets(indices, selection=self.selection)
|
||||||
|
|
||||||
|
batch = LOOP.run(do_getitems())
|
||||||
|
return self.transform_fn(batch)
|
||||||
|
|
||||||
@deprecated(details="Use with_skip instead")
|
@deprecated(details="Use with_skip instead")
|
||||||
def skip(self, skip: int) -> "Permutation":
|
def skip(self, skip: int) -> "Permutation":
|
||||||
|
|||||||
@@ -2118,19 +2118,17 @@ class LanceHybridQueryBuilder(LanceQueryBuilder):
|
|||||||
""" # noqa: E501
|
""" # noqa: E501
|
||||||
self._create_query_builders()
|
self._create_query_builders()
|
||||||
|
|
||||||
results = ["Vector Search Plan:"]
|
reranker_label = str(self._reranker) if self._reranker else "No reranker"
|
||||||
results.append(
|
vector_plan = self._table._explain_plan(
|
||||||
self._table._explain_plan(
|
self._vector_query.to_query_object(), verbose=verbose
|
||||||
self._vector_query.to_query_object(), verbose=verbose
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
results.append("FTS Search Plan:")
|
fts_plan = self._table._explain_plan(
|
||||||
results.append(
|
self._fts_query.to_query_object(), verbose=verbose
|
||||||
self._table._explain_plan(
|
|
||||||
self._fts_query.to_query_object(), verbose=verbose
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
return "\n".join(results)
|
# Indent sub-plans under the reranker
|
||||||
|
indented_vector = "\n".join(" " + line for line in vector_plan.splitlines())
|
||||||
|
indented_fts = "\n".join(" " + line for line in fts_plan.splitlines())
|
||||||
|
return f"{reranker_label}\n {indented_vector}\n {indented_fts}"
|
||||||
|
|
||||||
def analyze_plan(self):
|
def analyze_plan(self):
|
||||||
"""Execute the query and display with runtime metrics.
|
"""Execute the query and display with runtime metrics.
|
||||||
@@ -3164,23 +3162,20 @@ class AsyncHybridQuery(AsyncStandardQuery, AsyncVectorQueryBase):
|
|||||||
... plan = await table.query().nearest_to([1.0, 2.0]).nearest_to_text("hello").explain_plan(True)
|
... plan = await table.query().nearest_to([1.0, 2.0]).nearest_to_text("hello").explain_plan(True)
|
||||||
... print(plan)
|
... print(plan)
|
||||||
>>> asyncio.run(doctest_example()) # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
|
>>> asyncio.run(doctest_example()) # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
|
||||||
Vector Search Plan:
|
RRFReranker(K=60)
|
||||||
ProjectionExec: expr=[vector@0 as vector, text@3 as text, _distance@2 as _distance]
|
ProjectionExec: expr=[vector@0 as vector, text@3 as text, _distance@2 as _distance]
|
||||||
Take: columns="vector, _rowid, _distance, (text)"
|
Take: columns="vector, _rowid, _distance, (text)"
|
||||||
CoalesceBatchesExec: target_batch_size=1024
|
CoalesceBatchesExec: target_batch_size=1024
|
||||||
GlobalLimitExec: skip=0, fetch=10
|
GlobalLimitExec: skip=0, fetch=10
|
||||||
FilterExec: _distance@2 IS NOT NULL
|
FilterExec: _distance@2 IS NOT NULL
|
||||||
SortExec: TopK(fetch=10), expr=[_distance@2 ASC NULLS LAST, _rowid@1 ASC NULLS LAST], preserve_partitioning=[false]
|
SortExec: TopK(fetch=10), expr=[_distance@2 ASC NULLS LAST, _rowid@1 ASC NULLS LAST], preserve_partitioning=[false]
|
||||||
KNNVectorDistance: metric=l2
|
KNNVectorDistance: metric=l2
|
||||||
LanceRead: uri=..., projection=[vector], ...
|
LanceRead: uri=..., projection=[vector], ...
|
||||||
<BLANKLINE>
|
ProjectionExec: expr=[vector@2 as vector, text@3 as text, _score@1 as _score]
|
||||||
FTS Search Plan:
|
Take: columns="_rowid, _score, (vector), (text)"
|
||||||
ProjectionExec: expr=[vector@2 as vector, text@3 as text, _score@1 as _score]
|
CoalesceBatchesExec: target_batch_size=1024
|
||||||
Take: columns="_rowid, _score, (vector), (text)"
|
GlobalLimitExec: skip=0, fetch=10
|
||||||
CoalesceBatchesExec: target_batch_size=1024
|
MatchQuery: column=text, query=hello
|
||||||
GlobalLimitExec: skip=0, fetch=10
|
|
||||||
MatchQuery: column=text, query=hello
|
|
||||||
<BLANKLINE>
|
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
@@ -3192,12 +3187,12 @@ class AsyncHybridQuery(AsyncStandardQuery, AsyncVectorQueryBase):
|
|||||||
plan : str
|
plan : str
|
||||||
""" # noqa: E501
|
""" # noqa: E501
|
||||||
|
|
||||||
results = ["Vector Search Plan:"]
|
vector_plan = await self._inner.to_vector_query().explain_plan(verbose)
|
||||||
results.append(await self._inner.to_vector_query().explain_plan(verbose))
|
fts_plan = await self._inner.to_fts_query().explain_plan(verbose)
|
||||||
results.append("FTS Search Plan:")
|
# Indent sub-plans under the reranker
|
||||||
results.append(await self._inner.to_fts_query().explain_plan(verbose))
|
indented_vector = "\n".join(" " + line for line in vector_plan.splitlines())
|
||||||
|
indented_fts = "\n".join(" " + line for line in fts_plan.splitlines())
|
||||||
return "\n".join(results)
|
return f"{self._reranker}\n {indented_vector}\n {indented_fts}"
|
||||||
|
|
||||||
async def analyze_plan(self):
|
async def analyze_plan(self):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -42,10 +42,18 @@ class AnswerdotaiRerankers(Reranker):
|
|||||||
rerankers = attempt_import_or_raise(
|
rerankers = attempt_import_or_raise(
|
||||||
"rerankers"
|
"rerankers"
|
||||||
) # import here for faster ops later
|
) # import here for faster ops later
|
||||||
|
self.model_name = model_name
|
||||||
|
self.model_type = model_type
|
||||||
self.reranker = rerankers.Reranker(
|
self.reranker = rerankers.Reranker(
|
||||||
model_name=model_name, model_type=model_type, **kwargs
|
model_name=model_name, model_type=model_type, **kwargs
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return (
|
||||||
|
f"AnswerdotaiRerankers(model_type={self.model_type}, "
|
||||||
|
f"model_name={self.model_name})"
|
||||||
|
)
|
||||||
|
|
||||||
def _rerank(self, result_set: pa.Table, query: str):
|
def _rerank(self, result_set: pa.Table, query: str):
|
||||||
result_set = self._handle_empty_results(result_set)
|
result_set = self._handle_empty_results(result_set)
|
||||||
if len(result_set) == 0:
|
if len(result_set) == 0:
|
||||||
|
|||||||
@@ -40,6 +40,9 @@ class Reranker(ABC):
|
|||||||
if ARROW_VERSION.major <= 13:
|
if ARROW_VERSION.major <= 13:
|
||||||
self._concat_tables_args = {"promote": True}
|
self._concat_tables_args = {"promote": True}
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.__class__.__name__
|
||||||
|
|
||||||
def rerank_vector(
|
def rerank_vector(
|
||||||
self,
|
self,
|
||||||
query: str,
|
query: str,
|
||||||
|
|||||||
@@ -44,6 +44,9 @@ class CohereReranker(Reranker):
|
|||||||
self.top_n = top_n
|
self.top_n = top_n
|
||||||
self.api_key = api_key
|
self.api_key = api_key
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"CohereReranker(model_name={self.model_name})"
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def _client(self):
|
def _client(self):
|
||||||
cohere = attempt_import_or_raise("cohere")
|
cohere = attempt_import_or_raise("cohere")
|
||||||
|
|||||||
@@ -50,6 +50,9 @@ class CrossEncoderReranker(Reranker):
|
|||||||
if self.device is None:
|
if self.device is None:
|
||||||
self.device = "cuda" if torch.cuda.is_available() else "cpu"
|
self.device = "cuda" if torch.cuda.is_available() else "cpu"
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"CrossEncoderReranker(model_name={self.model_name})"
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def model(self):
|
def model(self):
|
||||||
sbert = attempt_import_or_raise("sentence_transformers")
|
sbert = attempt_import_or_raise("sentence_transformers")
|
||||||
|
|||||||
@@ -45,6 +45,9 @@ class JinaReranker(Reranker):
|
|||||||
self.top_n = top_n
|
self.top_n = top_n
|
||||||
self.api_key = api_key
|
self.api_key = api_key
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"JinaReranker(model_name={self.model_name})"
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def _client(self):
|
def _client(self):
|
||||||
import requests
|
import requests
|
||||||
|
|||||||
@@ -38,6 +38,9 @@ class LinearCombinationReranker(Reranker):
|
|||||||
self.weight = weight
|
self.weight = weight
|
||||||
self.fill = fill
|
self.fill = fill
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"LinearCombinationReranker(weight={self.weight}, fill={self.fill})"
|
||||||
|
|
||||||
def rerank_hybrid(
|
def rerank_hybrid(
|
||||||
self,
|
self,
|
||||||
query: str, # noqa: F821
|
query: str, # noqa: F821
|
||||||
|
|||||||
@@ -54,6 +54,12 @@ class MRRReranker(Reranker):
|
|||||||
self.weight_vector = weight_vector
|
self.weight_vector = weight_vector
|
||||||
self.weight_fts = weight_fts
|
self.weight_fts = weight_fts
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return (
|
||||||
|
f"MRRReranker(weight_vector={self.weight_vector}, "
|
||||||
|
f"weight_fts={self.weight_fts})"
|
||||||
|
)
|
||||||
|
|
||||||
def rerank_hybrid(
|
def rerank_hybrid(
|
||||||
self,
|
self,
|
||||||
query: str, # noqa: F821
|
query: str, # noqa: F821
|
||||||
|
|||||||
@@ -43,6 +43,9 @@ class OpenaiReranker(Reranker):
|
|||||||
self.column = column
|
self.column = column
|
||||||
self.api_key = api_key
|
self.api_key = api_key
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"OpenaiReranker(model_name={self.model_name})"
|
||||||
|
|
||||||
def _rerank(self, result_set: pa.Table, query: str):
|
def _rerank(self, result_set: pa.Table, query: str):
|
||||||
result_set = self._handle_empty_results(result_set)
|
result_set = self._handle_empty_results(result_set)
|
||||||
if len(result_set) == 0:
|
if len(result_set) == 0:
|
||||||
|
|||||||
@@ -36,6 +36,9 @@ class RRFReranker(Reranker):
|
|||||||
super().__init__(return_score)
|
super().__init__(return_score)
|
||||||
self.K = K
|
self.K = K
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"RRFReranker(K={self.K})"
|
||||||
|
|
||||||
def rerank_hybrid(
|
def rerank_hybrid(
|
||||||
self,
|
self,
|
||||||
query: str, # noqa: F821
|
query: str, # noqa: F821
|
||||||
|
|||||||
@@ -52,6 +52,9 @@ class VoyageAIReranker(Reranker):
|
|||||||
self.api_key = api_key
|
self.api_key = api_key
|
||||||
self.truncation = truncation
|
self.truncation = truncation
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"VoyageAIReranker(model_name={self.model_name})"
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def _client(self):
|
def _client(self):
|
||||||
voyageai = attempt_import_or_raise("voyageai")
|
voyageai = attempt_import_or_raise("voyageai")
|
||||||
|
|||||||
@@ -904,7 +904,9 @@ class Table(ABC):
|
|||||||
----------
|
----------
|
||||||
field_names: str or list of str
|
field_names: str or list of str
|
||||||
The name(s) of the field to index.
|
The name(s) of the field to index.
|
||||||
can be only str if use_tantivy=True for now.
|
If ``use_tantivy`` is False (default), only a single field name
|
||||||
|
(str) is supported. To index multiple fields, create a separate
|
||||||
|
FTS index for each field.
|
||||||
replace: bool, default False
|
replace: bool, default False
|
||||||
If True, replace the existing index if it exists. Note that this is
|
If True, replace the existing index if it exists. Note that this is
|
||||||
not yet an atomic operation; the index will be temporarily
|
not yet an atomic operation; the index will be temporarily
|
||||||
@@ -2298,7 +2300,11 @@ class LanceTable(Table):
|
|||||||
):
|
):
|
||||||
if not use_tantivy:
|
if not use_tantivy:
|
||||||
if not isinstance(field_names, str):
|
if not isinstance(field_names, str):
|
||||||
raise ValueError("field_names must be a string when use_tantivy=False")
|
raise ValueError(
|
||||||
|
"Native FTS indexes can only be created on a single field "
|
||||||
|
"at a time. To search over multiple text fields, create a "
|
||||||
|
"separate FTS index for each field."
|
||||||
|
)
|
||||||
|
|
||||||
if tokenizer_name is None:
|
if tokenizer_name is None:
|
||||||
tokenizer_configs = {
|
tokenizer_configs = {
|
||||||
|
|||||||
@@ -163,9 +163,7 @@ async def test_explain_plan(table: AsyncTable):
|
|||||||
table.query().nearest_to_text("dog").nearest_to([0.1, 0.1]).explain_plan(True)
|
table.query().nearest_to_text("dog").nearest_to([0.1, 0.1]).explain_plan(True)
|
||||||
)
|
)
|
||||||
|
|
||||||
assert "Vector Search Plan" in plan
|
|
||||||
assert "KNNVectorDistance" in plan
|
assert "KNNVectorDistance" in plan
|
||||||
assert "FTS Search Plan" in plan
|
|
||||||
assert "LanceRead" in plan
|
assert "LanceRead" in plan
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -945,3 +945,112 @@ def test_custom_transform(mem_db):
|
|||||||
batch = batches[0]
|
batch = batches[0]
|
||||||
|
|
||||||
assert batch == pa.record_batch([range(10)], ["id"])
|
assert batch == pa.record_batch([range(10)], ["id"])
|
||||||
|
|
||||||
|
|
||||||
|
def test_getitems_basic(some_permutation: Permutation):
|
||||||
|
"""Test __getitems__ returns correct rows by offset."""
|
||||||
|
result = some_permutation.__getitems__([0, 1, 2])
|
||||||
|
assert isinstance(result, dict)
|
||||||
|
assert "id" in result
|
||||||
|
assert "value" in result
|
||||||
|
assert len(result["id"]) == 3
|
||||||
|
|
||||||
|
|
||||||
|
def test_getitems_single_index(some_permutation: Permutation):
|
||||||
|
"""Test __getitems__ with a single index."""
|
||||||
|
result = some_permutation.__getitems__([0])
|
||||||
|
assert len(result["id"]) == 1
|
||||||
|
assert len(result["value"]) == 1
|
||||||
|
|
||||||
|
|
||||||
|
def test_getitems_preserves_order(some_permutation: Permutation):
|
||||||
|
"""Test __getitems__ returns rows in the requested order."""
|
||||||
|
# Get rows in forward order
|
||||||
|
forward = some_permutation.__getitems__([0, 1, 2, 3, 4])
|
||||||
|
# Get the same rows in reverse order
|
||||||
|
reverse = some_permutation.__getitems__([4, 3, 2, 1, 0])
|
||||||
|
|
||||||
|
assert forward["id"] == list(reversed(reverse["id"]))
|
||||||
|
assert forward["value"] == list(reversed(reverse["value"]))
|
||||||
|
|
||||||
|
|
||||||
|
def test_getitems_non_contiguous(some_permutation: Permutation):
|
||||||
|
"""Test __getitems__ with non-contiguous indices."""
|
||||||
|
result = some_permutation.__getitems__([0, 10, 50, 100, 500])
|
||||||
|
assert len(result["id"]) == 5
|
||||||
|
|
||||||
|
# Each id/value pair should match what we'd get individually
|
||||||
|
for i, offset in enumerate([0, 10, 50, 100, 500]):
|
||||||
|
single = some_permutation.__getitems__([offset])
|
||||||
|
assert result["id"][i] == single["id"][0]
|
||||||
|
assert result["value"][i] == single["value"][0]
|
||||||
|
|
||||||
|
|
||||||
|
def test_getitems_with_column_selection(some_permutation: Permutation):
|
||||||
|
"""Test __getitems__ respects column selection."""
|
||||||
|
id_only = some_permutation.select_columns(["id"])
|
||||||
|
result = id_only.__getitems__([0, 1, 2])
|
||||||
|
assert "id" in result
|
||||||
|
assert "value" not in result
|
||||||
|
assert len(result["id"]) == 3
|
||||||
|
|
||||||
|
|
||||||
|
def test_getitems_with_column_rename(some_permutation: Permutation):
|
||||||
|
"""Test __getitems__ respects column renames."""
|
||||||
|
renamed = some_permutation.rename_column("value", "data")
|
||||||
|
result = renamed.__getitems__([0, 1])
|
||||||
|
assert "data" in result
|
||||||
|
assert "value" not in result
|
||||||
|
assert len(result["data"]) == 2
|
||||||
|
|
||||||
|
|
||||||
|
def test_getitems_with_format(some_permutation: Permutation):
|
||||||
|
"""Test __getitems__ applies the transform function."""
|
||||||
|
arrow_perm = some_permutation.with_format("arrow")
|
||||||
|
result = arrow_perm.__getitems__([0, 1, 2])
|
||||||
|
assert isinstance(result, pa.RecordBatch)
|
||||||
|
assert result.num_rows == 3
|
||||||
|
|
||||||
|
|
||||||
|
def test_getitems_with_custom_transform(some_permutation: Permutation):
|
||||||
|
"""Test __getitems__ with a custom transform."""
|
||||||
|
|
||||||
|
def transform(batch: pa.RecordBatch) -> list:
|
||||||
|
return batch.column("id").to_pylist()
|
||||||
|
|
||||||
|
custom = some_permutation.with_transform(transform)
|
||||||
|
result = custom.__getitems__([0, 1, 2])
|
||||||
|
assert isinstance(result, list)
|
||||||
|
assert len(result) == 3
|
||||||
|
|
||||||
|
|
||||||
|
def test_getitems_identity_permutation(mem_db):
|
||||||
|
"""Test __getitems__ on an identity permutation."""
|
||||||
|
tbl = mem_db.create_table(
|
||||||
|
"test_table", pa.table({"id": range(10), "value": range(10)})
|
||||||
|
)
|
||||||
|
perm = Permutation.identity(tbl)
|
||||||
|
|
||||||
|
result = perm.__getitems__([0, 5, 9])
|
||||||
|
assert result["id"] == [0, 5, 9]
|
||||||
|
assert result["value"] == [0, 5, 9]
|
||||||
|
|
||||||
|
|
||||||
|
def test_getitems_with_limit_offset(some_permutation: Permutation):
|
||||||
|
"""Test __getitems__ on a permutation with skip/take applied."""
|
||||||
|
limited = some_permutation.with_skip(100).with_take(200)
|
||||||
|
|
||||||
|
# Should be able to access offsets within the limited range
|
||||||
|
result = limited.__getitems__([0, 1, 199])
|
||||||
|
assert len(result["id"]) == 3
|
||||||
|
|
||||||
|
# The first item of the limited permutation should match offset 100 of original
|
||||||
|
full_result = some_permutation.__getitems__([100])
|
||||||
|
limited_result = limited.__getitems__([0])
|
||||||
|
assert limited_result["id"][0] == full_result["id"][0]
|
||||||
|
|
||||||
|
|
||||||
|
def test_getitems_invalid_offset(some_permutation: Permutation):
|
||||||
|
"""Test __getitems__ with an out-of-range offset raises an error."""
|
||||||
|
with pytest.raises(Exception):
|
||||||
|
some_permutation.__getitems__([999999])
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ use std::sync::{Arc, Mutex};
|
|||||||
use crate::{
|
use crate::{
|
||||||
arrow::RecordBatchStream, connection::Connection, error::PythonErrorExt, table::Table,
|
arrow::RecordBatchStream, connection::Connection, error::PythonErrorExt, table::Table,
|
||||||
};
|
};
|
||||||
use arrow::pyarrow::ToPyArrow;
|
use arrow::pyarrow::{PyArrowType, ToPyArrow};
|
||||||
use lancedb::{
|
use lancedb::{
|
||||||
dataloader::permutation::{
|
dataloader::permutation::{
|
||||||
builder::{PermutationBuilder as LancePermutationBuilder, ShuffleStrategy},
|
builder::{PermutationBuilder as LancePermutationBuilder, ShuffleStrategy},
|
||||||
@@ -328,4 +328,21 @@ impl PyPermutationReader {
|
|||||||
Ok(RecordBatchStream::new(stream))
|
Ok(RecordBatchStream::new(stream))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[pyo3(signature = (indices, *, selection=None))]
|
||||||
|
pub fn take_offsets<'py>(
|
||||||
|
slf: PyRef<'py, Self>,
|
||||||
|
indices: Vec<u64>,
|
||||||
|
selection: Option<Bound<'py, PyAny>>,
|
||||||
|
) -> PyResult<Bound<'py, PyAny>> {
|
||||||
|
let selection = Self::parse_selection(selection)?;
|
||||||
|
let reader = slf.reader.clone();
|
||||||
|
future_into_py(slf.py(), async move {
|
||||||
|
let batch = reader
|
||||||
|
.take_offsets(&indices, selection)
|
||||||
|
.await
|
||||||
|
.infer_error()?;
|
||||||
|
Ok(PyArrowType(batch))
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Generated
+5349
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "lancedb"
|
name = "lancedb"
|
||||||
version = "0.26.0"
|
version = "0.26.2"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
description = "LanceDB: A serverless, low-latency vector database for AI applications"
|
description = "LanceDB: A serverless, low-latency vector database for AI applications"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -39,6 +39,9 @@ pub struct PermutationReader {
|
|||||||
limit: Option<u64>,
|
limit: Option<u64>,
|
||||||
available_rows: u64,
|
available_rows: u64,
|
||||||
split: u64,
|
split: u64,
|
||||||
|
// Cached map of offset to row id for the split
|
||||||
|
#[allow(clippy::type_complexity)]
|
||||||
|
offset_map: Arc<tokio::sync::Mutex<Option<Arc<HashMap<u64, u64>>>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl std::fmt::Debug for PermutationReader {
|
impl std::fmt::Debug for PermutationReader {
|
||||||
@@ -72,6 +75,7 @@ impl PermutationReader {
|
|||||||
limit: None,
|
limit: None,
|
||||||
available_rows: 0,
|
available_rows: 0,
|
||||||
split,
|
split,
|
||||||
|
offset_map: Arc::new(tokio::sync::Mutex::new(None)),
|
||||||
};
|
};
|
||||||
slf.validate().await?;
|
slf.validate().await?;
|
||||||
// Calculate the number of available rows
|
// Calculate the number of available rows
|
||||||
@@ -157,6 +161,7 @@ impl PermutationReader {
|
|||||||
let available_rows = self.verify_limit_offset(self.limit, Some(offset)).await?;
|
let available_rows = self.verify_limit_offset(self.limit, Some(offset)).await?;
|
||||||
self.offset = Some(offset);
|
self.offset = Some(offset);
|
||||||
self.available_rows = available_rows;
|
self.available_rows = available_rows;
|
||||||
|
self.offset_map = Arc::new(tokio::sync::Mutex::new(None));
|
||||||
Ok(self)
|
Ok(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,6 +169,7 @@ impl PermutationReader {
|
|||||||
let available_rows = self.verify_limit_offset(Some(limit), self.offset).await?;
|
let available_rows = self.verify_limit_offset(Some(limit), self.offset).await?;
|
||||||
self.available_rows = available_rows;
|
self.available_rows = available_rows;
|
||||||
self.limit = Some(limit);
|
self.limit = Some(limit);
|
||||||
|
self.offset_map = Arc::new(tokio::sync::Mutex::new(None));
|
||||||
Ok(self)
|
Ok(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,8 +186,9 @@ impl PermutationReader {
|
|||||||
base_table: &Arc<dyn BaseTable>,
|
base_table: &Arc<dyn BaseTable>,
|
||||||
row_ids: RecordBatch,
|
row_ids: RecordBatch,
|
||||||
selection: Select,
|
selection: Select,
|
||||||
has_row_id: bool,
|
|
||||||
) -> Result<RecordBatch> {
|
) -> Result<RecordBatch> {
|
||||||
|
let has_row_id = Self::has_row_id(&selection)?;
|
||||||
|
|
||||||
let num_rows = row_ids.num_rows();
|
let num_rows = row_ids.num_rows();
|
||||||
let row_ids = row_ids
|
let row_ids = row_ids
|
||||||
.column(0)
|
.column(0)
|
||||||
@@ -282,14 +289,13 @@ impl PermutationReader {
|
|||||||
row_ids: DatasetRecordBatchStream,
|
row_ids: DatasetRecordBatchStream,
|
||||||
selection: Select,
|
selection: Select,
|
||||||
) -> Result<SendableRecordBatchStream> {
|
) -> Result<SendableRecordBatchStream> {
|
||||||
let has_row_id = Self::has_row_id(&selection)?;
|
|
||||||
let mut stream = row_ids
|
let mut stream = row_ids
|
||||||
.map_err(Error::from)
|
.map_err(Error::from)
|
||||||
.try_filter_map(move |batch| {
|
.try_filter_map(move |batch| {
|
||||||
let selection = selection.clone();
|
let selection = selection.clone();
|
||||||
let base_table = base_table.clone();
|
let base_table = base_table.clone();
|
||||||
async move {
|
async move {
|
||||||
Self::load_batch(&base_table, batch, selection, has_row_id)
|
Self::load_batch(&base_table, batch, selection)
|
||||||
.await
|
.await
|
||||||
.map(Some)
|
.map(Some)
|
||||||
}
|
}
|
||||||
@@ -397,6 +403,82 @@ impl PermutationReader {
|
|||||||
Self::row_ids_to_batches(self.base_table.clone(), row_ids, selection).await
|
Self::row_ids_to_batches(self.base_table.clone(), row_ids, selection).await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// If we are going to use `take` then we load the offset -> row id map once for the split and cache it
|
||||||
|
///
|
||||||
|
/// This method fetches the map with find-or-create semantics.
|
||||||
|
async fn get_offset_map(
|
||||||
|
&self,
|
||||||
|
permutation_table: &Arc<dyn BaseTable>,
|
||||||
|
) -> Result<Arc<HashMap<u64, u64>>> {
|
||||||
|
let mut offset_map_ref = self.offset_map.lock().await;
|
||||||
|
if let Some(offset_map) = &*offset_map_ref {
|
||||||
|
return Ok(offset_map.clone());
|
||||||
|
}
|
||||||
|
let mut offset_map = HashMap::new();
|
||||||
|
let mut row_ids_query = Table::from(permutation_table.clone())
|
||||||
|
.query()
|
||||||
|
.select(Select::Columns(vec![SRC_ROW_ID_COL.to_string()]))
|
||||||
|
.only_if(format!("{} = {}", SPLIT_ID_COLUMN, self.split));
|
||||||
|
if let Some(offset) = self.offset {
|
||||||
|
row_ids_query = row_ids_query.offset(offset as usize);
|
||||||
|
}
|
||||||
|
if let Some(limit) = self.limit {
|
||||||
|
row_ids_query = row_ids_query.limit(limit as usize);
|
||||||
|
}
|
||||||
|
let mut row_ids = row_ids_query.execute().await?;
|
||||||
|
while let Some(batch) = row_ids.try_next().await? {
|
||||||
|
let row_ids = batch
|
||||||
|
.column(0)
|
||||||
|
.as_primitive::<UInt64Type>()
|
||||||
|
.values()
|
||||||
|
.to_vec();
|
||||||
|
for (i, row_id) in row_ids.iter().enumerate() {
|
||||||
|
offset_map.insert(i as u64, *row_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let offset_map = Arc::new(offset_map);
|
||||||
|
*offset_map_ref = Some(offset_map.clone());
|
||||||
|
Ok(offset_map)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn take_offsets(&self, offsets: &[u64], selection: Select) -> Result<RecordBatch> {
|
||||||
|
if let Some(permutation_table) = &self.permutation_table {
|
||||||
|
let offset_map = self.get_offset_map(permutation_table).await?;
|
||||||
|
let row_ids = offsets
|
||||||
|
.iter()
|
||||||
|
.map(|o| offset_map.get(o).copied().expect_ok().map_err(Error::from))
|
||||||
|
.collect::<Result<Vec<_>>>()?;
|
||||||
|
let row_ids = RecordBatch::try_new(
|
||||||
|
Arc::new(arrow_schema::Schema::new(vec![arrow_schema::Field::new(
|
||||||
|
"row_id",
|
||||||
|
arrow_schema::DataType::UInt64,
|
||||||
|
false,
|
||||||
|
)])),
|
||||||
|
vec![Arc::new(UInt64Array::from(row_ids))],
|
||||||
|
)?;
|
||||||
|
Self::load_batch(&self.base_table, row_ids, selection).await
|
||||||
|
} else {
|
||||||
|
let table = Table::from(self.base_table.clone());
|
||||||
|
let batches = table
|
||||||
|
.take_offsets(offsets.to_vec())
|
||||||
|
.select(selection.clone())
|
||||||
|
.execute()
|
||||||
|
.await?
|
||||||
|
.try_collect::<Vec<_>>()
|
||||||
|
.await?;
|
||||||
|
if let Some(first_batch) = batches.first() {
|
||||||
|
let schema = first_batch.schema();
|
||||||
|
let batch = arrow::compute::concat_batches(&schema, &batches)?;
|
||||||
|
Ok(batch)
|
||||||
|
} else {
|
||||||
|
Ok(RecordBatch::try_new(
|
||||||
|
self.output_schema(selection).await?,
|
||||||
|
vec![],
|
||||||
|
)?)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn output_schema(&self, selection: Select) -> Result<SchemaRef> {
|
pub async fn output_schema(&self, selection: Select) -> Result<SchemaRef> {
|
||||||
let table = Table::from(self.base_table.clone());
|
let table = Table::from(self.base_table.clone());
|
||||||
table.query().select(selection).output_schema().await
|
table.query().select(selection).output_schema().await
|
||||||
@@ -543,4 +625,224 @@ mod tests {
|
|||||||
check_batch(&mut stream, &row_ids[7..9]).await;
|
check_batch(&mut stream, &row_ids[7..9]).await;
|
||||||
assert!(stream.try_next().await.unwrap().is_none());
|
assert!(stream.try_next().await.unwrap().is_none());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Helper to create a base table and permutation table for take_offsets tests.
|
||||||
|
/// Returns (base_table, row_ids_table, shuffled_row_ids).
|
||||||
|
async fn setup_permutation_tables(num_rows: usize) -> (Table, Table, Vec<u64>) {
|
||||||
|
let base_table = lance_datagen::gen_batch()
|
||||||
|
.col("idx", lance_datagen::array::step::<Int32Type>())
|
||||||
|
.col("other_col", lance_datagen::array::step::<UInt64Type>())
|
||||||
|
.into_mem_table("tbl", RowCount::from(num_rows as u64), BatchCount::from(1))
|
||||||
|
.await;
|
||||||
|
|
||||||
|
let mut row_ids = collect_column::<UInt64Type>(&base_table, "_rowid").await;
|
||||||
|
row_ids.shuffle(&mut rand::rng());
|
||||||
|
|
||||||
|
let split_ids = UInt64Array::from_iter_values(std::iter::repeat_n(0u64, row_ids.len()));
|
||||||
|
let permutation_batch = RecordBatch::try_new(
|
||||||
|
Arc::new(Schema::new(vec![
|
||||||
|
Field::new("row_id", DataType::UInt64, false),
|
||||||
|
Field::new(SPLIT_ID_COLUMN, DataType::UInt64, false),
|
||||||
|
])),
|
||||||
|
vec![
|
||||||
|
Arc::new(UInt64Array::from(row_ids.clone())),
|
||||||
|
Arc::new(split_ids),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
let row_ids_table = virtual_table("row_ids", &permutation_batch).await;
|
||||||
|
|
||||||
|
(base_table, row_ids_table, row_ids)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_take_offsets_with_permutation_table() {
|
||||||
|
let (base_table, row_ids_table, row_ids) = setup_permutation_tables(10).await;
|
||||||
|
|
||||||
|
let reader = PermutationReader::try_from_tables(
|
||||||
|
base_table.base_table().clone(),
|
||||||
|
row_ids_table.base_table().clone(),
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Take specific offsets and verify the returned rows match the permutation order
|
||||||
|
let offsets = vec![0, 2, 4];
|
||||||
|
let batch = reader.take_offsets(&offsets, Select::All).await.unwrap();
|
||||||
|
|
||||||
|
assert_eq!(batch.num_rows(), 3);
|
||||||
|
|
||||||
|
let idx_values = batch
|
||||||
|
.column(0)
|
||||||
|
.as_primitive::<Int32Type>()
|
||||||
|
.values()
|
||||||
|
.to_vec();
|
||||||
|
let expected: Vec<i32> = offsets
|
||||||
|
.iter()
|
||||||
|
.map(|&o| row_ids[o as usize] as i32)
|
||||||
|
.collect();
|
||||||
|
assert_eq!(idx_values, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_take_offsets_preserves_order() {
|
||||||
|
let (base_table, row_ids_table, row_ids) = setup_permutation_tables(10).await;
|
||||||
|
|
||||||
|
let reader = PermutationReader::try_from_tables(
|
||||||
|
base_table.base_table().clone(),
|
||||||
|
row_ids_table.base_table().clone(),
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Take offsets in reverse order and verify returned rows match that order
|
||||||
|
let offsets = vec![5, 3, 1, 0];
|
||||||
|
let batch = reader.take_offsets(&offsets, Select::All).await.unwrap();
|
||||||
|
|
||||||
|
assert_eq!(batch.num_rows(), 4);
|
||||||
|
|
||||||
|
let idx_values = batch
|
||||||
|
.column(0)
|
||||||
|
.as_primitive::<Int32Type>()
|
||||||
|
.values()
|
||||||
|
.to_vec();
|
||||||
|
let expected: Vec<i32> = offsets
|
||||||
|
.iter()
|
||||||
|
.map(|&o| row_ids[o as usize] as i32)
|
||||||
|
.collect();
|
||||||
|
assert_eq!(idx_values, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_take_offsets_with_column_selection() {
|
||||||
|
let (base_table, row_ids_table, row_ids) = setup_permutation_tables(10).await;
|
||||||
|
|
||||||
|
let reader = PermutationReader::try_from_tables(
|
||||||
|
base_table.base_table().clone(),
|
||||||
|
row_ids_table.base_table().clone(),
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let offsets = vec![1, 3];
|
||||||
|
let batch = reader
|
||||||
|
.take_offsets(&offsets, Select::Columns(vec!["idx".to_string()]))
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
assert_eq!(batch.num_rows(), 2);
|
||||||
|
assert_eq!(batch.num_columns(), 1);
|
||||||
|
assert_eq!(batch.schema().field(0).name(), "idx");
|
||||||
|
|
||||||
|
let idx_values = batch
|
||||||
|
.column(0)
|
||||||
|
.as_primitive::<Int32Type>()
|
||||||
|
.values()
|
||||||
|
.to_vec();
|
||||||
|
let expected: Vec<i32> = offsets
|
||||||
|
.iter()
|
||||||
|
.map(|&o| row_ids[o as usize] as i32)
|
||||||
|
.collect();
|
||||||
|
assert_eq!(idx_values, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_take_offsets_invalid_offset() {
|
||||||
|
let (base_table, row_ids_table, _) = setup_permutation_tables(5).await;
|
||||||
|
|
||||||
|
let reader = PermutationReader::try_from_tables(
|
||||||
|
base_table.base_table().clone(),
|
||||||
|
row_ids_table.base_table().clone(),
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Offset 999 doesn't exist in the offset map
|
||||||
|
let result = reader.take_offsets(&[0, 999], Select::All).await;
|
||||||
|
assert!(result.is_err());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_take_offsets_identity_reader() {
|
||||||
|
let base_table = lance_datagen::gen_batch()
|
||||||
|
.col("idx", lance_datagen::array::step::<Int32Type>())
|
||||||
|
.into_mem_table("tbl", RowCount::from(10), BatchCount::from(1))
|
||||||
|
.await;
|
||||||
|
|
||||||
|
let reader = PermutationReader::identity(base_table.base_table().clone()).await;
|
||||||
|
|
||||||
|
// With no permutation table, take_offsets uses the base table directly
|
||||||
|
let offsets = vec![0, 2, 4, 6];
|
||||||
|
let batch = reader.take_offsets(&offsets, Select::All).await.unwrap();
|
||||||
|
|
||||||
|
assert_eq!(batch.num_rows(), 4);
|
||||||
|
|
||||||
|
let idx_values = batch
|
||||||
|
.column(0)
|
||||||
|
.as_primitive::<Int32Type>()
|
||||||
|
.values()
|
||||||
|
.to_vec();
|
||||||
|
assert_eq!(idx_values, vec![0, 2, 4, 6]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_take_offsets_caches_offset_map() {
|
||||||
|
let (base_table, row_ids_table, row_ids) = setup_permutation_tables(10).await;
|
||||||
|
|
||||||
|
let reader = PermutationReader::try_from_tables(
|
||||||
|
base_table.base_table().clone(),
|
||||||
|
row_ids_table.base_table().clone(),
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// First call populates the cache
|
||||||
|
let batch1 = reader.take_offsets(&[0, 1], Select::All).await.unwrap();
|
||||||
|
|
||||||
|
// Second call should use the cached offset map and produce consistent results
|
||||||
|
let batch2 = reader.take_offsets(&[0, 1], Select::All).await.unwrap();
|
||||||
|
|
||||||
|
let values1 = batch1
|
||||||
|
.column(0)
|
||||||
|
.as_primitive::<Int32Type>()
|
||||||
|
.values()
|
||||||
|
.to_vec();
|
||||||
|
let values2 = batch2
|
||||||
|
.column(0)
|
||||||
|
.as_primitive::<Int32Type>()
|
||||||
|
.values()
|
||||||
|
.to_vec();
|
||||||
|
assert_eq!(values1, values2);
|
||||||
|
|
||||||
|
let expected: Vec<i32> = vec![row_ids[0] as i32, row_ids[1] as i32];
|
||||||
|
assert_eq!(values1, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_take_offsets_single_offset() {
|
||||||
|
let (base_table, row_ids_table, row_ids) = setup_permutation_tables(5).await;
|
||||||
|
|
||||||
|
let reader = PermutationReader::try_from_tables(
|
||||||
|
base_table.base_table().clone(),
|
||||||
|
row_ids_table.base_table().clone(),
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let batch = reader.take_offsets(&[2], Select::All).await.unwrap();
|
||||||
|
|
||||||
|
assert_eq!(batch.num_rows(), 1);
|
||||||
|
let idx_values = batch
|
||||||
|
.column(0)
|
||||||
|
.as_primitive::<Int32Type>()
|
||||||
|
.values()
|
||||||
|
.to_vec();
|
||||||
|
assert_eq!(idx_values, vec![row_ids[2] as i32]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-183
@@ -16,8 +16,6 @@ use datafusion_physical_plan::union::UnionExec;
|
|||||||
use datafusion_physical_plan::ExecutionPlan;
|
use datafusion_physical_plan::ExecutionPlan;
|
||||||
use futures::{FutureExt, StreamExt, TryFutureExt};
|
use futures::{FutureExt, StreamExt, TryFutureExt};
|
||||||
use lance::dataset::builder::DatasetBuilder;
|
use lance::dataset::builder::DatasetBuilder;
|
||||||
use lance::dataset::cleanup::RemovalStats;
|
|
||||||
use lance::dataset::optimize::{compact_files, CompactionMetrics, IndexRemapperOptions};
|
|
||||||
use lance::dataset::scanner::Scanner;
|
use lance::dataset::scanner::Scanner;
|
||||||
pub use lance::dataset::ColumnAlteration;
|
pub use lance::dataset::ColumnAlteration;
|
||||||
pub use lance::dataset::NewColumnTransform;
|
pub use lance::dataset::NewColumnTransform;
|
||||||
@@ -46,7 +44,6 @@ use lance_namespace::models::{
|
|||||||
use lance_namespace::LanceNamespace;
|
use lance_namespace::LanceNamespace;
|
||||||
use lance_table::format::Manifest;
|
use lance_table::format::Manifest;
|
||||||
use lance_table::io::commit::ManifestNamingScheme;
|
use lance_table::io::commit::ManifestNamingScheme;
|
||||||
use log::info;
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::format;
|
use std::format;
|
||||||
@@ -79,6 +76,7 @@ pub mod datafusion;
|
|||||||
pub(crate) mod dataset;
|
pub(crate) mod dataset;
|
||||||
pub mod delete;
|
pub mod delete;
|
||||||
pub mod merge;
|
pub mod merge;
|
||||||
|
pub mod optimize;
|
||||||
pub mod schema_evolution;
|
pub mod schema_evolution;
|
||||||
pub mod update;
|
pub mod update;
|
||||||
|
|
||||||
@@ -86,12 +84,12 @@ use crate::index::waiter::wait_for_index;
|
|||||||
pub use chrono::Duration;
|
pub use chrono::Duration;
|
||||||
pub use delete::DeleteResult;
|
pub use delete::DeleteResult;
|
||||||
use futures::future::{join_all, Either};
|
use futures::future::{join_all, Either};
|
||||||
pub use lance::dataset::optimize::CompactionOptions;
|
|
||||||
pub use lance::dataset::refs::{TagContents, Tags as LanceTags};
|
pub use lance::dataset::refs::{TagContents, Tags as LanceTags};
|
||||||
pub use lance::dataset::scanner::DatasetRecordBatchStream;
|
pub use lance::dataset::scanner::DatasetRecordBatchStream;
|
||||||
use lance::dataset::statistics::DatasetStatisticsExt;
|
use lance::dataset::statistics::DatasetStatisticsExt;
|
||||||
use lance_index::frag_reuse::FRAG_REUSE_INDEX_NAME;
|
use lance_index::frag_reuse::FRAG_REUSE_INDEX_NAME;
|
||||||
pub use lance_index::optimize::OptimizeOptions;
|
pub use lance_index::optimize::OptimizeOptions;
|
||||||
|
pub use optimize::{CompactionOptions, OptimizeAction, OptimizeStats};
|
||||||
pub use schema_evolution::{AddColumnsResult, AlterColumnsResult, DropColumnsResult};
|
pub use schema_evolution::{AddColumnsResult, AlterColumnsResult, DropColumnsResult};
|
||||||
use serde_with::skip_serializing_none;
|
use serde_with::skip_serializing_none;
|
||||||
pub use update::{UpdateBuilder, UpdateResult};
|
pub use update::{UpdateBuilder, UpdateResult};
|
||||||
@@ -169,85 +167,6 @@ impl TableDefinition {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Optimize the dataset.
|
|
||||||
///
|
|
||||||
/// Similar to `VACUUM` in PostgreSQL, it offers different options to
|
|
||||||
/// optimize different parts of the table on disk.
|
|
||||||
///
|
|
||||||
/// By default, it optimizes everything, as [`OptimizeAction::All`].
|
|
||||||
pub enum OptimizeAction {
|
|
||||||
/// Run all optimizations with default values
|
|
||||||
All,
|
|
||||||
/// Compacts files in the dataset
|
|
||||||
///
|
|
||||||
/// LanceDb uses a readonly filesystem for performance and safe concurrency. Every time
|
|
||||||
/// new data is added it will be added into new files. Small files
|
|
||||||
/// can hurt both read and write performance. Compaction will merge small files
|
|
||||||
/// into larger ones.
|
|
||||||
///
|
|
||||||
/// All operations that modify data (add, delete, update, merge insert, etc.) will create
|
|
||||||
/// new files. If these operations are run frequently then compaction should run frequently.
|
|
||||||
///
|
|
||||||
/// If these operations are never run (search only) then compaction is not necessary.
|
|
||||||
Compact {
|
|
||||||
options: CompactionOptions,
|
|
||||||
remap_options: Option<Arc<dyn IndexRemapperOptions>>,
|
|
||||||
},
|
|
||||||
/// Prune old version of datasets
|
|
||||||
///
|
|
||||||
/// Every change in LanceDb is additive. When data is removed from a dataset a new version is
|
|
||||||
/// created that doesn't contain the removed data. However, the old version, which does contain
|
|
||||||
/// the removed data, is left in place. This is necessary for consistency and concurrency and
|
|
||||||
/// also enables time travel functionality like the ability to checkout an older version of the
|
|
||||||
/// dataset to undo changes.
|
|
||||||
///
|
|
||||||
/// Over time, these old versions can consume a lot of disk space. The prune operation will
|
|
||||||
/// remove versions of the dataset that are older than a certain age. This will free up the
|
|
||||||
/// space used by that old data.
|
|
||||||
///
|
|
||||||
/// Once a version is pruned it can no longer be checked out.
|
|
||||||
Prune {
|
|
||||||
/// The duration of time to keep versions of the dataset.
|
|
||||||
older_than: Option<Duration>,
|
|
||||||
/// Because they may be part of an in-progress transaction, files newer than 7 days old are not deleted by default.
|
|
||||||
/// If you are sure that there are no in-progress transactions, then you can set this to True to delete all files older than `older_than`.
|
|
||||||
delete_unverified: Option<bool>,
|
|
||||||
/// If true, an error will be returned if there are any old versions that are still tagged.
|
|
||||||
error_if_tagged_old_versions: Option<bool>,
|
|
||||||
},
|
|
||||||
/// Optimize the indices
|
|
||||||
///
|
|
||||||
/// This operation optimizes all indices in the table. When new data is added to LanceDb
|
|
||||||
/// it is not added to the indices. However, it can still turn up in searches because the search
|
|
||||||
/// function will scan both the indexed data and the unindexed data in parallel. Over time, the
|
|
||||||
/// unindexed data can become large enough that the search performance is slow. This operation
|
|
||||||
/// will add the unindexed data to the indices without rerunning the full index creation process.
|
|
||||||
///
|
|
||||||
/// Optimizing an index is faster than re-training the index but it does not typically adjust the
|
|
||||||
/// underlying model relied upon by the index. This can eventually lead to poor search accuracy
|
|
||||||
/// and so users may still want to occasionally retrain the index after adding a large amount of
|
|
||||||
/// data.
|
|
||||||
///
|
|
||||||
/// For example, when using IVF, an index will create clusters. Optimizing an index assigns unindexed
|
|
||||||
/// data to the existing clusters, but it does not move the clusters or create new clusters.
|
|
||||||
Index(OptimizeOptions),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Default for OptimizeAction {
|
|
||||||
fn default() -> Self {
|
|
||||||
Self::All
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Statistics about the optimization.
|
|
||||||
pub struct OptimizeStats {
|
|
||||||
/// Stats of the file compaction.
|
|
||||||
pub compaction: Option<CompactionMetrics>,
|
|
||||||
|
|
||||||
/// Stats of the version pruning
|
|
||||||
pub prune: Option<RemovalStats>,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Describes what happens when a vector either contains NaN or
|
/// Describes what happens when a vector either contains NaN or
|
||||||
/// does not have enough values
|
/// does not have enough values
|
||||||
#[derive(Clone, Debug, Default)]
|
#[derive(Clone, Debug, Default)]
|
||||||
@@ -1859,16 +1778,6 @@ impl NativeTable {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn optimize_indices(&self, options: &OptimizeOptions) -> Result<()> {
|
|
||||||
info!("LanceDB: optimizing indices: {:?}", options);
|
|
||||||
self.dataset
|
|
||||||
.get_mut()
|
|
||||||
.await?
|
|
||||||
.optimize_indices(options)
|
|
||||||
.await?;
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Merge new data into this table.
|
/// Merge new data into this table.
|
||||||
pub async fn merge(
|
pub async fn merge(
|
||||||
&mut self,
|
&mut self,
|
||||||
@@ -1884,47 +1793,6 @@ impl NativeTable {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Remove old versions of the dataset from disk.
|
|
||||||
///
|
|
||||||
/// # Arguments
|
|
||||||
/// * `older_than` - The duration of time to keep versions of the dataset.
|
|
||||||
/// * `delete_unverified` - Because they may be part of an in-progress
|
|
||||||
/// transaction, files newer than 7 days old are not deleted by default.
|
|
||||||
/// If you are sure that there are no in-progress transactions, then you
|
|
||||||
/// can set this to True to delete all files older than `older_than`.
|
|
||||||
///
|
|
||||||
/// This calls into [lance::dataset::Dataset::cleanup_old_versions] and
|
|
||||||
/// returns the result.
|
|
||||||
async fn cleanup_old_versions(
|
|
||||||
&self,
|
|
||||||
older_than: Duration,
|
|
||||||
delete_unverified: Option<bool>,
|
|
||||||
error_if_tagged_old_versions: Option<bool>,
|
|
||||||
) -> Result<RemovalStats> {
|
|
||||||
Ok(self
|
|
||||||
.dataset
|
|
||||||
.get_mut()
|
|
||||||
.await?
|
|
||||||
.cleanup_old_versions(older_than, delete_unverified, error_if_tagged_old_versions)
|
|
||||||
.await?)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Compact files in the dataset.
|
|
||||||
///
|
|
||||||
/// This can be run after making several small appends to optimize the table
|
|
||||||
/// for faster reads.
|
|
||||||
///
|
|
||||||
/// This calls into [lance::dataset::optimize::compact_files].
|
|
||||||
async fn compact_files(
|
|
||||||
&self,
|
|
||||||
options: CompactionOptions,
|
|
||||||
remap_options: Option<Arc<dyn IndexRemapperOptions>>,
|
|
||||||
) -> Result<CompactionMetrics> {
|
|
||||||
let mut dataset_mut = self.dataset.get_mut().await?;
|
|
||||||
let metrics = compact_files(&mut dataset_mut, options, remap_options).await?;
|
|
||||||
Ok(metrics)
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: why are these individual methods and not some single "get_stats" method?
|
// TODO: why are these individual methods and not some single "get_stats" method?
|
||||||
pub async fn count_fragments(&self) -> Result<usize> {
|
pub async fn count_fragments(&self) -> Result<usize> {
|
||||||
Ok(self.dataset.get().await?.count_fragments())
|
Ok(self.dataset.get().await?.count_fragments())
|
||||||
@@ -3010,55 +2878,8 @@ impl BaseTable for NativeTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn optimize(&self, action: OptimizeAction) -> Result<OptimizeStats> {
|
async fn optimize(&self, action: OptimizeAction) -> Result<OptimizeStats> {
|
||||||
let mut stats = OptimizeStats {
|
// Delegate to the submodule implementation
|
||||||
compaction: None,
|
optimize::execute_optimize(self, action).await
|
||||||
prune: None,
|
|
||||||
};
|
|
||||||
match action {
|
|
||||||
OptimizeAction::All => {
|
|
||||||
stats.compaction = self
|
|
||||||
.optimize(OptimizeAction::Compact {
|
|
||||||
options: CompactionOptions::default(),
|
|
||||||
remap_options: None,
|
|
||||||
})
|
|
||||||
.await?
|
|
||||||
.compaction;
|
|
||||||
stats.prune = self
|
|
||||||
.optimize(OptimizeAction::Prune {
|
|
||||||
older_than: None,
|
|
||||||
delete_unverified: None,
|
|
||||||
error_if_tagged_old_versions: None,
|
|
||||||
})
|
|
||||||
.await?
|
|
||||||
.prune;
|
|
||||||
self.optimize(OptimizeAction::Index(OptimizeOptions::default()))
|
|
||||||
.await?;
|
|
||||||
}
|
|
||||||
OptimizeAction::Compact {
|
|
||||||
options,
|
|
||||||
remap_options,
|
|
||||||
} => {
|
|
||||||
stats.compaction = Some(self.compact_files(options, remap_options).await?);
|
|
||||||
}
|
|
||||||
OptimizeAction::Prune {
|
|
||||||
older_than,
|
|
||||||
delete_unverified,
|
|
||||||
error_if_tagged_old_versions,
|
|
||||||
} => {
|
|
||||||
stats.prune = Some(
|
|
||||||
self.cleanup_old_versions(
|
|
||||||
older_than.unwrap_or(Duration::try_days(7).expect("valid delta")),
|
|
||||||
delete_unverified,
|
|
||||||
error_if_tagged_old_versions,
|
|
||||||
)
|
|
||||||
.await?,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
OptimizeAction::Index(options) => {
|
|
||||||
self.optimize_indices(&options).await?;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Ok(stats)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn add_columns(
|
async fn add_columns(
|
||||||
|
|||||||
@@ -0,0 +1,781 @@
|
|||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
||||||
|
|
||||||
|
//! Table optimization operations for compaction, pruning, and index optimization.
|
||||||
|
//!
|
||||||
|
//! This module contains the implementation of optimization operations that help
|
||||||
|
//! maintain good performance for LanceDB tables.
|
||||||
|
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use lance::dataset::cleanup::RemovalStats;
|
||||||
|
use lance::dataset::optimize::{compact_files, CompactionMetrics, IndexRemapperOptions};
|
||||||
|
use lance_index::optimize::OptimizeOptions;
|
||||||
|
use lance_index::DatasetIndexExt;
|
||||||
|
use log::info;
|
||||||
|
|
||||||
|
pub use chrono::Duration;
|
||||||
|
pub use lance::dataset::optimize::CompactionOptions;
|
||||||
|
|
||||||
|
use super::NativeTable;
|
||||||
|
use crate::error::Result;
|
||||||
|
|
||||||
|
/// Optimize the dataset.
|
||||||
|
///
|
||||||
|
/// Similar to `VACUUM` in PostgreSQL, it offers different options to
|
||||||
|
/// optimize different parts of the table on disk.
|
||||||
|
///
|
||||||
|
/// By default, it optimizes everything, as [`OptimizeAction::All`].
|
||||||
|
pub enum OptimizeAction {
|
||||||
|
/// Run all optimizations with default values
|
||||||
|
All,
|
||||||
|
/// Compacts files in the dataset
|
||||||
|
///
|
||||||
|
/// LanceDb uses a readonly filesystem for performance and safe concurrency. Every time
|
||||||
|
/// new data is added it will be added into new files. Small files
|
||||||
|
/// can hurt both read and write performance. Compaction will merge small files
|
||||||
|
/// into larger ones.
|
||||||
|
///
|
||||||
|
/// All operations that modify data (add, delete, update, merge insert, etc.) will create
|
||||||
|
/// new files. If these operations are run frequently then compaction should run frequently.
|
||||||
|
///
|
||||||
|
/// If these operations are never run (search only) then compaction is not necessary.
|
||||||
|
Compact {
|
||||||
|
options: CompactionOptions,
|
||||||
|
remap_options: Option<Arc<dyn IndexRemapperOptions>>,
|
||||||
|
},
|
||||||
|
/// Prune old version of datasets
|
||||||
|
///
|
||||||
|
/// Every change in LanceDb is additive. When data is removed from a dataset a new version is
|
||||||
|
/// created that doesn't contain the removed data. However, the old version, which does contain
|
||||||
|
/// the removed data, is left in place. This is necessary for consistency and concurrency and
|
||||||
|
/// also enables time travel functionality like the ability to checkout an older version of the
|
||||||
|
/// dataset to undo changes.
|
||||||
|
///
|
||||||
|
/// Over time, these old versions can consume a lot of disk space. The prune operation will
|
||||||
|
/// remove versions of the dataset that are older than a certain age. This will free up the
|
||||||
|
/// space used by that old data.
|
||||||
|
///
|
||||||
|
/// Once a version is pruned it can no longer be checked out.
|
||||||
|
Prune {
|
||||||
|
/// The duration of time to keep versions of the dataset.
|
||||||
|
older_than: Option<Duration>,
|
||||||
|
/// Because they may be part of an in-progress transaction, files newer than 7 days old are not deleted by default.
|
||||||
|
/// If you are sure that there are no in-progress transactions, then you can set this to True to delete all files older than `older_than`.
|
||||||
|
delete_unverified: Option<bool>,
|
||||||
|
/// If true, an error will be returned if there are any old versions that are still tagged.
|
||||||
|
error_if_tagged_old_versions: Option<bool>,
|
||||||
|
},
|
||||||
|
/// Optimize the indices
|
||||||
|
///
|
||||||
|
/// This operation optimizes all indices in the table. When new data is added to LanceDb
|
||||||
|
/// it is not added to the indices. However, it can still turn up in searches because the search
|
||||||
|
/// function will scan both the indexed data and the unindexed data in parallel. Over time, the
|
||||||
|
/// unindexed data can become large enough that the search performance is slow. This operation
|
||||||
|
/// will add the unindexed data to the indices without rerunning the full index creation process.
|
||||||
|
///
|
||||||
|
/// Optimizing an index is faster than re-training the index but it does not typically adjust the
|
||||||
|
/// underlying model relied upon by the index. This can eventually lead to poor search accuracy
|
||||||
|
/// and so users may still want to occasionally retrain the index after adding a large amount of
|
||||||
|
/// data.
|
||||||
|
///
|
||||||
|
/// For example, when using IVF, an index will create clusters. Optimizing an index assigns unindexed
|
||||||
|
/// data to the existing clusters, but it does not move the clusters or create new clusters.
|
||||||
|
Index(OptimizeOptions),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for OptimizeAction {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self::All
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Statistics about the optimization.
|
||||||
|
#[derive(Debug, Default)]
|
||||||
|
pub struct OptimizeStats {
|
||||||
|
/// Stats of the file compaction.
|
||||||
|
pub compaction: Option<CompactionMetrics>,
|
||||||
|
|
||||||
|
/// Stats of the version pruning
|
||||||
|
pub prune: Option<RemovalStats>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Internal implementation of optimize_indices
|
||||||
|
///
|
||||||
|
/// This logic was moved from NativeTable to keep table.rs clean.
|
||||||
|
pub(crate) async fn optimize_indices(table: &NativeTable, options: &OptimizeOptions) -> Result<()> {
|
||||||
|
info!("LanceDB: optimizing indices: {:?}", options);
|
||||||
|
table
|
||||||
|
.dataset
|
||||||
|
.get_mut()
|
||||||
|
.await?
|
||||||
|
.optimize_indices(options)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Remove old versions of the dataset from disk.
|
||||||
|
///
|
||||||
|
/// # Arguments
|
||||||
|
/// * `older_than` - The duration of time to keep versions of the dataset.
|
||||||
|
/// * `delete_unverified` - Because they may be part of an in-progress
|
||||||
|
/// transaction, files newer than 7 days old are not deleted by default.
|
||||||
|
/// If you are sure that there are no in-progress transactions, then you
|
||||||
|
/// can set this to True to delete all files older than `older_than`.
|
||||||
|
///
|
||||||
|
/// This calls into [lance::dataset::Dataset::cleanup_old_versions] and
|
||||||
|
/// returns the result.
|
||||||
|
pub(crate) async fn cleanup_old_versions(
|
||||||
|
table: &NativeTable,
|
||||||
|
older_than: Duration,
|
||||||
|
delete_unverified: Option<bool>,
|
||||||
|
error_if_tagged_old_versions: Option<bool>,
|
||||||
|
) -> Result<RemovalStats> {
|
||||||
|
Ok(table
|
||||||
|
.dataset
|
||||||
|
.get_mut()
|
||||||
|
.await?
|
||||||
|
.cleanup_old_versions(older_than, delete_unverified, error_if_tagged_old_versions)
|
||||||
|
.await?)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Compact files in the dataset.
|
||||||
|
///
|
||||||
|
/// This can be run after making several small appends to optimize the table
|
||||||
|
/// for faster reads.
|
||||||
|
///
|
||||||
|
/// This calls into [lance::dataset::optimize::compact_files].
|
||||||
|
pub(crate) async fn compact_files_impl(
|
||||||
|
table: &NativeTable,
|
||||||
|
options: CompactionOptions,
|
||||||
|
remap_options: Option<Arc<dyn IndexRemapperOptions>>,
|
||||||
|
) -> Result<CompactionMetrics> {
|
||||||
|
let mut dataset_mut = table.dataset.get_mut().await?;
|
||||||
|
let metrics = compact_files(&mut dataset_mut, options, remap_options).await?;
|
||||||
|
Ok(metrics)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Execute the optimize operation on the table.
|
||||||
|
///
|
||||||
|
/// This is the main entry point for all optimization operations.
|
||||||
|
pub(crate) async fn execute_optimize(
|
||||||
|
table: &NativeTable,
|
||||||
|
action: OptimizeAction,
|
||||||
|
) -> Result<OptimizeStats> {
|
||||||
|
let mut stats = OptimizeStats {
|
||||||
|
compaction: None,
|
||||||
|
prune: None,
|
||||||
|
};
|
||||||
|
match action {
|
||||||
|
OptimizeAction::All => {
|
||||||
|
// Call helper functions directly to avoid async recursion issues
|
||||||
|
stats.compaction =
|
||||||
|
Some(compact_files_impl(table, CompactionOptions::default(), None).await?);
|
||||||
|
stats.prune = Some(
|
||||||
|
cleanup_old_versions(
|
||||||
|
table,
|
||||||
|
Duration::try_days(7).expect("valid delta"),
|
||||||
|
None,
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
.await?,
|
||||||
|
);
|
||||||
|
optimize_indices(table, &OptimizeOptions::default()).await?;
|
||||||
|
}
|
||||||
|
OptimizeAction::Compact {
|
||||||
|
options,
|
||||||
|
remap_options,
|
||||||
|
} => {
|
||||||
|
stats.compaction = Some(compact_files_impl(table, options, remap_options).await?);
|
||||||
|
}
|
||||||
|
OptimizeAction::Prune {
|
||||||
|
older_than,
|
||||||
|
delete_unverified,
|
||||||
|
error_if_tagged_old_versions,
|
||||||
|
} => {
|
||||||
|
stats.prune = Some(
|
||||||
|
cleanup_old_versions(
|
||||||
|
table,
|
||||||
|
older_than.unwrap_or(Duration::try_days(7).expect("valid delta")),
|
||||||
|
delete_unverified,
|
||||||
|
error_if_tagged_old_versions,
|
||||||
|
)
|
||||||
|
.await?,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
OptimizeAction::Index(options) => {
|
||||||
|
optimize_indices(table, &options).await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(stats)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use arrow_array::{Int32Array, RecordBatch, RecordBatchIterator, StringArray};
|
||||||
|
use arrow_schema::{DataType, Field, Schema};
|
||||||
|
use rstest::rstest;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use crate::connect;
|
||||||
|
use crate::index::{scalar::BTreeIndexBuilder, Index};
|
||||||
|
use crate::query::ExecutableQuery;
|
||||||
|
use crate::table::{CompactionOptions, OptimizeAction, OptimizeStats};
|
||||||
|
use futures::TryStreamExt;
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_optimize_compact_simple() {
|
||||||
|
let conn = connect("memory://").execute().await.unwrap();
|
||||||
|
|
||||||
|
// Create a table with initial data
|
||||||
|
let schema = Arc::new(Schema::new(vec![Field::new("i", DataType::Int32, false)]));
|
||||||
|
let batch = RecordBatch::try_new(
|
||||||
|
schema.clone(),
|
||||||
|
vec![Arc::new(Int32Array::from_iter_values(0..100))],
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let table = conn
|
||||||
|
.create_table(
|
||||||
|
"test_compact",
|
||||||
|
RecordBatchIterator::new(vec![Ok(batch)], schema.clone()),
|
||||||
|
)
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Add more data to create multiple fragments
|
||||||
|
for i in 0..5 {
|
||||||
|
let batch = RecordBatch::try_new(
|
||||||
|
schema.clone(),
|
||||||
|
vec![Arc::new(Int32Array::from_iter_values(
|
||||||
|
(i * 100 + 100)..((i + 1) * 100 + 100),
|
||||||
|
))],
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
table
|
||||||
|
.add(RecordBatchIterator::new(vec![Ok(batch)], schema.clone()))
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify we have multiple fragments before compaction
|
||||||
|
let initial_row_count = table.count_rows(None).await.unwrap();
|
||||||
|
assert_eq!(initial_row_count, 600);
|
||||||
|
|
||||||
|
// Run compaction
|
||||||
|
let stats = table
|
||||||
|
.optimize(OptimizeAction::Compact {
|
||||||
|
options: CompactionOptions {
|
||||||
|
target_rows_per_fragment: 1000,
|
||||||
|
..Default::default()
|
||||||
|
},
|
||||||
|
remap_options: None,
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Verify compaction occurred
|
||||||
|
assert!(stats.compaction.is_some());
|
||||||
|
let compaction_metrics = stats.compaction.unwrap();
|
||||||
|
assert!(compaction_metrics.fragments_removed > 0);
|
||||||
|
|
||||||
|
// Verify data integrity after compaction
|
||||||
|
let final_row_count = table.count_rows(None).await.unwrap();
|
||||||
|
assert_eq!(final_row_count, 600);
|
||||||
|
|
||||||
|
// Verify data content is correct
|
||||||
|
let batches = table
|
||||||
|
.query()
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
.try_collect::<Vec<_>>()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let total_rows: usize = batches.iter().map(|b| b.num_rows()).sum();
|
||||||
|
assert_eq!(total_rows, 600);
|
||||||
|
|
||||||
|
// Verify the values are as expected
|
||||||
|
let mut all_values: Vec<i32> = Vec::new();
|
||||||
|
for batch in &batches {
|
||||||
|
let array = batch["i"].as_any().downcast_ref::<Int32Array>().unwrap();
|
||||||
|
all_values.extend(array.values().iter().copied());
|
||||||
|
}
|
||||||
|
all_values.sort();
|
||||||
|
let expected: Vec<i32> = (0..600).collect();
|
||||||
|
assert_eq!(all_values, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_optimize_prune_versions() {
|
||||||
|
let conn = connect("memory://").execute().await.unwrap();
|
||||||
|
|
||||||
|
// Create a table
|
||||||
|
let schema = Arc::new(Schema::new(vec![Field::new("i", DataType::Int32, false)]));
|
||||||
|
let batch = RecordBatch::try_new(
|
||||||
|
schema.clone(),
|
||||||
|
vec![Arc::new(Int32Array::from_iter_values(0..10))],
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let table = conn
|
||||||
|
.create_table(
|
||||||
|
"test_prune",
|
||||||
|
RecordBatchIterator::new(vec![Ok(batch)], schema.clone()),
|
||||||
|
)
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Make several modifications to create versions
|
||||||
|
for i in 0..5 {
|
||||||
|
let batch = RecordBatch::try_new(
|
||||||
|
schema.clone(),
|
||||||
|
vec![Arc::new(Int32Array::from_iter_values(
|
||||||
|
(i * 10 + 10)..((i + 1) * 10 + 10),
|
||||||
|
))],
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
table
|
||||||
|
.add(RecordBatchIterator::new(vec![Ok(batch)], schema.clone()))
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify multiple versions exist
|
||||||
|
let versions = table.list_versions().await.unwrap();
|
||||||
|
assert!(versions.len() > 1);
|
||||||
|
|
||||||
|
// Run prune with a very old cutoff (won't delete recent versions)
|
||||||
|
let stats = table
|
||||||
|
.optimize(OptimizeAction::Prune {
|
||||||
|
older_than: Some(chrono::Duration::try_days(0).unwrap()),
|
||||||
|
delete_unverified: Some(true),
|
||||||
|
error_if_tagged_old_versions: None,
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Prune-only operation should not have compaction stats
|
||||||
|
assert!(stats.compaction.is_none());
|
||||||
|
|
||||||
|
// Verify prune stats
|
||||||
|
let prune_stats = stats.prune.unwrap();
|
||||||
|
assert!(prune_stats.bytes_removed > 0);
|
||||||
|
assert_eq!(prune_stats.old_versions, 5);
|
||||||
|
|
||||||
|
// Verify data is still intact
|
||||||
|
let final_row_count = table.count_rows(None).await.unwrap();
|
||||||
|
assert_eq!(final_row_count, 60);
|
||||||
|
|
||||||
|
// Verify data content is correct
|
||||||
|
let batches = table
|
||||||
|
.query()
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
.try_collect::<Vec<_>>()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let mut all_values: Vec<i32> = Vec::new();
|
||||||
|
for batch in &batches {
|
||||||
|
let array = batch["i"].as_any().downcast_ref::<Int32Array>().unwrap();
|
||||||
|
all_values.extend(array.values().iter().copied());
|
||||||
|
}
|
||||||
|
all_values.sort();
|
||||||
|
let expected: Vec<i32> = (0..60).collect();
|
||||||
|
assert_eq!(all_values, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_optimize_index() {
|
||||||
|
let conn = connect("memory://").execute().await.unwrap();
|
||||||
|
|
||||||
|
// Create a table with data
|
||||||
|
let schema = Arc::new(Schema::new(vec![Field::new("i", DataType::Int32, false)]));
|
||||||
|
let batch = RecordBatch::try_new(
|
||||||
|
schema.clone(),
|
||||||
|
vec![Arc::new(Int32Array::from_iter_values(0..100))],
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let table = conn
|
||||||
|
.create_table(
|
||||||
|
"test_index_optimize",
|
||||||
|
RecordBatchIterator::new(vec![Ok(batch)], schema.clone()),
|
||||||
|
)
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Create an index
|
||||||
|
table
|
||||||
|
.create_index(&["i"], Index::BTree(BTreeIndexBuilder::default()))
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Add more data (unindexed)
|
||||||
|
let batch = RecordBatch::try_new(
|
||||||
|
schema.clone(),
|
||||||
|
vec![Arc::new(Int32Array::from_iter_values(100..200))],
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
table
|
||||||
|
.add(RecordBatchIterator::new(vec![Ok(batch)], schema.clone()))
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Verify index stats before optimization
|
||||||
|
let indices = table.list_indices().await.unwrap();
|
||||||
|
assert_eq!(indices.len(), 1);
|
||||||
|
let index_name = indices[0].name.clone();
|
||||||
|
let stats_before = table.index_stats(&index_name).await.unwrap().unwrap();
|
||||||
|
assert_eq!(stats_before.num_indexed_rows, 100);
|
||||||
|
assert_eq!(stats_before.num_unindexed_rows, 100);
|
||||||
|
|
||||||
|
// Run index optimization
|
||||||
|
let stats = table
|
||||||
|
.optimize(OptimizeAction::Index(Default::default()))
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// For index optimization, compaction and prune stats should be None
|
||||||
|
assert!(stats.compaction.is_none());
|
||||||
|
assert!(stats.prune.is_none());
|
||||||
|
|
||||||
|
// Verify index stats after optimization
|
||||||
|
let stats_after = table.index_stats(&index_name).await.unwrap().unwrap();
|
||||||
|
assert_eq!(stats_after.num_indexed_rows, 200);
|
||||||
|
assert_eq!(stats_after.num_unindexed_rows, 0);
|
||||||
|
assert!(stats_after.num_indices.is_some());
|
||||||
|
|
||||||
|
// Verify data integrity
|
||||||
|
let final_row_count = table.count_rows(None).await.unwrap();
|
||||||
|
assert_eq!(final_row_count, 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_optimize_all() {
|
||||||
|
let conn = connect("memory://").execute().await.unwrap();
|
||||||
|
|
||||||
|
// Create a table with data
|
||||||
|
let schema = Arc::new(Schema::new(vec![Field::new("i", DataType::Int32, false)]));
|
||||||
|
let batch = RecordBatch::try_new(
|
||||||
|
schema.clone(),
|
||||||
|
vec![Arc::new(Int32Array::from_iter_values(0..100))],
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let table = conn
|
||||||
|
.create_table(
|
||||||
|
"test_optimize_all",
|
||||||
|
RecordBatchIterator::new(vec![Ok(batch)], schema.clone()),
|
||||||
|
)
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Add more data
|
||||||
|
for i in 0..3 {
|
||||||
|
let batch = RecordBatch::try_new(
|
||||||
|
schema.clone(),
|
||||||
|
vec![Arc::new(Int32Array::from_iter_values(
|
||||||
|
(i * 100 + 100)..((i + 1) * 100 + 100),
|
||||||
|
))],
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
table
|
||||||
|
.add(RecordBatchIterator::new(vec![Ok(batch)], schema.clone()))
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run all optimizations
|
||||||
|
let stats = table.optimize(OptimizeAction::All).await.unwrap();
|
||||||
|
|
||||||
|
// Verify stats from both compaction and prune
|
||||||
|
assert!(stats.compaction.is_some());
|
||||||
|
assert!(stats.prune.is_some());
|
||||||
|
|
||||||
|
// Verify data integrity
|
||||||
|
let final_row_count = table.count_rows(None).await.unwrap();
|
||||||
|
assert_eq!(final_row_count, 400);
|
||||||
|
|
||||||
|
// Verify data content
|
||||||
|
let batches = table
|
||||||
|
.query()
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
.try_collect::<Vec<_>>()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let mut all_values: Vec<i32> = Vec::new();
|
||||||
|
for batch in &batches {
|
||||||
|
let array = batch["i"].as_any().downcast_ref::<Int32Array>().unwrap();
|
||||||
|
all_values.extend(array.values().iter().copied());
|
||||||
|
}
|
||||||
|
all_values.sort();
|
||||||
|
let expected: Vec<i32> = (0..400).collect();
|
||||||
|
assert_eq!(all_values, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_optimize_default_action() {
|
||||||
|
// Verify that default action is All
|
||||||
|
let action: OptimizeAction = Default::default();
|
||||||
|
assert!(matches!(action, OptimizeAction::All));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_optimize_stats_default() {
|
||||||
|
// Verify OptimizeStats default values
|
||||||
|
let stats: OptimizeStats = Default::default();
|
||||||
|
assert!(stats.compaction.is_none());
|
||||||
|
assert!(stats.prune.is_none());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_compact_with_deferred_index_remap() {
|
||||||
|
// Smoke test: verifies compaction with deferred index remap doesn't error.
|
||||||
|
// We don't currently assert that remap is actually deferred.
|
||||||
|
let conn = connect("memory://").execute().await.unwrap();
|
||||||
|
|
||||||
|
// Create a table with data
|
||||||
|
let schema = Arc::new(Schema::new(vec![Field::new("id", DataType::Int32, false)]));
|
||||||
|
let batch = RecordBatch::try_new(
|
||||||
|
schema.clone(),
|
||||||
|
vec![Arc::new(Int32Array::from_iter_values(0..100))],
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let table = conn
|
||||||
|
.create_table(
|
||||||
|
"test_deferred_remap",
|
||||||
|
RecordBatchIterator::new(vec![Ok(batch.clone())], schema.clone()),
|
||||||
|
)
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Add more data
|
||||||
|
table
|
||||||
|
.add(RecordBatchIterator::new(vec![Ok(batch)], schema.clone()))
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Create an index
|
||||||
|
table
|
||||||
|
.create_index(&["id"], Index::BTree(BTreeIndexBuilder::default()))
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Run compaction with deferred index remap
|
||||||
|
let stats = table
|
||||||
|
.optimize(OptimizeAction::Compact {
|
||||||
|
options: CompactionOptions {
|
||||||
|
target_rows_per_fragment: 2000,
|
||||||
|
defer_index_remap: true,
|
||||||
|
..Default::default()
|
||||||
|
},
|
||||||
|
remap_options: None,
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
assert!(stats.compaction.is_some());
|
||||||
|
|
||||||
|
// Verify data integrity after compaction
|
||||||
|
let final_row_count = table.count_rows(None).await.unwrap();
|
||||||
|
assert_eq!(final_row_count, 200);
|
||||||
|
|
||||||
|
// Verify data content is correct
|
||||||
|
let batches = table
|
||||||
|
.query()
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
.try_collect::<Vec<_>>()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let mut all_values: Vec<i32> = Vec::new();
|
||||||
|
for batch in &batches {
|
||||||
|
let array = batch["id"].as_any().downcast_ref::<Int32Array>().unwrap();
|
||||||
|
all_values.extend(array.values().iter().copied());
|
||||||
|
}
|
||||||
|
all_values.sort();
|
||||||
|
|
||||||
|
// Since we added the same data twice (0..100 twice), we expect 200 values
|
||||||
|
// with values 0-99 appearing twice
|
||||||
|
let mut expected: Vec<i32> = (0..100).chain(0..100).collect();
|
||||||
|
expected.sort();
|
||||||
|
assert_eq!(all_values, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_compaction_preserves_schema() {
|
||||||
|
let conn = connect("memory://").execute().await.unwrap();
|
||||||
|
|
||||||
|
// Create a table with multiple columns
|
||||||
|
let schema = Arc::new(Schema::new(vec![
|
||||||
|
Field::new("id", DataType::Int32, false),
|
||||||
|
Field::new("name", DataType::Utf8, true),
|
||||||
|
]));
|
||||||
|
|
||||||
|
let batch = RecordBatch::try_new(
|
||||||
|
schema.clone(),
|
||||||
|
vec![
|
||||||
|
Arc::new(Int32Array::from_iter_values(0..10)),
|
||||||
|
Arc::new(StringArray::from(
|
||||||
|
(0..10).map(|i| format!("name_{}", i)).collect::<Vec<_>>(),
|
||||||
|
)),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let original_schema = batch.schema();
|
||||||
|
|
||||||
|
let table = conn
|
||||||
|
.create_table(
|
||||||
|
"test_schema_preserved",
|
||||||
|
RecordBatchIterator::new(vec![Ok(batch.clone())], schema.clone()),
|
||||||
|
)
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Add more data
|
||||||
|
table
|
||||||
|
.add(RecordBatchIterator::new(vec![Ok(batch)], schema.clone()))
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Run compaction
|
||||||
|
table
|
||||||
|
.optimize(OptimizeAction::Compact {
|
||||||
|
options: CompactionOptions::default(),
|
||||||
|
remap_options: None,
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Verify schema is preserved
|
||||||
|
let current_schema = table.schema().await.unwrap();
|
||||||
|
assert_eq!(current_schema, original_schema);
|
||||||
|
|
||||||
|
// Verify data is intact and correct
|
||||||
|
let batches = table
|
||||||
|
.query()
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
.try_collect::<Vec<_>>()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let total_rows: usize = batches.iter().map(|b| b.num_rows()).sum();
|
||||||
|
assert_eq!(total_rows, 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_optimize_empty_table() {
|
||||||
|
let conn = connect("memory://").execute().await.unwrap();
|
||||||
|
|
||||||
|
// Create a table and delete all data
|
||||||
|
let schema = Arc::new(Schema::new(vec![Field::new("i", DataType::Int32, false)]));
|
||||||
|
let batch = RecordBatch::try_new(
|
||||||
|
schema.clone(),
|
||||||
|
vec![Arc::new(Int32Array::from_iter_values(0..10))],
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let table = conn
|
||||||
|
.create_table(
|
||||||
|
"test_empty_optimize",
|
||||||
|
RecordBatchIterator::new(vec![Ok(batch)], schema.clone()),
|
||||||
|
)
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Delete all rows
|
||||||
|
table.delete("true").await.unwrap();
|
||||||
|
|
||||||
|
// Verify table is empty
|
||||||
|
assert_eq!(table.count_rows(None).await.unwrap(), 0);
|
||||||
|
|
||||||
|
// Optimize should work on empty table
|
||||||
|
let stats = table.optimize(OptimizeAction::All).await.unwrap();
|
||||||
|
assert!(stats.compaction.is_some());
|
||||||
|
assert!(stats.prune.is_some());
|
||||||
|
|
||||||
|
// Verify table is still empty but schema is preserved
|
||||||
|
assert_eq!(table.count_rows(None).await.unwrap(), 0);
|
||||||
|
let current_schema = table.schema().await.unwrap();
|
||||||
|
assert_eq!(current_schema, schema);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[rstest]
|
||||||
|
#[case::all(OptimizeAction::All)]
|
||||||
|
#[case::compact(OptimizeAction::Compact {
|
||||||
|
options: CompactionOptions::default(),
|
||||||
|
remap_options: None,
|
||||||
|
})]
|
||||||
|
#[case::prune(OptimizeAction::Prune {
|
||||||
|
older_than: Some(chrono::Duration::try_days(0).unwrap()),
|
||||||
|
delete_unverified: Some(true),
|
||||||
|
error_if_tagged_old_versions: None,
|
||||||
|
})]
|
||||||
|
#[case::index(OptimizeAction::Index(Default::default()))]
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_optimize_fails_on_checked_out_table(#[case] action: OptimizeAction) {
|
||||||
|
let conn = connect("memory://").execute().await.unwrap();
|
||||||
|
|
||||||
|
let schema = Arc::new(Schema::new(vec![Field::new("i", DataType::Int32, false)]));
|
||||||
|
let batch = RecordBatch::try_new(
|
||||||
|
schema.clone(),
|
||||||
|
vec![Arc::new(Int32Array::from_iter_values(0..10))],
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let table = conn
|
||||||
|
.create_table(
|
||||||
|
"test_checkout_optimize",
|
||||||
|
RecordBatchIterator::new(vec![Ok(batch.clone())], schema.clone()),
|
||||||
|
)
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
table
|
||||||
|
.add(RecordBatchIterator::new(vec![Ok(batch)], schema.clone()))
|
||||||
|
.execute()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
table.checkout(1).await.unwrap();
|
||||||
|
|
||||||
|
let result = table.optimize(action).await;
|
||||||
|
assert!(result.is_err());
|
||||||
|
|
||||||
|
let err_msg = result.unwrap_err().to_string();
|
||||||
|
assert!(
|
||||||
|
err_msg.contains("cannot be modified when a specific version is checked out"),
|
||||||
|
"Expected error message about checked out table, got: {}",
|
||||||
|
err_msg
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user