Rocky_Mountain_Vending/livekit-agent
2026-04-06 13:45:46 -06:00
..
README.md deploy: publish unpublished site updates 2026-04-06 13:45:46 -06:00
worker.ts deploy: publish unpublished site updates 2026-04-06 13:45:46 -06:00

LiveKit Voice Assistant

This worker runs the Rocky Mountain Vending site voice assistant with LiveKit Agents and xAI realtime voice.

Local development

  1. Start the Next.js app: pnpm dev
  2. Start the LiveKit agent worker in a second terminal: pnpm voice-agent:dev
  3. Open the site and launch the voice bubble.
  4. Run the automated regressions: pnpm voice-assistant:test:local
  5. Run the fake-microphone voice regression: pnpm voice-assistant:test:local:voice

Environment

The worker loads environment variables from:

  • .env.local
  • .env.voice-agent.local (optional override file)

Required variables:

  • LIVEKIT_URL
  • LIVEKIT_API_KEY
  • LIVEKIT_API_SECRET
  • XAI_API_KEY
  • XAI_REALTIME_MODEL=grok-4-1-fast-non-reasoning

Recommended variable:

  • VOICE_ASSISTANT_SITE_URL

Production

Run the worker as a separate long-lived Node process:

pnpm voice-agent:start

Point VOICE_ASSISTANT_SITE_URL at the deployed Next.js app so the worker can reuse /api/contact and /api/request-machine.

Verification

Automated checks:

  • pnpm voice-assistant:test:local
  • pnpm voice-assistant:test:local:voice
  • pnpm voice-assistant:test:live

Manual spoken smoke checklist:

  1. Open the homepage and launch the assistant bubble.
  2. Press Start assistant and confirm the panel reaches Text Ready or Listening.
  3. Confirm the text box is enabled before microphone access is granted.
  4. Press Enable microphone and verify the browser permission prompt appears.
  5. After granting permission, say a short question such as "What cities in Utah do you serve?"
  6. Confirm you see a user transcript, then an assistant reply transcript.
  7. Confirm spoken audio playback is audible after Enable spoken replies when the browser requires it.
  8. Refresh the page and verify reconnect still works.
  9. Open /sign-in and confirm the assistant stays hidden there.