use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GeneratePayload {
pub model: String,
pub prompt: String,
pub stream: bool
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GenerateResponse {
pub model: String,
pub created_at: String,
pub response: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub thinking: Option<String>,
pub done: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub done_reason: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub total_duration: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub load_duration: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub prompt_eval_count: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub prompt_eval_duration: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub eval_count: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub eval_duration: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub logprobs: Option<Vec<LogProb>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChatPayload {
pub model: String,
pub messages: Vec<ChatMessage>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChatMessage {
pub role: String,
pub content: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChatResponse {
pub model: String,
pub created_at: String,
pub message: Message,
pub done: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub done_reason: Option<String>,
pub total_duration: u64,
pub load_duration: u64,
pub prompt_eval_count: u32,
pub prompt_eval_duration: u64,
pub eval_count: u32,
pub eval_duration: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub logprobs: Option<Vec<LogProb>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Message {
pub role: Role,
pub content: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub thinking: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_calls: Option<Vec<ToolCall>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub images: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Role {
System,
User,
Assistant,
Tool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ToolCall {
pub function: ToolCallFunction,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ToolCallFunction {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
pub arguments: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LogProb {
pub token: String,
pub logprob: f64,
pub bytes: Vec<u8>,
#[serde(skip_serializing_if = "Option::is_none")]
pub top_logprobs: Option<Vec<TopLogProb>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TopLogProb {
pub token: String,
pub logprob: f64,
pub bytes: Vec<u8>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmbedPayload {
pub model: String,
pub input: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmbeddingResponse {
pub model: String,
pub embeddings: Vec<Vec<f32>>,
pub total_duration: u64,
pub load_duration: u64,
pub prompt_eval_count: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListModels {
pub models: Vec<Model>
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Model {
name: String,
model: String,
modified_at: String,
size: u64,
digest: String
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ShowPayload {
pub model: String
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ShowResponse {
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateModelPayload {
pub from: String,
pub model: String,
pub system: String
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateModelResponse {
pub status: String
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CopyModel {
pub source: String,
pub destination: String
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Ver {
pub version: String
}