openai 4.28.4 → 4.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +7 -10
  3. package/index.d.mts +1 -0
  4. package/index.d.ts +1 -0
  5. package/index.d.ts.map +1 -1
  6. package/index.js.map +1 -1
  7. package/index.mjs.map +1 -1
  8. package/lib/AbstractAssistantStreamRunner.d.ts +74 -0
  9. package/lib/AbstractAssistantStreamRunner.d.ts.map +1 -0
  10. package/lib/AbstractAssistantStreamRunner.js +246 -0
  11. package/lib/AbstractAssistantStreamRunner.js.map +1 -0
  12. package/lib/AbstractAssistantStreamRunner.mjs +242 -0
  13. package/lib/AbstractAssistantStreamRunner.mjs.map +1 -0
  14. package/lib/AssistantStream.d.ts +56 -0
  15. package/lib/AssistantStream.d.ts.map +1 -0
  16. package/lib/AssistantStream.js +526 -0
  17. package/lib/AssistantStream.js.map +1 -0
  18. package/lib/AssistantStream.mjs +499 -0
  19. package/lib/AssistantStream.mjs.map +1 -0
  20. package/lib/ChatCompletionRunFunctions.test.js +35 -0
  21. package/lib/ChatCompletionRunFunctions.test.js.map +1 -1
  22. package/lib/ChatCompletionRunFunctions.test.mjs +35 -0
  23. package/lib/ChatCompletionRunFunctions.test.mjs.map +1 -1
  24. package/lib/ChatCompletionStream.d.ts.map +1 -1
  25. package/lib/ChatCompletionStream.js +21 -3
  26. package/lib/ChatCompletionStream.js.map +1 -1
  27. package/lib/ChatCompletionStream.mjs +21 -3
  28. package/lib/ChatCompletionStream.mjs.map +1 -1
  29. package/package.json +1 -1
  30. package/resources/audio/speech.d.ts +3 -6
  31. package/resources/audio/speech.d.ts.map +1 -1
  32. package/resources/audio/speech.js.map +1 -1
  33. package/resources/audio/speech.mjs.map +1 -1
  34. package/resources/audio/transcriptions.d.ts +14 -4
  35. package/resources/audio/transcriptions.d.ts.map +1 -1
  36. package/resources/audio/transcriptions.js.map +1 -1
  37. package/resources/audio/transcriptions.mjs.map +1 -1
  38. package/resources/audio/translations.d.ts +2 -1
  39. package/resources/audio/translations.d.ts.map +1 -1
  40. package/resources/audio/translations.js.map +1 -1
  41. package/resources/audio/translations.mjs.map +1 -1
  42. package/resources/beta/assistants/assistants.d.ts +629 -60
  43. package/resources/beta/assistants/assistants.d.ts.map +1 -1
  44. package/resources/beta/assistants/assistants.js.map +1 -1
  45. package/resources/beta/assistants/assistants.mjs.map +1 -1
  46. package/resources/beta/assistants/index.d.ts +1 -1
  47. package/resources/beta/assistants/index.d.ts.map +1 -1
  48. package/resources/beta/assistants/index.js.map +1 -1
  49. package/resources/beta/assistants/index.mjs.map +1 -1
  50. package/resources/beta/beta.d.ts +12 -0
  51. package/resources/beta/beta.d.ts.map +1 -1
  52. package/resources/beta/beta.js.map +1 -1
  53. package/resources/beta/beta.mjs.map +1 -1
  54. package/resources/beta/index.d.ts +2 -2
  55. package/resources/beta/index.d.ts.map +1 -1
  56. package/resources/beta/index.js.map +1 -1
  57. package/resources/beta/index.mjs.map +1 -1
  58. package/resources/beta/threads/index.d.ts +3 -3
  59. package/resources/beta/threads/index.d.ts.map +1 -1
  60. package/resources/beta/threads/index.js +2 -2
  61. package/resources/beta/threads/index.js.map +1 -1
  62. package/resources/beta/threads/index.mjs +1 -1
  63. package/resources/beta/threads/index.mjs.map +1 -1
  64. package/resources/beta/threads/messages/index.d.ts +1 -1
  65. package/resources/beta/threads/messages/index.d.ts.map +1 -1
  66. package/resources/beta/threads/messages/index.js +2 -2
  67. package/resources/beta/threads/messages/index.js.map +1 -1
  68. package/resources/beta/threads/messages/index.mjs +1 -1
  69. package/resources/beta/threads/messages/index.mjs.map +1 -1
  70. package/resources/beta/threads/messages/messages.d.ts +289 -86
  71. package/resources/beta/threads/messages/messages.d.ts.map +1 -1
  72. package/resources/beta/threads/messages/messages.js +5 -5
  73. package/resources/beta/threads/messages/messages.js.map +1 -1
  74. package/resources/beta/threads/messages/messages.mjs +3 -3
  75. package/resources/beta/threads/messages/messages.mjs.map +1 -1
  76. package/resources/beta/threads/runs/index.d.ts +2 -2
  77. package/resources/beta/threads/runs/index.d.ts.map +1 -1
  78. package/resources/beta/threads/runs/index.js.map +1 -1
  79. package/resources/beta/threads/runs/index.mjs.map +1 -1
  80. package/resources/beta/threads/runs/runs.d.ts +153 -49
  81. package/resources/beta/threads/runs/runs.d.ts.map +1 -1
  82. package/resources/beta/threads/runs/runs.js +14 -7
  83. package/resources/beta/threads/runs/runs.js.map +1 -1
  84. package/resources/beta/threads/runs/runs.mjs +14 -7
  85. package/resources/beta/threads/runs/runs.mjs.map +1 -1
  86. package/resources/beta/threads/runs/steps.d.ts +219 -5
  87. package/resources/beta/threads/runs/steps.d.ts.map +1 -1
  88. package/resources/beta/threads/runs/steps.js.map +1 -1
  89. package/resources/beta/threads/runs/steps.mjs.map +1 -1
  90. package/resources/beta/threads/threads.d.ts +144 -22
  91. package/resources/beta/threads/threads.d.ts.map +1 -1
  92. package/resources/beta/threads/threads.js +9 -4
  93. package/resources/beta/threads/threads.js.map +1 -1
  94. package/resources/beta/threads/threads.mjs +9 -4
  95. package/resources/beta/threads/threads.mjs.map +1 -1
  96. package/resources/chat/completions.d.ts +28 -18
  97. package/resources/chat/completions.d.ts.map +1 -1
  98. package/resources/chat/completions.js.map +1 -1
  99. package/resources/chat/completions.mjs.map +1 -1
  100. package/resources/completions.d.ts +2 -0
  101. package/resources/completions.d.ts.map +1 -1
  102. package/resources/completions.js.map +1 -1
  103. package/resources/completions.mjs.map +1 -1
  104. package/resources/files.d.ts +4 -4
  105. package/resources/images.d.ts +6 -3
  106. package/resources/images.d.ts.map +1 -1
  107. package/resources/images.js.map +1 -1
  108. package/resources/images.mjs.map +1 -1
  109. package/resources/moderations.d.ts +3 -5
  110. package/resources/moderations.d.ts.map +1 -1
  111. package/resources/moderations.js +1 -1
  112. package/resources/moderations.js.map +1 -1
  113. package/resources/moderations.mjs +1 -1
  114. package/resources/moderations.mjs.map +1 -1
  115. package/resources/shared.d.ts +6 -0
  116. package/resources/shared.d.ts.map +1 -1
  117. package/src/index.ts +1 -0
  118. package/src/lib/AbstractAssistantStreamRunner.ts +340 -0
  119. package/src/lib/AssistantStream.ts +698 -0
  120. package/src/lib/ChatCompletionRunFunctions.test.ts +52 -1
  121. package/src/lib/ChatCompletionStream.ts +29 -6
  122. package/src/resources/audio/speech.ts +3 -6
  123. package/src/resources/audio/transcriptions.ts +14 -4
  124. package/src/resources/audio/translations.ts +2 -1
  125. package/src/resources/beta/assistants/assistants.ts +768 -76
  126. package/src/resources/beta/assistants/index.ts +9 -0
  127. package/src/resources/beta/beta.ts +12 -0
  128. package/src/resources/beta/index.ts +12 -0
  129. package/src/resources/beta/threads/index.ts +30 -5
  130. package/src/resources/beta/threads/messages/index.ts +21 -5
  131. package/src/resources/beta/threads/messages/messages.ts +332 -94
  132. package/src/resources/beta/threads/runs/index.ts +18 -1
  133. package/src/resources/beta/threads/runs/runs.ts +225 -60
  134. package/src/resources/beta/threads/runs/steps.ts +254 -5
  135. package/src/resources/beta/threads/threads.ts +182 -25
  136. package/src/resources/chat/completions.ts +28 -18
  137. package/src/resources/completions.ts +2 -0
  138. package/src/resources/files.ts +4 -4
  139. package/src/resources/images.ts +6 -3
  140. package/src/resources/moderations.ts +3 -5
  141. package/src/resources/shared.ts +10 -0
  142. package/src/streaming.ts +31 -0
  143. package/src/version.ts +1 -1
  144. package/streaming.d.ts +2 -0
  145. package/streaming.d.ts.map +1 -1
  146. package/streaming.js +32 -1
  147. package/streaming.js.map +1 -1
  148. package/streaming.mjs +30 -0
  149. package/streaming.mjs.map +1 -1
  150. package/version.d.ts +1 -1
  151. package/version.js +1 -1
  152. package/version.mjs +1 -1
@@ -1,5 +1,5 @@
1
1
  import OpenAI from 'openai';
2
- import { OpenAIError } from "../error";
2
+ import { OpenAIError, APIConnectionError } from "../error";
3
3
  import { PassThrough } from 'stream';
4
4
  import {
5
5
  ParsingToolFunction,
@@ -2207,6 +2207,7 @@ describe('resource completions', () => {
2207
2207
  await listener.sanityCheck();
2208
2208
  });
2209
2209
  });
2210
+
2210
2211
  describe('stream', () => {
2211
2212
  test('successful flow', async () => {
2212
2213
  const { fetch, handleRequest } = mockStreamingChatCompletionFetch();
@@ -2273,5 +2274,55 @@ describe('resource completions', () => {
2273
2274
  expect(listener.finalMessage).toEqual({ role: 'assistant', content: 'The weather is great today!' });
2274
2275
  await listener.sanityCheck();
2275
2276
  });
2277
+ test('handles network errors', async () => {
2278
+ const { fetch, handleRequest } = mockFetch();
2279
+
2280
+ const openai = new OpenAI({ apiKey: '...', fetch });
2281
+
2282
+ const stream = openai.beta.chat.completions.stream(
2283
+ {
2284
+ max_tokens: 1024,
2285
+ model: 'gpt-3.5-turbo',
2286
+ messages: [{ role: 'user', content: 'Say hello there!' }],
2287
+ },
2288
+ { maxRetries: 0 },
2289
+ );
2290
+
2291
+ handleRequest(async () => {
2292
+ throw new Error('mock request error');
2293
+ }).catch(() => {});
2294
+
2295
+ async function runStream() {
2296
+ await stream.done();
2297
+ }
2298
+
2299
+ await expect(runStream).rejects.toThrow(APIConnectionError);
2300
+ });
2301
+ test('handles network errors on async iterator', async () => {
2302
+ const { fetch, handleRequest } = mockFetch();
2303
+
2304
+ const openai = new OpenAI({ apiKey: '...', fetch });
2305
+
2306
+ const stream = openai.beta.chat.completions.stream(
2307
+ {
2308
+ max_tokens: 1024,
2309
+ model: 'gpt-3.5-turbo',
2310
+ messages: [{ role: 'user', content: 'Say hello there!' }],
2311
+ },
2312
+ { maxRetries: 0 },
2313
+ );
2314
+
2315
+ handleRequest(async () => {
2316
+ throw new Error('mock request error');
2317
+ }).catch(() => {});
2318
+
2319
+ async function runStream() {
2320
+ for await (const _event of stream) {
2321
+ continue;
2322
+ }
2323
+ }
2324
+
2325
+ await expect(runStream).rejects.toThrow(APIConnectionError);
2326
+ });
2276
2327
  });
2277
2328
  });
@@ -210,13 +210,16 @@ export class ChatCompletionStream
210
210
 
211
211
  [Symbol.asyncIterator](): AsyncIterator<ChatCompletionChunk> {
212
212
  const pushQueue: ChatCompletionChunk[] = [];
213
- const readQueue: ((chunk: ChatCompletionChunk | undefined) => void)[] = [];
213
+ const readQueue: {
214
+ resolve: (chunk: ChatCompletionChunk | undefined) => void;
215
+ reject: (err: unknown) => void;
216
+ }[] = [];
214
217
  let done = false;
215
218
 
216
219
  this.on('chunk', (chunk) => {
217
220
  const reader = readQueue.shift();
218
221
  if (reader) {
219
- reader(chunk);
222
+ reader.resolve(chunk);
220
223
  } else {
221
224
  pushQueue.push(chunk);
222
225
  }
@@ -225,7 +228,23 @@ export class ChatCompletionStream
225
228
  this.on('end', () => {
226
229
  done = true;
227
230
  for (const reader of readQueue) {
228
- reader(undefined);
231
+ reader.resolve(undefined);
232
+ }
233
+ readQueue.length = 0;
234
+ });
235
+
236
+ this.on('abort', (err) => {
237
+ done = true;
238
+ for (const reader of readQueue) {
239
+ reader.reject(err);
240
+ }
241
+ readQueue.length = 0;
242
+ });
243
+
244
+ this.on('error', (err) => {
245
+ done = true;
246
+ for (const reader of readQueue) {
247
+ reader.reject(err);
229
248
  }
230
249
  readQueue.length = 0;
231
250
  });
@@ -236,13 +255,17 @@ export class ChatCompletionStream
236
255
  if (done) {
237
256
  return { value: undefined, done: true };
238
257
  }
239
- return new Promise<ChatCompletionChunk | undefined>((resolve) => readQueue.push(resolve)).then(
240
- (chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }),
241
- );
258
+ return new Promise<ChatCompletionChunk | undefined>((resolve, reject) =>
259
+ readQueue.push({ resolve, reject }),
260
+ ).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));
242
261
  }
243
262
  const chunk = pushQueue.shift()!;
244
263
  return { value: chunk, done: false };
245
264
  },
265
+ return: async () => {
266
+ this.abort();
267
+ return { value: undefined, done: true };
268
+ },
246
269
  };
247
270
  }
248
271
 
@@ -35,13 +35,10 @@ export interface SpeechCreateParams {
35
35
  voice: 'alloy' | 'echo' | 'fable' | 'onyx' | 'nova' | 'shimmer';
36
36
 
37
37
  /**
38
- * The format to return audio in. Supported formats are `mp3`, `opus`, `aac`,
39
- * `flac`, `pcm`, and `wav`.
40
- *
41
- * The `pcm` audio format, similar to `wav` but without a header, utilizes a 24kHz
42
- * sample rate, mono channel, and 16-bit depth in signed little-endian format.
38
+ * The format to audio in. Supported formats are `mp3`, `opus`, `aac`, `flac`,
39
+ * `wav`, and `pcm`.
43
40
  */
44
- response_format?: 'mp3' | 'opus' | 'aac' | 'flac' | 'pcm' | 'wav';
41
+ response_format?: 'mp3' | 'opus' | 'aac' | 'flac' | 'wav' | 'pcm';
45
42
 
46
43
  /**
47
44
  * The speed of the generated audio. Select a value from `0.25` to `4.0`. `1.0` is
@@ -14,7 +14,14 @@ export class Transcriptions extends APIResource {
14
14
  }
15
15
  }
16
16
 
17
+ /**
18
+ * Represents a transcription response returned by model, based on the provided
19
+ * input.
20
+ */
17
21
  export interface Transcription {
22
+ /**
23
+ * The transcribed text.
24
+ */
18
25
  text: string;
19
26
  }
20
27
 
@@ -26,7 +33,8 @@ export interface TranscriptionCreateParams {
26
33
  file: Uploadable;
27
34
 
28
35
  /**
29
- * ID of the model to use. Only `whisper-1` is currently available.
36
+ * ID of the model to use. Only `whisper-1` (which is powered by our open source
37
+ * Whisper V2 model) is currently available.
30
38
  */
31
39
  model: (string & {}) | 'whisper-1';
32
40
 
@@ -61,9 +69,11 @@ export interface TranscriptionCreateParams {
61
69
  temperature?: number;
62
70
 
63
71
  /**
64
- * The timestamp granularities to populate for this transcription. Any of these
65
- * options: `word`, or `segment`. Note: There is no additional latency for segment
66
- * timestamps, but generating word timestamps incurs additional latency.
72
+ * The timestamp granularities to populate for this transcription.
73
+ * `response_format` must be set `verbose_json` to use timestamp granularities.
74
+ * Either or both of these options are supported: `word`, or `segment`. Note: There
75
+ * is no additional latency for segment timestamps, but generating word timestamps
76
+ * incurs additional latency.
67
77
  */
68
78
  timestamp_granularities?: Array<'word' | 'segment'>;
69
79
  }
@@ -26,7 +26,8 @@ export interface TranslationCreateParams {
26
26
  file: Uploadable;
27
27
 
28
28
  /**
29
- * ID of the model to use. Only `whisper-1` is currently available.
29
+ * ID of the model to use. Only `whisper-1` (which is powered by our open source
30
+ * Whisper V2 model) is currently available.
30
31
  */
31
32
  model: (string & {}) | 'whisper-1';
32
33