internal-base.mjs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { EventEmitter } from "../../lib/EventEmitter.mjs";
  2. import { OpenAIError } from "../../error.mjs";
  3. import { AzureOpenAI } from "../../index.mjs";
  4. export class OpenAIRealtimeError extends OpenAIError {
  5. constructor(message, event) {
  6. super(message);
  7. this.error = event?.error;
  8. this.event_id = event?.event_id;
  9. }
  10. }
  11. export class OpenAIRealtimeEmitter extends EventEmitter {
  12. _onError(event, message, cause) {
  13. message =
  14. event?.error ?
  15. `${event.error.message} code=${event.error.code} param=${event.error.param} type=${event.error.type} event_id=${event.error.event_id}`
  16. : message ?? 'unknown error';
  17. if (!this._hasListener('error')) {
  18. const error = new OpenAIRealtimeError(message +
  19. `\n\nTo resolve these unhandled rejection errors you should bind an \`error\` callback, e.g. \`rt.on('error', (error) => ...)\` `, event);
  20. // @ts-ignore
  21. error.cause = cause;
  22. Promise.reject(error);
  23. return;
  24. }
  25. const error = new OpenAIRealtimeError(message, event);
  26. // @ts-ignore
  27. error.cause = cause;
  28. this._emit('error', error);
  29. }
  30. }
  31. export function isAzure(client) {
  32. return client instanceof AzureOpenAI;
  33. }
  34. export function buildRealtimeURL(client, model) {
  35. const path = '/realtime';
  36. const baseURL = client.baseURL;
  37. const url = new URL(baseURL + (baseURL.endsWith('/') ? path.slice(1) : path));
  38. url.protocol = 'wss';
  39. if (isAzure(client)) {
  40. url.searchParams.set('api-version', client.apiVersion);
  41. url.searchParams.set('deployment', model);
  42. }
  43. else {
  44. url.searchParams.set('model', model);
  45. }
  46. return url;
  47. }
  48. //# sourceMappingURL=internal-base.mjs.map