1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::{FileSearchRankingOptions, ImageFile, LastError, RunStatus};
6
7#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
8#[serde(rename_all = "snake_case")]
9pub enum RunStepType {
10 MessageCreation,
11 ToolCalls,
12}
13
14#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
16pub struct RunStepObject {
17 pub id: String,
19 pub object: String,
21 pub created_at: i32,
23
24 pub assistant_id: Option<String>,
26
27 pub thread_id: String,
29
30 pub run_id: String,
32
33 pub r#type: RunStepType,
35
36 pub status: RunStatus,
38
39 pub step_details: StepDetails,
41
42 pub last_error: Option<LastError>,
44
45 pub expires_at: Option<i32>,
47
48 pub cancelled_at: Option<i32>,
50
51 pub failed_at: Option<i32>,
53
54 pub completed_at: Option<i32>,
56
57 pub metadata: Option<HashMap<String, serde_json::Value>>,
58
59 pub usage: Option<RunStepCompletionUsage>,
61}
62
63#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
64pub struct RunStepCompletionUsage {
65 pub completion_tokens: u32,
67 pub prompt_tokens: u32,
69 pub total_tokens: u32,
71}
72
73#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
74#[serde(tag = "type")]
75#[serde(rename_all = "snake_case")]
76pub enum StepDetails {
77 MessageCreation(RunStepDetailsMessageCreationObject),
78 ToolCalls(RunStepDetailsToolCallsObject),
79}
80
81#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
83pub struct RunStepDetailsMessageCreationObject {
84 pub message_creation: MessageCreation,
85}
86
87#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
88pub struct MessageCreation {
89 pub message_id: String,
91}
92
93#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
95pub struct RunStepDetailsToolCallsObject {
96 pub tool_calls: Vec<RunStepDetailsToolCalls>,
98}
99
100#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
101#[serde(tag = "type")]
102#[serde(rename_all = "snake_case")]
103pub enum RunStepDetailsToolCalls {
104 CodeInterpreter(RunStepDetailsToolCallsCodeObject),
106 FileSearch(RunStepDetailsToolCallsFileSearchObject),
107 Function(RunStepDetailsToolCallsFunctionObject),
108}
109
110#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
112pub struct RunStepDetailsToolCallsCodeObject {
113 pub id: String,
115
116 pub code_interpreter: CodeInterpreter,
118}
119
120#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
121pub struct CodeInterpreter {
122 pub input: String,
124 pub outputs: Vec<CodeInterpreterOutput>,
126}
127
128#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
129#[serde(tag = "type")]
130#[serde(rename_all = "lowercase")]
131pub enum CodeInterpreterOutput {
132 Logs(RunStepDetailsToolCallsCodeOutputLogsObject),
134 Image(RunStepDetailsToolCallsCodeOutputImageObject),
136}
137
138#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
140pub struct RunStepDetailsToolCallsCodeOutputLogsObject {
141 pub logs: String,
143}
144
145#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
146pub struct RunStepDetailsToolCallsCodeOutputImageObject {
147 pub image: ImageFile,
149}
150
151#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
153pub struct RunStepDetailsToolCallsFileSearchObject {
154 pub id: String,
156 pub file_search: RunStepDetailsToolCallsFileSearchObjectFileSearch,
158}
159
160#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
161pub struct RunStepDetailsToolCallsFileSearchObjectFileSearch {
162 pub ranking_options: Option<FileSearchRankingOptions>,
163 pub results: Option<Vec<RunStepDetailsToolCallsFileSearchResultObject>>,
165}
166
167#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
169pub struct RunStepDetailsToolCallsFileSearchResultObject {
170 pub file_id: String,
172 pub file_name: String,
174 pub score: f32,
176 pub content: Option<Vec<RunStepDetailsToolCallsFileSearchResultObjectContent>>,
178}
179
180#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
181pub struct RunStepDetailsToolCallsFileSearchResultObjectContent {
182 pub text: Option<String>,
185}
186
187#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
188pub struct RunStepDetailsToolCallsFunctionObject {
189 pub id: String,
191 pub function: RunStepFunctionObject,
193}
194
195#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
196pub struct RunStepFunctionObject {
197 pub name: String,
199 pub arguments: String,
201 pub output: Option<String>,
203}
204
205#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
206pub struct RunStepFunctionObjectDelta {
207 pub name: Option<String>,
209 pub arguments: Option<String>,
211 pub output: Option<String>,
213}
214
215#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
216pub struct ListRunStepsResponse {
217 pub object: String,
218 pub data: Vec<RunStepObject>,
219 pub first_id: Option<String>,
220 pub last_id: Option<String>,
221 pub has_more: bool,
222}
223
224#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
226pub struct RunStepDeltaObject {
227 pub id: String,
229 pub object: String,
231 pub delta: RunStepDelta,
233}
234
235#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
236pub struct RunStepDelta {
237 pub step_details: DeltaStepDetails,
238}
239
240#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
241#[serde(tag = "type")]
242#[serde(rename_all = "snake_case")]
243pub enum DeltaStepDetails {
244 MessageCreation(RunStepDeltaStepDetailsMessageCreationObject),
245 ToolCalls(RunStepDeltaStepDetailsToolCallsObject),
246}
247
248#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
250pub struct RunStepDeltaStepDetailsMessageCreationObject {
251 pub message_creation: Option<MessageCreation>,
252}
253
254#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
256pub struct RunStepDeltaStepDetailsToolCallsObject {
257 pub tool_calls: Option<Vec<RunStepDeltaStepDetailsToolCalls>>,
259}
260
261#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
262#[serde(tag = "type")]
263#[serde(rename_all = "snake_case")]
264pub enum RunStepDeltaStepDetailsToolCalls {
265 CodeInterpreter(RunStepDeltaStepDetailsToolCallsCodeObject),
266 FileSearch(RunStepDeltaStepDetailsToolCallsFileSearchObject),
267 Function(RunStepDeltaStepDetailsToolCallsFunctionObject),
268}
269
270#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
272pub struct RunStepDeltaStepDetailsToolCallsCodeObject {
273 pub index: u32,
275 pub id: Option<String>,
277 pub code_interpreter: Option<DeltaCodeInterpreter>,
279}
280
281#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
282pub struct DeltaCodeInterpreter {
283 pub input: Option<String>,
285 pub outputs: Option<Vec<DeltaCodeInterpreterOutput>>,
287}
288
289#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
290#[serde(tag = "type")]
291#[serde(rename_all = "lowercase")]
292pub enum DeltaCodeInterpreterOutput {
293 Logs(RunStepDeltaStepDetailsToolCallsCodeOutputLogsObject),
294 Image(RunStepDeltaStepDetailsToolCallsCodeOutputImageObject),
295}
296
297#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
299pub struct RunStepDeltaStepDetailsToolCallsCodeOutputLogsObject {
300 pub index: u32,
302 pub logs: Option<String>,
304}
305
306#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
308pub struct RunStepDeltaStepDetailsToolCallsCodeOutputImageObject {
309 pub index: u32,
311
312 pub image: Option<ImageFile>,
313}
314
315#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
316pub struct RunStepDeltaStepDetailsToolCallsFileSearchObject {
317 pub index: u32,
319 pub id: Option<String>,
321 pub file_search: Option<serde_json::Value>,
323}
324
325#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
327pub struct RunStepDeltaStepDetailsToolCallsFunctionObject {
328 pub index: u32,
330 pub id: Option<String>,
332 pub function: Option<RunStepFunctionObjectDelta>,
334}