gproxy_protocol/claude/common/
thinking.rs1use 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}