# LLM orchestration/extraction plus direct ASR/TTS. OPENAI_API_KEY= OPENAI_MODEL=gpt-4.1-mini OPENAI_ASR_MODEL=whisper-1 OPENAI_TTS_MODEL=tts-1 # Text-model alternatives. The demo tries configured endpoints in order; ASR/TTS # still require a direct audio provider. # MOONSHOT_API_KEY= # MOONSHOT_MODEL=kimi-k3 # ARK_API_KEY= # ARK_MODEL=doubao-seed-1-6-250615 # Optional OpenAI-compatible endpoint for text decisions only. Direct OpenAI is # still required for microphone ASR/TTS. # OPENAI_BASE_URL= # OPENROUTER_API_KEY= # Tune only if the microphone clips speech or waits too long at sentence end. VOICE_SAMPLE_RATE=16000 VOICE_SILENCE_SECONDS=0.9 VOICE_RMS_THRESHOLD=0.012 AUDIO_PLAYER=afplay # WebRTC audio provider. "auto" prefers local say/espeak + Gemini ASR when # available, otherwise OpenAI TTS/ASR. Explicit choices: openai, gemini-system, # local-whisper. For local-whisper, install openai-whisper or point to an existing # environment; the audio and transcript are both ephemeral. WEBRTC_SPEECH_PROVIDER=auto GEMINI_API_KEY= GEMINI_ASR_MODEL=gemini-2.5-flash WHISPER_PYTHON= WHISPER_MODEL=tiny # Optional legacy Twilio transport. TWILIO_WEBHOOK_BASE_URL must point (via an # HTTPS tunnel/reverse proxy) to TWILIO_LOCAL_PORT; WebRTC needs none of these. TWILIO_ACCOUNT_SID= TWILIO_AUTH_TOKEN= TWILIO_FROM_NUMBER= PHONE_USER_NUMBER= TWILIO_WEBHOOK_BASE_URL= TWILIO_LOCAL_PORT=8765 TWILIO_LANGUAGE=zh-CN TWILIO_VOICE=Google.zh-CN-Standard-A