Files
qdrant-client/tests
GeorgeandClaude Opus 5 c8bf20dede fix(local): match core's MMR tie-breaking (#1402)
* fix(local): match core's MMR tie-breaking

Local mode ordered MMR results differently from core whenever two
candidates tied exactly, on relevance or on MMR score. The MMR score
itself was already correct; the selection rules around it were not:

* the first point was seeded from `candidate_ids[0]`, i.e. whatever
  `search` happened to return first, instead of the most relevant
  candidate;
* `np.argmax` picked the *first* maximum, while core's `max_by_key`
  returns the *last* one on ties;
* pending candidates were kept in an order-preserving list, while core
  holds them in an `IndexSet` and drops the selected one with
  `swap_remove`, which moves the last candidate into the freed slot and
  therefore changes the order candidates are visited in - and so which
  one wins a tie.

Reproduce the three rules in `_mmr`. The divergence was spotted on a
MAX_SIM multivector field with DOT, but it is specific to neither:
plain dense vectors and EUCLID diverge the same way once an exact tie
is constructed.

The added congruence tests keep relevance scores distinct on purpose:
core orders equally relevant candidates by search order, which is not
stable, so only ties in the MMR score can be asserted on.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* refactor: move utils from collection, move tests

* tests: update comments

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 00:26:47 +07:00
..
2026-08-04 21:15:23 +07:00
2026-08-04 21:16:58 +07:00
2021-02-09 02:32:14 +01:00
2025-01-16 13:33:09 +01:00
2026-08-04 21:20:14 +07:00
2025-01-22 16:29:25 +01:00
2025-12-12 17:21:08 +07:00