use std::path::PathBuf;
use derivative::Derivative;
use salvo::oapi::ToSchema;
use serde::{Deserialize, Serialize};
use web_rwkv::runtime::model::{EmbedDevice, Quant};
use crate::run::StateId;
#[derive(Debug, Clone, Derivative, Serialize, Deserialize, ToSchema)]
#[derivative(Default)]
#[serde(default)]
pub struct Model {
#[derivative(Default(value = "\"assets/models\".into()"))]
#[serde(alias = "model_path")]
#[salvo(schema(value_type = String))]
pub path: PathBuf,
#[serde(alias = "model_name")]
#[salvo(schema(value_type = String))]
pub name: PathBuf,
pub quant: usize,
#[salvo(schema(value_type = super::sealed::Quant))]
pub quant_type: Quant,
pub precision: Precision,
#[derivative(Default(value = "128"))]
pub token_chunk_size: usize,
#[derivative(Default(value = "8"))]
pub max_batch: usize,
#[salvo(schema(value_type = super::sealed::EmbedDevice))]
pub embed_device: EmbedDevice,
}
#[derive(Debug, Clone, Derivative, Serialize, Deserialize, ToSchema)]
#[derivative(Default)]
#[serde(default)]
pub struct Lora {
#[salvo(schema(value_type = String))]
pub path: PathBuf,
#[derivative(Default(value = "1.0"))]
pub alpha: f32,
}
#[derive(Debug, Clone, Derivative, Serialize, Deserialize, ToSchema)]
#[derivative(Default)]
#[serde(default)]
pub struct State {
#[salvo(schema(value_type = String))]
pub path: PathBuf,
pub name: Option<String>,
#[serde(default = "StateId::new")]
pub id: StateId,
pub default: bool,
}
#[derive(Debug, Derivative, Clone, Serialize, Deserialize, ToSchema)]
#[derivative(Default)]
#[serde(default)]
pub struct Tokenizer {
#[derivative(Default(value = "\"assets/tokenizer/rwkv_vocab_v20230424.json\".into()"))]
#[salvo(schema(value_type = String))]
pub path: PathBuf,
}
#[derive(Debug, Derivative, Clone, Serialize, Deserialize, ToSchema)]
#[derivative(Default)]
#[serde(default)]
pub struct BnfOption {
#[derivative(Default(value = "true"))]
pub enable_bytes_cache: bool,
#[derivative(Default(value = "\"start\".into()"))]
pub start_nonterminal: String,
}
#[derive(Debug, Default, Clone, Copy, Serialize, Deserialize, ToSchema)]
pub enum Precision {
#[default]
Fp16,
Fp32,
}
#[derive(Debug, Default, Clone, Copy, Serialize, Deserialize, ToSchema)]
pub enum AdapterOption {
#[default]
Auto,
Economical,
Manual(usize),
}