Skip to main content

gproxy_protocol/protocol/claude/message/
mod.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::common::{
6    AnthropicBetaHeaders, AssistantRole, CacheControl, ClaudeModel, Container, ContainerParam,
7    ContentBlock, ContextManagementConfig, ContextManagementResponse, Diagnostics,
8    DiagnosticsParam, FallbackParam, InferenceGeo, JsonObject, JsonSchemaFormat, McpServer,
9    MessageObjectType, MessageParam, Metadata, OutputConfig, RequestServiceTier, Speed,
10    StopDetails, StopReason, SystemPrompt, ThinkingConfig, Tool, ToolChoice, Usage,
11};
12
13pub mod stream;
14
15pub use stream::*;
16
17pub type CreateMessageRequestHeaders = AnthropicBetaHeaders;
18
19#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
20pub struct CreateMessageRequestBody {
21    pub model: ClaudeModel,
22    pub messages: Vec<MessageParam>,
23    pub max_tokens: u64,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub cache_control: Option<CacheControl>,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub container: Option<ContainerParam>,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub context_management: Option<ContextManagementConfig>,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub diagnostics: Option<DiagnosticsParam>,
32    /// Beta `fallback-credit-2026-06-01`: redeem a prior refusal's credit on retry.
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub fallback_credit_token: Option<String>,
35    /// Beta `server-side-fallback-2026-06-01`: server-side retry chain on refusal.
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub fallbacks: Option<Vec<FallbackParam>>,
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub inference_geo: Option<InferenceGeo>,
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub mcp_servers: Option<Vec<McpServer>>,
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub metadata: Option<Metadata>,
44    #[serde(skip_serializing_if = "Option::is_none")]
45    pub output_config: Option<OutputConfig>,
46    /// Deprecated. Use `output_config.format` instead.
47    #[deprecated(note = "use output_config.format instead")]
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub output_format: Option<JsonSchemaFormat>,
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub service_tier: Option<RequestServiceTier>,
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub speed: Option<Speed>,
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub stop_sequences: Option<Vec<String>>,
56    #[serde(skip_serializing_if = "Option::is_none")]
57    pub stream: Option<bool>,
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub system: Option<SystemPrompt>,
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub temperature: Option<f64>,
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub thinking: Option<ThinkingConfig>,
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub tool_choice: Option<ToolChoice>,
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub tools: Option<Vec<Tool>>,
68    #[serde(skip_serializing_if = "Option::is_none")]
69    pub top_k: Option<i64>,
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub top_p: Option<f64>,
72    #[serde(skip_serializing_if = "Option::is_none")]
73    pub user_profile_id: Option<String>,
74    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
75    pub extra: JsonObject,
76}
77
78#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
79pub struct CreateMessageResponseBody {
80    pub id: String,
81    #[serde(rename = "type")]
82    pub type_: MessageObjectType,
83    pub role: AssistantRole,
84    pub content: Vec<ContentBlock>,
85    pub model: ClaudeModel,
86    pub stop_reason: StopReason,
87    pub stop_sequence: Option<String>,
88    pub usage: Usage,
89    #[serde(skip_serializing_if = "Option::is_none")]
90    pub container: Option<Container>,
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub context_management: Option<ContextManagementResponse>,
93    #[serde(skip_serializing_if = "Option::is_none")]
94    pub diagnostics: Option<Diagnostics>,
95    #[serde(skip_serializing_if = "Option::is_none")]
96    pub stop_details: Option<StopDetails>,
97    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
98    pub extra: JsonObject,
99}