@ai-sdk/open-responses 2.0.0-beta.22 → 2.0.0-beta.23
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,23 @@
|
|
|
1
1
|
# @ai-sdk/open-responses
|
|
2
2
|
|
|
3
|
+
## 2.0.0-beta.23
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- b3976a2: Add workflow serialization support to all provider models.
|
|
8
|
+
|
|
9
|
+
**`@ai-sdk/provider-utils`:** New `serializeModel()` helper that extracts only serializable properties from a model instance, filtering out functions and objects containing functions. Third-party provider authors can use this to add workflow support to their own models.
|
|
10
|
+
|
|
11
|
+
**All providers:** `headers` is now optional in provider config types. This is non-breaking — existing code that passes `headers` continues to work. Custom provider implementations that construct model configs manually can now omit `headers`, which is useful when models are deserialized from a workflow step boundary where auth is provided separately.
|
|
12
|
+
|
|
13
|
+
All provider model classes now include `WORKFLOW_SERIALIZE` and `WORKFLOW_DESERIALIZE` static methods, enabling them to cross workflow step boundaries without serialization errors.
|
|
14
|
+
|
|
15
|
+
- ff5eba1: feat: roll `image-*` tool output types into their equivalent `file-*` types
|
|
16
|
+
- Updated dependencies [b3976a2]
|
|
17
|
+
- Updated dependencies [ff5eba1]
|
|
18
|
+
- @ai-sdk/provider-utils@5.0.0-beta.20
|
|
19
|
+
- @ai-sdk/provider@4.0.0-beta.12
|
|
20
|
+
|
|
3
21
|
## 2.0.0-beta.22
|
|
4
22
|
|
|
5
23
|
### Major Changes
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/version.ts
|
|
2
|
-
var VERSION = true ? "2.0.0-beta.
|
|
2
|
+
var VERSION = true ? "2.0.0-beta.23" : "0.0.0-test";
|
|
3
3
|
|
|
4
4
|
// src/open-responses-provider.ts
|
|
5
5
|
import {
|
|
@@ -20,7 +20,10 @@ import {
|
|
|
20
20
|
jsonSchema,
|
|
21
21
|
mapReasoningToProviderEffort,
|
|
22
22
|
parseProviderOptions,
|
|
23
|
-
postJsonToApi
|
|
23
|
+
postJsonToApi,
|
|
24
|
+
serializeModelOptions,
|
|
25
|
+
WORKFLOW_SERIALIZE,
|
|
26
|
+
WORKFLOW_DESERIALIZE
|
|
24
27
|
} from "@ai-sdk/provider-utils";
|
|
25
28
|
import { z as z3 } from "zod/v4";
|
|
26
29
|
|
|
@@ -138,26 +141,33 @@ async function convertToOpenResponsesInput({
|
|
|
138
141
|
});
|
|
139
142
|
break;
|
|
140
143
|
}
|
|
141
|
-
case "
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
144
|
+
case "file-data": {
|
|
145
|
+
if (item.mediaType.startsWith("image/")) {
|
|
146
|
+
contentParts.push({
|
|
147
|
+
type: "input_image",
|
|
148
|
+
image_url: `data:${item.mediaType};base64,${item.data}`
|
|
149
|
+
});
|
|
150
|
+
} else {
|
|
151
|
+
contentParts.push({
|
|
152
|
+
type: "input_file",
|
|
153
|
+
filename: (_b = item.filename) != null ? _b : "data",
|
|
154
|
+
file_data: `data:${item.mediaType};base64,${item.data}`
|
|
155
|
+
});
|
|
156
|
+
}
|
|
146
157
|
break;
|
|
147
158
|
}
|
|
148
|
-
case "
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
});
|
|
159
|
+
case "file-url": {
|
|
160
|
+
if (item.mediaType.startsWith("image/")) {
|
|
161
|
+
contentParts.push({
|
|
162
|
+
type: "input_image",
|
|
163
|
+
image_url: item.url
|
|
164
|
+
});
|
|
165
|
+
} else {
|
|
166
|
+
contentParts.push({
|
|
167
|
+
type: "input_file",
|
|
168
|
+
file_url: item.url
|
|
169
|
+
});
|
|
170
|
+
}
|
|
161
171
|
break;
|
|
162
172
|
}
|
|
163
173
|
default: {
|
|
@@ -242,7 +252,7 @@ var openResponsesOptionsSchema = lazySchema2(
|
|
|
242
252
|
);
|
|
243
253
|
|
|
244
254
|
// src/responses/open-responses-language-model.ts
|
|
245
|
-
var OpenResponsesLanguageModel = class {
|
|
255
|
+
var OpenResponsesLanguageModel = class _OpenResponsesLanguageModel {
|
|
246
256
|
constructor(modelId, config) {
|
|
247
257
|
this.specificationVersion = "v4";
|
|
248
258
|
this.supportedUrls = {
|
|
@@ -251,6 +261,15 @@ var OpenResponsesLanguageModel = class {
|
|
|
251
261
|
this.modelId = modelId;
|
|
252
262
|
this.config = config;
|
|
253
263
|
}
|
|
264
|
+
static [WORKFLOW_SERIALIZE](model) {
|
|
265
|
+
return serializeModelOptions({
|
|
266
|
+
modelId: model.modelId,
|
|
267
|
+
config: model.config
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
static [WORKFLOW_DESERIALIZE](options) {
|
|
271
|
+
return new _OpenResponsesLanguageModel(options.modelId, options.config);
|
|
272
|
+
}
|
|
254
273
|
get provider() {
|
|
255
274
|
return this.config.provider;
|
|
256
275
|
}
|
|
@@ -348,7 +367,7 @@ var OpenResponsesLanguageModel = class {
|
|
|
348
367
|
};
|
|
349
368
|
}
|
|
350
369
|
async doGenerate(options) {
|
|
351
|
-
var _a, _b, _c, _d, _e, _f;
|
|
370
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
352
371
|
const { body, warnings } = await this.getArgs(options);
|
|
353
372
|
const {
|
|
354
373
|
responseHeaders,
|
|
@@ -356,7 +375,7 @@ var OpenResponsesLanguageModel = class {
|
|
|
356
375
|
rawValue: rawResponse
|
|
357
376
|
} = await postJsonToApi({
|
|
358
377
|
url: this.config.url,
|
|
359
|
-
headers: combineHeaders(this.config.headers(), options.headers),
|
|
378
|
+
headers: combineHeaders((_b = (_a = this.config).headers) == null ? void 0 : _b.call(_a), options.headers),
|
|
360
379
|
body,
|
|
361
380
|
failedResponseHandler: createJsonErrorResponseHandler({
|
|
362
381
|
errorSchema: openResponsesErrorSchema,
|
|
@@ -377,7 +396,7 @@ var OpenResponsesLanguageModel = class {
|
|
|
377
396
|
switch (part.type) {
|
|
378
397
|
// TODO AI SDK 7 adjust reasoning in the specification to better support the reasoning structure from open responses.
|
|
379
398
|
case "reasoning": {
|
|
380
|
-
for (const contentPart of (
|
|
399
|
+
for (const contentPart of (_c = part.content) != null ? _c : []) {
|
|
381
400
|
content.push({
|
|
382
401
|
type: "reasoning",
|
|
383
402
|
text: contentPart.text
|
|
@@ -408,17 +427,17 @@ var OpenResponsesLanguageModel = class {
|
|
|
408
427
|
}
|
|
409
428
|
const usage = response.usage;
|
|
410
429
|
const inputTokens = usage == null ? void 0 : usage.input_tokens;
|
|
411
|
-
const cachedInputTokens = (
|
|
430
|
+
const cachedInputTokens = (_d = usage == null ? void 0 : usage.input_tokens_details) == null ? void 0 : _d.cached_tokens;
|
|
412
431
|
const outputTokens = usage == null ? void 0 : usage.output_tokens;
|
|
413
|
-
const reasoningTokens = (
|
|
432
|
+
const reasoningTokens = (_e = usage == null ? void 0 : usage.output_tokens_details) == null ? void 0 : _e.reasoning_tokens;
|
|
414
433
|
return {
|
|
415
434
|
content,
|
|
416
435
|
finishReason: {
|
|
417
436
|
unified: mapOpenResponsesFinishReason({
|
|
418
|
-
finishReason: (
|
|
437
|
+
finishReason: (_f = response.incomplete_details) == null ? void 0 : _f.reason,
|
|
419
438
|
hasToolCalls
|
|
420
439
|
}),
|
|
421
|
-
raw: (
|
|
440
|
+
raw: (_h = (_g = response.incomplete_details) == null ? void 0 : _g.reason) != null ? _h : void 0
|
|
422
441
|
},
|
|
423
442
|
usage: {
|
|
424
443
|
inputTokens: {
|
|
@@ -447,10 +466,11 @@ var OpenResponsesLanguageModel = class {
|
|
|
447
466
|
};
|
|
448
467
|
}
|
|
449
468
|
async doStream(options) {
|
|
469
|
+
var _a, _b;
|
|
450
470
|
const { body, warnings } = await this.getArgs(options);
|
|
451
471
|
const { responseHeaders, value: response } = await postJsonToApi({
|
|
452
472
|
url: this.config.url,
|
|
453
|
-
headers: combineHeaders(this.config.headers(), options.headers),
|
|
473
|
+
headers: combineHeaders((_b = (_a = this.config).headers) == null ? void 0 : _b.call(_a), options.headers),
|
|
454
474
|
body: {
|
|
455
475
|
...body,
|
|
456
476
|
stream: true
|
|
@@ -478,14 +498,14 @@ var OpenResponsesLanguageModel = class {
|
|
|
478
498
|
}
|
|
479
499
|
};
|
|
480
500
|
const updateUsage = (responseUsage) => {
|
|
481
|
-
var
|
|
501
|
+
var _a2, _b2;
|
|
482
502
|
if (!responseUsage) {
|
|
483
503
|
return;
|
|
484
504
|
}
|
|
485
505
|
const inputTokens = responseUsage.input_tokens;
|
|
486
|
-
const cachedInputTokens = (
|
|
506
|
+
const cachedInputTokens = (_a2 = responseUsage.input_tokens_details) == null ? void 0 : _a2.cached_tokens;
|
|
487
507
|
const outputTokens = responseUsage.output_tokens;
|
|
488
|
-
const reasoningTokens = (
|
|
508
|
+
const reasoningTokens = (_b2 = responseUsage.output_tokens_details) == null ? void 0 : _b2.reasoning_tokens;
|
|
489
509
|
usage.inputTokens = {
|
|
490
510
|
total: inputTokens,
|
|
491
511
|
noCache: (inputTokens != null ? inputTokens : 0) - (cachedInputTokens != null ? cachedInputTokens : 0),
|
|
@@ -513,7 +533,7 @@ var OpenResponsesLanguageModel = class {
|
|
|
513
533
|
controller.enqueue({ type: "stream-start", warnings });
|
|
514
534
|
},
|
|
515
535
|
transform(parseResult, controller) {
|
|
516
|
-
var
|
|
536
|
+
var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
517
537
|
if (options.includeRawChunks) {
|
|
518
538
|
controller.enqueue({
|
|
519
539
|
type: "raw",
|
|
@@ -533,8 +553,8 @@ var OpenResponsesLanguageModel = class {
|
|
|
533
553
|
};
|
|
534
554
|
} else if (chunk.type === "response.function_call_arguments.delta") {
|
|
535
555
|
const functionCallChunk = chunk;
|
|
536
|
-
const toolCall = (
|
|
537
|
-
toolCall.arguments = ((
|
|
556
|
+
const toolCall = (_a2 = toolCallsByItemId[functionCallChunk.item_id]) != null ? _a2 : toolCallsByItemId[functionCallChunk.item_id] = {};
|
|
557
|
+
toolCall.arguments = ((_b2 = toolCall.arguments) != null ? _b2 : "") + functionCallChunk.delta;
|
|
538
558
|
} else if (chunk.type === "response.function_call_arguments.done") {
|
|
539
559
|
const functionCallChunk = chunk;
|
|
540
560
|
const toolCall = (_c = toolCallsByItemId[functionCallChunk.item_id]) != null ? _c : toolCallsByItemId[functionCallChunk.item_id] = {};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/version.ts","../src/open-responses-provider.ts","../src/responses/open-responses-language-model.ts","../src/responses/convert-to-open-responses-input.ts","../src/responses/open-responses-api.ts","../src/responses/map-open-responses-finish-reason.ts","../src/responses/open-responses-options.ts"],"sourcesContent":["// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import {\n LanguageModelV4,\n NoSuchModelError,\n ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n generateId,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { OpenResponsesLanguageModel } from './responses/open-responses-language-model';\nimport { VERSION } from './version';\n\nexport interface OpenResponsesProvider extends ProviderV4 {\n (modelId: string): LanguageModelV4;\n}\n\nexport interface OpenResponsesProviderSettings {\n /**\n * URL for the Open Responses API POST endpoint.\n */\n url: string;\n\n /**\n * Provider name. Used as key for provider options and metadata.\n */\n name: string;\n\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\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 = 'v4' as const;\n provider.languageModel = createLanguageModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider as OpenResponsesProvider;\n}\n","import {\n LanguageModelV4,\n LanguageModelV4CallOptions,\n LanguageModelV4Content,\n LanguageModelV4FinishReason,\n LanguageModelV4GenerateResult,\n LanguageModelV4StreamPart,\n LanguageModelV4StreamResult,\n LanguageModelV4Usage,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n isCustomReasoning,\n jsonSchema,\n mapReasoningToProviderEffort,\n parseProviderOptions,\n ParseResult,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { convertToOpenResponsesInput } from './convert-to-open-responses-input';\nimport {\n FunctionToolParam,\n OpenResponsesRequestBody,\n OpenResponsesResponseBody,\n OpenResponsesChunk,\n openResponsesErrorSchema,\n ToolChoiceParam,\n} from './open-responses-api';\nimport { mapOpenResponsesFinishReason } from './map-open-responses-finish-reason';\nimport { OpenResponsesConfig } from './open-responses-config';\nimport { openResponsesOptionsSchema } from './open-responses-options';\n\nexport class OpenResponsesLanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\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 reasoning,\n prompt,\n providerOptions,\n tools,\n toolChoice,\n responseFormat,\n }: LanguageModelV4CallOptions): Promise<{\n body: Omit<OpenResponsesRequestBody, 'stream' | 'stream_options'>;\n warnings: SharedV4Warning[];\n }> {\n const warnings: SharedV4Warning[] = [];\n\n if (stopSequences != null) {\n warnings.push({ type: 'unsupported', feature: 'stopSequences' });\n }\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n\n if (seed != null) {\n warnings.push({ type: 'unsupported', feature: 'seed' });\n }\n\n const {\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 const resolvedReasoningEffort = isCustomReasoning(reasoning)\n ? reasoning === 'none'\n ? 'none'\n : mapReasoningToProviderEffort({\n reasoning,\n effortMap: {\n minimal: 'low',\n low: 'low',\n medium: 'medium',\n high: 'high',\n xhigh: 'xhigh',\n },\n warnings,\n })\n : undefined;\n\n return {\n body: {\n model: this.modelId,\n input,\n instructions,\n max_output_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n presence_penalty: presencePenalty,\n frequency_penalty: frequencyPenalty,\n reasoning:\n resolvedReasoningEffort != null ||\n openResponsesOptions?.reasoningSummary != null\n ? {\n ...(resolvedReasoningEffort != null && {\n effort: resolvedReasoningEffort,\n }),\n ...(openResponsesOptions?.reasoningSummary != null && {\n summary: openResponsesOptions.reasoningSummary,\n }),\n }\n : undefined,\n tools: 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: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\n const { body, warnings } = await this.getArgs(options);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: openResponsesErrorSchema,\n errorToMessage: error => error.error.message,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n // do not validate the response body, only apply types to the response body\n jsonSchema<OpenResponsesResponseBody>(() => {\n throw new Error('json schema not implemented');\n }),\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const content: Array<LanguageModelV4Content> = [];\n let hasToolCalls = false;\n\n for (const part of response.output!) {\n switch (part.type) {\n // TODO AI SDK 7 adjust reasoning in the specification to better support the reasoning structure from open responses.\n case 'reasoning': {\n 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: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\n const { body, warnings } = await this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url,\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...body,\n stream: true,\n } satisfies OpenResponsesRequestBody,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: openResponsesErrorSchema,\n errorToMessage: error => error.error.message,\n }),\n // TODO consider validation\n successfulResponseHandler: createEventSourceResponseHandler(z.any()),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const usage: LanguageModelV4Usage = {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n };\n\n const updateUsage = (\n responseUsage?: OpenResponsesResponseBody['usage'],\n ) => {\n if (!responseUsage) {\n return;\n }\n\n const inputTokens = responseUsage.input_tokens;\n const cachedInputTokens =\n responseUsage.input_tokens_details?.cached_tokens;\n const outputTokens = responseUsage.output_tokens;\n const reasoningTokens =\n responseUsage.output_tokens_details?.reasoning_tokens;\n\n usage.inputTokens = {\n total: inputTokens,\n noCache: (inputTokens ?? 0) - (cachedInputTokens ?? 0),\n cacheRead: cachedInputTokens,\n cacheWrite: undefined,\n };\n usage.outputTokens = {\n total: outputTokens,\n text: (outputTokens ?? 0) - (reasoningTokens ?? 0),\n reasoning: reasoningTokens,\n };\n usage.raw = responseUsage;\n };\n\n let isActiveReasoning = false;\n let hasToolCalls = false;\n let finishReason: LanguageModelV4FinishReason = {\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 LanguageModelV4StreamPart\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 {\n LanguageModelV4Prompt,\n SharedV4Warning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertToBase64, isProviderReference } from '@ai-sdk/provider-utils';\nimport {\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: LanguageModelV4Prompt;\n}): Promise<{\n input: OpenResponsesRequestBody['input'];\n instructions: string | undefined;\n warnings: Array<SharedV4Warning>;\n}> {\n const input: OpenResponsesRequestBody['input'] = [];\n const warnings: Array<SharedV4Warning> = [];\n const systemMessages: string[] = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n systemMessages.push(content);\n break;\n }\n\n case 'user': {\n const userContent: Array<\n InputTextContentParam | InputImageContentParam | InputFileContentParam\n > = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n userContent.push({ type: 'input_text', text: part.text });\n break;\n }\n case 'file': {\n if (isProviderReference(part.data)) {\n throw new UnsupportedFunctionalityError({\n functionality: 'file parts with provider references',\n });\n }\n\n if (!part.mediaType.startsWith('image/')) {\n warnings.push({\n type: 'other',\n message: `unsupported file content type: ${part.mediaType}`,\n });\n break;\n }\n\n const mediaType =\n part.mediaType === 'image/*' ? 'image/jpeg' : part.mediaType;\n\n userContent.push({\n type: 'input_image',\n ...(part.data instanceof URL\n ? { image_url: part.data.toString() }\n : {\n image_url: `data:${mediaType};base64,${convertToBase64(part.data)}`,\n }),\n });\n break;\n }\n }\n }\n\n input.push({ type: 'message', role: 'user', content: userContent });\n break;\n }\n\n case 'assistant': {\n const assistantContent: Array<\n OutputTextContentParam | RefusalContentParam\n > = [];\n const toolCalls: Array<FunctionCallItemParam> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n assistantContent.push({ type: 'output_text', text: part.text });\n break;\n }\n case 'tool-call': {\n const argumentsValue =\n typeof part.input === 'string'\n ? part.input\n : JSON.stringify(part.input);\n toolCalls.push({\n type: 'function_call',\n call_id: part.toolCallId,\n name: part.toolName,\n arguments: argumentsValue,\n });\n break;\n }\n }\n }\n\n // Push assistant message with text content if any\n if (assistantContent.length > 0) {\n input.push({\n type: 'message',\n role: 'assistant',\n content: assistantContent,\n });\n }\n\n // Push function calls as separate items\n for (const toolCall of toolCalls) {\n input.push(toolCall);\n }\n\n break;\n }\n\n case 'tool': {\n for (const part of content) {\n if (part.type === 'tool-result') {\n const output = part.output;\n let contentValue: FunctionCallOutputItemParam['output'];\n\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'execution-denied':\n contentValue = output.reason ?? 'Tool execution denied.';\n break;\n case 'json':\n case 'error-json':\n contentValue = JSON.stringify(output.value);\n break;\n case 'content': {\n const contentParts: Array<\n | InputTextContentParam\n | InputImageContentParam\n | InputFileContentParam\n > = [];\n for (const item of output.value) {\n switch (item.type) {\n case 'text': {\n contentParts.push({\n type: 'input_text',\n text: item.text,\n });\n break;\n }\n case 'image-data': {\n contentParts.push({\n type: 'input_image',\n image_url: `data:${item.mediaType};base64,${item.data}`,\n });\n break;\n }\n case 'image-url': {\n contentParts.push({\n type: 'input_image',\n image_url: item.url,\n });\n break;\n }\n case 'file-data': {\n contentParts.push({\n type: 'input_file',\n filename: item.filename ?? 'data',\n file_data: `data:${item.mediaType};base64,${item.data}`,\n });\n break;\n }\n default: {\n warnings.push({\n type: 'other',\n message: `unsupported tool content part type: ${(item as { type: string }).type}`,\n });\n break;\n }\n }\n }\n contentValue = contentParts;\n break;\n }\n }\n\n input.push({\n type: 'function_call_output',\n call_id: part.toolCallId,\n output: contentValue,\n });\n }\n }\n break;\n }\n }\n }\n\n return {\n input,\n instructions:\n systemMessages.length > 0 ? systemMessages.join('\\n') : undefined,\n warnings,\n };\n}\n","import { JSONSchema7 } from '@ai-sdk/provider';\nimport { lazySchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { zodSchema } from '@ai-sdk/provider-utils';\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 { LanguageModelV4FinishReason } from '@ai-sdk/provider';\n\nexport function mapOpenResponsesFinishReason({\n finishReason,\n hasToolCalls,\n}: {\n finishReason: string | null | undefined;\n hasToolCalls: boolean;\n}): LanguageModelV4FinishReason['unified'] {\n switch (finishReason) {\n case undefined:\n case null:\n return hasToolCalls ? 'tool-calls' : 'stop';\n case 'max_output_tokens':\n return 'length';\n case 'content_filter':\n return 'content-filter';\n default:\n return hasToolCalls ? 'tool-calls' : 'other';\n }\n}\n","import { InferSchema, lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const openResponsesOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\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 LanguageModelV4,\n NoSuchModelError,\n ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n generateId,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { OpenResponsesLanguageModel } from './responses/open-responses-language-model';\nimport { VERSION } from './version';\n\nexport interface OpenResponsesProvider extends ProviderV4 {\n (modelId: string): LanguageModelV4;\n}\n\nexport interface OpenResponsesProviderSettings {\n /**\n * URL for the Open Responses API POST endpoint.\n */\n url: string;\n\n /**\n * Provider name. Used as key for provider options and metadata.\n */\n name: string;\n\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\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 = 'v4' as const;\n provider.languageModel = createLanguageModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider as OpenResponsesProvider;\n}\n","import {\n LanguageModelV4,\n LanguageModelV4CallOptions,\n LanguageModelV4Content,\n LanguageModelV4FinishReason,\n LanguageModelV4GenerateResult,\n LanguageModelV4StreamPart,\n LanguageModelV4StreamResult,\n LanguageModelV4Usage,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n isCustomReasoning,\n jsonSchema,\n mapReasoningToProviderEffort,\n parseProviderOptions,\n ParseResult,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { convertToOpenResponsesInput } from './convert-to-open-responses-input';\nimport {\n FunctionToolParam,\n OpenResponsesRequestBody,\n OpenResponsesResponseBody,\n OpenResponsesChunk,\n openResponsesErrorSchema,\n ToolChoiceParam,\n} from './open-responses-api';\nimport { mapOpenResponsesFinishReason } from './map-open-responses-finish-reason';\nimport { OpenResponsesConfig } from './open-responses-config';\nimport { openResponsesOptionsSchema } from './open-responses-options';\n\nexport class OpenResponsesLanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n\n readonly modelId: string;\n\n private readonly config: OpenResponsesConfig;\n\n static [WORKFLOW_SERIALIZE](model: OpenResponsesLanguageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: string;\n config: OpenResponsesConfig;\n }) {\n return new OpenResponsesLanguageModel(options.modelId, options.config);\n }\n\n constructor(modelId: string, config: OpenResponsesConfig) {\n this.modelId = modelId;\n this.config = config;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'image/*': [/^https?:\\/\\/.*$/],\n };\n\n get provider(): string {\n return this.config.provider;\n }\n\n private async getArgs({\n maxOutputTokens,\n temperature,\n stopSequences,\n topP,\n topK,\n presencePenalty,\n frequencyPenalty,\n seed,\n reasoning,\n prompt,\n providerOptions,\n tools,\n toolChoice,\n responseFormat,\n }: LanguageModelV4CallOptions): Promise<{\n body: Omit<OpenResponsesRequestBody, 'stream' | 'stream_options'>;\n warnings: SharedV4Warning[];\n }> {\n const warnings: SharedV4Warning[] = [];\n\n if (stopSequences != null) {\n warnings.push({ type: 'unsupported', feature: 'stopSequences' });\n }\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n\n if (seed != null) {\n warnings.push({ type: 'unsupported', feature: 'seed' });\n }\n\n const {\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 const resolvedReasoningEffort = isCustomReasoning(reasoning)\n ? reasoning === 'none'\n ? 'none'\n : mapReasoningToProviderEffort({\n reasoning,\n effortMap: {\n minimal: 'low',\n low: 'low',\n medium: 'medium',\n high: 'high',\n xhigh: 'xhigh',\n },\n warnings,\n })\n : undefined;\n\n return {\n body: {\n model: this.modelId,\n input,\n instructions,\n max_output_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n presence_penalty: presencePenalty,\n frequency_penalty: frequencyPenalty,\n reasoning:\n resolvedReasoningEffort != null ||\n openResponsesOptions?.reasoningSummary != null\n ? {\n ...(resolvedReasoningEffort != null && {\n effort: resolvedReasoningEffort,\n }),\n ...(openResponsesOptions?.reasoningSummary != null && {\n summary: openResponsesOptions.reasoningSummary,\n }),\n }\n : undefined,\n tools: 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: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\n const { body, warnings } = await this.getArgs(options);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url,\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: openResponsesErrorSchema,\n errorToMessage: error => error.error.message,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n // do not validate the response body, only apply types to the response body\n jsonSchema<OpenResponsesResponseBody>(() => {\n throw new Error('json schema not implemented');\n }),\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const content: Array<LanguageModelV4Content> = [];\n let hasToolCalls = false;\n\n for (const part of response.output!) {\n switch (part.type) {\n // TODO AI SDK 7 adjust reasoning in the specification to better support the reasoning structure from open responses.\n case 'reasoning': {\n 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: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\n const { body, warnings } = await this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url,\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body: {\n ...body,\n stream: true,\n } satisfies OpenResponsesRequestBody,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: openResponsesErrorSchema,\n errorToMessage: error => error.error.message,\n }),\n // TODO consider validation\n successfulResponseHandler: createEventSourceResponseHandler(z.any()),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const usage: LanguageModelV4Usage = {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n };\n\n const updateUsage = (\n responseUsage?: OpenResponsesResponseBody['usage'],\n ) => {\n if (!responseUsage) {\n return;\n }\n\n const inputTokens = responseUsage.input_tokens;\n const cachedInputTokens =\n responseUsage.input_tokens_details?.cached_tokens;\n const outputTokens = responseUsage.output_tokens;\n const reasoningTokens =\n responseUsage.output_tokens_details?.reasoning_tokens;\n\n usage.inputTokens = {\n total: inputTokens,\n noCache: (inputTokens ?? 0) - (cachedInputTokens ?? 0),\n cacheRead: cachedInputTokens,\n cacheWrite: undefined,\n };\n usage.outputTokens = {\n total: outputTokens,\n text: (outputTokens ?? 0) - (reasoningTokens ?? 0),\n reasoning: reasoningTokens,\n };\n usage.raw = responseUsage;\n };\n\n let isActiveReasoning = false;\n let hasToolCalls = false;\n let finishReason: LanguageModelV4FinishReason = {\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 LanguageModelV4StreamPart\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 {\n LanguageModelV4Prompt,\n SharedV4Warning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertToBase64, isProviderReference } from '@ai-sdk/provider-utils';\nimport {\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: LanguageModelV4Prompt;\n}): Promise<{\n input: OpenResponsesRequestBody['input'];\n instructions: string | undefined;\n warnings: Array<SharedV4Warning>;\n}> {\n const input: OpenResponsesRequestBody['input'] = [];\n const warnings: Array<SharedV4Warning> = [];\n const systemMessages: string[] = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n systemMessages.push(content);\n break;\n }\n\n case 'user': {\n const userContent: Array<\n InputTextContentParam | InputImageContentParam | InputFileContentParam\n > = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n userContent.push({ type: 'input_text', text: part.text });\n break;\n }\n case 'file': {\n if (isProviderReference(part.data)) {\n throw new UnsupportedFunctionalityError({\n functionality: 'file parts with provider references',\n });\n }\n\n if (!part.mediaType.startsWith('image/')) {\n warnings.push({\n type: 'other',\n message: `unsupported file content type: ${part.mediaType}`,\n });\n break;\n }\n\n const mediaType =\n part.mediaType === 'image/*' ? 'image/jpeg' : part.mediaType;\n\n userContent.push({\n type: 'input_image',\n ...(part.data instanceof URL\n ? { image_url: part.data.toString() }\n : {\n image_url: `data:${mediaType};base64,${convertToBase64(part.data)}`,\n }),\n });\n break;\n }\n }\n }\n\n input.push({ type: 'message', role: 'user', content: userContent });\n break;\n }\n\n case 'assistant': {\n const assistantContent: Array<\n OutputTextContentParam | RefusalContentParam\n > = [];\n const toolCalls: Array<FunctionCallItemParam> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n assistantContent.push({ type: 'output_text', text: part.text });\n break;\n }\n case 'tool-call': {\n const argumentsValue =\n typeof part.input === 'string'\n ? part.input\n : JSON.stringify(part.input);\n toolCalls.push({\n type: 'function_call',\n call_id: part.toolCallId,\n name: part.toolName,\n arguments: argumentsValue,\n });\n break;\n }\n }\n }\n\n // Push assistant message with text content if any\n if (assistantContent.length > 0) {\n input.push({\n type: 'message',\n role: 'assistant',\n content: assistantContent,\n });\n }\n\n // Push function calls as separate items\n for (const toolCall of toolCalls) {\n input.push(toolCall);\n }\n\n break;\n }\n\n case 'tool': {\n for (const part of content) {\n if (part.type === 'tool-result') {\n const output = part.output;\n let contentValue: FunctionCallOutputItemParam['output'];\n\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'execution-denied':\n contentValue = output.reason ?? 'Tool execution denied.';\n break;\n case 'json':\n case 'error-json':\n contentValue = JSON.stringify(output.value);\n break;\n case 'content': {\n const contentParts: Array<\n | InputTextContentParam\n | InputImageContentParam\n | InputFileContentParam\n > = [];\n for (const item of output.value) {\n switch (item.type) {\n case 'text': {\n contentParts.push({\n type: 'input_text',\n text: item.text,\n });\n break;\n }\n case 'file-data': {\n if (item.mediaType.startsWith('image/')) {\n contentParts.push({\n type: 'input_image',\n image_url: `data:${item.mediaType};base64,${item.data}`,\n });\n } else {\n contentParts.push({\n type: 'input_file',\n filename: item.filename ?? 'data',\n file_data: `data:${item.mediaType};base64,${item.data}`,\n });\n }\n break;\n }\n case 'file-url': {\n if (item.mediaType.startsWith('image/')) {\n contentParts.push({\n type: 'input_image',\n image_url: item.url,\n });\n } else {\n contentParts.push({\n type: 'input_file',\n file_url: item.url,\n });\n }\n break;\n }\n default: {\n warnings.push({\n type: 'other',\n message: `unsupported tool content part type: ${(item as { type: string }).type}`,\n });\n break;\n }\n }\n }\n contentValue = contentParts;\n break;\n }\n }\n\n input.push({\n type: 'function_call_output',\n call_id: part.toolCallId,\n output: contentValue,\n });\n }\n }\n break;\n }\n }\n }\n\n return {\n input,\n instructions:\n systemMessages.length > 0 ? systemMessages.join('\\n') : undefined,\n warnings,\n };\n}\n","import { JSONSchema7 } from '@ai-sdk/provider';\nimport { lazySchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { zodSchema } from '@ai-sdk/provider-utils';\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 { LanguageModelV4FinishReason } from '@ai-sdk/provider';\n\nexport function mapOpenResponsesFinishReason({\n finishReason,\n hasToolCalls,\n}: {\n finishReason: string | null | undefined;\n hasToolCalls: boolean;\n}): LanguageModelV4FinishReason['unified'] {\n switch (finishReason) {\n case undefined:\n case null:\n return hasToolCalls ? 'tool-calls' : 'stop';\n case 'max_output_tokens':\n return 'length';\n case 'content_filter':\n return 'content-filter';\n default:\n return hasToolCalls ? 'tool-calls' : 'other';\n }\n}\n","import { InferSchema, lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const openResponsesOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\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","_a","_b"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/open-responses",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.23",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@ai-sdk/provider": "4.0.0-beta.
|
|
33
|
-
"@ai-sdk/provider-utils": "5.0.0-beta.
|
|
32
|
+
"@ai-sdk/provider": "4.0.0-beta.12",
|
|
33
|
+
"@ai-sdk/provider-utils": "5.0.0-beta.20"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/node": "20.17.24",
|
|
@@ -159,26 +159,33 @@ export async function convertToOpenResponsesInput({
|
|
|
159
159
|
});
|
|
160
160
|
break;
|
|
161
161
|
}
|
|
162
|
-
case '
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
162
|
+
case 'file-data': {
|
|
163
|
+
if (item.mediaType.startsWith('image/')) {
|
|
164
|
+
contentParts.push({
|
|
165
|
+
type: 'input_image',
|
|
166
|
+
image_url: `data:${item.mediaType};base64,${item.data}`,
|
|
167
|
+
});
|
|
168
|
+
} else {
|
|
169
|
+
contentParts.push({
|
|
170
|
+
type: 'input_file',
|
|
171
|
+
filename: item.filename ?? 'data',
|
|
172
|
+
file_data: `data:${item.mediaType};base64,${item.data}`,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
174
175
|
break;
|
|
175
176
|
}
|
|
176
|
-
case 'file-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
177
|
+
case 'file-url': {
|
|
178
|
+
if (item.mediaType.startsWith('image/')) {
|
|
179
|
+
contentParts.push({
|
|
180
|
+
type: 'input_image',
|
|
181
|
+
image_url: item.url,
|
|
182
|
+
});
|
|
183
|
+
} else {
|
|
184
|
+
contentParts.push({
|
|
185
|
+
type: 'input_file',
|
|
186
|
+
file_url: item.url,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
182
189
|
break;
|
|
183
190
|
}
|
|
184
191
|
default: {
|
|
@@ -4,7 +4,7 @@ export type OpenResponsesConfig = {
|
|
|
4
4
|
provider: string;
|
|
5
5
|
providerOptionsName: string;
|
|
6
6
|
url: string;
|
|
7
|
-
headers
|
|
7
|
+
headers?: () => Record<string, string | undefined>;
|
|
8
8
|
fetch?: FetchFunction;
|
|
9
9
|
generateId: () => string;
|
|
10
10
|
};
|
|
@@ -20,6 +20,9 @@ import {
|
|
|
20
20
|
parseProviderOptions,
|
|
21
21
|
ParseResult,
|
|
22
22
|
postJsonToApi,
|
|
23
|
+
serializeModelOptions,
|
|
24
|
+
WORKFLOW_SERIALIZE,
|
|
25
|
+
WORKFLOW_DESERIALIZE,
|
|
23
26
|
} from '@ai-sdk/provider-utils';
|
|
24
27
|
import { z } from 'zod/v4';
|
|
25
28
|
import { convertToOpenResponsesInput } from './convert-to-open-responses-input';
|
|
@@ -42,6 +45,20 @@ export class OpenResponsesLanguageModel implements LanguageModelV4 {
|
|
|
42
45
|
|
|
43
46
|
private readonly config: OpenResponsesConfig;
|
|
44
47
|
|
|
48
|
+
static [WORKFLOW_SERIALIZE](model: OpenResponsesLanguageModel) {
|
|
49
|
+
return serializeModelOptions({
|
|
50
|
+
modelId: model.modelId,
|
|
51
|
+
config: model.config,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
static [WORKFLOW_DESERIALIZE](options: {
|
|
56
|
+
modelId: string;
|
|
57
|
+
config: OpenResponsesConfig;
|
|
58
|
+
}) {
|
|
59
|
+
return new OpenResponsesLanguageModel(options.modelId, options.config);
|
|
60
|
+
}
|
|
61
|
+
|
|
45
62
|
constructor(modelId: string, config: OpenResponsesConfig) {
|
|
46
63
|
this.modelId = modelId;
|
|
47
64
|
this.config = config;
|
|
@@ -195,7 +212,7 @@ export class OpenResponsesLanguageModel implements LanguageModelV4 {
|
|
|
195
212
|
rawValue: rawResponse,
|
|
196
213
|
} = await postJsonToApi({
|
|
197
214
|
url: this.config.url,
|
|
198
|
-
headers: combineHeaders(this.config.headers(), options.headers),
|
|
215
|
+
headers: combineHeaders(this.config.headers?.(), options.headers),
|
|
199
216
|
body,
|
|
200
217
|
failedResponseHandler: createJsonErrorResponseHandler({
|
|
201
218
|
errorSchema: openResponsesErrorSchema,
|
|
@@ -300,7 +317,7 @@ export class OpenResponsesLanguageModel implements LanguageModelV4 {
|
|
|
300
317
|
|
|
301
318
|
const { responseHeaders, value: response } = await postJsonToApi({
|
|
302
319
|
url: this.config.url,
|
|
303
|
-
headers: combineHeaders(this.config.headers(), options.headers),
|
|
320
|
+
headers: combineHeaders(this.config.headers?.(), options.headers),
|
|
304
321
|
body: {
|
|
305
322
|
...body,
|
|
306
323
|
stream: true,
|