Skip to main content

gproxy_protocol/protocol/openai/generate_content/
responses_tail.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::super::common::*;
6use super::response_items::ResponseOutputItem;
7use super::response_tools::ResponseTool;
8use super::responses::{ResponseConversationParam, ResponseInput};
9
10#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
11pub struct ContextManagement {
12    #[serde(rename = "type")]
13    pub type_: ContextManagementType,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub compact_threshold: Option<f64>,
16    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
17    pub extra: Extra,
18}
19
20#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
21pub struct PromptRef {
22    pub id: String,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub version: Option<String>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub variables: Option<PromptVariables>,
27    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
28    pub extra: Extra,
29}
30
31pub type PromptVariables = BTreeMap<String, PromptVariableValue>;
32
33#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
34#[serde(untagged)]
35pub enum PromptVariableValue {
36    Text(String),
37    InputContent(PromptVariableInputContentPart),
38}
39
40#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
41#[serde(tag = "type")]
42pub enum PromptVariableInputContentPart {
43    #[serde(rename = "input_text")]
44    InputText {
45        text: String,
46        #[serde(skip_serializing_if = "Option::is_none")]
47        prompt_cache_breakpoint: Option<PromptCacheBreakpoint>,
48        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
49        extra: Extra,
50    },
51    #[serde(rename = "input_image")]
52    InputImage {
53        #[serde(skip_serializing_if = "Option::is_none")]
54        detail: Option<DetailLevel>,
55        #[serde(skip_serializing_if = "Option::is_none")]
56        file_id: Option<String>,
57        #[serde(skip_serializing_if = "Option::is_none")]
58        image_url: Option<String>,
59        #[serde(skip_serializing_if = "Option::is_none")]
60        prompt_cache_breakpoint: Option<PromptCacheBreakpoint>,
61        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
62        extra: Extra,
63    },
64    #[serde(rename = "input_file")]
65    InputFile {
66        #[serde(skip_serializing_if = "Option::is_none")]
67        detail: Option<InputFileDetailLevel>,
68        #[serde(skip_serializing_if = "Option::is_none")]
69        file_data: Option<String>,
70        #[serde(skip_serializing_if = "Option::is_none")]
71        file_id: Option<String>,
72        #[serde(skip_serializing_if = "Option::is_none")]
73        file_url: Option<String>,
74        #[serde(skip_serializing_if = "Option::is_none")]
75        filename: Option<String>,
76        #[serde(skip_serializing_if = "Option::is_none")]
77        prompt_cache_breakpoint: Option<PromptCacheBreakpoint>,
78        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
79        extra: Extra,
80    },
81}
82
83#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
84pub struct ReasoningConfig {
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub context: Option<ReasoningContext>,
87    #[serde(skip_serializing_if = "Option::is_none")]
88    pub effort: Option<ReasoningEffort>,
89    #[serde(skip_serializing_if = "Option::is_none")]
90    pub mode: Option<ReasoningMode>,
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub summary: Option<ReasoningSummary>,
93    #[serde(skip_serializing_if = "Option::is_none")]
94    pub generate_summary: Option<ReasoningSummary>,
95    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
96    pub extra: Extra,
97}
98
99#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
100pub struct TextConfig {
101    #[serde(skip_serializing_if = "Option::is_none")]
102    pub format: Option<ResponseFormat>,
103    #[serde(skip_serializing_if = "Option::is_none")]
104    pub verbosity: Option<Verbosity>,
105    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
106    pub extra: Extra,
107}
108
109#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
110pub struct ResponseStreamOptions {
111    #[serde(skip_serializing_if = "Option::is_none")]
112    pub include_obfuscation: Option<bool>,
113    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
114    pub extra: Extra,
115}
116
117#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
118pub struct ResponseObject {
119    pub id: String,
120    pub created_at: u64,
121    #[serde(skip_serializing_if = "Option::is_none")]
122    pub background: Option<bool>,
123    #[serde(skip_serializing_if = "Option::is_none")]
124    pub completed_at: Option<u64>,
125    #[serde(skip_serializing_if = "Option::is_none")]
126    pub conversation: Option<ResponseConversationParam>,
127    #[serde(skip_serializing_if = "Option::is_none")]
128    pub error: Option<ResponseError>,
129    #[serde(skip_serializing_if = "Option::is_none")]
130    pub incomplete_details: Option<IncompleteDetails>,
131    #[serde(skip_serializing_if = "Option::is_none")]
132    pub instructions: Option<ResponseInput>,
133    #[serde(skip_serializing_if = "Option::is_none")]
134    pub max_output_tokens: Option<u32>,
135    #[serde(skip_serializing_if = "Option::is_none")]
136    pub max_tool_calls: Option<u32>,
137    #[serde(skip_serializing_if = "Option::is_none")]
138    pub metadata: Option<Metadata>,
139    #[serde(skip_serializing_if = "Option::is_none")]
140    pub model: Option<OpenAiModelId>,
141    #[serde(skip_serializing_if = "Option::is_none")]
142    pub moderation: Option<ResponseModeration>,
143    #[serde(skip_serializing_if = "Option::is_none")]
144    pub multi_agent: Option<serde_json::Value>,
145    pub object: ResponseObjectType,
146    pub output: Vec<ResponseOutputItem>,
147    #[serde(skip_serializing_if = "Option::is_none")]
148    pub output_text: Option<String>,
149    #[serde(skip_serializing_if = "Option::is_none")]
150    pub parallel_tool_calls: Option<bool>,
151    #[serde(skip_serializing_if = "Option::is_none")]
152    pub prompt: Option<PromptRef>,
153    #[serde(skip_serializing_if = "Option::is_none")]
154    pub prompt_cache_key: Option<String>,
155    #[serde(skip_serializing_if = "Option::is_none")]
156    pub prompt_cache_options: Option<PromptCacheOptions>,
157    #[serde(skip_serializing_if = "Option::is_none")]
158    pub prompt_cache_retention: Option<PromptCacheRetention>,
159    #[serde(skip_serializing_if = "Option::is_none")]
160    pub previous_response_id: Option<String>,
161    #[serde(skip_serializing_if = "Option::is_none")]
162    pub reasoning: Option<ReasoningConfig>,
163    #[serde(skip_serializing_if = "Option::is_none")]
164    pub safety_identifier: Option<String>,
165    #[serde(skip_serializing_if = "Option::is_none")]
166    pub service_tier: Option<ServiceTier>,
167    #[serde(skip_serializing_if = "Option::is_none")]
168    pub status: Option<ResponseStatus>,
169    #[serde(skip_serializing_if = "Option::is_none")]
170    pub store: Option<bool>,
171    #[serde(skip_serializing_if = "Option::is_none")]
172    pub temperature: Option<f64>,
173    #[serde(skip_serializing_if = "Option::is_none")]
174    pub text: Option<TextConfig>,
175    #[serde(skip_serializing_if = "Option::is_none")]
176    pub tool_choice: Option<ResponseToolChoice>,
177    #[serde(skip_serializing_if = "Option::is_none")]
178    pub tools: Option<Vec<ResponseTool>>,
179    #[serde(skip_serializing_if = "Option::is_none")]
180    pub top_logprobs: Option<u32>,
181    #[serde(skip_serializing_if = "Option::is_none")]
182    pub top_p: Option<f64>,
183    #[serde(skip_serializing_if = "Option::is_none")]
184    pub truncation: Option<TruncationStrategy>,
185    #[serde(skip_serializing_if = "Option::is_none")]
186    pub usage: Option<ResponseUsage>,
187    #[serde(skip_serializing_if = "Option::is_none")]
188    pub user: Option<String>,
189    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
190    pub extra: Extra,
191}
192
193#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
194pub struct ResponseError {
195    pub code: ResponseErrorCode,
196    pub message: String,
197    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
198    pub extra: Extra,
199}
200
201#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
202pub struct ResponseModeration {
203    pub input: ResponseModerationOutcome,
204    pub output: ResponseModerationOutcome,
205    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
206    pub extra: Extra,
207}
208
209#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
210#[serde(untagged)]
211pub enum ResponseModerationOutcome {
212    Result(ModerationResult),
213    Error(ModerationError),
214}
215
216#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
217pub struct IncompleteDetails {
218    #[serde(skip_serializing_if = "Option::is_none")]
219    pub reason: Option<IncompleteReason>,
220    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
221    pub extra: Extra,
222}
223
224#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
225pub struct ResponseUsage {
226    pub input_tokens: u32,
227    pub output_tokens: u32,
228    pub total_tokens: u32,
229    #[serde(skip_serializing_if = "Option::is_none")]
230    pub input_tokens_details: Option<ResponseInputTokensDetails>,
231    pub output_tokens_details: ResponseOutputTokensDetails,
232    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
233    pub extra: Extra,
234}
235
236#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
237pub struct ResponseInputTokensDetails {
238    #[serde(default)]
239    pub cache_write_tokens: u32,
240    #[serde(default)]
241    pub cached_tokens: u32,
242    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
243    pub extra: Extra,
244}
245
246#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
247pub struct ResponseOutputTokensDetails {
248    pub reasoning_tokens: u32,
249    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
250    pub extra: Extra,
251}