Filter exact music identities before lexical and semantic candidate limits

This commit is contained in:
karl committed 2026-10-13 18:36:54 +02:00
1 parent 3ac1201909
commit 2eace15a33
7 files changed
+458 -19

No files matched your search

+19 -1
View File
@@ -513,7 +513,7 @@ impl HybridSearch {
.lexical
.search_with_options_traced(query, candidates, options, trace, parent)?;
if query.trim().is_empty() || limit == 0 {
return Ok(Vec::new());
return Ok(lexical.into_iter().take(limit.min(1000)).collect());
}
trace.timed("hybrid.identifier_priority", parent, |_, _| {
promote_identifiers(query.trim(), &mut lexical)
@@ -776,6 +776,24 @@ mod tests {
let directory = tempfile::tempdir()?;
let db = directory.path().join("index.db");
let mut service = HybridSearch::with_provider(&db, Box::new(FailingProvider))?;
// The failure-only provider proves metadata-only searches never require inference.
let metadata = service.search_measured(
"",
5,
&SearchOptions {
media_artist: Some("Absent Artist".into()),
..Default::default()
},
true,
)?;
assert!(metadata.results.is_empty());
assert!(!metadata
.metrics
.trace
.unwrap()
.iter()
.any(|span| span.name == "semantic.query_embedding"));
let mut trace = TraceCollector::new(MetricsMode::Debug);
assert!(service
.search_traced(