@@ -45,9 +45,9 @@ public class ChatModelOpenAi : BaseVendorModelProvider
4545 public readonly ChatModelOpenAiGpt52 Gpt52 = new ChatModelOpenAiGpt52 ( ) ;
4646
4747 /// <summary>
48- /// GPT-5.3 models.
48+ /// GPT-5.4 models.
4949 /// </summary>
50- public readonly ChatModelOpenAiGpt53 Gpt53 = new ChatModelOpenAiGpt53 ( ) ;
50+ public readonly ChatModelOpenAiGpt54 Gpt54 = new ChatModelOpenAiGpt54 ( ) ;
5151
5252 /// <summary>
5353 /// O3 models.
@@ -98,14 +98,14 @@ public override bool OwnsModel(string model)
9898 /// </summary>
9999 public static List < IModel > ModelsAll => LazyModelsAll . Value ;
100100
101- private static readonly Lazy < List < IModel > > LazyModelsAll = new Lazy < List < IModel > > ( ( ) => [ ..ChatModelOpenAiGpt35 . ModelsAll , ..ChatModelOpenAiGpt4 . ModelsAll , ..ChatModelOpenAiO3 . ModelsAll , ..ChatModelOpenAiO4 . ModelsAll , ..ChatModelOpenAiGpt41 . ModelsAll , ..ChatModelOpenAiGpt5 . ModelsAll , ..ChatModelOpenAiGpt51 . ModelsAll , ..ChatModelOpenAiGpt52 . ModelsAll , ..ChatModelOpenAiGpt53 . ModelsAll , ..ChatModelOpenAiCodex . ModelsAll ] ) ;
101+ private static readonly Lazy < List < IModel > > LazyModelsAll = new Lazy < List < IModel > > ( ( ) => [ ..ChatModelOpenAiGpt35 . ModelsAll , ..ChatModelOpenAiGpt4 . ModelsAll , ..ChatModelOpenAiO3 . ModelsAll , ..ChatModelOpenAiO4 . ModelsAll , ..ChatModelOpenAiGpt41 . ModelsAll , ..ChatModelOpenAiGpt5 . ModelsAll , ..ChatModelOpenAiGpt51 . ModelsAll , ..ChatModelOpenAiGpt52 . ModelsAll , ..ChatModelOpenAiGpt54 . ModelsAll , ..ChatModelOpenAiCodex . ModelsAll ] ) ;
102102
103103 /// <summary>
104104 /// All reasoning models. Requests for these models are serialized differently.
105105 /// </summary>
106106 public static List < IModel > ReasoningModelsAll => LazyReasoningModelsAll . Value ;
107107
108- private static readonly Lazy < List < IModel > > LazyReasoningModelsAll = new Lazy < List < IModel > > ( ( ) => [ ..ChatModelOpenAiGpt4 . ReasoningModels , ..ChatModelOpenAiO3 . ModelsAll , ..ChatModelOpenAiO4 . ModelsAll , ..ChatModelOpenAiGpt5 . ModelsAll , ..ChatModelOpenAiGpt51 . ModelsAll , ..ChatModelOpenAiGpt52 . ModelsAll , ..ChatModelOpenAiGpt53 . ModelsAll ] ) ;
108+ private static readonly Lazy < List < IModel > > LazyReasoningModelsAll = new Lazy < List < IModel > > ( ( ) => [ ..ChatModelOpenAiGpt4 . ReasoningModels , ..ChatModelOpenAiO3 . ModelsAll , ..ChatModelOpenAiO4 . ModelsAll , ..ChatModelOpenAiGpt5 . ModelsAll , ..ChatModelOpenAiGpt51 . ModelsAll , ..ChatModelOpenAiGpt52 . ModelsAll , ..ChatModelOpenAiGpt54 . ModelsAll , ChatModelOpenAiCodex . ModelGpt53Codex ] ) ;
109109
110110 /// <summary>
111111 /// HashSet version of ReasoningModelsAll.
@@ -119,7 +119,7 @@ public override bool OwnsModel(string model)
119119 /// </summary>
120120 public static List < IModel > WebSearchCompatibleModelsAll => LazyWebSearchCompatibleModelsAll . Value ;
121121
122- private static readonly Lazy < List < IModel > > LazyWebSearchCompatibleModelsAll = new Lazy < List < IModel > > ( ( ) => [ ChatModelOpenAiGpt4 . ModelOSearchPreview , ChatModelOpenAiGpt4 . ModelOMiniSearchPreview , ..ChatModelOpenAiGpt5 . ModelsAll , ..ChatModelOpenAiGpt51 . ModelsAll , ..ChatModelOpenAiGpt52 . ModelsAll , ..ChatModelOpenAiGpt53 . ModelsAll ] ) ;
122+ private static readonly Lazy < List < IModel > > LazyWebSearchCompatibleModelsAll = new Lazy < List < IModel > > ( ( ) => [ ChatModelOpenAiGpt4 . ModelOSearchPreview , ChatModelOpenAiGpt4 . ModelOMiniSearchPreview , ..ChatModelOpenAiGpt5 . ModelsAll , ..ChatModelOpenAiGpt51 . ModelsAll , ..ChatModelOpenAiGpt52 . ModelsAll , ..ChatModelOpenAiGpt54 . ModelsAll ] ) ;
123123
124124 internal static HashSet < IModel > TempIncompatibleModels => LazyTempIncompatibleModels . Value ;
125125
@@ -133,22 +133,24 @@ public override bool OwnsModel(string model)
133133 internal static HashSet < IModel > SamplingParamsNeverSupported => LazySamplingParamsNeverSupported . Value ;
134134
135135 private static readonly Lazy < HashSet < IModel > > LazySamplingParamsNeverSupported = new Lazy < HashSet < IModel > > ( ( ) => [
136- ChatModelOpenAiGpt5 . ModelV5 , ChatModelOpenAiGpt5 . ModelV5Mini , ChatModelOpenAiGpt5 . ModelV5Nano , ChatModelOpenAiGpt5 . ModelV5Pro , ChatModelOpenAiGpt5 . ModelV5Codex
136+ ChatModelOpenAiGpt5 . ModelV5 , ChatModelOpenAiGpt5 . ModelV5Mini , ChatModelOpenAiGpt5 . ModelV5Nano , ChatModelOpenAiGpt5 . ModelV5Pro , ChatModelOpenAiGpt5 . ModelV5Codex , ChatModelOpenAiGpt54 . ModelV54Pro , ChatModelOpenAiCodex . ModelGpt53Codex
137137 ] ) ;
138138
139139 /// <summary>
140- /// Models that conditionally support temperature/top_p/logprobs only when reasoning effort is none (GPT-5.2, GPT-5.1).
140+ /// Models that conditionally support temperature/top_p/logprobs only when reasoning effort is none (GPT-5.4, GPT-5. 2, GPT-5.1).
141141 /// </summary>
142142 internal static HashSet < IModel > SamplingParamsConditionallySupported => LazySamplingParamsConditionallySupported . Value ;
143143
144144 private static readonly Lazy < HashSet < IModel > > LazySamplingParamsConditionallySupported = new Lazy < HashSet < IModel > > ( ( ) => [
145- ..ChatModelOpenAiGpt51 . ModelsAll , ..ChatModelOpenAiGpt52 . ModelsAll , .. ChatModelOpenAiGpt53 . ModelsAll
145+ ..ChatModelOpenAiGpt51 . ModelsAll , ..ChatModelOpenAiGpt52 . ModelsAll , ChatModelOpenAiGpt54 . ModelV54
146146 ] ) ;
147147
148148 /// <summary>
149149 /// Determines whether sampling parameters (temperature, top_p, logprobs) should be cleared for GPT-5.x models.
150- /// GPT-5.2 parameter compatibility:
150+ /// GPT-5.4 parameter compatibility:
151151 /// - Older GPT-5 models (gpt-5, gpt-5-mini, gpt-5-nano) never support these parameters
152+ /// - GPT-5.4 only supports these on gpt-5.4 when reasoning effort is none, while gpt-5.4-pro never supports them
153+ /// - GPT-5.3-Codex never supports these because it only exposes reasoning modes low, medium, high, and xhigh
152154 /// - GPT-5.2 and GPT-5.1 only support these when reasoning effort is none
153155 /// </summary>
154156 /// <param name="model">The model being used.</param>
0 commit comments