Sync fork with Zilliz main - #12
Merged
Merged
Conversation
* enhance: Migrate PyMilvus orm to MilvusClient * chore: add .worktrees/ to .gitignore Signed-off-by: yangxuan <xuan.yang@zilliz.com>
- add PolarDB vector search client with FAISS_HNSW_FLAT, FAISS_HNSW_PQ, and FAISS_HNSW_SQ index types - add CLI integration with hnswflat, hnswpq, and hnswsq benchmark commands - add frontend (Streamlit) UI support with index type selection, HNSW/PQ/SQ parameter configuration
1. Fix concurrent insert memory and process cleanup 2. Add configurable load concurrency for performance cases 3. Make CLI Ctrl+C work by polling has_running() instead of blocking on concurrent.futures.wait(), which swallows SIGINT. 4. Remove perf-case insert from SerialInsertRunner 5. Ignore S608 lint rule and fix formatting Signed-off-by: yangxuan <xuan.yang@zilliz.com>
* fix: Add back ujson in the requirements * fix the coding style Signed-off-by: yangxuan <xuan.yang@zilliz.com>
…client - Add --region CLI parameter (required) for region-based API routing - Change --api-base-url to optional override for private networking - Rename write(columns=...) to write(upsert_columns=...) per current SDK - Fix docstring referencing wrong database name Signed-off-by: jamesgao-jpg <james.gao@zilliz.com>
…ults - Defer tpuf.Turbopuffer client creation to init() to avoid pickle errors with ProcessPoolExecutor(spawn) - Cast search result IDs to int for ground truth recall comparison - Update leaderboard_v2.json with 20 TurboPuffer filter performance entries Signed-off-by: jamesgao-jpg <james.gao@zilliz.com>
…rboard Merge 22 individual TurboPuffer result files into single consolidated result file. Add streaming benchmark entries (500/1000 rows/s) to leaderboard_v2_streaming.json. Normalize TurboPuffer db_name and label in both leaderboard files. Signed-off-by: jamesgao-jpg <james.gao@zilliz.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Milvus results (16c64g, force_merge, v2.6.14): - 1M Cohere: SQ4U+FP16 (sweep refine_k) + SQ8 (sweep ef), 8 points each - 10M Cohere: SQ4U+FP16 + SQ8 (sweep ef), 8 points each - Total 32 benchmark configurations ElasticCloud and ZillizCloud results from standard benchmark runs. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Rename ElasticCloud and ZillizCloud result files from 20260209 to 20260403 and update task_label to standard_20260403 for consistency with Milvus results. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Update db_name/label in leaderboard_v2_streaming.json to match leaderboard_v2.json after force_merge became the default: - Milvus: 16c64g-sq8 -> 16c64g-sq8-force_merge - ElasticCloud: 8c60g -> 8c60g-force_merge This fixes the website failing to associate streaming and vector search results due to mismatched db_name keys. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace ZillizCloud-8cu-perf case_id=4/5 data with new Cardinal backend benchmark results (level 1-9, 1M and 10M datasets, v2026.4). Remove force_merge entries as Cardinal uses unified 4-segment architecture for 10M. New results show significant QPS improvement: - 1M: 13,316 QPS (was 9,704) at recall 0.938 - 10M: 7,385 QPS (was 3,957) at recall 0.938 Sort all leaderboard entries by (db_name, dataset, filter_ratio, qps DESC) to fix line chart rendering. Remove one SQ4U 1M outlier (recall=0.84). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1. Upgrade pydantic to 2.x 2. Remove results/ from .gitignore, those files need to track 3. fix the coding styles in the results Signed-off-by: yangxuan <xuan.yang@zilliz.com>
…illiztech#751) Populate insert_duration, optimize_duration, load_duration for all entries in result_20260403 files. Previously only the first entry per index had values while the rest were 0.0. Milvus (re-measured on 2.6-opt-v2): - 1M SQ4U: insert=129.8s, optimize=152.2s, load=282.0s - 1M SQ8: insert=119.5s, optimize=235.9s, load=355.4s - 10M SQ4U/SQ8: copied from existing first-entry values ZillizCloud (from prior build runs): - 1M: insert=246.7s, optimize=101.2s, load=347.9s - 10M: insert=2450.8s, optimize=136.9s, load=2587.8s Co-authored-by: Ubuntu <ubuntu@ip-10-15-14-123.us-west-2.compute.internal> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Alexandr Guzhva <alexanderguzhva@gmail.com>
Signed-off-by: yangxuan <xuan.yang@zilliz.com>
…lliztech#754) Update result_20260403_standard_zillizcloud.json to use the latest validated build timings from recent reruns for case_id=5 (1M) and case_id=4 (10M), including insert_duration, optimize_duration, and load_duration. Co-authored-by: Ubuntu <ubuntu@ip-10-15-14-123.us-west-2.compute.internal> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: add VectorChord support and VCHORDRQ index type * feat: add VectorChordRQ command to CLI * feat: add VectorChord support to README * feat: add VectorChordGraph support and configuration * feat: add max_scan_tuples parameter to VectorChordGraph * feat: enhance VectorChord with improved type safety and search functionality * feat: add vectorchord extension creation on connection Co-authored-by: edgar-p <edgar.p@kakaocorp.com>
zilliztech#760) * fix(pgvector): normalize index_type to lowercase in _create_index to match PostgreSQL access method names PostgreSQL pgvector extension registers index access methods in lowercase (e.g. "hnsw", "ivfflat"), but the frontend passes IndexType.HNSW.value which is uppercase "HNSW", causing "access method HNSW does not exist" error. * Fix index type usage in pgvector.py Replaced index_param['index_type'] with index_type_lower for consistency. * add comment sign '#' I have added the # before [FIX]
Adds a complete Apache Pinot client for VectorDBBench. Index types: HNSW (Lucene), IVF_FLAT, IVF_PQ, IVF_ON_DISK Metrics: L2, IP, COSINE Filters: NumGE, StrEqual Optional dep: pip install "vectordb-bench[pinot]" Parallel loading: thread_safe=True — each worker thread maintains its own row buffer and flushes to Pinot via a fresh HTTP session. Since Pinot's ingestFromFile is synchronous (blocks until HNSW index is built, ~6 min per 100K×768D segment), concurrent flushes across threads reduce load time significantly vs sequential flushing. Benchmark results: Small dataset (OpenAI 50K, 768D, L2): HNSW: 798 QPS, recall=1.000 IVF_FLAT: 800 QPS, recall=1.000 IVF_PQ: 795 QPS, recall=1.000 IVF_ON_DISK: 691 QPS, recall=1.000 Large dataset (Cohere 1M, 768D, COSINE): HNSW m=16: 74 QPS, recall=0.982 Filter benchmark (Cohere 1M, COSINE, HNSW m=32): 1% NumGE: 71 QPS, recall=0.977 99% NumGE: 97 QPS, recall=0.649 Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…oud commands (zilliztech#761) * fix: support self-hosted Elasticsearch via --host/--port in elasticcloud commands ElasticCloudConfig previously required cloud_id, so the elasticcloudhnsw* subcommands could only target Elastic Cloud. Users benchmarking self-hosted stock Elasticsearch had no working path: tencentelasticsearch accepts host/port but forces Tencent's vsearch index_options type, which stock ES rejects with "Unknown vector index options type [vsearch]". Extend ElasticCloudConfig with scheme/host/port/user fields (mutually exclusive with cloud_id) and expose them on all four ElasticCloudHNSW* CLI subcommands. Existing cloud_id callers are unchanged. Refs zilliztech#758 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * style: apply black formatting to elastic_cloud/config.py Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…lliztech#763) * Fix: Map "ivf_flat" to "ivfflat" for pgvector index access method - IndexType.IVFFlat.value="IVF_FLAT" → .lower()="ivf_flat" caused SQL to fail with "access method 'ivf_flat' does not exist" - pgvector PostgreSQL extension expects "ivfflat" (no underscore), not "ivf_flat" - Added explicit mapping after lowercase normalization: if index_type_lower == "ivf_flat": index_type_lower = "ivfflat" * style(pgvector): fix comment wrapping and remove commented code --------- Co-authored-by: rnagaraju <rnagaraju@zeomega.com>
…lliztech#764) For non-thread-safe DBs (e.g. PgVector), ConcurrentInsertRunner clamps max_workers to 1, so there is always exactly one worker thread. There is no need to deepcopy self.db per thread — the single worker can use self.db directly via the connection already opened by task()'s `with self.db.init():`. The original code called deepcopy(self.db) inside _get_thread_db() after task() had already opened a live psycopg C-extension Connection on self.db. C-extension objects cannot be deep-copied, causing: TypeError: no default __reduce__ due to non-trivial __cinit__ Fix: remove the deepcopy branch entirely. All workers (thread-safe or not) now use self.db directly; thread-safety is guaranteed for non-thread-safe DBs by the max_workers=1 clamp. Also clean up stale comments in pgvector.py left over from zilliztech#760/zilliztech#763. Adds tests/test_pgvector.py with: - unit test that reproduces the bug (fails on original, passes on fix) - e2e regression test via ConcurrentInsertRunner + OpenAI 50K dataset See also: zilliztech#756 Signed-off-by: yangxuan <xuan.yang@zilliz.com>
* Add label filtering support to pgdiskann client * Refactor pgdiskann filtering logic * Refactor: remove unrelated function * style: apply black formatting to pgdiskann.py * fix: remove trailing whitespace and fix import sorting * docs: add comments for label naming and vector storage optimization * Revert "docs: add comments for label naming and vector storage optimization" This reverts commit d10b296. --------- Co-authored-by: Eesha Faisal <eesha.faisal@emumba.com>
…ech#766) - Migrate DB config validators to pydantic v2; list all empty fields instead of raising on first; consolidate via `_extra_empty_skip`. - Surface missing client modules at config render time as `{DB} needs `{module}` but it is not installed.` - Replace streamlit-autorefresh with native `@st.fragment(run_every)` so live progress does not block UI. - Bump streamlit to 1.47+ (picks up streamlit#11890 fragment fix); switch to native `st.switch_page`, drop `streamlit_extras`. - Migrate deprecated `use_container_width=True` to `width="stretch"`. - Patch tornado `write_message` to consume expected `WebSocketClosedError` on tab-close races (streamlit#9787). - Add contract test: each DB enum resolves config_cls/init_cls or raises ModuleNotFoundError. See also: zilliztech#446 Signed-off-by: yangxuan <xuan.yang@zilliz.com>
ConcurrentInsertRunner previously defaulted to mp.cpu_count(), spawning one worker per CPU when load_concurrency was unset. On high-core hosts this opens many parallel client connections, saturating modest DBs / network paths and yielding worse load throughput than a smaller, steadier worker count. Cap the unset default to min(cpu_count, 4). Explicit load_concurrency from CLI / config / submitTask still wins. Signed-off-by: yangxuan <xuan.yang@zilliz.com>
) Add a new vector database backend for SeekDB, connecting via mysql-connector-python over the MySQL wire protocol. Key components: - seekdb.py: VectorDB implementation with heap-organized table, HNSW vector index, and version-aware optimize() that calls dbms_index_manager.refresh() on SeekDB >= 1.3.0 - config.py: DBConfig with host/port/user/password/database and SeekDBHNSWConfig with m/ef_construction/ef_search parameters - cli.py: Click command `SeekDBHNSW` for command-line benchmarks Registration: - Add SeekDB to the DB enum in backend/clients/__init__.py with lazy imports for init_cls, config_cls, and case_config_cls - Register SeekDBHNSW CLI command in cli/vectordbbench.py - Add seekdb optional dependency in pyproject.toml (pip install vectordb-bench[seekdb]) Filter support: - NonFilter and NumGE (id >= N) filters are supported - StrEqual (label filter) is intentionally excluded since the table schema only has id and embedding columns Thread safety: - mysql.connector is not thread-safe (thread_safe = False). ConcurrentInsertRunner uses max_workers=1 accordingly - rate_runner.py handles SeekDB specially: copies the db object, resets the connection, and calls init() per worker thread Co-authored-by: liuhao6741 <liuhaobupt@foxmail.com> Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Signed-off-by: yangxuan <xuan.yang@zilliz.com>
… cosine support (zilliztech#776) * feat(oceanbase): configurable index params, KEY partitioning, HNSW_BQ cosine support - Add --create-index-parallel CLI option (default 16) - Add --extra-info-max-size CLI option (default 32, set 0 to omit) - Add --partitions CLI option for KEY partitioning (default 0, no partition) - HNSW_BQ: remove forced L2 for cosine, now supports cosine natively - need_normalize_cosine returns False for all index types - pyproject.toml: add pyyaml dependency, fix packages.find to include all subpackages * fix(oceanbase): declare thread_safe=False to prevent cursor sharing across threads * fix: restore seekdb dependency accidentally removed
* Add FTS support (zilliztech#713) ## Context VDBBench did not have a dedicated native full-text search benchmark path. This PR adds FTS as a first-class benchmark workload so BM25-based text search can be evaluated through the same task, runner, dataset, frontend, and result pipeline used by the rest of VDBBench. ## Summary - Add full-text search benchmark support centered on BM25 text retrieval. - Introduce FTS performance cases that load text documents, run text queries, and report comparable performance results. - Wire FTS through backend execution, dataset preparation, runner orchestration, Streamlit task generation, and result formatting. - Use manifest-driven FTS ground truth so recall is measured against generated mathematical BM25 neighbors rather than semantic relevance labels. ## Backends Covered - Milvus: native BM25 full-text indexing/search configuration and execution path. - Zilliz Cloud: FTS routing through the Milvus-compatible API with Cloud sparse auto-index handling, sharing the Milvus optimize/compaction path. - ElasticCloud / Elasticsearch: BM25 text indexing/search path with configurable BM25 k1/b support. - Vespa: BM25 schema/query path plus Vespa feed-client loading for large FTS document ingestion. - Turbopuffer: namespace-based full-text benchmark path. ## Testing Infra Touched - Dataset layer: add MS MARCO and HotpotQA FTS dataset definitions, document/query loading, and S3-hosted mathematical BM25 ground-truth loading. - Case layer: add FTS performance case definitions, payload profiles, and task assembly support. - Runner layer: support FTS document loading plus serial recall and concurrent text-query search execution while preserving the existing backend insert contract. - Backend layer: route Vespa FTS loading through its backend insert path, where the Vespa feed client is managed for high-throughput ingestion. - Frontend layer: expose FTS cases and generate backend-specific FTS task configs from Streamlit. - Result layer: format FTS benchmark outputs alongside existing VDBBench results. ## Datasets Supported - MS MARCO: small 100K, medium 1M, large 8.8M documents. - HotpotQA: small 100K, medium 1M, large 5.2M documents. ## Metrics - Search metric type: BM25. - Accuracy metric: recall@k against generated mathematical BM25 ground truth. - Performance metrics: serial latency p95/p99, concurrent QPS, load duration, optimize duration, inserted count, payload profile, batch size, and load concurrency. Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> Co-authored-by: Denise2004 <3087753261@qq.com>
zilliztech#808) - Replace mysql-connector-python with mysqlclient (C extension) - Use array.array for vector serialization instead of numpy - Add --shards and --quantization CLI options for vector index building - Enable concurrent insert (thread_safe=True) with a per-worker connection pool Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: ningshuo <zhangzongning.zzn@alibaba-inc.com>
修改后,对于自定义数据集,能输入多个train.parquet文件
…nd serial search phases (zilliztech#803) The serial search phase measures single-query latency. When it launches immediately after the concurrent phase, the end-to-end path may still be in a saturated state, affecting the accuracy of serial latency especially p99/p95. Add a --serial-cooldown parameter (default 0, in seconds, supports decimals) so backends that need it can opt in.
Co-authored-by: linzhi.wzw <linzhi.wzw@alibaba-inc.com>
* feat(lancedb): rewrite LanceDB backend with new index types, filter support, batch insert optimization and full CLI integration Core changes: - api.py: Add IVF_HNSW_SQ and IVF_HNSW_PQ to IndexType enum - config.py: Rewrite into 5 independent config classes (IVF_PQ / NONE / AUTOINDEX / IVF_HNSW_SQ / IVF_HNSW_PQ); all IVF variants share refine_factor search param; add storage_options for remote storage - lancedb.py: Implement standard prepare_filter() pattern (NumGE/StrEqual); support scalar labels insert; use PyArrow FixedSizeListArray for batch writes instead of per-row dicts; unify search param passing; optimize() supports compact_files + cleanup_old_versions; custom __deepcopy__ to solve multi-process Rust handle serialization issue; explicit select _distance to suppress lance deprecation warning - cli.py: Add 5 CLI commands (LanceDB/AutoIndex/IVFPQ/IVFHNSWSQ/IVFHNSWPQ); fix IndexType.NONE lookup bug; add COS/GooseFS remote storage_options builder - vectordbbench.py: Register all new LanceDB CLI commands New files: - docs/lancedb-enhancement-plan.md: Development plan and implementation notes - docs/lancedb-integration.md: Integration verification report - tests/test_lancedb_config.py: 10 offline unit tests covering config/registration/CLI structure - scripts/bench_lancedb_500k.sh: One-click 500K three-index comparison benchmark script - scripts/aggregate_lancedb_results.py: Aggregate results into Markdown comparison table * fix(lancedb): always pin query metric to case metric in search_embedding Previously search_embedding() relied on the index's metric being applied implicitly. This works for indexed paths (IVF_PQ / IVF_HNSW_SQ / IVF_HNSW_PQ / AutoIndex) but silently falls back to LanceDB's default (L2) on the no-index brute-force path, which corrupts recall on cosine / IP datasets whose ground-truth uses a different metric. Fix: always call .metric(self.case_config.parse_metric()) on the query builder. For indexed paths this is a no-op when the index metric already matches; for the no-index path it aligns the scan with the case-configured metric.
* Add OpenSearch Serverless (AOSS) support - Add --serverless and --aws-region CLI options - Use AWS SigV4 authentication via requests-aws4auth for AOSS - Skip unsupported operations for serverless: cluster settings, force merge, manual refresh, replica updates, warmup API - Use smaller batch size (100) for serverless bulk inserts - Store id as document field (serverless doesn't support custom _id) - Retrieve id from _source in search results for serverless - Remove 'engine' and 'encoder' from index method config for serverless (AOSS manages these internally) * Add OpenSearch Serverless section to README * Disable http_compress for serverless to fix SigV4 checksum verification * Format code with black * Address PR review: fix serverless multi-client insert, filters, and deps - Route serverless through single-client insert path (AOSS doesn't support custom _id; the multi-client path would send _id and fail) - prepare_filter now filters NumGE on the stored 'id' field for serverless, and mappings store 'id' as a numeric (long) field so range queries work - Add boto3 and requests-aws4auth to the opensearch extra in pyproject.toml and to install/requirements_py3.11.txt - Update README serverless prerequisites to reference the opensearch extra and mention boto3
zilliztech#804) Add a VectorDB backend for VolcMySQL (native VECTOR type and HNSW index) over the MySQL wire protocol via mysql-connector-python: - client, config, and Click CLI command; registered in the DB enum and CLI - per-thread connections (thread_safe=False, one connection per worker) - NonFilter and NumGE filter support via prepared SQL templates - binary float32 vector path with per-connection auto-probe fallback to to_vector() - unit tests for TSV encoding, config, filters, and init teardown
This addresses the functional failure in the Hologres client introduced by 7e251b6, which added the concurrent insert runner without setting thread_safe=False for Hologres. This implements per-thread connection management via threading.local() to enable safe parallel loading.
Signed-off-by: jamesgao-jpg <james.gao@zilliz.com>
…FTS cases (zilliztech#815) * Fix ES FTS CLI shard replica config Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Expose Milvus collection name in CLI Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Add semantic FTS recall metrics Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Add CLI BM25 controls for FTS Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Preserve Zilliz FTS search level from CLI Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Remove stale FTS math ground truth plumbing Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Add OSS OpenSearch FTS support Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Add OSS OpenSearch index name option Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Update FTS frontend semantic metrics Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Add FTS filtered dataset preparation Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Wire FTS filter data through runners Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Add FTS backend filter support Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Add FTS filter case controls Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * fix: split fts filter recall from concurrency queries Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * feat: add fts filtered search results Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * fix: declare turbopuffer fts filter field schema Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * refactor: defer filtered FTS support Remove filtered FTS dataset, runner, backend, frontend, test, and published result changes while retaining unfiltered OSS OpenSearch and semantic FTS support. Remove the task-local session progress file from the branch. Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * chore: standardize OpenSearch FTS result filename Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * fix: report OpenSearch bulk item failures Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * feat(cli): add common note support Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * feat(fts): restore filtered search backend support Restore the filtered full-text search cases, datasets, runners, backend clients, CLI controls, and regression tests removed by 7cd3046. Keep frontend support, generated result artifacts, session files, and documentation excluded from this backend migration. Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * style(fts): satisfy current lint checks Apply current Black formatting to the restored filtered-FTS code, use direct integer filter attribute access, and document the intentional runtime error inside the serial-search exception boundary. Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * fix(fts): scatter filter ids deterministically Assign FTS filter IDs through a versioned affine permutation so threshold filters preserve exact cardinality while spreading matches across corpus insertion order. Use the same mapping for semantic qrels and record its parameters in filter statistics for reproducibility. Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * feat(fts): make filter id distribution configurable Expose sequential and permuted FTS filter-ID distributions through the common CLI and FTS case configuration, defaulting to the deterministic permutation. Propagate the selected mode into document insertion, semantic qrel filtering, and versioned result metadata. Changing modes requires reloading the target collection. Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * chore: update FTS result publication Remove the published Vespa FTS result while preserving its backend. Restore the Zilliz Cloud filtered semantic result and keep filtered rows out of the standard FTS frontend. Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * feat: publish permuted filtered FTS results Publish validated permuted concurrency results for Elasticsearch, OSS OpenSearch, and Zilliz Cloud. Add a Filtered QPS frontend view and remove the legacy sequential Zilliz artifact. Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * results: publish Turbopuffer filtered FTS data Add ten permuted filtered FTS result artifacts for HotpotQA Large and MS MARCO Large across five filter rates. Extend the frontend coverage test to include Turbopuffer. The benchmark observed service-side 429 responses at some concurrency points; recorded QPS is successful request throughput. Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * fix: align FTS semantic recall and filtered chart Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * fix: group filtered FTS QPS by filter rate Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * results: document FTS benchmark setup Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * results: add filtered FTS serial metrics Merge validated serial latency and semantic metrics into the existing filtered concurrent result artifacts while preserving source provenance. Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * chore: consolidate FTS result artifacts Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * fix(fts): remove sequential filter mode Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * fix(frontend): expose OpenSearch FTS cases Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * fix(opensearch): build FTS CLI config directly Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * fix(opensearch): bound FTS replica readiness Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * fix(frontend): require Streamlit 1.61 Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * docs(fts): list OSS OpenSearch coverage Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * style(frontend): format filtered result selector Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * fix(fts): unify document filter id assignment Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * refactor(milvus): share CLI config builder Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * refactor(fts): share Elasticsearch-compatible config Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * chore(results): remove local TurboPuffer paths Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * chore(results): refresh Zilliz Cloud FTS benchmarks Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * fix(results): restore FTS load metrics and filter metadata Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * chore(results): remove FTS text payload records Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> --------- Signed-off-by: jamesgao-jpg <james.gao@zilliz.com>
10 of 16 case results in result_20260626_fts_standard_turbopuffer.json were written with "api_key": "", which fails DBConfig's not_empty_field validator when TestResult.read_file re-instantiates TurboPufferConfig, crashing the whole results page with a ValidationError. Replace the empty strings with the standard "**********" placeholder used by the redaction logic. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…#840) Milvus force merge is best-effort and may skip segments already compacting. After flushing, wait for segment sorting and index readiness, run one normal manual compaction, then retry force merge with a fresh persistent segment snapshot until every segment visible for an attempt is included in its generated plans. Bound force merge to 10 attempts with a 30-second retry interval. Add regressions for compaction ordering, partial-plan and no-plan retries, fresh per-attempt snapshots, and retry exhaustion. See also: zilliztech#784 Signed-off-by: yangxuan <xuan.yang@zilliz.com>
* Make AOSS insert batch size configurable Signed-off-by: norrishuang <12380647@qq.com> * Validate AOSS insert batch size --------- Signed-off-by: norrishuang <12380647@qq.com>
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.
Summary
antflydb/VectorDBBenchfrom its divergent fork history to currentzilliztech/VectorDBBench@4ea1810NUM_PER_BATCH=100default; this PR adds no Antfly-specific batch-size overrideThe resulting tree is Zilliz
mainplus one explicit Antfly-maintained delta commit. An ancestry-only merge commit records the current Antfly fork tip without changing that tree, so the PR is mergeable without carrying obsolete fork content forward.Verification
python -m pytest tests/test_antfly.py tests/test_filtered_adapters.py tests/test_db_client_resolution.py -q— 52 passedpython ../VectorDBBench-harness/tests/test_antfly_adapter.py— passedpython ../VectorDBBench-harness/tests/test_filter_adapters.py— passedblack vectordb_bench --check— passedruff check vectordb_bench— passedpython -m vectordb_bench.cli.vectordbbench antflyaknn --case-type Performance1536D50K --dry-run— resolved Antfly with COSINE metric and batch default unchanged