feat(benchmark): the built-in benchmark, redesigned into the console
The old standalone benchmark.html (Russian-only, Tailwind+Chart.js from CDNs,
never shipped in the crate) becomes a proper sidebar view. Same scoring ideas,
reimplemented: keyword checks with |-synonyms, think-tag stripping, tail-loop
detection, pass/partial/fail — plus what the old page never had: runs go
through the LIVE pipeline (pinned per model, streamed), so every test also
measures tok/s and time-to-first-token with the gateway's real token counts.
A built-in suite of 12 language-neutral probes (math, logic, code, QA,
instruction-following, extraction, translation, JSON formatting); the ⚡ quick
mode runs the 6 short ones — about a minute on a local model. Results: score
bars per model sorted best-first, a per-test grid (click a cell for the full
answer), previous runs and custom tests kept in the browser.
22 new strings in all 7 languages.
This commit is contained in:
Vendored
+24
@@ -563,4 +563,28 @@ export default {
|
||||
"routing.tasks.builtin": "Router nicht erreichbar — eingebauter Labelsatz",
|
||||
"routing.tasks.addCustom": "Aufgabe hinzufügen",
|
||||
"routing.tasks.addPlaceholder": "eigenes Label…",
|
||||
|
||||
// benchmark view
|
||||
"nav.benchmark": "Benchmark",
|
||||
"bm.title": "Benchmark",
|
||||
"bm.subtitle": "Qualitäts- und Tempo-Proben durch die Live-Pipeline: Antworten per Schlüsselwort geprüft, Schleifen erkannt, tok/s und Zeit bis zum ersten Token je Modell.",
|
||||
"bm.models": "Zu testende Modelle",
|
||||
"bm.quickMode": "Schnelltest",
|
||||
"bm.quickHint": "Die schnelle Teilmenge mit kurzen Antworten — etwa eine Minute pro lokalem Modell.",
|
||||
"bm.suiteInfo": "Eingebaute Suite: {q} schnelle / {f} volle Tests, plus Ihre eigenen.",
|
||||
"bm.run": "Starten",
|
||||
"bm.pickModel": "Wählen Sie mindestens ein Modell.",
|
||||
"bm.testOf": "Test {i} von {n}",
|
||||
"bm.results": "Ergebnisse",
|
||||
"bm.quick": "schnell",
|
||||
"bm.test": "Test",
|
||||
"bm.cellHint": "Klick auf eine Zelle zeigt die vollständige Antwort.",
|
||||
"bm.history": "Frühere Läufe (in diesem Browser gespeichert)",
|
||||
"bm.custom": "Eigene Tests",
|
||||
"bm.customHint": "Prompt + kommagetrennte Schlüsselwörter, die die Antwort enthalten muss (| für Synonyme). Im Browser gespeichert.",
|
||||
"bm.promptPh": "Prompt…",
|
||||
"bm.checkPh": "Schlüsselwörter, kommagetrennt",
|
||||
"bm.addTest": "Test hinzufügen",
|
||||
"bm.emptyAnswer": "leere Antwort",
|
||||
"bm.loopDetected": "Schleife erkannt",
|
||||
};
|
||||
|
||||
Vendored
+24
@@ -556,4 +556,28 @@ export default {
|
||||
"routing.tasks.builtin": "router unreachable — built-in label set",
|
||||
"routing.tasks.addCustom": "Add task",
|
||||
"routing.tasks.addPlaceholder": "custom label…",
|
||||
|
||||
// benchmark view
|
||||
"nav.benchmark": "Benchmark",
|
||||
"bm.title": "Benchmark",
|
||||
"bm.subtitle": "Quality and speed probes through the live pipeline: keyword-checked answers, anti-loop detection, tok/s and time-to-first-token per model.",
|
||||
"bm.models": "Models to test",
|
||||
"bm.quickMode": "Quick test",
|
||||
"bm.quickHint": "The fast subset with short answers — about a minute per local model.",
|
||||
"bm.suiteInfo": "Built-in suite: {q} quick / {f} full tests, plus your custom ones.",
|
||||
"bm.run": "Run",
|
||||
"bm.pickModel": "Pick at least one model.",
|
||||
"bm.testOf": "test {i} of {n}",
|
||||
"bm.results": "Results",
|
||||
"bm.quick": "quick",
|
||||
"bm.test": "Test",
|
||||
"bm.cellHint": "Click a cell to see the model's full answer.",
|
||||
"bm.history": "Previous runs (stored in this browser)",
|
||||
"bm.custom": "Custom tests",
|
||||
"bm.customHint": "Prompt + comma-separated keywords the answer must contain (use | for synonyms). Stored in this browser.",
|
||||
"bm.promptPh": "prompt…",
|
||||
"bm.checkPh": "keywords, comma-separated",
|
||||
"bm.addTest": "Add test",
|
||||
"bm.emptyAnswer": "empty answer",
|
||||
"bm.loopDetected": "loop detected",
|
||||
};
|
||||
|
||||
Vendored
+24
@@ -563,4 +563,28 @@ export default {
|
||||
"routing.tasks.builtin": "router inaccesible — conjunto integrado",
|
||||
"routing.tasks.addCustom": "Añadir tarea",
|
||||
"routing.tasks.addPlaceholder": "etiqueta propia…",
|
||||
|
||||
// benchmark view
|
||||
"nav.benchmark": "Benchmark",
|
||||
"bm.title": "Benchmark",
|
||||
"bm.subtitle": "Pruebas de calidad y velocidad a través del pipeline en vivo: respuestas verificadas por palabras clave, detección de bucles, tok/s y tiempo del primer token por modelo.",
|
||||
"bm.models": "Modelos a probar",
|
||||
"bm.quickMode": "Prueba rápida",
|
||||
"bm.quickHint": "El subconjunto rápido con respuestas cortas — alrededor de un minuto por modelo local.",
|
||||
"bm.suiteInfo": "Suite integrada: {q} pruebas rápidas / {f} completas, más las tuyas.",
|
||||
"bm.run": "Ejecutar",
|
||||
"bm.pickModel": "Elige al menos un modelo.",
|
||||
"bm.testOf": "prueba {i} de {n}",
|
||||
"bm.results": "Resultados",
|
||||
"bm.quick": "rápida",
|
||||
"bm.test": "Prueba",
|
||||
"bm.cellHint": "Haz clic en una celda para ver la respuesta completa.",
|
||||
"bm.history": "Ejecuciones anteriores (guardadas en este navegador)",
|
||||
"bm.custom": "Pruebas propias",
|
||||
"bm.customHint": "Prompt + palabras clave separadas por comas que la respuesta debe contener (| para sinónimos). Se guardan en este navegador.",
|
||||
"bm.promptPh": "prompt…",
|
||||
"bm.checkPh": "palabras clave, separadas por comas",
|
||||
"bm.addTest": "Añadir prueba",
|
||||
"bm.emptyAnswer": "respuesta vacía",
|
||||
"bm.loopDetected": "bucle detectado",
|
||||
};
|
||||
|
||||
Vendored
+24
@@ -563,4 +563,28 @@ export default {
|
||||
"routing.tasks.builtin": "routeur injoignable — jeu d'étiquettes intégré",
|
||||
"routing.tasks.addCustom": "Ajouter une tâche",
|
||||
"routing.tasks.addPlaceholder": "étiquette personnalisée…",
|
||||
|
||||
// benchmark view
|
||||
"nav.benchmark": "Benchmark",
|
||||
"bm.title": "Benchmark",
|
||||
"bm.subtitle": "Sondes de qualité et de vitesse via le pipeline en direct : réponses vérifiées par mots-clés, boucles détectées, tok/s et temps du premier token par modèle.",
|
||||
"bm.models": "Modèles à tester",
|
||||
"bm.quickMode": "Test rapide",
|
||||
"bm.quickHint": "Le sous-ensemble rapide aux réponses courtes — environ une minute par modèle local.",
|
||||
"bm.suiteInfo": "Suite intégrée : {q} tests rapides / {f} complets, plus les vôtres.",
|
||||
"bm.run": "Lancer",
|
||||
"bm.pickModel": "Choisissez au moins un modèle.",
|
||||
"bm.testOf": "test {i} sur {n}",
|
||||
"bm.results": "Résultats",
|
||||
"bm.quick": "rapide",
|
||||
"bm.test": "Test",
|
||||
"bm.cellHint": "Cliquez sur une cellule pour voir la réponse complète.",
|
||||
"bm.history": "Exécutions précédentes (stockées dans ce navigateur)",
|
||||
"bm.custom": "Tests personnalisés",
|
||||
"bm.customHint": "Prompt + mots-clés séparés par des virgules que la réponse doit contenir (| pour les synonymes). Stockés dans ce navigateur.",
|
||||
"bm.promptPh": "prompt…",
|
||||
"bm.checkPh": "mots-clés, séparés par des virgules",
|
||||
"bm.addTest": "Ajouter un test",
|
||||
"bm.emptyAnswer": "réponse vide",
|
||||
"bm.loopDetected": "boucle détectée",
|
||||
};
|
||||
|
||||
Vendored
+24
@@ -555,4 +555,28 @@ export default {
|
||||
"routing.tasks.builtin": "роутер недоступен — встроенный набор меток",
|
||||
"routing.tasks.addCustom": "Добавить задачу",
|
||||
"routing.tasks.addPlaceholder": "своя метка…",
|
||||
|
||||
// benchmark view
|
||||
"nav.benchmark": "Бенчмарк",
|
||||
"bm.title": "Бенчмарк",
|
||||
"bm.subtitle": "Проверки качества и скорости через живой пайплайн: ответы сверяются по ключевым словам, ловится зацикливание, замеряются tok/s и время первого токена.",
|
||||
"bm.models": "Какие модели тестировать",
|
||||
"bm.quickMode": "Быстрый тест",
|
||||
"bm.quickHint": "Короткое подмножество с краткими ответами — около минуты на локальную модель.",
|
||||
"bm.suiteInfo": "Встроенный набор: {q} быстрых / {f} полных тестов, плюс ваши собственные.",
|
||||
"bm.run": "Запустить",
|
||||
"bm.pickModel": "Выберите хотя бы одну модель.",
|
||||
"bm.testOf": "тест {i} из {n}",
|
||||
"bm.results": "Результаты",
|
||||
"bm.quick": "быстрый",
|
||||
"bm.test": "Тест",
|
||||
"bm.cellHint": "Клик по ячейке — полный ответ модели.",
|
||||
"bm.history": "Прошлые прогоны (хранятся в этом браузере)",
|
||||
"bm.custom": "Свои тесты",
|
||||
"bm.customHint": "Промпт + ключевые слова через запятую, которые должны быть в ответе (| — синонимы). Хранятся в этом браузере.",
|
||||
"bm.promptPh": "промпт…",
|
||||
"bm.checkPh": "ключевые слова через запятую",
|
||||
"bm.addTest": "Добавить тест",
|
||||
"bm.emptyAnswer": "пустой ответ",
|
||||
"bm.loopDetected": "зацикливание",
|
||||
};
|
||||
|
||||
Vendored
+24
@@ -563,4 +563,28 @@ export default {
|
||||
"routing.tasks.builtin": "yönlendiriciye ulaşılamıyor — yerleşik etiket seti",
|
||||
"routing.tasks.addCustom": "Görev ekle",
|
||||
"routing.tasks.addPlaceholder": "özel etiket…",
|
||||
|
||||
// benchmark view
|
||||
"nav.benchmark": "Kıyaslama",
|
||||
"bm.title": "Kıyaslama",
|
||||
"bm.subtitle": "Canlı hat üzerinden kalite ve hız probları: yanıtlar anahtar kelimeyle doğrulanır, döngü tespit edilir, model başına tok/s ve ilk token süresi ölçülür.",
|
||||
"bm.models": "Test edilecek modeller",
|
||||
"bm.quickMode": "Hızlı test",
|
||||
"bm.quickHint": "Kısa yanıtlı hızlı alt küme — yerel model başına yaklaşık bir dakika.",
|
||||
"bm.suiteInfo": "Yerleşik küme: {q} hızlı / {f} tam test, artı kendi testleriniz.",
|
||||
"bm.run": "Çalıştır",
|
||||
"bm.pickModel": "En az bir model seçin.",
|
||||
"bm.testOf": "{n} testten {i}.",
|
||||
"bm.results": "Sonuçlar",
|
||||
"bm.quick": "hızlı",
|
||||
"bm.test": "Test",
|
||||
"bm.cellHint": "Modelin tam yanıtı için hücreye tıklayın.",
|
||||
"bm.history": "Önceki çalıştırmalar (bu tarayıcıda saklanır)",
|
||||
"bm.custom": "Özel testler",
|
||||
"bm.customHint": "İstem + yanıtın içermesi gereken virgülle ayrılmış anahtar kelimeler (| eşanlamlılar için). Bu tarayıcıda saklanır.",
|
||||
"bm.promptPh": "istem…",
|
||||
"bm.checkPh": "anahtar kelimeler, virgülle",
|
||||
"bm.addTest": "Test ekle",
|
||||
"bm.emptyAnswer": "boş yanıt",
|
||||
"bm.loopDetected": "döngü tespit edildi",
|
||||
};
|
||||
|
||||
Vendored
+24
@@ -563,4 +563,28 @@ export default {
|
||||
"routing.tasks.builtin": "路由器不可达 — 使用内置标签集",
|
||||
"routing.tasks.addCustom": "添加任务",
|
||||
"routing.tasks.addPlaceholder": "自定义标签……",
|
||||
|
||||
// benchmark view
|
||||
"nav.benchmark": "基准测试",
|
||||
"bm.title": "基准测试",
|
||||
"bm.subtitle": "通过实时管线做质量与速度探测:按关键词核对答案、检测循环输出,并按模型测量 tok/s 与首个 token 时间。",
|
||||
"bm.models": "要测试的模型",
|
||||
"bm.quickMode": "快速测试",
|
||||
"bm.quickHint": "答案简短的快速子集 — 每个本地模型约一分钟。",
|
||||
"bm.suiteInfo": "内置套件:{q} 个快速 / {f} 个完整测试,另加你自己的。",
|
||||
"bm.run": "运行",
|
||||
"bm.pickModel": "请至少选择一个模型。",
|
||||
"bm.testOf": "第 {i}/{n} 个测试",
|
||||
"bm.results": "结果",
|
||||
"bm.quick": "快速",
|
||||
"bm.test": "测试",
|
||||
"bm.cellHint": "点击单元格查看模型的完整回答。",
|
||||
"bm.history": "历史运行(保存在本浏览器)",
|
||||
"bm.custom": "自定义测试",
|
||||
"bm.customHint": "提示词 + 逗号分隔的关键词,回答必须包含它们(| 表示同义词)。保存在本浏览器。",
|
||||
"bm.promptPh": "提示词……",
|
||||
"bm.checkPh": "关键词,逗号分隔",
|
||||
"bm.addTest": "添加测试",
|
||||
"bm.emptyAnswer": "回答为空",
|
||||
"bm.loopDetected": "检测到循环",
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user