use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use crate::types::assistants::{FileSearchRankingOptions, ImageFile, LastError, RunStatus};
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum RunStepType {
MessageCreation,
ToolCalls,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepObject {
pub id: String,
pub object: String,
pub created_at: u64,
pub assistant_id: Option<String>,
pub thread_id: String,
pub run_id: String,
pub r#type: RunStepType,
pub status: RunStatus,
pub step_details: StepDetails,
pub last_error: Option<LastError>,
pub expires_at: Option<u64>,
pub cancelled_at: Option<u64>,
pub failed_at: Option<u64>,
pub completed_at: Option<u64>,
pub metadata: Option<HashMap<String, serde_json::Value>>,
pub usage: Option<RunStepCompletionUsage>,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepCompletionUsage {
pub completion_tokens: u32,
pub prompt_tokens: u32,
pub total_tokens: u32,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
#[serde(tag = "type")]
#[serde(rename_all = "snake_case")]
pub enum StepDetails {
MessageCreation(RunStepDetailsMessageCreationObject),
ToolCalls(RunStepDetailsToolCallsObject),
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepDetailsMessageCreationObject {
pub message_creation: MessageCreation,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct MessageCreation {
pub message_id: String,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepDetailsToolCallsObject {
pub tool_calls: Vec<RunStepDetailsToolCalls>,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
#[serde(tag = "type")]
#[serde(rename_all = "snake_case")]
pub enum RunStepDetailsToolCalls {
CodeInterpreter(RunStepDetailsToolCallsCodeObject),
FileSearch(RunStepDetailsToolCallsFileSearchObject),
Function(RunStepDetailsToolCallsFunctionObject),
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepDetailsToolCallsCodeObject {
pub id: String,
pub code_interpreter: CodeInterpreter,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct CodeInterpreter {
pub input: String,
pub outputs: Vec<CodeInterpreterOutput>,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
#[serde(tag = "type")]
#[serde(rename_all = "lowercase")]
pub enum CodeInterpreterOutput {
Logs(RunStepDetailsToolCallsCodeOutputLogsObject),
Image(RunStepDetailsToolCallsCodeOutputImageObject),
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepDetailsToolCallsCodeOutputLogsObject {
pub logs: String,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepDetailsToolCallsCodeOutputImageObject {
pub image: ImageFile,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepDetailsToolCallsFileSearchObject {
pub id: String,
pub file_search: RunStepDetailsToolCallsFileSearchObjectFileSearch,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepDetailsToolCallsFileSearchObjectFileSearch {
pub ranking_options: Option<FileSearchRankingOptions>,
pub results: Option<Vec<RunStepDetailsToolCallsFileSearchResultObject>>,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepDetailsToolCallsFileSearchResultObject {
pub file_id: String,
pub file_name: String,
pub score: f32,
pub content: Option<Vec<RunStepDetailsToolCallsFileSearchResultObjectContent>>,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepDetailsToolCallsFileSearchResultObjectContent {
pub text: Option<String>,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepDetailsToolCallsFunctionObject {
pub id: String,
pub function: RunStepFunctionObject,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepFunctionObject {
pub name: String,
pub arguments: String,
pub output: Option<String>,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepFunctionObjectDelta {
pub name: Option<String>,
pub arguments: Option<String>,
pub output: Option<String>,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct ListRunStepsResponse {
pub object: String,
pub data: Vec<RunStepObject>,
pub first_id: Option<String>,
pub last_id: Option<String>,
pub has_more: bool,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepDeltaObject {
pub id: String,
pub object: String,
pub delta: RunStepDelta,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepDelta {
pub step_details: DeltaStepDetails,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
#[serde(tag = "type")]
#[serde(rename_all = "snake_case")]
pub enum DeltaStepDetails {
MessageCreation(RunStepDeltaStepDetailsMessageCreationObject),
ToolCalls(RunStepDeltaStepDetailsToolCallsObject),
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepDeltaStepDetailsMessageCreationObject {
pub message_creation: Option<MessageCreation>,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepDeltaStepDetailsToolCallsObject {
pub tool_calls: Option<Vec<RunStepDeltaStepDetailsToolCalls>>,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
#[serde(tag = "type")]
#[serde(rename_all = "snake_case")]
pub enum RunStepDeltaStepDetailsToolCalls {
CodeInterpreter(RunStepDeltaStepDetailsToolCallsCodeObject),
FileSearch(RunStepDeltaStepDetailsToolCallsFileSearchObject),
Function(RunStepDeltaStepDetailsToolCallsFunctionObject),
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepDeltaStepDetailsToolCallsCodeObject {
pub index: u32,
pub id: Option<String>,
pub code_interpreter: Option<DeltaCodeInterpreter>,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct DeltaCodeInterpreter {
pub input: Option<String>,
pub outputs: Option<Vec<DeltaCodeInterpreterOutput>>,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
#[serde(tag = "type")]
#[serde(rename_all = "lowercase")]
pub enum DeltaCodeInterpreterOutput {
Logs(RunStepDeltaStepDetailsToolCallsCodeOutputLogsObject),
Image(RunStepDeltaStepDetailsToolCallsCodeOutputImageObject),
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepDeltaStepDetailsToolCallsCodeOutputLogsObject {
pub index: u32,
pub logs: Option<String>,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepDeltaStepDetailsToolCallsCodeOutputImageObject {
pub index: u32,
pub image: Option<ImageFile>,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepDeltaStepDetailsToolCallsFileSearchObject {
pub index: u32,
pub id: Option<String>,
pub file_search: Option<serde_json::Value>,
}
#[derive(Clone, Serialize, Debug, Deserialize, PartialEq)]
pub struct RunStepDeltaStepDetailsToolCallsFunctionObject {
pub index: u32,
pub id: Option<String>,
pub function: Option<RunStepFunctionObjectDelta>,
}