ollarust 0.1.2

Ollama API client for Rust
Documentation
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 
}