use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum DeviceType {
Invalid,
#[default]
CPU,
GPU,
NPU,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PromptTemplate {
#[serde(skip_serializing_if = "Option::is_none")]
pub system: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub assistant: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub prompt: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Runtime {
pub device_type: DeviceType,
pub execution_provider: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Parameter {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub value: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ModelSettings {
#[serde(skip_serializing_if = "Option::is_none")]
pub parameters: Option<Vec<Parameter>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ModelInfo {
pub id: String,
pub name: String,
pub version: u64,
pub alias: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
pub provider_type: String,
pub uri: String,
pub model_type: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub prompt_template: Option<PromptTemplate>,
#[serde(skip_serializing_if = "Option::is_none")]
pub publisher: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub model_settings: Option<ModelSettings>,
#[serde(skip_serializing_if = "Option::is_none")]
pub license: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub license_description: Option<String>,
pub cached: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub task: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub runtime: Option<Runtime>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_size_mb: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_tool_calling: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_output_tokens: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub min_fl_version: Option<String>,
#[serde(default)]
pub created_at_unix: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub context_length: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_modalities: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub output_modalities: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub capabilities: Option<String>,
}
#[derive(Debug, Clone)]
pub enum ChatResponseFormat {
Text,
JsonObject,
JsonSchema(String),
LarkGrammar(String),
}
#[derive(Debug, Clone)]
pub enum ChatToolChoice {
None,
Auto,
Required,
Function(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct EpInfo {
pub name: String,
pub is_registered: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct EpDownloadResult {
pub success: bool,
pub status: String,
pub registered_eps: Vec<String>,
pub failed_eps: Vec<String>,
}