Products
RouteIQ
Send each call to the right owned model or provider by policy. RouteIQ is the route layer — cheap SLM, general owned, provider hard path, plus cache and budgets.
Capability matrix
| Path | model_id family | When |
|---|---|---|
| Cheap SLM | owned/slm-support, owned/slm-apiheal | Easy / classify intents |
| General owned | owned/general-llm | Default multi-step reasoning |
| Provider hard | provider/* | Ambiguity, risk, capability gap, outage |
| Cache | exact / semantic hit | FAQ and boilerplate; tenant-keyed |
| Deny | budget / policy | Weekly $ exceeded; soft degrade to cache-only |
Tool-aware routing (R19): models that lack tools are denied when tools_required is set. Example: heal tools denied on slm-apiheal-* classify-only revisions.
Decision metrics
routeiq.model.mix— share by model_idrouteiq.cache.hit_rate— exact + semanticrouteiq.escalation.rate— cheap → strongrouteiq.fallback.count,budget.deniesrouteiq.overhead_ms— keep rules in-process (R16)
Policy sketch
routing:
default: owned/general-llm
fallback: provider/strong
max_cascade: 2
rules:
- name: cx-cheap
when: { agent: support, intent: [order_status, hours_faq] }
model: owned/slm-support
cache: { mode: semantic, ttl_s: 600, key: [tenant_id, intent, prompt_hash] }
- name: apiheal-classify
when: { agent: apiheal }
model: owned/slm-apiheal
capabilities: { tools: deny }
- name: risk-hard
when: { risk: high }
model: provider/strong
budgets:
tenants:
acme: { weekly_usd: 500, on_deny: cache_only }
sticky:
mid_task: true # durable agents — avoid flip-flopFull operate guide: Routing policies.
Operator failure modes
| ID | Problem | Next action |
|---|---|---|
| R03 | Semantic false cache hit | Raise threshold; intent gate |
| R06 | Over-escalation burns $ | Tighten rules; cost alert |
| R07 | Under-escalation hurts quality | Force escalate on keywords |
| R11 | Budget deny surprises users | Soft degrade; notify tenant |
| R15 | Cache stampede on expiry | Singleflight; staggered TTL |
| R17 | Stale cache after prompt change | Invalidate on prompt_version |
| R18 | Cache key missing tenant | Composite key always |
| R23 | Cascade A→B→C→D too long | Max 2 hops |
Fits the loop
Route decisions are TraceForge spans and LensAI dimensions. DriftWatch scores by route mix; FineForge can ship route-rule bundles with prompts.
Source
Golden sets, teachers, slice alerts.
DriftWatch →