use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum RealtimeResponseInputItem {
Message(RealtimeResponseInputMessage),
FunctionCall(RealtimeResponseInputFunctionCall),
FunctionCallOutput(RealtimeResponseInputFunctionCallOutput),
ItemReference(RealtimeResponseItemReference),
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct RealtimeResponseItemReference {
pub id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct RealtimeResponseInputFunctionCallOutput {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<RealtimeResponseInputFunctionCallOutputStatus>,
pub call_id: String,
pub output: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
#[serde(rename_all = "snake_case")]
pub enum RealtimeResponseInputFunctionCallOutputStatus {
#[default]
Completed,
Incomplete,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct RealtimeResponseInputFunctionCall {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<RealtimeResponseInputFunctionCallStatus>,
pub call_id: String,
pub name: String,
pub arguments: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
#[serde(rename_all = "snake_case")]
pub enum RealtimeResponseInputFunctionCallStatus {
#[default]
Completed,
Incomplete,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(tag = "role", rename_all = "snake_case")]
pub enum RealtimeResponseInputMessage {
System(RealtimeResponseInputMessageSystem),
Developer(RealtimeResponseInputMessageDeveloper),
User(RealtimeResponseInputMessageUser),
Assistant(RealtimeResponseInputMessageAssistant),
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct RealtimeResponseInputMessageAssistant {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<RealtimeResponseInputMessageStatus>,
pub content: Vec<RealtimeResponseInputMessageAssistantContentItem>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct RealtimeResponseInputMessageAssistantContentItem {
pub r#type: RealtimeResponseInputMessageAssistantContentItemType,
pub text: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum RealtimeResponseInputMessageAssistantContentItemType {
OutputText,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum RealtimeResponseInputMessageStatus {
Completed,
Incomplete,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct RealtimeResponseInputMessageUser {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<RealtimeResponseInputMessageStatus>,
pub content: Vec<RealtimeResponseInputMessageUserContentItem>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum RealtimeResponseInputMessageUserContentItem {
InputText(RealtimeResponseInputText),
InputAudio(RealtimeResponseInputAudio),
InputImage(RealtimeResponseInputImage),
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct RealtimeResponseInputImage {
pub image_url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub detail: Option<RealtimeResponseInputImageDetail>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
#[serde(rename_all = "snake_case")]
pub enum RealtimeResponseInputImageDetail {
Low,
High,
#[default]
Auto,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct RealtimeResponseInputAudio {
pub audio: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub transcript: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct RealtimeResponseInputText {
pub text: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct RealtimeResponseInputMessageDeveloper {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<RealtimeResponseInputMessageStatus>,
pub content: Vec<RealtimeResponseInputTextPart>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct RealtimeResponseInputMessageSystem {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<RealtimeResponseInputMessageStatus>,
pub content: Vec<RealtimeResponseInputTextPart>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum RealtimeResponseInputTextPart {
InputText(RealtimeResponseInputText),
}