1use std::collections::HashMap;
12
13use serde::{Deserialize, Serialize};
14
15use super::{FileSearchRankingOptions, ImageFile, LastError, RunStatus};
16
17#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
18#[serde(rename_all = "snake_case")]
19pub enum RunStepType {
20 MessageCreation,
21 ToolCalls,
22}
23
24#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
26pub struct RunStepObject {
27 pub id: String,
29 pub object: String,
31 pub created_at: i32,
33
34 pub assistant_id: Option<String>,
36
37 pub thread_id: String,
39
40 pub run_id: String,
42
43 pub r#type: RunStepType,
45
46 pub status: RunStatus,
48
49 pub step_details: StepDetails,
51
52 pub last_error: Option<LastError>,
54
55 pub expires_at: Option<i32>,
57
58 pub cancelled_at: Option<i32>,
60
61 pub failed_at: Option<i32>,
63
64 pub completed_at: Option<i32>,
66
67 pub metadata: Option<HashMap<String, serde_json::Value>>,
68
69 pub usage: Option<RunStepCompletionUsage>,
71}
72
73#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
74pub struct RunStepCompletionUsage {
75 pub completion_tokens: u32,
77 pub prompt_tokens: u32,
79 pub total_tokens: u32,
81}
82
83#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
84#[serde(tag = "type")]
85#[serde(rename_all = "snake_case")]
86pub enum StepDetails {
87 MessageCreation(RunStepDetailsMessageCreationObject),
88 ToolCalls(RunStepDetailsToolCallsObject),
89}
90
91#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
93pub struct RunStepDetailsMessageCreationObject {
94 pub message_creation: MessageCreation,
95}
96
97#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
98pub struct MessageCreation {
99 pub message_id: String,
101}
102
103#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
105pub struct RunStepDetailsToolCallsObject {
106 pub tool_calls: Vec<RunStepDetailsToolCalls>,
108}
109
110#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
111#[serde(tag = "type")]
112#[serde(rename_all = "snake_case")]
113pub enum RunStepDetailsToolCalls {
114 CodeInterpreter(RunStepDetailsToolCallsCodeObject),
116 FileSearch(RunStepDetailsToolCallsFileSearchObject),
117 Function(RunStepDetailsToolCallsFunctionObject),
118}
119
120#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
122pub struct RunStepDetailsToolCallsCodeObject {
123 pub id: String,
125
126 pub code_interpreter: CodeInterpreter,
128}
129
130#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
131pub struct CodeInterpreter {
132 pub input: String,
134 pub outputs: Vec<CodeInterpreterOutput>,
136}
137
138#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
139#[serde(tag = "type")]
140#[serde(rename_all = "lowercase")]
141pub enum CodeInterpreterOutput {
142 Logs(RunStepDetailsToolCallsCodeOutputLogsObject),
144 Image(RunStepDetailsToolCallsCodeOutputImageObject),
146}
147
148#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
150pub struct RunStepDetailsToolCallsCodeOutputLogsObject {
151 pub logs: String,
153}
154
155#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
156pub struct RunStepDetailsToolCallsCodeOutputImageObject {
157 pub image: ImageFile,
159}
160
161#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
163pub struct RunStepDetailsToolCallsFileSearchObject {
164 pub id: String,
166 pub file_search: RunStepDetailsToolCallsFileSearchObjectFileSearch,
168}
169
170#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
171pub struct RunStepDetailsToolCallsFileSearchObjectFileSearch {
172 pub ranking_options: Option<FileSearchRankingOptions>,
173 pub results: Option<Vec<RunStepDetailsToolCallsFileSearchResultObject>>,
175}
176
177#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
179pub struct RunStepDetailsToolCallsFileSearchResultObject {
180 pub file_id: String,
182 pub file_name: String,
184 pub score: f32,
186 pub content: Option<Vec<RunStepDetailsToolCallsFileSearchResultObjectContent>>,
188}
189
190#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
191pub struct RunStepDetailsToolCallsFileSearchResultObjectContent {
192 pub text: Option<String>,
195}
196
197#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
198pub struct RunStepDetailsToolCallsFunctionObject {
199 pub id: String,
201 pub function: RunStepFunctionObject,
203}
204
205#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
206pub struct RunStepFunctionObject {
207 pub name: String,
209 pub arguments: String,
211 pub output: Option<String>,
213}
214
215#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
216pub struct RunStepFunctionObjectDelta {
217 pub name: Option<String>,
219 pub arguments: Option<String>,
221 pub output: Option<String>,
223}
224
225#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
226pub struct ListRunStepsResponse {
227 pub object: String,
228 pub data: Vec<RunStepObject>,
229 pub first_id: Option<String>,
230 pub last_id: Option<String>,
231 pub has_more: bool,
232}
233
234#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
236pub struct RunStepDeltaObject {
237 pub id: String,
239 pub object: String,
241 pub delta: RunStepDelta,
243}
244
245#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
246pub struct RunStepDelta {
247 pub step_details: DeltaStepDetails,
248}
249
250#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
251#[serde(tag = "type")]
252#[serde(rename_all = "snake_case")]
253pub enum DeltaStepDetails {
254 MessageCreation(RunStepDeltaStepDetailsMessageCreationObject),
255 ToolCalls(RunStepDeltaStepDetailsToolCallsObject),
256}
257
258#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
260pub struct RunStepDeltaStepDetailsMessageCreationObject {
261 pub message_creation: Option<MessageCreation>,
262}
263
264#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
266pub struct RunStepDeltaStepDetailsToolCallsObject {
267 pub tool_calls: Option<Vec<RunStepDeltaStepDetailsToolCalls>>,
269}
270
271#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
272#[serde(tag = "type")]
273#[serde(rename_all = "snake_case")]
274pub enum RunStepDeltaStepDetailsToolCalls {
275 CodeInterpreter(RunStepDeltaStepDetailsToolCallsCodeObject),
276 FileSearch(RunStepDeltaStepDetailsToolCallsFileSearchObject),
277 Function(RunStepDeltaStepDetailsToolCallsFunctionObject),
278}
279
280#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
282pub struct RunStepDeltaStepDetailsToolCallsCodeObject {
283 pub index: u32,
285 pub id: Option<String>,
287 pub code_interpreter: Option<DeltaCodeInterpreter>,
289}
290
291#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
292pub struct DeltaCodeInterpreter {
293 pub input: Option<String>,
295 pub outputs: Option<Vec<DeltaCodeInterpreterOutput>>,
297}
298
299#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
300#[serde(tag = "type")]
301#[serde(rename_all = "lowercase")]
302pub enum DeltaCodeInterpreterOutput {
303 Logs(RunStepDeltaStepDetailsToolCallsCodeOutputLogsObject),
304 Image(RunStepDeltaStepDetailsToolCallsCodeOutputImageObject),
305}
306
307#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
309pub struct RunStepDeltaStepDetailsToolCallsCodeOutputLogsObject {
310 pub index: u32,
312 pub logs: Option<String>,
314}
315
316#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
318pub struct RunStepDeltaStepDetailsToolCallsCodeOutputImageObject {
319 pub index: u32,
321
322 pub image: Option<ImageFile>,
323}
324
325#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
326pub struct RunStepDeltaStepDetailsToolCallsFileSearchObject {
327 pub index: u32,
329 pub id: Option<String>,
331 pub file_search: Option<serde_json::Value>,
333}
334
335#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
337pub struct RunStepDeltaStepDetailsToolCallsFunctionObject {
338 pub index: u32,
340 pub id: Option<String>,
342 pub function: Option<RunStepFunctionObjectDelta>,
344}