From 3bc9e26a239ae6e5d098e6ad722b631325df338a Mon Sep 17 00:00:00 2001 From: Anas Ahmed Date: Wed, 1 Jan 2025 21:36:07 +0200 Subject: [PATCH] Custom realtime model selection --- dist/lib/api.d.ts | 4 +-- dist/lib/api.d.ts.map | 2 +- dist/lib/client.d.ts | 49 +++++++++++++++++++++++++++------- dist/lib/client.d.ts.map | 2 +- dist/lib/conversation.d.ts | 4 +-- dist/lib/conversation.d.ts.map | 2 +- lib/api.js | 3 ++- lib/client.js | 27 ++++++++++++++++--- 8 files changed, 71 insertions(+), 22 deletions(-) diff --git a/dist/lib/api.d.ts b/dist/lib/api.d.ts index 2bea236..4e3c8c3 100644 --- a/dist/lib/api.d.ts +++ b/dist/lib/api.d.ts @@ -31,9 +31,7 @@ export class RealtimeAPI extends RealtimeEventHandler { * @param {{model?: string}} [settings] * @returns {Promise} */ - connect({ model }?: { - model?: string; - }): Promise; + connect(model?: string): Promise; /** * Disconnects from Realtime API server * @param {WebSocket} [ws] diff --git a/dist/lib/api.d.ts.map b/dist/lib/api.d.ts.map index 0a05e14..ec445e6 100644 --- a/dist/lib/api.d.ts.map +++ b/dist/lib/api.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../lib/api.js"],"names":[],"mappings":"AAGA;IACE;;;;OAIG;IACH,sEAHW;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,+BAA+B,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAC,EAiBrG;IAZC,mBAAoD;IACpD,YAAiC;IACjC,eAA4B;IAC5B,eAAoB;IACpB,QAAc;IAUhB;;;OAGG;IACH,eAFa,OAAO,CAInB;IAED;;;;OAIG;IACH,aAHe,GAAG,EAAA,GACL,IAAI,CAehB;IAED;;;;OAIG;IACH,oBAHW;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAC,GACd,OAAO,CAAC,IAAI,CAAC,CAkGzB;IAED;;;;OAIG;IACH,gBAHW,SAAS,GACP,IAAI,CAQhB;IAED;;;;;OAKG;IACH,mBAJW,MAAM,SACN;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,GAClB,IAAI,CAOhB;IAED;;;;;OAKG;IACH,gBAJW,MAAM,cAEJ,IAAI,CAoBhB;CACF;qCA/MoC,oBAAoB"} \ No newline at end of file +{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../lib/api.js"],"names":[],"mappings":"AAGA;IACE;;;;OAIG;IACH,sEAHW;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,+BAA+B,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAC,EAiBrG;IAZC,mBAAoD;IACpD,YAAiC;IACjC,eAA4B;IAC5B,eAAoB;IACpB,QAAc;IAUhB;;;OAGG;IACH,eAFa,OAAO,CAInB;IAED;;;;OAIG;IACH,aAHe,GAAG,EAAA,GACL,IAAI,CAehB;IAED;;;;OAIG;IACH,yBAFa,OAAO,CAAC,IAAI,CAAC,CAmGzB;IAED;;;;OAIG;IACH,gBAHW,SAAS,GACP,IAAI,CAQhB;IAED;;;;;OAKG;IACH,mBAJW,MAAM,SACN;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,GAClB,IAAI,CAOhB;IAED;;;;;OAKG;IACH,gBAJW,MAAM,cAEJ,IAAI,CAoBhB;CACF;qCAhNoC,oBAAoB"} \ No newline at end of file diff --git a/dist/lib/client.d.ts b/dist/lib/client.d.ts index 7ea2201..f07ae72 100644 --- a/dist/lib/client.d.ts +++ b/dist/lib/client.d.ts @@ -153,6 +153,15 @@ * @property {ItemType[]} output * @property {UsageType|null} usage */ +/** + * RealtimeClient Settings + * @typedef {Object} RealtimeClientSettings + * @property {string} [url] - The URL for the realtime client + * @property {string} [apiKey] - The API key + * @property {string} [model] - The model name to use + * @property {boolean} [dangerouslyAllowAPIKeyInBrowser] - Whether to allow API key in browser + * @property {boolean} [debug] - Enable debug mode + */ /** * RealtimeClient Class * @class @@ -160,14 +169,9 @@ export class RealtimeClient extends RealtimeEventHandler { /** * Create a new RealtimeClient instance - * @param {{url?: string, apiKey?: string, dangerouslyAllowAPIKeyInBrowser?: boolean, debug?: boolean}} [settings] + * @param {RealtimeClientSettings} [settings] */ - constructor({ url, apiKey, dangerouslyAllowAPIKeyInBrowser, debug }?: { - url?: string; - apiKey?: string; - dangerouslyAllowAPIKeyInBrowser?: boolean; - debug?: boolean; - }); + constructor({ url, apiKey, model, dangerouslyAllowAPIKeyInBrowser, debug, }?: RealtimeClientSettings); defaultSessionConfig: { modalities: string[]; instructions: string; @@ -181,6 +185,7 @@ export class RealtimeClient extends RealtimeEventHandler { temperature: number; max_response_output_tokens: number; }; + realtimeModel: string; sessionConfig: {}; transcriptionModels: { model: string; @@ -336,8 +341,7 @@ export type SessionResourceType = { model?: string; modalities?: string[]; instructions?: string; - voice?: "alloy"|"ash"|"ballad"|"coral"|"echo"|"sage"|"shimmer"|"verse"; - + voice?: "alloy" | "ash" | "ballad" | "coral" | "echo" | "sage" | "shimmer" | "verse"; input_audio_format?: AudioFormatType; output_audio_format?: AudioFormatType; input_audio_transcription?: AudioTranscriptionType | null; @@ -454,7 +458,32 @@ export type ResponseResourceType = { output: ItemType[]; usage: UsageType | null; }; +/** + * RealtimeClient Settings + */ +export type RealtimeClientSettings = { + /** + * - The URL for the realtime client + */ + url?: string; + /** + * - The API key + */ + apiKey?: string; + /** + * - The model name to use + */ + model?: string; + /** + * - Whether to allow API key in browser + */ + dangerouslyAllowAPIKeyInBrowser?: boolean; + /** + * - Enable debug mode + */ + debug?: boolean; +}; import { RealtimeEventHandler } from './event_handler.js'; import { RealtimeAPI } from './api.js'; import { RealtimeConversation } from './conversation.js'; -//# sourceMappingURL=client.d.ts.map +//# sourceMappingURL=client.d.ts.map \ No newline at end of file diff --git a/dist/lib/client.d.ts.map b/dist/lib/client.d.ts.map index 10e52f3..7f865fc 100644 --- a/dist/lib/client.d.ts.map +++ b/dist/lib/client.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../lib/client.js"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../lib/client.js"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/lib/conversation.d.ts b/dist/lib/conversation.d.ts index ab8b055..0600b41 100644 --- a/dist/lib/conversation.d.ts +++ b/dist/lib/conversation.d.ts @@ -66,7 +66,7 @@ export class RealtimeConversation { 'response.audio.delta': (event: any) => { item: any; delta: { - audio: Int16Array; + audio: Int16Array; }; }; 'response.text.delta': (event: any) => { @@ -82,7 +82,7 @@ export class RealtimeConversation { }; }; }; - queuedInputAudio: Int16Array; + queuedInputAudio: Int16Array; /** * Clears the conversation history and resets to default * @returns {true} diff --git a/dist/lib/conversation.d.ts.map b/dist/lib/conversation.d.ts.map index 59243ad..89b14a0 100644 --- a/dist/lib/conversation.d.ts.map +++ b/dist/lib/conversation.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../lib/conversation.js"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH;;;;GAIG;AACH;IACE,yBAA0B;IAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA0NE;IArLQ,6BAA4B;IA+LtC;;;OAGG;IACH,SAFa,IAAI,CAWhB;IARC,eAAoB;IACpB,aAAe;IACf,mBAAwB;IACxB,iBAAmB;IACnB,sBAA2B;IAC3B,0BAA+B;IAKjC;;;;OAIG;IACH,4BAHW,UAAU,GACR,UAAU,CAKtB;IAED;;;;;OAKG;IACH,kCAHe,GAAG,EAAA,GACL,IAAI,CAkBhB;IAED;;;;OAIG;IACH,YAHW,MAAM,GACJ,OAAO,aAAa,EAAE,QAAQ,CAI1C;IAED;;;OAGG;IACH,YAFa,OAAO,aAAa,EAAE,QAAQ,EAAE,CAI5C;CACF;;;;;;WAnTa,MAAM;YACN,UAAU;gBACV,MAAM;iBACN,MAAM"} \ No newline at end of file +{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../lib/conversation.js"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH;;;;GAIG;AACH;IACE,yBAA0B;IAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA0NE;IArLQ,8CAA4B;IA+LtC;;;OAGG;IACH,SAFa,IAAI,CAWhB;IARC,eAAoB;IACpB,aAAe;IACf,mBAAwB;IACxB,iBAAmB;IACnB,sBAA2B;IAC3B,0BAA+B;IAKjC;;;;OAIG;IACH,4BAHW,UAAU,GACR,UAAU,CAKtB;IAED;;;;;OAKG;IACH,kCAHe,GAAG,EAAA,GACL,IAAI,CAkBhB;IAED;;;;OAIG;IACH,YAHW,MAAM,GACJ,OAAO,aAAa,EAAE,QAAQ,CAI1C;IAED;;;OAGG;IACH,YAFa,OAAO,aAAa,EAAE,QAAQ,EAAE,CAI5C;CACF;;;;;;WAnTa,MAAM;YACN,UAAU;gBACV,MAAM;iBACN,MAAM"} \ No newline at end of file diff --git a/lib/api.js b/lib/api.js index cc8f904..bce0ce3 100644 --- a/lib/api.js +++ b/lib/api.js @@ -56,13 +56,14 @@ export class RealtimeAPI extends RealtimeEventHandler { * @param {{model?: string}} [settings] * @returns {Promise} */ - async connect({ model } = { model: 'gpt-4o-realtime-preview-2024-10-01' }) { + async connect(model = 'gpt-4o-realtime-preview-2024-10-01') { if (!this.apiKey && this.url === this.defaultUrl) { console.warn(`No apiKey provided for connection to "${this.url}"`); } if (this.isConnected()) { throw new Error(`Already connected`); } + if (globalThis.WebSocket) { /** * Web browser diff --git a/lib/client.js b/lib/client.js index 2c48d7f..0298e3f 100644 --- a/lib/client.js +++ b/lib/client.js @@ -182,6 +182,16 @@ import { RealtimeUtils } from './utils.js'; * @property {UsageType|null} usage */ +/** + * RealtimeClient Settings + * @typedef {Object} RealtimeClientSettings + * @property {string} [url] - The URL for the realtime client + * @property {string} [apiKey] - The API key + * @property {string} [model] - The model name to use + * @property {boolean} [dangerouslyAllowAPIKeyInBrowser] - Whether to allow API key in browser + * @property {boolean} [debug] - Enable debug mode + */ + /** * RealtimeClient Class * @class @@ -189,9 +199,15 @@ import { RealtimeUtils } from './utils.js'; export class RealtimeClient extends RealtimeEventHandler { /** * Create a new RealtimeClient instance - * @param {{url?: string, apiKey?: string, dangerouslyAllowAPIKeyInBrowser?: boolean, debug?: boolean}} [settings] + * @param {RealtimeClientSettings} [settings] */ - constructor({ url, apiKey, dangerouslyAllowAPIKeyInBrowser, debug } = {}) { + constructor({ + url, + apiKey, + model, + dangerouslyAllowAPIKeyInBrowser, + debug, + } = {}) { super(); this.defaultSessionConfig = { modalities: ['text', 'audio'], @@ -206,6 +222,11 @@ export class RealtimeClient extends RealtimeEventHandler { temperature: 0.8, max_response_output_tokens: 4096, }; + if (!model) { + this.realtimeModel = 'gpt-4o-realtime-preview-2024-10-01'; + } else { + this.realtimeModel = model; + } this.sessionConfig = {}; this.transcriptionModels = [ { @@ -393,7 +414,7 @@ export class RealtimeClient extends RealtimeEventHandler { if (this.isConnected()) { throw new Error(`Already connected, use .disconnect() first`); } - await this.realtime.connect(); + await this.realtime.connect(this.realtimeModel); this.updateSession(); return true; }