Skip to main content

gproxy_protocol/protocol/openai/generate_content/response_items/
content.rs

1use 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}