@ai-sdk/openai 1.2.3 → 1.2.4

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,11 @@
1
1
  # @ai-sdk/openai
2
2
 
3
+ ## 1.2.4
4
+
5
+ ### Patch Changes
6
+
7
+ - 523f128: feat (provider/openai): add strictSchemas option to responses model
8
+
3
9
  ## 1.2.3
4
10
 
5
11
  ### 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
 
@@ -1824,7 +1825,7 @@ var OpenAIResponsesLanguageModel = class {
1824
1825
  providerMetadata,
1825
1826
  responseFormat
1826
1827
  }) {
1827
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
1828
+ var _a, _b, _c, _d;
1828
1829
  const warnings = [];
1829
1830
  const modelConfig = getResponsesModelConfig(this.modelId);
1830
1831
  const type = mode.type;
@@ -1863,7 +1864,19 @@ var OpenAIResponsesLanguageModel = class {
1863
1864
  systemMessageMode: modelConfig.systemMessageMode
1864
1865
  });
1865
1866
  warnings.push(...messageWarnings);
1866
- const isStrictJsonSchema = (_b = (_a = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _a.strictJsonSchema) != null ? _b : true;
1867
+ const parsedProviderOptions = providerMetadata != null ? (0, import_provider_utils8.safeValidateTypes)({
1868
+ value: providerMetadata,
1869
+ schema: providerOptionsSchema
1870
+ }) : { success: true, value: void 0 };
1871
+ if (!parsedProviderOptions.success) {
1872
+ throw new import_provider9.InvalidArgumentError({
1873
+ argument: "providerOptions",
1874
+ message: "invalid provider options",
1875
+ cause: parsedProviderOptions.error
1876
+ });
1877
+ }
1878
+ const openaiOptions = (_a = parsedProviderOptions.value) == null ? void 0 : _a.openai;
1879
+ const isStrict = (_b = openaiOptions == null ? void 0 : openaiOptions.strictSchemas) != null ? _b : true;
1867
1880
  const baseArgs = {
1868
1881
  model: this.modelId,
1869
1882
  input: messages,
@@ -1874,7 +1887,7 @@ var OpenAIResponsesLanguageModel = class {
1874
1887
  text: {
1875
1888
  format: responseFormat.schema != null ? {
1876
1889
  type: "json_schema",
1877
- strict: isStrictJsonSchema,
1890
+ strict: isStrict,
1878
1891
  name: (_c = responseFormat.name) != null ? _c : "response",
1879
1892
  description: responseFormat.description,
1880
1893
  schema: responseFormat.schema
@@ -1882,14 +1895,14 @@ var OpenAIResponsesLanguageModel = class {
1882
1895
  }
1883
1896
  },
1884
1897
  // 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,
1898
+ metadata: openaiOptions == null ? void 0 : openaiOptions.metadata,
1899
+ parallel_tool_calls: openaiOptions == null ? void 0 : openaiOptions.parallelToolCalls,
1900
+ previous_response_id: openaiOptions == null ? void 0 : openaiOptions.previousResponseId,
1901
+ store: openaiOptions == null ? void 0 : openaiOptions.store,
1902
+ user: openaiOptions == null ? void 0 : openaiOptions.user,
1890
1903
  // 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 }
1904
+ ...modelConfig.isReasoningModel && (openaiOptions == null ? void 0 : openaiOptions.reasoningEffort) != null && {
1905
+ reasoning: { effort: openaiOptions == null ? void 0 : openaiOptions.reasoningEffort }
1893
1906
  },
1894
1907
  ...modelConfig.requiredAutoTruncation && {
1895
1908
  truncation: "auto"
@@ -1917,7 +1930,8 @@ var OpenAIResponsesLanguageModel = class {
1917
1930
  case "regular": {
1918
1931
  const { tools, tool_choice, toolWarnings } = prepareResponsesTools({
1919
1932
  mode,
1920
- strict: true
1933
+ strict: isStrict
1934
+ // TODO support provider options on tools
1921
1935
  });
1922
1936
  return {
1923
1937
  args: {
@@ -1935,8 +1949,8 @@ var OpenAIResponsesLanguageModel = class {
1935
1949
  text: {
1936
1950
  format: mode.schema != null ? {
1937
1951
  type: "json_schema",
1938
- strict: isStrictJsonSchema,
1939
- name: (_k = mode.name) != null ? _k : "response",
1952
+ strict: isStrict,
1953
+ name: (_d = mode.name) != null ? _d : "response",
1940
1954
  description: mode.description,
1941
1955
  schema: mode.schema
1942
1956
  } : { type: "json_object" }
@@ -1956,7 +1970,7 @@ var OpenAIResponsesLanguageModel = class {
1956
1970
  name: mode.tool.name,
1957
1971
  description: mode.tool.description,
1958
1972
  parameters: mode.tool.parameters,
1959
- strict: isStrictJsonSchema
1973
+ strict: isStrict
1960
1974
  }
1961
1975
  ]
1962
1976
  },
@@ -2329,6 +2343,17 @@ function isResponseOutputItemAddedChunk(chunk) {
2329
2343
  function isResponseAnnotationAddedChunk(chunk) {
2330
2344
  return chunk.type === "response.output_text.annotation.added";
2331
2345
  }
2346
+ var providerOptionsSchema = import_zod6.z.object({
2347
+ openai: import_zod6.z.object({
2348
+ metadata: import_zod6.z.any().nullish(),
2349
+ parallelToolCalls: import_zod6.z.boolean().nullish(),
2350
+ previousResponseId: import_zod6.z.string().nullish(),
2351
+ store: import_zod6.z.boolean().nullish(),
2352
+ user: import_zod6.z.string().nullish(),
2353
+ reasoningEffort: import_zod6.z.string().nullish(),
2354
+ strictSchemas: import_zod6.z.boolean().nullish()
2355
+ }).nullish()
2356
+ });
2332
2357
  function getResponsesModelConfig(modelId) {
2333
2358
  if (modelId.startsWith("o")) {
2334
2359
  if (modelId.startsWith("o1-mini") || modelId.startsWith("o1-preview")) {