Conversation
edwinyyyu
marked this pull request as draft
September 10, 2026 20:37
This was referenced Sep 11, 2026
edwinyyyu
added a commit
to edwinyyyu/MemMachine
that referenced
this pull request
Sep 14, 2026
…, and close the filter union (speedkick)
A vector store is built for one collection, named at construction with its
vector dimensions and its declared `indexed_properties`; the composition
root builds one store per purpose-by-embedder cell. Within it, a partition
holds one tenant's records, and `VectorStorePartition` is the handle a
data consumer holds. Lifecycle on both storage components:
provision() # idempotent DDL
create_partition(key) # strict
get_partition(key) -> Partition | None # None when absent
delete_partition(key) # idempotent
Declared keys are typed, indexed columns of the SQLite records tables and
payload indexes on Qdrant and Milvus; a record or a filter naming an
undeclared key is rejected before anything is sent, so an undeclared key
never exists in a vector store. EventMemory routes the declared part of a
filter to the vector store and the rest to the segment store's
post-filter, widening the search up to `max_overfetch_factor`.
The filter language is a closed union: Equals, Ordering, In, IsNull, And,
Or, Not. `!=` parses as Not(Equals); Not is the complement on every
backend, so a record holding no value passes a negated predicate.
Datetimes are stored as microseconds since the epoch where a backend has
no datetime type. Each backend states its `supported_filter_nodes`.
Folds MemMachine#1613 and MemMachine#1615 into MemMachine#1606 and moves the whole off MemMachine#1597: the
routing is written against speedkick's EventMemory, and the session,
source and expansion parameters return with MemMachine#1597.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ESpWYTmCR7X3bJEpoA8SAn
edwinyyyu
force-pushed
the
feat/vector-store-handoff-speedkick
branch
from
September 14, 2026 16:41
c6af2c2 to
af60bb5
Compare
edwinyyyu
marked this pull request as ready for review
September 14, 2026 16:42
edwinyyyu
marked this pull request as draft
September 14, 2026 18:12
edwinyyyu
force-pushed
the
feat/vector-store-handoff-speedkick
branch
2 times, most recently
from
September 14, 2026 19:04
8a916c1 to
27dcc84
Compare
edwinyyyu
force-pushed
the
feat/vector-store-handoff-speedkick
branch
from
September 14, 2026 19:35
56dfc00 to
8393c04
Compare
This was referenced Sep 14, 2026
edwinyyyu
force-pushed
the
feat/vector-store-handoff-speedkick
branch
from
September 14, 2026 21:38
4518469 to
142ccfd
Compare
This was referenced Sep 14, 2026
Draft
[vector store 10/13] Make a vector store filter only on the properties it declares (speedkick)
#1628
Draft
`docs/openapi.json` predates the FastAPI release in `uv.lock` (0.141.1), whose `ValidationError` component carries `input` and `ctx`; regenerating the document with `docs/tools/generate_openapi.py` adds the two fields and changes nothing else. Separate from the API changes above it so their diffs of this file show only what they change. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ESpWYTmCR7X3bJEpoA8SAn
A project could declare `properties_schema`, a set of caller property keys with types, on its long-term memory configuration; the event backend merged it into the vector store collection's indexed schema and rejected filters on any other `m.<key>`. That let a tenant create database resources (indexes, columns) by naming them in a request, which is what forced per-collection native resources named by a hash of their schema on the backends that limit them. The option is removed from the server configuration, the project API and the memory-configuration API, the Python SDK, the sample configurations, the configuration docs and the OpenAPI document. A filter may name any `m.<key>`; the stores evaluate it on the properties they hold. What a store indexes is decided by the deployment, not per project. A breaking API change on `speedkick`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ESpWYTmCR7X3bJEpoA8SAn
edwinyyyu
force-pushed
the
feat/vector-store-handoff-speedkick
branch
from
September 14, 2026 21:49
142ccfd to
dc1e757
Compare
edwinyyyu
marked this pull request as ready for review
September 14, 2026 21:53
This was referenced Sep 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Purpose of the change
A project could declare
properties_schema, a set of caller property keys with types, on its long-term memory configuration; the event backend merged it into the vector store collection's indexed schema and rejected filters on any otherm.<key>. That let a tenant create database resources (indexes, columns) by naming them in a request, which is what forced per-collection native resources named by a hash of their schema on the backends that limit them.The option is removed from the server configuration, the project API and the memory-configuration API, the Python SDK, the sample configurations, the configuration docs and the OpenAPI document. A filter may name any
m.<key>; the stores evaluate it on the properties they hold. What a store indexes is decided by the deployment, not per project.A breaking API change on
speedkick.Stack
Slice 1 of 13, every PR targeting
speedkick; merge bottom-up.This PR's own change is its last commit,
dc1e757f(23 files changed, 12 insertions(+), 384 deletions(-)); under it,093652b4regeneratesdocs/openapi.jsonunder the locked FastAPI (ValidationErrorgainsinputandctx), so this and every later slice's diff of that file shows only what it changes. Sits directly onspeedkick; #1621 is stacked on it.Verification
ruff check,ruff format --check,ty check(two pre-existing spacy diagnostics),pytest packages/server/server_tests packages/client/client_tests: 2173 passed, 3 skipped, on this branch.🤖 Generated with Claude Code
https://claude.ai/code/session_01ESpWYTmCR7X3bJEpoA8SAn