openai 6.45.0 → 6.47.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.
- package/CHANGELOG.md +49 -0
- package/README.md +9 -2
- package/client.d.mts +1 -0
- package/client.d.mts.map +1 -1
- package/client.d.ts +1 -0
- package/client.d.ts.map +1 -1
- package/client.js +11 -5
- package/client.js.map +1 -1
- package/client.mjs +11 -5
- package/client.mjs.map +1 -1
- package/core/streaming.d.mts.map +1 -1
- package/core/streaming.d.ts.map +1 -1
- package/core/streaming.js +38 -6
- package/core/streaming.js.map +1 -1
- package/core/streaming.mjs +38 -6
- package/core/streaming.mjs.map +1 -1
- package/core/uploads.d.mts +1 -1
- package/core/uploads.d.mts.map +1 -1
- package/core/uploads.d.ts +1 -1
- package/core/uploads.d.ts.map +1 -1
- package/core/uploads.js +3 -1
- package/core/uploads.js.map +1 -1
- package/core/uploads.mjs +1 -0
- package/core/uploads.mjs.map +1 -1
- package/helpers/audio.d.mts.map +1 -1
- package/helpers/audio.d.ts.map +1 -1
- package/helpers/audio.js +16 -3
- package/helpers/audio.js.map +1 -1
- package/helpers/audio.mjs +17 -4
- package/helpers/audio.mjs.map +1 -1
- package/helpers/zod.d.mts +20 -7
- package/helpers/zod.d.mts.map +1 -1
- package/helpers/zod.d.ts +20 -7
- package/helpers/zod.d.ts.map +1 -1
- package/helpers/zod.js +24 -12
- package/helpers/zod.js.map +1 -1
- package/helpers/zod.mjs +24 -12
- package/helpers/zod.mjs.map +1 -1
- package/index.d.mts +1 -1
- package/index.d.mts.map +1 -1
- package/index.d.ts +1 -1
- package/index.d.ts.map +1 -1
- package/index.js +2 -1
- package/index.js.map +1 -1
- package/index.mjs +1 -1
- package/index.mjs.map +1 -1
- package/internal/uploads.d.mts +26 -1
- package/internal/uploads.d.mts.map +1 -1
- package/internal/uploads.d.ts +26 -1
- package/internal/uploads.d.ts.map +1 -1
- package/internal/uploads.js +169 -1
- package/internal/uploads.js.map +1 -1
- package/internal/uploads.mjs +169 -2
- package/internal/uploads.mjs.map +1 -1
- package/lib/AbstractChatCompletionRunner.d.mts +3 -3
- package/lib/AbstractChatCompletionRunner.d.mts.map +1 -1
- package/lib/AbstractChatCompletionRunner.d.ts +3 -3
- package/lib/AbstractChatCompletionRunner.d.ts.map +1 -1
- package/lib/AbstractChatCompletionRunner.js +18 -3
- package/lib/AbstractChatCompletionRunner.js.map +1 -1
- package/lib/AbstractChatCompletionRunner.mjs +18 -3
- package/lib/AbstractChatCompletionRunner.mjs.map +1 -1
- package/lib/AssistantStream.d.mts.map +1 -1
- package/lib/AssistantStream.d.ts.map +1 -1
- package/lib/AssistantStream.js +4 -3
- package/lib/AssistantStream.js.map +1 -1
- package/lib/AssistantStream.mjs +4 -3
- package/lib/AssistantStream.mjs.map +1 -1
- package/lib/ChatCompletionRunner.d.mts +26 -2
- package/lib/ChatCompletionRunner.d.mts.map +1 -1
- package/lib/ChatCompletionRunner.d.ts +26 -2
- package/lib/ChatCompletionRunner.d.ts.map +1 -1
- package/lib/ChatCompletionRunner.js.map +1 -1
- package/lib/ChatCompletionRunner.mjs.map +1 -1
- package/lib/ChatCompletionStream.d.mts +14 -1
- package/lib/ChatCompletionStream.d.mts.map +1 -1
- package/lib/ChatCompletionStream.d.ts +14 -1
- package/lib/ChatCompletionStream.d.ts.map +1 -1
- package/lib/ChatCompletionStream.js +75 -16
- package/lib/ChatCompletionStream.js.map +1 -1
- package/lib/ChatCompletionStream.mjs +74 -16
- package/lib/ChatCompletionStream.mjs.map +1 -1
- package/lib/ChatCompletionStreamingRunner.d.mts +25 -2
- package/lib/ChatCompletionStreamingRunner.d.mts.map +1 -1
- package/lib/ChatCompletionStreamingRunner.d.ts +25 -2
- package/lib/ChatCompletionStreamingRunner.d.ts.map +1 -1
- package/lib/ChatCompletionStreamingRunner.js +77 -0
- package/lib/ChatCompletionStreamingRunner.js.map +1 -1
- package/lib/ChatCompletionStreamingRunner.mjs +78 -1
- package/lib/ChatCompletionStreamingRunner.mjs.map +1 -1
- package/lib/EventStream.d.mts +13 -0
- package/lib/EventStream.d.mts.map +1 -1
- package/lib/EventStream.d.ts +13 -0
- package/lib/EventStream.d.ts.map +1 -1
- package/lib/EventStream.js +107 -2
- package/lib/EventStream.js.map +1 -1
- package/lib/EventStream.mjs +107 -2
- package/lib/EventStream.mjs.map +1 -1
- package/lib/RunnableFunction.d.mts +38 -21
- package/lib/RunnableFunction.d.mts.map +1 -1
- package/lib/RunnableFunction.d.ts +38 -21
- package/lib/RunnableFunction.d.ts.map +1 -1
- package/lib/RunnableFunction.js.map +1 -1
- package/lib/RunnableFunction.mjs.map +1 -1
- package/lib/parser.d.mts +2 -2
- package/lib/parser.d.mts.map +1 -1
- package/lib/parser.d.ts +2 -2
- package/lib/parser.d.ts.map +1 -1
- package/lib/parser.js.map +1 -1
- package/lib/parser.mjs.map +1 -1
- package/lib/responses/ResponseAccumulator.d.mts +6 -1
- package/lib/responses/ResponseAccumulator.d.mts.map +1 -1
- package/lib/responses/ResponseAccumulator.d.ts +6 -1
- package/lib/responses/ResponseAccumulator.d.ts.map +1 -1
- package/lib/responses/ResponseAccumulator.js +1 -0
- package/lib/responses/ResponseAccumulator.js.map +1 -1
- package/lib/responses/ResponseAccumulator.mjs +1 -0
- package/lib/responses/ResponseAccumulator.mjs.map +1 -1
- package/lib/responses/ResponseInputItems.d.mts.map +1 -1
- package/lib/responses/ResponseInputItems.d.ts.map +1 -1
- package/lib/responses/ResponseInputItems.js +2 -0
- package/lib/responses/ResponseInputItems.js.map +1 -1
- package/lib/responses/ResponseInputItems.mjs +2 -0
- package/lib/responses/ResponseInputItems.mjs.map +1 -1
- package/lib/responses/ResponseStream.d.mts +6 -1
- package/lib/responses/ResponseStream.d.mts.map +1 -1
- package/lib/responses/ResponseStream.d.ts +6 -1
- package/lib/responses/ResponseStream.d.ts.map +1 -1
- package/lib/responses/ResponseStream.js +21 -0
- package/lib/responses/ResponseStream.js.map +1 -1
- package/lib/responses/ResponseStream.mjs +21 -0
- package/lib/responses/ResponseStream.mjs.map +1 -1
- package/package.json +1 -1
- package/resources/admin/organization/projects/api-keys.d.mts +12 -0
- package/resources/admin/organization/projects/api-keys.d.mts.map +1 -1
- package/resources/admin/organization/projects/api-keys.d.ts +12 -0
- package/resources/admin/organization/projects/api-keys.d.ts.map +1 -1
- package/resources/beta/assistants.d.mts +12 -26
- package/resources/beta/assistants.d.mts.map +1 -1
- package/resources/beta/assistants.d.ts +12 -26
- package/resources/beta/assistants.d.ts.map +1 -1
- package/resources/beta/beta.d.mts +6 -1
- package/resources/beta/beta.d.mts.map +1 -1
- package/resources/beta/beta.d.ts +6 -1
- package/resources/beta/beta.d.ts.map +1 -1
- package/resources/beta/beta.js +4 -0
- package/resources/beta/beta.js.map +1 -1
- package/resources/beta/beta.mjs +4 -0
- package/resources/beta/beta.mjs.map +1 -1
- package/resources/beta/index.d.mts +1 -0
- package/resources/beta/index.d.mts.map +1 -1
- package/resources/beta/index.d.ts +1 -0
- package/resources/beta/index.d.ts.map +1 -1
- package/resources/beta/index.js +5 -3
- package/resources/beta/index.js.map +1 -1
- package/resources/beta/index.mjs +1 -0
- package/resources/beta/index.mjs.map +1 -1
- package/resources/beta/responses/index.d.mts +6 -0
- package/resources/beta/responses/index.d.mts.map +1 -0
- package/resources/beta/responses/index.d.ts +6 -0
- package/resources/beta/responses/index.d.ts.map +1 -0
- package/resources/beta/responses/index.js +11 -0
- package/resources/beta/responses/index.js.map +1 -0
- package/resources/beta/responses/index.mjs +5 -0
- package/resources/beta/responses/index.mjs.map +1 -0
- package/resources/beta/responses/input-items.d.mts +69 -0
- package/resources/beta/responses/input-items.d.mts.map +1 -0
- package/resources/beta/responses/input-items.d.ts +69 -0
- package/resources/beta/responses/input-items.d.ts.map +1 -0
- package/resources/beta/responses/input-items.js +37 -0
- package/resources/beta/responses/input-items.js.map +1 -0
- package/resources/beta/responses/input-items.mjs +33 -0
- package/resources/beta/responses/input-items.mjs.map +1 -0
- package/resources/beta/responses/input-tokens.d.mts +191 -0
- package/resources/beta/responses/input-tokens.d.mts.map +1 -0
- package/resources/beta/responses/input-tokens.d.ts +191 -0
- package/resources/beta/responses/input-tokens.d.ts.map +1 -0
- package/resources/beta/responses/input-tokens.js +34 -0
- package/resources/beta/responses/input-tokens.js.map +1 -0
- package/resources/beta/responses/input-tokens.mjs +30 -0
- package/resources/beta/responses/input-tokens.mjs.map +1 -0
- package/resources/beta/responses/internal-base.d.mts +71 -0
- package/resources/beta/responses/internal-base.d.mts.map +1 -0
- package/resources/beta/responses/internal-base.d.ts +71 -0
- package/resources/beta/responses/internal-base.d.ts.map +1 -0
- package/resources/beta/responses/internal-base.js +48 -0
- package/resources/beta/responses/internal-base.js.map +1 -0
- package/resources/beta/responses/internal-base.mjs +42 -0
- package/resources/beta/responses/internal-base.mjs.map +1 -0
- package/resources/beta/responses/responses.d.mts +9986 -0
- package/resources/beta/responses/responses.d.mts.map +1 -0
- package/resources/beta/responses/responses.d.ts +9986 -0
- package/resources/beta/responses/responses.d.ts.map +1 -0
- package/resources/beta/responses/responses.js +121 -0
- package/resources/beta/responses/responses.js.map +1 -0
- package/resources/beta/responses/responses.mjs +116 -0
- package/resources/beta/responses/responses.mjs.map +1 -0
- package/resources/beta/responses/ws-base.d.mts +106 -0
- package/resources/beta/responses/ws-base.d.mts.map +1 -0
- package/resources/beta/responses/ws-base.d.ts +106 -0
- package/resources/beta/responses/ws-base.d.ts.map +1 -0
- package/resources/beta/responses/ws-base.js +476 -0
- package/resources/beta/responses/ws-base.js.map +1 -0
- package/resources/beta/responses/ws-base.mjs +472 -0
- package/resources/beta/responses/ws-base.mjs.map +1 -0
- package/resources/beta/responses/ws.d.mts +13 -0
- package/resources/beta/responses/ws.d.mts.map +1 -0
- package/resources/beta/responses/ws.d.ts +13 -0
- package/resources/beta/responses/ws.d.ts.map +1 -0
- package/resources/beta/responses/ws.js +31 -0
- package/resources/beta/responses/ws.js.map +1 -0
- package/resources/beta/responses/ws.mjs +26 -0
- package/resources/beta/responses/ws.mjs.map +1 -0
- package/resources/beta/responses.d.mts +2 -0
- package/resources/beta/responses.d.mts.map +1 -0
- package/resources/beta/responses.d.ts +2 -0
- package/resources/beta/responses.d.ts.map +1 -0
- package/resources/beta/responses.js +6 -0
- package/resources/beta/responses.js.map +1 -0
- package/resources/beta/responses.mjs +3 -0
- package/resources/beta/responses.mjs.map +1 -0
- package/resources/beta/threads/runs/runs.d.mts +6 -13
- package/resources/beta/threads/runs/runs.d.mts.map +1 -1
- package/resources/beta/threads/runs/runs.d.ts +6 -13
- package/resources/beta/threads/runs/runs.d.ts.map +1 -1
- package/resources/beta/threads/runs/runs.js.map +1 -1
- package/resources/beta/threads/runs/runs.mjs.map +1 -1
- package/resources/chat/completions/completions.d.mts +170 -20
- package/resources/chat/completions/completions.d.mts.map +1 -1
- package/resources/chat/completions/completions.d.ts +170 -20
- package/resources/chat/completions/completions.d.ts.map +1 -1
- package/resources/chat/completions/completions.js.map +1 -1
- package/resources/chat/completions/completions.mjs.map +1 -1
- package/resources/completions.d.mts +4 -0
- package/resources/completions.d.mts.map +1 -1
- package/resources/completions.d.ts +4 -0
- package/resources/completions.d.ts.map +1 -1
- package/resources/conversations/conversations.d.mts +19 -0
- package/resources/conversations/conversations.d.mts.map +1 -1
- package/resources/conversations/conversations.d.ts +19 -0
- package/resources/conversations/conversations.d.ts.map +1 -1
- package/resources/conversations/conversations.js.map +1 -1
- package/resources/conversations/conversations.mjs.map +1 -1
- package/resources/conversations/items.d.mts +45 -1
- package/resources/conversations/items.d.mts.map +1 -1
- package/resources/conversations/items.d.ts +45 -1
- package/resources/conversations/items.d.ts.map +1 -1
- package/resources/evals/runs/runs.d.mts +66 -143
- package/resources/evals/runs/runs.d.mts.map +1 -1
- package/resources/evals/runs/runs.d.ts +66 -143
- package/resources/evals/runs/runs.d.ts.map +1 -1
- package/resources/evals/runs/runs.js.map +1 -1
- package/resources/evals/runs/runs.mjs.map +1 -1
- package/resources/graders/grader-models.d.mts +6 -13
- package/resources/graders/grader-models.d.mts.map +1 -1
- package/resources/graders/grader-models.d.ts +6 -13
- package/resources/graders/grader-models.d.ts.map +1 -1
- package/resources/realtime/calls.d.mts +1 -1
- package/resources/realtime/calls.d.mts.map +1 -1
- package/resources/realtime/calls.d.ts +1 -1
- package/resources/realtime/calls.d.ts.map +1 -1
- package/resources/realtime/client-secrets.d.mts +5 -1
- package/resources/realtime/client-secrets.d.mts.map +1 -1
- package/resources/realtime/client-secrets.d.ts +5 -1
- package/resources/realtime/client-secrets.d.ts.map +1 -1
- package/resources/realtime/realtime.d.mts +9 -1
- package/resources/realtime/realtime.d.mts.map +1 -1
- package/resources/realtime/realtime.d.ts +9 -1
- package/resources/realtime/realtime.d.ts.map +1 -1
- package/resources/realtime/realtime.js.map +1 -1
- package/resources/realtime/realtime.mjs.map +1 -1
- package/resources/responses/input-tokens.d.mts +7 -1
- package/resources/responses/input-tokens.d.mts.map +1 -1
- package/resources/responses/input-tokens.d.ts +7 -1
- package/resources/responses/input-tokens.d.ts.map +1 -1
- package/resources/responses/responses.d.mts +819 -26
- package/resources/responses/responses.d.mts.map +1 -1
- package/resources/responses/responses.d.ts +819 -26
- package/resources/responses/responses.d.ts.map +1 -1
- package/resources/responses/responses.js +1 -1
- package/resources/responses/responses.js.map +1 -1
- package/resources/responses/responses.mjs +1 -1
- package/resources/responses/responses.mjs.map +1 -1
- package/resources/shared.d.mts +20 -28
- package/resources/shared.d.mts.map +1 -1
- package/resources/shared.d.ts +20 -28
- package/resources/shared.d.ts.map +1 -1
- package/src/client.ts +13 -5
- package/src/core/streaming.ts +36 -8
- package/src/core/uploads.ts +6 -1
- package/src/helpers/audio.ts +18 -4
- package/src/helpers/zod.ts +62 -23
- package/src/index.ts +1 -1
- package/src/internal/uploads.ts +214 -4
- package/src/lib/AbstractChatCompletionRunner.ts +32 -9
- package/src/lib/AssistantStream.ts +4 -3
- package/src/lib/ChatCompletionRunner.ts +46 -6
- package/src/lib/ChatCompletionStream.ts +115 -17
- package/src/lib/ChatCompletionStreamingRunner.ts +144 -7
- package/src/lib/EventStream.ts +114 -4
- package/src/lib/RunnableFunction.ts +60 -31
- package/src/lib/parser.ts +4 -0
- package/src/lib/responses/ResponseAccumulator.ts +10 -1
- package/src/lib/responses/ResponseInputItems.ts +2 -0
- package/src/lib/responses/ResponseStream.ts +29 -1
- package/src/resources/admin/organization/projects/api-keys.ts +15 -1
- package/src/resources/beta/assistants.ts +12 -26
- package/src/resources/beta/beta.ts +330 -2
- package/src/resources/beta/index.ts +163 -0
- package/src/resources/beta/responses/index.ts +169 -0
- package/src/resources/beta/responses/input-items.ts +105 -0
- package/src/resources/beta/responses/input-tokens.ts +245 -0
- package/src/resources/beta/responses/internal-base.ts +117 -0
- package/src/resources/beta/responses/responses.ts +12633 -0
- package/src/resources/beta/responses/ws-base.ts +615 -0
- package/src/resources/beta/responses/ws.ts +38 -0
- package/src/resources/beta/responses.ts +3 -0
- package/src/resources/beta/threads/runs/runs.ts +6 -13
- package/src/resources/chat/completions/completions.ts +237 -23
- package/src/resources/completions.ts +5 -0
- package/src/resources/conversations/conversations.ts +21 -0
- package/src/resources/conversations/items.ts +56 -0
- package/src/resources/evals/runs/runs.ts +66 -143
- package/src/resources/graders/grader-models.ts +6 -13
- package/src/resources/realtime/calls.ts +2 -0
- package/src/resources/realtime/client-secrets.ts +7 -0
- package/src/resources/realtime/realtime.ts +12 -0
- package/src/resources/responses/input-tokens.ts +8 -0
- package/src/resources/responses/responses.ts +953 -17
- package/src/resources/shared.ts +23 -27
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
|
@@ -1,26 +1,63 @@
|
|
|
1
1
|
import {
|
|
2
2
|
type ChatCompletionChunk,
|
|
3
3
|
type ChatCompletionCreateParamsStreaming,
|
|
4
|
+
type ChatCompletionMessageParam,
|
|
4
5
|
} from '../resources/chat/completions';
|
|
5
6
|
import { RunnerOptions, type AbstractChatCompletionRunnerEvents } from './AbstractChatCompletionRunner';
|
|
6
7
|
import { type ReadableStream } from '../internal/shim-types';
|
|
7
8
|
import { RunnableTools, type BaseFunctionsArgs } from './RunnableFunction';
|
|
8
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
type ChatCompletionReadableStreamItem,
|
|
11
|
+
ChatCompletionSnapshot,
|
|
12
|
+
ChatCompletionStream,
|
|
13
|
+
makeChatCompletionReadableStreamMessageChunk,
|
|
14
|
+
} from './ChatCompletionStream';
|
|
15
|
+
import { OpenAIError } from '../error';
|
|
9
16
|
import OpenAI from '../index';
|
|
10
17
|
import { AutoParseableTool } from '../lib/parser';
|
|
18
|
+
import { Stream } from '../streaming';
|
|
19
|
+
import { isAssistantMessage, isToolMessage } from './chatCompletionUtils';
|
|
11
20
|
|
|
12
21
|
export interface ChatCompletionStreamEvents extends AbstractChatCompletionRunnerEvents {
|
|
13
22
|
content: (contentDelta: string, contentSnapshot: string) => void;
|
|
14
23
|
chunk: (chunk: ChatCompletionChunk, snapshot: ChatCompletionSnapshot) => void;
|
|
15
24
|
}
|
|
16
25
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
26
|
+
type ChatCompletionStreamingToolRunnerParamsBase = Omit<ChatCompletionCreateParamsStreaming, 'tools'>;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Parameters for tools that do not require a context value.
|
|
30
|
+
*/
|
|
31
|
+
export type ChatCompletionStreamingToolRunnerParamsWithoutContext<FunctionsArgs extends BaseFunctionsArgs> =
|
|
32
|
+
ChatCompletionStreamingToolRunnerParamsBase & {
|
|
33
|
+
tools: RunnableTools<FunctionsArgs> | AutoParseableTool<any, true>[];
|
|
34
|
+
toolContext?: never;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Parameters for tools that require a context value.
|
|
39
|
+
*/
|
|
40
|
+
export type ChatCompletionStreamingToolRunnerParamsWithContext<
|
|
41
|
+
FunctionsArgs extends BaseFunctionsArgs,
|
|
42
|
+
ToolContext,
|
|
43
|
+
> = ChatCompletionStreamingToolRunnerParamsBase & {
|
|
44
|
+
tools: RunnableTools<FunctionsArgs, ToolContext> | AutoParseableTool<any, true>[];
|
|
45
|
+
/**
|
|
46
|
+
* Context to pass to each tool callback during this run.
|
|
47
|
+
*/
|
|
48
|
+
toolContext: ToolContext;
|
|
22
49
|
};
|
|
23
50
|
|
|
51
|
+
/**
|
|
52
|
+
* Parameters for running streaming tools. Supplying a context type makes
|
|
53
|
+
* `toolContext` required; omitting it preserves the existing no-context form.
|
|
54
|
+
*/
|
|
55
|
+
export type ChatCompletionStreamingToolRunnerParams<
|
|
56
|
+
FunctionsArgs extends BaseFunctionsArgs,
|
|
57
|
+
ToolContext = never,
|
|
58
|
+
> = [ToolContext] extends [never] ? ChatCompletionStreamingToolRunnerParamsWithoutContext<FunctionsArgs>
|
|
59
|
+
: ChatCompletionStreamingToolRunnerParamsWithContext<FunctionsArgs, ToolContext>;
|
|
60
|
+
|
|
24
61
|
export class ChatCompletionStreamingRunner<ParsedT = null>
|
|
25
62
|
extends ChatCompletionStream<ParsedT>
|
|
26
63
|
implements AsyncIterable<ChatCompletionChunk>
|
|
@@ -31,9 +68,109 @@ export class ChatCompletionStreamingRunner<ParsedT = null>
|
|
|
31
68
|
return runner;
|
|
32
69
|
}
|
|
33
70
|
|
|
71
|
+
override toReadableStream(): ReadableStream {
|
|
72
|
+
const pushQueue: ChatCompletionReadableStreamItem[] = [];
|
|
73
|
+
const readQueue: {
|
|
74
|
+
resolve: (event: ChatCompletionReadableStreamItem | undefined) => void;
|
|
75
|
+
reject: (err: unknown) => void;
|
|
76
|
+
}[] = [];
|
|
77
|
+
let done = false;
|
|
78
|
+
let lastChunk: ChatCompletionChunk | undefined;
|
|
79
|
+
let toolCallIds: string[] | undefined;
|
|
80
|
+
|
|
81
|
+
const pushEvent = (event: ChatCompletionReadableStreamItem) => {
|
|
82
|
+
const reader = readQueue.shift();
|
|
83
|
+
if (reader) {
|
|
84
|
+
reader.resolve(event);
|
|
85
|
+
} else {
|
|
86
|
+
pushQueue.push(event);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
this.on('chunk', (chunk) => {
|
|
91
|
+
lastChunk = chunk;
|
|
92
|
+
pushEvent(chunk);
|
|
93
|
+
});
|
|
94
|
+
this.on('message', (message: ChatCompletionMessageParam) => {
|
|
95
|
+
if (isAssistantMessage(message)) {
|
|
96
|
+
toolCallIds = message.tool_calls?.map((toolCall) => toolCall.id);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (isToolMessage(message)) {
|
|
101
|
+
if (!lastChunk) {
|
|
102
|
+
throw new OpenAIError('cannot serialize a tool message before receiving any chunks');
|
|
103
|
+
}
|
|
104
|
+
pushEvent(makeChatCompletionReadableStreamMessageChunk(lastChunk, message, toolCallIds));
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
this.on('end', () => {
|
|
109
|
+
done = true;
|
|
110
|
+
for (const reader of readQueue) {
|
|
111
|
+
reader.resolve(undefined);
|
|
112
|
+
}
|
|
113
|
+
readQueue.length = 0;
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
this.on('abort', (err) => {
|
|
117
|
+
done = true;
|
|
118
|
+
for (const reader of readQueue) {
|
|
119
|
+
reader.reject(err);
|
|
120
|
+
}
|
|
121
|
+
readQueue.length = 0;
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
this.on('error', (err) => {
|
|
125
|
+
done = true;
|
|
126
|
+
for (const reader of readQueue) {
|
|
127
|
+
reader.reject(err);
|
|
128
|
+
}
|
|
129
|
+
readQueue.length = 0;
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
const iterator = (): AsyncIterator<ChatCompletionReadableStreamItem> => ({
|
|
133
|
+
next: async (): Promise<IteratorResult<ChatCompletionReadableStreamItem>> => {
|
|
134
|
+
if (!pushQueue.length) {
|
|
135
|
+
if (done) {
|
|
136
|
+
return { value: undefined, done: true };
|
|
137
|
+
}
|
|
138
|
+
return new Promise<ChatCompletionReadableStreamItem | undefined>((resolve, reject) =>
|
|
139
|
+
readQueue.push({ resolve, reject }),
|
|
140
|
+
).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));
|
|
141
|
+
}
|
|
142
|
+
const event = pushQueue.shift();
|
|
143
|
+
if (!event) {
|
|
144
|
+
return { value: undefined, done: true };
|
|
145
|
+
}
|
|
146
|
+
return { value: event, done: false };
|
|
147
|
+
},
|
|
148
|
+
return: async () => {
|
|
149
|
+
this.abort();
|
|
150
|
+
return { value: undefined, done: true };
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
const stream = new Stream(iterator, this.controller);
|
|
155
|
+
return stream.toReadableStream();
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
static runTools<T extends (string | object)[], ParsedT = null, ToolContext = unknown>(
|
|
159
|
+
client: OpenAI,
|
|
160
|
+
params: ChatCompletionStreamingToolRunnerParamsWithContext<T, ToolContext>,
|
|
161
|
+
options?: RunnerOptions,
|
|
162
|
+
): ChatCompletionStreamingRunner<ParsedT>;
|
|
163
|
+
|
|
34
164
|
static runTools<T extends (string | object)[], ParsedT = null>(
|
|
35
165
|
client: OpenAI,
|
|
36
|
-
params:
|
|
166
|
+
params: ChatCompletionStreamingToolRunnerParamsWithoutContext<T>,
|
|
167
|
+
options?: RunnerOptions,
|
|
168
|
+
): ChatCompletionStreamingRunner<ParsedT>;
|
|
169
|
+
static runTools<T extends (string | object)[], ParsedT = null, ToolContext = unknown>(
|
|
170
|
+
client: OpenAI,
|
|
171
|
+
params:
|
|
172
|
+
| ChatCompletionStreamingToolRunnerParamsWithContext<T, ToolContext>
|
|
173
|
+
| ChatCompletionStreamingToolRunnerParamsWithoutContext<T>,
|
|
37
174
|
options?: RunnerOptions,
|
|
38
175
|
): ChatCompletionStreamingRunner<ParsedT> {
|
|
39
176
|
const runner = new ChatCompletionStreamingRunner<ParsedT>(
|
package/src/lib/EventStream.ts
CHANGED
|
@@ -44,10 +44,17 @@ export class EventStream<EventTypes extends BaseEvents> {
|
|
|
44
44
|
// Unfortunately if we call `executor()` immediately we get runtime errors about
|
|
45
45
|
// references to `this` before the `super()` constructor call returns.
|
|
46
46
|
setTimeout(() => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
Promise.resolve()
|
|
48
|
+
.then(executor)
|
|
49
|
+
.then(() => {
|
|
50
|
+
try {
|
|
51
|
+
this._emitFinal();
|
|
52
|
+
} catch (error) {
|
|
53
|
+
this.#handleError(error);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
this._emit('end');
|
|
57
|
+
}, this.#handleError.bind(this));
|
|
51
58
|
}, 0);
|
|
52
59
|
}
|
|
53
60
|
|
|
@@ -157,6 +164,109 @@ export class EventStream<EventTypes extends BaseEvents> {
|
|
|
157
164
|
});
|
|
158
165
|
}
|
|
159
166
|
|
|
167
|
+
/**
|
|
168
|
+
* Returns an async iterator that yields every time the event is triggered.
|
|
169
|
+
* The iterator ends when the stream ends and rejects if the stream errors
|
|
170
|
+
* or is aborted. If you request the 'error' or 'abort' event, the iterator
|
|
171
|
+
* yields that event instead of rejecting.
|
|
172
|
+
*
|
|
173
|
+
* Example:
|
|
174
|
+
*
|
|
175
|
+
* for await (const [message] of stream.events('message')) {
|
|
176
|
+
* await processMessage(message);
|
|
177
|
+
* }
|
|
178
|
+
*/
|
|
179
|
+
events<Event extends keyof EventTypes>(
|
|
180
|
+
event: Event,
|
|
181
|
+
): AsyncIterableIterator<EventParameters<EventTypes, Event>> {
|
|
182
|
+
type Parameters = EventParameters<EventTypes, Event>;
|
|
183
|
+
type Result = IteratorResult<Parameters>;
|
|
184
|
+
type Reader = {
|
|
185
|
+
resolve: (result: Result) => void;
|
|
186
|
+
reject: (error: OpenAIError) => void;
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
const pushQueue: Parameters[] = [];
|
|
190
|
+
const readQueue: Reader[] = [];
|
|
191
|
+
let ended = this.ended;
|
|
192
|
+
let failure: OpenAIError | undefined;
|
|
193
|
+
let failureDelivered = false;
|
|
194
|
+
|
|
195
|
+
const doneResult = (): Result => ({ value: undefined as never, done: true });
|
|
196
|
+
const finishReaders = () => {
|
|
197
|
+
while (readQueue.length) {
|
|
198
|
+
readQueue.shift()!.resolve(doneResult());
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
const rejectReader = () => {
|
|
202
|
+
if (!failure || failureDelivered || !readQueue.length) return;
|
|
203
|
+
failureDelivered = true;
|
|
204
|
+
readQueue.shift()!.reject(failure);
|
|
205
|
+
};
|
|
206
|
+
const cleanup = () => {
|
|
207
|
+
this.off(event, onEvent as EventListener<EventTypes, Event>);
|
|
208
|
+
this.off('end', onEnd);
|
|
209
|
+
if (event !== 'error') this.off('error', onFailure);
|
|
210
|
+
if (event !== 'abort') this.off('abort', onFailure);
|
|
211
|
+
};
|
|
212
|
+
const onEvent = (...args: Parameters) => {
|
|
213
|
+
if (ended) return;
|
|
214
|
+
const reader = readQueue.shift();
|
|
215
|
+
if (reader) {
|
|
216
|
+
reader.resolve({ value: args, done: false });
|
|
217
|
+
} else {
|
|
218
|
+
pushQueue.push(args);
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
const onFailure = (error: OpenAIError) => {
|
|
222
|
+
failure = error;
|
|
223
|
+
if (!pushQueue.length) rejectReader();
|
|
224
|
+
};
|
|
225
|
+
const onEnd = () => {
|
|
226
|
+
ended = true;
|
|
227
|
+
cleanup();
|
|
228
|
+
if (!pushQueue.length) {
|
|
229
|
+
rejectReader();
|
|
230
|
+
finishReaders();
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
if (!ended) {
|
|
235
|
+
this.on(event, onEvent as EventListener<EventTypes, Event>);
|
|
236
|
+
this.on('end', onEnd);
|
|
237
|
+
if (event !== 'error') this.on('error', onFailure);
|
|
238
|
+
if (event !== 'abort') this.on('abort', onFailure);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
return {
|
|
242
|
+
next: () => {
|
|
243
|
+
const value = pushQueue.shift();
|
|
244
|
+
if (value) return Promise.resolve({ value, done: false });
|
|
245
|
+
|
|
246
|
+
if (failure && !failureDelivered) {
|
|
247
|
+
failureDelivered = true;
|
|
248
|
+
return Promise.reject(failure);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
if (ended) return Promise.resolve(doneResult());
|
|
252
|
+
|
|
253
|
+
return new Promise<Result>((resolve, reject) => {
|
|
254
|
+
readQueue.push({ resolve, reject });
|
|
255
|
+
});
|
|
256
|
+
},
|
|
257
|
+
return: () => {
|
|
258
|
+
ended = true;
|
|
259
|
+
pushQueue.length = 0;
|
|
260
|
+
cleanup();
|
|
261
|
+
finishReaders();
|
|
262
|
+
return Promise.resolve(doneResult());
|
|
263
|
+
},
|
|
264
|
+
[Symbol.asyncIterator]() {
|
|
265
|
+
return this;
|
|
266
|
+
},
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
|
|
160
270
|
async done(): Promise<void> {
|
|
161
271
|
this.#catchingPromiseCreated = true;
|
|
162
272
|
await this.#endPromise;
|
|
@@ -4,15 +4,17 @@ import { JSONSchema } from './jsonschema';
|
|
|
4
4
|
|
|
5
5
|
type PromiseOrValue<T> = T | Promise<T>;
|
|
6
6
|
|
|
7
|
-
export type RunnableFunctionWithParse<Args extends object> = {
|
|
7
|
+
export type RunnableFunctionWithParse<Args extends object, ToolContext = unknown> = {
|
|
8
8
|
/**
|
|
9
9
|
* @param args the return value from `parse`.
|
|
10
10
|
* @param runner the runner evaluating this callback.
|
|
11
|
+
* @param toolContext the context passed to `.runTools()`.
|
|
11
12
|
* @returns a string to send back to OpenAI.
|
|
12
13
|
*/
|
|
13
14
|
function: (
|
|
14
15
|
args: Args,
|
|
15
16
|
runner: ChatCompletionRunner<unknown> | ChatCompletionStreamingRunner<unknown>,
|
|
17
|
+
toolContext: ToolContext,
|
|
16
18
|
) => PromiseOrValue<unknown>;
|
|
17
19
|
/**
|
|
18
20
|
* @param input the raw args from the OpenAI function call.
|
|
@@ -34,14 +36,17 @@ export type RunnableFunctionWithParse<Args extends object> = {
|
|
|
34
36
|
strict?: boolean | undefined;
|
|
35
37
|
};
|
|
36
38
|
|
|
37
|
-
export type RunnableFunctionWithoutParse = {
|
|
39
|
+
export type RunnableFunctionWithoutParse<ToolContext = unknown> = {
|
|
38
40
|
/**
|
|
39
41
|
* @param args the raw args from the OpenAI function call.
|
|
42
|
+
* @param runner the runner evaluating this callback.
|
|
43
|
+
* @param toolContext the context passed to `.runTools()`.
|
|
40
44
|
* @returns a string to send back to OpenAI
|
|
41
45
|
*/
|
|
42
46
|
function: (
|
|
43
47
|
args: string,
|
|
44
48
|
runner: ChatCompletionRunner<unknown> | ChatCompletionStreamingRunner<unknown>,
|
|
49
|
+
toolContext: ToolContext,
|
|
45
50
|
) => PromiseOrValue<unknown>;
|
|
46
51
|
/**
|
|
47
52
|
* The parameters the function accepts, describes as a JSON Schema object.
|
|
@@ -58,56 +63,80 @@ export type RunnableFunctionWithoutParse = {
|
|
|
58
63
|
strict?: boolean | undefined;
|
|
59
64
|
};
|
|
60
65
|
|
|
61
|
-
export type RunnableFunction<Args extends object | string> =
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
66
|
+
export type RunnableFunction<Args extends object | string, ToolContext = unknown> = Args extends string ?
|
|
67
|
+
RunnableFunctionWithoutParse<ToolContext>
|
|
68
|
+
: Args extends object ? RunnableFunctionWithParse<Args, ToolContext>
|
|
69
|
+
: never;
|
|
65
70
|
|
|
66
|
-
export type RunnableToolFunction<Args extends object | string> =
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
71
|
+
export type RunnableToolFunction<Args extends object | string, ToolContext = unknown> = Args extends string ?
|
|
72
|
+
RunnableToolFunctionWithoutParse<ToolContext>
|
|
73
|
+
: Args extends object ? RunnableToolFunctionWithParse<Args, ToolContext>
|
|
74
|
+
: never;
|
|
70
75
|
|
|
71
|
-
export type RunnableToolFunctionWithoutParse = {
|
|
76
|
+
export type RunnableToolFunctionWithoutParse<ToolContext = unknown> = {
|
|
77
|
+
type: 'function';
|
|
78
|
+
function: RunnableFunctionWithoutParse<ToolContext>;
|
|
79
|
+
};
|
|
80
|
+
export type RunnableToolFunctionWithParse<Args extends object, ToolContext = unknown> = {
|
|
72
81
|
type: 'function';
|
|
73
|
-
function:
|
|
82
|
+
function: RunnableFunctionWithParse<Args, ToolContext>;
|
|
74
83
|
};
|
|
75
|
-
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* A broad tool shape for contextually typing callbacks when the argument type is inferred.
|
|
87
|
+
*/
|
|
88
|
+
export type RunnableToolFunctionWithContext<ToolContext> = {
|
|
76
89
|
type: 'function';
|
|
77
|
-
function:
|
|
90
|
+
function: {
|
|
91
|
+
function: (
|
|
92
|
+
args: any,
|
|
93
|
+
runner: ChatCompletionRunner<unknown> | ChatCompletionStreamingRunner<unknown>,
|
|
94
|
+
toolContext: ToolContext,
|
|
95
|
+
) => PromiseOrValue<unknown>;
|
|
96
|
+
parse?: (input: string) => PromiseOrValue<any>;
|
|
97
|
+
parameters: JSONSchema;
|
|
98
|
+
description: string;
|
|
99
|
+
name?: string | undefined;
|
|
100
|
+
strict?: boolean | undefined;
|
|
101
|
+
};
|
|
78
102
|
};
|
|
79
103
|
|
|
80
|
-
export function isRunnableFunctionWithParse<Args extends object>(
|
|
104
|
+
export function isRunnableFunctionWithParse<Args extends object, ToolContext = unknown>(
|
|
81
105
|
fn: any,
|
|
82
|
-
): fn is RunnableFunctionWithParse<Args> {
|
|
106
|
+
): fn is RunnableFunctionWithParse<Args, ToolContext> {
|
|
83
107
|
return typeof (fn as any).parse === 'function';
|
|
84
108
|
}
|
|
85
109
|
|
|
86
110
|
export type BaseFunctionsArgs = readonly (object | string)[];
|
|
87
111
|
|
|
88
|
-
export type RunnableFunctions<FunctionsArgs extends BaseFunctionsArgs> =
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
112
|
+
export type RunnableFunctions<FunctionsArgs extends BaseFunctionsArgs, ToolContext = unknown> = [
|
|
113
|
+
any[],
|
|
114
|
+
] extends [FunctionsArgs] ?
|
|
115
|
+
readonly RunnableFunction<any, ToolContext>[]
|
|
116
|
+
: {
|
|
117
|
+
[Index in keyof FunctionsArgs]: Index extends number ? RunnableFunction<FunctionsArgs[Index], ToolContext>
|
|
118
|
+
: FunctionsArgs[Index];
|
|
119
|
+
};
|
|
94
120
|
|
|
95
|
-
export type RunnableTools<FunctionsArgs extends BaseFunctionsArgs> =
|
|
96
|
-
[
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
121
|
+
export type RunnableTools<FunctionsArgs extends BaseFunctionsArgs, ToolContext = unknown> = [any[]] extends (
|
|
122
|
+
[FunctionsArgs]
|
|
123
|
+
) ?
|
|
124
|
+
readonly RunnableToolFunction<any, ToolContext>[]
|
|
125
|
+
: {
|
|
126
|
+
[Index in keyof FunctionsArgs]: Index extends number ?
|
|
127
|
+
RunnableToolFunction<FunctionsArgs[Index], ToolContext>
|
|
128
|
+
: FunctionsArgs[Index];
|
|
129
|
+
};
|
|
101
130
|
|
|
102
131
|
/**
|
|
103
132
|
* This is helper class for passing a `function` and `parse` where the `function`
|
|
104
133
|
* argument type matches the `parse` return type.
|
|
105
134
|
*/
|
|
106
|
-
export class ParsingToolFunction<Args extends object> {
|
|
135
|
+
export class ParsingToolFunction<Args extends object, ToolContext = unknown> {
|
|
107
136
|
type: 'function';
|
|
108
|
-
function: RunnableFunctionWithParse<Args>;
|
|
137
|
+
function: RunnableFunctionWithParse<Args, ToolContext>;
|
|
109
138
|
|
|
110
|
-
constructor(input: RunnableFunctionWithParse<Args>) {
|
|
139
|
+
constructor(input: RunnableFunctionWithParse<Args, ToolContext>) {
|
|
111
140
|
this.type = 'function';
|
|
112
141
|
this.function = input;
|
|
113
142
|
}
|
package/src/lib/parser.ts
CHANGED
|
@@ -7,8 +7,10 @@ import {
|
|
|
7
7
|
ChatCompletionMessage,
|
|
8
8
|
ChatCompletionMessageFunctionToolCall,
|
|
9
9
|
ChatCompletionStreamingToolRunnerParams,
|
|
10
|
+
ChatCompletionStreamingToolRunnerParamsWithContext,
|
|
10
11
|
ChatCompletionStreamParams,
|
|
11
12
|
ChatCompletionToolRunnerParams,
|
|
13
|
+
ChatCompletionToolRunnerParamsWithContext,
|
|
12
14
|
ParsedChatCompletion,
|
|
13
15
|
ParsedChoice,
|
|
14
16
|
ParsedFunctionToolCall,
|
|
@@ -19,7 +21,9 @@ import { ResponseFormatJSONSchema } from '../resources/shared';
|
|
|
19
21
|
type AnyChatCompletionCreateParams =
|
|
20
22
|
| ChatCompletionCreateParams
|
|
21
23
|
| ChatCompletionToolRunnerParams<any>
|
|
24
|
+
| ChatCompletionToolRunnerParamsWithContext<any, any>
|
|
22
25
|
| ChatCompletionStreamingToolRunnerParams<any>
|
|
26
|
+
| ChatCompletionStreamingToolRunnerParamsWithContext<any, any>
|
|
23
27
|
| ChatCompletionStreamParams;
|
|
24
28
|
|
|
25
29
|
type Unpacked<T> = T extends (infer U)[] ? U : T;
|
|
@@ -6,6 +6,11 @@ import {
|
|
|
6
6
|
import { OpenAIError } from '../../error';
|
|
7
7
|
import { addOutputText } from '../ResponsesParser';
|
|
8
8
|
|
|
9
|
+
type ResponseKeepAliveEvent = {
|
|
10
|
+
type: 'keepalive';
|
|
11
|
+
sequence_number: number;
|
|
12
|
+
};
|
|
13
|
+
|
|
9
14
|
/**
|
|
10
15
|
* Applies a streaming event to a response snapshot.
|
|
11
16
|
*
|
|
@@ -13,7 +18,10 @@ import { addOutputText } from '../ResponsesParser';
|
|
|
13
18
|
* in place, while response lifecycle events return a detached replacement. Event
|
|
14
19
|
* payloads are cloned, so retaining or replaying the raw events is safe.
|
|
15
20
|
*/
|
|
16
|
-
export function accumulateResponse(
|
|
21
|
+
export function accumulateResponse(
|
|
22
|
+
event: ResponseStreamEvent | ResponseKeepAliveEvent,
|
|
23
|
+
snapshot?: Response,
|
|
24
|
+
): Response {
|
|
17
25
|
if (!snapshot) {
|
|
18
26
|
if (event.type !== 'response.created') {
|
|
19
27
|
throw new OpenAIError(
|
|
@@ -371,6 +379,7 @@ export function accumulateResponse(event: ResponseStreamEvent, snapshot?: Respon
|
|
|
371
379
|
case 'response.mcp_list_tools.in_progress':
|
|
372
380
|
case 'response.mcp_list_tools.completed':
|
|
373
381
|
case 'response.mcp_list_tools.failed':
|
|
382
|
+
case 'keepalive':
|
|
374
383
|
case 'error': {
|
|
375
384
|
// These events do not contain state represented by the Response object.
|
|
376
385
|
break;
|
|
@@ -96,6 +96,8 @@ export function toResponseInputItem(item: ResponseInputItemLike): ResponseInputI
|
|
|
96
96
|
case 'mcp_call':
|
|
97
97
|
case 'mcp_list_tools':
|
|
98
98
|
case 'message':
|
|
99
|
+
case 'program':
|
|
100
|
+
case 'program_output':
|
|
99
101
|
case 'reasoning':
|
|
100
102
|
case 'shell_call':
|
|
101
103
|
case 'tool_search_call':
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
type ResponseStreamEvent,
|
|
8
8
|
} from '../../resources/responses/responses';
|
|
9
9
|
import { RequestOptions } from '../../internal/request-options';
|
|
10
|
+
import { type ReadableStream } from '../../internal/shim-types';
|
|
10
11
|
import { APIUserAbortError, OpenAIError } from '../../error';
|
|
11
12
|
import OpenAI from '../../index';
|
|
12
13
|
import { type BaseEvents, EventStream } from '../EventStream';
|
|
@@ -27,7 +28,9 @@ export type ResponseStreamByIdParams = {
|
|
|
27
28
|
*/
|
|
28
29
|
response_id: string;
|
|
29
30
|
/**
|
|
30
|
-
* If provided,
|
|
31
|
+
* If provided, events with a sequence number less than or equal to this value
|
|
32
|
+
* will not be emitted. The helper still replays them internally to build a
|
|
33
|
+
* complete snapshot for later events and `finalResponse()`.
|
|
31
34
|
*/
|
|
32
35
|
starting_after?: number;
|
|
33
36
|
/**
|
|
@@ -90,6 +93,12 @@ export class ResponseStream<ParsedT = null>
|
|
|
90
93
|
return runner;
|
|
91
94
|
}
|
|
92
95
|
|
|
96
|
+
static fromReadableStream(stream: ReadableStream): ResponseStream<null> {
|
|
97
|
+
const runner = new ResponseStream(null);
|
|
98
|
+
runner._run(() => runner._fromReadableStream(stream));
|
|
99
|
+
return runner;
|
|
100
|
+
}
|
|
101
|
+
|
|
93
102
|
#beginRequest() {
|
|
94
103
|
if (this.ended) return;
|
|
95
104
|
this.#currentResponseSnapshot = undefined;
|
|
@@ -175,6 +184,8 @@ export class ResponseStream<ParsedT = null>
|
|
|
175
184
|
let stream: Stream<ResponseStreamEvent> | undefined;
|
|
176
185
|
let starting_after: number | null = null;
|
|
177
186
|
if ('response_id' in params) {
|
|
187
|
+
// Keep the full replay so that `accumulateResponse()` sees `response.created` and can build
|
|
188
|
+
// complete snapshots before locally filtering events at `starting_after`.
|
|
178
189
|
stream = await client.responses.retrieve(
|
|
179
190
|
params.response_id,
|
|
180
191
|
{ stream: true },
|
|
@@ -198,6 +209,23 @@ export class ResponseStream<ParsedT = null>
|
|
|
198
209
|
return this.#endRequest();
|
|
199
210
|
}
|
|
200
211
|
|
|
212
|
+
protected async _fromReadableStream(
|
|
213
|
+
readableStream: ReadableStream,
|
|
214
|
+
options?: RequestOptions,
|
|
215
|
+
): Promise<ParsedResponse<ParsedT>> {
|
|
216
|
+
this._listenForAbort(options?.signal);
|
|
217
|
+
this.#beginRequest();
|
|
218
|
+
this._connected();
|
|
219
|
+
const stream = Stream.fromReadableStream<ResponseStreamEvent>(readableStream, this.controller);
|
|
220
|
+
for await (const event of stream) {
|
|
221
|
+
this.#addEvent(event, null);
|
|
222
|
+
}
|
|
223
|
+
if (stream.controller.signal?.aborted) {
|
|
224
|
+
throw new APIUserAbortError();
|
|
225
|
+
}
|
|
226
|
+
return this.#endRequest();
|
|
227
|
+
}
|
|
228
|
+
|
|
201
229
|
[Symbol.asyncIterator](this: ResponseStream<ParsedT>): AsyncIterator<ResponseStreamEvent> {
|
|
202
230
|
const pushQueue: ResponseStreamEvent[] = [];
|
|
203
231
|
const readQueue: {
|
|
@@ -121,6 +121,11 @@ export interface ProjectAPIKey {
|
|
|
121
121
|
|
|
122
122
|
owner: ProjectAPIKey.Owner;
|
|
123
123
|
|
|
124
|
+
/**
|
|
125
|
+
* Whether the API key's owner currently has effective access to the project.
|
|
126
|
+
*/
|
|
127
|
+
owner_project_access: 'active' | 'inactive';
|
|
128
|
+
|
|
124
129
|
/**
|
|
125
130
|
* The redacted value of the API key
|
|
126
131
|
*/
|
|
@@ -218,7 +223,16 @@ export interface APIKeyRetrieveParams {
|
|
|
218
223
|
project_id: string;
|
|
219
224
|
}
|
|
220
225
|
|
|
221
|
-
export interface APIKeyListParams extends ConversationCursorPageParams {
|
|
226
|
+
export interface APIKeyListParams extends ConversationCursorPageParams {
|
|
227
|
+
/**
|
|
228
|
+
* Filter API keys by whether the owner currently has effective access to the
|
|
229
|
+
* project. Use `active` for owners with access, `inactive` for owners without
|
|
230
|
+
* access, or `any` for all enabled project API keys. If omitted, the endpoint
|
|
231
|
+
* applies its existing membership-based visibility rules, which may exclude some
|
|
232
|
+
* enabled keys.
|
|
233
|
+
*/
|
|
234
|
+
owner_project_access?: 'active' | 'inactive' | 'any';
|
|
235
|
+
}
|
|
222
236
|
|
|
223
237
|
export interface APIKeyDeleteParams {
|
|
224
238
|
/**
|
|
@@ -1141,19 +1141,12 @@ export interface AssistantCreateParams {
|
|
|
1141
1141
|
name?: string | null;
|
|
1142
1142
|
|
|
1143
1143
|
/**
|
|
1144
|
-
* Constrains effort on reasoning for
|
|
1145
|
-
*
|
|
1146
|
-
*
|
|
1147
|
-
*
|
|
1148
|
-
*
|
|
1149
|
-
*
|
|
1150
|
-
* - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported
|
|
1151
|
-
* reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool
|
|
1152
|
-
* calls are supported for all reasoning values in gpt-5.1.
|
|
1153
|
-
* - All models before `gpt-5.1` default to `medium` reasoning effort, and do not
|
|
1154
|
-
* support `none`.
|
|
1155
|
-
* - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.
|
|
1156
|
-
* - `xhigh` is supported for all models after `gpt-5.1-codex-max`.
|
|
1144
|
+
* Constrains effort on reasoning for reasoning models. Currently supported values
|
|
1145
|
+
* are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing
|
|
1146
|
+
* reasoning effort can result in faster responses and fewer tokens used on
|
|
1147
|
+
* reasoning in a response. Not all reasoning models support every value. See the
|
|
1148
|
+
* [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for
|
|
1149
|
+
* model-specific support.
|
|
1157
1150
|
*/
|
|
1158
1151
|
reasoning_effort?: Shared.ReasoningEffort | null;
|
|
1159
1152
|
|
|
@@ -1403,19 +1396,12 @@ export interface AssistantUpdateParams {
|
|
|
1403
1396
|
name?: string | null;
|
|
1404
1397
|
|
|
1405
1398
|
/**
|
|
1406
|
-
* Constrains effort on reasoning for
|
|
1407
|
-
*
|
|
1408
|
-
*
|
|
1409
|
-
*
|
|
1410
|
-
*
|
|
1411
|
-
*
|
|
1412
|
-
* - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported
|
|
1413
|
-
* reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool
|
|
1414
|
-
* calls are supported for all reasoning values in gpt-5.1.
|
|
1415
|
-
* - All models before `gpt-5.1` default to `medium` reasoning effort, and do not
|
|
1416
|
-
* support `none`.
|
|
1417
|
-
* - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.
|
|
1418
|
-
* - `xhigh` is supported for all models after `gpt-5.1-codex-max`.
|
|
1399
|
+
* Constrains effort on reasoning for reasoning models. Currently supported values
|
|
1400
|
+
* are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. Reducing
|
|
1401
|
+
* reasoning effort can result in faster responses and fewer tokens used on
|
|
1402
|
+
* reasoning in a response. Not all reasoning models support every value. See the
|
|
1403
|
+
* [reasoning guide](https://platform.openai.com/docs/guides/reasoning) for
|
|
1404
|
+
* model-specific support.
|
|
1419
1405
|
*/
|
|
1420
1406
|
reasoning_effort?: Shared.ReasoningEffort | null;
|
|
1421
1407
|
|