use serde::{Deserialize, Serialize};
#[allow(clippy::struct_excessive_bools)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct Capabilities {
pub max_input_tokens: u32,
pub max_output_tokens: u32,
pub vision: bool,
pub tool_use: ToolUseCapability,
pub thinking: bool,
pub prompt_caching: PromptCachingCapability,
pub json_mode: bool,
pub streaming: bool,
pub stop_sequences: bool,
pub top_k: bool,
pub system_prompt: SystemPromptCapability,
pub refusal_field: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ToolUseCapability {
None,
Basic,
ParallelCalls,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum PromptCachingCapability {
None,
Automatic,
Explicit {
max_breakpoints: u32,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum SystemPromptCapability {
SeparateField,
SystemRole,
DeveloperRole,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct ModelInfo {
pub id: String,
pub native_id: String,
pub display_name: String,
pub capabilities: Capabilities,
}