Skip to main content

gproxy_protocol/claude/count_tokens/
request.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::claude::count_tokens::types::{
6    AnthropicBeta, AnthropicVersion, BetaCacheControlEphemeral, BetaContextManagementConfig,
7    BetaMessageParam, BetaOutputConfig, BetaRequestMcpServerUrlDefinition, BetaSystemPrompt,
8    BetaThinkingConfigParam, BetaToolChoice, BetaToolUnion, HttpMethod, Model,
9};
10
11/// Request descriptor for Claude "Count Tokens" endpoint.
12#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
13pub struct ClaudeCountTokensRequest {
14    /// HTTP method.
15    pub method: HttpMethod,
16    /// Path parameters.
17    pub path: PathParameters,
18    /// Query parameters.
19    pub query: QueryParameters,
20    /// Request headers.
21    pub headers: RequestHeaders,
22    /// Request body.
23    pub body: RequestBody,
24}
25
26impl Default for ClaudeCountTokensRequest {
27    fn default() -> Self {
28        Self {
29            method: HttpMethod::Post,
30            path: PathParameters::default(),
31            query: QueryParameters::default(),
32            headers: RequestHeaders::default(),
33            body: RequestBody::default(),
34        }
35    }
36}
37
38/// Count tokens endpoint does not define path params.
39#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
40pub struct PathParameters {}
41
42/// Count tokens endpoint does not define query params.
43#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
44pub struct QueryParameters {}
45
46#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
47pub struct RequestHeaders {
48    /// Anthropic API version.
49    #[serde(rename = "anthropic-version")]
50    pub anthropic_version: AnthropicVersion,
51    /// Optional beta version(s).
52    #[serde(
53        rename = "anthropic-beta",
54        default,
55        skip_serializing_if = "Option::is_none"
56    )]
57    pub anthropic_beta: Option<Vec<AnthropicBeta>>,
58    #[serde(flatten, default, skip_serializing_if = "BTreeMap::is_empty")]
59    pub extra: BTreeMap<String, String>,
60}
61
62#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
63pub struct RequestBody {
64    /// Input messages.
65    pub messages: Vec<BetaMessageParam>,
66    /// Target model identifier.
67    pub model: Model,
68    /// Optional context management rules.
69    #[serde(default, skip_serializing_if = "Option::is_none")]
70    pub context_management: Option<BetaContextManagementConfig>,
71    /// Optional MCP servers.
72    #[serde(default, skip_serializing_if = "Option::is_none")]
73    pub mcp_servers: Option<Vec<BetaRequestMcpServerUrlDefinition>>,
74    /// Optional top-level cache control for automatic prompt caching.
75    #[serde(default, skip_serializing_if = "Option::is_none")]
76    pub cache_control: Option<BetaCacheControlEphemeral>,
77    /// Optional output configuration.
78    #[serde(default, skip_serializing_if = "Option::is_none")]
79    pub output_config: Option<BetaOutputConfig>,
80    /// Optional speed mode.
81    #[serde(default, skip_serializing_if = "Option::is_none")]
82    pub speed: Option<String>,
83    /// Optional system prompt.
84    #[serde(default, skip_serializing_if = "Option::is_none")]
85    pub system: Option<BetaSystemPrompt>,
86    /// Optional thinking configuration.
87    #[serde(default, skip_serializing_if = "Option::is_none")]
88    pub thinking: Option<BetaThinkingConfigParam>,
89    /// Optional tool choice policy.
90    #[serde(default, skip_serializing_if = "Option::is_none")]
91    pub tool_choice: Option<BetaToolChoice>,
92    /// Optional tool definitions.
93    #[serde(default, skip_serializing_if = "Option::is_none")]
94    pub tools: Option<Vec<BetaToolUnion>>,
95}
96
97impl Default for RequestBody {
98    fn default() -> Self {
99        Self {
100            messages: Vec::new(),
101            model: Model::Custom(String::new()),
102            context_management: None,
103            mcp_servers: None,
104            cache_control: None,
105            output_config: None,
106            speed: None,
107            system: None,
108            thinking: None,
109            tool_choice: None,
110            tools: None,
111        }
112    }
113}