use super::*;
pub(super) fn gemini_profile_data(model_id: &str) -> Option<ModelProfile> {
match model_id {
"gemini-3.1-pro-preview" => Some(ModelProfile {
name: "Gemini 3.1 Pro Preview".into(),
family: "gemini-3.1-pro-preview".into(),
description: None,
release_date: Some("2026-02-19".into()),
last_updated: Some("2026-02-19".into()),
attachment: true,
reasoning: true,
temperature: true,
knowledge: Some("2025-01-01".into()),
tool_call: true,
structured_output: true,
open_weights: false,
cost: Some(ModelCost {
input: 2.00,
output: 12.00,
cache_read: Some(0.20),
cache_write: None,
cost_tiers: vec![CostTier {
above_tokens: 200_000,
input: 4.00,
output: 18.00,
cache_read: Some(0.40),
cache_write: None,
}],
}),
limits: Some(ModelLimits {
context: 1_048_576,
input: None,
output: 65_536,
max_media: None,
}),
modalities: Some(ModelModalities {
input: vec![
Modality::Text,
Modality::Image,
Modality::Audio,
Modality::Video,
Modality::Pdf,
],
output: vec![Modality::Text],
}),
reasoning_effort: None,
speed: None,
verbosity: None,
tool_search: false,
supported_parameters: Vec::new(),
supports_phases: false,
supports_server_compaction: false,
}),
"gemini-3.5-flash" => Some(ModelProfile {
name: "Gemini 3.5 Flash".into(),
family: "gemini-3.5-flash".into(),
description: None,
release_date: Some("2026-05-19".into()),
last_updated: Some("2026-05-19".into()),
attachment: true,
reasoning: true,
temperature: true,
knowledge: Some("2025-01-01".into()),
tool_call: true,
structured_output: true,
open_weights: false,
cost: Some(ModelCost {
input: 1.50,
output: 9.00,
cache_read: Some(0.15),
cache_write: None,
cost_tiers: vec![],
}),
limits: Some(ModelLimits {
context: 1_048_576,
input: None,
output: 65_536,
max_media: None,
}),
modalities: Some(ModelModalities {
input: vec![
Modality::Text,
Modality::Image,
Modality::Audio,
Modality::Video,
Modality::Pdf,
],
output: vec![Modality::Text],
}),
reasoning_effort: None,
speed: None,
verbosity: None,
tool_search: false,
supported_parameters: Vec::new(),
supports_phases: false,
supports_server_compaction: false,
}),
"gemini-3.1-flash-lite" => Some(ModelProfile {
name: "Gemini 3.1 Flash Lite".into(),
family: "gemini-3.1-flash-lite".into(),
description: None,
release_date: Some("2026-05-07".into()),
last_updated: Some("2026-05-07".into()),
attachment: true,
reasoning: true,
temperature: true,
knowledge: Some("2025-01-01".into()),
tool_call: true,
structured_output: true,
open_weights: false,
cost: Some(ModelCost {
input: 0.25,
output: 1.50,
cache_read: Some(0.025),
cache_write: None,
cost_tiers: vec![],
}),
limits: Some(ModelLimits {
context: 1_048_576,
input: None,
output: 65_536,
max_media: None,
}),
modalities: Some(ModelModalities {
input: vec![
Modality::Text,
Modality::Image,
Modality::Audio,
Modality::Video,
Modality::Pdf,
],
output: vec![Modality::Text],
}),
reasoning_effort: None,
speed: None,
verbosity: None,
tool_search: false,
supported_parameters: Vec::new(),
supports_phases: false,
supports_server_compaction: false,
}),
"gemini-2.5-pro" => Some(ModelProfile {
name: "Gemini 2.5 Pro".into(),
family: "gemini-2.5-pro".into(),
description: None,
release_date: Some("2025-03-25".into()),
last_updated: Some("2025-06-05".into()),
attachment: true,
reasoning: true,
temperature: true,
knowledge: Some("2025-03-01".into()),
tool_call: true,
structured_output: true,
open_weights: false,
cost: Some(ModelCost {
input: 1.25,
output: 10.00,
cache_read: Some(0.31),
cache_write: None,
cost_tiers: vec![],
}),
limits: Some(ModelLimits {
context: 1_048_576,
input: None,
output: 65_536,
max_media: None,
}),
modalities: Some(ModelModalities {
input: vec![
Modality::Text,
Modality::Image,
Modality::Audio,
Modality::Video,
],
output: vec![Modality::Text],
}),
reasoning_effort: None,
speed: None,
verbosity: None,
tool_search: false,
supported_parameters: Vec::new(),
supports_phases: false,
supports_server_compaction: false,
}),
"gemini-2.5-flash" => Some(ModelProfile {
name: "Gemini 2.5 Flash".into(),
family: "gemini-2.5-flash".into(),
description: None,
release_date: Some("2025-04-17".into()),
last_updated: Some("2025-06-12".into()),
attachment: true,
reasoning: true,
temperature: true,
knowledge: Some("2025-03-01".into()),
tool_call: true,
structured_output: true,
open_weights: false,
cost: Some(ModelCost {
input: 0.15,
output: 0.60,
cache_read: Some(0.0375),
cache_write: None,
cost_tiers: vec![],
}),
limits: Some(ModelLimits {
context: 1_048_576,
input: None,
output: 65_536,
max_media: None,
}),
modalities: Some(ModelModalities {
input: vec![
Modality::Text,
Modality::Image,
Modality::Audio,
Modality::Video,
],
output: vec![Modality::Text],
}),
reasoning_effort: None,
speed: None,
verbosity: None,
tool_search: false,
supported_parameters: Vec::new(),
supports_phases: false,
supports_server_compaction: false,
}),
"gemini-2.0-flash" => Some(ModelProfile {
name: "Gemini 2.0 Flash".into(),
family: "gemini-2.0-flash".into(),
description: None,
release_date: Some("2025-02-05".into()),
last_updated: Some("2025-02-05".into()),
attachment: true,
reasoning: false,
temperature: true,
knowledge: Some("2024-08-01".into()),
tool_call: true,
structured_output: true,
open_weights: false,
cost: Some(ModelCost {
input: 0.10,
output: 0.40,
cache_read: Some(0.025),
cache_write: None,
cost_tiers: vec![],
}),
limits: Some(ModelLimits {
context: 1_048_576,
input: None,
output: 8_192,
max_media: None,
}),
modalities: Some(ModelModalities {
input: vec![
Modality::Text,
Modality::Image,
Modality::Audio,
Modality::Video,
],
output: vec![Modality::Text, Modality::Image],
}),
reasoning_effort: None,
speed: None,
verbosity: None,
tool_search: false,
supported_parameters: Vec::new(),
supports_phases: false,
supports_server_compaction: false,
}),
_ => None,
}
}