v2.4.0
What's New
Added
- Public catalog API on VectorCollection + AsyncVectorCollection:
get_documents(),get_embeddings_by_ids(),update_metadata(),count(),save(),dim - Executor injection on AsyncVectorDB — share a single-threaded executor for ONNX/usearch thread safety
- Full async hierarchy API —
rebuild_index,get_children/parent/descendants/ancestors,set_parent
Fixed
VectorDB.close()was leaking file descriptors (missingconn.close())close()now guaranteesconn.close()even ifsave()failsadd_documentsID recovery raced under concurrent inserts — now useslast_insert_rowid()arithmetic- String metadata filter used
LIKEsubstring match — now uses exact=equality update_metadata_batchpartial commits on crash — now wrapped in single transactionrebuild_index(connectivity=0)silently used default — now usesis not Nonechecksearch_collectionsparallel futures now timeout after 30s instead of hanging foreverAsyncVectorDB.close()no longer blocks indefinitely on stuck tasks- Recursive
get_descendants/get_ancestorscapped at depth 100 to prevent infinite loops RateLimitercleanup capped to 500 evictions per call to bound lock time- HuggingFace download now has
etag_timeout=30with local-cache fallback embed_textsrejects batches over 10,000 to prevent unbounded CPU timeretry_on_lockenforcestotal_timeout=10sbudget
Changed
__version__now sourced fromimportlib.metadata(single source of truth in pyproject.toml)
Full Changelog: https://github.com/CoderDayton/SimpleVecDB/blob/main/CHANGELOG.md