Implement QdrantVectorStore#1086
Conversation
4c523d4 to
b0b0187
Compare
6660b8a to
4a18ef4
Compare
a8004ec to
e1fa4d6
Compare
bfc4c81 to
43e9bda
Compare
43e9bda to
18e029c
Compare
04ddb04 to
110e807
Compare
b08e783 to
e06eb12
Compare
| Not as FilterNot, | ||
| ) | ||
| from memmachine_server.common.filter.filter_parser import ( | ||
| Or as FilterOr, |
There was a problem hiding this comment.
probably we should update the variable name in the filter_parser to just make the name to make more sense
There was a problem hiding this comment.
Do you mean the "Or" or something else in "filter_parser"?
There was a problem hiding this comment.
I mean we may just rename Or to FilterOr in the filter_parser to make it clearer. Not related to this PR
e06eb12 to
9747369
Compare
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Adds Qdrant as a new vector store backend, including configuration, resource-manager wiring, and a Qdrant-backed VectorStore implementation with tests.
Changes:
- Introduces
QdrantVectorStore/QdrantVectorStoreCollectionwith support for upsert/query/get/delete plus filter translation. - Extends database configuration +
DatabaseManager/ResourceManagerto provision Qdrant clients and expose aVectorStore. - Adds unit + integration tests (including Testcontainers-based Qdrant) and updates dev/test dependencies.
Reviewed changes
Copilot reviewed 13 out of 15 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| pyproject.toml | Extends dev testcontainers extras to include Qdrant. |
| packages/server/pyproject.toml | Adds optional dependency group for qdrant-client. |
| packages/server/src/memmachine_server/common/vector_store/vector_store.py | Extends collection interface with a config property; docstring return type tweak. |
| packages/server/src/memmachine_server/common/vector_store/qdrant_vector_store.py | New Qdrant vector store implementation (collection ops, filters, registry). |
| packages/server/src/memmachine_server/common/resource_manager/resource_manager.py | Exposes get_vector_store() from ResourceManager. |
| packages/server/src/memmachine_server/common/resource_manager/init.py | Updates IResourceManager protocol to include get_vector_store(). |
| packages/server/src/memmachine_server/common/resource_manager/database_manager.py | Adds Qdrant client lifecycle + get_vector_store() resolution. |
| packages/server/src/memmachine_server/common/errors.py | Adds QdrantConfigurationError. |
| packages/server/src/memmachine_server/common/configuration/database_conf.py | Adds QdrantConf, provider enum support, parse/serialize integration. |
| packages/server/server_tests/memmachine_server/conftest.py | Adds Qdrant containers + async clients fixtures (REST, gRPC, distributed). |
| packages/server/server_tests/memmachine_server/common/vector_store/test_qdrant_vector_store.py | Comprehensive tests for QdrantVectorStore (unit + integration). |
| packages/server/server_tests/memmachine_server/common/resource_manager/test_database_manager.py | Adds DatabaseManager tests for Qdrant provisioning and validation. |
| packages/server/server_tests/memmachine_server/common/configuration/test_database_conf.py | Adds Qdrant configuration parsing/defaults tests. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
@edwinyyyu We likely need to update the sample_config files to show how a user would configure the QDrant database, in lieu of the other database options, as you have in the unit tests. Do we have any checks for misconfigurations, such as when the user configures more than one storage database, that could cause conflicts? ie: If we configure Neo4j and Qdrant and ... |
It can't be used as a vector_graph_store. The configuration system will reject it because internally it knows the types. There is no way for users to know except by documentation because the configuration file models are not 1-1 with interfaces. #1199 will be one consumer. Before that, specifying a vector store in a configuration file is useless. |
|
Tried |
| Not as FilterNot, | ||
| ) | ||
| from memmachine_server.common.filter.filter_parser import ( | ||
| Or as FilterOr, |
There was a problem hiding this comment.
I mean we may just rename Or to FilterOr in the filter_parser to make it clearer. Not related to this PR
| else: | ||
| qdrant_filter = partition_key_filter | ||
|
|
||
| effective_limit = limit if limit is not None else 10000 |
There was a problem hiding this comment.
The effective_limit violates the interface definition in vector_store.py. Either update the interface docstring or this function.
There was a problem hiding this comment.
It's probably not good to allow limit = None. I will make a separate PR to update the API and rebase this.
There was a problem hiding this comment.
Some vector store backends will still require a limit smaller than may be requested, but the new comment should work still since it's a limit rather than a quota.
Signed-off-by: Edwin Yu <edwinyyyu@gmail.com>
Signed-off-by: Edwin Yu <edwinyyyu@gmail.com>
Signed-off-by: Edwin Yu <edwinyyyu@gmail.com>
Signed-off-by: Edwin Yu <edwinyyyu@gmail.com>
Signed-off-by: Edwin Yu <edwinyyyu@gmail.com>
Signed-off-by: Edwin Yu <edwinyyyu@gmail.com>
Signed-off-by: Edwin Yu <edwinyyyu@gmail.com>
Signed-off-by: Edwin Yu <edwinyyyu@gmail.com>
Signed-off-by: Edwin Yu <edwinyyyu@gmail.com>
Purpose of the change
Add Qdrant as a vector store backend.
Description
Based on #1379.
Notes:
- similarity/distance (e.g. proposed WIP: Normalize similarities to [0, 1] #1095) -- we just use the score_threshold naively for nowreplaced by Define vector similarity score direction and range #1296Type of change
[Please delete options that are not relevant.]
How Has This Been Tested?
Checklist
[Please delete options that are not relevant.]
Maintainer Checklist