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.
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.bandit +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.env.example +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.github/FUNDING.yml +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.github/dependabot.yml +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.github/workflows/ci.yml +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.github/workflows/publish.yml +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.github/workflows/security.yml +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.github/workflows/update-sponsors.yml +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.gitignore +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/.pre-commit-config.yaml +7 -0
- simplevecdb-2.3.0/.python-version +1 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/CHANGELOG.md +75 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/CODE_OF_CONDUCT.md +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/CONTRIBUTING.md +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/LICENSE +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/PKG-INFO +16 -11
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/README.md +9 -3
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/SECURITY.md +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/CHANGELOG.md +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/CONTRIBUTING.md +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/ENV_SETUP.md +0 -0
- simplevecdb-2.2.0/src/simplevecdb/embeddings/__init__.py → simplevecdb-2.3.0/docs/LICENSE +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/async.md +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/config.md +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/core.md +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/embeddings.md +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/encryption.md +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/engine/catalog.md +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/engine/quantization.md +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/engine/search.md +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/integrations.md +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/api/types.md +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/benchmarks.md +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/examples.md +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/guides/clustering.md +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/docs/index.md +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/examples/auto_embed.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/examples/backend_benchmark.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/examples/embeddings/perf_benchmark.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/examples/quant_benchmark.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/examples/rag/langchain_rag.ipynb +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/examples/rag/llama_rag.ipynb +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/examples/rag/ollama_rag.ipynb +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/examples/smoke_test.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/mkdocs.yml +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/pyproject.toml +11 -19
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/__init__.py +5 -3
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/async_core.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/config.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/constants.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/core.py +61 -45
- simplevecdb-2.3.0/src/simplevecdb/embeddings/__init__.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/embeddings/models.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/embeddings/server.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/encryption.py +4 -17
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/engine/__init__.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/engine/catalog.py +80 -42
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/engine/clustering.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/engine/quantization.py +1 -2
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/engine/search.py +53 -41
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/engine/usearch_index.py +9 -11
- simplevecdb-2.3.0/src/simplevecdb/integrations/__init__.py +22 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/integrations/langchain.py +10 -3
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/integrations/llamaindex.py +17 -10
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/logging.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/types.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/src/simplevecdb/utils.py +36 -2
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/conftest.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/integration/test_langchain.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/integration/test_llamaindex.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/integration/test_rag.py +3 -1
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/integration/test_server.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/integration/test_v21_features.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/perf/test_batch_detection.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/perf/test_performance.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/core/__init__.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/core/test_batch_detection.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/core/test_core_additional_coverage.py +0 -0
- simplevecdb-2.3.0/tests/unit/core/test_factory_methods.py +67 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/core/test_filters.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/core/test_initialization.py +0 -0
- simplevecdb-2.3.0/tests/unit/core/test_missing_coverage.py +609 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/core/test_quantization.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/core/test_similarity_search.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/embeddings/__init__.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/embeddings/test_models.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/embeddings/test_server.py +0 -0
- simplevecdb-2.3.0/tests/unit/embeddings/test_server_coverage.py +260 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/integrations/__init__.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/integrations/test_langchain_coverage.py +5 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/integrations/test_llamaindex_coverage.py +5 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_async.py +0 -0
- simplevecdb-2.3.0/tests/unit/test_async_coverage.py +140 -0
- simplevecdb-2.3.0/tests/unit/test_catalog_coverage.py +331 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_clustering.py +121 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_config.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_core.py +23 -4
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_cross_collection_search.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_encryption.py +0 -0
- simplevecdb-2.3.0/tests/unit/test_encryption_coverage.py +298 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_error_handling.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_hierarchy.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_multi_collection.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_search.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_search_coverage.py +0 -0
- simplevecdb-2.3.0/tests/unit/test_search_missing_coverage.py +195 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_streaming.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_types.py +0 -0
- simplevecdb-2.3.0/tests/unit/test_usearch_index_missing_coverage.py +430 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/tests/unit/test_utils.py +0 -0
- {simplevecdb-2.2.0 → simplevecdb-2.3.0}/uv.lock +74 -85
- simplevecdb-2.2.0/.python-version +0 -1
- simplevecdb-2.2.0/docs/LICENSE +0 -1
- simplevecdb-2.2.0/src/simplevecdb/integrations/__init__.py +0 -9
- simplevecdb-2.2.0/tests/unit/core/test_factory_methods.py +0 -27
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: simplevecdb
|
|
3
|
-
Version: 2.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "simplevecdb"
|
|
3
|
-
version = "2.
|
|
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
|
-
"
|
|
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 = "
|
|
71
|
+
target-version = "py312"
|
|
80
72
|
exclude = ["exploration", "docs", "htmlcov", "site"]
|
|
81
73
|
|
|
82
74
|
[tool.mypy]
|
|
83
|
-
python_version = "3.
|
|
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
|
-
|
|
15
|
-
from .integrations
|
|
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.
|
|
22
|
+
__version__ = "2.3.0"
|
|
21
23
|
__all__ = [
|
|
22
24
|
# Core classes
|
|
23
25
|
"VectorDB",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|