Classify prompt and animation queries earlier

Map prompt-oriented product searches and animation-oriented build searches away from the breaking-news default so source tiering and tiebreakers align with the benchmark topics.

Validation: uv run python -m unittest tests.test_query_type
This commit is contained in:
Jeffrey Sperling
2026-03-14 00:38:59 -07:00
parent c711e443fe
commit 058c4e1899
2 changed files with 4 additions and 2 deletions
+2 -2
View File
@@ -7,7 +7,7 @@ QueryType = Literal["product", "concept", "opinion", "how_to", "comparison", "br
# Pattern-based classification (no LLM, no external deps) # Pattern-based classification (no LLM, no external deps)
_PRODUCT_PATTERNS = re.compile( _PRODUCT_PATTERNS = re.compile(
r"\b(price|pricing|cost|buy|purchase|deal|discount|subscription|plan|tier|free tier|alternative)\b", re.I r"\b(price|pricing|cost|buy|purchase|deal|discount|subscription|plan|tier|free tier|alternative|prompt|prompts|prompting|template|templates)\b", re.I
) )
_CONCEPT_PATTERNS = re.compile( _CONCEPT_PATTERNS = re.compile(
r"\b(what is|what are|explain|definition|how does|how do|overview|introduction|guide to|primer)\b", re.I r"\b(what is|what are|explain|definition|how does|how do|overview|introduction|guide to|primer)\b", re.I
@@ -16,7 +16,7 @@ _OPINION_PATTERNS = re.compile(
r"\b(worth it|thoughts on|opinion|review|experience with|recommend|should i|pros and cons|good or bad)\b", re.I r"\b(worth it|thoughts on|opinion|review|experience with|recommend|should i|pros and cons|good or bad)\b", re.I
) )
_HOWTO_PATTERNS = re.compile( _HOWTO_PATTERNS = re.compile(
r"\b(how to|tutorial|step by step|setup|install|configure|deploy|migrate|implement|build a|create a)\b", re.I r"\b(how to|tutorial|step by step|setup|install|configure|deploy|migrate|implement|build a|create a|animation|animations|video workflow|render pipeline)\b", re.I
) )
_COMPARISON_PATTERNS = re.compile( _COMPARISON_PATTERNS = re.compile(
r"\b(vs\.?|versus|compared to|comparison|better than|difference between|switch from)\b", re.I r"\b(vs\.?|versus|compared to|comparison|better than|difference between|switch from)\b", re.I
+2
View File
@@ -20,6 +20,7 @@ class TestDetectQueryType(unittest.TestCase):
self.assertEqual(detect_query_type("cursor IDE pricing"), "product") self.assertEqual(detect_query_type("cursor IDE pricing"), "product")
self.assertEqual(detect_query_type("is Claude Pro worth the cost"), "product") self.assertEqual(detect_query_type("is Claude Pro worth the cost"), "product")
self.assertEqual(detect_query_type("best free tier LLM API"), "product") self.assertEqual(detect_query_type("best free tier LLM API"), "product")
self.assertEqual(detect_query_type("nano banana pro prompting"), "product")
def test_concept_queries(self): def test_concept_queries(self):
self.assertEqual(detect_query_type("what is WebTransport"), "concept") self.assertEqual(detect_query_type("what is WebTransport"), "concept")
@@ -35,6 +36,7 @@ class TestDetectQueryType(unittest.TestCase):
self.assertEqual(detect_query_type("how to deploy on Vercel"), "how_to") self.assertEqual(detect_query_type("how to deploy on Vercel"), "how_to")
self.assertEqual(detect_query_type("tutorial for building MCP servers"), "how_to") self.assertEqual(detect_query_type("tutorial for building MCP servers"), "how_to")
self.assertEqual(detect_query_type("step by step Kubernetes setup"), "how_to") self.assertEqual(detect_query_type("step by step Kubernetes setup"), "how_to")
self.assertEqual(detect_query_type("remotion animations for Claude Code"), "how_to")
def test_comparison_queries(self): def test_comparison_queries(self):
self.assertEqual(detect_query_type("cursor vs windsurf"), "comparison") self.assertEqual(detect_query_type("cursor vs windsurf"), "comparison")