Skip to main content

gproxy_protocol/claude/message/
mod.rs

1use serde::{Deserialize, Serialize};
2
3use super::common::{
4    AnthropicBetaHeaders, AssistantRole, CacheControl, ClaudeModel, Container, ContainerParam,
5    ContentBlock, ContextManagementConfig, ContextManagementResponse, Diagnostics,
6    DiagnosticsParam, FallbackCreditTokenParam, FallbacksParam, InferenceGeo, InputTransformation,
7    JsonSchemaFormat, McpServer, MessageObjectType, MessageParam, Metadata, OutputConfig,
8    RequestServiceTier, Speed, StopDetails, StopReason, SystemPrompt, ThinkingConfig, Tool,
9    ToolChoice, Usage,
10};
11
12pub mod stream;
13
14pub use stream::*;
15
16pub type CreateMessageRequestHeaders = AnthropicBetaHeaders;
17
18#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
19#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
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    /// Redeem a prior refusal's fallback credit on retry.
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub fallback_credit_token: Option<FallbackCreditTokenParam>,
35    /// Server-side retry routing used when the requested model refuses.
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub fallbacks: Option<FallbacksParam>,
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 = "serde_json::Map::is_empty")]
75    pub rest: serde_json::Map<String, serde_json::Value>,
76}
77
78#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
79#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
80pub struct CreateMessageResponseBody {
81    pub id: String,
82    #[serde(rename = "type")]
83    pub type_: MessageObjectType,
84    pub role: AssistantRole,
85    pub content: Vec<ContentBlock>,
86    pub model: ClaudeModel,
87    pub stop_reason: StopReason,
88    pub stop_sequence: Option<String>,
89    pub usage: Usage,
90    #[serde(skip_serializing_if = "Option::is_none")]
91    pub container: Option<Container>,
92    #[serde(skip_serializing_if = "Option::is_none")]
93    pub context_management: Option<ContextManagementResponse>,
94    #[serde(skip_serializing_if = "Option::is_none")]
95    pub diagnostics: Option<Diagnostics>,
96    #[serde(skip_serializing_if = "Option::is_none")]
97    pub input_transformations: Option<Vec<InputTransformation>>,
98    #[serde(skip_serializing_if = "Option::is_none")]
99    pub stop_details: Option<StopDetails>,
100    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
101    pub rest: serde_json::Map<String, serde_json::Value>,
102}