@ai-sdk/openai 4.0.0-beta.30 → 4.0.0-beta.32

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
@@ -18,7 +18,10 @@ import {
18
18
  isCustomReasoning,
19
19
  isParsableJson,
20
20
  parseProviderOptions,
21
- postJsonToApi
21
+ postJsonToApi,
22
+ serializeModelOptions,
23
+ WORKFLOW_DESERIALIZE,
24
+ WORKFLOW_SERIALIZE
22
25
  } from "@ai-sdk/provider-utils";
23
26
 
24
27
  // src/openai-error.ts
@@ -104,6 +107,9 @@ import {
104
107
  isProviderReference,
105
108
  resolveProviderReference
106
109
  } from "@ai-sdk/provider-utils";
110
+ function serializeToolCallArguments(input) {
111
+ return JSON.stringify(input === void 0 ? {} : input);
112
+ }
107
113
  function convertToOpenAIChatMessages({
108
114
  prompt,
109
115
  systemMessageMode = "system"
@@ -244,7 +250,7 @@ function convertToOpenAIChatMessages({
244
250
  type: "function",
245
251
  function: {
246
252
  name: part.toolName,
247
- arguments: JSON.stringify(part.input)
253
+ arguments: serializeToolCallArguments(part.input)
248
254
  }
249
255
  });
250
256
  break;
@@ -652,7 +658,7 @@ function prepareChatTools({
652
658
  }
653
659
 
654
660
  // src/chat/openai-chat-language-model.ts
655
- var OpenAIChatLanguageModel = class {
661
+ var OpenAIChatLanguageModel = class _OpenAIChatLanguageModel {
656
662
  constructor(modelId, config) {
657
663
  this.specificationVersion = "v4";
658
664
  this.supportedUrls = {
@@ -661,6 +667,15 @@ var OpenAIChatLanguageModel = class {
661
667
  this.modelId = modelId;
662
668
  this.config = config;
663
669
  }
670
+ static [WORKFLOW_SERIALIZE](model) {
671
+ return serializeModelOptions({
672
+ modelId: model.modelId,
673
+ config: model.config
674
+ });
675
+ }
676
+ static [WORKFLOW_DESERIALIZE](options) {
677
+ return new _OpenAIChatLanguageModel(options.modelId, options.config);
678
+ }
664
679
  get provider() {
665
680
  return this.config.provider;
666
681
  }
@@ -848,7 +863,7 @@ var OpenAIChatLanguageModel = class {
848
863
  };
849
864
  }
850
865
  async doGenerate(options) {
851
- var _a, _b, _c, _d, _e, _f;
866
+ var _a, _b, _c, _d, _e, _f, _g, _h;
852
867
  const { args: body, warnings } = await this.getArgs(options);
853
868
  const {
854
869
  responseHeaders,
@@ -859,7 +874,7 @@ var OpenAIChatLanguageModel = class {
859
874
  path: "/chat/completions",
860
875
  modelId: this.modelId
861
876
  }),
862
- headers: combineHeaders(this.config.headers(), options.headers),
877
+ headers: combineHeaders((_b = (_a = this.config).headers) == null ? void 0 : _b.call(_a), options.headers),
863
878
  body,
864
879
  failedResponseHandler: openaiFailedResponseHandler,
865
880
  successfulResponseHandler: createJsonResponseHandler(
@@ -874,15 +889,15 @@ var OpenAIChatLanguageModel = class {
874
889
  if (text != null && text.length > 0) {
875
890
  content.push({ type: "text", text });
876
891
  }
877
- for (const toolCall of (_a = choice.message.tool_calls) != null ? _a : []) {
892
+ for (const toolCall of (_c = choice.message.tool_calls) != null ? _c : []) {
878
893
  content.push({
879
894
  type: "tool-call",
880
- toolCallId: (_b = toolCall.id) != null ? _b : generateId(),
895
+ toolCallId: (_d = toolCall.id) != null ? _d : generateId(),
881
896
  toolName: toolCall.function.name,
882
897
  input: toolCall.function.arguments
883
898
  });
884
899
  }
885
- for (const annotation of (_c = choice.message.annotations) != null ? _c : []) {
900
+ for (const annotation of (_e = choice.message.annotations) != null ? _e : []) {
886
901
  content.push({
887
902
  type: "source",
888
903
  sourceType: "url",
@@ -891,7 +906,7 @@ var OpenAIChatLanguageModel = class {
891
906
  title: annotation.url_citation.title
892
907
  });
893
908
  }
894
- const completionTokenDetails = (_d = response.usage) == null ? void 0 : _d.completion_tokens_details;
909
+ const completionTokenDetails = (_f = response.usage) == null ? void 0 : _f.completion_tokens_details;
895
910
  const providerMetadata = { openai: {} };
896
911
  if ((completionTokenDetails == null ? void 0 : completionTokenDetails.accepted_prediction_tokens) != null) {
897
912
  providerMetadata.openai.acceptedPredictionTokens = completionTokenDetails == null ? void 0 : completionTokenDetails.accepted_prediction_tokens;
@@ -899,14 +914,14 @@ var OpenAIChatLanguageModel = class {
899
914
  if ((completionTokenDetails == null ? void 0 : completionTokenDetails.rejected_prediction_tokens) != null) {
900
915
  providerMetadata.openai.rejectedPredictionTokens = completionTokenDetails == null ? void 0 : completionTokenDetails.rejected_prediction_tokens;
901
916
  }
902
- if (((_e = choice.logprobs) == null ? void 0 : _e.content) != null) {
917
+ if (((_g = choice.logprobs) == null ? void 0 : _g.content) != null) {
903
918
  providerMetadata.openai.logprobs = choice.logprobs.content;
904
919
  }
905
920
  return {
906
921
  content,
907
922
  finishReason: {
908
923
  unified: mapOpenAIFinishReason(choice.finish_reason),
909
- raw: (_f = choice.finish_reason) != null ? _f : void 0
924
+ raw: (_h = choice.finish_reason) != null ? _h : void 0
910
925
  },
911
926
  usage: convertOpenAIChatUsage(response.usage),
912
927
  request: { body },
@@ -920,6 +935,7 @@ var OpenAIChatLanguageModel = class {
920
935
  };
921
936
  }
922
937
  async doStream(options) {
938
+ var _a, _b;
923
939
  const { args, warnings } = await this.getArgs(options);
924
940
  const body = {
925
941
  ...args,
@@ -933,7 +949,7 @@ var OpenAIChatLanguageModel = class {
933
949
  path: "/chat/completions",
934
950
  modelId: this.modelId
935
951
  }),
936
- headers: combineHeaders(this.config.headers(), options.headers),
952
+ headers: combineHeaders((_b = (_a = this.config).headers) == null ? void 0 : _b.call(_a), options.headers),
937
953
  body,
938
954
  failedResponseHandler: openaiFailedResponseHandler,
939
955
  successfulResponseHandler: createEventSourceResponseHandler(
@@ -958,7 +974,7 @@ var OpenAIChatLanguageModel = class {
958
974
  controller.enqueue({ type: "stream-start", warnings });
959
975
  },
960
976
  transform(chunk, controller) {
961
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
977
+ var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
962
978
  if (options.includeRawChunks) {
963
979
  controller.enqueue({ type: "raw", rawValue: chunk.rawValue });
964
980
  }
@@ -985,8 +1001,8 @@ var OpenAIChatLanguageModel = class {
985
1001
  }
986
1002
  if (value.usage != null) {
987
1003
  usage = value.usage;
988
- if (((_a = value.usage.completion_tokens_details) == null ? void 0 : _a.accepted_prediction_tokens) != null) {
989
- providerMetadata.openai.acceptedPredictionTokens = (_b = value.usage.completion_tokens_details) == null ? void 0 : _b.accepted_prediction_tokens;
1004
+ if (((_a2 = value.usage.completion_tokens_details) == null ? void 0 : _a2.accepted_prediction_tokens) != null) {
1005
+ providerMetadata.openai.acceptedPredictionTokens = (_b2 = value.usage.completion_tokens_details) == null ? void 0 : _b2.accepted_prediction_tokens;
990
1006
  }
991
1007
  if (((_c = value.usage.completion_tokens_details) == null ? void 0 : _c.rejected_prediction_tokens) != null) {
992
1008
  providerMetadata.openai.rejectedPredictionTokens = (_d = value.usage.completion_tokens_details) == null ? void 0 : _d.rejected_prediction_tokens;
@@ -1142,7 +1158,10 @@ import {
1142
1158
  createEventSourceResponseHandler as createEventSourceResponseHandler2,
1143
1159
  createJsonResponseHandler as createJsonResponseHandler2,
1144
1160
  parseProviderOptions as parseProviderOptions2,
1145
- postJsonToApi as postJsonToApi2
1161
+ postJsonToApi as postJsonToApi2,
1162
+ serializeModelOptions as serializeModelOptions2,
1163
+ WORKFLOW_DESERIALIZE as WORKFLOW_DESERIALIZE2,
1164
+ WORKFLOW_SERIALIZE as WORKFLOW_SERIALIZE2
1146
1165
  } from "@ai-sdk/provider-utils";
1147
1166
 
1148
1167
  // src/completion/convert-openai-completion-usage.ts
@@ -1397,7 +1416,7 @@ var openaiLanguageModelCompletionOptions = lazySchema4(
1397
1416
  );
1398
1417
 
1399
1418
  // src/completion/openai-completion-language-model.ts
1400
- var OpenAICompletionLanguageModel = class {
1419
+ var OpenAICompletionLanguageModel = class _OpenAICompletionLanguageModel {
1401
1420
  constructor(modelId, config) {
1402
1421
  this.specificationVersion = "v4";
1403
1422
  this.supportedUrls = {
@@ -1409,6 +1428,15 @@ var OpenAICompletionLanguageModel = class {
1409
1428
  get providerOptionsName() {
1410
1429
  return this.config.provider.split(".")[0].trim();
1411
1430
  }
1431
+ static [WORKFLOW_SERIALIZE2](model) {
1432
+ return serializeModelOptions2({
1433
+ modelId: model.modelId,
1434
+ config: model.config
1435
+ });
1436
+ }
1437
+ static [WORKFLOW_DESERIALIZE2](options) {
1438
+ return new _OpenAICompletionLanguageModel(options.modelId, options.config);
1439
+ }
1412
1440
  get provider() {
1413
1441
  return this.config.provider;
1414
1442
  }
@@ -1484,7 +1512,7 @@ var OpenAICompletionLanguageModel = class {
1484
1512
  };
1485
1513
  }
1486
1514
  async doGenerate(options) {
1487
- var _a;
1515
+ var _a, _b, _c;
1488
1516
  const { args, warnings } = await this.getArgs(options);
1489
1517
  const {
1490
1518
  responseHeaders,
@@ -1495,7 +1523,7 @@ var OpenAICompletionLanguageModel = class {
1495
1523
  path: "/completions",
1496
1524
  modelId: this.modelId
1497
1525
  }),
1498
- headers: combineHeaders2(this.config.headers(), options.headers),
1526
+ headers: combineHeaders2((_b = (_a = this.config).headers) == null ? void 0 : _b.call(_a), options.headers),
1499
1527
  body: args,
1500
1528
  failedResponseHandler: openaiFailedResponseHandler,
1501
1529
  successfulResponseHandler: createJsonResponseHandler2(
@@ -1514,7 +1542,7 @@ var OpenAICompletionLanguageModel = class {
1514
1542
  usage: convertOpenAICompletionUsage(response.usage),
1515
1543
  finishReason: {
1516
1544
  unified: mapOpenAIFinishReason2(choice.finish_reason),
1517
- raw: (_a = choice.finish_reason) != null ? _a : void 0
1545
+ raw: (_c = choice.finish_reason) != null ? _c : void 0
1518
1546
  },
1519
1547
  request: { body: args },
1520
1548
  response: {
@@ -1527,6 +1555,7 @@ var OpenAICompletionLanguageModel = class {
1527
1555
  };
1528
1556
  }
1529
1557
  async doStream(options) {
1558
+ var _a, _b;
1530
1559
  const { args, warnings } = await this.getArgs(options);
1531
1560
  const body = {
1532
1561
  ...args,
@@ -1540,7 +1569,7 @@ var OpenAICompletionLanguageModel = class {
1540
1569
  path: "/completions",
1541
1570
  modelId: this.modelId
1542
1571
  }),
1543
- headers: combineHeaders2(this.config.headers(), options.headers),
1572
+ headers: combineHeaders2((_b = (_a = this.config).headers) == null ? void 0 : _b.call(_a), options.headers),
1544
1573
  body,
1545
1574
  failedResponseHandler: openaiFailedResponseHandler,
1546
1575
  successfulResponseHandler: createEventSourceResponseHandler2(
@@ -1633,7 +1662,10 @@ import {
1633
1662
  combineHeaders as combineHeaders3,
1634
1663
  createJsonResponseHandler as createJsonResponseHandler3,
1635
1664
  parseProviderOptions as parseProviderOptions3,
1636
- postJsonToApi as postJsonToApi3
1665
+ postJsonToApi as postJsonToApi3,
1666
+ serializeModelOptions as serializeModelOptions3,
1667
+ WORKFLOW_DESERIALIZE as WORKFLOW_DESERIALIZE3,
1668
+ WORKFLOW_SERIALIZE as WORKFLOW_SERIALIZE3
1637
1669
  } from "@ai-sdk/provider-utils";
1638
1670
 
1639
1671
  // src/embedding/openai-embedding-options.ts
@@ -1669,7 +1701,7 @@ var openaiTextEmbeddingResponseSchema = lazySchema6(
1669
1701
  );
1670
1702
 
1671
1703
  // src/embedding/openai-embedding-model.ts
1672
- var OpenAIEmbeddingModel = class {
1704
+ var OpenAIEmbeddingModel = class _OpenAIEmbeddingModel {
1673
1705
  constructor(modelId, config) {
1674
1706
  this.specificationVersion = "v4";
1675
1707
  this.maxEmbeddingsPerCall = 2048;
@@ -1677,6 +1709,15 @@ var OpenAIEmbeddingModel = class {
1677
1709
  this.modelId = modelId;
1678
1710
  this.config = config;
1679
1711
  }
1712
+ static [WORKFLOW_SERIALIZE3](model) {
1713
+ return serializeModelOptions3({
1714
+ modelId: model.modelId,
1715
+ config: model.config
1716
+ });
1717
+ }
1718
+ static [WORKFLOW_DESERIALIZE3](options) {
1719
+ return new _OpenAIEmbeddingModel(options.modelId, options.config);
1720
+ }
1680
1721
  get provider() {
1681
1722
  return this.config.provider;
1682
1723
  }
@@ -1686,7 +1727,7 @@ var OpenAIEmbeddingModel = class {
1686
1727
  abortSignal,
1687
1728
  providerOptions
1688
1729
  }) {
1689
- var _a;
1730
+ var _a, _b, _c;
1690
1731
  if (values.length > this.maxEmbeddingsPerCall) {
1691
1732
  throw new TooManyEmbeddingValuesForCallError({
1692
1733
  provider: this.provider,
@@ -1709,7 +1750,7 @@ var OpenAIEmbeddingModel = class {
1709
1750
  path: "/embeddings",
1710
1751
  modelId: this.modelId
1711
1752
  }),
1712
- headers: combineHeaders3(this.config.headers(), headers),
1753
+ headers: combineHeaders3((_c = (_b = this.config).headers) == null ? void 0 : _c.call(_b), headers),
1713
1754
  body: {
1714
1755
  model: this.modelId,
1715
1756
  input: values,
@@ -1849,7 +1890,10 @@ import {
1849
1890
  createJsonResponseHandler as createJsonResponseHandler5,
1850
1891
  downloadBlob,
1851
1892
  postFormDataToApi as postFormDataToApi2,
1852
- postJsonToApi as postJsonToApi4
1893
+ postJsonToApi as postJsonToApi4,
1894
+ serializeModelOptions as serializeModelOptions4,
1895
+ WORKFLOW_DESERIALIZE as WORKFLOW_DESERIALIZE4,
1896
+ WORKFLOW_SERIALIZE as WORKFLOW_SERIALIZE4
1853
1897
  } from "@ai-sdk/provider-utils";
1854
1898
 
1855
1899
  // src/image/openai-image-api.ts
@@ -1904,12 +1948,21 @@ function hasDefaultResponseFormat(modelId) {
1904
1948
  }
1905
1949
 
1906
1950
  // src/image/openai-image-model.ts
1907
- var OpenAIImageModel = class {
1951
+ var OpenAIImageModel = class _OpenAIImageModel {
1908
1952
  constructor(modelId, config) {
1909
1953
  this.modelId = modelId;
1910
1954
  this.config = config;
1911
1955
  this.specificationVersion = "v4";
1912
1956
  }
1957
+ static [WORKFLOW_SERIALIZE4](model) {
1958
+ return serializeModelOptions4({
1959
+ modelId: model.modelId,
1960
+ config: model.config
1961
+ });
1962
+ }
1963
+ static [WORKFLOW_DESERIALIZE4](options) {
1964
+ return new _OpenAIImageModel(options.modelId, options.config);
1965
+ }
1913
1966
  get maxImagesPerCall() {
1914
1967
  var _a;
1915
1968
  return (_a = modelMaxImagesPerCall[this.modelId]) != null ? _a : 1;
@@ -1929,7 +1982,7 @@ var OpenAIImageModel = class {
1929
1982
  headers,
1930
1983
  abortSignal
1931
1984
  }) {
1932
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
1985
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o;
1933
1986
  const warnings = [];
1934
1987
  if (aspectRatio != null) {
1935
1988
  warnings.push({
@@ -1948,7 +2001,7 @@ var OpenAIImageModel = class {
1948
2001
  path: "/images/edits",
1949
2002
  modelId: this.modelId
1950
2003
  }),
1951
- headers: combineHeaders5(this.config.headers(), headers),
2004
+ headers: combineHeaders5((_e = (_d = this.config).headers) == null ? void 0 : _e.call(_d), headers),
1952
2005
  formData: convertToFormData({
1953
2006
  model: this.modelId,
1954
2007
  prompt,
@@ -1969,7 +2022,7 @@ var OpenAIImageModel = class {
1969
2022
  mask: mask != null ? await fileToBlob(mask) : void 0,
1970
2023
  n,
1971
2024
  size,
1972
- ...(_d = providerOptions.openai) != null ? _d : {}
2025
+ ...(_f = providerOptions.openai) != null ? _f : {}
1973
2026
  }),
1974
2027
  failedResponseHandler: openaiFailedResponseHandler,
1975
2028
  successfulResponseHandler: createJsonResponseHandler5(
@@ -1982,9 +2035,9 @@ var OpenAIImageModel = class {
1982
2035
  images: response2.data.map((item) => item.b64_json),
1983
2036
  warnings,
1984
2037
  usage: response2.usage != null ? {
1985
- inputTokens: (_e = response2.usage.input_tokens) != null ? _e : void 0,
1986
- outputTokens: (_f = response2.usage.output_tokens) != null ? _f : void 0,
1987
- totalTokens: (_g = response2.usage.total_tokens) != null ? _g : void 0
2038
+ inputTokens: (_g = response2.usage.input_tokens) != null ? _g : void 0,
2039
+ outputTokens: (_h = response2.usage.output_tokens) != null ? _h : void 0,
2040
+ totalTokens: (_i = response2.usage.total_tokens) != null ? _i : void 0
1988
2041
  } : void 0,
1989
2042
  response: {
1990
2043
  timestamp: currentDate,
@@ -2018,13 +2071,13 @@ var OpenAIImageModel = class {
2018
2071
  path: "/images/generations",
2019
2072
  modelId: this.modelId
2020
2073
  }),
2021
- headers: combineHeaders5(this.config.headers(), headers),
2074
+ headers: combineHeaders5((_k = (_j = this.config).headers) == null ? void 0 : _k.call(_j), headers),
2022
2075
  body: {
2023
2076
  model: this.modelId,
2024
2077
  prompt,
2025
2078
  n,
2026
2079
  size,
2027
- ...(_h = providerOptions.openai) != null ? _h : {},
2080
+ ...(_l = providerOptions.openai) != null ? _l : {},
2028
2081
  ...!hasDefaultResponseFormat(this.modelId) ? { response_format: "b64_json" } : {}
2029
2082
  },
2030
2083
  failedResponseHandler: openaiFailedResponseHandler,
@@ -2038,9 +2091,9 @@ var OpenAIImageModel = class {
2038
2091
  images: response.data.map((item) => item.b64_json),
2039
2092
  warnings,
2040
2093
  usage: response.usage != null ? {
2041
- inputTokens: (_i = response.usage.input_tokens) != null ? _i : void 0,
2042
- outputTokens: (_j = response.usage.output_tokens) != null ? _j : void 0,
2043
- totalTokens: (_k = response.usage.total_tokens) != null ? _k : void 0
2094
+ inputTokens: (_m = response.usage.input_tokens) != null ? _m : void 0,
2095
+ outputTokens: (_n = response.usage.output_tokens) != null ? _n : void 0,
2096
+ totalTokens: (_o = response.usage.total_tokens) != null ? _o : void 0
2044
2097
  } : void 0,
2045
2098
  response: {
2046
2099
  timestamp: currentDate,
@@ -2787,7 +2840,10 @@ import {
2787
2840
  generateId as generateId2,
2788
2841
  isCustomReasoning as isCustomReasoning2,
2789
2842
  parseProviderOptions as parseProviderOptions6,
2790
- postJsonToApi as postJsonToApi5
2843
+ postJsonToApi as postJsonToApi5,
2844
+ serializeModelOptions as serializeModelOptions5,
2845
+ WORKFLOW_DESERIALIZE as WORKFLOW_DESERIALIZE5,
2846
+ WORKFLOW_SERIALIZE as WORKFLOW_SERIALIZE5
2791
2847
  } from "@ai-sdk/provider-utils";
2792
2848
 
2793
2849
  // src/responses/convert-openai-responses-usage.ts
@@ -2843,6 +2899,9 @@ import {
2843
2899
  validateTypes
2844
2900
  } from "@ai-sdk/provider-utils";
2845
2901
  import { z as z22 } from "zod/v4";
2902
+ function serializeToolCallArguments2(input) {
2903
+ return JSON.stringify(input === void 0 ? {} : input);
2904
+ }
2846
2905
  function isFileId(data, prefixes) {
2847
2906
  if (!prefixes) return false;
2848
2907
  return prefixes.some((prefix) => data.startsWith(prefix));
@@ -3083,7 +3142,7 @@ async function convertToOpenAIResponsesInput({
3083
3142
  type: "function_call",
3084
3143
  call_id: part.toolCallId,
3085
3144
  name: resolvedToolName,
3086
- arguments: JSON.stringify(part.input),
3145
+ arguments: serializeToolCallArguments2(part.input),
3087
3146
  id
3088
3147
  });
3089
3148
  break;
@@ -3359,23 +3418,25 @@ async function convertToOpenAIResponsesInput({
3359
3418
  switch (item.type) {
3360
3419
  case "text":
3361
3420
  return { type: "input_text", text: item.text };
3362
- case "image-data":
3363
- return {
3364
- type: "input_image",
3365
- image_url: `data:${item.mediaType};base64,${item.data}`
3366
- };
3367
- case "image-url":
3368
- return {
3369
- type: "input_image",
3370
- image_url: item.url
3371
- };
3372
3421
  case "file-data":
3422
+ if (item.mediaType.startsWith("image/")) {
3423
+ return {
3424
+ type: "input_image",
3425
+ image_url: `data:${item.mediaType};base64,${item.data}`
3426
+ };
3427
+ }
3373
3428
  return {
3374
3429
  type: "input_file",
3375
3430
  filename: (_a2 = item.filename) != null ? _a2 : "data",
3376
3431
  file_data: `data:${item.mediaType};base64,${item.data}`
3377
3432
  };
3378
3433
  case "file-url":
3434
+ if (item.mediaType.startsWith("image/")) {
3435
+ return {
3436
+ type: "input_image",
3437
+ image_url: item.url
3438
+ };
3439
+ }
3379
3440
  return {
3380
3441
  type: "input_file",
3381
3442
  file_url: item.url
@@ -3419,19 +3480,13 @@ async function convertToOpenAIResponsesInput({
3419
3480
  case "text": {
3420
3481
  return { type: "input_text", text: item.text };
3421
3482
  }
3422
- case "image-data": {
3423
- return {
3424
- type: "input_image",
3425
- image_url: `data:${item.mediaType};base64,${item.data}`
3426
- };
3427
- }
3428
- case "image-url": {
3429
- return {
3430
- type: "input_image",
3431
- image_url: item.url
3432
- };
3433
- }
3434
3483
  case "file-data": {
3484
+ if (item.mediaType.startsWith("image/")) {
3485
+ return {
3486
+ type: "input_image",
3487
+ image_url: `data:${item.mediaType};base64,${item.data}`
3488
+ };
3489
+ }
3435
3490
  return {
3436
3491
  type: "input_file",
3437
3492
  filename: (_a2 = item.filename) != null ? _a2 : "data",
@@ -3439,6 +3494,12 @@ async function convertToOpenAIResponsesInput({
3439
3494
  };
3440
3495
  }
3441
3496
  case "file-url": {
3497
+ if (item.mediaType.startsWith("image/")) {
3498
+ return {
3499
+ type: "input_image",
3500
+ image_url: item.url
3501
+ };
3502
+ }
3442
3503
  return {
3443
3504
  type: "input_file",
3444
3505
  file_url: item.url
@@ -4895,7 +4956,7 @@ function extractApprovalRequestIdToToolCallIdMapping(prompt) {
4895
4956
  }
4896
4957
  return mapping;
4897
4958
  }
4898
- var OpenAIResponsesLanguageModel = class {
4959
+ var OpenAIResponsesLanguageModel = class _OpenAIResponsesLanguageModel {
4899
4960
  constructor(modelId, config) {
4900
4961
  this.specificationVersion = "v4";
4901
4962
  this.supportedUrls = {
@@ -4905,6 +4966,15 @@ var OpenAIResponsesLanguageModel = class {
4905
4966
  this.modelId = modelId;
4906
4967
  this.config = config;
4907
4968
  }
4969
+ static [WORKFLOW_SERIALIZE5](model) {
4970
+ return serializeModelOptions5({
4971
+ modelId: model.modelId,
4972
+ config: model.config
4973
+ });
4974
+ }
4975
+ static [WORKFLOW_DESERIALIZE5](options) {
4976
+ return new _OpenAIResponsesLanguageModel(options.modelId, options.config);
4977
+ }
4908
4978
  get provider() {
4909
4979
  return this.config.provider;
4910
4980
  }
@@ -5160,7 +5230,7 @@ var OpenAIResponsesLanguageModel = class {
5160
5230
  };
5161
5231
  }
5162
5232
  async doGenerate(options) {
5163
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B;
5233
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D;
5164
5234
  const {
5165
5235
  args: body,
5166
5236
  warnings,
@@ -5180,7 +5250,7 @@ var OpenAIResponsesLanguageModel = class {
5180
5250
  rawValue: rawResponse
5181
5251
  } = await postJsonToApi5({
5182
5252
  url,
5183
- headers: combineHeaders6(this.config.headers(), options.headers),
5253
+ headers: combineHeaders6((_b = (_a = this.config).headers) == null ? void 0 : _b.call(_a), options.headers),
5184
5254
  body,
5185
5255
  failedResponseHandler: openaiFailedResponseHandler,
5186
5256
  successfulResponseHandler: createJsonResponseHandler6(
@@ -5217,7 +5287,7 @@ var OpenAIResponsesLanguageModel = class {
5217
5287
  providerMetadata: {
5218
5288
  [providerOptionsName]: {
5219
5289
  itemId: part.id,
5220
- reasoningEncryptedContent: (_a = part.encrypted_content) != null ? _a : null
5290
+ reasoningEncryptedContent: (_c = part.encrypted_content) != null ? _c : null
5221
5291
  }
5222
5292
  }
5223
5293
  });
@@ -5243,7 +5313,7 @@ var OpenAIResponsesLanguageModel = class {
5243
5313
  break;
5244
5314
  }
5245
5315
  case "tool_search_call": {
5246
- const toolCallId = (_b = part.call_id) != null ? _b : part.id;
5316
+ const toolCallId = (_d = part.call_id) != null ? _d : part.id;
5247
5317
  const isHosted = part.execution === "server";
5248
5318
  if (isHosted) {
5249
5319
  hostedToolSearchCallIds.push(toolCallId);
@@ -5266,7 +5336,7 @@ var OpenAIResponsesLanguageModel = class {
5266
5336
  break;
5267
5337
  }
5268
5338
  case "tool_search_output": {
5269
- const toolCallId = (_d = (_c = part.call_id) != null ? _c : hostedToolSearchCallIds.shift()) != null ? _d : part.id;
5339
+ const toolCallId = (_f = (_e = part.call_id) != null ? _e : hostedToolSearchCallIds.shift()) != null ? _f : part.id;
5270
5340
  content.push({
5271
5341
  type: "tool-result",
5272
5342
  toolCallId,
@@ -5337,7 +5407,7 @@ var OpenAIResponsesLanguageModel = class {
5337
5407
  }
5338
5408
  case "message": {
5339
5409
  for (const contentPart of part.content) {
5340
- if (((_f = (_e = options.providerOptions) == null ? void 0 : _e[providerOptionsName]) == null ? void 0 : _f.logprobs) && contentPart.logprobs) {
5410
+ if (((_h = (_g = options.providerOptions) == null ? void 0 : _g[providerOptionsName]) == null ? void 0 : _h.logprobs) && contentPart.logprobs) {
5341
5411
  logprobs.push(contentPart.logprobs);
5342
5412
  }
5343
5413
  const providerMetadata2 = {
@@ -5359,7 +5429,7 @@ var OpenAIResponsesLanguageModel = class {
5359
5429
  content.push({
5360
5430
  type: "source",
5361
5431
  sourceType: "url",
5362
- id: (_i = (_h = (_g = this.config).generateId) == null ? void 0 : _h.call(_g)) != null ? _i : generateId2(),
5432
+ id: (_k = (_j = (_i = this.config).generateId) == null ? void 0 : _j.call(_i)) != null ? _k : generateId2(),
5363
5433
  url: annotation.url,
5364
5434
  title: annotation.title
5365
5435
  });
@@ -5367,7 +5437,7 @@ var OpenAIResponsesLanguageModel = class {
5367
5437
  content.push({
5368
5438
  type: "source",
5369
5439
  sourceType: "document",
5370
- id: (_l = (_k = (_j = this.config).generateId) == null ? void 0 : _k.call(_j)) != null ? _l : generateId2(),
5440
+ id: (_n = (_m = (_l = this.config).generateId) == null ? void 0 : _m.call(_l)) != null ? _n : generateId2(),
5371
5441
  mediaType: "text/plain",
5372
5442
  title: annotation.filename,
5373
5443
  filename: annotation.filename,
@@ -5383,7 +5453,7 @@ var OpenAIResponsesLanguageModel = class {
5383
5453
  content.push({
5384
5454
  type: "source",
5385
5455
  sourceType: "document",
5386
- id: (_o = (_n = (_m = this.config).generateId) == null ? void 0 : _n.call(_m)) != null ? _o : generateId2(),
5456
+ id: (_q = (_p = (_o = this.config).generateId) == null ? void 0 : _p.call(_o)) != null ? _q : generateId2(),
5387
5457
  mediaType: "text/plain",
5388
5458
  title: annotation.filename,
5389
5459
  filename: annotation.filename,
@@ -5399,7 +5469,7 @@ var OpenAIResponsesLanguageModel = class {
5399
5469
  content.push({
5400
5470
  type: "source",
5401
5471
  sourceType: "document",
5402
- id: (_r = (_q = (_p = this.config).generateId) == null ? void 0 : _q.call(_p)) != null ? _r : generateId2(),
5472
+ id: (_t = (_s = (_r = this.config).generateId) == null ? void 0 : _s.call(_r)) != null ? _t : generateId2(),
5403
5473
  mediaType: "application/octet-stream",
5404
5474
  title: annotation.file_id,
5405
5475
  filename: annotation.file_id,
@@ -5468,7 +5538,7 @@ var OpenAIResponsesLanguageModel = class {
5468
5538
  break;
5469
5539
  }
5470
5540
  case "mcp_call": {
5471
- const toolCallId = part.approval_request_id != null ? (_s = approvalRequestIdToDummyToolCallIdFromPrompt[part.approval_request_id]) != null ? _s : part.id : part.id;
5541
+ const toolCallId = part.approval_request_id != null ? (_u = approvalRequestIdToDummyToolCallIdFromPrompt[part.approval_request_id]) != null ? _u : part.id : part.id;
5472
5542
  const toolName = `mcp.${part.name}`;
5473
5543
  content.push({
5474
5544
  type: "tool-call",
@@ -5502,8 +5572,8 @@ var OpenAIResponsesLanguageModel = class {
5502
5572
  break;
5503
5573
  }
5504
5574
  case "mcp_approval_request": {
5505
- const approvalRequestId = (_t = part.approval_request_id) != null ? _t : part.id;
5506
- const dummyToolCallId = (_w = (_v = (_u = this.config).generateId) == null ? void 0 : _v.call(_u)) != null ? _w : generateId2();
5575
+ const approvalRequestId = (_v = part.approval_request_id) != null ? _v : part.id;
5576
+ const dummyToolCallId = (_y = (_x = (_w = this.config).generateId) == null ? void 0 : _x.call(_w)) != null ? _y : generateId2();
5507
5577
  const toolName = `mcp.${part.name}`;
5508
5578
  content.push({
5509
5579
  type: "tool-call",
@@ -5553,13 +5623,13 @@ var OpenAIResponsesLanguageModel = class {
5553
5623
  toolName: toolNameMapping.toCustomToolName("file_search"),
5554
5624
  result: {
5555
5625
  queries: part.queries,
5556
- results: (_y = (_x = part.results) == null ? void 0 : _x.map((result) => ({
5626
+ results: (_A = (_z = part.results) == null ? void 0 : _z.map((result) => ({
5557
5627
  attributes: result.attributes,
5558
5628
  fileId: result.file_id,
5559
5629
  filename: result.filename,
5560
5630
  score: result.score,
5561
5631
  text: result.text
5562
- }))) != null ? _y : null
5632
+ }))) != null ? _A : null
5563
5633
  }
5564
5634
  });
5565
5635
  break;
@@ -5630,10 +5700,10 @@ var OpenAIResponsesLanguageModel = class {
5630
5700
  content,
5631
5701
  finishReason: {
5632
5702
  unified: mapOpenAIResponseFinishReason({
5633
- finishReason: (_z = response.incomplete_details) == null ? void 0 : _z.reason,
5703
+ finishReason: (_B = response.incomplete_details) == null ? void 0 : _B.reason,
5634
5704
  hasFunctionCall
5635
5705
  }),
5636
- raw: (_B = (_A = response.incomplete_details) == null ? void 0 : _A.reason) != null ? _B : void 0
5706
+ raw: (_D = (_C = response.incomplete_details) == null ? void 0 : _C.reason) != null ? _D : void 0
5637
5707
  },
5638
5708
  usage: convertOpenAIResponsesUsage(usage),
5639
5709
  request: { body },
@@ -5649,6 +5719,7 @@ var OpenAIResponsesLanguageModel = class {
5649
5719
  };
5650
5720
  }
5651
5721
  async doStream(options) {
5722
+ var _a, _b;
5652
5723
  const {
5653
5724
  args: body,
5654
5725
  warnings,
@@ -5663,7 +5734,7 @@ var OpenAIResponsesLanguageModel = class {
5663
5734
  path: "/responses",
5664
5735
  modelId: this.modelId
5665
5736
  }),
5666
- headers: combineHeaders6(this.config.headers(), options.headers),
5737
+ headers: combineHeaders6((_b = (_a = this.config).headers) == null ? void 0 : _b.call(_a), options.headers),
5667
5738
  body: {
5668
5739
  ...body,
5669
5740
  stream: true
@@ -5699,7 +5770,7 @@ var OpenAIResponsesLanguageModel = class {
5699
5770
  controller.enqueue({ type: "stream-start", warnings });
5700
5771
  },
5701
5772
  transform(chunk, controller) {
5702
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L;
5773
+ var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L;
5703
5774
  if (options.includeRawChunks) {
5704
5775
  controller.enqueue({ type: "raw", rawValue: chunk.rawValue });
5705
5776
  }
@@ -5814,7 +5885,7 @@ var OpenAIResponsesLanguageModel = class {
5814
5885
  ongoingToolCalls[value.output_index] = {
5815
5886
  toolName,
5816
5887
  toolCallId,
5817
- toolSearchExecution: (_a = value.item.execution) != null ? _a : "server"
5888
+ toolSearchExecution: (_a2 = value.item.execution) != null ? _a2 : "server"
5818
5889
  };
5819
5890
  if (isHosted) {
5820
5891
  controller.enqueue({
@@ -5871,7 +5942,7 @@ var OpenAIResponsesLanguageModel = class {
5871
5942
  } else if (value.item.type === "shell_call_output") {
5872
5943
  } else if (value.item.type === "message") {
5873
5944
  ongoingAnnotations.splice(0, ongoingAnnotations.length);
5874
- activeMessagePhase = (_b = value.item.phase) != null ? _b : void 0;
5945
+ activeMessagePhase = (_b2 = value.item.phase) != null ? _b2 : void 0;
5875
5946
  controller.enqueue({
5876
5947
  type: "text-start",
5877
5948
  id: value.item.id,
@@ -6609,7 +6680,10 @@ import {
6609
6680
  combineHeaders as combineHeaders7,
6610
6681
  createBinaryResponseHandler,
6611
6682
  parseProviderOptions as parseProviderOptions7,
6612
- postJsonToApi as postJsonToApi6
6683
+ postJsonToApi as postJsonToApi6,
6684
+ serializeModelOptions as serializeModelOptions6,
6685
+ WORKFLOW_DESERIALIZE as WORKFLOW_DESERIALIZE6,
6686
+ WORKFLOW_SERIALIZE as WORKFLOW_SERIALIZE6
6613
6687
  } from "@ai-sdk/provider-utils";
6614
6688
 
6615
6689
  // src/speech/openai-speech-options.ts
@@ -6625,12 +6699,21 @@ var openaiSpeechModelOptionsSchema = lazySchema23(
6625
6699
  );
6626
6700
 
6627
6701
  // src/speech/openai-speech-model.ts
6628
- var OpenAISpeechModel = class {
6702
+ var OpenAISpeechModel = class _OpenAISpeechModel {
6629
6703
  constructor(modelId, config) {
6630
6704
  this.modelId = modelId;
6631
6705
  this.config = config;
6632
6706
  this.specificationVersion = "v4";
6633
6707
  }
6708
+ static [WORKFLOW_SERIALIZE6](model) {
6709
+ return serializeModelOptions6({
6710
+ modelId: model.modelId,
6711
+ config: model.config
6712
+ });
6713
+ }
6714
+ static [WORKFLOW_DESERIALIZE6](options) {
6715
+ return new _OpenAISpeechModel(options.modelId, options.config);
6716
+ }
6634
6717
  get provider() {
6635
6718
  return this.config.provider;
6636
6719
  }
@@ -6690,7 +6773,7 @@ var OpenAISpeechModel = class {
6690
6773
  };
6691
6774
  }
6692
6775
  async doGenerate(options) {
6693
- var _a, _b, _c;
6776
+ var _a, _b, _c, _d, _e;
6694
6777
  const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
6695
6778
  const { requestBody, warnings } = await this.getArgs(options);
6696
6779
  const {
@@ -6702,7 +6785,7 @@ var OpenAISpeechModel = class {
6702
6785
  path: "/audio/speech",
6703
6786
  modelId: this.modelId
6704
6787
  }),
6705
- headers: combineHeaders7(this.config.headers(), options.headers),
6788
+ headers: combineHeaders7((_e = (_d = this.config).headers) == null ? void 0 : _e.call(_d), options.headers),
6706
6789
  body: requestBody,
6707
6790
  failedResponseHandler: openaiFailedResponseHandler,
6708
6791
  successfulResponseHandler: createBinaryResponseHandler(),
@@ -6732,7 +6815,10 @@ import {
6732
6815
  createJsonResponseHandler as createJsonResponseHandler7,
6733
6816
  mediaTypeToExtension,
6734
6817
  parseProviderOptions as parseProviderOptions8,
6735
- postFormDataToApi as postFormDataToApi3
6818
+ postFormDataToApi as postFormDataToApi3,
6819
+ serializeModelOptions as serializeModelOptions7,
6820
+ WORKFLOW_DESERIALIZE as WORKFLOW_DESERIALIZE7,
6821
+ WORKFLOW_SERIALIZE as WORKFLOW_SERIALIZE7
6736
6822
  } from "@ai-sdk/provider-utils";
6737
6823
 
6738
6824
  // src/transcription/openai-transcription-api.ts
@@ -6861,12 +6947,21 @@ var languageMap = {
6861
6947
  vietnamese: "vi",
6862
6948
  welsh: "cy"
6863
6949
  };
6864
- var OpenAITranscriptionModel = class {
6950
+ var OpenAITranscriptionModel = class _OpenAITranscriptionModel {
6865
6951
  constructor(modelId, config) {
6866
6952
  this.modelId = modelId;
6867
6953
  this.config = config;
6868
6954
  this.specificationVersion = "v4";
6869
6955
  }
6956
+ static [WORKFLOW_SERIALIZE7](model) {
6957
+ return serializeModelOptions7({
6958
+ modelId: model.modelId,
6959
+ config: model.config
6960
+ });
6961
+ }
6962
+ static [WORKFLOW_DESERIALIZE7](options) {
6963
+ return new _OpenAITranscriptionModel(options.modelId, options.config);
6964
+ }
6870
6965
  get provider() {
6871
6966
  return this.config.provider;
6872
6967
  }
@@ -6922,7 +7017,7 @@ var OpenAITranscriptionModel = class {
6922
7017
  };
6923
7018
  }
6924
7019
  async doGenerate(options) {
6925
- var _a, _b, _c, _d, _e, _f, _g, _h;
7020
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
6926
7021
  const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
6927
7022
  const { formData, warnings } = await this.getArgs(options);
6928
7023
  const {
@@ -6934,7 +7029,7 @@ var OpenAITranscriptionModel = class {
6934
7029
  path: "/audio/transcriptions",
6935
7030
  modelId: this.modelId
6936
7031
  }),
6937
- headers: combineHeaders8(this.config.headers(), options.headers),
7032
+ headers: combineHeaders8((_e = (_d = this.config).headers) == null ? void 0 : _e.call(_d), options.headers),
6938
7033
  formData,
6939
7034
  failedResponseHandler: openaiFailedResponseHandler,
6940
7035
  successfulResponseHandler: createJsonResponseHandler7(
@@ -6946,17 +7041,17 @@ var OpenAITranscriptionModel = class {
6946
7041
  const language = response.language != null && response.language in languageMap ? languageMap[response.language] : void 0;
6947
7042
  return {
6948
7043
  text: response.text,
6949
- segments: (_g = (_f = (_d = response.segments) == null ? void 0 : _d.map((segment) => ({
7044
+ segments: (_i = (_h = (_f = response.segments) == null ? void 0 : _f.map((segment) => ({
6950
7045
  text: segment.text,
6951
7046
  startSecond: segment.start,
6952
7047
  endSecond: segment.end
6953
- }))) != null ? _f : (_e = response.words) == null ? void 0 : _e.map((word) => ({
7048
+ }))) != null ? _h : (_g = response.words) == null ? void 0 : _g.map((word) => ({
6954
7049
  text: word.word,
6955
7050
  startSecond: word.start,
6956
7051
  endSecond: word.end
6957
- }))) != null ? _g : [],
7052
+ }))) != null ? _i : [],
6958
7053
  language,
6959
- durationInSeconds: (_h = response.duration) != null ? _h : void 0,
7054
+ durationInSeconds: (_j = response.duration) != null ? _j : void 0,
6960
7055
  warnings,
6961
7056
  response: {
6962
7057
  timestamp: currentDate,
@@ -7053,7 +7148,7 @@ var OpenAISkills = class {
7053
7148
  };
7054
7149
 
7055
7150
  // src/version.ts
7056
- var VERSION = true ? "4.0.0-beta.30" : "0.0.0-test";
7151
+ var VERSION = true ? "4.0.0-beta.32" : "0.0.0-test";
7057
7152
 
7058
7153
  // src/openai-provider.ts
7059
7154
  function createOpenAI(options = {}) {