#!/usr/bin/env node /** * qa-voice-bench.mjs — provider-neutral TEXT-mode voice-routing benchmark. * * Every provider gets the same prompt: production's realtimeInstructions() * and GEV_REALTIME_TOOLS (the Realtime adapter uses the exact session body the * token handler mints). Two suites, reported separately: * core the qa-voice-routing phrase table, graded with its semantics * (plus benchmark-only typed-argument checks) * coverage the newer-layers coverage probe, graded correct / * honest-refusal / hallucinated-capability / wrong-tool * dialogue two-turn dialogues in one context; turn 2 depends on turn 1 * capability area handles / imagery / OSM / point-and-ask phrases (and two * dialogues) for the tools added after 4b56d0e9 * Coverage rows are graded twice: v1 (original rubric, 4b56d0e9 tool schema) * and v2 (rubric for the current tool surface). * * Methodology: a fresh context per phrase (new Realtime/Live session, or a * stateless chat request); stub tool results; continuations until the model * stops calling tools (max 4). No app page is involved. * * Usage: * node scripts/qa-voice-bench.mjs --provider openai-realtime --model gpt-realtime-2 --reps 2 * node scripts/qa-voice-bench.mjs --provider gemini-live --model gemini-3.8-live * node scripts/qa-voice-bench.mjs --provider ollama --model gemma4:e4b * node scripts/qa-voice-bench.mjs --provider openai-chat --base http://localhost:1234/v1 --model * node scripts/qa-voice-bench.mjs --summarize --out qa-shots/voice-bench/ * Common flags: --out (reuse one dir to collect several models), * --suite core,coverage --only --budget * --variant