Release 2.5.0 - #15
Merged
Merged
Conversation
…PI improvements Correctness: fix delete_by_ids ordering (SQLite first), exact string filter matching, list_collections persistence via sqlite_master, WAL for encrypted DBs, collection cache key includes strategy/quantization. Performance: batch usearch add/remove/get, iterative deepening for filtered search, file-size-based mmap threshold (50MB). Robustness: connection health check, async_retry_on_lock decorator, FTS retry on transient lock errors, cross-process file locking on .usearch files. API: delete_collection(), store_embeddings param (default False with seamless MMR fallback), FLOAT16 quantization, __repr__ on all classes, pagination (limit/offset) on get_documents and catalog methods. Maintenance: remove duplicate _dim property, replace subprocess sysctl with platform.processor(). 514 tests passing (62 new).
…ion, and CLI - Graceful shutdown with SIGTERM/SIGINT draining (10s timeout) - Async executor offload for embed_texts (non-blocking event loop) - Model warm-up on startup (--no-warmup to skip) - CORS middleware with configurable origins - Input validation: reject empty strings (422) and >100k char texts (413) - Proper argparse CLI replacing hand-rolled argv parsing - Startup banner logging config summary - Nested token array normalization (list[list[int]]) - OpenAPI version synced from package metadata - Module __init__.py exports (embed_texts, get_embedder, load_model, app, run_server) 544 tests passing (30 new).
- Add embeddings server enhancements to changelog - Update README: pagination examples, delete_collection usage, embeddings server CLI flags, feature matrix, roadmap
- list_collections: use set-based derivative filtering to correctly
handle collections named "test_fts" or "my_clusters" (was using
substring match that silently dropped them)
- AsyncVectorDB.delete_collection: evict from async-level _collections
cache (was only clearing sync cache, leaving stale wrappers)
- Pagination: raise ValueError("offset requires limit") instead of
silently ignoring offset when limit is None
- Revert platform.processor() back to subprocess sysctl for Apple chip
detection (platform.processor() returns 'arm' not chip brand strings)
- delete_collection: validate name against COLLECTION_NAME_PATTERN
before existence check
- _normalize_input: flat token array (list[int]) now produces one
embedding input per OpenAI spec, not N separate inputs
544 tests passing.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b419122c69
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
simplevecdb 2.5.0 — 25 files changed, +2186/-211 lines, 544 tests passing.
Correctness
delete_by_idsordering (SQLite first, then usearch)_matches_filterstring semantics (exact equality, not substring)list_collectionsto scansqlite_master(persists across sessions)collection()cache key to include strategy/quantizationPerformance
add/remove/getoperationsRobustness
async_retry_on_lockdecorator (non-blocking).usearchfilesAPI Additions
delete_collection()(sync + async)store_embeddings=Falsedefault (2x storage savings, seamless MMR fallback)__repr__on all 4 main classeslimit/offset) onget_documentsand catalog methodsEmbeddings Server
--no-warmupto skip)argparseCLI with--help__init__.pyexportsMaintenance
_dimpropertysysctlfor Apple chip detectionBreaking Changes
store_embeddingsdefaults toFalseoffsetwithoutlimitraisesValueErrorTest plan
uv buildproduces wheel + sdist)🤖 Generated with Claude Code