The tuning values on this page are configured in the in-app App Settings screen
(sidebar footer, sliders icon) and stored in app_settings.jsonc -- not in .env.
A value left in .env is ignored and named once in the startup log; run
chatwalaau settings migrate --write to carry an existing configuration across.
Feature enable-gates and secrets stay in .env.
See Configuration -> Application settings.
Voice & Speech
Voice input (speech-to-text)
The microphone button records audio and transcribes it through
POST /api/transcribe. The transport is auto-selected from the deployment name.
REST path (zero-config)
For classic Whisper-family models:
WHISPER_DEPLOYMENT_NAME=whisper # or whisper-1 / gpt-4o-transcribe / gpt-4o-mini-transcribe
The backend calls POST /audio/transcriptions synchronously and returns the
transcript -- no extra deployments needed.
Realtime path (gpt-realtime-whisper)
gpt-realtime-whisper is transcription-only and runs alongside a voice Realtime
model, so two deployments are required:
WHISPER_DEPLOYMENT_NAME=gpt-realtime-whisper
WHISPER_REALTIME_CONNECTION_DEPLOYMENT=gpt-realtime-mini # cheapest voice model
Transport is chosen by the realtime substring in WHISPER_DEPLOYMENT_NAME;
override with WHISPER_MODEL_KIND=rest|realtime. Optional knobs:
# Empty selects the GA URL; set a preview value only for legacy models
# such as gpt-4o-realtime-preview.
AZURE_OPENAI_REALTIME_API_VERSION=
# Browser webm/Opus is resampled to this PCM rate. Allowed: 16000, 24000.
WHISPER_REALTIME_AUDIO_RATE=24000
The POST /api/transcribe contract is byte-for-byte identical across both
transports, so the SPA is unchanged.
Text-to-speech
On-demand TTS for any message. The speaker button plays audio and the download
button saves an MP3; audio is cached to avoid duplicate calls. Pick the provider
with TTS_PROVIDER (default elevenlabs).
Option A -- ElevenLabs:
TTS_PROVIDER=elevenlabs
ELEVENLABS_API_KEY=your-api-key
TTS_MODEL_ID=eleven_multilingual_v2
TTS_VOICE_ID=your-voice-id
Option B -- Azure OpenAI Realtime voice (e.g. gpt-realtime-2), reusing your
existing AZURE_OPENAI_ENDPOINT and credentials:
TTS_PROVIDER=azure-realtime
TTS_REALTIME_DEPLOYMENT=gpt-realtime-2
TTS_REALTIME_VOICE=alloy
# TTS_REALTIME_AUDIO_RATE=24000
The Azure Realtime lane reads the message text verbatim (it does not converse), matching ElevenLabs behavior.
Live conversation (GPT-Live)
New in v0.169.0. Press the Live conversation button (the sound-wave icon next to
the microphone) to talk with your agent in real time. Live uses GPT-Live
(gpt-live-1 on Azure OpenAI), a full-duplex model: it listens and speaks at the same
time, says "mm-hm" while you talk, stops when you talk over it, and waits while you
think.
What happens during a Live conversation
- Your agent does the work. When you ask for something that needs facts, tools, files or a long answer, GPT-Live hands the task to the agent you selected -- the Built-in agent or one of your Prompt agents -- with that agent's own model, tools, MCP servers and skills.
- You get two answers. A short spoken summary, and the complete answer, with its tool calls, in the chat. Code and tables are never read aloud.
- Everything said is written into the chat as messages marked Live. A reply you talked over is marked (interrupted). When Live ends, keep going in the same chat by typing: the agent sees the whole spoken conversation.
- The message box shows the Live row: your microphone level in teal (Voice Input stays red), the state (Connecting, Live, Working, Muted), the time left, Mute, Send and Stop. Read-aloud (TTS) is paused while Live runs.
- Mute switches your microphone off on your device and tells the service, so no audio leaves your computer while muted.
- You can type during Live. What you type joins the same conversation: it appears in the chat as your message and the assistant is told to answer it. Useful for a name, an address or a URL that is hard to say. Attachments and slash commands are not available while Live runs.
- You can see and stop the work. The row says Working (2) when two tasks are in flight, and each task appears in the chat where its answer will be, with Show progress (collapsed, so a half-written answer does not fill the chat) and Cancel. A cancelled task keeps whatever it had written, and the assistant stops waiting for it.
Where Live is offered
On the full-page chat (desktop and phone), when the selected run-target is the Built-in
agent or a Prompt agent. It is not offered for a Workflow or Harness agent, in the
pop-up or side-panel chat, or in demo mode. The microphone needs a secure page
(https:// or localhost).
Setting it up
-
Deploy
gpt-live-1on an Azure OpenAI resource. -
In App Settings > Model Offering Catalog, add an offering in the Live section: provider
azure-openai, model ref = your deployment name (for examplegpt-live-1). Save. Registering it is what turns Live on -- there is nothing to set in.envand no restart. The offering's endpoint and API-key variable are optional: without them, Live usesAZURE_OPENAI_ENDPOINTand your existing Azure credentials.{"id": "gpt-live-1","provider": "azure-openai","model_ref": "gpt-live-1","operations": ["live"]} -
Optional: in Task model assignments, set Live delegation to the chat model the agent should use for tasks Live hands over. Left on Follow session / default, the selected agent's own model is used.
-
Optional: in App Settings > Speech, pick the Live voice.
At most one Live offering is allowed; it must use the azure-openai provider and cannot
serve any other operation.
| Setting | Where | Default | Meaning |
|---|---|---|---|
| Live offering | App Settings > Model Offering Catalog > Live | none (Live off) | The GPT-Live deployment. Registering it shows the button. |
| Live delegation | App Settings > Model Offering Catalog > Task model assignments | the selected agent's model | The chat model delegated tasks run on. |
| Live voice | App Settings > Speech | marin | alloy, ash, ballad, beacon, bossa, cedar, cinder, coral, delta, echo, gleam, marin, meridian, quartz, ripple, sage, shimmer, stone, tempo, verse, vesper, willow |
| Live session limit (seconds) | App Settings > Speech | 600 | A notice appears one minute before the end. |
| Live silence timeout (seconds) | App Settings > Speech | 60 | Ends Live after this much silence from both sides. |
| Live delegation timeout (seconds) | App Settings > Speech | 120 | Upper bound for one agent task. |
Everything applies to the next Live conversation, without a restart.
Privacy and cost
- Your Azure credentials never leave the server. The server creates, watches and ends every Live conversation; the browser exchanges only audio with the service.
- A Live conversation that nobody is watching any more (a closed tab) is ended after 15 seconds, and stopping the server ends them all.
- Agent tasks started from Live are counted on the
Token Usage Dashboard under the lane
live, and the time you spent talking is on its Live voice view, per day and per chat. Voice time is kept next to the usage records, so it survives deleting the chat; nothing is priced.