The explicit MJ: AI Models id, or null/empty for none.
OptionalpreferredVoice: string | nullThe provider-native voice id (e.g. echo), or null/empty for none.
OptionalpreferredAvatarId: string | nullThe avatar that comes with the picked voice (RealtimeVoiceOption.AvatarID), or null/empty for none.
The JSON string, or null when nothing was overridden (keeps the mint identical to default).
Builds the
configOverridesJsonpayload for theStartRealtimeClientSessionmint from what the (authorization-gated) pickers chose — an explicit realtime model preference, a voice, and the avatar that comes with that voice. The envelope ({"realtime":{"modelPreference":"<id>","voice":{"default":{"voice":"<v>"}},"video":{"avatarId":"<a>"}}}) is the pinned server contract, merged into the effective config server-side (highest precedence).The voice is filed PROVIDER-AGNOSTICALLY: the browser has a model id, never a vendor
DriverClass(GetRealtimeModelVoicesdoes not return one), so naming a provider here would be a guess that silently voided the setting for every non-OpenAI vendor. The server files it onto whichever driver it resolves. A picked avatar leaves video to the agent: the server shows it only when the voiced agent's own video setting is on (else the call says why, reasonvideo-off), and only when it names a Video binding on the vendor it resolves. Kept in lockstep with the server-sideBuildRealtimeOverridesJsonin@memberjunction/ai-agentsbyrealtime-convergence-drift.test.ts. See issue #3530.