@ai-sdk/openai 2.0.76 → 2.0.78

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.
@@ -510,7 +510,7 @@ declare const webSearchPreview: _ai_sdk_provider_utils.ProviderDefinedToolFactor
510
510
  /**
511
511
  * The URL opened by the model.
512
512
  */
513
- url: string;
513
+ url?: string | null;
514
514
  } | {
515
515
  /**
516
516
  * Action type "find": Searches for a pattern within a loaded page.
@@ -519,11 +519,11 @@ declare const webSearchPreview: _ai_sdk_provider_utils.ProviderDefinedToolFactor
519
519
  /**
520
520
  * The URL of the page searched for the pattern.
521
521
  */
522
- url: string;
522
+ url?: string | null;
523
523
  /**
524
524
  * The pattern or text to search for within the page.
525
525
  */
526
- pattern: string;
526
+ pattern?: string | null;
527
527
  };
528
528
  }, {
529
529
  /**
@@ -510,7 +510,7 @@ declare const webSearchPreview: _ai_sdk_provider_utils.ProviderDefinedToolFactor
510
510
  /**
511
511
  * The URL opened by the model.
512
512
  */
513
- url: string;
513
+ url?: string | null;
514
514
  } | {
515
515
  /**
516
516
  * Action type "find": Searches for a pattern within a loaded page.
@@ -519,11 +519,11 @@ declare const webSearchPreview: _ai_sdk_provider_utils.ProviderDefinedToolFactor
519
519
  /**
520
520
  * The URL of the page searched for the pattern.
521
521
  */
522
- url: string;
522
+ url?: string | null;
523
523
  /**
524
524
  * The pattern or text to search for within the page.
525
525
  */
526
- pattern: string;
526
+ pattern?: string | null;
527
527
  };
528
528
  }, {
529
529
  /**
@@ -74,6 +74,22 @@ var openaiFailedResponseHandler = (0, import_provider_utils.createJsonErrorRespo
74
74
  errorToMessage: (data) => data.error.message
75
75
  });
76
76
 
77
+ // src/openai-language-model-capabilities.ts
78
+ function getOpenAILanguageModelCapabilities(modelId) {
79
+ const supportsFlexProcessing = modelId.startsWith("o3") || modelId.startsWith("o4-mini") || modelId.startsWith("gpt-5") && !modelId.startsWith("gpt-5-chat");
80
+ const supportsPriorityProcessing = modelId.startsWith("gpt-4") || modelId.startsWith("gpt-5-mini") || modelId.startsWith("gpt-5") && !modelId.startsWith("gpt-5-nano") && !modelId.startsWith("gpt-5-chat") || modelId.startsWith("o3") || modelId.startsWith("o4-mini");
81
+ const isReasoningModel = !(modelId.startsWith("gpt-3") || modelId.startsWith("gpt-4") || modelId.startsWith("chatgpt-4o") || modelId.startsWith("gpt-5-chat"));
82
+ const supportsNonReasoningParameters = modelId.startsWith("gpt-5.1");
83
+ const systemMessageMode = isReasoningModel ? "developer" : "system";
84
+ return {
85
+ supportsFlexProcessing,
86
+ supportsPriorityProcessing,
87
+ isReasoningModel,
88
+ systemMessageMode,
89
+ supportsNonReasoningParameters
90
+ };
91
+ }
92
+
77
93
  // src/chat/convert-to-openai-chat-messages.ts
78
94
  var import_provider = require("@ai-sdk/provider");
79
95
  var import_provider_utils2 = require("@ai-sdk/provider-utils");
@@ -623,6 +639,7 @@ var OpenAIChatLanguageModel = class {
623
639
  schema: openaiChatLanguageModelOptions
624
640
  })) != null ? _a : {};
625
641
  const structuredOutputs = (_b = openaiOptions.structuredOutputs) != null ? _b : true;
642
+ const modelCapabilities = getOpenAILanguageModelCapabilities(this.modelId);
626
643
  if (topK != null) {
627
644
  warnings.push({
628
645
  type: "unsupported-setting",
@@ -639,7 +656,7 @@ var OpenAIChatLanguageModel = class {
639
656
  const { messages, warnings: messageWarnings } = convertToOpenAIChatMessages(
640
657
  {
641
658
  prompt,
642
- systemMessageMode: getSystemMessageMode(this.modelId)
659
+ systemMessageMode: modelCapabilities.systemMessageMode
643
660
  }
644
661
  );
645
662
  warnings.push(...messageWarnings);
@@ -685,22 +702,31 @@ var OpenAIChatLanguageModel = class {
685
702
  // messages:
686
703
  messages
687
704
  };
688
- if (isReasoningModel(this.modelId)) {
689
- if (baseArgs.temperature != null) {
690
- baseArgs.temperature = void 0;
691
- warnings.push({
692
- type: "unsupported-setting",
693
- setting: "temperature",
694
- details: "temperature is not supported for reasoning models"
695
- });
696
- }
697
- if (baseArgs.top_p != null) {
698
- baseArgs.top_p = void 0;
699
- warnings.push({
700
- type: "unsupported-setting",
701
- setting: "topP",
702
- details: "topP is not supported for reasoning models"
703
- });
705
+ if (modelCapabilities.isReasoningModel) {
706
+ if (openaiOptions.reasoningEffort !== "none" || !modelCapabilities.supportsNonReasoningParameters) {
707
+ if (baseArgs.temperature != null) {
708
+ baseArgs.temperature = void 0;
709
+ warnings.push({
710
+ type: "unsupported-setting",
711
+ setting: "temperature",
712
+ details: "temperature is not supported for reasoning models"
713
+ });
714
+ }
715
+ if (baseArgs.top_p != null) {
716
+ baseArgs.top_p = void 0;
717
+ warnings.push({
718
+ type: "unsupported-setting",
719
+ setting: "topP",
720
+ details: "topP is not supported for reasoning models"
721
+ });
722
+ }
723
+ if (baseArgs.logprobs != null) {
724
+ baseArgs.logprobs = void 0;
725
+ warnings.push({
726
+ type: "other",
727
+ message: "logprobs is not supported for reasoning models"
728
+ });
729
+ }
704
730
  }
705
731
  if (baseArgs.frequency_penalty != null) {
706
732
  baseArgs.frequency_penalty = void 0;
@@ -725,13 +751,6 @@ var OpenAIChatLanguageModel = class {
725
751
  message: "logitBias is not supported for reasoning models"
726
752
  });
727
753
  }
728
- if (baseArgs.logprobs != null) {
729
- baseArgs.logprobs = void 0;
730
- warnings.push({
731
- type: "other",
732
- message: "logprobs is not supported for reasoning models"
733
- });
734
- }
735
754
  if (baseArgs.top_logprobs != null) {
736
755
  baseArgs.top_logprobs = void 0;
737
756
  warnings.push({
@@ -755,7 +774,7 @@ var OpenAIChatLanguageModel = class {
755
774
  });
756
775
  }
757
776
  }
758
- if (openaiOptions.serviceTier === "flex" && !supportsFlexProcessing(this.modelId)) {
777
+ if (openaiOptions.serviceTier === "flex" && !modelCapabilities.supportsFlexProcessing) {
759
778
  warnings.push({
760
779
  type: "unsupported-setting",
761
780
  setting: "serviceTier",
@@ -763,7 +782,7 @@ var OpenAIChatLanguageModel = class {
763
782
  });
764
783
  baseArgs.service_tier = void 0;
765
784
  }
766
- if (openaiOptions.serviceTier === "priority" && !supportsPriorityProcessing(this.modelId)) {
785
+ if (openaiOptions.serviceTier === "priority" && !modelCapabilities.supportsPriorityProcessing) {
767
786
  warnings.push({
768
787
  type: "unsupported-setting",
769
788
  setting: "serviceTier",
@@ -1084,42 +1103,6 @@ var OpenAIChatLanguageModel = class {
1084
1103
  };
1085
1104
  }
1086
1105
  };
1087
- function isReasoningModel(modelId) {
1088
- return (modelId.startsWith("o") || modelId.startsWith("gpt-5")) && !modelId.startsWith("gpt-5-chat");
1089
- }
1090
- function supportsFlexProcessing(modelId) {
1091
- return modelId.startsWith("o3") || modelId.startsWith("o4-mini") || modelId.startsWith("gpt-5") && !modelId.startsWith("gpt-5-chat");
1092
- }
1093
- function supportsPriorityProcessing(modelId) {
1094
- return modelId.startsWith("gpt-4") || modelId.startsWith("gpt-5-mini") || modelId.startsWith("gpt-5") && !modelId.startsWith("gpt-5-nano") && !modelId.startsWith("gpt-5-chat") || modelId.startsWith("o3") || modelId.startsWith("o4-mini");
1095
- }
1096
- function getSystemMessageMode(modelId) {
1097
- var _a, _b;
1098
- if (!isReasoningModel(modelId)) {
1099
- return "system";
1100
- }
1101
- return (_b = (_a = reasoningModels[modelId]) == null ? void 0 : _a.systemMessageMode) != null ? _b : "developer";
1102
- }
1103
- var reasoningModels = {
1104
- o3: {
1105
- systemMessageMode: "developer"
1106
- },
1107
- "o3-2025-04-16": {
1108
- systemMessageMode: "developer"
1109
- },
1110
- "o3-mini": {
1111
- systemMessageMode: "developer"
1112
- },
1113
- "o3-mini-2025-01-31": {
1114
- systemMessageMode: "developer"
1115
- },
1116
- "o4-mini": {
1117
- systemMessageMode: "developer"
1118
- },
1119
- "o4-mini-2025-04-16": {
1120
- systemMessageMode: "developer"
1121
- }
1122
- };
1123
1106
 
1124
1107
  // src/completion/openai-completion-language-model.ts
1125
1108
  var import_provider_utils8 = require("@ai-sdk/provider-utils");
@@ -2631,12 +2614,12 @@ var openaiResponsesChunkSchema = (0, import_provider_utils21.lazyValidator)(
2631
2614
  }),
2632
2615
  import_v414.z.object({
2633
2616
  type: import_v414.z.literal("open_page"),
2634
- url: import_v414.z.string()
2617
+ url: import_v414.z.string().nullish()
2635
2618
  }),
2636
2619
  import_v414.z.object({
2637
2620
  type: import_v414.z.literal("find"),
2638
- url: import_v414.z.string(),
2639
- pattern: import_v414.z.string()
2621
+ url: import_v414.z.string().nullish(),
2622
+ pattern: import_v414.z.string().nullish()
2640
2623
  })
2641
2624
  ])
2642
2625
  }),
@@ -2841,12 +2824,12 @@ var openaiResponsesResponseSchema = (0, import_provider_utils21.lazyValidator)(
2841
2824
  }),
2842
2825
  import_v414.z.object({
2843
2826
  type: import_v414.z.literal("open_page"),
2844
- url: import_v414.z.string()
2827
+ url: import_v414.z.string().nullish()
2845
2828
  }),
2846
2829
  import_v414.z.object({
2847
2830
  type: import_v414.z.literal("find"),
2848
- url: import_v414.z.string(),
2849
- pattern: import_v414.z.string()
2831
+ url: import_v414.z.string().nullish(),
2832
+ pattern: import_v414.z.string().nullish()
2850
2833
  })
2851
2834
  ])
2852
2835
  }),
@@ -3189,12 +3172,12 @@ var webSearchOutputSchema = (0, import_provider_utils25.lazySchema)(
3189
3172
  }),
3190
3173
  import_v418.z.object({
3191
3174
  type: import_v418.z.literal("openPage"),
3192
- url: import_v418.z.string()
3175
+ url: import_v418.z.string().nullish()
3193
3176
  }),
3194
3177
  import_v418.z.object({
3195
3178
  type: import_v418.z.literal("find"),
3196
- url: import_v418.z.string(),
3197
- pattern: import_v418.z.string()
3179
+ url: import_v418.z.string().nullish(),
3180
+ pattern: import_v418.z.string().nullish()
3198
3181
  })
3199
3182
  ]),
3200
3183
  sources: import_v418.z.array(
@@ -3243,12 +3226,12 @@ var webSearchPreviewOutputSchema = (0, import_provider_utils26.lazySchema)(
3243
3226
  }),
3244
3227
  import_v419.z.object({
3245
3228
  type: import_v419.z.literal("openPage"),
3246
- url: import_v419.z.string()
3229
+ url: import_v419.z.string().nullish()
3247
3230
  }),
3248
3231
  import_v419.z.object({
3249
3232
  type: import_v419.z.literal("find"),
3250
- url: import_v419.z.string(),
3251
- pattern: import_v419.z.string()
3233
+ url: import_v419.z.string().nullish(),
3234
+ pattern: import_v419.z.string().nullish()
3252
3235
  })
3253
3236
  ])
3254
3237
  })
@@ -3468,7 +3451,7 @@ var OpenAIResponsesLanguageModel = class {
3468
3451
  }) {
3469
3452
  var _a, _b, _c, _d;
3470
3453
  const warnings = [];
3471
- const modelConfig = getResponsesModelConfig(this.modelId);
3454
+ const modelCapabilities = getOpenAILanguageModelCapabilities(this.modelId);
3472
3455
  if (topK != null) {
3473
3456
  warnings.push({ type: "unsupported-setting", setting: "topK" });
3474
3457
  }
@@ -3504,7 +3487,7 @@ var OpenAIResponsesLanguageModel = class {
3504
3487
  }
3505
3488
  const { input, warnings: inputWarnings } = await convertToOpenAIResponsesInput({
3506
3489
  prompt,
3507
- systemMessageMode: modelConfig.systemMessageMode,
3490
+ systemMessageMode: modelCapabilities.systemMessageMode,
3508
3491
  fileIdPrefixes: this.config.fileIdPrefixes,
3509
3492
  store: (_a = openaiOptions == null ? void 0 : openaiOptions.store) != null ? _a : true,
3510
3493
  hasLocalShellTool: hasOpenAITool("openai.local_shell")
@@ -3538,7 +3521,7 @@ var OpenAIResponsesLanguageModel = class {
3538
3521
  addInclude("code_interpreter_call.outputs");
3539
3522
  }
3540
3523
  const store = openaiOptions == null ? void 0 : openaiOptions.store;
3541
- if (store === false && modelConfig.isReasoningModel) {
3524
+ if (store === false && modelCapabilities.isReasoningModel) {
3542
3525
  addInclude("reasoning.encrypted_content");
3543
3526
  }
3544
3527
  const baseArgs = {
@@ -3580,7 +3563,7 @@ var OpenAIResponsesLanguageModel = class {
3580
3563
  top_logprobs: topLogprobs,
3581
3564
  truncation: openaiOptions == null ? void 0 : openaiOptions.truncation,
3582
3565
  // model-specific settings:
3583
- ...modelConfig.isReasoningModel && ((openaiOptions == null ? void 0 : openaiOptions.reasoningEffort) != null || (openaiOptions == null ? void 0 : openaiOptions.reasoningSummary) != null) && {
3566
+ ...modelCapabilities.isReasoningModel && ((openaiOptions == null ? void 0 : openaiOptions.reasoningEffort) != null || (openaiOptions == null ? void 0 : openaiOptions.reasoningSummary) != null) && {
3584
3567
  reasoning: {
3585
3568
  ...(openaiOptions == null ? void 0 : openaiOptions.reasoningEffort) != null && {
3586
3569
  effort: openaiOptions.reasoningEffort
@@ -3591,7 +3574,7 @@ var OpenAIResponsesLanguageModel = class {
3591
3574
  }
3592
3575
  }
3593
3576
  };
3594
- if (modelConfig.isReasoningModel) {
3577
+ if (modelCapabilities.isReasoningModel || (openaiOptions == null ? void 0 : openaiOptions.reasoningEffort) === "none" && modelCapabilities.supportsNonReasoningParameters) {
3595
3578
  if (baseArgs.temperature != null) {
3596
3579
  baseArgs.temperature = void 0;
3597
3580
  warnings.push({
@@ -3624,7 +3607,7 @@ var OpenAIResponsesLanguageModel = class {
3624
3607
  });
3625
3608
  }
3626
3609
  }
3627
- if ((openaiOptions == null ? void 0 : openaiOptions.serviceTier) === "flex" && !modelConfig.supportsFlexProcessing) {
3610
+ if ((openaiOptions == null ? void 0 : openaiOptions.serviceTier) === "flex" && !modelCapabilities.supportsFlexProcessing) {
3628
3611
  warnings.push({
3629
3612
  type: "unsupported-setting",
3630
3613
  setting: "serviceTier",
@@ -3632,7 +3615,7 @@ var OpenAIResponsesLanguageModel = class {
3632
3615
  });
3633
3616
  delete baseArgs.service_tier;
3634
3617
  }
3635
- if ((openaiOptions == null ? void 0 : openaiOptions.serviceTier) === "priority" && !modelConfig.supportsPriorityProcessing) {
3618
+ if ((openaiOptions == null ? void 0 : openaiOptions.serviceTier) === "priority" && !modelCapabilities.supportsPriorityProcessing) {
3636
3619
  warnings.push({
3637
3620
  type: "unsupported-setting",
3638
3621
  setting: "serviceTier",
@@ -4489,32 +4472,6 @@ function isResponseAnnotationAddedChunk(chunk) {
4489
4472
  function isErrorChunk(chunk) {
4490
4473
  return chunk.type === "error";
4491
4474
  }
4492
- function getResponsesModelConfig(modelId) {
4493
- const supportsFlexProcessing2 = modelId.startsWith("o3") || modelId.startsWith("o4-mini") || modelId.startsWith("gpt-5") && !modelId.startsWith("gpt-5-chat");
4494
- const supportsPriorityProcessing2 = modelId.startsWith("gpt-4") || modelId.startsWith("gpt-5-mini") || modelId.startsWith("gpt-5") && !modelId.startsWith("gpt-5-nano") && !modelId.startsWith("gpt-5-chat") || modelId.startsWith("o3") || modelId.startsWith("o4-mini");
4495
- const defaults = {
4496
- systemMessageMode: "system",
4497
- supportsFlexProcessing: supportsFlexProcessing2,
4498
- supportsPriorityProcessing: supportsPriorityProcessing2
4499
- };
4500
- if (modelId.startsWith("gpt-5-chat")) {
4501
- return {
4502
- ...defaults,
4503
- isReasoningModel: false
4504
- };
4505
- }
4506
- if (modelId.startsWith("o") || modelId.startsWith("gpt-5") || modelId.startsWith("codex-") || modelId.startsWith("computer-use")) {
4507
- return {
4508
- ...defaults,
4509
- isReasoningModel: true,
4510
- systemMessageMode: "developer"
4511
- };
4512
- }
4513
- return {
4514
- ...defaults,
4515
- isReasoningModel: false
4516
- };
4517
- }
4518
4475
  function mapWebSearchOutput(action) {
4519
4476
  var _a;
4520
4477
  switch (action.type) {