Skip to main content

gproxy_protocol/claude/
models.rs

1use super::common::{AnthropicBetaHeaders, ClaudeModel, ModelObjectType};
2use serde::{Deserialize, Serialize};
3
4pub type ListModelsRequestHeaders = AnthropicBetaHeaders;
5pub type RetrieveModelRequestHeaders = AnthropicBetaHeaders;
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
8#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
9pub struct ListModelsQuery {
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub after_id: Option<String>,
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub before_id: Option<String>,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub limit: Option<u64>,
16    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
17    pub rest: serde_json::Map<String, serde_json::Value>,
18}
19
20#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
21#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
22pub struct RetrieveModelPath {
23    pub model_id: ClaudeModel,
24    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
25    pub rest: serde_json::Map<String, serde_json::Value>,
26}
27
28#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
29#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
30pub struct ListModelsResponse {
31    pub data: Vec<ModelInfo>,
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub first_id: Option<String>,
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub has_more: Option<bool>,
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub last_id: Option<String>,
38    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
39    pub rest: serde_json::Map<String, serde_json::Value>,
40}
41
42#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
43#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
44pub struct ModelInfo {
45    pub id: ClaudeModel,
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub allowed_fallback_models: Option<Vec<ClaudeModel>>,
48    #[serde(rename = "type")]
49    pub type_: ModelObjectType,
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub created_at: Option<String>,
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub display_name: Option<String>,
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub max_input_tokens: Option<u64>,
56    #[serde(skip_serializing_if = "Option::is_none")]
57    pub max_tokens: Option<u64>,
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub capabilities: Option<ModelCapabilities>,
60    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
61    pub rest: serde_json::Map<String, serde_json::Value>,
62}
63
64#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
65#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
66pub struct ModelCapabilities {
67    pub batch: CapabilitySupport,
68    pub citations: CapabilitySupport,
69    pub code_execution: CapabilitySupport,
70    pub context_management: ContextManagementCapability,
71    pub effort: EffortCapability,
72    pub image_input: CapabilitySupport,
73    pub pdf_input: CapabilitySupport,
74    pub structured_outputs: CapabilitySupport,
75    pub thinking: ThinkingCapability,
76    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
77    pub rest: serde_json::Map<String, serde_json::Value>,
78}
79
80#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
81#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
82pub struct CapabilitySupport {
83    pub supported: bool,
84    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
85    pub rest: serde_json::Map<String, serde_json::Value>,
86}
87
88#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
89#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
90pub struct ContextManagementCapability {
91    pub supported: bool,
92    #[serde(skip_serializing_if = "Option::is_none")]
93    pub clear_thinking_20251015: Option<CapabilitySupport>,
94    #[serde(skip_serializing_if = "Option::is_none")]
95    pub clear_tool_uses_20250919: Option<CapabilitySupport>,
96    #[serde(skip_serializing_if = "Option::is_none")]
97    pub compact_20260112: Option<CapabilitySupport>,
98    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
99    pub rest: serde_json::Map<String, serde_json::Value>,
100}
101
102#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
103#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
104pub struct EffortCapability {
105    pub supported: bool,
106    #[serde(skip_serializing_if = "Option::is_none")]
107    pub low: Option<CapabilitySupport>,
108    #[serde(skip_serializing_if = "Option::is_none")]
109    pub medium: Option<CapabilitySupport>,
110    #[serde(skip_serializing_if = "Option::is_none")]
111    pub high: Option<CapabilitySupport>,
112    #[serde(skip_serializing_if = "Option::is_none")]
113    pub xhigh: Option<CapabilitySupport>,
114    #[serde(skip_serializing_if = "Option::is_none")]
115    pub max: Option<CapabilitySupport>,
116    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
117    pub rest: serde_json::Map<String, serde_json::Value>,
118}
119
120#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
121#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
122pub struct ThinkingCapability {
123    pub supported: bool,
124    pub types: ThinkingTypes,
125    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
126    pub rest: serde_json::Map<String, serde_json::Value>,
127}
128
129#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
130#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
131pub struct ThinkingTypes {
132    #[serde(skip_serializing_if = "Option::is_none")]
133    pub adaptive: Option<CapabilitySupport>,
134    #[serde(skip_serializing_if = "Option::is_none")]
135    pub enabled: Option<CapabilitySupport>,
136    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
137    pub rest: serde_json::Map<String, serde_json::Value>,
138}
139
140#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
141#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
142pub struct ModelError {
143    #[serde(rename = "type")]
144    pub type_: String,
145    pub message: String,
146    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
147    pub rest: serde_json::Map<String, serde_json::Value>,
148}