diff --git a/async-openai/src/types/responses.rs b/async-openai/src/types/responses.rs index 4d036319..f77ad7b7 100644 --- a/async-openai/src/types/responses.rs +++ b/async-openai/src/types/responses.rs @@ -2104,20 +2104,32 @@ pub struct ResponseMetadata { /// Output item #[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] +#[serde(tag = "type")] +#[serde(rename_all = "snake_case")] #[non_exhaustive] -pub struct OutputItem { +pub enum OutputItem { + Message(OutputMessage), + FileSearchCall(FileSearchCallOutput), + FunctionCall(FunctionCall), + WebSearchCall(WebSearchCallOutput), + ComputerCall(ComputerCallOutput), + Reasoning(ReasoningItem), + ImageGenerationCall(ImageGenerationCallOutput), + CodeInterpreterCall(CodeInterpreterCallOutput), + LocalShellCall(LocalShellCallOutput), + McpCall(McpCallOutput), + McpListTools(McpListToolsOutput), + McpApprovalRequest(McpApprovalRequestOutput), + CustomToolCall(CustomToolCallOutput), +} + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] +#[non_exhaustive] +pub struct CustomToolCallOutput { + pub call_id: String, + pub input: String, + pub name: String, pub id: String, - #[serde(rename = "type")] - pub item_type: String, - #[serde(skip_serializing_if = "Option::is_none")] - pub status: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub content: Option>, - #[serde(skip_serializing_if = "Option::is_none")] - pub role: Option, - /// For reasoning items - summary paragraphs - #[serde(skip_serializing_if = "Option::is_none")] - pub summary: Option>, } /// Content part