Repository navigation
Conversation
edwinyyyu
force-pushed
the
feat/milvus-index-options-speedkick
branch
from
October 9, 2026 17:59
d641da2 to
d67f8af
Compare
This was referenced Oct 9, 2026
[qdrant options] Let a deployment tune a Qdrant collection's HNSW, optimizers and quantization
#1618
Draft
edwinyyyu
force-pushed
the
feat/milvus-index-options-speedkick
branch
2 times, most recently
from
October 9, 2026 20:22
1d4f155 to
5fd61f4
Compare
edwinyyyu
added a commit
to edwinyyyu/MemMachine
that referenced
this pull request
Oct 10, 2026
…achine#1741) into the final state A Qdrant collection is created with the deployment's HNSW, optimizer and quantization options and with the strict mode of MemMachine#1628. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
edwinyyyu
force-pushed
the
feat/milvus-index-options-speedkick
branch
2 times, most recently
from
October 14, 2026 00:21
2c78deb to
2d0794b
Compare
edwinyyyu
added a commit
to edwinyyyu/MemMachine
that referenced
this pull request
Oct 14, 2026
…achine#1741) into the final state A Qdrant collection is created with the deployment's HNSW, optimizer and quantization options and with the strict mode of MemMachine#1628. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
edwinyyyu
force-pushed
the
feat/milvus-index-options-speedkick
branch
13 times, most recently
from
October 20, 2026 21:00
af35deb to
f9e0b5e
Compare
This was referenced Oct 20, 2026
Open
Draft
edwinyyyu
force-pushed
the
feat/milvus-index-options-speedkick
branch
from
October 26, 2026 18:01
f9e0b5e to
6c95972
Compare
edwinyyyu
force-pushed
the
feat/milvus-index-options-speedkick
branch
5 times, most recently
from
October 28, 2026 23:23
9365be3 to
2ea1009
Compare
…tization `QdrantConf` gains `hnsw_config`, `optimizers_config` and `quantization_config`, plain mappings mirroring qdrant-client's `HnswConfigDiff`, `OptimizersConfigDiff` and `QuantizationConfig`, so qdrant-client stays optional for configuration parsing; the store's params validate them against qdrant's own models. They apply to the store's one collection, created at startup. `m` must be 0 or unset: the collection is multi-tenant and disables the global graph in favor of per-partition payload indexing, so a deployment tunes `payload_m`, which defaults to 16 as before. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ESpWYTmCR7X3bJEpoA8SAn
The sample configurations gain a commented block with the three keys, checked against qdrant-client's models. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ESpWYTmCR7X3bJEpoA8SAn
…ches `MilvusConf` gains `vector_index`, a plain mapping of `index_type`, `params` (build parameters) and `search_params` (parameters every search passes), so pymilvus stays optional for configuration parsing; the store's params coerce it into `MilvusVectorIndex`. pymilvus has no models for index or search parameters, so the unit is the whole spec: build and search parameters come from one author for one index type. The index applies when startup creates the collection's vector index, and the search parameters to every query. Unset selects HNSW_SQ searched with refine_k 8, as before. `params` may not set `index_type` or `metric_type`, which pymilvus would let override the spec's own index type and the store's metric. Milvus checks the parameters the index type takes when it creates the index and when a search reaches an indexed segment. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The sample configurations gain a commented `vector_index` block under the Milvus alternative, checked against `MilvusConf` and `MilvusVectorIndex`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
edwinyyyu
force-pushed
the
feat/milvus-index-options-speedkick
branch
from
October 30, 2026 23:17
2ea1009 to
8971a26
Compare
This branch has not been deployed
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
MilvusConfgainsvector_index, the vector index of the store's collection: a plain mapping ofindex_type,params(build parameters) andsearch_params(parameters every search passes), as Milvus takes them for that index type, so pymilvus stays optional for configuration parsing; the store's params coerce it intoMilvusVectorIndex, whose parameter values are scalars. Unset selects the store's own index, HNSW_SQ (M 18, efConstruction 240, SQ4U codes refined at FP16) searched withrefine_k8, as before. Startup creates the index unless the collection has one, in which case the collection keeps its index; the search parameters apply to every query from startup on. The sample configurations and the configuration docs' parameter table carry the key, and the Milvus design doc says the index and its searches are configurable as one spec.One guard:
paramsmay not setindex_typeormetric_type, which pymilvus'sIndexParamwould let override the spec's own index type and the store's metric. Everything else is Milvus's to check: it checks the parameters the index type takes when it creates the index and when a search reaches an indexed segment, and ignores other keys. The collection isolates partitions by key, which Milvus documents for the HNSW family only, so a deployment picks an index of that family; Milvus 2.6.24 accepts another type (IVF_FLAT) on the collection without error, so the store leaves the choice to the deployment.Two commits: the option, with its docstrings, the configuration page's parameter table row and the design doc's vector index paragraph, and the sample configurations' comments. Adaptation from #1618: pymilvus has no typed models for index or search parameters, so there is nothing to validate each mapping against; the unit of configuration is the whole index spec, so build and search parameters always come from one author for one index type. The option lands on the registry-backed Milvus store of [vector store scale-out 5/6] and [vector store scale-out 6], on its
MilvusVectorStoreParams; the index it sets is the one startup creates for the collection's vector field, the partition handles the store builds carry its search parameters, and the tests build their store through the module's_paramshelper.Position: on [qdrant options] #1618 directly, so the two options PRs share one edit of the configuration table and the sample configurations.
Stack
24 open PRs: three independent PRs, and the vector store tree of short parallel branches. Every open PR in the tree has
feat/horizontal-scalingas its GitHub base, and the independent PRs havemain. The branches are in a fork, and a pull request can target only this repository's branches, so the on column gives the order the PRs build on each other. A stacked PR's diff on GitHub includes the PRs under it until they merge.Independent of the vector store tree, directly on
main:mainmainmainThe vector store tree. Each PR builds on the one in its on column; PRs on the same parent are parallel branches and do not depend on each other. #1631 is closed, superseded by #1733–#1736, which hold its changes split in four, with review changes since. #1675 is closed, superseded by #1627. #1841 is closed: its request packing is dropped, and its cancellation contract is in #1840. #1828 and #1839 sit side by side on the branch; #1839 and #1840 are the event memory recovery stack, and #1684 heads the event memory stack, which its own PRs index, listed because it builds on #1840, its branch also carrying #1828's commits until one of the two merges; #1871 keeps its own Stack section. Until the PRs under it merge, their changes show in a stacked PR's diff.
mainfeat/horizontal-scaling)feat/horizontal-scalingfeat/horizontal-scaling)feat/horizontal-scalingfeat/horizontal-scaling)feat/horizontal-scalingfeat/horizontal-scaling)feat/horizontal-scalingfeat/horizontal-scaling)feat/horizontal-scalingfeat/horizontal-scaling)feat/horizontal-scalingfeat/horizontal-scaling)feat/horizontal-scalingfeat/horizontal-scaling)feat/horizontal-scalingfeat/horizontal-scaling)feat/horizontal-scalingfeat/horizontal-scaling)feat/horizontal-scalingfeat/horizontal-scaling)feat/horizontal-scalingfeat/horizontal-scalingfeat/horizontal-scaling)feat/horizontal-scalingfeat/horizontal-scaling)feat/horizontal-scalingfeat/horizontal-scaling)feat/horizontal-scalingfeat/horizontal-scalingfeat/horizontal-scalingfeat/horizontal-scalingfeat/horizontal-scalingfeat/horizontal-scalingfeat/horizontal-scalingfeat/horizontal-scalingmemmachine-server migrate, which creates every configured store's schema before servers startfeat/horizontal-scalingThis PR is its 2 commits,
6150110b1,8971a264b, stacked on #1618.Verification
Restacked with the vector store tree, at
8971a264b(on #1618's9760076f7), on 2026-10-30, with #1618 directly onfeat/horizontal-scalingat690116e37, where [declared schema 1/2] (#1628) is merged as5c9d3ae99, with #1831 before it and #1858 after it; [sqlite write transactions 1] (#1844) is no longer beneath it, since neither PR uses any of #1844's code: its own lines are unchanged, and its two commits are re-signed, with their messages and author unchanged. Checks:ruff checkandruff format --checkclean;ty checkclean as CI runs it (uv run --frozen --all-extras ty check --project packages/server);uv lock --checkclean; the vector store, configuration, and resource manager unit tests pass, 649 tests (5 skipped). The integration tests did not run here. This head's tree differs from2c78deb61only by the changes beneath it: #1702's filter routing, #1820, #1670's review fix,main's #1785, #1803, #1787, #1802, #1522, and #1774, #1824, #1627's own since then (its partition lookup namedopen_partitionin place ofget_partition, its per-partition schema record removed,require_partition_keynamedvalidate_partition_key, the store's parameters off its interface andpartition_keyoff the partition handle, partition keys of up to 255 bytes with the SQLite stores' names hashed from them, the bool checks namedis_valid_identifierandis_valid_filter, its raising checks namedvalidate_, the retention check named_validate_tombstone_retention, its tombstones without the partition key, its partition registry document's wording, the first and second reviews' fixes, the accuracy fixes, and its changes sincee38e8003e: each store's schema passed as oneVectorStoreSchema, SQLite partitions named by an incarnation, the shared SQL engine setup and write transactions incommon/sql.py, and every session's event memory served from the deployment's configuration), #1628's longer request timeout for its oversized Milvus upsert test, #1628's four commits from Edwin's review (nosupported_filter_nodes, its checks inutils.py,sqlite_properties.py, and the strict-mode comment), #1628's second round of review commits (the identifier rule indata_types.py, which imports nothing from the package, and the interface's Raises sections sorted by name), #1628'sis_valid_identifierdocstring and its records table withoutextend_existing, #1628's last commits before its merge (property_column_namesderiving the names from the naming rule, the contract's re-upsert check, and its tidied tests), #1831, and #1858, with [sqlite write transactions 1] (#1844) and [search results] (#1663) no longer beneath it. The database manager's tests last ran at2c78deb61, on 2026-10-09: the vector store suites and the database manager's tests, unit and integration, 731 passed (5 skipped), against Qdrant 1.19.1 defaulting new collections to strict mode and Milvus 2.6.24 in containers.Rebased onto #1618's head
bb19702a1(onfeat/horizontal-scalingwith #1736 merged), atd67f8af76:ruff check,ruff format --check,ty check, anduv lock --checkare clean. The rebase resolved conflicts with the Milvus store's changes since 2026-10-02 (the metrics factory beside the vector index in the store's parameters and the database manager, grpc beside the pydantic imports, and the configuration and manager tests' settings beside the vector index), and the not-positive settings test now builds the parameters withmodel_validate, since the vector index field makes the keyword form ill-typed. The Milvus store, configuration, and database-manager tests pass against Milvus 2.6.24 in a test container (169 passed); the full suites were not rerun at this head.Before the rebase:
At each of this PR's commits,
42c9c17d5andd641da2aa, on 2026-10-02:ruff checkandruff format --checkclean;ty checkclean as CI runs it (uv run --frozen --all-extras ty check --project packages/server); the server suite without integration tests passes, 2037 tests (6 skipped). Atd641da2aa, the Milvus store's integration tests, against Milvus 2.6.24 in a container, pass (62); the resource manager's tests carry no integration mark and run in the server suite above. The sample configurations' commented block, uncommented, parses intoMilvusConfandMilvusVectorIndexin all three files. The behavior the docs state was checked against Milvus 2.6.24: index creation refused an unknown index type and a non-integerMand accepted an unknown build key; a search on an indexed segment refusedefof"abc", of -5 and belowlimit, and ignored an unknown key; IVF_FLAT was accepted on the collection. Both commits are signed.🤖 Generated with Claude Code