Skip to main content

gproxy_protocol/protocol/claude/common/blocks/
base.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::super::{CacheControl, Citation, CitationConfig, JsonObject};
6use super::{DocumentSource, ImageSource};
7
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
9#[non_exhaustive]
10pub struct TextBlock {
11    pub text: String,
12    #[serde(rename = "type")]
13    pub type_: TextBlockType,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub cache_control: Option<CacheControl>,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub citations: Option<Vec<Citation>>,
18    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
19    pub extra: JsonObject,
20}
21
22#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
23#[non_exhaustive]
24pub enum TextBlockType {
25    #[serde(rename = "text")]
26    Text,
27}
28
29#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
30#[non_exhaustive]
31pub struct ImageBlock {
32    pub source: ImageSource,
33    #[serde(rename = "type")]
34    pub type_: ImageBlockType,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub cache_control: Option<CacheControl>,
37}
38
39#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
40#[non_exhaustive]
41pub enum ImageBlockType {
42    #[serde(rename = "image")]
43    Image,
44}
45
46#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
47#[non_exhaustive]
48pub struct DocumentBlock {
49    pub source: DocumentSource,
50    #[serde(rename = "type")]
51    pub type_: DocumentBlockType,
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub cache_control: Option<CacheControl>,
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub citations: Option<CitationConfig>,
56    #[serde(skip_serializing_if = "Option::is_none")]
57    pub context: Option<String>,
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub title: Option<String>,
60}
61
62#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
63#[non_exhaustive]
64pub enum DocumentBlockType {
65    #[serde(rename = "document")]
66    Document,
67}
68
69#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
70#[non_exhaustive]
71pub struct SearchResultBlock {
72    pub content: Vec<TextBlock>,
73    pub source: String,
74    pub title: String,
75    #[serde(rename = "type")]
76    pub type_: SearchResultBlockType,
77    #[serde(skip_serializing_if = "Option::is_none")]
78    pub cache_control: Option<CacheControl>,
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub citations: Option<CitationConfig>,
81}
82
83#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
84#[non_exhaustive]
85pub enum SearchResultBlockType {
86    #[serde(rename = "search_result")]
87    SearchResult,
88}
89
90#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
91#[non_exhaustive]
92pub struct ThinkingBlock {
93    pub signature: String,
94    pub thinking: String,
95    #[serde(rename = "type")]
96    pub type_: ThinkingBlockType,
97}
98
99#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
100#[non_exhaustive]
101pub enum ThinkingBlockType {
102    #[serde(rename = "thinking")]
103    Thinking,
104}
105
106#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
107#[non_exhaustive]
108pub struct RedactedThinkingBlock {
109    pub data: String,
110    #[serde(rename = "type")]
111    pub type_: RedactedThinkingBlockType,
112}
113
114#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
115#[non_exhaustive]
116pub enum RedactedThinkingBlockType {
117    #[serde(rename = "redacted_thinking")]
118    RedactedThinking,
119}