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.
Files changed (176) hide show
  1. {lodedb-1.3.1 → lodedb-1.3.2}/Cargo.toml +1 -1
  2. {lodedb-1.3.1 → lodedb-1.3.2}/PKG-INFO +40 -1
  3. {lodedb-1.3.1 → lodedb-1.3.2}/README.md +39 -0
  4. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/examples/write_generation_fixture.rs +1 -0
  5. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/examples/write_wal_fixture.rs +1 -0
  6. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/engine/mod.rs +1606 -257
  7. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/lib.rs +1 -1
  8. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/commit_manifest.rs +6 -0
  9. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/mod.rs +59 -0
  10. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/multivec_store.rs +1 -20
  11. lodedb-1.3.2/crates/lodedb-core/src/storage/tvvf_store.rs +2088 -0
  12. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/util.rs +86 -3
  13. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/wal.rs +220 -10
  14. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/types.rs +32 -1
  15. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/vector/turbovec.rs +8 -0
  16. lodedb-1.3.2/crates/lodedb-core/tests/block_skip_layout.rs +55 -0
  17. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/tests/core_engine.rs +1882 -16
  18. lodedb-1.3.2/crates/lodedb-core/tests/operator_observability.rs +216 -0
  19. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/tests/storage_fixtures.rs +7 -0
  20. {lodedb-1.3.1 → lodedb-1.3.2}/pyproject.toml +1 -1
  21. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/__init__.py +3 -1
  22. lodedb-1.3.2/src/lodedb/_native_core.py +77 -0
  23. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/native_adapter.py +42 -0
  24. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/__init__.py +2 -0
  25. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/cli.py +10 -2
  26. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/db.py +425 -44
  27. lodedb-1.3.2/src/lodedb/local/doctor.py +729 -0
  28. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/integrations/__init__.py +6 -1
  29. lodedb-1.3.2/src/lodedb/local/integrations/kotaemon.py +604 -0
  30. lodedb-1.3.2/src/lodedb/local/segments.py +187 -0
  31. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/server.py +52 -1
  32. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/Cargo.lock +2 -2
  33. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/error.rs +31 -0
  34. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/id_map.rs +40 -1
  35. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/lib.rs +64 -1
  36. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/id_map.rs +133 -0
  37. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/src/lib.rs +334 -80
  38. lodedb-1.3.1/src/lodedb/_native_core.py +0 -35
  39. lodedb-1.3.1/src/lodedb/local/doctor.py +0 -298
  40. {lodedb-1.3.1 → lodedb-1.3.2}/LICENSE +0 -0
  41. {lodedb-1.3.1 → lodedb-1.3.2}/NOTICE +0 -0
  42. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/Cargo.toml +0 -0
  43. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/examples/filter_planner_bench.rs +0 -0
  44. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/examples/turbovec_adapter_smoke.rs +0 -0
  45. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/error.rs +0 -0
  46. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/filter/ast.rs +0 -0
  47. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/filter/doc_set.rs +0 -0
  48. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/filter/field_index.rs +0 -0
  49. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/filter/mod.rs +0 -0
  50. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/filter/predicate.rs +0 -0
  51. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/filter/resolve.rs +0 -0
  52. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/filter/validate.rs +0 -0
  53. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/lexical/bm25.rs +0 -0
  54. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/lexical/mod.rs +0 -0
  55. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/lexical/rrf.rs +0 -0
  56. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/lexical/tokenize.rs +0 -0
  57. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/legacy.rs +0 -0
  58. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/lexical_store.rs +0 -0
  59. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/lsn.rs +0 -0
  60. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/state_journal.rs +0 -0
  61. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/text_store.rs +0 -0
  62. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/tvann_store.rs +0 -0
  63. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/storage/tvim_delta.rs +0 -0
  64. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/text/chunk.rs +0 -0
  65. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/text/hash.rs +0 -0
  66. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/text/mod.rs +0 -0
  67. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/vector/ann.rs +0 -0
  68. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/vector/index.rs +0 -0
  69. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/vector/math.rs +0 -0
  70. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/vector/mod.rs +0 -0
  71. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/vector/stable_id.rs +0 -0
  72. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/src/version.rs +0 -0
  73. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/tests/ann_build_bench.rs +0 -0
  74. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/tests/filter_plan_fixtures.rs +0 -0
  75. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/tests/identity_fixtures.rs +0 -0
  76. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/tests/lexical_fixtures.rs +0 -0
  77. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/tests/predicate_fixtures.rs +0 -0
  78. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-core/tests/turbovec_adapter.rs +0 -0
  79. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-gpu/Cargo.toml +0 -0
  80. {lodedb-1.3.1 → lodedb-1.3.2}/crates/lodedb-gpu/src/lib.rs +0 -0
  81. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/__main__.py +0 -0
  82. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/config.py +0 -0
  83. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/__init__.py +0 -0
  84. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/_atomic_io.py +0 -0
  85. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/_commit_manifest.py +0 -0
  86. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/_filelock.py +0 -0
  87. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/_lexical.py +0 -0
  88. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/_predicate.py +0 -0
  89. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/core.py +0 -0
  90. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/embedding_backends.py +0 -0
  91. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/gpu_turbovec.py +0 -0
  92. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/route_profiles.py +0 -0
  93. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/route_registry.py +0 -0
  94. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/runtime_policy.py +0 -0
  95. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/state_journal_store.py +0 -0
  96. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/turbovec_delta_store.py +0 -0
  97. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/engine/turbovec_index.py +0 -0
  98. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/graph/__init__.py +0 -0
  99. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/graph/_store.py +0 -0
  100. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/graph/knowledge_graph.py +0 -0
  101. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/appender.py +0 -0
  102. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/backends.py +0 -0
  103. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/benchmark.py +0 -0
  104. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/checkpointer.py +0 -0
  105. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/collection.py +0 -0
  106. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/integrations/cognee.py +0 -0
  107. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/integrations/langchain.py +0 -0
  108. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/integrations/llama_index.py +0 -0
  109. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/integrations/llama_index_graph.py +0 -0
  110. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/integrations/mem0.py +0 -0
  111. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/integrations/privategpt.py +0 -0
  112. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/late_interaction.py +0 -0
  113. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/mcp_install.py +0 -0
  114. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/mcp_server.py +0 -0
  115. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/__init__.py +0 -0
  116. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/cli.py +0 -0
  117. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/detect.py +0 -0
  118. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/plan.py +0 -0
  119. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/report.py +0 -0
  120. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/runner.py +0 -0
  121. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/sources/__init__.py +0 -0
  122. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/sources/base.py +0 -0
  123. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/sources/langchain_inmemory.py +0 -0
  124. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/sources/llama_index_simple.py +0 -0
  125. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/sources/mem0_qdrant.py +0 -0
  126. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/migrate/sources/pgvector.py +0 -0
  127. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/onnx_artifacts.py +0 -0
  128. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/local/presets.py +0 -0
  129. {lodedb-1.3.1 → lodedb-1.3.2}/src/lodedb/py.typed +0 -0
  130. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/Cargo.toml +0 -0
  131. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/Cargo.toml +0 -0
  132. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/README.md +0 -0
  133. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/build.rs +0 -0
  134. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/examples/dump_state.rs +0 -0
  135. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/examples/kernel_xtest.rs +0 -0
  136. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/codebook.rs +0 -0
  137. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/encode.rs +0 -0
  138. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/io.rs +0 -0
  139. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/maxsim.rs +0 -0
  140. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/pack.rs +0 -0
  141. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/rotation.rs +0 -0
  142. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/src/search.rs +0 -0
  143. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/codebook.rs +0 -0
  144. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/concurrent_search.rs +0 -0
  145. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/distortion.rs +0 -0
  146. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/encode.rs +0 -0
  147. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/encoded_rows.rs +0 -0
  148. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/filtering.rs +0 -0
  149. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/input_validation.rs +0 -0
  150. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/io_versioning.rs +0 -0
  151. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/kernel_correctness.rs +0 -0
  152. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/lazy_init.rs +0 -0
  153. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/reconstruction.rs +0 -0
  154. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/rotation.rs +0 -0
  155. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/state_sequences.rs +0 -0
  156. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/swap_remove.rs +0 -0
  157. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec/tests/tqplus_calibration.rs +0 -0
  158. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/Cargo.toml +0 -0
  159. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/README.md +0 -0
  160. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/build.rs +0 -0
  161. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/python/turbovec/__init__.py +0 -0
  162. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/python/turbovec/_dedup.py +0 -0
  163. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/python/turbovec/_persist.py +0 -0
  164. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/python/turbovec/agno.py +0 -0
  165. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/python/turbovec/haystack.py +0 -0
  166. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/python/turbovec/langchain.py +0 -0
  167. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/python/turbovec/llama_index.py +0 -0
  168. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/tests/test_agno.py +0 -0
  169. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/tests/test_dedup.py +0 -0
  170. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/tests/test_filtering.py +0 -0
  171. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/tests/test_haystack.py +0 -0
  172. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/tests/test_id_map.py +0 -0
  173. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/tests/test_index.py +0 -0
  174. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/tests/test_langchain.py +0 -0
  175. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/tests/test_llama_index.py +0 -0
  176. {lodedb-1.3.1 → lodedb-1.3.2}/third_party/turbovec/turbovec-python/tests/test_security.py +0 -0
@@ -7,7 +7,7 @@ members = [
7
7
  resolver = "2"
8
8
 
9
9
  [workspace.package]
10
- version = "1.3.0"
10
+ version = "1.3.2"
11
11
  edition = "2021"
12
12
  rust-version = "1.70"
13
13
  license = "Apache-2.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lodedb
3
- Version: 1.3.1
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
@@ -57,6 +57,7 @@ fn main() {
57
57
  lexical_tokens: None,
58
58
  multivec: None,
59
59
  ann: None,
60
+ tvvf_manifest: None,
60
61
  compress_text: true,
61
62
  },
62
63
  GenerationWriteOptions::default(),
@@ -58,6 +58,7 @@ fn main() {
58
58
  lexical_tokens: None,
59
59
  multivec: None,
60
60
  ann: None,
61
+ tvvf_manifest: None,
61
62
  compress_text: true,
62
63
  },
63
64
  GenerationWriteOptions::default(),