lodedb 1.3.1__tar.gz → 1.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {lodedb-1.3.1 → lodedb-1.3.2}/Cargo.toml +1 -1
- {lodedb-1.3.1 → lodedb-1.3.2}/PKG-INFO +40 -1
- {lodedb-1.3.1 → lodedb-1.3.2}/README.md +39 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/examples/write_generation_fixture.rs +1 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/examples/write_wal_fixture.rs +1 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/engine/mod.rs +1606 -257
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/lib.rs +1 -1
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/commit_manifest.rs +6 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/mod.rs +59 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/multivec_store.rs +1 -20
- lodedb-1.3.2/crates/lodedb-core/src/storage/tvvf_store.rs +2088 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/util.rs +86 -3
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/wal.rs +220 -10
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/types.rs +32 -1
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/vector/turbovec.rs +8 -0
- lodedb-1.3.2/crates/lodedb-core/tests/block_skip_layout.rs +55 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/tests/core_engine.rs +1882 -16
- lodedb-1.3.2/crates/lodedb-core/tests/operator_observability.rs +216 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/tests/storage_fixtures.rs +7 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/pyproject.toml +1 -1
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/__init__.py +3 -1
- lodedb-1.3.2/src/lodedb/_native_core.py +77 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/native_adapter.py +42 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/__init__.py +2 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/cli.py +10 -2
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/db.py +425 -44
- lodedb-1.3.2/src/lodedb/local/doctor.py +729 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/integrations/__init__.py +6 -1
- lodedb-1.3.2/src/lodedb/local/integrations/kotaemon.py +604 -0
- lodedb-1.3.2/src/lodedb/local/segments.py +187 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/server.py +52 -1
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/Cargo.lock +2 -2
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/error.rs +31 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/id_map.rs +40 -1
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/lib.rs +64 -1
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/id_map.rs +133 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/src/lib.rs +334 -80
- lodedb-1.3.1/src/lodedb/_native_core.py +0 -35
- lodedb-1.3.1/src/lodedb/local/doctor.py +0 -298
- {lodedb-1.3.1 → lodedb-1.3.2}/LICENSE +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/NOTICE +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/Cargo.toml +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/examples/filter_planner_bench.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/examples/turbovec_adapter_smoke.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/error.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/filter/ast.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/filter/doc_set.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/filter/field_index.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/filter/mod.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/filter/predicate.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/filter/resolve.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/filter/validate.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/lexical/bm25.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/lexical/mod.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/lexical/rrf.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/lexical/tokenize.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/legacy.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/lexical_store.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/lsn.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/state_journal.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/text_store.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/tvann_store.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/tvim_delta.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/text/chunk.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/text/hash.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/text/mod.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/vector/ann.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/vector/index.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/vector/math.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/vector/mod.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/vector/stable_id.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/version.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/tests/ann_build_bench.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/tests/filter_plan_fixtures.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/tests/identity_fixtures.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/tests/lexical_fixtures.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/tests/predicate_fixtures.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/tests/turbovec_adapter.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-gpu/Cargo.toml +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-gpu/src/lib.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/__main__.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/config.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/__init__.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/_atomic_io.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/_commit_manifest.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/_filelock.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/_lexical.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/_predicate.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/core.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/embedding_backends.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/gpu_turbovec.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/route_profiles.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/route_registry.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/runtime_policy.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/state_journal_store.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/turbovec_delta_store.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/turbovec_index.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/graph/__init__.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/graph/_store.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/graph/knowledge_graph.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/appender.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/backends.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/benchmark.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/checkpointer.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/collection.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/integrations/cognee.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/integrations/langchain.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/integrations/llama_index.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/integrations/llama_index_graph.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/integrations/mem0.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/integrations/privategpt.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/late_interaction.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/mcp_install.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/mcp_server.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/__init__.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/cli.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/detect.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/plan.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/report.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/runner.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/sources/__init__.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/sources/base.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/sources/langchain_inmemory.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/sources/llama_index_simple.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/sources/mem0_qdrant.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/sources/pgvector.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/onnx_artifacts.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/presets.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/py.typed +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/Cargo.toml +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/Cargo.toml +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/README.md +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/build.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/examples/dump_state.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/examples/kernel_xtest.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/codebook.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/encode.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/io.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/maxsim.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/pack.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/rotation.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/search.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/codebook.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/concurrent_search.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/distortion.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/encode.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/encoded_rows.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/filtering.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/input_validation.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/io_versioning.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/kernel_correctness.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/lazy_init.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/reconstruction.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/rotation.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/state_sequences.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/swap_remove.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/tqplus_calibration.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/Cargo.toml +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/README.md +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/build.rs +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/python/turbovec/__init__.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/python/turbovec/_dedup.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/python/turbovec/_persist.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/python/turbovec/agno.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/python/turbovec/haystack.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/python/turbovec/langchain.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/python/turbovec/llama_index.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/tests/test_agno.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/tests/test_dedup.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/tests/test_filtering.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/tests/test_haystack.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/tests/test_id_map.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/tests/test_index.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/tests/test_langchain.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/tests/test_llama_index.py +0 -0
- {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/tests/test_security.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lodedb
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.2
|
|
4
4
|
Classifier: Development Status :: 4 - Beta
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
@@ -388,6 +388,42 @@ db.search("turbine fault", k=5) # nearest cluste
|
|
|
388
388
|
`ann_clusters` (partitions) defaults to about `sqrt(n)` and `ann_nprobe` (clusters probed per
|
|
389
389
|
query) to about `sqrt(clusters)`. ANN is a create-time choice persisted with the index and works
|
|
390
390
|
for text and bring-your-own-vector indexes alike; keep the exact default for small-to-mid corpora.
|
|
391
|
+
On reopen, `ann_nprobe` is a session-only override, so benchmark handles can change probe breadth
|
|
392
|
+
without rebuilding; the algorithm and partition count remain the persisted configuration.
|
|
393
|
+
|
|
394
|
+
For large corpora, these are useful starting ranges to measure, not recall or latency promises:
|
|
395
|
+
|
|
396
|
+
| Knob | Useful range | Trade-off |
|
|
397
|
+
| --- | --- | --- |
|
|
398
|
+
| `ann_nprobe` | 64 to 256 clusters | More probes raise recall and scan work; probing every cluster is exact. |
|
|
399
|
+
| `rescore_oversample` | 2 to 8 times `k` | More candidates improve the chance that fp32 re-ranking repairs compact-code errors, at more sidecar reads. |
|
|
400
|
+
</details>
|
|
401
|
+
|
|
402
|
+
<details>
|
|
403
|
+
<summary><b>Two-stage rescore (`rescore="original"`)</b></summary>
|
|
404
|
+
|
|
405
|
+
TurboVec's compact 4-bit scan is fast, but its quantized first-stage ranking can put close
|
|
406
|
+
neighbors in the wrong order. Enable rescore at creation to retain each input vector in a separate
|
|
407
|
+
original-precision sidecar, then re-score the first-stage candidate pool with fp32 dot products:
|
|
408
|
+
|
|
409
|
+
```python
|
|
410
|
+
db = LodeDB(
|
|
411
|
+
path="./data",
|
|
412
|
+
ann="cluster",
|
|
413
|
+
ann_clusters=1024,
|
|
414
|
+
rescore="original",
|
|
415
|
+
rescore_dtype="float16", # default; about 2 bytes per dimension per vector
|
|
416
|
+
rescore_oversample=4,
|
|
417
|
+
)
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
`float16` sidecars add about 2 bytes per dimension per vector (`float32` adds 4; `int8` adds 1).
|
|
421
|
+
They let the final ordering rise above the practical 4-bit ranking ceiling while retaining the
|
|
422
|
+
compact index for candidate generation. Re-scored candidate scores are exact fp32 dots, but the
|
|
423
|
+
overall result can still be approximate when ANN or a too-small candidate pool excludes a true
|
|
424
|
+
neighbor. Rescore is a create-time capture choice: originals are not recoverable after a normal
|
|
425
|
+
store's first ingest, so enabling it later requires a rebuild. On a rescore-enabled reopen,
|
|
426
|
+
`rescore_oversample` is a session-only override; mode and dtype must match the persisted sidecar.
|
|
391
427
|
</details>
|
|
392
428
|
|
|
393
429
|
## Multimodal & bring-your-own vectors
|
|
@@ -537,6 +573,9 @@ lodedb mcp # stdio MCP server for agent memory
|
|
|
537
573
|
lodedb benchmark # local, metrics-only benchmark
|
|
538
574
|
```
|
|
539
575
|
|
|
576
|
+
Use `lodedb serve` as a local OpenAI-compatible embeddings provider; see [LodeDB as a local
|
|
577
|
+
embeddings provider](docs/integrations.md#lodedb-as-a-local-embeddings-provider).
|
|
578
|
+
|
|
540
579
|
## Use as an MCP server
|
|
541
580
|
|
|
542
581
|
LodeDB ships a [Model Context Protocol](https://modelcontextprotocol.io) server, so an agent
|
|
@@ -337,6 +337,42 @@ db.search("turbine fault", k=5) # nearest cluste
|
|
|
337
337
|
`ann_clusters` (partitions) defaults to about `sqrt(n)` and `ann_nprobe` (clusters probed per
|
|
338
338
|
query) to about `sqrt(clusters)`. ANN is a create-time choice persisted with the index and works
|
|
339
339
|
for text and bring-your-own-vector indexes alike; keep the exact default for small-to-mid corpora.
|
|
340
|
+
On reopen, `ann_nprobe` is a session-only override, so benchmark handles can change probe breadth
|
|
341
|
+
without rebuilding; the algorithm and partition count remain the persisted configuration.
|
|
342
|
+
|
|
343
|
+
For large corpora, these are useful starting ranges to measure, not recall or latency promises:
|
|
344
|
+
|
|
345
|
+
| Knob | Useful range | Trade-off |
|
|
346
|
+
| --- | --- | --- |
|
|
347
|
+
| `ann_nprobe` | 64 to 256 clusters | More probes raise recall and scan work; probing every cluster is exact. |
|
|
348
|
+
| `rescore_oversample` | 2 to 8 times `k` | More candidates improve the chance that fp32 re-ranking repairs compact-code errors, at more sidecar reads. |
|
|
349
|
+
</details>
|
|
350
|
+
|
|
351
|
+
<details>
|
|
352
|
+
<summary><b>Two-stage rescore (`rescore="original"`)</b></summary>
|
|
353
|
+
|
|
354
|
+
TurboVec's compact 4-bit scan is fast, but its quantized first-stage ranking can put close
|
|
355
|
+
neighbors in the wrong order. Enable rescore at creation to retain each input vector in a separate
|
|
356
|
+
original-precision sidecar, then re-score the first-stage candidate pool with fp32 dot products:
|
|
357
|
+
|
|
358
|
+
```python
|
|
359
|
+
db = LodeDB(
|
|
360
|
+
path="./data",
|
|
361
|
+
ann="cluster",
|
|
362
|
+
ann_clusters=1024,
|
|
363
|
+
rescore="original",
|
|
364
|
+
rescore_dtype="float16", # default; about 2 bytes per dimension per vector
|
|
365
|
+
rescore_oversample=4,
|
|
366
|
+
)
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
`float16` sidecars add about 2 bytes per dimension per vector (`float32` adds 4; `int8` adds 1).
|
|
370
|
+
They let the final ordering rise above the practical 4-bit ranking ceiling while retaining the
|
|
371
|
+
compact index for candidate generation. Re-scored candidate scores are exact fp32 dots, but the
|
|
372
|
+
overall result can still be approximate when ANN or a too-small candidate pool excludes a true
|
|
373
|
+
neighbor. Rescore is a create-time capture choice: originals are not recoverable after a normal
|
|
374
|
+
store's first ingest, so enabling it later requires a rebuild. On a rescore-enabled reopen,
|
|
375
|
+
`rescore_oversample` is a session-only override; mode and dtype must match the persisted sidecar.
|
|
340
376
|
</details>
|
|
341
377
|
|
|
342
378
|
## Multimodal & bring-your-own vectors
|
|
@@ -486,6 +522,9 @@ lodedb mcp # stdio MCP server for agent memory
|
|
|
486
522
|
lodedb benchmark # local, metrics-only benchmark
|
|
487
523
|
```
|
|
488
524
|
|
|
525
|
+
Use `lodedb serve` as a local OpenAI-compatible embeddings provider; see [LodeDB as a local
|
|
526
|
+
embeddings provider](docs/integrations.md#lodedb-as-a-local-embeddings-provider).
|
|
527
|
+
|
|
489
528
|
## Use as an MCP server
|
|
490
529
|
|
|
491
530
|
LodeDB ships a [Model Context Protocol](https://modelcontextprotocol.io) server, so an agent
|