Guides

Voice agents

STT → dialog agent → book/reschedule → TTS. agent_id: voice. Stage tags matter: p99 often is STT, not the LLM.

Scenario

P99 blew up and it was the STT stub — not the model. LensAI component labels (model_id for stt / llm / tts) made the difference. RouteIQ failover on LLM timeout kept calls alive.

What Inferix gives you

  • LensAI latency by stage (tag stt / llm / tts as separate model_id)
  • RouteIQ timeout failover (R09) and max cascade 2
  • TraceForge calendar tool graph + transfer_human HITL
  • DriftWatch on booking confirmation quality

Tools & intents

ToolsIntents
stt.transcribe, calendar.availability, calendar.book, calendar.reschedule, crm.update_appointment, tts.synthesizebook_new, reschedule, cancel, confirm, hours_faq, transfer_human

Setup

models:
  - name: owned/stt-fast
    provider: owned
    endpoint: http://stt:8080
    labels: { component: stt }
  - name: owned/general-llm
    provider: owned
    endpoint: http://llm:8080
    labels: { component: llm }
  - name: owned/tts-fast
    provider: owned
    endpoint: http://tts:8080
    labels: { component: tts }

routing:
  max_cascade: 2
  rules:
    - name: voice-faq
      when: { agent: voice, intent: hours_faq }
      model: owned/slm-support
    - name: voice-dialog
      when: { agent: voice }
      model: owned/general-llm
      fallback: provider/strong
      on_timeout_ms: 800

Watch & failures

  • L21 cold start — keep-warm or exclude from SLO
  • L11 provider timeout storms — circuit breaker + failover
  • R20 streaming passthrough — do not buffer full TTS/LLM stream in router
  • T02 tool timeout on calendar.availability — retry with budget

Realtime note

Keep RouteIQ overhead low (routeiq.overhead_ms). Rules stay in-process. See LensAI for stage cost tags (L22).

Flagship wedge: schema drift, adapters, canary.

API healing →