From 36bcbab821952335650e7b1a430b6be5ca59fe19 Mon Sep 17 00:00:00 2001 From: Nikhil Pandey Date: Sun, 10 Nov 2024 14:47:39 -0500 Subject: [PATCH] Fix for azure openai --- lib/api.js | 50 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/lib/api.js b/lib/api.js index cc8f904..9f202a5 100644 --- a/lib/api.js +++ b/lib/api.js @@ -73,11 +73,20 @@ export class RealtimeAPI extends RealtimeEventHandler { ); } const WebSocket = globalThis.WebSocket; - const ws = new WebSocket(`${this.url}${model ? `?model=${model}` : ''}`, [ - 'realtime', - `openai-insecure-api-key.${this.apiKey}`, - 'openai-beta.realtime-v1', - ]); + let ws; + if (this.url === this.defaultUrl) { + ws = new WebSocket(`${this.url}${model ? `?model=${model}` : ''}`, [ + 'realtime', + `openai-insecure-api-key.${this.apiKey}`, + 'openai-beta.realtime-v1', + ]); + } else { + const url = new URL(this.url); + if (!url.searchParams.get('api-key')) { + url.searchParams.set('api-key', this.apiKey); + } + ws = new WebSocket(url.toString()); + } ws.addEventListener('message', (event) => { const message = JSON.parse(event.data); this.receive(message.type, message); @@ -112,18 +121,27 @@ export class RealtimeAPI extends RealtimeEventHandler { const moduleName = 'ws'; const wsModule = await import(/* webpackIgnore: true */ moduleName); const WebSocket = wsModule.default; - const ws = new WebSocket( - 'wss://api.openai.com/v1/realtime?model=gpt-4o-realtime-preview-2024-10-01', - [], - { - finishRequest: (request) => { - // Auth - request.setHeader('Authorization', `Bearer ${this.apiKey}`); - request.setHeader('OpenAI-Beta', 'realtime=v1'); - request.end(); + let ws; + if (this.url === this.defaultUrl) { + ws = new WebSocket( + 'wss://api.openai.com/v1/realtime?model=gpt-4o-realtime-preview-2024-10-01', + [], + { + finishRequest: (request) => { + // Auth + request.setHeader('Authorization', `Bearer ${this.apiKey}`); + request.setHeader('OpenAI-Beta', 'realtime=v1'); + request.end(); + }, }, - }, - ); + ); + } else { + const url = new URL(this.url); + if (!url.searchParams.get('api-key')) { + url.searchParams.set('api-key', this.apiKey); + } + ws = new WebSocket(url.toString()); + } ws.on('message', (data) => { const message = JSON.parse(data.toString()); this.receive(message.type, message);