fix: make QdrantLocal runnable from the web UI - #867
Conversation
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: serhiizghama The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
| CaseConfigParamInput_m_QdrantLocal = CaseConfigInput( | ||
| label=CaseConfigParamType.m, | ||
| displayLabel="m", | ||
| inputHelp="HNSW index parameter m, set 0 to disable the index", |
There was a problem hiding this comment.
vectordb_bench/frontend/config/dbCaseConfigs.py line:3299
Low ---- The new m input lets users set m=0 with the help text "set 0 to disable the index", but no such code path exists: QdrantLocalIndexConfig.index_param() always forwards m into HnswConfigDiff(m=...), and Qdrant does not validate m (only ef_construct is constrained to min=4), so create_collection accepts m=0 and builds an HNSW graph with m0 = 2*m = 0 edges — a degenerate index that silently yields broken search results rather than a disabled index. Consider setting min=2, rewording/removing the "set 0 to disable the index" claim, or implementing an actual no-index path.
|
You're right — that help text was inherited from the local CLI's Bumped the input to |
Fixes #796. QdrantLocal can't be run from the web UI at all —
QdrantLocalIndexConfigrequiresmandef_construct, but there's noDB.QdrantLocalentry inCASE_CONFIG_MAP, so the UI renders "Auto", passes an empty config, and pydantic raises2 validation errors ... Field requiredbefore the run starts. That matches the reporter's "seems like 'ef_construct' is missing, but there is not such option" — the option genuinely isn't there.Gave both fields the same defaults the CLI already uses (
m=16,ef_construct=200) and registered QdrantLocal inCASE_CONFIG_MAPsom,ef_constructandon_diskare tunable for load, plushnsw_effor search — the same four knobsqdrant_local/cli.pyexposes. Needed two newCaseConfigParamTypemembers since the existingef_constructionspelling doesn't match the model field.The CLI path is unchanged: it always passed these explicitly. Verified the empty-config case now builds, that the UI defaults round-trip into
index_param()/search_param(), and that tuned values reach the client. New tests fail on main and pass here.