@ai-sdk/open-responses 1.0.15 → 1.0.17
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 +14 -0
- package/dist/index.js +48 -31
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +48 -31
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/responses/convert-to-open-responses-input.ts +21 -16
- package/src/responses/open-responses-language-model.ts +28 -27
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @ai-sdk/open-responses
|
|
2
2
|
|
|
3
|
+
## 1.0.17
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 06dd28f: Harden streamed tool call argument handling against prototype pollution.
|
|
8
|
+
- Updated dependencies [942f2f8]
|
|
9
|
+
- @ai-sdk/provider-utils@4.0.28
|
|
10
|
+
|
|
11
|
+
## 1.0.16
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- 16a5de5: fix(open-responses): map non-image file parts to input_file
|
|
16
|
+
|
|
3
17
|
## 1.0.15
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -26,7 +26,7 @@ __export(index_exports, {
|
|
|
26
26
|
module.exports = __toCommonJS(index_exports);
|
|
27
27
|
|
|
28
28
|
// src/version.ts
|
|
29
|
-
var VERSION = true ? "1.0.
|
|
29
|
+
var VERSION = true ? "1.0.17" : "0.0.0-test";
|
|
30
30
|
|
|
31
31
|
// src/open-responses-provider.ts
|
|
32
32
|
var import_provider = require("@ai-sdk/provider");
|
|
@@ -41,7 +41,7 @@ var import_provider_utils = require("@ai-sdk/provider-utils");
|
|
|
41
41
|
async function convertToOpenResponsesInput({
|
|
42
42
|
prompt
|
|
43
43
|
}) {
|
|
44
|
-
var _a, _b;
|
|
44
|
+
var _a, _b, _c;
|
|
45
45
|
const input = [];
|
|
46
46
|
const warnings = [];
|
|
47
47
|
const systemMessages = [];
|
|
@@ -60,20 +60,26 @@ async function convertToOpenResponsesInput({
|
|
|
60
60
|
break;
|
|
61
61
|
}
|
|
62
62
|
case "file": {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
const mediaType = part.mediaType === "image/*" ? "image/jpeg" : part.mediaType;
|
|
64
|
+
if (part.mediaType.startsWith("image/")) {
|
|
65
|
+
userContent.push({
|
|
66
|
+
type: "input_image",
|
|
67
|
+
...part.data instanceof URL ? { image_url: part.data.toString() } : {
|
|
68
|
+
image_url: `data:${mediaType};base64,${(0, import_provider_utils.convertToBase64)(part.data)}`
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
} else if (part.data instanceof URL) {
|
|
72
|
+
userContent.push({
|
|
73
|
+
type: "input_file",
|
|
74
|
+
file_url: part.data.toString()
|
|
75
|
+
});
|
|
76
|
+
} else {
|
|
77
|
+
userContent.push({
|
|
78
|
+
type: "input_file",
|
|
79
|
+
filename: (_a = part.filename) != null ? _a : "data",
|
|
80
|
+
file_data: `data:${mediaType};base64,${(0, import_provider_utils.convertToBase64)(part.data)}`
|
|
67
81
|
});
|
|
68
|
-
break;
|
|
69
82
|
}
|
|
70
|
-
const mediaType = part.mediaType === "image/*" ? "image/jpeg" : part.mediaType;
|
|
71
|
-
userContent.push({
|
|
72
|
-
type: "input_image",
|
|
73
|
-
...part.data instanceof URL ? { image_url: part.data.toString() } : {
|
|
74
|
-
image_url: `data:${mediaType};base64,${(0, import_provider_utils.convertToBase64)(part.data)}`
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
83
|
break;
|
|
78
84
|
}
|
|
79
85
|
}
|
|
@@ -125,7 +131,7 @@ async function convertToOpenResponsesInput({
|
|
|
125
131
|
contentValue = output.value;
|
|
126
132
|
break;
|
|
127
133
|
case "execution-denied":
|
|
128
|
-
contentValue = (
|
|
134
|
+
contentValue = (_b = output.reason) != null ? _b : "Tool execution denied.";
|
|
129
135
|
break;
|
|
130
136
|
case "json":
|
|
131
137
|
case "error-json":
|
|
@@ -159,7 +165,7 @@ async function convertToOpenResponsesInput({
|
|
|
159
165
|
case "file-data": {
|
|
160
166
|
contentParts.push({
|
|
161
167
|
type: "input_file",
|
|
162
|
-
filename: (
|
|
168
|
+
filename: (_c = item.filename) != null ? _c : "data",
|
|
163
169
|
file_data: `data:${item.mediaType};base64,${item.data}`
|
|
164
170
|
});
|
|
165
171
|
break;
|
|
@@ -451,7 +457,6 @@ var OpenResponsesLanguageModel = class {
|
|
|
451
457
|
errorSchema: openResponsesErrorSchema,
|
|
452
458
|
errorToMessage: (error) => error.error.message
|
|
453
459
|
}),
|
|
454
|
-
// TODO consider validation
|
|
455
460
|
successfulResponseHandler: (0, import_provider_utils4.createEventSourceResponseHandler)(import_v43.z.any()),
|
|
456
461
|
abortSignal: options.abortSignal,
|
|
457
462
|
fetch: this.config.fetch
|
|
@@ -497,7 +502,7 @@ var OpenResponsesLanguageModel = class {
|
|
|
497
502
|
unified: "other",
|
|
498
503
|
raw: void 0
|
|
499
504
|
};
|
|
500
|
-
const toolCallsByItemId =
|
|
505
|
+
const toolCallsByItemId = /* @__PURE__ */ new Map();
|
|
501
506
|
return {
|
|
502
507
|
stream: response.pipeThrough(
|
|
503
508
|
new TransformStream({
|
|
@@ -505,7 +510,7 @@ var OpenResponsesLanguageModel = class {
|
|
|
505
510
|
controller.enqueue({ type: "stream-start", warnings });
|
|
506
511
|
},
|
|
507
512
|
transform(parseResult, controller) {
|
|
508
|
-
var _a, _b, _c, _d, _e, _f, _g, _h
|
|
513
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
509
514
|
if (options.includeRawChunks) {
|
|
510
515
|
controller.enqueue({
|
|
511
516
|
type: "raw",
|
|
@@ -518,24 +523,36 @@ var OpenResponsesLanguageModel = class {
|
|
|
518
523
|
}
|
|
519
524
|
const chunk = parseResult.value;
|
|
520
525
|
if (chunk.type === "response.output_item.added" && chunk.item.type === "function_call") {
|
|
521
|
-
toolCallsByItemId
|
|
526
|
+
toolCallsByItemId.set(chunk.item.id, {
|
|
522
527
|
toolName: chunk.item.name,
|
|
523
528
|
toolCallId: chunk.item.call_id,
|
|
524
529
|
arguments: chunk.item.arguments
|
|
525
|
-
};
|
|
530
|
+
});
|
|
526
531
|
} else if (chunk.type === "response.function_call_arguments.delta") {
|
|
527
532
|
const functionCallChunk = chunk;
|
|
528
|
-
const toolCall = (
|
|
529
|
-
|
|
533
|
+
const toolCall = toolCallsByItemId.get(functionCallChunk.item_id);
|
|
534
|
+
if (toolCall == null) {
|
|
535
|
+
toolCallsByItemId.set(functionCallChunk.item_id, {
|
|
536
|
+
arguments: functionCallChunk.delta
|
|
537
|
+
});
|
|
538
|
+
return;
|
|
539
|
+
}
|
|
540
|
+
toolCall.arguments = ((_a = toolCall.arguments) != null ? _a : "") + functionCallChunk.delta;
|
|
530
541
|
} else if (chunk.type === "response.function_call_arguments.done") {
|
|
531
542
|
const functionCallChunk = chunk;
|
|
532
|
-
const toolCall = (
|
|
543
|
+
const toolCall = toolCallsByItemId.get(functionCallChunk.item_id);
|
|
544
|
+
if (toolCall == null) {
|
|
545
|
+
toolCallsByItemId.set(functionCallChunk.item_id, {
|
|
546
|
+
arguments: functionCallChunk.arguments
|
|
547
|
+
});
|
|
548
|
+
return;
|
|
549
|
+
}
|
|
533
550
|
toolCall.arguments = functionCallChunk.arguments;
|
|
534
551
|
} else if (chunk.type === "response.output_item.done" && chunk.item.type === "function_call") {
|
|
535
|
-
const toolCall = toolCallsByItemId
|
|
536
|
-
const toolName = (
|
|
537
|
-
const toolCallId = (
|
|
538
|
-
const input = (
|
|
552
|
+
const toolCall = toolCallsByItemId.get(chunk.item.id);
|
|
553
|
+
const toolName = (_b = toolCall == null ? void 0 : toolCall.toolName) != null ? _b : chunk.item.name;
|
|
554
|
+
const toolCallId = (_c = toolCall == null ? void 0 : toolCall.toolCallId) != null ? _c : chunk.item.call_id;
|
|
555
|
+
const input = (_e = (_d = toolCall == null ? void 0 : toolCall.arguments) != null ? _d : chunk.item.arguments) != null ? _e : "";
|
|
539
556
|
controller.enqueue({
|
|
540
557
|
type: "tool-call",
|
|
541
558
|
toolCallId,
|
|
@@ -543,7 +560,7 @@ var OpenResponsesLanguageModel = class {
|
|
|
543
560
|
input
|
|
544
561
|
});
|
|
545
562
|
hasToolCalls = true;
|
|
546
|
-
delete
|
|
563
|
+
toolCallsByItemId.delete(chunk.item.id);
|
|
547
564
|
} else if (chunk.type === "response.output_item.added" && chunk.item.type === "reasoning") {
|
|
548
565
|
controller.enqueue({
|
|
549
566
|
type: "reasoning-start",
|
|
@@ -571,7 +588,7 @@ var OpenResponsesLanguageModel = class {
|
|
|
571
588
|
} else if (chunk.type === "response.output_item.done" && chunk.item.type === "message") {
|
|
572
589
|
controller.enqueue({ type: "text-end", id: chunk.item.id });
|
|
573
590
|
} else if (chunk.type === "response.completed" || chunk.type === "response.incomplete") {
|
|
574
|
-
const reason = (
|
|
591
|
+
const reason = (_f = chunk.response.incomplete_details) == null ? void 0 : _f.reason;
|
|
575
592
|
finishReason = {
|
|
576
593
|
unified: mapOpenResponsesFinishReason({
|
|
577
594
|
finishReason: reason,
|
|
@@ -583,7 +600,7 @@ var OpenResponsesLanguageModel = class {
|
|
|
583
600
|
} else if (chunk.type === "response.failed") {
|
|
584
601
|
finishReason = {
|
|
585
602
|
unified: "error",
|
|
586
|
-
raw: (
|
|
603
|
+
raw: (_h = (_g = chunk.response.error) == null ? void 0 : _g.code) != null ? _h : chunk.response.status
|
|
587
604
|
};
|
|
588
605
|
updateUsage(chunk.response.usage);
|
|
589
606
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/version.ts","../src/open-responses-provider.ts","../src/responses/open-responses-language-model.ts","../src/responses/convert-to-open-responses-input.ts","../src/responses/open-responses-api.ts","../src/responses/map-open-responses-finish-reason.ts","../src/responses/open-responses-options.ts"],"sourcesContent":["export { VERSION } from './version';\nexport { createOpenResponses } from './open-responses-provider';\nexport type { OpenResponsesOptions } from './responses/open-responses-options';\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import {\n NoSuchModelError,\n type LanguageModelV3,\n type ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n generateId,\n loadApiKey,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { OpenResponsesLanguageModel } from './responses/open-responses-language-model';\nimport { VERSION } from './version';\n\nexport interface OpenResponsesProvider extends ProviderV3 {\n (modelId: string): LanguageModelV3;\n}\n\nexport interface OpenResponsesProviderSettings {\n /**\n * URL for the Open Responses API POST endpoint.\n */\n url: string;\n\n /**\n * Provider name. Used as key for provider options and metadata.\n */\n name: string;\n\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport function createOpenResponses(\n options: OpenResponsesProviderSettings,\n): OpenResponsesProvider {\n const providerName = options.name;\n\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n ...(options.apiKey\n ? {\n Authorization: `Bearer ${options.apiKey}`,\n }\n : {}),\n ...options.headers,\n },\n `ai-sdk/open-responses/${VERSION}`,\n );\n\n const createResponsesModel = (modelId: string) => {\n return new OpenResponsesLanguageModel(modelId, {\n provider: `${providerName}.responses`,\n providerOptionsName: providerName,\n headers: getHeaders,\n url: options.url,\n fetch: options.fetch,\n generateId: () => generateId(),\n });\n };\n\n const createLanguageModel = (modelId: string) => {\n if (new.target) {\n throw new Error(\n 'The OpenAI model function cannot be called with the new keyword.',\n );\n }\n\n return createResponsesModel(modelId);\n };\n\n const provider = function (modelId: string) {\n return createLanguageModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createLanguageModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider as OpenResponsesProvider;\n}\n","import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n LanguageModelV3Usage,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n jsonSchema,\n parseProviderOptions,\n postJsonToApi,\n type ParseResult,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { convertToOpenResponsesInput } from './convert-to-open-responses-input';\nimport {\n openResponsesErrorSchema,\n type FunctionToolParam,\n type OpenResponsesRequestBody,\n type OpenResponsesResponseBody,\n type OpenResponsesChunk,\n type ToolChoiceParam,\n} from './open-responses-api';\nimport { mapOpenResponsesFinishReason } from './map-open-responses-finish-reason';\nimport type { OpenResponsesConfig } from './open-responses-config';\nimport { openResponsesOptionsSchema } from './open-responses-options';\n\nexport class OpenResponsesLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n\n readonly modelId: string;\n\n private readonly config: OpenResponsesConfig;\n\n constructor(modelId: string, config: OpenResponsesConfig) {\n this.modelId = modelId;\n this.config = config;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'image/*': [/^https?:\\/\\/.*$/],\n };\n\n get provider(): string {\n return this.config.provider;\n }\n\n private async getArgs({\n maxOutputTokens,\n temperature,\n stopSequences,\n topP,\n topK,\n presencePenalty,\n frequencyPenalty,\n seed,\n prompt,\n providerOptions,\n tools,\n toolChoice,\n responseFormat,\n }: LanguageModelV3CallOptions): Promise<{\n body: Omit<OpenResponsesRequestBody, 'stream' | 'stream_options'>;\n warnings: SharedV3Warning[];\n }> {\n const warnings: SharedV3Warning[] = [];\n\n if (stopSequences != null) {\n warnings.push({ type: 'unsupported', feature: 'stopSequences' });\n }\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n\n if (seed != null) {\n warnings.push({ type: 'unsupported', feature: 'seed' });\n }\n\n const {\n input,\n instructions,\n warnings: inputWarnings,\n } = await convertToOpenResponsesInput({\n prompt,\n });\n\n warnings.push(...inputWarnings);\n\n // Convert function tools to the Open Responses format\n const functionTools: FunctionToolParam[] | undefined = tools\n ?.filter(tool => tool.type === 'function')\n .map(tool => ({\n type: 'function' as const,\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n }));\n\n // Convert tool choice to the Open Responses format\n const convertedToolChoice: ToolChoiceParam | undefined =\n toolChoice == null\n ? undefined\n : toolChoice.type === 'tool'\n ? { type: 'function', name: toolChoice.toolName }\n : toolChoice.type; // 'auto' | 'none' | 'required'\n\n const textFormat =\n responseFormat?.type === 'json'\n ? {\n type: 'json_schema' as const,\n ...(responseFormat.schema != null\n ? {\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n schema: responseFormat.schema,\n strict: true,\n }\n : {}),\n }\n : undefined;\n\n const openResponsesOptions = await parseProviderOptions({\n provider: this.config.providerOptionsName,\n providerOptions,\n schema: openResponsesOptionsSchema,\n });\n\n return {\n body: {\n model: this.modelId,\n input,\n instructions,\n max_output_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n presence_penalty: presencePenalty,\n frequency_penalty: frequencyPenalty,\n reasoning:\n openResponsesOptions?.reasoningEffort != null ||\n openResponsesOptions?.reasoningSummary != null\n ? {\n ...(openResponsesOptions?.reasoningEffort != null && {\n effort: openResponsesOptions.reasoningEffort,\n }),\n ...(openResponsesOptions?.reasoningSummary != null && {\n summary: openResponsesOptions.reasoningSummary,\n }),\n }\n : undefined,\n tools: functionTools?.length ? functionTools : undefined,\n tool_choice: convertedToolChoice,\n ...(textFormat != null && { text: { format: textFormat } }),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const { body, warnings } = await this.getArgs(options);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: openResponsesErrorSchema,\n errorToMessage: error => error.error.message,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n // do not validate the response body, only apply types to the response body\n jsonSchema<OpenResponsesResponseBody>(() => {\n throw new Error('json schema not implemented');\n }),\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const content: Array<LanguageModelV3Content> = [];\n let hasToolCalls = false;\n\n for (const part of response.output!) {\n switch (part.type) {\n // TODO AI SDK 7 adjust reasoning in the specification to better support the reasoning structure from open responses.\n case 'reasoning': {\n for (const contentPart of part.content ?? []) {\n content.push({\n type: 'reasoning',\n text: contentPart.text,\n });\n }\n break;\n }\n\n case 'message': {\n for (const contentPart of part.content) {\n content.push({\n type: 'text',\n text: contentPart.text,\n });\n }\n\n break;\n }\n\n case 'function_call': {\n hasToolCalls = true;\n content.push({\n type: 'tool-call',\n toolCallId: part.call_id,\n toolName: part.name,\n input: part.arguments,\n });\n break;\n }\n }\n }\n\n const usage = response.usage;\n const inputTokens = usage?.input_tokens;\n const cachedInputTokens = usage?.input_tokens_details?.cached_tokens;\n const outputTokens = usage?.output_tokens;\n const reasoningTokens = usage?.output_tokens_details?.reasoning_tokens;\n\n return {\n content,\n finishReason: {\n unified: mapOpenResponsesFinishReason({\n finishReason: response.incomplete_details?.reason,\n hasToolCalls,\n }),\n raw: response.incomplete_details?.reason ?? undefined,\n },\n usage: {\n inputTokens: {\n total: inputTokens,\n noCache: (inputTokens ?? 0) - (cachedInputTokens ?? 0),\n cacheRead: cachedInputTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: outputTokens,\n text: (outputTokens ?? 0) - (reasoningTokens ?? 0),\n reasoning: reasoningTokens,\n },\n raw: response.usage,\n },\n request: { body },\n response: {\n id: response.id,\n timestamp: new Date(response.created_at! * 1000),\n modelId: response.model,\n headers: responseHeaders,\n body: rawResponse,\n },\n providerMetadata: undefined,\n warnings,\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const { body, warnings } = await this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url,\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...body,\n stream: true,\n } satisfies OpenResponsesRequestBody,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: openResponsesErrorSchema,\n errorToMessage: error => error.error.message,\n }),\n // TODO consider validation\n successfulResponseHandler: createEventSourceResponseHandler(z.any()),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const usage: LanguageModelV3Usage = {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n };\n\n const updateUsage = (\n responseUsage?: OpenResponsesResponseBody['usage'],\n ) => {\n if (!responseUsage) {\n return;\n }\n\n const inputTokens = responseUsage.input_tokens;\n const cachedInputTokens =\n responseUsage.input_tokens_details?.cached_tokens;\n const outputTokens = responseUsage.output_tokens;\n const reasoningTokens =\n responseUsage.output_tokens_details?.reasoning_tokens;\n\n usage.inputTokens = {\n total: inputTokens,\n noCache: (inputTokens ?? 0) - (cachedInputTokens ?? 0),\n cacheRead: cachedInputTokens,\n cacheWrite: undefined,\n };\n usage.outputTokens = {\n total: outputTokens,\n text: (outputTokens ?? 0) - (reasoningTokens ?? 0),\n reasoning: reasoningTokens,\n };\n usage.raw = responseUsage;\n };\n\n let isActiveReasoning = false;\n let hasToolCalls = false;\n let finishReason: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n const toolCallsByItemId: Record<\n string,\n { toolName?: string; toolCallId?: string; arguments?: string }\n > = {};\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<OpenResponsesChunk>,\n LanguageModelV3StreamPart\n >({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(parseResult, controller) {\n if (options.includeRawChunks) {\n controller.enqueue({\n type: 'raw',\n rawValue: parseResult.rawValue,\n });\n }\n\n if (!parseResult.success) {\n controller.enqueue({ type: 'error', error: parseResult.error });\n return;\n }\n\n const chunk = parseResult.value;\n\n // Tool call events (single-shot tool-call when complete)\n if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'function_call'\n ) {\n toolCallsByItemId[chunk.item.id] = {\n toolName: chunk.item.name,\n toolCallId: chunk.item.call_id,\n arguments: chunk.item.arguments,\n };\n } else if (\n (chunk as { type: string }).type ===\n 'response.function_call_arguments.delta'\n ) {\n const functionCallChunk = chunk as {\n item_id: string;\n delta: string;\n };\n const toolCall =\n toolCallsByItemId[functionCallChunk.item_id] ??\n (toolCallsByItemId[functionCallChunk.item_id] = {});\n toolCall.arguments =\n (toolCall.arguments ?? '') + functionCallChunk.delta;\n } else if (\n (chunk as { type: string }).type ===\n 'response.function_call_arguments.done'\n ) {\n const functionCallChunk = chunk as {\n item_id: string;\n arguments: string;\n };\n const toolCall =\n toolCallsByItemId[functionCallChunk.item_id] ??\n (toolCallsByItemId[functionCallChunk.item_id] = {});\n toolCall.arguments = functionCallChunk.arguments;\n } else if (\n chunk.type === 'response.output_item.done' &&\n chunk.item.type === 'function_call'\n ) {\n const toolCall = toolCallsByItemId[chunk.item.id];\n const toolName = toolCall?.toolName ?? chunk.item.name;\n const toolCallId = toolCall?.toolCallId ?? chunk.item.call_id;\n const input = toolCall?.arguments ?? chunk.item.arguments ?? '';\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId,\n toolName,\n input,\n });\n hasToolCalls = true;\n\n delete toolCallsByItemId[chunk.item.id];\n }\n\n // Reasoning events (note: response.reasoning_text.delta is an LM Studio extension, not in official spec)\n else if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'reasoning'\n ) {\n controller.enqueue({\n type: 'reasoning-start',\n id: chunk.item.id,\n });\n isActiveReasoning = true;\n } else if (\n (chunk as { type: string }).type ===\n 'response.reasoning_text.delta'\n ) {\n const reasoningChunk = chunk as {\n item_id: string;\n delta: string;\n };\n controller.enqueue({\n type: 'reasoning-delta',\n id: reasoningChunk.item_id,\n delta: reasoningChunk.delta,\n });\n } else if (\n chunk.type === 'response.output_item.done' &&\n chunk.item.type === 'reasoning'\n ) {\n controller.enqueue({ type: 'reasoning-end', id: chunk.item.id });\n isActiveReasoning = false;\n }\n\n // Text events\n else if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'message'\n ) {\n controller.enqueue({ type: 'text-start', id: chunk.item.id });\n } else if (chunk.type === 'response.output_text.delta') {\n controller.enqueue({\n type: 'text-delta',\n id: chunk.item_id,\n delta: chunk.delta,\n });\n } else if (\n chunk.type === 'response.output_item.done' &&\n chunk.item.type === 'message'\n ) {\n controller.enqueue({ type: 'text-end', id: chunk.item.id });\n } else if (\n chunk.type === 'response.completed' ||\n chunk.type === 'response.incomplete'\n ) {\n const reason = chunk.response.incomplete_details?.reason;\n finishReason = {\n unified: mapOpenResponsesFinishReason({\n finishReason: reason,\n hasToolCalls,\n }),\n raw: reason ?? undefined,\n };\n updateUsage(chunk.response.usage);\n } else if (chunk.type === 'response.failed') {\n finishReason = {\n unified: 'error',\n raw: chunk.response.error?.code ?? chunk.response.status,\n };\n updateUsage(chunk.response.usage);\n }\n },\n\n flush(controller) {\n if (isActiveReasoning) {\n controller.enqueue({ type: 'reasoning-end', id: 'reasoning-0' });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage,\n providerMetadata: undefined,\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n","import type { LanguageModelV3Prompt, SharedV3Warning } from '@ai-sdk/provider';\nimport { convertToBase64 } from '@ai-sdk/provider-utils';\nimport type {\n FunctionCallItemParam,\n FunctionCallOutputItemParam,\n InputFileContentParam,\n InputImageContentParam,\n InputTextContentParam,\n OpenResponsesRequestBody,\n OutputTextContentParam,\n RefusalContentParam,\n} from './open-responses-api';\n\nexport async function convertToOpenResponsesInput({\n prompt,\n}: {\n prompt: LanguageModelV3Prompt;\n}): Promise<{\n input: OpenResponsesRequestBody['input'];\n instructions: string | undefined;\n warnings: Array<SharedV3Warning>;\n}> {\n const input: OpenResponsesRequestBody['input'] = [];\n const warnings: Array<SharedV3Warning> = [];\n const systemMessages: string[] = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n systemMessages.push(content);\n break;\n }\n\n case 'user': {\n const userContent: Array<\n InputTextContentParam | InputImageContentParam | InputFileContentParam\n > = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n userContent.push({ type: 'input_text', text: part.text });\n break;\n }\n case 'file': {\n if (!part.mediaType.startsWith('image/')) {\n warnings.push({\n type: 'other',\n message: `unsupported file content type: ${part.mediaType}`,\n });\n break;\n }\n\n const mediaType =\n part.mediaType === 'image/*' ? 'image/jpeg' : part.mediaType;\n\n userContent.push({\n type: 'input_image',\n ...(part.data instanceof URL\n ? { image_url: part.data.toString() }\n : {\n image_url: `data:${mediaType};base64,${convertToBase64(part.data)}`,\n }),\n });\n break;\n }\n }\n }\n\n input.push({ type: 'message', role: 'user', content: userContent });\n break;\n }\n\n case 'assistant': {\n const assistantContent: Array<\n OutputTextContentParam | RefusalContentParam\n > = [];\n const toolCalls: Array<FunctionCallItemParam> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n assistantContent.push({ type: 'output_text', text: part.text });\n break;\n }\n case 'tool-call': {\n const argumentsValue =\n typeof part.input === 'string'\n ? part.input\n : JSON.stringify(part.input);\n toolCalls.push({\n type: 'function_call',\n call_id: part.toolCallId,\n name: part.toolName,\n arguments: argumentsValue,\n });\n break;\n }\n }\n }\n\n // Push assistant message with text content if any\n if (assistantContent.length > 0) {\n input.push({\n type: 'message',\n role: 'assistant',\n content: assistantContent,\n });\n }\n\n // Push function calls as separate items\n for (const toolCall of toolCalls) {\n input.push(toolCall);\n }\n\n break;\n }\n\n case 'tool': {\n for (const part of content) {\n if (part.type === 'tool-result') {\n const output = part.output;\n let contentValue: FunctionCallOutputItemParam['output'];\n\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'execution-denied':\n contentValue = output.reason ?? 'Tool execution denied.';\n break;\n case 'json':\n case 'error-json':\n contentValue = JSON.stringify(output.value);\n break;\n case 'content': {\n const contentParts: Array<\n | InputTextContentParam\n | InputImageContentParam\n | InputFileContentParam\n > = [];\n for (const item of output.value) {\n switch (item.type) {\n case 'text': {\n contentParts.push({\n type: 'input_text',\n text: item.text,\n });\n break;\n }\n case 'image-data': {\n contentParts.push({\n type: 'input_image',\n image_url: `data:${item.mediaType};base64,${item.data}`,\n });\n break;\n }\n case 'image-url': {\n contentParts.push({\n type: 'input_image',\n image_url: item.url,\n });\n break;\n }\n case 'file-data': {\n contentParts.push({\n type: 'input_file',\n filename: item.filename ?? 'data',\n file_data: `data:${item.mediaType};base64,${item.data}`,\n });\n break;\n }\n default: {\n warnings.push({\n type: 'other',\n message: `unsupported tool content part type: ${(item as { type: string }).type}`,\n });\n break;\n }\n }\n }\n contentValue = contentParts;\n break;\n }\n }\n\n input.push({\n type: 'function_call_output',\n call_id: part.toolCallId,\n output: contentValue,\n });\n }\n }\n break;\n }\n }\n }\n\n return {\n input,\n instructions:\n systemMessages.length > 0 ? systemMessages.join('\\n') : undefined,\n warnings,\n };\n}\n","import type { JSONSchema7 } from '@ai-sdk/provider';\nimport { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const openResponsesErrorSchema = lazySchema(() =>\n zodSchema(\n z.object({\n error: z.object({\n message: z.string(),\n type: z.string(),\n param: z.string(),\n code: z.string(),\n }),\n }),\n ),\n);\n\n// ============================================================================\n// Enums\n// ============================================================================\n\n/**\n * The status of a function call or message item.\n */\nexport type FunctionCallStatus = 'in_progress' | 'completed' | 'incomplete';\n\n/**\n * Image detail level for input images.\n */\nexport type ImageDetail = 'low' | 'high' | 'auto';\n\n/**\n * Reasoning effort level.\n */\nexport type ReasoningEffortEnum = 'none' | 'low' | 'medium' | 'high' | 'xhigh';\n\n/**\n * Reasoning summary level.\n */\nexport type ReasoningSummaryEnum = 'concise' | 'detailed' | 'auto';\n\n/**\n * Tool choice value enum.\n */\nexport type ToolChoiceValueEnum = 'none' | 'auto' | 'required';\n\n/**\n * Verbosity level for text output.\n */\nexport type VerbosityEnum = 'low' | 'medium' | 'high';\n\n// ============================================================================\n// Content Types\n// ============================================================================\n\n/**\n * A text input to the model.\n */\nexport type InputTextContentParam = {\n type: 'input_text';\n text: string;\n};\n\n/**\n * An image input to the model.\n */\nexport type InputImageContentParam = {\n type: 'input_image';\n image_url?: string;\n detail?: ImageDetail;\n};\n\n/**\n * A file input to the model.\n */\nexport type InputFileContentParam = {\n type: 'input_file';\n filename?: string;\n file_data?: string;\n file_url?: string;\n};\n\n/**\n * A video input to the model.\n */\nexport type InputVideoContent = {\n type: 'input_video';\n video_url: string;\n};\n\n/**\n * A text output from the model.\n */\nexport type OutputTextContentParam = {\n type: 'output_text';\n text: string;\n annotations?: UrlCitationParam[];\n};\n\n/**\n * A refusal from the model.\n */\nexport type RefusalContentParam = {\n type: 'refusal';\n refusal: string;\n};\n\n/**\n * A URL citation annotation.\n */\nexport type UrlCitationParam = {\n type: 'url_citation';\n start_index: number;\n end_index: number;\n url: string;\n title: string;\n};\n\n/**\n * Reasoning summary content.\n */\nexport type ReasoningSummaryContentParam = {\n type: 'summary_text';\n text: string;\n};\n\n// ============================================================================\n// Message Item Types\n// ============================================================================\n\n/**\n * An internal identifier for an item to reference.\n */\nexport type ItemReferenceParam = {\n type?: 'item_reference';\n id: string;\n};\n\n/**\n * A reasoning item.\n */\nexport type ReasoningItemParam = {\n id?: string;\n type: 'reasoning';\n summary: ReasoningSummaryContentParam[];\n content?: unknown;\n encrypted_content?: string;\n};\n\n/**\n * A user message item.\n */\nexport type UserMessageItemParam = {\n id?: string;\n type: 'message';\n role: 'user';\n content:\n | string\n | Array<\n InputTextContentParam | InputImageContentParam | InputFileContentParam\n >;\n status?: string;\n};\n\n/**\n * A system message item.\n */\nexport type SystemMessageItemParam = {\n id?: string;\n type: 'message';\n role: 'system';\n content: string | InputTextContentParam[];\n status?: string;\n};\n\n/**\n * A developer message item.\n */\nexport type DeveloperMessageItemParam = {\n id?: string;\n type: 'message';\n role: 'developer';\n content: string | InputTextContentParam[];\n status?: string;\n};\n\n/**\n * An assistant message item.\n */\nexport type AssistantMessageItemParam = {\n id?: string;\n type: 'message';\n role: 'assistant';\n content: string | Array<OutputTextContentParam | RefusalContentParam>;\n status?: string;\n};\n\n/**\n * A function call item.\n */\nexport type FunctionCallItemParam = {\n id?: string;\n call_id: string;\n type: 'function_call';\n name: string;\n arguments: string;\n status?: FunctionCallStatus;\n};\n\n/**\n * A function call output item.\n */\nexport type FunctionCallOutputItemParam = {\n id?: string;\n call_id: string;\n type: 'function_call_output';\n output:\n | string\n | Array<\n | InputTextContentParam\n | InputImageContentParam\n | InputFileContentParam\n | InputVideoContent\n >;\n status?: FunctionCallStatus;\n};\n\n// ============================================================================\n// Tool Types\n// ============================================================================\n\n/**\n * A function tool parameter.\n */\nexport type FunctionToolParam = {\n name: string;\n description?: string;\n parameters?: JSONSchema7;\n strict?: boolean;\n type: 'function';\n};\n\n/**\n * A specific function tool choice.\n */\nexport type SpecificFunctionParam = {\n type: 'function';\n name: string;\n};\n\n/**\n * Allowed tools parameter.\n */\nexport type AllowedToolsParam = {\n type: 'allowed_tools';\n tools: SpecificFunctionParam[];\n mode?: ToolChoiceValueEnum;\n};\n\n/**\n * Controls which tool the model should use, if any.\n */\nexport type ToolChoiceParam =\n | ToolChoiceValueEnum\n | SpecificFunctionParam\n | AllowedToolsParam;\n\n// ============================================================================\n// Configuration Types\n// ============================================================================\n\n/**\n * Set of 16 key-value pairs that can be attached to an object.\n */\nexport type MetadataParam = Record<string, string>;\n\n/**\n * Text response format (plain text).\n */\nexport type TextResponseFormat = {\n type: 'text';\n};\n\n/**\n * JSON schema response format.\n */\nexport type JsonSchemaResponseFormatParam = {\n type: 'json_schema';\n description?: string;\n name?: string;\n schema?: JSONSchema7;\n strict?: boolean;\n};\n\n/**\n * Configuration options for text output.\n */\nexport type TextParam = {\n format?: TextResponseFormat | JsonSchemaResponseFormatParam;\n verbosity?: VerbosityEnum;\n};\n\n/**\n * Options that control streamed response behavior.\n */\nexport type StreamOptionsParam = {\n include_obfuscation?: boolean;\n};\n\n/**\n * Configuration options for reasoning behavior.\n */\nexport type ReasoningParam = {\n effort?: ReasoningEffortEnum;\n summary?: ReasoningSummaryEnum;\n};\n\n// ============================================================================\n// Response-Specific Types\n// ============================================================================\n\n/**\n * The status of a message item in the response.\n */\nexport type MessageStatus = 'in_progress' | 'completed' | 'incomplete';\n\n/**\n * Truncation enum for responses.\n */\nexport type TruncationEnum = 'auto' | 'disabled';\n\n/**\n * Service tier enum.\n */\nexport type ServiceTierEnum = 'auto' | 'default' | 'flex' | 'priority';\n\n/**\n * A top log probability of a token.\n */\nexport type TopLogProb = {\n token: string;\n logprob: number;\n bytes: number[];\n};\n\n/**\n * The log probability of a token.\n */\nexport type LogProb = {\n token: string;\n logprob: number;\n bytes: number[];\n top_logprobs: TopLogProb[];\n};\n\n/**\n * A URL citation annotation in a response.\n */\nexport type UrlCitationBody = {\n type: 'url_citation';\n url: string;\n start_index: number;\n end_index: number;\n title: string;\n};\n\n/**\n * An annotation that applies to a span of output text.\n */\nexport type Annotation = UrlCitationBody;\n\n/**\n * A text input content in a response.\n */\nexport type InputTextContent = {\n type: 'input_text';\n text: string;\n};\n\n/**\n * A text output from the model in a response.\n */\nexport type OutputTextContent = {\n type: 'output_text';\n text: string;\n annotations: Annotation[];\n logprobs: LogProb[];\n};\n\n/**\n * A refusal from the model in a response.\n */\nexport type RefusalContent = {\n type: 'refusal';\n refusal: string;\n};\n\n/**\n * Reasoning text from the model.\n */\nexport type ReasoningTextContent = {\n type: 'reasoning_text';\n text: string;\n};\n\n/**\n * A summary text from the model.\n */\nexport type SummaryTextContent = {\n type: 'summary_text';\n text: string;\n};\n\n/**\n * An image input content in a response.\n */\nexport type InputImageContent = {\n type: 'input_image';\n image_url?: string;\n detail: ImageDetail;\n};\n\n/**\n * A file input content in a response.\n */\nexport type InputFileContent = {\n type: 'input_file';\n filename?: string;\n file_url?: string;\n};\n\n/**\n * A message in the response.\n */\nexport type Message = {\n type: 'message';\n id: string;\n status: MessageStatus;\n role: 'user' | 'assistant' | 'system' | 'developer';\n content: InputTextContent[];\n};\n\n/**\n * A function tool call that was generated by the model.\n */\nexport type FunctionCall = {\n type: 'function_call';\n id: string;\n call_id: string;\n name: string;\n arguments: string;\n status: FunctionCallStatus;\n};\n\n/**\n * A function tool call output that was returned.\n */\nexport type FunctionCallOutput = {\n type: 'function_call_output';\n id: string;\n call_id: string;\n output:\n | string\n | Array<InputTextContent | InputImageContent | InputFileContent>;\n status: FunctionCallStatus;\n};\n\n/**\n * A reasoning item that was generated by the model.\n */\nexport type ReasoningBody = {\n type: 'reasoning';\n id: string;\n content?: InputTextContent[];\n summary: InputTextContent[];\n encrypted_content?: string;\n};\n\n/**\n * Output item field union type.\n */\nexport type OutputItem =\n | FunctionCall\n | FunctionCallOutput\n | Message\n | ReasoningBody;\n\n/**\n * Details about why the response was incomplete.\n */\nexport type IncompleteDetails = {\n reason: string;\n};\n\n/**\n * An error that occurred while generating the response.\n */\nexport type ResponseError = {\n code: string;\n message: string;\n};\n\n/**\n * A function tool in a response.\n */\nexport type FunctionTool = {\n type: 'function';\n name: string;\n description?: string;\n parameters?: JSONSchema7;\n strict?: boolean;\n};\n\n/**\n * Function tool choice in a response.\n */\nexport type FunctionToolChoice = {\n type: 'function';\n name?: string;\n};\n\n/**\n * Allowed tool choice in a response.\n */\nexport type AllowedToolChoice = {\n type: 'allowed_tools';\n tools: FunctionToolChoice[];\n mode: ToolChoiceValueEnum;\n};\n\n/**\n * Tool choice in a response.\n */\nexport type ResponseToolChoice =\n | ToolChoiceValueEnum\n | FunctionToolChoice\n | AllowedToolChoice;\n\n/**\n * JSON object response format.\n */\nexport type JsonObjectResponseFormat = {\n type: 'json_object';\n};\n\n/**\n * JSON schema response format in a response.\n */\nexport type JsonSchemaResponseFormat = {\n type: 'json_schema';\n name: string;\n description?: string;\n schema: unknown;\n strict: boolean;\n};\n\n/**\n * Text field in a response.\n */\nexport type TextField = {\n format?:\n | TextResponseFormat\n | JsonObjectResponseFormat\n | JsonSchemaResponseFormat;\n verbosity?: VerbosityEnum;\n};\n\n/**\n * A breakdown of input token usage that was recorded.\n */\nexport type InputTokensDetails = {\n cached_tokens: number;\n};\n\n/**\n * A breakdown of output token usage that was recorded.\n */\nexport type OutputTokensDetails = {\n reasoning_tokens: number;\n};\n\n/**\n * Token usage statistics that were recorded for the response.\n */\nexport type Usage = {\n input_tokens: number;\n output_tokens: number;\n total_tokens: number;\n input_tokens_details: InputTokensDetails;\n output_tokens_details: OutputTokensDetails;\n};\n\n/**\n * Reasoning configuration and outputs that were produced for this response.\n */\nexport type Reasoning = {\n effort?: ReasoningEffortEnum;\n summary?: ReasoningSummaryEnum;\n};\n\n// ============================================================================\n// Request Body\n// ============================================================================\n\n/**\n * Body that is sent to the Open Responses API.\n */\nexport type OpenResponsesRequestBody = {\n /**\n * The model to use for this request, e.g. 'gpt-5.4'.\n */\n model: string;\n\n /**\n * Context for the model: either a string (interpreted as a user message),\n * or an array of structured message items.\n */\n input:\n | string\n | Array<\n | ItemReferenceParam\n | ReasoningItemParam\n | UserMessageItemParam\n | SystemMessageItemParam\n | DeveloperMessageItemParam\n | AssistantMessageItemParam\n | FunctionCallItemParam\n | FunctionCallOutputItemParam\n >;\n\n /**\n * The ID of the response to use as the prior turn for this request.\n */\n previous_response_id?: string;\n\n /**\n * Options specifying extra values to include in the response.\n */\n include?: Array<\n 'reasoning.encrypted_content' | 'message.output_text.logprobs'\n >;\n\n /**\n * A list of tools that the model may call while generating the response.\n */\n tools?: FunctionToolParam[];\n\n /**\n * Controls which tool the model should use, if any.\n */\n tool_choice?: ToolChoiceParam;\n\n /**\n * Structured metadata as up to 16 key-value pairs.\n */\n metadata?: MetadataParam;\n\n /**\n * Configuration options for text output.\n */\n text?: TextParam;\n\n /**\n * Sampling temperature to use, between 0 and 2.\n */\n temperature?: number;\n\n /**\n * Nucleus sampling parameter, between 0 and 1.\n */\n top_p?: number;\n\n /**\n * Penalizes new tokens based on whether they appear in the text so far.\n */\n presence_penalty?: number;\n\n /**\n * Penalizes new tokens based on their frequency in the text so far.\n */\n frequency_penalty?: number;\n\n /**\n * Whether the model may call multiple tools in parallel.\n */\n parallel_tool_calls?: boolean;\n\n /**\n * Whether to stream response events as server-sent events.\n */\n stream?: boolean;\n\n /**\n * Options that control streamed response behavior.\n */\n stream_options?: StreamOptionsParam;\n\n /**\n * Whether to run the request in the background and return immediately.\n */\n background?: boolean;\n\n /**\n * Maximum number of tokens the model may generate.\n */\n max_output_tokens?: number;\n\n /**\n * Maximum number of tool calls the model may make while generating the response.\n */\n max_tool_calls?: number;\n\n /**\n * Configuration options for reasoning behavior.\n */\n reasoning?: ReasoningParam;\n\n /**\n * A stable identifier used for safety monitoring and abuse detection.\n */\n safety_identifier?: string;\n\n /**\n * A key to use when reading/writing to the prompt cache.\n */\n prompt_cache_key?: string;\n\n /**\n * Controls how input is truncated if it exceeds the model's context window.\n * - 'auto': Let the service decide how to truncate.\n * - 'disabled': Disable truncation. Context overflow yields 400 error.\n */\n truncation?: 'auto' | 'disabled';\n\n /**\n * Additional instructions to guide the model for this request.\n */\n instructions?: string;\n\n /**\n * Whether to store the response so it can be retrieved later.\n */\n store?: boolean;\n\n /**\n * The service tier to use for this request.\n * - 'auto' | 'default' | 'flex' | 'priority'\n */\n service_tier?: 'auto' | 'default' | 'flex' | 'priority';\n\n /**\n * Number of most likely tokens to return at each position, with logprobs.\n */\n top_logprobs?: number;\n};\n\n// ============================================================================\n// Response Body\n// ============================================================================\n\n/**\n * Response body from the Open Responses API.\n */\nexport type OpenResponsesResponseBody = {\n /**\n * The unique ID of the response that was created.\n */\n id: string;\n\n /**\n * The object type, which is always 'response'.\n */\n object: 'response';\n\n /**\n * The Unix timestamp (in seconds) for when the response was created.\n */\n created_at: number;\n\n /**\n * The Unix timestamp (in seconds) for when the response was completed, if it was completed.\n */\n completed_at?: number;\n\n /**\n * The status that was set for the response.\n */\n status: string;\n\n /**\n * Details about why the response was incomplete, if applicable.\n */\n incomplete_details?: IncompleteDetails;\n\n /**\n * The model that generated this response.\n */\n model: string;\n\n /**\n * The ID of the previous response in the chain that was referenced, if any.\n */\n previous_response_id?: string;\n\n /**\n * Additional instructions that were used to guide the model for this response.\n */\n instructions?: string;\n\n /**\n * The output items that were generated by the model.\n */\n output: OutputItem[];\n\n /**\n * The error that occurred, if the response failed.\n */\n error?: ResponseError;\n\n /**\n * The tools that were available to the model during response generation.\n */\n tools?: FunctionTool[];\n\n /**\n * The tool choice configuration that was used.\n */\n tool_choice?: ResponseToolChoice;\n\n /**\n * How the input was truncated by the service when it exceeded the model context window.\n */\n truncation?: TruncationEnum;\n\n /**\n * Whether the model was allowed to call multiple tools in parallel.\n */\n parallel_tool_calls?: boolean;\n\n /**\n * Configuration options for text output that were used.\n */\n text?: TextField;\n\n /**\n * The nucleus sampling parameter that was used for this response.\n */\n top_p?: number;\n\n /**\n * The presence penalty that was used.\n */\n presence_penalty?: number;\n\n /**\n * The frequency penalty that was used.\n */\n frequency_penalty?: number;\n\n /**\n * The number of most likely tokens that were returned at each position.\n */\n top_logprobs?: number;\n\n /**\n * The sampling temperature that was used for this response.\n */\n temperature?: number;\n\n /**\n * Reasoning configuration and outputs that were produced for this response.\n */\n reasoning?: Reasoning;\n\n /**\n * Token usage statistics that were recorded for the response, if available.\n */\n usage?: Usage;\n\n /**\n * The maximum number of tokens the model was allowed to generate for this response.\n */\n max_output_tokens?: number;\n\n /**\n * The maximum number of tool calls the model was allowed to make.\n */\n max_tool_calls?: number;\n\n /**\n * Whether this response was stored so it can be retrieved later.\n */\n store?: boolean;\n\n /**\n * Whether this request was run in the background.\n */\n background?: boolean;\n\n /**\n * The service tier that was used for this response.\n */\n service_tier?: string;\n\n /**\n * Developer-defined metadata that was associated with the response.\n */\n metadata?: unknown;\n\n /**\n * A stable identifier that was used for safety monitoring and abuse detection.\n */\n safety_identifier?: string;\n\n /**\n * A key that was used to read from or write to the prompt cache.\n */\n prompt_cache_key?: string;\n};\n\n// ============================================================================\n// Streaming Chunk Types\n// ============================================================================\n\n/**\n * Content part for streaming - output text.\n */\nexport type OutputTextContentPart = {\n type: 'output_text';\n text: string;\n annotations: Annotation[];\n};\n\n/**\n * Content part for streaming - refusal.\n */\nexport type RefusalContentPart = {\n type: 'refusal';\n refusal: string;\n};\n\n/**\n * Union of content parts that can appear in streaming.\n */\nexport type ContentPart = OutputTextContentPart | RefusalContentPart;\n\n// ----------------------------------------------------------------------------\n// State Machine Events\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when a response is created.\n */\nexport type ResponseCreatedEvent = {\n type: 'response.created';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n/**\n * Emitted when a response transitions to in_progress status.\n */\nexport type ResponseInProgressEvent = {\n type: 'response.in_progress';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n/**\n * Emitted when a response completes successfully.\n */\nexport type ResponseCompletedEvent = {\n type: 'response.completed';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n/**\n * Emitted when a response fails.\n */\nexport type ResponseFailedEvent = {\n type: 'response.failed';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n/**\n * Emitted when a response is incomplete (e.g., token budget exhausted).\n */\nexport type ResponseIncompleteEvent = {\n type: 'response.incomplete';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Output Items\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when a new output item is added to the response.\n */\nexport type ResponseOutputItemAddedEvent = {\n type: 'response.output_item.added';\n sequence_number: number;\n output_index: number;\n item: OutputItem;\n};\n\n/**\n * Emitted when an output item is completed.\n */\nexport type ResponseOutputItemDoneEvent = {\n type: 'response.output_item.done';\n sequence_number: number;\n output_index: number;\n item: OutputItem;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Content Parts\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when a new content part is added to an item.\n */\nexport type ResponseContentPartAddedEvent = {\n type: 'response.content_part.added';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n part: ContentPart;\n};\n\n/**\n * Emitted when a content part is completed.\n */\nexport type ResponseContentPartDoneEvent = {\n type: 'response.content_part.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n part: ContentPart;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Text Output\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when text is appended to an output.\n */\nexport type ResponseOutputTextDeltaEvent = {\n type: 'response.output_text.delta';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n delta: string;\n logprobs?: LogProb[];\n};\n\n/**\n * Emitted when text output is complete.\n */\nexport type ResponseOutputTextDoneEvent = {\n type: 'response.output_text.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n text: string;\n logprobs?: LogProb[];\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Refusal\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when refusal text is appended.\n */\nexport type ResponseRefusalDeltaEvent = {\n type: 'response.refusal.delta';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n delta: string;\n};\n\n/**\n * Emitted when refusal is complete.\n */\nexport type ResponseRefusalDoneEvent = {\n type: 'response.refusal.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n refusal: string;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Function Call Arguments\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when function call arguments are appended.\n */\nexport type ResponseFunctionCallArgumentsDeltaEvent = {\n type: 'response.function_call_arguments.delta';\n sequence_number: number;\n item_id: string;\n output_index: number;\n call_id: string;\n delta: string;\n};\n\n/**\n * Emitted when function call arguments are complete.\n */\nexport type ResponseFunctionCallArgumentsDoneEvent = {\n type: 'response.function_call_arguments.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n call_id: string;\n arguments: string;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Reasoning\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when reasoning summary text is appended.\n */\nexport type ResponseReasoningSummaryTextDeltaEvent = {\n type: 'response.reasoning_summary_text.delta';\n sequence_number: number;\n item_id: string;\n output_index: number;\n summary_index: number;\n delta: string;\n};\n\n/**\n * Emitted when reasoning summary text is complete.\n */\nexport type ResponseReasoningSummaryTextDoneEvent = {\n type: 'response.reasoning_summary_text.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n summary_index: number;\n text: string;\n};\n\n/**\n * Emitted when a reasoning summary part is added.\n */\nexport type ResponseReasoningSummaryPartAddedEvent = {\n type: 'response.reasoning_summary_part.added';\n sequence_number: number;\n item_id: string;\n output_index: number;\n summary_index: number;\n part: SummaryTextContent;\n};\n\n/**\n * Emitted when a reasoning summary part is complete.\n */\nexport type ResponseReasoningSummaryPartDoneEvent = {\n type: 'response.reasoning_summary_part.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n summary_index: number;\n part: SummaryTextContent;\n};\n\n// ----------------------------------------------------------------------------\n// Error Event\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when an error occurs during streaming.\n */\nexport type ResponseErrorEvent = {\n type: 'error';\n sequence_number: number;\n error: ResponseError;\n};\n\n// ----------------------------------------------------------------------------\n// Union Type for All Streaming Chunks\n// ----------------------------------------------------------------------------\n\n/**\n * Union of all streaming chunk event types from the Open Responses API.\n *\n * Streaming events fall into two categories:\n * - **State Machine Events**: Represent status changes (e.g., `response.in_progress`, `response.completed`)\n * - **Delta Events**: Represent incremental changes (e.g., `response.output_text.delta`, `response.output_item.added`)\n */\nexport type OpenResponsesChunk =\n // State Machine Events\n | ResponseCreatedEvent\n | ResponseInProgressEvent\n | ResponseCompletedEvent\n | ResponseFailedEvent\n | ResponseIncompleteEvent\n // Delta Events - Output Items\n | ResponseOutputItemAddedEvent\n | ResponseOutputItemDoneEvent\n // Delta Events - Content Parts\n | ResponseContentPartAddedEvent\n | ResponseContentPartDoneEvent\n // Delta Events - Text Output\n | ResponseOutputTextDeltaEvent\n | ResponseOutputTextDoneEvent\n // Delta Events - Refusal\n | ResponseRefusalDeltaEvent\n | ResponseRefusalDoneEvent\n // Delta Events - Function Call Arguments\n | ResponseFunctionCallArgumentsDeltaEvent\n | ResponseFunctionCallArgumentsDoneEvent\n // Delta Events - Reasoning\n | ResponseReasoningSummaryTextDeltaEvent\n | ResponseReasoningSummaryTextDoneEvent\n | ResponseReasoningSummaryPartAddedEvent\n | ResponseReasoningSummaryPartDoneEvent\n // Error Event\n | ResponseErrorEvent;\n","import type { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapOpenResponsesFinishReason({\n finishReason,\n hasToolCalls,\n}: {\n finishReason: string | null | undefined;\n hasToolCalls: boolean;\n}): LanguageModelV3FinishReason['unified'] {\n switch (finishReason) {\n case undefined:\n case null:\n return hasToolCalls ? 'tool-calls' : 'stop';\n case 'max_output_tokens':\n return 'length';\n case 'content_filter':\n return 'content-filter';\n default:\n return hasToolCalls ? 'tool-calls' : 'other';\n }\n}\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const openResponsesOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n reasoningEffort: z\n .enum(['none', 'low', 'medium', 'high', 'xhigh'])\n .nullish(),\n /**\n * Controls reasoning summary output from the model.\n * Valid values: 'concise', 'detailed', 'auto'.\n */\n reasoningSummary: z.enum(['concise', 'detailed', 'auto']).nullish(),\n }),\n ),\n);\n\nexport type OpenResponsesOptions = InferSchema<\n typeof openResponsesOptionsSchema\n>;\n"],"mappings":"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","names":["import_provider_utils","import_provider_utils","import_v4","import_provider_utils","import_provider_utils","import_v4"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/version.ts","../src/open-responses-provider.ts","../src/responses/open-responses-language-model.ts","../src/responses/convert-to-open-responses-input.ts","../src/responses/open-responses-api.ts","../src/responses/map-open-responses-finish-reason.ts","../src/responses/open-responses-options.ts"],"sourcesContent":["export { VERSION } from './version';\nexport { createOpenResponses } from './open-responses-provider';\nexport type { OpenResponsesOptions } from './responses/open-responses-options';\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import {\n NoSuchModelError,\n type LanguageModelV3,\n type ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n generateId,\n loadApiKey,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { OpenResponsesLanguageModel } from './responses/open-responses-language-model';\nimport { VERSION } from './version';\n\nexport interface OpenResponsesProvider extends ProviderV3 {\n (modelId: string): LanguageModelV3;\n}\n\nexport interface OpenResponsesProviderSettings {\n /**\n * URL for the Open Responses API POST endpoint.\n */\n url: string;\n\n /**\n * Provider name. Used as key for provider options and metadata.\n */\n name: string;\n\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport function createOpenResponses(\n options: OpenResponsesProviderSettings,\n): OpenResponsesProvider {\n const providerName = options.name;\n\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n ...(options.apiKey\n ? {\n Authorization: `Bearer ${options.apiKey}`,\n }\n : {}),\n ...options.headers,\n },\n `ai-sdk/open-responses/${VERSION}`,\n );\n\n const createResponsesModel = (modelId: string) => {\n return new OpenResponsesLanguageModel(modelId, {\n provider: `${providerName}.responses`,\n providerOptionsName: providerName,\n headers: getHeaders,\n url: options.url,\n fetch: options.fetch,\n generateId: () => generateId(),\n });\n };\n\n const createLanguageModel = (modelId: string) => {\n if (new.target) {\n throw new Error(\n 'The OpenAI model function cannot be called with the new keyword.',\n );\n }\n\n return createResponsesModel(modelId);\n };\n\n const provider = function (modelId: string) {\n return createLanguageModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createLanguageModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider as OpenResponsesProvider;\n}\n","import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n LanguageModelV3Usage,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n jsonSchema,\n parseProviderOptions,\n postJsonToApi,\n type ParseResult,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { convertToOpenResponsesInput } from './convert-to-open-responses-input';\nimport {\n openResponsesErrorSchema,\n type FunctionToolParam,\n type OpenResponsesRequestBody,\n type OpenResponsesResponseBody,\n type OpenResponsesChunk,\n type ToolChoiceParam,\n} from './open-responses-api';\nimport { mapOpenResponsesFinishReason } from './map-open-responses-finish-reason';\nimport type { OpenResponsesConfig } from './open-responses-config';\nimport { openResponsesOptionsSchema } from './open-responses-options';\n\nexport class OpenResponsesLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n\n readonly modelId: string;\n\n private readonly config: OpenResponsesConfig;\n\n constructor(modelId: string, config: OpenResponsesConfig) {\n this.modelId = modelId;\n this.config = config;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'image/*': [/^https?:\\/\\/.*$/],\n };\n\n get provider(): string {\n return this.config.provider;\n }\n\n private async getArgs({\n maxOutputTokens,\n temperature,\n stopSequences,\n topP,\n topK,\n presencePenalty,\n frequencyPenalty,\n seed,\n prompt,\n providerOptions,\n tools,\n toolChoice,\n responseFormat,\n }: LanguageModelV3CallOptions): Promise<{\n body: Omit<OpenResponsesRequestBody, 'stream' | 'stream_options'>;\n warnings: SharedV3Warning[];\n }> {\n const warnings: SharedV3Warning[] = [];\n\n if (stopSequences != null) {\n warnings.push({ type: 'unsupported', feature: 'stopSequences' });\n }\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n\n if (seed != null) {\n warnings.push({ type: 'unsupported', feature: 'seed' });\n }\n\n const {\n input,\n instructions,\n warnings: inputWarnings,\n } = await convertToOpenResponsesInput({\n prompt,\n });\n\n warnings.push(...inputWarnings);\n\n // Convert function tools to the Open Responses format\n const functionTools: FunctionToolParam[] | undefined = tools\n ?.filter(tool => tool.type === 'function')\n .map(tool => ({\n type: 'function' as const,\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n }));\n\n // Convert tool choice to the Open Responses format\n const convertedToolChoice: ToolChoiceParam | undefined =\n toolChoice == null\n ? undefined\n : toolChoice.type === 'tool'\n ? { type: 'function', name: toolChoice.toolName }\n : toolChoice.type; // 'auto' | 'none' | 'required'\n\n const textFormat =\n responseFormat?.type === 'json'\n ? {\n type: 'json_schema' as const,\n ...(responseFormat.schema != null\n ? {\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n schema: responseFormat.schema,\n strict: true,\n }\n : {}),\n }\n : undefined;\n\n const openResponsesOptions = await parseProviderOptions({\n provider: this.config.providerOptionsName,\n providerOptions,\n schema: openResponsesOptionsSchema,\n });\n\n return {\n body: {\n model: this.modelId,\n input,\n instructions,\n max_output_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n presence_penalty: presencePenalty,\n frequency_penalty: frequencyPenalty,\n reasoning:\n openResponsesOptions?.reasoningEffort != null ||\n openResponsesOptions?.reasoningSummary != null\n ? {\n ...(openResponsesOptions?.reasoningEffort != null && {\n effort: openResponsesOptions.reasoningEffort,\n }),\n ...(openResponsesOptions?.reasoningSummary != null && {\n summary: openResponsesOptions.reasoningSummary,\n }),\n }\n : undefined,\n tools: functionTools?.length ? functionTools : undefined,\n tool_choice: convertedToolChoice,\n ...(textFormat != null && { text: { format: textFormat } }),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const { body, warnings } = await this.getArgs(options);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: openResponsesErrorSchema,\n errorToMessage: error => error.error.message,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n // do not validate the response body, only apply types to the response body\n jsonSchema<OpenResponsesResponseBody>(() => {\n throw new Error('json schema not implemented');\n }),\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const content: Array<LanguageModelV3Content> = [];\n let hasToolCalls = false;\n\n for (const part of response.output!) {\n switch (part.type) {\n // TODO AI SDK 7 adjust reasoning in the specification to better support the reasoning structure from open responses.\n case 'reasoning': {\n for (const contentPart of part.content ?? []) {\n content.push({\n type: 'reasoning',\n text: contentPart.text,\n });\n }\n break;\n }\n\n case 'message': {\n for (const contentPart of part.content) {\n content.push({\n type: 'text',\n text: contentPart.text,\n });\n }\n\n break;\n }\n\n case 'function_call': {\n hasToolCalls = true;\n content.push({\n type: 'tool-call',\n toolCallId: part.call_id,\n toolName: part.name,\n input: part.arguments,\n });\n break;\n }\n }\n }\n\n const usage = response.usage;\n const inputTokens = usage?.input_tokens;\n const cachedInputTokens = usage?.input_tokens_details?.cached_tokens;\n const outputTokens = usage?.output_tokens;\n const reasoningTokens = usage?.output_tokens_details?.reasoning_tokens;\n\n return {\n content,\n finishReason: {\n unified: mapOpenResponsesFinishReason({\n finishReason: response.incomplete_details?.reason,\n hasToolCalls,\n }),\n raw: response.incomplete_details?.reason ?? undefined,\n },\n usage: {\n inputTokens: {\n total: inputTokens,\n noCache: (inputTokens ?? 0) - (cachedInputTokens ?? 0),\n cacheRead: cachedInputTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: outputTokens,\n text: (outputTokens ?? 0) - (reasoningTokens ?? 0),\n reasoning: reasoningTokens,\n },\n raw: response.usage,\n },\n request: { body },\n response: {\n id: response.id,\n timestamp: new Date(response.created_at! * 1000),\n modelId: response.model,\n headers: responseHeaders,\n body: rawResponse,\n },\n providerMetadata: undefined,\n warnings,\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const { body, warnings } = await this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url,\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...body,\n stream: true,\n } satisfies OpenResponsesRequestBody,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: openResponsesErrorSchema,\n errorToMessage: error => error.error.message,\n }),\n successfulResponseHandler: createEventSourceResponseHandler(z.any()),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const usage: LanguageModelV3Usage = {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n };\n\n const updateUsage = (\n responseUsage?: OpenResponsesResponseBody['usage'],\n ) => {\n if (!responseUsage) {\n return;\n }\n\n const inputTokens = responseUsage.input_tokens;\n const cachedInputTokens =\n responseUsage.input_tokens_details?.cached_tokens;\n const outputTokens = responseUsage.output_tokens;\n const reasoningTokens =\n responseUsage.output_tokens_details?.reasoning_tokens;\n\n usage.inputTokens = {\n total: inputTokens,\n noCache: (inputTokens ?? 0) - (cachedInputTokens ?? 0),\n cacheRead: cachedInputTokens,\n cacheWrite: undefined,\n };\n usage.outputTokens = {\n total: outputTokens,\n text: (outputTokens ?? 0) - (reasoningTokens ?? 0),\n reasoning: reasoningTokens,\n };\n usage.raw = responseUsage;\n };\n\n let isActiveReasoning = false;\n let hasToolCalls = false;\n let finishReason: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n const toolCallsByItemId = new Map<\n string,\n { toolName?: string; toolCallId?: string; arguments?: string }\n >();\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<OpenResponsesChunk>,\n LanguageModelV3StreamPart\n >({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(parseResult, controller) {\n if (options.includeRawChunks) {\n controller.enqueue({\n type: 'raw',\n rawValue: parseResult.rawValue,\n });\n }\n\n if (!parseResult.success) {\n controller.enqueue({ type: 'error', error: parseResult.error });\n return;\n }\n\n const chunk = parseResult.value;\n\n // Tool call events (single-shot tool-call when complete)\n if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'function_call'\n ) {\n toolCallsByItemId.set(chunk.item.id, {\n toolName: chunk.item.name,\n toolCallId: chunk.item.call_id,\n arguments: chunk.item.arguments,\n });\n } else if (\n chunk.type === 'response.function_call_arguments.delta'\n ) {\n const functionCallChunk = chunk;\n const toolCall = toolCallsByItemId.get(functionCallChunk.item_id);\n\n if (toolCall == null) {\n toolCallsByItemId.set(functionCallChunk.item_id, {\n arguments: functionCallChunk.delta,\n });\n return;\n }\n\n toolCall.arguments =\n (toolCall.arguments ?? '') + functionCallChunk.delta;\n } else if (chunk.type === 'response.function_call_arguments.done') {\n const functionCallChunk = chunk;\n const toolCall = toolCallsByItemId.get(functionCallChunk.item_id);\n\n if (toolCall == null) {\n toolCallsByItemId.set(functionCallChunk.item_id, {\n arguments: functionCallChunk.arguments,\n });\n return;\n }\n\n toolCall.arguments = functionCallChunk.arguments;\n } else if (\n chunk.type === 'response.output_item.done' &&\n chunk.item.type === 'function_call'\n ) {\n const toolCall = toolCallsByItemId.get(chunk.item.id);\n const toolName = toolCall?.toolName ?? chunk.item.name;\n const toolCallId = toolCall?.toolCallId ?? chunk.item.call_id;\n const input = toolCall?.arguments ?? chunk.item.arguments ?? '';\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId,\n toolName,\n input,\n });\n hasToolCalls = true;\n\n toolCallsByItemId.delete(chunk.item.id);\n }\n\n // Reasoning events (note: response.reasoning_text.delta is an LM Studio extension, not in official spec)\n else if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'reasoning'\n ) {\n controller.enqueue({\n type: 'reasoning-start',\n id: chunk.item.id,\n });\n isActiveReasoning = true;\n } else if (\n (chunk as { type: string }).type ===\n 'response.reasoning_text.delta'\n ) {\n const reasoningChunk = chunk as {\n item_id: string;\n delta: string;\n };\n controller.enqueue({\n type: 'reasoning-delta',\n id: reasoningChunk.item_id,\n delta: reasoningChunk.delta,\n });\n } else if (\n chunk.type === 'response.output_item.done' &&\n chunk.item.type === 'reasoning'\n ) {\n controller.enqueue({ type: 'reasoning-end', id: chunk.item.id });\n isActiveReasoning = false;\n }\n\n // Text events\n else if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'message'\n ) {\n controller.enqueue({ type: 'text-start', id: chunk.item.id });\n } else if (chunk.type === 'response.output_text.delta') {\n controller.enqueue({\n type: 'text-delta',\n id: chunk.item_id,\n delta: chunk.delta,\n });\n } else if (\n chunk.type === 'response.output_item.done' &&\n chunk.item.type === 'message'\n ) {\n controller.enqueue({ type: 'text-end', id: chunk.item.id });\n } else if (\n chunk.type === 'response.completed' ||\n chunk.type === 'response.incomplete'\n ) {\n const reason = chunk.response.incomplete_details?.reason;\n finishReason = {\n unified: mapOpenResponsesFinishReason({\n finishReason: reason,\n hasToolCalls,\n }),\n raw: reason ?? undefined,\n };\n updateUsage(chunk.response.usage);\n } else if (chunk.type === 'response.failed') {\n finishReason = {\n unified: 'error',\n raw: chunk.response.error?.code ?? chunk.response.status,\n };\n updateUsage(chunk.response.usage);\n }\n },\n\n flush(controller) {\n if (isActiveReasoning) {\n controller.enqueue({ type: 'reasoning-end', id: 'reasoning-0' });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage,\n providerMetadata: undefined,\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n","import type { LanguageModelV3Prompt, SharedV3Warning } from '@ai-sdk/provider';\nimport { convertToBase64 } from '@ai-sdk/provider-utils';\nimport type {\n FunctionCallItemParam,\n FunctionCallOutputItemParam,\n InputFileContentParam,\n InputImageContentParam,\n InputTextContentParam,\n OpenResponsesRequestBody,\n OutputTextContentParam,\n RefusalContentParam,\n} from './open-responses-api';\n\nexport async function convertToOpenResponsesInput({\n prompt,\n}: {\n prompt: LanguageModelV3Prompt;\n}): Promise<{\n input: OpenResponsesRequestBody['input'];\n instructions: string | undefined;\n warnings: Array<SharedV3Warning>;\n}> {\n const input: OpenResponsesRequestBody['input'] = [];\n const warnings: Array<SharedV3Warning> = [];\n const systemMessages: string[] = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n systemMessages.push(content);\n break;\n }\n\n case 'user': {\n const userContent: Array<\n InputTextContentParam | InputImageContentParam | InputFileContentParam\n > = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n userContent.push({ type: 'input_text', text: part.text });\n break;\n }\n case 'file': {\n const mediaType =\n part.mediaType === 'image/*' ? 'image/jpeg' : part.mediaType;\n\n if (part.mediaType.startsWith('image/')) {\n userContent.push({\n type: 'input_image',\n ...(part.data instanceof URL\n ? { image_url: part.data.toString() }\n : {\n image_url: `data:${mediaType};base64,${convertToBase64(part.data)}`,\n }),\n });\n } else if (part.data instanceof URL) {\n userContent.push({\n type: 'input_file',\n file_url: part.data.toString(),\n });\n } else {\n userContent.push({\n type: 'input_file',\n filename: part.filename ?? 'data',\n file_data: `data:${mediaType};base64,${convertToBase64(part.data)}`,\n });\n }\n break;\n }\n }\n }\n\n input.push({ type: 'message', role: 'user', content: userContent });\n break;\n }\n\n case 'assistant': {\n const assistantContent: Array<\n OutputTextContentParam | RefusalContentParam\n > = [];\n const toolCalls: Array<FunctionCallItemParam> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n assistantContent.push({ type: 'output_text', text: part.text });\n break;\n }\n case 'tool-call': {\n const argumentsValue =\n typeof part.input === 'string'\n ? part.input\n : JSON.stringify(part.input);\n toolCalls.push({\n type: 'function_call',\n call_id: part.toolCallId,\n name: part.toolName,\n arguments: argumentsValue,\n });\n break;\n }\n }\n }\n\n // Push assistant message with text content if any\n if (assistantContent.length > 0) {\n input.push({\n type: 'message',\n role: 'assistant',\n content: assistantContent,\n });\n }\n\n // Push function calls as separate items\n for (const toolCall of toolCalls) {\n input.push(toolCall);\n }\n\n break;\n }\n\n case 'tool': {\n for (const part of content) {\n if (part.type === 'tool-result') {\n const output = part.output;\n let contentValue: FunctionCallOutputItemParam['output'];\n\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'execution-denied':\n contentValue = output.reason ?? 'Tool execution denied.';\n break;\n case 'json':\n case 'error-json':\n contentValue = JSON.stringify(output.value);\n break;\n case 'content': {\n const contentParts: Array<\n | InputTextContentParam\n | InputImageContentParam\n | InputFileContentParam\n > = [];\n for (const item of output.value) {\n switch (item.type) {\n case 'text': {\n contentParts.push({\n type: 'input_text',\n text: item.text,\n });\n break;\n }\n case 'image-data': {\n contentParts.push({\n type: 'input_image',\n image_url: `data:${item.mediaType};base64,${item.data}`,\n });\n break;\n }\n case 'image-url': {\n contentParts.push({\n type: 'input_image',\n image_url: item.url,\n });\n break;\n }\n case 'file-data': {\n contentParts.push({\n type: 'input_file',\n filename: item.filename ?? 'data',\n file_data: `data:${item.mediaType};base64,${item.data}`,\n });\n break;\n }\n default: {\n warnings.push({\n type: 'other',\n message: `unsupported tool content part type: ${(item as { type: string }).type}`,\n });\n break;\n }\n }\n }\n contentValue = contentParts;\n break;\n }\n }\n\n input.push({\n type: 'function_call_output',\n call_id: part.toolCallId,\n output: contentValue,\n });\n }\n }\n break;\n }\n }\n }\n\n return {\n input,\n instructions:\n systemMessages.length > 0 ? systemMessages.join('\\n') : undefined,\n warnings,\n };\n}\n","import type { JSONSchema7 } from '@ai-sdk/provider';\nimport { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const openResponsesErrorSchema = lazySchema(() =>\n zodSchema(\n z.object({\n error: z.object({\n message: z.string(),\n type: z.string(),\n param: z.string(),\n code: z.string(),\n }),\n }),\n ),\n);\n\n// ============================================================================\n// Enums\n// ============================================================================\n\n/**\n * The status of a function call or message item.\n */\nexport type FunctionCallStatus = 'in_progress' | 'completed' | 'incomplete';\n\n/**\n * Image detail level for input images.\n */\nexport type ImageDetail = 'low' | 'high' | 'auto';\n\n/**\n * Reasoning effort level.\n */\nexport type ReasoningEffortEnum = 'none' | 'low' | 'medium' | 'high' | 'xhigh';\n\n/**\n * Reasoning summary level.\n */\nexport type ReasoningSummaryEnum = 'concise' | 'detailed' | 'auto';\n\n/**\n * Tool choice value enum.\n */\nexport type ToolChoiceValueEnum = 'none' | 'auto' | 'required';\n\n/**\n * Verbosity level for text output.\n */\nexport type VerbosityEnum = 'low' | 'medium' | 'high';\n\n// ============================================================================\n// Content Types\n// ============================================================================\n\n/**\n * A text input to the model.\n */\nexport type InputTextContentParam = {\n type: 'input_text';\n text: string;\n};\n\n/**\n * An image input to the model.\n */\nexport type InputImageContentParam = {\n type: 'input_image';\n image_url?: string;\n detail?: ImageDetail;\n};\n\n/**\n * A file input to the model.\n */\nexport type InputFileContentParam = {\n type: 'input_file';\n filename?: string;\n file_data?: string;\n file_url?: string;\n};\n\n/**\n * A video input to the model.\n */\nexport type InputVideoContent = {\n type: 'input_video';\n video_url: string;\n};\n\n/**\n * A text output from the model.\n */\nexport type OutputTextContentParam = {\n type: 'output_text';\n text: string;\n annotations?: UrlCitationParam[];\n};\n\n/**\n * A refusal from the model.\n */\nexport type RefusalContentParam = {\n type: 'refusal';\n refusal: string;\n};\n\n/**\n * A URL citation annotation.\n */\nexport type UrlCitationParam = {\n type: 'url_citation';\n start_index: number;\n end_index: number;\n url: string;\n title: string;\n};\n\n/**\n * Reasoning summary content.\n */\nexport type ReasoningSummaryContentParam = {\n type: 'summary_text';\n text: string;\n};\n\n// ============================================================================\n// Message Item Types\n// ============================================================================\n\n/**\n * An internal identifier for an item to reference.\n */\nexport type ItemReferenceParam = {\n type?: 'item_reference';\n id: string;\n};\n\n/**\n * A reasoning item.\n */\nexport type ReasoningItemParam = {\n id?: string;\n type: 'reasoning';\n summary: ReasoningSummaryContentParam[];\n content?: unknown;\n encrypted_content?: string;\n};\n\n/**\n * A user message item.\n */\nexport type UserMessageItemParam = {\n id?: string;\n type: 'message';\n role: 'user';\n content:\n | string\n | Array<\n InputTextContentParam | InputImageContentParam | InputFileContentParam\n >;\n status?: string;\n};\n\n/**\n * A system message item.\n */\nexport type SystemMessageItemParam = {\n id?: string;\n type: 'message';\n role: 'system';\n content: string | InputTextContentParam[];\n status?: string;\n};\n\n/**\n * A developer message item.\n */\nexport type DeveloperMessageItemParam = {\n id?: string;\n type: 'message';\n role: 'developer';\n content: string | InputTextContentParam[];\n status?: string;\n};\n\n/**\n * An assistant message item.\n */\nexport type AssistantMessageItemParam = {\n id?: string;\n type: 'message';\n role: 'assistant';\n content: string | Array<OutputTextContentParam | RefusalContentParam>;\n status?: string;\n};\n\n/**\n * A function call item.\n */\nexport type FunctionCallItemParam = {\n id?: string;\n call_id: string;\n type: 'function_call';\n name: string;\n arguments: string;\n status?: FunctionCallStatus;\n};\n\n/**\n * A function call output item.\n */\nexport type FunctionCallOutputItemParam = {\n id?: string;\n call_id: string;\n type: 'function_call_output';\n output:\n | string\n | Array<\n | InputTextContentParam\n | InputImageContentParam\n | InputFileContentParam\n | InputVideoContent\n >;\n status?: FunctionCallStatus;\n};\n\n// ============================================================================\n// Tool Types\n// ============================================================================\n\n/**\n * A function tool parameter.\n */\nexport type FunctionToolParam = {\n name: string;\n description?: string;\n parameters?: JSONSchema7;\n strict?: boolean;\n type: 'function';\n};\n\n/**\n * A specific function tool choice.\n */\nexport type SpecificFunctionParam = {\n type: 'function';\n name: string;\n};\n\n/**\n * Allowed tools parameter.\n */\nexport type AllowedToolsParam = {\n type: 'allowed_tools';\n tools: SpecificFunctionParam[];\n mode?: ToolChoiceValueEnum;\n};\n\n/**\n * Controls which tool the model should use, if any.\n */\nexport type ToolChoiceParam =\n | ToolChoiceValueEnum\n | SpecificFunctionParam\n | AllowedToolsParam;\n\n// ============================================================================\n// Configuration Types\n// ============================================================================\n\n/**\n * Set of 16 key-value pairs that can be attached to an object.\n */\nexport type MetadataParam = Record<string, string>;\n\n/**\n * Text response format (plain text).\n */\nexport type TextResponseFormat = {\n type: 'text';\n};\n\n/**\n * JSON schema response format.\n */\nexport type JsonSchemaResponseFormatParam = {\n type: 'json_schema';\n description?: string;\n name?: string;\n schema?: JSONSchema7;\n strict?: boolean;\n};\n\n/**\n * Configuration options for text output.\n */\nexport type TextParam = {\n format?: TextResponseFormat | JsonSchemaResponseFormatParam;\n verbosity?: VerbosityEnum;\n};\n\n/**\n * Options that control streamed response behavior.\n */\nexport type StreamOptionsParam = {\n include_obfuscation?: boolean;\n};\n\n/**\n * Configuration options for reasoning behavior.\n */\nexport type ReasoningParam = {\n effort?: ReasoningEffortEnum;\n summary?: ReasoningSummaryEnum;\n};\n\n// ============================================================================\n// Response-Specific Types\n// ============================================================================\n\n/**\n * The status of a message item in the response.\n */\nexport type MessageStatus = 'in_progress' | 'completed' | 'incomplete';\n\n/**\n * Truncation enum for responses.\n */\nexport type TruncationEnum = 'auto' | 'disabled';\n\n/**\n * Service tier enum.\n */\nexport type ServiceTierEnum = 'auto' | 'default' | 'flex' | 'priority';\n\n/**\n * A top log probability of a token.\n */\nexport type TopLogProb = {\n token: string;\n logprob: number;\n bytes: number[];\n};\n\n/**\n * The log probability of a token.\n */\nexport type LogProb = {\n token: string;\n logprob: number;\n bytes: number[];\n top_logprobs: TopLogProb[];\n};\n\n/**\n * A URL citation annotation in a response.\n */\nexport type UrlCitationBody = {\n type: 'url_citation';\n url: string;\n start_index: number;\n end_index: number;\n title: string;\n};\n\n/**\n * An annotation that applies to a span of output text.\n */\nexport type Annotation = UrlCitationBody;\n\n/**\n * A text input content in a response.\n */\nexport type InputTextContent = {\n type: 'input_text';\n text: string;\n};\n\n/**\n * A text output from the model in a response.\n */\nexport type OutputTextContent = {\n type: 'output_text';\n text: string;\n annotations: Annotation[];\n logprobs: LogProb[];\n};\n\n/**\n * A refusal from the model in a response.\n */\nexport type RefusalContent = {\n type: 'refusal';\n refusal: string;\n};\n\n/**\n * Reasoning text from the model.\n */\nexport type ReasoningTextContent = {\n type: 'reasoning_text';\n text: string;\n};\n\n/**\n * A summary text from the model.\n */\nexport type SummaryTextContent = {\n type: 'summary_text';\n text: string;\n};\n\n/**\n * An image input content in a response.\n */\nexport type InputImageContent = {\n type: 'input_image';\n image_url?: string;\n detail: ImageDetail;\n};\n\n/**\n * A file input content in a response.\n */\nexport type InputFileContent = {\n type: 'input_file';\n filename?: string;\n file_url?: string;\n};\n\n/**\n * A message in the response.\n */\nexport type Message = {\n type: 'message';\n id: string;\n status: MessageStatus;\n role: 'user' | 'assistant' | 'system' | 'developer';\n content: InputTextContent[];\n};\n\n/**\n * A function tool call that was generated by the model.\n */\nexport type FunctionCall = {\n type: 'function_call';\n id: string;\n call_id: string;\n name: string;\n arguments: string;\n status: FunctionCallStatus;\n};\n\n/**\n * A function tool call output that was returned.\n */\nexport type FunctionCallOutput = {\n type: 'function_call_output';\n id: string;\n call_id: string;\n output:\n | string\n | Array<InputTextContent | InputImageContent | InputFileContent>;\n status: FunctionCallStatus;\n};\n\n/**\n * A reasoning item that was generated by the model.\n */\nexport type ReasoningBody = {\n type: 'reasoning';\n id: string;\n content?: InputTextContent[];\n summary: InputTextContent[];\n encrypted_content?: string;\n};\n\n/**\n * Output item field union type.\n */\nexport type OutputItem =\n | FunctionCall\n | FunctionCallOutput\n | Message\n | ReasoningBody;\n\n/**\n * Details about why the response was incomplete.\n */\nexport type IncompleteDetails = {\n reason: string;\n};\n\n/**\n * An error that occurred while generating the response.\n */\nexport type ResponseError = {\n code: string;\n message: string;\n};\n\n/**\n * A function tool in a response.\n */\nexport type FunctionTool = {\n type: 'function';\n name: string;\n description?: string;\n parameters?: JSONSchema7;\n strict?: boolean;\n};\n\n/**\n * Function tool choice in a response.\n */\nexport type FunctionToolChoice = {\n type: 'function';\n name?: string;\n};\n\n/**\n * Allowed tool choice in a response.\n */\nexport type AllowedToolChoice = {\n type: 'allowed_tools';\n tools: FunctionToolChoice[];\n mode: ToolChoiceValueEnum;\n};\n\n/**\n * Tool choice in a response.\n */\nexport type ResponseToolChoice =\n | ToolChoiceValueEnum\n | FunctionToolChoice\n | AllowedToolChoice;\n\n/**\n * JSON object response format.\n */\nexport type JsonObjectResponseFormat = {\n type: 'json_object';\n};\n\n/**\n * JSON schema response format in a response.\n */\nexport type JsonSchemaResponseFormat = {\n type: 'json_schema';\n name: string;\n description?: string;\n schema: unknown;\n strict: boolean;\n};\n\n/**\n * Text field in a response.\n */\nexport type TextField = {\n format?:\n | TextResponseFormat\n | JsonObjectResponseFormat\n | JsonSchemaResponseFormat;\n verbosity?: VerbosityEnum;\n};\n\n/**\n * A breakdown of input token usage that was recorded.\n */\nexport type InputTokensDetails = {\n cached_tokens: number;\n};\n\n/**\n * A breakdown of output token usage that was recorded.\n */\nexport type OutputTokensDetails = {\n reasoning_tokens: number;\n};\n\n/**\n * Token usage statistics that were recorded for the response.\n */\nexport type Usage = {\n input_tokens: number;\n output_tokens: number;\n total_tokens: number;\n input_tokens_details: InputTokensDetails;\n output_tokens_details: OutputTokensDetails;\n};\n\n/**\n * Reasoning configuration and outputs that were produced for this response.\n */\nexport type Reasoning = {\n effort?: ReasoningEffortEnum;\n summary?: ReasoningSummaryEnum;\n};\n\n// ============================================================================\n// Request Body\n// ============================================================================\n\n/**\n * Body that is sent to the Open Responses API.\n */\nexport type OpenResponsesRequestBody = {\n /**\n * The model to use for this request, e.g. 'gpt-5.4'.\n */\n model: string;\n\n /**\n * Context for the model: either a string (interpreted as a user message),\n * or an array of structured message items.\n */\n input:\n | string\n | Array<\n | ItemReferenceParam\n | ReasoningItemParam\n | UserMessageItemParam\n | SystemMessageItemParam\n | DeveloperMessageItemParam\n | AssistantMessageItemParam\n | FunctionCallItemParam\n | FunctionCallOutputItemParam\n >;\n\n /**\n * The ID of the response to use as the prior turn for this request.\n */\n previous_response_id?: string;\n\n /**\n * Options specifying extra values to include in the response.\n */\n include?: Array<\n 'reasoning.encrypted_content' | 'message.output_text.logprobs'\n >;\n\n /**\n * A list of tools that the model may call while generating the response.\n */\n tools?: FunctionToolParam[];\n\n /**\n * Controls which tool the model should use, if any.\n */\n tool_choice?: ToolChoiceParam;\n\n /**\n * Structured metadata as up to 16 key-value pairs.\n */\n metadata?: MetadataParam;\n\n /**\n * Configuration options for text output.\n */\n text?: TextParam;\n\n /**\n * Sampling temperature to use, between 0 and 2.\n */\n temperature?: number;\n\n /**\n * Nucleus sampling parameter, between 0 and 1.\n */\n top_p?: number;\n\n /**\n * Penalizes new tokens based on whether they appear in the text so far.\n */\n presence_penalty?: number;\n\n /**\n * Penalizes new tokens based on their frequency in the text so far.\n */\n frequency_penalty?: number;\n\n /**\n * Whether the model may call multiple tools in parallel.\n */\n parallel_tool_calls?: boolean;\n\n /**\n * Whether to stream response events as server-sent events.\n */\n stream?: boolean;\n\n /**\n * Options that control streamed response behavior.\n */\n stream_options?: StreamOptionsParam;\n\n /**\n * Whether to run the request in the background and return immediately.\n */\n background?: boolean;\n\n /**\n * Maximum number of tokens the model may generate.\n */\n max_output_tokens?: number;\n\n /**\n * Maximum number of tool calls the model may make while generating the response.\n */\n max_tool_calls?: number;\n\n /**\n * Configuration options for reasoning behavior.\n */\n reasoning?: ReasoningParam;\n\n /**\n * A stable identifier used for safety monitoring and abuse detection.\n */\n safety_identifier?: string;\n\n /**\n * A key to use when reading/writing to the prompt cache.\n */\n prompt_cache_key?: string;\n\n /**\n * Controls how input is truncated if it exceeds the model's context window.\n * - 'auto': Let the service decide how to truncate.\n * - 'disabled': Disable truncation. Context overflow yields 400 error.\n */\n truncation?: 'auto' | 'disabled';\n\n /**\n * Additional instructions to guide the model for this request.\n */\n instructions?: string;\n\n /**\n * Whether to store the response so it can be retrieved later.\n */\n store?: boolean;\n\n /**\n * The service tier to use for this request.\n * - 'auto' | 'default' | 'flex' | 'priority'\n */\n service_tier?: 'auto' | 'default' | 'flex' | 'priority';\n\n /**\n * Number of most likely tokens to return at each position, with logprobs.\n */\n top_logprobs?: number;\n};\n\n// ============================================================================\n// Response Body\n// ============================================================================\n\n/**\n * Response body from the Open Responses API.\n */\nexport type OpenResponsesResponseBody = {\n /**\n * The unique ID of the response that was created.\n */\n id: string;\n\n /**\n * The object type, which is always 'response'.\n */\n object: 'response';\n\n /**\n * The Unix timestamp (in seconds) for when the response was created.\n */\n created_at: number;\n\n /**\n * The Unix timestamp (in seconds) for when the response was completed, if it was completed.\n */\n completed_at?: number;\n\n /**\n * The status that was set for the response.\n */\n status: string;\n\n /**\n * Details about why the response was incomplete, if applicable.\n */\n incomplete_details?: IncompleteDetails;\n\n /**\n * The model that generated this response.\n */\n model: string;\n\n /**\n * The ID of the previous response in the chain that was referenced, if any.\n */\n previous_response_id?: string;\n\n /**\n * Additional instructions that were used to guide the model for this response.\n */\n instructions?: string;\n\n /**\n * The output items that were generated by the model.\n */\n output: OutputItem[];\n\n /**\n * The error that occurred, if the response failed.\n */\n error?: ResponseError;\n\n /**\n * The tools that were available to the model during response generation.\n */\n tools?: FunctionTool[];\n\n /**\n * The tool choice configuration that was used.\n */\n tool_choice?: ResponseToolChoice;\n\n /**\n * How the input was truncated by the service when it exceeded the model context window.\n */\n truncation?: TruncationEnum;\n\n /**\n * Whether the model was allowed to call multiple tools in parallel.\n */\n parallel_tool_calls?: boolean;\n\n /**\n * Configuration options for text output that were used.\n */\n text?: TextField;\n\n /**\n * The nucleus sampling parameter that was used for this response.\n */\n top_p?: number;\n\n /**\n * The presence penalty that was used.\n */\n presence_penalty?: number;\n\n /**\n * The frequency penalty that was used.\n */\n frequency_penalty?: number;\n\n /**\n * The number of most likely tokens that were returned at each position.\n */\n top_logprobs?: number;\n\n /**\n * The sampling temperature that was used for this response.\n */\n temperature?: number;\n\n /**\n * Reasoning configuration and outputs that were produced for this response.\n */\n reasoning?: Reasoning;\n\n /**\n * Token usage statistics that were recorded for the response, if available.\n */\n usage?: Usage;\n\n /**\n * The maximum number of tokens the model was allowed to generate for this response.\n */\n max_output_tokens?: number;\n\n /**\n * The maximum number of tool calls the model was allowed to make.\n */\n max_tool_calls?: number;\n\n /**\n * Whether this response was stored so it can be retrieved later.\n */\n store?: boolean;\n\n /**\n * Whether this request was run in the background.\n */\n background?: boolean;\n\n /**\n * The service tier that was used for this response.\n */\n service_tier?: string;\n\n /**\n * Developer-defined metadata that was associated with the response.\n */\n metadata?: unknown;\n\n /**\n * A stable identifier that was used for safety monitoring and abuse detection.\n */\n safety_identifier?: string;\n\n /**\n * A key that was used to read from or write to the prompt cache.\n */\n prompt_cache_key?: string;\n};\n\n// ============================================================================\n// Streaming Chunk Types\n// ============================================================================\n\n/**\n * Content part for streaming - output text.\n */\nexport type OutputTextContentPart = {\n type: 'output_text';\n text: string;\n annotations: Annotation[];\n};\n\n/**\n * Content part for streaming - refusal.\n */\nexport type RefusalContentPart = {\n type: 'refusal';\n refusal: string;\n};\n\n/**\n * Union of content parts that can appear in streaming.\n */\nexport type ContentPart = OutputTextContentPart | RefusalContentPart;\n\n// ----------------------------------------------------------------------------\n// State Machine Events\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when a response is created.\n */\nexport type ResponseCreatedEvent = {\n type: 'response.created';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n/**\n * Emitted when a response transitions to in_progress status.\n */\nexport type ResponseInProgressEvent = {\n type: 'response.in_progress';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n/**\n * Emitted when a response completes successfully.\n */\nexport type ResponseCompletedEvent = {\n type: 'response.completed';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n/**\n * Emitted when a response fails.\n */\nexport type ResponseFailedEvent = {\n type: 'response.failed';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n/**\n * Emitted when a response is incomplete (e.g., token budget exhausted).\n */\nexport type ResponseIncompleteEvent = {\n type: 'response.incomplete';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Output Items\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when a new output item is added to the response.\n */\nexport type ResponseOutputItemAddedEvent = {\n type: 'response.output_item.added';\n sequence_number: number;\n output_index: number;\n item: OutputItem;\n};\n\n/**\n * Emitted when an output item is completed.\n */\nexport type ResponseOutputItemDoneEvent = {\n type: 'response.output_item.done';\n sequence_number: number;\n output_index: number;\n item: OutputItem;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Content Parts\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when a new content part is added to an item.\n */\nexport type ResponseContentPartAddedEvent = {\n type: 'response.content_part.added';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n part: ContentPart;\n};\n\n/**\n * Emitted when a content part is completed.\n */\nexport type ResponseContentPartDoneEvent = {\n type: 'response.content_part.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n part: ContentPart;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Text Output\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when text is appended to an output.\n */\nexport type ResponseOutputTextDeltaEvent = {\n type: 'response.output_text.delta';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n delta: string;\n logprobs?: LogProb[];\n};\n\n/**\n * Emitted when text output is complete.\n */\nexport type ResponseOutputTextDoneEvent = {\n type: 'response.output_text.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n text: string;\n logprobs?: LogProb[];\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Refusal\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when refusal text is appended.\n */\nexport type ResponseRefusalDeltaEvent = {\n type: 'response.refusal.delta';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n delta: string;\n};\n\n/**\n * Emitted when refusal is complete.\n */\nexport type ResponseRefusalDoneEvent = {\n type: 'response.refusal.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n refusal: string;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Function Call Arguments\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when function call arguments are appended.\n */\nexport type ResponseFunctionCallArgumentsDeltaEvent = {\n type: 'response.function_call_arguments.delta';\n sequence_number: number;\n item_id: string;\n output_index: number;\n call_id: string;\n delta: string;\n};\n\n/**\n * Emitted when function call arguments are complete.\n */\nexport type ResponseFunctionCallArgumentsDoneEvent = {\n type: 'response.function_call_arguments.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n call_id: string;\n arguments: string;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Reasoning\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when reasoning summary text is appended.\n */\nexport type ResponseReasoningSummaryTextDeltaEvent = {\n type: 'response.reasoning_summary_text.delta';\n sequence_number: number;\n item_id: string;\n output_index: number;\n summary_index: number;\n delta: string;\n};\n\n/**\n * Emitted when reasoning summary text is complete.\n */\nexport type ResponseReasoningSummaryTextDoneEvent = {\n type: 'response.reasoning_summary_text.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n summary_index: number;\n text: string;\n};\n\n/**\n * Emitted when a reasoning summary part is added.\n */\nexport type ResponseReasoningSummaryPartAddedEvent = {\n type: 'response.reasoning_summary_part.added';\n sequence_number: number;\n item_id: string;\n output_index: number;\n summary_index: number;\n part: SummaryTextContent;\n};\n\n/**\n * Emitted when a reasoning summary part is complete.\n */\nexport type ResponseReasoningSummaryPartDoneEvent = {\n type: 'response.reasoning_summary_part.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n summary_index: number;\n part: SummaryTextContent;\n};\n\n// ----------------------------------------------------------------------------\n// Error Event\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when an error occurs during streaming.\n */\nexport type ResponseErrorEvent = {\n type: 'error';\n sequence_number: number;\n error: ResponseError;\n};\n\n// ----------------------------------------------------------------------------\n// Union Type for All Streaming Chunks\n// ----------------------------------------------------------------------------\n\n/**\n * Union of all streaming chunk event types from the Open Responses API.\n *\n * Streaming events fall into two categories:\n * - **State Machine Events**: Represent status changes (e.g., `response.in_progress`, `response.completed`)\n * - **Delta Events**: Represent incremental changes (e.g., `response.output_text.delta`, `response.output_item.added`)\n */\nexport type OpenResponsesChunk =\n // State Machine Events\n | ResponseCreatedEvent\n | ResponseInProgressEvent\n | ResponseCompletedEvent\n | ResponseFailedEvent\n | ResponseIncompleteEvent\n // Delta Events - Output Items\n | ResponseOutputItemAddedEvent\n | ResponseOutputItemDoneEvent\n // Delta Events - Content Parts\n | ResponseContentPartAddedEvent\n | ResponseContentPartDoneEvent\n // Delta Events - Text Output\n | ResponseOutputTextDeltaEvent\n | ResponseOutputTextDoneEvent\n // Delta Events - Refusal\n | ResponseRefusalDeltaEvent\n | ResponseRefusalDoneEvent\n // Delta Events - Function Call Arguments\n | ResponseFunctionCallArgumentsDeltaEvent\n | ResponseFunctionCallArgumentsDoneEvent\n // Delta Events - Reasoning\n | ResponseReasoningSummaryTextDeltaEvent\n | ResponseReasoningSummaryTextDoneEvent\n | ResponseReasoningSummaryPartAddedEvent\n | ResponseReasoningSummaryPartDoneEvent\n // Error Event\n | ResponseErrorEvent;\n","import type { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapOpenResponsesFinishReason({\n finishReason,\n hasToolCalls,\n}: {\n finishReason: string | null | undefined;\n hasToolCalls: boolean;\n}): LanguageModelV3FinishReason['unified'] {\n switch (finishReason) {\n case undefined:\n case null:\n return hasToolCalls ? 'tool-calls' : 'stop';\n case 'max_output_tokens':\n return 'length';\n case 'content_filter':\n return 'content-filter';\n default:\n return hasToolCalls ? 'tool-calls' : 'other';\n }\n}\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const openResponsesOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n reasoningEffort: z\n .enum(['none', 'low', 'medium', 'high', 'xhigh'])\n .nullish(),\n /**\n * Controls reasoning summary output from the model.\n * Valid values: 'concise', 'detailed', 'auto'.\n */\n reasoningSummary: z.enum(['concise', 'detailed', 'auto']).nullish(),\n }),\n ),\n);\n\nexport type OpenResponsesOptions = InferSchema<\n typeof openResponsesOptionsSchema\n>;\n"],"mappings":"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","names":["import_provider_utils","import_provider_utils","import_v4","import_provider_utils","import_provider_utils","import_v4"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/version.ts
|
|
2
|
-
var VERSION = true ? "1.0.
|
|
2
|
+
var VERSION = true ? "1.0.17" : "0.0.0-test";
|
|
3
3
|
|
|
4
4
|
// src/open-responses-provider.ts
|
|
5
5
|
import {
|
|
@@ -27,7 +27,7 @@ import { convertToBase64 } from "@ai-sdk/provider-utils";
|
|
|
27
27
|
async function convertToOpenResponsesInput({
|
|
28
28
|
prompt
|
|
29
29
|
}) {
|
|
30
|
-
var _a, _b;
|
|
30
|
+
var _a, _b, _c;
|
|
31
31
|
const input = [];
|
|
32
32
|
const warnings = [];
|
|
33
33
|
const systemMessages = [];
|
|
@@ -46,20 +46,26 @@ async function convertToOpenResponsesInput({
|
|
|
46
46
|
break;
|
|
47
47
|
}
|
|
48
48
|
case "file": {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
const mediaType = part.mediaType === "image/*" ? "image/jpeg" : part.mediaType;
|
|
50
|
+
if (part.mediaType.startsWith("image/")) {
|
|
51
|
+
userContent.push({
|
|
52
|
+
type: "input_image",
|
|
53
|
+
...part.data instanceof URL ? { image_url: part.data.toString() } : {
|
|
54
|
+
image_url: `data:${mediaType};base64,${convertToBase64(part.data)}`
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
} else if (part.data instanceof URL) {
|
|
58
|
+
userContent.push({
|
|
59
|
+
type: "input_file",
|
|
60
|
+
file_url: part.data.toString()
|
|
61
|
+
});
|
|
62
|
+
} else {
|
|
63
|
+
userContent.push({
|
|
64
|
+
type: "input_file",
|
|
65
|
+
filename: (_a = part.filename) != null ? _a : "data",
|
|
66
|
+
file_data: `data:${mediaType};base64,${convertToBase64(part.data)}`
|
|
53
67
|
});
|
|
54
|
-
break;
|
|
55
68
|
}
|
|
56
|
-
const mediaType = part.mediaType === "image/*" ? "image/jpeg" : part.mediaType;
|
|
57
|
-
userContent.push({
|
|
58
|
-
type: "input_image",
|
|
59
|
-
...part.data instanceof URL ? { image_url: part.data.toString() } : {
|
|
60
|
-
image_url: `data:${mediaType};base64,${convertToBase64(part.data)}`
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
69
|
break;
|
|
64
70
|
}
|
|
65
71
|
}
|
|
@@ -111,7 +117,7 @@ async function convertToOpenResponsesInput({
|
|
|
111
117
|
contentValue = output.value;
|
|
112
118
|
break;
|
|
113
119
|
case "execution-denied":
|
|
114
|
-
contentValue = (
|
|
120
|
+
contentValue = (_b = output.reason) != null ? _b : "Tool execution denied.";
|
|
115
121
|
break;
|
|
116
122
|
case "json":
|
|
117
123
|
case "error-json":
|
|
@@ -145,7 +151,7 @@ async function convertToOpenResponsesInput({
|
|
|
145
151
|
case "file-data": {
|
|
146
152
|
contentParts.push({
|
|
147
153
|
type: "input_file",
|
|
148
|
-
filename: (
|
|
154
|
+
filename: (_c = item.filename) != null ? _c : "data",
|
|
149
155
|
file_data: `data:${item.mediaType};base64,${item.data}`
|
|
150
156
|
});
|
|
151
157
|
break;
|
|
@@ -440,7 +446,6 @@ var OpenResponsesLanguageModel = class {
|
|
|
440
446
|
errorSchema: openResponsesErrorSchema,
|
|
441
447
|
errorToMessage: (error) => error.error.message
|
|
442
448
|
}),
|
|
443
|
-
// TODO consider validation
|
|
444
449
|
successfulResponseHandler: createEventSourceResponseHandler(z3.any()),
|
|
445
450
|
abortSignal: options.abortSignal,
|
|
446
451
|
fetch: this.config.fetch
|
|
@@ -486,7 +491,7 @@ var OpenResponsesLanguageModel = class {
|
|
|
486
491
|
unified: "other",
|
|
487
492
|
raw: void 0
|
|
488
493
|
};
|
|
489
|
-
const toolCallsByItemId =
|
|
494
|
+
const toolCallsByItemId = /* @__PURE__ */ new Map();
|
|
490
495
|
return {
|
|
491
496
|
stream: response.pipeThrough(
|
|
492
497
|
new TransformStream({
|
|
@@ -494,7 +499,7 @@ var OpenResponsesLanguageModel = class {
|
|
|
494
499
|
controller.enqueue({ type: "stream-start", warnings });
|
|
495
500
|
},
|
|
496
501
|
transform(parseResult, controller) {
|
|
497
|
-
var _a, _b, _c, _d, _e, _f, _g, _h
|
|
502
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
498
503
|
if (options.includeRawChunks) {
|
|
499
504
|
controller.enqueue({
|
|
500
505
|
type: "raw",
|
|
@@ -507,24 +512,36 @@ var OpenResponsesLanguageModel = class {
|
|
|
507
512
|
}
|
|
508
513
|
const chunk = parseResult.value;
|
|
509
514
|
if (chunk.type === "response.output_item.added" && chunk.item.type === "function_call") {
|
|
510
|
-
toolCallsByItemId
|
|
515
|
+
toolCallsByItemId.set(chunk.item.id, {
|
|
511
516
|
toolName: chunk.item.name,
|
|
512
517
|
toolCallId: chunk.item.call_id,
|
|
513
518
|
arguments: chunk.item.arguments
|
|
514
|
-
};
|
|
519
|
+
});
|
|
515
520
|
} else if (chunk.type === "response.function_call_arguments.delta") {
|
|
516
521
|
const functionCallChunk = chunk;
|
|
517
|
-
const toolCall = (
|
|
518
|
-
|
|
522
|
+
const toolCall = toolCallsByItemId.get(functionCallChunk.item_id);
|
|
523
|
+
if (toolCall == null) {
|
|
524
|
+
toolCallsByItemId.set(functionCallChunk.item_id, {
|
|
525
|
+
arguments: functionCallChunk.delta
|
|
526
|
+
});
|
|
527
|
+
return;
|
|
528
|
+
}
|
|
529
|
+
toolCall.arguments = ((_a = toolCall.arguments) != null ? _a : "") + functionCallChunk.delta;
|
|
519
530
|
} else if (chunk.type === "response.function_call_arguments.done") {
|
|
520
531
|
const functionCallChunk = chunk;
|
|
521
|
-
const toolCall = (
|
|
532
|
+
const toolCall = toolCallsByItemId.get(functionCallChunk.item_id);
|
|
533
|
+
if (toolCall == null) {
|
|
534
|
+
toolCallsByItemId.set(functionCallChunk.item_id, {
|
|
535
|
+
arguments: functionCallChunk.arguments
|
|
536
|
+
});
|
|
537
|
+
return;
|
|
538
|
+
}
|
|
522
539
|
toolCall.arguments = functionCallChunk.arguments;
|
|
523
540
|
} else if (chunk.type === "response.output_item.done" && chunk.item.type === "function_call") {
|
|
524
|
-
const toolCall = toolCallsByItemId
|
|
525
|
-
const toolName = (
|
|
526
|
-
const toolCallId = (
|
|
527
|
-
const input = (
|
|
541
|
+
const toolCall = toolCallsByItemId.get(chunk.item.id);
|
|
542
|
+
const toolName = (_b = toolCall == null ? void 0 : toolCall.toolName) != null ? _b : chunk.item.name;
|
|
543
|
+
const toolCallId = (_c = toolCall == null ? void 0 : toolCall.toolCallId) != null ? _c : chunk.item.call_id;
|
|
544
|
+
const input = (_e = (_d = toolCall == null ? void 0 : toolCall.arguments) != null ? _d : chunk.item.arguments) != null ? _e : "";
|
|
528
545
|
controller.enqueue({
|
|
529
546
|
type: "tool-call",
|
|
530
547
|
toolCallId,
|
|
@@ -532,7 +549,7 @@ var OpenResponsesLanguageModel = class {
|
|
|
532
549
|
input
|
|
533
550
|
});
|
|
534
551
|
hasToolCalls = true;
|
|
535
|
-
delete
|
|
552
|
+
toolCallsByItemId.delete(chunk.item.id);
|
|
536
553
|
} else if (chunk.type === "response.output_item.added" && chunk.item.type === "reasoning") {
|
|
537
554
|
controller.enqueue({
|
|
538
555
|
type: "reasoning-start",
|
|
@@ -560,7 +577,7 @@ var OpenResponsesLanguageModel = class {
|
|
|
560
577
|
} else if (chunk.type === "response.output_item.done" && chunk.item.type === "message") {
|
|
561
578
|
controller.enqueue({ type: "text-end", id: chunk.item.id });
|
|
562
579
|
} else if (chunk.type === "response.completed" || chunk.type === "response.incomplete") {
|
|
563
|
-
const reason = (
|
|
580
|
+
const reason = (_f = chunk.response.incomplete_details) == null ? void 0 : _f.reason;
|
|
564
581
|
finishReason = {
|
|
565
582
|
unified: mapOpenResponsesFinishReason({
|
|
566
583
|
finishReason: reason,
|
|
@@ -572,7 +589,7 @@ var OpenResponsesLanguageModel = class {
|
|
|
572
589
|
} else if (chunk.type === "response.failed") {
|
|
573
590
|
finishReason = {
|
|
574
591
|
unified: "error",
|
|
575
|
-
raw: (
|
|
592
|
+
raw: (_h = (_g = chunk.response.error) == null ? void 0 : _g.code) != null ? _h : chunk.response.status
|
|
576
593
|
};
|
|
577
594
|
updateUsage(chunk.response.usage);
|
|
578
595
|
}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/version.ts","../src/open-responses-provider.ts","../src/responses/open-responses-language-model.ts","../src/responses/convert-to-open-responses-input.ts","../src/responses/open-responses-api.ts","../src/responses/map-open-responses-finish-reason.ts","../src/responses/open-responses-options.ts"],"sourcesContent":["// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import {\n NoSuchModelError,\n type LanguageModelV3,\n type ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n generateId,\n loadApiKey,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { OpenResponsesLanguageModel } from './responses/open-responses-language-model';\nimport { VERSION } from './version';\n\nexport interface OpenResponsesProvider extends ProviderV3 {\n (modelId: string): LanguageModelV3;\n}\n\nexport interface OpenResponsesProviderSettings {\n /**\n * URL for the Open Responses API POST endpoint.\n */\n url: string;\n\n /**\n * Provider name. Used as key for provider options and metadata.\n */\n name: string;\n\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport function createOpenResponses(\n options: OpenResponsesProviderSettings,\n): OpenResponsesProvider {\n const providerName = options.name;\n\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n ...(options.apiKey\n ? {\n Authorization: `Bearer ${options.apiKey}`,\n }\n : {}),\n ...options.headers,\n },\n `ai-sdk/open-responses/${VERSION}`,\n );\n\n const createResponsesModel = (modelId: string) => {\n return new OpenResponsesLanguageModel(modelId, {\n provider: `${providerName}.responses`,\n providerOptionsName: providerName,\n headers: getHeaders,\n url: options.url,\n fetch: options.fetch,\n generateId: () => generateId(),\n });\n };\n\n const createLanguageModel = (modelId: string) => {\n if (new.target) {\n throw new Error(\n 'The OpenAI model function cannot be called with the new keyword.',\n );\n }\n\n return createResponsesModel(modelId);\n };\n\n const provider = function (modelId: string) {\n return createLanguageModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createLanguageModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider as OpenResponsesProvider;\n}\n","import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n LanguageModelV3Usage,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n jsonSchema,\n parseProviderOptions,\n postJsonToApi,\n type ParseResult,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { convertToOpenResponsesInput } from './convert-to-open-responses-input';\nimport {\n openResponsesErrorSchema,\n type FunctionToolParam,\n type OpenResponsesRequestBody,\n type OpenResponsesResponseBody,\n type OpenResponsesChunk,\n type ToolChoiceParam,\n} from './open-responses-api';\nimport { mapOpenResponsesFinishReason } from './map-open-responses-finish-reason';\nimport type { OpenResponsesConfig } from './open-responses-config';\nimport { openResponsesOptionsSchema } from './open-responses-options';\n\nexport class OpenResponsesLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n\n readonly modelId: string;\n\n private readonly config: OpenResponsesConfig;\n\n constructor(modelId: string, config: OpenResponsesConfig) {\n this.modelId = modelId;\n this.config = config;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'image/*': [/^https?:\\/\\/.*$/],\n };\n\n get provider(): string {\n return this.config.provider;\n }\n\n private async getArgs({\n maxOutputTokens,\n temperature,\n stopSequences,\n topP,\n topK,\n presencePenalty,\n frequencyPenalty,\n seed,\n prompt,\n providerOptions,\n tools,\n toolChoice,\n responseFormat,\n }: LanguageModelV3CallOptions): Promise<{\n body: Omit<OpenResponsesRequestBody, 'stream' | 'stream_options'>;\n warnings: SharedV3Warning[];\n }> {\n const warnings: SharedV3Warning[] = [];\n\n if (stopSequences != null) {\n warnings.push({ type: 'unsupported', feature: 'stopSequences' });\n }\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n\n if (seed != null) {\n warnings.push({ type: 'unsupported', feature: 'seed' });\n }\n\n const {\n input,\n instructions,\n warnings: inputWarnings,\n } = await convertToOpenResponsesInput({\n prompt,\n });\n\n warnings.push(...inputWarnings);\n\n // Convert function tools to the Open Responses format\n const functionTools: FunctionToolParam[] | undefined = tools\n ?.filter(tool => tool.type === 'function')\n .map(tool => ({\n type: 'function' as const,\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n }));\n\n // Convert tool choice to the Open Responses format\n const convertedToolChoice: ToolChoiceParam | undefined =\n toolChoice == null\n ? undefined\n : toolChoice.type === 'tool'\n ? { type: 'function', name: toolChoice.toolName }\n : toolChoice.type; // 'auto' | 'none' | 'required'\n\n const textFormat =\n responseFormat?.type === 'json'\n ? {\n type: 'json_schema' as const,\n ...(responseFormat.schema != null\n ? {\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n schema: responseFormat.schema,\n strict: true,\n }\n : {}),\n }\n : undefined;\n\n const openResponsesOptions = await parseProviderOptions({\n provider: this.config.providerOptionsName,\n providerOptions,\n schema: openResponsesOptionsSchema,\n });\n\n return {\n body: {\n model: this.modelId,\n input,\n instructions,\n max_output_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n presence_penalty: presencePenalty,\n frequency_penalty: frequencyPenalty,\n reasoning:\n openResponsesOptions?.reasoningEffort != null ||\n openResponsesOptions?.reasoningSummary != null\n ? {\n ...(openResponsesOptions?.reasoningEffort != null && {\n effort: openResponsesOptions.reasoningEffort,\n }),\n ...(openResponsesOptions?.reasoningSummary != null && {\n summary: openResponsesOptions.reasoningSummary,\n }),\n }\n : undefined,\n tools: functionTools?.length ? functionTools : undefined,\n tool_choice: convertedToolChoice,\n ...(textFormat != null && { text: { format: textFormat } }),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const { body, warnings } = await this.getArgs(options);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: openResponsesErrorSchema,\n errorToMessage: error => error.error.message,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n // do not validate the response body, only apply types to the response body\n jsonSchema<OpenResponsesResponseBody>(() => {\n throw new Error('json schema not implemented');\n }),\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const content: Array<LanguageModelV3Content> = [];\n let hasToolCalls = false;\n\n for (const part of response.output!) {\n switch (part.type) {\n // TODO AI SDK 7 adjust reasoning in the specification to better support the reasoning structure from open responses.\n case 'reasoning': {\n for (const contentPart of part.content ?? []) {\n content.push({\n type: 'reasoning',\n text: contentPart.text,\n });\n }\n break;\n }\n\n case 'message': {\n for (const contentPart of part.content) {\n content.push({\n type: 'text',\n text: contentPart.text,\n });\n }\n\n break;\n }\n\n case 'function_call': {\n hasToolCalls = true;\n content.push({\n type: 'tool-call',\n toolCallId: part.call_id,\n toolName: part.name,\n input: part.arguments,\n });\n break;\n }\n }\n }\n\n const usage = response.usage;\n const inputTokens = usage?.input_tokens;\n const cachedInputTokens = usage?.input_tokens_details?.cached_tokens;\n const outputTokens = usage?.output_tokens;\n const reasoningTokens = usage?.output_tokens_details?.reasoning_tokens;\n\n return {\n content,\n finishReason: {\n unified: mapOpenResponsesFinishReason({\n finishReason: response.incomplete_details?.reason,\n hasToolCalls,\n }),\n raw: response.incomplete_details?.reason ?? undefined,\n },\n usage: {\n inputTokens: {\n total: inputTokens,\n noCache: (inputTokens ?? 0) - (cachedInputTokens ?? 0),\n cacheRead: cachedInputTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: outputTokens,\n text: (outputTokens ?? 0) - (reasoningTokens ?? 0),\n reasoning: reasoningTokens,\n },\n raw: response.usage,\n },\n request: { body },\n response: {\n id: response.id,\n timestamp: new Date(response.created_at! * 1000),\n modelId: response.model,\n headers: responseHeaders,\n body: rawResponse,\n },\n providerMetadata: undefined,\n warnings,\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const { body, warnings } = await this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url,\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...body,\n stream: true,\n } satisfies OpenResponsesRequestBody,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: openResponsesErrorSchema,\n errorToMessage: error => error.error.message,\n }),\n // TODO consider validation\n successfulResponseHandler: createEventSourceResponseHandler(z.any()),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const usage: LanguageModelV3Usage = {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n };\n\n const updateUsage = (\n responseUsage?: OpenResponsesResponseBody['usage'],\n ) => {\n if (!responseUsage) {\n return;\n }\n\n const inputTokens = responseUsage.input_tokens;\n const cachedInputTokens =\n responseUsage.input_tokens_details?.cached_tokens;\n const outputTokens = responseUsage.output_tokens;\n const reasoningTokens =\n responseUsage.output_tokens_details?.reasoning_tokens;\n\n usage.inputTokens = {\n total: inputTokens,\n noCache: (inputTokens ?? 0) - (cachedInputTokens ?? 0),\n cacheRead: cachedInputTokens,\n cacheWrite: undefined,\n };\n usage.outputTokens = {\n total: outputTokens,\n text: (outputTokens ?? 0) - (reasoningTokens ?? 0),\n reasoning: reasoningTokens,\n };\n usage.raw = responseUsage;\n };\n\n let isActiveReasoning = false;\n let hasToolCalls = false;\n let finishReason: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n const toolCallsByItemId: Record<\n string,\n { toolName?: string; toolCallId?: string; arguments?: string }\n > = {};\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<OpenResponsesChunk>,\n LanguageModelV3StreamPart\n >({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(parseResult, controller) {\n if (options.includeRawChunks) {\n controller.enqueue({\n type: 'raw',\n rawValue: parseResult.rawValue,\n });\n }\n\n if (!parseResult.success) {\n controller.enqueue({ type: 'error', error: parseResult.error });\n return;\n }\n\n const chunk = parseResult.value;\n\n // Tool call events (single-shot tool-call when complete)\n if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'function_call'\n ) {\n toolCallsByItemId[chunk.item.id] = {\n toolName: chunk.item.name,\n toolCallId: chunk.item.call_id,\n arguments: chunk.item.arguments,\n };\n } else if (\n (chunk as { type: string }).type ===\n 'response.function_call_arguments.delta'\n ) {\n const functionCallChunk = chunk as {\n item_id: string;\n delta: string;\n };\n const toolCall =\n toolCallsByItemId[functionCallChunk.item_id] ??\n (toolCallsByItemId[functionCallChunk.item_id] = {});\n toolCall.arguments =\n (toolCall.arguments ?? '') + functionCallChunk.delta;\n } else if (\n (chunk as { type: string }).type ===\n 'response.function_call_arguments.done'\n ) {\n const functionCallChunk = chunk as {\n item_id: string;\n arguments: string;\n };\n const toolCall =\n toolCallsByItemId[functionCallChunk.item_id] ??\n (toolCallsByItemId[functionCallChunk.item_id] = {});\n toolCall.arguments = functionCallChunk.arguments;\n } else if (\n chunk.type === 'response.output_item.done' &&\n chunk.item.type === 'function_call'\n ) {\n const toolCall = toolCallsByItemId[chunk.item.id];\n const toolName = toolCall?.toolName ?? chunk.item.name;\n const toolCallId = toolCall?.toolCallId ?? chunk.item.call_id;\n const input = toolCall?.arguments ?? chunk.item.arguments ?? '';\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId,\n toolName,\n input,\n });\n hasToolCalls = true;\n\n delete toolCallsByItemId[chunk.item.id];\n }\n\n // Reasoning events (note: response.reasoning_text.delta is an LM Studio extension, not in official spec)\n else if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'reasoning'\n ) {\n controller.enqueue({\n type: 'reasoning-start',\n id: chunk.item.id,\n });\n isActiveReasoning = true;\n } else if (\n (chunk as { type: string }).type ===\n 'response.reasoning_text.delta'\n ) {\n const reasoningChunk = chunk as {\n item_id: string;\n delta: string;\n };\n controller.enqueue({\n type: 'reasoning-delta',\n id: reasoningChunk.item_id,\n delta: reasoningChunk.delta,\n });\n } else if (\n chunk.type === 'response.output_item.done' &&\n chunk.item.type === 'reasoning'\n ) {\n controller.enqueue({ type: 'reasoning-end', id: chunk.item.id });\n isActiveReasoning = false;\n }\n\n // Text events\n else if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'message'\n ) {\n controller.enqueue({ type: 'text-start', id: chunk.item.id });\n } else if (chunk.type === 'response.output_text.delta') {\n controller.enqueue({\n type: 'text-delta',\n id: chunk.item_id,\n delta: chunk.delta,\n });\n } else if (\n chunk.type === 'response.output_item.done' &&\n chunk.item.type === 'message'\n ) {\n controller.enqueue({ type: 'text-end', id: chunk.item.id });\n } else if (\n chunk.type === 'response.completed' ||\n chunk.type === 'response.incomplete'\n ) {\n const reason = chunk.response.incomplete_details?.reason;\n finishReason = {\n unified: mapOpenResponsesFinishReason({\n finishReason: reason,\n hasToolCalls,\n }),\n raw: reason ?? undefined,\n };\n updateUsage(chunk.response.usage);\n } else if (chunk.type === 'response.failed') {\n finishReason = {\n unified: 'error',\n raw: chunk.response.error?.code ?? chunk.response.status,\n };\n updateUsage(chunk.response.usage);\n }\n },\n\n flush(controller) {\n if (isActiveReasoning) {\n controller.enqueue({ type: 'reasoning-end', id: 'reasoning-0' });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage,\n providerMetadata: undefined,\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n","import type { LanguageModelV3Prompt, SharedV3Warning } from '@ai-sdk/provider';\nimport { convertToBase64 } from '@ai-sdk/provider-utils';\nimport type {\n FunctionCallItemParam,\n FunctionCallOutputItemParam,\n InputFileContentParam,\n InputImageContentParam,\n InputTextContentParam,\n OpenResponsesRequestBody,\n OutputTextContentParam,\n RefusalContentParam,\n} from './open-responses-api';\n\nexport async function convertToOpenResponsesInput({\n prompt,\n}: {\n prompt: LanguageModelV3Prompt;\n}): Promise<{\n input: OpenResponsesRequestBody['input'];\n instructions: string | undefined;\n warnings: Array<SharedV3Warning>;\n}> {\n const input: OpenResponsesRequestBody['input'] = [];\n const warnings: Array<SharedV3Warning> = [];\n const systemMessages: string[] = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n systemMessages.push(content);\n break;\n }\n\n case 'user': {\n const userContent: Array<\n InputTextContentParam | InputImageContentParam | InputFileContentParam\n > = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n userContent.push({ type: 'input_text', text: part.text });\n break;\n }\n case 'file': {\n if (!part.mediaType.startsWith('image/')) {\n warnings.push({\n type: 'other',\n message: `unsupported file content type: ${part.mediaType}`,\n });\n break;\n }\n\n const mediaType =\n part.mediaType === 'image/*' ? 'image/jpeg' : part.mediaType;\n\n userContent.push({\n type: 'input_image',\n ...(part.data instanceof URL\n ? { image_url: part.data.toString() }\n : {\n image_url: `data:${mediaType};base64,${convertToBase64(part.data)}`,\n }),\n });\n break;\n }\n }\n }\n\n input.push({ type: 'message', role: 'user', content: userContent });\n break;\n }\n\n case 'assistant': {\n const assistantContent: Array<\n OutputTextContentParam | RefusalContentParam\n > = [];\n const toolCalls: Array<FunctionCallItemParam> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n assistantContent.push({ type: 'output_text', text: part.text });\n break;\n }\n case 'tool-call': {\n const argumentsValue =\n typeof part.input === 'string'\n ? part.input\n : JSON.stringify(part.input);\n toolCalls.push({\n type: 'function_call',\n call_id: part.toolCallId,\n name: part.toolName,\n arguments: argumentsValue,\n });\n break;\n }\n }\n }\n\n // Push assistant message with text content if any\n if (assistantContent.length > 0) {\n input.push({\n type: 'message',\n role: 'assistant',\n content: assistantContent,\n });\n }\n\n // Push function calls as separate items\n for (const toolCall of toolCalls) {\n input.push(toolCall);\n }\n\n break;\n }\n\n case 'tool': {\n for (const part of content) {\n if (part.type === 'tool-result') {\n const output = part.output;\n let contentValue: FunctionCallOutputItemParam['output'];\n\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'execution-denied':\n contentValue = output.reason ?? 'Tool execution denied.';\n break;\n case 'json':\n case 'error-json':\n contentValue = JSON.stringify(output.value);\n break;\n case 'content': {\n const contentParts: Array<\n | InputTextContentParam\n | InputImageContentParam\n | InputFileContentParam\n > = [];\n for (const item of output.value) {\n switch (item.type) {\n case 'text': {\n contentParts.push({\n type: 'input_text',\n text: item.text,\n });\n break;\n }\n case 'image-data': {\n contentParts.push({\n type: 'input_image',\n image_url: `data:${item.mediaType};base64,${item.data}`,\n });\n break;\n }\n case 'image-url': {\n contentParts.push({\n type: 'input_image',\n image_url: item.url,\n });\n break;\n }\n case 'file-data': {\n contentParts.push({\n type: 'input_file',\n filename: item.filename ?? 'data',\n file_data: `data:${item.mediaType};base64,${item.data}`,\n });\n break;\n }\n default: {\n warnings.push({\n type: 'other',\n message: `unsupported tool content part type: ${(item as { type: string }).type}`,\n });\n break;\n }\n }\n }\n contentValue = contentParts;\n break;\n }\n }\n\n input.push({\n type: 'function_call_output',\n call_id: part.toolCallId,\n output: contentValue,\n });\n }\n }\n break;\n }\n }\n }\n\n return {\n input,\n instructions:\n systemMessages.length > 0 ? systemMessages.join('\\n') : undefined,\n warnings,\n };\n}\n","import type { JSONSchema7 } from '@ai-sdk/provider';\nimport { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const openResponsesErrorSchema = lazySchema(() =>\n zodSchema(\n z.object({\n error: z.object({\n message: z.string(),\n type: z.string(),\n param: z.string(),\n code: z.string(),\n }),\n }),\n ),\n);\n\n// ============================================================================\n// Enums\n// ============================================================================\n\n/**\n * The status of a function call or message item.\n */\nexport type FunctionCallStatus = 'in_progress' | 'completed' | 'incomplete';\n\n/**\n * Image detail level for input images.\n */\nexport type ImageDetail = 'low' | 'high' | 'auto';\n\n/**\n * Reasoning effort level.\n */\nexport type ReasoningEffortEnum = 'none' | 'low' | 'medium' | 'high' | 'xhigh';\n\n/**\n * Reasoning summary level.\n */\nexport type ReasoningSummaryEnum = 'concise' | 'detailed' | 'auto';\n\n/**\n * Tool choice value enum.\n */\nexport type ToolChoiceValueEnum = 'none' | 'auto' | 'required';\n\n/**\n * Verbosity level for text output.\n */\nexport type VerbosityEnum = 'low' | 'medium' | 'high';\n\n// ============================================================================\n// Content Types\n// ============================================================================\n\n/**\n * A text input to the model.\n */\nexport type InputTextContentParam = {\n type: 'input_text';\n text: string;\n};\n\n/**\n * An image input to the model.\n */\nexport type InputImageContentParam = {\n type: 'input_image';\n image_url?: string;\n detail?: ImageDetail;\n};\n\n/**\n * A file input to the model.\n */\nexport type InputFileContentParam = {\n type: 'input_file';\n filename?: string;\n file_data?: string;\n file_url?: string;\n};\n\n/**\n * A video input to the model.\n */\nexport type InputVideoContent = {\n type: 'input_video';\n video_url: string;\n};\n\n/**\n * A text output from the model.\n */\nexport type OutputTextContentParam = {\n type: 'output_text';\n text: string;\n annotations?: UrlCitationParam[];\n};\n\n/**\n * A refusal from the model.\n */\nexport type RefusalContentParam = {\n type: 'refusal';\n refusal: string;\n};\n\n/**\n * A URL citation annotation.\n */\nexport type UrlCitationParam = {\n type: 'url_citation';\n start_index: number;\n end_index: number;\n url: string;\n title: string;\n};\n\n/**\n * Reasoning summary content.\n */\nexport type ReasoningSummaryContentParam = {\n type: 'summary_text';\n text: string;\n};\n\n// ============================================================================\n// Message Item Types\n// ============================================================================\n\n/**\n * An internal identifier for an item to reference.\n */\nexport type ItemReferenceParam = {\n type?: 'item_reference';\n id: string;\n};\n\n/**\n * A reasoning item.\n */\nexport type ReasoningItemParam = {\n id?: string;\n type: 'reasoning';\n summary: ReasoningSummaryContentParam[];\n content?: unknown;\n encrypted_content?: string;\n};\n\n/**\n * A user message item.\n */\nexport type UserMessageItemParam = {\n id?: string;\n type: 'message';\n role: 'user';\n content:\n | string\n | Array<\n InputTextContentParam | InputImageContentParam | InputFileContentParam\n >;\n status?: string;\n};\n\n/**\n * A system message item.\n */\nexport type SystemMessageItemParam = {\n id?: string;\n type: 'message';\n role: 'system';\n content: string | InputTextContentParam[];\n status?: string;\n};\n\n/**\n * A developer message item.\n */\nexport type DeveloperMessageItemParam = {\n id?: string;\n type: 'message';\n role: 'developer';\n content: string | InputTextContentParam[];\n status?: string;\n};\n\n/**\n * An assistant message item.\n */\nexport type AssistantMessageItemParam = {\n id?: string;\n type: 'message';\n role: 'assistant';\n content: string | Array<OutputTextContentParam | RefusalContentParam>;\n status?: string;\n};\n\n/**\n * A function call item.\n */\nexport type FunctionCallItemParam = {\n id?: string;\n call_id: string;\n type: 'function_call';\n name: string;\n arguments: string;\n status?: FunctionCallStatus;\n};\n\n/**\n * A function call output item.\n */\nexport type FunctionCallOutputItemParam = {\n id?: string;\n call_id: string;\n type: 'function_call_output';\n output:\n | string\n | Array<\n | InputTextContentParam\n | InputImageContentParam\n | InputFileContentParam\n | InputVideoContent\n >;\n status?: FunctionCallStatus;\n};\n\n// ============================================================================\n// Tool Types\n// ============================================================================\n\n/**\n * A function tool parameter.\n */\nexport type FunctionToolParam = {\n name: string;\n description?: string;\n parameters?: JSONSchema7;\n strict?: boolean;\n type: 'function';\n};\n\n/**\n * A specific function tool choice.\n */\nexport type SpecificFunctionParam = {\n type: 'function';\n name: string;\n};\n\n/**\n * Allowed tools parameter.\n */\nexport type AllowedToolsParam = {\n type: 'allowed_tools';\n tools: SpecificFunctionParam[];\n mode?: ToolChoiceValueEnum;\n};\n\n/**\n * Controls which tool the model should use, if any.\n */\nexport type ToolChoiceParam =\n | ToolChoiceValueEnum\n | SpecificFunctionParam\n | AllowedToolsParam;\n\n// ============================================================================\n// Configuration Types\n// ============================================================================\n\n/**\n * Set of 16 key-value pairs that can be attached to an object.\n */\nexport type MetadataParam = Record<string, string>;\n\n/**\n * Text response format (plain text).\n */\nexport type TextResponseFormat = {\n type: 'text';\n};\n\n/**\n * JSON schema response format.\n */\nexport type JsonSchemaResponseFormatParam = {\n type: 'json_schema';\n description?: string;\n name?: string;\n schema?: JSONSchema7;\n strict?: boolean;\n};\n\n/**\n * Configuration options for text output.\n */\nexport type TextParam = {\n format?: TextResponseFormat | JsonSchemaResponseFormatParam;\n verbosity?: VerbosityEnum;\n};\n\n/**\n * Options that control streamed response behavior.\n */\nexport type StreamOptionsParam = {\n include_obfuscation?: boolean;\n};\n\n/**\n * Configuration options for reasoning behavior.\n */\nexport type ReasoningParam = {\n effort?: ReasoningEffortEnum;\n summary?: ReasoningSummaryEnum;\n};\n\n// ============================================================================\n// Response-Specific Types\n// ============================================================================\n\n/**\n * The status of a message item in the response.\n */\nexport type MessageStatus = 'in_progress' | 'completed' | 'incomplete';\n\n/**\n * Truncation enum for responses.\n */\nexport type TruncationEnum = 'auto' | 'disabled';\n\n/**\n * Service tier enum.\n */\nexport type ServiceTierEnum = 'auto' | 'default' | 'flex' | 'priority';\n\n/**\n * A top log probability of a token.\n */\nexport type TopLogProb = {\n token: string;\n logprob: number;\n bytes: number[];\n};\n\n/**\n * The log probability of a token.\n */\nexport type LogProb = {\n token: string;\n logprob: number;\n bytes: number[];\n top_logprobs: TopLogProb[];\n};\n\n/**\n * A URL citation annotation in a response.\n */\nexport type UrlCitationBody = {\n type: 'url_citation';\n url: string;\n start_index: number;\n end_index: number;\n title: string;\n};\n\n/**\n * An annotation that applies to a span of output text.\n */\nexport type Annotation = UrlCitationBody;\n\n/**\n * A text input content in a response.\n */\nexport type InputTextContent = {\n type: 'input_text';\n text: string;\n};\n\n/**\n * A text output from the model in a response.\n */\nexport type OutputTextContent = {\n type: 'output_text';\n text: string;\n annotations: Annotation[];\n logprobs: LogProb[];\n};\n\n/**\n * A refusal from the model in a response.\n */\nexport type RefusalContent = {\n type: 'refusal';\n refusal: string;\n};\n\n/**\n * Reasoning text from the model.\n */\nexport type ReasoningTextContent = {\n type: 'reasoning_text';\n text: string;\n};\n\n/**\n * A summary text from the model.\n */\nexport type SummaryTextContent = {\n type: 'summary_text';\n text: string;\n};\n\n/**\n * An image input content in a response.\n */\nexport type InputImageContent = {\n type: 'input_image';\n image_url?: string;\n detail: ImageDetail;\n};\n\n/**\n * A file input content in a response.\n */\nexport type InputFileContent = {\n type: 'input_file';\n filename?: string;\n file_url?: string;\n};\n\n/**\n * A message in the response.\n */\nexport type Message = {\n type: 'message';\n id: string;\n status: MessageStatus;\n role: 'user' | 'assistant' | 'system' | 'developer';\n content: InputTextContent[];\n};\n\n/**\n * A function tool call that was generated by the model.\n */\nexport type FunctionCall = {\n type: 'function_call';\n id: string;\n call_id: string;\n name: string;\n arguments: string;\n status: FunctionCallStatus;\n};\n\n/**\n * A function tool call output that was returned.\n */\nexport type FunctionCallOutput = {\n type: 'function_call_output';\n id: string;\n call_id: string;\n output:\n | string\n | Array<InputTextContent | InputImageContent | InputFileContent>;\n status: FunctionCallStatus;\n};\n\n/**\n * A reasoning item that was generated by the model.\n */\nexport type ReasoningBody = {\n type: 'reasoning';\n id: string;\n content?: InputTextContent[];\n summary: InputTextContent[];\n encrypted_content?: string;\n};\n\n/**\n * Output item field union type.\n */\nexport type OutputItem =\n | FunctionCall\n | FunctionCallOutput\n | Message\n | ReasoningBody;\n\n/**\n * Details about why the response was incomplete.\n */\nexport type IncompleteDetails = {\n reason: string;\n};\n\n/**\n * An error that occurred while generating the response.\n */\nexport type ResponseError = {\n code: string;\n message: string;\n};\n\n/**\n * A function tool in a response.\n */\nexport type FunctionTool = {\n type: 'function';\n name: string;\n description?: string;\n parameters?: JSONSchema7;\n strict?: boolean;\n};\n\n/**\n * Function tool choice in a response.\n */\nexport type FunctionToolChoice = {\n type: 'function';\n name?: string;\n};\n\n/**\n * Allowed tool choice in a response.\n */\nexport type AllowedToolChoice = {\n type: 'allowed_tools';\n tools: FunctionToolChoice[];\n mode: ToolChoiceValueEnum;\n};\n\n/**\n * Tool choice in a response.\n */\nexport type ResponseToolChoice =\n | ToolChoiceValueEnum\n | FunctionToolChoice\n | AllowedToolChoice;\n\n/**\n * JSON object response format.\n */\nexport type JsonObjectResponseFormat = {\n type: 'json_object';\n};\n\n/**\n * JSON schema response format in a response.\n */\nexport type JsonSchemaResponseFormat = {\n type: 'json_schema';\n name: string;\n description?: string;\n schema: unknown;\n strict: boolean;\n};\n\n/**\n * Text field in a response.\n */\nexport type TextField = {\n format?:\n | TextResponseFormat\n | JsonObjectResponseFormat\n | JsonSchemaResponseFormat;\n verbosity?: VerbosityEnum;\n};\n\n/**\n * A breakdown of input token usage that was recorded.\n */\nexport type InputTokensDetails = {\n cached_tokens: number;\n};\n\n/**\n * A breakdown of output token usage that was recorded.\n */\nexport type OutputTokensDetails = {\n reasoning_tokens: number;\n};\n\n/**\n * Token usage statistics that were recorded for the response.\n */\nexport type Usage = {\n input_tokens: number;\n output_tokens: number;\n total_tokens: number;\n input_tokens_details: InputTokensDetails;\n output_tokens_details: OutputTokensDetails;\n};\n\n/**\n * Reasoning configuration and outputs that were produced for this response.\n */\nexport type Reasoning = {\n effort?: ReasoningEffortEnum;\n summary?: ReasoningSummaryEnum;\n};\n\n// ============================================================================\n// Request Body\n// ============================================================================\n\n/**\n * Body that is sent to the Open Responses API.\n */\nexport type OpenResponsesRequestBody = {\n /**\n * The model to use for this request, e.g. 'gpt-5.4'.\n */\n model: string;\n\n /**\n * Context for the model: either a string (interpreted as a user message),\n * or an array of structured message items.\n */\n input:\n | string\n | Array<\n | ItemReferenceParam\n | ReasoningItemParam\n | UserMessageItemParam\n | SystemMessageItemParam\n | DeveloperMessageItemParam\n | AssistantMessageItemParam\n | FunctionCallItemParam\n | FunctionCallOutputItemParam\n >;\n\n /**\n * The ID of the response to use as the prior turn for this request.\n */\n previous_response_id?: string;\n\n /**\n * Options specifying extra values to include in the response.\n */\n include?: Array<\n 'reasoning.encrypted_content' | 'message.output_text.logprobs'\n >;\n\n /**\n * A list of tools that the model may call while generating the response.\n */\n tools?: FunctionToolParam[];\n\n /**\n * Controls which tool the model should use, if any.\n */\n tool_choice?: ToolChoiceParam;\n\n /**\n * Structured metadata as up to 16 key-value pairs.\n */\n metadata?: MetadataParam;\n\n /**\n * Configuration options for text output.\n */\n text?: TextParam;\n\n /**\n * Sampling temperature to use, between 0 and 2.\n */\n temperature?: number;\n\n /**\n * Nucleus sampling parameter, between 0 and 1.\n */\n top_p?: number;\n\n /**\n * Penalizes new tokens based on whether they appear in the text so far.\n */\n presence_penalty?: number;\n\n /**\n * Penalizes new tokens based on their frequency in the text so far.\n */\n frequency_penalty?: number;\n\n /**\n * Whether the model may call multiple tools in parallel.\n */\n parallel_tool_calls?: boolean;\n\n /**\n * Whether to stream response events as server-sent events.\n */\n stream?: boolean;\n\n /**\n * Options that control streamed response behavior.\n */\n stream_options?: StreamOptionsParam;\n\n /**\n * Whether to run the request in the background and return immediately.\n */\n background?: boolean;\n\n /**\n * Maximum number of tokens the model may generate.\n */\n max_output_tokens?: number;\n\n /**\n * Maximum number of tool calls the model may make while generating the response.\n */\n max_tool_calls?: number;\n\n /**\n * Configuration options for reasoning behavior.\n */\n reasoning?: ReasoningParam;\n\n /**\n * A stable identifier used for safety monitoring and abuse detection.\n */\n safety_identifier?: string;\n\n /**\n * A key to use when reading/writing to the prompt cache.\n */\n prompt_cache_key?: string;\n\n /**\n * Controls how input is truncated if it exceeds the model's context window.\n * - 'auto': Let the service decide how to truncate.\n * - 'disabled': Disable truncation. Context overflow yields 400 error.\n */\n truncation?: 'auto' | 'disabled';\n\n /**\n * Additional instructions to guide the model for this request.\n */\n instructions?: string;\n\n /**\n * Whether to store the response so it can be retrieved later.\n */\n store?: boolean;\n\n /**\n * The service tier to use for this request.\n * - 'auto' | 'default' | 'flex' | 'priority'\n */\n service_tier?: 'auto' | 'default' | 'flex' | 'priority';\n\n /**\n * Number of most likely tokens to return at each position, with logprobs.\n */\n top_logprobs?: number;\n};\n\n// ============================================================================\n// Response Body\n// ============================================================================\n\n/**\n * Response body from the Open Responses API.\n */\nexport type OpenResponsesResponseBody = {\n /**\n * The unique ID of the response that was created.\n */\n id: string;\n\n /**\n * The object type, which is always 'response'.\n */\n object: 'response';\n\n /**\n * The Unix timestamp (in seconds) for when the response was created.\n */\n created_at: number;\n\n /**\n * The Unix timestamp (in seconds) for when the response was completed, if it was completed.\n */\n completed_at?: number;\n\n /**\n * The status that was set for the response.\n */\n status: string;\n\n /**\n * Details about why the response was incomplete, if applicable.\n */\n incomplete_details?: IncompleteDetails;\n\n /**\n * The model that generated this response.\n */\n model: string;\n\n /**\n * The ID of the previous response in the chain that was referenced, if any.\n */\n previous_response_id?: string;\n\n /**\n * Additional instructions that were used to guide the model for this response.\n */\n instructions?: string;\n\n /**\n * The output items that were generated by the model.\n */\n output: OutputItem[];\n\n /**\n * The error that occurred, if the response failed.\n */\n error?: ResponseError;\n\n /**\n * The tools that were available to the model during response generation.\n */\n tools?: FunctionTool[];\n\n /**\n * The tool choice configuration that was used.\n */\n tool_choice?: ResponseToolChoice;\n\n /**\n * How the input was truncated by the service when it exceeded the model context window.\n */\n truncation?: TruncationEnum;\n\n /**\n * Whether the model was allowed to call multiple tools in parallel.\n */\n parallel_tool_calls?: boolean;\n\n /**\n * Configuration options for text output that were used.\n */\n text?: TextField;\n\n /**\n * The nucleus sampling parameter that was used for this response.\n */\n top_p?: number;\n\n /**\n * The presence penalty that was used.\n */\n presence_penalty?: number;\n\n /**\n * The frequency penalty that was used.\n */\n frequency_penalty?: number;\n\n /**\n * The number of most likely tokens that were returned at each position.\n */\n top_logprobs?: number;\n\n /**\n * The sampling temperature that was used for this response.\n */\n temperature?: number;\n\n /**\n * Reasoning configuration and outputs that were produced for this response.\n */\n reasoning?: Reasoning;\n\n /**\n * Token usage statistics that were recorded for the response, if available.\n */\n usage?: Usage;\n\n /**\n * The maximum number of tokens the model was allowed to generate for this response.\n */\n max_output_tokens?: number;\n\n /**\n * The maximum number of tool calls the model was allowed to make.\n */\n max_tool_calls?: number;\n\n /**\n * Whether this response was stored so it can be retrieved later.\n */\n store?: boolean;\n\n /**\n * Whether this request was run in the background.\n */\n background?: boolean;\n\n /**\n * The service tier that was used for this response.\n */\n service_tier?: string;\n\n /**\n * Developer-defined metadata that was associated with the response.\n */\n metadata?: unknown;\n\n /**\n * A stable identifier that was used for safety monitoring and abuse detection.\n */\n safety_identifier?: string;\n\n /**\n * A key that was used to read from or write to the prompt cache.\n */\n prompt_cache_key?: string;\n};\n\n// ============================================================================\n// Streaming Chunk Types\n// ============================================================================\n\n/**\n * Content part for streaming - output text.\n */\nexport type OutputTextContentPart = {\n type: 'output_text';\n text: string;\n annotations: Annotation[];\n};\n\n/**\n * Content part for streaming - refusal.\n */\nexport type RefusalContentPart = {\n type: 'refusal';\n refusal: string;\n};\n\n/**\n * Union of content parts that can appear in streaming.\n */\nexport type ContentPart = OutputTextContentPart | RefusalContentPart;\n\n// ----------------------------------------------------------------------------\n// State Machine Events\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when a response is created.\n */\nexport type ResponseCreatedEvent = {\n type: 'response.created';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n/**\n * Emitted when a response transitions to in_progress status.\n */\nexport type ResponseInProgressEvent = {\n type: 'response.in_progress';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n/**\n * Emitted when a response completes successfully.\n */\nexport type ResponseCompletedEvent = {\n type: 'response.completed';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n/**\n * Emitted when a response fails.\n */\nexport type ResponseFailedEvent = {\n type: 'response.failed';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n/**\n * Emitted when a response is incomplete (e.g., token budget exhausted).\n */\nexport type ResponseIncompleteEvent = {\n type: 'response.incomplete';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Output Items\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when a new output item is added to the response.\n */\nexport type ResponseOutputItemAddedEvent = {\n type: 'response.output_item.added';\n sequence_number: number;\n output_index: number;\n item: OutputItem;\n};\n\n/**\n * Emitted when an output item is completed.\n */\nexport type ResponseOutputItemDoneEvent = {\n type: 'response.output_item.done';\n sequence_number: number;\n output_index: number;\n item: OutputItem;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Content Parts\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when a new content part is added to an item.\n */\nexport type ResponseContentPartAddedEvent = {\n type: 'response.content_part.added';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n part: ContentPart;\n};\n\n/**\n * Emitted when a content part is completed.\n */\nexport type ResponseContentPartDoneEvent = {\n type: 'response.content_part.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n part: ContentPart;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Text Output\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when text is appended to an output.\n */\nexport type ResponseOutputTextDeltaEvent = {\n type: 'response.output_text.delta';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n delta: string;\n logprobs?: LogProb[];\n};\n\n/**\n * Emitted when text output is complete.\n */\nexport type ResponseOutputTextDoneEvent = {\n type: 'response.output_text.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n text: string;\n logprobs?: LogProb[];\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Refusal\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when refusal text is appended.\n */\nexport type ResponseRefusalDeltaEvent = {\n type: 'response.refusal.delta';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n delta: string;\n};\n\n/**\n * Emitted when refusal is complete.\n */\nexport type ResponseRefusalDoneEvent = {\n type: 'response.refusal.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n refusal: string;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Function Call Arguments\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when function call arguments are appended.\n */\nexport type ResponseFunctionCallArgumentsDeltaEvent = {\n type: 'response.function_call_arguments.delta';\n sequence_number: number;\n item_id: string;\n output_index: number;\n call_id: string;\n delta: string;\n};\n\n/**\n * Emitted when function call arguments are complete.\n */\nexport type ResponseFunctionCallArgumentsDoneEvent = {\n type: 'response.function_call_arguments.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n call_id: string;\n arguments: string;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Reasoning\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when reasoning summary text is appended.\n */\nexport type ResponseReasoningSummaryTextDeltaEvent = {\n type: 'response.reasoning_summary_text.delta';\n sequence_number: number;\n item_id: string;\n output_index: number;\n summary_index: number;\n delta: string;\n};\n\n/**\n * Emitted when reasoning summary text is complete.\n */\nexport type ResponseReasoningSummaryTextDoneEvent = {\n type: 'response.reasoning_summary_text.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n summary_index: number;\n text: string;\n};\n\n/**\n * Emitted when a reasoning summary part is added.\n */\nexport type ResponseReasoningSummaryPartAddedEvent = {\n type: 'response.reasoning_summary_part.added';\n sequence_number: number;\n item_id: string;\n output_index: number;\n summary_index: number;\n part: SummaryTextContent;\n};\n\n/**\n * Emitted when a reasoning summary part is complete.\n */\nexport type ResponseReasoningSummaryPartDoneEvent = {\n type: 'response.reasoning_summary_part.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n summary_index: number;\n part: SummaryTextContent;\n};\n\n// ----------------------------------------------------------------------------\n// Error Event\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when an error occurs during streaming.\n */\nexport type ResponseErrorEvent = {\n type: 'error';\n sequence_number: number;\n error: ResponseError;\n};\n\n// ----------------------------------------------------------------------------\n// Union Type for All Streaming Chunks\n// ----------------------------------------------------------------------------\n\n/**\n * Union of all streaming chunk event types from the Open Responses API.\n *\n * Streaming events fall into two categories:\n * - **State Machine Events**: Represent status changes (e.g., `response.in_progress`, `response.completed`)\n * - **Delta Events**: Represent incremental changes (e.g., `response.output_text.delta`, `response.output_item.added`)\n */\nexport type OpenResponsesChunk =\n // State Machine Events\n | ResponseCreatedEvent\n | ResponseInProgressEvent\n | ResponseCompletedEvent\n | ResponseFailedEvent\n | ResponseIncompleteEvent\n // Delta Events - Output Items\n | ResponseOutputItemAddedEvent\n | ResponseOutputItemDoneEvent\n // Delta Events - Content Parts\n | ResponseContentPartAddedEvent\n | ResponseContentPartDoneEvent\n // Delta Events - Text Output\n | ResponseOutputTextDeltaEvent\n | ResponseOutputTextDoneEvent\n // Delta Events - Refusal\n | ResponseRefusalDeltaEvent\n | ResponseRefusalDoneEvent\n // Delta Events - Function Call Arguments\n | ResponseFunctionCallArgumentsDeltaEvent\n | ResponseFunctionCallArgumentsDoneEvent\n // Delta Events - Reasoning\n | ResponseReasoningSummaryTextDeltaEvent\n | ResponseReasoningSummaryTextDoneEvent\n | ResponseReasoningSummaryPartAddedEvent\n | ResponseReasoningSummaryPartDoneEvent\n // Error Event\n | ResponseErrorEvent;\n","import type { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapOpenResponsesFinishReason({\n finishReason,\n hasToolCalls,\n}: {\n finishReason: string | null | undefined;\n hasToolCalls: boolean;\n}): LanguageModelV3FinishReason['unified'] {\n switch (finishReason) {\n case undefined:\n case null:\n return hasToolCalls ? 'tool-calls' : 'stop';\n case 'max_output_tokens':\n return 'length';\n case 'content_filter':\n return 'content-filter';\n default:\n return hasToolCalls ? 'tool-calls' : 'other';\n }\n}\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const openResponsesOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n reasoningEffort: z\n .enum(['none', 'low', 'medium', 'high', 'xhigh'])\n .nullish(),\n /**\n * Controls reasoning summary output from the model.\n * Valid values: 'concise', 'detailed', 'auto'.\n */\n reasoningSummary: z.enum(['concise', 'detailed', 'auto']).nullish(),\n }),\n ),\n);\n\nexport type OpenResponsesOptions = InferSchema<\n typeof openResponsesOptionsSchema\n>;\n"],"mappings":"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","names":["z","lazySchema","zodSchema","z","z"]}
|
|
1
|
+
{"version":3,"sources":["../src/version.ts","../src/open-responses-provider.ts","../src/responses/open-responses-language-model.ts","../src/responses/convert-to-open-responses-input.ts","../src/responses/open-responses-api.ts","../src/responses/map-open-responses-finish-reason.ts","../src/responses/open-responses-options.ts"],"sourcesContent":["// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import {\n NoSuchModelError,\n type LanguageModelV3,\n type ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n generateId,\n loadApiKey,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { OpenResponsesLanguageModel } from './responses/open-responses-language-model';\nimport { VERSION } from './version';\n\nexport interface OpenResponsesProvider extends ProviderV3 {\n (modelId: string): LanguageModelV3;\n}\n\nexport interface OpenResponsesProviderSettings {\n /**\n * URL for the Open Responses API POST endpoint.\n */\n url: string;\n\n /**\n * Provider name. Used as key for provider options and metadata.\n */\n name: string;\n\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport function createOpenResponses(\n options: OpenResponsesProviderSettings,\n): OpenResponsesProvider {\n const providerName = options.name;\n\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n ...(options.apiKey\n ? {\n Authorization: `Bearer ${options.apiKey}`,\n }\n : {}),\n ...options.headers,\n },\n `ai-sdk/open-responses/${VERSION}`,\n );\n\n const createResponsesModel = (modelId: string) => {\n return new OpenResponsesLanguageModel(modelId, {\n provider: `${providerName}.responses`,\n providerOptionsName: providerName,\n headers: getHeaders,\n url: options.url,\n fetch: options.fetch,\n generateId: () => generateId(),\n });\n };\n\n const createLanguageModel = (modelId: string) => {\n if (new.target) {\n throw new Error(\n 'The OpenAI model function cannot be called with the new keyword.',\n );\n }\n\n return createResponsesModel(modelId);\n };\n\n const provider = function (modelId: string) {\n return createLanguageModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createLanguageModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider as OpenResponsesProvider;\n}\n","import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n LanguageModelV3Usage,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n jsonSchema,\n parseProviderOptions,\n postJsonToApi,\n type ParseResult,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { convertToOpenResponsesInput } from './convert-to-open-responses-input';\nimport {\n openResponsesErrorSchema,\n type FunctionToolParam,\n type OpenResponsesRequestBody,\n type OpenResponsesResponseBody,\n type OpenResponsesChunk,\n type ToolChoiceParam,\n} from './open-responses-api';\nimport { mapOpenResponsesFinishReason } from './map-open-responses-finish-reason';\nimport type { OpenResponsesConfig } from './open-responses-config';\nimport { openResponsesOptionsSchema } from './open-responses-options';\n\nexport class OpenResponsesLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n\n readonly modelId: string;\n\n private readonly config: OpenResponsesConfig;\n\n constructor(modelId: string, config: OpenResponsesConfig) {\n this.modelId = modelId;\n this.config = config;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'image/*': [/^https?:\\/\\/.*$/],\n };\n\n get provider(): string {\n return this.config.provider;\n }\n\n private async getArgs({\n maxOutputTokens,\n temperature,\n stopSequences,\n topP,\n topK,\n presencePenalty,\n frequencyPenalty,\n seed,\n prompt,\n providerOptions,\n tools,\n toolChoice,\n responseFormat,\n }: LanguageModelV3CallOptions): Promise<{\n body: Omit<OpenResponsesRequestBody, 'stream' | 'stream_options'>;\n warnings: SharedV3Warning[];\n }> {\n const warnings: SharedV3Warning[] = [];\n\n if (stopSequences != null) {\n warnings.push({ type: 'unsupported', feature: 'stopSequences' });\n }\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n\n if (seed != null) {\n warnings.push({ type: 'unsupported', feature: 'seed' });\n }\n\n const {\n input,\n instructions,\n warnings: inputWarnings,\n } = await convertToOpenResponsesInput({\n prompt,\n });\n\n warnings.push(...inputWarnings);\n\n // Convert function tools to the Open Responses format\n const functionTools: FunctionToolParam[] | undefined = tools\n ?.filter(tool => tool.type === 'function')\n .map(tool => ({\n type: 'function' as const,\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n }));\n\n // Convert tool choice to the Open Responses format\n const convertedToolChoice: ToolChoiceParam | undefined =\n toolChoice == null\n ? undefined\n : toolChoice.type === 'tool'\n ? { type: 'function', name: toolChoice.toolName }\n : toolChoice.type; // 'auto' | 'none' | 'required'\n\n const textFormat =\n responseFormat?.type === 'json'\n ? {\n type: 'json_schema' as const,\n ...(responseFormat.schema != null\n ? {\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n schema: responseFormat.schema,\n strict: true,\n }\n : {}),\n }\n : undefined;\n\n const openResponsesOptions = await parseProviderOptions({\n provider: this.config.providerOptionsName,\n providerOptions,\n schema: openResponsesOptionsSchema,\n });\n\n return {\n body: {\n model: this.modelId,\n input,\n instructions,\n max_output_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n presence_penalty: presencePenalty,\n frequency_penalty: frequencyPenalty,\n reasoning:\n openResponsesOptions?.reasoningEffort != null ||\n openResponsesOptions?.reasoningSummary != null\n ? {\n ...(openResponsesOptions?.reasoningEffort != null && {\n effort: openResponsesOptions.reasoningEffort,\n }),\n ...(openResponsesOptions?.reasoningSummary != null && {\n summary: openResponsesOptions.reasoningSummary,\n }),\n }\n : undefined,\n tools: functionTools?.length ? functionTools : undefined,\n tool_choice: convertedToolChoice,\n ...(textFormat != null && { text: { format: textFormat } }),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const { body, warnings } = await this.getArgs(options);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: openResponsesErrorSchema,\n errorToMessage: error => error.error.message,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n // do not validate the response body, only apply types to the response body\n jsonSchema<OpenResponsesResponseBody>(() => {\n throw new Error('json schema not implemented');\n }),\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const content: Array<LanguageModelV3Content> = [];\n let hasToolCalls = false;\n\n for (const part of response.output!) {\n switch (part.type) {\n // TODO AI SDK 7 adjust reasoning in the specification to better support the reasoning structure from open responses.\n case 'reasoning': {\n for (const contentPart of part.content ?? []) {\n content.push({\n type: 'reasoning',\n text: contentPart.text,\n });\n }\n break;\n }\n\n case 'message': {\n for (const contentPart of part.content) {\n content.push({\n type: 'text',\n text: contentPart.text,\n });\n }\n\n break;\n }\n\n case 'function_call': {\n hasToolCalls = true;\n content.push({\n type: 'tool-call',\n toolCallId: part.call_id,\n toolName: part.name,\n input: part.arguments,\n });\n break;\n }\n }\n }\n\n const usage = response.usage;\n const inputTokens = usage?.input_tokens;\n const cachedInputTokens = usage?.input_tokens_details?.cached_tokens;\n const outputTokens = usage?.output_tokens;\n const reasoningTokens = usage?.output_tokens_details?.reasoning_tokens;\n\n return {\n content,\n finishReason: {\n unified: mapOpenResponsesFinishReason({\n finishReason: response.incomplete_details?.reason,\n hasToolCalls,\n }),\n raw: response.incomplete_details?.reason ?? undefined,\n },\n usage: {\n inputTokens: {\n total: inputTokens,\n noCache: (inputTokens ?? 0) - (cachedInputTokens ?? 0),\n cacheRead: cachedInputTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: outputTokens,\n text: (outputTokens ?? 0) - (reasoningTokens ?? 0),\n reasoning: reasoningTokens,\n },\n raw: response.usage,\n },\n request: { body },\n response: {\n id: response.id,\n timestamp: new Date(response.created_at! * 1000),\n modelId: response.model,\n headers: responseHeaders,\n body: rawResponse,\n },\n providerMetadata: undefined,\n warnings,\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const { body, warnings } = await this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url,\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...body,\n stream: true,\n } satisfies OpenResponsesRequestBody,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: openResponsesErrorSchema,\n errorToMessage: error => error.error.message,\n }),\n successfulResponseHandler: createEventSourceResponseHandler(z.any()),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const usage: LanguageModelV3Usage = {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n };\n\n const updateUsage = (\n responseUsage?: OpenResponsesResponseBody['usage'],\n ) => {\n if (!responseUsage) {\n return;\n }\n\n const inputTokens = responseUsage.input_tokens;\n const cachedInputTokens =\n responseUsage.input_tokens_details?.cached_tokens;\n const outputTokens = responseUsage.output_tokens;\n const reasoningTokens =\n responseUsage.output_tokens_details?.reasoning_tokens;\n\n usage.inputTokens = {\n total: inputTokens,\n noCache: (inputTokens ?? 0) - (cachedInputTokens ?? 0),\n cacheRead: cachedInputTokens,\n cacheWrite: undefined,\n };\n usage.outputTokens = {\n total: outputTokens,\n text: (outputTokens ?? 0) - (reasoningTokens ?? 0),\n reasoning: reasoningTokens,\n };\n usage.raw = responseUsage;\n };\n\n let isActiveReasoning = false;\n let hasToolCalls = false;\n let finishReason: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n const toolCallsByItemId = new Map<\n string,\n { toolName?: string; toolCallId?: string; arguments?: string }\n >();\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<OpenResponsesChunk>,\n LanguageModelV3StreamPart\n >({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(parseResult, controller) {\n if (options.includeRawChunks) {\n controller.enqueue({\n type: 'raw',\n rawValue: parseResult.rawValue,\n });\n }\n\n if (!parseResult.success) {\n controller.enqueue({ type: 'error', error: parseResult.error });\n return;\n }\n\n const chunk = parseResult.value;\n\n // Tool call events (single-shot tool-call when complete)\n if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'function_call'\n ) {\n toolCallsByItemId.set(chunk.item.id, {\n toolName: chunk.item.name,\n toolCallId: chunk.item.call_id,\n arguments: chunk.item.arguments,\n });\n } else if (\n chunk.type === 'response.function_call_arguments.delta'\n ) {\n const functionCallChunk = chunk;\n const toolCall = toolCallsByItemId.get(functionCallChunk.item_id);\n\n if (toolCall == null) {\n toolCallsByItemId.set(functionCallChunk.item_id, {\n arguments: functionCallChunk.delta,\n });\n return;\n }\n\n toolCall.arguments =\n (toolCall.arguments ?? '') + functionCallChunk.delta;\n } else if (chunk.type === 'response.function_call_arguments.done') {\n const functionCallChunk = chunk;\n const toolCall = toolCallsByItemId.get(functionCallChunk.item_id);\n\n if (toolCall == null) {\n toolCallsByItemId.set(functionCallChunk.item_id, {\n arguments: functionCallChunk.arguments,\n });\n return;\n }\n\n toolCall.arguments = functionCallChunk.arguments;\n } else if (\n chunk.type === 'response.output_item.done' &&\n chunk.item.type === 'function_call'\n ) {\n const toolCall = toolCallsByItemId.get(chunk.item.id);\n const toolName = toolCall?.toolName ?? chunk.item.name;\n const toolCallId = toolCall?.toolCallId ?? chunk.item.call_id;\n const input = toolCall?.arguments ?? chunk.item.arguments ?? '';\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId,\n toolName,\n input,\n });\n hasToolCalls = true;\n\n toolCallsByItemId.delete(chunk.item.id);\n }\n\n // Reasoning events (note: response.reasoning_text.delta is an LM Studio extension, not in official spec)\n else if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'reasoning'\n ) {\n controller.enqueue({\n type: 'reasoning-start',\n id: chunk.item.id,\n });\n isActiveReasoning = true;\n } else if (\n (chunk as { type: string }).type ===\n 'response.reasoning_text.delta'\n ) {\n const reasoningChunk = chunk as {\n item_id: string;\n delta: string;\n };\n controller.enqueue({\n type: 'reasoning-delta',\n id: reasoningChunk.item_id,\n delta: reasoningChunk.delta,\n });\n } else if (\n chunk.type === 'response.output_item.done' &&\n chunk.item.type === 'reasoning'\n ) {\n controller.enqueue({ type: 'reasoning-end', id: chunk.item.id });\n isActiveReasoning = false;\n }\n\n // Text events\n else if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'message'\n ) {\n controller.enqueue({ type: 'text-start', id: chunk.item.id });\n } else if (chunk.type === 'response.output_text.delta') {\n controller.enqueue({\n type: 'text-delta',\n id: chunk.item_id,\n delta: chunk.delta,\n });\n } else if (\n chunk.type === 'response.output_item.done' &&\n chunk.item.type === 'message'\n ) {\n controller.enqueue({ type: 'text-end', id: chunk.item.id });\n } else if (\n chunk.type === 'response.completed' ||\n chunk.type === 'response.incomplete'\n ) {\n const reason = chunk.response.incomplete_details?.reason;\n finishReason = {\n unified: mapOpenResponsesFinishReason({\n finishReason: reason,\n hasToolCalls,\n }),\n raw: reason ?? undefined,\n };\n updateUsage(chunk.response.usage);\n } else if (chunk.type === 'response.failed') {\n finishReason = {\n unified: 'error',\n raw: chunk.response.error?.code ?? chunk.response.status,\n };\n updateUsage(chunk.response.usage);\n }\n },\n\n flush(controller) {\n if (isActiveReasoning) {\n controller.enqueue({ type: 'reasoning-end', id: 'reasoning-0' });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage,\n providerMetadata: undefined,\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n","import type { LanguageModelV3Prompt, SharedV3Warning } from '@ai-sdk/provider';\nimport { convertToBase64 } from '@ai-sdk/provider-utils';\nimport type {\n FunctionCallItemParam,\n FunctionCallOutputItemParam,\n InputFileContentParam,\n InputImageContentParam,\n InputTextContentParam,\n OpenResponsesRequestBody,\n OutputTextContentParam,\n RefusalContentParam,\n} from './open-responses-api';\n\nexport async function convertToOpenResponsesInput({\n prompt,\n}: {\n prompt: LanguageModelV3Prompt;\n}): Promise<{\n input: OpenResponsesRequestBody['input'];\n instructions: string | undefined;\n warnings: Array<SharedV3Warning>;\n}> {\n const input: OpenResponsesRequestBody['input'] = [];\n const warnings: Array<SharedV3Warning> = [];\n const systemMessages: string[] = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n systemMessages.push(content);\n break;\n }\n\n case 'user': {\n const userContent: Array<\n InputTextContentParam | InputImageContentParam | InputFileContentParam\n > = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n userContent.push({ type: 'input_text', text: part.text });\n break;\n }\n case 'file': {\n const mediaType =\n part.mediaType === 'image/*' ? 'image/jpeg' : part.mediaType;\n\n if (part.mediaType.startsWith('image/')) {\n userContent.push({\n type: 'input_image',\n ...(part.data instanceof URL\n ? { image_url: part.data.toString() }\n : {\n image_url: `data:${mediaType};base64,${convertToBase64(part.data)}`,\n }),\n });\n } else if (part.data instanceof URL) {\n userContent.push({\n type: 'input_file',\n file_url: part.data.toString(),\n });\n } else {\n userContent.push({\n type: 'input_file',\n filename: part.filename ?? 'data',\n file_data: `data:${mediaType};base64,${convertToBase64(part.data)}`,\n });\n }\n break;\n }\n }\n }\n\n input.push({ type: 'message', role: 'user', content: userContent });\n break;\n }\n\n case 'assistant': {\n const assistantContent: Array<\n OutputTextContentParam | RefusalContentParam\n > = [];\n const toolCalls: Array<FunctionCallItemParam> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n assistantContent.push({ type: 'output_text', text: part.text });\n break;\n }\n case 'tool-call': {\n const argumentsValue =\n typeof part.input === 'string'\n ? part.input\n : JSON.stringify(part.input);\n toolCalls.push({\n type: 'function_call',\n call_id: part.toolCallId,\n name: part.toolName,\n arguments: argumentsValue,\n });\n break;\n }\n }\n }\n\n // Push assistant message with text content if any\n if (assistantContent.length > 0) {\n input.push({\n type: 'message',\n role: 'assistant',\n content: assistantContent,\n });\n }\n\n // Push function calls as separate items\n for (const toolCall of toolCalls) {\n input.push(toolCall);\n }\n\n break;\n }\n\n case 'tool': {\n for (const part of content) {\n if (part.type === 'tool-result') {\n const output = part.output;\n let contentValue: FunctionCallOutputItemParam['output'];\n\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'execution-denied':\n contentValue = output.reason ?? 'Tool execution denied.';\n break;\n case 'json':\n case 'error-json':\n contentValue = JSON.stringify(output.value);\n break;\n case 'content': {\n const contentParts: Array<\n | InputTextContentParam\n | InputImageContentParam\n | InputFileContentParam\n > = [];\n for (const item of output.value) {\n switch (item.type) {\n case 'text': {\n contentParts.push({\n type: 'input_text',\n text: item.text,\n });\n break;\n }\n case 'image-data': {\n contentParts.push({\n type: 'input_image',\n image_url: `data:${item.mediaType};base64,${item.data}`,\n });\n break;\n }\n case 'image-url': {\n contentParts.push({\n type: 'input_image',\n image_url: item.url,\n });\n break;\n }\n case 'file-data': {\n contentParts.push({\n type: 'input_file',\n filename: item.filename ?? 'data',\n file_data: `data:${item.mediaType};base64,${item.data}`,\n });\n break;\n }\n default: {\n warnings.push({\n type: 'other',\n message: `unsupported tool content part type: ${(item as { type: string }).type}`,\n });\n break;\n }\n }\n }\n contentValue = contentParts;\n break;\n }\n }\n\n input.push({\n type: 'function_call_output',\n call_id: part.toolCallId,\n output: contentValue,\n });\n }\n }\n break;\n }\n }\n }\n\n return {\n input,\n instructions:\n systemMessages.length > 0 ? systemMessages.join('\\n') : undefined,\n warnings,\n };\n}\n","import type { JSONSchema7 } from '@ai-sdk/provider';\nimport { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const openResponsesErrorSchema = lazySchema(() =>\n zodSchema(\n z.object({\n error: z.object({\n message: z.string(),\n type: z.string(),\n param: z.string(),\n code: z.string(),\n }),\n }),\n ),\n);\n\n// ============================================================================\n// Enums\n// ============================================================================\n\n/**\n * The status of a function call or message item.\n */\nexport type FunctionCallStatus = 'in_progress' | 'completed' | 'incomplete';\n\n/**\n * Image detail level for input images.\n */\nexport type ImageDetail = 'low' | 'high' | 'auto';\n\n/**\n * Reasoning effort level.\n */\nexport type ReasoningEffortEnum = 'none' | 'low' | 'medium' | 'high' | 'xhigh';\n\n/**\n * Reasoning summary level.\n */\nexport type ReasoningSummaryEnum = 'concise' | 'detailed' | 'auto';\n\n/**\n * Tool choice value enum.\n */\nexport type ToolChoiceValueEnum = 'none' | 'auto' | 'required';\n\n/**\n * Verbosity level for text output.\n */\nexport type VerbosityEnum = 'low' | 'medium' | 'high';\n\n// ============================================================================\n// Content Types\n// ============================================================================\n\n/**\n * A text input to the model.\n */\nexport type InputTextContentParam = {\n type: 'input_text';\n text: string;\n};\n\n/**\n * An image input to the model.\n */\nexport type InputImageContentParam = {\n type: 'input_image';\n image_url?: string;\n detail?: ImageDetail;\n};\n\n/**\n * A file input to the model.\n */\nexport type InputFileContentParam = {\n type: 'input_file';\n filename?: string;\n file_data?: string;\n file_url?: string;\n};\n\n/**\n * A video input to the model.\n */\nexport type InputVideoContent = {\n type: 'input_video';\n video_url: string;\n};\n\n/**\n * A text output from the model.\n */\nexport type OutputTextContentParam = {\n type: 'output_text';\n text: string;\n annotations?: UrlCitationParam[];\n};\n\n/**\n * A refusal from the model.\n */\nexport type RefusalContentParam = {\n type: 'refusal';\n refusal: string;\n};\n\n/**\n * A URL citation annotation.\n */\nexport type UrlCitationParam = {\n type: 'url_citation';\n start_index: number;\n end_index: number;\n url: string;\n title: string;\n};\n\n/**\n * Reasoning summary content.\n */\nexport type ReasoningSummaryContentParam = {\n type: 'summary_text';\n text: string;\n};\n\n// ============================================================================\n// Message Item Types\n// ============================================================================\n\n/**\n * An internal identifier for an item to reference.\n */\nexport type ItemReferenceParam = {\n type?: 'item_reference';\n id: string;\n};\n\n/**\n * A reasoning item.\n */\nexport type ReasoningItemParam = {\n id?: string;\n type: 'reasoning';\n summary: ReasoningSummaryContentParam[];\n content?: unknown;\n encrypted_content?: string;\n};\n\n/**\n * A user message item.\n */\nexport type UserMessageItemParam = {\n id?: string;\n type: 'message';\n role: 'user';\n content:\n | string\n | Array<\n InputTextContentParam | InputImageContentParam | InputFileContentParam\n >;\n status?: string;\n};\n\n/**\n * A system message item.\n */\nexport type SystemMessageItemParam = {\n id?: string;\n type: 'message';\n role: 'system';\n content: string | InputTextContentParam[];\n status?: string;\n};\n\n/**\n * A developer message item.\n */\nexport type DeveloperMessageItemParam = {\n id?: string;\n type: 'message';\n role: 'developer';\n content: string | InputTextContentParam[];\n status?: string;\n};\n\n/**\n * An assistant message item.\n */\nexport type AssistantMessageItemParam = {\n id?: string;\n type: 'message';\n role: 'assistant';\n content: string | Array<OutputTextContentParam | RefusalContentParam>;\n status?: string;\n};\n\n/**\n * A function call item.\n */\nexport type FunctionCallItemParam = {\n id?: string;\n call_id: string;\n type: 'function_call';\n name: string;\n arguments: string;\n status?: FunctionCallStatus;\n};\n\n/**\n * A function call output item.\n */\nexport type FunctionCallOutputItemParam = {\n id?: string;\n call_id: string;\n type: 'function_call_output';\n output:\n | string\n | Array<\n | InputTextContentParam\n | InputImageContentParam\n | InputFileContentParam\n | InputVideoContent\n >;\n status?: FunctionCallStatus;\n};\n\n// ============================================================================\n// Tool Types\n// ============================================================================\n\n/**\n * A function tool parameter.\n */\nexport type FunctionToolParam = {\n name: string;\n description?: string;\n parameters?: JSONSchema7;\n strict?: boolean;\n type: 'function';\n};\n\n/**\n * A specific function tool choice.\n */\nexport type SpecificFunctionParam = {\n type: 'function';\n name: string;\n};\n\n/**\n * Allowed tools parameter.\n */\nexport type AllowedToolsParam = {\n type: 'allowed_tools';\n tools: SpecificFunctionParam[];\n mode?: ToolChoiceValueEnum;\n};\n\n/**\n * Controls which tool the model should use, if any.\n */\nexport type ToolChoiceParam =\n | ToolChoiceValueEnum\n | SpecificFunctionParam\n | AllowedToolsParam;\n\n// ============================================================================\n// Configuration Types\n// ============================================================================\n\n/**\n * Set of 16 key-value pairs that can be attached to an object.\n */\nexport type MetadataParam = Record<string, string>;\n\n/**\n * Text response format (plain text).\n */\nexport type TextResponseFormat = {\n type: 'text';\n};\n\n/**\n * JSON schema response format.\n */\nexport type JsonSchemaResponseFormatParam = {\n type: 'json_schema';\n description?: string;\n name?: string;\n schema?: JSONSchema7;\n strict?: boolean;\n};\n\n/**\n * Configuration options for text output.\n */\nexport type TextParam = {\n format?: TextResponseFormat | JsonSchemaResponseFormatParam;\n verbosity?: VerbosityEnum;\n};\n\n/**\n * Options that control streamed response behavior.\n */\nexport type StreamOptionsParam = {\n include_obfuscation?: boolean;\n};\n\n/**\n * Configuration options for reasoning behavior.\n */\nexport type ReasoningParam = {\n effort?: ReasoningEffortEnum;\n summary?: ReasoningSummaryEnum;\n};\n\n// ============================================================================\n// Response-Specific Types\n// ============================================================================\n\n/**\n * The status of a message item in the response.\n */\nexport type MessageStatus = 'in_progress' | 'completed' | 'incomplete';\n\n/**\n * Truncation enum for responses.\n */\nexport type TruncationEnum = 'auto' | 'disabled';\n\n/**\n * Service tier enum.\n */\nexport type ServiceTierEnum = 'auto' | 'default' | 'flex' | 'priority';\n\n/**\n * A top log probability of a token.\n */\nexport type TopLogProb = {\n token: string;\n logprob: number;\n bytes: number[];\n};\n\n/**\n * The log probability of a token.\n */\nexport type LogProb = {\n token: string;\n logprob: number;\n bytes: number[];\n top_logprobs: TopLogProb[];\n};\n\n/**\n * A URL citation annotation in a response.\n */\nexport type UrlCitationBody = {\n type: 'url_citation';\n url: string;\n start_index: number;\n end_index: number;\n title: string;\n};\n\n/**\n * An annotation that applies to a span of output text.\n */\nexport type Annotation = UrlCitationBody;\n\n/**\n * A text input content in a response.\n */\nexport type InputTextContent = {\n type: 'input_text';\n text: string;\n};\n\n/**\n * A text output from the model in a response.\n */\nexport type OutputTextContent = {\n type: 'output_text';\n text: string;\n annotations: Annotation[];\n logprobs: LogProb[];\n};\n\n/**\n * A refusal from the model in a response.\n */\nexport type RefusalContent = {\n type: 'refusal';\n refusal: string;\n};\n\n/**\n * Reasoning text from the model.\n */\nexport type ReasoningTextContent = {\n type: 'reasoning_text';\n text: string;\n};\n\n/**\n * A summary text from the model.\n */\nexport type SummaryTextContent = {\n type: 'summary_text';\n text: string;\n};\n\n/**\n * An image input content in a response.\n */\nexport type InputImageContent = {\n type: 'input_image';\n image_url?: string;\n detail: ImageDetail;\n};\n\n/**\n * A file input content in a response.\n */\nexport type InputFileContent = {\n type: 'input_file';\n filename?: string;\n file_url?: string;\n};\n\n/**\n * A message in the response.\n */\nexport type Message = {\n type: 'message';\n id: string;\n status: MessageStatus;\n role: 'user' | 'assistant' | 'system' | 'developer';\n content: InputTextContent[];\n};\n\n/**\n * A function tool call that was generated by the model.\n */\nexport type FunctionCall = {\n type: 'function_call';\n id: string;\n call_id: string;\n name: string;\n arguments: string;\n status: FunctionCallStatus;\n};\n\n/**\n * A function tool call output that was returned.\n */\nexport type FunctionCallOutput = {\n type: 'function_call_output';\n id: string;\n call_id: string;\n output:\n | string\n | Array<InputTextContent | InputImageContent | InputFileContent>;\n status: FunctionCallStatus;\n};\n\n/**\n * A reasoning item that was generated by the model.\n */\nexport type ReasoningBody = {\n type: 'reasoning';\n id: string;\n content?: InputTextContent[];\n summary: InputTextContent[];\n encrypted_content?: string;\n};\n\n/**\n * Output item field union type.\n */\nexport type OutputItem =\n | FunctionCall\n | FunctionCallOutput\n | Message\n | ReasoningBody;\n\n/**\n * Details about why the response was incomplete.\n */\nexport type IncompleteDetails = {\n reason: string;\n};\n\n/**\n * An error that occurred while generating the response.\n */\nexport type ResponseError = {\n code: string;\n message: string;\n};\n\n/**\n * A function tool in a response.\n */\nexport type FunctionTool = {\n type: 'function';\n name: string;\n description?: string;\n parameters?: JSONSchema7;\n strict?: boolean;\n};\n\n/**\n * Function tool choice in a response.\n */\nexport type FunctionToolChoice = {\n type: 'function';\n name?: string;\n};\n\n/**\n * Allowed tool choice in a response.\n */\nexport type AllowedToolChoice = {\n type: 'allowed_tools';\n tools: FunctionToolChoice[];\n mode: ToolChoiceValueEnum;\n};\n\n/**\n * Tool choice in a response.\n */\nexport type ResponseToolChoice =\n | ToolChoiceValueEnum\n | FunctionToolChoice\n | AllowedToolChoice;\n\n/**\n * JSON object response format.\n */\nexport type JsonObjectResponseFormat = {\n type: 'json_object';\n};\n\n/**\n * JSON schema response format in a response.\n */\nexport type JsonSchemaResponseFormat = {\n type: 'json_schema';\n name: string;\n description?: string;\n schema: unknown;\n strict: boolean;\n};\n\n/**\n * Text field in a response.\n */\nexport type TextField = {\n format?:\n | TextResponseFormat\n | JsonObjectResponseFormat\n | JsonSchemaResponseFormat;\n verbosity?: VerbosityEnum;\n};\n\n/**\n * A breakdown of input token usage that was recorded.\n */\nexport type InputTokensDetails = {\n cached_tokens: number;\n};\n\n/**\n * A breakdown of output token usage that was recorded.\n */\nexport type OutputTokensDetails = {\n reasoning_tokens: number;\n};\n\n/**\n * Token usage statistics that were recorded for the response.\n */\nexport type Usage = {\n input_tokens: number;\n output_tokens: number;\n total_tokens: number;\n input_tokens_details: InputTokensDetails;\n output_tokens_details: OutputTokensDetails;\n};\n\n/**\n * Reasoning configuration and outputs that were produced for this response.\n */\nexport type Reasoning = {\n effort?: ReasoningEffortEnum;\n summary?: ReasoningSummaryEnum;\n};\n\n// ============================================================================\n// Request Body\n// ============================================================================\n\n/**\n * Body that is sent to the Open Responses API.\n */\nexport type OpenResponsesRequestBody = {\n /**\n * The model to use for this request, e.g. 'gpt-5.4'.\n */\n model: string;\n\n /**\n * Context for the model: either a string (interpreted as a user message),\n * or an array of structured message items.\n */\n input:\n | string\n | Array<\n | ItemReferenceParam\n | ReasoningItemParam\n | UserMessageItemParam\n | SystemMessageItemParam\n | DeveloperMessageItemParam\n | AssistantMessageItemParam\n | FunctionCallItemParam\n | FunctionCallOutputItemParam\n >;\n\n /**\n * The ID of the response to use as the prior turn for this request.\n */\n previous_response_id?: string;\n\n /**\n * Options specifying extra values to include in the response.\n */\n include?: Array<\n 'reasoning.encrypted_content' | 'message.output_text.logprobs'\n >;\n\n /**\n * A list of tools that the model may call while generating the response.\n */\n tools?: FunctionToolParam[];\n\n /**\n * Controls which tool the model should use, if any.\n */\n tool_choice?: ToolChoiceParam;\n\n /**\n * Structured metadata as up to 16 key-value pairs.\n */\n metadata?: MetadataParam;\n\n /**\n * Configuration options for text output.\n */\n text?: TextParam;\n\n /**\n * Sampling temperature to use, between 0 and 2.\n */\n temperature?: number;\n\n /**\n * Nucleus sampling parameter, between 0 and 1.\n */\n top_p?: number;\n\n /**\n * Penalizes new tokens based on whether they appear in the text so far.\n */\n presence_penalty?: number;\n\n /**\n * Penalizes new tokens based on their frequency in the text so far.\n */\n frequency_penalty?: number;\n\n /**\n * Whether the model may call multiple tools in parallel.\n */\n parallel_tool_calls?: boolean;\n\n /**\n * Whether to stream response events as server-sent events.\n */\n stream?: boolean;\n\n /**\n * Options that control streamed response behavior.\n */\n stream_options?: StreamOptionsParam;\n\n /**\n * Whether to run the request in the background and return immediately.\n */\n background?: boolean;\n\n /**\n * Maximum number of tokens the model may generate.\n */\n max_output_tokens?: number;\n\n /**\n * Maximum number of tool calls the model may make while generating the response.\n */\n max_tool_calls?: number;\n\n /**\n * Configuration options for reasoning behavior.\n */\n reasoning?: ReasoningParam;\n\n /**\n * A stable identifier used for safety monitoring and abuse detection.\n */\n safety_identifier?: string;\n\n /**\n * A key to use when reading/writing to the prompt cache.\n */\n prompt_cache_key?: string;\n\n /**\n * Controls how input is truncated if it exceeds the model's context window.\n * - 'auto': Let the service decide how to truncate.\n * - 'disabled': Disable truncation. Context overflow yields 400 error.\n */\n truncation?: 'auto' | 'disabled';\n\n /**\n * Additional instructions to guide the model for this request.\n */\n instructions?: string;\n\n /**\n * Whether to store the response so it can be retrieved later.\n */\n store?: boolean;\n\n /**\n * The service tier to use for this request.\n * - 'auto' | 'default' | 'flex' | 'priority'\n */\n service_tier?: 'auto' | 'default' | 'flex' | 'priority';\n\n /**\n * Number of most likely tokens to return at each position, with logprobs.\n */\n top_logprobs?: number;\n};\n\n// ============================================================================\n// Response Body\n// ============================================================================\n\n/**\n * Response body from the Open Responses API.\n */\nexport type OpenResponsesResponseBody = {\n /**\n * The unique ID of the response that was created.\n */\n id: string;\n\n /**\n * The object type, which is always 'response'.\n */\n object: 'response';\n\n /**\n * The Unix timestamp (in seconds) for when the response was created.\n */\n created_at: number;\n\n /**\n * The Unix timestamp (in seconds) for when the response was completed, if it was completed.\n */\n completed_at?: number;\n\n /**\n * The status that was set for the response.\n */\n status: string;\n\n /**\n * Details about why the response was incomplete, if applicable.\n */\n incomplete_details?: IncompleteDetails;\n\n /**\n * The model that generated this response.\n */\n model: string;\n\n /**\n * The ID of the previous response in the chain that was referenced, if any.\n */\n previous_response_id?: string;\n\n /**\n * Additional instructions that were used to guide the model for this response.\n */\n instructions?: string;\n\n /**\n * The output items that were generated by the model.\n */\n output: OutputItem[];\n\n /**\n * The error that occurred, if the response failed.\n */\n error?: ResponseError;\n\n /**\n * The tools that were available to the model during response generation.\n */\n tools?: FunctionTool[];\n\n /**\n * The tool choice configuration that was used.\n */\n tool_choice?: ResponseToolChoice;\n\n /**\n * How the input was truncated by the service when it exceeded the model context window.\n */\n truncation?: TruncationEnum;\n\n /**\n * Whether the model was allowed to call multiple tools in parallel.\n */\n parallel_tool_calls?: boolean;\n\n /**\n * Configuration options for text output that were used.\n */\n text?: TextField;\n\n /**\n * The nucleus sampling parameter that was used for this response.\n */\n top_p?: number;\n\n /**\n * The presence penalty that was used.\n */\n presence_penalty?: number;\n\n /**\n * The frequency penalty that was used.\n */\n frequency_penalty?: number;\n\n /**\n * The number of most likely tokens that were returned at each position.\n */\n top_logprobs?: number;\n\n /**\n * The sampling temperature that was used for this response.\n */\n temperature?: number;\n\n /**\n * Reasoning configuration and outputs that were produced for this response.\n */\n reasoning?: Reasoning;\n\n /**\n * Token usage statistics that were recorded for the response, if available.\n */\n usage?: Usage;\n\n /**\n * The maximum number of tokens the model was allowed to generate for this response.\n */\n max_output_tokens?: number;\n\n /**\n * The maximum number of tool calls the model was allowed to make.\n */\n max_tool_calls?: number;\n\n /**\n * Whether this response was stored so it can be retrieved later.\n */\n store?: boolean;\n\n /**\n * Whether this request was run in the background.\n */\n background?: boolean;\n\n /**\n * The service tier that was used for this response.\n */\n service_tier?: string;\n\n /**\n * Developer-defined metadata that was associated with the response.\n */\n metadata?: unknown;\n\n /**\n * A stable identifier that was used for safety monitoring and abuse detection.\n */\n safety_identifier?: string;\n\n /**\n * A key that was used to read from or write to the prompt cache.\n */\n prompt_cache_key?: string;\n};\n\n// ============================================================================\n// Streaming Chunk Types\n// ============================================================================\n\n/**\n * Content part for streaming - output text.\n */\nexport type OutputTextContentPart = {\n type: 'output_text';\n text: string;\n annotations: Annotation[];\n};\n\n/**\n * Content part for streaming - refusal.\n */\nexport type RefusalContentPart = {\n type: 'refusal';\n refusal: string;\n};\n\n/**\n * Union of content parts that can appear in streaming.\n */\nexport type ContentPart = OutputTextContentPart | RefusalContentPart;\n\n// ----------------------------------------------------------------------------\n// State Machine Events\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when a response is created.\n */\nexport type ResponseCreatedEvent = {\n type: 'response.created';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n/**\n * Emitted when a response transitions to in_progress status.\n */\nexport type ResponseInProgressEvent = {\n type: 'response.in_progress';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n/**\n * Emitted when a response completes successfully.\n */\nexport type ResponseCompletedEvent = {\n type: 'response.completed';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n/**\n * Emitted when a response fails.\n */\nexport type ResponseFailedEvent = {\n type: 'response.failed';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n/**\n * Emitted when a response is incomplete (e.g., token budget exhausted).\n */\nexport type ResponseIncompleteEvent = {\n type: 'response.incomplete';\n sequence_number: number;\n response: OpenResponsesResponseBody;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Output Items\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when a new output item is added to the response.\n */\nexport type ResponseOutputItemAddedEvent = {\n type: 'response.output_item.added';\n sequence_number: number;\n output_index: number;\n item: OutputItem;\n};\n\n/**\n * Emitted when an output item is completed.\n */\nexport type ResponseOutputItemDoneEvent = {\n type: 'response.output_item.done';\n sequence_number: number;\n output_index: number;\n item: OutputItem;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Content Parts\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when a new content part is added to an item.\n */\nexport type ResponseContentPartAddedEvent = {\n type: 'response.content_part.added';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n part: ContentPart;\n};\n\n/**\n * Emitted when a content part is completed.\n */\nexport type ResponseContentPartDoneEvent = {\n type: 'response.content_part.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n part: ContentPart;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Text Output\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when text is appended to an output.\n */\nexport type ResponseOutputTextDeltaEvent = {\n type: 'response.output_text.delta';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n delta: string;\n logprobs?: LogProb[];\n};\n\n/**\n * Emitted when text output is complete.\n */\nexport type ResponseOutputTextDoneEvent = {\n type: 'response.output_text.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n text: string;\n logprobs?: LogProb[];\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Refusal\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when refusal text is appended.\n */\nexport type ResponseRefusalDeltaEvent = {\n type: 'response.refusal.delta';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n delta: string;\n};\n\n/**\n * Emitted when refusal is complete.\n */\nexport type ResponseRefusalDoneEvent = {\n type: 'response.refusal.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n content_index: number;\n refusal: string;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Function Call Arguments\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when function call arguments are appended.\n */\nexport type ResponseFunctionCallArgumentsDeltaEvent = {\n type: 'response.function_call_arguments.delta';\n sequence_number: number;\n item_id: string;\n output_index: number;\n call_id: string;\n delta: string;\n};\n\n/**\n * Emitted when function call arguments are complete.\n */\nexport type ResponseFunctionCallArgumentsDoneEvent = {\n type: 'response.function_call_arguments.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n call_id: string;\n arguments: string;\n};\n\n// ----------------------------------------------------------------------------\n// Delta Events - Reasoning\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when reasoning summary text is appended.\n */\nexport type ResponseReasoningSummaryTextDeltaEvent = {\n type: 'response.reasoning_summary_text.delta';\n sequence_number: number;\n item_id: string;\n output_index: number;\n summary_index: number;\n delta: string;\n};\n\n/**\n * Emitted when reasoning summary text is complete.\n */\nexport type ResponseReasoningSummaryTextDoneEvent = {\n type: 'response.reasoning_summary_text.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n summary_index: number;\n text: string;\n};\n\n/**\n * Emitted when a reasoning summary part is added.\n */\nexport type ResponseReasoningSummaryPartAddedEvent = {\n type: 'response.reasoning_summary_part.added';\n sequence_number: number;\n item_id: string;\n output_index: number;\n summary_index: number;\n part: SummaryTextContent;\n};\n\n/**\n * Emitted when a reasoning summary part is complete.\n */\nexport type ResponseReasoningSummaryPartDoneEvent = {\n type: 'response.reasoning_summary_part.done';\n sequence_number: number;\n item_id: string;\n output_index: number;\n summary_index: number;\n part: SummaryTextContent;\n};\n\n// ----------------------------------------------------------------------------\n// Error Event\n// ----------------------------------------------------------------------------\n\n/**\n * Emitted when an error occurs during streaming.\n */\nexport type ResponseErrorEvent = {\n type: 'error';\n sequence_number: number;\n error: ResponseError;\n};\n\n// ----------------------------------------------------------------------------\n// Union Type for All Streaming Chunks\n// ----------------------------------------------------------------------------\n\n/**\n * Union of all streaming chunk event types from the Open Responses API.\n *\n * Streaming events fall into two categories:\n * - **State Machine Events**: Represent status changes (e.g., `response.in_progress`, `response.completed`)\n * - **Delta Events**: Represent incremental changes (e.g., `response.output_text.delta`, `response.output_item.added`)\n */\nexport type OpenResponsesChunk =\n // State Machine Events\n | ResponseCreatedEvent\n | ResponseInProgressEvent\n | ResponseCompletedEvent\n | ResponseFailedEvent\n | ResponseIncompleteEvent\n // Delta Events - Output Items\n | ResponseOutputItemAddedEvent\n | ResponseOutputItemDoneEvent\n // Delta Events - Content Parts\n | ResponseContentPartAddedEvent\n | ResponseContentPartDoneEvent\n // Delta Events - Text Output\n | ResponseOutputTextDeltaEvent\n | ResponseOutputTextDoneEvent\n // Delta Events - Refusal\n | ResponseRefusalDeltaEvent\n | ResponseRefusalDoneEvent\n // Delta Events - Function Call Arguments\n | ResponseFunctionCallArgumentsDeltaEvent\n | ResponseFunctionCallArgumentsDoneEvent\n // Delta Events - Reasoning\n | ResponseReasoningSummaryTextDeltaEvent\n | ResponseReasoningSummaryTextDoneEvent\n | ResponseReasoningSummaryPartAddedEvent\n | ResponseReasoningSummaryPartDoneEvent\n // Error Event\n | ResponseErrorEvent;\n","import type { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapOpenResponsesFinishReason({\n finishReason,\n hasToolCalls,\n}: {\n finishReason: string | null | undefined;\n hasToolCalls: boolean;\n}): LanguageModelV3FinishReason['unified'] {\n switch (finishReason) {\n case undefined:\n case null:\n return hasToolCalls ? 'tool-calls' : 'stop';\n case 'max_output_tokens':\n return 'length';\n case 'content_filter':\n return 'content-filter';\n default:\n return hasToolCalls ? 'tool-calls' : 'other';\n }\n}\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const openResponsesOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n reasoningEffort: z\n .enum(['none', 'low', 'medium', 'high', 'xhigh'])\n .nullish(),\n /**\n * Controls reasoning summary output from the model.\n * Valid values: 'concise', 'detailed', 'auto'.\n */\n reasoningSummary: z.enum(['concise', 'detailed', 'auto']).nullish(),\n }),\n ),\n);\n\nexport type OpenResponsesOptions = InferSchema<\n typeof openResponsesOptionsSchema\n>;\n"],"mappings":"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","names":["z","lazySchema","zodSchema","z","z"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/open-responses",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.17",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@ai-sdk/provider": "3.0.10",
|
|
33
|
-
"@ai-sdk/provider-utils": "4.0.
|
|
33
|
+
"@ai-sdk/provider-utils": "4.0.28"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/node": "20.17.24",
|
|
@@ -43,25 +43,30 @@ export async function convertToOpenResponsesInput({
|
|
|
43
43
|
break;
|
|
44
44
|
}
|
|
45
45
|
case 'file': {
|
|
46
|
-
if (!part.mediaType.startsWith('image/')) {
|
|
47
|
-
warnings.push({
|
|
48
|
-
type: 'other',
|
|
49
|
-
message: `unsupported file content type: ${part.mediaType}`,
|
|
50
|
-
});
|
|
51
|
-
break;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
46
|
const mediaType =
|
|
55
47
|
part.mediaType === 'image/*' ? 'image/jpeg' : part.mediaType;
|
|
56
48
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
49
|
+
if (part.mediaType.startsWith('image/')) {
|
|
50
|
+
userContent.push({
|
|
51
|
+
type: 'input_image',
|
|
52
|
+
...(part.data instanceof URL
|
|
53
|
+
? { image_url: part.data.toString() }
|
|
54
|
+
: {
|
|
55
|
+
image_url: `data:${mediaType};base64,${convertToBase64(part.data)}`,
|
|
56
|
+
}),
|
|
57
|
+
});
|
|
58
|
+
} else if (part.data instanceof URL) {
|
|
59
|
+
userContent.push({
|
|
60
|
+
type: 'input_file',
|
|
61
|
+
file_url: part.data.toString(),
|
|
62
|
+
});
|
|
63
|
+
} else {
|
|
64
|
+
userContent.push({
|
|
65
|
+
type: 'input_file',
|
|
66
|
+
filename: part.filename ?? 'data',
|
|
67
|
+
file_data: `data:${mediaType};base64,${convertToBase64(part.data)}`,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
65
70
|
break;
|
|
66
71
|
}
|
|
67
72
|
}
|
|
@@ -290,7 +290,6 @@ export class OpenResponsesLanguageModel implements LanguageModelV3 {
|
|
|
290
290
|
errorSchema: openResponsesErrorSchema,
|
|
291
291
|
errorToMessage: error => error.error.message,
|
|
292
292
|
}),
|
|
293
|
-
// TODO consider validation
|
|
294
293
|
successfulResponseHandler: createEventSourceResponseHandler(z.any()),
|
|
295
294
|
abortSignal: options.abortSignal,
|
|
296
295
|
fetch: this.config.fetch,
|
|
@@ -344,10 +343,10 @@ export class OpenResponsesLanguageModel implements LanguageModelV3 {
|
|
|
344
343
|
unified: 'other',
|
|
345
344
|
raw: undefined,
|
|
346
345
|
};
|
|
347
|
-
const toolCallsByItemId
|
|
346
|
+
const toolCallsByItemId = new Map<
|
|
348
347
|
string,
|
|
349
348
|
{ toolName?: string; toolCallId?: string; arguments?: string }
|
|
350
|
-
>
|
|
349
|
+
>();
|
|
351
350
|
|
|
352
351
|
return {
|
|
353
352
|
stream: response.pipeThrough(
|
|
@@ -379,41 +378,43 @@ export class OpenResponsesLanguageModel implements LanguageModelV3 {
|
|
|
379
378
|
chunk.type === 'response.output_item.added' &&
|
|
380
379
|
chunk.item.type === 'function_call'
|
|
381
380
|
) {
|
|
382
|
-
toolCallsByItemId
|
|
381
|
+
toolCallsByItemId.set(chunk.item.id, {
|
|
383
382
|
toolName: chunk.item.name,
|
|
384
383
|
toolCallId: chunk.item.call_id,
|
|
385
384
|
arguments: chunk.item.arguments,
|
|
386
|
-
};
|
|
385
|
+
});
|
|
387
386
|
} else if (
|
|
388
|
-
|
|
389
|
-
'response.function_call_arguments.delta'
|
|
387
|
+
chunk.type === 'response.function_call_arguments.delta'
|
|
390
388
|
) {
|
|
391
|
-
const functionCallChunk = chunk
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
389
|
+
const functionCallChunk = chunk;
|
|
390
|
+
const toolCall = toolCallsByItemId.get(functionCallChunk.item_id);
|
|
391
|
+
|
|
392
|
+
if (toolCall == null) {
|
|
393
|
+
toolCallsByItemId.set(functionCallChunk.item_id, {
|
|
394
|
+
arguments: functionCallChunk.delta,
|
|
395
|
+
});
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
|
|
398
399
|
toolCall.arguments =
|
|
399
400
|
(toolCall.arguments ?? '') + functionCallChunk.delta;
|
|
400
|
-
} else if (
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
item_id
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
401
|
+
} else if (chunk.type === 'response.function_call_arguments.done') {
|
|
402
|
+
const functionCallChunk = chunk;
|
|
403
|
+
const toolCall = toolCallsByItemId.get(functionCallChunk.item_id);
|
|
404
|
+
|
|
405
|
+
if (toolCall == null) {
|
|
406
|
+
toolCallsByItemId.set(functionCallChunk.item_id, {
|
|
407
|
+
arguments: functionCallChunk.arguments,
|
|
408
|
+
});
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
|
|
411
412
|
toolCall.arguments = functionCallChunk.arguments;
|
|
412
413
|
} else if (
|
|
413
414
|
chunk.type === 'response.output_item.done' &&
|
|
414
415
|
chunk.item.type === 'function_call'
|
|
415
416
|
) {
|
|
416
|
-
const toolCall = toolCallsByItemId
|
|
417
|
+
const toolCall = toolCallsByItemId.get(chunk.item.id);
|
|
417
418
|
const toolName = toolCall?.toolName ?? chunk.item.name;
|
|
418
419
|
const toolCallId = toolCall?.toolCallId ?? chunk.item.call_id;
|
|
419
420
|
const input = toolCall?.arguments ?? chunk.item.arguments ?? '';
|
|
@@ -426,7 +427,7 @@ export class OpenResponsesLanguageModel implements LanguageModelV3 {
|
|
|
426
427
|
});
|
|
427
428
|
hasToolCalls = true;
|
|
428
429
|
|
|
429
|
-
delete
|
|
430
|
+
toolCallsByItemId.delete(chunk.item.id);
|
|
430
431
|
}
|
|
431
432
|
|
|
432
433
|
// Reasoning events (note: response.reasoning_text.delta is an LM Studio extension, not in official spec)
|