




















@@ -1,4 +1,4 @@
1-import { beforeEach, describe, expect, it, vi } from "vitest";
1+import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
22import { buildOpenAIRealtimeTranscriptionProvider } from "./realtime-transcription-provider.js";
3344const { FakeWebSocket, providerAuthMocks, ssrfMocks } = vi.hoisted(() => {
@@ -99,6 +99,11 @@ describe("buildOpenAIRealtimeTranscriptionProvider", () => {
9999providerAuthMocks.isProviderAuthProfileConfigured.mockReset();
100100providerAuthMocks.resolveProviderAuthProfileApiKey.mockReset();
101101ssrfMocks.fetchWithSsrFGuard.mockReset();
102+vi.stubEnv("OPENAI_API_KEY", "");
103+});
104+105+afterEach(() => {
106+vi.unstubAllEnvs();
102107});
103108104109it("normalizes OpenAI config defaults", () => {
@@ -238,10 +243,15 @@ describe("buildOpenAIRealtimeTranscriptionProvider", () => {
238243239244expect(release).toHaveBeenCalled();
240245expect(parseSent(socket)[0]).toMatchObject({
241-type: "transcription_session.update",
246+type: "session.update",
242247session: {
243-input_audio_format: "g711_ulaw",
244-input_audio_transcription: { model: "gpt-4o-transcribe" },
248+type: "transcription",
249+audio: {
250+input: {
251+format: { type: "audio/pcmu" },
252+transcription: { model: "gpt-4o-transcribe" },
253+},
254+},
245255},
246256});
247257session.close();
@@ -270,19 +280,24 @@ describe("buildOpenAIRealtimeTranscriptionProvider", () => {
270280expect(session.isConnected()).toBe(false);
271281expect(parseSent(socket)).toEqual([
272282{
273-type: "transcription_session.update",
283+type: "session.update",
274284session: {
275-input_audio_format: "g711_ulaw",
276-input_audio_transcription: {
277-model: "gpt-4o-transcribe",
278-language: "en",
279-prompt: "expect OpenClaw product names",
280-},
281-turn_detection: {
282-type: "server_vad",
283-threshold: 0.45,
284-prefix_padding_ms: 300,
285-silence_duration_ms: 900,
285+type: "transcription",
286+audio: {
287+input: {
288+format: { type: "audio/pcmu" },
289+transcription: {
290+model: "gpt-4o-transcribe",
291+language: "en",
292+prompt: "expect OpenClaw product names",
293+},
294+turn_detection: {
295+type: "server_vad",
296+threshold: 0.45,
297+prefix_padding_ms: 300,
298+silence_duration_ms: 900,
299+},
300+},
286301},
287302},
288303},
@@ -294,19 +309,24 @@ describe("buildOpenAIRealtimeTranscriptionProvider", () => {
294309expect(session.isConnected()).toBe(true);
295310expect(parseSent(socket)).toEqual([
296311{
297-type: "transcription_session.update",
312+type: "session.update",
298313session: {
299-input_audio_format: "g711_ulaw",
300-input_audio_transcription: {
301-model: "gpt-4o-transcribe",
302-language: "en",
303-prompt: "expect OpenClaw product names",
304-},
305-turn_detection: {
306-type: "server_vad",
307-threshold: 0.45,
308-prefix_padding_ms: 300,
309-silence_duration_ms: 900,
314+type: "transcription",
315+audio: {
316+input: {
317+format: { type: "audio/pcmu" },
318+transcription: {
319+model: "gpt-4o-transcribe",
320+language: "en",
321+prompt: "expect OpenClaw product names",
322+},
323+turn_detection: {
324+type: "server_vad",
325+threshold: 0.45,
326+prefix_padding_ms: 300,
327+silence_duration_ms: 900,
328+},
329+},
310330},
311331},
312332},
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。