@ai-sdk/openai 2.0.77 → 2.0.79

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.
@@ -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");
@@ -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,22 +3574,24 @@ var OpenAIResponsesLanguageModel = class {
3591
3574
  }
3592
3575
  }
3593
3576
  };
3594
- if (modelConfig.isReasoningModel) {
3595
- if (baseArgs.temperature != null) {
3596
- baseArgs.temperature = void 0;
3597
- warnings.push({
3598
- type: "unsupported-setting",
3599
- setting: "temperature",
3600
- details: "temperature is not supported for reasoning models"
3601
- });
3602
- }
3603
- if (baseArgs.top_p != null) {
3604
- baseArgs.top_p = void 0;
3605
- warnings.push({
3606
- type: "unsupported-setting",
3607
- setting: "topP",
3608
- details: "topP is not supported for reasoning models"
3609
- });
3577
+ if (modelCapabilities.isReasoningModel) {
3578
+ if (!((openaiOptions == null ? void 0 : openaiOptions.reasoningEffort) === "none" && modelCapabilities.supportsNonReasoningParameters)) {
3579
+ if (baseArgs.temperature != null) {
3580
+ baseArgs.temperature = void 0;
3581
+ warnings.push({
3582
+ type: "unsupported-setting",
3583
+ setting: "temperature",
3584
+ details: "temperature is not supported for reasoning models"
3585
+ });
3586
+ }
3587
+ if (baseArgs.top_p != null) {
3588
+ baseArgs.top_p = void 0;
3589
+ warnings.push({
3590
+ type: "unsupported-setting",
3591
+ setting: "topP",
3592
+ details: "topP is not supported for reasoning models"
3593
+ });
3594
+ }
3610
3595
  }
3611
3596
  } else {
3612
3597
  if ((openaiOptions == null ? void 0 : openaiOptions.reasoningEffort) != null) {
@@ -3624,7 +3609,7 @@ var OpenAIResponsesLanguageModel = class {
3624
3609
  });
3625
3610
  }
3626
3611
  }
3627
- if ((openaiOptions == null ? void 0 : openaiOptions.serviceTier) === "flex" && !modelConfig.supportsFlexProcessing) {
3612
+ if ((openaiOptions == null ? void 0 : openaiOptions.serviceTier) === "flex" && !modelCapabilities.supportsFlexProcessing) {
3628
3613
  warnings.push({
3629
3614
  type: "unsupported-setting",
3630
3615
  setting: "serviceTier",
@@ -3632,7 +3617,7 @@ var OpenAIResponsesLanguageModel = class {
3632
3617
  });
3633
3618
  delete baseArgs.service_tier;
3634
3619
  }
3635
- if ((openaiOptions == null ? void 0 : openaiOptions.serviceTier) === "priority" && !modelConfig.supportsPriorityProcessing) {
3620
+ if ((openaiOptions == null ? void 0 : openaiOptions.serviceTier) === "priority" && !modelCapabilities.supportsPriorityProcessing) {
3636
3621
  warnings.push({
3637
3622
  type: "unsupported-setting",
3638
3623
  setting: "serviceTier",
@@ -4489,32 +4474,6 @@ function isResponseAnnotationAddedChunk(chunk) {
4489
4474
  function isErrorChunk(chunk) {
4490
4475
  return chunk.type === "error";
4491
4476
  }
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
4477
  function mapWebSearchOutput(action) {
4519
4478
  var _a;
4520
4479
  switch (action.type) {