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