mirror of
https://github.com/lancedb/lancedb.git
synced 2026-11-13 14:16:54 +00:00
7b2dfb9e361bddfbf4b3e16f2d950f377d5b5e33
3539
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
7b2dfb9e36 |
fix(python): align catalog and database connection inputs (#4983)
Align Python catalog connection inputs with database connections, warn when region is ignored, and preserve remote storage settings in opened databases. |
||
|
|
478d1d9b01 |
fix: expose comparable Function runtime identity (#4975)
Expose `FunctionVersion.runtime_digest` through Rust and Python, and add `PythonRuntimeSpec.digest` so clients can compare declared environment inputs before registering a Function. Dependency pins, environment variables, Python version, and GPU settings affect this digest; package ordering does not. Clarify that matching `source_digest` alone is insufficient for reuse. Older servers/images leave `runtime_digest` unset, which cannot establish a match. Both digests and the other registration inputs must match before reusing a version. ```python request = definition.registration_request same_source = version.source_digest == request.artifact.digest same_runtime = version.runtime_digest == request.runtime.digest ``` Add shared runtime digest fixtures and coverage for environment-only changes and catalog decoding. Local builds and tests were skipped as requested. |
||
|
|
01e9ea44aa | Bump version: 0.42.0-beta.11 → 0.42.0-beta.12 v0.42.0-beta.12 | ||
|
|
5a38066234 |
chore(deps): upgrade Lance to v15.0.0-beta.18 (#4965)
Upgrade the Rust Lance dependency, Java lance-core, and Python test dependency from beta.17 to the officially published [v15.0.0-beta.18](https://github.com/lance-format/lance/releases/tag/v15.0.0-beta.18) (`079fd77683a7acf056b0912f6ecda938e39ee120`). This provides a compatible SDK for the newer Lance source already adopted downstream. Rust registry versions and checksums are unchanged; the Python lock uses the six published beta.18 wheels. ### Compatibility The adopted release includes [Lance #10863](https://github.com/lance-format/lance/pull/10863): `FilteredReadOptionsProto.has_fragment_ids` distinguishes an explicit empty fragment selection. Older executors ignore this field, so upgrade executors before relying on the corrected empty-selection behavior. Rust callers constructing this generated struct need the new field. [Lance #10112](https://github.com/lance-format/lance/pull/10112) also replaces the internal `hamming_distance_batch` API with `hamming_distance_batch_into`. The Linux Python matrix timeout is raised from 30 to 60 minutes: the Python 3.13 cold native build and both test passes completed, but the job hit its limit during cleanup. Build profiles, test commands, and coverage are unchanged. ### Validation - Three native FRI/ANN regressions passed: deferred-compaction refined RQ, deferred index remapping, and approximate-query builder. - `cargo clippy --quiet --locked --features remote --tests --examples -- -D warnings` passed with pinned Rust 1.97.0. - Locked metadata, formatting, Python Makefile-scope Ruff checks, and `uv lock --check --offline` passed. - YAML, whitespace, end-of-file, and typo checks passed for the timeout-only workflow change. ### Publication and CI Java beta.18 is now published. After [Lance #10968](https://github.com/lance-format/lance/pull/10968) merged, the [normal publication workflow](https://github.com/lance-format/lance/actions/runs/43146352505) built all three JNI targets and published successfully; the Maven jar is available. The upstream Python publication run was cancelled after its Windows ARM job hit the one-hour timeout; six other wheels were published and are the actual artifacts recorded in this lock. Cross-platform SDK CI is still required. No performance claim is made by this dependency update. |
||
|
|
1dee9b006c |
fix(python): reject unsupported Function callables early (#4972)
Reject synchronous and asynchronous generator Functions, including class
`__call__` methods, during decoration so invalid outputs never reach
remote execution. Give actionable errors for lambdas and decorated
wrappers such as `functools.lru_cache`. Defaulted callable inputs remain
unsupported; the error now names the parameter and explains how to use
class initialization fields.
```python
@function
def double(value: float) -> float:
yield value * 2
# TypeError: generator Functions are not supported; return a value instead of
# yielding, or return a list for multiple values
```
The deprecated `@udf` alias shares the validation. Adds regression
coverage for both decorators, class methods, explicit schemas, and the
supported list-return alternative.
Fixes https://linear.app/lancedb/issue/ENT-3539
|
||
|
|
e622254108 |
fix(python): use direct lookups for table existence checks (#4974)
Table existence checks should not depend on listing every table or
searching only the first 100 names. Use a direct lookup for `name in db`
and implement `table_exists(table_id)` on synchronous local connections,
matching the remote and asynchronous APIs. Native namespace connections
use their initialized Rust connection for existence checks; custom
namespace clients retain their existing callback. Missing tables return
`False`; other lookup errors propagate.
```python
if "events" in db:
db.drop_table("events")
exists = db.table_exists(["analytics", "events"])
all_names = list(db.list_tables())
```
Clarify that `.tables` contains one page and update deprecation guidance
with safe replacements. Add regression coverage for lookups beyond the
first page, nested namespaces, native and custom namespace clients,
missing tables, permission errors, and lookups that do not list tables.
Include an unpublished draft for the table-management guide until the
new SDK support ships.
|
||
|
|
ee231aad06 |
fix(python): validate function package requirements before registration (#4971)
Function dependency typos currently reach the environment build before
failing. Validate pip requirements with
`packaging.requirements.Requirement` and conda requirements with
Rattler's MatchSpec parser when constructing a function definition,
before source packaging or registration. Errors identify the original
entry and its index.
```python
@lancedb.function(pip=["numpy", "torch>=2.0,,<3"])
def score(value: float) -> float:
return value
# ValueError: invalid pip[1] requirement 'torch>=2.0,,<3': ...
```
Preserves pip extras, markers, named references, bare archive/git URLs,
and conda channel/build specifications. The existing native extension
exposes the conda parser, so no additional Python package is required.
Adds regression coverage for invalid and supported forms, including the
deprecated `udf` alias.
|
||
|
|
42f11d13a2 |
docs: clarify Python job states and waiting behavior (#4954)
We weren’t explicit about the job states returned by the Python SDK. This documents those values and clarifies the difference between checking the current status and waiting for completion. |
||
|
|
28bbc81c3e |
fix(remote): explain unsupported optimize syntax (#4944)
This PR addresses [OSS-2913](https://linear.app/lancedb/issue/OSS-2913) ([#4845](https://github.com/lancedb/lancedb/issues/4845)) and [ENT-2909](https://linear.app/lancedb/issue/ENT-2909): `table.optimize()` on an Enterprise table exposes SQL parser errors when the deployment does not support its generated SQL. The SDK generates the statement itself, but previously propagated unsupported grammar as a generic SQL failure. Parser errors and unknown-option errors reported as `InvalidArgument` now become `NotSupported` (`NotImplementedError` in Python), retaining the original diagnostic and request ID. |
||
|
|
9a9b681aaf |
docs(python): clarify refresh result row counts (#4963)
## Summary `RefreshColumnResult` exposed the canonical refresh counters without documenting their unit. This change describes them as logical rows planned for one refresh: `rows_assigned` counts successful rows written, `rows_failed` counts rows whose computation failed, and `rows_remaining` counts planned rows neither assigned nor terminally skipped. Rows already covered by `rows_failed` are not counted again as remaining. Retry attempts and user-code calls do not change that logical-row scope. The change also documents the source and published versions and the deprecated `rows_filled` alias. The existing skip-policy example is now explicit: a refresh over 2,001 logical rows with 1,891 assigned, 110 failed, and 0 remaining uses 2,001 as the failure-rate denominator. ## Behavior Documentation only. No field names, Python or native behavior, REST wire format, dependencies, or pins change. ## Validation - `git diff --check` - `uvx ruff format --check` - `uvx ruff check` - Imported this Python source with a compatible prebuilt ABI3 extension and asserted the public class and property documentation, the affected source version, and the native extension identity. |
||
|
|
08d3f448af | Bump version: 0.42.0-beta.10 → 0.42.0-beta.11 v0.42.0-beta.11 | ||
|
|
ea1cf17f89 |
feat(python): export recorded Function job timelines (#4946)
Function jobs can now export their recorded execution timeline with
`job.export_timeline(path)` or `await job.export_timeline(path)`. The
SDK fetches a fresh Chrome Trace Event recording that opens in Perfetto,
including worker split spans and timestamped job phases. Batch counts
and latency statistics remain details rather than invented batch
intervals.
```python
job = db.open_job(job_id)
job.export_timeline("refresh.trace.json")
async_job = await async_db.open_job(job_id)
await async_job.export_timeline("refresh.trace.json")
```
The export does not wait for completion or cancel the job. Running jobs
return partial recordings. Local operations and SQL query handles remain
unsupported, and servers must support the timeline endpoint. The
destination is touched only after a successful fetch; network and
filesystem errors propagate. Rust freshness wrappers forward the
operation without changing the submitting table's read baseline.
|
||
|
|
e9774ed168 |
feat(nodejs): expose Function refresh publication intervals (#4957)
Expose `publicationIntervalRows` on TypeScript refresh options and
forward it as `publication_interval_rows`. Accept positive safe integers
and preserve whole-fragment publication when omitted.
```typescript
const job = await table.refreshColumnAsync("embedding", {
publicationIntervalRows: 10000,
});
await job.wait();
```
Document the threshold semantics and add coverage for serialization,
omission, invalid values, safe-integer boundaries, and Embedded
rejection.
Closes ENT-3755.
|
||
|
|
c1fee36045 |
chore(deps): upgrade Lance to v15.0.0-beta.17 (#4943)
Update the Rust workspace, Java dependency, and Python test dependency to [Lance v15.0.0-beta.17](https://github.com/lance-format/lance/releases/tag/v15.0.0-beta.17). This includes the FRI cache and vector-index changes required by current Sophon and retains the RaBitQ prewarm fixes. Lockfiles use the published source and test wheels without unrelated registry version bumps. The dependency dry run also exposed CI resource limits. Use the existing larger x64 runner for GNU Node and compatibility-wheel builds; allow 60 minutes for Mac Python tests, 120 minutes for the compatibility wheel, and 150 minutes for the Mac release wheel. Disable the CLI toolchain action's automatic target cache so only the subsequent downloads-only cache runs. Release optimization, the compatibility wheel's manylinux container and x86-64-v2 baseline, and test coverage stay unchanged. Validation: - Three native SDK regressions pass: refined RQ queries after deferred compaction, deferred index remapping, and ANN approximation planning. - Pinned Rust 1.97.0: `cargo clippy --quiet --locked --features remote --tests --examples -- -D warnings` passes. - Locked offline Rust metadata, Python lock validation, Ruff lint/format, and diff checks pass. The Python lock contains six published beta.17 wheels. - Repository YAML, whitespace and typo checks pass for the workflow changes. Product-source checks are reused for the subsequent CI-only commits. - At head `07033dc6`, all 65 applicable pre-review CI checks pass, including the compatibility wheel, Mac CLI, GNU Node, Mac Python tests, release wheels, and Java checks. Six checks are skipped by tag/main-only conditions or draft-only app behavior; the automated review and security checks run after the Ready transition. The upstream Java publisher succeeded and its beta.17 Maven artifact is available. Six upstream Python wheel builds/uploads succeeded; its Windows ARM job was cancelled. These checks do not establish Sophon performance or aggregate-memory acceptance. |
||
|
|
a356950bce |
feat: expose queued Function refresh status (#4959)
## Problem The existing Function `column_status` surface cannot decode the Agent scheduler's `queued` state or the `failure_threshold_reached` and `binding_revision_missing` blocked reasons. It also preserves only the latest refresh job, so a later cancellation can hide an earlier actual failure. ## Change - Adds the `queued`, `failure_threshold_reached`, and `binding_revision_missing` wire states in Rust, Python, and Node. The wire change is additive, while Rust callers must update exhaustive enum matches and public struct literals. - Adds optional `last_failure_job` alongside `last_refresh_job`. The latest cancellation and the most recent actual failure retain separate meanings. - Reuses the canonical Rust `JobFailure` and existing Python/Node `JobFailureInfo` models for nested job failure details instead of introducing a parallel status error model. - Maps the existing public `sql_job_id` field through Node's `JobFailureInfo`. - Keeps `column_status`, `column_statuses`, and `wait_fresh` as the existing API surfaces. There is no new endpoint, row-error list, durable ledger, or unknown-enum fallback. - Documents `queued` versus `running` and the separate latest-attempt and latest-failure jobs in the existing hidden freshness release draft. The new status values are additive but cross-service: `queued`, the two new blocked reasons, and `last_failure_job` require matching Agent/QN and SDK deployments before clients can rely on them. This SDK follow-up does not change the normal `7cc3904a` dependency pin or claim whole ENT-3487 completion. ## Validation The tested private source is `b19c8adbdc936c5976def6c17be47f6d5e3faf3e`, based on product commit `c9bac25ecb8b73b1bd0256bbea65c2621bcf6a94`. The final product docs commit changes generated TypeDoc only. - Rust: 2 selected tests passed, 0 failed, exit 0. The same two Rust blobs are unchanged from their tested `788ef85b` source through `c9bac25e`. - Python: the PyO3 extension built successfully, and the selected native PyO3 SDK test against a mock HTTP REST transport passed 1/0, exit 0. The test requests pinned version 42. - Node: the addon and TypeScript builds passed, Biome passed, and the selected Jest transport test passed 1/0 with 57 filtered tests. Addon SHA-256: `c888e260b61d41e79689ed2f20dd0dc98586a2377ce34f21610b06111734d426`. - Python extension SHA-256: `36c961d8a0cbd2e102a7765f2e47efb4c5af6310baa6262c8e3120407463da2b`. - TypeDoc was generated from the native `native.d.ts` produced by that Node build. A second generation produced no remaining diff. The public diff contains only product, test, and generated API documentation changes. Native runner scripts and preserved compile-failure logs remain private validation evidence. Agent/QN production mapping, mixed-version rollout, and the remaining ENT-3487 server-side work are tracked separately. |
||
|
|
7cc3904a7e |
feat: expose exact Function column freshness (#4958)
## Problem Function-backed columns need an exact `fresh`, `stale`, `never_computed`, and `failed` partition for the table version a caller is reading. The existing error listing is capped, and composing it with job and schema listings cannot prove which rows currently failed. ## Behavior - Adds a strict freshness reader beside the existing permissive planner. It distinguishes an absent certificate from legacy evidence that omits failures, and from a current certificate carrying failure coverage. - Extends the immutable freshness sidecar with per-fragment known and failed row bitmaps. Partial or `WHERE` publications cover only observed rows; untouched rows stay unknown. Deleted rows do not block classification. - Adds failure-aware whole-fragment and row-repair writers. A rejected older attempt cannot overwrite failure evidence already recorded for a newer input signature. - Adds `column_status`, `column_statuses`, and `wait_fresh` to Python and the corresponding Node methods. The client calls the server's exact status endpoint, validates the four-way partition and one-version guarantee, and preserves the complete Function version, last-job, and automatic-refresh metadata. - Adds an MDX-commented draft usage section to the Enterprise computed-column refresh guide, covering Python, Rust, and TypeScript and remaining hidden until the server integration ships. - Sends `column`, `branch`, and exact `version` selectors to the status route. A pinned handle rejects a nonempty response from any other table version; latest handles keep the existing read-freshness headers. - Retries `wait_fresh` only for HTTP 503 with `function_column_status_finalization_pending`. Existing failed rows remain visible and do not keep the wait pending; other errors propagate. - Models the shared scheduler projection, including `up_to_date`, real `blocked` states, their reason, failure streak, and effective cooldown. ## Validation This is the SDK side of ENT-3563. Sophon's failure-coverage publication and status endpoint are a separate integration; deployed end-to-end and whole-ticket acceptance remain pending. - Rust: 9 exact freshness/status tests passed, plus 1 exact latest-handle freshness-header test. The pinned transport test was extended with a wrong-version response and rerun at `ebd6649a` (1 passed). Coverage includes untouched partial rows, selected-row failure clearing, cross-generation evidence, typed and non-retried errors, `up_to_date`, blocked scheduler fields, and exact-version requests. - Python: 2 native PyO3 remote-transport tests passed together, including typed retry; one local facade test reaches the existing unsupported boundary. - Node: the NAPI addon built successfully, TypeScript and Biome passed, and the selected native remote-transport test passed 1/0, including exact-version selection and blocked scheduler metadata. - `cargo fmt`, `git diff --check`, Ruff format/lint, Python compile, Biome, and TypeScript checks passed. Validation is mapped by the relevant unchanged source rather than treated as one final-head run: the nine Rust tests ran at `e4d51fc8`, the latest-header and Python remote tests at `31e68b7d`, the local Python test and Node build at `6f213584`, and the final TypeScript/Jest delta at `4f2d5c27`. The final product tree excludes those five private EC2 runner files and adds six generated TypeDoc files plus one hidden draft usage section in the computed-column refresh guide. The Node delta corrected a private TypeScript command and reused the unchanged native addon. |
||
|
|
34e8b8087b |
fix: preserve function freshness across input-preserving writes (#4948)
Updating an unrelated column or merging rows with unchanged Function inputs rewrites fragment files, causing already computed outputs to be treated as stale. Preserve their freshness from the successful write transaction when the inputs and outputs are provably unchanged; keep changed or uncertain inputs eligible for recomputation. Mixed update/insert writes keep a separate pending-fill proof so retained outputs can be reused while inserted NULL outputs still need computation. Partial refreshes under a new Function definition discard the previous definition’s completed and pending proofs. Preservation uses a version-fenced metadata commit, and an optional preservation failure does not turn a successful data write into an error. Validation: 67 freshness tests pass, including the new partial-definition regression (confirmed failing before its fix), unrelated updates, identical/mixed merges, NULL/nested/blob inputs, dirty-state preservation, concurrency fences and sidecar retention. `cargo fmt --all` and `cargo clippy --quiet --locked --features remote --tests --examples` pass. Compatibility: `StalenessPlan` adds a public `pending_fill` field, so direct Rust struct literals must be updated. Refresh consumers must handle pending-fill admission and publication before adopting this behavior; a dependency bump alone does not complete consumer integration. End-to-end consumer validation and deployment remain separate. No latency claim is made for this SDK-only change. |
||
|
|
cf8e6d0fd4 |
feat: expose Function call concurrency limits (#4956)
## Summary Adds an optional `max_concurrency` setting to Function registration and explicit refresh: - A registered Function version can define the default maximum number of user-code calls in flight for one logical execution. - A refresh can override that default for that execution only. - The value must be a positive `u32` and is independent from `resource_budget`; it is not an account-wide quota. - Omitting the option preserves the previous request payload. Local embedded refreshes reject this Enterprise-only option. Rust, Python sync/async, PyO3, and the existing Node refresh surface forward the option. Node has no Function registration surface today, so no registration API is added there. The generated TypeDoc pages are included for the new public option. ## Validation The native-tested source covers Function version decoding, registration validation and serialization, the Flight SQL registration ticket and returned version, remote refresh forwarding, local rejection, and Node's numeric boundary before conversion. Exact stage results are Rust `1+3` plus four remote cases at `1` each; Python `14/1/49/24`; Node `57` remote and `1` local rejection. Ruff, standard repository Pyright, and Biome passed. The tested Python extension was `21aa256a970f4a16ea8253d68401d0fc573d946412e8752155dfcad63f30654d`; the tested Node addon and generated native declaration were `f6089f861981f96f8ce0f6dbef43de0907b9eeb4b63e84cdd5da14e00d6cbd30` and `4c4ceb205824075d706897c726c215dcf839880c757f0d0582d24cec5f938416`. The final 24-file diff preserves the 22 tested product/test/fixture/source-doc blobs and adds only two generated TypeDoc pages. |
||
|
|
8029428c71 |
feat: persist automatic Function refresh resource budgets (#4953)
## Depends on merged #4951 Phase 1 merged as `4d22c0ce2b6825c880c818e737b079db494b4053`, so this PR now targets `main`. It reuses the canonical `FunctionWorkerResourceBudget` introduced there rather than copying the type. For Function `add_columns` declarations, Python and Rust now persist `auto_refresh_resource_budget` in computed-column metadata and send it as `auto_refresh_resource_budget` in the remote request. CPU milliseconds and memory bytes are required positive integers. Omitting `gpu_count` is accepted as zero and the canonical outgoing JSON still contains `"gpu_count": 0`. Unknown fields, missing CPU or memory, wrong types, zero CPU or memory, negative values, and overflow are rejected. The same budget is applied to every public output binding of a multi-output Function declaration. Existing metadata is retained, and SQL-expression declarations or local execution reject the budget instead of silently ignoring it. Node is unchanged because its current `addColumns` surface only accepts SQL computed expressions and has no Function declaration path. This change does not implement fleet call concurrency limits or enforce the budget in the runtime. The Enterprise server must support the nested Function worker resource-budget contract before these values can act as execution limits. ## Validation - Python extension build passed. - Remote Function declaration and local unsupported-path rejection each passed. - Canonical metadata round-trip passed, including omitted GPU decoding to zero and explicit `gpu_count: 0` on encode. - Function multi-output remote wire test passed with `--features remote`. - Repository-scoped Python type check passed with 0 errors. - All runtime source blobs match the native-tested source. The post-native deltas are one documentation example line and an existing routing-test stub update for the new optional argument; the affected parameterized test passed 3/3 against the existing extension build. No private test runners are part of this PR. |
||
|
|
c9d176ae7e |
feat: resolve latest Function versions (#4949)
## Problem Function catalog lookup required an exact version string even though callers commonly need the latest currently visible immutable revision. On the current SDK, resolving that version required an out-of-band catalog query before calling `get_function`. ## Change - Make Python `get_function(name)` default to latest while accepting `int` or `str` for exact lookup. - Normalize integer versions to their decimal string form and reject `bool` explicitly. Existing string validation and errors remain unchanged. - Thread `None` through the rebuilt PyO3 binding and route it to the new Rust `Connection::get_function_latest`. - Resolve latest through the existing catalog `DESCRIBE FUNCTION` path without `WITH (version = ...)`. The returned value is one exact immutable version, not a mutable alias. - Preserve the existing Rust exact-version API. ## Validation On the designated EC2 host with the rebuilt extension: - `test_local_function_catalog_operations_are_not_supported`: **1 passed**. This crosses the Python connection, rebuilt PyO3, and embedded Rust `NotSupported` boundary with the omitted-version call. - Async and sync catalog-path tests: **2 passed**, 117 deselected. - Remote SQL Function creation/description integration test: **1 passed**. - An earlier Rust invocation with the wrong module path matched **0 tests**; it is retained as harness evidence and is not counted as a pass. ## Scope This is the Function lookup SDK slice. It does not include the separate atomic rebind/publication server work tracked under ENT-3418. |
||
|
|
1e5b6deee3 |
fix(python): support legacy blob query bytes (#4947)
## Summary - Let local plain queries over row-addressable legacy v1 and v2 blob columns use `blob_mode="bytes"` without importing `pylance` through pandas, batch, or Arrow conversion. - Preserve aliases, filters, ordering, limits, null and empty payloads, empty result schemas, and the caller's `_rowid` choice. - Build the hidden row-id query separately so reusing an async builder for lazy reads or non-blob projections cannot retain an automatic `_rowid`. - Keep byte reads closed for blobs inside lists, remote or namespace pushdown, and query shapes whose result rows cannot be matched back to the source. Blob v2 lazy auto-row-id behavior is unchanged. Fixes #4645 ## Validation - 26 focused Python tests passed with the test subprocess blocking all `lance` imports. The persisted fixture writes and reopens a storage-v2.1 table, then covers sync and async pandas, batches, and Arrow conversion plus async builder reuse. - The existing unsupported vector and hybrid reranker regressions now assert the current eligibility diagnostic, and the legacy table-level Arrow regression now asserts successful bytes, schema, values, and hidden row IDs. Both focused tests passed. - The runtime receipt records no installed `pylance` distribution and no importable `lance` module. The Python-only change was verified with an existing compatible 0.42.0b9 extension; the relevant query and fetch APIs are unchanged between that source and this 0.42.0b10 base. - Ruff format and lint pass for every changed Python file. |
||
|
|
4d22c0ce2b |
feat: expose Function refresh resource budgets in SDKs (#4951)
## Summary - Add the canonical Rust `FunctionWorkerResourceBudget` and `RefreshColumnOptions::resource_budget()` for explicit Enterprise Function refreshes. - Forward the nested budget through Python sync/async, PyO3, Rust remote requests, Node NAPI, and TypeScript. - Require positive CPU and memory values; normalize an omitted nested GPU count to numeric zero; reject the nested budget when combined with the top-level `gpu_count` shorthand. - Reject `resource_budget` on LanceDB Embedded refresh paths instead of silently ignoring it. - Document the Rust, Python, and TypeScript APIs, including that SQL servers currently require all three budget fields. The Rust, Python, and TypeScript additions use `cpu_millis` / `cpuMillis`, `memory_bytes` / `memoryBytes`, and `gpu_count` / `gpuCount`. The top-level GPU shorthand keeps its existing behavior and remains mutually exclusive with the complete nested budget. ## Scope and compatibility This change configures only the explicit refresh call. It does not configure `add_columns` automatic refresh and does not introduce a fleet-wide call-cap interface. A LanceDB Enterprise server must expose the nested `resource_budget` backfill contract. LanceDB Embedded continues to support its existing expression refresh defaults and rejects the new complete budget explicitly. ## Validation Validated against the final signed product source: - Rust: resource-budget remote serialization test `2 passed`; validation test `1 passed`. - Python: actual PyO3 build; remote-request matrix `22 passed`; invalid-option matrix `20 passed`; local rejection `22 passed`; Ruff check and format clean. - Repository-standard Pyright entry point: `0 errors`, within the repository's configured include set. - Node: native build and Biome lint passed; the existing remote-request test `1 passed`, including fractional, negative, overflow, NaN, and infinity nested GPU cases; the existing local-rejection test `1 passed`. - TypeDoc generation and generated-document cleanliness passed. - The native-tested product source differs from this head only in two semantically equivalent Node range checks required by Clippy. Current CI compiles and lints the final blobs. No dependency or lockfile changes are included. |
||
|
|
d44f768920 |
docs: add generated agent prompt catalog section (UAX-192) (#4945)
Add an automated prompt catalog section to the agentic skills page. The combined docs build fills its insertion marker from the evaluation source, avoiding a manually maintained prompt list. Keep the evaluation context and fixture guidance in this page so docs reviewers can edit it independently of the generator. Existing workflow examples remain in place. Part of UAX-192. Depends on https://github.com/lancedb/docs/pull/434; merge that docs pipeline change first. Validation: combined assembly and Mintlify validation pass. |
||
|
|
481e82293e |
fix(python): explain explicit blob reads and subset copies (#4940)
Unsupported remote blob materialization errors now point to row-ID selection, fetch_blobs and fetch_blob_files. Document descriptor structs, fetched bytes and Function BlobReader inputs, and show a bounded subset-copy recipe that keeps the source unchanged between selection and fetching. Adds guidance assertions and copy coverage preserving payloads, empty blobs and nulls. No new blob materialization API is introduced. Formatting applied; no local builds or tests were run. CI will execute the regression coverage. |
||
|
|
3bfa023375 |
fix(python): bound Job and AsyncJob payload previews (#4939)
Printing a Job or a bound status method could dump hundreds of lines of serialized Function initialization. Bound nested payload previews in both sync and async handles while preserving cached identity, state, failure and result information. Full spec/result values remain available through their properties, with no additional backend calls. Adds regression coverage for large payloads, bound method display, unobserved handles and completed local jobs. The broader method/property API design remains separate. Formatting applied; no local builds or tests were run. CI will execute the regression coverage. |
||
|
|
faa5987b33 |
fix(python): name unsupported Function globals in capture errors (#4938)
Function source packaging rejected unsupported global values without identifying the variable or explaining the supported captures. Include the global name even for a nested tuple failure, describe the supported literal values and remedy, and document the capture boundary. Adds function/class regression cases for Arrow types, nested tuples, dictionaries and non-finite floats, plus a supported nested literal control. New serialization support remains separate. Formatting applied; no local builds or tests were run. CI will execute the regression coverage. |
||
|
|
f7648d4a22 | feat(python): expose the ZoneMap scalar index (#4816) | ||
|
|
c0bd83ef29 |
feat(sql): expose durable job ids on query handles (#4941)
Expose the durable SQL registry id separately from the connection-scoped query UUID. Rust and Python query handles and descriptions expose optional `job_id`; result readers preserve it in schema metadata under `x-lancedb-sql-job-id`, without adding business columns. Clients can reopen that id with `open_job`. Poll success and failure metadata update the same handle. A failure before the first successful poll retains its job id and original structured error. The cancellation documentation distinguishes the Flight waiter from `cancel_job(job_id)`. Validation on the designated EC2: the two focused error interoperability tests and Ruff passed on `a8798e81`; delivery has the identical tree. The preceding 51 Rust SQL tests and earlier 31 native Python SQL tests are reused for unchanged coverage. Matching-runtime independent acceptance remains pending. Companion server change: https://github.com/lancedb/sophon/pull/10049. Refs ENT-3562. |
||
|
|
3851938b6e | Bump version: 0.42.0-beta.9 → 0.42.0-beta.10 v0.42.0-beta.10 | ||
|
|
e928e374d0 |
chore: update lance dependency to v15.0.0-beta.16 (#4935)
Update the Rust workspace, Java lance-core, and Python test dependency to [Lance v15.0.0-beta.16](https://github.com/lance-format/lance/releases/tag/v15.0.0-beta.16). Synchronize `python/uv.lock` with the published beta.16 wheels for Linux, macOS, and Windows. Run the native Linux x64 wheel build on an eight-core runner, matching the existing ARM build allocation, after its optimized build repeatedly exceeded the job deadline on the standard runner. The dependency update passed Clippy, formatting, and CI-script checks; the Python lockfile refresh/check passes. Fresh CI is running for the runner adjustment. Java dependency-resolution failures caused solely by publication lag are accepted for this upgrade. --------- Co-authored-by: Jack Ye <yezhaoqin@gmail.com> |
||
|
|
13e4cf7e58 |
feat: expose Function publication intervals in refresh options (#4928)
Python refresh APIs currently reject `publication_interval_rows`, so callers cannot request incremental Function output publication through the SDK. Add the optional typed parameter through the sync/async Python APIs, PyO3, and Rust `RefreshColumnOptions`, and serialize it as a top-level Enterprise refresh option. An omitted value preserves the existing wire request and whole-fragment default. Positive values set a publication threshold; zero and negative Python values fail before a request is sent. Embedded refreshes reject the Enterprise-only option. Documentation describes a threshold rather than an exact number of rows per publication. Validation on the designated development host: - A matching baseline build reproduced the missing public keyword argument in both sync and async submission tests. - The updated PyO3 build passed 54 focused Python tests; Rust payload, invalid-option, and default-wire tests each passed. Rust formatting and Python Ruff checks passed. - The single signed delivery commit differs from that tested implementation only in a Rustdoc correction describing Embedded rejection; formatting passed again. No dependency pins or lockfiles changed. The matching SDK is prepared for the separate server validation of failure/cancellation retention and missing-only refill. Those end-to-end results are still pending and are not implied by these SDK tests. Refs [ENT-3733](https://linear.app/lancedb/issue/ENT-3733). |
||
|
|
0a5c36c1e2 |
feat: plan computed columns against the session's DataFusion functions (#4924)
A computed column's expression is planned with Lance's default planner, so a function the embedder registers with DataFusion can't be declared, and the declared field drops the return-field metadata a function attaches, such as a logical type. Every site that plans a declaration (declare, validate, refresh, schema changes, view and table creation) now uses the DataFusion session the table's lance session carries, when there is one. The declared field keeps the expression's return-field metadata, without schema declarations such as a primary key. |
||
|
|
d8957238bf | fix(remote): stream query responses instead of buffering them (#4929) | ||
|
|
794fa023cd |
feat: add materialized view refresh resource budgets (#4902)
Expose aggregate CPU, memory, and GPU budgets plus GPU-class placement
on materialized-view refreshes in Python and Rust. Forward options
through SQL and reject invalid or unsupported Embedded requests instead
of silently dropping constraints.
```python
job = view.refresh_async(
cpu_millis=8000,
memory_bytes=16 * 1024**3,
gpu_count=2,
gpu_class="h100",
)
job.wait()
```
```sql
REFRESH MATERIALIZED VIEW curated_training_set
WITH (cpu_millis = 8000, memory_bytes = 17179869184,
gpu_count = 2, gpu_class = 'h100');
```
The same options apply to blocking refreshes, async Python connections,
and the Rust refresh builder. CPU/memory budgets require all three
resource fields; GPU-only caps and class-only placement are also
supported. These are execution-wide caps and require a supporting
Enterprise server with an isolated execution backend. A cap does not
increase refresh parallelism; current MV refreshes use at most one GPU.
Updates API documentation and SQL reference, with Python sync/async and
Rust remote-submission regression coverage. Formatting and Python lint
pass; local builds and tests are intentionally skipped.
The Linux CI build and example steps explicitly select the LanceDB
package, matching the feature-test step. This avoids rebuilding and
retaining a second dependency graph after a workspace-wide build, which
exhausted runner disk space on both this branch and main.
Related: [ENT-3386](https://linear.app/lancedb/issue/ENT-3386)
|
||
|
|
1eeb200705 |
chore: update lance dependency to v15.0.0-beta.15 (#4926)
Update Rust and Java Lance dependencies to [v15.0.0-beta.15](https://github.com/lance-format/lance/releases/tag/v15.0.0-beta.15), pin Python tests to published pylance 15.0.0b15, and refresh both lockfiles; no compatibility fixes were needed. Validation passed: workspace Clippy with all features/tests and warnings denied, cargo fmt, uv lock --check, and all 35 CI-script tests. The [upstream wheel workflow](https://github.com/lance-format/lance/actions/runs/42669437482) canceled Windows ARM64 and manylinux_2_28 x86_64 builds after an hour, so the lockfile contains the five published variants (Linux x86_64 remains covered by manylinux2014); Windows ARM64 is unavailable until upstream publishes its wheel and the lockfile is refreshed. |
||
|
|
546a28ad2c | feat: support remote compaction tuning and table inheritance (#4886) | ||
|
|
94f366a11a |
docs: show the Python filtered refresh next to the SQL form (#4923)
Adds Python where= examples next to the SQL ones. Also fixes two examples that fail: - Date filters now use date '2026-01-01'. A bare string fails on DATE and TIMESTAMP columns (see [Dates, Timestamps, Decimals](https://docs.lancedb.com/search/filtering#dates-timestamps-decimals)). - The first example reads results with table.search().to_arrow(), because table.to_arrow() raises on Enterprise. where= needs lancedb 0.42.0 or later. |
||
|
|
1157a0709d | Bump version: 0.42.0-beta.8 → 0.42.0-beta.9 v0.42.0-beta.9 | ||
|
|
bd8cbfd4f2 |
chore: update lance dependency to v15.0.0-beta.14 (#4909)
Update the Rust workspace Lance crates and Python test dependency to [Lance v15.0.0-beta.14](https://github.com/lance-format/lance/releases/tag/v15.0.0-beta.14), which includes JSON cache reuse across request stores and stable-row-ID JSON index support. The Python lock contains all seven published wheels. The independent Java module retains beta.8, as in the previous beta.13 update; its separate beta.14 publisher repair is outside this Rust consumer upgrade. Preserve all CI coverage while reclaiming completed workspace lancedb artifacts before the package-level feature-test build, which otherwise exhausted the Linux runner disk. Give only the Linux ARM64 release-wheel job two hours after its one-hour timeout, retaining the same runner, fat-LTO release profile and build flags. Validation: 2,280 Rust tests passed (79 existing ignores), strict workspace/all-feature Clippy, Rust formatting, and remote example checks passed on unchanged Rust source and dependency lock. Python dependency guards, lock validation, locked sync, and the published macOS wheel import passed. The new Windows ARM64 wheel was downloaded and its SHA-256 verified. Workflow YAML/shell checks and independent review passed. Root Python Ruff/format checks still fail on unchanged documentation examples; no suppressions or unrelated cleanup were added. The CI repairs require a complete new run before readiness. This dependency update does not establish corrected Sophon performance; downstream native acceptance and the paired S3 replay remain separate. |
||
|
|
bff93ff314 | Bump version: 0.42.0-beta.7 → 0.42.0-beta.8 v0.42.0-beta.8 | ||
|
|
1b3b2c2da9 |
chore: update lance dependency to v15.0.0-beta.13 (#4899)
Update the Rust workspace Lance dependencies to [v15.0.0-beta.13](https://github.com/lance-format/lance/releases/tag/v15.0.0-beta.13), synchronize the Python test dependency to published pylance 15.0.0b13, and refresh both lockfiles; no compatibility fixes were needed. The Java SDK stays on `lance-core` 15.0.0-beta.8, as in the beta.9 and beta.10 updates: Maven Central has no `lance-core` artifact for 15.0.0-beta.9 through beta.13. Validation passed: workspace Clippy with all features and warnings denied, Cargo formatting, Python lockfile checks, and all 35 CI-script tests. Repository-wide Ruff reports 163 diagnostics, all verified identical on unchanged HEAD; unrelated formatter changes were reverted. --------- Co-authored-by: Vivek <vbharathan2008@gmail.com> |
||
|
|
e2501b0dab |
docs: update example names (#4887)
Use neutral placeholder names and values in a few code examples in the docs and Python docstrings. Text-only; no behavior change. --- _Generated by [Claude Code](https://claude.ai/code/session_019iqZdtD3ZMnvTMeoNsULgX)_ --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
96328f6e08 |
fix(node): upgrade transformers.js to 4.3.2 to pick up patched sharp (#4885)
## Summary
`@lancedb/lancedb` pins the optional dependency
`@huggingface/transformers` at 3.0.2, which requires `sharp ^0.33.5`.
Every npm install of LanceDB therefore pulled in a sharp version with
critical advisories (GHSA-wq5f-xc86-pv6w, GHSA-rgj7-g3m4-5g8c). No 3.x
release of transformers allows a patched sharp, so this upgrades to
4.3.2, which requires `sharp ^0.35.4`. A fresh install resolves that
range to 0.35.5, the first release that fixes both advisories.
- `nodejs/package.json`: `@huggingface/transformers` 3.0.2 → 4.3.2.
- `nodejs/pnpm-workspace.yaml`: remove the `sharp: ^0.35.4` override. It
only covered our own install, not consumers, and transformers now
requires that range itself.
- `nodejs/examples`: transformers 3.0.2 → 4.3.2, sharp 0.33.5 → 0.35.5.
- Both lockfiles resolve sharp to 0.35.5; `pnpm audit` reports no sharp
advisories in either.
`TransformersEmbeddingFunction` needed no code changes. The transformers
types are only used in private fields, so the published typings don't
change.
`docs/web-tests/ts` and `docs/web-tests/blob-v2/ts` are left alone: they
resolve transformers through a published `@lancedb/lancedb`, so they
pick this up after a release.
## Evidence
Embeddings from the built-in `huggingface` embedding function (default
`Xenova/all-MiniLM-L6-v2`) on 4.3.2, compared with the same mean pooling
on 3.0.2, for three sentences:
```
transformers 4.3.2: 3 x 384
text 0: max|diff|=6.62e-07 cosine=1.00000000
text 1: max|diff|=6.26e-07 cosine=1.00000000
text 2: max|diff|=7.33e-07 cosine=1.00000000
```
End to end through a table, `search("a feline sat down")` returns `["The
cat sat on the mat.", "A dog barked at the mailman."]`.
## Merge Risk
**Door:** Two-way. A revert restores the 3.0.2 pin.
**Blast Radius:** Node `huggingface` embedding function, and install
footprint of the optional dependency (onnxruntime-node 1.19.2 → 1.30.0,
which still downloads the CUDA provider on Linux x64 by default, as
1.19.2 did).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
||
|
|
003d5e522f |
docs: fix Rust example download links (#4896)
The Rust example downloads in the ingestion, search, reranking and SQL guides point to `/static/code/*.zip` URLs that return HTTP 404 on the published docs site. Replace all 15 references across 13 pages with public GitHub downloads pinned to commit `2af85bea8999c8cd23ec01ff62ba110c54652c10`. The three archives already exist in this repository. Pinning their URLs preserves the exact source, dependency manifests and lockfiles used by the existing `cargo run --locked` instructions. Only link destinations change. Validation: - All three public download URLs return HTTP 200 with ZIP content. Downloaded bytes match the repository archives and the deployed docs source archives exactly, and ZIP integrity checks pass. - Verified that the diff contains exactly 15 URL replacements in 13 pages. No example code, run instructions, manifests or lockfiles changed. - `git diff --check` passes. - `mint broken-links` reports the same 16 existing missing internal links on both the unchanged `main` baseline and this branch. - `mint validate` reports four existing missing snippet exports (`RsExampleBody` and `RsExampleTail` in the reranking and vector-search pages); the unchanged baseline has the same warnings. The combined docs build and internal-link check pass with the equivalent download-link fix. |
||
|
|
2af85bea89 |
feat: expose the remaining refresh options on the SDKs (#4890)
The server's backfill request takes a row filter, failure limits, per-call timeouts and worker sizing, and SQL exposes all of them through `REFRESH COLUMN ... WHERE ... WITH (...)`, but the typed SDKs could send only batch_size, GPU placement and the retry and error policies. Anyone needing a filtered refresh or a bounded skip policy had to drop to SQL. This adds `where`, `max_failed_fraction`, `max_failed_rows`, `row_timeout_seconds`, `init_timeout_seconds`, `num_workers` and `max_executor_processes_per_worker` to Python, Rust and Node, passed through unchanged. `RefreshColumnOptions` now serializes straight into the request body, so the three SDKs share one producer. Node gets a `RefreshColumnOptions` object, which also carries the options it lacked before. A LanceDB Embedded refresh rejects every option other than batch_size and GPU placement, naming the option. |
||
|
|
d379bbb722 |
chore(deps): bump the rust-minor-patch group across 1 directory with 6 updates (#4798)
Bumps the rust-minor-patch group with 6 updates in the / directory: | Package | From | To | | --- | --- | --- | | [tonic](https://github.com/grpc/grpc-rust) | `0.14.6` | `0.14.9` | | [clap](https://github.com/clap-rs/clap) | `4.6.1` | `4.6.7` | | [unicode-width](https://github.com/unicode-rs/unicode-width) | `0.2.2` | `0.2.3` | | [tokio-stream](https://github.com/tokio-rs/tokio) | `0.1.18` | `0.1.19` | | [napi](https://github.com/napi-rs/napi-rs) | `3.15.0` | `3.16.0` | | [napi-derive](https://github.com/napi-rs/napi-rs) | `3.6.13` | `3.7.0` | Updates `tonic` from 0.14.6 to 0.14.9 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/grpc/grpc-rust/releases">tonic's releases</a>.</em></p> <blockquote> <h2>tonic-build-v0.14.9</h2> <h3>Fixed</h3> <ul> <li>fix/silence all clippy warnings (<a href="https://redirect.github.com/grpc/grpc-rust/pull/2807">#2807</a>)</li> </ul> <h3>Other</h3> <ul> <li>fix changelog duplicate and update repository URLs (<a href="https://redirect.github.com/grpc/grpc-rust/pull/2943">#2943</a>)</li> <li>License update (<a href="https://redirect.github.com/grpc/grpc-rust/pull/2749">#2749</a>)</li> </ul> <h2>tonic-health-v0.14.9</h2> <h3>Other</h3> <ul> <li>fix changelog duplicate and update repository URLs (<a href="https://redirect.github.com/grpc/grpc-rust/pull/2943">#2943</a>)</li> <li>License update (<a href="https://redirect.github.com/grpc/grpc-rust/pull/2749">#2749</a>)</li> </ul> <h2>tonic-prost-build-v0.14.9</h2> <h3>Fixed</h3> <ul> <li>fix/silence all clippy warnings (<a href="https://redirect.github.com/grpc/grpc-rust/pull/2807">#2807</a>)</li> </ul> <h3>Other</h3> <ul> <li>fix changelog duplicate and update repository URLs (<a href="https://redirect.github.com/grpc/grpc-rust/pull/2943">#2943</a>)</li> <li>License update (<a href="https://redirect.github.com/grpc/grpc-rust/pull/2749">#2749</a>)</li> </ul> <h2>tonic-prost-v0.14.9</h2> <h3>Fixed</h3> <ul> <li>fix/silence all clippy warnings (<a href="https://redirect.github.com/grpc/grpc-rust/pull/2807">#2807</a>)</li> </ul> <h3>Other</h3> <ul> <li>fix changelog duplicate and update repository URLs (<a href="https://redirect.github.com/grpc/grpc-rust/pull/2943">#2943</a>)</li> <li>relax codec Default bounds (<a href="https://redirect.github.com/grpc/grpc-rust/pull/2681">#2681</a>)</li> <li>License update (<a href="https://redirect.github.com/grpc/grpc-rust/pull/2749">#2749</a>)</li> </ul> <h2>tonic-reflection-v0.14.9</h2> <h3>Fixed</h3> <ul> <li><em>(reflection)</em> preserve custom options in served descriptors (<a href="https://redirect.github.com/grpc/grpc-rust/pull/2730">#2730</a>)</li> </ul> <h3>Other</h3> <ul> <li>fix changelog duplicate and update repository URLs (<a href="https://redirect.github.com/grpc/grpc-rust/pull/2943">#2943</a>)</li> <li>enable missing feature for test build (<a href="https://redirect.github.com/grpc/grpc-rust/pull/2820">#2820</a>)</li> <li>License update (<a href="https://redirect.github.com/grpc/grpc-rust/pull/2749">#2749</a>)</li> </ul> <h2>tonic-types-v0.14.9</h2> <h3>Fixed</h3> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/grpc/grpc-rust/commit/4c0f455c264fe2ec9f9ab5d0cc7fd2824d5daf70"><code>4c0f455</code></a> chore: release v0.14.9 (<a href="https://redirect.github.com/grpc/grpc-rust/issues/2979">#2979</a>)</li> <li><a href="https://github.com/grpc/grpc-rust/commit/4ee04836ba1aa703521e9b7bde5611fa54a72d11"><code>4ee0483</code></a> fix(server): set a timer on HTTP/1 connections so hyper's header read timeout...</li> <li><a href="https://github.com/grpc/grpc-rust/commit/a47b6086970b1bbcf9596543dd7f42bf6dec14b3"><code>a47b608</code></a> feat(transport): expose h2 reset stream settings on Endpoint (<a href="https://redirect.github.com/grpc/grpc-rust/issues/2972">#2972</a>)</li> <li><a href="https://github.com/grpc/grpc-rust/commit/349166ede3a2b3a9f541da3dd292f72b76ef539a"><code>349166e</code></a> grpc/load_balancing: Add address-checked subchannel helpers to TestEnv. (<a href="https://redirect.github.com/grpc/grpc-rust/issues/2938">#2938</a>)</li> <li><a href="https://github.com/grpc/grpc-rust/commit/78a8f2dc7760ad29a4113ff49e2a92e14add49be"><code>78a8f2d</code></a> feat(tonic-xds): expose ADS keepalive knob in config (<a href="https://redirect.github.com/grpc/grpc-rust/issues/2973">#2973</a>)</li> <li><a href="https://github.com/grpc/grpc-rust/commit/954d6d7099f2ea71692f4e684430e81e45c3cc78"><code>954d6d7</code></a> xds-client: align ADS keepalive defaults with other gRPC languages (<a href="https://redirect.github.com/grpc/grpc-rust/issues/2970">#2970</a>)</li> <li><a href="https://github.com/grpc/grpc-rust/commit/4b61ef94ac94ce76714e9409a963a97a82257de2"><code>4b61ef9</code></a> xds-client: add grpc crate transport implementation (<a href="https://redirect.github.com/grpc/grpc-rust/issues/2920">#2920</a>)</li> <li><a href="https://github.com/grpc/grpc-rust/commit/541379959bf197057a7c04eeca7f1d976f5ba7c6"><code>5413799</code></a> chore: release v0.14.8 (<a href="https://redirect.github.com/grpc/grpc-rust/issues/2966">#2966</a>)</li> <li><a href="https://github.com/grpc/grpc-rust/commit/b8282b95eb6baeb85cce88cdd7940033fba8ccf7"><code>b8282b9</code></a> fix(tonic-web): fix dropped trailers in combined streaming call. (<a href="https://redirect.github.com/grpc/grpc-rust/issues/2474">#2474</a>)</li> <li><a href="https://github.com/grpc/grpc-rust/commit/818532da3abfa6068b0855f483e3c627d9e14640"><code>818532d</code></a> chore: release v0.14.7 (<a href="https://redirect.github.com/grpc/grpc-rust/issues/2800">#2800</a>)</li> <li>Additional commits viewable in <a href="https://github.com/grpc/grpc-rust/compare/tonic-v0.14.6...tonic-v0.14.9">compare view</a></li> </ul> </details> <br /> Updates `clap` from 4.6.1 to 4.6.7 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/clap-rs/clap/releases">clap's releases</a>.</em></p> <blockquote> <h2>v4.6.7</h2> <h2>[4.6.7] - 2026-09-14</h2> <h3>Features</h3> <ul> <li><em>(derive)</em> Add <code>#[command(defer = <bool>)]</code> attribute to opt-in to lazy initialisation of subcommands</li> </ul> <h2>v4.6.6</h2> <h2>[4.6.6] - 2026-08-06</h2> <h3>Features</h3> <ul> <li>Add <code>Command::get_overridden_usage</code></li> </ul> <h2>v4.6.5</h2> <h2>[4.6.5] - 2026-07-31</h2> <h3>Fixes</h3> <ul> <li><em>(help)</em> Correctly mark which <code>value_names</code> are optional with <code>num_args</code></li> </ul> <h2>v4.6.4</h2> <h2>[4.6.4] - 2026-07-21</h2> <h3>Internal</h3> <ul> <li>Update to syn v3</li> </ul> <h2>v4.6.3</h2> <h2>[4.6.3] - 2026-07-20</h2> <h3>Fixes</h3> <ul> <li><em>(derive)</em> Allow <code>"literal".function()</code> as attribute values</li> </ul> <h2>v4.6.2</h2> <h2>[4.6.2] - 2026-07-15</h2> <h3>Fixes</h3> <ul> <li><em>(help)</em> Say <code>alias</code> when there is only one</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/clap-rs/clap/blob/main/CHANGELOG.md">clap's changelog</a>.</em></p> <blockquote> <h2>[4.6.7] - 2026-09-14</h2> <h3>Features</h3> <ul> <li><em>(derive)</em> Add <code>#[command(defer = <bool>)]</code> attribute to opt-in to lazy initialisation of subcommands</li> </ul> <h2>[4.6.6] - 2026-08-06</h2> <h3>Features</h3> <ul> <li>Add <code>Command::get_overridden_usage</code></li> </ul> <h2>[4.6.5] - 2026-07-31</h2> <h3>Fixes</h3> <ul> <li><em>(help)</em> Correctly mark which <code>value_names</code> are optional with <code>num_args</code></li> </ul> <h2>[4.6.4] - 2026-07-21</h2> <h3>Internal</h3> <ul> <li>Update to syn v3</li> </ul> <h2>[4.6.3] - 2026-07-20</h2> <h3>Fixes</h3> <ul> <li><em>(derive)</em> Allow <code>"literal".function()</code> as attribute values</li> </ul> <h2>[4.6.2] - 2026-07-15</h2> <h3>Fixes</h3> <ul> <li><em>(help)</em> Say <code>alias</code> when there is only one</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/clap-rs/clap/commit/d3e59a9ab214910b9dad02921b7ef42c6400de9b"><code>d3e59a9</code></a> chore: Release</li> <li><a href="https://github.com/clap-rs/clap/commit/d997f878c484e02b2935d32a7b67afe990e91227"><code>d997f87</code></a> docs: Update changelog</li> <li><a href="https://github.com/clap-rs/clap/commit/fb6058cc38cf6f4b07b8db89c850fc80e059e222"><code>fb6058c</code></a> Merge pull request <a href="https://redirect.github.com/clap-rs/clap/issues/6409">#6409</a> from heaths/pwsh-support</li> <li><a href="https://github.com/clap-rs/clap/commit/2310870f7a9fe4c39f5bb5620261a06ac9aaa0b1"><code>2310870</code></a> test(complete): Add tests for completer_for_path</li> <li><a href="https://github.com/clap-rs/clap/commit/5967c17393a09f90112cdc5b2c20a1383f0bd8e4"><code>5967c17</code></a> refactor(complete): Move shell detection to Shells</li> <li><a href="https://github.com/clap-rs/clap/commit/594602bb29f374e49da5029df63e5c740c723ad0"><code>594602b</code></a> fix(complete): Detect pwsh for PowerShell</li> <li><a href="https://github.com/clap-rs/clap/commit/3a4f2d031b5110aaaac40f1cb1d6c0b8ff619df8"><code>3a4f2d0</code></a> Merge pull request <a href="https://redirect.github.com/clap-rs/clap/issues/6427">#6427</a> from clap-rs/renovate/shlex-2.x</li> <li><a href="https://github.com/clap-rs/clap/commit/67ebaed4ac95a83d5d7cc22d64ee0fc162ae1db3"><code>67ebaed</code></a> Merge pull request <a href="https://redirect.github.com/clap-rs/clap/issues/6426">#6426</a> from clap-rs/renovate/actions-checkout-7.x</li> <li><a href="https://github.com/clap-rs/clap/commit/c968b136d0e6f560c08b06a844a20f2798a00096"><code>c968b13</code></a> chore(deps): Update Rust crate shlex to v2</li> <li><a href="https://github.com/clap-rs/clap/commit/8f247cbf58c582a755ee4dbe62a2390d93b9f8eb"><code>8f247cb</code></a> chore(deps): Update actions/checkout action to v7</li> <li>Additional commits viewable in <a href="https://github.com/clap-rs/clap/compare/clap_complete-v4.6.1...clap_complete-v4.6.7">compare view</a></li> </ul> </details> <br /> Updates `unicode-width` from 0.2.2 to 0.2.3 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/unicode-rs/unicode-width/commit/f8c8b20d0ef0102dc4c136bcd5a1b39d2aef8a69"><code>f8c8b20</code></a> Publish 0.2.3 (<a href="https://redirect.github.com/unicode-rs/unicode-width/issues/100">#100</a>)</li> <li><a href="https://github.com/unicode-rs/unicode-width/commit/5180748ec0cacabfad0478996e9a89a612274e8f"><code>5180748</code></a> Fix documentation of Kirat Rai rules (<a href="https://redirect.github.com/unicode-rs/unicode-width/issues/97">#97</a>)</li> <li><a href="https://github.com/unicode-rs/unicode-width/commit/0b85fb874a628a08c9c85dc70ca9e5b7908db6a8"><code>0b85fb8</code></a> Update to Unicode 18 (<a href="https://redirect.github.com/unicode-rs/unicode-width/issues/96">#96</a>)</li> <li><a href="https://github.com/unicode-rs/unicode-width/commit/832f7ca447375ff969f850dab9362a0c2ce1eefb"><code>832f7ca</code></a> Fix typo in docs (<a href="https://redirect.github.com/unicode-rs/unicode-width/issues/90">#90</a>)</li> <li><a href="https://github.com/unicode-rs/unicode-width/commit/c7b4d42d741d985103fd887089c57deefc9e4f2d"><code>c7b4d42</code></a> Fix halfwidth katakana voiced and semi-voiced sound marks in width calculatio...</li> <li><a href="https://github.com/unicode-rs/unicode-width/commit/a3d4ee6c2989367e8d54ac70c83ee76ba0a71079"><code>a3d4ee6</code></a> Fix mistake in the specification of Arabic lam-alef ligature (<a href="https://redirect.github.com/unicode-rs/unicode-width/issues/92">#92</a>)</li> <li><a href="https://github.com/unicode-rs/unicode-width/commit/d8654db078bf9f93b5bfe1e6294a477cc4addc28"><code>d8654db</code></a> Split generated file into multiple files, separating static code from generat...</li> <li><a href="https://github.com/unicode-rs/unicode-width/commit/ab7a6dc5706e8d47a3b77577165e3ca76aeeab7b"><code>ab7a6dc</code></a> Support <code>char</code> iter width (<a href="https://redirect.github.com/unicode-rs/unicode-width/issues/83">#83</a>)</li> <li><a href="https://github.com/unicode-rs/unicode-width/commit/b10a4d5fbefe3f3dddd5e59cae2b889083ca58e7"><code>b10a4d5</code></a> Exclude development scripts from published packages (<a href="https://redirect.github.com/unicode-rs/unicode-width/issues/80">#80</a>)</li> <li>See full diff in <a href="https://github.com/unicode-rs/unicode-width/compare/v0.2.2...v0.2.3">compare view</a></li> </ul> </details> <br /> Updates `tokio-stream` from 0.1.18 to 0.1.19 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/tokio-rs/tokio/commit/bc0933ccffb62e010d3ccb497abc22cec2e73f54"><code>bc0933c</code></a> chore: prepare tokio-stream v0.1.19 (<a href="https://redirect.github.com/tokio-rs/tokio/issues/8310">#8310</a>)</li> <li><a href="https://github.com/tokio-rs/tokio/commit/e3786d0090d1a36381738068519534991ca69d44"><code>e3786d0</code></a> readme: remove obsolete TokioConf notices (<a href="https://redirect.github.com/tokio-rs/tokio/issues/8311">#8311</a>)</li> <li><a href="https://github.com/tokio-rs/tokio/commit/f2189d3bd69d22638158a0ca8163b2e8daf18c5f"><code>f2189d3</code></a> chore: prepare tokio-util v0.7.19 (<a href="https://redirect.github.com/tokio-rs/tokio/issues/8309">#8309</a>)</li> <li><a href="https://github.com/tokio-rs/tokio/commit/52f2745c18fd69174ca420a2ff5fe4216d320a48"><code>52f2745</code></a> net: re-enable <code>tcp_stream::try_read_buf</code> test for WASI (<a href="https://redirect.github.com/tokio-rs/tokio/issues/8305">#8305</a>)</li> <li><a href="https://github.com/tokio-rs/tokio/commit/ac6869a431d9d7e2a81ce5309f00730741d3462a"><code>ac6869a</code></a> rt: remove unstable cfgs leftovers after local runtime stabilization (<a href="https://redirect.github.com/tokio-rs/tokio/issues/8298">#8298</a>)</li> <li><a href="https://github.com/tokio-rs/tokio/commit/75fef53d0a8590c2d1dbb63672aa7b7d1ef51155"><code>75fef53</code></a> chore: prepare Tokio v1.53.1 (<a href="https://redirect.github.com/tokio-rs/tokio/issues/8303">#8303</a>)</li> <li><a href="https://github.com/tokio-rs/tokio/commit/ae9d01121377cdbef32b9d5e8559843cce9f927e"><code>ae9d011</code></a> signal: restore MSRV by removing OnceLock::wait from the Windows handler (<a href="https://redirect.github.com/tokio-rs/tokio/issues/8300">#8300</a>)</li> <li><a href="https://github.com/tokio-rs/tokio/commit/eb4988dc2ecb85d2617971fbbabc84938c141bfd"><code>eb4988d</code></a> time: fix the loom test of the race between cancellation/insertion (<a href="https://redirect.github.com/tokio-rs/tokio/issues/8302">#8302</a>)</li> <li><a href="https://github.com/tokio-rs/tokio/commit/91d3b4c0bccf2234fc3ed19e605e2cd402f19437"><code>91d3b4c</code></a> time: fix alt timer cancellation and insertion race (<a href="https://redirect.github.com/tokio-rs/tokio/issues/8252">#8252</a>)</li> <li><a href="https://github.com/tokio-rs/tokio/commit/a46338401b9e0ffc9bd68c31100ee99cee717481"><code>a463384</code></a> runtime: remove dead link definition in <code>Runtime::block_on</code> (<a href="https://redirect.github.com/tokio-rs/tokio/issues/8301">#8301</a>)</li> <li>Additional commits viewable in <a href="https://github.com/tokio-rs/tokio/compare/tokio-stream-0.1.18...tokio-stream-0.1.19">compare view</a></li> </ul> </details> <br /> Updates `napi` from 3.15.0 to 3.16.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/napi-rs/napi-rs/releases">napi's releases</a>.</em></p> <blockquote> <h2>napi-v3.16.0</h2> <h3>Added</h3> <ul> <li><em>(napi)</em> support well-known symbol keys for class members (<a href="https://redirect.github.com/napi-rs/napi-rs/pull/3665">#3665</a>)</li> <li><em>(napi)</em> support symbol_for keys for class members (<a href="https://redirect.github.com/napi-rs/napi-rs/pull/3661">#3661</a>)</li> </ul> <h3>Fixed</h3> <ul> <li><em>(napi)</em> compact class identity metadata (<a href="https://redirect.github.com/napi-rs/napi-rs/pull/3667">#3667</a>)</li> <li><em>(napi)</em> keep the registered classes when a later load fails (<a href="https://redirect.github.com/napi-rs/napi-rs/pull/3666">#3666</a>)</li> <li><em>(napi)</em> free define_class closures, honour static flags, avoid TS1016 in constructors (<a href="https://redirect.github.com/napi-rs/napi-rs/pull/3662">#3662</a>)</li> <li><em>(napi)</em> free threadsafe function call data when the call fails (<a href="https://redirect.github.com/napi-rs/napi-rs/pull/3656">#3656</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/napi-rs/napi-rs/commit/f89400d99b136c5c8a27818654b91256832b5bd6"><code>f89400d</code></a> chore: release (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3637">#3637</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/192cbaafabc3166691efd63d34b675b525fcf65a"><code>192cbaa</code></a> chore(deps): update dependency <code>@types/inquirer</code> to v10 (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3668">#3668</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/9188219047aff34963c98fc701e625955050cdbc"><code>9188219</code></a> chore(deps): update dependency electron to v45 (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3634">#3634</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/1d93a4e284150c3461032a40e3a8a95c3703efb7"><code>1d93a4e</code></a> fix(napi): compact class identity metadata (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3667">#3667</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/e9de9024337af056b79010d3f9024fdc88965572"><code>e9de902</code></a> fix(napi): keep the registered classes when a later load fails (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3666">#3666</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/cad7ff7176bd2975d7a75cfa64fde3be021e0e0b"><code>cad7ff7</code></a> feat(napi): support well-known symbol keys for class members (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3665">#3665</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/c01ce6017afb40bc5e454f837869edd54c287271"><code>c01ce60</code></a> fix(napi): free define_class closures, honour static flags, avoid TS1016 in c...</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/5a49dad2756acf93fdc7ff1f1ab7b01803fb28e4"><code>5a49dad</code></a> feat(napi): support symbol_for keys for class members (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3661">#3661</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/0c589032e362595dd38642bb91b532415bdca1d3"><code>0c58903</code></a> fix(napi): free threadsafe function call data when the call fails (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3656">#3656</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/ada66a35f8c16e8225745066994dd33b1dfaa293"><code>ada66a3</code></a> chore(deps): update release-plz/action action to v0.5.147 (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3659">#3659</a>)</li> <li>Additional commits viewable in <a href="https://github.com/napi-rs/napi-rs/compare/napi-v3.15.0...napi-v3.16.0">compare view</a></li> </ul> </details> <br /> Updates `napi-derive` from 3.6.13 to 3.7.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/napi-rs/napi-rs/releases">napi-derive's releases</a>.</em></p> <blockquote> <h2>napi-derive-v3.7.0</h2> <h3>Added</h3> <ul> <li><em>(napi)</em> support well-known symbol keys for class members (<a href="https://redirect.github.com/napi-rs/napi-rs/pull/3665">#3665</a>)</li> <li><em>(napi)</em> support symbol_for keys for class members (<a href="https://redirect.github.com/napi-rs/napi-rs/pull/3661">#3661</a>)</li> </ul> <h3>Fixed</h3> <ul> <li><em>(napi)</em> free define_class closures, honour static flags, avoid TS1016 in constructors (<a href="https://redirect.github.com/napi-rs/napi-rs/pull/3662">#3662</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/napi-rs/napi-rs/commit/f89400d99b136c5c8a27818654b91256832b5bd6"><code>f89400d</code></a> chore: release (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3637">#3637</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/192cbaafabc3166691efd63d34b675b525fcf65a"><code>192cbaa</code></a> chore(deps): update dependency <code>@types/inquirer</code> to v10 (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3668">#3668</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/9188219047aff34963c98fc701e625955050cdbc"><code>9188219</code></a> chore(deps): update dependency electron to v45 (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3634">#3634</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/1d93a4e284150c3461032a40e3a8a95c3703efb7"><code>1d93a4e</code></a> fix(napi): compact class identity metadata (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3667">#3667</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/e9de9024337af056b79010d3f9024fdc88965572"><code>e9de902</code></a> fix(napi): keep the registered classes when a later load fails (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3666">#3666</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/cad7ff7176bd2975d7a75cfa64fde3be021e0e0b"><code>cad7ff7</code></a> feat(napi): support well-known symbol keys for class members (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3665">#3665</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/c01ce6017afb40bc5e454f837869edd54c287271"><code>c01ce60</code></a> fix(napi): free define_class closures, honour static flags, avoid TS1016 in c...</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/5a49dad2756acf93fdc7ff1f1ab7b01803fb28e4"><code>5a49dad</code></a> feat(napi): support symbol_for keys for class members (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3661">#3661</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/0c589032e362595dd38642bb91b532415bdca1d3"><code>0c58903</code></a> fix(napi): free threadsafe function call data when the call fails (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3656">#3656</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/ada66a35f8c16e8225745066994dd33b1dfaa293"><code>ada66a3</code></a> chore(deps): update release-plz/action action to v0.5.147 (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3659">#3659</a>)</li> <li>Additional commits viewable in <a href="https://github.com/napi-rs/napi-rs/compare/napi-derive-v3.6.13...napi-derive-v3.7.0">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
a9028ef441 |
feat(search): document and validate calibrated effort tiers (#4882)
Lance beta.11 calibrates lower `search_effort` tiers by metric and requested `k`. With the Rust dependency and Python/Node execution tests already on main via #4881, document the tiers across Rust, Python, Node and the search guide, extend the remote request matrix to cover `0.1` and `0.25`, and align the Python test package with beta.11. `0.1` and `0.25` target empirical mean partition-routing recall of 80% and 90% for L2, cosine and dot through `k=100000`. These are not per-query or final Recall@k guarantees. Default Auto is unchanged; Hamming and larger `k` remain uncalibrated, and remote queries require corresponding server support. This PR makes no additional performance claim. See [Lance #10695](https://github.com/lance-format/lance/pull/10695) for measurements and limitations. Validation: both strict workspace Clippy configurations, Rust formatting, 13 Rust effort tests, 208 Python query tests, 41 Node query tests, native binding builds, TypeScript, Node lint/generated docs, Python lint/format, full lockfile check and two dependency guards passed on `a8b09170`. All validated Rust/Python/Node source and dependency files are byte-identical at `2a82d07c`; the only subsequent change restores the Java POM to main. Root Ruff has 59 existing diagnostics and six formatting files, all byte-identical to the base; the Python package passes. The Java REST/Namespace client has no changed API here, and its dependency remains identical to main. The separate [Java beta publication failure](https://github.com/lance-format/lance/issues/10773) is not claimed resolved or validated. Official SDK release, automatic mirror, Sophon adoption and measured consumer acceptance remain follow-up stages. |
||
|
|
06fcd628cf | Bump version: 0.42.0-beta.6 → 0.42.0-beta.7 v0.42.0-beta.7 | ||
|
|
d812fe86ae |
chore(deps): upgrade Lance to v15.0.0-beta.12 (#4888)
Upgrade the exact Lance Git dependencies from v15.0.0-beta.11 to the published [v15.0.0-beta.12](https://github.com/lance-format/lance/releases/tag/v15.0.0-beta.12). This includes `Dataset::file_reader_options()`, which downstream consumers need to preserve dataset defaults when constructing per-read list-structure options. Update all 15 workspace pins and 25 Lance lockfile package records to release commit `635d412cde01e5d4203a91be47ddbfd0f2a6e068`. Non-Lance package records, including their dependency edges, remain unchanged. The `geo` validation covers the release's R-tree crate relocation. Validation on macOS arm64 / Rust 1.97.0: - `cargo test --locked --features remote,geo --tests`: 2,278 passed, 79 existing ignored, 0 failed. - `cargo clippy --locked --features remote,geo --tests --examples -- -D warnings`: passed. - `cargo fmt --all -- --check` and `git diff --check`: passed. Sophon adoption and PE integration validation remain separate. |
||
|
|
b3c1e58fe7 | Bump version: 0.42.0-beta.5 → 0.42.0-beta.6 v0.42.0-beta.6 |