From 4d7a64712f7fbe39bffaf110f3eb790943bd7874 Mon Sep 17 00:00:00 2001 From: Will Jones Date: Wed, 28 Oct 2026 14:04:41 -0700 Subject: [PATCH] docs: adopt Embedded/Distributed terminology across docs and SDKs (#4713) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Adopts the product terminology guide across the docs site pages, SDK docstrings and error messages. "LanceDB OSS" and local mode become **LanceDB Embedded**. "Remote" as the execution model becomes **LanceDB Distributed**, which LanceDB Enterprise provides. Where free vs paid is the point, pages contrast "LanceDB Embedded (open source)" with "LanceDB Enterprise". This is a first trial of the Embedded name, so reviewers can judge it in context. - **Embedded vs Distributed** for where execution runs (`optimize()`, consistency, branching, maintenance). Main pages define it once: "LanceDB Enterprise runs LanceDB Distributed: …" - **LanceDB Cloud** is kept only for legacy-Cloud specifics (`db://` region, the brute-force KNN limit) and marked legacy. "Cloud and Enterprise" becomes Enterprise or Distributed. - **Plan executor** becomes "executor" or the fleet name. - **Error messages** change, e.g. `optimize is not supported for remote tables.` → `... in LanceDB Distributed.` Tests that match on them are updated. - **Vale rules** (`EmbeddedName`, `OSSProduct`, `RemoteExecution`, `DistributedEnterprise`, `LegacyCloud`, `InternalNames`) enforce the terms in prose. Unchanged: identifiers (`availability.oss`, the `remote` module and feature, `RemoteTable`, `db://`), heading anchors, internal code comments, and Geneva. ## Evidence - Rust lib tests for the changed messages and the Python tests in `test_remote_db.py`, `test_materialized_views.py` and `test_table.py` pass locally. - Not run locally: - The Node tests: `remote.test.ts` and `table.test.ts` have updated assertions. - Vale. - The `experimental_functions`-marked materialized-view tests. - `docs/src` API reference was hand-edited to match the docstrings rather than regenerated. ## Merge Risk **Door:** two-way; prose and message text only. **Blast Radius:** `docs`, `error-messages`: callers matching on old error strings would break. Companion PRs: lancedb/docs (assembler labels, STYLE.md) and sophon (Enterprise pages). 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5.5 --- .claude-plugin/marketplace.json | 2 +- .github/vale/README.md | 12 +- .../styles/LanceDB/DistributedEnterprise.yml | 19 +++ .github/vale/styles/LanceDB/EmbeddedName.yml | 22 ++++ .github/vale/styles/LanceDB/InternalNames.yml | 25 ++++ .github/vale/styles/LanceDB/LegacyCloud.yml | 21 ++++ .github/vale/styles/LanceDB/OSSProduct.yml | 28 +++++ .github/vale/styles/LanceDB/ProductNames.yml | 1 - .../vale/styles/LanceDB/RemoteExecution.yml | 33 ++++++ CONTRIBUTING.md | 15 +-- README.md | 4 +- docs/openapi.yml | 6 +- docs/src/java/java.md | 12 +- docs/src/js/classes/Connection.md | 6 +- docs/src/js/classes/Table.md | 27 ++--- docs/src/js/functions/connect.md | 10 +- docs/src/js/functions/connectNamespace.md | 2 +- docs/src/js/interfaces/AddDataOptions.md | 4 +- docs/src/js/interfaces/ClientConfig.md | 2 +- docs/src/js/interfaces/ConnectionOptions.md | 20 ++-- docs/src/js/interfaces/IndexConfig.md | 20 ++-- .../RefreshMaterializedViewResult.md | 6 +- docs/src/js/type-aliases/BlobReadOptions.md | 2 +- docs/src/python/python.md | 34 +++--- docs/web/agent-branch-experiments.mdx | 6 +- docs/web/api-reference/rest/index.mdx | 2 +- docs/web/architecture.mdx | 30 ++--- docs/web/basics/agentic-skills.mdx | 16 +-- docs/web/basics/connect.mdx | 17 +-- docs/web/basics/guarantees.mdx | 4 +- docs/web/basics/jobs.mdx | 13 ++- docs/web/basics/lakehouse.mdx | 2 +- docs/web/basics/lance.mdx | 4 +- docs/web/basics/naming.mdx | 2 +- docs/web/basics/offerings.mdx | 13 ++- docs/web/basics/query.mdx | 2 +- docs/web/basics/sdk.mdx | 17 +-- docs/web/basics/sql.mdx | 8 +- docs/web/curation/index.mdx | 4 +- docs/web/curation/sampling.mdx | 4 +- docs/web/deployment/monitoring.mdx | 4 +- docs/web/deployment/storage.mdx | 4 +- docs/web/deployment/support.mdx | 4 +- docs/web/embedding/index.mdx | 8 +- docs/web/embedding/quickstart.mdx | 8 +- docs/web/enterprise/authentication.mdx | 4 +- docs/web/enterprise/deployment/index.mdx | 2 +- docs/web/enterprise/distributed-search.mdx | 8 +- docs/web/enterprise/index.mdx | 2 +- docs/web/enterprise/security.mdx | 2 +- .../add-computed-column.mdx | 4 +- docs/web/feature-engineering/index.mdx | 6 +- .../materialized-views.mdx | 8 +- .../feature-engineering/refresh-column.mdx | 10 +- docs/web/governance/authorization.mdx | 2 +- docs/web/index.mdx | 15 ++- docs/web/indexing/fts-index.mdx | 2 +- docs/web/indexing/reindexing.mdx | 8 +- docs/web/indexing/vector-index.mdx | 8 +- docs/web/ingestion/create-table.mdx | 2 +- docs/web/ingestion/delete.mdx | 4 +- docs/web/ingestion/index.mdx | 4 +- docs/web/ingestion/insert.mdx | 8 +- docs/web/ingestion/merge-insert.mdx | 4 +- docs/web/ingestion/update.mdx | 4 +- docs/web/integrations/ai/agno.mdx | 2 +- docs/web/integrations/ai/hermes-agent.mdx | 2 +- docs/web/integrations/data/dlt.mdx | 4 +- docs/web/integrations/data/duckdb.mdx | 2 +- docs/web/integrations/data/polars_arrow.mdx | 2 +- docs/web/maintenance/background-jobs.mdx | 2 +- docs/web/maintenance/cleanup.mdx | 7 +- docs/web/maintenance/compaction.mdx | 10 +- docs/web/management/database.mdx | 26 +++-- docs/web/management/function.mdx | 13 ++- docs/web/management/materialized-view.mdx | 4 +- docs/web/management/namespace.mdx | 6 +- docs/web/management/table.mdx | 17 +-- docs/web/quickstart.mdx | 5 +- docs/web/reranking/index.mdx | 2 +- docs/web/search/explain.mdx | 19 +-- docs/web/search/filtering.mdx | 2 +- docs/web/search/full-text-search.mdx | 10 +- docs/web/search/hybrid-search.mdx | 8 +- docs/web/search/index.mdx | 8 +- docs/web/search/vector-search.mdx | 6 +- .../images/overview/lancedb-architecture.svg | 6 +- .../assets/images/overview/lancedb-suite.svg | 4 +- docs/web/tables/branching.mdx | 12 +- docs/web/tables/consistency.mdx | 14 ++- docs/web/training/data-loading.mdx | 2 +- docs/web/training/torch.mdx | 6 +- .../agents/nvidia-rag-blueprint/index.mdx | 4 +- java/README.md | 6 +- .../LanceDbNamespaceClientBuilder.java | 2 +- .../java/com/lancedb/LanceDbRestClient.java | 2 +- .../java/com/lancedb/LanceDbTableRTE.java | 2 +- nodejs/__test__/remote.test.ts | 12 +- nodejs/__test__/table.test.ts | 8 +- nodejs/lancedb/blob.ts | 2 +- nodejs/lancedb/connection.ts | 6 +- nodejs/lancedb/header.ts | 2 +- nodejs/lancedb/index.ts | 12 +- nodejs/lancedb/table.ts | 31 ++--- nodejs/src/lib.rs | 20 ++-- nodejs/src/remote.rs | 2 +- nodejs/src/table.rs | 31 ++--- python/python/lancedb/__init__.py | 50 ++++---- python/python/lancedb/db.py | 81 +++++++------ python/python/lancedb/functions.py | 8 +- python/python/lancedb/index.py | 10 +- python/python/lancedb/materialized_view.py | 25 ++-- python/python/lancedb/namespace.py | 2 +- python/python/lancedb/permutation.py | 4 +- python/python/lancedb/query.py | 17 +-- python/python/lancedb/remote/__init__.py | 4 +- python/python/lancedb/remote/db.py | 28 +++-- python/python/lancedb/remote/header.py | 2 +- python/python/lancedb/remote/table.py | 42 +++---- python/python/lancedb/sql.py | 2 +- python/python/lancedb/table.py | 109 ++++++++++-------- .../python/tests/test_materialized_views.py | 6 +- python/python/tests/test_remote_db.py | 20 ++-- python/python/tests/test_remote_options.py | 12 +- python/python/tests/test_table.py | 4 +- python/src/table.rs | 6 +- rust/lancedb/src/blob.rs | 14 +-- rust/lancedb/src/connection.rs | 104 +++++++++-------- rust/lancedb/src/connection/create_table.rs | 4 +- rust/lancedb/src/database.rs | 4 +- rust/lancedb/src/database/listing.rs | 2 +- rust/lancedb/src/function.rs | 4 +- rust/lancedb/src/index.rs | 20 ++-- rust/lancedb/src/lib.rs | 12 +- rust/lancedb/src/materialized_view.rs | 22 ++-- rust/lancedb/src/materialized_view/refresh.rs | 6 +- rust/lancedb/src/query.rs | 8 +- rust/lancedb/src/remote.rs | 2 +- rust/lancedb/src/remote/client.rs | 5 +- rust/lancedb/src/remote/db.rs | 26 +++-- rust/lancedb/src/remote/oauth.rs | 2 +- rust/lancedb/src/remote/table.rs | 38 +++--- rust/lancedb/src/sql.rs | 2 +- rust/lancedb/src/table.rs | 57 +++++---- rust/lancedb/src/table/add_columns.rs | 8 +- rust/lancedb/src/table/add_data.rs | 2 +- rust/lancedb/src/table/computed_columns.rs | 4 +- rust/lancedb/src/table/refresh.rs | 3 +- 148 files changed, 981 insertions(+), 755 deletions(-) create mode 100644 .github/vale/styles/LanceDB/DistributedEnterprise.yml create mode 100644 .github/vale/styles/LanceDB/EmbeddedName.yml create mode 100644 .github/vale/styles/LanceDB/InternalNames.yml create mode 100644 .github/vale/styles/LanceDB/LegacyCloud.yml create mode 100644 .github/vale/styles/LanceDB/OSSProduct.yml create mode 100644 .github/vale/styles/LanceDB/RemoteExecution.yml diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index bfc6290db..f5d93eb0a 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -8,7 +8,7 @@ { "name": "lancedb", "source": "./plugins/lancedb", - "description": "Write, review, debug, and document LanceDB pipelines in Python and TypeScript that work across local LanceDB OSS tables and remote LanceDB Enterprise/Cloud tables.", + "description": "Write, review, debug, and document LanceDB pipelines in Python and TypeScript that work with both LanceDB Embedded and LanceDB Enterprise.", "version": "0.1.0", "author": { "name": "LanceDB" diff --git a/.github/vale/README.md b/.github/vale/README.md index ad0573fdb..2cfbd1633 100644 --- a/.github/vale/README.md +++ b/.github/vale/README.md @@ -1,8 +1,16 @@ # LanceDB prose rules -These five rule files are copied unchanged from the `LanceDB.zip` asset of -`lancedb/docs` release `vale-lancedb-v0.1.0`. The archive SHA-256 is +`Dashes`, `PlainLanguage`, `ProductNames`, `VagueHeadings` and `VaguePhrases` +come from the `LanceDB.zip` asset of `lancedb/docs` release +`vale-lancedb-v0.1.0`, whose archive SHA-256 is `0730a43e919774121068811d5687c61dfc7a0421cff78e1393f5e565b622cb0f`. +`ProductNames` no longer swaps in "LanceDB OSS". + +The product-terminology rules were added here: `EmbeddedName`, +`RemoteExecution`, `OSSProduct`, `DistributedEnterprise`, `InternalNames` +(warnings) and `LegacyCloud` (suggestion). They enforce the names in the +docs repository's `STYLE.md#names`. Run every rule's tests from +`.github/vale` with `vale test --coverage styles`. Keeping the rules here lets contributors and CI run Vale without access to the source repository. The root `.vale.ini` preserves the release's MDX settings diff --git a/.github/vale/styles/LanceDB/DistributedEnterprise.yml b/.github/vale/styles/LanceDB/DistributedEnterprise.yml new file mode 100644 index 000000000..813d10375 --- /dev/null +++ b/.github/vale/styles/LanceDB/DistributedEnterprise.yml @@ -0,0 +1,19 @@ +extends: existence +message: "'%s' reads as two products. LanceDB Enterprise provides LanceDB Distributed: name the product or the execution model, not both." +link: https://github.com/lancedb/docs/blob/main/STYLE.md#names +level: warning +ignorecase: false +tokens: + - 'Distributed(?:\s+(?:and|or)\s+|\s*/\s*)(?:LanceDB\s+)?Enterprise' + - 'Enterprise(?:\s+(?:and|or)\s+|\s*/\s*)(?:LanceDB\s+)?Distributed' +tests: + - name: flags Distributed and Enterprise side by side + input: Choose Distributed or Enterprise. LanceDB Enterprise and LanceDB Distributed differ, and so does Distributed/Enterprise. + want: | + 1:8:LanceDB.DistributedEnterprise:'Distributed or Enterprise' reads as two products. LanceDB Enterprise provides LanceDB Distributed: name the product or the execution model, not both. + 1:43:LanceDB.DistributedEnterprise:'Enterprise and LanceDB Distributed' reads as two products. LanceDB Enterprise provides LanceDB Distributed: name the product or the execution model, not both. + 1:98:LanceDB.DistributedEnterprise:'Distributed/Enterprise' reads as two products. LanceDB Enterprise provides LanceDB Distributed: name the product or the execution model, not both. + - name: leaves the defining sentence and the Embedded pair alone + input: | + LanceDB Enterprise runs LanceDB Distributed. Compare Embedded and Distributed execution. Distributed search and enterprise teams are fine. + want: '' diff --git a/.github/vale/styles/LanceDB/EmbeddedName.yml b/.github/vale/styles/LanceDB/EmbeddedName.yml new file mode 100644 index 000000000..a372c8a04 --- /dev/null +++ b/.github/vale/styles/LanceDB/EmbeddedName.yml @@ -0,0 +1,22 @@ +extends: substitution +message: "Use '%s' instead of '%s'." +link: https://github.com/lancedb/docs/blob/main/STYLE.md#names +level: warning +ignorecase: false +# The in-process execution model is LanceDB Embedded, whether the data is on +# local disk or in object storage. Identifiers such as the `oss` product key +# are code, and code is never prose. +swap: + 'LanceDB\s+(?:OSS|Oss|oss|Local|local)': LanceDB Embedded + '[Ll]ocal\s+mode': LanceDB Embedded +tests: + - name: replaces the old names of the execution model + input: Start with LanceDB OSS, also called LanceDB Local, and move off local mode later. + want: | + 1:12:LanceDB.EmbeddedName:Use 'LanceDB Embedded' instead of 'LanceDB OSS'. + 1:37:LanceDB.EmbeddedName:Use 'LanceDB Embedded' instead of 'LanceDB Local'. + 1:65:LanceDB.EmbeddedName:Use 'LanceDB Embedded' instead of 'local mode'. + - name: leaves the current name, other uses of local, and code alone + input: | + LanceDB Embedded reads local disk or object storage. Run LanceDB locally, set `availability.oss`, or call `LanceDB OSS` in a literal. + want: '' diff --git a/.github/vale/styles/LanceDB/InternalNames.yml b/.github/vale/styles/LanceDB/InternalNames.yml new file mode 100644 index 000000000..0818090e1 --- /dev/null +++ b/.github/vale/styles/LanceDB/InternalNames.yml @@ -0,0 +1,25 @@ +extends: substitution +message: "Use '%s' instead of the internal name '%s'." +link: https://github.com/lancedb/docs/blob/main/STYLE.md#names +level: warning +ignorecase: false +# Internal component names stay out of public text. Environment variables such +# as `PHALANX_*` and Helm keys such as `planExecutorNodes` are code. Geneva is +# a product name and is not listed. +swap: + Phalanx: query node + '[Pp]lan\s+[Ee]xecutor': executor + '[Pp]lan\s+[Ee]xecutors': executors + Sophon: LanceDB Enterprise +tests: + - name: replaces internal component names + input: Phalanx sends work to a Plan Executor. Plan executors cache data in Sophon. + want: | + 1:1:LanceDB.InternalNames:Use 'query node' instead of the internal name 'Phalanx'. + 1:25:LanceDB.InternalNames:Use 'executor' instead of the internal name 'Plan Executor'. + 1:40:LanceDB.InternalNames:Use 'executors' instead of the internal name 'Plan executors'. + 1:69:LanceDB.InternalNames:Use 'LanceDB Enterprise' instead of the internal name 'Sophon'. + - name: leaves Geneva, configuration keys and code alone + input: | + Geneva runs on the executor + cache fleet. Set `PHALANX_REMOTE_FTS_SCORER` and `planExecutorNodes`. + want: '' diff --git a/.github/vale/styles/LanceDB/LegacyCloud.yml b/.github/vale/styles/LanceDB/LegacyCloud.yml new file mode 100644 index 000000000..668f66011 --- /dev/null +++ b/.github/vale/styles/LanceDB/LegacyCloud.yml @@ -0,0 +1,21 @@ +extends: existence +message: "'%s' is the legacy hosted service. Unless the text is specific to it, write 'LanceDB Enterprise' or 'LanceDB Distributed'." +link: https://github.com/lancedb/docs/blob/main/STYLE.md#names +level: suggestion +ignorecase: false +# A suggestion, because `db://` URIs, `api_key` and `region` for the hosted +# service are still documented as LanceDB Cloud. +tokens: + - 'LanceDB\s+Cloud' + - 'Cloud\s*/\s*Enterprise' + - 'Enterprise\s*/\s*Cloud' +tests: + - name: suggests checking each LanceDB Cloud mention + input: Connect to LanceDB Cloud with an API key. Cloud/Enterprise users get the cache. + want: | + 1:12:LanceDB.LegacyCloud:'LanceDB Cloud' is the legacy hosted service. Unless the text is specific to it, write 'LanceDB Enterprise' or 'LanceDB Distributed'. + 1:43:LanceDB.LegacyCloud:'Cloud/Enterprise' is the legacy hosted service. Unless the text is specific to it, write 'LanceDB Enterprise' or 'LanceDB Distributed'. + - name: leaves other clouds and code alone + input: | + Deploy into your own cloud account on Google Cloud. Pass `LanceDB Cloud` as a literal. + want: '' diff --git a/.github/vale/styles/LanceDB/OSSProduct.yml b/.github/vale/styles/LanceDB/OSSProduct.yml new file mode 100644 index 000000000..248129208 --- /dev/null +++ b/.github/vale/styles/LanceDB/OSSProduct.yml @@ -0,0 +1,28 @@ +extends: existence +message: "Avoid '%s'. OSS is not a product name: write 'LanceDB Embedded', or 'open source' as a property." +link: https://github.com/lancedb/docs/blob/main/STYLE.md#names +level: warning +ignorecase: false +# Bare OSS used as a product, as in "OSS and Enterprise" or "in OSS". "LanceDB +# OSS" is reported by LanceDB.EmbeddedName. +tokens: + - 'OSS(?:\s+(?:and|or|vs\.?|versus)\s+|\s*/\s*)(?:LanceDB\s+)?Enterprise' + - 'Enterprise(?:\s+(?:and|or|vs\.?|versus)\s+|\s*/\s*)OSS' + - '(?:in|on|from|using|than)\s+OSS' +tests: + - name: flags OSS presented as a product + input: Compare OSS vs Enterprise. It works in OSS and on OSS, unlike OSS/Enterprise. + want: | + 1:9:LanceDB.OSSProduct:Avoid 'OSS vs Enterprise'. OSS is not a product name: write 'LanceDB Embedded', or 'open source' as a property. + 1:37:LanceDB.OSSProduct:Avoid 'in OSS'. OSS is not a product name: write 'LanceDB Embedded', or 'open source' as a property. + 1:48:LanceDB.OSSProduct:Avoid 'on OSS'. OSS is not a product name: write 'LanceDB Embedded', or 'open source' as a property. + 1:63:LanceDB.OSSProduct:Avoid 'OSS/Enterprise'. OSS is not a product name: write 'LanceDB Embedded', or 'open source' as a property. + - name: flags the pair in either order + input: Both OSS and LanceDB Enterprise ship it, as do Enterprise or OSS. + want: | + 1:6:LanceDB.OSSProduct:Avoid 'OSS and LanceDB Enterprise'. OSS is not a product name: write 'LanceDB Embedded', or 'open source' as a property. + 1:48:LanceDB.OSSProduct:Avoid 'Enterprise or OSS'. OSS is not a product name: write 'LanceDB Embedded', or 'open source' as a property. + - name: leaves open source, identifiers and code alone + input: | + LanceDB Embedded (open source) and LanceDB Enterprise share the format. Set `oss: available` or read `in OSS` literally. + want: '' diff --git a/.github/vale/styles/LanceDB/ProductNames.yml b/.github/vale/styles/LanceDB/ProductNames.yml index e4621a521..2122679ef 100644 --- a/.github/vale/styles/LanceDB/ProductNames.yml +++ b/.github/vale/styles/LanceDB/ProductNames.yml @@ -9,7 +9,6 @@ swap: '(?:Lancedb|LanceDb|lanceDB|LANCEDB|Lance DB)': LanceDB 'LanceDB (?:cloud|CLOUD)': LanceDB Cloud 'LanceDB (?:enterprise|ENTERPRISE)': LanceDB Enterprise - 'LanceDB (?:oss|Oss)': LanceDB OSS '(?:HuggingFace|Huggingface|Hugging face)': Hugging Face Langchain: LangChain Typescript: TypeScript diff --git a/.github/vale/styles/LanceDB/RemoteExecution.yml b/.github/vale/styles/LanceDB/RemoteExecution.yml new file mode 100644 index 000000000..dc450993b --- /dev/null +++ b/.github/vale/styles/LanceDB/RemoteExecution.yml @@ -0,0 +1,33 @@ +extends: existence +message: "Avoid '%s'. Write 'LanceDB Distributed' for the execution model or 'LanceDB Enterprise' for the product." +link: https://github.com/lancedb/docs/blob/main/STYLE.md#names +level: warning +ignorecase: false +# Remote storage, remote URLs and a git remote are other things and stay. Class +# names such as `RemoteTable` are code, and code is never prose. +tokens: + - '[Rr]emote\s+(?:mode|tables?|connections?|databases?)' +tests: + - name: flags remote as the execution model + input: In remote mode, a remote table is opened through a remote connection. + want: | + 1:4:LanceDB.RemoteExecution:Avoid 'remote mode'. Write 'LanceDB Distributed' for the execution model or 'LanceDB Enterprise' for the product. + 1:19:LanceDB.RemoteExecution:Avoid 'remote table'. Write 'LanceDB Distributed' for the execution model or 'LanceDB Enterprise' for the product. + 1:52:LanceDB.RemoteExecution:Avoid 'remote connection'. Write 'LanceDB Distributed' for the execution model or 'LanceDB Enterprise' for the product. + - name: flags plurals and a heading + input: | + ## Remote tables + + Remote databases hold remote tables. + want: | + 1:4:LanceDB.RemoteExecution:Avoid 'Remote tables'. Write 'LanceDB Distributed' for the execution model or 'LanceDB Enterprise' for the product. + 3:1:LanceDB.RemoteExecution:Avoid 'Remote databases'. Write 'LanceDB Distributed' for the execution model or 'LanceDB Enterprise' for the product. + 3:23:LanceDB.RemoteExecution:Avoid 'remote tables'. Write 'LanceDB Distributed' for the execution model or 'LanceDB Enterprise' for the product. + - name: leaves other remotes and code alone + input: | + Push to the git remote, read remote storage and fetch a remote URL. `open_table` returns a `RemoteTable`; see `remote table` in the API. + + ```python + remote_table = db.open_table("remote table") + ``` + want: '' diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b7ecc16bb..c3bf61471 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -72,7 +72,7 @@ are wrappers around the Rust library. * `node`: **Deprecated** Typescript package source code * `java`: Java package source code * `docs/src`: SDK reference, built with mkdocs -* `docs/web`: website guides for LanceDB OSS and the APIs used by both OSS and Enterprise +* `docs/web`: website guides for LanceDB Embedded and the APIs used by both Embedded and Distributed * `docs/web-tests`: the tests the documentation's code examples are extracted from ## Documentation @@ -83,14 +83,14 @@ it is ready for readers. ### Choose the right place -- `docs/web/` holds website guides for LanceDB OSS and the APIs used by both - OSS and Enterprise. +- `docs/web/` holds website guides for LanceDB Embedded and the APIs used by both + Embedded and Distributed. - `docs/src/` holds the SDK reference. See [docs/README.md](docs/README.md) for its build and API-generation instructions. - `docs/web-tests/` and `rust/lancedb/tests/` hold tests used to generate the website's code examples. -Document SDK APIs here, and explain which operations work in OSS and Enterprise. +Document SDK APIs here, and explain which operations work in Embedded and Distributed. Put Enterprise-specific deployment and operating instructions in the Enterprise documentation. @@ -150,7 +150,8 @@ example. ### Say where a feature works Use `availability` in a page's frontmatter to describe the support covered by -that page. Each product is either `available` or `unavailable`; use the summary +that page. Each product (`oss` for LanceDB Embedded, `enterprise` for LanceDB +Enterprise) is either `available` or `unavailable`; use the summary and body for setup requirements, SDK differences and unsupported operations. For example, a page about signing in to Enterprise could declare: @@ -159,8 +160,8 @@ availability: oss: unavailable enterprise: available summary: >- - These sign-in instructions apply to LanceDB Enterprise. Embedded - LanceDB has no server to sign in to. + These sign-in instructions apply to LanceDB Enterprise. LanceDB + Embedded has no server to sign in to. ``` Check these claims with the feature owner. Don't use `varies`, treat an API diff --git a/README.md b/README.md index 7bf5d39fc..ea9431298 100644 --- a/README.md +++ b/README.md @@ -45,8 +45,8 @@ LanceDB is a central location where developers can build, train and analyze thei - **Advanced Features**: Zero-copy, automatic versioning, manage versions of your data without needing extra infrastructure. GPU support in building vector index. ### **Products**: -- **Open Source & Local**: 100% open source, runs locally or in your cloud. No vendor lock-in. -- **Cloud and Enterprise**: Production-scale vector search with no servers to manage. Complete data sovereignty and security. +- **LanceDB Embedded (open source)**: 100% open source, runs in your application's process; your data can live on local disk or in object storage. No vendor lock-in. +- **LanceDB Enterprise**: Production-scale distributed search, indexing, and maintenance. Plus, complete data sovereignty and security. ### **Ecosystem**: - **Columnar Storage**: Built on the Lance columnar format for efficient storage and analytics. diff --git a/docs/openapi.yml b/docs/openapi.yml index e619aa038..0eb5e02b8 100644 --- a/docs/openapi.yml +++ b/docs/openapi.yml @@ -1,9 +1,9 @@ openapi: 3.1.0 info: version: 1.0.0 - title: LanceDB Cloud API + title: LanceDB REST API description: | - LanceDB Cloud API is a RESTful API that allows users to access and modify data stored in LanceDB Cloud. + The LanceDB REST API is a RESTful API that allows users to access and modify data stored in LanceDB Enterprise or LanceDB Cloud (legacy). Table actions are considered temporary resource creations and all use POST method. contact: name: LanceDB support @@ -12,7 +12,7 @@ info: servers: - url: https://{db}.{region}.api.lancedb.com - description: LanceDB Cloud REST endpoint. + description: LanceDB Cloud (legacy) REST endpoint. For LanceDB Enterprise, use your deployment's endpoint. variables: db: default: "" diff --git a/docs/src/java/java.md b/docs/src/java/java.md index ed0ec9dd4..4bac3f752 100644 --- a/docs/src/java/java.md +++ b/docs/src/java/java.md @@ -1,10 +1,10 @@ # Java SDK -The LanceDB Java SDK provides a convenient way to interact with LanceDB Cloud and Enterprise deployments using the Lance REST Namespace API. +The LanceDB Java SDK provides a convenient way to interact with LanceDB Enterprise deployments using the Lance REST Namespace API. !!! note - The Java SDK currently only works for LanceDB remote database that connects to LanceDB Cloud and Enterprise. - Local database support is a work in progress. Check [LANCEDB-2848](https://github.com/lancedb/lancedb/issues/2848) for the latest progress. + The Java SDK currently only works with LanceDB Distributed, connecting to LanceDB Enterprise or LanceDB Cloud (legacy). + LanceDB Embedded support is a work in progress. Check [LANCEDB-2848](https://github.com/lancedb/lancedb/issues/2848) for the latest progress. ## Installation @@ -20,7 +20,7 @@ Add the following dependency to your `pom.xml`: ## Quick Start -### Connecting to LanceDB Cloud +### Connecting to LanceDB Cloud (legacy) ```java import com.lancedb.LanceDbNamespaceClientBuilder; @@ -51,8 +51,8 @@ LanceNamespace namespaceClient = LanceDbNamespaceClientBuilder.newBuilder() |--------|-------------|----------| | `apiKey(String)` | LanceDB API key | Yes | | `database(String)` | Database name | Yes | -| `endpoint(String)` | Custom endpoint URL for Enterprise deployments | No | -| `region(String)` | AWS region (default: "us-east-1") | No | +| `endpoint(String)` | Custom endpoint URL for LanceDB Enterprise deployments | No | +| `region(String)` | LanceDB Cloud (legacy) region (default: "us-east-1") | No | | `config(String, String)` | Additional configuration parameters | No | ### Opening a Table with Vended Credentials diff --git a/docs/src/js/classes/Connection.md b/docs/src/js/classes/Connection.md index 2496bc2a9..14f283cc9 100644 --- a/docs/src/js/classes/Connection.md +++ b/docs/src/js/classes/Connection.md @@ -180,9 +180,9 @@ abstract createMaterializedView( Define a materialized view named `name` over the table `source`. -Local creation and refresh require a source build with the +LanceDB Embedded creation and refresh require a source build with the `experimental-functions` Cargo feature, disabled in published packages. -Remote Cloud/Enterprise operations do not require this feature. +LanceDB Distributed operations do not require this feature. The view is populated before creation returns. Set `withNoData` to create only its definition and empty backing table. The view is a normal table: @@ -827,7 +827,7 @@ abstract renameTable( Rename a table. -Currently only supported by LanceDB Cloud. Local OSS connections and +Currently only supported in LanceDB Distributed. LanceDB Embedded connections and namespace-backed connections (via [connectNamespace](../functions/connectNamespace.md)) reject with a "not supported" error. diff --git a/docs/src/js/classes/Table.md b/docs/src/js/classes/Table.md index ded04d4c8..b1929019c 100644 --- a/docs/src/js/classes/Table.md +++ b/docs/src/js/classes/Table.md @@ -69,9 +69,9 @@ abstract addColumns(newColumnTransforms): Promise Add new columns with defined values. -Local computed-column declaration and refresh require a source build with -the `experimental-functions` Cargo feature. Published packages disable it; -remote Cloud/Enterprise operations remain available. +LanceDB Embedded computed-column declaration and refresh require a source +build with the `experimental-functions` Cargo feature. Published packages +disable it; LanceDB Distributed operations remain available. The `{ computed }` form stores the expression rather than evaluating it now: the column is committed with no values, and rows get them from @@ -83,7 +83,7 @@ computed, so a mutated input is reflected by the next refresh. While a declaration reads a column, that column cannot be renamed, retyped or dropped. -On LanceDB Cloud and Enterprise the expression is planned by the +In LanceDB Distributed the expression is planned by the server, and the refresh runs as a server job -- see [Table#refreshColumnAsync](Table.md#refreshcolumnasync). @@ -679,7 +679,7 @@ The per-row errors Function refreshes recorded on this table. A refresh running under a skip policy records each row it skipped with the input that failed and the error. This lists those records, newest job first, plus a summary for any fragment whose per-row detail was -capped. LanceDB Cloud and Enterprise only; reading errors needs read +capped. LanceDB Distributed only; reading errors needs read access to the table, since a message carries the value that failed. #### Parameters @@ -932,7 +932,7 @@ Prewarm one or more columns of data in the table. Prewarming is generally useful for columns used in filters or projections. Large columns (e.g. high-dimensional vectors or binary data) may not be practical to prewarm. - This feature is currently only supported on remote tables. + This feature is currently only supported in LanceDB Distributed. #### Returns @@ -1043,8 +1043,8 @@ Local refresh requires a source build with `experimental-functions`. Rows appended since the last refresh are filled by the next one, and rows whose inputs changed since they were computed are recomputed; -everything else is left as it is. Local tables only: a remote refresh -runs as a server job, through [Table#refreshColumnAsync](Table.md#refreshcolumnasync). +everything else is left as it is. LanceDB Embedded only: in LanceDB +Distributed a refresh runs as a server job, through [Table#refreshColumnAsync](Table.md#refreshcolumnasync). #### Parameters @@ -1068,14 +1068,15 @@ abstract refreshColumnAsync(column): Promise Like [Table#refreshColumn](Table.md#refreshcolumn), but returns a handle to the refresh job instead of blocking until it completes. -Local refresh requires a source build with `experimental-functions`. -Remote Cloud/Enterprise jobs do not require this feature. +LanceDB Embedded refresh requires a source build with +`experimental-functions`. LanceDB Distributed jobs do not require this +feature. The job may already be complete when returned; callers must not assume the column is filled until [Job.wait](Job.md#wait) resolves. Invalid input -- an unknown column, or one that is not computed -- rejects here rather -than failing the job. On local tables the job runs in-process; on -LanceDB Cloud and Enterprise it is the server's backfill job. +than failing the job. In LanceDB Embedded the job runs in-process; in +LanceDB Distributed it is the server's backfill job. #### Parameters @@ -1304,7 +1305,7 @@ Tokenize a full-text search query using the tokenizer configured on an FTS index Specify exactly one of `column` or `indexName`. Model-backed tokenizers such as `jieba/*` and `lindera/*` are rebuilt in -the client process from index metadata. For remote tables, this means the +the client process from index metadata. In LanceDB Distributed, this means the same tokenizer model files must also exist locally (under `LANCE_LANGUAGE_MODEL_HOME`) and must match the files the server uses. A mismatch cannot be detected: the returned tokens may differ from what the diff --git a/docs/src/js/functions/connect.md b/docs/src/js/functions/connect.md index 009b7d785..5cfd11a71 100644 --- a/docs/src/js/functions/connect.md +++ b/docs/src/js/functions/connect.md @@ -20,15 +20,15 @@ Connect to a LanceDB instance at the given URI. Accepted formats: -- `/path/to/database` - local database +- `/path/to/database` - database on the local file system - `s3://bucket/path/to/database` or `gs://bucket/path/to/database` - database on cloud storage -- `db://host:port` - remote database (LanceDB cloud) +- `db://host:port` - LanceDB Enterprise or LanceDB Cloud (legacy) database ### Parameters * **uri**: `string` The uri of the database. If the database uri starts - with `db://` then it connects to a remote database. + with `db://` then it connects to LanceDB Enterprise or LanceDB Cloud (legacy). * **options?**: `Partial`<[`ConnectionOptions`](../interfaces/ConnectionOptions.md)> The options to use when connecting to the database @@ -80,9 +80,9 @@ Connect to a LanceDB instance at the given URI. Accepted formats: -- `/path/to/database` - local database +- `/path/to/database` - database on the local file system - `s3://bucket/path/to/database` or `gs://bucket/path/to/database` - database on cloud storage -- `db://host:port` - remote database (LanceDB cloud) +- `db://host:port` - LanceDB Enterprise or LanceDB Cloud (legacy) database ### Parameters diff --git a/docs/src/js/functions/connectNamespace.md b/docs/src/js/functions/connectNamespace.md index d49a8ced7..7f0ddb972 100644 --- a/docs/src/js/functions/connectNamespace.md +++ b/docs/src/js/functions/connectNamespace.md @@ -18,7 +18,7 @@ function connectNamespace( Connect to a LanceDB database through a namespace. Unlike [connect](connect.md), which routes by URI scheme (local path vs. -`db://` cloud), `connectNamespace` always returns a namespace-backed +`db://`), `connectNamespace` always returns a namespace-backed connection. The `implName` selects the namespace implementation: - `"dir"` — directory namespace, configured with [DirNamespaceConfig](../interfaces/DirNamespaceConfig.md). diff --git a/docs/src/js/interfaces/AddDataOptions.md b/docs/src/js/interfaces/AddDataOptions.md index eb10fdb0f..26c5ccef8 100644 --- a/docs/src/js/interfaces/AddDataOptions.md +++ b/docs/src/js/interfaces/AddDataOptions.md @@ -18,8 +18,8 @@ optional allowExternalBlobOutsideBases: boolean; Whether blob URIs outside registered external bases may be written. -Defaults to `false`. This option is supported only for local/native -tables; remote tables return an error when it is enabled. An enabled write +Defaults to `false`. This option is supported only in LanceDB Embedded; +LanceDB Distributed returns an error when it is enabled. An enabled write stores the absolute URI reference without registering a base or copying the external object into the database. The object must remain accessible when the blob is read later. diff --git a/docs/src/js/interfaces/ClientConfig.md b/docs/src/js/interfaces/ClientConfig.md index d5ce32117..cc075ceed 100644 --- a/docs/src/js/interfaces/ClientConfig.md +++ b/docs/src/js/interfaces/ClientConfig.md @@ -80,7 +80,7 @@ optional userId: string; User identifier for tracking purposes. -This is sent as the `x-lancedb-user-id` header in requests to LanceDB Cloud/Enterprise. +This is sent as the `x-lancedb-user-id` header in requests to LanceDB Enterprise. It can be set directly, or via the `LANCEDB_USER_ID` environment variable. Alternatively, set `LANCEDB_USER_ID_ENV_KEY` to specify another environment variable that contains the user ID value. diff --git a/docs/src/js/interfaces/ConnectionOptions.md b/docs/src/js/interfaces/ConnectionOptions.md index 42f80f077..04cbff0ea 100644 --- a/docs/src/js/interfaces/ConnectionOptions.md +++ b/docs/src/js/interfaces/ConnectionOptions.md @@ -14,7 +14,7 @@ optional apiKey: string; ``` -(For LanceDB cloud only): the API key to use with LanceDB Cloud. +(For LanceDB Enterprise or LanceDB Cloud only): the API key to use. Can also be set via the environment variable `LANCEDB_API_KEY`. @@ -26,7 +26,7 @@ Can also be set via the environment variable `LANCEDB_API_KEY`. optional clientConfig: ClientConfig; ``` -(For LanceDB cloud only): configuration for the remote HTTP client. +(For LanceDB Enterprise or LanceDB Cloud only): configuration for the HTTP client. *** @@ -36,8 +36,8 @@ optional clientConfig: ClientConfig; optional hostOverride: string; ``` -(For LanceDB cloud only): the host to use for LanceDB cloud. Used -for testing purposes. +(For LanceDB Enterprise only): the host of the LanceDB Enterprise +deployment to connect to. *** @@ -47,7 +47,7 @@ for testing purposes. optional manifestEnabled: boolean; ``` -(For LanceDB OSS only): use directory namespace manifests as the source +(For LanceDB Embedded only): use directory namespace manifests as the source of truth for table metadata. Existing directory-listed root tables are migrated into the manifest on access. @@ -59,7 +59,7 @@ migrated into the manifest on access. optional namespaceClientProperties: Record; ``` -(For LanceDB OSS only): extra properties for the backing namespace +(For LanceDB Embedded only): extra properties for the backing namespace client used by manifest-enabled native connections. *** @@ -70,7 +70,7 @@ client used by manifest-enabled native connections. optional oauthConfig: NativeOAuthConfig; ``` -(For LanceDB cloud only): OAuth configuration for IdP-based +(For LanceDB Enterprise only): OAuth configuration for IdP-based authentication (e.g., Azure Entra ID). When set, token acquisition and refresh are handled entirely in Rust. TypeScript users should pass the public `OAuthConfig` type exported from `@lancedb/lancedb`. @@ -105,7 +105,7 @@ storage, raising per-read latency and cost. optional region: string; ``` -(For LanceDB cloud only): the region to use for LanceDB cloud. +(For LanceDB Cloud only): the region to use for LanceDB Cloud (legacy). Defaults to 'us-east-1'. *** @@ -116,7 +116,7 @@ Defaults to 'us-east-1'. optional session: Session; ``` -(For LanceDB OSS only): the session to use for this connection. Holds +(For LanceDB Embedded only): the session to use for this connection. Holds shared caches and other session-specific state. *** @@ -127,6 +127,6 @@ shared caches and other session-specific state. optional storageOptions: Record; ``` -(For LanceDB OSS only): configuration for object storage. +(For LanceDB Embedded only): configuration for object storage. The available options are described at https://docs.lancedb.com/storage/ diff --git a/docs/src/js/interfaces/IndexConfig.md b/docs/src/js/interfaces/IndexConfig.md index c217e38e8..df3b81c52 100644 --- a/docs/src/js/interfaces/IndexConfig.md +++ b/docs/src/js/interfaces/IndexConfig.md @@ -31,7 +31,7 @@ optional createdAt: Date; When the index was created. -`undefined` for remote tables or indices created before timestamps were tracked. +`undefined` in LanceDB Distributed or indices created before timestamps were tracked. *** @@ -43,8 +43,8 @@ optional indexDetails: any; Index-type-specific details parsed as a JavaScript object. -Falls back to a raw string if JSON parsing fails. `undefined` for -remote tables or when details are unavailable. +Falls back to a raw string if JSON parsing fails. `undefined` in +LanceDB Distributed or when details are unavailable. *** @@ -66,7 +66,7 @@ optional indexUuid: string; The UUID of the first segment of the index. -`undefined` for remote tables, which do not yet surface this. +`undefined` in LanceDB Distributed, which does not yet surface this. *** @@ -78,7 +78,7 @@ optional indexVersion: number; The on-disk index format version. -`undefined` for remote tables. +`undefined` in LanceDB Distributed. *** @@ -100,7 +100,7 @@ optional numIndexedRows: number; The number of rows indexed, across all segments. -May be `undefined` for remote tables if the server does not report it. +May be `undefined` in LanceDB Distributed if the server does not report it. *** @@ -112,7 +112,7 @@ optional numSegments: number; The number of segments that make up the index. -`undefined` for remote tables. +`undefined` in LanceDB Distributed. *** @@ -124,7 +124,7 @@ optional numUnindexedRows: number; The number of rows not yet covered by this index. -May be `undefined` for remote tables if the server does not report it. +May be `undefined` in LanceDB Distributed if the server does not report it. *** @@ -136,7 +136,7 @@ optional sizeBytes: number; The total size in bytes of all index files across all segments. -`undefined` for remote tables or indices without size tracking. +`undefined` in LanceDB Distributed or indices without size tracking. *** @@ -148,4 +148,4 @@ optional typeUrl: string; The protobuf type URL, a precise type identifier for the index. -`undefined` for remote tables. +`undefined` in LanceDB Distributed. diff --git a/docs/src/js/interfaces/RefreshMaterializedViewResult.md b/docs/src/js/interfaces/RefreshMaterializedViewResult.md index 05321683e..e1ec3eb65 100644 --- a/docs/src/js/interfaces/RefreshMaterializedViewResult.md +++ b/docs/src/js/interfaces/RefreshMaterializedViewResult.md @@ -14,7 +14,7 @@ optional mode: string; ``` -How the view was brought up to date: "rebuild", or absent for remote SQL refreshes. +How the view was brought up to date: "rebuild", or absent for LanceDB Distributed SQL refreshes. *** @@ -24,7 +24,7 @@ How the view was brought up to date: "rebuild", or absent for remote SQL refresh optional rowsWritten: number; ``` -Rows written by this refresh, or absent for remote SQL refreshes. +Rows written by this refresh, or absent for LanceDB Distributed SQL refreshes. *** @@ -34,7 +34,7 @@ Rows written by this refresh, or absent for remote SQL refreshes. optional sourceVersion: number; ``` -Source version refreshed to, or absent for remote SQL refreshes. +Source version refreshed to, or absent for LanceDB Distributed SQL refreshes. *** diff --git a/docs/src/js/type-aliases/BlobReadOptions.md b/docs/src/js/type-aliases/BlobReadOptions.md index 17264b0e4..53184aa48 100644 --- a/docs/src/js/type-aliases/BlobReadOptions.md +++ b/docs/src/js/type-aliases/BlobReadOptions.md @@ -21,4 +21,4 @@ optional signal: AbortSignal; ``` Cancels the read. The call rejects with `signal.reason`, and the native -read stops, including in-flight requests to a remote table. +read stops, including in-flight requests to a LanceDB Distributed table. diff --git a/docs/src/python/python.md b/docs/src/python/python.md index d42d70c4a..84188aecb 100644 --- a/docs/src/python/python.md +++ b/docs/src/python/python.md @@ -27,8 +27,8 @@ connect, per-table storage and write options on create, and `index_cache_size`, Omit these options to use server-managed storage and caching. Connection-level `storage_options` supported by an Enterprise deployment remain available. -The synchronous remote `create_table` uses the same positional order as the -local API: `name, data, schema, mode, exist_ok, on_bad_vectors, fill_value, +The synchronous LanceDB Distributed `create_table` uses the same positional order as the +LanceDB Embedded API: `name, data, schema, mode, exist_ok, on_bad_vectors, fill_value, embedding_functions`. Prefer keyword arguments for optional parameters. ## Connections (Synchronous) @@ -227,14 +227,14 @@ async for entry in catalog.authz.list_acls(subject=Subject.role("reader")): ## Remote SQL -Submit SQL against a remote LanceDB database through the connection. +Submit SQL against a LanceDB Distributed database through the connection. The connected database and `default_namespace_path=["public"]` are used for unqualified tables. Fully qualified references can still query other databases and namespaces available to the same deployment. `execute_query` returns a reader as soon as its initial result stream is available. `execute_query_async` returns a query handle once submission is accepted; use it to inspect progress, open a reader, or cancel the query. The SQL client is initialized by the first query and -retained for the lifetime of the remote connection. Query ids are random, +retained for the lifetime of the connection. Query ids are random, connection-scoped references rather than encoded SQL or durable resume tokens. Both APIs start with one Flight call. The server can stream results on that @@ -308,24 +308,24 @@ listing a storage directory. ## Tables (Synchronous) -Local and remote tables use the same arguments for index creation, deletion, +LanceDB Embedded and LanceDB Distributed tables use the same arguments for index creation, deletion, index statistics, and search. For example, `table.delete(where="id = 1")`, `table.create_index("cosine", 2)` (the deprecated vector API), and `table.search([1.0, 1.0], fast_search=True)` work with either backend. `fast_search=True` excludes rows that have not been indexed. `create_scalar_index` defaults to `replace=True` on both backends. Both scalar -and full-text index creation accept `wait_timeout`. Remote maintenance methods -accept the local options: cleanup and compaction warn that they are no-ops, +and full-text index creation accept `wait_timeout`. LanceDB Distributed maintenance methods +accept the LanceDB Embedded options: cleanup and compaction warn that they are no-ops, while `optimize` reports an unsupported operation. Removed Tantivy options produce the same explanatory errors on both backends. -The old remote keyword names `predicate` for `delete`, `index_name` for +The old LanceDB Distributed keyword names `predicate` for `delete`, `index_name` for `drop_index`, `index_uuid` for `index_stats`, and `column` for `create_fts_index` remain available with deprecation warnings. Use `where`, `name`, `index_name`, and `field_names`, respectively. For positional calls, use the argument order documented by `Table` below; specify index options by keyword when migrating -code that used the former remote-only argument order. +code that used the former LanceDB Distributed-only argument order. ::: lancedb.table.Table @@ -429,14 +429,14 @@ scoped to each invocation and support `read`, `readinto`, `seek`, `tell`, ## Materialized Views (Synchronous) -In the 0.41 SDK release, local materialized-view creation and refresh require a +In the 0.41 SDK release, LanceDB Embedded materialized-view creation and refresh require a source build with the `experimental-functions` Cargo feature. Published Python packages leave it disabled. Opening, reading, listing and dropping existing views -remain available, as do remote Cloud and Enterprise operations. The same feature -requirement applies to local SQL computed-column declaration and refresh; ordinary +remain available, as do LanceDB Distributed operations. The same feature +requirement applies to LanceDB Embedded SQL computed-column declaration and refresh; ordinary eager `add_columns` transforms remain available. -On Cloud and Enterprise, creation accepts `auto_refresh_enabled` and +In LanceDB Distributed, creation accepts `auto_refresh_enabled` and `auto_refresh_interval_seconds`: ```python @@ -581,13 +581,13 @@ pylance, LanceDB uses a matching `lance.blob.v2` extension type so blob columns still work. Native table queries return descriptors. Call [`fetch_blob_files`][lancedb.table.Table.fetch_blob_files] for lazy reads or [`fetch_blobs`][lancedb.table.Table.fetch_blobs] for eager bytes. -Local tables support these fetch APIs for both legacy blob v1 columns +LanceDB Embedded supports these fetch APIs for both legacy blob v1 columns (`lance-encoding:blob`) and blob v2 columns. For legacy columns, obtain row IDs with `search().with_row_id(True).to_arrow()` and pass the result to the fetch API. One missing or deleted row ID rejects the entire blob-read batch; the APIs do not return partial results. -Remote SQL returns blob bytes by default. Select `blob_descriptor(video)` to +LanceDB Distributed SQL returns blob bytes by default. Select `blob_descriptor(video)` to return an openable reference instead, then use [`open_blob_file`][lancedb.table.Table.open_blob_file] or the lazy iterable [`open_blob_files`][lancedb.table.Table.open_blob_files]: @@ -604,7 +604,7 @@ for row in rows.to_pylist(): frame = extract_frame(video, row["timestamp"]) ``` -This example uses a remote SQL connection that produces source-bearing +This example uses a LanceDB Distributed SQL connection that produces source-bearing descriptors. The descriptor contains `kind`, `position`, `size`, `blob_id`, `blob_uri`, and a `source` struct with `uri`, `version`, `committed_at_micros`, `branch`, `column`, `row_reference`, and `row_is_address`. The opener verifies @@ -636,7 +636,7 @@ async for video in async_videos.open_blob_files(rows["video"]): ``` Payload bytes load on reads. Opening an external blob with unspecified size -can issue a metadata-only HEAD request. Remote reads use authenticated range +can issue a metadata-only HEAD request. LanceDB Distributed reads use authenticated range requests that validate the captured URI and commit timestamp. Blobs inside lists can be written and queried as descriptors. They are omitted diff --git a/docs/web/agent-branch-experiments.mdx b/docs/web/agent-branch-experiments.mdx index 3f4f1cbfa..30a3893e7 100644 --- a/docs/web/agent-branch-experiments.mdx +++ b/docs/web/agent-branch-experiments.mdx @@ -64,13 +64,13 @@ The branch experiments leave you with the results side by side, and they deliberately never touch `main`. Once you've picked a winner, apply it to `main` yourself by rerunning that experiment's validated transformation directly against the `main` table. Rerunning the reviewed operation is the -reliable path on both OSS and Enterprise: it replays exactly the transformation +reliable path on both LanceDB Embedded and LanceDB Enterprise: it replays exactly the transformation you validated on the branch, and it works the same regardless of how the branch evolved. Suppose `nomic-embed-text` wins. Rerun the same Nomic embedding transformation you validated on `embed-nomic` against `main` in batches, then call -`table.optimize()` on OSS. Verify a bounded vector search on `main`, and keep +`table.optimize()` on LanceDB Embedded. Verify a bounded vector search on `main`, and keep the losing branch around until you're confident in the result. See [Branches](/tables/branching) for more on how branches, versions, and tags @@ -96,5 +96,5 @@ branch that's isolated from `main` until you decide you want the new derived column in `main`. Once you've chosen a winner, rerun that validated transformation to ingest it into `main` -yourself, on either LanceDB OSS or Enterprise. See our documentation on [branches](/tables/branching) +yourself, on either LanceDB Embedded or LanceDB Enterprise. See our documentation on [branches](/tables/branching) for more information. diff --git a/docs/web/api-reference/rest/index.mdx b/docs/web/api-reference/rest/index.mdx index d9bb26867..d6364d92c 100644 --- a/docs/web/api-reference/rest/index.mdx +++ b/docs/web/api-reference/rest/index.mdx @@ -9,7 +9,7 @@ description: "API reference for LanceDB" is an OpenAPI protocol that enables reading, writing and managing Lance tables by connecting those metadata services or building a custom metadata server in a standardized way. -LanceDB OSS allows you to interface with Lance tables via the REST Namespace. +LanceDB Embedded allows you to interface with Lance tables via the REST Namespace. LanceDB Enterprise provides an extended REST API with additional endpoints for managing tables and data. If you have specific needs or questions about the Enterprise REST API Namespace, diff --git a/docs/web/architecture.mdx b/docs/web/architecture.mdx index 997bb95b0..be6cc84af 100644 --- a/docs/web/architecture.mdx +++ b/docs/web/architecture.mdx @@ -1,14 +1,17 @@ --- title: "Architecture" sidebarTitle: "Architecture" -description: "How LanceDB Enterprise separates query serving, background work, and storage, and how it compares with embedded LanceDB OSS." +description: "How LanceDB Enterprise separates query serving, background work, and storage, and how it compares with LanceDB Embedded." icon: cubes keywords: ["architecture", "embedded", "distributed", "object storage", "compute", "deployment"] --- -LanceDB OSS is an embedded library for working with Lance tables. LanceDB -Enterprise is a multimodal lakehouse for data curation, feature engineering, -search, and training data access. Its architecture separates query serving, +LanceDB Embedded is an open-source library for working with Lance tables. It runs +in your application's process; your data can live on local disk or in object +storage. LanceDB Enterprise is a multimodal lakehouse for data curation, feature +engineering, search, and training data access. LanceDB Enterprise runs LanceDB +Distributed: query execution, indexing and maintenance run on the Enterprise +service, outside your application. Its architecture separates query serving, read execution, caching, and background work. Both use the open [Lance](/basics/lance) format. @@ -17,23 +20,23 @@ read the resulting tables into training frameworks. Enterprise separates the resources that serve shared data from those that build indexes and run background work, so teams can size them for these different workloads. -![LanceDB OSS runs the application and embedded library in one process, using local disk or object storage. Enterprise applications connect to query serving, with separate read execution and caching, indexing and background workers, and durable object storage. Both use the Lance format, but they do not share a storage location automatically.](/static/assets/images/overview/lancedb-architecture.svg) +![LanceDB Embedded runs the application and embedded library in one process, using local disk or object storage. Enterprise applications connect to query serving, with separate read execution and caching, indexing and background workers, and durable object storage. Both use the Lance format, but they do not share a storage location automatically.](/static/assets/images/overview/lancedb-architecture.svg) The diagram shows the main compute and storage boundaries, not every request path. The control plane governs the Enterprise service. ## A shared format, different storage choices {#storage} -Lance stores table data, versions, and indexes. OSS can read and write tables on +Lance stores table data, versions, and indexes. LanceDB Embedded can read and write tables on local disk or in object storage. Enterprise keeps durable table data and index artifacts in object storage, independently of the machines serving requests. Its caches accelerate reads; they are not the durable source of truth. Sharing a format does not mean that an Enterprise deployment automatically -opens an existing OSS database. Plan how to move or connect your data and +opens an existing LanceDB Embedded database. Plan how to move or connect your data and configure access for your deployment. -## OSS: an embedded library inside your application {#embedded} +## LanceDB Embedded: a library inside your application {#embedded} With an embedded connection, the LanceDB library plans and executes queries, builds indexes, and updates tables inside your process. There is no separate @@ -44,9 +47,10 @@ single-node data pipelines. Your application controls the compute resources and when to run [table maintenance](/maintenance/compaction). You also manage access to the local files or object storage that hold your tables. -## Enterprise: a multimodal lakehouse for shared workloads {#distributed} +## LanceDB Enterprise: distributed execution for shared workloads {#distributed} -Applications connect to remote tables through a LanceDB SDK. The service handles +A LanceDB SDK connects to LanceDB Enterprise, and the service runs operations +with LanceDB Distributed. The service handles requests across a fleet, with components sized for different kinds of work: - **Query serving** receives requests, resolves tables, and plans operations. @@ -81,20 +85,20 @@ and request flows. ## Application changes for Enterprise {#differences} Core operations remain familiar: create a table, add data, and run a search. -With OSS, the application executes those operations. With Enterprise, the SDK +With LanceDB Embedded, the application executes those operations. With Enterprise, the SDK sends requests to the service, and the service manages execution and configured background maintenance. To use Enterprise, configure the cluster endpoint, database URI and credentials, and make your data available in the Enterprise database. Review SDK methods -that behave differently on remote tables, including result retrieval and +that behave differently with LanceDB Distributed, including result retrieval and background jobs. [Moving to LanceDB Enterprise](/basics/sdk#moving-to-enterprise) describes these application changes. If you plan to use materialized views, check the [stable row ID requirements](/basics/limits#schema) before creating source tables. ## Choose for the workload you need to run {#choosing} -Choose OSS when you want an embedded library and can manage its resources and +Choose LanceDB Embedded when you want an embedded library and can manage its resources and maintenance in your application. Choose Enterprise when multiple applications or teams need a shared multimodal diff --git a/docs/web/basics/agentic-skills.mdx b/docs/web/basics/agentic-skills.mdx index 771bb75ff..96222e27a 100644 --- a/docs/web/basics/agentic-skills.mdx +++ b/docs/web/basics/agentic-skills.mdx @@ -158,13 +158,13 @@ LANCEDB_REGION=us-east-1 LANCEDB_HOST_OVERRIDE=https://your-enterprise-endpoint.com ``` -If you're using LanceDB OSS, no connection settings are required, as it runs as an +If you're using LanceDB Embedded, no connection settings are required, as it runs as an embedded retrieval library. A simple prompt like this should work: ```text Agent prompt -# If using OSS +# If using LanceDB Embedded Use the lancedb plugin to ingest the dataset in `data/` into a LanceDB -OSS table. +Embedded table. # If using enterprise Use the lancedb plugin to ingest the dataset in `data/` into a LanceDB @@ -208,7 +208,7 @@ to `batch_size` rows at a time, providing an iterable of batches for the ingesti shown next. #### Table maintenance {#table-maintenance} -For LanceDB OSS, the plugin instructs the agent to call +For LanceDB Embedded, the plugin instructs the agent to call `table.optimize()` after the ingestion loop. This compacts small fragments, cleans up old versions according to the retention policy, and incorporates new data into indexes. @@ -225,7 +225,7 @@ This example dataset has only eight rows, so the default batch size writes it in one call. Larger inputs should still avoid single-row write commits. -### 3\. Run the OSS pipeline {#3-run-the-oss-pipeline} +### 3\. Run the Embedded pipeline {#3-run-the-oss-pipeline} ```bash uv run python ingest_multimodal.py @@ -258,9 +258,9 @@ The plugin shown in this tutorial should generalize reasonably well to other use If you find any issues, open [an issue](https://github.com/lancedb/lancedb-agent-plugins/issues) on GitHub, clearly describing the intended behavior. -You can choose OSS or Enterprise based on how the work will run: +You can choose LanceDB Embedded or LanceDB Enterprise based on how the work will run: -Start with [LanceDB OSS](/quickstart) during the early stages of a project +Start with [LanceDB Embedded](/quickstart) during the early stages of a project when an agent is helping you prototype, explore a dataset, or run small workflows on a subset of the data. The application owns the storage and lifecycle work, so ask the agent to validate inputs, write in @@ -271,7 +271,7 @@ Choose [LanceDB Enterprise](/enterprise) when the resulting table becomes shared production infrastructure, and the workload needs distributed capacity, private deployment, or platform-managed operations. The data format and the core table API stay the same, so the pipeline's table and search code carries over: -the agent connects to a remote `db://` table, leaves maintenance to the +the agent connects to an Enterprise `db://` table, leaves maintenance to the deployment instead of calling `optimize()`, and submits long-running work as jobs. See [Moving to LanceDB Enterprise](/basics/sdk#moving-to-enterprise). diff --git a/docs/web/basics/connect.mdx b/docs/web/basics/connect.mdx index ac7061bbc..d576b62d8 100644 --- a/docs/web/basics/connect.mdx +++ b/docs/web/basics/connect.mdx @@ -1,7 +1,7 @@ --- title: "Connect to LanceDB" sidebarTitle: "Connect" -description: "Use the embedded LanceDB OSS library with tables in a local directory or object storage, or connect to LanceDB Enterprise." +description: "Use LanceDB Embedded with tables in a local directory or object storage, or connect to LanceDB Enterprise." icon: plug keywords: ["connect", "uri", "embedded", "object storage", "s3", "enterprise", "db://"] --- @@ -20,15 +20,18 @@ import { TsConnectObjectStorage, } from '/snippets/connection.mdx'; -The URI you pass to `connect` decides where the work runs. The same Python, -TypeScript and Rust SDKs open all three kinds; -[OSS and Enterprise](/basics/offerings) describes how the two offerings differ. +The URI you pass to `connect` decides where the work runs. LanceDB Embedded +runs in your application's process; your data can live on local disk or in +object storage. LanceDB Enterprise runs LanceDB Distributed: query execution, +indexing and maintenance run on the Enterprise service, outside your +application. The same Python, TypeScript and Rust SDKs open all three kinds; +[Embedded and Enterprise](/basics/offerings) describes how the two offerings differ. | URI | Where queries run | | --- | --- | -| A local path, such as `./data` | OSS: in your process | -| `s3://`, `gs://` or `az://` | OSS: in your process, reading object storage | -| `db://` | LanceDB Enterprise: queries run on your cluster | +| A local path, such as `./data` | LanceDB Embedded: in your process | +| `s3://`, `gs://` or `az://` | LanceDB Embedded: in your process, reading object storage | +| `db://` | LanceDB Enterprise: LanceDB Distributed runs queries on your cluster | ## A local directory {#local} diff --git a/docs/web/basics/guarantees.mdx b/docs/web/basics/guarantees.mdx index 840ea2d50..2774d749b 100644 --- a/docs/web/basics/guarantees.mdx +++ b/docs/web/basics/guarantees.mdx @@ -25,7 +25,7 @@ rewrite data; adding a derived column can write the new column independently. A read of a table uses a consistent snapshot. A consistent snapshot can still be older than another writer's latest commit. [Consistency](/tables/consistency) -explains how OSS and Enterprise choose the version a reader sees. +explains how LanceDB Embedded and LanceDB Enterprise choose the version a reader sees. For an experiment that must keep using the same data, select a specific retained table version rather than relying on a connection's default freshness. @@ -46,7 +46,7 @@ describes commit behavior and compatibility between operations. ## Storage durability {#durability} A committed table version is stored in the table’s configured storage. LanceDB -OSS uses your local filesystem or object store; LanceDB Enterprise uses the +Embedded uses your local filesystem or object store; LanceDB Enterprise uses the cluster’s configured storage. Table version history does not replace backups. Configure storage redundancy diff --git a/docs/web/basics/jobs.mdx b/docs/web/basics/jobs.mdx index 26dd4dd8b..20445843e 100644 --- a/docs/web/basics/jobs.mdx +++ b/docs/web/basics/jobs.mdx @@ -8,7 +8,7 @@ availability: oss: available enterprise: available summary: >- - Job handles track operations in OSS and Enterprise. Enterprise also + Job handles track operations in LanceDB Embedded and LanceDB Enterprise. Enterprise also supports listing server jobs, reopening them by ID and reading their events. --- @@ -19,7 +19,7 @@ column refresh. Use it to check progress, wait for completion and inspect failures. Methods such as Python's `create_index_async` and TypeScript's -`createIndexAsync` return job handles. In OSS, the work runs in your application +`createIndexAsync` return job handles. In LanceDB Embedded, the work runs in your application process; in Enterprise, it runs on server workers or through the SQL query backend. A returned handle can represent an operation that has already finished, so check its status before @@ -58,12 +58,13 @@ Event responses have [row limits](/basics/limits#jobs). An explicit limit can request more than the default, but it does not guarantee a complete event history. -## OSS and Enterprise execution {#in-process} +## Embedded and Distributed execution {#in-process} -The following table describes local operations and Enterprise registry jobs. +The following table describes LanceDB Embedded operations and registry jobs on +LanceDB Distributed (provided by LanceDB Enterprise). SQL-backed job handles follow the query lifecycle described below. -| | OSS | Enterprise registry job | +| | Embedded | Enterprise registry job | | --- | --- | --- | | Execution | In your application process | On server workers | | Job identity | No server ID | A server ID for looking up the job | @@ -72,7 +73,7 @@ SQL-backed job handles follow the query lifecycle described below. ### SQL-backed job handles -Remote materialized-view CREATE, REFRESH, and DROP use the SQL query backend. +On Enterprise, materialized-view CREATE, REFRESH, and DROP use the SQL query backend. Python's `create_materialized_view_async()`, `mv.refresh_async()`, and `drop_materialized_view_async()` return job handles with `status()`, `wait()`, and `cancel()`. Synchronous creation, refresh, and drop wait on the same SQL diff --git a/docs/web/basics/lakehouse.mdx b/docs/web/basics/lakehouse.mdx index 04e07afaf..9ecf6800a 100644 --- a/docs/web/basics/lakehouse.mdx +++ b/docs/web/basics/lakehouse.mdx @@ -44,7 +44,7 @@ framework runs the model; LanceDB provides access to the training data. ## Shared compute and maintenance in Enterprise {#where} -LanceDB OSS runs as an embedded library in your application. LanceDB Enterprise +LanceDB Embedded runs as an embedded library in your application. LanceDB Enterprise provides shared infrastructure for applications and teams working with larger multimodal workloads. diff --git a/docs/web/basics/lance.mdx b/docs/web/basics/lance.mdx index f2dd0ecfa..13b7755be 100644 --- a/docs/web/basics/lance.mdx +++ b/docs/web/basics/lance.mdx @@ -14,7 +14,7 @@ multimodal AI. It defines how data is stored and organized into versioned tables -LanceDB OSS and LanceDB Enterprise both use Lance as their storage foundation. +LanceDB Embedded and LanceDB Enterprise both use Lance as their storage foundation. The format is developed as an independent open-source project, with its own specification and tools. @@ -42,4 +42,4 @@ those fields together. - [Lance format specification](https://lance.org/format): how the format works. - [Table versioning](/management/table#versioning): read and manage table versions. - [Computed columns](/feature-engineering/add-computed-column): add derived features to your data. -- [Architecture](/architecture): how LanceDB OSS and Enterprise build on Lance. +- [Architecture](/architecture): how LanceDB Embedded and LanceDB Enterprise build on Lance. diff --git a/docs/web/basics/naming.mdx b/docs/web/basics/naming.mdx index af61c2b6c..b570e5bee 100644 --- a/docs/web/basics/naming.mdx +++ b/docs/web/basics/naming.mdx @@ -14,7 +14,7 @@ Databases, namespaces, tables, views and branches all have names. Choose names that describe their purpose, such as `documents`, `prod` or `training_2026`. Consistent names make data easier to find and application code easier to read. -Use the following rules for names that work across LanceDB OSS and Enterprise. +Use the following rules for names that work across LanceDB Embedded and LanceDB Enterprise. | Object | Characters | Length | | --- | --- | --- | diff --git a/docs/web/basics/offerings.mdx b/docs/web/basics/offerings.mdx index c66b77e78..a2df61b21 100644 --- a/docs/web/basics/offerings.mdx +++ b/docs/web/basics/offerings.mdx @@ -1,6 +1,6 @@ --- -title: "LanceDB OSS or Enterprise?" -sidebarTitle: "OSS and Enterprise" +title: "LanceDB Embedded or Enterprise?" +sidebarTitle: "Embedded and Enterprise" description: "Start with an embedded library, or use the LanceDB Enterprise multimodal lakehouse for shared AI workloads." icon: compass keywords: ["oss", "enterprise", "embedded", "deployment", "availability", "comparison"] @@ -9,15 +9,18 @@ keywords: ["oss", "enterprise", "embedded", "deployment", "availability", "compa LanceDB gives you two ways to work with multimodal data, both built on the open [Lance](/basics/lance) format. -**LanceDB OSS** is an embedded library. Run it inside your application -with tables on local disk or in object storage. You control the application, +**LanceDB Embedded (open source)** is a library that runs in your +application's process; your data can live on local disk or in object storage. +You control the application, its resources, and table maintenance, without a separate database service. [Try the quickstart](/quickstart) to create a table and run your first search. **LanceDB Enterprise** is a multimodal lakehouse for data curation, feature engineering, search, and training data access. It adds query-serving capacity, data caching, and background operations for teams working with shared -multimodal datasets. +multimodal datasets. LanceDB Enterprise runs LanceDB Distributed: query +execution, indexing and maintenance run on the Enterprise service, outside your +application. [Connect to Enterprise](/basics/connect#enterprise) when your cluster is ready. diff --git a/docs/web/basics/query.mdx b/docs/web/basics/query.mdx index 624617918..aa8e9b9df 100644 --- a/docs/web/basics/query.mdx +++ b/docs/web/basics/query.mdx @@ -17,7 +17,7 @@ in the last month. | Interface | When to use it | | --- | --- | -| **SDK query builders** | Build vector, full-text and hybrid searches, apply filters and choose the fields to return. Available in OSS and Enterprise. | +| **SDK query builders** | Build vector, full-text and hybrid searches, apply filters and choose the fields to return. Available in LanceDB Embedded and LanceDB Enterprise. | | **Enterprise SQL** | Write SQL queries for filtering, aggregation, joins and other data curation tasks. Connect through Python or a Flight SQL client. | Both interfaces work with LanceDB tables. Choose the one that supports your diff --git a/docs/web/basics/sdk.mdx b/docs/web/basics/sdk.mdx index b20fc1662..3144c11cf 100644 --- a/docs/web/basics/sdk.mdx +++ b/docs/web/basics/sdk.mdx @@ -8,13 +8,16 @@ availability: oss: available enterprise: available summary: >- - Python, TypeScript and Rust support both LanceDB OSS and LanceDB Enterprise. + Python, TypeScript and Rust support both LanceDB Embedded and LanceDB Enterprise. Java provides a client for the Enterprise REST API. --- Use a LanceDB SDK to create tables, add data, build indexes and run searches -from your application. Python, TypeScript and Rust work with both the embedded -OSS library and LanceDB Enterprise. +from your application. Python, TypeScript and Rust work with both LanceDB +Embedded and LanceDB Enterprise. LanceDB Embedded runs in your application's +process; your data can live on local disk or in object storage. LanceDB +Enterprise runs LanceDB Distributed: query execution, indexing and maintenance +run on the Enterprise service, outside your application. The [quickstart](/quickstart) includes installation instructions and complete examples in all three languages. For connection settings, see @@ -73,16 +76,16 @@ For PyTorch worker setup and connection factories, see ## Moving to LanceDB Enterprise {#moving-to-enterprise} The core table workflow stays familiar: connect, create or open a table, write -records, and query them. Enterprise runs those operations on remote compute and -manages background maintenance. +records, and query them. Enterprise runs those operations with LanceDB +Distributed and manages background maintenance. - **Configure the connection.** Replace the local path with your database URI, and supply the endpoint, region and credentials provided by your administrator. [Connect to Enterprise](/basics/connect#enterprise) shows these settings. -- **Retrieve query results.** Python's remote tables do not support whole-table +- **Retrieve query results.** Python tables on Enterprise do not support whole-table `to_arrow()` or `to_pandas()` calls. Use a query and select the columns and number of rows you need, for example `table.search().limit(10).to_arrow()`. -- **Handle table listings and namespaces.** Remote table listings are paginated. +- **Handle table listings and namespaces.** Enterprise table listings are paginated. Use the namespace and pagination options described in [Namespaces](/management/namespace). - **Use server-side jobs.** Index builds and feature refreshes can run as diff --git a/docs/web/basics/sql.mdx b/docs/web/basics/sql.mdx index c89bd7a20..ce34237b5 100644 --- a/docs/web/basics/sql.mdx +++ b/docs/web/basics/sql.mdx @@ -8,7 +8,7 @@ availability: oss: unavailable enterprise: available summary: >- - Enterprise supports SQL through Arrow Flight SQL. Use the SDK table APIs for embedded OSS tables. See [Connection settings](#sql-is-remote) to connect. + Enterprise supports SQL through Arrow Flight SQL. Use the SDK table APIs for LanceDB Embedded tables. See [Connection settings](#sql-is-remote) to connect. --- Use SQL in LanceDB Enterprise to filter records, join tables, calculate @@ -52,7 +52,7 @@ API and SQL endpoints may use different hosts or ports. See [Connect to Enterprise](/basics/connect#enterprise) for other connection options. SQL runs in Enterprise. Connections to a local directory or an object-storage -bucket use the embedded OSS library and cannot execute SQL statements. Use +bucket use LanceDB Embedded and cannot execute SQL statements. Use SDK table operations to query those tables. ## Run a query in Python {#sql-from-python} @@ -94,7 +94,7 @@ handles, streaming, and cancellation. Use **SQL** for joins, aggregations, window functions, and analytical queries written in SQL. Use **SDK table operations** to build applications around table management, ingestion, filtering, and search, including applications that run -with the embedded OSS library. +with LanceDB Embedded. You can combine them. For example, create and populate a table with an SDK, then query it with SQL to prepare a training dataset. In Python, both workflows @@ -130,7 +130,7 @@ server version supports this form, then use [`EXPLAIN`](/sql/dql/explain) to inspect the query plan. The [SDK vector search API](/search/vector-search) is also available in -Enterprise and OSS. Use it when you prefer the SDK query builder or need to +LanceDB Enterprise and LanceDB Embedded. Use it when you prefer the SDK query builder or need to search embedded tables. For full-text search in SQL, use the [`fts()`](/sql/functions#fts) table diff --git a/docs/web/curation/index.mdx b/docs/web/curation/index.mdx index fd8ea73aa..191ff2fd1 100644 --- a/docs/web/curation/index.mdx +++ b/docs/web/curation/index.mdx @@ -23,8 +23,8 @@ records belong, and save the selected data or the rules used to produce it. | [Rank and deduplicate](/curation/windowing) | Which records to keep when several describe the same item. | The analytical examples in this section use **Enterprise SQL**. Connect with -the [SQL guide](/basics/sql). For sampling through the Python SDK in OSS or -Enterprise, see [Sample without SQL](/curation/sampling#training). +the [SQL guide](/basics/sql). For sampling through the Python SDK in LanceDB Embedded or +LanceDB Enterprise, see [Sample without SQL](/curation/sampling#training). ## Prepare a labeled document dataset {#shape} diff --git a/docs/web/curation/sampling.mdx b/docs/web/curation/sampling.mdx index 643b06bdf..1289275a1 100644 --- a/docs/web/curation/sampling.mdx +++ b/docs/web/curation/sampling.mdx @@ -8,7 +8,7 @@ availability: oss: unavailable enterprise: available summary: >- - Enterprise supports SQL `TABLESAMPLE`. For sampling in OSS and Enterprise through the Python SDK, see [Sample without SQL](#training). + Enterprise supports SQL `TABLESAMPLE`. For sampling in LanceDB Embedded and LanceDB Enterprise through the Python SDK, see [Sample without SQL](#training). --- import { PySampleDataset } from '/snippets/curation_sampling.mdx'; @@ -143,7 +143,7 @@ for sampling. `TABLESAMPLE` cannot be applied directly to a subquery result. ## Sample without SQL {#training} The Python SDK provides a permutation builder for selecting and ordering rows -in OSS and Enterprise. A split selects a subset; a shuffle changes the order +in LanceDB Embedded and LanceDB Enterprise. A split selects a subset; a shuffle changes the order in which records are read. `Permutation.identity(table)` retains stored order. diff --git a/docs/web/deployment/monitoring.mdx b/docs/web/deployment/monitoring.mdx index b31293338..7d19fc1a5 100644 --- a/docs/web/deployment/monitoring.mdx +++ b/docs/web/deployment/monitoring.mdx @@ -11,7 +11,7 @@ LanceDB emits internal metrics (currently object store request counts, bytes tra The bridge is available in the Python and TypeScript SDKs. It is a thin wrapper over LanceDB's `metrics` recorder; your application supplies and configures the OpenTelemetry SDK. -This page covers LanceDB OSS instrumentation. LanceDB Enterprise clusters emit their own metrics from the server side. See [Enterprise monitoring](#enterprise) below. +This page covers LanceDB Embedded instrumentation. LanceDB Enterprise clusters emit their own metrics from the server side. See [Enterprise monitoring](#enterprise) below. ## Available metrics {#what-you-get} @@ -113,7 +113,7 @@ export them with data enrichment. No client-side instrumentation is needed. | Component | Metrics | | --- | --- | | Query node | RPS, query latency, error codes, slow-query count, CPU/memory utilization | -| Plan executor | SSD cache hit/miss rate, CPU/memory utilization | +| Executor | SSD cache hit/miss rate, CPU/memory utilization | [Contact support](/deployment/support) for the comprehensive metric list and help integrating them with your monitoring dashboard. diff --git a/docs/web/deployment/storage.mdx b/docs/web/deployment/storage.mdx index 35b6dd80f..dd370846b 100644 --- a/docs/web/deployment/storage.mdx +++ b/docs/web/deployment/storage.mdx @@ -1,7 +1,7 @@ --- title: "Embedded storage configuration" sidebarTitle: "Embedded Storage" -description: "Choose and configure local disk or object storage for tables accessed by the embedded LanceDB OSS library." +description: "Choose and configure local disk or object storage for tables accessed by LanceDB Embedded." icon: database keywords: ["storage", "s3", "gcs", "azure", "object store", "configuration", "deploy"] availability: @@ -13,7 +13,7 @@ availability: the deployment's own configuration instead. --- -This page is about the embedded library, where your connection chooses and +This page is about LanceDB Embedded, where your connection chooses and configures the storage backend. A LanceDB Enterprise deployment sets up its own storage when it is deployed, so a `db://` connection passes none of these options except an Azure storage account name. See diff --git a/docs/web/deployment/support.mdx b/docs/web/deployment/support.mdx index 5e35d9131..148e71648 100644 --- a/docs/web/deployment/support.mdx +++ b/docs/web/deployment/support.mdx @@ -1,12 +1,12 @@ --- title: "Support" sidebarTitle: "Support" -description: "Where to get help: community Discord for OSS, dedicated support for Enterprise." +description: "Where to get help: community Discord for LanceDB Embedded (open source), dedicated support for LanceDB Enterprise." icon: circle-question keywords: ["support", "help", "discord", "community"] --- -## LanceDB OSS {#oss} +## LanceDB Embedded (open source) {#oss} For a quick question, the [Discord community](https://discord.gg/AUEWnJ7Txb) has channels for diff --git a/docs/web/embedding/index.mdx b/docs/web/embedding/index.mdx index 4039ed840..c35074b20 100644 --- a/docs/web/embedding/index.mdx +++ b/docs/web/embedding/index.mdx @@ -35,7 +35,7 @@ Modern machine learning models can be trained to convert raw data into embedding of floating point numbers. The position of an embedding in vector space captures the semantics of the data, so vectors that are close to each other are considered similar. -LanceDB provides an embedding function registry in OSS as well as its Enterprise versions +LanceDB provides an embedding function registry in LanceDB Embedded as well as LanceDB Enterprise ([see below](#embeddings-in-lancedb-enterprise)) that automatically generates vector embeddings during data ingestion. Query text is embedded automatically too, in the client, for local and Enterprise tables alike, with SDK-specific query @@ -198,7 +198,7 @@ You can find all supported embedding models in the [integrations](/integrations/ Enterprise In LanceDB Enterprise, embedding generation during data ingestion is client-side and the resulting vectors are -stored on the remote table. +stored in the Enterprise table. The Enterprise server does not currently generate embeddings from query text on its own. Any automatic @@ -207,13 +207,13 @@ query-time embedding happens on the client side. ### How string queries are interpreted {#how-string-queries-are-interpreted} -For the Python remote client, `table.search("hello")` can take two different paths: +When the Python SDK connects to Enterprise, `table.search("hello")` can take two different paths: - If the selected vector column has embedding metadata (i.e., the table schema stores the source-column, vector-column, and embedding-function mapping created from fields like `SourceField()` and `VectorField()` during table creation), then the embeddings are computed in the Python client process. - The client uses the same local LanceDB embedding registry used by OSS tables to + The client uses the same local LanceDB embedding registry used by LanceDB Embedded tables to reconstruct the embedding function from schema metadata, compute the query vector in the client process, and send that vector to Enterprise for search. ```python diff --git a/docs/web/embedding/quickstart.mdx b/docs/web/embedding/quickstart.mdx index bcaf90f6f..1111743da 100644 --- a/docs/web/embedding/quickstart.mdx +++ b/docs/web/embedding/quickstart.mdx @@ -42,11 +42,11 @@ from lancedb.embeddings import get_registry ## Step 2: Connect to LanceDB {#step-2-connect-to-lancedb} -Establish a connection to your LanceDB OSS directory or Enterprise cluster: +Establish a connection to your LanceDB Embedded directory or Enterprise cluster: ```python Python icon="python" -# Enter your LanceDB connection URI for OSS or Enterprise here +# Enter your LanceDB connection URI for LanceDB Embedded or Enterprise here db = lancedb.connect(...) ``` @@ -126,8 +126,8 @@ LanceDB preserves them instead of filling only the missing rows. ## Step 6: Query with Automatic Embedding {#step-6-query-with-automatic-embedding} -Note: On LanceDB Enterprise, the server does not generate embeddings from query text. In the Python remote -client, `table.search("greetings")` can still work when the table schema includes embedding metadata, because +Note: On LanceDB Enterprise, the server does not generate embeddings from query text. When the Python +SDK connects to Enterprise, `table.search("greetings")` can still work when the table schema includes embedding metadata, because the client computes the query embedding before sending the vector search. If there is no embedding metadata for that search, `search("greetings")` in `auto` mode is treated as FTS instead. diff --git a/docs/web/enterprise/authentication.mdx b/docs/web/enterprise/authentication.mdx index 9074c641c..74d68ecae 100644 --- a/docs/web/enterprise/authentication.mdx +++ b/docs/web/enterprise/authentication.mdx @@ -9,7 +9,7 @@ availability: enterprise: available summary: >- Requests to a deployment carry an API key or an OAuth token, whichever it is - configured to accept. Embedded LanceDB has no server to sign in to; see + configured to accept. LanceDB Embedded has no server to sign in to; see [Architecture](/architecture). --- @@ -423,5 +423,5 @@ control. All three SDKs deliberately omit the secret from their debug/repr outpu so accidental log lines do not expose the value. -Embedded LanceDB has nothing to authenticate to: your process opens the files +LanceDB Embedded has nothing to authenticate to: your process opens the files directly, and the object store's own credentials are the only gate. diff --git a/docs/web/enterprise/deployment/index.mdx b/docs/web/enterprise/deployment/index.mdx index efaa2c786..38e854282 100644 --- a/docs/web/enterprise/deployment/index.mdx +++ b/docs/web/enterprise/deployment/index.mdx @@ -16,5 +16,5 @@ Deployment is specific to your cloud and account, so the procedure is published with LanceDB Enterprise. [Contact us](https://www.lancedb.com/contact) to get started. -Embedded LanceDB has nothing to deploy: it is a library your process links +LanceDB Embedded has nothing to deploy: it is a library your process links against. See [Architecture](/architecture#embedded). diff --git a/docs/web/enterprise/distributed-search.mdx b/docs/web/enterprise/distributed-search.mdx index ebac960ba..86837e157 100644 --- a/docs/web/enterprise/distributed-search.mdx +++ b/docs/web/enterprise/distributed-search.mdx @@ -8,17 +8,17 @@ availability: enterprise: available summary: >- LanceDB Enterprise distributes index execution and table-data reads across - plan executors. Embedded LanceDB executes searches in the application process. + executors. LanceDB Embedded executes searches in the application process. --- Distributed search spreads index execution, table-data reads, and caching across multiple serving machines in LanceDB Enterprise. Query nodes plan queries and -combine results. Plan executors cache index structures and table data and execute -the remote work. See [Enterprise architecture](/enterprise/architecture). +combine results. Executors cache index structures and table data and execute +the distributed work. See [Enterprise architecture](/enterprise/architecture). ## Embedded search {#embedded-search} -LanceDB OSS runs inside your application process. It searches indexes and reads +LanceDB Embedded runs inside your application process. It searches indexes and reads table data using that process's resources, including its index cache. Reading a table from object storage does not by itself distribute query execution across machines. diff --git a/docs/web/enterprise/index.mdx b/docs/web/enterprise/index.mdx index acf41f6d1..888804756 100644 --- a/docs/web/enterprise/index.mdx +++ b/docs/web/enterprise/index.mdx @@ -1,7 +1,7 @@ --- title: "LanceDB Enterprise" sidebarTitle: "Overview" -description: "What a deployment adds over embedded LanceDB." +description: "What a deployment adds over LanceDB Embedded." icon: building keywords: ["enterprise", "deployment", "cluster"] --- diff --git a/docs/web/enterprise/security.mdx b/docs/web/enterprise/security.mdx index f462203d4..c848be23f 100644 --- a/docs/web/enterprise/security.mdx +++ b/docs/web/enterprise/security.mdx @@ -16,5 +16,5 @@ Compliance posture (certifications, data residency, encryption at rest and in transit, audit logging) is a property of a deployment, so it is documented with LanceDB Enterprise. -For embedded LanceDB, these are properties of the object store you point it at +For LanceDB Embedded, these are properties of the object store you point it at and the process you run it in; LanceDB adds no layer of its own. diff --git a/docs/web/feature-engineering/add-computed-column.mdx b/docs/web/feature-engineering/add-computed-column.mdx index 707a929f5..49820a454 100644 --- a/docs/web/feature-engineering/add-computed-column.mdx +++ b/docs/web/feature-engineering/add-computed-column.mdx @@ -16,9 +16,9 @@ Declaring it is cheap on any table size, because nothing is evaluated until [a refresh](/feature-engineering/refresh-column) asks for it. -In the 0.41 SDK release, local computed-column declaration and refresh require a +In the 0.41 SDK release, computed-column declaration and refresh in LanceDB Embedded require a source build with the `experimental-functions` Cargo feature. Published Python -and TypeScript packages leave it disabled. Remote Cloud and Enterprise operations +and TypeScript packages leave it disabled. LanceDB Enterprise operations do not require this feature. Ordinary eager `add_columns` transforms remain available. diff --git a/docs/web/feature-engineering/index.mdx b/docs/web/feature-engineering/index.mdx index 8f0253444..30a165af4 100644 --- a/docs/web/feature-engineering/index.mdx +++ b/docs/web/feature-engineering/index.mdx @@ -70,7 +70,7 @@ changes incrementally for supported queries; other queries require a full rebuil See [refresh behavior](/feature-engineering/materialized-views#incremental) for version-specific details. -Enterprise runs materialization on remote compute. Use the SDK and refresh +Enterprise runs materialization on the Enterprise service. Use the SDK and refresh options supported by your server version; see [Enterprise refreshes](/feature-engineering/materialized-views#availability). @@ -78,8 +78,8 @@ options supported by your server version; see | | What it produces | Filled by | Available | | --- | --- | --- | --- | -| [Computed column](/feature-engineering/add-computed-column) | a new column on an existing table | a SQL expression | OSS and Enterprise | -| [Materialized view](/feature-engineering/materialized-views) | a new table derived by a query | a refresh | OSS and Enterprise | +| [Computed column](/feature-engineering/add-computed-column) | a new column on an existing table | a SQL expression | Embedded and Enterprise | +| [Materialized view](/feature-engineering/materialized-views) | a new table derived by a query | a refresh | Embedded and Enterprise | | [Geneva](/geneva) | columns filled by Python | the `geneva` package | Enterprise | {/* diff --git a/docs/web/feature-engineering/materialized-views.mdx b/docs/web/feature-engineering/materialized-views.mdx index 30d2d1bc6..e90f3233c 100644 --- a/docs/web/feature-engineering/materialized-views.mdx +++ b/docs/web/feature-engineering/materialized-views.mdx @@ -8,7 +8,7 @@ availability: oss: available enterprise: available summary: >- - Local creation and refresh require a source build with the experimental-functions Cargo feature. Enterprise runs the work on remote compute. See [Enterprise refreshes](#availability) for server compatibility requirements. + Creation and refresh in LanceDB Embedded require a source build with the experimental-functions Cargo feature. Enterprise runs the work on the Enterprise service. See [Enterprise refreshes](#availability) for server compatibility requirements. --- import { @@ -21,10 +21,10 @@ filtered or transformed dataset that you can query, index and search repeatedly. Refresh the view after its source data changes. -In the 0.41 SDK release, local materialized-view creation and refresh require a +In the 0.41 SDK release, materialized-view creation and refresh in LanceDB Embedded require a source build with the `experimental-functions` Cargo feature. Published Python and TypeScript packages leave it disabled. Opening, reading, listing and dropping -existing views remain available, as do remote Cloud and Enterprise operations. +existing views remain available, as do LanceDB Enterprise operations. @@ -84,7 +84,7 @@ when maintaining an existing pipeline. Enterprise -Enterprise runs materialized-view creation and refresh on remote compute. +Enterprise runs materialized-view creation and refresh on the Enterprise service. For SQL, see [`CREATE MATERIALIZED VIEW`](/sql/ddl/materialized-view) and [`REFRESH MATERIALIZED VIEW`](/sql/dml/refresh#refresh-materialized-view). diff --git a/docs/web/feature-engineering/refresh-column.mdx b/docs/web/feature-engineering/refresh-column.mdx index 1aa511234..10ab9fdc8 100644 --- a/docs/web/feature-engineering/refresh-column.mdx +++ b/docs/web/feature-engineering/refresh-column.mdx @@ -16,9 +16,9 @@ new rows and recompute values whose inputs changed. The example below continues with the `doubled` column from the computed-column guide. -In the 0.41 SDK release, local declaration and refresh require a source build +In the 0.41 SDK release, declaration and refresh in LanceDB Embedded require a source build with the `experimental-functions` Cargo feature. Published Python and TypeScript -packages leave it disabled. Remote Cloud and Enterprise operations do not require +packages leave it disabled. LanceDB Enterprise operations do not require this feature; existing computed-column data remains readable in default builds. @@ -82,9 +82,9 @@ table.add_columns( Both options apply to every computed output declared in that call, including registered Function outputs. Automatic refresh is enabled by default. When -the interval is omitted, the server determines when to refresh. Local tables -persist only an explicitly configured interval; automatic execution requires a -Cloud or Enterprise server with its separate `column_refresh.enabled` switch +the interval is omitted, the server determines when to refresh. LanceDB Embedded +tables persist only an explicitly configured interval; automatic execution requires a +LanceDB Enterprise deployment with its separate `column_refresh.enabled` switch turned on. That server switch is disabled in the base configuration. The interval is a positive minimum delay after the last successful refresh diff --git a/docs/web/governance/authorization.mdx b/docs/web/governance/authorization.mdx index dc5b6fd26..72e4e9534 100644 --- a/docs/web/governance/authorization.mdx +++ b/docs/web/governance/authorization.mdx @@ -8,7 +8,7 @@ availability: oss: unavailable enterprise: available summary: >- - Enterprise supports catalog privileges when its administrator configures enforcement. Embedded LanceDB has no catalog authorization layer: access is whatever the object store allows. + Enterprise supports catalog privileges when its administrator configures enforcement. LanceDB Embedded has no catalog authorization layer: access is whatever the object store allows. --- [Authentication](/enterprise/authentication) establishes who is calling. diff --git a/docs/web/index.mdx b/docs/web/index.mdx index 75044ad0d..11b72505d 100644 --- a/docs/web/index.mdx +++ b/docs/web/index.mdx @@ -29,13 +29,16 @@ For a deeper look at how this works in training pipelines, start with [Why Lance ## LanceDB suite {#lancedb-suite} -The LanceDB suite includes LanceDB OSS, an open-source embedded retrieval library, and LanceDB Enterprise, +The LanceDB suite includes LanceDB Embedded (open source), a retrieval library, and LanceDB Enterprise, a multimodal lakehouse platform for the full AI data lifecycle. -OSS is easy to set up on a local machine for search and regular-scale workflows. LanceDB Enterprise is built +LanceDB Embedded runs in your application's process; your data can live on local disk or in object storage. +It is easy to set up on a local machine for search and regular-scale workflows. LanceDB Enterprise is built for teams that need scale without building bespoke infrastructure for curation, feature engineering, search and retrieval, and efficient training data access. +LanceDB Enterprise runs LanceDB Distributed: query execution, indexing and maintenance +run on the Enterprise service, outside your application. -![LanceDB suite: OSS search and Enterprise multimodal lakehouse on Lance format](/static/assets/images/overview/lancedb-suite.svg) +![LanceDB suite: LanceDB Embedded search and Enterprise multimodal lakehouse on Lance format](/static/assets/images/overview/lancedb-suite.svg) ## Why teams use LanceDB {#why-teams-use-lancedb} @@ -74,11 +77,11 @@ feature engineering, search and retrieval, and efficient training data access. ## From local development to production scale {#from-local-development-to-production-scale} -LanceDB OSS and LanceDB Enterprise share the same Lance format and table model. Start locally with the embedded OSS -library, then move to Enterprise when your team needs distributed scale, managed infrastructure, private deployment, +LanceDB Embedded and LanceDB Enterprise share the same Lance format and table model. Start locally with +LanceDB Embedded, then move to Enterprise when your team needs distributed scale, managed infrastructure, private deployment, or higher-throughput curation, feature engineering, search and retrieval, and training workflows. -### 1\. LanceDB OSS {#1-lancedb-oss} +### 1\. LanceDB Embedded {#1-lancedb-oss} The fastest way to get started is the open-source embedded library, with client SDKs in Python, TypeScript and Rust. Run it locally in just a few steps, which lets you explore datasets, curate data, and run search and retrieval workloads for agents. Start here: diff --git a/docs/web/indexing/fts-index.mdx b/docs/web/indexing/fts-index.mdx index 4660e8b01..f112c996f 100644 --- a/docs/web/indexing/fts-index.mdx +++ b/docs/web/indexing/fts-index.mdx @@ -14,7 +14,7 @@ availability: import { PyFtsIndexAsync as FtsIndexAsync, PyFtsIndexCreate as FtsIndexCreate, PyFtsIndexNested as FtsIndexNested, PyFtsIndexWait as FtsIndexWait } from '/snippets/indexing.mdx'; LanceDB provides performant full-text search based on BM25, allowing you to incorporate keyword-based search in your retrieval solutions. This page shows -examples on how to create and configure FTS indexes in LanceDB OSS and Enterprise, using the synchronous and asynchronous APIs. +examples on how to create and configure FTS indexes in LanceDB Embedded and LanceDB Enterprise, using the synchronous and asynchronous APIs. In LanceDB Enterprise, `create_fts_index` API returns immediately, but index building happens asynchronously. diff --git a/docs/web/indexing/reindexing.mdx b/docs/web/indexing/reindexing.mdx index 9df3235db..27a51a3d3 100644 --- a/docs/web/indexing/reindexing.mdx +++ b/docs/web/indexing/reindexing.mdx @@ -65,7 +65,7 @@ LanceDB Enterprise supports incremental reindexing through an automated backgrou The benefit of using LanceDB Enterprise is that it automates the reindexing process and operates continuously in the background, minimizing the impact on latency under high loads. -In OSS, you must manually manage the reindexing cadence based on your data growth and performance needs. +In LanceDB Embedded, you must manually manage the reindexing cadence based on your data growth and performance needs. ## Disk utilization {#disk-utilization} @@ -73,7 +73,7 @@ Compaction by itself does not immediately free disk space, and can temporarily i compacted files are written before old-version files are deleted. Disk space is reclaimed when old versions are pruned during cleanup. Set retention only as low as your rollback and time-travel requirements allow. -If you need to reclaim space more aggressively in OSS, use a shorter retention window: +If you need to reclaim space more aggressively in LanceDB Embedded, use a shorter retention window: ```python Python icon=Python from datetime import timedelta @@ -109,11 +109,11 @@ GPU acceleration changes how the vector index is built, not the lifecycle after embedded library, rows appended later still need `optimize()` before they are part of the index; a deployment adds them in the background. `fast_search()` only searches indexed rows. -### Manual GPU indexing in LanceDB OSS {#gpu-manual-gpu-indexing-in-lancedb-oss} +### Manual GPU indexing in LanceDB Embedded {#gpu-manual-gpu-indexing-in-lancedb-oss} You can use the Python SDK to manually create the `IVF_PQ` index on a GPU. You'll need [PyTorch>2.0](https://pytorch.org/). Note that GPU-based indexing is currently only -supported by the synchronous SDK in LanceDB OSS. +supported by the synchronous SDK in LanceDB Embedded. Specify the values `cuda` or `mps` (on Apple Silicon) for the `accelerator` parameter to enable GPU training on your device. diff --git a/docs/web/indexing/vector-index.mdx b/docs/web/indexing/vector-index.mdx index 037d75f8d..33d6a8575 100644 --- a/docs/web/indexing/vector-index.mdx +++ b/docs/web/indexing/vector-index.mdx @@ -159,7 +159,7 @@ Learn how to configure, build, and search LanceDB vector indexes, including buil The `distance_type` can be specified at search time in addition to build time. If you do this, set it to the same value used to build the vector index. If the search metric does not match the index metric, LanceDB cannot use the index and falls -back to a costly flat search. On LanceDB Cloud, the brute-force KNN safety limit +back to a costly flat search. On LanceDB Cloud (legacy hosted service), the brute-force KNN safety limit can reject that search on a large table instead of executing it. An Enterprise deployment applies the same limit only when it is configured to. @@ -279,7 +279,7 @@ In LanceDB Enterprise, vector indexes are managed **automatically**. The system - GPU-based `IVF_PQ` builds are available on request. [Contact support](/deployment/support) to enable them for your deployment. Build time depends on dataset size, dimensions and GPU resources. Open-Source - LanceDB OSS users can manually create vector indexes by calling `table.create_index()`. + LanceDB Embedded users can manually create vector indexes by calling `table.create_index()`. See the above sections for guidance on manually tuning index parameters as data changes. @@ -290,7 +290,7 @@ In the embedded library the index is built before `create_index()` returns. -Rows appended after an initial index build remain outside the index until refreshed manually (OSS) or automatically (Enterprise). Normal +Rows appended after an initial index build remain outside the index until refreshed manually (Embedded) or automatically (Enterprise). Normal search still checks those unindexed rows with a slower fallback path; `fast_search()` skips that fallback and searches only indexed rows. @@ -330,7 +330,7 @@ Each entry returned by `list_indices()` also carries detailed per-index metadata -These fields are populated for local tables. In LanceDB Enterprise, `list_indices()` returns them except `num_unindexed_rows`; use `index_stats()` for index coverage. +These fields are populated for LanceDB Embedded tables. In LanceDB Enterprise, `list_indices()` returns them except `num_unindexed_rows`; use `index_stats()` for index coverage. #### Custom Index Names diff --git a/docs/web/ingestion/create-table.mdx b/docs/web/ingestion/create-table.mdx index 535ea83e3..00425a1f9 100644 --- a/docs/web/ingestion/create-table.mdx +++ b/docs/web/ingestion/create-table.mdx @@ -8,7 +8,7 @@ availability: oss: available enterprise: available summary: >- - Create and open tables in OSS and Enterprise. + Create and open tables in LanceDB Embedded and LanceDB Enterprise. --- import { diff --git a/docs/web/ingestion/delete.mdx b/docs/web/ingestion/delete.mdx index b7b1f9432..f02320733 100644 --- a/docs/web/ingestion/delete.mdx +++ b/docs/web/ingestion/delete.mdx @@ -7,7 +7,7 @@ availability: oss: available enterprise: available summary: >- - Delete rows through the SDKs in OSS and Enterprise. Storage reclamation follows compaction and retention policy. + Delete rows through the SDKs in LanceDB Embedded and LanceDB Enterprise. Storage reclamation follows compaction and retention policy. --- import { RsExample as RsDeleteRows } from '/snippets/ingestion_delete.mdx'; @@ -70,7 +70,7 @@ Compaction rewrites the live data layout; cleanup removes eligible retained versions and files. Retained history can continue to reference data that no longer appears in the latest table version. -In OSS, `optimize()` provides maintenance operations. In Enterprise, managed +In LanceDB Embedded, `optimize()` provides maintenance operations. In Enterprise, managed maintenance and retention follow the service configuration. Choose retention according to the history you need, rather than shortening it as part of a routine delete example. See [Compaction](/maintenance/compaction) and diff --git a/docs/web/ingestion/index.mdx b/docs/web/ingestion/index.mdx index c37b46a62..9eb453cd6 100644 --- a/docs/web/ingestion/index.mdx +++ b/docs/web/ingestion/index.mdx @@ -8,7 +8,7 @@ availability: oss: available enterprise: available summary: >- - Create tables and write records through the SDKs in OSS and Enterprise. Enterprise also provides SQL write statements. + Create tables and write records through the SDKs in LanceDB Embedded and LanceDB Enterprise. Enterprise also provides SQL write statements. --- import { PyWriteWorkflow, TsWriteWorkflowBody, TsWriteWorkflowTail, RsWriteWorkflow } from '/snippets/ingestion_examples.mdx'; @@ -32,7 +32,7 @@ with a stable key when the incoming data should update existing records. ## Connect and prepare the data {#connect-to-lancedb} -Use the [connection guide](/basics/connect) to connect to OSS or Enterprise. +Use the [connection guide](/basics/connect) to connect to LanceDB Embedded or LanceDB Enterprise. The SDK write operations in this section work with both. Enterprise also supports [SQL write statements](/sql#dml); an SDK filter expression does not require a separate SQL connection. diff --git a/docs/web/ingestion/insert.mdx b/docs/web/ingestion/insert.mdx index f2ee0d7db..2c5823f4e 100644 --- a/docs/web/ingestion/insert.mdx +++ b/docs/web/ingestion/insert.mdx @@ -7,7 +7,7 @@ availability: oss: available enterprise: available summary: >- - Append records through the SDKs in OSS and Enterprise. For large Enterprise writes, see [large upload settings](#bulk-ingests-into-a-remote-table). + Append records through the SDKs in LanceDB Embedded and LanceDB Enterprise. For large Enterprise writes, see [large upload settings](#bulk-ingests-into-a-remote-table). --- import { @@ -167,7 +167,7 @@ Wait for the write operation's result, then check the expected records. Progress callbacks describe activity; they do not establish that a write succeeded. If a request fails after the server may have committed it, blindly repeating an append can duplicate rows. The client's automatic retries can do -the same: on a remote table, the Python and TypeScript 0.40.0 clients resend an +the same: on an Enterprise table, the Python and TypeScript 0.40.0 clients resend an append after a retryable status such as `504`, even when the server had already committed it, and `add()` still returns success. Reconcile using your record IDs, or choose an upsert policy designed for replay. @@ -176,9 +176,9 @@ IDs, or choose an upsert policy designed for replay. Enterprise -This section applies only to remote tables (`db://` connections). Embedded (local) writes are unaffected. +This section applies only to LanceDB Enterprise tables (`db://` connections). LanceDB Embedded writes are unaffected. -When you write to a remote LanceDB Enterprise table, the client sends the write as one HTTP `insert` request unless it splits the data into more than one partition, which it does for a large input it can measure or when you set [`write_parallelism`](#write-parallelism). A partitioned write goes up as a multipart write: the client cuts each partition into one or more `insert` parts and uploads them under a single upload id. Each part is streamed. Its size and duration still affect resource use and +When you write to a LanceDB Enterprise table, the client sends the write as one HTTP `insert` request unless it splits the data into more than one partition, which it does for a large input it can measure or when you set [`write_parallelism`](#write-parallelism). A partitioned write goes up as a multipart write: the client cuts each partition into one or more `insert` parts and uploads them under a single upload id. Each part is streamed. Its size and duration still affect resource use and timeouts: it has to finish within the client read timeout while the server writes it to object storage, so on very large ingests an oversized part can run past that timeout and surface as: ```text diff --git a/docs/web/ingestion/merge-insert.mdx b/docs/web/ingestion/merge-insert.mdx index 6fa59fd9c..74b161c29 100644 --- a/docs/web/ingestion/merge-insert.mdx +++ b/docs/web/ingestion/merge-insert.mdx @@ -7,7 +7,7 @@ availability: oss: available enterprise: available summary: >- - Merge insert is available through the SDKs in OSS and Enterprise. Use it for key-based updates and inserts. + Merge insert is available through the SDKs in LanceDB Embedded and LanceDB Enterprise. Use it for key-based updates and inserts. --- import { @@ -230,7 +230,7 @@ when changing the input used to generate it. Rust's `when_matched_update_all_expr` and `when_not_matched_by_source_delete_expr` accept DataFusion expressions for -local tables. Use the string predicate variants for Enterprise tables. +LanceDB Embedded tables. Use the string predicate variants for Enterprise tables. ## Complete write workflow {#complete-example} diff --git a/docs/web/ingestion/update.mdx b/docs/web/ingestion/update.mdx index d44a2561e..4a5fdaa24 100644 --- a/docs/web/ingestion/update.mdx +++ b/docs/web/ingestion/update.mdx @@ -7,7 +7,7 @@ availability: oss: available enterprise: available summary: >- - Update rows through the SDKs in OSS and Enterprise. Enterprise also supports the SQL UPDATE statement. + Update rows through the SDKs in LanceDB Embedded and LanceDB Enterprise. Enterprise also supports the SQL UPDATE statement. --- import { @@ -71,7 +71,7 @@ Rust's `column` argument is an expression, so the string value includes SQL quot In this separate example, Bob keeps his name and his login count becomes **21**. Python's `values_sql` and TypeScript's `valuesSql` accept expressions. -These SDK expressions work with embedded OSS tables; they do not require an +These SDK expressions work with LanceDB Embedded tables; they do not require an Enterprise SQL endpoint. Enterprise also offers [`UPDATE`](/sql/dml/update). ## Verify the affected data {#verify} diff --git a/docs/web/integrations/ai/agno.mdx b/docs/web/integrations/ai/agno.mdx index b5edef031..9ad9daeac 100644 --- a/docs/web/integrations/ai/agno.mdx +++ b/docs/web/integrations/ai/agno.mdx @@ -139,7 +139,7 @@ We get the response based on the transcript's contents and title as expected. ## Why this works well {#why-this-works-well} -To start, LanceDB OSS can run from a local directory, so transcript data can stay on your machine when you are using the OSS stack. +To start, LanceDB Embedded can run from a local directory, so transcript data can stay on your machine. - You do not need to maintain a separate transcript parser in your application code. - You do not need to hand-roll chunking and retrieval orchestration across multiple modules. diff --git a/docs/web/integrations/ai/hermes-agent.mdx b/docs/web/integrations/ai/hermes-agent.mdx index 12fc39da3..e899e2e60 100644 --- a/docs/web/integrations/ai/hermes-agent.mdx +++ b/docs/web/integrations/ai/hermes-agent.mdx @@ -29,7 +29,7 @@ prompt, plus lexical (keyword) search over past sessions. Both are useful, but k misses paraphrases of what you originally typed, the exact thing you need when recalling a fact you phrased differently months ago. -LanceDB OSS is an embedded retrieval library, which makes it a natural fit here: +LanceDB Embedded is a retrieval library that runs inside your application, which makes it a natural fit here: - **No server to stand up**: it reads and writes a table on local disk, so the plugin ships as a dependency rather than a service to operate. diff --git a/docs/web/integrations/data/dlt.mdx b/docs/web/integrations/data/dlt.mdx index 04d688fb9..f5ede936b 100644 --- a/docs/web/integrations/data/dlt.mdx +++ b/docs/web/integrations/data/dlt.mdx @@ -40,7 +40,7 @@ In this example, we will be fetching movie information from the [Open Movie Data 3. **Specify necessary credentials and/or embedding model details:** - To fetch data from the OMDb API, you will need to pass a valid API key into your pipeline. Depending on whether you're using LanceDB OSS or LanceDB Enterprise, you also may need to provide the necessary credentials to connect to the LanceDB instance. These can be pasted inside `.dlt/secrets.toml`. + To fetch data from the OMDb API, you will need to pass a valid API key into your pipeline. Depending on whether you're using LanceDB Embedded or LanceDB Enterprise, you also may need to provide the necessary credentials to connect to the LanceDB instance. These can be pasted inside `.dlt/secrets.toml`. dlt's LanceDB integration also allows you to automatically embed the data during ingestion. Depending on the embedding model chosen, you may need to paste the necessary credentials inside `.dlt/secrets.toml`: ```toml @@ -52,7 +52,7 @@ In this example, we will be fetching movie information from the [Open Movie Data embedding_model = "all-MiniLM-L6-v2" [destination.lancedb.credentials] uri = ".lancedb" - api_key = "api_key" # API key to connect to LanceDB Enterprise. Leave out if you are using LanceDB OSS. + api_key = "api_key" # API key to connect to LanceDB Enterprise. Leave out if you are using LanceDB Embedded. embedding_model_provider_api_key = "embedding_model_provider_api_key" # Not needed for providers that don't need authentication (ollama, sentence-transformers). ``` See [here](https://dlthub.com/docs/dlt-ecosystem/destinations/lancedb#configure-the-destination) for more information and for a list of available models and model providers. diff --git a/docs/web/integrations/data/duckdb.mdx b/docs/web/integrations/data/duckdb.mdx index 23c4891f9..25c982b90 100644 --- a/docs/web/integrations/data/duckdb.mdx +++ b/docs/web/integrations/data/duckdb.mdx @@ -6,7 +6,7 @@ description: "Learn how to use the DuckDB-Lance extension to query Lance tables LanceDB integrates with [DuckDB](https://duckdb.org/) through the [Lance extension](https://github.com/lance-format/lance-duckdb) for DuckDB. In this page, we'll show how LanceDB manages table lifecycle, and DuckDB provides SQL analytics (including joins) and search over those tables. -Note that earlier versions of LanceDB used to recommend converting Lance tables to Arrow tables via `table.to_arrow()`. Although this method is still available for local tables (because DuckDB [natively scans Arrow tables](https://duckdb.org/2021/12/03/duck-arrow)), it is no longer the recommended workflow for working with Lance tables in DuckDB. This page shows how to use the Lance extension with namespace-attached LanceDB tables, allowing you to pushdown SQL queries directly to the Lance layer. +Note that earlier versions of LanceDB used to recommend converting Lance tables to Arrow tables via `table.to_arrow()`. Although this method is still available for LanceDB Embedded tables (because DuckDB [natively scans Arrow tables](https://duckdb.org/2021/12/03/duck-arrow)), it is no longer the recommended workflow for working with Lance tables in DuckDB. This page shows how to use the Lance extension with namespace-attached LanceDB tables, allowing you to pushdown SQL queries directly to the Lance layer. ## Install {#install} diff --git a/docs/web/integrations/data/polars_arrow.mdx b/docs/web/integrations/data/polars_arrow.mdx index 3acfcfea5..8eaaa6440 100644 --- a/docs/web/integrations/data/polars_arrow.mdx +++ b/docs/web/integrations/data/polars_arrow.mdx @@ -43,7 +43,7 @@ Run vector search and keep the results as a Polars `DataFrame` for further proce ## Work with LazyFrames {#work-with-lazyframes} -When you want to operate on the entire table (potentially larger than RAM), convert to a Polars `LazyFrame` so you can chain transformations without loading everything at once. This works for local tables only; with LanceDB Enterprise, `search(...).to_polars()` returns an eager DataFrame of query results. +When you want to operate on the entire table (potentially larger than RAM), convert to a Polars `LazyFrame` so you can chain transformations without loading everything at once. This works for LanceDB Embedded tables only; with LanceDB Enterprise, `search(...).to_polars()` returns an eager DataFrame of query results. {PyPlatformsPolarsLazyframe} diff --git a/docs/web/maintenance/background-jobs.mdx b/docs/web/maintenance/background-jobs.mdx index 1a710fe79..cfeab74df 100644 --- a/docs/web/maintenance/background-jobs.mdx +++ b/docs/web/maintenance/background-jobs.mdx @@ -48,7 +48,7 @@ log from growing without bound: | --- | --- | | `prewarm_page_cache` | Loads table data into a query node's page cache ahead of a request needing it. | | `prewarm_index_cache` | The same, for index structures. | -| `startup_prewarm_idx` | Runs cache prewarming as part of a plan executor's own startup, rather than on a schedule, when the deployment enables it. | +| `startup_prewarm_idx` | Runs cache prewarming as part of an executor's own startup, rather than on a schedule, when the deployment enables it. | ## Registry housekeeping {#registry} diff --git a/docs/web/maintenance/cleanup.mdx b/docs/web/maintenance/cleanup.mdx index 7833fa8a0..4b9e24796 100644 --- a/docs/web/maintenance/cleanup.mdx +++ b/docs/web/maintenance/cleanup.mdx @@ -18,7 +18,7 @@ those versions referenced. **Enterprise job type:** `cleanup`. Distinct from `compact`: compaction -merges files, cleanup removes them. `optimize()` in OSS runs both in one call; +merges files, cleanup removes them. `optimize()` in LanceDB Embedded runs both in one call; Enterprise schedules them as separate jobs, and runs cleanup only when the deployment's configuration enables it. @@ -89,8 +89,9 @@ directly can corrupt current or historical snapshots. Upgrade all clients and maintenance workers to a version that understands Managed blobs before using them, and reopen handles created before that upgrade. -For local tables, `optimize()` performs compaction and cleanup. Enterprise runs -these as background jobs; the remote Python table does not support `optimize()`. +For LanceDB Embedded tables, `optimize()` performs compaction and cleanup. +Enterprise runs these as background jobs; Python tables connected to Enterprise +do not support `optimize()`. See [Background jobs](/maintenance/background-jobs) for the Enterprise path. ## Disk usage does not drop immediately {#disk} diff --git a/docs/web/maintenance/compaction.mdx b/docs/web/maintenance/compaction.mdx index 8b0a8c86f..be6685d9c 100644 --- a/docs/web/maintenance/compaction.mdx +++ b/docs/web/maintenance/compaction.mdx @@ -24,7 +24,7 @@ Run optimization as regular table maintenance, particularly after many small writes or a large ingest. {/* -Draft for the OSS compaction SQ partition check release. Keep this section +Draft for the LanceDB Embedded compaction SQ partition check release. Keep this section unpublished until that behavior ships. ### Recover from an oversized SQ partition {#oversized-sq-partition} @@ -62,7 +62,7 @@ needs to. **Enterprise job type:** `compact`. Runs automatically as data accumulates, separately from [`cleanup`](/maintenance/cleanup). The two are distinct jobs -even though `optimize()` bundles both in one OSS call. +even though `optimize()` bundles both in one LanceDB Embedded call. ## Retraining indexes {#retrain} @@ -113,7 +113,7 @@ Two things accumulate on a long-lived table as more and more data gets added to - **Many small fragments build up as you write**, slowing down queries that have to scan across more files. **Compaction** merges them back into larger fragments. - **Old versions build up as the table changes**, growing disk usage beyond the live data size (LanceDB retains them for time-travel and rollback). **Cleanup** prunes versions older than a retention window. -In OSS, you run them yourself via `optimize()`, which bundles both into a single call: +In LanceDB Embedded, you run them yourself via `optimize()`, which bundles both into a single call: ```python Python icon="python" from datetime import timedelta @@ -129,7 +129,7 @@ until the first supported release is confirmed. ### Tune compaction for wide rows {#tune-wide-rows} -For an existing local table, derive a fragment row target from the expected +For an existing LanceDB Embedded table, derive a fragment row target from the expected row size. These examples use rows averaging 1 KiB and a 64 KiB fragment target; choose sizes for your workload. Smaller scan batches and one compaction task at a time can also reduce memory use. @@ -148,7 +148,7 @@ separately when needed; Python's `optimize()` includes those steps. TypeScript's `optimize()` does not currently expose the fragment row target, scan batch size, or compaction thread count. These tuning examples apply to -Python and Rust local tables. +Python and Rust tables in LanceDB Embedded. Planning remains row based. The row target bounds later passes after existing oversized fragments have been rewritten; the first pass rewrites those diff --git a/docs/web/management/database.mdx b/docs/web/management/database.mdx index a4b76f195..35b63c308 100644 --- a/docs/web/management/database.mdx +++ b/docs/web/management/database.mdx @@ -8,8 +8,9 @@ availability: oss: available enterprise: available summary: >- - OSS opens tables in a local directory or object storage. Enterprise connects - to remote compute with a database URI and credentials. + LanceDB Embedded opens tables in a local directory or object storage. + LanceDB Enterprise connects with a database URI and credentials and runs + operations with LanceDB Distributed. --- import { PyConnectEnterprisePlaceholders, TsConnectEnterprisePlaceholders } from '/snippets/connection.mdx'; @@ -22,14 +23,15 @@ objects, and configure how your application reaches the data. | URI | Offering | Where queries run | | --- | --- | --- | -| `./.lancedb` | OSS, with local storage | In your application | -| `s3://bucket/path`, `gs://bucket/path`, `az://container/path` | OSS, with object storage | In your application | -| `db://my-database` | Enterprise | On remote compute | +| `./.lancedb` | LanceDB Embedded, with local storage | In your application | +| `s3://bucket/path`, `gs://bucket/path`, `az://container/path` | LanceDB Embedded, with object storage | In your application | +| `db://my-database` | LanceDB Enterprise | On the Enterprise service (LanceDB Distributed) | [Connect to LanceDB](/basics/connect) has examples for each connection type. -A connection to object storage still uses the embedded library: your process -reads and writes the bucket directly. Enterprise runs operations remotely and -manages the supporting compute and maintenance. +A connection to object storage still uses LanceDB Embedded: your process +reads and writes the bucket directly. LanceDB Enterprise runs LanceDB +Distributed: query execution, indexing and maintenance run on the Enterprise +service, outside your application. ## Connect to Enterprise {#deployment} @@ -60,7 +62,7 @@ manager. See [Authentication](/enterprise/authentication) for OAuth and ## Storage options {#storage-options} -For OSS tables in object storage, `storage_options` configures credentials, +For LanceDB Embedded tables in object storage, `storage_options` configures credentials, endpoints and options for new tables. This example enables stable row IDs for tables created through the connection: @@ -91,7 +93,7 @@ See [Storage](/deployment/storage) for provider credentials and other options. ## Read consistency {#consistency} -For OSS connections, `read_consistency_interval` controls how often reads check +For LanceDB Embedded connections, `read_consistency_interval` controls how often reads check for table versions committed by other writers. For example, check at most once every five seconds: @@ -112,7 +114,7 @@ const db = await lancedb.connect("./.lancedb", { readConsistencyInterval: 5 }); ``` -By default, an OSS table handle does not automatically pick up another +By default, an Embedded table handle does not automatically pick up another process's writes. Reopen the table, check out its latest version, or configure a consistency interval when you need those updates. A zero interval checks on every read, with the cost of a metadata check. @@ -139,7 +141,7 @@ versions and lifecycle operations. Dropping a table removes its history as well as its current data. You cannot -recover a dropped table through table versioning. The OSS `drop_database()` +recover a dropped table through table versioning. The LanceDB Embedded `drop_database()` and `drop_all_tables()` operations remove all tables without a confirmation prompt. diff --git a/docs/web/management/function.mdx b/docs/web/management/function.mdx index fd9cb7c19..7825b0bf6 100644 --- a/docs/web/management/function.mdx +++ b/docs/web/management/function.mdx @@ -8,7 +8,7 @@ availability: oss: unavailable enterprise: available summary: >- - Enterprise supports Functions when enabled for your Enterprise cluster; the embedded library cannot register or run them. + Enterprise supports Functions when enabled for your Enterprise cluster; LanceDB Embedded cannot register or run them. --- import { @@ -31,8 +31,8 @@ rather than pulling rows to your process. Registering and running a function needs a LanceDB Enterprise deployment with Functions enabled, which they are not by default. On a -local connection `create_function` raises `NotImplementedError`; to derive a -column locally, declare a +LanceDB Embedded connection `create_function` raises `NotImplementedError`; to +derive a column there, declare a [SQL computed column](/feature-engineering/add-computed-column) instead. @@ -282,14 +282,15 @@ as `bytes`; this feature does not add streamed outputs. ## Declare the environment {#environment} -The function runs remotely, so its dependencies are part of its definition: +The function runs on the Enterprise service, not in your application, so its +dependencies are part of its definition: | | | | --- | --- | -| `pip` | requirements for the remote environment | +| `pip` | requirements for the function's execution environment | | `conda`, `conda_channels` | conda packages instead of pip; channels in priority order | | `env` | environment variables | -| `python_version` | remote Python major/minor, defaulting to yours | +| `python_version` | Python major/minor for the execution environment, defaulting to yours | | `gpu` | whether every execution requires a GPU | These are part of the **immutable function version**. Changing a dependency diff --git a/docs/web/management/materialized-view.mdx b/docs/web/management/materialized-view.mdx index 221e02dcb..42245a51a 100644 --- a/docs/web/management/materialized-view.mdx +++ b/docs/web/management/materialized-view.mdx @@ -78,8 +78,8 @@ That also means dropping one removes stored rows, unlike dropping a ## Enterprise compatibility {#deployment} -Enterprise supports creating and refreshing materialized views on remote -compute. Use the SDK version supported by your deployment, or the +Enterprise supports creating and refreshing materialized views on the +Enterprise service. Use the SDK version supported by your deployment, or the [SQL interface](/sql/ddl/materialized-view). See [Enterprise refreshes](/feature-engineering/materialized-views#availability) for compatibility considerations when upgrading an existing pipeline. diff --git a/docs/web/management/namespace.mdx b/docs/web/management/namespace.mdx index dda6b918f..0d80831c9 100644 --- a/docs/web/management/namespace.mdx +++ b/docs/web/management/namespace.mdx @@ -22,7 +22,7 @@ import { } from '/snippets/connection.mdx'; LanceDB organizes Lance tables through a catalog-level abstraction defined by -the *namespace spec*. LanceDB OSS is an embedded library for accessing those +the *namespace spec*. LanceDB Embedded is an embedded library for accessing those tables, and LanceDB Enterprise is a multimodal lakehouse that provides shared compute and catalog services on top of the Lance format. If you're coming from traditional databases or lakehouses, you can think of a namespace as the catalog path that says where a table name lives. @@ -76,7 +76,7 @@ directory. Namespaces can nest inside it, as in this hierarchy: The hierarchy is logical, not a tree of folders: a directory namespace records it in a `__manifest` table in the root directory, and stores each table in a directory of its own there. -As a user of LanceDB OSS, you might never notice namespaces at first, because a plain connection +As a user of LanceDB Embedded, you might never notice namespaces at first, because a plain connection uses only the root namespace, which is implicit. Connecting to this namespace is as simple as connecting to the catalog root: @@ -165,7 +165,7 @@ println!("Created table: {}", table.name()); -- For simple use cases in LanceDB OSS, you don't need to go too deep into namespaces. +- For simple use cases in LanceDB Embedded, you don't need to go too deep into namespaces. - To integrate LanceDB with external catalogs, understand how each namespace implementation resolves table names and locations in your organization's setup. diff --git a/docs/web/management/table.mdx b/docs/web/management/table.mdx index 182a80ec3..bf256ac97 100644 --- a/docs/web/management/table.mdx +++ b/docs/web/management/table.mdx @@ -248,7 +248,7 @@ set to the exact version a model saw. A shallow clone depends on the source's files continuing to exist. If the source is [compacted](/maintenance/compaction) past the retention window, the version -the clone points at can be pruned. Local OSS connections support shallow clones +the clone points at can be pruned. LanceDB Embedded connections support shallow clones only; `is_shallow=False` is not implemented. If the copy must outlive the source's history, copy its data into an independent table instead. A deployment that supports cloning also makes shallow clones only, and one whose catalog @@ -462,8 +462,9 @@ pylance. Pandas conversions that need the Lance scanner, including plain-scan `"lazy"` handles and legacy blobs, still require pylance. `to_arrow()`, `to_list()`, `to_batches()`, and the fetch methods do not require pylance. -`blob_mode="bytes"` requires a local table snapshot, so remote and in-memory -tables raise `NotImplementedError`. On a remote table, `Table.to_pandas()` and +`blob_mode="bytes"` requires a LanceDB Embedded table snapshot, so Enterprise +and in-memory tables raise `NotImplementedError`. On an Enterprise table, +`Table.to_pandas()` and `Table.to_arrow()` aren't supported, and a query's `to_pandas()` also raises in the default `"lazy"` mode because it would open `BlobFile` handles. Query with `blob_mode="descriptions"`, then read bytes with `fetch_blobs` or @@ -495,7 +496,7 @@ descriptors. Both `"bytes"` and `"descriptions"` hide automatic row IDs; explicitly requested row IDs remain visible. Bytes mode has the same restrictions as `to_arrow(blob_mode="bytes")`, -including no legacy blobs, blobs inside lists, remote tables, or namespace +including no legacy blobs, blobs inside lists, Enterprise tables, or namespace `QueryTable` pushdown. If concurrent writers can overwrite the table, use a separate reader checked out to a fixed version before querying. Otherwise, an overwrite can invalidate the row IDs used to fetch bytes and raise @@ -686,7 +687,7 @@ between inline values and Managed objects. Enterprise Functions can consume blob columns and return new blobs. Their output payloads are managed by the destination table. -Local tables can also derive blob columns with +LanceDB Embedded tables can also derive blob columns with [SQL computed columns](/feature-engineering/add-computed-column). Deleting a row or replacing its blob does not immediately remove the old @@ -741,8 +742,8 @@ Write raw bytes to a V1 blob column: #### 3\. Convert blob tables to pandas {#multimodal-3-convert-blob-tables-to-pandas} -On local tables with V1 blob columns, `to_pandas()` in Python accepts `blob_mode` -(`"lazy"`, `"bytes"`, or `"descriptions"`). Remote tables raise +On LanceDB Embedded tables with V1 blob columns, `to_pandas()` in Python accepts +`blob_mode` (`"lazy"`, `"bytes"`, or `"descriptions"`). Enterprise tables raise `NotImplementedError`, and `"bytes"` is not supported on in-memory tables. Extra keyword arguments such as `split_blocks` or `self_destruct` are forwarded to the PyArrow / Lance pandas conversion: @@ -1537,7 +1538,7 @@ mixing in lower-level Lance file operations. **System Operations** System operations like `optimize()`, index updates, and table compaction also increment table version numbers. -In LanceDB OSS, `optimize()` can prune older versions based on its retention setting (`cleanup_older_than`, 7 days by default), +In LanceDB Embedded, `optimize()` can prune older versions based on its retention setting (`cleanup_older_than`, 7 days by default), which is when old-version files are removed and disk space is reclaimed. A deployment prunes them in the background when its configuration enables [cleanup](/maintenance/cleanup); `optimize()` is not available there. diff --git a/docs/web/quickstart.mdx b/docs/web/quickstart.mdx index 3f466041d..645e0565e 100644 --- a/docs/web/quickstart.mdx +++ b/docs/web/quickstart.mdx @@ -7,7 +7,8 @@ icon: rocket import { PyConnect, TsConnect, RsConnect, PyConnectEnterprisePlaceholders, TsConnectEnterprisePlaceholders, RsConnectEnterprisePlaceholders } from '/snippets/connection.mdx'; import { PyQuickstartData, PyQuickstartCreateTable, PyQuickstartAddData, PyQuickstartVectorSearch1, TsQuickstartData, TsQuickstartCreateTable, TsQuickstartAddData, TsQuickstartVectorSearch1, RsQuickstartDefineStruct, RsQuickstartData, RsQuickstartCreateTable, RsQuickstartAddData, RsQuickstartVectorSearch1 } from '/snippets/quickstart.mdx'; -This quickstart uses a local database and works without an account or API key. +This quickstart uses LanceDB Embedded with a local database and works without an account or API key. +LanceDB Embedded runs in your application's process; your data can live on local disk or in object storage. Follow the steps below, or jump to the [complete examples](#code) to copy a runnable program. @@ -154,7 +155,7 @@ Use the database URI, API key, and endpoint provided by your administrator or th In application code, load credentials from environment variables or a secrets manager. See [connection settings](/basics/connect#enterprise) for an example. -Need a deployment? [Contact the LanceDB team](https://www.lancedb.com/contact). For differences between local and server execution, see [Moving to LanceDB Enterprise](/basics/sdk#moving-to-enterprise). +Need a deployment? [Contact the LanceDB team](https://www.lancedb.com/contact). For differences between Embedded and Distributed execution, see [Moving to LanceDB Enterprise](/basics/sdk#moving-to-enterprise). diff --git a/docs/web/reranking/index.mdx b/docs/web/reranking/index.mdx index 26db30442..ccaa70e9b 100644 --- a/docs/web/reranking/index.mdx +++ b/docs/web/reranking/index.mdx @@ -8,7 +8,7 @@ availability: oss: available enterprise: available summary: >- - Reranking is available with OSS and Enterprise. + Reranking is available with LanceDB Embedded and LanceDB Enterprise. --- import { diff --git a/docs/web/search/explain.mdx b/docs/web/search/explain.mdx index 383745e5b..1a1fa3330 100644 --- a/docs/web/search/explain.mdx +++ b/docs/web/search/explain.mdx @@ -7,7 +7,7 @@ availability: oss: available enterprise: available summary: >- - Query plans are available in OSS and Enterprise. + Query plans are available in LanceDB Embedded and LanceDB Enterprise. --- import { PyQueryPlan, TsQueryPlanBody, TsQueryPlanTail } from '/snippets/search_examples.mdx'; @@ -26,7 +26,7 @@ the query and adds measurements, including execution time and rows processed. Use the first to inspect query structure and the second to investigate work actually performed. Operator names and available measurements can differ -between OSS and Enterprise. SQL provides [EXPLAIN and EXPLAIN ANALYZE](/sql/dql/explain). +between LanceDB Embedded and LanceDB Enterprise. SQL provides [EXPLAIN and EXPLAIN ANALYZE](/sql/dql/explain). @@ -161,7 +161,7 @@ CoalesceBatchesExec: target_batch_size=1024 #### 5\. Data Retrieval {#5-data-retrieval} -- `RemoteTake` is the deployment's operator for this step; a local plan shows Lance's `Take` or a `LanceRead` over the selected row IDs, depending on the library version +- `RemoteTake` is the deployment's operator for this step; a LanceDB Embedded plan shows Lance's `Take` or a `LanceRead` over the selected row IDs, depending on the library version - Handles efficient data retrieval from remote storage locations - Fetches specific rows and columns needed for the final output - Optimizes network bandwidth by only retrieving required data @@ -328,25 +328,26 @@ ProjectionExec: expr=[chunk_index@4 as chunk_index, title@5 as title, identifier -### Distributed metrics on remote tables {#distributed-metrics-on-remote-tables} +### Distributed metrics on LanceDB Enterprise {#distributed-metrics-on-remote-tables} Enterprise -When you call `analyze_plan` against a LanceDB Enterprise deployment that distributes its queries across a pool of workers, the query runs on those workers. By default the returned plan aggregates each operator's metrics into a single value, matching the local single-node output. Pass a `distributed_metrics` mode when you need to see how work was split across workers: +When you call `analyze_plan` against a LanceDB Enterprise deployment that distributes its queries across a pool of workers, the query runs on those workers. By default the returned plan aggregates each operator's metrics into a single value, matching the single-node output of LanceDB Embedded. Pass a `distributed_metrics` mode when you need to see how work was split across workers: | Mode | What it shows | When to use it | | :------------ | :---------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------ | -| `aggregate` | One summary value per operator (default). Same shape as local `analyze_plan`. | Everyday performance checks and comparisons against a local plan. | +| `aggregate` | One summary value per operator (default). Same shape as Embedded `analyze_plan`. | Everyday performance checks and comparisons against an Embedded plan. | | `per_worker` | Metrics reported separately for each worker that participated in the query. | Diagnosing stragglers or uneven work distribution across the cluster. | | `full` | Both the aggregate summary and the per-worker breakdown. | Deep investigations where you need the totals *and* the per-worker detail in a single output. | Python exposes this option through `distributed_metrics`. In TypeScript, pass -the same mode to `analyzePlan()` as its `distributedMetrics` argument. Local -Python queries ignore the distributed mode and return local measurements. +the same mode to `analyzePlan()` as its `distributedMetrics` argument. Python +queries on LanceDB Embedded ignore the distributed mode and return single-node +measurements. ```python Python icon="python" -# Show a per-worker breakdown for a remote query +# Show a per-worker breakdown for a query on LanceDB Enterprise plan = ( table.search(query_embed) .where("identifier > 0 AND identifier < 1000000") diff --git a/docs/web/search/filtering.mdx b/docs/web/search/filtering.mdx index 50d37acc0..a3ad6f735 100644 --- a/docs/web/search/filtering.mdx +++ b/docs/web/search/filtering.mdx @@ -7,7 +7,7 @@ availability: oss: available enterprise: available summary: >- - Metadata filtering is available in OSS and Enterprise. + Metadata filtering is available in LanceDB Embedded and LanceDB Enterprise. --- import { PyFilterSearch, TsFilterSearchBody, TsFilterSearchTail } from '/snippets/search_examples.mdx'; diff --git a/docs/web/search/full-text-search.mdx b/docs/web/search/full-text-search.mdx index bc174d5bd..5e0d7d8d7 100644 --- a/docs/web/search/full-text-search.mdx +++ b/docs/web/search/full-text-search.mdx @@ -7,7 +7,7 @@ availability: oss: available enterprise: available summary: >- - Full-text search is available in OSS and Enterprise. + Full-text search is available in LanceDB Embedded and LanceDB Enterprise. --- import { @@ -131,7 +131,7 @@ tbl ``` -OSS builds the index before the call returns. Enterprise builds it in the +LanceDB Embedded builds the index before the call returns. Enterprise builds it in the background. Wait for completion with Python’s `table.wait_for_index(["text_idx"])` or TypeScript’s `await tbl.waitForIndex(["text_idx"], 300)` before querying it. Use your actual index name if you chose a different one. @@ -187,7 +187,7 @@ values rather than probabilities. ### Keeping the index up to date {#keeping-the-index-up-to-date} -In OSS, new rows can remain outside the FTS index until you optimize the table. +In LanceDB Embedded, new rows can remain outside the FTS index until you optimize the table. Search includes those rows by scanning them, but that work can increase query latency. Call `optimize()` to update the index: @@ -207,7 +207,7 @@ tbl.optimize(OptimizeAction::All).await?; ``` -Choose an OSS maintenance schedule based on write volume and query latency. +Choose a LanceDB Embedded maintenance schedule based on write volume and query latency. Inspect index coverage with `table.index_stats(...)` and optimize when the unindexed data adds too much work. `.fast_search()` skips unindexed rows, so use it only when omitting recent records is acceptable. @@ -289,7 +289,7 @@ export LANCE_LANGUAGE_MODEL_HOME=/path/to/lance/language_models For example, `jieba/default` is resolved under `/jieba/default/...`, `lindera/ipadic` under `/lindera/ipadic/...`, and `lindera/ko-dic` under `/lindera/ko-dic/...`. Model files must be installed where indexing and queries run: on your machine -for OSS, or on the Enterprise cluster for a remote table. +for LanceDB Embedded, or on the Enterprise cluster for an Enterprise table. Built-in stop-word removal supports Danish, Dutch, English, Finnish, French, German, Hungarian, Italian, Norwegian, Portuguese, Russian, Spanish, and Swedish. If you use another stemming language, such as Arabic, Greek, Romanian, Tamil, or Turkish, set `remove_stop_words=False` or pass `custom_stop_words`. diff --git a/docs/web/search/hybrid-search.mdx b/docs/web/search/hybrid-search.mdx index c3e453145..1100c073a 100644 --- a/docs/web/search/hybrid-search.mdx +++ b/docs/web/search/hybrid-search.mdx @@ -7,7 +7,7 @@ availability: oss: available enterprise: available summary: >- - Hybrid search is available in OSS and Enterprise. + Hybrid search is available in LanceDB Embedded and LanceDB Enterprise. --- import { PyConnectEnterprisePlaceholders, TsConnectEnterprisePlaceholders } from '/snippets/connection.mdx'; @@ -84,9 +84,9 @@ import { Utf8 } from "apache-arrow"; ### 2\. Connect to LanceDB {#2-connect-to-lancedb} -Choose a local OSS connection or use your Enterprise connection details. +Choose a LanceDB Embedded connection or use your Enterprise connection details. -OSS +Embedded ```python Python icon="python" @@ -389,7 +389,7 @@ which relevant rows reach the candidate set before evaluating how a reranker orders them. Record latency as well as relevance: increasing candidate counts or applying a model-based reranker adds work. -Reranking runs in the application for both OSS and Enterprise connections. +Reranking runs in the application for both Embedded and Enterprise connections. See [Reranking](/reranking) for model-free fusion, model-based rerankers, custom implementations and score interpretation. diff --git a/docs/web/search/index.mdx b/docs/web/search/index.mdx index 9d439b204..c4bdd5cae 100644 --- a/docs/web/search/index.mdx +++ b/docs/web/search/index.mdx @@ -7,7 +7,7 @@ availability: oss: available enterprise: available summary: >- - Vector, full-text and hybrid search are available in OSS and Enterprise. + Vector, full-text and hybrid search are available in LanceDB Embedded and LanceDB Enterprise. --- import { PyVectorSearch, TsVectorSearchBody, TsVectorSearchTail } from '/snippets/search_examples.mdx'; @@ -106,9 +106,9 @@ in [Data loading](/training/data-loading). The SDK buffers Enterprise query responses before exposing batches. Set a query limit rather than relying on batch iteration alone to bound memory. -Direct Lance dataset access through Python's `table.to_lance()` is an OSS -interface. Use the SDK query builders for reads that need to work with both -OSS and Enterprise. +Direct Lance dataset access through Python's `table.to_lance()` is a LanceDB +Embedded interface. Use the SDK query builders for reads that need to work with +both LanceDB Embedded and LanceDB Enterprise. ## Investigate a slow query {#diagnostics} diff --git a/docs/web/search/vector-search.mdx b/docs/web/search/vector-search.mdx index cc6ae5421..59fbc1cc9 100644 --- a/docs/web/search/vector-search.mdx +++ b/docs/web/search/vector-search.mdx @@ -7,7 +7,7 @@ availability: oss: available enterprise: available summary: >- - Vector search is available in OSS and Enterprise. + Vector search is available in LanceDB Embedded and LanceDB Enterprise. --- import { @@ -131,7 +131,7 @@ Without a vector index, searches use `l2` by default. You can specify `cosine` o When a vector index exists, the search metric must match the metric used to build the index. If you explicitly request a different metric, LanceDB cannot use that -index and falls back to an exhaustive (brute-force) search. On LanceDB Cloud, the +index and falls back to an exhaustive (brute-force) search. On LanceDB Cloud (legacy hosted service), the brute-force KNN safety limit can reject that search on a large table instead of executing it. LanceDB Enterprise doesn't have the limit. @@ -623,7 +623,7 @@ tbl.create_index(metric="cosine", vector_column_name="vector") **Indexing matters more for multivector tables than for single-vector ones.** A brute-force scan over a multivector column has to compare every query vector to every document vector in every row, so the cost grows with both the row count and the number of vectors per row. -In LanceDB OSS, the query will just run, so a large unindexed multivector table can stall a process for a long time before returning results. +In LanceDB Embedded, the query will just run, so a large unindexed multivector table can stall a process for a long time before returning results. On LanceDB Cloud, the brute-force KNN safety check applies a stricter row threshold to multivector columns; roughly 10× lower than for single-vector columns. So an unindexed multivector table can be rejected with a "vector search would use brute-force KNN" error well before a comparable single-vector table would. LanceDB Enterprise doesn't have the limit. Build the index before you start hitting it from production traffic, even if the dataset is small enough that you'd skip indexing for a single-vector workload. diff --git a/docs/web/static/assets/images/overview/lancedb-architecture.svg b/docs/web/static/assets/images/overview/lancedb-architecture.svg index 8fe3ff3c9..585dfe991 100644 --- a/docs/web/static/assets/images/overview/lancedb-architecture.svg +++ b/docs/web/static/assets/images/overview/lancedb-architecture.svg @@ -1,6 +1,6 @@ - LanceDB OSS and Enterprise architecture - OSS runs the application and embedded library in one process with local disk or object storage. Enterprise separates query serving, read execution and caching, and indexing and background workers. The control plane governs the service. Enterprise persists tables in object storage. Both offerings use the Lance format, without automatically sharing storage. + LanceDB Embedded and Enterprise architecture + LanceDB Embedded runs the application and embedded library in one process with local disk or object storage. Enterprise separates query serving, read execution and caching, and indexing and background workers. The control plane governs the service. Enterprise persists tables in object storage. Both offerings use the Lance format, without automatically sharing storage.

For LanceDB Cloud, use the simplified builder API: + *

For LanceDB Cloud (legacy hosted service), use the simplified builder API: * *

{@code
  * import org.lance.namespace.LanceNamespace;
diff --git a/java/lancedb-core/src/main/java/com/lancedb/LanceDbRestClient.java b/java/lancedb-core/src/main/java/com/lancedb/LanceDbRestClient.java
index 2b40ef798..ee5bcfc7b 100644
--- a/java/lancedb-core/src/main/java/com/lancedb/LanceDbRestClient.java
+++ b/java/lancedb-core/src/main/java/com/lancedb/LanceDbRestClient.java
@@ -27,7 +27,7 @@ import java.io.IOException;
 import java.io.UncheckedIOException;
 
 /**
- * Minimal HTTP client for LanceDB Cloud and Enterprise routes that the Lance Namespace
+ * Minimal HTTP client for LanceDB Enterprise routes that the Lance Namespace
  * specification does not cover.
  *
  * 

Most table operations reach LanceDB through {@link org.lance.namespace.LanceNamespace}, which diff --git a/java/lancedb-core/src/main/java/com/lancedb/LanceDbTableRTE.java b/java/lancedb-core/src/main/java/com/lancedb/LanceDbTableRTE.java index b0a61233c..606f31076 100644 --- a/java/lancedb-core/src/main/java/com/lancedb/LanceDbTableRTE.java +++ b/java/lancedb-core/src/main/java/com/lancedb/LanceDbTableRTE.java @@ -22,7 +22,7 @@ import java.util.Optional; import java.util.OptionalLong; /** - * The RTE write path for one LanceDB Cloud or Enterprise table. + * The RTE write path for one LanceDB Enterprise table. * *

Installing an {@link RTEWriteSpec} routes {@code mergeInsert} upserts through Lance's RTE — an * LSM-style append — instead of the standard merge path. Rows land in an in-memory memtable, freeze diff --git a/nodejs/__test__/remote.test.ts b/nodejs/__test__/remote.test.ts index 80befcc67..8d5c21aa3 100644 --- a/nodejs/__test__/remote.test.ts +++ b/nodejs/__test__/remote.test.ts @@ -115,14 +115,14 @@ describe("remote connection", () => { ...options, mode: "overwrite", }), - ).rejects.toThrow(/write_options.*remote/); + ).rejects.toThrow(/write_options.*LanceDB Distributed/); await expect( db.createEmptyTable( "test", new Schema([new Field("value", new Int64(), true)]), options, ), - ).rejects.toThrow(/write_options.*remote/); + ).rejects.toThrow(/write_options.*LanceDB Distributed/); }, ); expect(requests).toEqual([]); @@ -140,7 +140,9 @@ describe("remote connection", () => { async (db) => { await expect( db.openTable("test", undefined, options), - ).rejects.toThrow(/not supported for remote/); + ).rejects.toThrow( + /not supported for table access in LanceDB Distributed/, + ); }, ); expect(requests).toEqual([]); @@ -316,7 +318,7 @@ describe("remote connection", () => { ], ]; for (const [run, operation] of cases) { - let message = `LanceDBError: not supported: ${operation} is not supported for remote tables.`; + let message = `LanceDBError: not supported: ${operation} is not supported in LanceDB Distributed.`; if (operation === "IVF_HNSW_PQ") { message += " Please use IVF_HNSW_SQ instead."; } @@ -463,7 +465,7 @@ describe("remote connection", () => { table.add([{ id: 1n }], { allowExternalBlobOutsideBases: true, }), - ).rejects.toThrow("only supported on local tables"); + ).rejects.toThrow("only supported in LanceDB Embedded"); expect(insertRequests).toBe(0); await expect(table.add([{ id: 2n }])).resolves.toMatchObject({ diff --git a/nodejs/__test__/table.test.ts b/nodejs/__test__/table.test.ts index c9e1efcb6..6db5b2f4d 100644 --- a/nodejs/__test__/table.test.ts +++ b/nodejs/__test__/table.test.ts @@ -4526,14 +4526,14 @@ describe.each(arrowVersions)( ]; const table = await db.createTable("prewarm_data_test", data); - // prewarmData is only supported on remote tables. We verify the call + // prewarmData is only supported in LanceDB Distributed. We verify the call // is wired through napi and surfaces the expected error for both // arg shapes (undefined and string[]). await expect(table.prewarmData()).rejects.toThrow( - "prewarm_data is currently only supported on remote tables", + "prewarm_data is currently only supported in LanceDB Distributed", ); await expect(table.prewarmData(["text"])).rejects.toThrow( - "prewarm_data is currently only supported on remote tables", + "prewarm_data is currently only supported in LanceDB Distributed", ); }); @@ -5506,7 +5506,7 @@ describe("computed columns", () => { const db = await connect(tmpDir.name); const table = await db.createTable("errors_local", [{ x: 1 }]); await expect(table.functionErrors()).rejects.toThrow( - "LanceDB Cloud and Enterprise", + "recorded only in LanceDB Distributed", ); }); diff --git a/nodejs/lancedb/blob.ts b/nodejs/lancedb/blob.ts index 82729644c..4cfcaf990 100644 --- a/nodejs/lancedb/blob.ts +++ b/nodejs/lancedb/blob.ts @@ -274,7 +274,7 @@ export class BlobFile { export type BlobReadOptions = { /** * Cancels the read. The call rejects with `signal.reason`, and the native - * read stops, including in-flight requests to a remote table. + * read stops, including in-flight requests to a LanceDB Distributed table. */ signal?: AbortSignal; }; diff --git a/nodejs/lancedb/connection.ts b/nodejs/lancedb/connection.ts index 62f218e16..d5a856894 100644 --- a/nodejs/lancedb/connection.ts +++ b/nodejs/lancedb/connection.ts @@ -270,9 +270,9 @@ export abstract class Connection { /** * Define a materialized view named `name` over the table `source`. * - * Local creation and refresh require a source build with the + * LanceDB Embedded creation and refresh require a source build with the * `experimental-functions` Cargo feature, disabled in published packages. - * Remote Cloud/Enterprise operations do not require this feature. + * LanceDB Distributed operations do not require this feature. * * The view is populated before creation returns. Set `withNoData` to create * only its definition and empty backing table. The view is a normal table: @@ -559,7 +559,7 @@ export abstract class Connection { /** * Rename a table. * - * Currently only supported by LanceDB Cloud. Local OSS connections and + * Currently only supported in LanceDB Distributed. LanceDB Embedded connections and * namespace-backed connections (via {@link connectNamespace}) reject with * a "not supported" error. * diff --git a/nodejs/lancedb/header.ts b/nodejs/lancedb/header.ts index bf86c5332..4926ccec9 100644 --- a/nodejs/lancedb/header.ts +++ b/nodejs/lancedb/header.ts @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright The LanceDB Authors /** - * Header providers for LanceDB remote connections. + * Header providers for LanceDB Enterprise connections. * * This module provides a flexible header management framework for LanceDB remote * connections, allowing users to implement custom header strategies for diff --git a/nodejs/lancedb/index.ts b/nodejs/lancedb/index.ts index b9c334a08..52f94f554 100644 --- a/nodejs/lancedb/index.ts +++ b/nodejs/lancedb/index.ts @@ -288,11 +288,11 @@ export async function tokenize( * * Accepted formats: * - * - `/path/to/database` - local database + * - `/path/to/database` - database on the local file system * - `s3://bucket/path/to/database` or `gs://bucket/path/to/database` - database on cloud storage - * - `db://host:port` - remote database (LanceDB cloud) + * - `db://host:port` - LanceDB Enterprise or LanceDB Cloud (legacy) database * @param {string} uri - The uri of the database. If the database uri starts - * with `db://` then it connects to a remote database. + * with `db://` then it connects to LanceDB Enterprise or LanceDB Cloud (legacy). * @see {@link ConnectionOptions} for more details on the URI format. * @param options - The options to use when connecting to the database * @example @@ -333,9 +333,9 @@ export async function connect( * * Accepted formats: * - * - `/path/to/database` - local database + * - `/path/to/database` - database on the local file system * - `s3://bucket/path/to/database` or `gs://bucket/path/to/database` - database on cloud storage - * - `db://host:port` - remote database (LanceDB cloud) + * - `db://host:port` - LanceDB Enterprise or LanceDB Cloud (legacy) database * @param options - The options to use when connecting to the database * @see {@link ConnectionOptions} for more details on the URI format. * @example @@ -533,7 +533,7 @@ function restConfigToProperties( * Connect to a LanceDB database through a namespace. * * Unlike {@link connect}, which routes by URI scheme (local path vs. - * `db://` cloud), `connectNamespace` always returns a namespace-backed + * `db://`), `connectNamespace` always returns a namespace-backed * connection. The `implName` selects the namespace implementation: * * - `"dir"` — directory namespace, configured with {@link DirNamespaceConfig}. diff --git a/nodejs/lancedb/table.ts b/nodejs/lancedb/table.ts index 71408803d..8e7cd02a1 100644 --- a/nodejs/lancedb/table.ts +++ b/nodejs/lancedb/table.ts @@ -128,8 +128,8 @@ export interface AddDataOptions { /** * Whether blob URIs outside registered external bases may be written. * - * Defaults to `false`. This option is supported only for local/native - * tables; remote tables return an error when it is enabled. An enabled write + * Defaults to `false`. This option is supported only in LanceDB Embedded; + * LanceDB Distributed returns an error when it is enabled. An enabled write * stores the absolute URI reference without registering a base or copying * the external object into the database. The object must remain accessible * when the blob is read later. @@ -438,7 +438,7 @@ export abstract class Table { * Large columns (e.g. high-dimensional vectors or binary data) may not be * practical to prewarm. * - * This feature is currently only supported on remote tables. + * This feature is currently only supported in LanceDB Distributed. */ abstract prewarmData(columns?: string[]): Promise; @@ -594,9 +594,9 @@ export abstract class Table { /** * Add new columns with defined values. * - * Local computed-column declaration and refresh require a source build with - * the `experimental-functions` Cargo feature. Published packages disable it; - * remote Cloud/Enterprise operations remain available. + * LanceDB Embedded computed-column declaration and refresh require a source + * build with the `experimental-functions` Cargo feature. Published packages + * disable it; LanceDB Distributed operations remain available. * * The `{ computed }` form stores the expression rather than evaluating it * now: the column is committed with no values, and rows get them from @@ -608,7 +608,7 @@ export abstract class Table { * declaration reads a column, that column cannot be renamed, retyped or * dropped. * - * On LanceDB Cloud and Enterprise the expression is planned by the + * In LanceDB Distributed the expression is planned by the * server, and the refresh runs as a server job -- see * {@link Table#refreshColumnAsync}. * @param {AddColumnsSql[] | Field | Field[] | Schema} newColumnTransforms Either: @@ -640,8 +640,8 @@ export abstract class Table { * * Rows appended since the last refresh are filled by the next one, and * rows whose inputs changed since they were computed are recomputed; - * everything else is left as it is. Local tables only: a remote refresh - * runs as a server job, through {@link Table#refreshColumnAsync}. + * everything else is left as it is. LanceDB Embedded only: in LanceDB + * Distributed a refresh runs as a server job, through {@link Table#refreshColumnAsync}. * @param {string} column The name of the computed column to fill. * @returns {Promise} A promise that resolves to the * number of rows filled and the new version number of the table. @@ -651,14 +651,15 @@ export abstract class Table { /** * Like {@link Table#refreshColumn}, but returns a handle to the refresh * job instead of blocking until it completes. - * Local refresh requires a source build with `experimental-functions`. - * Remote Cloud/Enterprise jobs do not require this feature. + * LanceDB Embedded refresh requires a source build with + * `experimental-functions`. LanceDB Distributed jobs do not require this + * feature. * * The job may already be complete when returned; callers must not assume * the column is filled until {@link Job.wait} resolves. Invalid input -- * an unknown column, or one that is not computed -- rejects here rather - * than failing the job. On local tables the job runs in-process; on - * LanceDB Cloud and Enterprise it is the server's backfill job. + * than failing the job. In LanceDB Embedded the job runs in-process; in + * LanceDB Distributed it is the server's backfill job. * @param {string} column The name of the computed column to fill. * @example * ```ts @@ -675,7 +676,7 @@ export abstract class Table { * A refresh running under a skip policy records each row it skipped with * the input that failed and the error. This lists those records, newest * job first, plus a summary for any fragment whose per-row detail was - * capped. LanceDB Cloud and Enterprise only; reading errors needs read + * capped. LanceDB Distributed only; reading errors needs read * access to the table, since a message carries the value that failed. * @param {FunctionErrorsOptions} options Optional filters: `jobId`, * `column`, and `limit` (server default 10000, cap 100000). @@ -994,7 +995,7 @@ export abstract class Table { * Specify exactly one of `column` or `indexName`. * * Model-backed tokenizers such as `jieba/*` and `lindera/*` are rebuilt in - * the client process from index metadata. For remote tables, this means the + * the client process from index metadata. In LanceDB Distributed, this means the * same tokenizer model files must also exist locally (under * `LANCE_LANGUAGE_MODEL_HOME`) and must match the files the server uses. A * mismatch cannot be detected: the returned tokens may differ from what the diff --git a/nodejs/src/lib.rs b/nodejs/src/lib.rs index cb40a51de..368a3530c 100644 --- a/nodejs/src/lib.rs +++ b/nodejs/src/lib.rs @@ -54,34 +54,34 @@ pub struct ConnectionOptions { /// often each read pays the cost of checking for updates against object /// storage, raising per-read latency and cost. pub read_consistency_interval: Option, - /// (For LanceDB OSS only): configuration for object storage. + /// (For LanceDB Embedded only): configuration for object storage. /// /// The available options are described at https://docs.lancedb.com/storage/ pub storage_options: Option>, - /// (For LanceDB OSS only): use directory namespace manifests as the source + /// (For LanceDB Embedded only): use directory namespace manifests as the source /// of truth for table metadata. Existing directory-listed root tables are /// migrated into the manifest on access. pub manifest_enabled: Option, - /// (For LanceDB OSS only): extra properties for the backing namespace + /// (For LanceDB Embedded only): extra properties for the backing namespace /// client used by manifest-enabled native connections. pub namespace_client_properties: Option>, - /// (For LanceDB OSS only): the session to use for this connection. Holds + /// (For LanceDB Embedded only): the session to use for this connection. Holds /// shared caches and other session-specific state. pub session: Option, - /// (For LanceDB cloud only): configuration for the remote HTTP client. + /// (For LanceDB Enterprise or LanceDB Cloud only): configuration for the HTTP client. pub client_config: Option, - /// (For LanceDB cloud only): the API key to use with LanceDB Cloud. + /// (For LanceDB Enterprise or LanceDB Cloud only): the API key to use. /// /// Can also be set via the environment variable `LANCEDB_API_KEY`. pub api_key: Option, - /// (For LanceDB cloud only): the region to use for LanceDB cloud. + /// (For LanceDB Cloud only): the region to use for LanceDB Cloud (legacy). /// Defaults to 'us-east-1'. pub region: Option, - /// (For LanceDB cloud only): the host to use for LanceDB cloud. Used - /// for testing purposes. + /// (For LanceDB Enterprise only): the host of the LanceDB Enterprise + /// deployment to connect to. pub host_override: Option, - /// (For LanceDB cloud only): OAuth configuration for IdP-based + /// (For LanceDB Enterprise only): OAuth configuration for IdP-based /// authentication (e.g., Azure Entra ID). When set, token acquisition /// and refresh are handled entirely in Rust. TypeScript users should pass /// the public `OAuthConfig` type exported from `@lancedb/lancedb`. diff --git a/nodejs/src/remote.rs b/nodejs/src/remote.rs index 2a6985477..df882334b 100644 --- a/nodejs/src/remote.rs +++ b/nodejs/src/remote.rs @@ -108,7 +108,7 @@ pub struct ClientConfig { pub tls_config: Option, /// User identifier for tracking purposes. /// - /// This is sent as the `x-lancedb-user-id` header in requests to LanceDB Cloud/Enterprise. + /// This is sent as the `x-lancedb-user-id` header in requests to LanceDB Enterprise. /// It can be set directly, or via the `LANCEDB_USER_ID` environment variable. /// Alternatively, set `LANCEDB_USER_ID_ENV_KEY` to specify another environment /// variable that contains the user ID value. diff --git a/nodejs/src/table.rs b/nodejs/src/table.rs index 2f7d91a2a..ec16ea5b5 100644 --- a/nodejs/src/table.rs +++ b/nodejs/src/table.rs @@ -831,7 +831,7 @@ impl Table { self.inner_ref()? .as_native() .ok_or_else(|| lancedb::Error::NotSupported { - message: "uses_v2_manifest_paths is not supported for remote tables.".into(), + message: "uses_v2_manifest_paths is not supported in LanceDB Distributed.".into(), }) .default_error()? .uses_v2_manifest_paths() @@ -844,7 +844,8 @@ impl Table { self.inner_ref()? .as_native() .ok_or_else(|| lancedb::Error::NotSupported { - message: "migrate_manifest_paths_v2 is not supported for remote tables.".into(), + message: "migrate_manifest_paths_v2 is not supported in LanceDB Distributed." + .into(), }) .default_error()? .migrate_manifest_paths_v2() @@ -867,40 +868,40 @@ pub struct IndexConfig { pub columns: Vec, /// The UUID of the first segment of the index. /// - /// `undefined` for remote tables, which do not yet surface this. + /// `undefined` in LanceDB Distributed, which does not yet surface this. pub index_uuid: Option, /// The protobuf type URL, a precise type identifier for the index. /// - /// `undefined` for remote tables. + /// `undefined` in LanceDB Distributed. pub type_url: Option, /// When the index was created. /// - /// `undefined` for remote tables or indices created before timestamps were tracked. + /// `undefined` in LanceDB Distributed or indices created before timestamps were tracked. pub created_at: Option>, /// The number of rows indexed, across all segments. /// - /// May be `undefined` for remote tables if the server does not report it. + /// May be `undefined` in LanceDB Distributed if the server does not report it. pub num_indexed_rows: Option, /// The number of rows not yet covered by this index. /// - /// May be `undefined` for remote tables if the server does not report it. + /// May be `undefined` in LanceDB Distributed if the server does not report it. pub num_unindexed_rows: Option, /// The total size in bytes of all index files across all segments. /// - /// `undefined` for remote tables or indices without size tracking. + /// `undefined` in LanceDB Distributed or indices without size tracking. pub size_bytes: Option, /// The number of segments that make up the index. /// - /// `undefined` for remote tables. + /// `undefined` in LanceDB Distributed. pub num_segments: Option, /// The on-disk index format version. /// - /// `undefined` for remote tables. + /// `undefined` in LanceDB Distributed. pub index_version: Option, /// Index-type-specific details parsed as a JavaScript object. /// - /// Falls back to a raw string if JSON parsing fails. `undefined` for - /// remote tables or when details are unavailable. + /// Falls back to a raw string if JSON parsing fails. `undefined` in + /// LanceDB Distributed or when details are unavailable. pub index_details: Option, } @@ -1616,11 +1617,11 @@ impl From for FunctionErrors { #[napi(object)] pub struct RefreshMaterializedViewResult { - /// How the view was brought up to date: "rebuild", or absent for remote SQL refreshes. + /// How the view was brought up to date: "rebuild", or absent for LanceDB Distributed SQL refreshes. pub mode: Option, - /// Rows written by this refresh, or absent for remote SQL refreshes. + /// Rows written by this refresh, or absent for LanceDB Distributed SQL refreshes. pub rows_written: Option, - /// Source version refreshed to, or absent for remote SQL refreshes. + /// Source version refreshed to, or absent for LanceDB Distributed SQL refreshes. pub source_version: Option, pub version: i64, } diff --git a/python/python/lancedb/__init__.py b/python/python/lancedb/__init__.py index fa1c105e9..74f37fc2e 100644 --- a/python/python/lancedb/__init__.py +++ b/python/python/lancedb/__init__.py @@ -137,18 +137,18 @@ def connect( The uri of the database. When ``namespace_client_impl`` is provided you may omit ``uri`` and connect through a namespace client instead. api_key: str, optional - If presented, connect to LanceDB cloud. + If presented, connect to LanceDB Enterprise or LanceDB Cloud (legacy). Otherwise, connect to a database on file system or cloud storage. Can be set via environment variable `LANCEDB_API_KEY`. OAuth configuration is currently supported only by ``connect_async``; - synchronous LanceDB Cloud connections require an API key. + synchronous ``db://`` connections require an API key. region: str, default "us-east-1" - The region to use for LanceDB Cloud. + The region to use for LanceDB Cloud (legacy). host_override: str, optional - The override url for LanceDB Cloud. + The URL of the LanceDB Enterprise deployment to connect to. sql_host_override: str, optional - The remote SQL service endpoint override. The client connects lazily when SQL - is first executed and retains that connection. + The LanceDB Enterprise SQL service endpoint override. The client + connects lazily when SQL is first executed and retains that connection. read_consistency_interval: timedelta, default None The interval at which to check for updates to the table from other processes. If None, then consistency is not checked. For performance @@ -164,18 +164,19 @@ def connect( often each read pays the cost of checking for updates against object storage, raising per-read latency and cost. client_config: ClientConfig or dict, optional - Configuration options for the LanceDB Cloud HTTP client. If a dict, then + Configuration options for the HTTP client used by ``db://`` connections. + If a dict, then the keys are the attributes of the ClientConfig class. If None, then the default configuration is used. storage_options: dict, optional Additional options for the storage backend. See available options at manifest_enabled : bool, default False - When true for local/native connections, use directory namespace + When true for LanceDB Embedded connections, use directory namespace manifests as the source of truth for table metadata. Existing directory-listed root tables are migrated into the manifest on access. session: Session, optional - (For LanceDB OSS only) + (For LanceDB Embedded only) A session to use for this connection. Sessions allow you to configure cache sizes for index and metadata caches, which can significantly impact memory use and performance. They can also be re-used across @@ -231,7 +232,7 @@ def connect( In-memory databases are not persisted. Tables are dropped when the last connection or table handle referencing them is closed. - Connect to LanceDB cloud: + Connect to LanceDB Enterprise or LanceDB Cloud (legacy): >>> db = lancedb.connect("db://my_database", api_key="ldb_...", ... client_config={"retry_config": {"retries": 5}}) @@ -289,15 +290,17 @@ def connect( if unknown_kwargs: raise ValueError(f"Unknown keyword arguments: {unknown_kwargs}") if session is not None: - raise NotImplementedError("session is not supported for remote connections") + raise NotImplementedError( + "session is not supported for LanceDB Distributed connections" + ) if manifest_enabled: raise NotImplementedError( - "manifest_enabled is not supported for remote connections" + "manifest_enabled is not supported for LanceDB Distributed connections" ) if api_key is None: api_key = os.environ.get("LANCEDB_API_KEY") if api_key is None: - raise ValueError(f"api_key is required to connect to LanceDB cloud: {uri}") + raise ValueError(f"api_key is required to connect to {uri}") if isinstance(request_thread_pool, int): request_thread_pool = ThreadPoolExecutor(request_thread_pool) return RemoteDBConnection( @@ -480,16 +483,16 @@ async def connect_async( uri: str or Path The uri of the database. api_key: str, optional - If present, connect to LanceDB cloud. + If present, connect to LanceDB Enterprise or LanceDB Cloud (legacy). Otherwise, connect to a database on file system or cloud storage. Can be set via environment variable `LANCEDB_API_KEY`. region: str, default "us-east-1" - The region to use for LanceDB Cloud. + The region to use for LanceDB Cloud (legacy). host_override: str, optional - The override url for LanceDB Cloud. + The URL of the LanceDB Enterprise deployment to connect to. sql_host_override: str, optional - The remote SQL service endpoint override. The client connects lazily when SQL - is first executed and retains that connection. + The LanceDB Enterprise SQL service endpoint override. The client + connects lazily when SQL is first executed and retains that connection. read_consistency_interval: timedelta, default None The interval at which to check for updates to the table from other processes. If None, then consistency is not checked. For performance @@ -505,27 +508,28 @@ async def connect_async( often each read pays the cost of checking for updates against object storage, raising per-read latency and cost. client_config: ClientConfig or dict, optional - Configuration options for the LanceDB Cloud HTTP client. If a dict, then + Configuration options for the HTTP client used by ``db://`` connections. + If a dict, then the keys are the attributes of the ClientConfig class. If None, then the default configuration is used. storage_options: dict, optional Additional options for the storage backend. See available options at session: Session, optional - (For LanceDB OSS only) + (For LanceDB Embedded only) A session to use for this connection. Sessions allow you to configure cache sizes for index and metadata caches, which can significantly impact memory use and performance. They can also be re-used across multiple connections to share the same cache state. manifest_enabled : bool, default False - When true for local/native connections, use directory namespace + When true for LanceDB Embedded connections, use directory namespace manifests as the source of truth for table metadata. Existing directory-listed root tables are migrated into the manifest on access. namespace_client_properties : dict, optional Additional directory namespace client properties to use with ``manifest_enabled=True``. oauth_config : OAuthConfig, optional - OAuth configuration for LanceDB Cloud/Enterprise. This is supported by + OAuth configuration for LanceDB Enterprise. This is supported by ``connect_async`` only; synchronous ``connect`` uses API key authentication for ``db://`` URIs. @@ -551,7 +555,7 @@ async def connect_async( ... ) ... # For tests and temporary data, use an in-memory database ... db = await lancedb.connect_async("memory://") - ... # Connect to LanceDB cloud + ... # Connect to LanceDB Enterprise or LanceDB Cloud (legacy) ... db = await lancedb.connect_async("db://my_database", api_key="ldb_...", ... client_config={ ... "retry_config": {"retries": 5}}) diff --git a/python/python/lancedb/db.py b/python/python/lancedb/db.py index fe38f17f0..09e032607 100644 --- a/python/python/lancedb/db.py +++ b/python/python/lancedb/db.py @@ -626,9 +626,9 @@ class DBConnection(EnforceOverrides): ) -> MaterializedView: """Define a materialized view named ``name`` over the table ``source``. - Local creation and refresh require a source build with the + LanceDB Embedded creation and refresh require a source build with the ``experimental-functions`` Cargo feature. Published packages leave it - disabled; remote Cloud/Enterprise operations remain available. + disabled; LanceDB Distributed operations remain available. The view is populated before creation returns. Pass ``with_no_data=True`` to create only its definition and empty backing @@ -652,11 +652,11 @@ class DBConnection(EnforceOverrides): with_no_data: bool, default False Skip the initial refresh and leave the backing table empty. auto_refresh_enabled: bool, optional - Enable or disable automatic refresh on Cloud and Enterprise. + Enable or disable automatic refresh in LanceDB Distributed. When omitted, the server determines whether automatic refresh is enabled. - Embedded databases do not support automatic refresh. + LanceDB Embedded does not support automatic refresh. auto_refresh_interval_seconds: float, optional - Positive, finite refresh interval in seconds on Cloud and Enterprise. + Positive, finite refresh interval in seconds in LanceDB Distributed. When omitted, the server determines when to refresh. Returns @@ -681,7 +681,8 @@ class DBConnection(EnforceOverrides): ) -> Job[None]: """Submit materialized-view creation and return its job. - The job may already be complete for a local database. Remote creation + The job may already be complete in LanceDB Embedded. In LanceDB + Distributed, creation submits CREATE MATERIALIZED VIEW through the SQL server. Its job has ``job_type == "query"`` and ``id`` identifies the connection-scoped query. Registry event history is unavailable. @@ -721,7 +722,8 @@ class DBConnection(EnforceOverrides): ) -> None: """Drop a materialized view. - Remote drops wait for the SQL command to remove the catalog binding. + In LanceDB Distributed, drops wait for the SQL command to remove the + catalog binding. Physical cleanup continues in the background. """ raise NotImplementedError( @@ -733,7 +735,8 @@ class DBConnection(EnforceOverrides): ) -> Job[None]: """Start dropping a materialized view and return its job. - The job may already be complete for a local database. Remote jobs have + The job may already be complete in LanceDB Embedded. In LanceDB + Distributed, jobs have type ``query`` and use the SQL query ID as ``id``. Waiting confirms catalog removal; physical cleanup continues in the background. """ @@ -809,7 +812,7 @@ class DBConnection(EnforceOverrides): """ Drop all tables from the database - Remote connections do not currently support this operation. Use + LanceDB Distributed does not currently support this operation. Use ``list_tables()`` and ``drop_table()`` to drop tables individually. Parameters @@ -854,7 +857,7 @@ class DBConnection(EnforceOverrides): For namespace connections, this returns the backing namespace client. - For enterprise (remote) connections, this returns a RestNamespace + For LanceDB Enterprise connections, this returns a RestNamespace with the same URI and authentication headers. Returns @@ -890,7 +893,7 @@ class DBConnection(EnforceOverrides): The server builds the OCI image and registers the completed artifact. This is the blocking counterpart of :meth:`create_function_async`. - Local connections raise ``NotImplementedError``. + LanceDB Embedded connections raise ``NotImplementedError``. Parameters ---------- @@ -934,7 +937,7 @@ class DBConnection(EnforceOverrides): The server-side job builds the OCI image, then registers the completed artifact. Waiting on the job returns the immutable Function version. - Local connections raise ``NotImplementedError``. + LanceDB Embedded connections raise ``NotImplementedError``. """ raise NotImplementedError( "Function catalog operations are not supported for this connection type" @@ -962,7 +965,7 @@ class DBConnection(EnforceOverrides): """List every published immutable Function version in a namespace. Functions in child namespaces are not included. Results are ordered by - Function name then version. Local connections raise + Function name then version. LanceDB Embedded connections raise ``NotImplementedError``. Examples @@ -1012,7 +1015,7 @@ class DBConnection(EnforceOverrides): The name is unbound before this returns; the object's content may still be being deleted. Call :meth:`Job.wait` to wait for that to finish. When the server deletes inline, or when nothing was bound, the returned job - is already finished and has no id. Local connections raise + is already finished and has no id. LanceDB Embedded connections raise NotImplementedError. """ raise NotImplementedError( @@ -1041,7 +1044,7 @@ class DBConnection(EnforceOverrides): Fails if it does not exist. Every Function bound to the Secret uses the new value from its next job, and no new Function version is created -- which is how a rotation reaches columns pinned to a version registered - before it. Local connections raise ``NotImplementedError``. + before it. LanceDB Embedded connections raise ``NotImplementedError``. """ raise NotImplementedError( "Secret operations are not supported for this connection type" @@ -1057,7 +1060,8 @@ class DBConnection(EnforceOverrides): """The names of every Secret in this database. Names only. No method returns a stored credential, by construction - rather than by policy. Local connections raise ``NotImplementedError``. + rather than by policy. LanceDB Embedded connections raise + ``NotImplementedError``. Returns a lazy iterator. ``page_limit`` limits each request, not the total; ``page_token`` resumes from a saved token. Requests and errors occur during @@ -1075,7 +1079,7 @@ class DBConnection(EnforceOverrides): Functions bound to it fail at their next job, naming the Secret; that is the revocation path. The name becomes free to reuse, and a new Secret under it is picked up by everything still bound to that name. - Local connections raise ``NotImplementedError``. + LanceDB Embedded connections raise ``NotImplementedError``. """ raise NotImplementedError( "Secret operations are not supported for this connection type" @@ -1103,7 +1107,7 @@ class DBConnection(EnforceOverrides): its readers see its sources as they are at read time. There is no replace: a name already taken is an error, and changing a - view is a drop followed by a create. Local connections raise + view is a drop followed by a create. LanceDB Embedded connections raise ``NotImplementedError``. >>> import lancedb @@ -1125,7 +1129,7 @@ class DBConnection(EnforceOverrides): schema that query resolved to. The schema is the one recorded at creation; a source altered since then - shows up when the view is read. Local connections raise + shows up when the view is read. LanceDB Embedded connections raise ``NotImplementedError``. """ raise NotImplementedError( @@ -1139,7 +1143,7 @@ class DBConnection(EnforceOverrides): The tables it reads are untouched: a view holds no rows of its own. Use :meth:`drop_view_async` to get the cleanup job instead of waiting on it. - Local connections raise ``NotImplementedError``. + LanceDB Embedded connections raise ``NotImplementedError``. """ raise NotImplementedError( "View operations are not supported for this connection type" @@ -1286,7 +1290,7 @@ class DBConnection(EnforceOverrides): cancellation. Open ``reader()`` directly: a streamed query needs its reader to make progress and reports ``running`` until the stream ends. - Local connections do not support SQL. + LanceDB Embedded connections do not support SQL. """ raise NotImplementedError("SQL is not supported for this connection type") @@ -1764,9 +1768,9 @@ class LanceDBConnection(DBConnection): ) -> MaterializedView: """Define a materialized view named ``name`` over the table ``source``. - Local creation and refresh require a source build with the + LanceDB Embedded creation and refresh require a source build with the ``experimental-functions`` Cargo feature. Published packages leave it - disabled; remote Cloud/Enterprise operations remain available. + disabled; LanceDB Distributed operations remain available. See [DBConnection.create_materialized_view][lancedb.DBConnection.create_materialized_view]. @@ -2261,12 +2265,12 @@ class AsyncConnection(object): To obtain a connection you can use the [connect_async][lancedb.connect_async] function. - This could be a native connection (using lance) or a remote connection (e.g. for - connecting to LanceDb Cloud) + This could be a LanceDB Embedded connection (using lance) or a LanceDB Distributed + connection (e.g. for connecting to LanceDB Enterprise) - Local connections do not currently hold any open resources but they may do so in the - future (for example, for shared cache or connections to catalog services) Remote - connections represent an open connection to the remote server. The + Embedded connections do not currently hold any open resources but they may do so in + the future (for example, for shared cache or connections to catalog services) + Distributed connections represent an open connection to the server. The [close][lancedb.db.AsyncConnection.close] method can be used to release any underlying resources eagerly. The connection can also be used as a context manager. @@ -2854,9 +2858,9 @@ class AsyncConnection(object): ) -> AsyncMaterializedView: """Define a materialized view named ``name`` over the table ``source``. - Local creation and refresh require a source build with the + LanceDB Embedded creation and refresh require a source build with the ``experimental-functions`` Cargo feature. Published packages leave it - disabled; remote Cloud/Enterprise operations remain available. + disabled; LanceDB Distributed operations remain available. See [DBConnection.create_materialized_view][lancedb.DBConnection.create_materialized_view]. """ @@ -2890,8 +2894,8 @@ class AsyncConnection(object): ) -> AsyncJob[None]: """Submit materialized-view creation and return its job. - Wait for the returned job before opening or querying the view. Remote - creation uses SQL; ``job_type`` is ``"query"`` and ``id`` + Wait for the returned job before opening or querying the view. In LanceDB + Distributed, creation uses SQL; ``job_type`` is ``"query"`` and ``id`` identifies that query on this connection. """ source, native_options = await self._materialized_view_source( @@ -2945,7 +2949,8 @@ class AsyncConnection(object): ) -> None: """Drop a materialized view. - Remote drops wait for the SQL command to remove the catalog binding. + In LanceDB Distributed, drops wait for the SQL command to remove the + catalog binding. Physical cleanup continues in the background. """ if namespace_path is None: @@ -2960,7 +2965,7 @@ class AsyncConnection(object): ) -> AsyncJob[None]: """Start dropping a materialized view and return its job. - For remote connections, the job has type ``query`` and its ID identifies + In LanceDB Distributed, the job has type ``query`` and its ID identifies the SQL query. Await :meth:`AsyncJob.wait` for catalog removal; physical cleanup continues in the background. """ @@ -3135,7 +3140,7 @@ class AsyncConnection(object): [EnvVarSecret][lancedb.secrets.EnvVarSecret], each naming a Secret and the environment variable its value arrives in. ``namespace_path`` is the namespace the Function is registered in; None or an empty list is - the root. Local connections raise ``NotImplementedError``. + the root. LanceDB Embedded connections raise ``NotImplementedError``. """ if not isinstance(definition, UdfDefinition): raise TypeError("create_function_async requires a @udf definition") @@ -3167,7 +3172,7 @@ class AsyncConnection(object): """List every published immutable Function version in a namespace. Functions in child namespaces are not included. Results are ordered by - Function name then version. Local connections raise + Function name then version. LanceDB Embedded connections raise ``NotImplementedError``. Returns a lazy iterator. ``page_limit`` limits each request, not the total; @@ -3422,7 +3427,7 @@ class AsyncConnection(object): references. The namespace defaults to ``["public"]``. ``parameters`` binds values to ``$1`` / ``$name`` placeholders; see [DBConnection.execute_query_async][lancedb.db.DBConnection.execute_query_async]. - Local connections raise ``NotImplementedError``. + LanceDB Embedded connections raise ``NotImplementedError``. """ return AsyncSqlQuery( await self._inner.execute_query_async( @@ -3450,7 +3455,7 @@ class AsyncConnection(object): For namespace connections, this returns the backing namespace client. - For enterprise (remote) connections, this returns a RestNamespace + For LanceDB Enterprise connections, this returns a RestNamespace with the same URI and authentication headers. Returns diff --git a/python/python/lancedb/functions.py b/python/python/lancedb/functions.py index 42c4b27e1..38b45d8b6 100644 --- a/python/python/lancedb/functions.py +++ b/python/python/lancedb/functions.py @@ -4,7 +4,7 @@ """Canonical Function values exchanged with LanceDB Enterprise services. These immutable models contain client/wire state only. Catalog persistence, -environment bake, secret resolution, and execution are owned by Sophon. +environment bake, secret resolution, and execution are owned by LanceDB Enterprise. ``RefreshColumnResult`` is also the backend-neutral result of a local expression-backed refresh job. """ @@ -275,7 +275,7 @@ class FunctionSignature(_RemoteValue): class PythonEnvironmentSpec(_RemoteValue): - """One Sophon-managed Python environment source.""" + """One LanceDB Enterprise-managed Python environment source.""" kind: str packages: tuple[str, ...] = () @@ -653,8 +653,8 @@ class FunctionBinding(_RemoteValue): class RefreshColumnResult(_RemoteValue): """Terminal result of an expression-backed or Function-backed refresh Job. - Local jobs produce this value in process. LanceDB Cloud and Enterprise - decode the same value from the durable server-job terminal payload. + LanceDB Embedded jobs produce this value in process. LanceDB Distributed + decodes the same value from the durable server-job terminal payload. """ rows_assigned: _UInt64 diff --git a/python/python/lancedb/index.py b/python/python/lancedb/index.py index 80179f4a7..8c192a2f0 100644 --- a/python/python/lancedb/index.py +++ b/python/python/lancedb/index.py @@ -145,9 +145,9 @@ class FTS: Lance tokenizer can panic on malformed triples; see https://github.com/lance-format/lance/issues/8812. - Remote tables use the same ``FTS()`` configuration and require a server - that supports JSON FTS. Wait for ``table.wait_for_index(["doc_idx"])`` - before searching a newly created remote index with its default name. + LanceDB Distributed uses the same ``FTS()`` configuration and requires a + server that supports JSON FTS. Wait for ``table.wait_for_index(["doc_idx"])`` + before searching a newly created index there with its default name. Examples -------- @@ -210,12 +210,12 @@ class FTS: memory_limit : int, optional The total memory limit in MiB for the local FTS build stage. The limit is divided evenly among indexing workers. This build-only setting is - not persisted with the index and does not apply to remote tables. + not persisted with the index and does not apply to LanceDB Distributed. num_workers : int, optional The number of workers for a local FTS build. By default Lance uses roughly half of the available CPU cores. The effective value is limited by the available compute capacity. This build-only setting is - not persisted with the index and does not apply to remote tables. + not persisted with the index and does not apply to LanceDB Distributed. document_granularity : DocumentGranularity, default ROW ``ROW`` treats the selected text in one table row as one document. ``LIST_ELEMENT`` treats each element of the deepest list on the indexed diff --git a/python/python/lancedb/materialized_view.py b/python/python/lancedb/materialized_view.py index 7fc110dcc..7b0b3b80a 100644 --- a/python/python/lancedb/materialized_view.py +++ b/python/python/lancedb/materialized_view.py @@ -4,9 +4,10 @@ """Materialized views: tables defined by a query over a source table and maintained by refresh. See ``DBConnection.create_materialized_view``. -Local creation and refresh require the ``experimental-functions`` Cargo feature -in a source build. Published packages disable it. Opening, reading, listing and -dropping existing views and remote Cloud/Enterprise operations remain available. +LanceDB Embedded creation and refresh require the ``experimental-functions`` +Cargo feature in a source build. Published packages disable it. Opening, reading, +listing and dropping existing views and LanceDB Distributed operations remain +available. """ from __future__ import annotations @@ -188,13 +189,14 @@ class AsyncMaterializedView: ) -> "RefreshMaterializedViewResult": """Recompute the view from its source. - ``full=True`` forces a remote rebuild; otherwise the server chooses - the refresh mode. Local views always rebuild, and ``source_version`` - selects a source version instead of the latest. Remote SQL refreshes - do not support source-version pinning. + In LanceDB Distributed, ``full=True`` forces a rebuild; otherwise the + server chooses the refresh mode. LanceDB Embedded views always rebuild, + and ``source_version`` selects a source version instead of the latest. + LanceDB Distributed SQL refreshes do not support source-version pinning. - Remote results leave ``mode``, ``rows_written``, and ``source_version`` - as ``None`` because the SQL job adapter does not expose these metrics. + LanceDB Distributed results leave ``mode``, ``rows_written``, and + ``source_version`` as ``None`` because the SQL job adapter does not expose + these metrics. """ return await self._table._inner.refresh_materialized_view( source_version=source_version, full=full @@ -205,8 +207,9 @@ class AsyncMaterializedView: ) -> "AsyncJob[RefreshMaterializedViewResult]": """Submit a refresh and return its job without waiting. - The job may already be complete for a local view. Remote refreshes are - submitted through the SQL service. Options and result metrics follow + The job may already be complete in LanceDB Embedded. In LanceDB + Distributed, refreshes are submitted through the SQL service. Options and + result metrics follow [refresh][lancedb.materialized_view.AsyncMaterializedView.refresh]. """ from ._lancedb import RefreshMaterializedViewResult diff --git a/python/python/lancedb/namespace.py b/python/python/lancedb/namespace.py index 992926769..3356b363c 100644 --- a/python/python/lancedb/namespace.py +++ b/python/python/lancedb/namespace.py @@ -1675,7 +1675,7 @@ class AsyncLanceNamespaceDBConnection: ) -> AsyncSqlQuery: """Start executing SQL when supported by the underlying connection. - Namespace-backed local connections do not support SQL. + Namespace-backed LanceDB Embedded connections do not support SQL. """ return await self._inner.execute_query_async( query, diff --git a/python/python/lancedb/permutation.py b/python/python/lancedb/permutation.py index e95db27f6..0788cb5cb 100644 --- a/python/python/lancedb/permutation.py +++ b/python/python/lancedb/permutation.py @@ -548,7 +548,7 @@ class Permutation: picklable classes implementing ``__call__``. Lambdas and closures over local variables don't pickle with the default protocol. - A factory is optional for normal local and remote LanceDB connections: + A factory is optional for normal LanceDB Embedded and Distributed connections: if not set, ``__getstate__`` captures the table's own picklable reopen state. Use a factory when that default state is not enough, for example when credentials should be loaded from the worker environment instead @@ -587,7 +587,7 @@ class Permutation: {"root": "/data/lance_db"}, ) - LanceDB Cloud, reading credentials from env vars at worker startup + LanceDB Enterprise, reading credentials from env vars at worker startup so secrets aren't pickled into the dataset:: import os, lancedb diff --git a/python/python/lancedb/query.py b/python/python/lancedb/query.py index 03560ec31..625a17524 100644 --- a/python/python/lancedb/query.py +++ b/python/python/lancedb/query.py @@ -125,7 +125,7 @@ def _supports_local_blob_fetch( def _blob_bytes_without_snapshot_error() -> NotImplementedError: return NotImplementedError( "blob_mode='bytes' cannot safely materialize blob columns without a " - "stable table snapshot. Remote tables and namespace QueryTable pushdown " + "stable table snapshot. LanceDB Distributed and namespace QueryTable pushdown " "run the query on a server, so the blob fetch could read another table " "version. Use blob_mode='descriptions'." ) @@ -1147,7 +1147,8 @@ class LanceQueryBuilder(ABC): mode and for legacy blob columns. Other local blob v2 queries return descriptors in ``"lazy"`` and ``"descriptions"`` modes, or payloads in ``"bytes"`` mode, through :meth:`to_arrow`. - Remote blob queries support only ``"descriptions"`` until a stable + LanceDB Distributed blob queries support only ``"descriptions"`` until a + stable table snapshot can bind the query and blob fetches. **kwargs Forwarded to pyarrow.Table.to_pandas after query execution and @@ -3483,7 +3484,7 @@ class AsyncQueryBase(object): ``fetch_blobs`` reads. ``"descriptions"`` returns them without it. ``"bytes"`` returns payload bytes and raises for legacy blob columns and blobs inside lists. - Remote tables and namespace query pushdown refuse ``"bytes"``. + LanceDB Distributed and namespace query pushdown refuse ``"bytes"``. """ blob_sources = await self._validated_blob_sources(blob_mode) batch_iter = await self.to_batches(timeout=timeout) @@ -3562,7 +3563,8 @@ class AsyncQueryBase(object): mode and for legacy blob columns. Other local blob v2 queries return descriptors in ``"lazy"`` and ``"descriptions"`` modes, or payloads in ``"bytes"`` mode, through :meth:`to_arrow`. - Remote blob queries support only ``"descriptions"`` until a stable + LanceDB Distributed blob queries support only ``"descriptions"`` until a + stable table snapshot can bind the query and blob fetches. **kwargs Forwarded to pyarrow.Table.to_pandas after query execution and @@ -4209,9 +4211,10 @@ class AsyncVectorQueryBase: your actual data to find the smallest possible value that will still give you the desired recall. - LanceDB retains this as `nprobes` through local and remote request - construction. Lance sets both probe bounds to this value. Explicit minimum - or maximum settings can override their respective bounds. + LanceDB retains this as `nprobes` through LanceDB Embedded and LanceDB + Distributed request construction. Lance sets both probe bounds to this + value. Explicit minimum or maximum settings can override their respective + bounds. """ self._inner.nprobes(nprobes) return self diff --git a/python/python/lancedb/remote/__init__.py b/python/python/lancedb/remote/__init__.py index 15015a8e0..4d082d2c8 100644 --- a/python/python/lancedb/remote/__init__.py +++ b/python/python/lancedb/remote/__init__.py @@ -163,7 +163,7 @@ class TlsConfig: @dataclass class ClientConfig: - """Configuration for the LanceDB Cloud HTTP client. + """Configuration for the HTTP client used to connect to LanceDB Enterprise. Attributes ---------- @@ -190,7 +190,7 @@ class ClientConfig: Provider for dynamic headers to be added to each request. user_id: Optional[str] User identifier for tracking purposes. This is sent as the - `x-lancedb-user-id` header in requests to LanceDB Cloud/Enterprise. + `x-lancedb-user-id` header in requests to LanceDB Enterprise. This can also be set via the `LANCEDB_USER_ID` environment variable. Alternatively, set `LANCEDB_USER_ID_ENV_KEY` to specify another diff --git a/python/python/lancedb/remote/db.py b/python/python/lancedb/remote/db.py index 291cc52d6..e2defa216 100644 --- a/python/python/lancedb/remote/db.py +++ b/python/python/lancedb/remote/db.py @@ -101,7 +101,7 @@ def _tls_config_to_dict(config: Optional[TlsConfig]) -> Optional[dict[str, Any]] def _client_config_to_dict(config: ClientConfig) -> dict[str, Any]: if config.header_provider is not None: raise ValueError( - "Cannot serialize a remote connection with a header_provider. " + "Cannot serialize a LanceDB Distributed connection with a header_provider. " "Use static api_key/extra_headers or provide a worker-side " "connection factory instead." ) @@ -119,7 +119,7 @@ def _client_config_to_dict(config: ClientConfig) -> dict[str, Any]: class RemoteDBConnection(DBConnection): - """A connection to a remote LanceDB database.""" + """A connection to a LanceDB Enterprise database.""" def __init__( self, @@ -135,7 +135,7 @@ class RemoteDBConnection(DBConnection): read_consistency_interval: Optional[timedelta] = None, sql_host_override: Optional[str] = None, ): - """Connect to a remote LanceDB database.""" + """Connect to a LanceDB Enterprise database.""" if isinstance(client_config, dict): client_config = ClientConfig(**client_config) elif client_config is None: @@ -246,14 +246,17 @@ class RemoteDBConnection(DBConnection): @property def session(self) -> Optional["Session"]: - """Remote connections do not expose a local cache session.""" - raise NotImplementedError("session is not supported by remote connections") + """LanceDB Distributed connections do not expose a local cache session.""" + raise NotImplementedError( + "session is not supported by LanceDB Distributed connections" + ) @property def read_consistency_interval(self) -> Optional[timedelta]: - """Remote connections do not expose a local read consistency interval.""" + """LanceDB Distributed connections do not expose a read consistency interval.""" raise NotImplementedError( - "read_consistency_interval is not supported by remote connections" + "read_consistency_interval is not supported by LanceDB Distributed " + "connections" ) @override @@ -631,11 +634,11 @@ class RemoteDBConnection(DBConnection): The embedding functions to store in the table schema and use to generate vectors when creating the table or adding data. storage_options: dict, optional - Not supported for remote table creation. Raises NotImplementedError. + Not supported in LanceDB Distributed. Raises NotImplementedError. data_storage_version: str, optional - Not supported for remote table creation. Raises NotImplementedError. + Not supported in LanceDB Distributed. Raises NotImplementedError. enable_v2_manifest_paths: bool, optional - Not supported for remote table creation. Raises NotImplementedError. + Not supported in LanceDB Distributed. Raises NotImplementedError. Returns ------- @@ -708,7 +711,8 @@ class RemoteDBConnection(DBConnection): ): if value is not None: raise NotImplementedError( - f"{option} is not supported for remote table creation" + f"{option} is not supported for table creation in " + "LanceDB Distributed" ) if exist_ok: if mode == "create": @@ -1145,7 +1149,7 @@ class RemoteDBConnection(DBConnection): default_namespace_path: Optional[List[str]] = None, parameters: Optional[QueryParameters] = None, ) -> SqlQuery: - """Start executing SQL through this remote connection. + """Start executing SQL through this LanceDB Distributed connection. Unqualified tables use this connection's database and the ``["public"]`` namespace by default. Fully qualified table names may diff --git a/python/python/lancedb/remote/header.py b/python/python/lancedb/remote/header.py index 5f5bd12d8..9cea0eeff 100644 --- a/python/python/lancedb/remote/header.py +++ b/python/python/lancedb/remote/header.py @@ -1,7 +1,7 @@ # SPDX-License-Identifier: Apache-2.0 # SPDX-FileCopyrightText: Copyright The LanceDB Authors -"""Header providers for LanceDB remote connections. +"""Header providers for LanceDB Enterprise connections. This module provides a flexible header management framework for LanceDB remote connections, allowing users to implement custom header strategies for diff --git a/python/python/lancedb/remote/table.py b/python/python/lancedb/remote/table.py index 935e07eec..7454b3e73 100644 --- a/python/python/lancedb/remote/table.py +++ b/python/python/lancedb/remote/table.py @@ -126,8 +126,8 @@ class RemoteTable(Table): def _serialized_connection_state(self) -> str: if self._connection_state is None: raise RuntimeError( - "Cannot reopen this remote table because it does not carry " - "serialized connection state" + "Cannot reopen this LanceDB Distributed table because it does not " + "carry serialized connection state" ) if callable(self._connection_state): self._connection_state = self._connection_state() @@ -273,32 +273,32 @@ class RemoteTable(Table): return LOOP.run(self._table.list_versions()) def to_arrow(self, *, blob_mode: BlobMode = "lazy") -> pa.Table: - """to_arrow() is not supported for remote tables.""" + """to_arrow() is not supported in LanceDB Distributed.""" validate_blob_mode(blob_mode) raise NotImplementedError( - "to_arrow() is not supported for remote tables. " + "to_arrow() is not supported in LanceDB Distributed. " "Use table.search().to_arrow() instead." ) def to_pandas(self, blob_mode: BlobMode = "lazy", **kwargs): - """to_pandas() is not supported for remote tables.""" + """to_pandas() is not supported in LanceDB Distributed.""" validate_blob_mode(blob_mode) raise NotImplementedError( - "to_pandas() is not supported for remote tables. " + "to_pandas() is not supported in LanceDB Distributed. " "Use table.search().to_pandas() instead." ) def to_lance(self, **kwargs) -> "lance.LanceDataset": - """Direct Lance dataset access is not supported for remote tables. + """Direct Lance dataset access is not supported in LanceDB Distributed. Use ``table.search().to_arrow()`` to read query results through the server. """ return LOOP.run(self._table.to_lance(**kwargs)) def to_polars(self, batch_size=None) -> "pl.LazyFrame": - """Use ``table.search().to_polars()`` to read remote query results.""" + """Use ``table.search().to_polars()`` to read query results.""" raise NotImplementedError( - "to_polars() is not supported for remote tables. " + "to_polars() is not supported in LanceDB Distributed. " "Use table.search().to_polars() instead." ) @@ -331,7 +331,7 @@ class RemoteTable(Table): """Tokenize a query using the tokenizer configured on an FTS index. Model-backed tokenizers such as ``jieba/*`` and ``lindera/*`` are - rebuilt in the client process from index metadata. For remote tables, + rebuilt in the client process from index metadata. In LanceDB Distributed, this means the same tokenizer model files must also exist locally (under ``LANCE_LANGUAGE_MODEL_HOME``) and must match the files the server uses. A mismatch cannot be detected: the returned tokens may @@ -638,7 +638,7 @@ class RemoteTable(Table): if accelerator is not None: logging.warning( - "GPU accelerator is not supported for remote tables " + "GPU accelerator is not supported in LanceDB Distributed " "and will be ignored." ) @@ -713,7 +713,7 @@ class RemoteTable(Table): ) -> AddResult: """Add more data to the [Table][lancedb.table.Table]. - It has the same API signature as the OSS version. + It has the same API signature as the LanceDB Embedded version. Parameters ---------- @@ -743,7 +743,7 @@ class RemoteTable(Table): capped at the number of CPU cores. Lower this if bulk ingestion is using too much memory. allow_external_blob_outside_bases: bool, default False - Not supported for remote tables. Setting this raises. + Not supported in LanceDB Distributed. Setting this raises. Returns ------- @@ -1048,20 +1048,20 @@ class RemoteTable(Table): delete_unverified: bool = False, ): """ - cleanup_old_versions() is a no-op for remote tables. + cleanup_old_versions() is a no-op in LanceDB Distributed. """ warnings.warn( - "cleanup_old_versions() is a no-op for remote tables.", + "cleanup_old_versions() is a no-op in LanceDB Distributed.", stacklevel=2, ) pass def compact_files(self, *args, **kwargs): """ - compact_files() is a no-op for remote tables. + compact_files() is a no-op in LanceDB Distributed. """ warnings.warn( - "compact_files() is a no-op for remote tables.", + "compact_files() is a no-op in LanceDB Distributed.", stacklevel=2, ) pass @@ -1074,7 +1074,7 @@ class RemoteTable(Table): retrain: bool = False, compaction_options: Optional[CompactionOptions] = None, ): - """optimize() is not supported for remote tables.""" + """optimize() is not supported in LanceDB Distributed.""" return LOOP.run( self._table.optimize( cleanup_older_than=cleanup_older_than, @@ -1184,7 +1184,7 @@ class RemoteTable(Table): ) def close_rte_writers(self) -> None: - """No-op for remote tables (no local shard writers).""" + """No-op in LanceDB Distributed (no local shard writers).""" return LOOP.run(self._table.close_rte_writers()) @_deprecated_keyword("index_name", "name") @@ -1213,7 +1213,7 @@ class RemoteTable(Table): This is a hint to the database that the given columns will be accessed in the future and the database should prefetch the data if possible. - Currently only supported on remote tables. + Currently only supported in LanceDB Distributed. This call initiates prewarming and returns once the request is accepted. It is idempotent and safe to call from multiple clients concurrently. @@ -1242,7 +1242,7 @@ class RemoteTable(Table): def uri(self) -> str: """The table URI (storage location). - For remote tables, this fetches the location from the server via describe. + In LanceDB Distributed, this fetches the location from the server via describe. """ return LOOP.run(self._table.uri()) diff --git a/python/python/lancedb/sql.py b/python/python/lancedb/sql.py index 05b82b0d3..d011e25a5 100644 --- a/python/python/lancedb/sql.py +++ b/python/python/lancedb/sql.py @@ -1,7 +1,7 @@ # SPDX-License-Identifier: Apache-2.0 # SPDX-FileCopyrightText: Copyright The LanceDB Authors -"""Handles to SQL queries running on a remote database.""" +"""Handles to SQL queries running on a LanceDB Distributed database.""" from typing import Any, Mapping, Optional, Sequence, Union from uuid import UUID diff --git a/python/python/lancedb/table.py b/python/python/lancedb/table.py index ac82106cc..59c88027d 100644 --- a/python/python/lancedb/table.py +++ b/python/python/lancedb/table.py @@ -1572,9 +1572,10 @@ class Table(ABC): raise NotImplementedError("to_arrow is not supported for this table type") def to_lance(self, **kwargs) -> lance.LanceDataset: - """Return a local table as a lance.LanceDataset. + """Return a LanceDB Embedded table as a lance.LanceDataset. - Remote tables cannot be opened as Lance datasets by the client. Use + LanceDB Distributed tables cannot be opened as Lance datasets by the + client. Use ``table.search().to_arrow()`` to read them through the server. Returns @@ -1586,7 +1587,7 @@ class Table(ABC): def to_polars(self, batch_size=None) -> "pl.LazyFrame": """Return the table as a Polars LazyFrame. - For remote tables, use ``table.search().to_polars()`` to convert query + In LanceDB Distributed, use ``table.search().to_polars()`` to convert query results to a Polars DataFrame. Parameters @@ -2530,7 +2531,7 @@ class Table(ABC): ) -> pa.LargeBinaryArray: """Materialize full blob bytes for ``column`` at the given rows. - Local tables support both legacy blob v1 and blob v2 columns. + LanceDB Embedded supports both legacy blob v1 and blob v2 columns. The result has the same length and order as ``row_ids``. Null blobs produce null slots; valid empty blobs produce ``b""``. @@ -2542,7 +2543,7 @@ class Table(ABC): Blobs inside lists cannot be fetched by row id yet. - Remote servers limit each request to 1024 row IDs and 64 MiB of blob + LanceDB Distributed limits each request to 1024 row IDs and 64 MiB of blob bytes. The client splits requests automatically and reads an individual larger blob through the Range route. This method still materializes all bytes in memory; for large values use :meth:`fetch_blob_files`. @@ -2556,7 +2557,7 @@ class Table(ABC): ) -> pa.LargeBinaryArray: """Materialize row-specific byte ranges from a blob column. - Local tables support both legacy blob v1 and blob v2 columns. + LanceDB Embedded supports both legacy blob v1 and blob v2 columns. Each request is a three-item ``(row_id, offset, length)`` sequence. Requests may be repeated or reordered, including multiple ranges for the same blob. @@ -2569,7 +2570,7 @@ class Table(ABC): results are returned. Row IDs can be obtained from a query with ``with_row_id(True)``. - Remote tables read the requested ranges through version-pinned blob + LanceDB Distributed reads the requested ranges through version-pinned blob handles using HTTP byte-range requests. """ @@ -2581,12 +2582,12 @@ class Table(ABC): ) -> "list[Optional[BlobFile]]": """Open lazy, seekable :class:`~lancedb._blob.BlobFile` handles. - Local tables support both legacy blob v1 and blob v2 columns. + LanceDB Embedded supports both legacy blob v1 and blob v2 columns. Prefer this over :meth:`fetch_blobs` for large payloads. ``row_ids`` is a ``list[int]``, an integer Arrow array or chunked array, or a query ``pyarrow.Table`` carrying row identity via ``_rowid`` or a ``_lance_row_id`` field on the blob descriptor. Null blob values return - ``None``. Remote tables require LanceDB Cloud server 0.5.0 or newer. + ``None``. LanceDB Distributed requires server version 0.5.0 or newer. ``_rowid`` values stay valid after compaction when the table has stable row ids. @@ -2823,8 +2824,8 @@ class Table(ABC): Notes ----- - This function is not available in LanceDb Cloud (since LanceDB - Cloud manages cleanup for you automatically) + This function is not available in LanceDB Distributed, which manages + cleanup for you automatically. """ @abstractmethod @@ -2845,8 +2846,8 @@ class Table(ABC): Notes ----- - This function is not available in LanceDB Cloud (since LanceDB - Cloud manages compaction for you automatically) + This function is not available in LanceDB Distributed, which manages + compaction for you automatically. """ @abstractmethod @@ -2932,7 +2933,7 @@ class Table(ABC): Specify exactly one of ``column`` or ``index_name``. Model-backed tokenizers such as ``jieba/*`` and ``lindera/*`` are - rebuilt in the client process from index metadata. For remote tables, + rebuilt in the client process from index metadata. In LanceDB Distributed, this means the same tokenizer model files must also exist locally (under ``LANCE_LANGUAGE_MODEL_HOME``) and must match the files the server uses. A mismatch cannot be detected: the returned tokens may @@ -2988,12 +2989,12 @@ class Table(ABC): or named-struct result in the named table column. A bare named-struct application expands its ordered result fields as one atomic binding; aliases come from ``rename(columns=...)``. - Function columns are supported only on LanceDB Cloud and - Enterprise. + Function columns are supported only in LanceDB + Distributed. computed: Dict[str, str], optional - Local declaration and refresh require a source build with the + LanceDB Embedded declaration and refresh require a source build with the ``experimental-functions`` Cargo feature, which published packages - do not enable. Remote Cloud/Enterprise operations remain available. + do not enable. LanceDB Distributed operations remain available. A mapping from output column names to SQL expressions derives each output field from its expression. A direct projection of a Blob v2 @@ -3012,14 +3013,15 @@ class Table(ABC): While a declaration reads a column, that column cannot be renamed, retyped or dropped. - On LanceDB Cloud and Enterprise the expression is planned by the + In LanceDB Distributed the expression is planned by the server, and the refresh runs as a server job -- see [`refresh_column_async`][lancedb.table.Table.refresh_column_async]. Cannot be combined with ``transforms``. auto_refresh_enabled: bool, optional Enable automatic refresh for each declared computed output. Defaults - to True. Local tables store this option; scheduling requires a server. + to True. LanceDB Embedded stores this option; scheduling requires a + server. auto_refresh_interval_seconds: int, optional Positive minimum interval after a successful refresh, in seconds. When omitted, the server determines when to refresh. Applies to every @@ -3059,7 +3061,8 @@ class Table(ABC): by the next one, and rows whose inputs changed since they were computed are recomputed; everything else is left as it is. - Local tables only: a remote refresh runs as a server job, through + LanceDB Embedded only. In LanceDB Distributed, a refresh runs as a + server job, through [`refresh_column_async`][lancedb.table.Table.refresh_column_async]. Parameters @@ -3080,14 +3083,15 @@ class Table(ABC): Like :meth:`refresh_column`, but returns a handle to the refresh job instead of blocking until it completes. - Local refresh requires a source build with ``experimental-functions``. - Remote Cloud/Enterprise jobs do not require this feature. + LanceDB Embedded refresh requires a source build with + ``experimental-functions``. + LanceDB Distributed jobs do not require this feature. The job may already be complete when returned; callers must not assume the column is filled until :meth:`Job.wait` returns. Invalid input -- an unknown column, or one that is not computed -- raises here rather - than failing the job. On local tables the job runs in-process; on - LanceDB Cloud and Enterprise it is the server's backfill job. + than failing the job. In LanceDB Embedded the job runs in-process; in + LanceDB Distributed it is the server's backfill job. Returns ------- @@ -3123,7 +3127,7 @@ class Table(ABC): A refresh running under a skip policy records each row it skipped with the input that failed and the error. This lists those records, newest job first, plus a summary for any fragment whose per-row - detail was capped. LanceDB Cloud and Enterprise only; reading errors + detail was capped. LanceDB Distributed only; reading errors needs read access to the table, since a message carries the value that failed. @@ -4186,7 +4190,7 @@ class LanceTable(Table): This is a hint to the database that the given columns will be accessed in the future and the database should prefetch the data if possible. - Currently only supported on remote tables. + Currently only supported in LanceDB Distributed. This call initiates prewarming and returns once the request is accepted. It is idempotent and safe to call from multiple clients concurrently. @@ -4435,7 +4439,7 @@ class LanceTable(Table): using too much memory. allow_external_blob_outside_bases: bool, default False Allow blob URIs outside registered bases. See :meth:`Table.add`. - Local tables only. + LanceDB Embedded only. Returns ------- @@ -5077,7 +5081,7 @@ class LanceTable(Table): Specify exactly one of ``column`` or ``index_name``. Model-backed tokenizers such as ``jieba/*`` and ``lindera/*`` are - rebuilt in the client process from index metadata. For remote tables, + rebuilt in the client process from index metadata. In LanceDB Distributed, this means the same tokenizer model files must also exist locally (under ``LANCE_LANGUAGE_MODEL_HOME``) and must match the files the server uses. A mismatch cannot be detected: the returned tokens may @@ -6071,9 +6075,10 @@ class AsyncTable: return AsyncQuery(self._inner.query(), self) async def to_lance(self, **kwargs) -> lance.LanceDataset: - """Return the Lance dataset backing a local table. + """Return the Lance dataset backing a LanceDB Embedded table. - Remote tables cannot be opened as Lance datasets by the client. Use + LanceDB Distributed tables cannot be opened as Lance datasets by the + client. Use [to_arrow][lancedb.table.AsyncTable.to_arrow] or [query][lancedb.table.AsyncTable.query] to read them through the server. @@ -6094,7 +6099,7 @@ class AsyncTable: """ if not self._inner._is_native(): raise NotImplementedError( - "to_lance() is not supported for remote tables; " + "to_lance() is not supported in LanceDB Distributed; " "query the server instead" ) @@ -6127,7 +6132,7 @@ class AsyncTable: Parameters ---------- blob_mode: str, default "lazy" - Controls how Lance blob columns are returned. Remote tables support + Controls how Lance blob columns are returned. LanceDB Distributed supports "descriptions"; "bytes" and "lazy" are not yet supported. **kwargs Forwarded to PyArrow / Lance pandas conversion. @@ -6371,7 +6376,7 @@ class AsyncTable: This is a hint to the database that the given columns will be accessed in the future and the database should prefetch the data if possible. - Currently only supported on remote tables. + Currently only supported in LanceDB Distributed. This call initiates prewarming and returns once the request is accepted. It is idempotent and safe to call from multiple clients concurrently. @@ -6415,8 +6420,8 @@ class AsyncTable: """ Get the table URI (storage location). - For remote tables, this fetches the location from the server via describe. - For local tables, this returns the dataset URI. + In LanceDB Distributed, this fetches the location from the server via describe. + In LanceDB Embedded, this returns the dataset URI. Returns ------- @@ -6499,7 +6504,7 @@ class AsyncTable: using too much memory. allow_external_blob_outside_bases: bool, default False Allow blob URIs outside registered bases. See :meth:`Table.add`. - Local tables only. + LanceDB Embedded only. """ schema = await self.schema() @@ -7203,12 +7208,12 @@ class AsyncTable: or named-struct result in the named table column. A bare named-struct application expands its ordered result fields as one atomic binding; aliases come from ``rename(columns=...)``. - Function columns are supported only on LanceDB Cloud and - Enterprise. + Function columns are supported only in LanceDB + Distributed. computed: Dict[str, str], optional - Local declaration and refresh require a source build with the + LanceDB Embedded declaration and refresh require a source build with the ``experimental-functions`` Cargo feature, which published packages - do not enable. Remote Cloud/Enterprise operations remain available. + do not enable. LanceDB Distributed operations remain available. A mapping from output column names to SQL expressions derives each output field from its expression. A direct projection of a Blob v2 @@ -7226,13 +7231,13 @@ class AsyncTable: While a declaration reads a column, that column cannot be renamed, retyped or dropped. - On LanceDB Cloud and Enterprise the expression is planned by + In LanceDB Distributed the expression is planned by the server. Cannot be combined with ``transforms``. auto_refresh_enabled: bool, optional Enable automatic refresh for each computed output declared by this - call. Defaults to True. Local tables store the setting; automatic - scheduling requires Cloud or Enterprise. + call. Defaults to True. LanceDB Embedded stores the setting; automatic + scheduling requires LanceDB Distributed. auto_refresh_interval_seconds: int, optional Positive minimum seconds after a successful refresh before another automatic refresh is eligible. When omitted, the server determines when @@ -7337,7 +7342,8 @@ class AsyncTable: by the next one, and rows whose inputs changed since they were computed are recomputed; everything else is left as it is. - Local tables only: a remote refresh runs as a server job, through + LanceDB Embedded only. In LanceDB Distributed, a refresh runs as a + server job, through [`refresh_column_async`][lancedb.table.Table.refresh_column_async]. Parameters @@ -7364,7 +7370,7 @@ class AsyncTable: A refresh running under a skip policy records each row it skipped with the input that failed and the error. This lists those records, newest job first, plus a summary for any fragment whose per-row - detail was capped. LanceDB Cloud and Enterprise only; reading errors + detail was capped. LanceDB Distributed only; reading errors needs read access to the table, since a message carries the value that failed. @@ -7402,14 +7408,15 @@ class AsyncTable: Like :meth:`refresh_column`, but returns a handle to the refresh job instead of blocking until it completes. - Local refresh requires a source build with ``experimental-functions``. - Remote Cloud/Enterprise jobs do not require this feature. + LanceDB Embedded refresh requires a source build with + ``experimental-functions``. + LanceDB Distributed jobs do not require this feature. The job may already be complete when returned; callers must not assume the column is filled until :meth:`AsyncJob.wait` resolves. Invalid input -- an unknown column, or one that is not computed -- raises here - rather than failing the job. On local tables the job runs - in-process; on LanceDB Cloud and Enterprise it is the server's + rather than failing the job. In LanceDB Embedded the job runs + in-process; in LanceDB Distributed it is the server's backfill job. Returns @@ -7831,7 +7838,7 @@ class AsyncTable: Specify exactly one of ``column`` or ``index_name``. Model-backed tokenizers such as ``jieba/*`` and ``lindera/*`` are - rebuilt in the client process from index metadata. For remote tables, + rebuilt in the client process from index metadata. In LanceDB Distributed, this means the same tokenizer model files must also exist locally (under ``LANCE_LANGUAGE_MODEL_HOME``) and must match the files the server uses. A mismatch cannot be detected: the returned tokens may diff --git a/python/python/tests/test_materialized_views.py b/python/python/tests/test_materialized_views.py index 0966297f7..85c02ccc3 100644 --- a/python/python/tests/test_materialized_views.py +++ b/python/python/tests/test_materialized_views.py @@ -726,7 +726,7 @@ def test_embedded_create_refuses_automatic_refresh_before_creating_view( tmp_path, options ): db = make_db(tmp_path) - with pytest.raises(NotImplementedError, match="Cloud or Enterprise"): + with pytest.raises(NotImplementedError, match="requires LanceDB Distributed"): db.create_materialized_view("adults", "people", **options) assert "adults" not in db.table_names() @@ -743,7 +743,7 @@ def test_remote_create_rejects_invalid_interval_without_request(seconds): @pytest.mark.experimental_functions def test_namespace_forwards_automatic_refresh_request(tmp_path): db = lancedb.connect_namespace("dir", {"root": str(tmp_path)}) - with pytest.raises(NotImplementedError, match="Cloud or Enterprise"): + with pytest.raises(NotImplementedError, match="requires LanceDB Distributed"): db.create_materialized_view("mv", "source", auto_refresh_enabled=True) @@ -751,7 +751,7 @@ def test_namespace_forwards_automatic_refresh_request(tmp_path): @pytest.mark.asyncio async def test_async_namespace_forwards_automatic_refresh_request(tmp_path): db = lancedb.connect_namespace_async("dir", {"root": str(tmp_path)}) - with pytest.raises(NotImplementedError, match="Cloud or Enterprise"): + with pytest.raises(NotImplementedError, match="requires LanceDB Distributed"): await db.create_materialized_view("mv", "source", auto_refresh_enabled=True) diff --git a/python/python/tests/test_remote_db.py b/python/python/tests/test_remote_db.py index b2515cd26..fe271b1fd 100644 --- a/python/python/tests/test_remote_db.py +++ b/python/python/tests/test_remote_db.py @@ -910,7 +910,7 @@ def test_table_unimplemented_functions(): message = str(exc_info.value) assert method in message assert "not" in message and "supported" in message - assert "remote tables" in message + assert "LanceDB Distributed" in message assert "cloud" not in message.lower() assert f"search().{method}()" in message @@ -977,7 +977,7 @@ async def test_remote_to_lance_rejection( await table.to_lance(**options) assert requests == opened_requests - assert "to_lance() is not supported for remote tables" in str(sync_error.value) + assert "to_lance() is not supported in LanceDB Distributed" in str(sync_error.value) assert "query the server" in str(sync_error.value) assert str(sync_error.value) == str(async_error.value) @@ -1764,7 +1764,8 @@ def test_remote_create_index_new_api(caplog, rq_kwargs): assert received_requests[5]["replace"] is False assert "replace is not supported" not in caplog.text assert caplog.messages == [ - "GPU accelerator is not supported for remote tables and will be ignored." + "GPU accelerator is not supported in LanceDB Distributed " + "and will be ignored." ] @@ -1822,7 +1823,7 @@ def test_remote_unsupported_operations_sync(method, args, kwargs, operation): with pytest.raises(NotImplementedError) as error: getattr(table, method)(*args, **kwargs) expected = f"LanceDBError: not supported: {operation} is not supported " - expected += "for remote tables." + expected += "in LanceDB Distributed." if operation == "IVF_HNSW_PQ": expected += " Please use IVF_HNSW_SQ instead." assert str(error.value) == expected @@ -1840,7 +1841,7 @@ async def test_remote_unsupported_operations_async(method, args, kwargs, operati with pytest.raises(NotImplementedError) as error: await getattr(table, method)(*args, **kwargs) expected = f"LanceDBError: not supported: {operation} is not supported " - expected += "for remote tables." + expected += "in LanceDB Distributed." if operation == "IVF_HNSW_PQ": expected += " Please use IVF_HNSW_SQ instead." assert str(error.value) == expected @@ -1852,7 +1853,7 @@ def test_remote_unsupported_legacy_hnsw_pq(): with pytest.warns(DeprecationWarning, match="create_index"): with pytest.raises( NotImplementedError, - match="IVF_HNSW_PQ is not supported for remote tables. " + match="IVF_HNSW_PQ is not supported in LanceDB Distributed. " "Please use IVF_HNSW_SQ instead.", ): table.create_index( @@ -1870,14 +1871,15 @@ def test_remote_python_only_messages(): with pytest.raises(NotImplementedError) as error: getattr(table, method)() assert str(error.value) == ( - f"{method}() is not supported for remote tables. " + f"{method}() is not supported in LanceDB Distributed. " f"Use table.search().{method}() instead." ) for method in ["compact_files", "cleanup_old_versions"]: with pytest.warns(UserWarning) as warning: getattr(table, method)() assert ( - str(warning[0].message) == f"{method}() is a no-op for remote tables." + str(warning[0].message) + == f"{method}() is a no-op in LanceDB Distributed." ) @@ -3842,7 +3844,7 @@ async def test_async_remote_to_lance_rejects_storage_access(monkeypatch): raise AssertionError("remote table URI must not be requested") monkeypatch.setattr(table, "uri", fail_uri) - with pytest.raises(NotImplementedError, match="remote tables"): + with pytest.raises(NotImplementedError, match="LanceDB Distributed"): await table.to_lance() diff --git a/python/python/tests/test_remote_options.py b/python/python/tests/test_remote_options.py index 2022aa29d..0dbc21029 100644 --- a/python/python/tests/test_remote_options.py +++ b/python/python/tests/test_remote_options.py @@ -86,7 +86,9 @@ async def test_remote_create_rejects_write_options(storage_options, empty): if not empty: kwargs["data"] = [{"value": 1}] async with mock_lancedb_connection_async(handler) as db: - with pytest.raises(NotImplementedError, match="write_options.*remote"): + with pytest.raises( + NotImplementedError, match="write_options.*LanceDB Distributed" + ): await db.create_table("t", storage_options=storage_options, **kwargs) assert requests == [] @@ -108,7 +110,7 @@ def test_sync_remote_create_rejects_write_options(options): request.end_headers() with mock_lancedb_connection(handler) as db: - with pytest.raises(NotImplementedError, match="remote"): + with pytest.raises(NotImplementedError, match="LanceDB Distributed"): db.create_table("t", [{"value": 1}], **options) assert requests == [] @@ -129,11 +131,11 @@ async def test_remote_open_rejects_local_options(options, asynchronous): if asynchronous: async with mock_lancedb_connection_async(handler) as db: - with pytest.raises(NotImplementedError, match="remote"): + with pytest.raises(NotImplementedError, match="LanceDB Distributed"): await db.open_table("t", **options) else: with mock_lancedb_connection(handler) as db: - with pytest.raises(NotImplementedError, match="remote"): + with pytest.raises(NotImplementedError, match="LanceDB Distributed"): db.open_table("t", **options) assert requests == [] @@ -149,6 +151,6 @@ async def test_remote_open_rejects_location(): request.wfile.write(b'{"version": 1, "schema": {"fields": []}}') async with mock_lancedb_connection_async(handler) as db: - with pytest.raises(NotImplementedError, match="location.*remote"): + with pytest.raises(NotImplementedError, match="location.*LanceDB Distributed"): await db.open_table("t", location="/tmp/zzz") assert requests == [] diff --git a/python/python/tests/test_table.py b/python/python/tests/test_table.py index 21fce93d3..375eec40c 100644 --- a/python/python/tests/test_table.py +++ b/python/python/tests/test_table.py @@ -5552,7 +5552,9 @@ async def test_computed_column_async(tmp_path): def test_function_errors_are_remote_only(tmp_path): db = lancedb.connect(tmp_path) table = db.create_table("t", [{"x": 1}]) - with pytest.raises(NotImplementedError, match="LanceDB Cloud and Enterprise"): + with pytest.raises( + NotImplementedError, match="recorded only in LanceDB Distributed" + ): table.function_errors() diff --git a/python/src/table.rs b/python/src/table.rs index d77fd14b8..f484b3f77 100644 --- a/python/src/table.rs +++ b/python/src/table.rs @@ -1922,7 +1922,8 @@ impl Table { inner .as_native() .ok_or_else(|| lancedb::Error::NotSupported { - message: "uses_v2_manifest_paths is not supported for remote tables.".into(), + message: "uses_v2_manifest_paths is not supported in LanceDB Distributed." + .into(), }) .infer_error()? .uses_v2_manifest_paths() @@ -1937,7 +1938,8 @@ impl Table { inner .as_native() .ok_or_else(|| lancedb::Error::NotSupported { - message: "migrate_manifest_paths_v2 is not supported for remote tables.".into(), + message: "migrate_manifest_paths_v2 is not supported in LanceDB Distributed." + .into(), }) .infer_error()? .migrate_manifest_paths_v2() diff --git a/rust/lancedb/src/blob.rs b/rust/lancedb/src/blob.rs index ce124e891..409edcc2a 100644 --- a/rust/lancedb/src/blob.rs +++ b/rust/lancedb/src/blob.rs @@ -288,8 +288,8 @@ impl BlobFile { } } - /// Physical byte offset in the data file. `None` on remote handles. The - /// Cloud byte-range route does not expose storage layout. + /// Physical byte offset in the data file. `None` on LanceDB Distributed handles. The + /// server's byte-range route does not expose storage layout. pub fn position(&self) -> Option { match &self.inner { BlobFileInner::Native(file) => Some(file.position()), @@ -298,8 +298,8 @@ impl BlobFile { } } - /// Path of the data file holding the blob. `None` on remote handles. The - /// Cloud byte-range route does not expose storage layout. + /// Path of the data file holding the blob. `None` on LanceDB Distributed handles. The + /// server's byte-range route does not expose storage layout. pub fn data_path(&self) -> Option<&Path> { match &self.inner { BlobFileInner::Native(file) => Some(file.data_path()), @@ -308,8 +308,8 @@ impl BlobFile { } } - /// Native storage layout. `None` on remote handles. The Cloud byte-range - /// route does not expose layout. + /// Native storage layout. `None` on LanceDB Distributed handles. The server's + /// byte-range route does not expose layout. pub fn kind(&self) -> Option { match &self.inner { BlobFileInner::Native(file) => Some(file.kind()), @@ -318,7 +318,7 @@ impl BlobFile { } } - /// External URI for native handles. Remote handles do not expose storage URIs. + /// External URI for native handles. LanceDB Distributed handles do not expose storage URIs. pub fn uri(&self) -> Option<&str> { match &self.inner { BlobFileInner::Native(file) => file.uri(), diff --git a/rust/lancedb/src/connection.rs b/rust/lancedb/src/connection.rs index bff97bf31..065eb3084 100644 --- a/rust/lancedb/src/connection.rs +++ b/rust/lancedb/src/connection.rs @@ -174,7 +174,7 @@ impl OpenTableBuilder { /// Advanced parameters that can be used to customize table reads /// - /// Remote connections reject these parameters with [`Error::NotSupported`]. + /// LanceDB Distributed connections reject these parameters with [`Error::NotSupported`]. /// /// If set, these will take precedence over any overlapping `OpenTableOptions` options pub fn lance_read_params(mut self, params: ReadParams) -> Self { @@ -333,7 +333,7 @@ pub struct CloneTableBuilder { request: CloneTableRequest, } -/// Builder for asynchronously executing a SQL statement on a remote database. +/// Builder for asynchronously executing a SQL statement on a LanceDB Distributed database. pub struct ExecuteQueryAsyncBuilder { parent: Arc, request: ExecuteQueryRequest, @@ -497,13 +497,13 @@ impl Connection { &self.internal } - /// Start executing SQL on a remote LanceDB database. + /// Start executing SQL on a LanceDB Distributed database. /// /// The query can reference tables in other databases with SQL dot notation. /// Use [`ExecuteQueryAsyncBuilder::default_namespace_path`] to avoid qualifying /// tables in the default namespace, and [`ExecuteQueryAsyncBuilder::parameters`] /// to bind Arrow values to `$1` / `$name` placeholders instead of writing them - /// into the SQL text. Local connections return [`Error::NotSupported`]. + /// into the SQL text. LanceDB Embedded connections return [`Error::NotSupported`]. /// /// # Example /// @@ -534,8 +534,8 @@ impl Connection { /// connection. Running state with a live query handle is not evicted; /// abandoned state has bounded retention, and server expiration is /// honored. Terminal state is retained briefly. - /// Query ids are not portable to another connection. Local connections - /// return [`Error::NotSupported`]. + /// Query ids are not portable to another connection. LanceDB Embedded + /// connections return [`Error::NotSupported`]. pub async fn describe_query( &self, query_id: uuid::Uuid, @@ -641,8 +641,8 @@ impl Connection { /// /// The server-side job builds the OCI image, then registers the completed /// artifact. Waiting on the returned typed job yields the durable - /// [`crate::function::FunctionVersion`]. Creation is remote-only. - /// Local databases return [`Error::NotSupported`]. + /// [`crate::function::FunctionVersion`]. Creation is supported only in LanceDB Distributed. + /// LanceDB Embedded databases return [`Error::NotSupported`]. /// pub async fn create_function_async( &self, @@ -658,7 +658,7 @@ impl Connection { /// /// Both the logical name and server-assigned version id are required; /// mutable aliases and latest-version lookup are intentionally absent. - /// Local databases return [`Error::NotSupported`]. + /// LanceDB Embedded databases return [`Error::NotSupported`]. pub async fn get_function( &self, name: impl AsRef, @@ -673,7 +673,7 @@ impl Connection { /// List every published immutable Function version in `namespace_path` of /// the remote catalog. Functions in child namespaces are not included. /// - /// Results are ordered by Function name then version. Local databases return + /// Results are ordered by Function name then version. LanceDB Embedded databases return /// [`Error::NotSupported`]. /// /// # Example @@ -711,7 +711,7 @@ impl Connection { /// Remove the current Function name binding, retaining the object history. /// /// Returns `true` when the server appended a Dropped transition and - /// `false` for an idempotent replay. Local databases return + /// `false` for an idempotent replay. LanceDB Embedded databases return /// [`Error::NotSupported`]. pub async fn drop_function( &self, @@ -729,7 +729,7 @@ impl Connection { /// The name is unbound before this returns; the object's content may still be being /// deleted. Await [`Job::wait`][crate::job::Job::wait] to wait for that to finish. When /// the server deletes inline, or when nothing was bound, the returned job is already - /// finished and has no id. Local databases return [`Error::NotSupported`]. + /// finished and has no id. LanceDB Embedded databases return [`Error::NotSupported`]. pub async fn drop_function_async( &self, name: impl AsRef, @@ -745,7 +745,7 @@ impl Connection { /// /// Fails if the name is taken, so a create can never silently become a /// rotation. There is no API that reads a stored credential back; the only - /// consumer is a Function that binds the Secret by name. Local databases + /// consumer is a Function that binds the Secret by name. LanceDB Embedded databases /// return [`Error::NotSupported`]. pub async fn create_secret( &self, @@ -764,7 +764,7 @@ impl Connection { /// Fails if it does not exist. Every Function bound to the Secret resolves /// the new value from its next execution, and no new Function version is /// minted -- which is what lets a rotation reach columns pinned to a - /// version registered before it. Local databases return + /// version registered before it. LanceDB Embedded databases return /// [`Error::NotSupported`]. pub async fn alter_secret( &self, @@ -781,7 +781,7 @@ impl Connection { /// The names of every Secret in this database. /// /// Names only. No path in this API returns a stored credential, by - /// construction rather than by policy. Local databases return + /// construction rather than by policy. LanceDB Embedded databases return /// [`Error::NotSupported`]. /// /// Results are fetched lazily, one page at a time. See [`Listing`] @@ -819,7 +819,7 @@ impl Connection { /// Functions bound to it fail at their next job, naming the Secret; that /// is the revocation path. The name becomes free to reuse, and a new /// Secret under it is picked up by everything still bound to that name. - /// Local databases return [`Error::NotSupported`]. + /// LanceDB Embedded databases return [`Error::NotSupported`]. pub async fn drop_secret( &self, name: impl AsRef, @@ -835,7 +835,7 @@ impl Connection { /// /// Never the value. The type it returns has no field for one, so this is a /// property of the API rather than of what the caller chooses to read. - /// Local databases return [`Error::NotSupported`]. + /// LanceDB Embedded databases return [`Error::NotSupported`]. pub async fn describe_secret( &self, name: impl AsRef, @@ -855,7 +855,7 @@ impl Connection { /// /// There is no replace: a name already taken is an error, and changing a /// view is a drop followed by a create, each authorized against what it - /// actually touches. Local databases return [`Error::NotSupported`]. + /// actually touches. LanceDB Embedded databases return [`Error::NotSupported`]. /// /// # Example /// @@ -904,7 +904,7 @@ impl Connection { /// schema that query resolved to. /// /// The schema is the one recorded at creation. A source altered since then - /// shows up when the view is read, not here. Local databases return + /// shows up when the view is read, not here. LanceDB Embedded databases return /// [`Error::NotSupported`]. pub async fn describe_view( &self, @@ -921,7 +921,7 @@ impl Connection { /// /// The tables it reads are untouched: a view holds no rows of its own. /// Use [`Connection::drop_view_async`] to get the cleanup job instead of - /// waiting on it. Local databases return [`Error::NotSupported`]. + /// waiting on it. LanceDB Embedded databases return [`Error::NotSupported`]. pub async fn drop_view(&self, name: impl AsRef, namespace_path: &[String]) -> Result<()> { validate_view_reference(name.as_ref(), namespace_path)?; self.internal.drop_view(name.as_ref(), namespace_path).await @@ -932,7 +932,7 @@ impl Connection { /// The name is free before this returns; the definition dataset may still /// be being deleted. Await [`Job::wait`][crate::job::Job::wait] to wait for /// that. When nothing was bound to the name, the returned job is already - /// finished and has no id. Local databases return [`Error::NotSupported`]. + /// finished and has no id. LanceDB Embedded databases return [`Error::NotSupported`]. /// /// ```no_run /// # use lancedb::Connection; @@ -956,7 +956,7 @@ impl Connection { /// The names of the views in one namespace. /// /// Names only; a definition is query metadata and comes from - /// [`Self::describe_view`]. Local databases return [`Error::NotSupported`]. + /// [`Self::describe_view`]. LanceDB Embedded databases return [`Error::NotSupported`]. /// /// Results are fetched lazily, one page at a time. See [`Listing`] /// for cached-result and continuation-token semantics. Errors terminate iteration. @@ -990,7 +990,7 @@ impl Connection { /// Rename a table in the database. /// - /// This is only supported in LanceDB Cloud. + /// This is only supported in LanceDB Distributed. pub async fn rename_table( &self, old_name: impl AsRef, @@ -1194,7 +1194,7 @@ impl Connection { /// For ListingDatabase, it is the equivalent DirectoryNamespace. /// For RemoteDatabase, it is the equivalent RestNamespace. /// - /// Remote connections using dynamic headers forward them through the + /// LanceDB Distributed connections using dynamic headers forward them through the /// namespace client's per-request context provider. pub async fn namespace_client(&self) -> Result> { self.internal.namespace_client().await @@ -1205,7 +1205,7 @@ impl Connection { /// - impl_type: "dir" for DirectoryNamespace, "rest" for RestNamespace /// - properties: configuration properties for the namespace /// - /// Remote connections using dynamic headers cannot be exported because the + /// LanceDB Distributed connections using dynamic headers cannot be exported because the /// namespace client config only carries static headers. pub async fn namespace_client_config( &self, @@ -1267,10 +1267,10 @@ pub struct ConnectRequest { /// /// ### Accepted URI formats /// - /// - `/path/to/database` - local database on file system. + /// - `/path/to/database` - database on the local file system. /// - `s3://bucket/path/to/database` or `gs://bucket/path/to/database` - database on cloud object store - /// - `db://dbname` - LanceDB Cloud - /// - `db://` with a host override - remote tables in the storage root + /// - `db://dbname` - LanceDB Enterprise or LanceDB Cloud (legacy) + /// - `db://` with a host override - LanceDB Enterprise tables in the storage root pub uri: String, #[cfg(feature = "remote")] @@ -1347,9 +1347,9 @@ impl ConnectBuilder { } } - /// Set the LanceDB Cloud API key. + /// Set the API key for LanceDB Enterprise or LanceDB Cloud (legacy). /// - /// This option is only used when connecting to LanceDB Cloud (db:// URIs) + /// This option is only used for `db://` URIs /// and will be ignored for other URIs. /// /// # Arguments @@ -1363,9 +1363,9 @@ impl ConnectBuilder { self } - /// Set the LanceDB Cloud region. + /// Set the LanceDB Cloud (legacy) region. /// - /// This option is only used when connecting to LanceDB Cloud (db:// URIs) + /// This option is only used when connecting to LanceDB Cloud (`db://` URIs) /// and will be ignored for other URIs. /// /// # Arguments @@ -1379,12 +1379,12 @@ impl ConnectBuilder { self } - /// Set the LanceDB Cloud host override. + /// Set the host override, used to connect to LanceDB Enterprise. /// - /// This option is only used when connecting to LanceDB Cloud (db:// URIs) + /// This option is only used for `db://` URIs /// and will be ignored for other URIs. - /// Use the URI `db://` together with a host override to connect to remote - /// tables stored directly in the storage root. + /// Use the URI `db://` together with a host override to connect to + /// LanceDB Enterprise tables stored directly in the storage root. /// /// # Arguments /// @@ -1398,7 +1398,7 @@ impl ConnectBuilder { self } - /// Set the SQL service host override for a remote connection. + /// Set the SQL service host override for a LanceDB Enterprise connection. /// /// The SQL client is initialized lazily when the connection first executes /// SQL and is retained for the connection's lifetime. @@ -1417,13 +1417,13 @@ impl ConnectBuilder { /// native LanceDB databases. /// /// See [crate::remote::db::RemoteDatabaseOptions] for the options available for - /// LanceDB Cloud and LanceDB Enterprise. + /// LanceDB Enterprise and LanceDB Cloud (legacy). pub fn database_options(mut self, database_options: &dyn DatabaseOptions) -> Self { database_options.serialize_into_map(&mut self.request.options); self } - /// Set the LanceDB Cloud client configuration. + /// Set the HTTP client configuration for LanceDB Enterprise or LanceDB Cloud (legacy). /// /// ```no_run /// # use lancedb::connect; @@ -1447,7 +1447,7 @@ impl ConnectBuilder { self } - /// Configure OAuth authentication for LanceDB Cloud/Enterprise. + /// Configure OAuth authentication for LanceDB Enterprise. /// /// This creates an [`OAuthHeaderProvider`](crate::remote::OAuthHeaderProvider) /// from the given config and sets it as the header provider. OAuth cannot @@ -1532,7 +1532,7 @@ impl ConnectBuilder { /// Enable or disable manifest-backed directory namespace mode for local /// native connections. - /// Remote connections reject enabling this option with [`Error::NotSupported`]. + /// LanceDB Distributed connections reject enabling this option with [`Error::NotSupported`]. /// /// When enabled, the connection uses the directory namespace database /// directly for all table operations and forces @@ -1568,7 +1568,7 @@ impl ConnectBuilder { } /// Set a custom session for object stores and caching. - /// Remote connections reject this option with [`Error::NotSupported`]. + /// LanceDB Distributed connections reject this option with [`Error::NotSupported`]. /// /// By default, a new session with default configuration will be created. /// This method allows you to provide a custom session with your own @@ -1610,7 +1610,9 @@ impl ConnectBuilder { ] { if provided { return Err(Error::NotSupported { - message: format!("{option} is not supported for remote connections"), + message: format!( + "{option} is not supported for LanceDB Distributed connections" + ), }); } } @@ -1621,14 +1623,14 @@ impl ConnectBuilder { let options = RemoteDatabaseOptions::parse_from_map(&merged_options)?; let region = options.region.ok_or_else(|| Error::InvalidInput { - message: "A region is required when connecting to LanceDb Cloud".to_string(), + message: "A region is required when connecting to LanceDB Cloud".to_string(), })?; let api_key = match (&self.oauth_config, &options.api_key) { (Some(_), None) => String::new(), (Some(_), Some(_)) => { return Err(Error::InvalidInput { message: - "api_key and oauth_config cannot both be set when connecting to LanceDb Cloud" + "api_key and oauth_config cannot both be set when connecting to LanceDB Enterprise or LanceDB Cloud" .to_string(), }); } @@ -1636,7 +1638,7 @@ impl ConnectBuilder { (None, None) => { return Err(Error::InvalidInput { message: - "An api_key or oauth_config is required when connecting to LanceDb Cloud" + "An api_key or oauth_config is required when connecting to LanceDB Enterprise or LanceDB Cloud" .to_string(), }); } @@ -1645,7 +1647,7 @@ impl ConnectBuilder { if self.oauth_config.is_some() && self.request.client_config.header_provider.is_some() { return Err(Error::InvalidInput { message: - "oauth_config and client_config.header_provider cannot both be set when connecting to LanceDb Cloud" + "oauth_config and client_config.header_provider cannot both be set when connecting to LanceDB Enterprise or LanceDB Cloud" .to_string(), }); } @@ -1683,7 +1685,7 @@ impl ConnectBuilder { #[cfg(not(feature = "remote"))] fn execute_remote(self) -> Result { Err(Error::Runtime { - message: "cannot connect to LanceDb Cloud unless the 'remote' feature is enabled" + message: "cannot connect to LanceDB Enterprise or LanceDB Cloud unless the 'remote' feature is enabled" .to_string(), }) } @@ -1719,7 +1721,7 @@ impl ConnectBuilder { /// # Arguments /// /// * `uri` - URI where the database is located, can be a local directory, supported remote cloud storage, -/// or a LanceDB Cloud database. See [ConnectOptions::uri] for a list of accepted formats +/// or a LanceDB Enterprise or LanceDB Cloud (legacy) database. See [ConnectOptions::uri] for a list of accepted formats pub fn connect(uri: &str) -> ConnectBuilder { ConnectBuilder::new(uri) } @@ -2020,7 +2022,7 @@ mod tests { match result { Err(Error::InvalidInput { message }) if message - == "api_key and oauth_config cannot both be set when connecting to LanceDb Cloud" => + == "api_key and oauth_config cannot both be set when connecting to LanceDB Enterprise or LanceDB Cloud" => {} Err(err) => panic!("expected InvalidInput, got {err:?}"), Ok(_) => panic!("expected api_key and oauth_config to be rejected"), @@ -2103,7 +2105,7 @@ mod tests { match result { Err(Error::InvalidInput { message }) if message - == "oauth_config and client_config.header_provider cannot both be set when connecting to LanceDb Cloud" => + == "oauth_config and client_config.header_provider cannot both be set when connecting to LanceDB Enterprise or LanceDB Cloud" => {} Err(err) => panic!("expected InvalidInput, got {err:?}"), Ok(_) => panic!("expected header_provider and oauth_config to be rejected"), diff --git a/rust/lancedb/src/connection/create_table.rs b/rust/lancedb/src/connection/create_table.rs index 9d4408ba7..8842ce59b 100644 --- a/rust/lancedb/src/connection/create_table.rs +++ b/rust/lancedb/src/connection/create_table.rs @@ -46,7 +46,7 @@ impl CreateTableBuilder { /// Apply the given write options when writing the initial data /// - /// Remote connections reject explicit Lance write parameters with + /// LanceDB Distributed connections reject explicit Lance write parameters with /// [`Error::NotSupported`] instead of silently using server defaults. pub fn write_options(mut self, write_options: WriteOptions) -> Self { self.request.write_options = write_options; @@ -73,7 +73,7 @@ impl CreateTableBuilder { /// Set multiple options for the storage layer. /// - /// Table-level storage options are not supported by remote connections. + /// Table-level storage options are not supported by LanceDB Distributed connections. /// /// Options already set on the connection will be inherited by the table, /// but can be overridden here. diff --git a/rust/lancedb/src/database.rs b/rust/lancedb/src/database.rs index 05386e0b7..939861b88 100644 --- a/rust/lancedb/src/database.rs +++ b/rust/lancedb/src/database.rs @@ -192,7 +192,7 @@ impl CloneTableRequest { } } -/// A request to start a SQL statement on a remote database. +/// A request to start a SQL statement on a LanceDB Distributed database. #[derive(Clone, Debug)] pub struct ExecuteQueryRequest { /// The SQL text. @@ -579,7 +579,7 @@ pub trait Database: async fn resume_job(&self, _job_id: &str) -> Result { job_op_not_supported("resume_job") } - /// Start executing a SQL statement on a remote database. + /// Start executing a SQL statement on a LanceDB Distributed database. async fn execute_query_async( &self, _request: ExecuteQueryRequest, diff --git a/rust/lancedb/src/database/listing.rs b/rust/lancedb/src/database/listing.rs index 700c855dd..d5749f974 100644 --- a/rust/lancedb/src/database/listing.rs +++ b/rust/lancedb/src/database/listing.rs @@ -1261,7 +1261,7 @@ impl Database for ListingDatabase { }); } Err(Error::NotSupported { - message: "rename_table is not supported in LanceDB OSS".into(), + message: "rename_table is not supported in LanceDB Embedded".into(), }) } diff --git a/rust/lancedb/src/function.rs b/rust/lancedb/src/function.rs index 36e6c30c8..db3dc1c3b 100644 --- a/rust/lancedb/src/function.rs +++ b/rust/lancedb/src/function.rs @@ -771,8 +771,8 @@ impl_json!(FunctionBinding); /// Stable terminal result of an expression-backed or Function-backed column /// refresh [`crate::Job`]. /// -/// Local refresh jobs produce this value in process. LanceDB Cloud and -/// Enterprise decode the same value from the durable job's terminal payload. +/// LanceDB Embedded refresh jobs produce this value in process. LanceDB +/// Distributed decodes the same value from the durable job's terminal payload. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct RefreshColumnResult { /// Rows assigned a value by this refresh. diff --git a/rust/lancedb/src/index.rs b/rust/lancedb/src/index.rs index 5ce345e7e..e9056863a 100644 --- a/rust/lancedb/src/index.rs +++ b/rust/lancedb/src/index.rs @@ -482,47 +482,47 @@ pub struct IndexConfig { /// /// An index may be made up of multiple segments, each with their own UUID. /// This is the UUID of the first segment. `None` if it could not be - /// determined (e.g. for remote tables, which do not yet surface this). + /// determined (e.g. in LanceDB Distributed, which does not yet surface this). pub index_uuid: Option, /// The protobuf type URL, a precise type identifier for the index. /// - /// `None` if unavailable (e.g. for remote tables). + /// `None` if unavailable (e.g. in LanceDB Distributed). pub type_url: Option, /// When the index was created, taken as the minimum creation time across /// all segments. /// /// `None` if unavailable, such as for indices created before creation - /// timestamps were tracked, or for remote tables. + /// timestamps were tracked, or in LanceDB Distributed. pub created_at: Option>, /// The number of rows indexed, across all segments. /// /// This is approximate and may include rows that have since been deleted. - /// `None` if unavailable (e.g. for remote tables whose server does not - /// report it). + /// `None` if unavailable (e.g. in LanceDB Distributed when the server + /// does not report it). pub num_indexed_rows: Option, /// The number of rows in the table that are not yet covered by this index. /// /// Computed as the table's total row count minus [`Self::num_indexed_rows`]. /// Optimizing the index will fold these rows into it. `None` if unavailable - /// (e.g. for remote tables whose server does not report it). + /// (e.g. in LanceDB Distributed when the server does not report it). pub num_unindexed_rows: Option, /// The total size in bytes of all index files across all segments. /// /// `None` if size information is unavailable, such as for indices created - /// before file sizes were tracked, or for remote tables. + /// before file sizes were tracked, or in LanceDB Distributed. pub size_bytes: Option, /// The number of segments that make up the index. /// - /// `None` if unavailable (e.g. for remote tables). + /// `None` if unavailable (e.g. in LanceDB Distributed). pub num_segments: Option, /// The on-disk index format version, taken from the first segment. /// - /// `None` if unavailable (e.g. for remote tables). + /// `None` if unavailable (e.g. in LanceDB Distributed). pub index_version: Option, /// Index-type-specific details, serialized as JSON. /// /// The shape of this JSON varies by index type. `None` if the details - /// could not be produced (e.g. no plugin available) or for remote tables. + /// could not be produced (e.g. no plugin available) or in LanceDB Distributed. pub index_details: Option, } diff --git a/rust/lancedb/src/lib.rs b/rust/lancedb/src/lib.rs index 8b1ad97c3..e2d063c40 100644 --- a/rust/lancedb/src/lib.rs +++ b/rust/lancedb/src/lib.rs @@ -30,11 +30,11 @@ //! - `azure` - Enable Azure Blob Storage object store support. //! - `gcs` - Enable Google Cloud Storage object store support. //! - `oss` - Enable Alibaba Cloud OSS object store support. -//! - `remote` - Enable remote client to connect to LanceDB cloud. +//! - `remote` - Enable the client for connecting to LanceDB Enterprise or LanceDB Cloud (legacy). //! - `experimental-functions` - Opt in to local SQL computed-column declarations //! and refresh, and local materialized-view creation and refresh. Disabled by -//! default, including in published Python and TypeScript packages. Remote -//! Cloud/Enterprise operations, reading existing data, metadata protections, +//! default, including in published Python and TypeScript packages. LanceDB +//! Distributed operations, reading existing data, metadata protections, //! and ordinary eager `add_columns` transforms do not require this feature. //! - `huggingface` - Enable HuggingFace Hub integration for loading datasets from the Hub. //! - `fp16kernels` - Enable FP16 kernels for faster vector search on CPU. @@ -56,10 +56,10 @@ //! //! LanceDB accepts the different form of database path: //! -//! - `/path/to/database` - local database on file system. +//! - `/path/to/database` - database on the local file system. //! - `s3://bucket/path/to/database` or `gs://bucket/path/to/database` - database on cloud object store -//! - `db://dbname` - Lance Cloud -//! - `db://` with a host override - remote tables in the storage root +//! - `db://dbname` - LanceDB Enterprise or LanceDB Cloud (legacy) +//! - `db://` with a host override - LanceDB Enterprise tables in the storage root //! //! You can also use [`ConnectBuilder`] to configure the connection to the database. //! diff --git a/rust/lancedb/src/materialized_view.rs b/rust/lancedb/src/materialized_view.rs index 266cdab59..fa51cbf25 100644 --- a/rust/lancedb/src/materialized_view.rs +++ b/rust/lancedb/src/materialized_view.rs @@ -171,7 +171,7 @@ pub(crate) fn physical_unnest( return Err(Error::NotSupported { message: format!( "'{name}' in FROM position is a Function; views over Function rows are \ - supported only on LanceDB Cloud and Enterprise" + supported only in LanceDB Distributed" ), }); } @@ -1464,7 +1464,7 @@ async fn prepare_with( ) -> Result { let Some(caller_native) = source.as_native() else { return Err(Error::NotSupported { - message: "materialized views are supported only on local databases".into(), + message: "this operation is only supported on LanceDB Embedded".into(), }); }; let source_namespace = source.namespace().to_vec(); @@ -1492,7 +1492,7 @@ async fn prepare_with( let resolved = Table::new(resolved, database.clone()); let Some(native) = resolved.as_native() else { return Err(Error::NotSupported { - message: "materialized views are supported only on local databases".into(), + message: "this operation is only supported on LanceDB Embedded".into(), }); }; let caller_uri = caller_native.dataset.get().await?.uri().to_string(); @@ -1665,15 +1665,15 @@ impl CreateMaterializedViewBuilder { self } - /// Enable or disable automatic refresh on Cloud and Enterprise. + /// Enable or disable automatic refresh in LanceDB Distributed. /// When omitted, the server determines whether automatic refresh is enabled. - /// Embedded databases do not support automatic refresh. + /// LanceDB Embedded does not support automatic refresh. pub fn auto_refresh_enabled(mut self, enabled: bool) -> Self { self.auto_refresh_enabled = Some(enabled); self } - /// Set a positive, finite refresh interval in seconds on Cloud and Enterprise. + /// Set a positive, finite refresh interval in seconds in LanceDB Distributed. /// When omitted, the server determines when to refresh. /// /// ```no_run @@ -1766,7 +1766,7 @@ impl CreateMaterializedViewBuilder { crate::require_experimental_functions()?; if self.auto_refresh_enabled == Some(true) || self.auto_refresh_interval_seconds.is_some() { return Err(Error::NotSupported { - message: "automatic materialized-view refresh requires Cloud or Enterprise" + message: "automatic materialized-view refresh requires LanceDB Distributed" .to_string(), }); } @@ -1825,7 +1825,7 @@ impl MaterializedView { /// The query parsed into the local refresh grammar. /// - /// Sophon may store SQL broader than the local grammar; use + /// LanceDB Enterprise may store SQL broader than the local grammar; use /// [`Self::definition_sql`] when the original SQL is sufficient. pub fn definition(&self) -> Result<&MaterializedViewDefinition> { self.parsed_definition @@ -1875,8 +1875,8 @@ pub struct RefreshMaterializedViewBuilder { } impl RefreshMaterializedViewBuilder { - /// Force a complete rebuild instead of letting the remote server choose - /// the refresh mode. Defaults to `false`. Local views always rebuild. + /// Force a complete rebuild instead of letting the server choose + /// the refresh mode. Defaults to `false`. LanceDB Embedded views always rebuild. /// /// ```no_run /// # #![recursion_limit = "256"] @@ -2015,7 +2015,7 @@ impl Connection { /// Start dropping a materialized view and return its job. /// /// This validates that the named resource is a materialized view rather - /// than an ordinary table. For remote connections the job has type `query` + /// than an ordinary table. In LanceDB Distributed the job has type `query` /// and its ID identifies the SQL query. Waiting completes once the catalog /// binding is removed; physical cleanup continues in the background. /// diff --git a/rust/lancedb/src/materialized_view/refresh.rs b/rust/lancedb/src/materialized_view/refresh.rs index 70a795eb3..9f7e3eb1f 100644 --- a/rust/lancedb/src/materialized_view/refresh.rs +++ b/rust/lancedb/src/materialized_view/refresh.rs @@ -77,7 +77,7 @@ pub(crate) async fn execute_refresh( ) -> Result { crate::require_experimental_functions()?; let native = view.as_native().ok_or_else(|| Error::NotSupported { - message: "materialized views are supported only on local tables".into(), + message: "this operation is only supported on LanceDB Embedded".into(), })?; native.dataset.ensure_mutable()?; let lock = refresh_lock(native.dataset.get().await?.uri()); @@ -199,7 +199,7 @@ pub async fn replace_materialized_view_fragments( stream: SendableRecordBatchStream, ) -> Result { let native = view.as_native().ok_or_else(|| Error::NotSupported { - message: "materialized views are supported only on local tables".into(), + message: "this operation is only supported on LanceDB Embedded".into(), })?; native.dataset.ensure_mutable()?; let lock = refresh_lock(native.dataset.get().await?.uri()); @@ -320,7 +320,7 @@ async fn open_source(view: &Table, definition: &MaterializedViewDefinition) -> R }) .await?; let native = source.as_native().ok_or_else(|| Error::NotSupported { - message: "materialized views are supported only on local tables".into(), + message: "this operation is only supported on LanceDB Embedded".into(), })?; Ok(native.dataset.get().await?.as_ref().clone()) } diff --git a/rust/lancedb/src/query.rs b/rust/lancedb/src/query.rs index 9bac51209..70684e84f 100644 --- a/rust/lancedb/src/query.rs +++ b/rust/lancedb/src/query.rs @@ -444,8 +444,8 @@ pub trait QueryBase { /// # } /// ``` /// - /// Note: Expression filters are not supported for remote/server-side queries. - /// Use [`QueryBase::only_if`] with SQL strings for remote tables. + /// Note: Expression filters are not supported for LanceDB Distributed queries. + /// Use [`QueryBase::only_if`] with SQL strings in LanceDB Distributed. /// /// Calling this multiple times combines the expressions with a logical AND /// rather than replacing the previous filter. @@ -1025,7 +1025,7 @@ impl Query { /// By default, there is no embedding model, and the input should be /// vector/slice of floats. /// NaN and infinite components are rejected with [`Error::InvalidInput`] - /// after conversion to Float32, for both local and remote tables. + /// after conversion to Float32, in both LanceDB Embedded and LanceDB Distributed. /// /// If there is only one vector column (a column whose data type is a /// fixed size list of floats) then the column does not need to be specified. @@ -1269,7 +1269,7 @@ impl VectorQuery { /// result. /// /// NaN and infinite components are rejected with [`Error::InvalidInput`] - /// after conversion to Float32, for both local and remote tables. + /// after conversion to Float32, in both LanceDB Embedded and LanceDB Distributed. pub fn add_query_vector(mut self, vector: impl IntoQueryVector) -> Result { self.request.add_query_vector(vector)?; Ok(self) diff --git a/rust/lancedb/src/remote.rs b/rust/lancedb/src/remote.rs index a6b2f0e62..5abe4dcf7 100644 --- a/rust/lancedb/src/remote.rs +++ b/rust/lancedb/src/remote.rs @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright The LanceDB Authors //! This module contains a remote client for a LanceDB server. This is used -//! to communicate with LanceDB cloud. It can also serve as an example for +//! to communicate with LanceDB Enterprise or LanceDB Cloud (legacy). It can also serve as an example for //! building client/server applications with LanceDB or as a client for some //! other custom LanceDB service. diff --git a/rust/lancedb/src/remote/client.rs b/rust/lancedb/src/remote/client.rs index bf90b1e77..ae4c1aaa5 100644 --- a/rust/lancedb/src/remote/client.rs +++ b/rust/lancedb/src/remote/client.rs @@ -83,7 +83,8 @@ const DEFAULT_MAX_BYTES_PER_REQUEST: u64 = 8 * 1024 * 1024 * 1024; /// timeout (which also covers the request-body upload) fires. const DEFAULT_MAX_REQUEST_DURATION_DIVISOR: u32 = 2; -/// Configuration for the LanceDB Cloud HTTP client. +/// Configuration for the HTTP client used to connect to LanceDB Enterprise or +/// LanceDB Cloud (legacy). #[derive(Clone)] pub struct ClientConfig { pub timeout_config: TimeoutConfig, @@ -108,7 +109,7 @@ pub struct ClientConfig { pub header_provider: Option>, /// User identifier for tracking purposes. /// - /// This is sent as the `x-lancedb-user-id` header in requests to LanceDB Cloud/Enterprise. + /// This is sent as the `x-lancedb-user-id` header in requests to LanceDB Enterprise. /// It can be set directly, or via the `LANCEDB_USER_ID` environment variable. /// Alternatively, set `LANCEDB_USER_ID_ENV_KEY` to specify another environment /// variable that contains the user ID value. diff --git a/rust/lancedb/src/remote/db.rs b/rust/lancedb/src/remote/db.rs index 394dc4af2..4f97c16e8 100644 --- a/rust/lancedb/src/remote/db.rs +++ b/rust/lancedb/src/remote/db.rs @@ -117,7 +117,7 @@ pub const OPT_REMOTE_SQL_HOST_OVERRIDE: &str = "remote_database_sql_host_overrid #[derive(Clone, Debug, Default)] pub struct RemoteDatabaseOptions { - /// The LanceDB Cloud API key + /// The LanceDB Enterprise or LanceDB Cloud (legacy) API key pub api_key: Option, /// The LanceDB Cloud region pub region: Option, @@ -187,11 +187,11 @@ impl RemoteDatabaseOptionsBuilder { } } - /// Set the LanceDB Cloud API key + /// Set the LanceDB Enterprise or LanceDB Cloud (legacy) API key /// /// # Arguments /// - /// * `api_key` - The LanceDB Cloud API key + /// * `api_key` - The API key pub fn api_key(mut self, api_key: String) -> Self { self.options.api_key = Some(api_key); self @@ -871,7 +871,7 @@ impl Database for RemoteDatabase { async fn read_consistency(&self) -> Result { Err(Error::NotSupported { - message: "Getting the read consistency of a remote database is not yet supported" + message: "Getting the read consistency is not yet supported in LanceDB Distributed" .to_string(), }) } @@ -882,7 +882,9 @@ impl Database for RemoteDatabase { ) -> Result { if request.with_no_data { return Err(Error::NotSupported { - message: "remote materialized views must be populated during creation".to_string(), + message: + "materialized views in LanceDB Distributed must be populated during creation" + .to_string(), }); } if let Some(seconds) = request.auto_refresh_interval_seconds @@ -1475,7 +1477,9 @@ impl Database for RemoteDatabase { ] { if provided { return Err(Error::NotSupported { - message: format!("{option} is not supported for remote table creation"), + message: format!( + "{option} is not supported for table creation in LanceDB Distributed" + ), }); } } @@ -1616,7 +1620,9 @@ impl Database for RemoteDatabase { ] { if provided { return Err(Error::NotSupported { - message: format!("{option} is not supported for remote table access"), + message: format!( + "{option} is not supported for table access in LanceDB Distributed" + ), }); } } @@ -2660,7 +2666,7 @@ mod tests { .execute() .await; assert!(matches!(result, Err(Error::NotSupported { message }) - if message.contains("write_options") && message.contains("remote"))); + if message.contains("write_options") && message.contains("LanceDB Distributed"))); } } @@ -2733,7 +2739,7 @@ mod tests { ] { let result = builder.execute().await; assert!(matches!(result, Err(Error::NotSupported { message }) - if message.contains(option) && message.contains("remote"))); + if message.contains(option) && message.contains("LanceDB Distributed"))); } } @@ -2751,7 +2757,7 @@ mod tests { ] { let result = builder.api_key("fake").region("us-east-1").execute().await; assert!(matches!(result, Err(Error::NotSupported { message }) - if message.contains(option) && message.contains("remote"))); + if message.contains(option) && message.contains("LanceDB Distributed"))); } } diff --git a/rust/lancedb/src/remote/oauth.rs b/rust/lancedb/src/remote/oauth.rs index c7cffa327..95d74274e 100644 --- a/rust/lancedb/src/remote/oauth.rs +++ b/rust/lancedb/src/remote/oauth.rs @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: Copyright The LanceDB Authors -//! OAuth authentication for LanceDB Cloud connections. +//! OAuth authentication for LanceDB Enterprise connections. //! //! Protocol mechanics (authorization URL and CSRF state, PKCE, token //! exchanges, refresh, device authorization and polling, standard response diff --git a/rust/lancedb/src/remote/table.rs b/rust/lancedb/src/remote/table.rs index 7be8db77c..4a7e384eb 100644 --- a/rust/lancedb/src/remote/table.rs +++ b/rust/lancedb/src/remote/table.rs @@ -544,7 +544,7 @@ impl RemoteTable { ) && !self.server_version.support_fts_document_granularity() { return Err(Error::NotSupported { - message: "FTS document granularity requires remote server version 0.6.0 or later" + message: "FTS document granularity requires LanceDB Enterprise server version 0.6.0 or later" .into(), }); } @@ -569,7 +569,7 @@ impl RemoteTable { // Warn if train=false is specified since it's not meaningful if !index.train { log::warn!( - "train=false has no effect remote tables. The index will be created empty and automatically populated in the background." + "train=false has no effect in LanceDB Distributed. The index will be created empty and automatically populated in the background." ); } @@ -623,7 +623,7 @@ impl RemoteTable { } Index::IvfHnswPq(_) => { return Err(Error::NotSupported { - message: "IVF_HNSW_PQ is not supported for remote tables. Please use IVF_HNSW_SQ instead.".into(), + message: "IVF_HNSW_PQ is not supported in LanceDB Distributed. Please use IVF_HNSW_SQ instead.".into(), }); } }; @@ -1067,7 +1067,7 @@ impl RemoteTable { QueryFilter::Datafusion(expr) => expr_to_sql_string(expr)?, QueryFilter::Substrait(_) => { return Err(Error::NotSupported { - message: "Substrait filters are not supported for remote queries" + message: "Substrait filters are not supported in LanceDB Distributed" .to_string(), }); } @@ -1117,7 +1117,7 @@ impl RemoteTable { if let Some(full_text_search) = ¶ms.full_text_search { if full_text_search.wand_factor.is_some() { return Err(Error::NotSupported { - message: "Wand factor is not supported for remote tables.".into(), + message: "Wand factor is not supported in LanceDB Distributed.".into(), }); } @@ -1128,7 +1128,7 @@ impl RemoteTable { { return Err(Error::NotSupported { message: - "FTS document granularity requires remote server version 0.6.0 or later" + "FTS document granularity requires LanceDB Enterprise server version 0.6.0 or later" .into(), }); } @@ -2760,7 +2760,7 @@ impl BaseTable for RemoteTable { if add.allow_external_blob_outside_bases { return Err(Error::NotSupported { - message: "allow_external_blob_outside_bases is only supported on local tables" + message: "allow_external_blob_outside_bases is only supported in LanceDB Embedded" .to_string(), }); } @@ -3432,7 +3432,7 @@ impl BaseTable for RemoteTable { async fn optimize(&self, _action: OptimizeAction) -> Result { self.check_mutable().await?; Err(Error::NotSupported { - message: "optimize is not supported for remote tables.".into(), + message: "optimize is not supported in LanceDB Distributed.".into(), }) } async fn add_columns( @@ -4480,7 +4480,7 @@ mod tests { .unwrap_err(); assert!(matches!(err, Error::NotSupported { .. }), "got {err:?}"); - assert!(err.to_string().contains("local tables")); + assert!(err.to_string().contains("LanceDB Embedded")); } #[tokio::test] @@ -6560,7 +6560,7 @@ mod tests { match result.unwrap_err() { Error::NotSupported { message } => assert_eq!( message, - format!("{operation} is not supported for remote tables.") + format!("{operation} is not supported in LanceDB Distributed.") ), error => panic!("expected not-supported error, got {error}"), } @@ -6588,7 +6588,7 @@ mod tests { .unwrap_err(); assert_not_supported_error( error, - "IVF_HNSW_PQ is not supported for remote tables. Please use IVF_HNSW_SQ instead.", + "IVF_HNSW_PQ is not supported in LanceDB Distributed. Please use IVF_HNSW_SQ instead.", ); } @@ -7692,10 +7692,9 @@ mod tests { panic!("legacy remote query unexpectedly succeeded") }; - assert!( - err.to_string() - .contains("document granularity requires remote server version 0.6.0 or later") - ); + assert!(err.to_string().contains( + "document granularity requires LanceDB Enterprise server version 0.6.0 or later" + )); } #[rstest] @@ -8641,12 +8640,9 @@ mod tests { .execute() .await; - assert!( - result - .unwrap_err() - .to_string() - .contains("document granularity requires remote server version 0.6.0 or later") - ); + assert!(result.unwrap_err().to_string().contains( + "document granularity requires LanceDB Enterprise server version 0.6.0 or later" + )); } #[tokio::test] diff --git a/rust/lancedb/src/sql.rs b/rust/lancedb/src/sql.rs index fee2d5d79..713a79e86 100644 --- a/rust/lancedb/src/sql.rs +++ b/rust/lancedb/src/sql.rs @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: Copyright The LanceDB Authors -//! Handles to SQL queries running on a remote database. +//! Handles to SQL queries running on a LanceDB Distributed database. use std::{fmt, sync::Arc}; diff --git a/rust/lancedb/src/table.rs b/rust/lancedb/src/table.rs index 37edd9161..6ae31fd9e 100644 --- a/rust/lancedb/src/table.rs +++ b/rust/lancedb/src/table.rs @@ -551,7 +551,7 @@ pub fn tokenize(query: &str, params: &InvertedIndexParams) -> Result Result<()>; /// Prewarm data for the table. /// - /// Currently only supported on remote tables. + /// Currently only supported in LanceDB Distributed. /// If `columns` is `None`, all columns are prewarmed. async fn prewarm_data(&self, columns: Option>) -> Result<()>; /// Get statistics about the index. @@ -817,9 +817,9 @@ pub trait BaseTable: std::fmt::Display + std::fmt::Debug + Send + Sync { ) -> Result; /// Declare computed columns, each defined by a SQL expression. /// - /// Where the declaration is planned depends on the backend: a local table - /// validates and types the expression itself, while a remote one sends the - /// expression for the server to plan. + /// Where the declaration is planned depends on the backend: a LanceDB Embedded + /// table validates and types the expression itself, while a LanceDB Distributed + /// table sends the expression for the server to plan. async fn add_computed_columns( &self, _columns: &[(String, String)], @@ -837,7 +837,7 @@ pub trait BaseTable: std::fmt::Display + std::fmt::Debug + Send + Sync { _options: computed_columns::ComputedColumnOptions, ) -> Result { Err(Error::NotSupported { - message: "Function columns are supported only on LanceDB Cloud and Enterprise".into(), + message: "Function columns are supported only in LanceDB Distributed".into(), }) } /// Fill a computed column's unfilled rows and recompute those whose @@ -846,7 +846,7 @@ pub trait BaseTable: std::fmt::Display + std::fmt::Debug + Send + Sync { /// The default returns `NotSupported`; Lance-backed tables override it. async fn refresh_column(&self, _column: &str) -> Result { Err(Error::NotSupported { - message: "computed columns are supported only on local tables".into(), + message: "this operation is only supported on LanceDB Embedded".into(), }) } /// Fill a computed column's unfilled rows and recompute those whose @@ -856,7 +856,7 @@ pub trait BaseTable: std::fmt::Display + std::fmt::Debug + Send + Sync { _column: &str, ) -> Result> { Err(Error::NotSupported { - message: "computed columns are supported only on local tables".into(), + message: "this operation is only supported on LanceDB Embedded".into(), }) } /// The per-row errors Function refreshes recorded on this table; see @@ -866,8 +866,7 @@ pub trait BaseTable: std::fmt::Display + std::fmt::Debug + Send + Sync { _request: &crate::function::FunctionErrorsRequest, ) -> Result { Err(Error::NotSupported { - message: "per-row Function errors are recorded only on LanceDB Cloud and Enterprise" - .into(), + message: "per-row Function errors are recorded only in LanceDB Distributed".into(), }) } /// Alter columns in the table. @@ -994,7 +993,7 @@ pub trait BaseTable: std::fmt::Display + std::fmt::Debug + Send + Sync { /// [`FieldMetadataUpdate::remove`] deletes a key and /// [`FieldMetadataUpdate::replace`] swaps the field's whole map. /// - /// The default returns `NotSupported`; Lance-backed and remote tables override it. + /// The default returns `NotSupported`; Lance-backed and LanceDB Distributed tables override it. async fn update_field_metadata( &self, _updates: &[FieldMetadataUpdate], @@ -1265,8 +1264,8 @@ impl Table { /// /// Native tables support both legacy blob v1 and blob v2 columns. /// Output matches `row_ids` in length and order. Null blobs are null; - /// valid empty blobs contain empty byte strings. Cloud limits individual - /// requests to 1024 row ids and 64 MiB of blob bytes; the remote client + /// valid empty blobs contain empty byte strings. LanceDB Distributed limits individual + /// requests to 1024 row ids and 64 MiB of blob bytes; the client /// splits requests and reads a single larger blob through the Range route. /// This method still materializes all bytes in memory, so prefer /// [`Self::fetch_blob_files`] for large selections. @@ -1317,7 +1316,7 @@ impl Table { /// ranges for the same blob. The output has the same length and order as /// the requests. Null blobs produce null output slots; empty ranges on /// non-null blobs produce empty byte strings. - /// Remote tables read through version-pinned [`BlobFile`] handles using + /// LanceDB Distributed tables read through version-pinned [`BlobFile`] handles using /// HTTP byte-range requests. /// /// `_rowid` values stay valid after compaction when the table has stable @@ -1576,7 +1575,7 @@ impl Table { } /// See [Table::create_index] - /// For remote tables, this allows an optional wait_timeout to poll until asynchronous indexing is complete + /// In LanceDB Distributed, this allows an optional wait_timeout to poll until asynchronous indexing is complete pub fn create_index_with_timeout( &self, columns: &[impl AsRef], @@ -1862,7 +1861,7 @@ impl Table { error_if_tagged_old_versions: Option, ) -> Result { let native = self.as_native().ok_or_else(|| Error::NotSupported { - message: "optimize is not supported on LanceDB cloud.".into(), + message: "optimize is not supported in LanceDB Distributed.".into(), })?; let prune = optimize::cleanup_old_versions_before( native, @@ -1892,7 +1891,7 @@ impl Table { /// [`freshness`](crate::table::freshness)); everything else is left as /// it is. /// - /// Local tables only: a remote refresh runs as a server job, through + /// LanceDB Embedded only: in LanceDB Distributed a refresh runs as a server job, through /// [`Table::refresh_column_async`]. /// /// ``` @@ -1915,8 +1914,8 @@ impl Table { /// wait returns the durable [`crate::function::RefreshColumnResult`] for /// both expression-backed and Function-backed columns. Invalid input /// -- an unknown column, or one that is not computed -- is reported by - /// this call rather than by the job. On local tables the job runs as an - /// in-process task; on LanceDB Cloud and Enterprise it is the server's + /// this call rather than by the job. In LanceDB Embedded the job runs as an + /// in-process task; in LanceDB Distributed it is the server's /// backfill job. /// /// ``` @@ -1942,7 +1941,7 @@ impl Table { /// capped. Filter by job or column through the request; a listing that /// hit its limit reports [`FunctionErrors::truncated`]. /// - /// LanceDB Cloud and Enterprise only, and the caller needs read access + /// LanceDB Distributed only, and the caller needs read access /// to the table, since a message carries the value that failed. /// /// ``` @@ -2293,7 +2292,7 @@ impl Table { /// Tokenize a full-text search query using the tokenizer configured on an FTS index. /// /// Model-backed tokenizers such as `jieba/*` and `lindera/*` are rebuilt in - /// the client process from index metadata. For remote tables, this means the + /// the client process from index metadata. In LanceDB Distributed, this means the /// same tokenizer model files must also exist locally, and must match the /// files the server uses: the client cannot detect a mismatch, so it may /// return tokens the server's index never produces. If the model files are @@ -2331,7 +2330,7 @@ impl Table { /// /// The column must have exactly one FTS index. Model-backed tokenizers such /// as `jieba/*` and `lindera/*` are rebuilt in the client process from - /// index metadata. For remote tables, this means the same tokenizer model + /// index metadata. In LanceDB Distributed, this means the same tokenizer model /// files must also exist locally, and must match the files the server uses /// (see [`Self::tokenize`]). pub async fn tokenize_with_column(&self, query: &str, column: &str) -> Result> { @@ -2420,7 +2419,7 @@ impl Table { /// Get the table URI (storage location) /// /// Returns the full storage location of the table (e.g., S3/GCS path). - /// For remote tables, this fetches the location from the server via describe. + /// In LanceDB Distributed, this fetches the location from the server via describe. pub async fn uri(&self) -> Result { self.inner.uri().await } @@ -2465,7 +2464,7 @@ impl Table { /// Drop an index from the table. /// - /// Note: This is not yet available in LanceDB cloud. + /// Note: This is not yet available in LanceDB Distributed. /// /// This does not delete the index from disk, it just removes it from the table. /// To delete the index, run [`Self::optimize()`] after dropping the index. @@ -2498,7 +2497,7 @@ impl Table { /// This is a hint to the database that the given columns will be accessed in /// the future and the database should prefetch the data if possible. This /// can reduce cold-start latency for subsequent queries. Currently only - /// supported on remote tables. + /// supported in LanceDB Distributed. /// /// This call initiates prewarming and returns once the request is accepted. /// It is idempotent and safe to call from multiple clients concurrently — @@ -2841,7 +2840,7 @@ impl NativeTable { /// The registry belongs to this handle, its clones and its branch handles, /// and is not stored with the table: a handle opened separately starts from /// Lance's built-ins. Set it before the handle's first LSM write; writers - /// already open keep the registry they were opened with. Local tables only, + /// already open keep the registry they were opened with. LanceDB Embedded only, /// reached through [`Table::as_native`]. /// /// ``` @@ -3695,7 +3694,7 @@ impl BaseTable for NativeTable { async fn prewarm_data(&self, _columns: Option>) -> Result<()> { Err(Error::NotSupported { - message: "prewarm_data is currently only supported on remote tables.".into(), + message: "prewarm_data is currently only supported in LanceDB Distributed.".into(), }) } @@ -4312,7 +4311,7 @@ mod tests { assert_eq!(table.name, "test") } - /// The per-row error store is a server feature; a local table says so + /// The per-row error store is a server feature; a LanceDB Embedded table says so /// rather than answering with an empty listing. #[tokio::test] async fn test_function_errors_are_remote_only() { @@ -4332,7 +4331,7 @@ mod tests { .await .unwrap_err(); assert!( - matches!(&err, Error::NotSupported { message } if message.contains("Cloud and Enterprise")), + matches!(&err, Error::NotSupported { message } if message.contains("LanceDB Distributed")), "{err:?}" ); } diff --git a/rust/lancedb/src/table/add_columns.rs b/rust/lancedb/src/table/add_columns.rs index 0f13718fd..24329d323 100644 --- a/rust/lancedb/src/table/add_columns.rs +++ b/rust/lancedb/src/table/add_columns.rs @@ -69,10 +69,10 @@ impl AddColumnsBuilder { /// renamed, retyped or dropped while a declaration reads it, since the /// expression names it. /// - /// Local declaration and refresh require the `experimental-functions` - /// Cargo feature. Remote operations do not require this feature. + /// LanceDB Embedded declaration and refresh require the `experimental-functions` + /// Cargo feature. LanceDB Distributed operations do not require this feature. /// - /// On LanceDB Cloud and Enterprise the expression is planned by the + /// In LanceDB Distributed the expression is planned by the /// server, and the refresh runs as a server job -- see /// [`Table::refresh_column_async`](super::Table::refresh_column_async). /// @@ -147,7 +147,7 @@ impl AddColumnsBuilder { /// Configure automatic refresh for every output declared in this call. /// Settings are stored with the declaration. They require computed or - /// Function columns; local tables persist them without starting a scheduler. + /// Function columns; LanceDB Embedded persists them without starting a scheduler. /// /// ``` /// # use lancedb::{Table, table::computed_columns::ComputedColumnOptions}; diff --git a/rust/lancedb/src/table/add_data.rs b/rust/lancedb/src/table/add_data.rs index 445f29a18..8c5dc4b45 100644 --- a/rust/lancedb/src/table/add_data.rs +++ b/rust/lancedb/src/table/add_data.rs @@ -152,7 +152,7 @@ impl AddDataBuilder { /// /// The row keeps a reference, so the object has to stay readable. /// [`crate::table::Table::fetch_blobs`] reads from that location. - /// Defaults to `false`. Local tables only. + /// Defaults to `false`. LanceDB Embedded only. pub fn allow_external_blob_outside_bases(mut self, allow: bool) -> Self { self.allow_external_blob_outside_bases = allow; self diff --git a/rust/lancedb/src/table/computed_columns.rs b/rust/lancedb/src/table/computed_columns.rs index 942c43d4e..09a751d7a 100644 --- a/rust/lancedb/src/table/computed_columns.rs +++ b/rust/lancedb/src/table/computed_columns.rs @@ -60,8 +60,8 @@ pub const AUTO_REFRESH_ENABLED_META_KEY: &str = "computed_column.auto_refresh_en /// Minimum interval between successful automatic refreshes, in seconds. pub const AUTO_REFRESH_INTERVAL_META_KEY: &str = "computed_column.auto_refresh_interval_seconds"; -/// Scheduling settings persisted on each computed output. Local tables store -/// these settings; automatic scheduling requires a Cloud or Enterprise server. +/// Scheduling settings persisted on each computed output. LanceDB Embedded +/// stores these settings; automatic scheduling requires LanceDB Distributed. #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] #[serde(default, deny_unknown_fields)] pub struct ComputedColumnOptions { diff --git a/rust/lancedb/src/table/refresh.rs b/rust/lancedb/src/table/refresh.rs index c5eadeeaf..a3f313ba7 100644 --- a/rust/lancedb/src/table/refresh.rs +++ b/rust/lancedb/src/table/refresh.rs @@ -368,7 +368,8 @@ fn declared_expression(dataset: &Dataset, column: &str) -> Result { match declaration.kind { ComputedColumnKind::Sql { expression } => Ok(expression), ComputedColumnKind::Function { .. } => Err(Error::NotSupported { - message: "registered Function columns are refreshed only by a remote server Job".into(), + message: "registered Function columns are refreshed only by a LanceDB Distributed job" + .into(), }), ComputedColumnKind::Unrecognized { kind } => Err(Error::NotSupported { message: format!(