Smart Router
Send model="auto" eller en router-adresse, så vælger Stav en model per forespørgsel — filtreret efter dine regler og forespørgslens behov, skåret på kvalitet, forventet pris og målt hastighed, med automatisk skift til de næstbedste modeller.
Smart Router vælger en model til hver forespørgsel. Du indstiller reglerne én gang i Dit arbejdsområde, og din kode sender auto eller en router-adresse i stedet for et modelnavn.
resp = client.chat.completions.create(
model="auto",
messages=[{"role": "user", "content": "Opsummér denne kontraktbestemmelse."}],
)
print(resp.model) # den model, der faktisk betjente forespørgslen
Routing fungerer på /v1/chat/completions, /v1/messages og /v1/responses.
Tre måder at adressere en model på
model="auto" # dit arbejdsområdes standardrouter
model="@acme/eu-only" # en router, dit arbejdsområde har oprettet
model="anthropic/claude-sonnet-4-5" # en fastgjort model — ingen routing
auto bruger dit arbejdsområdes standardrouter. Skift standarden under Dit arbejdsområde → Forbind → Routere, hvorefter alle auto-kald følger med uden ny udrulning.
En router adresseres som @arbejdsområde-slug/router-slug. Den kan kun findes i dit eget arbejdsområde:
| Gælder for | Resultat |
|---|---|
| Et andet arbejdsområdes slug | 404 router_not_found — aldrig 403, så eksistensen ikke lækkes |
| Ukendt eller arkiveret router | 404 router_not_found |
| Forkert formateret adresse | 400 invalid_router_ref |
| API-nøglen har kun adgang til andre routere | router_not_allowed_for_key |
| API-nøglen kræver en router, men forespørgslen navngiver en model | router_required_for_key |
En router, der ikke er din standard, falder aldrig tilbage til noget andet. Hvis dens kandidatgruppe er tom, får du en fejl.
En fastgjort model springer routing over. Dit arbejdsområdes regler og suverænitetsniveau gælder stadig. En nøgle med adgang begrænset til en router kan ikke fastgøre en model; den må kun sende auto eller en af sine egne routere.
Sådan træffes beslutningen
1. Opbyg kandidatgruppen
Tag udgangspunkt i de modeller, dit arbejdsområde må bruge, og fjern derefter enhver model, som:
- er under dit suverænitetsniveau (se Suverænitet)
- er under kvalitetsniveauet, hvis et sådant er indstillet (det strengeste af arbejdsområdets, nøglens og routerens vinder)
- ikke har et aktivt leverandørendepunkt
- ikke kan betjene en chatforespørgsel
- ikke lever op til routerens egne filtre: tilladte eller blokerede modeller, tilladte modelskabere, påkrævede egenskaber, blokerede beregningslande, tilladte jurisdiktioner, dens eget suverænitetsniveau (den kan kun stramme arbejdsområdets niveau) og BYOK-only-tilstand
- mangler en egenskab, som forespørgslen har brug for (se herunder)
- har et kontekstvindue, der er for lille til forespørgslens estimerede inddata, inklusive værktøjsdefinitioner
2. Score det, der overlever
| Begreb | Hvad det måler |
|---|---|
| Kvalitet | Et kvalitetsindeks fra 0–100 per model |
| Pris | Den forventede pris for denne forespørgsel: estimerede inddata- og uddatatokens mod hvert leverandørendepunkts pris |
| Hastighed | Målt tid til første token og gennemløb per leverandørendepunkt. Modeller uden nok målinger får en konservativ standardværdi |
Standardvægtningen er kvalitet 40 / pris 30 / svartid 30. Hver router har sin egen vægtning. Et arbejdsområde, der er indstillet til at foretrække suveræne modeller, giver en bonus til suveræne modeller med åbne vægte.
2a. Hvad en router betaler for
En router kan fastsætte to priser i stedet for tre vægtninger: hvad et godt svar er værd, og hvad ét sekunds ventetid koster i dit arbejdsområdes valuta (Brugerdefineret under routerens mål). Routeren vælger derefter den model, der giver mest værdi: sandsynligheden for et godt svar ganget med dets værdi, minus den forventede pris, minus ventetiden. Forudindstillinger (Balanceret, Laveste pris, Laveste svartid, Højeste kvalitet) er faste par af disse to priser. Routere, der bruger vægtning, fortsætter med at fungere.
2b. Vælg ræsonneringsniveau
Hvis du ikke har sendt et ræsonneringsniveau, vælger routeren et til den model, den finder, blandt de niveauer, modellens leverandørendepunkt accepterer — aldrig over modellens standard, medmindre routeren tillader det, og aldrig et niveau, hvor tankevirksomheden ikke kan være inden for din max_tokens, hvis et lavere niveau kan. Din routers indstilling for Ræsonnering (Auto / Aldrig / Højst et niveau) sætter grænsen. Se Ræsonnering.
3. Betjen og behold reserverne
Den bedste model betjener forespørgslen. De næste tre beholdes som kæde til automatisk skift.
Genveje
- Scoring-cache. Rangeringer caches per regel og forespørgselsudformning. Ved et hit genbruges den tidligere rangering og dens kæde til automatisk skift.
X-Stav-Route-Reasonstarter medAuto-routed (cached). - Kontinuitetslås. I en agent-løkke vil en forespørgsel, der returnerer værktøjsresultater for kald, som den forrige model foretog — eller som indeholder signeret ræsonnering — blive på den model, hvis den stadig er valgbar. Et skift midt i en løkke ville afbryde processen.
X-Stav-Route-Locknavngiver udløseren (tool_loop,signed_thinking) eller skrivernone.## Filtrering af egenskaber
Et hårdt filter, der anvendes før scoring:
| Du sender | Påkrævet egenskab |
|---|---|
en tools-liste | tool_use |
| en indholdsblok med billeder | vision |
response_format af typen json_schema eller grammar | structured_output |
reasoning_effort / reasoning / thinking andet end none | extended_thinking |
De samme flag findes i stav_capabilities på GET /v1/models. Hvis ingen model er kvalificeret, afvises forespørgslen med angivelse af egenskaben.
Klassifikatoren
På rutede forespørgsler kører Stav først en lille klassifikator over starten af prompten. Den lukker igennem ved fejl: ved timeout eller fejl fortsætter rutningen uden den. Forespørgsler med fastgjorte modeller springer den over.
Dens vigtigste uddata er et kompleksitetsniveau, som bliver til den forventede længde på uddata. Det tal styrer estimaterne for pris og hastighed — uddata-tokens dominerer normalt regningen, så et svar på én linje og et helt dokument kan have forskellige billigste modeller. Uden klassifikatoren falder de forventede uddata tilbage til en multipel af inddata-størrelsen. max_tokens sætter altid et loft over estimatet.
Ræsonnering skalerer estimatet op: low ×2, medium ×4, high ×6, og mere for xhigh og max.
Domæne, følsomhed og sprog registreres i forespørgselsloggen. De ændrer ikke scoren i dag.
Når ingen regler gælder
Hvis auto eller din standard-router ikke finder nogen kvalificeret model, scorer Stav igen på tværs af alle aktive chatmodeller. Minimumsniveauet for suverænitet, kvalitetsbunden og filtrene for egenskaber gælder stadig. Headeren med årsagen lyder:
Auto-routed (fallback - no workspace model policy, scored across N active chat models): <slug>
En router, der ikke er standardrouteren, gør aldrig dette. Hvis selv denne reserve ikke finder noget, afvises forespørgslen med 404 no_eligible_models.
Automatisk skift
På /v1/chat/completions prøver Stav den næste kandidat fra den samme rangerede liste, hvis den valgte model svigter. Listen er bygget ud fra dine regler, så et automatisk skift forlader aldrig listen. Fastgjorte modeller har ingen kæde; deres fejl når dig direkte.
Automatisk skift udløses ved:
- upstream
5xx - upstream
429(leverandørklienten har allerede forsøgt igen og tabt) - Stavs konto bliver afvist af leverandøren
- timeouts ved forbindelse, læsning, skrivning og i kandidatgruppen
- en åben sikkerhedsafbryder (circuit breaker) hos leverandøren
Andre 4xx udløser ikke automatisk skift — en anden model ville fejle på samme måde.
Streaming: automatisk skift sker kun, før den første chunk sendes. Ét tilfælde håndteres for dig: en ræsonneringsmodel, der returnerer en tom stream, erstattes lydløst, fordi intet har nået dig endnu.## Hvad du kan se
Svarheadere:
X-Stav-Request-Id: chatcmpl-8f3a…
X-Stav-Model: mistralai/mistral-small-4-119b-2603
X-Stav-Provider: mistral
X-Stav-Sovereignty-Level: L3
X-Stav-Route-Reason: Picked mistralai/mistral-small-4-119b-2603 for code work with the best score, 78.4; reasoning level none chosen by the router.
X-Stav-Reasoning-Chosen-By: router
X-Stav-Route-Time-Ms: 41.3
X-Stav-Route-Lock: none
X-Stav-Router: @acme/eu-only
response.model er den model, der betjente forespørgslen, ikke den streng, du sendte. Log den.
Den fulde beslutning — kandidater, hvilket filter der fjernede hvad, scorer, klassificering, estimerede tokens — findes på forespørgslen under Dit arbejdsområde → Overvåg → Forespørgselslog. Siden Routere viser også, hvad den rutede trafik ville have kostet på en enkelt frontmodel til katalogpris.
Hvorfor dette valg, i forespørgselsloggen
Åbn en forespørgsel under Dit arbejdsområde → Overvåg → Forespørgselslog og fold Hvorfor den røg herhen ud. Den viser den type arbejde, som routeren læste ud fra forespørgslen (kode, agentisk loop, ekstraktion, …), de behov den ramte (verktøjskald, JSON-uddata, billeder som inddata, …), modellen og endepunktet der betjente, ræsonneringsniveauet og hvem der valgte det, om valget var et udforskende valg, samt de næstbedste kandidater med den kvalitet, forventede pris og forventede tid, de blev scoret på. De samme data findes på GET /api/inference/logs/{request_id}/routing.
Router-eksempler
- Compliance-bane. Et minimumsniveau for suverænitet og en tilladelsesliste over godkendte leverandørjurisdiktioner. Reguleret kode kalder
@acme/regulated. - Pris-bane. Høj vægt på pris, et minimumsniveau for kvalitet, fem kvalificerede modeller. Batch-opgaver kalder
@acme/bulk. - Svartid-bane. Høj vægt på svartid. Autocomplete kalder
@acme/interactive.
Pointen er, at din kode siger @acme/bulk, så det at skifte modeller er en ændring i dit arbejdsområde, ikke en ny release.
Hvornår du skal fastgøre i stedet
-
Genskabelse af en evaluering.
-
En kontrakt navngiver modellen.
-
Du er afhængig af én models præcise uddataformat.## Næste skridt
-
Routing-hints — sessionsidentitet og leverandørfiltre per forespørgsel