pub mod copy;
pub mod create;
pub mod delete;
pub mod list_local;
pub mod pull;
pub mod push;
pub mod show_info;
use std::collections::HashMap;
#[cfg(feature = "modelfile")]
use modelfile::modelfile::Modelfile;
#[cfg(feature = "modelfile")]
use serde_with;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LocalModel {
pub name: String,
pub modified_at: String,
pub size: u64,
}
#[cfg_attr(feature = "modelfile", serde_with::serde_as)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModelInfo {
#[serde(default = "String::new")]
pub license: String,
#[cfg(feature = "modelfile")]
#[serde_as(as = "serde_with::DisplayFromStr")]
pub modelfile: Modelfile,
#[cfg(not(feature = "modelfile"))]
#[serde(default = "String::new")]
pub modelfile: String,
#[serde(default = "String::new")]
pub parameters: String,
#[serde(default = "String::new")]
pub template: String,
#[serde(default = "serde_json::Map::new")]
pub model_info: serde_json::Map<String, serde_json::Value>,
#[serde(default = "Vec::new")]
pub capabilities: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct ModelOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub(super) mirostat: Option<u8>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(super) mirostat_eta: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(super) mirostat_tau: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(super) num_ctx: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(super) num_gqa: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(super) num_gpu: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(super) num_thread: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(super) repeat_last_n: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(super) repeat_penalty: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(super) temperature: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(super) seed: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(super) stop: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(super) tfs_z: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(super) num_predict: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(super) top_k: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(super) top_p: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(super) min_p: Option<f32>,
#[serde(flatten, skip_serializing_if = "HashMap::is_empty")]
pub(super) extra: HashMap<String, serde_json::Value>,
}
impl ModelOptions {
pub fn mirostat(mut self, mirostat: u8) -> Self {
self.mirostat = Some(mirostat);
self
}
pub fn mirostat_eta(mut self, mirostat_eta: f32) -> Self {
self.mirostat_eta = Some(mirostat_eta);
self
}
pub fn mirostat_tau(mut self, mirostat_tau: f32) -> Self {
self.mirostat_tau = Some(mirostat_tau);
self
}
pub fn num_ctx(mut self, num_ctx: u64) -> Self {
self.num_ctx = Some(num_ctx);
self
}
pub fn num_gqa(mut self, num_gqa: u32) -> Self {
self.num_gqa = Some(num_gqa);
self
}
pub fn num_gpu(mut self, num_gpu: u32) -> Self {
self.num_gpu = Some(num_gpu);
self
}
pub fn num_thread(mut self, num_thread: u32) -> Self {
self.num_thread = Some(num_thread);
self
}
pub fn repeat_last_n(mut self, repeat_last_n: i32) -> Self {
self.repeat_last_n = Some(repeat_last_n);
self
}
pub fn repeat_penalty(mut self, repeat_penalty: f32) -> Self {
self.repeat_penalty = Some(repeat_penalty);
self
}
pub fn temperature(mut self, temperature: f32) -> Self {
self.temperature = Some(temperature);
self
}
pub fn seed(mut self, seed: i32) -> Self {
self.seed = Some(seed);
self
}
pub fn stop(mut self, stop: Vec<String>) -> Self {
self.stop = Some(stop);
self
}
pub fn tfs_z(mut self, tfs_z: f32) -> Self {
self.tfs_z = Some(tfs_z);
self
}
pub fn num_predict(mut self, num_predict: i32) -> Self {
self.num_predict = Some(num_predict);
self
}
pub fn top_k(mut self, top_k: u32) -> Self {
self.top_k = Some(top_k);
self
}
pub fn top_p(mut self, top_p: f32) -> Self {
self.top_p = Some(top_p);
self
}
pub fn min_p(mut self, min_p: f32) -> Self {
self.min_p = Some(min_p);
self
}
pub fn extra<K, V>(mut self, key: K, value: V) -> Self
where
K: Into<String>,
V: Into<serde_json::Value>,
{
self.extra.insert(key.into(), value.into());
self
}
pub fn extras<I, K, V>(mut self, extras: I) -> Self
where
I: IntoIterator<Item = (K, V)>,
K: Into<String>,
V: Into<serde_json::Value>,
{
self.extra
.extend(extras.into_iter().map(|(k, v)| (k.into(), v.into())));
self
}
}