Skip to main content

gproxy_protocol/claude/create_message/
request.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::claude::create_message::types::{
6    AnthropicBeta, AnthropicVersion, BetaCacheControlEphemeral, BetaContainerRef,
7    BetaContextManagementConfig, BetaMessageParam, BetaMetadata, BetaOutputConfig,
8    BetaRequestMcpServerUrlDefinition, BetaServiceTierParam, BetaSpeed, BetaSystemPrompt,
9    BetaThinkingConfigParam, BetaToolChoice, BetaToolUnion, HttpMethod, Model,
10};
11
12/// Request descriptor for Claude "Create a Message" endpoint.
13#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
14pub struct ClaudeCreateMessageRequest {
15    /// HTTP method.
16    pub method: HttpMethod,
17    /// Path parameters.
18    pub path: PathParameters,
19    /// Query parameters.
20    pub query: QueryParameters,
21    /// Request headers.
22    pub headers: RequestHeaders,
23    /// Request body.
24    pub body: RequestBody,
25}
26
27impl Default for ClaudeCreateMessageRequest {
28    fn default() -> Self {
29        Self {
30            method: HttpMethod::Post,
31            path: PathParameters::default(),
32            query: QueryParameters::default(),
33            headers: RequestHeaders::default(),
34            body: RequestBody::default(),
35        }
36    }
37}
38
39/// Create-message endpoint does not define path params.
40#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
41pub struct PathParameters {}
42
43/// Create-message endpoint does not define query params.
44#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
45pub struct QueryParameters {}
46
47#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
48pub struct RequestHeaders {
49    /// Anthropic API version.
50    #[serde(rename = "anthropic-version")]
51    pub anthropic_version: AnthropicVersion,
52    /// Optional beta version(s).
53    #[serde(
54        rename = "anthropic-beta",
55        default,
56        skip_serializing_if = "Option::is_none"
57    )]
58    pub anthropic_beta: Option<Vec<AnthropicBeta>>,
59    #[serde(flatten, default, skip_serializing_if = "BTreeMap::is_empty")]
60    pub extra: BTreeMap<String, String>,
61}
62
63#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
64pub struct RequestBody {
65    /// Maximum number of tokens to generate.
66    pub max_tokens: u64,
67    /// Input messages.
68    pub messages: Vec<BetaMessageParam>,
69    /// Target model identifier.
70    pub model: Model,
71    /// Optional container id or container parameters.
72    #[serde(default, skip_serializing_if = "Option::is_none")]
73    pub container: Option<BetaContainerRef>,
74    /// Optional context management rules.
75    #[serde(default, skip_serializing_if = "Option::is_none")]
76    pub context_management: Option<BetaContextManagementConfig>,
77    /// Optional inference geography hint.
78    #[serde(default, skip_serializing_if = "Option::is_none")]
79    pub inference_geo: Option<String>,
80    /// Optional MCP servers.
81    #[serde(default, skip_serializing_if = "Option::is_none")]
82    pub mcp_servers: Option<Vec<BetaRequestMcpServerUrlDefinition>>,
83    /// Optional per-request metadata.
84    #[serde(default, skip_serializing_if = "Option::is_none")]
85    pub metadata: Option<BetaMetadata>,
86    /// Optional top-level cache control for automatic prompt caching.
87    #[serde(default, skip_serializing_if = "Option::is_none")]
88    pub cache_control: Option<BetaCacheControlEphemeral>,
89    /// Optional output configuration.
90    #[serde(default, skip_serializing_if = "Option::is_none")]
91    pub output_config: Option<BetaOutputConfig>,
92    /// Optional service tier selection.
93    #[serde(default, skip_serializing_if = "Option::is_none")]
94    pub service_tier: Option<BetaServiceTierParam>,
95    /// Optional inference speed mode.
96    #[serde(default, skip_serializing_if = "Option::is_none")]
97    pub speed: Option<BetaSpeed>,
98    /// Optional custom stop sequences.
99    #[serde(default, skip_serializing_if = "Option::is_none")]
100    pub stop_sequences: Option<Vec<String>>,
101    /// Optional streaming toggle.
102    #[serde(default, skip_serializing_if = "Option::is_none")]
103    pub stream: Option<bool>,
104    /// Optional system prompt.
105    #[serde(default, skip_serializing_if = "Option::is_none")]
106    pub system: Option<BetaSystemPrompt>,
107    /// Optional temperature.
108    #[serde(default, skip_serializing_if = "Option::is_none")]
109    pub temperature: Option<f64>,
110    /// Optional thinking configuration.
111    #[serde(default, skip_serializing_if = "Option::is_none")]
112    pub thinking: Option<BetaThinkingConfigParam>,
113    /// Optional tool choice policy.
114    #[serde(default, skip_serializing_if = "Option::is_none")]
115    pub tool_choice: Option<BetaToolChoice>,
116    /// Optional tool definitions.
117    #[serde(default, skip_serializing_if = "Option::is_none")]
118    pub tools: Option<Vec<BetaToolUnion>>,
119    /// Optional top-k sampling.
120    #[serde(default, skip_serializing_if = "Option::is_none")]
121    pub top_k: Option<u64>,
122    /// Optional top-p sampling.
123    #[serde(default, skip_serializing_if = "Option::is_none")]
124    pub top_p: Option<f64>,
125}
126
127impl Default for RequestBody {
128    fn default() -> Self {
129        Self {
130            max_tokens: 0,
131            messages: Vec::new(),
132            model: Model::Custom(String::new()),
133            container: None,
134            context_management: None,
135            inference_geo: None,
136            mcp_servers: None,
137            metadata: None,
138            cache_control: None,
139            output_config: None,
140            service_tier: None,
141            speed: None,
142            stop_sequences: None,
143            stream: None,
144            system: None,
145            temperature: None,
146            thinking: None,
147            tool_choice: None,
148            tools: None,
149            top_k: None,
150            top_p: None,
151        }
152    }
153}