diff --git a/packages/agents-extensions/src/TwilioRealtimeTransport.ts b/packages/agents-extensions/src/TwilioRealtimeTransport.ts index 8f0208ba..798a3a72 100644 --- a/packages/agents-extensions/src/TwilioRealtimeTransport.ts +++ b/packages/agents-extensions/src/TwilioRealtimeTransport.ts @@ -176,6 +176,11 @@ export class TwilioRealtimeTransportLayer extends OpenAIRealtimeWebSocket { await super.connect(options); } + updateSessionConfig(config: Partial): void { + const newConfig = this._setInputAndOutputAudioFormat(config); + super.updateSessionConfig(newConfig); + } + _interrupt(_elapsedTime: number) { const elapsedTime = this.#lastPlayedChunkCount + 50; /* 50ms buffer */ this.#logger.debug( diff --git a/packages/agents-extensions/test/TwilioRealtimeTransport.test.ts b/packages/agents-extensions/test/TwilioRealtimeTransport.test.ts index ece0c194..f6e74f66 100644 --- a/packages/agents-extensions/test/TwilioRealtimeTransport.test.ts +++ b/packages/agents-extensions/test/TwilioRealtimeTransport.test.ts @@ -26,6 +26,7 @@ vi.mock('@openai/agents/realtime', () => { FakeOpenAIRealtimeWebSocket.prototype.sendAudio = vi.fn(); FakeOpenAIRealtimeWebSocket.prototype.close = vi.fn(); FakeOpenAIRealtimeWebSocket.prototype._interrupt = vi.fn(); + FakeOpenAIRealtimeWebSocket.prototype.updateSessionConfig = vi.fn(); return { OpenAIRealtimeWebSocket: FakeOpenAIRealtimeWebSocket, utils }; }); @@ -146,4 +147,22 @@ describe('TwilioRealtimeTransportLayer', () => { expect(marks[2].mark.name).toBe('b:1'); expect(audioListener).toHaveBeenCalledTimes(3); }); + + test('updateSessionConfig keeps audio format', async () => { + const twilio = new FakeTwilioWebSocket(); + const transport = new TwilioRealtimeTransportLayer({ + twilioWebSocket: twilio as any, + }); + await transport.connect({ apiKey: 'ek_test' } as any); + const { OpenAIRealtimeWebSocket } = await import('@openai/agents/realtime'); + const spy = vi.mocked( + OpenAIRealtimeWebSocket.prototype.updateSessionConfig, + ); + transport.updateSessionConfig({ instructions: 'hi' }); + expect(spy).toHaveBeenCalledWith({ + instructions: 'hi', + inputAudioFormat: 'g711_ulaw', + outputAudioFormat: 'g711_ulaw', + }); + }); });