@ai-sdk/open-responses 1.0.16 → 1.0.18

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