openai_types/responses/
output.rs1use serde::{Deserialize, Serialize};
5
6use super::common::Role;
7use super::response::ResponseAnnotation;
8
9#[derive(Debug, Clone, Deserialize, Serialize)]
11#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
12pub struct ResponseOutputContent {
13 #[serde(rename = "type")]
15 pub type_: String,
16 #[serde(default)]
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub text: Option<String>,
20 #[serde(default)]
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub annotations: Option<Vec<ResponseAnnotation>>,
24}
25
26#[derive(Debug, Clone, Deserialize, Serialize)]
32#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
33pub struct ResponseOutputItem {
34 #[serde(rename = "type")]
36 pub type_: String,
37 #[serde(default)]
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub id: Option<String>,
41 #[serde(default)]
43 #[serde(skip_serializing_if = "Option::is_none")]
44 pub role: Option<Role>,
45 #[serde(default)]
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub content: Option<Vec<ResponseOutputContent>>,
49 #[serde(default)]
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub status: Option<String>,
53 #[serde(default)]
55 #[serde(skip_serializing_if = "Option::is_none")]
56 pub name: Option<String>,
57 #[serde(default)]
59 #[serde(skip_serializing_if = "Option::is_none")]
60 pub arguments: Option<String>,
61 #[serde(default)]
63 #[serde(skip_serializing_if = "Option::is_none")]
64 pub call_id: Option<String>,
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize)]
72#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
73#[serde(tag = "type")]
74#[non_exhaustive]
75pub enum OutputItem {
76 #[serde(rename = "message")]
78 Message {
79 #[serde(default)]
81 id: Option<String>,
82 #[serde(default)]
84 role: Option<Role>,
85 #[serde(default)]
87 content: Option<Vec<ResponseOutputContent>>,
88 #[serde(default)]
90 status: Option<String>,
91 },
92 #[serde(rename = "function_call")]
94 FunctionCall(FunctionToolCall),
95 #[serde(rename = "reasoning")]
97 Reasoning(ReasoningItem),
98 #[serde(rename = "web_search_call")]
100 WebSearchCall(serde_json::Value),
101 #[serde(rename = "file_search_call")]
103 FileSearchCall(serde_json::Value),
104 #[serde(other)]
106 Other,
107}
108
109#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
113#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
114pub struct FunctionToolCall {
115 pub arguments: String,
117 pub call_id: String,
119 pub name: String,
121 #[serde(default)]
123 #[serde(skip_serializing_if = "Option::is_none")]
124 pub id: Option<String>,
125 #[serde(default)]
127 #[serde(skip_serializing_if = "Option::is_none")]
128 pub status: Option<String>,
129}
130
131#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
136#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
137pub struct ReasoningItem {
138 pub id: String,
140 pub summary: Vec<SummaryPart>,
142 #[serde(default)]
144 #[serde(skip_serializing_if = "Option::is_none")]
145 pub content: Option<Vec<ReasoningContent>>,
146 #[serde(default)]
148 #[serde(skip_serializing_if = "Option::is_none")]
149 pub encrypted_content: Option<String>,
150 #[serde(default)]
152 #[serde(skip_serializing_if = "Option::is_none")]
153 pub status: Option<String>,
154}
155
156#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
158#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
159#[serde(tag = "type")]
160#[non_exhaustive]
161pub enum SummaryPart {
162 #[serde(rename = "summary_text")]
164 SummaryText(SummaryTextContent),
165}
166
167#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
169#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
170pub struct SummaryTextContent {
171 pub text: String,
173}
174
175#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
177#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
178pub struct ReasoningContent {
179 pub text: String,
181 #[serde(rename = "type")]
183 #[serde(default = "default_reasoning_text_type")]
184 pub type_: String,
185}
186
187fn default_reasoning_text_type() -> String {
188 "reasoning_text".to_string()
189}
190
191#[derive(Debug, Clone)]
195#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
196pub struct FunctionCall {
197 pub call_id: String,
199 pub name: String,
201 pub arguments: serde_json::Value,
203}