use super::{BetaHeader, BetaValue, ModelCapabilities, ThinkingSupport};
use crate::Provider;
use crate::model_profile::catalog::ModelTier;
const BETA_COMPACTION: BetaHeader = BetaHeader {
feature: "compaction",
header_name: "anthropic-beta",
header_value: "compact-2026-01-12",
};
const BETA_STRUCTURED_OUTPUT: BetaHeader = BetaHeader {
feature: "structured_output",
header_name: "anthropic-beta",
header_value: "structured-outputs-2025-11-13",
};
const BETA_INTERLEAVED_THINKING: BetaHeader = BetaHeader {
feature: "interleaved_thinking",
header_name: "anthropic-beta",
header_value: "interleaved-thinking-2025-05-14",
};
const ADAPTIVE_COMPACTION_BETAS: &[BetaHeader] = &[
BETA_COMPACTION,
BETA_STRUCTURED_OUTPUT,
BETA_INTERLEAVED_THINKING,
];
const LEGACY_THINKING_BETAS: &[BetaHeader] = &[BETA_STRUCTURED_OUTPUT, BETA_INTERLEAVED_THINKING];
const BETA_OUTPUT_300K: BetaValue<u32> = BetaValue {
header: "anthropic-beta: output-300k-2026-03-24",
value: 300_000,
};
const OPUS_47_EFFORT: &[&str] = &["low", "medium", "high", "xhigh", "max"];
const CLAUDE_46_EFFORT: &[&str] = &["low", "medium", "high", "max"];
const OPUS_45_EFFORT: &[&str] = &["low", "medium", "high"];
pub const CAPABILITIES: &[ModelCapabilities] = &[
ModelCapabilities {
id: "claude-opus-4-7",
provider: Provider::Anthropic,
display_name: "Claude Opus 4.7",
tier: ModelTier::Recommended,
model_family: "claude-opus-4",
context_window: 1_000_000,
max_output_tokens: 128_000,
context_window_beta: None,
max_output_tokens_beta: Some(BETA_OUTPUT_300K),
vision: true,
image_tool_results: true,
inline_video: false,
realtime: false,
supports_temperature: false,
supports_top_p: false,
supports_top_k: false,
thinking: ThinkingSupport::AnthropicAdaptiveOnly,
supports_reasoning: false,
effort_levels: OPUS_47_EFFORT,
supports_web_search: true,
supports_inference_geo: true,
supports_compaction: true,
supports_structured_output: true,
supports_legacy_penalties: false,
supports_thinking_budget_legacy: false,
beta_headers: ADAPTIVE_COMPACTION_BETAS,
call_timeout_secs: Some(300),
},
ModelCapabilities {
id: "claude-opus-4-6",
provider: Provider::Anthropic,
display_name: "Claude Opus 4.6",
tier: ModelTier::Supported,
model_family: "claude-opus-4",
context_window: 1_000_000,
max_output_tokens: 128_000,
context_window_beta: None,
max_output_tokens_beta: Some(BETA_OUTPUT_300K),
vision: true,
image_tool_results: true,
inline_video: false,
realtime: false,
supports_temperature: true,
supports_top_p: true,
supports_top_k: true,
thinking: ThinkingSupport::AnthropicAdaptiveAndEnabled,
supports_reasoning: false,
effort_levels: CLAUDE_46_EFFORT,
supports_web_search: true,
supports_inference_geo: true,
supports_compaction: true,
supports_structured_output: true,
supports_legacy_penalties: false,
supports_thinking_budget_legacy: true,
beta_headers: ADAPTIVE_COMPACTION_BETAS,
call_timeout_secs: Some(300),
},
ModelCapabilities {
id: "claude-sonnet-4-6",
provider: Provider::Anthropic,
display_name: "Claude Sonnet 4.6",
tier: ModelTier::Recommended,
model_family: "claude-sonnet-4",
context_window: 1_000_000,
max_output_tokens: 64_000,
context_window_beta: None,
max_output_tokens_beta: Some(BETA_OUTPUT_300K),
vision: true,
image_tool_results: true,
inline_video: false,
realtime: false,
supports_temperature: true,
supports_top_p: true,
supports_top_k: true,
thinking: ThinkingSupport::AnthropicAdaptiveAndEnabled,
supports_reasoning: false,
effort_levels: CLAUDE_46_EFFORT,
supports_web_search: true,
supports_inference_geo: true,
supports_compaction: true,
supports_structured_output: true,
supports_legacy_penalties: false,
supports_thinking_budget_legacy: true,
beta_headers: ADAPTIVE_COMPACTION_BETAS,
call_timeout_secs: Some(120),
},
ModelCapabilities {
id: "claude-sonnet-4-5",
provider: Provider::Anthropic,
display_name: "Claude Sonnet 4.5",
tier: ModelTier::Supported,
model_family: "claude-sonnet-4",
context_window: 200_000,
max_output_tokens: 64_000,
context_window_beta: None,
max_output_tokens_beta: None,
vision: true,
image_tool_results: true,
inline_video: false,
realtime: false,
supports_temperature: true,
supports_top_p: true,
supports_top_k: true,
thinking: ThinkingSupport::AnthropicEnabledOnly,
supports_reasoning: false,
effort_levels: &[],
supports_web_search: true,
supports_inference_geo: true,
supports_compaction: false,
supports_structured_output: true,
supports_legacy_penalties: false,
supports_thinking_budget_legacy: true,
beta_headers: LEGACY_THINKING_BETAS,
call_timeout_secs: Some(120),
},
ModelCapabilities {
id: "claude-haiku-4-5-20251001",
provider: Provider::Anthropic,
display_name: "Claude Haiku 4.5",
tier: ModelTier::Recommended,
model_family: "claude-haiku-4",
context_window: 200_000,
max_output_tokens: 64_000,
context_window_beta: None,
max_output_tokens_beta: None,
vision: true,
image_tool_results: true,
inline_video: false,
realtime: false,
supports_temperature: true,
supports_top_p: true,
supports_top_k: true,
thinking: ThinkingSupport::AnthropicEnabledOnly,
supports_reasoning: false,
effort_levels: &[],
supports_web_search: true,
supports_inference_geo: false,
supports_compaction: false,
supports_structured_output: true,
supports_legacy_penalties: false,
supports_thinking_budget_legacy: true,
beta_headers: LEGACY_THINKING_BETAS,
call_timeout_secs: Some(60),
},
ModelCapabilities {
id: "claude-haiku-4-5",
provider: Provider::Anthropic,
display_name: "Claude Haiku 4.5",
tier: ModelTier::Recommended,
model_family: "claude-haiku-4",
context_window: 200_000,
max_output_tokens: 64_000,
context_window_beta: None,
max_output_tokens_beta: None,
vision: true,
image_tool_results: true,
inline_video: false,
realtime: false,
supports_temperature: true,
supports_top_p: true,
supports_top_k: true,
thinking: ThinkingSupport::AnthropicEnabledOnly,
supports_reasoning: false,
effort_levels: &[],
supports_web_search: true,
supports_inference_geo: false,
supports_compaction: false,
supports_structured_output: true,
supports_legacy_penalties: false,
supports_thinking_budget_legacy: true,
beta_headers: LEGACY_THINKING_BETAS,
call_timeout_secs: Some(60),
},
ModelCapabilities {
id: "claude-opus-4-5",
provider: Provider::Anthropic,
display_name: "Claude Opus 4.5",
tier: ModelTier::Supported,
model_family: "claude-opus-4",
context_window: 200_000,
max_output_tokens: 64_000,
context_window_beta: None,
max_output_tokens_beta: None,
vision: true,
image_tool_results: true,
inline_video: false,
realtime: false,
supports_temperature: true,
supports_top_p: true,
supports_top_k: true,
thinking: ThinkingSupport::AnthropicEnabledOnly,
supports_reasoning: false,
effort_levels: OPUS_45_EFFORT,
supports_web_search: true,
supports_inference_geo: true,
supports_compaction: false,
supports_structured_output: true,
supports_legacy_penalties: false,
supports_thinking_budget_legacy: true,
beta_headers: LEGACY_THINKING_BETAS,
call_timeout_secs: Some(300),
},
];