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 #[serde(rename = "type")]
42 pub type_: ModelObjectType,
43 pub created_at: String,
44 pub display_name: String,
45 pub max_input_tokens: u64,
46 pub max_tokens: u64,
47 pub capabilities: ModelCapabilities,
48 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
49 pub extra: JsonObject,
50}
51
52#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
53pub struct ModelCapabilities {
54 pub batch: CapabilitySupport,
55 pub citations: CapabilitySupport,
56 pub code_execution: CapabilitySupport,
57 pub context_management: ContextManagementCapability,
58 pub effort: EffortCapability,
59 pub image_input: CapabilitySupport,
60 pub pdf_input: CapabilitySupport,
61 pub structured_outputs: CapabilitySupport,
62 pub thinking: ThinkingCapability,
63 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
64 pub extra: JsonObject,
65}
66
67#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
68pub struct CapabilitySupport {
69 pub supported: bool,
70 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
71 pub extra: JsonObject,
72}
73
74#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
75pub struct ContextManagementCapability {
76 pub supported: bool,
77 #[serde(skip_serializing_if = "Option::is_none")]
78 pub clear_thinking_20251015: Option<CapabilitySupport>,
79 #[serde(skip_serializing_if = "Option::is_none")]
80 pub clear_tool_uses_20250919: Option<CapabilitySupport>,
81 #[serde(skip_serializing_if = "Option::is_none")]
82 pub compact_20260112: Option<CapabilitySupport>,
83 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
84 pub extra: JsonObject,
85}
86
87#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
88pub struct EffortCapability {
89 pub supported: bool,
90 #[serde(skip_serializing_if = "Option::is_none")]
91 pub low: Option<CapabilitySupport>,
92 #[serde(skip_serializing_if = "Option::is_none")]
93 pub medium: Option<CapabilitySupport>,
94 #[serde(skip_serializing_if = "Option::is_none")]
95 pub high: Option<CapabilitySupport>,
96 #[serde(skip_serializing_if = "Option::is_none")]
97 pub xhigh: Option<CapabilitySupport>,
98 #[serde(skip_serializing_if = "Option::is_none")]
99 pub max: Option<CapabilitySupport>,
100 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
101 pub extra: JsonObject,
102}
103
104#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
105pub struct ThinkingCapability {
106 pub supported: bool,
107 pub types: ThinkingTypes,
108 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
109 pub extra: JsonObject,
110}
111
112#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
113pub struct ThinkingTypes {
114 #[serde(skip_serializing_if = "Option::is_none")]
115 pub adaptive: Option<CapabilitySupport>,
116 #[serde(skip_serializing_if = "Option::is_none")]
117 pub enabled: Option<CapabilitySupport>,
118 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
119 pub extra: JsonObject,
120}
121
122#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
123pub struct ModelError {
124 #[serde(rename = "type")]
125 pub type_: String,
126 pub message: String,
127 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
128 pub extra: BTreeMap<String, Value>,
129}