Smart routing
Elke prompt wordt geclassificeerd in een task-categorie binnen vijf milliseconden en daarna geroute naar het model dat het hoogst scoort voor die categorie binnen jouw randvoorwaarden. Deterministisch, transparant en te overschrijven.
De routing-pipeline
- Classificeer de prompt in een
TaskTypemet lexical signals en een kleine prompt-classifier. Resultaat: één vancoding,reasoning,general,embedding,pilot. - Haal constraints op uit het request:
model='auto'laat de router kiezen, een expliciet model pinned. Constraints kunnen zijn: alleen-lokaal, een kostenplafond, een latency-budget en een voorkeur-provider. - Kijk in de capability map voor de doelcategorie. Filter naar modellen die aan de constraints voldoen.
- Kies de hoogste scorer met geldige hardware-beschikbaarheid. RAM-aware loading voorkomt dat Soriku een model kiest dat niet naast wat al geladen is past.
- Voer uit op het gekozen model en log de beslissing voor auditeerbaarheid in
data/routing_log.jsonl.
Determinisme
Bij dezelfde capability map, dezelfde constraints en dezelfde prompt kiest de router altijd hetzelfde model. Geen randomness in de beslissingsstap. Als je een routing-beslissing niet kan reproduceren, kan je hem niet auditen.
Constraints die je kan zetten
| Constraint | Type | Effect |
|---|---|---|
prefer_local | bool | Alleen lokaal gehoste modellen meenemen |
max_cost_per_1k | float | Reject modellen waarvan de kosten dit plafond overschrijden |
max_latency_ms | int | Reject modellen waarvan de recente p95 latency dit overschrijdt |
provider_allowlist | list | Beperk tot specifieke providers (ollama, anthropic, openai, etc.) |
pinned_model | string | Bypass routing volledig en gebruik dit exacte model |
Task-types
De classifier mapt een prompt op één van vijf task-types. De mapping is rule-based en snel.
| Task type | Trigger | Routeert naar |
|---|---|---|
coding | Code-generatie, debugging, refactoring intents | Modellen met hoge code_generation of code_review scores |
reasoning | Multi-step analyse, math, planning, formal reasoning | Modellen met hoge reasoning scores |
general | Conversational, samenvatting, vertaling, creatief schrijven | Modellen met hoge category-matching algemene scores |
embedding | Requests naar /api/v1/embeddings | Embedding-capable model, default nomic-embed-text |
pilot | Tool-gebruikende prompts (file ops, shell, web fetch) gedetecteerd via verb regex | Pilot-mode worker, zie Pilot mode |
De router overschrijven
Drie niveaus van override, van meest algemeen tot meest specifiek.
- Globale pin: zet een model in
config/models.yamlzodat het altijd een categorie afhandelt. - Per-call pin: geef
model='qwen2.5-coder:7b'mee in de API-call. De router slaat classificatie over. - Persona voorkeur: een agent persona met
preferred_modelgezet routeert altijd via dat model.
Zelfs met een override wordt de routing-beslissing gelogd met
routed_by: pin zodat audits zien dat de override bewust was.