1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::spec::assistants::{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: u64,
23
24 pub assistant_id: Option<String>,
26
27 pub thread_id: String,
29
30 pub run_id: String,
32
33 pub kind: RunStepType,
35
36 pub status: RunStatus,
39
40 pub step_details: StepDetails,
42
43 pub last_error: Option<LastError>,
45
46 pub expires_at: Option<u64>,
49
50 pub cancelled_at: Option<u64>,
52
53 pub failed_at: Option<u64>,
55
56 pub completed_at: Option<u64>,
58
59 pub metadata: Option<HashMap<String, serde_json::Value>>,
60
61 pub usage: Option<RunStepCompletionUsage>,
64}
65
66#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
67pub struct RunStepCompletionUsage {
68 pub completion_tokens: u32,
70 pub prompt_tokens: u32,
72 pub total_tokens: u32,
74}
75
76#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
77#[serde(tag = "type")]
78#[serde(rename_all = "snake_case")]
79pub enum StepDetails {
80 MessageCreation(RunStepDetailsMessageCreationObject),
81 ToolCalls(RunStepDetailsToolCallsObject),
82}
83
84#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
86pub struct RunStepDetailsMessageCreationObject {
87 pub message_creation: MessageCreation,
88}
89
90#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
91pub struct MessageCreation {
92 pub message_id: String,
94}
95
96#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
98pub struct RunStepDetailsToolCallsObject {
99 pub tool_calls: Vec<RunStepDetailsToolCalls>,
102}
103
104#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
105#[serde(tag = "type")]
106#[serde(rename_all = "snake_case")]
107pub enum RunStepDetailsToolCalls {
108 CodeInterpreter(RunStepDetailsToolCallsCodeObject),
110 FileSearch(RunStepDetailsToolCallsFileSearchObject),
111 Function(RunStepDetailsToolCallsFunctionObject),
112}
113
114#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
116pub struct RunStepDetailsToolCallsCodeObject {
117 pub id: String,
119
120 pub code_interpreter: CodeInterpreter,
122}
123
124#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
125pub struct CodeInterpreter {
126 pub input: String,
128 pub outputs: Vec<CodeInterpreterOutput>,
132}
133
134#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
135#[serde(tag = "type")]
136#[serde(rename_all = "lowercase")]
137pub enum CodeInterpreterOutput {
138 Logs(RunStepDetailsToolCallsCodeOutputLogsObject),
140 Image(RunStepDetailsToolCallsCodeOutputImageObject),
142}
143
144#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
146pub struct RunStepDetailsToolCallsCodeOutputLogsObject {
147 pub logs: String,
149}
150
151#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
152pub struct RunStepDetailsToolCallsCodeOutputImageObject {
153 pub image: ImageFile,
155}
156
157#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
159pub struct RunStepDetailsToolCallsFileSearchObject {
160 pub id: String,
162 pub file_search: RunStepDetailsToolCallsFileSearchObjectFileSearch,
164}
165
166#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
167pub struct RunStepDetailsToolCallsFileSearchObjectFileSearch {
168 pub ranking_options: Option<FileSearchRankingOptions>,
169 pub results: Option<Vec<RunStepDetailsToolCallsFileSearchResultObject>>,
171}
172
173#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
175pub struct RunStepDetailsToolCallsFileSearchResultObject {
176 pub file_id: String,
178 pub file_name: String,
180 pub score: f32,
182 pub content: Option<Vec<RunStepDetailsToolCallsFileSearchResultObjectContent>>,
185}
186
187#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
188pub struct RunStepDetailsToolCallsFileSearchResultObjectContent {
189 pub text: Option<String>,
192}
193
194#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
195pub struct RunStepDetailsToolCallsFunctionObject {
196 pub id: String,
198 pub function: RunStepFunctionObject,
200}
201
202#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
203pub struct RunStepFunctionObject {
204 pub name: String,
206 pub arguments: String,
208 pub output: Option<String>,
210}
211
212#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
213pub struct RunStepFunctionObjectDelta {
214 pub name: Option<String>,
216 pub arguments: Option<String>,
218 pub output: Option<String>,
220}
221
222#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
223pub struct ListRunStepsResponse {
224 pub object: String,
225 pub data: Vec<RunStepObject>,
226 pub first_id: Option<String>,
227 pub last_id: Option<String>,
228 pub has_more: bool,
229}
230
231#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
233pub struct RunStepDeltaObject {
234 pub id: String,
236 pub object: String,
238 pub delta: RunStepDelta,
240}
241
242#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
243pub struct RunStepDelta {
244 pub step_details: DeltaStepDetails,
245}
246
247#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
248#[serde(tag = "type")]
249#[serde(rename_all = "snake_case")]
250pub enum DeltaStepDetails {
251 MessageCreation(RunStepDeltaStepDetailsMessageCreationObject),
252 ToolCalls(RunStepDeltaStepDetailsToolCallsObject),
253}
254
255#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
257pub struct RunStepDeltaStepDetailsMessageCreationObject {
258 pub message_creation: Option<MessageCreation>,
259}
260
261#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
263pub struct RunStepDeltaStepDetailsToolCallsObject {
264 pub tool_calls: Option<Vec<RunStepDeltaStepDetailsToolCalls>>,
267}
268
269#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
270#[serde(tag = "type")]
271#[serde(rename_all = "snake_case")]
272pub enum RunStepDeltaStepDetailsToolCalls {
273 CodeInterpreter(RunStepDeltaStepDetailsToolCallsCodeObject),
274 FileSearch(RunStepDeltaStepDetailsToolCallsFileSearchObject),
275 Function(RunStepDeltaStepDetailsToolCallsFunctionObject),
276}
277
278#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
280pub struct RunStepDeltaStepDetailsToolCallsCodeObject {
281 pub index: u32,
283 pub id: Option<String>,
285 pub code_interpreter: Option<DeltaCodeInterpreter>,
287}
288
289#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
290pub struct DeltaCodeInterpreter {
291 pub input: Option<String>,
293 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}