* fix: mirror server token-aware text/phrase matching on unindexed fields
qdrant/qdrant#10341 (dev) changed MatchText and MatchPhrase on fields
without a text index from a substring scan to token-aware matching via
the default word tokenizer: every query token must appear as a whole
document token (text, order-independent; consecutive for phrase), empty
queries match nothing. Local mode still substring-scanned, so congruence
tests randomly failed whenever the filter generator drew a MatchText
whose word is a substring of another fixture word ("fly" in "butterfly",
"ant" in "elephant"). MatchTextAny keeps substring semantics, matching
the server.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R25zh9xS78xMHgPcoFaUdw
* fix: match null elements inside arrays in local IsNull condition
qdrant/qdrant#10101 (dev) made the unindexed IsNull check inspect array
elements: a value like [null, 1] now satisfies IsNull (one level deep).
Local mode only matched values that were null themselves. This was the
second divergence behind the congruence CI failures, previously masked
by the MatchText one because pytest runs with -x.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R25zh9xS78xMHgPcoFaUdw
* fix: close local client before reopening storage in persistence tests
The persistence tests released the storage lock with `del local_client`,
relying on garbage collection timing; when the lock outlived the del,
reopening the same directory raised "Storage folder is already accessed
by another instance". test_query.py was already fixed to call close()
(90913f8); apply the same fix to the remaining five persistence tests.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R25zh9xS78xMHgPcoFaUdw
* fix: bound remote group hits by exact local hits instead of equality
Server-side grouping is best-effort within a request budget (qdrant
lib/shard/src/grouping/driver.rs): once the budget is spent, a group may
be filled with worse points than its true best, or stay below
group_size. Local mode groups exhaustively, so asserting exact per-rank
score equality of deep group hits randomly failed when the fill budget
missed a group member (test_query_group, local 0.6926 vs remote 0.6798
at rank 4). Compare one-sided instead: at any rank the remote hit may be
worse than the exact local one, never better; the top hit stays strict.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R25zh9xS78xMHgPcoFaUdw
* test: move local text-match and is-null tests to their conventional homes
The two new test files sat at the tests/ root. Local-mode behavior belongs in
qdrant_client/local/tests, and filter corner cases in
tests/congruence_tests/test_complex_filters.py.
- the check_match assertions mirroring the server's unindexed_text_match_test.rs
move into qdrant_client/local/tests/test_payload_filters.py, next to the other
filter unit tests
- the client-level cases become congruence tests in test_complex_filters.py, so
they compare local against a real server instead of asserting local behavior
alone: text/phrase/text-any matching on an unindexed field, and IsNull over
arrays holding a null
Both congruence tests fail against the pre-fix payload_filters and pass with it,
against qdrant 1.19.1-dev.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* tests: add non-consecutive case for match filter
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: George Panchuk <george.panchuk@qdrant.tech>
* do not use vectors_count in test and in local mode
* fix: remove indexed vectors count comparison in sparse vector tests
* tests: return tests for full snapshot, increase timeout
---------
Co-authored-by: George Panchuk <george.panchuk@qdrant.tech>
* WIP: recommendation api update
* implement local new reco + add new tests
* refactor calculate_best_scores, normalize score assertion
* fix raw vectors in new recommend
* fix mypy errors, add new reco on group recommend
* fix more lints from ci
* fix pyright lint
* formattng
* Add descriptions to enums
* no mutable default argument
* edit score comparison precision based on magnitude
* Address review comments
* remove custom message for type ignore
* add coverage test
* improve coverage test a little
* add more fixtures for conversion test
---------
Co-authored-by: Luis Cossío <luis.cossio@outlook.com>
* test for large vectors persistence
* large vectors for tests
* use sqlite for persistence
* mypy + migration error reporting
* fix sphinx version
* Local persistence test fixes (#169)
* Reload the collections to support multiple clients
* Extend the test_local_persistence.py with assertions
* prevent parallel access
* fix types
---------
Co-authored-by: Andrey Vasnetsov <andrey@vasnetsov.com>
---------
Co-authored-by: Kacper Łukawski <kacperlukawski@users.noreply.github.com>
* base class for qdrant
* WIP: implement local qdrant client
* fix mypy
* fix mypy
* search tests
* search tests
* fix mypy
* scroll test
* filters: fixtures, tests, and fixes
* fix types
* fix types
* fix types
* fix: fix local CollectionInfo, add __test__ to avoid pytest complaints, fix typo
* fix: fix typo in import
* tests: add local upload tests (#139)
* new: make local collection info more similar to remote one
* new: add local upsert tests
* tests: moved compare collections
* scroll tests
* recommendations test
* tests: fix vector comparison in utils, add retrieve tests
* fix: fix types
* persistence test
* fix: fix types
* fix: fix db path creation
* tests: add delete points tests, refactoring (#140)
* skip local tests on old version
* test aliases
* test count
* tests: add delete payload tests, move set and overwrite payload tests
* tests: fix pytest warning
* cover some more stuff with tests
---------
Co-authored-by: George Panchuk <george.panchuk@qdrant.tech>
* WIP: generate models and conversions
* update quantization param + match any condition + test
* update versions
* consistent naming
* use old grpc types generator
* fix: update type hints
* disable match-any in backward comp test
---------
Co-authored-by: George Panchuk <george.panchuk@qdrant.tech>