Skip to main content

gproxy_protocol/claude/common/
thinking.rs

1use serde::{Deserialize, Serialize};
2
3use super::{ThinkingDisplay, ThinkingDroppedReason, ThinkingPrefixMismatchBehavior};
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
6#[serde(untagged)]
7#[non_exhaustive]
8pub enum ThinkingConfig {
9    Enabled(ThinkingEnabled),
10    Disabled(ThinkingDisabled),
11    Adaptive(ThinkingAdaptive),
12    Unknown(serde_json::Value),
13}
14
15#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
16#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
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 block_binding: Option<ThinkingBlockBinding>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub display: Option<ThinkingDisplay>,
25    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
26    pub rest: serde_json::Map<String, serde_json::Value>,
27}
28
29#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
30#[non_exhaustive]
31pub enum ThinkingEnabledType {
32    #[serde(rename = "enabled")]
33    Enabled,
34}
35
36#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
37#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
38pub struct ThinkingDisabled {
39    #[serde(rename = "type")]
40    pub type_: ThinkingDisabledType,
41    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
42    pub rest: serde_json::Map<String, serde_json::Value>,
43}
44
45#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
46#[non_exhaustive]
47pub enum ThinkingDisabledType {
48    #[serde(rename = "disabled")]
49    Disabled,
50}
51
52#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
53#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
54pub struct ThinkingAdaptive {
55    #[serde(rename = "type")]
56    pub type_: ThinkingAdaptiveType,
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub block_binding: Option<ThinkingBlockBinding>,
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub display: Option<ThinkingDisplay>,
61    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
62    pub rest: serde_json::Map<String, serde_json::Value>,
63}
64
65#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
66#[non_exhaustive]
67pub enum ThinkingAdaptiveType {
68    #[serde(rename = "adaptive")]
69    Adaptive,
70}
71
72#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
73#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
74pub struct ThinkingBlockBinding {
75    #[serde(skip_serializing_if = "Option::is_none")]
76    pub prefix_mismatch_behavior: Option<ThinkingPrefixMismatchBehavior>,
77    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
78    pub rest: serde_json::Map<String, serde_json::Value>,
79}
80
81#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
82#[serde(untagged)]
83#[non_exhaustive]
84pub enum InputTransformation {
85    ThinkingDropped(ThinkingDroppedInputTransformation),
86    Unknown(serde_json::Value),
87}
88
89#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
90#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
91pub struct ThinkingDroppedInputTransformation {
92    pub path: String,
93    pub reason: ThinkingDroppedReason,
94    #[serde(rename = "type")]
95    pub type_: ThinkingDroppedInputTransformationType,
96    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
97    pub rest: serde_json::Map<String, serde_json::Value>,
98}
99
100#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
101#[non_exhaustive]
102pub enum ThinkingDroppedInputTransformationType {
103    #[serde(rename = "thinking_dropped")]
104    ThinkingDropped,
105}