Skip to main content

gproxy_protocol/claude/common/
diagnostics.rs

1use serde::{Deserialize, Serialize};
2
3use super::TypedObject;
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
6#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
7pub struct DiagnosticsParam {
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub previous_message_id: Option<Option<String>>,
10    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
11    pub rest: serde_json::Map<String, serde_json::Value>,
12}
13
14#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
15#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
16pub struct Diagnostics {
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub cache_miss_reason: Option<CacheMissReason>,
19    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
20    pub rest: serde_json::Map<String, serde_json::Value>,
21}
22
23#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
24#[serde(untagged)]
25#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
26pub enum CacheMissReason {
27    Known(KnownCacheMissReason),
28    Unknown(TypedObject),
29}
30
31#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
32#[serde(tag = "type")]
33#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
34pub enum KnownCacheMissReason {
35    #[serde(rename = "model_changed")]
36    ModelChanged {
37        cache_missed_input_tokens: u64,
38        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
39        rest: serde_json::Map<String, serde_json::Value>,
40    },
41    #[serde(rename = "system_changed")]
42    SystemChanged {
43        cache_missed_input_tokens: u64,
44        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
45        rest: serde_json::Map<String, serde_json::Value>,
46    },
47    #[serde(rename = "tools_changed")]
48    ToolsChanged {
49        cache_missed_input_tokens: u64,
50        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
51        rest: serde_json::Map<String, serde_json::Value>,
52    },
53    #[serde(rename = "messages_changed")]
54    MessagesChanged {
55        cache_missed_input_tokens: u64,
56        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
57        rest: serde_json::Map<String, serde_json::Value>,
58    },
59    #[serde(rename = "previous_message_not_found")]
60    PreviousMessageNotFound {
61        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
62        rest: serde_json::Map<String, serde_json::Value>,
63    },
64    #[serde(rename = "unavailable")]
65    Unavailable {
66        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
67        rest: serde_json::Map<String, serde_json::Value>,
68    },
69}