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

Pathmodel_id familyWhen
Cheap SLMowned/slm-support, owned/slm-apihealEasy / classify intents
General ownedowned/general-llmDefault multi-step reasoning
Provider hardprovider/*Ambiguity, risk, capability gap, outage
Cacheexact / semantic hitFAQ and boilerplate; tenant-keyed
Denybudget / policyWeekly $ 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_id
  • routeiq.cache.hit_rate — exact + semantic
  • routeiq.escalation.rate — cheap → strong
  • routeiq.fallback.count, budget.denies
  • routeiq.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-flop

Full operate guide: Routing policies.

Operator failure modes

IDProblemNext action
R03Semantic false cache hitRaise threshold; intent gate
R06Over-escalation burns $Tighten rules; cost alert
R07Under-escalation hurts qualityForce escalate on keywords
R11Budget deny surprises usersSoft degrade; notify tenant
R15Cache stampede on expirySingleflight; staggered TTL
R17Stale cache after prompt changeInvalidate on prompt_version
R18Cache key missing tenantComposite key always
R23Cascade A→B→C→D too longMax 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

https://github.com/AkshantVats/routeiq

Golden sets, teachers, slice alerts.

DriftWatch →