feat(routing): per-task rules on top of complexity tiers; hosted router is the default
The router has always returned two signals — task label and complexity tier — but only the tier picked models. [routing.tasks] adds `label → ordered models`: a matching rule's models lead the candidate chain and the tier chain follows as fallback, so pinning translations to a local model never weakens failover. Requests whose chain was headed by a task rule report route_source "router+task-rule". The Routing page grows a per-task editor built from the account's LIVE taxonomy (GET /v1/taxonomies via the new /admin/api/routing/labels proxy; built-in label set when the router is unreachable), with localized task names, each task's share of 7-day traffic, "by complexity (no rule)" as the explicit empty state, and custom labels for other taxonomies. Deleting a model scrubs it from task rules like it always did from tiers. Also fixes the default config pointing at a placeholder localhost:8080 router with a nonexistent taxonomy — a fresh install now targets the hosted allaigate router (IP endpoint, verify_tls off, data-assistant, 12 s oracle timeout) and degrades gracefully until a key is set. Verified end-to-end against the live router: translation → task-rule model, math → tier path. 16 new strings in all 7 languages.
This commit is contained in:
Vendored
+18
@@ -545,4 +545,22 @@ export default {
|
||||
"bench.running": "misst…",
|
||||
"bench.failed": "fehlgeschlagen",
|
||||
"bench.none": "Noch keine lokalen .cmf-Chat-Modelle.",
|
||||
|
||||
// task-based routing
|
||||
"task.chitchat": "Smalltalk",
|
||||
"task.code": "Code",
|
||||
"task.creative-writing": "Kreatives Schreiben",
|
||||
"task.extraction": "Datenextraktion",
|
||||
"task.math": "Mathematik",
|
||||
"task.qa": "Fragen & Antworten",
|
||||
"task.summarization": "Zusammenfassung",
|
||||
"task.translation": "Übersetzung",
|
||||
"routing.tasks.title": "Aufgabenbasiertes Routing",
|
||||
"routing.tasks.hint": "Die Modelle einer Regel kommen für ihre Aufgabe zuerst; die Komplexitätskette bleibt als Fallback. Leer = nur nach Komplexität.",
|
||||
"routing.tasks.inherit": "nach Komplexität (keine Regel)",
|
||||
"routing.tasks.share": "{p}% der Anfragen (7 T)",
|
||||
"routing.tasks.fromRouter": "Labels live vom Router",
|
||||
"routing.tasks.builtin": "Router nicht erreichbar — eingebauter Labelsatz",
|
||||
"routing.tasks.addCustom": "Aufgabe hinzufügen",
|
||||
"routing.tasks.addPlaceholder": "eigenes Label…",
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user