How aditya15128/atc-interruptible-trainer works
ATC Voice Simulator is a voice-first training demo centered on interruptible, spoken flight and hotel searches. A pilot connects from the browser, transmits audio over LiveKit, and the agent uses speech recognition, an LLM and cancellable search tools before speaking results with Rime. The browser also exposes push-to-talk, tool status, transcript and provider indicators. The sampled backend shows interruption and tool-cancel messages, but not outbound status/transcript publishing; those UI updates are therefore not wired to an agent edge here. Phraseology retrieval is described in the README but no implementation is evidenced in the sampled runtime.
Main entry points: App.tsx Simulator UI · main.py Agent Entrypoint · PushToTalk.tsx Push To Talk · state.py Conversation State
Components 16
Pilot Client
- Simulator UI
frontend/src/App.tsx - Push To Talk
frontend/src/components/PushToTalk.tsx - Tool Status
frontend/src/components/ToolStatus.tsx - Transcript View
frontend/src/components/Transcript.tsx - Provider Badge
frontend/src/components/ProviderBadge.tsx
Realtime Transport
- LiveKit Room
Agent Runtime
- Agent Entrypoint
agent/main.py - Agent Session
agent/main.py - Conversation State
agent/state.py - Voice Instructions
agent/instructions.py - Search Tools
agent/main.py
Voice Providers
- Deepgram STT
- OpenAI LLM
- Rime TTS
- OpenAI TTS Fallback
Other components
- Pilot
Connections 22
- Pilot → Simulator UI: uses
- Simulator UI → Push To Talk: renders
- Simulator UI → Tool Status: renders
- Simulator UI → Transcript View: renders
- Simulator UI → Provider Badge: renders
- Push To Talk → LiveKit Room: publishes audio
- Push To Talk → Simulator UI: reports interrupts
- Tool Status → Simulator UI: requests cancel
- Simulator UI → LiveKit Room: connects and sends data
- LiveKit Room → Agent Entrypoint: delivers room events
- Agent Entrypoint → LiveKit Room: connects agent
- Agent Entrypoint → Agent Session: starts
- Agent Entrypoint → Conversation State: updates
- Agent Entrypoint → Search Tools: registers tools
- Agent Session → Voice Instructions: uses
- Agent Session → Deepgram STT: transcribes audio
- Agent Session → OpenAI LLM: processes turns
- Agent Session → Rime TTS: synthesizes speech
- Agent Session → OpenAI TTS Fallback: may synthesize speech
- OpenAI LLM → Search Tools: dispatches tool calls
- Search Tools → Conversation State: updates phase
- Agent Entrypoint → Conversation State: records interrupt fence