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