Personas
A persona is a stable spoken identity that can be applied deterministically across providers. It can prefer one provider, define provider-neutral prompt intent, and carry provider-specific bindings for voices, models, prompt templates, seeds, and voice settings.Minimal persona
Full persona (provider-specific shaping)
Persona resolution
The active persona is selected deterministically:/tts persona <id>local preference, if set.tts.persona, if set.- No persona.
- Direct overrides (CLI, gateway, Talk, allowed TTS directives).
/tts provider <id>local preference.- Active persona’s
provider. tts.provider.- Registry auto-select.
tts.providers.<id>tts.personas.<persona>.providers.<id>- Trusted request overrides
- Allowed model-emitted TTS directive overrides
Custom persona shaping
Provider-neutralpersonas.<id>.prompt.* config is retired. Doctor removes
those fields and points to the speech-provider seam. Put built-in provider
settings under personas.<id>.providers.<provider> (for example Google
personaPrompt or OpenAI instructions). For custom shaping, implement a
speech provider plugin with prepareSynthesis(ctx) and return adjusted text,
provider config, or overrides before synthesize() runs. This keeps expressive
prompt construction in provider code where request semantics are known.
Fallback policy
fallbackPolicy controls behavior when a persona has no binding for the
attempted provider:
The whole TTS request only fails when every attempted provider is skipped
or fails.
Talk session provider selection is session-scoped. A Talk client should choose
provider ids, model ids, voice ids, and locales from
talk.catalog and pass
them through the Talk session or handoff request. Opening a voice session should
not mutate tts or global Talk provider defaults.