Skip to content

Release 2.5.0 - #15

Merged
CoderDayton merged 5 commits into
mainfrom
release/2.5.0
Apr 7, 2026
Merged

Release 2.5.0#15
CoderDayton merged 5 commits into
mainfrom
release/2.5.0

Conversation

@CoderDayton

Copy link
Copy Markdown
Owner

Summary

simplevecdb 2.5.0 — 25 files changed, +2186/-211 lines, 544 tests passing.

Correctness

  • Fix delete_by_ids ordering (SQLite first, then usearch)
  • Fix _matches_filter string semantics (exact equality, not substring)
  • Fix list_collections to scan sqlite_master (persists across sessions)
  • Fix collection() cache key to include strategy/quantization
  • Enable WAL mode for encrypted databases

Performance

  • Batch usearch add/remove/get operations
  • Iterative deepening for filtered search (k×3 → adaptive k×30)
  • File-size-based mmap threshold (50MB)

Robustness

  • Connection health check on startup
  • async_retry_on_lock decorator (non-blocking)
  • FTS table creation retries on transient lock errors
  • Cross-process file locking on .usearch files

API Additions

  • delete_collection() (sync + async)
  • store_embeddings=False default (2x storage savings, seamless MMR fallback)
  • FLOAT16 quantization fully implemented
  • __repr__ on all 4 main classes
  • Pagination (limit/offset) on get_documents and catalog methods

Embeddings Server

  • Graceful shutdown with SIGTERM/SIGINT draining
  • CORS middleware for browser-based clients
  • Model warm-up on startup (--no-warmup to skip)
  • Input validation (empty strings, text length cap)
  • Proper argparse CLI with --help
  • Startup banner with config summary
  • Nested token array normalization
  • Async executor offload for non-blocking embedding
  • OpenAPI version synced from package metadata
  • Module __init__.py exports

Maintenance

  • Remove duplicate _dim property
  • Restore sysctl for Apple chip detection

Breaking Changes

  • String metadata filters now use exact equality (was substring)
  • store_embeddings defaults to False
  • offset without limit raises ValueError

Test plan

  • 544 unit tests passing (92 new for 2.5.0 features)
  • Build succeeds (uv build produces wheel + sdist)
  • Code review completed — all findings addressed
  • Changelog and README updated

🤖 Generated with Claude Code

…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.
@CoderDayton CoderDayton self-assigned this Apr 7, 2026
@CoderDayton
CoderDayton merged commit 43547fe into main Apr 7, 2026
9 checks passed
@CoderDayton
CoderDayton deleted the release/2.5.0 branch April 7, 2026 10:32

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread src/simplevecdb/core.py
Comment thread src/simplevecdb/core.py
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant