gproxy_protocol/protocol/openai/generate_content/response_items/
content.rs1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::super::super::common::*;
6use super::ResponseAnnotation;
7
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
9#[serde(untagged)]
10pub enum ResponseOutput {
11 Text(String),
12 Parts(Vec<ResponseToolOutputContentPart>),
13}
14
15#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
16#[serde(untagged)]
17pub enum ResponseEasyInputContent {
18 Text(String),
19 Parts(Vec<ResponseInputContentPart>),
20}
21
22#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
23#[serde(tag = "type")]
24pub enum ResponseInputContentPart {
25 #[serde(rename = "input_text")]
26 InputText {
27 text: String,
28 #[serde(skip_serializing_if = "Option::is_none")]
29 prompt_cache_breakpoint: Option<PromptCacheBreakpoint>,
30 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
31 extra: Extra,
32 },
33 #[serde(rename = "input_image")]
34 InputImage {
35 #[serde(skip_serializing_if = "Option::is_none")]
36 detail: Option<DetailLevel>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 file_id: Option<String>,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 image_url: Option<String>,
41 #[serde(skip_serializing_if = "Option::is_none")]
42 prompt_cache_breakpoint: Option<PromptCacheBreakpoint>,
43 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
44 extra: Extra,
45 },
46 #[serde(rename = "input_file")]
47 InputFile {
48 #[serde(skip_serializing_if = "Option::is_none")]
49 detail: Option<InputFileDetailLevel>,
50 #[serde(skip_serializing_if = "Option::is_none")]
51 file_data: Option<String>,
52 #[serde(skip_serializing_if = "Option::is_none")]
53 file_id: Option<String>,
54 #[serde(skip_serializing_if = "Option::is_none")]
55 file_url: Option<String>,
56 #[serde(skip_serializing_if = "Option::is_none")]
57 filename: Option<String>,
58 #[serde(skip_serializing_if = "Option::is_none")]
59 prompt_cache_breakpoint: Option<PromptCacheBreakpoint>,
60 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
61 extra: Extra,
62 },
63 #[serde(rename = "input_audio")]
64 InputAudio {
65 input_audio: InputAudioContent,
66 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
67 extra: Extra,
68 },
69}
70
71#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
72#[serde(tag = "type")]
73pub enum ResponseToolOutputContentPart {
74 #[serde(rename = "input_text")]
75 InputText {
76 text: String,
77 #[serde(skip_serializing_if = "Option::is_none")]
78 prompt_cache_breakpoint: Option<PromptCacheBreakpoint>,
79 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
80 extra: Extra,
81 },
82 #[serde(rename = "input_image")]
83 InputImage {
84 #[serde(skip_serializing_if = "Option::is_none")]
85 detail: Option<DetailLevel>,
86 #[serde(skip_serializing_if = "Option::is_none")]
87 file_id: Option<String>,
88 #[serde(skip_serializing_if = "Option::is_none")]
89 image_url: Option<String>,
90 #[serde(skip_serializing_if = "Option::is_none")]
91 prompt_cache_breakpoint: Option<PromptCacheBreakpoint>,
92 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
93 extra: Extra,
94 },
95 #[serde(rename = "input_file")]
96 InputFile {
97 #[serde(skip_serializing_if = "Option::is_none")]
98 detail: Option<InputFileDetailLevel>,
99 #[serde(skip_serializing_if = "Option::is_none")]
100 file_data: Option<String>,
101 #[serde(skip_serializing_if = "Option::is_none")]
102 file_id: Option<String>,
103 #[serde(skip_serializing_if = "Option::is_none")]
104 file_url: Option<String>,
105 #[serde(skip_serializing_if = "Option::is_none")]
106 filename: Option<String>,
107 #[serde(skip_serializing_if = "Option::is_none")]
108 prompt_cache_breakpoint: Option<PromptCacheBreakpoint>,
109 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
110 extra: Extra,
111 },
112}
113
114#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
115#[serde(tag = "type")]
116pub enum ResponseMessageOutputContentPart {
117 #[serde(rename = "output_text")]
118 OutputText {
119 #[serde(default, skip_serializing_if = "Vec::is_empty")]
120 annotations: Vec<ResponseAnnotation>,
121 #[serde(skip_serializing_if = "Option::is_none")]
122 logprobs: Option<Vec<TokenLogprob>>,
123 text: String,
124 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
125 extra: Extra,
126 },
127 #[serde(rename = "refusal")]
128 Refusal {
129 refusal: String,
130 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
131 extra: Extra,
132 },
133}
134
135#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
136#[serde(tag = "type")]
137pub enum ResponseOutputContentPart {
138 #[serde(rename = "output_text")]
139 OutputText {
140 #[serde(default, skip_serializing_if = "Vec::is_empty")]
141 annotations: Vec<ResponseAnnotation>,
142 #[serde(skip_serializing_if = "Option::is_none")]
143 logprobs: Option<Vec<TokenLogprob>>,
144 text: String,
145 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
146 extra: Extra,
147 },
148 #[serde(rename = "refusal")]
149 Refusal {
150 refusal: String,
151 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
152 extra: Extra,
153 },
154 #[serde(rename = "reasoning_text")]
155 ReasoningText {
156 text: String,
157 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
158 extra: Extra,
159 },
160}
161
162pub type ResponseContentPart = ResponseOutputContentPart;
163
164#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
165pub struct InputAudioContent {
166 pub data: String,
167 pub format: InputAudioFormat,
168 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
169 pub extra: Extra,
170}