Voice Reservations

Speech-to-speech agent

Real-Time Voice Reservation Agent

A voice-driven hotel front-desk agent built on Amazon Nova Sonic. You speak to it like a receptionist: it verifies your identity, looks up your reservation in DynamoDB, and modifies it — and you can interrupt it mid-sentence.

0.626sMedian response11 turns
  • Amazon Nova Sonic
  • AWS Bedrock
  • Python asyncio
  • FastAPI
  • Next.js
  • DynamoDB

Why speech-to-speech

Most voice agents chain three models — speech to text, a language model, then text to speech — and pay latency at every hop, typically two to three seconds before the caller hears anything. This one runs a single bidirectional stream: audio in, audio out, with no transcription step in the middle.

One core, two transports

A terminal client on a local microphone, and a browser client over WebSockets with a live transcript and a sanitized tool-call trace. The core never imports an audio library — it exposes exactly two seams, audio in and audio out, which is why a second transport could be added without touching agent logic.

Demo

A full conversation: identity check, reservation lookup, a date change read back before anything is written, and an interruption mid-sentence.

How it works

A real-time voice agent for hotel front-desk operations.

Speech to speech

Amazon Nova Sonic over a bidirectional stream — audio in, audio out, with no transcribe-then-generate step in between. That is why replies begin in roughly 0.6s rather than the 2–3s a chained STT → LLM → TTS pipeline takes.

Verification enforced in code

The spoken date of birth is compared in Python, and the model only receives a boolean. Reservation tools refuse to run until it passes. Earlier, when the check lived in the system prompt, the model confirmed a wrong date of birth and a guest who did not exist.

Two-phase writes

Changes are proposed and read back before anything is saved. The commit call requires the proposal's id, so the read-back cannot be skipped — the model has no id to commit with until it has proposed.

Interruptible

Speech output is paced to real time so queued audio stays server-side and can be discarded the moment the guest speaks. Optional local voice detection cuts playback without waiting for a network round trip.

Median response
0.626s
Tool execution
77–182ms
Audio in / out
16kHz / 24kHz