@@ -55,6 +55,22 @@ public class ModelCapabilitiesSupports
5555 public bool ? ReasoningEffort { get ; set ; }
5656}
5757
58+ /// <summary>Vision-specific limits.</summary>
59+ public class ModelCapabilitiesLimitsVision
60+ {
61+ /// <summary>MIME types the model accepts.</summary>
62+ [ JsonPropertyName ( "supported_media_types" ) ]
63+ public List < string > SupportedMediaTypes { get => field ??= [ ] ; set ; }
64+
65+ /// <summary>Maximum number of images per prompt.</summary>
66+ [ JsonPropertyName ( "max_prompt_images" ) ]
67+ public double MaxPromptImages { get ; set ; }
68+
69+ /// <summary>Maximum image size in bytes.</summary>
70+ [ JsonPropertyName ( "max_prompt_image_size" ) ]
71+ public double MaxPromptImageSize { get ; set ; }
72+ }
73+
5874/// <summary>Token limits for prompts, outputs, and context window.</summary>
5975public class ModelCapabilitiesLimits
6076{
@@ -69,6 +85,10 @@ public class ModelCapabilitiesLimits
6985 /// <summary>Maximum total context window size in tokens.</summary>
7086 [ JsonPropertyName ( "max_context_window_tokens" ) ]
7187 public double MaxContextWindowTokens { get ; set ; }
88+
89+ /// <summary>Vision-specific limits.</summary>
90+ [ JsonPropertyName ( "vision" ) ]
91+ public ModelCapabilitiesLimitsVision ? Vision { get ; set ; }
7292}
7393
7494/// <summary>Model capabilities and limits.</summary>
@@ -299,6 +319,66 @@ public class SessionModelSwitchToResult
299319 public string ? ModelId { get ; set ; }
300320}
301321
322+ /// <summary>Feature flags indicating what the model supports.</summary>
323+ public class ModelCapabilitiesOverrideSupports
324+ {
325+ /// <summary>Gets or sets the <c>vision</c> value.</summary>
326+ [ JsonPropertyName ( "vision" ) ]
327+ public bool ? Vision { get ; set ; }
328+
329+ /// <summary>Gets or sets the <c>reasoningEffort</c> value.</summary>
330+ [ JsonPropertyName ( "reasoningEffort" ) ]
331+ public bool ? ReasoningEffort { get ; set ; }
332+ }
333+
334+ /// <summary>RPC data type for ModelCapabilitiesOverrideLimitsVision operations.</summary>
335+ public class ModelCapabilitiesOverrideLimitsVision
336+ {
337+ /// <summary>MIME types the model accepts.</summary>
338+ [ JsonPropertyName ( "supported_media_types" ) ]
339+ public List < string > ? SupportedMediaTypes { get ; set ; }
340+
341+ /// <summary>Maximum number of images per prompt.</summary>
342+ [ JsonPropertyName ( "max_prompt_images" ) ]
343+ public double ? MaxPromptImages { get ; set ; }
344+
345+ /// <summary>Maximum image size in bytes.</summary>
346+ [ JsonPropertyName ( "max_prompt_image_size" ) ]
347+ public double ? MaxPromptImageSize { get ; set ; }
348+ }
349+
350+ /// <summary>Token limits for prompts, outputs, and context window.</summary>
351+ public class ModelCapabilitiesOverrideLimits
352+ {
353+ /// <summary>Gets or sets the <c>max_prompt_tokens</c> value.</summary>
354+ [ JsonPropertyName ( "max_prompt_tokens" ) ]
355+ public double ? MaxPromptTokens { get ; set ; }
356+
357+ /// <summary>Gets or sets the <c>max_output_tokens</c> value.</summary>
358+ [ JsonPropertyName ( "max_output_tokens" ) ]
359+ public double ? MaxOutputTokens { get ; set ; }
360+
361+ /// <summary>Maximum total context window size in tokens.</summary>
362+ [ JsonPropertyName ( "max_context_window_tokens" ) ]
363+ public double ? MaxContextWindowTokens { get ; set ; }
364+
365+ /// <summary>Gets or sets the <c>vision</c> value.</summary>
366+ [ JsonPropertyName ( "vision" ) ]
367+ public ModelCapabilitiesOverrideLimitsVision ? Vision { get ; set ; }
368+ }
369+
370+ /// <summary>Override individual model capabilities resolved by the runtime.</summary>
371+ public class ModelCapabilitiesOverride
372+ {
373+ /// <summary>Feature flags indicating what the model supports.</summary>
374+ [ JsonPropertyName ( "supports" ) ]
375+ public ModelCapabilitiesOverrideSupports ? Supports { get ; set ; }
376+
377+ /// <summary>Token limits for prompts, outputs, and context window.</summary>
378+ [ JsonPropertyName ( "limits" ) ]
379+ public ModelCapabilitiesOverrideLimits ? Limits { get ; set ; }
380+ }
381+
302382/// <summary>RPC data type for SessionModelSwitchTo operations.</summary>
303383internal class SessionModelSwitchToRequest
304384{
@@ -313,6 +393,10 @@ internal class SessionModelSwitchToRequest
313393 /// <summary>Reasoning effort level to use for the model.</summary>
314394 [ JsonPropertyName ( "reasoningEffort" ) ]
315395 public string ? ReasoningEffort { get ; set ; }
396+
397+ /// <summary>Override individual model capabilities resolved by the runtime.</summary>
398+ [ JsonPropertyName ( "modelCapabilities" ) ]
399+ public ModelCapabilitiesOverride ? ModelCapabilities { get ; set ; }
316400}
317401
318402/// <summary>RPC data type for SessionModeGet operations.</summary>
@@ -1537,9 +1621,9 @@ public async Task<SessionModelGetCurrentResult> GetCurrentAsync(CancellationToke
15371621 }
15381622
15391623 /// <summary>Calls "session.model.switchTo".</summary>
1540- public async Task < SessionModelSwitchToResult > SwitchToAsync ( string modelId , string ? reasoningEffort = null , CancellationToken cancellationToken = default )
1624+ public async Task < SessionModelSwitchToResult > SwitchToAsync ( string modelId , string ? reasoningEffort = null , ModelCapabilitiesOverride ? modelCapabilities = null , CancellationToken cancellationToken = default )
15411625 {
1542- var request = new SessionModelSwitchToRequest { SessionId = _sessionId , ModelId = modelId , ReasoningEffort = reasoningEffort } ;
1626+ var request = new SessionModelSwitchToRequest { SessionId = _sessionId , ModelId = modelId , ReasoningEffort = reasoningEffort , ModelCapabilities = modelCapabilities } ;
15431627 return await CopilotClient . InvokeRpcAsync < SessionModelSwitchToResult > ( _rpc , "session.model.switchTo" , [ request ] , cancellationToken ) ;
15441628 }
15451629}
@@ -2003,6 +2087,11 @@ public async Task<SessionShellKillResult> KillAsync(string processId, SessionShe
20032087[ JsonSerializable ( typeof ( ModelBilling ) ) ]
20042088[ JsonSerializable ( typeof ( ModelCapabilities ) ) ]
20052089[ JsonSerializable ( typeof ( ModelCapabilitiesLimits ) ) ]
2090+ [ JsonSerializable ( typeof ( ModelCapabilitiesLimitsVision ) ) ]
2091+ [ JsonSerializable ( typeof ( ModelCapabilitiesOverride ) ) ]
2092+ [ JsonSerializable ( typeof ( ModelCapabilitiesOverrideLimits ) ) ]
2093+ [ JsonSerializable ( typeof ( ModelCapabilitiesOverrideLimitsVision ) ) ]
2094+ [ JsonSerializable ( typeof ( ModelCapabilitiesOverrideSupports ) ) ]
20062095[ JsonSerializable ( typeof ( ModelCapabilitiesSupports ) ) ]
20072096[ JsonSerializable ( typeof ( ModelPolicy ) ) ]
20082097[ JsonSerializable ( typeof ( ModelsListResult ) ) ]
0 commit comments