use serde::{Deserialize, Serialize};
use super::common::{ImageDetail, Role};
use super::output::{FunctionToolCall, ReasoningItem};
#[derive(Debug, Clone, Serialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[serde(untagged)]
#[non_exhaustive]
pub enum ResponseInput {
Text(String),
Messages(Vec<ResponseInputItem>),
Items(Vec<serde_json::Value>),
}
impl From<&str> for ResponseInput {
fn from(s: &str) -> Self {
ResponseInput::Text(s.to_string())
}
}
impl From<String> for ResponseInput {
fn from(s: String) -> Self {
ResponseInput::Text(s)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct ResponseInputItem {
pub role: Role,
pub content: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct EasyInputMessage {
#[serde(rename = "type")]
pub r#type: MessageType,
pub role: Role,
pub content: EasyInputContent,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[non_exhaustive]
pub enum MessageType {
#[serde(rename = "message")]
Message,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[serde(untagged)]
#[non_exhaustive]
pub enum EasyInputContent {
Text(String),
ContentList(Vec<InputContent>),
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[serde(tag = "type")]
#[non_exhaustive]
pub enum InputContent {
#[serde(rename = "input_text")]
InputText(InputTextContent),
#[serde(rename = "input_image")]
InputImage(InputImageContent),
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct InputTextContent {
pub text: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct InputImageContent {
pub detail: ImageDetail,
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub file_id: Option<String>,
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub image_url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[serde(untagged)]
#[non_exhaustive]
pub enum InputItem {
EasyMessage(EasyInputMessage),
Item(Item),
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[serde(tag = "type")]
#[non_exhaustive]
pub enum Item {
#[serde(rename = "function_call")]
FunctionCall(FunctionToolCall),
#[serde(rename = "function_call_output")]
FunctionCallOutput(FunctionCallOutputItemParam),
#[serde(rename = "reasoning")]
Reasoning(ReasoningItem),
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct FunctionCallOutputItemParam {
pub call_id: String,
pub output: FunctionCallOutput,
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[serde(untagged)]
#[non_exhaustive]
pub enum FunctionCallOutput {
Text(String),
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[non_exhaustive]
pub enum IncludeEnum {
#[serde(rename = "file_search_call.results")]
FileSearchCallResults,
#[serde(rename = "web_search_call.results")]
WebSearchCallResults,
#[serde(rename = "reasoning.encrypted_content")]
ReasoningEncryptedContent,
#[serde(rename = "message.input_image.image_url")]
MessageInputImageUrl,
#[serde(rename = "computer_call_output.output.image_url")]
ComputerCallOutputImageUrl,
#[serde(rename = "code_interpreter_call.outputs")]
CodeInterpreterCallOutputs,
#[serde(rename = "message.output_text.logprobs")]
MessageOutputTextLogprobs,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[serde(untagged)]
#[non_exhaustive]
pub enum InputParam {
Text(String),
Items(Vec<InputItem>),
}