Skip to content

VectrixDB 2.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 09 Oct 14:39
a1e5826

Added

  • The server stays up under load.
  • More MCP tools, resources and prompts.
  • A skill for an assistant connected over MCP.
  • The docs, grown.
  • One release, every registry.
  • The documentation's home page shows every way in:
  • A client in four languages, one surface.
  • Clients safe to point anywhere.
  • A company's presets, its command's name, and its keychain.
  • The vectrixdb command on a server.
  • Run it inside a company's registry.
  • vectrixdb doctor tries every part of an install.
  • A collection keeps up with feeds and pages.
  • A release is one button and one approval.
  • Container images, for Intel and ARM, signed.
  • vectrixdb extract-serve starts the extraction service
  • The key for an extraction service can come from a file.
  • vectrixdb check knows the variables Kubernetes sets.
  • Searches, ingestion and evaluation runs can be traced, off until asked.
  • MCP on the server, for a team or a company.
  • vectrixdb mcp over HTTP serves the reading tools only
  • A rechunk can be previewed.
  • The docs have an index for coding agents and a prompt to give one.
  • The test-question writer spreads its questions and judges harder.
  • stale_evidence() says which questions' quotes have left the index.
  • Moving pictures of the dashboard.
  • VectrixSync.cdc() carries deletes to the target.
  • scripts/dashboard_shots.py retakes the dashboard's pictures.
  • Single sign-on, before its provider is set up.
  • A security group is narrowed to a list of people.
  • Emergency sign-in.
  • Single sign-on and the People list, together.
  • Single sign-on needs somebody named.
  • An app's token needs no place on the list.
  • Developer Access.
  • A path for each endpoint behind a gateway.
  • vectrixdb check says what reads each kind of file.
  • The restricted note says why.
  • The brand goes further.
  • About, for admins.
  • A NOTICE file travels with VectrixDB.
  • A web page is read as its content.
  • A PDF is read by PDFium, from where its text sits.
  • A chart a PDF draws is described.
  • The pages the rules are unsure of are read by sight.
  • A file is known by its bytes.
  • Spreadsheets read as they print.
  • Word and PowerPoint read as they print.
  • RTF and OpenDocument files are read.
  • Who said what, in the languages it was said in.
  • What a video shows.
  • A picture's values come as rows.
  • The walkthrough tries regions in the order you write them.
  • The walkthrough makes a Translator.
  • The steps have a requirements file.

Changed

  • vectrixdb check says when a key leaves reads open.
  • The mcp extra needs mcp 2 or later.
  • A YouTube video with captions is read from them, not transcribed.
  • The authenticator's QR code is drawn as the dashboard's own.
  • The walkthrough sets how the query app scales.
  • Three ways to set sign-in, and passkeys with one of them.
  • Emergency sign-in goes with every way in.
  • Developer Access is found by the spinner.
  • GraphRAG on Bedrock asks with Converse.
  • The examples are not in the repository.
  • Types are checked as Python 3.12
  • The walkthrough's chat model is gpt-5.4-mini.
  • The documents extra brings pypdfium2 and xlrd,
  • Extraction quality judges prose.
  • A masked JSON reply masks everything in it,
  • A busy service answers 503.

Fixed

  • A signed link stays secret.
  • A bot check is refused, not indexed.
  • Three optional models are found where they were published.
  • Two results that score alike come back in the same order every time.
  • Years and figures are not phone numbers.
  • A table's stacked column headings head their own columns.
  • A footnote mark glued to its word is cut loose on every page,
  • Keyword and hybrid search run in the store that holds the text.
  • VECTRIXDB_OFFLINE holds for the speech model.
  • The audit before release.
  • The README's pictures showed as broken images.
  • mypy vectrixdb failed in CI with numpy 2.4's stubs.
  • The docs no longer describe what left with visibility.
  • A guest opening a collection is not asked to sign in.
  • Policied counts the same on both pages.
  • A test of a killed writer miscounted.
  • A fresh checkout passes its own tests.
  • A collection's Overview drew nothing for somebody signed in.
  • A tab the collection's policy refuses is no longer left blank.
  • Counts on a deployment.
  • The line under the single sign-on screens sits in the middle.
  • The second vector installs with the Azure extra.
  • The walkthrough's query app asks people to sign in.
  • The walkthrough's query app finds its collections.
  • The walkthrough's query app has guests.
  • The walkthrough's Cosmos account has one database, data_db.
  • The walkthrough's embedding model keeps up with an annual report.
  • A collection kept in the cloud opens where nothing was written before.
  • A Markdown table whose header leaves out the label column reads right.
  • A web page's text has no empty lines of spaces and no empty items.
  • An old page reads whole and in time.
  • A web page is decoded in the charset it names.
  • Step 03 no longer reads a working create as a refusal.
  • The records' database is data_db.
  • The walkthrough's app is deployed twice: reads and queries apart.
  • Reading a file survives a bad hour.
  • The walkthrough's dashboard shows the files that would not read.
  • A run records the collections it ran over.
  • A collection's knowledge graph is kept where every server reads it.
  • The overview recomposed, and a guest's overview drawn from it.
  • A collection's record is its policy, and nothing else.

Removed

  • Visibility, the masking switch and per-document policies on records.
  • The dashboard's charts, redrawn, and every list ten a page.
  • The error catalogue.
  • Masking with an engine that reads meaning, before a document is indexed.
  • Who may retrieve from a collection: its policy, checked before anything is searched.
  • Visibility is private or public, and a guest reads excerpts.
  • The dashboard shows and sets who may retrieve.
  • The Azure walkthrough's app makes a collection the way its steps do.
  • Each collection's rules in one record every server reads.
  • The audit trail and the access log in append blobs nothing can rewrite.
  • Readable Cosmos DB items.
  • The chunking techniques compared, and the Evaluate page's Chunking tab.
  • A cut and a way of searching a host can follow the runs for, or pin.
  • Runs are kept by kind: retrieval/runs/<id>/ and chunking/runs/<id>/.
  • Four more ways to cut and embed.
  • A golden row keeps its evidence: the words that answer it.
  • The collection pages count every instance's chunks, not one.
  • It runs behind a gateway.
  • VECTRIXDB_TRUSTED_PROXIES says whose X-Forwarded-For to believe.
  • The OpenAPI document ships with the release.
  • Running heads and feet are taken out, and named.
  • A chunk knows whether its own page was read by OCR.
  • An HTML table in an extractor's reply becomes rows
  • compare_extractors
  • A document fetched from a bucket keeps its pictures.
  • A walkthrough that deploys the whole thing on Azure
  • Where to stop answering is measured, not borrowed.
  • evaluation.sweep() compares how documents are cut.
  • vectrixdb golden label
  • Two homes.
  • A figure found by what it looks like.
  • The rest of the dashboard's trends
  • The Evaluate page has five bands: first, top 3, top 5, top 10, missed.
  • A reference extraction server
  • A queue between the storage event and the worker on Azure
  • The server records how long a search took, and the Overview draws it.
  • The Overview and Audit pages have charts.
  • Every refusal is one shape.
  • An app can act as the person using it: VECTRIXDB_OIDC_API_AUDIENCE.
  • A rate limit several servers share, and one for keys.
  • vectrixdb keys add | list | revoke.
  • vectrixdb check --url
  • A key can be narrower than a role: collections and expires_in_days.
  • A key may arrive as Authorization: Bearer.
  • Build an app on it
  • Put it behind a gateway
  • Masking of email addresses, phone numbers and card numbers.
  • Reference pages read off the code.
  • Two pages for knowing it all.
  • A test extra
  • A collection's health says whether it has a knowledge graph
  • Evaluate every setup, and pick one of three.
  • Golden files from anywhere, and a template to fill.
  • A golden file is checked before a run, against one published schema.
  • A golden answer can be one page of a document.
  • The walkthrough's files are a mirror of the storage account.
  • vectrixdb golden template and vectrixdb evaluate.
  • The Evaluate pages.
  • A Function App that evaluates when the golden file changes.
  • Azure's semantic ranker, chosen search by search.
  • Expected documents are looked up before an evaluation searches.
  • Older runs, one menu away.
  • A note when a run is missing documents.
  • The golden file a run used, for an admin to download.
  • vectrixdb check, an env file and a template.
  • The access log on the server's output.
  • relevance: how good a match is, from 0 to 1, the same on every engine.
  • The same number from Azure AI Search and OpenSearch.
  • A collection's card says what it can do and what it is built with.
  • A chunk's text is sent when somebody asks for that chunk.
  • Opening a whole document is its own permission, document.read.
  • Search excerpts, cut on the server.
  • The quality report says why.
  • People sign in to the server and its dashboard.
  • Passkeys.
  • How you sign in.
  • Confirm it's you.
  • Passwords, only if you want them.
  • A lock that grows.
  • Single sign-on by security group and an address list.
  • Guests and shared collections.
  • API keys for scripts.
  • Sign-in kept where several servers can share it.
  • Passkeys only, if you want that.
  • A certificate in place of a client secret.
  • A company's own name, logo and colour.
  • The dashboard is light by default,
  • Roles.
  • A signed-in person can search a collection that carries a policy.
  • An access log.
  • Policy and filter pushdown on OpenSearch.
  • embeddings= on OpenSearch, with Bedrock.
  • reranker= on Vectrix.
  • A burst of events.
  • vectrixdb.evaluation.
  • A reference AWS stack
  • search(vectors=) and vector_weights.
  • More than one dense model locally.
  • Documents over REST.
  • The dashboard reads documents through the server.
  • keep_source: the Markdown a document was indexed from is kept.
  • Front matter.
  • The worker reads an original once.
  • The figure block.
  • describe_figures=.
  • Extraction is a slot.
  • Engines for what is not text yet.
  • Extras named for what the file becomes.
  • embed_heading=True on add_document().
  • Tables are rows wherever they come from.
  • XLSX, PPTX and CSV loaders.
  • Rerank on Azure AI Search means the service's semantic ranker.
  • Sentences survive the page break, and figures are chunks of their own.
  • An ingestion worker for every event source.
  • Citations.
  • Engine pushdown on Azure AI Search.
  • The dashboard, rebuilt.
  • Inspection routes
  • "rerank": true on /text-search
  • Every REST write mints an index build id
  • Entitlement policies: a filter a collection cannot be queried without.
  • A slimmer wheel: e5-small-v2 is fetched once instead of shipped.
  • An audit sink under an object lock.
  • An extraction quality signal, measured before it was shipped.
  • A decision can be restated.
  • Provenance on every chunk, and on the ingestion record.
  • The evidence pack.
  • A timing floor, for the one channel a filter cannot close.
  • The write path's half of the policy: a value no rule can decide on.
  • A live row level security suite, gated.
  • A test kit for your own policies, shipped rather than kept in ours.
  • A document the policy could never show anybody is refused at the write.
  • The write path is audited too.
  • A policied read can run as a database role, so PostgreSQL enforces it.
  • Translating a policy into SQL is off the plan.
  • revoke(): change entitlements across many chunks in one call.
  • The wheel job runs the README's own first example.
  • The id lookups are gated too, and a closed collection answers nothing.
  • A policied collection searched through Collection says so.
  • An append-only PostgreSQL sink for decision records.
  • A decision record for every policied read, and somewhere to put it.
  • The README covers conversation memory and the MCP server.
  • Lakebase and Aurora PostgreSQL can be run against the real service.
  • Every documentation page with a Python example now runs in CI.
  • Nine filter operators gained tests.
  • Thirteen regression tests, each with a replay.
  • Every storage backend now passes the contract suite on every push.
  • A collection can be written past RAM.
  • Graph quality block.
  • Examples gallery and governance.
  • Developer experience block.
  • Memory block: memory is finite and facts conflict.
  • Azure AI Search storage backend.
  • Ingestion block: where RAG quality is decided.
  • Trust block: measured, reproducible, published.
  • search(rerank=False)
  • DenseEmbedder.embed(pad_to_longest=True)
  • Testing block.
  • tokenizer.encode_batch(pad_to_longest=True)
  • search(explain=True)
  • Fusion control.
  • Query expansion and HyDE.
  • Field boosts for keyword search.
  • Snapshots.
  • rebuild_index()
  • Read-only, memory-mapped opens.
  • AsyncVectrix
  • add_many()
  • The filter grammar is documented
  • scripts/compare_modes.py
  • import vectrixdb costs 4 ms, down from 585 ms warm and 1.2 s cold.
  • Nothing downloads unless asked.
  • Downloads are checksummed.
  • Vectrix is a real context manager.
  • numpy in, numpy out.
  • Notebook reprs and progress.
  • An explicit public surface.
  • Concurrency is documented
  • Memory per vector is measured
  • Python 3.14
  • ProductQuantizer.fit runs in seconds instead of minutes.
  • Token budgets on search.
  • score_gap
  • Conversation memory
  • An MCP server
  • tier="graph" now builds a knowledge graph.
  • Entity resolution that understands names
  • config.entity_similarity_threshold is finally read.
  • Confidence labels on relationships
  • Typing marker (py.typed).
  • A public exception hierarchy
  • CI that runs before release.

Security

  • The audit before release.
  • The dashboard runs no inline script, and its policy refuses all of it.
  • The chart library is pinned by its hash.
  • Any-origin CORS stops the start while sign-in is on.
  • Every reply carries security headers.
  • A collection or document name could run script in the dashboard.
  • Session cookies only this host can set.
  • A collection name was used as a filesystem path with nothing checked.
  • An empty API key was replaced by the environment's real one.
  • A user in no groups saw every document.
  • Cosmos DB queries now use bind parameters.
  • Databricks SQL values are bound, not escaped.

Changed

  • The Azure walkthrough pushes each collection's record, and records every decision.
  • Graph routes refuse in words a person can act on.
  • CI tests what it claims to.
  • The benchmarks were run again
  • A missing OpenAI key is a ConfigurationError,
  • The sidebar folds from its own header.
  • Search results lead with relevance.
  • A search mode the chosen collection cannot do is greyed out and says why.
  • A card no longer says "hybrid" beside a tag that says "dense".
  • The Quality tab's "Worst chunks" is "Below the quality line".
  • The start-up banner says the API key is set and does not show it.
  • The count of things that need attention is red, at zero too.
  • Settings is a menu behind a gear in the top bar, not a page.
  • The dashboard's look.
  • A build id is shown as an id.
  • Settings no longer lists the models on the machine.
  • The dashboard works at three widths.
  • Audit record schema version 2.
  • The library no longer writes to stdout.
  • Coverage is 85.1%, from 50.4%,
  • mypy is clean and CI gates on it.
  • The README led nowhere.
  • PyPI's Documentation link pointed back at the README.
  • uv is documented, because it already worked.
  • The bundled English dense model is now bge-small-en-v1.5 (INT8).
  • Graph search says when it fell back.
  • Community detection and summarisation run only when the graph changed.
  • The regex extractor sees lowercase prose.
  • Type checking is a ratchet with teeth.
  • The core install is five dependencies instead of thirteen.
  • The document index was completely broken on SQLite.
  • The one-line quick start failed on a clean install.

Deprecated

Removed

  • setup.py and requirements.txt,
  • filter_sql, ahead of its schedule.

Fixed

  • A scanned page in two columns was read across the columns.
  • Text that loops scored a perfect 1.0 on extraction quality.
  • No collection card alone on a row.
  • The keys table says what a key may do in full.
  • The hand-written notebooks are out of tests/.
  • The CI coverage job would have failed on its first run.
  • Cosmos DB asked to create the document containers on every write.
  • The dashboard said "1 chunks".
  • A hybrid search spent most of its time on highlights nothing read.
  • scripts/compare_modes.py --doc deleted part of the page it updates.
  • The README's comparison table undersold two of the engines it compares.
  • scripts/replay.py counted a replay that never ran as one that passed.
  • Three scripts ignored --help and did their whole job.
  • Benchmark results say what produced them.
  • OpenSearch scores came back as one minus the engine's score,
  • The MCP server did not start on a fresh install.
  • A Markdown document of headings alone was indexed as nothing.
  • requests was imported and never declared.
  • The OpenAI embedder's errors were garbled.
  • Tests skipped far more than they needed to without an optional package.
  • Seven API test files could not be collected in CI
  • The golden graph fixture depended on what else was installed.
  • One test left the API modules re-imported for every test after it,
  • vectrixdb check said there was no admin when single sign-on maps one,
  • Rerank scored every result the same.
  • Search results could come back without their text.
  • The Overview counted no documents.
  • A viewer was offered what a viewer cannot do.
  • The sign-in card named ways in the server does not have.
  • A guest's shared collections table split on a phone.
  • Opening an Azure index could remove its semantic configuration.
  • vectrixdb serve --path kept sign-in state in the wrong folder.
  • The dashboard at tablet and phone widths.
  • A folded sidebar showed a squeezed copy of its name.
  • API keys were compared with ==.
  • A selective filter could miss documents that match.
  • An open sidebar drawer could not be closed.
  • The menu button did nothing on a desktop.
  • On a phone the dashboard's text overlapped.
  • An upgraded server could show the old dashboard.
  • A search repeated after a write returned the answer from before it.
  • A delete never reached the storage backend.
  • A revocation did not revoke anything a store served.
  • Clicking a point in the dashboard did nothing.
  • LocalFetcher could not read a real file URI on Windows.
  • The Azure backend dropped its filter on a semantic query.
  • The REST server never saved the ANN index after a write.
  • The dashboard's Rerank and Late interaction modes were dense search.
  • The dashboard said "Read Only" on a server with no key
  • The sparse index only knew ASCII letters.
  • A delete kept the build id.
  • The decision record's duration_ms included the timing floor's sleep.
  • BM25 counted documents the principal was refused.
  • Four read paths on Collection were never gated.
  • A wholesale denial returned instantly with time_ms=0.0.
  • mode="sparse" refused a principal it had been given.
  • A plain pip install vectrixdb could not create a collection.
  • vectrixdb-mcp answered a missing extra with a stack trace.
  • scroll() applied its filter after cutting the page.
  • Seven filter shapes raised out of the middle of a search.
  • A bounding box could not cross the antimeridian.
  • ColBERTEncoder returned random vectors.
  • The binary quantiser answered metrics it cannot measure.
  • The product quantiser's euclidean returned squared L2
  • A non-finite vector encoded to an ordinary-looking code.
  • The one live-backend job could never run.
  • A selective filter returned nothing at all.
  • Reading from a store that never held a document raised.
  • A missing model raised a bare FileNotFoundError.
  • The scalar quantiser truncated where it should round.
  • The product quantiser's cosine ranked by projection, not angle.
  • The product quantiser crashed on any duplicate-heavy corpus.
  • is_models_installed() said no on a correct install.
  • vectrixdb serve --no-dashboard served the dashboard.
  • index_text accepted a chunk size and discarded it.
  • VectrixSync.incremental() was full() under another name.
  • Deleting memories by an empty id list deleted everything.
  • $in and $nin were wrong for every list-valued field.
  • Absent, null and empty were the same thing to three operators.
  • A failed search on Lakebase returned an empty result set.
  • A collection that would not load was dropped in silence.
  • The binary quantiser could fit to NaN and report success.
  • Aurora PostgreSQL's hybrid search accepted a filter and ignored it.
  • A sparse model that cannot run was swapped for BM25 in silence.
  • VectrixSync.full(collections=[]) copied every collection.
  • Lakebase lost the vector on a round trip and could not update at all.
  • Delta Lake reported success whatever happened.
  • A search limit of zero returned one result.
  • The dashboard's file upload never worked.
  • A heavily deleted collection got slower with no sign of why.
  • One unbroken token could stop an ingest.
  • An explicit empty filter returned everything instead of nothing.
  • Cosine search could miss its own best hit.
  • Graph extraction dropped or dangled relationships when entities merged.
  • Merging two extraction results reset a fact to inferred.
  • LLMExtractor.extract_batch() ignored batch_size.
  • Three crashes and a silent miscount in the search helpers.
  • The chunker could exceed the size it was given, and repeat an offset.
  • VectrixSync.full() copied nothing and reported success.
  • VectrixDB.with_auto_scaling() raised TypeError on every call.
  • Graph extraction over more than one chunk crashed.
  • The global graph searcher stashed a score on somebody else's dataclass.
  • Enterprise search returned documents nobody was cleared to see.
  • A collection reported HNSW parameters it was not built with.
  • An installed ColBERT model was reported as missing.
  • vectrixdb download-models --type colbert raised KeyError.
  • A failed model download left its zip behind.
  • TextAnalyzer(stopwords=set()) stripped English stopwords anyway.
  • A new Point carried a naive timestamp.
  • The missing-dependency hint dropped the extra it names.
  • create_app(db_path=...) ignored its argument.
  • POST /api/v1/documents raised on every call.
  • The benchmarks page quoted e5-small-v2 numbers as bge-small-en-v1.5.
  • A deleted vector could hide the documents that remained.
  • Graph mode returned results in an order its scores did not explain.
  • Vector search spent most of its time outside the index.
  • AuroraPostgreSQLStorage could not be instantiated.
  • Readers in other processes failed while a writer was busy.
  • A process that only searched rewrote the index file on close.
  • Malformed filters escaped the parser as AttributeError.
  • Docs examples that could not run.
  • Search did not work. Four separate defects, now all fixed.
  • The reranker stage never ran for bundled models.
  • BM25 uses BM25's IDF.
  • The sparse index saw no CJK text.
  • Vectors in the local document store are float32 blobs.
  • NativeHNSWIndex is usable now.
  • create_app() can be called more than once.
  • The LLM and hybrid extractors could not be constructed.
  • DeltaLakeStorage could not be instantiated.
  • get() and similar() raised on every call.
  • A graph with no entities raised on every query.
  • A graph with no communities was indistinguishable from no graph.
  • Storage backends no longer swallow failures.
  • Adding the same text twice crashed.
  • geo_radius silently returned too few documents.
  • StringIndex contains behaved as equals.
  • The SQLite backend is now actually thread-safe.
  • SyncStatus.lag_seconds was wrong by the machine's UTC offset.
  • The Delta Lake backend wrote local-time timestamps
  • __version__ said 2.1.0 while the package was 2.1.7.

Known limitations

  • The bundled model is the weaker one for conversation memory.

Every entry in full: CHANGELOG.md