diff --git a/crates/goose/examples/build_canonical_models.rs b/crates/goose/examples/build_canonical_models.rs index fc73e1d620..45d47f607c 100644 --- a/crates/goose/examples/build_canonical_models.rs +++ b/crates/goose/examples/build_canonical_models.rs @@ -250,12 +250,5 @@ async fn main() -> Result<()> { registry.to_file(&output_path)?; println!("\n✓ Wrote {} models to {}", registry.count(), output_path.display()); - // Also write a timestamped report - let timestamp = chrono::Local::now().format("%Y%m%d_%H%M%S"); - let report_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) - .join(format!("src/providers/canonical/data/report_{}.json", timestamp)); - registry.to_file(&report_path)?; - println!("✓ Wrote report to {}", report_path.display()); - Ok(()) } diff --git a/crates/goose/examples/canonical_model_checker.rs b/crates/goose/examples/canonical_model_checker.rs index 2a250de8fb..c9564a6ac9 100644 --- a/crates/goose/examples/canonical_model_checker.rs +++ b/crates/goose/examples/canonical_model_checker.rs @@ -1,13 +1,22 @@ /// Canonical Model Checker /// /// This script checks which models from top providers are properly mapped to canonical models. -/// It outputs a report showing: +/// It maintains a lock file of mappings and detects changes between runs. +/// +/// Outputs: /// - Models that are NOT mapped to canonical models /// - Full list of (provider, model) <-> canonical-model mappings -/// - Comparison with previous runs (if available) +/// - Diff report showing mapping changes since last run: +/// * Changed mappings (model now maps to a different canonical model) +/// * Added mappings (model gained a canonical mapping) +/// * Removed mappings (model lost its canonical mapping) +/// +/// Output File: +/// - src/providers/canonical/data/canonical_mapping_report.json +/// Contains full report with mapping data (acts as a lock file) /// /// Usage: -/// cargo run --example canonical_model_checker -- [--output report.json] +/// cargo run --example canonical_model_checker -- [--output custom_path.json] /// use anyhow::{Context, Result}; @@ -19,12 +28,19 @@ use serde::{Deserialize, Serialize}; use std::collections::{HashMap, HashSet}; use std::path::PathBuf; -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)] struct ProviderModelPair { provider: String, model: String, } +#[derive(Debug, Clone, Serialize, Deserialize)] +struct MappingEntry { + provider: String, + model: String, + canonical: String, +} + #[derive(Debug, Clone, Serialize, Deserialize)] struct MappingReport { /// Timestamp of this report @@ -34,8 +50,12 @@ struct MappingReport { unmapped_models: Vec, /// All mappings: (provider, model) -> canonical model + /// Stored per provider for backward compatibility all_mappings: HashMap>, + /// Flat list of all mappings for easier comparison (lock file format) + mapped_models: Vec, + /// Total models checked per provider model_counts: HashMap, @@ -49,6 +69,7 @@ impl MappingReport { timestamp: chrono::Utc::now().to_rfc3339(), unmapped_models: Vec::new(), all_mappings: HashMap::new(), + mapped_models: Vec::new(), model_counts: HashMap::new(), canonical_models_used: HashSet::new(), } @@ -76,9 +97,14 @@ impl MappingReport { } } - // Track canonical models used - for canonical in mapping_map.values() { + // Track canonical models used and build flat mapping list + for (model, canonical) in &mapping_map { self.canonical_models_used.insert(canonical.clone()); + self.mapped_models.push(MappingEntry { + provider: provider_name.to_string(), + model: model.clone(), + canonical: canonical.clone(), + }); } // Store mappings and counts @@ -158,33 +184,74 @@ impl MappingReport { println!("CHANGES SINCE PREVIOUS RUN"); println!("{}", "=".repeat(80)); - // Find new unmapped models - let prev_unmapped: HashSet<_> = previous.unmapped_models - .iter() - .map(|p| (&p.provider, &p.model)) - .collect(); - let curr_unmapped: HashSet<_> = self.unmapped_models - .iter() - .map(|p| (&p.provider, &p.model)) - .collect(); + // Build lookup maps for current and previous mappings + // Key: (provider, model), Value: canonical model + let mut prev_map: HashMap<(String, String), String> = HashMap::new(); + for entry in &previous.mapped_models { + prev_map.insert((entry.provider.clone(), entry.model.clone()), entry.canonical.clone()); + } - let newly_mapped: Vec<_> = prev_unmapped.difference(&curr_unmapped).collect(); - let newly_unmapped: Vec<_> = curr_unmapped.difference(&prev_unmapped).collect(); + let mut curr_map: HashMap<(String, String), String> = HashMap::new(); + for entry in &self.mapped_models { + curr_map.insert((entry.provider.clone(), entry.model.clone()), entry.canonical.clone()); + } - if newly_mapped.is_empty() && newly_unmapped.is_empty() { + // Find changes + let mut changed_mappings = Vec::new(); + let mut added_mappings = Vec::new(); + let mut removed_mappings = Vec::new(); + + // Check current mappings against previous + for (key @ (provider, model), canonical) in &curr_map { + match prev_map.get(key) { + Some(prev_canonical) if prev_canonical != canonical => { + // Mapping changed + changed_mappings.push((provider.clone(), model.clone(), prev_canonical.clone(), canonical.clone())); + } + None => { + // New mapping + added_mappings.push((provider.clone(), model.clone(), canonical.clone())); + } + _ => { + // No change + } + } + } + + // Check for removed mappings + for (key @ (provider, model), canonical) in &prev_map { + if !curr_map.contains_key(key) { + removed_mappings.push((provider.clone(), model.clone(), canonical.clone())); + } + } + + // Print changes + if changed_mappings.is_empty() && added_mappings.is_empty() && removed_mappings.is_empty() { println!("\nNo changes in model mappings."); } else { - if !newly_mapped.is_empty() { - println!("\n✓ Newly Mapped Models ({}):", newly_mapped.len()); - for (provider, model) in newly_mapped { + if !changed_mappings.is_empty() { + println!("\n⚠ Changed Mappings ({}):", changed_mappings.len()); + println!(" (Models that now map to a different canonical model)"); + for (provider, model, old_canonical, new_canonical) in changed_mappings { println!(" {} / {}", provider, model); + println!(" WAS: {}", old_canonical); + println!(" NOW: {}", new_canonical); } } - if !newly_unmapped.is_empty() { - println!("\n✗ Newly Unmapped Models ({}):", newly_unmapped.len()); - for (provider, model) in newly_unmapped { - println!(" {} / {}", provider, model); + if !added_mappings.is_empty() { + println!("\n✓ Added Mappings ({}):", added_mappings.len()); + println!(" (Models that gained a canonical mapping)"); + for (provider, model, canonical) in added_mappings { + println!(" {} / {} -> {}", provider, model, canonical); + } + } + + if !removed_mappings.is_empty() { + println!("\n✗ Removed Mappings ({}):", removed_mappings.len()); + println!(" (Models that lost their canonical mapping)"); + for (provider, model, canonical) in removed_mappings { + println!(" {} / {} (was: {})", provider, model, canonical); } } } @@ -294,7 +361,8 @@ async fn main() -> Result<()> { let output_path = if args.len() > 2 && args[1] == "--output" { PathBuf::from(&args[2]) } else { - PathBuf::from("canonical_mapping_report.json") + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("src/providers/canonical/data/canonical_mapping_report.json") }; // Try to compare with previous run diff --git a/crates/goose/src/providers/canonical/README.md b/crates/goose/src/providers/canonical/README.md index 4fd72a00a7..2c0b6658b7 100644 --- a/crates/goose/src/providers/canonical/README.md +++ b/crates/goose/src/providers/canonical/README.md @@ -132,7 +132,17 @@ This will: - Check which models are mapped to canonical models - Report unmapped models - Show canonical models in use -- Compare with previous runs +- Compare with previous runs to detect mapping changes +- Generate output file: `src/providers/canonical/data/canonical_mapping_report.json` + +**Lock File / Diff Functionality:** + +The checker maintains `canonical_mapping_report.json` which stores all (provider, model) -> canonical model mappings along with the full report. On subsequent runs, it compares against this file and reports: +- **Changed Mappings**: Models that now map to a different canonical model +- **Added Mappings**: Models that gained a canonical mapping +- **Removed Mappings**: Models that lost their canonical mapping + +This helps you track changes in model mappings over time, similar to how package lock files work. **Note:** Requires proper provider credentials to be configured. diff --git a/canonical_mapping_report.json b/crates/goose/src/providers/canonical/data/canonical_mapping_report.json similarity index 83% rename from canonical_mapping_report.json rename to crates/goose/src/providers/canonical/data/canonical_mapping_report.json index 125b311a53..bdf57804bb 100644 --- a/canonical_mapping_report.json +++ b/crates/goose/src/providers/canonical/data/canonical_mapping_report.json @@ -1,5 +1,5 @@ { - "timestamp": "2025-11-13T17:32:30.830102+00:00", + "timestamp": "2025-11-14T06:37:19.570393+00:00", "unmapped_models": [ { "provider": "openai", @@ -2165,6 +2165,10 @@ "provider": "openai", "model": "gpt-5-search-api-2025-10-14" }, + { + "provider": "openai", + "model": "gpt-5.1-chat-latest" + }, { "provider": "openai", "model": "gpt-audio" @@ -2649,10 +2653,6 @@ "provider": "openrouter", "model": "openai/gpt-oss-20b:free" }, - { - "provider": "openrouter", - "model": "openrouter/polaris-alpha" - }, { "provider": "openrouter", "model": "qwen/qwen-2.5-72b-instruct" @@ -3555,7 +3555,376 @@ } ], "all_mappings": { - "tetrate": [], + "databricks": [], + "openai": [ + { + "provider_model": "chatgpt-4o-latest", + "canonical_model": "openai/chatgpt-4o-latest", + "verified": true + }, + { + "provider_model": "gpt-3.5-turbo", + "canonical_model": "openai/gpt-3.5-turbo", + "verified": true + }, + { + "provider_model": "gpt-3.5-turbo-0125", + "canonical_model": "openai/gpt-3.5-turbo", + "verified": true + }, + { + "provider_model": "gpt-3.5-turbo-1106", + "canonical_model": "openai/gpt-3.5-turbo", + "verified": true + }, + { + "provider_model": "gpt-3.5-turbo-16k", + "canonical_model": "openai/gpt-3.5-turbo-16k", + "verified": true + }, + { + "provider_model": "gpt-3.5-turbo-instruct", + "canonical_model": "openai/gpt-3.5-turbo-instruct", + "verified": true + }, + { + "provider_model": "gpt-3.5-turbo-instruct-0914", + "canonical_model": "openai/gpt-3.5-turbo-instruct", + "verified": true + }, + { + "provider_model": "gpt-4", + "canonical_model": "openai/gpt-4", + "verified": true + }, + { + "provider_model": "gpt-4-0125-preview", + "canonical_model": "openai/gpt-4", + "verified": true + }, + { + "provider_model": "gpt-4-0314", + "canonical_model": "openai/gpt-4", + "verified": true + }, + { + "provider_model": "gpt-4-0613", + "canonical_model": "openai/gpt-4", + "verified": true + }, + { + "provider_model": "gpt-4-1106-preview", + "canonical_model": "openai/gpt-4", + "verified": true + }, + { + "provider_model": "gpt-4-turbo", + "canonical_model": "openai/gpt-4-turbo", + "verified": true + }, + { + "provider_model": "gpt-4-turbo-2024-04-09", + "canonical_model": "openai/gpt-4-turbo", + "verified": true + }, + { + "provider_model": "gpt-4-turbo-preview", + "canonical_model": "openai/gpt-4-turbo", + "verified": true + }, + { + "provider_model": "gpt-4.1", + "canonical_model": "openai/gpt-4.1", + "verified": true + }, + { + "provider_model": "gpt-4.1-2025-04-14", + "canonical_model": "openai/gpt-4.1", + "verified": true + }, + { + "provider_model": "gpt-4.1-mini", + "canonical_model": "openai/gpt-4.1-mini", + "verified": true + }, + { + "provider_model": "gpt-4.1-mini-2025-04-14", + "canonical_model": "openai/gpt-4.1-mini", + "verified": true + }, + { + "provider_model": "gpt-4.1-nano", + "canonical_model": "openai/gpt-4.1-nano", + "verified": true + }, + { + "provider_model": "gpt-4.1-nano-2025-04-14", + "canonical_model": "openai/gpt-4.1-nano", + "verified": true + }, + { + "provider_model": "gpt-4o", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "gpt-4o-2024-05-13", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "gpt-4o-2024-08-06", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "gpt-4o-2024-11-20", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "gpt-4o-audio-preview", + "canonical_model": "openai/gpt-4o-audio", + "verified": true + }, + { + "provider_model": "gpt-4o-audio-preview-2024-10-01", + "canonical_model": "openai/gpt-4o-audio", + "verified": true + }, + { + "provider_model": "gpt-4o-audio-preview-2024-12-17", + "canonical_model": "openai/gpt-4o-audio", + "verified": true + }, + { + "provider_model": "gpt-4o-audio-preview-2025-06-03", + "canonical_model": "openai/gpt-4o-audio", + "verified": true + }, + { + "provider_model": "gpt-4o-mini", + "canonical_model": "openai/gpt-4o-mini", + "verified": true + }, + { + "provider_model": "gpt-4o-mini-2024-07-18", + "canonical_model": "openai/gpt-4o-mini", + "verified": true + }, + { + "provider_model": "gpt-4o-mini-search-preview", + "canonical_model": "openai/gpt-4o-mini-search", + "verified": true + }, + { + "provider_model": "gpt-4o-mini-search-preview-2025-03-11", + "canonical_model": "openai/gpt-4o-mini-search", + "verified": true + }, + { + "provider_model": "gpt-4o-search-preview", + "canonical_model": "openai/gpt-4o-search", + "verified": true + }, + { + "provider_model": "gpt-4o-search-preview-2025-03-11", + "canonical_model": "openai/gpt-4o-search", + "verified": true + }, + { + "provider_model": "gpt-5", + "canonical_model": "openai/gpt-5", + "verified": true + }, + { + "provider_model": "gpt-5-2025-08-07", + "canonical_model": "openai/gpt-5", + "verified": true + }, + { + "provider_model": "gpt-5-codex", + "canonical_model": "openai/gpt-5-codex", + "verified": true + }, + { + "provider_model": "gpt-5-mini", + "canonical_model": "openai/gpt-5-mini", + "verified": true + }, + { + "provider_model": "gpt-5-mini-2025-08-07", + "canonical_model": "openai/gpt-5-mini", + "verified": true + }, + { + "provider_model": "gpt-5-nano", + "canonical_model": "openai/gpt-5-nano", + "verified": true + }, + { + "provider_model": "gpt-5-nano-2025-08-07", + "canonical_model": "openai/gpt-5-nano", + "verified": true + }, + { + "provider_model": "gpt-5-pro", + "canonical_model": "openai/gpt-5-pro", + "verified": true + }, + { + "provider_model": "gpt-5-pro-2025-10-06", + "canonical_model": "openai/gpt-5-pro", + "verified": true + }, + { + "provider_model": "gpt-5.1", + "canonical_model": "openai/gpt-5.1", + "verified": true + }, + { + "provider_model": "gpt-5.1-2025-11-13", + "canonical_model": "openai/gpt-5.1", + "verified": true + }, + { + "provider_model": "gpt-5.1-codex", + "canonical_model": "openai/gpt-5.1-codex", + "verified": true + }, + { + "provider_model": "gpt-5.1-codex-mini", + "canonical_model": "openai/gpt-5.1-codex-mini", + "verified": true + }, + { + "provider_model": "o1", + "canonical_model": "openai/o1", + "verified": true + }, + { + "provider_model": "o1-2024-12-17", + "canonical_model": "openai/o1", + "verified": true + }, + { + "provider_model": "o1-pro", + "canonical_model": "openai/o1-pro", + "verified": true + }, + { + "provider_model": "o1-pro-2025-03-19", + "canonical_model": "openai/o1-pro", + "verified": true + }, + { + "provider_model": "o3", + "canonical_model": "openai/o3", + "verified": true + }, + { + "provider_model": "o3-2025-04-16", + "canonical_model": "openai/o3", + "verified": true + }, + { + "provider_model": "o3-deep-research", + "canonical_model": "openai/o3-deep-research", + "verified": true + }, + { + "provider_model": "o3-deep-research-2025-06-26", + "canonical_model": "openai/o3-deep-research", + "verified": true + }, + { + "provider_model": "o3-mini", + "canonical_model": "openai/o3-mini", + "verified": true + }, + { + "provider_model": "o3-mini-2025-01-31", + "canonical_model": "openai/o3-mini", + "verified": true + }, + { + "provider_model": "o3-pro", + "canonical_model": "openai/o3-pro", + "verified": true + }, + { + "provider_model": "o3-pro-2025-06-10", + "canonical_model": "openai/o3-pro", + "verified": true + }, + { + "provider_model": "o4-mini", + "canonical_model": "openai/o4-mini", + "verified": true + }, + { + "provider_model": "o4-mini-2025-04-16", + "canonical_model": "openai/o4-mini", + "verified": true + }, + { + "provider_model": "o4-mini-deep-research", + "canonical_model": "openai/o4-mini-deep-research", + "verified": true + }, + { + "provider_model": "o4-mini-deep-research-2025-06-26", + "canonical_model": "openai/o4-mini-deep-research", + "verified": true + } + ], + "anthropic": [ + { + "provider_model": "claude-3-5-haiku-20241022", + "canonical_model": "anthropic/claude-3.5-haiku", + "verified": true + }, + { + "provider_model": "claude-3-7-sonnet-20250219", + "canonical_model": "anthropic/claude-3.7-sonnet", + "verified": true + }, + { + "provider_model": "claude-3-haiku-20240307", + "canonical_model": "anthropic/claude-3-haiku", + "verified": true + }, + { + "provider_model": "claude-3-opus-20240229", + "canonical_model": "anthropic/claude-3-opus", + "verified": true + }, + { + "provider_model": "claude-haiku-4-5-20251001", + "canonical_model": "anthropic/claude-haiku-4.5", + "verified": true + }, + { + "provider_model": "claude-opus-4-1-20250805", + "canonical_model": "anthropic/claude-opus-4.1", + "verified": true + }, + { + "provider_model": "claude-opus-4-20250514", + "canonical_model": "anthropic/claude-opus-4", + "verified": true + }, + { + "provider_model": "claude-sonnet-4-20250514", + "canonical_model": "anthropic/claude-sonnet-4", + "verified": true + }, + { + "provider_model": "claude-sonnet-4-5-20250929", + "canonical_model": "anthropic/claude-sonnet-4.5", + "verified": true + } + ], "openrouter": [ { "provider_model": "anthropic/claude-3-haiku", @@ -3812,6 +4181,21 @@ "canonical_model": "openai/gpt-5-pro", "verified": true }, + { + "provider_model": "openai/gpt-5.1", + "canonical_model": "openai/gpt-5.1", + "verified": true + }, + { + "provider_model": "openai/gpt-5.1-codex", + "canonical_model": "openai/gpt-5.1-codex", + "verified": true + }, + { + "provider_model": "openai/gpt-5.1-codex-mini", + "canonical_model": "openai/gpt-5.1-codex-mini", + "verified": true + }, { "provider_model": "openai/gpt-oss-120b", "canonical_model": "openai/gpt-oss-120b", @@ -3819,7 +4203,7 @@ }, { "provider_model": "openai/gpt-oss-120b:exacto", - "canonical_model": "openai/gpt-oss-120b:exacto", + "canonical_model": "openai/gpt-oss-120b", "verified": true }, { @@ -3878,356 +4262,7 @@ "verified": true } ], - "anthropic": [ - { - "provider_model": "claude-3-5-haiku-20241022", - "canonical_model": "anthropic/claude-3.5-haiku", - "verified": true - }, - { - "provider_model": "claude-3-7-sonnet-20250219", - "canonical_model": "anthropic/claude-3.7-sonnet", - "verified": true - }, - { - "provider_model": "claude-3-haiku-20240307", - "canonical_model": "anthropic/claude-3-haiku", - "verified": true - }, - { - "provider_model": "claude-3-opus-20240229", - "canonical_model": "anthropic/claude-3-opus", - "verified": true - }, - { - "provider_model": "claude-haiku-4-5-20251001", - "canonical_model": "anthropic/claude-haiku-4.5", - "verified": true - }, - { - "provider_model": "claude-opus-4-1-20250805", - "canonical_model": "anthropic/claude-opus-4.1", - "verified": true - }, - { - "provider_model": "claude-opus-4-20250514", - "canonical_model": "anthropic/claude-opus-4", - "verified": true - }, - { - "provider_model": "claude-sonnet-4-20250514", - "canonical_model": "anthropic/claude-sonnet-4", - "verified": true - }, - { - "provider_model": "claude-sonnet-4-5-20250929", - "canonical_model": "anthropic/claude-sonnet-4.5", - "verified": true - } - ], - "openai": [ - { - "provider_model": "chatgpt-4o-latest", - "canonical_model": "openai/chatgpt-4o-latest", - "verified": true - }, - { - "provider_model": "gpt-3.5-turbo", - "canonical_model": "openai/gpt-3.5-turbo", - "verified": true - }, - { - "provider_model": "gpt-3.5-turbo-0125", - "canonical_model": "openai/gpt-3.5-turbo", - "verified": true - }, - { - "provider_model": "gpt-3.5-turbo-1106", - "canonical_model": "openai/gpt-3.5-turbo", - "verified": true - }, - { - "provider_model": "gpt-3.5-turbo-16k", - "canonical_model": "openai/gpt-3.5-turbo-16k", - "verified": true - }, - { - "provider_model": "gpt-3.5-turbo-instruct", - "canonical_model": "openai/gpt-3.5-turbo-instruct", - "verified": true - }, - { - "provider_model": "gpt-3.5-turbo-instruct-0914", - "canonical_model": "openai/gpt-3.5-turbo-instruct", - "verified": true - }, - { - "provider_model": "gpt-4", - "canonical_model": "openai/gpt-4", - "verified": true - }, - { - "provider_model": "gpt-4-0125-preview", - "canonical_model": "openai/gpt-4", - "verified": true - }, - { - "provider_model": "gpt-4-0314", - "canonical_model": "openai/gpt-4", - "verified": true - }, - { - "provider_model": "gpt-4-0613", - "canonical_model": "openai/gpt-4", - "verified": true - }, - { - "provider_model": "gpt-4-1106-preview", - "canonical_model": "openai/gpt-4", - "verified": true - }, - { - "provider_model": "gpt-4-turbo", - "canonical_model": "openai/gpt-4-turbo", - "verified": true - }, - { - "provider_model": "gpt-4-turbo-2024-04-09", - "canonical_model": "openai/gpt-4-turbo", - "verified": true - }, - { - "provider_model": "gpt-4-turbo-preview", - "canonical_model": "openai/gpt-4-turbo", - "verified": true - }, - { - "provider_model": "gpt-4.1", - "canonical_model": "openai/gpt-4.1", - "verified": true - }, - { - "provider_model": "gpt-4.1-2025-04-14", - "canonical_model": "openai/gpt-4.1", - "verified": true - }, - { - "provider_model": "gpt-4.1-mini", - "canonical_model": "openai/gpt-4.1-mini", - "verified": true - }, - { - "provider_model": "gpt-4.1-mini-2025-04-14", - "canonical_model": "openai/gpt-4.1-mini", - "verified": true - }, - { - "provider_model": "gpt-4.1-nano", - "canonical_model": "openai/gpt-4.1-nano", - "verified": true - }, - { - "provider_model": "gpt-4.1-nano-2025-04-14", - "canonical_model": "openai/gpt-4.1-nano", - "verified": true - }, - { - "provider_model": "gpt-4o", - "canonical_model": "openai/gpt-4o", - "verified": true - }, - { - "provider_model": "gpt-4o-2024-05-13", - "canonical_model": "openai/gpt-4o", - "verified": true - }, - { - "provider_model": "gpt-4o-2024-08-06", - "canonical_model": "openai/gpt-4o", - "verified": true - }, - { - "provider_model": "gpt-4o-2024-11-20", - "canonical_model": "openai/gpt-4o", - "verified": true - }, - { - "provider_model": "gpt-4o-audio-preview", - "canonical_model": "openai/gpt-4o-audio", - "verified": true - }, - { - "provider_model": "gpt-4o-audio-preview-2024-10-01", - "canonical_model": "openai/gpt-4o-audio", - "verified": true - }, - { - "provider_model": "gpt-4o-audio-preview-2024-12-17", - "canonical_model": "openai/gpt-4o-audio", - "verified": true - }, - { - "provider_model": "gpt-4o-audio-preview-2025-06-03", - "canonical_model": "openai/gpt-4o-audio", - "verified": true - }, - { - "provider_model": "gpt-4o-mini", - "canonical_model": "openai/gpt-4o-mini", - "verified": true - }, - { - "provider_model": "gpt-4o-mini-2024-07-18", - "canonical_model": "openai/gpt-4o-mini", - "verified": true - }, - { - "provider_model": "gpt-4o-mini-search-preview", - "canonical_model": "openai/gpt-4o-mini-search", - "verified": true - }, - { - "provider_model": "gpt-4o-mini-search-preview-2025-03-11", - "canonical_model": "openai/gpt-4o-mini-search", - "verified": true - }, - { - "provider_model": "gpt-4o-search-preview", - "canonical_model": "openai/gpt-4o-search", - "verified": true - }, - { - "provider_model": "gpt-4o-search-preview-2025-03-11", - "canonical_model": "openai/gpt-4o-search", - "verified": true - }, - { - "provider_model": "gpt-5", - "canonical_model": "openai/gpt-5", - "verified": true - }, - { - "provider_model": "gpt-5-2025-08-07", - "canonical_model": "openai/gpt-5", - "verified": true - }, - { - "provider_model": "gpt-5-codex", - "canonical_model": "openai/gpt-5-codex", - "verified": true - }, - { - "provider_model": "gpt-5-mini", - "canonical_model": "openai/gpt-5-mini", - "verified": true - }, - { - "provider_model": "gpt-5-mini-2025-08-07", - "canonical_model": "openai/gpt-5-mini", - "verified": true - }, - { - "provider_model": "gpt-5-nano", - "canonical_model": "openai/gpt-5-nano", - "verified": true - }, - { - "provider_model": "gpt-5-nano-2025-08-07", - "canonical_model": "openai/gpt-5-nano", - "verified": true - }, - { - "provider_model": "gpt-5-pro", - "canonical_model": "openai/gpt-5-pro", - "verified": true - }, - { - "provider_model": "gpt-5-pro-2025-10-06", - "canonical_model": "openai/gpt-5-pro", - "verified": true - }, - { - "provider_model": "o1", - "canonical_model": "openai/o1", - "verified": true - }, - { - "provider_model": "o1-2024-12-17", - "canonical_model": "openai/o1", - "verified": true - }, - { - "provider_model": "o1-pro", - "canonical_model": "openai/o1-pro", - "verified": true - }, - { - "provider_model": "o1-pro-2025-03-19", - "canonical_model": "openai/o1-pro", - "verified": true - }, - { - "provider_model": "o3", - "canonical_model": "openai/o3", - "verified": true - }, - { - "provider_model": "o3-2025-04-16", - "canonical_model": "openai/o3", - "verified": true - }, - { - "provider_model": "o3-deep-research", - "canonical_model": "openai/o3-deep-research", - "verified": true - }, - { - "provider_model": "o3-deep-research-2025-06-26", - "canonical_model": "openai/o3-deep-research", - "verified": true - }, - { - "provider_model": "o3-mini", - "canonical_model": "openai/o3-mini", - "verified": true - }, - { - "provider_model": "o3-mini-2025-01-31", - "canonical_model": "openai/o3-mini", - "verified": true - }, - { - "provider_model": "o3-pro", - "canonical_model": "openai/o3-pro", - "verified": true - }, - { - "provider_model": "o3-pro-2025-06-10", - "canonical_model": "openai/o3-pro", - "verified": true - }, - { - "provider_model": "o4-mini", - "canonical_model": "openai/o4-mini", - "verified": true - }, - { - "provider_model": "o4-mini-2025-04-16", - "canonical_model": "openai/o4-mini", - "verified": true - }, - { - "provider_model": "o4-mini-deep-research", - "canonical_model": "openai/o4-mini-deep-research", - "verified": true - }, - { - "provider_model": "o4-mini-deep-research-2025-06-26", - "canonical_model": "openai/o4-mini-deep-research", - "verified": true - } - ], - "databricks": [], + "tetrate": [], "google": [ { "provider_model": "gemini-2.0-flash", @@ -4346,72 +4381,891 @@ } ] }, + "mapped_models": [ + { + "provider": "anthropic", + "model": "claude-3-haiku-20240307", + "canonical": "anthropic/claude-3-haiku" + }, + { + "provider": "anthropic", + "model": "claude-3-opus-20240229", + "canonical": "anthropic/claude-3-opus" + }, + { + "provider": "anthropic", + "model": "claude-3-5-haiku-20241022", + "canonical": "anthropic/claude-3.5-haiku" + }, + { + "provider": "anthropic", + "model": "claude-opus-4-20250514", + "canonical": "anthropic/claude-opus-4" + }, + { + "provider": "anthropic", + "model": "claude-sonnet-4-20250514", + "canonical": "anthropic/claude-sonnet-4" + }, + { + "provider": "anthropic", + "model": "claude-sonnet-4-5-20250929", + "canonical": "anthropic/claude-sonnet-4.5" + }, + { + "provider": "anthropic", + "model": "claude-3-7-sonnet-20250219", + "canonical": "anthropic/claude-3.7-sonnet" + }, + { + "provider": "anthropic", + "model": "claude-haiku-4-5-20251001", + "canonical": "anthropic/claude-haiku-4.5" + }, + { + "provider": "anthropic", + "model": "claude-opus-4-1-20250805", + "canonical": "anthropic/claude-opus-4.1" + }, + { + "provider": "openai", + "model": "gpt-5", + "canonical": "openai/gpt-5" + }, + { + "provider": "openai", + "model": "gpt-4-0613", + "canonical": "openai/gpt-4" + }, + { + "provider": "openai", + "model": "gpt-4o-mini", + "canonical": "openai/gpt-4o-mini" + }, + { + "provider": "openai", + "model": "gpt-5-codex", + "canonical": "openai/gpt-5-codex" + }, + { + "provider": "openai", + "model": "o3", + "canonical": "openai/o3" + }, + { + "provider": "openai", + "model": "gpt-4-turbo-preview", + "canonical": "openai/gpt-4-turbo" + }, + { + "provider": "openai", + "model": "gpt-5-pro-2025-10-06", + "canonical": "openai/gpt-5-pro" + }, + { + "provider": "openai", + "model": "gpt-3.5-turbo", + "canonical": "openai/gpt-3.5-turbo" + }, + { + "provider": "openai", + "model": "gpt-4.1", + "canonical": "openai/gpt-4.1" + }, + { + "provider": "openai", + "model": "o3-mini", + "canonical": "openai/o3-mini" + }, + { + "provider": "openai", + "model": "o4-mini-deep-research", + "canonical": "openai/o4-mini-deep-research" + }, + { + "provider": "openai", + "model": "gpt-4o-2024-08-06", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openai", + "model": "o1", + "canonical": "openai/o1" + }, + { + "provider": "openai", + "model": "gpt-4-1106-preview", + "canonical": "openai/gpt-4" + }, + { + "provider": "openai", + "model": "gpt-4.1-mini", + "canonical": "openai/gpt-4.1-mini" + }, + { + "provider": "openai", + "model": "o3-pro-2025-06-10", + "canonical": "openai/o3-pro" + }, + { + "provider": "openai", + "model": "gpt-4o-audio-preview-2024-10-01", + "canonical": "openai/gpt-4o-audio" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-search-preview-2025-03-11", + "canonical": "openai/gpt-4o-mini-search" + }, + { + "provider": "openai", + "model": "o3-deep-research", + "canonical": "openai/o3-deep-research" + }, + { + "provider": "openai", + "model": "o4-mini", + "canonical": "openai/o4-mini" + }, + { + "provider": "openai", + "model": "gpt-3.5-turbo-16k", + "canonical": "openai/gpt-3.5-turbo-16k" + }, + { + "provider": "openai", + "model": "gpt-4o-search-preview", + "canonical": "openai/gpt-4o-search" + }, + { + "provider": "openai", + "model": "gpt-4o", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openai", + "model": "gpt-5.1-2025-11-13", + "canonical": "openai/gpt-5.1" + }, + { + "provider": "openai", + "model": "o3-deep-research-2025-06-26", + "canonical": "openai/o3-deep-research" + }, + { + "provider": "openai", + "model": "gpt-5-2025-08-07", + "canonical": "openai/gpt-5" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-search-preview", + "canonical": "openai/gpt-4o-mini-search" + }, + { + "provider": "openai", + "model": "gpt-3.5-turbo-1106", + "canonical": "openai/gpt-3.5-turbo" + }, + { + "provider": "openai", + "model": "gpt-4.1-2025-04-14", + "canonical": "openai/gpt-4.1" + }, + { + "provider": "openai", + "model": "gpt-4.1-mini-2025-04-14", + "canonical": "openai/gpt-4.1-mini" + }, + { + "provider": "openai", + "model": "gpt-4o-2024-11-20", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openai", + "model": "o1-2024-12-17", + "canonical": "openai/o1" + }, + { + "provider": "openai", + "model": "gpt-4o-audio-preview-2024-12-17", + "canonical": "openai/gpt-4o-audio" + }, + { + "provider": "openai", + "model": "gpt-5.1-codex-mini", + "canonical": "openai/gpt-5.1-codex-mini" + }, + { + "provider": "openai", + "model": "o3-mini-2025-01-31", + "canonical": "openai/o3-mini" + }, + { + "provider": "openai", + "model": "o3-pro", + "canonical": "openai/o3-pro" + }, + { + "provider": "openai", + "model": "gpt-4.1-nano", + "canonical": "openai/gpt-4.1-nano" + }, + { + "provider": "openai", + "model": "gpt-4-0314", + "canonical": "openai/gpt-4" + }, + { + "provider": "openai", + "model": "o1-pro", + "canonical": "openai/o1-pro" + }, + { + "provider": "openai", + "model": "chatgpt-4o-latest", + "canonical": "openai/chatgpt-4o-latest" + }, + { + "provider": "openai", + "model": "gpt-4-turbo", + "canonical": "openai/gpt-4-turbo" + }, + { + "provider": "openai", + "model": "gpt-5.1-codex", + "canonical": "openai/gpt-5.1-codex" + }, + { + "provider": "openai", + "model": "gpt-4o-2024-05-13", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openai", + "model": "o3-2025-04-16", + "canonical": "openai/o3" + }, + { + "provider": "openai", + "model": "gpt-3.5-turbo-0125", + "canonical": "openai/gpt-3.5-turbo" + }, + { + "provider": "openai", + "model": "gpt-4-0125-preview", + "canonical": "openai/gpt-4" + }, + { + "provider": "openai", + "model": "gpt-4o-audio-preview", + "canonical": "openai/gpt-4o-audio" + }, + { + "provider": "openai", + "model": "gpt-4-turbo-2024-04-09", + "canonical": "openai/gpt-4-turbo" + }, + { + "provider": "openai", + "model": "gpt-5.1", + "canonical": "openai/gpt-5.1" + }, + { + "provider": "openai", + "model": "gpt-4.1-nano-2025-04-14", + "canonical": "openai/gpt-4.1-nano" + }, + { + "provider": "openai", + "model": "gpt-5-mini-2025-08-07", + "canonical": "openai/gpt-5-mini" + }, + { + "provider": "openai", + "model": "gpt-5-mini", + "canonical": "openai/gpt-5-mini" + }, + { + "provider": "openai", + "model": "o1-pro-2025-03-19", + "canonical": "openai/o1-pro" + }, + { + "provider": "openai", + "model": "gpt-5-nano", + "canonical": "openai/gpt-5-nano" + }, + { + "provider": "openai", + "model": "gpt-4o-audio-preview-2025-06-03", + "canonical": "openai/gpt-4o-audio" + }, + { + "provider": "openai", + "model": "gpt-3.5-turbo-instruct-0914", + "canonical": "openai/gpt-3.5-turbo-instruct" + }, + { + "provider": "openai", + "model": "gpt-5-nano-2025-08-07", + "canonical": "openai/gpt-5-nano" + }, + { + "provider": "openai", + "model": "gpt-5-pro", + "canonical": "openai/gpt-5-pro" + }, + { + "provider": "openai", + "model": "o4-mini-deep-research-2025-06-26", + "canonical": "openai/o4-mini-deep-research" + }, + { + "provider": "openai", + "model": "gpt-4", + "canonical": "openai/gpt-4" + }, + { + "provider": "openai", + "model": "o4-mini-2025-04-16", + "canonical": "openai/o4-mini" + }, + { + "provider": "openai", + "model": "gpt-4o-search-preview-2025-03-11", + "canonical": "openai/gpt-4o-search" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-2024-07-18", + "canonical": "openai/gpt-4o-mini" + }, + { + "provider": "openai", + "model": "gpt-3.5-turbo-instruct", + "canonical": "openai/gpt-3.5-turbo-instruct" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5-codex", + "canonical": "openai/gpt-5-codex" + }, + { + "provider": "openrouter", + "model": "openai/o1", + "canonical": "openai/o1" + }, + { + "provider": "openrouter", + "model": "openai/o3-mini-high", + "canonical": "openai/o3-mini-high" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-flash-lite", + "canonical": "google/gemini-2.5-flash-lite" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5", + "canonical": "openai/gpt-5" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.0-flash-lite-001", + "canonical": "google/gemini-2.0-flash-lite" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4o-mini", + "canonical": "openai/gpt-4o-mini" + }, + { + "provider": "openrouter", + "model": "openai/o3-pro", + "canonical": "openai/o3-pro" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-sonnet-4", + "canonical": "anthropic/claude-sonnet-4" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4o-audio-preview", + "canonical": "openai/gpt-4o-audio" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-3-opus", + "canonical": "anthropic/claude-3-opus" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4-0314", + "canonical": "openai/gpt-4" + }, + { + "provider": "openrouter", + "model": "openai/o4-mini", + "canonical": "openai/o4-mini" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5.1", + "canonical": "openai/gpt-5.1" + }, + { + "provider": "openrouter", + "model": "openai/gpt-oss-safeguard-20b", + "canonical": "openai/gpt-oss-safeguard-20b" + }, + { + "provider": "openrouter", + "model": "openai/o3", + "canonical": "openai/o3" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-flash-preview-09-2025", + "canonical": "google/gemini-2.5-flash" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-3.5-sonnet-20240620", + "canonical": "anthropic/claude-3.5-sonnet" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-pro-preview-05-06", + "canonical": "google/gemini-2.5-pro" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4-turbo-preview", + "canonical": "openai/gpt-4-turbo" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4o-2024-08-06", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4o:extended", + "canonical": "openai/gpt-4o:extended" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5-mini", + "canonical": "openai/gpt-5-mini" + }, + { + "provider": "openrouter", + "model": "openai/gpt-3.5-turbo-16k", + "canonical": "openai/gpt-3.5-turbo-16k" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4-1106-preview", + "canonical": "openai/gpt-4" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-flash-lite-preview-09-2025", + "canonical": "google/gemini-2.5-flash-lite" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-3.5-haiku-20241022", + "canonical": "anthropic/claude-3.5-haiku" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-3.7-sonnet", + "canonical": "anthropic/claude-3.7-sonnet" + }, + { + "provider": "openrouter", + "model": "openai/o4-mini-deep-research", + "canonical": "openai/o4-mini-deep-research" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-3.7-sonnet:thinking", + "canonical": "anthropic/claude-3.7-sonnet:thinking" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-3.5-sonnet", + "canonical": "anthropic/claude-3.5-sonnet" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-pro", + "canonical": "google/gemini-2.5-pro" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-pro-preview", + "canonical": "google/gemini-2.5-pro" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4.1-mini", + "canonical": "openai/gpt-4.1-mini" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4o", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openrouter", + "model": "google/gemma-3-27b-it", + "canonical": "google/gemma-3-27b-it" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4o-2024-05-13", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5-image-mini", + "canonical": "openai/gpt-5-image-mini" + }, + { + "provider": "openrouter", + "model": "openai/gpt-oss-120b:exacto", + "canonical": "openai/gpt-oss-120b" + }, + { + "provider": "openrouter", + "model": "openai/o4-mini-high", + "canonical": "openai/o4-mini-high" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.0-flash-001", + "canonical": "google/gemini-2.0-flash" + }, + { + "provider": "openrouter", + "model": "openai/gpt-oss-120b", + "canonical": "openai/gpt-oss-120b" + }, + { + "provider": "openrouter", + "model": "openai/o3-deep-research", + "canonical": "openai/o3-deep-research" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-opus-4", + "canonical": "anthropic/claude-opus-4" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4o-mini-2024-07-18", + "canonical": "openai/gpt-4o-mini" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-flash", + "canonical": "google/gemini-2.5-flash" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-haiku-4.5", + "canonical": "anthropic/claude-haiku-4.5" + }, + { + "provider": "openrouter", + "model": "openai/o3-mini", + "canonical": "openai/o3-mini" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-sonnet-4.5", + "canonical": "anthropic/claude-sonnet-4.5" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5.1-codex", + "canonical": "openai/gpt-5.1-codex" + }, + { + "provider": "openrouter", + "model": "openai/gpt-oss-20b", + "canonical": "openai/gpt-oss-20b" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-3-haiku", + "canonical": "anthropic/claude-3-haiku" + }, + { + "provider": "openrouter", + "model": "openai/codex-mini", + "canonical": "openai/codex-mini" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5-nano", + "canonical": "openai/gpt-5-nano" + }, + { + "provider": "openrouter", + "model": "openai/gpt-3.5-turbo", + "canonical": "openai/gpt-3.5-turbo" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4.1", + "canonical": "openai/gpt-4.1" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4.1-nano", + "canonical": "openai/gpt-4.1-nano" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4-turbo", + "canonical": "openai/gpt-4-turbo" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5-image", + "canonical": "openai/gpt-5-image" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-flash-lite-preview-06-17", + "canonical": "google/gemini-2.5-flash-lite" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4", + "canonical": "openai/gpt-4" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5-pro", + "canonical": "openai/gpt-5-pro" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5.1-codex-mini", + "canonical": "openai/gpt-5.1-codex-mini" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-opus-4.1", + "canonical": "anthropic/claude-opus-4.1" + }, + { + "provider": "openrouter", + "model": "openai/gpt-3.5-turbo-0613", + "canonical": "openai/gpt-3.5-turbo" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4o-2024-11-20", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-3.5-haiku", + "canonical": "anthropic/claude-3.5-haiku" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-lite-preview-02-05", + "canonical": "google/gemini-2.0-flash-lite" + }, + { + "provider": "google", + "model": "gemini-2.5-pro", + "canonical": "google/gemini-2.5-pro" + }, + { + "provider": "google", + "model": "gemini-2.5-flash-image-preview", + "canonical": "google/gemini-2.5-flash-image" + }, + { + "provider": "google", + "model": "gemini-2.5-flash-lite-preview-06-17", + "canonical": "google/gemini-2.5-flash-lite" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-001", + "canonical": "google/gemini-2.0-flash" + }, + { + "provider": "google", + "model": "gemini-2.5-pro-preview-05-06", + "canonical": "google/gemini-2.5-pro" + }, + { + "provider": "google", + "model": "gemini-2.5-flash-lite", + "canonical": "google/gemini-2.5-flash-lite" + }, + { + "provider": "google", + "model": "gemini-2.5-pro-preview-03-25", + "canonical": "google/gemini-2.5-pro" + }, + { + "provider": "google", + "model": "gemini-2.5-flash-preview-05-20", + "canonical": "google/gemini-2.5-flash" + }, + { + "provider": "google", + "model": "gemma-3n-e4b-it", + "canonical": "google/gemma-3n-e4b-it" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-lite", + "canonical": "google/gemini-2.0-flash-lite" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-exp", + "canonical": "google/gemini-2.0-flash" + }, + { + "provider": "google", + "model": "gemini-2.5-flash-image", + "canonical": "google/gemini-2.5-flash-image" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-lite-001", + "canonical": "google/gemini-2.0-flash-lite" + }, + { + "provider": "google", + "model": "gemma-3-27b-it", + "canonical": "google/gemma-3-27b-it" + }, + { + "provider": "google", + "model": "gemma-3-4b-it", + "canonical": "google/gemma-3-4b-it" + }, + { + "provider": "google", + "model": "gemini-2.5-flash", + "canonical": "google/gemini-2.5-flash" + }, + { + "provider": "google", + "model": "gemini-2.5-pro-preview-06-05", + "canonical": "google/gemini-2.5-pro" + }, + { + "provider": "google", + "model": "gemini-2.5-flash-preview-09-2025", + "canonical": "google/gemini-2.5-flash" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-lite-preview", + "canonical": "google/gemini-2.0-flash-lite" + }, + { + "provider": "google", + "model": "gemini-2.0-flash", + "canonical": "google/gemini-2.0-flash" + }, + { + "provider": "google", + "model": "gemini-2.5-flash-lite-preview-09-2025", + "canonical": "google/gemini-2.5-flash-lite" + }, + { + "provider": "google", + "model": "gemma-3-12b-it", + "canonical": "google/gemma-3-12b-it" + } + ], "model_counts": { - "databricks": 143, - "openai": 625, + "openai": 630, "anthropic": 9, - "openrouter": 217, - "tetrate": 0, - "google": 50 + "openrouter": 219, + "databricks": 143, + "google": 50, + "tetrate": 0 }, "canonical_models_used": [ - "openai/gpt-5-mini", - "openai/o4-mini-deep-research", - "openai/gpt-4.1-nano", - "openai/gpt-5-codex", - "google/gemini-2.0-flash", - "openai/gpt-oss-120b:exacto", - "anthropic/claude-3.7-sonnet", - "google/gemini-2.5-flash", + "openai/gpt-5.1-codex", "openai/gpt-5-pro", - "openai/gpt-5-image-mini", - "openai/gpt-oss-120b", - "anthropic/claude-opus-4.1", - "anthropic/claude-3-opus", - "anthropic/claude-opus-4", - "openai/gpt-3.5-turbo", - "openai/gpt-4o-search", "openai/gpt-4.1", - "openai/o3", - "google/gemini-2.5-flash-image", - "openai/gpt-4-turbo", - "openai/o3-mini", - "openai/gpt-4o:extended", - "openai/codex-mini", - "openai/o1-pro", - "openai/gpt-3.5-turbo-16k", - "openai/gpt-4o-audio", - "openai/gpt-4o", - "google/gemma-3-12b-it", - "openai/gpt-3.5-turbo-instruct", - "openai/gpt-5-nano", - "openai/o1", - "openai/gpt-oss-safeguard-20b", - "openai/gpt-5-image", + "openai/o3-pro", + "openai/o4-mini-high", "openai/gpt-4", - "google/gemma-3-27b-it", - "openai/gpt-4.1-mini", - "openai/chatgpt-4o-latest", - "openai/o4-mini", + "anthropic/claude-opus-4.1", + "openai/codex-mini", + "openai/gpt-3.5-turbo-instruct", "openai/gpt-oss-20b", + "google/gemma-3-12b-it", + "google/gemini-2.5-flash", + "openai/gpt-4.1-mini", + "anthropic/claude-sonnet-4.5", + "openai/gpt-4o-mini", + "openai/gpt-4.1-nano", + "google/gemma-3-27b-it", + "anthropic/claude-haiku-4.5", + "openai/gpt-3.5-turbo-16k", + "anthropic/claude-3.5-sonnet", + "google/gemini-2.0-flash", "google/gemma-3n-e4b-it", + "openai/o3-deep-research", + "openai/gpt-5-image-mini", "google/gemini-2.5-pro", "anthropic/claude-3.5-haiku", - "openai/o4-mini-high", - "google/gemini-2.0-flash-lite", - "openai/o3-mini-high", - "anthropic/claude-3-haiku", - "anthropic/claude-haiku-4.5", - "anthropic/claude-sonnet-4.5", - "openai/o3-pro", - "google/gemini-2.5-flash-lite", - "anthropic/claude-3.5-sonnet", - "google/gemma-3-4b-it", "openai/gpt-4o-mini-search", - "openai/gpt-4o-mini", - "openai/o3-deep-research", - "anthropic/claude-sonnet-4", + "openai/gpt-5.1", + "openai/gpt-4o:extended", + "openai/gpt-3.5-turbo", + "google/gemini-2.5-flash-image", + "openai/gpt-5-mini", + "openai/gpt-oss-120b", + "openai/gpt-4-turbo", + "openai/o3-mini-high", + "openai/gpt-4o-search", + "openai/o4-mini-deep-research", + "openai/o1", + "openai/gpt-5-codex", + "openai/gpt-4o-audio", + "google/gemma-3-4b-it", + "openai/o1-pro", + "openai/gpt-oss-safeguard-20b", "anthropic/claude-3.7-sonnet:thinking", - "openai/gpt-5" + "openai/gpt-5", + "anthropic/claude-sonnet-4", + "openai/gpt-5-nano", + "openai/o3", + "anthropic/claude-3-haiku", + "google/gemini-2.5-flash-lite", + "openai/gpt-4o", + "openai/gpt-5.1-codex-mini", + "anthropic/claude-3-opus", + "openai/o3-mini", + "openai/chatgpt-4o-latest", + "google/gemini-2.0-flash-lite", + "openai/gpt-5-image", + "anthropic/claude-3.7-sonnet", + "openai/o4-mini", + "anthropic/claude-opus-4" ] } \ No newline at end of file diff --git a/crates/goose/src/providers/canonical/data/report_20251113_145809.json b/crates/goose/src/providers/canonical/data/report_20251113_145809.json deleted file mode 100644 index b66993dc00..0000000000 --- a/crates/goose/src/providers/canonical/data/report_20251113_145809.json +++ /dev/null @@ -1,1276 +0,0 @@ -[ - { - "id": "anthropic/claude-3-haiku", - "name": "Anthropic: Claude 3 Haiku", - "context_length": 200000, - "max_completion_tokens": 4096, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Claude", - "supports_tools": true, - "pricing": { - "prompt": 2.5e-7, - "completion": 1.25e-6, - "request": 0.0, - "image": 0.0004 - } - }, - { - "id": "anthropic/claude-3-opus", - "name": "Anthropic: Claude 3 Opus", - "context_length": 200000, - "max_completion_tokens": 4096, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Claude", - "supports_tools": true, - "pricing": { - "prompt": 0.000015, - "completion": 0.000075, - "request": 0.0, - "image": 0.024 - } - }, - { - "id": "anthropic/claude-3.5-haiku", - "name": "Anthropic: Claude 3.5 Haiku", - "context_length": 200000, - "max_completion_tokens": 8192, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Claude", - "supports_tools": true, - "pricing": { - "prompt": 8e-7, - "completion": 4e-6, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "anthropic/claude-3.5-sonnet", - "name": "Anthropic: Claude 3.5 Sonnet", - "context_length": 200000, - "max_completion_tokens": 8192, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Claude", - "supports_tools": true, - "pricing": { - "prompt": 3e-6, - "completion": 0.000015, - "request": 0.0, - "image": 0.0048 - } - }, - { - "id": "anthropic/claude-3.7-sonnet", - "name": "Anthropic: Claude 3.7 Sonnet", - "context_length": 200000, - "max_completion_tokens": 64000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Claude", - "supports_tools": true, - "pricing": { - "prompt": 3e-6, - "completion": 0.000015, - "request": 0.0, - "image": 0.0048 - } - }, - { - "id": "anthropic/claude-3.7-sonnet:thinking", - "name": "Anthropic: Claude 3.7 Sonnet (thinking)", - "context_length": 200000, - "max_completion_tokens": 64000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Claude", - "supports_tools": true, - "pricing": { - "prompt": 3e-6, - "completion": 0.000015, - "request": 0.0, - "image": 0.0048 - } - }, - { - "id": "anthropic/claude-haiku-4.5", - "name": "Anthropic: Claude Haiku 4.5", - "context_length": 200000, - "max_completion_tokens": 64000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Claude", - "supports_tools": true, - "pricing": { - "prompt": 1e-6, - "completion": 5e-6, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "anthropic/claude-opus-4", - "name": "Anthropic: Claude Opus 4", - "context_length": 200000, - "max_completion_tokens": 32000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Claude", - "supports_tools": true, - "pricing": { - "prompt": 0.000015, - "completion": 0.000075, - "request": 0.0, - "image": 0.024 - } - }, - { - "id": "anthropic/claude-opus-4.1", - "name": "Anthropic: Claude Opus 4.1", - "context_length": 200000, - "max_completion_tokens": 32000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Claude", - "supports_tools": true, - "pricing": { - "prompt": 0.000015, - "completion": 0.000075, - "request": 0.0, - "image": 0.024 - } - }, - { - "id": "anthropic/claude-sonnet-4", - "name": "Anthropic: Claude Sonnet 4", - "context_length": 1000000, - "max_completion_tokens": 64000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Claude", - "supports_tools": true, - "pricing": { - "prompt": 3e-6, - "completion": 0.000015, - "request": 0.0, - "image": 0.0048 - } - }, - { - "id": "anthropic/claude-sonnet-4.5", - "name": "Anthropic: Claude Sonnet 4.5", - "context_length": 1000000, - "max_completion_tokens": 64000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Claude", - "supports_tools": true, - "pricing": { - "prompt": 3e-6, - "completion": 0.000015, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "google/gemini-2.0-flash", - "name": "Google: Gemini 2.0 Flash", - "context_length": 1048576, - "max_completion_tokens": 8192, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Gemini", - "supports_tools": true, - "pricing": { - "prompt": 1e-7, - "completion": 4e-7, - "request": 0.0, - "image": 0.0000258 - } - }, - { - "id": "google/gemini-2.0-flash-lite", - "name": "Google: Gemini 2.0 Flash Lite", - "context_length": 1048576, - "max_completion_tokens": 8192, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Gemini", - "supports_tools": true, - "pricing": { - "prompt": 7.5e-8, - "completion": 3e-7, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "google/gemini-2.5-flash", - "name": "Google: Gemini 2.5 Flash", - "context_length": 1048576, - "max_completion_tokens": 65535, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Gemini", - "supports_tools": true, - "pricing": { - "prompt": 3e-7, - "completion": 2.5e-6, - "request": 0.0, - "image": 0.001238 - } - }, - { - "id": "google/gemini-2.5-flash-image", - "name": "Google: Gemini 2.5 Flash Image (Nano Banana)", - "context_length": 32768, - "max_completion_tokens": 32768, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Gemini", - "supports_tools": false, - "pricing": { - "prompt": 3e-7, - "completion": 2.5e-6, - "request": 0.0, - "image": 0.001238 - } - }, - { - "id": "google/gemini-2.5-flash-lite", - "name": "Google: Gemini 2.5 Flash Lite", - "context_length": 1048576, - "max_completion_tokens": 65535, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Gemini", - "supports_tools": true, - "pricing": { - "prompt": 1e-7, - "completion": 4e-7, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "google/gemini-2.5-pro", - "name": "Google: Gemini 2.5 Pro", - "context_length": 1048576, - "max_completion_tokens": 65536, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Gemini", - "supports_tools": true, - "pricing": { - "prompt": 1.25e-6, - "completion": 0.00001, - "request": 0.0, - "image": 0.00516 - } - }, - { - "id": "google/gemma-2-27b-it", - "name": "Google: Gemma 2 27B", - "context_length": 8192, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Gemini", - "supports_tools": false, - "pricing": { - "prompt": 6.5e-7, - "completion": 6.5e-7, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "google/gemma-2-9b-it", - "name": "Google: Gemma 2 9B", - "context_length": 8192, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Gemini", - "supports_tools": false, - "pricing": { - "prompt": 3e-8, - "completion": 9e-8, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "google/gemma-3-12b-it", - "name": "Google: Gemma 3 12B", - "context_length": 131072, - "max_completion_tokens": 131072, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Gemini", - "supports_tools": false, - "pricing": { - "prompt": 3e-8, - "completion": 1e-7, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "google/gemma-3-27b-it", - "name": "Google: Gemma 3 27B", - "context_length": 131072, - "max_completion_tokens": 16384, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Gemini", - "supports_tools": true, - "pricing": { - "prompt": 9e-8, - "completion": 1.6e-7, - "request": 0.0, - "image": 0.0000256 - } - }, - { - "id": "google/gemma-3-4b-it", - "name": "Google: Gemma 3 4B", - "context_length": 96000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Gemini", - "supports_tools": false, - "pricing": { - "prompt": 1.703012e-8, - "completion": 6.81536e-8, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "google/gemma-3n-e4b-it", - "name": "Google: Gemma 3n 4B", - "context_length": 32768, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "Gemini", - "supports_tools": false, - "pricing": { - "prompt": 2e-8, - "completion": 4e-8, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/chatgpt-4o-latest", - "name": "OpenAI: ChatGPT-4o", - "context_length": 128000, - "max_completion_tokens": 16384, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": false, - "pricing": { - "prompt": 5e-6, - "completion": 0.000015, - "request": 0.0, - "image": 0.007225 - } - }, - { - "id": "openai/codex-mini", - "name": "OpenAI: Codex Mini", - "context_length": 200000, - "max_completion_tokens": 100000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 1.5e-6, - "completion": 6e-6, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-3.5-turbo", - "name": "OpenAI: GPT-3.5 Turbo", - "context_length": 16385, - "max_completion_tokens": 4096, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 5e-7, - "completion": 1.5e-6, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-3.5-turbo-16k", - "name": "OpenAI: GPT-3.5 Turbo 16k", - "context_length": 16385, - "max_completion_tokens": 4096, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 3e-6, - "completion": 4e-6, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-3.5-turbo-instruct", - "name": "OpenAI: GPT-3.5 Turbo Instruct", - "context_length": 4095, - "max_completion_tokens": 4096, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": false, - "pricing": { - "prompt": 1.5e-6, - "completion": 2e-6, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-4", - "name": "OpenAI: GPT-4", - "context_length": 8191, - "max_completion_tokens": 4096, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 0.00003, - "completion": 0.00006, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-4-turbo", - "name": "OpenAI: GPT-4 Turbo", - "context_length": 128000, - "max_completion_tokens": 4096, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 0.00001, - "completion": 0.00003, - "request": 0.0, - "image": 0.01445 - } - }, - { - "id": "openai/gpt-4.1", - "name": "OpenAI: GPT-4.1", - "context_length": 1047576, - "max_completion_tokens": 32768, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 2e-6, - "completion": 8e-6, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-4.1-mini", - "name": "OpenAI: GPT-4.1 Mini", - "context_length": 1047576, - "max_completion_tokens": 32768, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 4e-7, - "completion": 1.6e-6, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-4.1-nano", - "name": "OpenAI: GPT-4.1 Nano", - "context_length": 1047576, - "max_completion_tokens": 32768, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 1e-7, - "completion": 4e-7, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-4o", - "name": "OpenAI: GPT-4o", - "context_length": 128000, - "max_completion_tokens": 16384, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 2.5e-6, - "completion": 0.00001, - "request": 0.0, - "image": 0.003613 - } - }, - { - "id": "openai/gpt-4o-audio", - "name": "OpenAI: GPT-4o Audio", - "context_length": 128000, - "max_completion_tokens": 16384, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 2.5e-6, - "completion": 0.00001, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-4o-mini", - "name": "OpenAI: GPT-4o-mini", - "context_length": 128000, - "max_completion_tokens": 16384, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 1.5e-7, - "completion": 6e-7, - "request": 0.0, - "image": 0.000217 - } - }, - { - "id": "openai/gpt-4o-mini-search", - "name": "OpenAI: GPT-4o-mini Search Preview", - "context_length": 128000, - "max_completion_tokens": 16384, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": false, - "pricing": { - "prompt": 1.5e-7, - "completion": 6e-7, - "request": 0.0275, - "image": 0.000217 - } - }, - { - "id": "openai/gpt-4o-search", - "name": "OpenAI: GPT-4o Search Preview", - "context_length": 128000, - "max_completion_tokens": 16384, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": false, - "pricing": { - "prompt": 2.5e-6, - "completion": 0.00001, - "request": 0.035, - "image": 0.003613 - } - }, - { - "id": "openai/gpt-4o:extended", - "name": "OpenAI: GPT-4o (extended)", - "context_length": 128000, - "max_completion_tokens": 64000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 6e-6, - "completion": 0.000018, - "request": 0.0, - "image": 0.007225 - } - }, - { - "id": "openai/gpt-5", - "name": "OpenAI: GPT-5", - "context_length": 400000, - "max_completion_tokens": 128000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 1.25e-6, - "completion": 0.00001, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-5-chat", - "name": "OpenAI: GPT-5 Chat", - "context_length": 128000, - "max_completion_tokens": 16384, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": false, - "pricing": { - "prompt": 1.25e-6, - "completion": 0.00001, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-5-codex", - "name": "OpenAI: GPT-5 Codex", - "context_length": 400000, - "max_completion_tokens": 128000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 1.25e-6, - "completion": 0.00001, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-5-image", - "name": "OpenAI: GPT-5 Image", - "context_length": 400000, - "max_completion_tokens": 128000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 0.00001, - "completion": 0.00001, - "request": 0.0, - "image": 0.00001 - } - }, - { - "id": "openai/gpt-5-image-mini", - "name": "OpenAI: GPT-5 Image Mini", - "context_length": 400000, - "max_completion_tokens": 128000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 2.5e-6, - "completion": 2e-6, - "request": 0.0, - "image": 2.5e-6 - } - }, - { - "id": "openai/gpt-5-mini", - "name": "OpenAI: GPT-5 Mini", - "context_length": 400000, - "max_completion_tokens": 128000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 2.5e-7, - "completion": 2e-6, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-5-nano", - "name": "OpenAI: GPT-5 Nano", - "context_length": 400000, - "max_completion_tokens": 128000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 5e-8, - "completion": 4e-7, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-5-pro", - "name": "OpenAI: GPT-5 Pro", - "context_length": 400000, - "max_completion_tokens": 128000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 0.000015, - "completion": 0.00012, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-5.1", - "name": "OpenAI: GPT-5.1", - "context_length": 400000, - "max_completion_tokens": 128000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 1.25e-6, - "completion": 0.00001, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-5.1-chat", - "name": "OpenAI: GPT-5.1 Chat", - "context_length": 128000, - "max_completion_tokens": 16384, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": false, - "pricing": { - "prompt": 1.25e-6, - "completion": 0.00001, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-5.1-codex", - "name": "OpenAI: GPT-5.1-Codex", - "context_length": 400000, - "max_completion_tokens": 128000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 1.25e-6, - "completion": 0.00001, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-5.1-codex-mini", - "name": "OpenAI: GPT-5.1-Codex-Mini", - "context_length": 400000, - "max_completion_tokens": 100000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 1.5e-6, - "completion": 6e-6, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-oss-120b", - "name": "OpenAI: gpt-oss-120b", - "context_length": 131072, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 5e-8, - "completion": 2.4e-7, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-oss-20b", - "name": "OpenAI: gpt-oss-20b", - "context_length": 131072, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 3e-8, - "completion": 1.4e-7, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/gpt-oss-safeguard-20b", - "name": "OpenAI: gpt-oss-safeguard-20b", - "context_length": 131072, - "max_completion_tokens": 65536, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 7.5e-8, - "completion": 3e-7, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/o1", - "name": "OpenAI: o1", - "context_length": 200000, - "max_completion_tokens": 100000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 0.000015, - "completion": 0.00006, - "request": 0.0, - "image": 0.021675 - } - }, - { - "id": "openai/o1-pro", - "name": "OpenAI: o1-pro", - "context_length": 200000, - "max_completion_tokens": 100000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": false, - "pricing": { - "prompt": 0.00015, - "completion": 0.0006, - "request": 0.0, - "image": 0.21675 - } - }, - { - "id": "openai/o3", - "name": "OpenAI: o3", - "context_length": 200000, - "max_completion_tokens": 100000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 2e-6, - "completion": 8e-6, - "request": 0.0, - "image": 0.00153 - } - }, - { - "id": "openai/o3-deep-research", - "name": "OpenAI: o3 Deep Research", - "context_length": 200000, - "max_completion_tokens": 100000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 0.00001, - "completion": 0.00004, - "request": 0.0, - "image": 0.00765 - } - }, - { - "id": "openai/o3-mini", - "name": "OpenAI: o3 Mini", - "context_length": 200000, - "max_completion_tokens": 100000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 1.1e-6, - "completion": 4.4e-6, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/o3-mini-high", - "name": "OpenAI: o3 Mini High", - "context_length": 200000, - "max_completion_tokens": 100000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 1.1e-6, - "completion": 4.4e-6, - "request": 0.0, - "image": 0.0 - } - }, - { - "id": "openai/o3-pro", - "name": "OpenAI: o3 Pro", - "context_length": 200000, - "max_completion_tokens": 100000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 0.00002, - "completion": 0.00008, - "request": 0.0, - "image": 0.0153 - } - }, - { - "id": "openai/o4-mini", - "name": "OpenAI: o4 Mini", - "context_length": 200000, - "max_completion_tokens": 100000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 1.1e-6, - "completion": 4.4e-6, - "request": 0.0, - "image": 0.0008415 - } - }, - { - "id": "openai/o4-mini-deep-research", - "name": "OpenAI: o4 Mini Deep Research", - "context_length": 200000, - "max_completion_tokens": 100000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 2e-6, - "completion": 8e-6, - "request": 0.0, - "image": 0.00153 - } - }, - { - "id": "openai/o4-mini-high", - "name": "OpenAI: o4 Mini High", - "context_length": 200000, - "max_completion_tokens": 100000, - "input_modalities": [ - "text" - ], - "output_modalities": [ - "text" - ], - "tokenizer": "GPT", - "supports_tools": true, - "pricing": { - "prompt": 1.1e-6, - "completion": 4.4e-6, - "request": 0.0, - "image": 0.0008415 - } - } -] \ No newline at end of file