Logs when a configuration authored per-provider voice settings but NONE matched the vendor that
actually ran — those settings are dropped, and pre-#3530 that happened with no trace at all: the
value stayed visible in the config and simply never reached a driver. Names the authored keys and
the resolved driver so the fix is readable straight off the log line.
The session still proceeds — an unmatched provider bag is a MISCONFIGURATION, not a fault: the
agnostic voice (or the driver's own default) still applies. It is logged at error level anyway,
matching how this module already reports tolerant-degradation config problems (see
RealtimeClientSessionService.resolveConfiguredModelPreference), because a silently ignored
setting is exactly what nobody noticed for long enough to file the issue.
Shared by BOTH realtime surfaces — the client-direct prepare and BaseAgent's server-bridged
session — so neither path can drift back into silence.
WHY IT LIVES HERE rather than beside MatchProviderVoiceSettings, which it wraps: this
function LOGS, and realtime-coagent-config.ts declares itself deliberately framework-free — no DB,
no metadata provider, no logging imports. Moving it there would breach that constraint; keeping it
here costs BaseAgent an import of this module. The placement is the constraint's consequence, not
an accident. (The alternative — returning a diagnostic string for callers to log — was rejected as
it lets one surface silently choose not to log, which is the failure mode being fixed.)
Logs when a configuration authored per-provider voice settings but NONE matched the vendor that actually ran — those settings are dropped, and pre-#3530 that happened with no trace at all: the value stayed visible in the config and simply never reached a driver. Names the authored keys and the resolved driver so the fix is readable straight off the log line.
The session still proceeds — an unmatched provider bag is a MISCONFIGURATION, not a fault: the agnostic voice (or the driver's own default) still applies. It is logged at error level anyway, matching how this module already reports tolerant-degradation config problems (see RealtimeClientSessionService.resolveConfiguredModelPreference), because a silently ignored setting is exactly what nobody noticed for long enough to file the issue.
Shared by BOTH realtime surfaces — the client-direct prepare and
BaseAgent's server-bridged session — so neither path can drift back into silence.WHY IT LIVES HERE rather than beside MatchProviderVoiceSettings, which it wraps: this function LOGS, and
realtime-coagent-config.tsdeclares itself deliberately framework-free — no DB, no metadata provider, no logging imports. Moving it there would breach that constraint; keeping it here costsBaseAgentan import of this module. The placement is the constraint's consequence, not an accident. (The alternative — returning a diagnostic string for callers to log — was rejected as it lets one surface silently choose not to log, which is the failure mode being fixed.)