Files
searchi/docs/MEDIA-FINAL-QUALITY.md
T

159 lines
9.2 KiB
Markdown
Raw Normal View History

# Bounded media relevance improvement, 2026-10-14
This pass keeps Google EmbeddingGemma 2 and the existing shared engine. It
corrects one practical source of irrelevant results without another model,
reindexing, an absolute similarity cutoff, or a new ranking framework.
## Hybrid shortlist correction after the real screenshot review
The real screenshot exposed an additional defect: reciprocal-rank fusion gave
every semantic nearest neighbour a result rank even when its raw similarity
was far below a strong match. A mountain photo consequently appeared beneath
the supplier agreement for a cancellation query.
Hybrid search now keeps the strongest semantic cluster when the filtered,
file-deduplicated score list has one clearly separated tail: choose the largest
adjacent raw cosine gap, and prune after it only when that gap is **greater than
0.07**. Equal largest gaps within f32 rounding retain the complete list. The
0.07 gap is rounded upward from the maximum 0.0650497 observed among eight
previously frozen calibration absence requests; it is a relative decluttering
rule, **not an absolute cosine threshold or a confidence percentage**.
The [frozen policy](../tools/relevance-eval/policies/hybrid-tail-v1.json) records
the exact scope and calibration report hash.
All independent lexical matches, exact filename/identifier priority and the
best semantic candidate survive. Explicit raw semantic search is unchanged.
Filters and source checks still run before candidate limits; no index or model
is regenerated. Debug traces report `hybrid.semantic_shortlist` with before,
after and pruned counts.
Actual current Google CPU query results on the verified README fixture:
| Query | Raw semantic scores | Hybrid result |
| --- | --- | --- |
| `cancel the supplier partnership` | Agreement 0.820912; onboarding 0.660648; procurement 0.626666; mountain photo 0.528253 | Agreement retained; unrelated photos removed; 7 → 1 results |
| `mountains reflected in calm water` | Lake 0.753141; pier 0.684482; travel document 0.537812 | Two image results retained; unrelated documents removed |
The genuine query-role CPU integration passed in 7.61 seconds, covering raw API
preservation, actual PDF/photo retrieval, exact filename priority, PDF and size
filters, and limit one. Its ignored log `.searchi/qa/hybrid-tail-google-cpu.log`
has SHA-256 `bc920ba56bc5b4f89bb5ee8831420bf5c14964d2da5decb0b392482e12309d4e`.
The raw pre-change requests are preserved in
`.searchi/qa/readme-raw-relevance.json`, SHA-256
`4a017d8fee0d3762a806628e38a848ca9ca9cb052e92c1892f639efda3fde62d`.
A replay of existing genuine raw-score reports retained every previously
retrieved relevant top-five file in calibration, the previously evaluated
held-out report and the 61 ranked media-reference rows. Mean semantic
candidate counts changed from 11.6 to 5.0, 11.6 to 4.2 and 14.75 to 3.59,
respectively. This is score replay on known diagnostics, not newly independent
inference or a production relevance guarantee. The historical media reference
contains its documented audio preprocessing failure; no failed encoding is
silently credited as a positive. Forty text/code positive rows retain their
top semantic candidate by construction; **all 20 absence rows still retain a
neighbour**. The policy does not solve absence classification.
Three focused shortlist unit tests passed (weak-but-correct 0.6766, multiple
strong matches, flat/uniform/tied lists, one/two candidates and independent exact
lexical preservation). The full service library passed 45 tests with its two
explicitly provisioned/benchmark tests ignored; strict all-target Clippy passed.
## What changed
Explicit photo/image requests use image evidence; explicit video/film requests
use video-frame evidence. Spoken-topic requests retain speech-first retrieval
and raw-audio fallback while recognition is unavailable. Explicit music/audio
requests use actual audio evidence. If the requested channel is empty, semantic
search now returns empty instead of selecting an unrelated photo/document.
The independent exact filename/keyword lane remains available in hybrid search.
Ordinary subject queries stay general. Document/code/algorithm cues veto these
small intent hints. A mixed `photo or video` request stays general rather than
silently losing videos. `sound financial advice` is not an audio request.
The hints use word boundaries and English/German cues, not a claim of natural
language understanding. Debug traces report `explicit_source_channel` and
`requested_channel_empty`.
## Actual Google CPU evidence
The isolated integration fixture contains the existing licensed, SHA-locked
cat photo `fixtures/media/assets/image01.jpg`, copied into a temporary owned
index. It uses the normal native Google runtime with `SEARCHI_FORCE_CPU=1`,
one inference thread, actual image encoding, persisted ANN retrieval and the
query-role worker. No fabricated vectors or labels enter inference.
| Check | Unrestricted real-model channel | Corrected automatic routing |
| --- | --- | --- |
| Six requests for absent audio/music/speech/video channels, EN/DE | 6/6 returned the unrelated photo | 0/6 returned a semantic result |
| Three photo/general cat requests, EN/DE | Actual image indexed | 3/3 retained the correct photo |
| Exact `cat.jpg` | Independent lexical lane | Exact filename retained |
`explicit_media_requests_do_not_fall_back_to_unrelated_channels` passed in
82.63 seconds including indexing, model loading and all assertions. This is
functional correctness evidence, not a search-latency benchmark or a large
collection quality score. Raw log: ignored `.searchi/qa/media-final-routing.log`,
SHA-256 `14d452192315fb1ddfd0b0df1448ffc475876af57a767546b36f68f17771b83d`.
The existing actual Google code-versus-licensed-audio regression also passed
in 81.72 seconds: an explicit code query retained its indexed implementation
while real audio remained an eligible independent channel. Its ignored log
`.searchi/qa/media-final-code-veto.log` has SHA-256
`04d8f42ed8e872f22607c2fe4fb45e0d5149d4b42539b3346abd18ebb224e137`.
All three focused routing unit tests passed after the mixed-channel/algorithm/
sound-adjective fixes, including the English/German ambiguity cases.
Reproduce with the verified Google/model and FFmpeg environment described in
SKILLS.md:
```powershell
$env:SEARCHI_FORCE_CPU = '1'
cargo test -p searchi-service --test routing_google_cpu explicit_media_requests_do_not_fall_back --locked -- --ignored --nocapture --test-threads=1
cargo test -p searchi-service --lib routing::tests --locked
```
## Limits and music decision
These changes reject wrong channels and trim clearly separated weak tails;
they are not calibrated detection that a particular
subject is absent within a populated channel. An indexed audio collection can
still return an unrelated nearest performance for an absent musical instrument;
photos/videos have the same limitation within their own channel. Speech without
recognized passages retains raw audio fallback. Do not advertise a confidence
percentage or perfect no-answer detection.
Existing exact artist/title metadata filters remain the reliable identity path.
The previous independently frozen music comparison improved 8/14 to 11/14 first
hits using literal embedded tag fields, but regressed one positive, fell to 5/14
with misleading tags, and failed all four no-answer cases. That unconditional
field-max policy remains unintegrated: it does not justify shipping a universal
music-recognition improvement. See MUSIC-METADATA.md and
fixtures/music-validation-v1/README.md. This pass adds no hosted music lookup,
fingerprinting service, generated labels, or extra model downloads.
Existing image evidence and video scene sampling are retained. Spoken timing
and recovery are recorded separately in SPEECH-FINAL-QUALITY.md. Media remains
usable with explicit limits; this bounded pass does not invent a new overall
quality rating or extend the agreed release scope.
## 0.1.9: primary matches and related suggestions
The frozen shared-engine presentation rule now keeps weaker semantic neighbors
under expandable **Related suggestions** instead of promoting every nearest
neighbor as a primary match. It preserves exact filename/keyword matches and
access to lower-scoring genuine sources. See [semantic evidence](SEMANTIC-EVIDENCE.md)
for the frozen policy and [blind results](../fixtures/absence-v3/evaluation-summary.json).
Actual Google CPU evaluation covered all 36 assets without extraction or
semantic/speech failures. Primary false neighbors on absent requests fell from
16/16 to 4/16 against the previous-rule replay. All 16 positive requests retained
their expected source within five accessible results, but only 10/16 had a
correct primary first result; five required expanding related suggestions.
Both music identity requests still ranked the wrong recording first in raw
retrieval. Related grouping makes this uncertainty visible; it does not fix
music recognition, infer precise words/timestamps or prove requested facts exist.
All absent requests still retained related candidates.
The policy was frozen before blind evaluation and was not retuned on the result.
Small corpus, publisher-based media labels and one independent AI annotator
limit generalization. Package/startup verification for 0.1.9 passed; final public verification is
recorded in ROADMAP.md.