use super::reasoning::ReasoningCapability;
#[derive(Debug, Clone)]
pub struct ModelCapabilities {
pub supports_tools: bool,
pub supports_vision: bool,
pub supports_reasoning: ReasoningCapability,
pub max_context_tokens: Option<usize>,
pub max_output_tokens: Option<usize>,
pub emits_provider_continuation: bool,
}
impl ModelCapabilities {
#[must_use]
pub fn with_provider_continuation(mut self) -> Self {
self.emits_provider_continuation = true;
self
}
}
impl ModelCapabilities {
#[must_use]
pub fn ollama_default() -> Self {
Self {
supports_tools: true,
supports_vision: false,
supports_reasoning: ReasoningCapability::Binary,
max_context_tokens: None,
max_output_tokens: None,
emits_provider_continuation: false,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn ollama_default_is_conservative() {
let caps = ModelCapabilities::ollama_default();
assert!(caps.supports_tools);
assert!(!caps.supports_vision);
assert_eq!(caps.supports_reasoning, ReasoningCapability::Binary);
assert!(caps.max_context_tokens.is_none());
}
#[test]
fn capabilities_are_cloneable() {
let caps = ModelCapabilities::ollama_default();
let cloned = caps.clone();
assert_eq!(cloned.supports_tools, caps.supports_tools);
}
}