mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 11:20:43 +00:00
fix: log google meet realtime models
This commit is contained in:
@@ -3806,6 +3806,7 @@ describe("google-meet plugin", () => {
|
||||
const provider: RealtimeTranscriptionProviderPlugin = {
|
||||
id: "openai",
|
||||
label: "OpenAI",
|
||||
defaultModel: "gpt-4o-transcribe",
|
||||
autoSelectOrder: 1,
|
||||
resolveConfig: ({ rawConfig }) => rawConfig,
|
||||
isConfigured: () => true,
|
||||
@@ -3882,6 +3883,9 @@ describe("google-meet plugin", () => {
|
||||
spawn: spawnMock,
|
||||
});
|
||||
|
||||
expect(noopLogger.info).toHaveBeenCalledWith(
|
||||
"[google-meet] agent audio bridge starting: transcriptionProvider=openai transcriptionModel=gpt-4o-transcribe tts=telephony audioFormat=pcm16-24khz",
|
||||
);
|
||||
inputStdout.write(Buffer.from([1, 0, 2, 0, 3, 0, 4, 0]));
|
||||
callbacks?.onTranscript?.("Please summarize the launch.");
|
||||
await new Promise((resolve) => setTimeout(resolve, 1100));
|
||||
@@ -3942,6 +3946,7 @@ describe("google-meet plugin", () => {
|
||||
const provider: RealtimeVoiceProviderPlugin = {
|
||||
id: "openai",
|
||||
label: "OpenAI",
|
||||
defaultModel: "gpt-realtime-1.5",
|
||||
autoSelectOrder: 1,
|
||||
resolveConfig: ({ rawConfig }) => rawConfig,
|
||||
isConfigured: () => true,
|
||||
@@ -4023,6 +4028,9 @@ describe("google-meet plugin", () => {
|
||||
spawn: spawnMock,
|
||||
});
|
||||
|
||||
expect(noopLogger.info).toHaveBeenCalledWith(
|
||||
"[google-meet] realtime voice bridge starting: strategy=bidi provider=openai model=gpt-realtime audioFormat=pcm16-24khz",
|
||||
);
|
||||
inputStdout.write(Buffer.from([1, 2, 3]));
|
||||
callbacks?.onAudio(Buffer.from([4, 5]));
|
||||
callbacks?.onMark?.("mark-1");
|
||||
@@ -4154,6 +4162,7 @@ describe("google-meet plugin", () => {
|
||||
const provider: RealtimeVoiceProviderPlugin = {
|
||||
id: "openai",
|
||||
label: "OpenAI",
|
||||
defaultModel: "gpt-realtime-1.5",
|
||||
autoSelectOrder: 1,
|
||||
resolveConfig: ({ rawConfig }) => rawConfig,
|
||||
isConfigured: () => true,
|
||||
@@ -4492,6 +4501,9 @@ describe("google-meet plugin", () => {
|
||||
providers: [provider],
|
||||
});
|
||||
|
||||
expect(noopLogger.info).toHaveBeenCalledWith(
|
||||
"[google-meet] realtime voice bridge starting: strategy=bidi provider=openai model=gpt-realtime audioFormat=pcm16-24khz",
|
||||
);
|
||||
callbacks?.onAudio(Buffer.from([1, 2, 3]));
|
||||
callbacks?.onClearAudio();
|
||||
callbacks?.onReady?.();
|
||||
|
||||
@@ -31,6 +31,8 @@ import {
|
||||
isGoogleMeetLikelyAssistantEchoTranscript,
|
||||
convertGoogleMeetBridgeAudioForStt,
|
||||
convertGoogleMeetTtsAudioForBridge,
|
||||
formatGoogleMeetAgentAudioModelLog,
|
||||
formatGoogleMeetRealtimeVoiceModelLog,
|
||||
type GoogleMeetRealtimeEventEntry,
|
||||
type GoogleMeetRealtimeTranscriptEntry,
|
||||
} from "./realtime.js";
|
||||
@@ -96,6 +98,13 @@ export async function startNodeAgentAudioBridge(params: {
|
||||
fullConfig: params.fullConfig,
|
||||
providers: params.providers,
|
||||
});
|
||||
params.logger.info(
|
||||
formatGoogleMeetAgentAudioModelLog({
|
||||
provider: resolved.provider,
|
||||
providerConfig: resolved.providerConfig,
|
||||
audioFormat: params.config.chrome.audioFormat,
|
||||
}),
|
||||
);
|
||||
const transcript: GoogleMeetRealtimeTranscriptEntry[] = [];
|
||||
let agentConsultActive = false;
|
||||
let pendingAgentQuestion: string | undefined;
|
||||
@@ -390,6 +399,15 @@ export async function startNodeRealtimeAudioBridge(params: {
|
||||
const transcript: GoogleMeetRealtimeTranscriptEntry[] = [];
|
||||
const realtimeEvents: GoogleMeetRealtimeEventEntry[] = [];
|
||||
const strategy = params.config.realtime.strategy;
|
||||
params.logger.info(
|
||||
formatGoogleMeetRealtimeVoiceModelLog({
|
||||
strategy,
|
||||
provider: resolved.provider,
|
||||
providerConfig: resolved.providerConfig,
|
||||
fallbackModel: params.config.realtime.model,
|
||||
audioFormat: params.config.chrome.audioFormat,
|
||||
}),
|
||||
);
|
||||
let agentConsultActive = false;
|
||||
let pendingAgentQuestion: string | undefined;
|
||||
let agentConsultDebounceTimer: ReturnType<typeof setTimeout> | undefined;
|
||||
|
||||
@@ -409,6 +409,70 @@ export function buildGoogleMeetSpeakExactUserMessage(text: string): string {
|
||||
].join("\n");
|
||||
}
|
||||
|
||||
function readLogString(value: unknown): string | undefined {
|
||||
return typeof value === "string" && value.trim() ? value.trim() : undefined;
|
||||
}
|
||||
|
||||
function formatLogValue(value: string | undefined): string {
|
||||
const normalized = value?.replace(/\s+/g, "_").slice(0, 180);
|
||||
return normalized || "unknown";
|
||||
}
|
||||
|
||||
function resolveProviderModelForLog(params: {
|
||||
provider: { defaultModel?: string };
|
||||
providerConfig: RealtimeVoiceProviderConfig | RealtimeTranscriptionProviderConfig;
|
||||
fallbackModel?: string;
|
||||
}): string {
|
||||
return (
|
||||
readLogString(params.providerConfig.model) ??
|
||||
readLogString(params.providerConfig.modelId) ??
|
||||
readLogString(params.fallbackModel) ??
|
||||
readLogString(params.provider.defaultModel) ??
|
||||
"provider-default"
|
||||
);
|
||||
}
|
||||
|
||||
export function formatGoogleMeetRealtimeVoiceModelLog(params: {
|
||||
strategy: string;
|
||||
provider: RealtimeVoiceProviderPlugin;
|
||||
providerConfig: RealtimeVoiceProviderConfig;
|
||||
fallbackModel?: string;
|
||||
audioFormat: GoogleMeetConfig["chrome"]["audioFormat"];
|
||||
}): string {
|
||||
return [
|
||||
`[google-meet] realtime voice bridge starting: strategy=${formatLogValue(params.strategy)}`,
|
||||
`provider=${formatLogValue(params.provider.id)}`,
|
||||
`model=${formatLogValue(
|
||||
resolveProviderModelForLog({
|
||||
provider: params.provider,
|
||||
providerConfig: params.providerConfig,
|
||||
fallbackModel: params.fallbackModel,
|
||||
}),
|
||||
)}`,
|
||||
`audioFormat=${formatLogValue(params.audioFormat)}`,
|
||||
].join(" ");
|
||||
}
|
||||
|
||||
export function formatGoogleMeetAgentAudioModelLog(params: {
|
||||
provider: RealtimeTranscriptionProviderPlugin;
|
||||
providerConfig: RealtimeTranscriptionProviderConfig;
|
||||
audioFormat: GoogleMeetConfig["chrome"]["audioFormat"];
|
||||
}): string {
|
||||
return [
|
||||
`[google-meet] agent audio bridge starting: transcriptionProvider=${formatLogValue(
|
||||
params.provider.id,
|
||||
)}`,
|
||||
`transcriptionModel=${formatLogValue(
|
||||
resolveProviderModelForLog({
|
||||
provider: params.provider,
|
||||
providerConfig: params.providerConfig,
|
||||
}),
|
||||
)}`,
|
||||
"tts=telephony",
|
||||
`audioFormat=${formatLogValue(params.audioFormat)}`,
|
||||
].join(" ");
|
||||
}
|
||||
|
||||
function normalizeGoogleMeetTtsPromptText(text: string | undefined): string | undefined {
|
||||
const trimmed = text?.trim();
|
||||
if (!trimmed) {
|
||||
@@ -464,6 +528,13 @@ export async function startCommandAgentAudioBridge(params: {
|
||||
fullConfig: params.fullConfig,
|
||||
providers: params.providers,
|
||||
});
|
||||
params.logger.info(
|
||||
formatGoogleMeetAgentAudioModelLog({
|
||||
provider: resolved.provider,
|
||||
providerConfig: resolved.providerConfig,
|
||||
audioFormat: params.config.chrome.audioFormat,
|
||||
}),
|
||||
);
|
||||
|
||||
const terminateProcess = (proc: BridgeProcess, signal: NodeJS.Signals = "SIGTERM") => {
|
||||
if (proc.killed && signal !== "SIGKILL") {
|
||||
@@ -956,6 +1027,15 @@ export async function startCommandRealtimeAudioBridge(params: {
|
||||
providers: params.providers,
|
||||
});
|
||||
const strategy = params.config.realtime.strategy;
|
||||
params.logger.info(
|
||||
formatGoogleMeetRealtimeVoiceModelLog({
|
||||
strategy,
|
||||
provider: resolved.provider,
|
||||
providerConfig: resolved.providerConfig,
|
||||
fallbackModel: params.config.realtime.model,
|
||||
audioFormat: params.config.chrome.audioFormat,
|
||||
}),
|
||||
);
|
||||
const transcript: GoogleMeetRealtimeTranscriptEntry[] = [];
|
||||
const realtimeEvents: GoogleMeetRealtimeEventEntry[] = [];
|
||||
let agentConsultActive = false;
|
||||
|
||||
Reference in New Issue
Block a user