use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Serialize)]
pub struct ResponsesRequest {
pub model: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub instructions: Option<String>,
pub input: Vec<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tools: Option<Vec<Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reasoning: Option<Value>,
pub store: bool,
pub stream: bool,
pub include: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_output_tokens: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub temperature: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub top_p: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub prompt_cache_key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub provider: Option<Value>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ResponsesResponse {
#[serde(default)]
pub status: Option<String>,
#[serde(default)]
pub output: Vec<Value>,
#[serde(default)]
pub incomplete_details: Option<IncompleteDetails>,
#[serde(default)]
pub error: Option<ResponseError>,
#[serde(default)]
pub usage: Option<ResponsesUsage>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct IncompleteDetails {
#[serde(default)]
pub reason: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ResponseError {
#[serde(default)]
pub code: Option<String>,
#[serde(default)]
pub message: String,
}
#[derive(Debug, Clone, Default, Deserialize)]
pub struct ResponsesUsage {
#[serde(default)]
pub input_tokens: Option<u64>,
#[serde(default)]
pub input_tokens_details: Option<InputTokensDetails>,
#[serde(default)]
pub output_tokens: Option<u64>,
#[serde(default)]
pub output_tokens_details: Option<OutputTokensDetails>,
}
#[derive(Debug, Clone, Default, Deserialize)]
pub struct InputTokensDetails {
#[serde(default)]
pub cached_tokens: Option<u64>,
#[serde(default)]
pub cache_write_tokens: Option<u64>,
}
#[derive(Debug, Clone, Default, Deserialize)]
pub struct OutputTokensDetails {
#[serde(default)]
pub reasoning_tokens: Option<u64>,
}