simplevecdb 2.2.0__tar.gz → 2.3.0__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 (118) hide show
  1. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.bandit +0 -0
  2. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.env.example +0 -0
  3. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.github/FUNDING.yml +0 -0
  4. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  5. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  6. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  7. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.github/dependabot.yml +0 -0
  8. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.github/workflows/ci.yml +0 -0
  9. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.github/workflows/publish.yml +0 -0
  10. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.github/workflows/security.yml +0 -0
  11. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.github/workflows/update-sponsors.yml +0 -0
  12. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.gitignore +0 -0
  13. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.pre-commit-config.yaml +7 -0
  14. simplevecdb-2.3.0/.python-version +1 -0
  15. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/CHANGELOG.md +75 -0
  16. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/CODE_OF_CONDUCT.md +0 -0
  17. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/CONTRIBUTING.md +0 -0
  18. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/LICENSE +0 -0
  19. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/PKG-INFO +16 -11
  20. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/README.md +9 -3
  21. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/SECURITY.md +0 -0
  22. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/CHANGELOG.md +0 -0
  23. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/CONTRIBUTING.md +0 -0
  24. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/ENV_SETUP.md +0 -0
  25. simplevecdb-2.2.0/src/simplevecdb/embeddings/__init__.py → simplevecdb-2.3.0/docs/LICENSE +0 -0
  26. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/async.md +0 -0
  27. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/config.md +0 -0
  28. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/core.md +0 -0
  29. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/embeddings.md +0 -0
  30. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/encryption.md +0 -0
  31. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/engine/catalog.md +0 -0
  32. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/engine/quantization.md +0 -0
  33. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/engine/search.md +0 -0
  34. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/integrations.md +0 -0
  35. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/types.md +0 -0
  36. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/benchmarks.md +0 -0
  37. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/examples.md +0 -0
  38. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/guides/clustering.md +0 -0
  39. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/index.md +0 -0
  40. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/examples/auto_embed.py +0 -0
  41. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/examples/backend_benchmark.py +0 -0
  42. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/examples/embeddings/perf_benchmark.py +0 -0
  43. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/examples/quant_benchmark.py +0 -0
  44. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/examples/rag/langchain_rag.ipynb +0 -0
  45. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/examples/rag/llama_rag.ipynb +0 -0
  46. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/examples/rag/ollama_rag.ipynb +0 -0
  47. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/examples/smoke_test.py +0 -0
  48. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/mkdocs.yml +0 -0
  49. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/pyproject.toml +11 -19
  50. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/__init__.py +5 -3
  51. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/async_core.py +0 -0
  52. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/config.py +0 -0
  53. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/constants.py +0 -0
  54. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/core.py +61 -45
  55. simplevecdb-2.3.0/src/simplevecdb/embeddings/__init__.py +0 -0
  56. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/embeddings/models.py +0 -0
  57. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/embeddings/server.py +0 -0
  58. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/encryption.py +4 -17
  59. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/engine/__init__.py +0 -0
  60. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/engine/catalog.py +80 -42
  61. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/engine/clustering.py +0 -0
  62. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/engine/quantization.py +1 -2
  63. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/engine/search.py +53 -41
  64. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/engine/usearch_index.py +9 -11
  65. simplevecdb-2.3.0/src/simplevecdb/integrations/__init__.py +22 -0
  66. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/integrations/langchain.py +10 -3
  67. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/integrations/llamaindex.py +17 -10
  68. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/logging.py +0 -0
  69. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/types.py +0 -0
  70. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/utils.py +36 -2
  71. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/conftest.py +0 -0
  72. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/integration/test_langchain.py +0 -0
  73. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/integration/test_llamaindex.py +0 -0
  74. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/integration/test_rag.py +3 -1
  75. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/integration/test_server.py +0 -0
  76. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/integration/test_v21_features.py +0 -0
  77. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/perf/test_batch_detection.py +0 -0
  78. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/perf/test_performance.py +0 -0
  79. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/core/__init__.py +0 -0
  80. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/core/test_batch_detection.py +0 -0
  81. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/core/test_core_additional_coverage.py +0 -0
  82. simplevecdb-2.3.0/tests/unit/core/test_factory_methods.py +67 -0
  83. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/core/test_filters.py +0 -0
  84. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/core/test_initialization.py +0 -0
  85. simplevecdb-2.3.0/tests/unit/core/test_missing_coverage.py +609 -0
  86. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/core/test_quantization.py +0 -0
  87. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/core/test_similarity_search.py +0 -0
  88. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/embeddings/__init__.py +0 -0
  89. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/embeddings/test_models.py +0 -0
  90. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/embeddings/test_server.py +0 -0
  91. simplevecdb-2.3.0/tests/unit/embeddings/test_server_coverage.py +260 -0
  92. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/integrations/__init__.py +0 -0
  93. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/integrations/test_langchain_coverage.py +5 -0
  94. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/integrations/test_llamaindex_coverage.py +5 -0
  95. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_async.py +0 -0
  96. simplevecdb-2.3.0/tests/unit/test_async_coverage.py +140 -0
  97. simplevecdb-2.3.0/tests/unit/test_catalog_coverage.py +331 -0
  98. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_clustering.py +121 -0
  99. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_config.py +0 -0
  100. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_core.py +23 -4
  101. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_cross_collection_search.py +0 -0
  102. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_encryption.py +0 -0
  103. simplevecdb-2.3.0/tests/unit/test_encryption_coverage.py +298 -0
  104. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_error_handling.py +0 -0
  105. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_hierarchy.py +0 -0
  106. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_multi_collection.py +0 -0
  107. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_search.py +0 -0
  108. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_search_coverage.py +0 -0
  109. simplevecdb-2.3.0/tests/unit/test_search_missing_coverage.py +195 -0
  110. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_streaming.py +0 -0
  111. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_types.py +0 -0
  112. simplevecdb-2.3.0/tests/unit/test_usearch_index_missing_coverage.py +430 -0
  113. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_utils.py +0 -0
  114. {simplevecdb-2.2.0 → simplevecdb-2.3.0}/uv.lock +74 -85
  115. simplevecdb-2.2.0/.python-version +0 -1
  116. simplevecdb-2.2.0/docs/LICENSE +0 -1
  117. simplevecdb-2.2.0/src/simplevecdb/integrations/__init__.py +0 -9
  118. simplevecdb-2.2.0/tests/unit/core/test_factory_methods.py +0 -27
File without changes
File without changes
File without changes
@@ -1,6 +1,13 @@
1
1
  repos:
2
2
  - repo: local
3
3
  hooks:
4
+ - id: version-sync
5
+ name: version sync check
6
+ entry: python3 scripts/check_version_sync.py
7
+ language: system
8
+ files: ^(pyproject\.toml|src/simplevecdb/__init__\.py)$
9
+ pass_filenames: false
10
+
4
11
  - id: ruff
5
12
  name: ruff
6
13
  entry: uv run ruff check . --fix
@@ -0,0 +1 @@
1
+ 3.12
@@ -5,6 +5,76 @@ All notable changes to SimpleVecDB will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.3.0] - 2026-03-08
9
+
10
+ ### Breaking Changes
11
+
12
+ - **Integration dependencies are now optional.** LangChain and LlamaIndex packages are no longer installed by default. Install with `pip install simplevecdb[integrations]` to use them. Existing users upgrading from v2.2.x will see a clear ImportError with migration instructions.
13
+
14
+ ### Added
15
+
16
+ - **`[integrations]` optional extra** — Install LangChain and LlamaIndex dependencies only when needed, reducing default install footprint
17
+ - **Runtime import guards** in integration modules with v2.3.0 migration messaging
18
+ - **Lazy `__getattr__` loading** in `integrations/__init__.py` — integration classes are only imported when accessed
19
+ - **Input validation guards** on search methods:
20
+ - `similarity_search`, `similarity_search_batch`, `keyword_search`, `hybrid_search` now reject `k <= 0`
21
+ - `add_texts` validates length consistency of `metadatas`, `embeddings`, `ids`, and `parent_ids` against `texts`
22
+ - **NaN/Inf validation** for float values in metadata filters (`utils.validate_filter`)
23
+ - **Empty list rejection** for list filter values
24
+ - **Double-close protection** on `VectorDB` with `_closed` flag
25
+ - **Context manager protocol** (`__enter__`/`__exit__`) on `VectorDB`
26
+ - **Table name validation** in `check_migration` (defense-in-depth against SQL injection)
27
+ - **Graceful per-future error handling** in `search_collections`
28
+ - **Adaptive batch search threshold** — queries below `USEARCH_BATCH_THRESHOLD` (10) use sequential search to avoid batch overhead
29
+
30
+ ### Changed
31
+
32
+ - **Python dev target changed to 3.12** (`.python-version`), `requires-python` remains `>= "3.10"`
33
+ - **Version bumped to 2.3.0**
34
+ - **Performance: MMR search vectorized** — pre-normalize embeddings once, use `sel_matrix @ emb` matrix-vector multiply instead of Python inner loop, O(1) `list.pop` replaces O(n) `list.remove`, hoist `1 - lambda_mult` loop invariant
35
+ - **Performance: merged SQL round-trips in MMR** — new `get_documents_and_embeddings_by_ids` fetches text, metadata, and embeddings in a single query (previously two separate SELECTs)
36
+ - **Performance: `get_parent` collapsed** from 2 sequential SELECTs to 1 self-JOIN
37
+ - **Performance: `add_documents` ID recovery** — skip redundant `SELECT ORDER BY DESC` when explicit IDs are provided; removed unnecessary `list(texts)` copy
38
+ - **Performance: FLOAT serialization** — `np.asarray().tobytes()` replaces `struct.pack` with per-element Python loop (single C memcpy)
39
+ - **Performance: `np.array` → `np.asarray`** on every search and insert path to avoid unnecessary copies
40
+ - **Performance: SQL placeholder strings** — `",".join(["?"] * len(ids))` replaces generator expression across all 9 call sites
41
+ - **Performance: batched numpy conversion** in `add_texts` — single `np.asarray` call instead of per-item conversion
42
+ - **Performance: compact JSON separators** in catalog serialization
43
+ - **Performance: deduplicated `.tolist()` calls** in search engine
44
+ - **Performance: `np.unique(ravel())`** for batch key collection in `similarity_search_batch`
45
+ - **Performance: usearch upsert** — skip contains-check loop on empty index, cache `int(key)` once per iteration
46
+ - **Performance: cluster table DDL** — `_cluster_table_ready` flag skips `CREATE TABLE IF NOT EXISTS` on repeated calls; cached `_cluster_table_name`
47
+ - **`_normalize_key`** now delegates to `_derive_key` instead of duplicating PBKDF2 logic
48
+ - **HNSW defaults** in `usearch_index.py` now sourced from `constants.py` (removed local duplicates)
49
+ - **Collection name regex** uses `constants.COLLECTION_NAME_PATTERN` instead of hardcoded pattern
50
+ - **`VectorDB` defaults** for `distance_strategy` and `quantization` sourced from `constants.DEFAULT_DISTANCE_STRATEGY` / `constants.DEFAULT_QUANTIZATION`
51
+ - **`_batched` utility** moved from `core.py` to `utils.py` for reuse; now used in `catalog.py` batch updates
52
+ - **`auto_tag`** uses `defaultdict(list)` instead of manual if-not-in pattern
53
+ - **`import random`** hoisted to module level in `utils.py` (was inside retry loop)
54
+ - **Streaming placeholder bug fixed** — `_process_streaming_batch` now correctly detects `None` placeholders (previously used empty list `[]`, preventing auto-embedding replacement)
55
+ - **README updated** to document `pip install simplevecdb[integrations]` installation
56
+
57
+ ### Removed
58
+
59
+ - LangChain and LlamaIndex packages from core `[project.dependencies]` (moved to `[project.optional-dependencies] integrations`)
60
+ - Duplicated HNSW default constants from `usearch_index.py` (now single source in `constants.py`)
61
+ - Unused `struct` import from `quantization.py`
62
+ - Unused `itertools` import from `core.py`
63
+
64
+ ## [2.2.1] - 2026-01-27
65
+
66
+ ### Changed
67
+
68
+ - Moved integration dependencies (langchain-core, langchain-openai, llama-index) from dev to main dependencies for easier installation
69
+ - Added bandit to dev dependencies for security linting in pre-commit
70
+ - Cleaned up duplicate dev dependency definitions
71
+
72
+ ## [2.2.0] - 2026-01-26
73
+
74
+ ### Added
75
+
76
+ - Version 2.2.0 release
77
+
8
78
  ## [2.1.0] - 2026-01-01
9
79
 
10
80
  ### Added
@@ -415,6 +485,11 @@ Benchmarks on i9-13900K & RTX 4090 with 10k vectors (384-dim):
415
485
  - **Documentation**: https://coderdayton.github.io/simplevecdb/
416
486
  - **License**: MIT
417
487
 
488
+ [2.3.0]: https://github.com/coderdayton/simplevecdb/releases/tag/v2.3.0
489
+ [2.2.1]: https://github.com/coderdayton/simplevecdb/releases/tag/v2.2.1
490
+ [2.2.0]: https://github.com/coderdayton/simplevecdb/releases/tag/v2.2.0
491
+ [2.1.0]: https://github.com/coderdayton/simplevecdb/releases/tag/v2.1.0
492
+ [2.0.0]: https://github.com/coderdayton/simplevecdb/releases/tag/v2.0.0
418
493
  [1.3.0]: https://github.com/coderdayton/simplevecdb/releases/tag/v1.3.0
419
494
  [1.2.0]: https://github.com/coderdayton/simplevecdb/releases/tag/v1.2.0
420
495
  [1.1.1]: https://github.com/coderdayton/simplevecdb/releases/tag/v1.1.1
File without changes
File without changes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: simplevecdb
3
- Version: 2.2.0
3
+ Version: 2.3.0
4
4
  Summary: Dead-simple local vector database powered by usearch HNSW.
5
5
  Author-email: Dayton Dunbar <coderdayton14@gmail.com>
6
6
  License: MIT
@@ -13,15 +13,14 @@ Requires-Dist: scikit-learn>=1.3.0
13
13
  Requires-Dist: sqlcipher3-binary>=0.5.0
14
14
  Requires-Dist: sqlite-vec>=0.1.6
15
15
  Requires-Dist: usearch>=2.16.3
16
- Provides-Extra: dev
17
- Requires-Dist: black>=23.0; extra == 'dev'
18
- Requires-Dist: mypy>=1.0; extra == 'dev'
19
- Requires-Dist: pytest-asyncio>=0.21; extra == 'dev'
20
- Requires-Dist: pytest-cov>=4.0; extra == 'dev'
21
- Requires-Dist: pytest>=7.0; extra == 'dev'
22
- Requires-Dist: ruff>=0.1.0; extra == 'dev'
23
16
  Provides-Extra: examples
24
17
  Requires-Dist: ollama; extra == 'examples'
18
+ Provides-Extra: integrations
19
+ Requires-Dist: langchain-core>=1.0.7; extra == 'integrations'
20
+ Requires-Dist: langchain-openai>=1.0.3; extra == 'integrations'
21
+ Requires-Dist: llama-index-llms-ollama>=0.9.0; extra == 'integrations'
22
+ Requires-Dist: llama-index-llms-openai-like>=0.5.3; extra == 'integrations'
23
+ Requires-Dist: llama-index>=0.14.8; extra == 'integrations'
25
24
  Provides-Extra: server
26
25
  Requires-Dist: fastapi>=0.115; extra == 'server'
27
26
  Requires-Dist: sentence-transformers>=5.0; extra == 'server'
@@ -45,7 +44,7 @@ SimpleVecDB brings **Chroma-like simplicity** to a single **SQLite file**. Built
45
44
  - **Blazing Fast** — 10-100x faster search via usearch HNSW. Adaptive: brute-force for <10k vectors (perfect recall), HNSW for larger collections.
46
45
  - **Truly Portable** — Runs anywhere SQLite runs: Linux, macOS, Windows, even WASM.
47
46
  - **Async Ready** — Full async/await support for web servers and concurrent workloads.
48
- - **Batteries Included** — Optional FastAPI embeddings server + LangChain/LlamaIndex integrations.
47
+ - **Batteries Included** — Optional FastAPI embeddings server + LangChain/LlamaIndex integrations via `[integrations]` extra.
49
48
  - **Production Ready** — Hybrid search (BM25 + vector), metadata filtering, multi-collection support, and automatic hardware acceleration.
50
49
 
51
50
  ### When to Choose SimpleVecDB
@@ -79,6 +78,9 @@ SimpleVecDB brings **Chroma-like simplicity** to a single **SQLite file**. Built
79
78
  # Standard installation (includes clustering, encryption)
80
79
  pip install simplevecdb
81
80
 
81
+ # With LangChain & LlamaIndex integrations
82
+ pip install "simplevecdb[integrations]"
83
+
82
84
  # With local embeddings server (adds 500MB+ models)
83
85
  pip install "simplevecdb[server]"
84
86
  ```
@@ -88,7 +90,6 @@ pip install "simplevecdb[server]"
88
90
  - Clustering (K-means, MiniBatch K-means, HDBSCAN)
89
91
  - Encryption (SQLCipher AES-256)
90
92
  - Async support
91
- - LangChain & LlamaIndex integrations
92
93
 
93
94
  **Verify Installation:**
94
95
 
@@ -177,6 +178,10 @@ See [Setup Guide](ENV_SETUP.md) for configuration: model registry, rate limits,
177
178
 
178
179
  Best for: Existing RAG pipelines, framework-based workflows.
179
180
 
181
+ ```bash
182
+ pip install "simplevecdb[integrations]"
183
+ ```
184
+
180
185
  ```python
181
186
  from simplevecdb.integrations.langchain import SimpleVecDBVectorStore
182
187
  from langchain_openai import OpenAIEmbeddings
@@ -346,7 +351,7 @@ Supports K-means, MiniBatch K-means, and HDBSCAN. See [Clustering Guide](https:/
346
351
  | **Quantization** | ✅ | FLOAT32, FLOAT16, INT8, BIT for 2-32x compression |
347
352
  | **Parallel Operations** | ✅ | `threads` parameter for add/search |
348
353
  | **Metadata Filtering** | ✅ | SQL `WHERE` clause support |
349
- | **Framework Integration** | ✅ | LangChain \& LlamaIndex adapters |
354
+ | **Framework Integration** | ✅ | LangChain \& LlamaIndex adapters via `[integrations]` extra |
350
355
  | **Hardware Acceleration** | ✅ | Auto-detects CUDA/MPS/CPU + SIMD via usearch |
351
356
  | **Local Embeddings** | ✅ | HuggingFace models via `[server]` extras |
352
357
  | **Built-in Encryption** | ✅ | SQLCipher AES-256 at-rest encryption via `[encryption]` extras |
@@ -15,7 +15,7 @@ SimpleVecDB brings **Chroma-like simplicity** to a single **SQLite file**. Built
15
15
  - **Blazing Fast** — 10-100x faster search via usearch HNSW. Adaptive: brute-force for <10k vectors (perfect recall), HNSW for larger collections.
16
16
  - **Truly Portable** — Runs anywhere SQLite runs: Linux, macOS, Windows, even WASM.
17
17
  - **Async Ready** — Full async/await support for web servers and concurrent workloads.
18
- - **Batteries Included** — Optional FastAPI embeddings server + LangChain/LlamaIndex integrations.
18
+ - **Batteries Included** — Optional FastAPI embeddings server + LangChain/LlamaIndex integrations via `[integrations]` extra.
19
19
  - **Production Ready** — Hybrid search (BM25 + vector), metadata filtering, multi-collection support, and automatic hardware acceleration.
20
20
 
21
21
  ### When to Choose SimpleVecDB
@@ -49,6 +49,9 @@ SimpleVecDB brings **Chroma-like simplicity** to a single **SQLite file**. Built
49
49
  # Standard installation (includes clustering, encryption)
50
50
  pip install simplevecdb
51
51
 
52
+ # With LangChain & LlamaIndex integrations
53
+ pip install "simplevecdb[integrations]"
54
+
52
55
  # With local embeddings server (adds 500MB+ models)
53
56
  pip install "simplevecdb[server]"
54
57
  ```
@@ -58,7 +61,6 @@ pip install "simplevecdb[server]"
58
61
  - Clustering (K-means, MiniBatch K-means, HDBSCAN)
59
62
  - Encryption (SQLCipher AES-256)
60
63
  - Async support
61
- - LangChain & LlamaIndex integrations
62
64
 
63
65
  **Verify Installation:**
64
66
 
@@ -147,6 +149,10 @@ See [Setup Guide](ENV_SETUP.md) for configuration: model registry, rate limits,
147
149
 
148
150
  Best for: Existing RAG pipelines, framework-based workflows.
149
151
 
152
+ ```bash
153
+ pip install "simplevecdb[integrations]"
154
+ ```
155
+
150
156
  ```python
151
157
  from simplevecdb.integrations.langchain import SimpleVecDBVectorStore
152
158
  from langchain_openai import OpenAIEmbeddings
@@ -316,7 +322,7 @@ Supports K-means, MiniBatch K-means, and HDBSCAN. See [Clustering Guide](https:/
316
322
  | **Quantization** | ✅ | FLOAT32, FLOAT16, INT8, BIT for 2-32x compression |
317
323
  | **Parallel Operations** | ✅ | `threads` parameter for add/search |
318
324
  | **Metadata Filtering** | ✅ | SQL `WHERE` clause support |
319
- | **Framework Integration** | ✅ | LangChain \& LlamaIndex adapters |
325
+ | **Framework Integration** | ✅ | LangChain \& LlamaIndex adapters via `[integrations]` extra |
320
326
  | **Hardware Acceleration** | ✅ | Auto-detects CUDA/MPS/CPU + SIMD via usearch |
321
327
  | **Local Embeddings** | ✅ | HuggingFace models via `[server]` extras |
322
328
  | **Built-in Encryption** | ✅ | SQLCipher AES-256 at-rest encryption via `[encryption]` extras |
File without changes
File without changes
File without changes
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "simplevecdb"
3
- version = "2.2.0"
3
+ version = "2.3.0"
4
4
  description = "Dead-simple local vector database powered by usearch HNSW."
5
5
  authors = [{ name = "Dayton Dunbar", email = "coderdayton14@gmail.com" }]
6
6
  license = { text = "MIT" }
@@ -18,19 +18,18 @@ dependencies = [
18
18
  ]
19
19
 
20
20
  [project.optional-dependencies]
21
+ integrations = [
22
+ "langchain-core>=1.0.7",
23
+ "langchain-openai>=1.0.3",
24
+ "llama-index>=0.14.8",
25
+ "llama-index-llms-ollama>=0.9.0",
26
+ "llama-index-llms-openai-like>=0.5.3",
27
+ ]
21
28
  server = [
22
29
  "fastapi>=0.115",
23
30
  "uvicorn[standard]>=0.30",
24
31
  "sentence-transformers>=5.0", # 500MB+ models
25
32
  ]
26
- dev = [
27
- "pytest>=7.0",
28
- "pytest-asyncio>=0.21",
29
- "pytest-cov>=4.0",
30
- "black>=23.0",
31
- "ruff>=0.1.0",
32
- "mypy>=1.0",
33
- ]
34
33
  examples = ["ollama"]
35
34
 
36
35
  [dependency-groups]
@@ -42,11 +41,6 @@ dev = [
42
41
  "sentence-transformers>=5.0",
43
42
  "fastapi>=0.115",
44
43
  "uvicorn[standard]>=0.30",
45
- "langchain-core>=1.0.7",
46
- "llama-index>=0.14.8",
47
- "llama-index-llms-ollama>=0.9.0",
48
- "llama-index-llms-openai-like>=0.5.3",
49
- "langchain-openai>=1.0.3",
50
44
  "pre-commit>=4.0.0",
51
45
  "ruff>=0.1.0",
52
46
  "mypy>=1.0.0",
@@ -57,9 +51,7 @@ dev = [
57
51
  "mkdocs-shadcn>=0.9.7",
58
52
  "pymdown-extensions>=10.0",
59
53
  "sqlcipher3-binary>=0.5.0",
60
- "cryptography>=41.0",
61
- "scikit-learn>=1.3.0",
62
- "hdbscan>=0.8.33",
54
+ "bandit>=1.9.3",
63
55
  ]
64
56
 
65
57
  [build-system]
@@ -76,9 +68,9 @@ markers = [
76
68
  ]
77
69
 
78
70
  [tool.ruff]
79
- target-version = "py310"
71
+ target-version = "py312"
80
72
  exclude = ["exploration", "docs", "htmlcov", "site"]
81
73
 
82
74
  [tool.mypy]
83
- python_version = "3.10"
75
+ python_version = "3.12"
84
76
  exclude = ["exploration", "docs", "htmlcov", "site"]
@@ -11,13 +11,15 @@ from .types import (
11
11
  from .core import VectorDB, VectorCollection, get_optimal_batch_size
12
12
  from .async_core import AsyncVectorDB, AsyncVectorCollection
13
13
  from .config import config
14
- from .integrations.langchain import SimpleVecDBVectorStore
15
- from .integrations.llamaindex import SimpleVecDBLlamaStore
14
+ try:
15
+ from .integrations import SimpleVecDBVectorStore, SimpleVecDBLlamaStore
16
+ except ImportError:
17
+ pass
16
18
  from .logging import get_logger, configure_logging, log_operation
17
19
  from .utils import DatabaseLockedError, retry_on_lock, validate_filter
18
20
  from .encryption import EncryptionError, EncryptionUnavailableError
19
21
 
20
- __version__ = "2.2.0"
22
+ __version__ = "2.3.0"
21
23
  __all__ = [
22
24
  # Core classes
23
25
  "VectorDB",