You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Breaking: the PostgreSQL, plain SQLite and in-memory vector stores refuse a model other than the one their vectors
were written with.VectorStoreBase now implements BindIdentity/BoundIdentity: binding a different identity on
the same instance throws EmbeddingModelMismatchException, and the PostgreSQL and SQLite stores record the identity in
a fluxindex_vector_identity table (created on first use) and compare it at the next write or search — so a later
request scope (both stores are registered Scoped) or process bound to another model is refused instead of mixing two
models' vectors in one table. A store that holds vectors but no record (written before this release) adopts the bound
identity with a warning; ClearAsync removes the record. A custom VectorStoreBase store gets the in-instance check
and can persist the record by overriding ReadRecordedIdentityAsync / WriteRecordedIdentityAsync / ForgetRecordedIdentityAsync. EmbeddingIdentityRecord (Core) is the shared record format. BindIdentity(null)
throws ArgumentNullException: a test double for IEmbeddingService used with one of these stores (directly, or through
a pipeline that binds the pair, as FluxFeed does) must return an identity from GetIdentity().
Documentation
The README states the SQLite stores' measured search latency: full scan p50 6.6 s vs sqlite-vec 45 ms over 43,293
vectors (identical top 10), with the guidance to use sqlite-vec past a few thousand chunks.
Fixed
Breaking: a Qdrant collection named without the model refuses a switched model after a restart too. With CollectionNamingStrategy.Fixed, the store records the bound embedding identity (provider, model, dimension, revision)
in the collection metadata and compares it when a later instance — another process, a restart — binds an identity:
a different one throws EmbeddingModelMismatchException instead of storing and searching vectors of two models in
one collection. A collection that holds points but no record (written before this release) adopts the bound identity
with a warning; recording leaves the collection's other settings (quantization) as they are. ModelFingerprint
collections already carry the model in their name and are unchanged. A Qdrant server that keeps no collection metadata
falls back to the in-process check.
Breaking: QdrantVectorStore.ClearAsync clears the store's collection on a new instance too. It used to return
without deleting anything until the instance had stored or searched once, so a startup clear (a reset command, a test
fixture) left the data an earlier process wrote. It now clears the collection the naming strategy names — the base name
(Fixed), or the base name plus the bound identity's fingerprint (ModelFingerprint) — and a missing collection is
nothing to clear. With ModelFingerprint, no bound identity and nothing resolved yet it throws InvalidOperationException instead of guessing; a failed delete now propagates instead of being logged and treated as
done. Migration: bind the identity before clearing a ModelFingerprint store directly, and handle the delete failure
where you call it.