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 #[serde(rename = "type")]
35 pub kind: RunStepType,
36
37 pub status: RunStatus,
39
40 pub step_details: StepDetails,
42
43 pub last_error: Option<LastError>,
45
46 pub expires_at: Option<i32>,
48
49 pub cancelled_at: Option<i32>,
51
52 pub failed_at: Option<i32>,
54
55 pub completed_at: Option<i32>,
57
58 pub metadata: Option<HashMap<String, serde_json::Value>>,
59
60 pub usage: Option<RunStepCompletionUsage>,
62}
63
64#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
65pub struct RunStepCompletionUsage {
66 pub completion_tokens: u32,
68 pub prompt_tokens: u32,
70 pub total_tokens: u32,
72}
73
74#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
75#[serde(tag = "type")]
76#[serde(rename_all = "snake_case")]
77pub enum StepDetails {
78 MessageCreation(RunStepDetailsMessageCreationObject),
79 ToolCalls(RunStepDetailsToolCallsObject),
80}
81
82#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
84pub struct RunStepDetailsMessageCreationObject {
85 pub message_creation: MessageCreation,
86}
87
88#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
89pub struct MessageCreation {
90 pub message_id: String,
92}
93
94#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
96pub struct RunStepDetailsToolCallsObject {
97 pub tool_calls: Vec<RunStepDetailsToolCalls>,
99}
100
101#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
102#[serde(tag = "type")]
103#[serde(rename_all = "snake_case")]
104pub enum RunStepDetailsToolCalls {
105 CodeInterpreter(RunStepDetailsToolCallsCodeObject),
107 FileSearch(RunStepDetailsToolCallsFileSearchObject),
108 Function(RunStepDetailsToolCallsFunctionObject),
109}
110
111#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
113pub struct RunStepDetailsToolCallsCodeObject {
114 pub id: String,
116
117 pub code_interpreter: CodeInterpreter,
119}
120
121#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
122pub struct CodeInterpreter {
123 pub input: String,
125 pub outputs: Vec<CodeInterpreterOutput>,
127}
128
129#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
130#[serde(tag = "type")]
131#[serde(rename_all = "lowercase")]
132pub enum CodeInterpreterOutput {
133 Logs(RunStepDetailsToolCallsCodeOutputLogsObject),
135 Image(RunStepDetailsToolCallsCodeOutputImageObject),
137}
138
139#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
141pub struct RunStepDetailsToolCallsCodeOutputLogsObject {
142 pub logs: String,
144}
145
146#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
147pub struct RunStepDetailsToolCallsCodeOutputImageObject {
148 pub image: ImageFile,
150}
151
152#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
154pub struct RunStepDetailsToolCallsFileSearchObject {
155 pub id: String,
157 pub file_search: RunStepDetailsToolCallsFileSearchObjectFileSearch,
159}
160
161#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
162pub struct RunStepDetailsToolCallsFileSearchObjectFileSearch {
163 pub ranking_options: Option<FileSearchRankingOptions>,
164 pub results: Option<Vec<RunStepDetailsToolCallsFileSearchResultObject>>,
166}
167
168#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
170pub struct RunStepDetailsToolCallsFileSearchResultObject {
171 pub file_id: String,
173 pub file_name: String,
175 pub score: f32,
177 pub content: Option<Vec<RunStepDetailsToolCallsFileSearchResultObjectContent>>,
179}
180
181#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
182pub struct RunStepDetailsToolCallsFileSearchResultObjectContent {
183 pub text: Option<String>,
186}
187
188#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
189pub struct RunStepDetailsToolCallsFunctionObject {
190 pub id: String,
192 pub function: RunStepFunctionObject,
194}
195
196#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
197pub struct RunStepFunctionObject {
198 pub name: String,
200 pub arguments: String,
202 pub output: Option<String>,
204}
205
206#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
207pub struct RunStepFunctionObjectDelta {
208 pub name: Option<String>,
210 pub arguments: Option<String>,
212 pub output: Option<String>,
214}
215
216#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
217pub struct ListRunStepsResponse {
218 pub object: String,
219 pub data: Vec<RunStepObject>,
220 pub first_id: Option<String>,
221 pub last_id: Option<String>,
222 pub has_more: bool,
223}
224
225#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
227pub struct RunStepDeltaObject {
228 pub id: String,
230 pub object: String,
232 pub delta: RunStepDelta,
234}
235
236#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
237pub struct RunStepDelta {
238 pub step_details: DeltaStepDetails,
239}
240
241#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
242#[serde(tag = "type")]
243#[serde(rename_all = "snake_case")]
244pub enum DeltaStepDetails {
245 MessageCreation(RunStepDeltaStepDetailsMessageCreationObject),
246 ToolCalls(RunStepDeltaStepDetailsToolCallsObject),
247}
248
249#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
251pub struct RunStepDeltaStepDetailsMessageCreationObject {
252 pub message_creation: Option<MessageCreation>,
253}
254
255#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
257pub struct RunStepDeltaStepDetailsToolCallsObject {
258 pub tool_calls: Option<Vec<RunStepDeltaStepDetailsToolCalls>>,
260}
261
262#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
263#[serde(tag = "type")]
264#[serde(rename_all = "snake_case")]
265pub enum RunStepDeltaStepDetailsToolCalls {
266 CodeInterpreter(RunStepDeltaStepDetailsToolCallsCodeObject),
267 FileSearch(RunStepDeltaStepDetailsToolCallsFileSearchObject),
268 Function(RunStepDeltaStepDetailsToolCallsFunctionObject),
269}
270
271#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
273pub struct RunStepDeltaStepDetailsToolCallsCodeObject {
274 pub index: u32,
276 pub id: Option<String>,
278 pub code_interpreter: Option<DeltaCodeInterpreter>,
280}
281
282#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
283pub struct DeltaCodeInterpreter {
284 pub input: Option<String>,
286 pub outputs: Option<Vec<DeltaCodeInterpreterOutput>>,
288}
289
290#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
291#[serde(tag = "type")]
292#[serde(rename_all = "lowercase")]
293pub enum DeltaCodeInterpreterOutput {
294 Logs(RunStepDeltaStepDetailsToolCallsCodeOutputLogsObject),
295 Image(RunStepDeltaStepDetailsToolCallsCodeOutputImageObject),
296}
297
298#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
300pub struct RunStepDeltaStepDetailsToolCallsCodeOutputLogsObject {
301 pub index: u32,
303 pub logs: Option<String>,
305}
306
307#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
309pub struct RunStepDeltaStepDetailsToolCallsCodeOutputImageObject {
310 pub index: u32,
312
313 pub image: Option<ImageFile>,
314}
315
316#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
317pub struct RunStepDeltaStepDetailsToolCallsFileSearchObject {
318 pub index: u32,
320 pub id: Option<String>,
322 pub file_search: Option<serde_json::Value>,
324}
325
326#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
328pub struct RunStepDeltaStepDetailsToolCallsFunctionObject {
329 pub index: u32,
331 pub id: Option<String>,
333 pub function: Option<RunStepFunctionObjectDelta>,
335}