use serde::{Deserialize, Serialize};
use super::common::Options;
#[derive(Serialize, Debug)]
pub struct GenerateRequest {
pub model: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub prompt: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub suffix: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub images: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub format: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub system: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stream: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub think: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub raw: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub keep_alive: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub options: Option<Options>,
#[serde(skip_serializing_if = "Option::is_none")]
pub context: Option<Vec<i64>>,
}
#[derive(Deserialize, Debug, Clone)]
#[non_exhaustive]
pub struct GenerateResponse {
pub model: String,
pub created_at: String,
pub response: String,
pub done: bool,
#[serde(default)]
pub thinking: Option<String>,
#[serde(default)]
pub done_reason: Option<String>,
#[serde(default)]
pub context: Option<Vec<i64>>,
#[serde(default)]
pub total_duration: Option<u64>,
#[serde(default)]
pub load_duration: Option<u64>,
#[serde(default)]
pub prompt_eval_duration: Option<u64>,
#[serde(default)]
pub eval_duration: Option<u64>,
#[serde(default)]
pub prompt_eval_count: Option<u64>,
#[serde(default)]
pub eval_count: Option<u64>,
}
#[derive(Deserialize, Debug, Clone)]
#[non_exhaustive]
pub struct GenerateStreamChunk {
pub model: String,
pub created_at: String,
pub response: String,
pub done: bool,
#[serde(default)]
pub thinking: Option<String>,
#[serde(default)]
pub done_reason: Option<String>,
#[serde(default)]
pub context: Option<Vec<i64>>,
#[serde(default)]
pub total_duration: Option<u64>,
#[serde(default)]
pub load_duration: Option<u64>,
#[serde(default)]
pub prompt_eval_duration: Option<u64>,
#[serde(default)]
pub eval_duration: Option<u64>,
#[serde(default)]
pub prompt_eval_count: Option<u64>,
#[serde(default)]
pub eval_count: Option<u64>,
}