Skip to main content

gproxy_protocol/protocol/claude/common/
thinking.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::{JsonObject, ThinkingDisplay, TypedObject};
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
8#[serde(untagged)]
9pub enum ThinkingConfig {
10    Enabled(ThinkingEnabled),
11    Disabled(ThinkingDisabled),
12    Adaptive(ThinkingAdaptive),
13    Unknown(TypedObject),
14}
15
16#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
17pub struct ThinkingEnabled {
18    pub budget_tokens: u64,
19    #[serde(rename = "type")]
20    pub type_: ThinkingEnabledType,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub display: Option<ThinkingDisplay>,
23    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
24    pub extra: JsonObject,
25}
26
27#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
28pub enum ThinkingEnabledType {
29    #[serde(rename = "enabled")]
30    Enabled,
31}
32
33#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
34pub struct ThinkingDisabled {
35    #[serde(rename = "type")]
36    pub type_: ThinkingDisabledType,
37    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
38    pub extra: JsonObject,
39}
40
41#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
42pub enum ThinkingDisabledType {
43    #[serde(rename = "disabled")]
44    Disabled,
45}
46
47#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
48pub struct ThinkingAdaptive {
49    #[serde(rename = "type")]
50    pub type_: ThinkingAdaptiveType,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub display: Option<ThinkingDisplay>,
53    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
54    pub extra: JsonObject,
55}
56
57#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
58pub enum ThinkingAdaptiveType {
59    #[serde(rename = "adaptive")]
60    Adaptive,
61}