@ai-sdk/open-responses 2.0.40 → 2.0.42
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 +12 -4
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/responses/convert-to-open-responses-input.ts +18 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @ai-sdk/open-responses
|
|
2
2
|
|
|
3
|
+
## 2.0.42
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [912fb01]
|
|
8
|
+
- @ai-sdk/provider@4.0.12
|
|
9
|
+
- @ai-sdk/provider-utils@5.0.38
|
|
10
|
+
|
|
11
|
+
## 2.0.41
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- d127e7a: fix(open-responses): include image detail in input image parts
|
|
16
|
+
|
|
3
17
|
## 2.0.40
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/version.ts
|
|
2
|
-
var VERSION = true ? "2.0.
|
|
2
|
+
var VERSION = true ? "2.0.42" : "0.0.0-test";
|
|
3
3
|
|
|
4
4
|
// src/open-responses-provider.ts
|
|
5
5
|
import {
|
|
@@ -265,7 +265,8 @@ async function convertToOpenResponsesInput({
|
|
|
265
265
|
type: "input_image",
|
|
266
266
|
...part.data.type === "url" ? { image_url: part.data.url.toString() } : {
|
|
267
267
|
image_url: `data:${resolveFullMediaType({ part })};base64,${convertToBase64(part.data.data)}`
|
|
268
|
-
}
|
|
268
|
+
},
|
|
269
|
+
detail: getImageDetail(part, providerOptionsName)
|
|
269
270
|
});
|
|
270
271
|
} else if (part.data.type === "url") {
|
|
271
272
|
userContent.push({
|
|
@@ -521,7 +522,8 @@ async function convertToOpenResponsesInput({
|
|
|
521
522
|
if (topLevel === "image") {
|
|
522
523
|
contentParts.push({
|
|
523
524
|
type: "input_image",
|
|
524
|
-
image_url: `data:${fullMediaType};base64,${convertToBase64(item.data.data)}
|
|
525
|
+
image_url: `data:${fullMediaType};base64,${convertToBase64(item.data.data)}`,
|
|
526
|
+
detail: getImageDetail(item, providerOptionsName)
|
|
525
527
|
});
|
|
526
528
|
} else {
|
|
527
529
|
contentParts.push({
|
|
@@ -534,7 +536,8 @@ async function convertToOpenResponsesInput({
|
|
|
534
536
|
if (topLevel === "image") {
|
|
535
537
|
contentParts.push({
|
|
536
538
|
type: "input_image",
|
|
537
|
-
image_url: item.data.url.toString()
|
|
539
|
+
image_url: item.data.url.toString(),
|
|
540
|
+
detail: getImageDetail(item, providerOptionsName)
|
|
538
541
|
});
|
|
539
542
|
} else {
|
|
540
543
|
contentParts.push({
|
|
@@ -640,6 +643,11 @@ function getProviderData(part, providerOptionsName) {
|
|
|
640
643
|
const providerData = (_c = (_a = part.providerOptions) == null ? void 0 : _a[providerOptionsName]) != null ? _c : (_b = part.providerMetadata) == null ? void 0 : _b[providerOptionsName];
|
|
641
644
|
return providerData != null && typeof providerData === "object" && !Array.isArray(providerData) ? providerData : void 0;
|
|
642
645
|
}
|
|
646
|
+
function getImageDetail(part, providerOptionsName) {
|
|
647
|
+
var _a;
|
|
648
|
+
const imageDetail = (_a = getProviderData(part, providerOptionsName)) == null ? void 0 : _a.imageDetail;
|
|
649
|
+
return imageDetail === "low" || imageDetail === "high" || imageDetail === "auto" ? imageDetail : "auto";
|
|
650
|
+
}
|
|
643
651
|
function parseReasoningSummary(value) {
|
|
644
652
|
if (!Array.isArray(value) || !value.every(
|
|
645
653
|
(part) => part != null && typeof part === "object" && part.type === "summary_text" && typeof part.text === "string"
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/version.ts","../src/open-responses-provider.ts","../src/open-responses-extension.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-language-model-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 LanguageModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n generateId,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport {\n createOpenResponsesExtensionRegistry,\n type OpenResponsesExtension,\n} from './open-responses-extension';\nimport { OpenResponsesLanguageModel } from './responses/open-responses-language-model';\nimport { VERSION } from './version';\n\nexport interface OpenResponsesProvider extends ProviderV4 {\n (modelId: string): LanguageModelV4;\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 /**\n * Whether to serialize assistant history using the strict OpenAI Responses\n * input schemas. Assistant messages without an item ID are sent as easy input\n * messages, while messages with an item ID are sent as complete output items.\n *\n * @default false\n */\n strictResponseInput?: boolean;\n\n /**\n * Codecs for Open Responses extension tools, items, and streaming events.\n *\n * @experimental This API may change in a future release.\n */\n experimental_extensions?: readonly OpenResponsesExtension[];\n}\n\nexport function createOpenResponses(\n options: OpenResponsesProviderSettings,\n): OpenResponsesProvider {\n const providerName = options.name;\n const extensionRegistry = createOpenResponsesExtensionRegistry(\n options.experimental_extensions,\n );\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 extensionRegistry,\n strictResponseInput: options.strictResponseInput,\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 = 'v4' 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 JSONObject,\n LanguageModelV4Content,\n LanguageModelV4ProviderTool,\n LanguageModelV4StreamPart,\n LanguageModelV4ToolCallPart,\n LanguageModelV4ToolResultPart,\n} from '@ai-sdk/provider';\nimport type { MaybePromiseLike } from '@ai-sdk/provider-utils';\n\nexport type OpenResponsesNamespacedType = `${string}:${string}`;\n\nexport type OpenResponsesExtensionRecord = JSONObject & {\n type: OpenResponsesNamespacedType;\n};\n\nexport type OpenResponsesExtensionItem = OpenResponsesExtensionRecord & {\n id: string;\n status: string;\n};\n\nexport type OpenResponsesExtensionEvent = OpenResponsesExtensionRecord & {\n sequence_number: number;\n};\n\nexport type OpenResponsesExtensionInputPart =\n | LanguageModelV4ToolCallPart\n | LanguageModelV4ToolResultPart;\n\nexport type OpenResponsesExtensionContentPart = Extract<\n LanguageModelV4Content,\n LanguageModelV4StreamPart\n>;\n\nexport type OpenResponsesExtensionStreamPart = Exclude<\n LanguageModelV4StreamPart,\n {\n type: 'error' | 'finish' | 'raw' | 'response-metadata' | 'stream-start';\n }\n>;\n\n/**\n * Defines how the provider encodes and decodes an Open Responses extension.\n *\n * Tool, item, and event codecs can be registered independently.\n */\nexport interface OpenResponsesExtension {\n /**\n * Extension ID in `<implementor>.<extension>` format. For extensions that\n * encode a provider tool, this is also the AI SDK provider-tool ID.\n */\n id: LanguageModelV4ProviderTool['id'];\n\n /**\n * Namespaced Open Responses tool type, in `<implementor>:<tool>` format.\n * Must be provided together with `encodeTool`.\n */\n toolType?: OpenResponsesNamespacedType;\n\n /**\n * Namespaced item types decoded by this extension. Must be provided together\n * with `decodeItem`.\n */\n itemTypes?: readonly OpenResponsesNamespacedType[];\n\n /**\n * Namespaced streaming event types decoded by this extension. Must be\n * provided together with `decodeEvent`.\n */\n eventTypes?: readonly OpenResponsesNamespacedType[];\n\n /**\n * Encodes an AI SDK provider tool. Return `undefined` when its arguments\n * cannot be encoded. The adapter adds `toolType` and omits a specific tool\n * choice that selects the omitted tool.\n */\n encodeTool?(options: {\n name: string;\n args: Record<string, unknown>;\n }): MaybePromiseLike<JSONObject | undefined>;\n\n /**\n * Encodes a specific `toolChoice`. The adapter adds `toolType`. The default\n * is an object containing only `toolType`.\n */\n encodeToolChoice?(options: {\n name: string;\n args: Record<string, unknown>;\n }): MaybePromiseLike<JSONObject | undefined>;\n\n /**\n * Decodes a completed namespaced item into AI SDK content parts. The adapter\n * adds a custom replay part containing the original item and reference\n * metadata to the returned parts.\n */\n decodeItem?(options: {\n item: OpenResponsesExtensionItem;\n mode: 'generate' | 'stream';\n }): MaybePromiseLike<OpenResponsesExtensionContentPart[] | undefined>;\n\n /**\n * Encodes an AI SDK history part when no original wire item is available.\n * Every returned item must use one of `itemTypes`.\n */\n encodeInputItem?(options: {\n part: OpenResponsesExtensionInputPart;\n tool: LanguageModelV4ProviderTool;\n }): MaybePromiseLike<\n OpenResponsesExtensionItem | OpenResponsesExtensionItem[] | undefined\n >;\n\n /**\n * Decodes a namespaced streaming event.\n *\n * `state` persists for the lifetime of one response stream.\n */\n decodeEvent?(options: {\n event: OpenResponsesExtensionEvent;\n state: Map<string, unknown>;\n }): MaybePromiseLike<OpenResponsesExtensionStreamPart[] | undefined>;\n}\n\nexport type OpenResponsesExtensionRegistry = {\n byEventType: Map<OpenResponsesNamespacedType, OpenResponsesEventExtension>;\n byExtensionId: Map<LanguageModelV4ProviderTool['id'], OpenResponsesExtension>;\n byItemType: Map<OpenResponsesNamespacedType, OpenResponsesItemExtension>;\n byProviderToolId: Map<\n LanguageModelV4ProviderTool['id'],\n OpenResponsesToolExtension\n >;\n byToolType: Map<OpenResponsesNamespacedType, OpenResponsesToolExtension>;\n};\n\ntype OpenResponsesToolExtension = OpenResponsesExtension & {\n toolType: OpenResponsesNamespacedType;\n encodeTool: NonNullable<OpenResponsesExtension['encodeTool']>;\n};\n\ntype OpenResponsesItemExtension = OpenResponsesExtension & {\n itemTypes: readonly OpenResponsesNamespacedType[];\n decodeItem: NonNullable<OpenResponsesExtension['decodeItem']>;\n};\n\ntype OpenResponsesEventExtension = OpenResponsesExtension & {\n eventTypes: readonly OpenResponsesNamespacedType[];\n decodeEvent: NonNullable<OpenResponsesExtension['decodeEvent']>;\n};\n\nexport function createOpenResponsesExtensionRegistry(\n extensions?: readonly OpenResponsesExtension[],\n): OpenResponsesExtensionRegistry {\n const registry: OpenResponsesExtensionRegistry = {\n byEventType: new Map(),\n byExtensionId: new Map(),\n byItemType: new Map(),\n byProviderToolId: new Map(),\n byToolType: new Map(),\n };\n\n for (const extension of extensions ?? []) {\n const namespaceSeparatorIndex = extension.id.indexOf('.');\n if (namespaceSeparatorIndex <= 0) {\n throw new Error(\n `Open Responses extension ID ${extension.id} must use <implementor>.<extension> format.`,\n );\n }\n const namespace = extension.id.slice(0, namespaceSeparatorIndex);\n\n registerUnique({\n map: registry.byExtensionId,\n key: extension.id,\n extension,\n field: 'id',\n });\n\n const hasToolType = extension.toolType != null;\n const hasToolEncoder = extension.encodeTool != null;\n if (hasToolType !== hasToolEncoder) {\n throw new Error(\n `Open Responses extension ${extension.id} must provide toolType and encodeTool together.`,\n );\n }\n\n if (extension.encodeToolChoice != null && !hasToolEncoder) {\n throw new Error(\n `Open Responses extension ${extension.id} cannot provide encodeToolChoice without toolType and encodeTool.`,\n );\n }\n\n if (hasToolType && hasToolEncoder) {\n const toolExtension = extension as OpenResponsesToolExtension;\n assertNamespacedType({\n extensionId: extension.id,\n namespace,\n type: toolExtension.toolType,\n field: 'toolType',\n });\n registerUnique({\n map: registry.byProviderToolId,\n key: extension.id,\n extension: toolExtension,\n field: 'provider-tool id',\n });\n registerUnique({\n map: registry.byToolType,\n key: toolExtension.toolType,\n extension: toolExtension,\n field: 'toolType',\n });\n }\n\n const hasItemTypes = extension.itemTypes != null;\n const hasItemDecoder = extension.decodeItem != null;\n if (hasItemTypes !== hasItemDecoder) {\n throw new Error(\n `Open Responses extension ${extension.id} must provide itemTypes and decodeItem together.`,\n );\n }\n\n if (extension.encodeInputItem != null && !hasItemDecoder) {\n throw new Error(\n `Open Responses extension ${extension.id} cannot provide encodeInputItem without itemTypes and decodeItem.`,\n );\n }\n\n if (hasItemTypes && hasItemDecoder) {\n const itemExtension = extension as OpenResponsesItemExtension;\n if (itemExtension.itemTypes.length === 0) {\n throw new Error(\n `Open Responses extension ${extension.id} must register at least one item type.`,\n );\n }\n for (const itemType of itemExtension.itemTypes) {\n assertNamespacedType({\n extensionId: extension.id,\n namespace,\n type: itemType,\n field: 'itemTypes',\n });\n registerUnique({\n map: registry.byItemType,\n key: itemType,\n extension: itemExtension,\n field: 'item type',\n });\n }\n }\n\n const hasEventTypes = extension.eventTypes != null;\n const hasEventDecoder = extension.decodeEvent != null;\n if (hasEventTypes !== hasEventDecoder) {\n throw new Error(\n `Open Responses extension ${extension.id} must provide eventTypes and decodeEvent together.`,\n );\n }\n\n if (hasEventTypes && hasEventDecoder) {\n const eventExtension = extension as OpenResponsesEventExtension;\n if (eventExtension.eventTypes.length === 0) {\n throw new Error(\n `Open Responses extension ${extension.id} must register at least one event type.`,\n );\n }\n for (const eventType of eventExtension.eventTypes) {\n assertNamespacedType({\n extensionId: extension.id,\n namespace,\n type: eventType,\n field: 'eventTypes',\n });\n registerUnique({\n map: registry.byEventType,\n key: eventType,\n extension: eventExtension,\n field: 'event type',\n });\n }\n }\n\n if (!hasToolEncoder && !hasItemDecoder && !hasEventDecoder) {\n throw new Error(\n `Open Responses extension ${extension.id} must register a tool, item, or event capability.`,\n );\n }\n }\n\n return registry;\n}\n\nfunction assertNamespacedType({\n extensionId,\n namespace,\n type,\n field,\n}: {\n extensionId: string;\n namespace: string;\n type: string;\n field: string;\n}) {\n if (!type.includes(':') || type.slice(0, type.indexOf(':')) !== namespace) {\n throw new Error(\n `Open Responses extension ${extensionId} has invalid ${field} value ${type}. Extension wire types must use the ${namespace}: namespace.`,\n );\n }\n}\n\nfunction registerUnique<K, Extension extends OpenResponsesExtension>({\n map,\n key,\n extension,\n field,\n}: {\n map: Map<K, Extension>;\n key: K;\n extension: Extension;\n field: string;\n}) {\n const existing = map.get(key);\n if (existing != null) {\n throw new Error(\n `Open Responses extension ${extension.id} cannot register ${field} ${String(key)} because it is already registered by ${existing.id}.`,\n );\n }\n map.set(key, extension);\n}\n\nexport function isOpenResponsesNamespacedType(\n value: unknown,\n): value is OpenResponsesNamespacedType {\n return typeof value === 'string' && value.includes(':');\n}\n\nexport function isOpenResponsesExtensionRecord(\n value: unknown,\n): value is OpenResponsesExtensionRecord {\n return (\n isOpenResponsesJSONObject(value) &&\n isOpenResponsesNamespacedType((value as { type?: unknown }).type)\n );\n}\n\nexport function isOpenResponsesJSONObject(value: unknown): value is JSONObject {\n return (\n value != null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) === Object.prototype &&\n Object.values(value).every(isOpenResponsesJSONValue)\n );\n}\n\nexport function isOpenResponsesExtensionItem(\n value: unknown,\n): value is OpenResponsesExtensionItem {\n return (\n isOpenResponsesExtensionRecord(value) &&\n typeof value.id === 'string' &&\n typeof value.status === 'string'\n );\n}\n\nexport function isOpenResponsesExtensionEvent(\n value: unknown,\n): value is OpenResponsesExtensionEvent {\n return (\n isOpenResponsesExtensionRecord(value) &&\n typeof value.sequence_number === 'number'\n );\n}\n\nfunction isOpenResponsesJSONValue(value: unknown): boolean {\n if (\n value == null ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.every(isOpenResponsesJSONValue);\n }\n\n return isOpenResponsesJSONObject(value);\n}\n","import {\n APICallError,\n type LanguageModelV4,\n type LanguageModelV4CallOptions,\n type LanguageModelV4Content,\n type LanguageModelV4FinishReason,\n type LanguageModelV4GenerateResult,\n type LanguageModelV4StreamPart,\n type LanguageModelV4StreamResult,\n type LanguageModelV4Usage,\n type SharedV4ProviderMetadata,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n createProviderStreamError,\n isCustomReasoning,\n jsonSchema,\n mapReasoningToProviderEffort,\n parseProviderOptions,\n postJsonToApi,\n SerializationError,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type ParseResult,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n createOpenResponsesExtensionRegistry,\n isOpenResponsesExtensionEvent,\n isOpenResponsesExtensionItem,\n isOpenResponsesJSONObject,\n type OpenResponsesExtension,\n type OpenResponsesExtensionContentPart,\n type OpenResponsesExtensionItem,\n type OpenResponsesExtensionRecord,\n type OpenResponsesExtensionRegistry,\n} from '../open-responses-extension';\nimport { convertToOpenResponsesInput } from './convert-to-open-responses-input';\nimport {\n openResponsesErrorSchema,\n type Annotation,\n type OpenResponsesRequestBody,\n type OpenResponsesResponseBody,\n type OpenResponsesChunk,\n type ReasoningBody,\n type ToolChoiceParam,\n} from './open-responses-api';\nimport { mapOpenResponsesFinishReason } from './map-open-responses-finish-reason';\nimport type { OpenResponsesConfig } from './open-responses-config';\nimport { openResponsesLanguageModelOptions } from './open-responses-language-model-options';\n\nexport class OpenResponsesLanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n\n readonly modelId: string;\n\n private readonly config: OpenResponsesConfig;\n private readonly extensionRegistry: OpenResponsesExtensionRegistry;\n\n static [WORKFLOW_SERIALIZE](model: OpenResponsesLanguageModel) {\n if (model.extensionRegistry.byExtensionId.size > 0) {\n throw new SerializationError({\n message:\n 'Open Responses models with registered extensions cannot be serialized across workflow boundaries. Recreate the provider with its extension codecs inside the workflow step.',\n });\n }\n\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: string;\n config: OpenResponsesConfig;\n }) {\n return new OpenResponsesLanguageModel(options.modelId, options.config);\n }\n\n constructor(modelId: string, config: OpenResponsesConfig) {\n this.modelId = modelId;\n this.config = config;\n this.extensionRegistry =\n config.extensionRegistry ?? createOpenResponsesExtensionRegistry();\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 reasoning,\n prompt,\n providerOptions,\n tools,\n toolChoice,\n responseFormat,\n }: LanguageModelV4CallOptions): Promise<{\n body: Omit<OpenResponsesRequestBody, 'stream' | 'stream_options'>;\n warnings: SharedV4Warning[];\n }> {\n const warnings: SharedV4Warning[] = [];\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 providerToolsByName = new Map(\n (tools ?? [])\n .filter(tool => tool.type === 'provider')\n .map(tool => [tool.name, tool]),\n );\n\n const {\n input,\n instructions,\n warnings: inputWarnings,\n } = await convertToOpenResponsesInput({\n prompt,\n providerOptionsName: this.config.providerOptionsName,\n extensionRegistry: this.extensionRegistry,\n providerToolsByName,\n strictResponseInput: this.config.strictResponseInput,\n });\n\n warnings.push(...inputWarnings);\n\n const convertedTools: NonNullable<OpenResponsesRequestBody['tools']> = [];\n const encodedProviderToolsByName = new Map<\n string,\n {\n toolType: OpenResponsesExtensionRecord['type'];\n encodeToolChoice: OpenResponsesExtension['encodeToolChoice'];\n tool: Extract<\n NonNullable<LanguageModelV4CallOptions['tools']>[number],\n { type: 'provider' }\n >;\n }\n >();\n\n for (const tool of tools ?? []) {\n if (tool.type === 'provider') {\n const extension = this.extensionRegistry.byProviderToolId.get(tool.id);\n let encoded: OpenResponsesExtensionRecord | undefined;\n\n if (extension != null) {\n try {\n const fields = await extension.encodeTool({\n name: tool.name,\n args: tool.args,\n });\n\n if (isOpenResponsesJSONObject(fields)) {\n encoded = {\n ...fields,\n type: extension.toolType,\n };\n }\n } catch {\n // Encoding failures are reported as unsupported below.\n }\n }\n\n if (encoded == null) {\n warnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n });\n } else if (extension != null) {\n convertedTools.push(encoded);\n encodedProviderToolsByName.set(tool.name, {\n toolType: extension.toolType,\n encodeToolChoice: extension.encodeToolChoice,\n tool,\n });\n }\n } else {\n convertedTools.push({\n type: 'function',\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n });\n }\n }\n\n // Convert tool choice to the Open Responses format\n let convertedToolChoice: ToolChoiceParam | undefined;\n if (toolChoice?.type === 'tool') {\n const registeredTool = encodedProviderToolsByName.get(\n toolChoice.toolName,\n );\n\n if (registeredTool == null) {\n if (!providerToolsByName.has(toolChoice.toolName)) {\n convertedToolChoice = {\n type: 'function',\n name: toolChoice.toolName,\n };\n }\n } else {\n const { encodeToolChoice, tool, toolType } = registeredTool;\n let fields: unknown = {};\n\n try {\n fields = await encodeToolChoice?.({\n name: tool.name,\n args: tool.args,\n });\n } catch {\n fields = undefined;\n }\n\n if (encodeToolChoice != null && !isOpenResponsesJSONObject(fields)) {\n warnings.push({\n type: 'unsupported',\n feature: `tool choice for provider-defined tool ${tool.id}`,\n });\n } else {\n convertedToolChoice = {\n ...(isOpenResponsesJSONObject(fields) ? fields : {}),\n type: toolType,\n };\n }\n }\n } else {\n convertedToolChoice = toolChoice?.type;\n }\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: openResponsesLanguageModelOptions,\n });\n\n const resolvedReasoningEffort =\n openResponsesOptions?.reasoningEffort ??\n (isCustomReasoning(reasoning)\n ? reasoning === 'none'\n ? 'none'\n : mapReasoningToProviderEffort({\n reasoning,\n effortMap: {\n minimal: 'low',\n low: 'low',\n medium: 'medium',\n high: 'high',\n xhigh: 'xhigh',\n },\n warnings,\n })\n : undefined);\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 resolvedReasoningEffort != null ||\n openResponsesOptions?.reasoningSummary != null\n ? {\n ...(resolvedReasoningEffort != null && {\n effort: resolvedReasoningEffort,\n }),\n ...(openResponsesOptions?.reasoningSummary != null && {\n summary: openResponsesOptions.reasoningSummary,\n }),\n }\n : undefined,\n tools: convertedTools.length ? convertedTools : undefined,\n tool_choice: convertedToolChoice,\n ...(textFormat != null && { text: { format: textFormat } }),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\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 if (response.error) {\n throw new APICallError({\n message: response.error.message,\n url: this.config.url,\n requestBodyValues: body,\n statusCode: 400,\n responseHeaders,\n responseBody: rawResponse as string,\n isRetryable: false,\n });\n }\n\n if (response.output == null) {\n const detail = response.incomplete_details?.reason ?? response.status;\n throw new APICallError({\n message: detail\n ? `Responses API returned no output (${detail})`\n : 'Responses API returned no output',\n url: this.config.url,\n requestBodyValues: body,\n statusCode: 500,\n responseHeaders,\n responseBody: rawResponse as string,\n isRetryable: false,\n });\n }\n\n const content: Array<LanguageModelV4Content> = [];\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 if ((part.content?.length ?? 0) > 0) {\n for (const contentPart of part.content!) {\n content.push({\n type: 'reasoning',\n text: contentPart.text,\n providerMetadata: createReasoningProviderMetadata({\n part,\n providerOptionsName: this.config.providerOptionsName,\n reasoningContent: [contentPart],\n }),\n });\n }\n } else {\n content.push({\n type: 'reasoning',\n text: part.summary.map(summaryPart => summaryPart.text).join(''),\n providerMetadata: createReasoningProviderMetadata({\n part,\n providerOptionsName: this.config.providerOptionsName,\n }),\n });\n }\n break;\n }\n\n case 'message': {\n for (const contentPart of part.content) {\n const annotations = getOutputTextAnnotations(contentPart);\n\n content.push({\n type: 'text',\n text: contentPart.text,\n providerMetadata: {\n [this.config.providerOptionsName]: {\n itemId: part.id,\n ...(annotations.length > 0 && { annotations }),\n },\n },\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 providerMetadata: {\n [this.config.providerOptionsName]: { itemId: part.id },\n },\n });\n break;\n }\n\n default: {\n if (!isOpenResponsesExtensionItem(part)) {\n break;\n }\n\n const decoded = await decodeExtensionItem({\n extensionRegistry: this.extensionRegistry,\n item: part,\n mode: 'generate',\n providerOptionsName: this.config.providerOptionsName,\n });\n\n if (decoded != null) {\n content.push(...decoded);\n hasToolCalls ||= decoded.some(part => part.type === 'tool-call');\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: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\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: LanguageModelV4Usage = {\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 activeReasoningId: string | undefined;\n let hasToolCalls = false;\n let finishReason: LanguageModelV4FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n const toolCallsByItemId = new Map<\n string,\n { toolName?: string; toolCallId?: string; arguments?: string }\n >();\n const providerOptionsName = this.config.providerOptionsName;\n const extensionRegistry = this.extensionRegistry;\n const extensionStreamState = new Map<string, unknown>();\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<OpenResponsesChunk>,\n LanguageModelV4StreamPart\n >({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n async 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 if (isOpenResponsesExtensionEvent(chunk)) {\n const extension = extensionRegistry.byEventType.get(chunk.type);\n if (extension?.decodeEvent != null) {\n try {\n const decoded = await extension.decodeEvent({\n event: chunk,\n state: extensionStreamState,\n });\n for (const part of decoded ?? []) {\n controller.enqueue(part);\n hasToolCalls ||=\n part.type === 'tool-call' ||\n part.type === 'tool-input-start';\n }\n } catch (error) {\n controller.enqueue({ type: 'error', error });\n }\n }\n return;\n }\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 providerMetadata: {\n [providerOptionsName]: {\n itemId: chunk.item.id,\n },\n },\n });\n hasToolCalls = true;\n\n toolCallsByItemId.delete(chunk.item.id);\n } else if (\n chunk.type === 'response.output_item.done' &&\n isOpenResponsesExtensionItem(chunk.item)\n ) {\n try {\n const decoded = await decodeExtensionItem({\n extensionRegistry,\n item: chunk.item,\n mode: 'stream',\n providerOptionsName,\n });\n\n for (const part of decoded ?? []) {\n controller.enqueue(part);\n hasToolCalls ||= part.type === 'tool-call';\n }\n } catch (error) {\n controller.enqueue({ type: 'error', error });\n }\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 activeReasoningId = chunk.item.id;\n } else if (\n chunk.type === 'response.reasoning_summary_text.delta' ||\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({\n type: 'reasoning-end',\n id: chunk.item.id,\n providerMetadata: createReasoningProviderMetadata({\n part: chunk.item,\n providerOptionsName,\n }),\n });\n if (activeReasoningId === chunk.item.id) {\n activeReasoningId = undefined;\n }\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 const annotations = chunk.item.content.flatMap(\n getOutputTextAnnotations,\n );\n\n controller.enqueue({\n type: 'text-end',\n id: chunk.item.id,\n providerMetadata: {\n [providerOptionsName]: {\n itemId: chunk.item.id,\n ...(annotations.length > 0 && { annotations }),\n },\n },\n });\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 if (chunk.response.error != null) {\n controller.enqueue({\n type: 'error',\n error: createOpenResponsesStreamError({\n type: chunk.type,\n error: chunk.response.error,\n data: chunk,\n }),\n });\n }\n } else if (chunk.type === 'error') {\n finishReason = {\n unified: 'error',\n raw: chunk.error.code,\n };\n controller.enqueue({\n type: 'error',\n error: createOpenResponsesStreamError({\n type: chunk.type,\n error: chunk.error,\n data: chunk,\n }),\n });\n }\n },\n\n flush(controller) {\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\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\nfunction createOpenResponsesStreamError({\n type,\n error,\n data,\n}: {\n type: 'error' | 'response.failed';\n error: { message: string; code: string };\n data: unknown;\n}) {\n return createProviderStreamError({\n message: error.message,\n type,\n code: error.code,\n data,\n });\n}\n\nfunction createReasoningProviderMetadata({\n part,\n providerOptionsName,\n reasoningContent = part.content,\n}: {\n part: ReasoningBody;\n providerOptionsName: string;\n reasoningContent?: ReasoningBody['content'];\n}): SharedV4ProviderMetadata {\n return {\n [providerOptionsName]: {\n itemId: part.id,\n reasoningSummary: part.summary.map(summaryPart => ({\n type: 'summary_text',\n text: summaryPart.text,\n })),\n reasoningContent:\n reasoningContent == null\n ? null\n : reasoningContent.map(contentPart => ({\n type: 'reasoning_text',\n text: contentPart.text,\n })),\n ...(part.encrypted_content != null && {\n reasoningEncryptedContent: part.encrypted_content,\n }),\n },\n };\n}\n\nasync function decodeExtensionItem({\n extensionRegistry,\n item,\n mode,\n providerOptionsName,\n}: {\n extensionRegistry: OpenResponsesExtensionRegistry;\n item: OpenResponsesExtensionItem;\n mode: 'generate' | 'stream';\n providerOptionsName: string;\n}): Promise<OpenResponsesExtensionContentPart[] | undefined> {\n const extension = extensionRegistry.byItemType.get(item.type);\n if (extension == null) {\n return undefined;\n }\n\n const decoded = await extension.decodeItem({ item, mode });\n if (decoded == null) {\n return undefined;\n }\n\n return [\n createExtensionReplayCarrier({\n extension,\n item,\n providerOptionsName,\n }),\n ...decoded.map(part =>\n addExtensionItemReferenceMetadata({\n extension,\n item,\n part,\n providerOptionsName,\n }),\n ),\n ];\n}\n\nfunction createExtensionReplayCarrier({\n extension,\n item,\n providerOptionsName,\n}: {\n extension: OpenResponsesExtension;\n item: OpenResponsesExtensionItem;\n providerOptionsName: string;\n}): OpenResponsesExtensionContentPart {\n return {\n type: 'custom',\n kind: 'open-responses.extension-replay',\n providerMetadata: {\n [providerOptionsName]: {\n openResponsesExtension: {\n id: extension.id,\n item,\n },\n },\n },\n };\n}\n\nfunction addExtensionItemReferenceMetadata({\n extension,\n item,\n part,\n providerOptionsName,\n}: {\n extension: OpenResponsesExtension;\n item: OpenResponsesExtensionItem;\n part: OpenResponsesExtensionContentPart;\n providerOptionsName: string;\n}): OpenResponsesExtensionContentPart {\n const providerMetadata = part.providerMetadata ?? {};\n\n return {\n ...part,\n providerMetadata: {\n ...providerMetadata,\n [providerOptionsName]: {\n ...providerMetadata[providerOptionsName],\n openResponsesExtension: {\n id: extension.id,\n itemId: item.id,\n },\n },\n },\n };\n}\n\nfunction getOutputTextAnnotations(value: unknown): Annotation[] {\n if (\n value == null ||\n typeof value !== 'object' ||\n !('annotations' in value) ||\n !Array.isArray(value.annotations) ||\n !value.annotations.every(\n annotation =>\n annotation != null &&\n typeof annotation === 'object' &&\n (annotation as { type?: unknown }).type === 'url_citation' &&\n typeof (annotation as { start_index?: unknown }).start_index ===\n 'number' &&\n typeof (annotation as { end_index?: unknown }).end_index === 'number' &&\n typeof (annotation as { url?: unknown }).url === 'string' &&\n typeof (annotation as { title?: unknown }).title === 'string',\n )\n ) {\n return [];\n }\n\n return value.annotations.map(annotation => ({\n type: 'url_citation',\n start_index: (annotation as { start_index: number }).start_index,\n end_index: (annotation as { end_index: number }).end_index,\n url: (annotation as { url: string }).url,\n title: (annotation as { title: string }).title,\n }));\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV4ProviderTool,\n type LanguageModelV4Prompt,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n convertToBase64,\n getTopLevelMediaType,\n resolveFullMediaType,\n} from '@ai-sdk/provider-utils';\nimport {\n isOpenResponsesExtensionItem,\n type OpenResponsesExtensionInputPart,\n type OpenResponsesExtensionItem,\n type OpenResponsesExtensionRegistry,\n} from '../open-responses-extension';\nimport type {\n FunctionCallOutputItemParam,\n InputFileContentParam,\n InputImageContentParam,\n InputTextContentParam,\n OpenResponsesRequestBody,\n OutputTextContentParam,\n ReasoningItemParam,\n RefusalContentParam,\n} from './open-responses-api';\n\nexport async function convertToOpenResponsesInput({\n prompt,\n providerOptionsName = 'open-responses',\n extensionRegistry,\n providerToolsByName = new Map(),\n strictResponseInput = false,\n}: {\n prompt: LanguageModelV4Prompt;\n providerOptionsName?: string;\n extensionRegistry?: OpenResponsesExtensionRegistry;\n providerToolsByName?: Map<string, LanguageModelV4ProviderTool>;\n strictResponseInput?: boolean;\n}): Promise<{\n input: OpenResponsesRequestBody['input'];\n instructions: string | undefined;\n warnings: Array<SharedV4Warning>;\n}> {\n const input: OpenResponsesRequestBody['input'] = [];\n const warnings: Array<SharedV4Warning> = [];\n const systemMessages: string[] = [];\n const replayedExtensionItems = new Set<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 switch (part.data.type) {\n case 'reference': {\n throw new UnsupportedFunctionalityError({\n functionality: 'file parts with provider references',\n });\n }\n case 'text': {\n throw new UnsupportedFunctionalityError({\n functionality: 'text file parts',\n });\n }\n case 'url':\n case 'data': {\n const topLevel = getTopLevelMediaType(part.mediaType);\n\n if (topLevel === 'image') {\n userContent.push({\n type: 'input_image',\n ...(part.data.type === 'url'\n ? { image_url: part.data.url.toString() }\n : {\n image_url: `data:${resolveFullMediaType({ part })};base64,${convertToBase64(part.data.data)}`,\n }),\n });\n } else if (part.data.type === 'url') {\n userContent.push({\n type: 'input_file',\n file_url: part.data.url.toString(),\n });\n } else {\n const fullMediaType = resolveFullMediaType({ part });\n userContent.push({\n type: 'input_file',\n filename: part.filename ?? 'data',\n file_data: `data:${fullMediaType};base64,${convertToBase64(part.data.data)}`,\n });\n }\n\n break;\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 let assistantContent: Array<\n OutputTextContentParam | RefusalContentParam\n > = [];\n let assistantMessageId: string | undefined;\n\n const flushAssistantContent = () => {\n if (assistantContent.length === 0) {\n return;\n }\n\n if (strictResponseInput && assistantMessageId == null) {\n input.push({\n type: 'message',\n role: 'assistant',\n content: assistantContent\n .map(part =>\n part.type === 'output_text' ? part.text : part.refusal,\n )\n .join(''),\n });\n } else if (strictResponseInput) {\n input.push({\n id: assistantMessageId,\n type: 'message',\n status: 'completed',\n role: 'assistant',\n content: assistantContent.map(part =>\n part.type === 'output_text'\n ? {\n ...part,\n annotations: part.annotations ?? [],\n logprobs: part.logprobs ?? [],\n }\n : part,\n ),\n });\n } else {\n input.push({\n type: 'message',\n role: 'assistant',\n content: assistantContent,\n ...(assistantMessageId != null && { id: assistantMessageId }),\n });\n }\n assistantContent = [];\n assistantMessageId = undefined;\n };\n\n for (const part of content) {\n const extensionReplay = getExtensionReplay({\n part,\n providerOptionsName,\n extensionRegistry,\n });\n\n if (extensionReplay != null) {\n flushAssistantContent();\n const replayItem = extensionReplay.item;\n if (replayItem != null) {\n const replayKey = `${replayItem.type}:${replayItem.id}`;\n if (!replayedExtensionItems.has(replayKey)) {\n input.push(replayItem);\n replayedExtensionItems.add(replayKey);\n }\n }\n continue;\n }\n\n if (part.type === 'tool-call' || part.type === 'tool-result') {\n const providerTool = providerToolsByName.get(part.toolName);\n const extension =\n providerTool == null\n ? undefined\n : extensionRegistry?.byProviderToolId.get(providerTool.id);\n\n if (providerTool != null && extension != null) {\n flushAssistantContent();\n const encoded = await encodeExtensionInputPart({\n extensionRegistry,\n part,\n providerTool,\n });\n\n if (encoded == null) {\n warnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${providerTool.id} ${part.type} history`,\n });\n } else {\n input.push(...encoded);\n }\n continue;\n }\n }\n\n switch (part.type) {\n case 'reasoning': {\n flushAssistantContent();\n\n const providerData = getProviderData(part, providerOptionsName);\n const itemId =\n typeof providerData?.itemId === 'string'\n ? providerData.itemId\n : undefined;\n const summary = parseReasoningSummary(\n providerData?.reasoningSummary,\n );\n const reasoningContent = parseReasoningContent(\n providerData?.reasoningContent,\n );\n const hasReasoningContent =\n providerData != null && 'reasoningContent' in providerData;\n const encryptedContent =\n typeof providerData?.reasoningEncryptedContent === 'string'\n ? providerData.reasoningEncryptedContent\n : undefined;\n\n const reasoningItem: ReasoningItemParam = {\n type: 'reasoning',\n summary: summary ?? [],\n ...(itemId != null && { id: itemId }),\n ...(reasoningContent != null\n ? { content: reasoningContent }\n : !hasReasoningContent && part.text.length > 0\n ? {\n content: [\n {\n type: 'reasoning_text' as const,\n text: part.text,\n },\n ],\n }\n : {}),\n ...(encryptedContent != null && {\n encrypted_content: encryptedContent,\n }),\n };\n const previousItem = input[input.length - 1];\n\n if (\n reasoningItem.id != null &&\n previousItem?.type === 'reasoning' &&\n previousItem.id === reasoningItem.id\n ) {\n if (reasoningItem.content != null) {\n previousItem.content = [\n ...(previousItem.content ?? []),\n ...reasoningItem.content,\n ];\n }\n } else {\n input.push(reasoningItem);\n }\n break;\n }\n case 'text': {\n const providerData = getProviderData(part, providerOptionsName);\n const itemId =\n typeof providerData?.itemId === 'string'\n ? providerData.itemId\n : undefined;\n const annotations = parseOutputTextAnnotations(\n providerData?.annotations,\n );\n\n if (\n assistantContent.length > 0 &&\n assistantMessageId !== itemId\n ) {\n flushAssistantContent();\n }\n\n assistantMessageId = itemId;\n assistantContent.push({\n type: 'output_text',\n text: part.text,\n ...(annotations != null && { annotations }),\n });\n break;\n }\n case 'tool-call': {\n flushAssistantContent();\n\n const argumentsValue =\n typeof part.input === 'string'\n ? part.input\n : JSON.stringify(part.input);\n const providerData = getProviderData(part, providerOptionsName);\n const itemId =\n typeof providerData?.itemId === 'string'\n ? providerData.itemId\n : undefined;\n\n input.push({\n type: 'function_call',\n ...(itemId != null && { id: itemId }),\n call_id: part.toolCallId,\n name: part.toolName,\n arguments: argumentsValue,\n });\n break;\n }\n }\n }\n\n flushAssistantContent();\n\n break;\n }\n\n case 'tool': {\n for (const part of content) {\n if (part.type === 'tool-result') {\n const extensionReplay = getExtensionReplay({\n part,\n providerOptionsName,\n extensionRegistry,\n });\n\n if (extensionReplay != null) {\n const replayItem = extensionReplay.item;\n if (replayItem != null) {\n const replayKey = `${replayItem.type}:${replayItem.id}`;\n if (!replayedExtensionItems.has(replayKey)) {\n input.push(replayItem);\n replayedExtensionItems.add(replayKey);\n }\n }\n continue;\n }\n\n const providerTool = providerToolsByName.get(part.toolName);\n const extension =\n providerTool == null\n ? undefined\n : extensionRegistry?.byProviderToolId.get(providerTool.id);\n\n if (providerTool != null && extension != null) {\n const encoded = await encodeExtensionInputPart({\n extensionRegistry,\n part,\n providerTool,\n });\n\n if (encoded == null) {\n warnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${providerTool.id} tool-result history`,\n });\n } else {\n input.push(...encoded);\n }\n continue;\n }\n\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 call 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 'file': {\n const topLevel = getTopLevelMediaType(item.mediaType);\n\n if (item.data.type === 'data') {\n const fullMediaType = resolveFullMediaType({\n part: item,\n });\n if (topLevel === 'image') {\n contentParts.push({\n type: 'input_image',\n image_url: `data:${fullMediaType};base64,${convertToBase64(item.data.data)}`,\n });\n } else {\n contentParts.push({\n type: 'input_file',\n filename: item.filename ?? 'data',\n file_data: `data:${fullMediaType};base64,${convertToBase64(item.data.data)}`,\n });\n }\n } else if (item.data.type === 'url') {\n if (topLevel === 'image') {\n contentParts.push({\n type: 'input_image',\n image_url: item.data.url.toString(),\n });\n } else {\n contentParts.push({\n type: 'input_file',\n file_url: item.data.url.toString(),\n });\n }\n } else {\n warnings.push({\n type: 'other',\n message: `unsupported tool content part type: ${item.type} with data type: ${item.data.type}`,\n });\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\nasync function encodeExtensionInputPart({\n extensionRegistry,\n part,\n providerTool,\n}: {\n extensionRegistry: OpenResponsesExtensionRegistry | undefined;\n part: OpenResponsesExtensionInputPart;\n providerTool: LanguageModelV4ProviderTool;\n}): Promise<OpenResponsesExtensionItem[] | undefined> {\n const extension = extensionRegistry?.byProviderToolId.get(providerTool.id);\n const encodeInputItem = extension?.encodeInputItem;\n const itemTypes = extension?.itemTypes;\n if (encodeInputItem == null || itemTypes == null) {\n return undefined;\n }\n\n try {\n const value = await encodeInputItem({\n part,\n tool: providerTool,\n });\n const items =\n value == null ? undefined : Array.isArray(value) ? value : [value];\n\n if (\n items == null ||\n items.length === 0 ||\n !items.every(\n item =>\n isOpenResponsesExtensionItem(item) && itemTypes.includes(item.type),\n )\n ) {\n return undefined;\n }\n\n return items;\n } catch {\n return undefined;\n }\n}\n\nfunction getExtensionReplay({\n part,\n providerOptionsName,\n extensionRegistry,\n}: {\n part: {\n providerOptions?: Record<string, unknown>;\n };\n providerOptionsName: string;\n extensionRegistry: OpenResponsesExtensionRegistry | undefined;\n}): { item?: OpenResponsesExtensionItem } | undefined {\n const extensionData = getProviderData(\n part,\n providerOptionsName,\n )?.openResponsesExtension;\n\n if (\n extensionData == null ||\n typeof extensionData !== 'object' ||\n Array.isArray(extensionData)\n ) {\n return undefined;\n }\n\n const { id, item, itemId } = extensionData as {\n id?: unknown;\n item?: unknown;\n itemId?: unknown;\n };\n\n if (typeof id !== 'string') {\n return undefined;\n }\n\n const extension = extensionRegistry?.byExtensionId.get(\n id as LanguageModelV4ProviderTool['id'],\n );\n\n if (extension == null) {\n return undefined;\n }\n\n if (\n isOpenResponsesExtensionItem(item) &&\n extension.itemTypes?.includes(item.type)\n ) {\n return { item };\n }\n\n return typeof itemId === 'string' ? {} : undefined;\n}\n\nfunction getProviderData(\n part: {\n providerOptions?: Record<string, unknown>;\n },\n providerOptionsName: string,\n): Record<string, unknown> | undefined {\n const providerData =\n part.providerOptions?.[providerOptionsName] ??\n (\n part as {\n providerMetadata?: Record<string, unknown>;\n }\n ).providerMetadata?.[providerOptionsName];\n\n return providerData != null &&\n typeof providerData === 'object' &&\n !Array.isArray(providerData)\n ? (providerData as Record<string, unknown>)\n : undefined;\n}\n\nfunction parseReasoningSummary(\n value: unknown,\n): ReasoningItemParam['summary'] | undefined {\n if (\n !Array.isArray(value) ||\n !value.every(\n part =>\n part != null &&\n typeof part === 'object' &&\n (part as { type?: unknown }).type === 'summary_text' &&\n typeof (part as { text?: unknown }).text === 'string',\n )\n ) {\n return undefined;\n }\n\n return value.map(part => ({\n type: 'summary_text',\n text: (part as { text: string }).text,\n }));\n}\n\nfunction parseReasoningContent(\n value: unknown,\n): ReasoningItemParam['content'] | undefined {\n if (\n !Array.isArray(value) ||\n !value.every(\n part =>\n part != null &&\n typeof part === 'object' &&\n (part as { type?: unknown }).type === 'reasoning_text' &&\n typeof (part as { text?: unknown }).text === 'string',\n )\n ) {\n return undefined;\n }\n\n return value.map(part => ({\n type: 'reasoning_text',\n text: (part as { text: string }).text,\n }));\n}\n\nfunction parseOutputTextAnnotations(\n value: unknown,\n): OutputTextContentParam['annotations'] | undefined {\n if (\n !Array.isArray(value) ||\n !value.every(\n annotation =>\n annotation != null &&\n typeof annotation === 'object' &&\n (annotation as { type?: unknown }).type === 'url_citation' &&\n typeof (annotation as { start_index?: unknown }).start_index ===\n 'number' &&\n typeof (annotation as { end_index?: unknown }).end_index === 'number' &&\n typeof (annotation as { url?: unknown }).url === 'string' &&\n typeof (annotation as { title?: unknown }).title === 'string',\n )\n ) {\n return undefined;\n }\n\n return value.map(annotation => ({\n type: 'url_citation',\n start_index: (annotation as { start_index: number }).start_index,\n end_index: (annotation as { end_index: number }).end_index,\n url: (annotation as { url: string }).url,\n title: (annotation as { title: string }).title,\n }));\n}\n","import type { JSONSchema7 } from '@ai-sdk/provider';\nimport { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type {\n OpenResponsesExtensionEvent,\n OpenResponsesExtensionItem,\n OpenResponsesExtensionRecord,\n} from '../open-responses-extension';\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 logprobs?: LogProb[];\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?: ReasoningTextContent[];\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 | OpenResponsesExtensionRecord;\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?: string;\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 | OpenResponsesExtensionItem;\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 | OpenResponsesExtensionRecord\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?: Array<FunctionToolParam | OpenResponsesExtensionRecord>;\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 // Registered extension event\n | OpenResponsesExtensionEvent;\n","import type { LanguageModelV4FinishReason } from '@ai-sdk/provider';\n\nexport function mapOpenResponsesFinishReason({\n finishReason,\n hasToolCalls,\n}: {\n finishReason: string | null | undefined;\n hasToolCalls: boolean;\n}): LanguageModelV4FinishReason['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 openResponsesLanguageModelOptions = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * Provider-native reasoning effort. The value is passed through to the\n * endpoint and takes precedence over the top-level `reasoning` setting.\n */\n reasoningEffort: z.string().nullish(),\n\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 OpenResponsesLanguageModelOptions = InferSchema<\n typeof openResponsesLanguageModelOptions\n>;\n"],"mappings":"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","names":["z","_a","_b","lazySchema","zodSchema","z","part","z","_a","_b"]}
|
|
1
|
+
{"version":3,"sources":["../src/version.ts","../src/open-responses-provider.ts","../src/open-responses-extension.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-language-model-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 LanguageModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n generateId,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport {\n createOpenResponsesExtensionRegistry,\n type OpenResponsesExtension,\n} from './open-responses-extension';\nimport { OpenResponsesLanguageModel } from './responses/open-responses-language-model';\nimport { VERSION } from './version';\n\nexport interface OpenResponsesProvider extends ProviderV4 {\n (modelId: string): LanguageModelV4;\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 /**\n * Whether to serialize assistant history using the strict OpenAI Responses\n * input schemas. Assistant messages without an item ID are sent as easy input\n * messages, while messages with an item ID are sent as complete output items.\n *\n * @default false\n */\n strictResponseInput?: boolean;\n\n /**\n * Codecs for Open Responses extension tools, items, and streaming events.\n *\n * @experimental This API may change in a future release.\n */\n experimental_extensions?: readonly OpenResponsesExtension[];\n}\n\nexport function createOpenResponses(\n options: OpenResponsesProviderSettings,\n): OpenResponsesProvider {\n const providerName = options.name;\n const extensionRegistry = createOpenResponsesExtensionRegistry(\n options.experimental_extensions,\n );\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 extensionRegistry,\n strictResponseInput: options.strictResponseInput,\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 = 'v4' 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 JSONObject,\n LanguageModelV4Content,\n LanguageModelV4ProviderTool,\n LanguageModelV4StreamPart,\n LanguageModelV4ToolCallPart,\n LanguageModelV4ToolResultPart,\n} from '@ai-sdk/provider';\nimport type { MaybePromiseLike } from '@ai-sdk/provider-utils';\n\nexport type OpenResponsesNamespacedType = `${string}:${string}`;\n\nexport type OpenResponsesExtensionRecord = JSONObject & {\n type: OpenResponsesNamespacedType;\n};\n\nexport type OpenResponsesExtensionItem = OpenResponsesExtensionRecord & {\n id: string;\n status: string;\n};\n\nexport type OpenResponsesExtensionEvent = OpenResponsesExtensionRecord & {\n sequence_number: number;\n};\n\nexport type OpenResponsesExtensionInputPart =\n | LanguageModelV4ToolCallPart\n | LanguageModelV4ToolResultPart;\n\nexport type OpenResponsesExtensionContentPart = Extract<\n LanguageModelV4Content,\n LanguageModelV4StreamPart\n>;\n\nexport type OpenResponsesExtensionStreamPart = Exclude<\n LanguageModelV4StreamPart,\n {\n type: 'error' | 'finish' | 'raw' | 'response-metadata' | 'stream-start';\n }\n>;\n\n/**\n * Defines how the provider encodes and decodes an Open Responses extension.\n *\n * Tool, item, and event codecs can be registered independently.\n */\nexport interface OpenResponsesExtension {\n /**\n * Extension ID in `<implementor>.<extension>` format. For extensions that\n * encode a provider tool, this is also the AI SDK provider-tool ID.\n */\n id: LanguageModelV4ProviderTool['id'];\n\n /**\n * Namespaced Open Responses tool type, in `<implementor>:<tool>` format.\n * Must be provided together with `encodeTool`.\n */\n toolType?: OpenResponsesNamespacedType;\n\n /**\n * Namespaced item types decoded by this extension. Must be provided together\n * with `decodeItem`.\n */\n itemTypes?: readonly OpenResponsesNamespacedType[];\n\n /**\n * Namespaced streaming event types decoded by this extension. Must be\n * provided together with `decodeEvent`.\n */\n eventTypes?: readonly OpenResponsesNamespacedType[];\n\n /**\n * Encodes an AI SDK provider tool. Return `undefined` when its arguments\n * cannot be encoded. The adapter adds `toolType` and omits a specific tool\n * choice that selects the omitted tool.\n */\n encodeTool?(options: {\n name: string;\n args: Record<string, unknown>;\n }): MaybePromiseLike<JSONObject | undefined>;\n\n /**\n * Encodes a specific `toolChoice`. The adapter adds `toolType`. The default\n * is an object containing only `toolType`.\n */\n encodeToolChoice?(options: {\n name: string;\n args: Record<string, unknown>;\n }): MaybePromiseLike<JSONObject | undefined>;\n\n /**\n * Decodes a completed namespaced item into AI SDK content parts. The adapter\n * adds a custom replay part containing the original item and reference\n * metadata to the returned parts.\n */\n decodeItem?(options: {\n item: OpenResponsesExtensionItem;\n mode: 'generate' | 'stream';\n }): MaybePromiseLike<OpenResponsesExtensionContentPart[] | undefined>;\n\n /**\n * Encodes an AI SDK history part when no original wire item is available.\n * Every returned item must use one of `itemTypes`.\n */\n encodeInputItem?(options: {\n part: OpenResponsesExtensionInputPart;\n tool: LanguageModelV4ProviderTool;\n }): MaybePromiseLike<\n OpenResponsesExtensionItem | OpenResponsesExtensionItem[] | undefined\n >;\n\n /**\n * Decodes a namespaced streaming event.\n *\n * `state` persists for the lifetime of one response stream.\n */\n decodeEvent?(options: {\n event: OpenResponsesExtensionEvent;\n state: Map<string, unknown>;\n }): MaybePromiseLike<OpenResponsesExtensionStreamPart[] | undefined>;\n}\n\nexport type OpenResponsesExtensionRegistry = {\n byEventType: Map<OpenResponsesNamespacedType, OpenResponsesEventExtension>;\n byExtensionId: Map<LanguageModelV4ProviderTool['id'], OpenResponsesExtension>;\n byItemType: Map<OpenResponsesNamespacedType, OpenResponsesItemExtension>;\n byProviderToolId: Map<\n LanguageModelV4ProviderTool['id'],\n OpenResponsesToolExtension\n >;\n byToolType: Map<OpenResponsesNamespacedType, OpenResponsesToolExtension>;\n};\n\ntype OpenResponsesToolExtension = OpenResponsesExtension & {\n toolType: OpenResponsesNamespacedType;\n encodeTool: NonNullable<OpenResponsesExtension['encodeTool']>;\n};\n\ntype OpenResponsesItemExtension = OpenResponsesExtension & {\n itemTypes: readonly OpenResponsesNamespacedType[];\n decodeItem: NonNullable<OpenResponsesExtension['decodeItem']>;\n};\n\ntype OpenResponsesEventExtension = OpenResponsesExtension & {\n eventTypes: readonly OpenResponsesNamespacedType[];\n decodeEvent: NonNullable<OpenResponsesExtension['decodeEvent']>;\n};\n\nexport function createOpenResponsesExtensionRegistry(\n extensions?: readonly OpenResponsesExtension[],\n): OpenResponsesExtensionRegistry {\n const registry: OpenResponsesExtensionRegistry = {\n byEventType: new Map(),\n byExtensionId: new Map(),\n byItemType: new Map(),\n byProviderToolId: new Map(),\n byToolType: new Map(),\n };\n\n for (const extension of extensions ?? []) {\n const namespaceSeparatorIndex = extension.id.indexOf('.');\n if (namespaceSeparatorIndex <= 0) {\n throw new Error(\n `Open Responses extension ID ${extension.id} must use <implementor>.<extension> format.`,\n );\n }\n const namespace = extension.id.slice(0, namespaceSeparatorIndex);\n\n registerUnique({\n map: registry.byExtensionId,\n key: extension.id,\n extension,\n field: 'id',\n });\n\n const hasToolType = extension.toolType != null;\n const hasToolEncoder = extension.encodeTool != null;\n if (hasToolType !== hasToolEncoder) {\n throw new Error(\n `Open Responses extension ${extension.id} must provide toolType and encodeTool together.`,\n );\n }\n\n if (extension.encodeToolChoice != null && !hasToolEncoder) {\n throw new Error(\n `Open Responses extension ${extension.id} cannot provide encodeToolChoice without toolType and encodeTool.`,\n );\n }\n\n if (hasToolType && hasToolEncoder) {\n const toolExtension = extension as OpenResponsesToolExtension;\n assertNamespacedType({\n extensionId: extension.id,\n namespace,\n type: toolExtension.toolType,\n field: 'toolType',\n });\n registerUnique({\n map: registry.byProviderToolId,\n key: extension.id,\n extension: toolExtension,\n field: 'provider-tool id',\n });\n registerUnique({\n map: registry.byToolType,\n key: toolExtension.toolType,\n extension: toolExtension,\n field: 'toolType',\n });\n }\n\n const hasItemTypes = extension.itemTypes != null;\n const hasItemDecoder = extension.decodeItem != null;\n if (hasItemTypes !== hasItemDecoder) {\n throw new Error(\n `Open Responses extension ${extension.id} must provide itemTypes and decodeItem together.`,\n );\n }\n\n if (extension.encodeInputItem != null && !hasItemDecoder) {\n throw new Error(\n `Open Responses extension ${extension.id} cannot provide encodeInputItem without itemTypes and decodeItem.`,\n );\n }\n\n if (hasItemTypes && hasItemDecoder) {\n const itemExtension = extension as OpenResponsesItemExtension;\n if (itemExtension.itemTypes.length === 0) {\n throw new Error(\n `Open Responses extension ${extension.id} must register at least one item type.`,\n );\n }\n for (const itemType of itemExtension.itemTypes) {\n assertNamespacedType({\n extensionId: extension.id,\n namespace,\n type: itemType,\n field: 'itemTypes',\n });\n registerUnique({\n map: registry.byItemType,\n key: itemType,\n extension: itemExtension,\n field: 'item type',\n });\n }\n }\n\n const hasEventTypes = extension.eventTypes != null;\n const hasEventDecoder = extension.decodeEvent != null;\n if (hasEventTypes !== hasEventDecoder) {\n throw new Error(\n `Open Responses extension ${extension.id} must provide eventTypes and decodeEvent together.`,\n );\n }\n\n if (hasEventTypes && hasEventDecoder) {\n const eventExtension = extension as OpenResponsesEventExtension;\n if (eventExtension.eventTypes.length === 0) {\n throw new Error(\n `Open Responses extension ${extension.id} must register at least one event type.`,\n );\n }\n for (const eventType of eventExtension.eventTypes) {\n assertNamespacedType({\n extensionId: extension.id,\n namespace,\n type: eventType,\n field: 'eventTypes',\n });\n registerUnique({\n map: registry.byEventType,\n key: eventType,\n extension: eventExtension,\n field: 'event type',\n });\n }\n }\n\n if (!hasToolEncoder && !hasItemDecoder && !hasEventDecoder) {\n throw new Error(\n `Open Responses extension ${extension.id} must register a tool, item, or event capability.`,\n );\n }\n }\n\n return registry;\n}\n\nfunction assertNamespacedType({\n extensionId,\n namespace,\n type,\n field,\n}: {\n extensionId: string;\n namespace: string;\n type: string;\n field: string;\n}) {\n if (!type.includes(':') || type.slice(0, type.indexOf(':')) !== namespace) {\n throw new Error(\n `Open Responses extension ${extensionId} has invalid ${field} value ${type}. Extension wire types must use the ${namespace}: namespace.`,\n );\n }\n}\n\nfunction registerUnique<K, Extension extends OpenResponsesExtension>({\n map,\n key,\n extension,\n field,\n}: {\n map: Map<K, Extension>;\n key: K;\n extension: Extension;\n field: string;\n}) {\n const existing = map.get(key);\n if (existing != null) {\n throw new Error(\n `Open Responses extension ${extension.id} cannot register ${field} ${String(key)} because it is already registered by ${existing.id}.`,\n );\n }\n map.set(key, extension);\n}\n\nexport function isOpenResponsesNamespacedType(\n value: unknown,\n): value is OpenResponsesNamespacedType {\n return typeof value === 'string' && value.includes(':');\n}\n\nexport function isOpenResponsesExtensionRecord(\n value: unknown,\n): value is OpenResponsesExtensionRecord {\n return (\n isOpenResponsesJSONObject(value) &&\n isOpenResponsesNamespacedType((value as { type?: unknown }).type)\n );\n}\n\nexport function isOpenResponsesJSONObject(value: unknown): value is JSONObject {\n return (\n value != null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) === Object.prototype &&\n Object.values(value).every(isOpenResponsesJSONValue)\n );\n}\n\nexport function isOpenResponsesExtensionItem(\n value: unknown,\n): value is OpenResponsesExtensionItem {\n return (\n isOpenResponsesExtensionRecord(value) &&\n typeof value.id === 'string' &&\n typeof value.status === 'string'\n );\n}\n\nexport function isOpenResponsesExtensionEvent(\n value: unknown,\n): value is OpenResponsesExtensionEvent {\n return (\n isOpenResponsesExtensionRecord(value) &&\n typeof value.sequence_number === 'number'\n );\n}\n\nfunction isOpenResponsesJSONValue(value: unknown): boolean {\n if (\n value == null ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.every(isOpenResponsesJSONValue);\n }\n\n return isOpenResponsesJSONObject(value);\n}\n","import {\n APICallError,\n type LanguageModelV4,\n type LanguageModelV4CallOptions,\n type LanguageModelV4Content,\n type LanguageModelV4FinishReason,\n type LanguageModelV4GenerateResult,\n type LanguageModelV4StreamPart,\n type LanguageModelV4StreamResult,\n type LanguageModelV4Usage,\n type SharedV4ProviderMetadata,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n createProviderStreamError,\n isCustomReasoning,\n jsonSchema,\n mapReasoningToProviderEffort,\n parseProviderOptions,\n postJsonToApi,\n SerializationError,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type ParseResult,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n createOpenResponsesExtensionRegistry,\n isOpenResponsesExtensionEvent,\n isOpenResponsesExtensionItem,\n isOpenResponsesJSONObject,\n type OpenResponsesExtension,\n type OpenResponsesExtensionContentPart,\n type OpenResponsesExtensionItem,\n type OpenResponsesExtensionRecord,\n type OpenResponsesExtensionRegistry,\n} from '../open-responses-extension';\nimport { convertToOpenResponsesInput } from './convert-to-open-responses-input';\nimport {\n openResponsesErrorSchema,\n type Annotation,\n type OpenResponsesRequestBody,\n type OpenResponsesResponseBody,\n type OpenResponsesChunk,\n type ReasoningBody,\n type ToolChoiceParam,\n} from './open-responses-api';\nimport { mapOpenResponsesFinishReason } from './map-open-responses-finish-reason';\nimport type { OpenResponsesConfig } from './open-responses-config';\nimport { openResponsesLanguageModelOptions } from './open-responses-language-model-options';\n\nexport class OpenResponsesLanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n\n readonly modelId: string;\n\n private readonly config: OpenResponsesConfig;\n private readonly extensionRegistry: OpenResponsesExtensionRegistry;\n\n static [WORKFLOW_SERIALIZE](model: OpenResponsesLanguageModel) {\n if (model.extensionRegistry.byExtensionId.size > 0) {\n throw new SerializationError({\n message:\n 'Open Responses models with registered extensions cannot be serialized across workflow boundaries. Recreate the provider with its extension codecs inside the workflow step.',\n });\n }\n\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: string;\n config: OpenResponsesConfig;\n }) {\n return new OpenResponsesLanguageModel(options.modelId, options.config);\n }\n\n constructor(modelId: string, config: OpenResponsesConfig) {\n this.modelId = modelId;\n this.config = config;\n this.extensionRegistry =\n config.extensionRegistry ?? createOpenResponsesExtensionRegistry();\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 reasoning,\n prompt,\n providerOptions,\n tools,\n toolChoice,\n responseFormat,\n }: LanguageModelV4CallOptions): Promise<{\n body: Omit<OpenResponsesRequestBody, 'stream' | 'stream_options'>;\n warnings: SharedV4Warning[];\n }> {\n const warnings: SharedV4Warning[] = [];\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 providerToolsByName = new Map(\n (tools ?? [])\n .filter(tool => tool.type === 'provider')\n .map(tool => [tool.name, tool]),\n );\n\n const {\n input,\n instructions,\n warnings: inputWarnings,\n } = await convertToOpenResponsesInput({\n prompt,\n providerOptionsName: this.config.providerOptionsName,\n extensionRegistry: this.extensionRegistry,\n providerToolsByName,\n strictResponseInput: this.config.strictResponseInput,\n });\n\n warnings.push(...inputWarnings);\n\n const convertedTools: NonNullable<OpenResponsesRequestBody['tools']> = [];\n const encodedProviderToolsByName = new Map<\n string,\n {\n toolType: OpenResponsesExtensionRecord['type'];\n encodeToolChoice: OpenResponsesExtension['encodeToolChoice'];\n tool: Extract<\n NonNullable<LanguageModelV4CallOptions['tools']>[number],\n { type: 'provider' }\n >;\n }\n >();\n\n for (const tool of tools ?? []) {\n if (tool.type === 'provider') {\n const extension = this.extensionRegistry.byProviderToolId.get(tool.id);\n let encoded: OpenResponsesExtensionRecord | undefined;\n\n if (extension != null) {\n try {\n const fields = await extension.encodeTool({\n name: tool.name,\n args: tool.args,\n });\n\n if (isOpenResponsesJSONObject(fields)) {\n encoded = {\n ...fields,\n type: extension.toolType,\n };\n }\n } catch {\n // Encoding failures are reported as unsupported below.\n }\n }\n\n if (encoded == null) {\n warnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n });\n } else if (extension != null) {\n convertedTools.push(encoded);\n encodedProviderToolsByName.set(tool.name, {\n toolType: extension.toolType,\n encodeToolChoice: extension.encodeToolChoice,\n tool,\n });\n }\n } else {\n convertedTools.push({\n type: 'function',\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n });\n }\n }\n\n // Convert tool choice to the Open Responses format\n let convertedToolChoice: ToolChoiceParam | undefined;\n if (toolChoice?.type === 'tool') {\n const registeredTool = encodedProviderToolsByName.get(\n toolChoice.toolName,\n );\n\n if (registeredTool == null) {\n if (!providerToolsByName.has(toolChoice.toolName)) {\n convertedToolChoice = {\n type: 'function',\n name: toolChoice.toolName,\n };\n }\n } else {\n const { encodeToolChoice, tool, toolType } = registeredTool;\n let fields: unknown = {};\n\n try {\n fields = await encodeToolChoice?.({\n name: tool.name,\n args: tool.args,\n });\n } catch {\n fields = undefined;\n }\n\n if (encodeToolChoice != null && !isOpenResponsesJSONObject(fields)) {\n warnings.push({\n type: 'unsupported',\n feature: `tool choice for provider-defined tool ${tool.id}`,\n });\n } else {\n convertedToolChoice = {\n ...(isOpenResponsesJSONObject(fields) ? fields : {}),\n type: toolType,\n };\n }\n }\n } else {\n convertedToolChoice = toolChoice?.type;\n }\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: openResponsesLanguageModelOptions,\n });\n\n const resolvedReasoningEffort =\n openResponsesOptions?.reasoningEffort ??\n (isCustomReasoning(reasoning)\n ? reasoning === 'none'\n ? 'none'\n : mapReasoningToProviderEffort({\n reasoning,\n effortMap: {\n minimal: 'low',\n low: 'low',\n medium: 'medium',\n high: 'high',\n xhigh: 'xhigh',\n },\n warnings,\n })\n : undefined);\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 resolvedReasoningEffort != null ||\n openResponsesOptions?.reasoningSummary != null\n ? {\n ...(resolvedReasoningEffort != null && {\n effort: resolvedReasoningEffort,\n }),\n ...(openResponsesOptions?.reasoningSummary != null && {\n summary: openResponsesOptions.reasoningSummary,\n }),\n }\n : undefined,\n tools: convertedTools.length ? convertedTools : undefined,\n tool_choice: convertedToolChoice,\n ...(textFormat != null && { text: { format: textFormat } }),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\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 if (response.error) {\n throw new APICallError({\n message: response.error.message,\n url: this.config.url,\n requestBodyValues: body,\n statusCode: 400,\n responseHeaders,\n responseBody: rawResponse as string,\n isRetryable: false,\n });\n }\n\n if (response.output == null) {\n const detail = response.incomplete_details?.reason ?? response.status;\n throw new APICallError({\n message: detail\n ? `Responses API returned no output (${detail})`\n : 'Responses API returned no output',\n url: this.config.url,\n requestBodyValues: body,\n statusCode: 500,\n responseHeaders,\n responseBody: rawResponse as string,\n isRetryable: false,\n });\n }\n\n const content: Array<LanguageModelV4Content> = [];\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 if ((part.content?.length ?? 0) > 0) {\n for (const contentPart of part.content!) {\n content.push({\n type: 'reasoning',\n text: contentPart.text,\n providerMetadata: createReasoningProviderMetadata({\n part,\n providerOptionsName: this.config.providerOptionsName,\n reasoningContent: [contentPart],\n }),\n });\n }\n } else {\n content.push({\n type: 'reasoning',\n text: part.summary.map(summaryPart => summaryPart.text).join(''),\n providerMetadata: createReasoningProviderMetadata({\n part,\n providerOptionsName: this.config.providerOptionsName,\n }),\n });\n }\n break;\n }\n\n case 'message': {\n for (const contentPart of part.content) {\n const annotations = getOutputTextAnnotations(contentPart);\n\n content.push({\n type: 'text',\n text: contentPart.text,\n providerMetadata: {\n [this.config.providerOptionsName]: {\n itemId: part.id,\n ...(annotations.length > 0 && { annotations }),\n },\n },\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 providerMetadata: {\n [this.config.providerOptionsName]: { itemId: part.id },\n },\n });\n break;\n }\n\n default: {\n if (!isOpenResponsesExtensionItem(part)) {\n break;\n }\n\n const decoded = await decodeExtensionItem({\n extensionRegistry: this.extensionRegistry,\n item: part,\n mode: 'generate',\n providerOptionsName: this.config.providerOptionsName,\n });\n\n if (decoded != null) {\n content.push(...decoded);\n hasToolCalls ||= decoded.some(part => part.type === 'tool-call');\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: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\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: LanguageModelV4Usage = {\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 activeReasoningId: string | undefined;\n let hasToolCalls = false;\n let finishReason: LanguageModelV4FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n const toolCallsByItemId = new Map<\n string,\n { toolName?: string; toolCallId?: string; arguments?: string }\n >();\n const providerOptionsName = this.config.providerOptionsName;\n const extensionRegistry = this.extensionRegistry;\n const extensionStreamState = new Map<string, unknown>();\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<OpenResponsesChunk>,\n LanguageModelV4StreamPart\n >({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n async 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 if (isOpenResponsesExtensionEvent(chunk)) {\n const extension = extensionRegistry.byEventType.get(chunk.type);\n if (extension?.decodeEvent != null) {\n try {\n const decoded = await extension.decodeEvent({\n event: chunk,\n state: extensionStreamState,\n });\n for (const part of decoded ?? []) {\n controller.enqueue(part);\n hasToolCalls ||=\n part.type === 'tool-call' ||\n part.type === 'tool-input-start';\n }\n } catch (error) {\n controller.enqueue({ type: 'error', error });\n }\n }\n return;\n }\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 providerMetadata: {\n [providerOptionsName]: {\n itemId: chunk.item.id,\n },\n },\n });\n hasToolCalls = true;\n\n toolCallsByItemId.delete(chunk.item.id);\n } else if (\n chunk.type === 'response.output_item.done' &&\n isOpenResponsesExtensionItem(chunk.item)\n ) {\n try {\n const decoded = await decodeExtensionItem({\n extensionRegistry,\n item: chunk.item,\n mode: 'stream',\n providerOptionsName,\n });\n\n for (const part of decoded ?? []) {\n controller.enqueue(part);\n hasToolCalls ||= part.type === 'tool-call';\n }\n } catch (error) {\n controller.enqueue({ type: 'error', error });\n }\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 activeReasoningId = chunk.item.id;\n } else if (\n chunk.type === 'response.reasoning_summary_text.delta' ||\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({\n type: 'reasoning-end',\n id: chunk.item.id,\n providerMetadata: createReasoningProviderMetadata({\n part: chunk.item,\n providerOptionsName,\n }),\n });\n if (activeReasoningId === chunk.item.id) {\n activeReasoningId = undefined;\n }\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 const annotations = chunk.item.content.flatMap(\n getOutputTextAnnotations,\n );\n\n controller.enqueue({\n type: 'text-end',\n id: chunk.item.id,\n providerMetadata: {\n [providerOptionsName]: {\n itemId: chunk.item.id,\n ...(annotations.length > 0 && { annotations }),\n },\n },\n });\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 if (chunk.response.error != null) {\n controller.enqueue({\n type: 'error',\n error: createOpenResponsesStreamError({\n type: chunk.type,\n error: chunk.response.error,\n data: chunk,\n }),\n });\n }\n } else if (chunk.type === 'error') {\n finishReason = {\n unified: 'error',\n raw: chunk.error.code,\n };\n controller.enqueue({\n type: 'error',\n error: createOpenResponsesStreamError({\n type: chunk.type,\n error: chunk.error,\n data: chunk,\n }),\n });\n }\n },\n\n flush(controller) {\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\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\nfunction createOpenResponsesStreamError({\n type,\n error,\n data,\n}: {\n type: 'error' | 'response.failed';\n error: { message: string; code: string };\n data: unknown;\n}) {\n return createProviderStreamError({\n message: error.message,\n type,\n code: error.code,\n data,\n });\n}\n\nfunction createReasoningProviderMetadata({\n part,\n providerOptionsName,\n reasoningContent = part.content,\n}: {\n part: ReasoningBody;\n providerOptionsName: string;\n reasoningContent?: ReasoningBody['content'];\n}): SharedV4ProviderMetadata {\n return {\n [providerOptionsName]: {\n itemId: part.id,\n reasoningSummary: part.summary.map(summaryPart => ({\n type: 'summary_text',\n text: summaryPart.text,\n })),\n reasoningContent:\n reasoningContent == null\n ? null\n : reasoningContent.map(contentPart => ({\n type: 'reasoning_text',\n text: contentPart.text,\n })),\n ...(part.encrypted_content != null && {\n reasoningEncryptedContent: part.encrypted_content,\n }),\n },\n };\n}\n\nasync function decodeExtensionItem({\n extensionRegistry,\n item,\n mode,\n providerOptionsName,\n}: {\n extensionRegistry: OpenResponsesExtensionRegistry;\n item: OpenResponsesExtensionItem;\n mode: 'generate' | 'stream';\n providerOptionsName: string;\n}): Promise<OpenResponsesExtensionContentPart[] | undefined> {\n const extension = extensionRegistry.byItemType.get(item.type);\n if (extension == null) {\n return undefined;\n }\n\n const decoded = await extension.decodeItem({ item, mode });\n if (decoded == null) {\n return undefined;\n }\n\n return [\n createExtensionReplayCarrier({\n extension,\n item,\n providerOptionsName,\n }),\n ...decoded.map(part =>\n addExtensionItemReferenceMetadata({\n extension,\n item,\n part,\n providerOptionsName,\n }),\n ),\n ];\n}\n\nfunction createExtensionReplayCarrier({\n extension,\n item,\n providerOptionsName,\n}: {\n extension: OpenResponsesExtension;\n item: OpenResponsesExtensionItem;\n providerOptionsName: string;\n}): OpenResponsesExtensionContentPart {\n return {\n type: 'custom',\n kind: 'open-responses.extension-replay',\n providerMetadata: {\n [providerOptionsName]: {\n openResponsesExtension: {\n id: extension.id,\n item,\n },\n },\n },\n };\n}\n\nfunction addExtensionItemReferenceMetadata({\n extension,\n item,\n part,\n providerOptionsName,\n}: {\n extension: OpenResponsesExtension;\n item: OpenResponsesExtensionItem;\n part: OpenResponsesExtensionContentPart;\n providerOptionsName: string;\n}): OpenResponsesExtensionContentPart {\n const providerMetadata = part.providerMetadata ?? {};\n\n return {\n ...part,\n providerMetadata: {\n ...providerMetadata,\n [providerOptionsName]: {\n ...providerMetadata[providerOptionsName],\n openResponsesExtension: {\n id: extension.id,\n itemId: item.id,\n },\n },\n },\n };\n}\n\nfunction getOutputTextAnnotations(value: unknown): Annotation[] {\n if (\n value == null ||\n typeof value !== 'object' ||\n !('annotations' in value) ||\n !Array.isArray(value.annotations) ||\n !value.annotations.every(\n annotation =>\n annotation != null &&\n typeof annotation === 'object' &&\n (annotation as { type?: unknown }).type === 'url_citation' &&\n typeof (annotation as { start_index?: unknown }).start_index ===\n 'number' &&\n typeof (annotation as { end_index?: unknown }).end_index === 'number' &&\n typeof (annotation as { url?: unknown }).url === 'string' &&\n typeof (annotation as { title?: unknown }).title === 'string',\n )\n ) {\n return [];\n }\n\n return value.annotations.map(annotation => ({\n type: 'url_citation',\n start_index: (annotation as { start_index: number }).start_index,\n end_index: (annotation as { end_index: number }).end_index,\n url: (annotation as { url: string }).url,\n title: (annotation as { title: string }).title,\n }));\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV4ProviderTool,\n type LanguageModelV4Prompt,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n convertToBase64,\n getTopLevelMediaType,\n resolveFullMediaType,\n} from '@ai-sdk/provider-utils';\nimport {\n isOpenResponsesExtensionItem,\n type OpenResponsesExtensionInputPart,\n type OpenResponsesExtensionItem,\n type OpenResponsesExtensionRegistry,\n} from '../open-responses-extension';\nimport type {\n FunctionCallOutputItemParam,\n InputFileContentParam,\n InputImageContentParam,\n InputTextContentParam,\n OpenResponsesRequestBody,\n OutputTextContentParam,\n ReasoningItemParam,\n RefusalContentParam,\n} from './open-responses-api';\n\nexport async function convertToOpenResponsesInput({\n prompt,\n providerOptionsName = 'open-responses',\n extensionRegistry,\n providerToolsByName = new Map(),\n strictResponseInput = false,\n}: {\n prompt: LanguageModelV4Prompt;\n providerOptionsName?: string;\n extensionRegistry?: OpenResponsesExtensionRegistry;\n providerToolsByName?: Map<string, LanguageModelV4ProviderTool>;\n strictResponseInput?: boolean;\n}): Promise<{\n input: OpenResponsesRequestBody['input'];\n instructions: string | undefined;\n warnings: Array<SharedV4Warning>;\n}> {\n const input: OpenResponsesRequestBody['input'] = [];\n const warnings: Array<SharedV4Warning> = [];\n const systemMessages: string[] = [];\n const replayedExtensionItems = new Set<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 switch (part.data.type) {\n case 'reference': {\n throw new UnsupportedFunctionalityError({\n functionality: 'file parts with provider references',\n });\n }\n case 'text': {\n throw new UnsupportedFunctionalityError({\n functionality: 'text file parts',\n });\n }\n case 'url':\n case 'data': {\n const topLevel = getTopLevelMediaType(part.mediaType);\n\n if (topLevel === 'image') {\n userContent.push({\n type: 'input_image',\n ...(part.data.type === 'url'\n ? { image_url: part.data.url.toString() }\n : {\n image_url: `data:${resolveFullMediaType({ part })};base64,${convertToBase64(part.data.data)}`,\n }),\n detail: getImageDetail(part, providerOptionsName),\n });\n } else if (part.data.type === 'url') {\n userContent.push({\n type: 'input_file',\n file_url: part.data.url.toString(),\n });\n } else {\n const fullMediaType = resolveFullMediaType({ part });\n userContent.push({\n type: 'input_file',\n filename: part.filename ?? 'data',\n file_data: `data:${fullMediaType};base64,${convertToBase64(part.data.data)}`,\n });\n }\n\n break;\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 let assistantContent: Array<\n OutputTextContentParam | RefusalContentParam\n > = [];\n let assistantMessageId: string | undefined;\n\n const flushAssistantContent = () => {\n if (assistantContent.length === 0) {\n return;\n }\n\n if (strictResponseInput && assistantMessageId == null) {\n input.push({\n type: 'message',\n role: 'assistant',\n content: assistantContent\n .map(part =>\n part.type === 'output_text' ? part.text : part.refusal,\n )\n .join(''),\n });\n } else if (strictResponseInput) {\n input.push({\n id: assistantMessageId,\n type: 'message',\n status: 'completed',\n role: 'assistant',\n content: assistantContent.map(part =>\n part.type === 'output_text'\n ? {\n ...part,\n annotations: part.annotations ?? [],\n logprobs: part.logprobs ?? [],\n }\n : part,\n ),\n });\n } else {\n input.push({\n type: 'message',\n role: 'assistant',\n content: assistantContent,\n ...(assistantMessageId != null && { id: assistantMessageId }),\n });\n }\n assistantContent = [];\n assistantMessageId = undefined;\n };\n\n for (const part of content) {\n const extensionReplay = getExtensionReplay({\n part,\n providerOptionsName,\n extensionRegistry,\n });\n\n if (extensionReplay != null) {\n flushAssistantContent();\n const replayItem = extensionReplay.item;\n if (replayItem != null) {\n const replayKey = `${replayItem.type}:${replayItem.id}`;\n if (!replayedExtensionItems.has(replayKey)) {\n input.push(replayItem);\n replayedExtensionItems.add(replayKey);\n }\n }\n continue;\n }\n\n if (part.type === 'tool-call' || part.type === 'tool-result') {\n const providerTool = providerToolsByName.get(part.toolName);\n const extension =\n providerTool == null\n ? undefined\n : extensionRegistry?.byProviderToolId.get(providerTool.id);\n\n if (providerTool != null && extension != null) {\n flushAssistantContent();\n const encoded = await encodeExtensionInputPart({\n extensionRegistry,\n part,\n providerTool,\n });\n\n if (encoded == null) {\n warnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${providerTool.id} ${part.type} history`,\n });\n } else {\n input.push(...encoded);\n }\n continue;\n }\n }\n\n switch (part.type) {\n case 'reasoning': {\n flushAssistantContent();\n\n const providerData = getProviderData(part, providerOptionsName);\n const itemId =\n typeof providerData?.itemId === 'string'\n ? providerData.itemId\n : undefined;\n const summary = parseReasoningSummary(\n providerData?.reasoningSummary,\n );\n const reasoningContent = parseReasoningContent(\n providerData?.reasoningContent,\n );\n const hasReasoningContent =\n providerData != null && 'reasoningContent' in providerData;\n const encryptedContent =\n typeof providerData?.reasoningEncryptedContent === 'string'\n ? providerData.reasoningEncryptedContent\n : undefined;\n\n const reasoningItem: ReasoningItemParam = {\n type: 'reasoning',\n summary: summary ?? [],\n ...(itemId != null && { id: itemId }),\n ...(reasoningContent != null\n ? { content: reasoningContent }\n : !hasReasoningContent && part.text.length > 0\n ? {\n content: [\n {\n type: 'reasoning_text' as const,\n text: part.text,\n },\n ],\n }\n : {}),\n ...(encryptedContent != null && {\n encrypted_content: encryptedContent,\n }),\n };\n const previousItem = input[input.length - 1];\n\n if (\n reasoningItem.id != null &&\n previousItem?.type === 'reasoning' &&\n previousItem.id === reasoningItem.id\n ) {\n if (reasoningItem.content != null) {\n previousItem.content = [\n ...(previousItem.content ?? []),\n ...reasoningItem.content,\n ];\n }\n } else {\n input.push(reasoningItem);\n }\n break;\n }\n case 'text': {\n const providerData = getProviderData(part, providerOptionsName);\n const itemId =\n typeof providerData?.itemId === 'string'\n ? providerData.itemId\n : undefined;\n const annotations = parseOutputTextAnnotations(\n providerData?.annotations,\n );\n\n if (\n assistantContent.length > 0 &&\n assistantMessageId !== itemId\n ) {\n flushAssistantContent();\n }\n\n assistantMessageId = itemId;\n assistantContent.push({\n type: 'output_text',\n text: part.text,\n ...(annotations != null && { annotations }),\n });\n break;\n }\n case 'tool-call': {\n flushAssistantContent();\n\n const argumentsValue =\n typeof part.input === 'string'\n ? part.input\n : JSON.stringify(part.input);\n const providerData = getProviderData(part, providerOptionsName);\n const itemId =\n typeof providerData?.itemId === 'string'\n ? providerData.itemId\n : undefined;\n\n input.push({\n type: 'function_call',\n ...(itemId != null && { id: itemId }),\n call_id: part.toolCallId,\n name: part.toolName,\n arguments: argumentsValue,\n });\n break;\n }\n }\n }\n\n flushAssistantContent();\n\n break;\n }\n\n case 'tool': {\n for (const part of content) {\n if (part.type === 'tool-result') {\n const extensionReplay = getExtensionReplay({\n part,\n providerOptionsName,\n extensionRegistry,\n });\n\n if (extensionReplay != null) {\n const replayItem = extensionReplay.item;\n if (replayItem != null) {\n const replayKey = `${replayItem.type}:${replayItem.id}`;\n if (!replayedExtensionItems.has(replayKey)) {\n input.push(replayItem);\n replayedExtensionItems.add(replayKey);\n }\n }\n continue;\n }\n\n const providerTool = providerToolsByName.get(part.toolName);\n const extension =\n providerTool == null\n ? undefined\n : extensionRegistry?.byProviderToolId.get(providerTool.id);\n\n if (providerTool != null && extension != null) {\n const encoded = await encodeExtensionInputPart({\n extensionRegistry,\n part,\n providerTool,\n });\n\n if (encoded == null) {\n warnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${providerTool.id} tool-result history`,\n });\n } else {\n input.push(...encoded);\n }\n continue;\n }\n\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 call 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 'file': {\n const topLevel = getTopLevelMediaType(item.mediaType);\n\n if (item.data.type === 'data') {\n const fullMediaType = resolveFullMediaType({\n part: item,\n });\n if (topLevel === 'image') {\n contentParts.push({\n type: 'input_image',\n image_url: `data:${fullMediaType};base64,${convertToBase64(item.data.data)}`,\n detail: getImageDetail(item, providerOptionsName),\n });\n } else {\n contentParts.push({\n type: 'input_file',\n filename: item.filename ?? 'data',\n file_data: `data:${fullMediaType};base64,${convertToBase64(item.data.data)}`,\n });\n }\n } else if (item.data.type === 'url') {\n if (topLevel === 'image') {\n contentParts.push({\n type: 'input_image',\n image_url: item.data.url.toString(),\n detail: getImageDetail(item, providerOptionsName),\n });\n } else {\n contentParts.push({\n type: 'input_file',\n file_url: item.data.url.toString(),\n });\n }\n } else {\n warnings.push({\n type: 'other',\n message: `unsupported tool content part type: ${item.type} with data type: ${item.data.type}`,\n });\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\nasync function encodeExtensionInputPart({\n extensionRegistry,\n part,\n providerTool,\n}: {\n extensionRegistry: OpenResponsesExtensionRegistry | undefined;\n part: OpenResponsesExtensionInputPart;\n providerTool: LanguageModelV4ProviderTool;\n}): Promise<OpenResponsesExtensionItem[] | undefined> {\n const extension = extensionRegistry?.byProviderToolId.get(providerTool.id);\n const encodeInputItem = extension?.encodeInputItem;\n const itemTypes = extension?.itemTypes;\n if (encodeInputItem == null || itemTypes == null) {\n return undefined;\n }\n\n try {\n const value = await encodeInputItem({\n part,\n tool: providerTool,\n });\n const items =\n value == null ? undefined : Array.isArray(value) ? value : [value];\n\n if (\n items == null ||\n items.length === 0 ||\n !items.every(\n item =>\n isOpenResponsesExtensionItem(item) && itemTypes.includes(item.type),\n )\n ) {\n return undefined;\n }\n\n return items;\n } catch {\n return undefined;\n }\n}\n\nfunction getExtensionReplay({\n part,\n providerOptionsName,\n extensionRegistry,\n}: {\n part: {\n providerOptions?: Record<string, unknown>;\n };\n providerOptionsName: string;\n extensionRegistry: OpenResponsesExtensionRegistry | undefined;\n}): { item?: OpenResponsesExtensionItem } | undefined {\n const extensionData = getProviderData(\n part,\n providerOptionsName,\n )?.openResponsesExtension;\n\n if (\n extensionData == null ||\n typeof extensionData !== 'object' ||\n Array.isArray(extensionData)\n ) {\n return undefined;\n }\n\n const { id, item, itemId } = extensionData as {\n id?: unknown;\n item?: unknown;\n itemId?: unknown;\n };\n\n if (typeof id !== 'string') {\n return undefined;\n }\n\n const extension = extensionRegistry?.byExtensionId.get(\n id as LanguageModelV4ProviderTool['id'],\n );\n\n if (extension == null) {\n return undefined;\n }\n\n if (\n isOpenResponsesExtensionItem(item) &&\n extension.itemTypes?.includes(item.type)\n ) {\n return { item };\n }\n\n return typeof itemId === 'string' ? {} : undefined;\n}\n\nfunction getProviderData(\n part: {\n providerOptions?: Record<string, unknown>;\n },\n providerOptionsName: string,\n): Record<string, unknown> | undefined {\n const providerData =\n part.providerOptions?.[providerOptionsName] ??\n (\n part as {\n providerMetadata?: Record<string, unknown>;\n }\n ).providerMetadata?.[providerOptionsName];\n\n return providerData != null &&\n typeof providerData === 'object' &&\n !Array.isArray(providerData)\n ? (providerData as Record<string, unknown>)\n : undefined;\n}\n\nfunction getImageDetail(\n part: {\n providerOptions?: Record<string, unknown>;\n },\n providerOptionsName: string,\n): InputImageContentParam['detail'] {\n const imageDetail = getProviderData(part, providerOptionsName)?.imageDetail;\n\n return imageDetail === 'low' ||\n imageDetail === 'high' ||\n imageDetail === 'auto'\n ? imageDetail\n : 'auto';\n}\n\nfunction parseReasoningSummary(\n value: unknown,\n): ReasoningItemParam['summary'] | undefined {\n if (\n !Array.isArray(value) ||\n !value.every(\n part =>\n part != null &&\n typeof part === 'object' &&\n (part as { type?: unknown }).type === 'summary_text' &&\n typeof (part as { text?: unknown }).text === 'string',\n )\n ) {\n return undefined;\n }\n\n return value.map(part => ({\n type: 'summary_text',\n text: (part as { text: string }).text,\n }));\n}\n\nfunction parseReasoningContent(\n value: unknown,\n): ReasoningItemParam['content'] | undefined {\n if (\n !Array.isArray(value) ||\n !value.every(\n part =>\n part != null &&\n typeof part === 'object' &&\n (part as { type?: unknown }).type === 'reasoning_text' &&\n typeof (part as { text?: unknown }).text === 'string',\n )\n ) {\n return undefined;\n }\n\n return value.map(part => ({\n type: 'reasoning_text',\n text: (part as { text: string }).text,\n }));\n}\n\nfunction parseOutputTextAnnotations(\n value: unknown,\n): OutputTextContentParam['annotations'] | undefined {\n if (\n !Array.isArray(value) ||\n !value.every(\n annotation =>\n annotation != null &&\n typeof annotation === 'object' &&\n (annotation as { type?: unknown }).type === 'url_citation' &&\n typeof (annotation as { start_index?: unknown }).start_index ===\n 'number' &&\n typeof (annotation as { end_index?: unknown }).end_index === 'number' &&\n typeof (annotation as { url?: unknown }).url === 'string' &&\n typeof (annotation as { title?: unknown }).title === 'string',\n )\n ) {\n return undefined;\n }\n\n return value.map(annotation => ({\n type: 'url_citation',\n start_index: (annotation as { start_index: number }).start_index,\n end_index: (annotation as { end_index: number }).end_index,\n url: (annotation as { url: string }).url,\n title: (annotation as { title: string }).title,\n }));\n}\n","import type { JSONSchema7 } from '@ai-sdk/provider';\nimport { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type {\n OpenResponsesExtensionEvent,\n OpenResponsesExtensionItem,\n OpenResponsesExtensionRecord,\n} from '../open-responses-extension';\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 logprobs?: LogProb[];\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?: ReasoningTextContent[];\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 | OpenResponsesExtensionRecord;\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?: string;\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 | OpenResponsesExtensionItem;\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 | OpenResponsesExtensionRecord\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?: Array<FunctionToolParam | OpenResponsesExtensionRecord>;\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 // Registered extension event\n | OpenResponsesExtensionEvent;\n","import type { LanguageModelV4FinishReason } from '@ai-sdk/provider';\n\nexport function mapOpenResponsesFinishReason({\n finishReason,\n hasToolCalls,\n}: {\n finishReason: string | null | undefined;\n hasToolCalls: boolean;\n}): LanguageModelV4FinishReason['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 openResponsesLanguageModelOptions = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * Provider-native reasoning effort. The value is passed through to the\n * endpoint and takes precedence over the top-level `reasoning` setting.\n */\n reasoningEffort: z.string().nullish(),\n\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 OpenResponsesLanguageModelOptions = InferSchema<\n typeof openResponsesLanguageModelOptions\n>;\n"],"mappings":"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","names":["z","_a","_b","lazySchema","zodSchema","z","part","z","_a","_b"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/open-responses",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.42",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@ai-sdk/provider": "4.0.
|
|
33
|
-
"@ai-sdk/provider-utils": "5.0.
|
|
32
|
+
"@ai-sdk/provider": "4.0.12",
|
|
33
|
+
"@ai-sdk/provider-utils": "5.0.38"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@ai-sdk/test-server": "2.0.1",
|
|
@@ -90,6 +90,7 @@ export async function convertToOpenResponsesInput({
|
|
|
90
90
|
: {
|
|
91
91
|
image_url: `data:${resolveFullMediaType({ part })};base64,${convertToBase64(part.data.data)}`,
|
|
92
92
|
}),
|
|
93
|
+
detail: getImageDetail(part, providerOptionsName),
|
|
93
94
|
});
|
|
94
95
|
} else if (part.data.type === 'url') {
|
|
95
96
|
userContent.push({
|
|
@@ -414,6 +415,7 @@ export async function convertToOpenResponsesInput({
|
|
|
414
415
|
contentParts.push({
|
|
415
416
|
type: 'input_image',
|
|
416
417
|
image_url: `data:${fullMediaType};base64,${convertToBase64(item.data.data)}`,
|
|
418
|
+
detail: getImageDetail(item, providerOptionsName),
|
|
417
419
|
});
|
|
418
420
|
} else {
|
|
419
421
|
contentParts.push({
|
|
@@ -427,6 +429,7 @@ export async function convertToOpenResponsesInput({
|
|
|
427
429
|
contentParts.push({
|
|
428
430
|
type: 'input_image',
|
|
429
431
|
image_url: item.data.url.toString(),
|
|
432
|
+
detail: getImageDetail(item, providerOptionsName),
|
|
430
433
|
});
|
|
431
434
|
} else {
|
|
432
435
|
contentParts.push({
|
|
@@ -590,6 +593,21 @@ function getProviderData(
|
|
|
590
593
|
: undefined;
|
|
591
594
|
}
|
|
592
595
|
|
|
596
|
+
function getImageDetail(
|
|
597
|
+
part: {
|
|
598
|
+
providerOptions?: Record<string, unknown>;
|
|
599
|
+
},
|
|
600
|
+
providerOptionsName: string,
|
|
601
|
+
): InputImageContentParam['detail'] {
|
|
602
|
+
const imageDetail = getProviderData(part, providerOptionsName)?.imageDetail;
|
|
603
|
+
|
|
604
|
+
return imageDetail === 'low' ||
|
|
605
|
+
imageDetail === 'high' ||
|
|
606
|
+
imageDetail === 'auto'
|
|
607
|
+
? imageDetail
|
|
608
|
+
: 'auto';
|
|
609
|
+
}
|
|
610
|
+
|
|
593
611
|
function parseReasoningSummary(
|
|
594
612
|
value: unknown,
|
|
595
613
|
): ReasoningItemParam['summary'] | undefined {
|