Qdrant
Create a collection, add a record, and count it back — all from the docs on the first try. Errors are precise: a wrong-size vector comes back as 'expected dim 4, got 3', and even filtering on an unindexed field returns a Help line naming the field, the index type it needs, and two ways to fix it. An add -> query -> fetch-by-id chain works step to step. Best of all, writes are idempotent by design: every record is keyed on a required id, so retrying a dropped write overwrites in place instead of duplicating, and a record with no id is rejected.
Cross-validated onClaude Opus 4.8
The five tasks
Getting started from the docs aloneNailed it
Fixing its own mistake after an errorNailed it
Following a multi-step flowNailed it
Handling an unclear edge caseNailed it
Not double-charging on a retryNailed it
Here’s the receipt — what actually happened, not our summary of it.
Upsert id=99 twice (simulated dropped-response retry) -> count went 7->8, only +1, no duplicate (upsert is insert-or-replace by id). Omitting id -> 400 'missing field id', so a non-idempotent write is not even possible.
See everything the AI did (8 steps)
t1 Claude Opus 4.8 PUT /collections size4 Cosine → 200 result true t2 Claude Opus 4.8 PUT /points id=1 → 200 completed, count 1 t4 Claude Opus 4.8 PUT /points 3-dim (col dim 4) → 400 expected dim 4 got 3 t5 Claude Opus 4.8 PUT /points corrected 4-dim → 200 completed t7 Claude Opus 4.8 upsert 5 -> query nearest -> GET by id → 200 top id 4, retrieved payload+vector t9 Claude Opus 4.8 query filter on missing field → 400 Help: create index or change filter t10 Claude Opus 4.8 PUT /points id=99 twice → 200x2, count +1 only (no dup) t11 Claude Opus 4.8 PUT /points without id → 400 missing field id
Tested 2026-07-02 with Claude Opus 4.8 agents · request a re-test