Skip to content

v0.100.0

Latest

Choose a tag to compare

@github-actions github-actions released this 16 Oct 04:14

Added

  • Read which embedding identity a vector store's index was written with: IVectorStore.GetRecordedIdentityAsync().
    It returns the recorded provider, model, dimension and revision from the store itself, so a fresh instance — a restarted
    process, a copied data folder, a restored backup — answers too, and a consumer no longer needs a side file to know
    whether the index matches its configured model. The PostgreSQL, plain SQLite and Qdrant (Fixed) stores return the
    record they already keep. SQLiteVecVectorStore now records the identity of its latest vector write (single or batch)
    in the same fluxindex_vector_identity table (row vec0), and ClearAsync removes it; a switched model is still given
    its own fingerprinted table, not refused. The in-memory store and stores that record nothing return null, which is also
    the interface default.

Fixed

  • Large keyword-index batches on SQLite are fast again. Since 0.96.0 the SQLite keyword index wrote chunks, postings
    and filter rows as multi-row VALUES statements with up to 8,000 named parameters each, and SQLite resolves a
    parameter name by scanning the statement's names, so binding cost the square of the parameter count: indexing 10,000
    short documents in one batch (as IndexDocumentsBatchAsync does) took 12–28 s where 0.95.0 took 2 s. Rows now go
    through one prepared statement rebound per row, and existing terms are looked up with one JSON array parameter
    (json_each) instead of one parameter per term. The same batch takes about 1.5 s; one with a large vocabulary
    (117,000 distinct terms) went from 4.7 s to 2.1 s. PostgreSQL is unchanged (it sends arrays).

Dependencies

  • Re-pinned sibling package(s) FluxGuard.Remote 0.22.1 -> 0.23.0.
  • Re-pinned sibling package(s) FluxGuard.Remote 0.23.0 -> 0.23.1.