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