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}