v7.3.0

sampotts/plyrv7.3.0Jul 3, 2026by github-actions[bot]

AI Summary

Introduces per-agent voice configuration, allowing multiple agents to share a provider but have distinct voices. It includes observable logging and safe fallback mechanisms.

Key Highlights

  • Per-agent voice selection with provider-aware pickers (OpenAI, Google, Deepgram).
  • Safe by default behavior with fallback to provider default.
  • Observable end-to-end logging (voice source tracking).
  • Instant application of changes without engine restart.

New Features

  • Provider-aware voice picker in Agent form
  • Voice catalog validation
  • Call history voice tracking
  • YAML context support for headless installs

Full Release Notes

**Voice now belongs to agents.** Configure one provider, create multiple agents that share it โ€” each with its own voice.

## โœจ Highlights

### ๐ŸŽ™๏ธ Per-agent voice selection
- **Provider-aware voice picker** in the Agent form: dropdowns of validated catalogs for OpenAI Realtime (10 GA voices), Google Live (30 prebuilt voices), and Deepgram Voice Agent (Aura models) โ€” plus suggestions with custom cloned-voice IDs for xAI Grok. ElevenLabs Agent voices remain managed on the ElevenLabs platform; pipeline TTS voices are unchanged (per-agent pipeline voice is planned).
- **Safe by default.** The provider-level voice becomes the *Default Voice* โ€” every agent without its own voice behaves exactly as before this release. Unrecognized values (including stale text from the old informational field) log a warning and fall back to the provider default โ€” **a bad voice value never fails a call**.
- **Observable end-to-end.** Every call logs the resolved voice and its source (`override` / `agent` / `provider-default`), and Call History shows it per call โ€” e.g. "Voice: marin (from agent)" โ€” so you can always verify what a call actually used.
- **Instant.** Agent voice changes apply on the next call โ€” no engine restart.

### ๐Ÿงฐ Under the hood
- Single-source voice catalog (`src/utils/voice_catalog.py`) shared by the engine's validation, the new `GET /api/config/providers/meta` endpoint, and the Agent form โ€” verified complete against official OpenAI / xAI / Google / Deepgram documentation.
- Call History gains `voice` / `voice_source` (additive, nullable โ€” no migration steps).
- Optional `voice:` key on YAML contexts for headless installs, with identical semantics.

## โฌ†๏ธ Upgrading

Standard upgrade โ€” no migration steps, no config changes required. Existing agents have no voice set and keep using their provider's voice.

```bash
git fetch --tags && git checkout v7.3.0
docker compose build admin_ui && docker compose up -d
```

Or use the Admin UI's Updates page.

**Docs:** [Voice Selection guide](https://github.com/hkjarral/AVA-AI-Voice-Agent-for-Asterisk/blob/main/docs/VOICE_SELECTION.md) ยท [validation matrix](https://github.com/hkjarral/AVA-AI-Voice-Agent-for-Asterisk/blob/main/docs/baselines/golden/v7.3.0-validation-matrix.md) (7 live PSTN calls, including the per-agent override validated by ear)

Thanks to **@foytech**, whose PR #497 seeded this feature and whose production testing shaped it โ€” co-authored on the core commits.