

























@@ -409,6 +409,70 @@ export function buildGoogleMeetSpeakExactUserMessage(text: string): string {
409409].join("\n");
410410}
411411412+function readLogString(value: unknown): string | undefined {
413+return typeof value === "string" && value.trim() ? value.trim() : undefined;
414+}
415+416+function formatLogValue(value: string | undefined): string {
417+const normalized = value?.replace(/\s+/g, "_").slice(0, 180);
418+return normalized || "unknown";
419+}
420+421+function resolveProviderModelForLog(params: {
422+provider: { defaultModel?: string };
423+providerConfig: RealtimeVoiceProviderConfig | RealtimeTranscriptionProviderConfig;
424+fallbackModel?: string;
425+}): string {
426+return (
427+readLogString(params.providerConfig.model) ??
428+readLogString(params.providerConfig.modelId) ??
429+readLogString(params.fallbackModel) ??
430+readLogString(params.provider.defaultModel) ??
431+"provider-default"
432+);
433+}
434+435+export function formatGoogleMeetRealtimeVoiceModelLog(params: {
436+strategy: string;
437+provider: RealtimeVoiceProviderPlugin;
438+providerConfig: RealtimeVoiceProviderConfig;
439+fallbackModel?: string;
440+audioFormat: GoogleMeetConfig["chrome"]["audioFormat"];
441+}): string {
442+return [
443+`[google-meet] realtime voice bridge starting: strategy=${formatLogValue(params.strategy)}`,
444+`provider=${formatLogValue(params.provider.id)}`,
445+`model=${formatLogValue(
446+ resolveProviderModelForLog({
447+ provider: params.provider,
448+ providerConfig: params.providerConfig,
449+ fallbackModel: params.fallbackModel,
450+ }),
451+ )}`,
452+`audioFormat=${formatLogValue(params.audioFormat)}`,
453+].join(" ");
454+}
455+456+export function formatGoogleMeetAgentAudioModelLog(params: {
457+provider: RealtimeTranscriptionProviderPlugin;
458+providerConfig: RealtimeTranscriptionProviderConfig;
459+audioFormat: GoogleMeetConfig["chrome"]["audioFormat"];
460+}): string {
461+return [
462+`[google-meet] agent audio bridge starting: transcriptionProvider=${formatLogValue(
463+ params.provider.id,
464+ )}`,
465+`transcriptionModel=${formatLogValue(
466+ resolveProviderModelForLog({
467+ provider: params.provider,
468+ providerConfig: params.providerConfig,
469+ }),
470+ )}`,
471+"tts=telephony",
472+`audioFormat=${formatLogValue(params.audioFormat)}`,
473+].join(" ");
474+}
475+412476function normalizeGoogleMeetTtsPromptText(text: string | undefined): string | undefined {
413477const trimmed = text?.trim();
414478if (!trimmed) {
@@ -464,6 +528,13 @@ export async function startCommandAgentAudioBridge(params: {
464528fullConfig: params.fullConfig,
465529providers: params.providers,
466530});
531+params.logger.info(
532+formatGoogleMeetAgentAudioModelLog({
533+provider: resolved.provider,
534+providerConfig: resolved.providerConfig,
535+audioFormat: params.config.chrome.audioFormat,
536+}),
537+);
467538468539const terminateProcess = (proc: BridgeProcess, signal: NodeJS.Signals = "SIGTERM") => {
469540if (proc.killed && signal !== "SIGKILL") {
@@ -956,6 +1027,15 @@ export async function startCommandRealtimeAudioBridge(params: {
9561027providers: params.providers,
9571028});
9581029const strategy = params.config.realtime.strategy;
1030+params.logger.info(
1031+formatGoogleMeetRealtimeVoiceModelLog({
1032+ strategy,
1033+provider: resolved.provider,
1034+providerConfig: resolved.providerConfig,
1035+fallbackModel: params.config.realtime.model,
1036+audioFormat: params.config.chrome.audioFormat,
1037+}),
1038+);
9591039const transcript: GoogleMeetRealtimeTranscriptEntry[] = [];
9601040const realtimeEvents: GoogleMeetRealtimeEventEntry[] = [];
9611041let agentConsultActive = false;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。