@ai-sdk/open-responses 2.0.0-beta.8 → 2.0.0-canary.34

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/dist/index.js CHANGED
@@ -1,43 +1,41 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/index.ts
21
- var index_exports = {};
22
- __export(index_exports, {
23
- VERSION: () => VERSION,
24
- createOpenResponses: () => createOpenResponses
25
- });
26
- module.exports = __toCommonJS(index_exports);
27
-
28
1
  // src/version.ts
29
- var VERSION = true ? "2.0.0-beta.8" : "0.0.0-test";
2
+ var VERSION = true ? "2.0.0-canary.34" : "0.0.0-test";
30
3
 
31
4
  // src/open-responses-provider.ts
32
- var import_provider = require("@ai-sdk/provider");
33
- var import_provider_utils5 = require("@ai-sdk/provider-utils");
5
+ import {
6
+ NoSuchModelError
7
+ } from "@ai-sdk/provider";
8
+ import {
9
+ generateId,
10
+ withUserAgentSuffix
11
+ } from "@ai-sdk/provider-utils";
34
12
 
35
13
  // src/responses/open-responses-language-model.ts
36
- var import_provider_utils4 = require("@ai-sdk/provider-utils");
37
- var import_v42 = require("zod/v4");
14
+ import {
15
+ combineHeaders,
16
+ createEventSourceResponseHandler,
17
+ createJsonErrorResponseHandler,
18
+ createJsonResponseHandler,
19
+ isCustomReasoning,
20
+ jsonSchema,
21
+ mapReasoningToProviderEffort,
22
+ parseProviderOptions,
23
+ postJsonToApi,
24
+ serializeModelOptions,
25
+ WORKFLOW_SERIALIZE,
26
+ WORKFLOW_DESERIALIZE
27
+ } from "@ai-sdk/provider-utils";
28
+ import { z as z3 } from "zod/v4";
38
29
 
39
30
  // src/responses/convert-to-open-responses-input.ts
40
- var import_provider_utils = require("@ai-sdk/provider-utils");
31
+ import {
32
+ UnsupportedFunctionalityError
33
+ } from "@ai-sdk/provider";
34
+ import {
35
+ convertToBase64,
36
+ getTopLevelMediaType,
37
+ resolveFullMediaType
38
+ } from "@ai-sdk/provider-utils";
41
39
  async function convertToOpenResponsesInput({
42
40
  prompt
43
41
  }) {
@@ -60,20 +58,35 @@ async function convertToOpenResponsesInput({
60
58
  break;
61
59
  }
62
60
  case "file": {
63
- if (!part.mediaType.startsWith("image/")) {
64
- warnings.push({
65
- type: "other",
66
- message: `unsupported file content type: ${part.mediaType}`
67
- });
68
- break;
69
- }
70
- const mediaType = part.mediaType === "image/*" ? "image/jpeg" : part.mediaType;
71
- userContent.push({
72
- type: "input_image",
73
- ...part.data instanceof URL ? { image_url: part.data.toString() } : {
74
- image_url: `data:${mediaType};base64,${(0, import_provider_utils.convertToBase64)(part.data)}`
61
+ switch (part.data.type) {
62
+ case "reference": {
63
+ throw new UnsupportedFunctionalityError({
64
+ functionality: "file parts with provider references"
65
+ });
75
66
  }
76
- });
67
+ case "text": {
68
+ throw new UnsupportedFunctionalityError({
69
+ functionality: "text file parts"
70
+ });
71
+ }
72
+ case "url":
73
+ case "data": {
74
+ if (getTopLevelMediaType(part.mediaType) !== "image") {
75
+ warnings.push({
76
+ type: "other",
77
+ message: `unsupported file content type: ${part.mediaType}`
78
+ });
79
+ break;
80
+ }
81
+ userContent.push({
82
+ type: "input_image",
83
+ ...part.data.type === "url" ? { image_url: part.data.url.toString() } : {
84
+ image_url: `data:${resolveFullMediaType({ part })};base64,${convertToBase64(part.data.data)}`
85
+ }
86
+ });
87
+ break;
88
+ }
89
+ }
77
90
  break;
78
91
  }
79
92
  }
@@ -125,7 +138,7 @@ async function convertToOpenResponsesInput({
125
138
  contentValue = output.value;
126
139
  break;
127
140
  case "execution-denied":
128
- contentValue = (_a = output.reason) != null ? _a : "Tool execution denied.";
141
+ contentValue = (_a = output.reason) != null ? _a : "Tool call execution denied.";
129
142
  break;
130
143
  case "json":
131
144
  case "error-json":
@@ -142,26 +155,33 @@ async function convertToOpenResponsesInput({
142
155
  });
143
156
  break;
144
157
  }
145
- case "image-data": {
146
- contentParts.push({
147
- type: "input_image",
148
- image_url: `data:${item.mediaType};base64,${item.data}`
149
- });
150
- break;
151
- }
152
- case "image-url": {
153
- contentParts.push({
154
- type: "input_image",
155
- image_url: item.url
156
- });
158
+ case "file-data": {
159
+ if (item.mediaType.startsWith("image/")) {
160
+ contentParts.push({
161
+ type: "input_image",
162
+ image_url: `data:${item.mediaType};base64,${item.data}`
163
+ });
164
+ } else {
165
+ contentParts.push({
166
+ type: "input_file",
167
+ filename: (_b = item.filename) != null ? _b : "data",
168
+ file_data: `data:${item.mediaType};base64,${item.data}`
169
+ });
170
+ }
157
171
  break;
158
172
  }
159
- case "file-data": {
160
- contentParts.push({
161
- type: "input_file",
162
- filename: (_b = item.filename) != null ? _b : "data",
163
- file_data: `data:${item.mediaType};base64,${item.data}`
164
- });
173
+ case "file-url": {
174
+ if (item.mediaType.startsWith("image/")) {
175
+ contentParts.push({
176
+ type: "input_image",
177
+ image_url: item.url
178
+ });
179
+ } else {
180
+ contentParts.push({
181
+ type: "input_file",
182
+ file_url: item.url
183
+ });
184
+ }
165
185
  break;
166
186
  }
167
187
  default: {
@@ -196,17 +216,16 @@ async function convertToOpenResponsesInput({
196
216
  }
197
217
 
198
218
  // src/responses/open-responses-api.ts
199
- var import_provider_utils2 = require("@ai-sdk/provider-utils");
200
- var import_v4 = require("zod/v4");
201
- var import_provider_utils3 = require("@ai-sdk/provider-utils");
202
- var openResponsesErrorSchema = (0, import_provider_utils2.lazySchema)(
203
- () => (0, import_provider_utils3.zodSchema)(
204
- import_v4.z.object({
205
- error: import_v4.z.object({
206
- message: import_v4.z.string(),
207
- type: import_v4.z.string(),
208
- param: import_v4.z.string(),
209
- code: import_v4.z.string()
219
+ import { lazySchema, zodSchema } from "@ai-sdk/provider-utils";
220
+ import { z } from "zod/v4";
221
+ var openResponsesErrorSchema = lazySchema(
222
+ () => zodSchema(
223
+ z.object({
224
+ error: z.object({
225
+ message: z.string(),
226
+ type: z.string(),
227
+ param: z.string(),
228
+ code: z.string()
210
229
  })
211
230
  })
212
231
  )
@@ -230,8 +249,26 @@ function mapOpenResponsesFinishReason({
230
249
  }
231
250
  }
232
251
 
252
+ // src/responses/open-responses-language-model-options.ts
253
+ import {
254
+ lazySchema as lazySchema2,
255
+ zodSchema as zodSchema2
256
+ } from "@ai-sdk/provider-utils";
257
+ import { z as z2 } from "zod/v4";
258
+ var openResponsesLanguageModelOptions = lazySchema2(
259
+ () => zodSchema2(
260
+ z2.object({
261
+ /**
262
+ * Controls reasoning summary output from the model.
263
+ * Valid values: 'concise', 'detailed', 'auto'.
264
+ */
265
+ reasoningSummary: z2.enum(["concise", "detailed", "auto"]).nullish()
266
+ })
267
+ )
268
+ );
269
+
233
270
  // src/responses/open-responses-language-model.ts
234
- var OpenResponsesLanguageModel = class {
271
+ var OpenResponsesLanguageModel = class _OpenResponsesLanguageModel {
235
272
  constructor(modelId, config) {
236
273
  this.specificationVersion = "v4";
237
274
  this.supportedUrls = {
@@ -240,6 +277,15 @@ var OpenResponsesLanguageModel = class {
240
277
  this.modelId = modelId;
241
278
  this.config = config;
242
279
  }
280
+ static [WORKFLOW_SERIALIZE](model) {
281
+ return serializeModelOptions({
282
+ modelId: model.modelId,
283
+ config: model.config
284
+ });
285
+ }
286
+ static [WORKFLOW_DESERIALIZE](options) {
287
+ return new _OpenResponsesLanguageModel(options.modelId, options.config);
288
+ }
243
289
  get provider() {
244
290
  return this.config.provider;
245
291
  }
@@ -295,7 +341,12 @@ var OpenResponsesLanguageModel = class {
295
341
  strict: true
296
342
  } : {}
297
343
  } : void 0;
298
- const resolvedReasoningEffort = (0, import_provider_utils4.isCustomReasoning)(reasoning) ? reasoning === "none" ? "none" : (0, import_provider_utils4.mapReasoningToProviderEffort)({
344
+ const openResponsesOptions = await parseProviderOptions({
345
+ provider: this.config.providerOptionsName,
346
+ providerOptions,
347
+ schema: openResponsesLanguageModelOptions
348
+ });
349
+ const resolvedReasoningEffort = isCustomReasoning(reasoning) ? reasoning === "none" ? "none" : mapReasoningToProviderEffort({
299
350
  reasoning,
300
351
  effortMap: {
301
352
  minimal: "low",
@@ -316,7 +367,14 @@ var OpenResponsesLanguageModel = class {
316
367
  top_p: topP,
317
368
  presence_penalty: presencePenalty,
318
369
  frequency_penalty: frequencyPenalty,
319
- reasoning: resolvedReasoningEffort != null ? { effort: resolvedReasoningEffort } : void 0,
370
+ reasoning: resolvedReasoningEffort != null || (openResponsesOptions == null ? void 0 : openResponsesOptions.reasoningSummary) != null ? {
371
+ ...resolvedReasoningEffort != null && {
372
+ effort: resolvedReasoningEffort
373
+ },
374
+ ...(openResponsesOptions == null ? void 0 : openResponsesOptions.reasoningSummary) != null && {
375
+ summary: openResponsesOptions.reasoningSummary
376
+ }
377
+ } : void 0,
320
378
  tools: (functionTools == null ? void 0 : functionTools.length) ? functionTools : void 0,
321
379
  tool_choice: convertedToolChoice,
322
380
  ...textFormat != null && { text: { format: textFormat } }
@@ -325,23 +383,23 @@ var OpenResponsesLanguageModel = class {
325
383
  };
326
384
  }
327
385
  async doGenerate(options) {
328
- var _a, _b, _c, _d, _e, _f;
386
+ var _a, _b, _c, _d, _e, _f, _g, _h;
329
387
  const { body, warnings } = await this.getArgs(options);
330
388
  const {
331
389
  responseHeaders,
332
390
  value: response,
333
391
  rawValue: rawResponse
334
- } = await (0, import_provider_utils4.postJsonToApi)({
392
+ } = await postJsonToApi({
335
393
  url: this.config.url,
336
- headers: (0, import_provider_utils4.combineHeaders)(this.config.headers(), options.headers),
394
+ headers: combineHeaders((_b = (_a = this.config).headers) == null ? void 0 : _b.call(_a), options.headers),
337
395
  body,
338
- failedResponseHandler: (0, import_provider_utils4.createJsonErrorResponseHandler)({
396
+ failedResponseHandler: createJsonErrorResponseHandler({
339
397
  errorSchema: openResponsesErrorSchema,
340
398
  errorToMessage: (error) => error.error.message
341
399
  }),
342
- successfulResponseHandler: (0, import_provider_utils4.createJsonResponseHandler)(
400
+ successfulResponseHandler: createJsonResponseHandler(
343
401
  // do not validate the response body, only apply types to the response body
344
- (0, import_provider_utils4.jsonSchema)(() => {
402
+ jsonSchema(() => {
345
403
  throw new Error("json schema not implemented");
346
404
  })
347
405
  ),
@@ -354,7 +412,7 @@ var OpenResponsesLanguageModel = class {
354
412
  switch (part.type) {
355
413
  // TODO AI SDK 7 adjust reasoning in the specification to better support the reasoning structure from open responses.
356
414
  case "reasoning": {
357
- for (const contentPart of (_a = part.content) != null ? _a : []) {
415
+ for (const contentPart of (_c = part.content) != null ? _c : []) {
358
416
  content.push({
359
417
  type: "reasoning",
360
418
  text: contentPart.text
@@ -385,17 +443,17 @@ var OpenResponsesLanguageModel = class {
385
443
  }
386
444
  const usage = response.usage;
387
445
  const inputTokens = usage == null ? void 0 : usage.input_tokens;
388
- const cachedInputTokens = (_b = usage == null ? void 0 : usage.input_tokens_details) == null ? void 0 : _b.cached_tokens;
446
+ const cachedInputTokens = (_d = usage == null ? void 0 : usage.input_tokens_details) == null ? void 0 : _d.cached_tokens;
389
447
  const outputTokens = usage == null ? void 0 : usage.output_tokens;
390
- const reasoningTokens = (_c = usage == null ? void 0 : usage.output_tokens_details) == null ? void 0 : _c.reasoning_tokens;
448
+ const reasoningTokens = (_e = usage == null ? void 0 : usage.output_tokens_details) == null ? void 0 : _e.reasoning_tokens;
391
449
  return {
392
450
  content,
393
451
  finishReason: {
394
452
  unified: mapOpenResponsesFinishReason({
395
- finishReason: (_d = response.incomplete_details) == null ? void 0 : _d.reason,
453
+ finishReason: (_f = response.incomplete_details) == null ? void 0 : _f.reason,
396
454
  hasToolCalls
397
455
  }),
398
- raw: (_f = (_e = response.incomplete_details) == null ? void 0 : _e.reason) != null ? _f : void 0
456
+ raw: (_h = (_g = response.incomplete_details) == null ? void 0 : _g.reason) != null ? _h : void 0
399
457
  },
400
458
  usage: {
401
459
  inputTokens: {
@@ -424,20 +482,21 @@ var OpenResponsesLanguageModel = class {
424
482
  };
425
483
  }
426
484
  async doStream(options) {
485
+ var _a, _b;
427
486
  const { body, warnings } = await this.getArgs(options);
428
- const { responseHeaders, value: response } = await (0, import_provider_utils4.postJsonToApi)({
487
+ const { responseHeaders, value: response } = await postJsonToApi({
429
488
  url: this.config.url,
430
- headers: (0, import_provider_utils4.combineHeaders)(this.config.headers(), options.headers),
489
+ headers: combineHeaders((_b = (_a = this.config).headers) == null ? void 0 : _b.call(_a), options.headers),
431
490
  body: {
432
491
  ...body,
433
492
  stream: true
434
493
  },
435
- failedResponseHandler: (0, import_provider_utils4.createJsonErrorResponseHandler)({
494
+ failedResponseHandler: createJsonErrorResponseHandler({
436
495
  errorSchema: openResponsesErrorSchema,
437
496
  errorToMessage: (error) => error.error.message
438
497
  }),
439
498
  // TODO consider validation
440
- successfulResponseHandler: (0, import_provider_utils4.createEventSourceResponseHandler)(import_v42.z.any()),
499
+ successfulResponseHandler: createEventSourceResponseHandler(z3.any()),
441
500
  abortSignal: options.abortSignal,
442
501
  fetch: this.config.fetch
443
502
  });
@@ -455,14 +514,14 @@ var OpenResponsesLanguageModel = class {
455
514
  }
456
515
  };
457
516
  const updateUsage = (responseUsage) => {
458
- var _a, _b;
517
+ var _a2, _b2;
459
518
  if (!responseUsage) {
460
519
  return;
461
520
  }
462
521
  const inputTokens = responseUsage.input_tokens;
463
- const cachedInputTokens = (_a = responseUsage.input_tokens_details) == null ? void 0 : _a.cached_tokens;
522
+ const cachedInputTokens = (_a2 = responseUsage.input_tokens_details) == null ? void 0 : _a2.cached_tokens;
464
523
  const outputTokens = responseUsage.output_tokens;
465
- const reasoningTokens = (_b = responseUsage.output_tokens_details) == null ? void 0 : _b.reasoning_tokens;
524
+ const reasoningTokens = (_b2 = responseUsage.output_tokens_details) == null ? void 0 : _b2.reasoning_tokens;
466
525
  usage.inputTokens = {
467
526
  total: inputTokens,
468
527
  noCache: (inputTokens != null ? inputTokens : 0) - (cachedInputTokens != null ? cachedInputTokens : 0),
@@ -490,7 +549,7 @@ var OpenResponsesLanguageModel = class {
490
549
  controller.enqueue({ type: "stream-start", warnings });
491
550
  },
492
551
  transform(parseResult, controller) {
493
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
552
+ var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j;
494
553
  if (options.includeRawChunks) {
495
554
  controller.enqueue({
496
555
  type: "raw",
@@ -510,8 +569,8 @@ var OpenResponsesLanguageModel = class {
510
569
  };
511
570
  } else if (chunk.type === "response.function_call_arguments.delta") {
512
571
  const functionCallChunk = chunk;
513
- const toolCall = (_a = toolCallsByItemId[functionCallChunk.item_id]) != null ? _a : toolCallsByItemId[functionCallChunk.item_id] = {};
514
- toolCall.arguments = ((_b = toolCall.arguments) != null ? _b : "") + functionCallChunk.delta;
572
+ const toolCall = (_a2 = toolCallsByItemId[functionCallChunk.item_id]) != null ? _a2 : toolCallsByItemId[functionCallChunk.item_id] = {};
573
+ toolCall.arguments = ((_b2 = toolCall.arguments) != null ? _b2 : "") + functionCallChunk.delta;
515
574
  } else if (chunk.type === "response.function_call_arguments.done") {
516
575
  const functionCallChunk = chunk;
517
576
  const toolCall = (_c = toolCallsByItemId[functionCallChunk.item_id]) != null ? _c : toolCallsByItemId[functionCallChunk.item_id] = {};
@@ -595,7 +654,7 @@ var OpenResponsesLanguageModel = class {
595
654
  // src/open-responses-provider.ts
596
655
  function createOpenResponses(options) {
597
656
  const providerName = options.name;
598
- const getHeaders = () => (0, import_provider_utils5.withUserAgentSuffix)(
657
+ const getHeaders = () => withUserAgentSuffix(
599
658
  {
600
659
  ...options.apiKey ? {
601
660
  Authorization: `Bearer ${options.apiKey}`
@@ -607,10 +666,11 @@ function createOpenResponses(options) {
607
666
  const createResponsesModel = (modelId) => {
608
667
  return new OpenResponsesLanguageModel(modelId, {
609
668
  provider: `${providerName}.responses`,
669
+ providerOptionsName: providerName,
610
670
  headers: getHeaders,
611
671
  url: options.url,
612
672
  fetch: options.fetch,
613
- generateId: () => (0, import_provider_utils5.generateId)()
673
+ generateId: () => generateId()
614
674
  });
615
675
  };
616
676
  const createLanguageModel = (modelId) => {
@@ -627,16 +687,15 @@ function createOpenResponses(options) {
627
687
  provider.specificationVersion = "v4";
628
688
  provider.languageModel = createLanguageModel;
629
689
  provider.embeddingModel = (modelId) => {
630
- throw new import_provider.NoSuchModelError({ modelId, modelType: "embeddingModel" });
690
+ throw new NoSuchModelError({ modelId, modelType: "embeddingModel" });
631
691
  };
632
692
  provider.imageModel = (modelId) => {
633
- throw new import_provider.NoSuchModelError({ modelId, modelType: "imageModel" });
693
+ throw new NoSuchModelError({ modelId, modelType: "imageModel" });
634
694
  };
635
695
  return provider;
636
696
  }
637
- // Annotate the CommonJS export names for ESM import in node:
638
- 0 && (module.exports = {
697
+ export {
639
698
  VERSION,
640
699
  createOpenResponses
641
- });
700
+ };
642
701
  //# sourceMappingURL=index.js.map