@ai-sdk/openai 1.2.3 → 1.2.5

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,20 @@
1
1
  # @ai-sdk/openai
2
2
 
3
+ ## 1.2.5
4
+
5
+ ### Patch Changes
6
+
7
+ - 2e1101a: feat (provider/openai): pdf input support
8
+ - Updated dependencies [2e1101a]
9
+ - @ai-sdk/provider@1.0.11
10
+ - @ai-sdk/provider-utils@2.1.13
11
+
12
+ ## 1.2.4
13
+
14
+ ### Patch Changes
15
+
16
+ - 523f128: feat (provider/openai): add strictSchemas option to responses model
17
+
3
18
  ## 1.2.3
4
19
 
5
20
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -71,6 +71,8 @@ interface OpenAIChatSettings {
71
71
  Enable this if the model that you are using does not support streaming.
72
72
 
73
73
  Defaults to `false`.
74
+
75
+ @deprecated Use `simulateStreamingMiddleware` instead.
74
76
  */
75
77
  simulateStreaming?: boolean;
76
78
  /**
package/dist/index.d.ts CHANGED
@@ -71,6 +71,8 @@ interface OpenAIChatSettings {
71
71
  Enable this if the model that you are using does not support streaming.
72
72
 
73
73
  Defaults to `false`.
74
+
75
+ @deprecated Use `simulateStreamingMiddleware` instead.
74
76
  */
75
77
  simulateStreaming?: boolean;
76
78
  /**
package/dist/index.js CHANGED
@@ -1601,6 +1601,7 @@ var openaiImageResponseSchema = import_zod5.z.object({
1601
1601
  });
1602
1602
 
1603
1603
  // src/responses/openai-responses-language-model.ts
1604
+ var import_provider9 = require("@ai-sdk/provider");
1604
1605
  var import_provider_utils8 = require("@ai-sdk/provider-utils");
1605
1606
  var import_zod6 = require("zod");
1606
1607
 
@@ -1644,8 +1645,8 @@ function convertToOpenAIResponsesMessages({
1644
1645
  case "user": {
1645
1646
  messages.push({
1646
1647
  role: "user",
1647
- content: content.map((part) => {
1648
- var _a, _b, _c;
1648
+ content: content.map((part, index) => {
1649
+ var _a, _b, _c, _d;
1649
1650
  switch (part.type) {
1650
1651
  case "text": {
1651
1652
  return { type: "input_text", text: part.text };
@@ -1659,9 +1660,25 @@ function convertToOpenAIResponsesMessages({
1659
1660
  };
1660
1661
  }
1661
1662
  case "file": {
1662
- throw new import_provider7.UnsupportedFunctionalityError({
1663
- functionality: "Image content parts in user messages"
1664
- });
1663
+ if (part.data instanceof URL) {
1664
+ throw new import_provider7.UnsupportedFunctionalityError({
1665
+ functionality: "File URLs in user messages"
1666
+ });
1667
+ }
1668
+ switch (part.mimeType) {
1669
+ case "application/pdf": {
1670
+ return {
1671
+ type: "input_file",
1672
+ filename: (_d = part.filename) != null ? _d : `part-${index}.pdf`,
1673
+ file_data: `data:application/pdf;base64,${part.data}`
1674
+ };
1675
+ }
1676
+ default: {
1677
+ throw new import_provider7.UnsupportedFunctionalityError({
1678
+ functionality: "Only PDF files are supported in user messages"
1679
+ });
1680
+ }
1681
+ }
1665
1682
  }
1666
1683
  }
1667
1684
  })
@@ -1824,7 +1841,7 @@ var OpenAIResponsesLanguageModel = class {
1824
1841
  providerMetadata,
1825
1842
  responseFormat
1826
1843
  }) {
1827
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
1844
+ var _a, _b, _c, _d;
1828
1845
  const warnings = [];
1829
1846
  const modelConfig = getResponsesModelConfig(this.modelId);
1830
1847
  const type = mode.type;
@@ -1863,7 +1880,19 @@ var OpenAIResponsesLanguageModel = class {
1863
1880
  systemMessageMode: modelConfig.systemMessageMode
1864
1881
  });
1865
1882
  warnings.push(...messageWarnings);
1866
- const isStrictJsonSchema = (_b = (_a = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _a.strictJsonSchema) != null ? _b : true;
1883
+ const parsedProviderOptions = providerMetadata != null ? (0, import_provider_utils8.safeValidateTypes)({
1884
+ value: providerMetadata,
1885
+ schema: providerOptionsSchema
1886
+ }) : { success: true, value: void 0 };
1887
+ if (!parsedProviderOptions.success) {
1888
+ throw new import_provider9.InvalidArgumentError({
1889
+ argument: "providerOptions",
1890
+ message: "invalid provider options",
1891
+ cause: parsedProviderOptions.error
1892
+ });
1893
+ }
1894
+ const openaiOptions = (_a = parsedProviderOptions.value) == null ? void 0 : _a.openai;
1895
+ const isStrict = (_b = openaiOptions == null ? void 0 : openaiOptions.strictSchemas) != null ? _b : true;
1867
1896
  const baseArgs = {
1868
1897
  model: this.modelId,
1869
1898
  input: messages,
@@ -1874,7 +1903,7 @@ var OpenAIResponsesLanguageModel = class {
1874
1903
  text: {
1875
1904
  format: responseFormat.schema != null ? {
1876
1905
  type: "json_schema",
1877
- strict: isStrictJsonSchema,
1906
+ strict: isStrict,
1878
1907
  name: (_c = responseFormat.name) != null ? _c : "response",
1879
1908
  description: responseFormat.description,
1880
1909
  schema: responseFormat.schema
@@ -1882,14 +1911,14 @@ var OpenAIResponsesLanguageModel = class {
1882
1911
  }
1883
1912
  },
1884
1913
  // provider options:
1885
- metadata: (_d = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _d.metadata,
1886
- parallel_tool_calls: (_e = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _e.parallelToolCalls,
1887
- previous_response_id: (_f = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _f.previousResponseId,
1888
- store: (_g = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _g.store,
1889
- user: (_h = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _h.user,
1914
+ metadata: openaiOptions == null ? void 0 : openaiOptions.metadata,
1915
+ parallel_tool_calls: openaiOptions == null ? void 0 : openaiOptions.parallelToolCalls,
1916
+ previous_response_id: openaiOptions == null ? void 0 : openaiOptions.previousResponseId,
1917
+ store: openaiOptions == null ? void 0 : openaiOptions.store,
1918
+ user: openaiOptions == null ? void 0 : openaiOptions.user,
1890
1919
  // model-specific settings:
1891
- ...modelConfig.isReasoningModel && ((_i = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _i.reasoningEffort) != null && {
1892
- reasoning: { effort: (_j = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _j.reasoningEffort }
1920
+ ...modelConfig.isReasoningModel && (openaiOptions == null ? void 0 : openaiOptions.reasoningEffort) != null && {
1921
+ reasoning: { effort: openaiOptions == null ? void 0 : openaiOptions.reasoningEffort }
1893
1922
  },
1894
1923
  ...modelConfig.requiredAutoTruncation && {
1895
1924
  truncation: "auto"
@@ -1917,7 +1946,8 @@ var OpenAIResponsesLanguageModel = class {
1917
1946
  case "regular": {
1918
1947
  const { tools, tool_choice, toolWarnings } = prepareResponsesTools({
1919
1948
  mode,
1920
- strict: true
1949
+ strict: isStrict
1950
+ // TODO support provider options on tools
1921
1951
  });
1922
1952
  return {
1923
1953
  args: {
@@ -1935,8 +1965,8 @@ var OpenAIResponsesLanguageModel = class {
1935
1965
  text: {
1936
1966
  format: mode.schema != null ? {
1937
1967
  type: "json_schema",
1938
- strict: isStrictJsonSchema,
1939
- name: (_k = mode.name) != null ? _k : "response",
1968
+ strict: isStrict,
1969
+ name: (_d = mode.name) != null ? _d : "response",
1940
1970
  description: mode.description,
1941
1971
  schema: mode.schema
1942
1972
  } : { type: "json_object" }
@@ -1956,7 +1986,7 @@ var OpenAIResponsesLanguageModel = class {
1956
1986
  name: mode.tool.name,
1957
1987
  description: mode.tool.description,
1958
1988
  parameters: mode.tool.parameters,
1959
- strict: isStrictJsonSchema
1989
+ strict: isStrict
1960
1990
  }
1961
1991
  ]
1962
1992
  },
@@ -2329,6 +2359,17 @@ function isResponseOutputItemAddedChunk(chunk) {
2329
2359
  function isResponseAnnotationAddedChunk(chunk) {
2330
2360
  return chunk.type === "response.output_text.annotation.added";
2331
2361
  }
2362
+ var providerOptionsSchema = import_zod6.z.object({
2363
+ openai: import_zod6.z.object({
2364
+ metadata: import_zod6.z.any().nullish(),
2365
+ parallelToolCalls: import_zod6.z.boolean().nullish(),
2366
+ previousResponseId: import_zod6.z.string().nullish(),
2367
+ store: import_zod6.z.boolean().nullish(),
2368
+ user: import_zod6.z.string().nullish(),
2369
+ reasoningEffort: import_zod6.z.string().nullish(),
2370
+ strictSchemas: import_zod6.z.boolean().nullish()
2371
+ }).nullish()
2372
+ });
2332
2373
  function getResponsesModelConfig(modelId) {
2333
2374
  if (modelId.startsWith("o")) {
2334
2375
  if (modelId.startsWith("o1-mini") || modelId.startsWith("o1-preview")) {