From b88e056dcda4027fbb55b70ffc51dbbadb0b9c5b Mon Sep 17 00:00:00 2001 From: heaven Date: Fri, 3 Jul 2026 00:04:51 +0300 Subject: [PATCH] test(ai-bot): extend routereval golden set to 30 items with live-harvested Gemini verdicts --- .../cmd/routereval/golden_extended.json | 467 ++++++++++++++++++ 1 file changed, 467 insertions(+) create mode 100644 apps/ai-bot/cmd/routereval/golden_extended.json diff --git a/apps/ai-bot/cmd/routereval/golden_extended.json b/apps/ai-bot/cmd/routereval/golden_extended.json new file mode 100644 index 00000000..c241a3a3 --- /dev/null +++ b/apps/ai-bot/cmd/routereval/golden_extended.json @@ -0,0 +1,467 @@ +[ + { + "name": "road house first turn (obscure cast)", + "message": "кто снимался в фильме дом у дороги", + "verdict": { + "needs_web": true, + "verifiable": true, + "entity_obscure": true, + "time_sensitive": false, + "trivial": false, + "search_query": "Дом у дороги фильм актёрский состав", + "confidence": 0.7 + }, + "expected_route": "web_then_grok", + "factual": true + }, + { + "name": "road house follow-up (DM, resolved)", + "message": "2024 года", + "verdict": { + "needs_web": true, + "verifiable": true, + "entity_obscure": true, + "time_sensitive": false, + "trivial": false, + "search_query": "Дом у дороги 2024 фильм актёрский состав", + "confidence": 0.65 + }, + "expected_route": "web_then_grok", + "factual": true + }, + { + "name": "weather (freshness lexeme, forced web)", + "message": "погода сегодня в Москве", + "verdict": { + "needs_web": true, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": true, + "trivial": false, + "search_query": "погода сегодня Москва", + "confidence": 0.95 + }, + "expected_route": "web_then_grok", + "factual": false + }, + { + "name": "freshness rumination (accepted designed false-web, §14.1)", + "message": "сегодня я думаю о смысле жизни", + "verdict": { + "needs_web": false, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "search_query": "", + "confidence": 0.2 + }, + "expected_route": "web_then_grok", + "factual": false + }, + { + "name": "obscure entity founder (no freshness word)", + "message": "кто основал компанию Acme Widgets", + "verdict": { + "needs_web": true, + "verifiable": true, + "entity_obscure": true, + "time_sensitive": false, + "trivial": false, + "search_query": "Acme Widgets основатель компании", + "confidence": 0.6 + }, + "expected_route": "web_then_grok", + "factual": true + }, + { + "name": "static famous fact (author lookup)", + "message": "кто написал войну и мир", + "verdict": { + "needs_web": true, + "verifiable": true, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "search_query": "Война и мир автор", + "confidence": 0.62 + }, + "expected_route": "web_then_grok", + "factual": true + }, + { + "name": "current CEO (time-sensitive, sub-floor needs_web)", + "message": "кто возглавляет Tesla", + "verdict": { + "needs_web": true, + "verifiable": true, + "entity_obscure": false, + "time_sensitive": true, + "trivial": false, + "search_query": "Tesla CEO", + "confidence": 0.5 + }, + "expected_route": "web_then_grok", + "factual": false + }, + { + "name": "greeting (trivial, high confidence)", + "message": "привет", + "verdict": { + "needs_web": false, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": false, + "trivial": true, + "search_query": "", + "confidence": 0.95 + }, + "expected_route": "trivial_direct", + "factual": false + }, + { + "name": "ack low-confidence trivial (no voice leak → grok)", + "message": "спасибо", + "verdict": { + "needs_web": false, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": false, + "trivial": true, + "search_query": "", + "confidence": 0.5 + }, + "expected_route": "grok_direct", + "factual": false + }, + { + "name": "opinion / recommendation (safe floor)", + "message": "посоветуй фильм на вечер", + "verdict": { + "needs_web": false, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "search_query": "", + "confidence": 0.82 + }, + "expected_route": "grok_direct", + "factual": false + }, + { + "name": "code help (safe floor)", + "message": "напиши функцию сортировки на python", + "verdict": { + "needs_web": false, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "search_query": "", + "confidence": 0.9 + }, + "expected_route": "grok_direct", + "factual": false + }, + { + "name": "vague needs_web below floor (stays grok)", + "message": "что ты думаешь о криптовалютах", + "verdict": { + "needs_web": true, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "search_query": "", + "confidence": 0.4 + }, + "expected_route": "grok_direct", + "factual": false + }, + { + "name": "explanation over-flagged needs_web but NOT verifiable (false-web fix)", + "message": "объясни как работают горутины в Go", + "verdict": { + "needs_web": true, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "search_query": "", + "confidence": 0.9 + }, + "expected_route": "grok_direct", + "factual": false + }, + { + "name": "ack-prefixed long real question (not trivial, safe floor)", + "message": "спасибо, а теперь подробно объясни квантовую запутанность", + "verdict": { + "needs_web": false, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "search_query": "", + "confidence": 0.85 + }, + "expected_route": "grok_direct", + "factual": false + }, + { + "name": "bare follow-up in a GROUP (no resolvable subject → grok)", + "message": "2024 года", + "verdict": { + "needs_web": false, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "search_query": "", + "confidence": 0.3 + }, + "expected_route": "grok_direct", + "factual": false + }, + { + "name": "project: what can Vojo do (name hint + about_project)", + "message": "что умеет vojo", + "verdict": { + "needs_web": false, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "about_project": true, + "search_query": "", + "confidence": 0.9 + }, + "expected_route": "project_then_grok", + "factual": false + }, + { + "name": "project: app how-to (intent hint + about_project)", + "message": "как в этом приложении включить шифрование", + "verdict": { + "needs_web": false, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "about_project": true, + "search_query": "", + "confidence": 0.85 + }, + "expected_route": "project_then_grok", + "factual": false + }, + { + "name": "venting about the app, classifier says not-about-project (about_project=false → grok)", + "message": "vojo упал опять?", + "verdict": { + "needs_web": false, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "about_project": false, + "search_query": "", + "confidence": 0.4 + }, + "expected_route": "grok_direct", + "factual": false + }, + { + "name": "project: context follow-up, no literal name (classifier resolves it)", + "message": "Про этот", + "verdict": { + "needs_web": false, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "about_project": true, + "search_query": "", + "confidence": 1.0 + }, + "expected_route": "project_then_grok", + "factual": false + }, + { + "name": "v2: new releases exception", + "message": "какие новинки кино вышли в этом месяце", + "verdict": { + "needs_web": true, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": true, + "trivial": false, + "about_project": false, + "search_query": "", + "confidence": 1.0 + }, + "expected_route": "web_then_grok", + "factual": false + }, + { + "name": "v2: reading advice (safe floor)", + "message": "посоветуй что почитать вечером", + "verdict": { + "needs_web": false, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "about_project": false, + "search_query": "", + "confidence": 0.1 + }, + "expected_route": "grok_direct", + "factual": false + }, + { + "name": "v2: famous product release year", + "message": "когда вышел айфон 15", + "verdict": { + "needs_web": true, + "verifiable": true, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "about_project": false, + "search_query": "", + "confidence": 1.0 + }, + "expected_route": "web_then_grok", + "factual": true + }, + { + "name": "v2: semi-famous person", + "message": "кто такой Джон Кармак", + "verdict": { + "needs_web": true, + "verifiable": true, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "about_project": false, + "search_query": "", + "confidence": 1.0 + }, + "expected_route": "web_then_grok", + "factual": true + }, + { + "name": "v2: population lookup", + "message": "население Праги", + "verdict": { + "needs_web": true, + "verifiable": true, + "entity_obscure": false, + "time_sensitive": true, + "trivial": false, + "about_project": false, + "search_query": "", + "confidence": 1.0 + }, + "expected_route": "web_then_grok", + "factual": true + }, + { + "name": "v2: protocol question (general)", + "message": "что такое матрикс протокол, на котором ты работаешь", + "verdict": { + "needs_web": true, + "verifiable": true, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "about_project": false, + "search_query": "", + "confidence": 0.9 + }, + "expected_route": "grok_direct", + "factual": false + }, + { + "name": "v2: creative with freshness filler", + "message": "напиши хокку про дождь сегодня вечером", + "verdict": { + "needs_web": false, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "about_project": false, + "search_query": "", + "confidence": 0.0 + }, + "expected_route": "web_then_grok", + "factual": false + }, + { + "name": "v2: account action (project)", + "message": "как удалить свой аккаунт", + "verdict": { + "needs_web": false, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "about_project": true, + "search_query": "", + "confidence": 0.9 + }, + "expected_route": "project_then_grok", + "factual": false + }, + { + "name": "v2: follow-up this-app calls (project)", + "message": "а в этом можно позвонить?", + "verdict": { + "needs_web": false, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "about_project": true, + "search_query": "", + "confidence": 0.9 + }, + "expected_route": "project_then_grok", + "factual": false + }, + { + "name": "v2: setup book author", + "message": "кто написал преступление и наказание", + "verdict": { + "needs_web": true, + "verifiable": true, + "entity_obscure": false, + "time_sensitive": false, + "trivial": false, + "about_project": false, + "search_query": "", + "confidence": 1.0 + }, + "expected_route": "web_then_grok", + "factual": true + }, + { + "name": "v2: post-answer ack", + "message": "спасибо!", + "verdict": { + "needs_web": false, + "verifiable": false, + "entity_obscure": false, + "time_sensitive": false, + "trivial": true, + "about_project": false, + "search_query": "", + "confidence": 1.0 + }, + "expected_route": "trivial_direct", + "factual": false + } +]