diff --git a/.github/workflows/create-release-pr.yaml b/.github/workflows/create-release-pr.yaml index b107046460..c9f9069259 100644 --- a/.github/workflows/create-release-pr.yaml +++ b/.github/workflows/create-release-pr.yaml @@ -12,6 +12,19 @@ on: required: false type: string default: 'main' + secrets: + ANTHROPIC_API_KEY: + required: false + OPENAI_API_KEY: + required: false + GOOGLE_API_KEY: + required: false + OPENROUTER_API_KEY: + required: false + XAI_API_KEY: + required: false + TETRATE_API_KEY: + required: false permissions: contents: write @@ -41,6 +54,13 @@ jobs: fi - name: create release branch + env: + ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }} + OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} + XAI_API_KEY: ${{ secrets.XAI_API_KEY }} + TETRATE_API_KEY: ${{ secrets.TETRATE_API_KEY }} run: | PRIOR_VERSION=$(just get-tag-version) if [[ "$BUMP_TYPE" == "minor" ]]; then diff --git a/.github/workflows/minor-release.yaml b/.github/workflows/minor-release.yaml index 99ce40a439..8929f0be71 100644 --- a/.github/workflows/minor-release.yaml +++ b/.github/workflows/minor-release.yaml @@ -14,3 +14,10 @@ jobs: uses: ./.github/workflows/create-release-pr.yaml with: bump_type: "minor" + secrets: + ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }} + OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} + XAI_API_KEY: ${{ secrets.XAI_API_KEY }} + TETRATE_API_KEY: ${{ secrets.TETRATE_API_KEY }} diff --git a/.github/workflows/patch-release.yaml b/.github/workflows/patch-release.yaml index 29ed3c0760..c0a7217114 100644 --- a/.github/workflows/patch-release.yaml +++ b/.github/workflows/patch-release.yaml @@ -18,3 +18,10 @@ jobs: with: bump_type: "patch" target_branch: ${{ inputs.target_branch }} + secrets: + ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }} + OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} + XAI_API_KEY: ${{ secrets.XAI_API_KEY }} + TETRATE_API_KEY: ${{ secrets.TETRATE_API_KEY }} diff --git a/Cargo.lock b/Cargo.lock index f87f17aa35..bbfdb58d52 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3084,6 +3084,7 @@ dependencies = [ "boa_engine", "boa_gc", "chrono", + "clap", "criterion", "ctor", "dashmap", diff --git a/Justfile b/Justfile index ce16e0a622..e7a6ea9d93 100644 --- a/Justfile +++ b/Justfile @@ -301,7 +301,15 @@ prepare-release version: # used to update Cargo.lock after we've bumped versions in Cargo.toml @cargo update --workspace @just set-openapi-version {{ version }} - @git add Cargo.toml Cargo.lock ui/desktop/package.json ui/desktop/package-lock.json ui/desktop/openapi.json + @cargo run --bin build_canonical_models + @git add \ + Cargo.toml \ + Cargo.lock \ + ui/desktop/package.json \ + ui/desktop/package-lock.json \ + ui/desktop/openapi.json \ + crates/goose/src/providers/canonical/data/canonical_models.json \ + crates/goose/src/providers/canonical/data/canonical_mapping_report.json @git commit --message "chore(release): release version {{ version }}" set-openapi-version version: diff --git a/crates/goose/Cargo.toml b/crates/goose/Cargo.toml index 6c8e27e4d7..fd359e6141 100644 --- a/crates/goose/Cargo.toml +++ b/crates/goose/Cargo.toml @@ -55,6 +55,7 @@ minijinja = { version = "2.12.0", features = ["loader"] } include_dir = "0.7.4" tiktoken-rs = "0.6.0" chrono = { version = "0.4.38", features = ["serde"] } +clap = { version = "4.4", features = ["derive"] } indoc = "2.0.5" nanoid = "0.4" sha2 = "0.10" @@ -138,3 +139,7 @@ path = "examples/agent.rs" [[example]] name = "databricks_oauth" path = "examples/databricks_oauth.rs" + +[[bin]] +name = "build_canonical_models" +path = "src/providers/canonical/build_canonical_models.rs" diff --git a/crates/goose/examples/build_canonical_models.rs b/crates/goose/examples/build_canonical_models.rs deleted file mode 100644 index 36f563bd62..0000000000 --- a/crates/goose/examples/build_canonical_models.rs +++ /dev/null @@ -1,254 +0,0 @@ -/// Build canonical models from OpenRouter API -/// -/// This script fetches models from OpenRouter and converts them to canonical format. -/// Usage: -/// cargo run --example build_canonical_models -/// -use anyhow::{Context, Result}; -use goose::providers::canonical::{ - canonical_name, CanonicalModel, CanonicalModelRegistry, Pricing, -}; -use serde_json::Value; -use std::collections::HashMap; - -const OPENROUTER_API_URL: &str = "https://openrouter.ai/api/v1/models"; -const ALLOWED_PROVIDERS: &[&str] = &[ - "anthropic", - "google", - "openai", - "meta-llama", - "mistralai", - "x-ai", - "deepseek", - "cohere", - "ai21", - "qwen", -]; - -#[tokio::main] -async fn main() -> Result<()> { - println!("Fetching models from OpenRouter API..."); - - let client = reqwest::Client::new(); - let response = client - .get(OPENROUTER_API_URL) - .header("User-Agent", "goose/canonical-builder") - .send() - .await - .context("Failed to fetch from OpenRouter API")?; - - let json: Value = response - .json() - .await - .context("Failed to parse OpenRouter response")?; - - let models = json["data"] - .as_array() - .context("Expected 'data' array in OpenRouter response")? - .clone(); - - println!("Processing {} models from OpenRouter...", models.len()); - - // First pass: Group models by canonical ID and track the one with shortest name - let mut canonical_groups: HashMap = HashMap::new(); - let mut shortest_names: HashMap = HashMap::new(); - - for model in &models { - let id = model["id"].as_str().unwrap(); - let name = model["name"].as_str().context("Model missing id field")?; - - // Skip OpenRouter-specific pricing variants (:free, :nitro) - // Keep :extended since it has different context length - if id.contains(":free") || id.contains(":nitro") { - continue; - } - - let canonical_id = canonical_name("openrouter", id); - - let provider = canonical_id.split('/').next().unwrap_or(""); - if !ALLOWED_PROVIDERS.contains(&provider) { - continue; - } - - let prompt_cost = model - .get("pricing") - .and_then(|p| p.get("prompt")) - .and_then(|v| v.as_str()) - .and_then(|s| s.parse::().ok()) - .unwrap_or(0.0); - - let completion_cost = model - .get("pricing") - .and_then(|p| p.get("completion")) - .and_then(|v| v.as_str()) - .and_then(|s| s.parse::().ok()) - .unwrap_or(0.0); - - let has_paid_pricing = prompt_cost > 0.0 || completion_cost > 0.0; - - if let Some(existing_model) = canonical_groups.get(&canonical_id) { - let existing_name = shortest_names.get(&canonical_id).unwrap(); - - let existing_prompt = existing_model - .get("pricing") - .and_then(|p| p.get("prompt")) - .and_then(|v| v.as_str()) - .and_then(|s| s.parse::().ok()) - .unwrap_or(0.0); - - let existing_completion = existing_model - .get("pricing") - .and_then(|p| p.get("completion")) - .and_then(|v| v.as_str()) - .and_then(|s| s.parse::().ok()) - .unwrap_or(0.0); - - let existing_has_paid = existing_prompt > 0.0 || existing_completion > 0.0; - - let should_replace = if has_paid_pricing != existing_has_paid { - has_paid_pricing // Prefer the one with paid pricing - } else { - name.len() < existing_name.len() // Both same pricing tier, prefer shorter name - }; - - if should_replace { - println!( - " Updating {} from '{}' (paid: {}) to '{}' (paid: {})", - canonical_id, - existing_model["id"].as_str().unwrap(), - existing_has_paid, - id, - has_paid_pricing - ); - shortest_names.insert(canonical_id.clone(), name.to_string()); - canonical_groups.insert(canonical_id, model); - } - } else { - println!( - " Adding: {} (from {}, paid: {})", - canonical_id, id, has_paid_pricing - ); - shortest_names.insert(canonical_id.clone(), name.to_string()); - canonical_groups.insert(canonical_id, model); - } - } - - // Filter out beta/preview variants if non-beta version exists - let beta_suffixes = ["-beta", "-preview", "-alpha"]; - let mut to_remove = Vec::new(); - - for canonical_id in canonical_groups.keys() { - for suffix in &beta_suffixes { - if canonical_id.ends_with(suffix) { - // Check if non-beta version exists - let base_id = canonical_id.strip_suffix(suffix).unwrap(); - if canonical_groups.contains_key(base_id) { - println!( - " Filtering out {} (non-beta version {} exists)", - canonical_id, base_id - ); - to_remove.push(canonical_id.clone()); - break; - } - } - } - } - - for id in to_remove { - canonical_groups.remove(&id); - shortest_names.remove(&id); - } - - // Second pass: Build the registry with the selected models - let mut registry = CanonicalModelRegistry::new(); - - for (canonical_id, model) in canonical_groups.iter() { - let name = shortest_names.get(canonical_id).unwrap(); - - let context_length = model["context_length"].as_u64().unwrap_or(128_000) as usize; - - let max_completion_tokens = model - .get("top_provider") - .and_then(|tp| tp.get("max_completion_tokens")) - .and_then(|v| v.as_u64()) - .map(|v| v as usize); - - let input_modalities: Vec = model - .get("architecture") - .and_then(|arch| arch.get("input_modalities")) - .and_then(|v| v.as_array()) - .map(|arr| { - arr.iter() - .filter_map(|v| v.as_str()) - .map(|s| s.to_string()) - .collect() - }) - .unwrap_or_else(|| vec!["text".to_string()]); - - let output_modalities: Vec = model - .get("architecture") - .and_then(|arch| arch.get("output_modalities")) - .and_then(|v| v.as_array()) - .map(|arr| { - arr.iter() - .filter_map(|v| v.as_str()) - .map(|s| s.to_string()) - .collect() - }) - .unwrap_or_else(|| vec!["text".to_string()]); - - let supports_tools = model - .get("supported_parameters") - .and_then(|v| v.as_array()) - .map(|params| params.iter().any(|param| param.as_str() == Some("tools"))) - .unwrap_or(false); - - let pricing_obj = model - .get("pricing") - .context("Model missing pricing field")?; - let pricing = Pricing { - prompt: pricing_obj - .get("prompt") - .and_then(|v| v.as_str()) - .and_then(|s| s.parse().ok()), - completion: pricing_obj - .get("completion") - .and_then(|v| v.as_str()) - .and_then(|s| s.parse().ok()), - request: pricing_obj - .get("request") - .and_then(|v| v.as_str()) - .and_then(|s| s.parse().ok()), - image: pricing_obj - .get("image") - .and_then(|v| v.as_str()) - .and_then(|s| s.parse().ok()), - }; - - let canonical_model = CanonicalModel { - id: canonical_id.clone(), - name: name.to_string(), - context_length, - max_completion_tokens, - input_modalities, - output_modalities, - supports_tools, - pricing, - }; - - registry.register(canonical_model); - } - - use std::path::PathBuf; - - let output_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) - .join("src/providers/canonical/data/canonical_models.json"); - registry.to_file(&output_path)?; - println!( - "\n✓ Wrote {} models to {}", - registry.count(), - output_path.display() - ); - - Ok(()) -} diff --git a/crates/goose/src/providers/canonical/README.md b/crates/goose/src/providers/canonical/README.md index 61bf29ccdd..410d102c28 100644 --- a/crates/goose/src/providers/canonical/README.md +++ b/crates/goose/src/providers/canonical/README.md @@ -4,21 +4,20 @@ Provides a unified view of model metadata (pricing, capabilities, context limits Normalizes provider-specific model names (e.g., `claude-3-5-sonnet-20241022`) to canonical IDs (e.g., `anthropic/claude-3.5-sonnet`). -## Scripts - -### Build Canonical Models -Fetches latest model metadata from OpenRouter and updates the registry: +## Build Canonical Models +Fetches latest model metadata from OpenRouter and validates provider mappings: ```bash -cargo run --example build_canonical_models +cargo run --bin build_canonical_models # Build and check (default) +cargo run --bin build_canonical_models --no-check # Build only, skip checker ``` -Writes to: `src/providers/canonical/data/canonical_models.json` -### Check Model Mappings -Tests provider model mappings and tracks changes over time: -```bash -cargo run --example canonical_model_checker -``` -- Reports unmapped models -- Compares with previous runs (like a lock file) -- Shows changed/added/removed mappings -- Writes to: `src/providers/canonical/data/canonical_mapping_report.json` +This script performs two operations by default: +1. **Builds canonical models** - Fetches from OpenRouter API and updates the registry + - Writes to: `src/providers/canonical/data/canonical_models.json` +2. **Checks model mappings** (unless `--no-check` is passed) - Tests provider mappings and tracks changes over time + - Reports unmapped models + - Compares with previous runs (like a lock file) + - Shows changed/added/removed mappings + - Writes to: `src/providers/canonical/data/canonical_mapping_report.json` + +The script is located in this directory: `build_canonical_models.rs` diff --git a/crates/goose/examples/canonical_model_checker.rs b/crates/goose/src/providers/canonical/build_canonical_models.rs similarity index 55% rename from crates/goose/examples/canonical_model_checker.rs rename to crates/goose/src/providers/canonical/build_canonical_models.rs index 8c6cf530b8..667edb41b8 100644 --- a/crates/goose/examples/canonical_model_checker.rs +++ b/crates/goose/src/providers/canonical/build_canonical_models.rs @@ -1,29 +1,45 @@ -/// Canonical Model Checker +/// Build canonical models from OpenRouter API /// -/// This script checks which models from top providers are properly mapped to canonical models. -/// 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 -/// - 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) +/// This script fetches models from OpenRouter and converts them to canonical format. +/// By default, it also checks which models from top providers are properly mapped. /// /// Usage: -/// cargo run --example canonical_model_checker -- [--output custom_path.json] +/// cargo run --bin build_canonical_models # Build and check (default) +/// cargo run --bin build_canonical_models --no-check # Build only, skip checker /// use anyhow::{Context, Result}; +use clap::Parser; +use goose::providers::canonical::{ + canonical_name, CanonicalModel, CanonicalModelRegistry, Pricing, +}; use goose::providers::{canonical::ModelMapping, create_with_named_model}; use serde::{Deserialize, Serialize}; +use serde_json::Value; use std::collections::{HashMap, HashSet}; use std::path::PathBuf; +const OPENROUTER_API_URL: &str = "https://openrouter.ai/api/v1/models"; +const ALLOWED_PROVIDERS: &[&str] = &[ + "anthropic", + "google", + "openai", + "meta-llama", + "mistralai", + "x-ai", + "deepseek", + "cohere", + "ai21", + "qwen", +]; + +#[derive(Parser, Debug)] +#[command(author, version, about, long_about = None)] +struct Args { + /// Skip the canonical model checker (only build models) + #[arg(long)] + no_check: bool, +} + #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)] struct ProviderModelPair { provider: String, @@ -273,6 +289,231 @@ impl MappingReport { } } +async fn build_canonical_models() -> Result<()> { + println!("Fetching models from OpenRouter API..."); + + let client = reqwest::Client::new(); + let response = client + .get(OPENROUTER_API_URL) + .header("User-Agent", "goose/canonical-builder") + .send() + .await + .context("Failed to fetch from OpenRouter API")?; + + let json: Value = response + .json() + .await + .context("Failed to parse OpenRouter response")?; + + let models = json["data"] + .as_array() + .context("Expected 'data' array in OpenRouter response")? + .clone(); + + println!("Processing {} models from OpenRouter...", models.len()); + + // First pass: Group models by canonical ID and track the one with shortest name + let mut canonical_groups: HashMap = HashMap::new(); + let mut shortest_names: HashMap = HashMap::new(); + + for model in &models { + let id = model["id"].as_str().unwrap(); + let name = model["name"].as_str().context("Model missing id field")?; + + // Skip OpenRouter-specific pricing variants (:free, :nitro) + // Keep :extended since it has different context length + if id.contains(":free") || id.contains(":nitro") { + continue; + } + + let canonical_id = canonical_name("openrouter", id); + + let provider = canonical_id.split('/').next().unwrap_or(""); + if !ALLOWED_PROVIDERS.contains(&provider) { + continue; + } + + let prompt_cost = model + .get("pricing") + .and_then(|p| p.get("prompt")) + .and_then(|v| v.as_str()) + .and_then(|s| s.parse::().ok()) + .unwrap_or(0.0); + + let completion_cost = model + .get("pricing") + .and_then(|p| p.get("completion")) + .and_then(|v| v.as_str()) + .and_then(|s| s.parse::().ok()) + .unwrap_or(0.0); + + let has_paid_pricing = prompt_cost > 0.0 || completion_cost > 0.0; + + if let Some(existing_model) = canonical_groups.get(&canonical_id) { + let existing_name = shortest_names.get(&canonical_id).unwrap(); + + let existing_prompt = existing_model + .get("pricing") + .and_then(|p| p.get("prompt")) + .and_then(|v| v.as_str()) + .and_then(|s| s.parse::().ok()) + .unwrap_or(0.0); + + let existing_completion = existing_model + .get("pricing") + .and_then(|p| p.get("completion")) + .and_then(|v| v.as_str()) + .and_then(|s| s.parse::().ok()) + .unwrap_or(0.0); + + let existing_has_paid = existing_prompt > 0.0 || existing_completion > 0.0; + + let should_replace = if has_paid_pricing != existing_has_paid { + has_paid_pricing // Prefer the one with paid pricing + } else { + name.len() < existing_name.len() // Both same pricing tier, prefer shorter name + }; + + if should_replace { + println!( + " Updating {} from '{}' (paid: {}) to '{}' (paid: {})", + canonical_id, + existing_model["id"].as_str().unwrap(), + existing_has_paid, + id, + has_paid_pricing + ); + shortest_names.insert(canonical_id.clone(), name.to_string()); + canonical_groups.insert(canonical_id, model); + } + } else { + println!( + " Adding: {} (from {}, paid: {})", + canonical_id, id, has_paid_pricing + ); + shortest_names.insert(canonical_id.clone(), name.to_string()); + canonical_groups.insert(canonical_id, model); + } + } + + // Filter out beta/preview variants if non-beta version exists + let beta_suffixes = ["-beta", "-preview", "-alpha"]; + let mut to_remove = Vec::new(); + + for canonical_id in canonical_groups.keys() { + for suffix in &beta_suffixes { + if canonical_id.ends_with(suffix) { + // Check if non-beta version exists + let base_id = canonical_id.strip_suffix(suffix).unwrap(); + if canonical_groups.contains_key(base_id) { + println!( + " Filtering out {} (non-beta version {} exists)", + canonical_id, base_id + ); + to_remove.push(canonical_id.clone()); + break; + } + } + } + } + + for id in to_remove { + canonical_groups.remove(&id); + shortest_names.remove(&id); + } + + // Second pass: Build the registry with the selected models + let mut registry = CanonicalModelRegistry::new(); + + for (canonical_id, model) in canonical_groups.iter() { + let name = shortest_names.get(canonical_id).unwrap(); + + let context_length = model["context_length"].as_u64().unwrap_or(128_000) as usize; + + let max_completion_tokens = model + .get("top_provider") + .and_then(|tp| tp.get("max_completion_tokens")) + .and_then(|v| v.as_u64()) + .map(|v| v as usize); + + let input_modalities: Vec = model + .get("architecture") + .and_then(|arch| arch.get("input_modalities")) + .and_then(|v| v.as_array()) + .map(|arr| { + arr.iter() + .filter_map(|v| v.as_str()) + .map(|s| s.to_string()) + .collect() + }) + .unwrap_or_else(|| vec!["text".to_string()]); + + let output_modalities: Vec = model + .get("architecture") + .and_then(|arch| arch.get("output_modalities")) + .and_then(|v| v.as_array()) + .map(|arr| { + arr.iter() + .filter_map(|v| v.as_str()) + .map(|s| s.to_string()) + .collect() + }) + .unwrap_or_else(|| vec!["text".to_string()]); + + let supports_tools = model + .get("supported_parameters") + .and_then(|v| v.as_array()) + .map(|params| params.iter().any(|param| param.as_str() == Some("tools"))) + .unwrap_or(false); + + let pricing_obj = model + .get("pricing") + .context("Model missing pricing field")?; + let pricing = Pricing { + prompt: pricing_obj + .get("prompt") + .and_then(|v| v.as_str()) + .and_then(|s| s.parse().ok()), + completion: pricing_obj + .get("completion") + .and_then(|v| v.as_str()) + .and_then(|s| s.parse().ok()), + request: pricing_obj + .get("request") + .and_then(|v| v.as_str()) + .and_then(|s| s.parse().ok()), + image: pricing_obj + .get("image") + .and_then(|v| v.as_str()) + .and_then(|s| s.parse().ok()), + }; + + let canonical_model = CanonicalModel { + id: canonical_id.clone(), + name: name.to_string(), + context_length, + max_completion_tokens, + input_modalities, + output_modalities, + supports_tools, + pricing, + }; + + registry.register(canonical_model); + } + + let output_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("src/providers/canonical/data/canonical_models.json"); + registry.to_file(&output_path)?; + println!( + "\n✓ Wrote {} models to {}", + registry.count(), + output_path.display() + ); + + Ok(()) +} + async fn check_provider( provider_name: &str, model_for_init: &str, @@ -323,8 +564,8 @@ async fn check_provider( Ok((fetched_models, mappings)) } -#[tokio::main] -async fn main() -> Result<()> { +async fn check_canonical_mappings() -> Result<()> { + println!("\n{}", "=".repeat(80)); println!("Canonical Model Checker"); println!("Checking model mappings for top providers...\n"); @@ -348,13 +589,8 @@ async fn main() -> Result<()> { report.print_summary(); - let args: Vec = std::env::args().collect(); - let output_path = if args.len() > 2 && args[1] == "--output" { - PathBuf::from(&args[2]) - } else { - PathBuf::from(env!("CARGO_MANIFEST_DIR")) - .join("src/providers/canonical/data/canonical_mapping_report.json") - }; + let output_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("src/providers/canonical/data/canonical_mapping_report.json"); if output_path.exists() { if let Ok(previous) = MappingReport::load_from_file(&output_path) { @@ -367,3 +603,18 @@ async fn main() -> Result<()> { Ok(()) } + +#[tokio::main] +async fn main() -> Result<()> { + let args = Args::parse(); + + // Build canonical models + build_canonical_models().await?; + + // Run the checker unless --no-check is passed + if !args.no_check { + check_canonical_mappings().await?; + } + + Ok(()) +} diff --git a/crates/goose/src/providers/canonical/data/canonical_mapping_report.json b/crates/goose/src/providers/canonical/data/canonical_mapping_report.json index f526b61646..1ba5cf6cc8 100644 --- a/crates/goose/src/providers/canonical/data/canonical_mapping_report.json +++ b/crates/goose/src/providers/canonical/data/canonical_mapping_report.json @@ -1,5 +1,5 @@ { - "timestamp": "2025-12-11T15:48:25.968909+00:00", + "timestamp": "2025-12-18T16:22:56.520+00:00", "unmapped_models": [ { "provider": "openai", @@ -173,6 +173,10 @@ "provider": "openai", "model": "babbage:ft-square-2023-02-28-14-48-38" }, + { + "provider": "openai", + "model": "chatgpt-image-latest" + }, { "provider": "openai", "model": "computer-use-preview" @@ -2145,10 +2149,26 @@ "provider": "openai", "model": "gpt-4o-mini-transcribe" }, + { + "provider": "openai", + "model": "gpt-4o-mini-transcribe-2025-03-20" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-transcribe-2025-12-15" + }, { "provider": "openai", "model": "gpt-4o-mini-tts" }, + { + "provider": "openai", + "model": "gpt-4o-mini-tts-2025-03-20" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-tts-2025-12-15" + }, { "provider": "openai", "model": "gpt-4o-realtime-preview" @@ -2193,6 +2213,10 @@ "provider": "openai", "model": "gpt-audio-mini-2025-10-06" }, + { + "provider": "openai", + "model": "gpt-audio-mini-2025-12-15" + }, { "provider": "openai", "model": "gpt-image-1" @@ -2201,6 +2225,10 @@ "provider": "openai", "model": "gpt-image-1-mini" }, + { + "provider": "openai", + "model": "gpt-image-1.5" + }, { "provider": "openai", "model": "gpt-realtime" @@ -2217,6 +2245,10 @@ "provider": "openai", "model": "gpt-realtime-mini-2025-10-06" }, + { + "provider": "openai", + "model": "gpt-realtime-mini-2025-12-15" + }, { "provider": "openai", "model": "omni-moderation-2024-09-26" @@ -2281,10 +2313,6 @@ "provider": "openrouter", "model": "amazon/nova-2-lite-v1" }, - { - "provider": "openrouter", - "model": "amazon/nova-2-lite-v1:free" - }, { "provider": "openrouter", "model": "amazon/nova-lite-v1" @@ -2337,6 +2365,10 @@ "provider": "openrouter", "model": "google/gemini-2.0-flash-exp:free" }, + { + "provider": "openrouter", + "model": "google/gemma-3-27b-it:free" + }, { "provider": "openrouter", "model": "inception/mercury" @@ -2349,10 +2381,6 @@ "provider": "openrouter", "model": "kwaipilot/kat-coder-pro:free" }, - { - "provider": "openrouter", - "model": "meituan/longcat-flash-chat:free" - }, { "provider": "openrouter", "model": "meta-llama/llama-3.3-70b-instruct:free" @@ -2377,10 +2405,6 @@ "provider": "openrouter", "model": "minimax/minimax-m2" }, - { - "provider": "openrouter", - "model": "mistralai/devstral-2512" - }, { "provider": "openrouter", "model": "mistralai/devstral-2512:free" @@ -2433,6 +2457,10 @@ "provider": "openrouter", "model": "nvidia/llama-3.3-nemotron-super-49b-v1.5" }, + { + "provider": "openrouter", + "model": "nvidia/nemotron-3-nano-30b-a3b:free" + }, { "provider": "openrouter", "model": "nvidia/nemotron-nano-12b-v2-vl:free" @@ -2513,6 +2541,10 @@ "provider": "openrouter", "model": "x-ai/grok-3-mini-beta" }, + { + "provider": "openrouter", + "model": "xiaomi/mimo-v2-flash:free" + }, { "provider": "openrouter", "model": "z-ai/glm-4-32b" @@ -2549,6 +2581,10 @@ "provider": "google", "model": "aqa" }, + { + "provider": "google", + "model": "deep-research-pro-preview-12-2025" + }, { "provider": "google", "model": "embedding-001" @@ -2565,10 +2601,6 @@ "provider": "google", "model": "gemini-2.5-computer-use-preview-10-2025" }, - { - "provider": "google", - "model": "gemini-2.5-flash-native-audio-latest" - }, { "provider": "google", "model": "gemini-2.5-flash-preview-tts" @@ -2657,1293 +2689,1080 @@ "provider": "google", "model": "veo-3.0-generate-001" }, - { - "provider": "google", - "model": "veo-3.1-fast-generate-preview" - }, { "provider": "google", "model": "veo-3.1-generate-preview" } ], "all_mappings": { - "xai": [], - "tetrate": [], - "google": [ - { - "provider_model": "gemini-2.0-flash", - "canonical_model": "google/gemini-2.0-flash", - "verified": true - }, - { - "provider_model": "gemini-2.0-flash-001", - "canonical_model": "google/gemini-2.0-flash", - "verified": true - }, - { - "provider_model": "gemini-2.0-flash-exp", - "canonical_model": "google/gemini-2.0-flash", - "verified": true - }, - { - "provider_model": "gemini-2.0-flash-lite", - "canonical_model": "google/gemini-2.0-flash-lite", - "verified": true - }, - { - "provider_model": "gemini-2.0-flash-lite-001", - "canonical_model": "google/gemini-2.0-flash-lite", - "verified": true - }, - { - "provider_model": "gemini-2.0-flash-lite-preview", - "canonical_model": "google/gemini-2.0-flash-lite", - "verified": true - }, - { - "provider_model": "gemini-2.0-flash-lite-preview-02-05", - "canonical_model": "google/gemini-2.0-flash-lite", - "verified": true - }, - { - "provider_model": "gemini-2.5-flash", - "canonical_model": "google/gemini-2.5-flash", - "verified": true - }, - { - "provider_model": "gemini-2.5-flash-image", - "canonical_model": "google/gemini-2.5-flash-image", - "verified": true - }, - { - "provider_model": "gemini-2.5-flash-image-preview", - "canonical_model": "google/gemini-2.5-flash-image", - "verified": true - }, - { - "provider_model": "gemini-2.5-flash-lite", - "canonical_model": "google/gemini-2.5-flash-lite", - "verified": true - }, - { - "provider_model": "gemini-2.5-flash-lite-preview-09-2025", - "canonical_model": "google/gemini-2.5-flash-lite", - "verified": true - }, - { - "provider_model": "gemini-2.5-flash-preview-09-2025", - "canonical_model": "google/gemini-2.5-flash", - "verified": true - }, - { - "provider_model": "gemini-2.5-pro", - "canonical_model": "google/gemini-2.5-pro", - "verified": true - }, - { - "provider_model": "gemini-3-pro-image-preview", - "canonical_model": "google/gemini-3-pro-image", - "verified": true - }, - { - "provider_model": "gemini-3-pro-preview", - "canonical_model": "google/gemini-3-pro", - "verified": true - }, - { - "provider_model": "gemma-3-12b-it", - "canonical_model": "google/gemma-3-12b-it", - "verified": true - }, - { - "provider_model": "gemma-3-27b-it", - "canonical_model": "google/gemma-3-27b-it", - "verified": true - }, - { - "provider_model": "gemma-3-4b-it", - "canonical_model": "google/gemma-3-4b-it", - "verified": true - }, - { - "provider_model": "gemma-3n-e4b-it", - "canonical_model": "google/gemma-3n-e4b-it", - "verified": true - } - ], "anthropic": [ { "provider_model": "claude-3-5-haiku-20241022", - "canonical_model": "anthropic/claude-3.5-haiku", - "verified": true + "canonical_model": "anthropic/claude-3.5-haiku" }, { "provider_model": "claude-3-7-sonnet-20250219", - "canonical_model": "anthropic/claude-3.7-sonnet", - "verified": true + "canonical_model": "anthropic/claude-3.7-sonnet" }, { "provider_model": "claude-3-haiku-20240307", - "canonical_model": "anthropic/claude-3-haiku", - "verified": true + "canonical_model": "anthropic/claude-3-haiku" }, { "provider_model": "claude-3-opus-20240229", - "canonical_model": "anthropic/claude-3-opus", - "verified": true + "canonical_model": "anthropic/claude-3-opus" }, { "provider_model": "claude-haiku-4-5-20251001", - "canonical_model": "anthropic/claude-haiku-4.5", - "verified": true + "canonical_model": "anthropic/claude-haiku-4.5" }, { "provider_model": "claude-opus-4-1-20250805", - "canonical_model": "anthropic/claude-opus-4.1", - "verified": true + "canonical_model": "anthropic/claude-opus-4.1" }, { "provider_model": "claude-opus-4-20250514", - "canonical_model": "anthropic/claude-opus-4", - "verified": true + "canonical_model": "anthropic/claude-opus-4" }, { "provider_model": "claude-opus-4-5-20251101", - "canonical_model": "anthropic/claude-opus-4.5", - "verified": true + "canonical_model": "anthropic/claude-opus-4.5" }, { "provider_model": "claude-sonnet-4-20250514", - "canonical_model": "anthropic/claude-sonnet-4", - "verified": true + "canonical_model": "anthropic/claude-sonnet-4" }, { "provider_model": "claude-sonnet-4-5-20250929", - "canonical_model": "anthropic/claude-sonnet-4.5", - "verified": true + "canonical_model": "anthropic/claude-sonnet-4.5" } ], "openrouter": [ { "provider_model": "ai21/jamba-large-1.7", - "canonical_model": "ai21/jamba-large-1.7", - "verified": true + "canonical_model": "ai21/jamba-large-1.7" }, { "provider_model": "ai21/jamba-mini-1.7", - "canonical_model": "ai21/jamba-mini-1.7", - "verified": true + "canonical_model": "ai21/jamba-mini-1.7" }, { "provider_model": "anthropic/claude-3-haiku", - "canonical_model": "anthropic/claude-3-haiku", - "verified": true + "canonical_model": "anthropic/claude-3-haiku" }, { "provider_model": "anthropic/claude-3-opus", - "canonical_model": "anthropic/claude-3-opus", - "verified": true + "canonical_model": "anthropic/claude-3-opus" }, { "provider_model": "anthropic/claude-3.5-haiku", - "canonical_model": "anthropic/claude-3.5-haiku", - "verified": true + "canonical_model": "anthropic/claude-3.5-haiku" }, { "provider_model": "anthropic/claude-3.5-haiku-20241022", - "canonical_model": "anthropic/claude-3.5-haiku", - "verified": true + "canonical_model": "anthropic/claude-3.5-haiku" }, { "provider_model": "anthropic/claude-3.5-sonnet", - "canonical_model": "anthropic/claude-3.5-sonnet", - "verified": true + "canonical_model": "anthropic/claude-3.5-sonnet" }, { "provider_model": "anthropic/claude-3.7-sonnet", - "canonical_model": "anthropic/claude-3.7-sonnet", - "verified": true + "canonical_model": "anthropic/claude-3.7-sonnet" }, { "provider_model": "anthropic/claude-3.7-sonnet:thinking", - "canonical_model": "anthropic/claude-3.7-sonnet:thinking", - "verified": true + "canonical_model": "anthropic/claude-3.7-sonnet:thinking" }, { "provider_model": "anthropic/claude-haiku-4.5", - "canonical_model": "anthropic/claude-haiku-4.5", - "verified": true + "canonical_model": "anthropic/claude-haiku-4.5" }, { "provider_model": "anthropic/claude-opus-4", - "canonical_model": "anthropic/claude-opus-4", - "verified": true + "canonical_model": "anthropic/claude-opus-4" }, { "provider_model": "anthropic/claude-opus-4.1", - "canonical_model": "anthropic/claude-opus-4.1", - "verified": true + "canonical_model": "anthropic/claude-opus-4.1" }, { "provider_model": "anthropic/claude-opus-4.5", - "canonical_model": "anthropic/claude-opus-4.5", - "verified": true + "canonical_model": "anthropic/claude-opus-4.5" }, { "provider_model": "anthropic/claude-sonnet-4", - "canonical_model": "anthropic/claude-sonnet-4", - "verified": true + "canonical_model": "anthropic/claude-sonnet-4" }, { "provider_model": "anthropic/claude-sonnet-4.5", - "canonical_model": "anthropic/claude-sonnet-4.5", - "verified": true + "canonical_model": "anthropic/claude-sonnet-4.5" }, { "provider_model": "cohere/command-r-08-2024", - "canonical_model": "cohere/command-r-08", - "verified": true + "canonical_model": "cohere/command-r-08" }, { "provider_model": "cohere/command-r-plus-08-2024", - "canonical_model": "cohere/command-r-plus-08", - "verified": true + "canonical_model": "cohere/command-r-plus-08" }, { "provider_model": "deepseek/deepseek-chat", - "canonical_model": "deepseek/deepseek-chat", - "verified": true + "canonical_model": "deepseek/deepseek-chat" }, { "provider_model": "deepseek/deepseek-chat-v3-0324", - "canonical_model": "deepseek/deepseek-chat", - "verified": true + "canonical_model": "deepseek/deepseek-chat" }, { "provider_model": "deepseek/deepseek-chat-v3.1", - "canonical_model": "deepseek/deepseek-chat", - "verified": true + "canonical_model": "deepseek/deepseek-chat" }, { "provider_model": "deepseek/deepseek-r1", - "canonical_model": "deepseek/deepseek-r1", - "verified": true + "canonical_model": "deepseek/deepseek-r1" }, { "provider_model": "deepseek/deepseek-r1-0528", - "canonical_model": "deepseek/deepseek-r1", - "verified": true + "canonical_model": "deepseek/deepseek-r1" }, { "provider_model": "deepseek/deepseek-r1-distill-llama-70b", - "canonical_model": "deepseek/deepseek-r1-distill-llama-70b", - "verified": true + "canonical_model": "deepseek/deepseek-r1-distill-llama-70b" }, { "provider_model": "deepseek/deepseek-v3.1-terminus", - "canonical_model": "deepseek/deepseek-v3.1-terminus", - "verified": true + "canonical_model": "deepseek/deepseek-v3.1-terminus" }, { "provider_model": "deepseek/deepseek-v3.1-terminus:exacto", - "canonical_model": "deepseek/deepseek-v3.1-terminus", - "verified": true + "canonical_model": "deepseek/deepseek-v3.1-terminus" }, { "provider_model": "deepseek/deepseek-v3.2", - "canonical_model": "deepseek/deepseek", - "verified": true + "canonical_model": "deepseek/deepseek" }, { "provider_model": "deepseek/deepseek-v3.2-exp", - "canonical_model": "deepseek/deepseek", - "verified": true + "canonical_model": "deepseek/deepseek" }, { "provider_model": "google/gemini-2.0-flash-001", - "canonical_model": "google/gemini-2.0-flash", - "verified": true + "canonical_model": "google/gemini-2.0-flash" }, { "provider_model": "google/gemini-2.0-flash-lite-001", - "canonical_model": "google/gemini-2.0-flash-lite", - "verified": true + "canonical_model": "google/gemini-2.0-flash-lite" }, { "provider_model": "google/gemini-2.5-flash", - "canonical_model": "google/gemini-2.5-flash", - "verified": true + "canonical_model": "google/gemini-2.5-flash" }, { "provider_model": "google/gemini-2.5-flash-lite", - "canonical_model": "google/gemini-2.5-flash-lite", - "verified": true + "canonical_model": "google/gemini-2.5-flash-lite" }, { "provider_model": "google/gemini-2.5-flash-lite-preview-09-2025", - "canonical_model": "google/gemini-2.5-flash-lite", - "verified": true + "canonical_model": "google/gemini-2.5-flash-lite" }, { "provider_model": "google/gemini-2.5-flash-preview-09-2025", - "canonical_model": "google/gemini-2.5-flash", - "verified": true + "canonical_model": "google/gemini-2.5-flash" }, { "provider_model": "google/gemini-2.5-pro", - "canonical_model": "google/gemini-2.5-pro", - "verified": true + "canonical_model": "google/gemini-2.5-pro" }, { "provider_model": "google/gemini-2.5-pro-preview", - "canonical_model": "google/gemini-2.5-pro", - "verified": true + "canonical_model": "google/gemini-2.5-pro" }, { "provider_model": "google/gemini-2.5-pro-preview-05-06", - "canonical_model": "google/gemini-2.5-pro", - "verified": true + "canonical_model": "google/gemini-2.5-pro" + }, + { + "provider_model": "google/gemini-3-flash-preview", + "canonical_model": "google/gemini-3-flash" }, { "provider_model": "google/gemini-3-pro-preview", - "canonical_model": "google/gemini-3-pro", - "verified": true + "canonical_model": "google/gemini-3-pro" }, { "provider_model": "google/gemma-3-27b-it", - "canonical_model": "google/gemma-3-27b-it", - "verified": true + "canonical_model": "google/gemma-3-27b-it" }, { "provider_model": "meta-llama/llama-3-70b-instruct", - "canonical_model": "meta-llama/llama-3-70b-instruct", - "verified": true + "canonical_model": "meta-llama/llama-3-70b-instruct" }, { "provider_model": "meta-llama/llama-3-8b-instruct", - "canonical_model": "meta-llama/llama-3-8b-instruct", - "verified": true + "canonical_model": "meta-llama/llama-3-8b-instruct" }, { "provider_model": "meta-llama/llama-3.1-405b-instruct", - "canonical_model": "meta-llama/llama-3.1-405b-instruct", - "verified": true + "canonical_model": "meta-llama/llama-3.1-405b-instruct" }, { "provider_model": "meta-llama/llama-3.1-70b-instruct", - "canonical_model": "meta-llama/llama-3.1-70b-instruct", - "verified": true + "canonical_model": "meta-llama/llama-3.1-70b-instruct" }, { "provider_model": "meta-llama/llama-3.1-8b-instruct", - "canonical_model": "meta-llama/llama-3.1-8b-instruct", - "verified": true + "canonical_model": "meta-llama/llama-3.1-8b-instruct" }, { "provider_model": "meta-llama/llama-3.2-3b-instruct", - "canonical_model": "meta-llama/llama-3.2-3b-instruct", - "verified": true + "canonical_model": "meta-llama/llama-3.2-3b-instruct" }, { "provider_model": "meta-llama/llama-3.3-70b-instruct", - "canonical_model": "meta-llama/llama-3.3-70b-instruct", - "verified": true + "canonical_model": "meta-llama/llama-3.3-70b-instruct" }, { "provider_model": "meta-llama/llama-4-maverick", - "canonical_model": "meta-llama/llama-4-maverick", - "verified": true + "canonical_model": "meta-llama/llama-4-maverick" }, { "provider_model": "meta-llama/llama-4-scout", - "canonical_model": "meta-llama/llama-4-scout", - "verified": true + "canonical_model": "meta-llama/llama-4-scout" }, { "provider_model": "mistralai/codestral-2508", - "canonical_model": "mistralai/codestral", - "verified": true + "canonical_model": "mistralai/codestral" + }, + { + "provider_model": "mistralai/devstral-2512", + "canonical_model": "mistralai/devstral" }, { "provider_model": "mistralai/devstral-medium", - "canonical_model": "mistralai/devstral-medium", - "verified": true + "canonical_model": "mistralai/devstral-medium" }, { "provider_model": "mistralai/devstral-small", - "canonical_model": "mistralai/devstral-small", - "verified": true + "canonical_model": "mistralai/devstral-small" }, { "provider_model": "mistralai/ministral-14b-2512", - "canonical_model": "mistralai/ministral-14b", - "verified": true + "canonical_model": "mistralai/ministral-14b" }, { "provider_model": "mistralai/ministral-3b", - "canonical_model": "mistralai/ministral-3b", - "verified": true + "canonical_model": "mistralai/ministral-3b" }, { "provider_model": "mistralai/ministral-3b-2512", - "canonical_model": "mistralai/ministral-3b", - "verified": true + "canonical_model": "mistralai/ministral-3b" }, { "provider_model": "mistralai/ministral-8b", - "canonical_model": "mistralai/ministral-8b", - "verified": true + "canonical_model": "mistralai/ministral-8b" }, { "provider_model": "mistralai/ministral-8b-2512", - "canonical_model": "mistralai/ministral-8b", - "verified": true + "canonical_model": "mistralai/ministral-8b" }, { "provider_model": "mistralai/mistral-7b-instruct", - "canonical_model": "mistralai/mistral-7b-instruct", - "verified": true + "canonical_model": "mistralai/mistral-7b-instruct" }, { "provider_model": "mistralai/mistral-large", - "canonical_model": "mistralai/mistral-large", - "verified": true + "canonical_model": "mistralai/mistral-large" }, { "provider_model": "mistralai/mistral-large-2407", - "canonical_model": "mistralai/mistral-large", - "verified": true + "canonical_model": "mistralai/mistral-large" }, { "provider_model": "mistralai/mistral-large-2411", - "canonical_model": "mistralai/mistral-large", - "verified": true + "canonical_model": "mistralai/mistral-large" }, { "provider_model": "mistralai/mistral-large-2512", - "canonical_model": "mistralai/mistral-large", - "verified": true + "canonical_model": "mistralai/mistral-large" }, { "provider_model": "mistralai/mistral-medium-3", - "canonical_model": "mistralai/mistral-medium-3", - "verified": true + "canonical_model": "mistralai/mistral-medium-3" }, { "provider_model": "mistralai/mistral-medium-3.1", - "canonical_model": "mistralai/mistral-medium-3.1", - "verified": true + "canonical_model": "mistralai/mistral-medium-3.1" }, { "provider_model": "mistralai/mistral-nemo", - "canonical_model": "mistralai/mistral-nemo", - "verified": true + "canonical_model": "mistralai/mistral-nemo" }, { "provider_model": "mistralai/mistral-saba", - "canonical_model": "mistralai/mistral-saba", - "verified": true + "canonical_model": "mistralai/mistral-saba" }, { "provider_model": "mistralai/mistral-small-24b-instruct-2501", - "canonical_model": "mistralai/mistral-small-24b-instruct", - "verified": true + "canonical_model": "mistralai/mistral-small-24b-instruct" }, { "provider_model": "mistralai/mistral-small-3.1-24b-instruct", - "canonical_model": "mistralai/mistral-small-3.1-24b-instruct", - "verified": true + "canonical_model": "mistralai/mistral-small-3.1-24b-instruct" }, { "provider_model": "mistralai/mistral-small-3.2-24b-instruct", - "canonical_model": "mistralai/mistral-small-3.2-24b-instruct", - "verified": true + "canonical_model": "mistralai/mistral-small-3.2-24b-instruct" + }, + { + "provider_model": "mistralai/mistral-small-creative", + "canonical_model": "mistralai/mistral-small-creative" }, { "provider_model": "mistralai/mistral-tiny", - "canonical_model": "mistralai/mistral-tiny", - "verified": true + "canonical_model": "mistralai/mistral-tiny" }, { "provider_model": "mistralai/mixtral-8x22b-instruct", - "canonical_model": "mistralai/mixtral-8x22b-instruct", - "verified": true + "canonical_model": "mistralai/mixtral-8x22b-instruct" }, { "provider_model": "mistralai/mixtral-8x7b-instruct", - "canonical_model": "mistralai/mixtral-8x7b-instruct", - "verified": true + "canonical_model": "mistralai/mixtral-8x7b-instruct" }, { "provider_model": "mistralai/pixtral-12b", - "canonical_model": "mistralai/pixtral-12b", - "verified": true + "canonical_model": "mistralai/pixtral-12b" }, { "provider_model": "mistralai/pixtral-large-2411", - "canonical_model": "mistralai/pixtral-large", - "verified": true + "canonical_model": "mistralai/pixtral-large" }, { "provider_model": "mistralai/voxtral-small-24b-2507", - "canonical_model": "mistralai/voxtral-small-24b", - "verified": true + "canonical_model": "mistralai/voxtral-small-24b" }, { "provider_model": "openai/codex-mini", - "canonical_model": "openai/codex-mini", - "verified": true + "canonical_model": "openai/codex-mini" }, { "provider_model": "openai/gpt-3.5-turbo", - "canonical_model": "openai/gpt-3.5-turbo", - "verified": true + "canonical_model": "openai/gpt-3.5-turbo" }, { "provider_model": "openai/gpt-3.5-turbo-0613", - "canonical_model": "openai/gpt-3.5-turbo", - "verified": true + "canonical_model": "openai/gpt-3.5-turbo" }, { "provider_model": "openai/gpt-3.5-turbo-16k", - "canonical_model": "openai/gpt-3.5-turbo-16k", - "verified": true + "canonical_model": "openai/gpt-3.5-turbo-16k" }, { "provider_model": "openai/gpt-4", - "canonical_model": "openai/gpt-4", - "verified": true + "canonical_model": "openai/gpt-4" }, { "provider_model": "openai/gpt-4-0314", - "canonical_model": "openai/gpt-4", - "verified": true + "canonical_model": "openai/gpt-4" }, { "provider_model": "openai/gpt-4-1106-preview", - "canonical_model": "openai/gpt-4", - "verified": true + "canonical_model": "openai/gpt-4" }, { "provider_model": "openai/gpt-4-turbo", - "canonical_model": "openai/gpt-4-turbo", - "verified": true + "canonical_model": "openai/gpt-4-turbo" }, { "provider_model": "openai/gpt-4-turbo-preview", - "canonical_model": "openai/gpt-4-turbo", - "verified": true + "canonical_model": "openai/gpt-4-turbo" }, { "provider_model": "openai/gpt-4.1", - "canonical_model": "openai/gpt-4.1", - "verified": true + "canonical_model": "openai/gpt-4.1" }, { "provider_model": "openai/gpt-4.1-mini", - "canonical_model": "openai/gpt-4.1-mini", - "verified": true + "canonical_model": "openai/gpt-4.1-mini" }, { "provider_model": "openai/gpt-4.1-nano", - "canonical_model": "openai/gpt-4.1-nano", - "verified": true + "canonical_model": "openai/gpt-4.1-nano" }, { "provider_model": "openai/gpt-4o", - "canonical_model": "openai/gpt-4o", - "verified": true + "canonical_model": "openai/gpt-4o" }, { "provider_model": "openai/gpt-4o-2024-05-13", - "canonical_model": "openai/gpt-4o", - "verified": true + "canonical_model": "openai/gpt-4o" }, { "provider_model": "openai/gpt-4o-2024-08-06", - "canonical_model": "openai/gpt-4o", - "verified": true + "canonical_model": "openai/gpt-4o" }, { "provider_model": "openai/gpt-4o-2024-11-20", - "canonical_model": "openai/gpt-4o", - "verified": true + "canonical_model": "openai/gpt-4o" }, { "provider_model": "openai/gpt-4o-audio-preview", - "canonical_model": "openai/gpt-4o-audio", - "verified": true + "canonical_model": "openai/gpt-4o-audio" }, { "provider_model": "openai/gpt-4o-mini", - "canonical_model": "openai/gpt-4o-mini", - "verified": true + "canonical_model": "openai/gpt-4o-mini" }, { "provider_model": "openai/gpt-4o-mini-2024-07-18", - "canonical_model": "openai/gpt-4o-mini", - "verified": true + "canonical_model": "openai/gpt-4o-mini" }, { "provider_model": "openai/gpt-4o:extended", - "canonical_model": "openai/gpt-4o:extended", - "verified": true + "canonical_model": "openai/gpt-4o:extended" }, { "provider_model": "openai/gpt-5", - "canonical_model": "openai/gpt-5", - "verified": true + "canonical_model": "openai/gpt-5" }, { "provider_model": "openai/gpt-5-codex", - "canonical_model": "openai/gpt-5-codex", - "verified": true + "canonical_model": "openai/gpt-5-codex" }, { "provider_model": "openai/gpt-5-image", - "canonical_model": "openai/gpt-5-image", - "verified": true + "canonical_model": "openai/gpt-5-image" }, { "provider_model": "openai/gpt-5-image-mini", - "canonical_model": "openai/gpt-5-image-mini", - "verified": true + "canonical_model": "openai/gpt-5-image-mini" }, { "provider_model": "openai/gpt-5-mini", - "canonical_model": "openai/gpt-5-mini", - "verified": true + "canonical_model": "openai/gpt-5-mini" }, { "provider_model": "openai/gpt-5-nano", - "canonical_model": "openai/gpt-5-nano", - "verified": true + "canonical_model": "openai/gpt-5-nano" }, { "provider_model": "openai/gpt-5-pro", - "canonical_model": "openai/gpt-5-pro", - "verified": true + "canonical_model": "openai/gpt-5-pro" }, { "provider_model": "openai/gpt-5.1", - "canonical_model": "openai/gpt-5.1", - "verified": true + "canonical_model": "openai/gpt-5.1" }, { "provider_model": "openai/gpt-5.1-chat", - "canonical_model": "openai/gpt-5.1-chat", - "verified": true + "canonical_model": "openai/gpt-5.1-chat" }, { "provider_model": "openai/gpt-5.1-codex", - "canonical_model": "openai/gpt-5.1-codex", - "verified": true + "canonical_model": "openai/gpt-5.1-codex" }, { "provider_model": "openai/gpt-5.1-codex-max", - "canonical_model": "openai/gpt-5.1-codex-max", - "verified": true + "canonical_model": "openai/gpt-5.1-codex-max" }, { "provider_model": "openai/gpt-5.1-codex-mini", - "canonical_model": "openai/gpt-5.1-codex-mini", - "verified": true + "canonical_model": "openai/gpt-5.1-codex-mini" + }, + { + "provider_model": "openai/gpt-5.2", + "canonical_model": "openai/gpt-5.2" + }, + { + "provider_model": "openai/gpt-5.2-chat", + "canonical_model": "openai/gpt-5.2-chat" + }, + { + "provider_model": "openai/gpt-5.2-pro", + "canonical_model": "openai/gpt-5.2-pro" }, { "provider_model": "openai/gpt-oss-120b", - "canonical_model": "openai/gpt-oss-120b", - "verified": true + "canonical_model": "openai/gpt-oss-120b" }, { "provider_model": "openai/gpt-oss-120b:exacto", - "canonical_model": "openai/gpt-oss-120b", - "verified": true + "canonical_model": "openai/gpt-oss-120b" }, { "provider_model": "openai/gpt-oss-20b", - "canonical_model": "openai/gpt-oss-20b", - "verified": true + "canonical_model": "openai/gpt-oss-20b" }, { "provider_model": "openai/gpt-oss-safeguard-20b", - "canonical_model": "openai/gpt-oss-safeguard-20b", - "verified": true + "canonical_model": "openai/gpt-oss-safeguard-20b" }, { "provider_model": "openai/o1", - "canonical_model": "openai/o1", - "verified": true + "canonical_model": "openai/o1" }, { "provider_model": "openai/o3", - "canonical_model": "openai/o3", - "verified": true + "canonical_model": "openai/o3" }, { "provider_model": "openai/o3-deep-research", - "canonical_model": "openai/o3-deep-research", - "verified": true + "canonical_model": "openai/o3-deep-research" }, { "provider_model": "openai/o3-mini", - "canonical_model": "openai/o3-mini", - "verified": true + "canonical_model": "openai/o3-mini" }, { "provider_model": "openai/o3-mini-high", - "canonical_model": "openai/o3-mini-high", - "verified": true + "canonical_model": "openai/o3-mini-high" }, { "provider_model": "openai/o3-pro", - "canonical_model": "openai/o3-pro", - "verified": true + "canonical_model": "openai/o3-pro" }, { "provider_model": "openai/o4-mini", - "canonical_model": "openai/o4-mini", - "verified": true + "canonical_model": "openai/o4-mini" }, { "provider_model": "openai/o4-mini-deep-research", - "canonical_model": "openai/o4-mini-deep-research", - "verified": true + "canonical_model": "openai/o4-mini-deep-research" }, { "provider_model": "openai/o4-mini-high", - "canonical_model": "openai/o4-mini-high", - "verified": true + "canonical_model": "openai/o4-mini-high" }, { "provider_model": "qwen/qwen-2.5-72b-instruct", - "canonical_model": "qwen/qwen-2.5-72b-instruct", - "verified": true + "canonical_model": "qwen/qwen-2.5-72b-instruct" }, { "provider_model": "qwen/qwen-max", - "canonical_model": "qwen/qwen-max", - "verified": true + "canonical_model": "qwen/qwen-max" }, { "provider_model": "qwen/qwen-plus", - "canonical_model": "qwen/qwen-plus", - "verified": true + "canonical_model": "qwen/qwen-plus" }, { "provider_model": "qwen/qwen-plus-2025-07-28", - "canonical_model": "qwen/qwen-plus", - "verified": true + "canonical_model": "qwen/qwen-plus" }, { "provider_model": "qwen/qwen-plus-2025-07-28:thinking", - "canonical_model": "qwen/qwen-plus-2025-07-28:thinking", - "verified": true + "canonical_model": "qwen/qwen-plus-2025-07-28:thinking" }, { "provider_model": "qwen/qwen-turbo", - "canonical_model": "qwen/qwen-turbo", - "verified": true + "canonical_model": "qwen/qwen-turbo" }, { "provider_model": "qwen/qwen-vl-max", - "canonical_model": "qwen/qwen-vl-max", - "verified": true + "canonical_model": "qwen/qwen-vl-max" }, { "provider_model": "qwen/qwen3-14b", - "canonical_model": "qwen/qwen3-14b", - "verified": true + "canonical_model": "qwen/qwen3-14b" }, { "provider_model": "qwen/qwen3-235b-a22b", - "canonical_model": "qwen/qwen3-235b-a22b", - "verified": true + "canonical_model": "qwen/qwen3-235b-a22b" }, { "provider_model": "qwen/qwen3-235b-a22b-2507", - "canonical_model": "qwen/qwen3-235b-a22b", - "verified": true + "canonical_model": "qwen/qwen3-235b-a22b" }, { "provider_model": "qwen/qwen3-235b-a22b-thinking-2507", - "canonical_model": "qwen/qwen3-235b-a22b-thinking", - "verified": true + "canonical_model": "qwen/qwen3-235b-a22b-thinking" }, { "provider_model": "qwen/qwen3-30b-a3b", - "canonical_model": "qwen/qwen3-30b-a3b", - "verified": true + "canonical_model": "qwen/qwen3-30b-a3b" }, { "provider_model": "qwen/qwen3-30b-a3b-instruct-2507", - "canonical_model": "qwen/qwen3-30b-a3b-instruct", - "verified": true + "canonical_model": "qwen/qwen3-30b-a3b-instruct" }, { "provider_model": "qwen/qwen3-30b-a3b-thinking-2507", - "canonical_model": "qwen/qwen3-30b-a3b-thinking", - "verified": true + "canonical_model": "qwen/qwen3-30b-a3b-thinking" }, { "provider_model": "qwen/qwen3-32b", - "canonical_model": "qwen/qwen3-32b", - "verified": true + "canonical_model": "qwen/qwen3-32b" }, { "provider_model": "qwen/qwen3-8b", - "canonical_model": "qwen/qwen3-8b", - "verified": true + "canonical_model": "qwen/qwen3-8b" }, { "provider_model": "qwen/qwen3-coder", - "canonical_model": "qwen/qwen3-coder", - "verified": true + "canonical_model": "qwen/qwen3-coder" }, { "provider_model": "qwen/qwen3-coder-30b-a3b-instruct", - "canonical_model": "qwen/qwen3-coder-30b-a3b-instruct", - "verified": true + "canonical_model": "qwen/qwen3-coder-30b-a3b-instruct" }, { "provider_model": "qwen/qwen3-coder-flash", - "canonical_model": "qwen/qwen3-coder-flash", - "verified": true + "canonical_model": "qwen/qwen3-coder-flash" }, { "provider_model": "qwen/qwen3-coder-plus", - "canonical_model": "qwen/qwen3-coder-plus", - "verified": true + "canonical_model": "qwen/qwen3-coder-plus" }, { "provider_model": "qwen/qwen3-coder:exacto", - "canonical_model": "qwen/qwen3-coder", - "verified": true + "canonical_model": "qwen/qwen3-coder" }, { "provider_model": "qwen/qwen3-max", - "canonical_model": "qwen/qwen3-max", - "verified": true + "canonical_model": "qwen/qwen3-max" }, { "provider_model": "qwen/qwen3-next-80b-a3b-instruct", - "canonical_model": "qwen/qwen3-next-80b-a3b-instruct", - "verified": true + "canonical_model": "qwen/qwen3-next-80b-a3b-instruct" }, { "provider_model": "qwen/qwen3-next-80b-a3b-thinking", - "canonical_model": "qwen/qwen3-next-80b-a3b-thinking", - "verified": true + "canonical_model": "qwen/qwen3-next-80b-a3b-thinking" }, { "provider_model": "qwen/qwen3-vl-235b-a22b-instruct", - "canonical_model": "qwen/qwen3-vl-235b-a22b-instruct", - "verified": true + "canonical_model": "qwen/qwen3-vl-235b-a22b-instruct" }, { "provider_model": "qwen/qwen3-vl-235b-a22b-thinking", - "canonical_model": "qwen/qwen3-vl-235b-a22b-thinking", - "verified": true + "canonical_model": "qwen/qwen3-vl-235b-a22b-thinking" }, { "provider_model": "qwen/qwen3-vl-30b-a3b-instruct", - "canonical_model": "qwen/qwen3-vl-30b-a3b-instruct", - "verified": true + "canonical_model": "qwen/qwen3-vl-30b-a3b-instruct" }, { "provider_model": "qwen/qwen3-vl-30b-a3b-thinking", - "canonical_model": "qwen/qwen3-vl-30b-a3b-thinking", - "verified": true + "canonical_model": "qwen/qwen3-vl-30b-a3b-thinking" }, { "provider_model": "qwen/qwen3-vl-8b-instruct", - "canonical_model": "qwen/qwen3-vl-8b-instruct", - "verified": true + "canonical_model": "qwen/qwen3-vl-8b-instruct" }, { "provider_model": "qwen/qwen3-vl-8b-thinking", - "canonical_model": "qwen/qwen3-vl-8b-thinking", - "verified": true + "canonical_model": "qwen/qwen3-vl-8b-thinking" }, { "provider_model": "qwen/qwq-32b", - "canonical_model": "qwen/qwq-32b", - "verified": true + "canonical_model": "qwen/qwq-32b" }, { "provider_model": "x-ai/grok-3", - "canonical_model": "x-ai/grok-3", - "verified": true + "canonical_model": "x-ai/grok-3" }, { "provider_model": "x-ai/grok-3-mini", - "canonical_model": "x-ai/grok-3-mini", - "verified": true + "canonical_model": "x-ai/grok-3-mini" }, { "provider_model": "x-ai/grok-4", - "canonical_model": "x-ai/grok-4", - "verified": true + "canonical_model": "x-ai/grok-4" }, { "provider_model": "x-ai/grok-4-fast", - "canonical_model": "x-ai/grok-4-fast", - "verified": true + "canonical_model": "x-ai/grok-4-fast" }, { "provider_model": "x-ai/grok-4.1-fast", - "canonical_model": "x-ai/grok-4.1-fast", - "verified": true + "canonical_model": "x-ai/grok-4.1-fast" }, { "provider_model": "x-ai/grok-code-fast-1", - "canonical_model": "x-ai/grok-code-fast-1", - "verified": true + "canonical_model": "x-ai/grok-code-fast-1" } ], + "google": [ + { + "provider_model": "gemini-2.0-flash", + "canonical_model": "google/gemini-2.0-flash" + }, + { + "provider_model": "gemini-2.0-flash-001", + "canonical_model": "google/gemini-2.0-flash" + }, + { + "provider_model": "gemini-2.0-flash-exp", + "canonical_model": "google/gemini-2.0-flash" + }, + { + "provider_model": "gemini-2.0-flash-lite", + "canonical_model": "google/gemini-2.0-flash-lite" + }, + { + "provider_model": "gemini-2.0-flash-lite-001", + "canonical_model": "google/gemini-2.0-flash-lite" + }, + { + "provider_model": "gemini-2.0-flash-lite-preview", + "canonical_model": "google/gemini-2.0-flash-lite" + }, + { + "provider_model": "gemini-2.0-flash-lite-preview-02-05", + "canonical_model": "google/gemini-2.0-flash-lite" + }, + { + "provider_model": "gemini-2.5-flash", + "canonical_model": "google/gemini-2.5-flash" + }, + { + "provider_model": "gemini-2.5-flash-image", + "canonical_model": "google/gemini-2.5-flash-image" + }, + { + "provider_model": "gemini-2.5-flash-image-preview", + "canonical_model": "google/gemini-2.5-flash-image" + }, + { + "provider_model": "gemini-2.5-flash-lite", + "canonical_model": "google/gemini-2.5-flash-lite" + }, + { + "provider_model": "gemini-2.5-flash-lite-preview-09-2025", + "canonical_model": "google/gemini-2.5-flash-lite" + }, + { + "provider_model": "gemini-2.5-flash-preview-09-2025", + "canonical_model": "google/gemini-2.5-flash" + }, + { + "provider_model": "gemini-2.5-pro", + "canonical_model": "google/gemini-2.5-pro" + }, + { + "provider_model": "gemini-3-flash-preview", + "canonical_model": "google/gemini-3-flash" + }, + { + "provider_model": "gemini-3-pro-image-preview", + "canonical_model": "google/gemini-3-pro-image" + }, + { + "provider_model": "gemini-3-pro-preview", + "canonical_model": "google/gemini-3-pro" + }, + { + "provider_model": "gemma-3-12b-it", + "canonical_model": "google/gemma-3-12b-it" + }, + { + "provider_model": "gemma-3-27b-it", + "canonical_model": "google/gemma-3-27b-it" + }, + { + "provider_model": "gemma-3-4b-it", + "canonical_model": "google/gemma-3-4b-it" + }, + { + "provider_model": "gemma-3n-e4b-it", + "canonical_model": "google/gemma-3n-e4b-it" + } + ], + "tetrate": [], + "xai": [], "openai": [ { "provider_model": "chatgpt-4o-latest", - "canonical_model": "openai/chatgpt-4o", - "verified": true + "canonical_model": "openai/chatgpt-4o" }, { "provider_model": "codex-mini-latest", - "canonical_model": "openai/codex-mini", - "verified": true + "canonical_model": "openai/codex-mini" }, { "provider_model": "gpt-3.5-turbo", - "canonical_model": "openai/gpt-3.5-turbo", - "verified": true + "canonical_model": "openai/gpt-3.5-turbo" }, { "provider_model": "gpt-3.5-turbo-0125", - "canonical_model": "openai/gpt-3.5-turbo", - "verified": true + "canonical_model": "openai/gpt-3.5-turbo" }, { "provider_model": "gpt-3.5-turbo-1106", - "canonical_model": "openai/gpt-3.5-turbo", - "verified": true + "canonical_model": "openai/gpt-3.5-turbo" }, { "provider_model": "gpt-3.5-turbo-16k", - "canonical_model": "openai/gpt-3.5-turbo-16k", - "verified": true + "canonical_model": "openai/gpt-3.5-turbo-16k" }, { "provider_model": "gpt-3.5-turbo-instruct", - "canonical_model": "openai/gpt-3.5-turbo-instruct", - "verified": true + "canonical_model": "openai/gpt-3.5-turbo-instruct" }, { "provider_model": "gpt-3.5-turbo-instruct-0914", - "canonical_model": "openai/gpt-3.5-turbo-instruct", - "verified": true + "canonical_model": "openai/gpt-3.5-turbo-instruct" }, { "provider_model": "gpt-4", - "canonical_model": "openai/gpt-4", - "verified": true + "canonical_model": "openai/gpt-4" }, { "provider_model": "gpt-4-0125-preview", - "canonical_model": "openai/gpt-4", - "verified": true + "canonical_model": "openai/gpt-4" }, { "provider_model": "gpt-4-0314", - "canonical_model": "openai/gpt-4", - "verified": true + "canonical_model": "openai/gpt-4" }, { "provider_model": "gpt-4-0613", - "canonical_model": "openai/gpt-4", - "verified": true + "canonical_model": "openai/gpt-4" }, { "provider_model": "gpt-4-1106-preview", - "canonical_model": "openai/gpt-4", - "verified": true + "canonical_model": "openai/gpt-4" }, { "provider_model": "gpt-4-turbo", - "canonical_model": "openai/gpt-4-turbo", - "verified": true + "canonical_model": "openai/gpt-4-turbo" }, { "provider_model": "gpt-4-turbo-2024-04-09", - "canonical_model": "openai/gpt-4-turbo", - "verified": true + "canonical_model": "openai/gpt-4-turbo" }, { "provider_model": "gpt-4-turbo-preview", - "canonical_model": "openai/gpt-4-turbo", - "verified": true + "canonical_model": "openai/gpt-4-turbo" }, { "provider_model": "gpt-4.1", - "canonical_model": "openai/gpt-4.1", - "verified": true + "canonical_model": "openai/gpt-4.1" }, { "provider_model": "gpt-4.1-2025-04-14", - "canonical_model": "openai/gpt-4.1", - "verified": true + "canonical_model": "openai/gpt-4.1" }, { "provider_model": "gpt-4.1-mini", - "canonical_model": "openai/gpt-4.1-mini", - "verified": true + "canonical_model": "openai/gpt-4.1-mini" }, { "provider_model": "gpt-4.1-mini-2025-04-14", - "canonical_model": "openai/gpt-4.1-mini", - "verified": true + "canonical_model": "openai/gpt-4.1-mini" }, { "provider_model": "gpt-4.1-nano", - "canonical_model": "openai/gpt-4.1-nano", - "verified": true + "canonical_model": "openai/gpt-4.1-nano" }, { "provider_model": "gpt-4.1-nano-2025-04-14", - "canonical_model": "openai/gpt-4.1-nano", - "verified": true + "canonical_model": "openai/gpt-4.1-nano" }, { "provider_model": "gpt-4o", - "canonical_model": "openai/gpt-4o", - "verified": true + "canonical_model": "openai/gpt-4o" }, { "provider_model": "gpt-4o-2024-05-13", - "canonical_model": "openai/gpt-4o", - "verified": true + "canonical_model": "openai/gpt-4o" }, { "provider_model": "gpt-4o-2024-08-06", - "canonical_model": "openai/gpt-4o", - "verified": true + "canonical_model": "openai/gpt-4o" }, { "provider_model": "gpt-4o-2024-11-20", - "canonical_model": "openai/gpt-4o", - "verified": true + "canonical_model": "openai/gpt-4o" }, { "provider_model": "gpt-4o-audio-preview", - "canonical_model": "openai/gpt-4o-audio", - "verified": true + "canonical_model": "openai/gpt-4o-audio" }, { "provider_model": "gpt-4o-audio-preview-2024-12-17", - "canonical_model": "openai/gpt-4o-audio", - "verified": true + "canonical_model": "openai/gpt-4o-audio" }, { "provider_model": "gpt-4o-audio-preview-2025-06-03", - "canonical_model": "openai/gpt-4o-audio", - "verified": true + "canonical_model": "openai/gpt-4o-audio" }, { "provider_model": "gpt-4o-mini", - "canonical_model": "openai/gpt-4o-mini", - "verified": true + "canonical_model": "openai/gpt-4o-mini" }, { "provider_model": "gpt-4o-mini-2024-07-18", - "canonical_model": "openai/gpt-4o-mini", - "verified": true + "canonical_model": "openai/gpt-4o-mini" }, { "provider_model": "gpt-4o-mini-search-preview", - "canonical_model": "openai/gpt-4o-mini-search", - "verified": true + "canonical_model": "openai/gpt-4o-mini-search" }, { "provider_model": "gpt-4o-mini-search-preview-2025-03-11", - "canonical_model": "openai/gpt-4o-mini-search", - "verified": true + "canonical_model": "openai/gpt-4o-mini-search" }, { "provider_model": "gpt-4o-search-preview", - "canonical_model": "openai/gpt-4o-search", - "verified": true + "canonical_model": "openai/gpt-4o-search" }, { "provider_model": "gpt-4o-search-preview-2025-03-11", - "canonical_model": "openai/gpt-4o-search", - "verified": true + "canonical_model": "openai/gpt-4o-search" }, { "provider_model": "gpt-5", - "canonical_model": "openai/gpt-5", - "verified": true + "canonical_model": "openai/gpt-5" }, { "provider_model": "gpt-5-2025-08-07", - "canonical_model": "openai/gpt-5", - "verified": true + "canonical_model": "openai/gpt-5" }, { "provider_model": "gpt-5-chat-latest", - "canonical_model": "openai/gpt-5-chat", - "verified": true + "canonical_model": "openai/gpt-5-chat" }, { "provider_model": "gpt-5-codex", - "canonical_model": "openai/gpt-5-codex", - "verified": true + "canonical_model": "openai/gpt-5-codex" }, { "provider_model": "gpt-5-mini", - "canonical_model": "openai/gpt-5-mini", - "verified": true + "canonical_model": "openai/gpt-5-mini" }, { "provider_model": "gpt-5-mini-2025-08-07", - "canonical_model": "openai/gpt-5-mini", - "verified": true + "canonical_model": "openai/gpt-5-mini" }, { "provider_model": "gpt-5-nano", - "canonical_model": "openai/gpt-5-nano", - "verified": true + "canonical_model": "openai/gpt-5-nano" }, { "provider_model": "gpt-5-nano-2025-08-07", - "canonical_model": "openai/gpt-5-nano", - "verified": true + "canonical_model": "openai/gpt-5-nano" }, { "provider_model": "gpt-5-pro", - "canonical_model": "openai/gpt-5-pro", - "verified": true + "canonical_model": "openai/gpt-5-pro" }, { "provider_model": "gpt-5-pro-2025-10-06", - "canonical_model": "openai/gpt-5-pro", - "verified": true + "canonical_model": "openai/gpt-5-pro" }, { "provider_model": "gpt-5.1", - "canonical_model": "openai/gpt-5.1", - "verified": true + "canonical_model": "openai/gpt-5.1" }, { "provider_model": "gpt-5.1-2025-11-13", - "canonical_model": "openai/gpt-5.1", - "verified": true + "canonical_model": "openai/gpt-5.1" }, { "provider_model": "gpt-5.1-chat-latest", - "canonical_model": "openai/gpt-5.1-chat", - "verified": true + "canonical_model": "openai/gpt-5.1-chat" }, { "provider_model": "gpt-5.1-codex", - "canonical_model": "openai/gpt-5.1-codex", - "verified": true + "canonical_model": "openai/gpt-5.1-codex" }, { "provider_model": "gpt-5.1-codex-max", - "canonical_model": "openai/gpt-5.1-codex-max", - "verified": true + "canonical_model": "openai/gpt-5.1-codex-max" }, { "provider_model": "gpt-5.1-codex-mini", - "canonical_model": "openai/gpt-5.1-codex-mini", - "verified": true + "canonical_model": "openai/gpt-5.1-codex-mini" + }, + { + "provider_model": "gpt-5.2", + "canonical_model": "openai/gpt-5.2" + }, + { + "provider_model": "gpt-5.2-2025-12-11", + "canonical_model": "openai/gpt-5.2" + }, + { + "provider_model": "gpt-5.2-chat-latest", + "canonical_model": "openai/gpt-5.2-chat" + }, + { + "provider_model": "gpt-5.2-pro", + "canonical_model": "openai/gpt-5.2-pro" + }, + { + "provider_model": "gpt-5.2-pro-2025-12-11", + "canonical_model": "openai/gpt-5.2-pro" }, { "provider_model": "o1", - "canonical_model": "openai/o1", - "verified": true + "canonical_model": "openai/o1" }, { "provider_model": "o1-2024-12-17", - "canonical_model": "openai/o1", - "verified": true + "canonical_model": "openai/o1" }, { "provider_model": "o1-pro", - "canonical_model": "openai/o1-pro", - "verified": true + "canonical_model": "openai/o1-pro" }, { "provider_model": "o1-pro-2025-03-19", - "canonical_model": "openai/o1-pro", - "verified": true + "canonical_model": "openai/o1-pro" }, { "provider_model": "o3", - "canonical_model": "openai/o3", - "verified": true + "canonical_model": "openai/o3" }, { "provider_model": "o3-2025-04-16", - "canonical_model": "openai/o3", - "verified": true + "canonical_model": "openai/o3" }, { "provider_model": "o3-deep-research", - "canonical_model": "openai/o3-deep-research", - "verified": true + "canonical_model": "openai/o3-deep-research" }, { "provider_model": "o3-deep-research-2025-06-26", - "canonical_model": "openai/o3-deep-research", - "verified": true + "canonical_model": "openai/o3-deep-research" }, { "provider_model": "o3-mini", - "canonical_model": "openai/o3-mini", - "verified": true + "canonical_model": "openai/o3-mini" }, { "provider_model": "o3-mini-2025-01-31", - "canonical_model": "openai/o3-mini", - "verified": true + "canonical_model": "openai/o3-mini" }, { "provider_model": "o3-pro", - "canonical_model": "openai/o3-pro", - "verified": true + "canonical_model": "openai/o3-pro" }, { "provider_model": "o3-pro-2025-06-10", - "canonical_model": "openai/o3-pro", - "verified": true + "canonical_model": "openai/o3-pro" }, { "provider_model": "o4-mini", - "canonical_model": "openai/o4-mini", - "verified": true + "canonical_model": "openai/o4-mini" }, { "provider_model": "o4-mini-2025-04-16", - "canonical_model": "openai/o4-mini", - "verified": true + "canonical_model": "openai/o4-mini" }, { "provider_model": "o4-mini-deep-research", - "canonical_model": "openai/o4-mini-deep-research", - "verified": true + "canonical_model": "openai/o4-mini-deep-research" }, { "provider_model": "o4-mini-deep-research-2025-06-26", - "canonical_model": "openai/o4-mini-deep-research", - "verified": true + "canonical_model": "openai/o4-mini-deep-research" } ] }, "mapped_models": [ - { - "provider": "anthropic", - "model": "claude-opus-4-20250514", - "canonical": "anthropic/claude-opus-4" - }, { "provider": "anthropic", "model": "claude-opus-4-1-20250805", @@ -3954,6 +3773,36 @@ "model": "claude-3-5-haiku-20241022", "canonical": "anthropic/claude-3.5-haiku" }, + { + "provider": "anthropic", + "model": "claude-3-7-sonnet-20250219", + "canonical": "anthropic/claude-3.7-sonnet" + }, + { + "provider": "anthropic", + "model": "claude-sonnet-4-5-20250929", + "canonical": "anthropic/claude-sonnet-4.5" + }, + { + "provider": "anthropic", + "model": "claude-opus-4-20250514", + "canonical": "anthropic/claude-opus-4" + }, + { + "provider": "anthropic", + "model": "claude-opus-4-5-20251101", + "canonical": "anthropic/claude-opus-4.5" + }, + { + "provider": "anthropic", + "model": "claude-3-haiku-20240307", + "canonical": "anthropic/claude-3-haiku" + }, + { + "provider": "anthropic", + "model": "claude-sonnet-4-20250514", + "canonical": "anthropic/claude-sonnet-4" + }, { "provider": "anthropic", "model": "claude-3-opus-20240229", @@ -3965,35 +3814,310 @@ "canonical": "anthropic/claude-haiku-4.5" }, { - "provider": "anthropic", - "model": "claude-sonnet-4-5-20250929", - "canonical": "anthropic/claude-sonnet-4.5" + "provider": "openai", + "model": "o3", + "canonical": "openai/o3" }, { - "provider": "anthropic", - "model": "claude-opus-4-5-20251101", - "canonical": "anthropic/claude-opus-4.5" + "provider": "openai", + "model": "gpt-5-chat-latest", + "canonical": "openai/gpt-5-chat" }, { - "provider": "anthropic", - "model": "claude-3-7-sonnet-20250219", - "canonical": "anthropic/claude-3.7-sonnet" + "provider": "openai", + "model": "o3-2025-04-16", + "canonical": "openai/o3" }, { - "provider": "anthropic", - "model": "claude-sonnet-4-20250514", - "canonical": "anthropic/claude-sonnet-4" + "provider": "openai", + "model": "o1-2024-12-17", + "canonical": "openai/o1" }, { - "provider": "anthropic", - "model": "claude-3-haiku-20240307", - "canonical": "anthropic/claude-3-haiku" + "provider": "openai", + "model": "gpt-5-mini", + "canonical": "openai/gpt-5-mini" + }, + { + "provider": "openai", + "model": "o4-mini-deep-research", + "canonical": "openai/o4-mini-deep-research" + }, + { + "provider": "openai", + "model": "gpt-4.1-mini-2025-04-14", + "canonical": "openai/gpt-4.1-mini" + }, + { + "provider": "openai", + "model": "gpt-5", + "canonical": "openai/gpt-5" + }, + { + "provider": "openai", + "model": "codex-mini-latest", + "canonical": "openai/codex-mini" }, { "provider": "openai", "model": "gpt-5.1-chat-latest", "canonical": "openai/gpt-5.1-chat" }, + { + "provider": "openai", + "model": "gpt-5-pro", + "canonical": "openai/gpt-5-pro" + }, + { + "provider": "openai", + "model": "gpt-5.1-codex", + "canonical": "openai/gpt-5.1-codex" + }, + { + "provider": "openai", + "model": "gpt-5-mini-2025-08-07", + "canonical": "openai/gpt-5-mini" + }, + { + "provider": "openai", + "model": "gpt-3.5-turbo", + "canonical": "openai/gpt-3.5-turbo" + }, + { + "provider": "openai", + "model": "gpt-4-0613", + "canonical": "openai/gpt-4" + }, + { + "provider": "openai", + "model": "o1-pro", + "canonical": "openai/o1-pro" + }, + { + "provider": "openai", + "model": "o3-deep-research", + "canonical": "openai/o3-deep-research" + }, + { + "provider": "openai", + "model": "gpt-4.1-nano", + "canonical": "openai/gpt-4.1-nano" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-search-preview-2025-03-11", + "canonical": "openai/gpt-4o-mini-search" + }, + { + "provider": "openai", + "model": "gpt-4-0314", + "canonical": "openai/gpt-4" + }, + { + "provider": "openai", + "model": "gpt-4o-2024-08-06", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openai", + "model": "gpt-5.1-codex-mini", + "canonical": "openai/gpt-5.1-codex-mini" + }, + { + "provider": "openai", + "model": "gpt-4o-2024-11-20", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openai", + "model": "gpt-4o", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openai", + "model": "o3-pro-2025-06-10", + "canonical": "openai/o3-pro" + }, + { + "provider": "openai", + "model": "chatgpt-4o-latest", + "canonical": "openai/chatgpt-4o" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-search-preview", + "canonical": "openai/gpt-4o-mini-search" + }, + { + "provider": "openai", + "model": "gpt-5.1-2025-11-13", + "canonical": "openai/gpt-5.1" + }, + { + "provider": "openai", + "model": "gpt-4-1106-preview", + "canonical": "openai/gpt-4" + }, + { + "provider": "openai", + "model": "o1", + "canonical": "openai/o1" + }, + { + "provider": "openai", + "model": "gpt-3.5-turbo-0125", + "canonical": "openai/gpt-3.5-turbo" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-2024-07-18", + "canonical": "openai/gpt-4o-mini" + }, + { + "provider": "openai", + "model": "o1-pro-2025-03-19", + "canonical": "openai/o1-pro" + }, + { + "provider": "openai", + "model": "gpt-5.2", + "canonical": "openai/gpt-5.2" + }, + { + "provider": "openai", + "model": "o4-mini", + "canonical": "openai/o4-mini" + }, + { + "provider": "openai", + "model": "gpt-4.1", + "canonical": "openai/gpt-4.1" + }, + { + "provider": "openai", + "model": "gpt-4-0125-preview", + "canonical": "openai/gpt-4" + }, + { + "provider": "openai", + "model": "gpt-4o-search-preview-2025-03-11", + "canonical": "openai/gpt-4o-search" + }, + { + "provider": "openai", + "model": "o3-mini", + "canonical": "openai/o3-mini" + }, + { + "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-4o-mini", + "canonical": "openai/gpt-4o-mini" + }, + { + "provider": "openai", + "model": "gpt-3.5-turbo-16k", + "canonical": "openai/gpt-3.5-turbo-16k" + }, + { + "provider": "openai", + "model": "gpt-3.5-turbo-instruct", + "canonical": "openai/gpt-3.5-turbo-instruct" + }, + { + "provider": "openai", + "model": "gpt-4.1-2025-04-14", + "canonical": "openai/gpt-4.1" + }, + { + "provider": "openai", + "model": "gpt-5-codex", + "canonical": "openai/gpt-5-codex" + }, + { + "provider": "openai", + "model": "gpt-5.1-codex-max", + "canonical": "openai/gpt-5.1-codex-max" + }, + { + "provider": "openai", + "model": "o4-mini-deep-research-2025-06-26", + "canonical": "openai/o4-mini-deep-research" + }, + { + "provider": "openai", + "model": "gpt-4.1-mini", + "canonical": "openai/gpt-4.1-mini" + }, + { + "provider": "openai", + "model": "gpt-4o-search-preview", + "canonical": "openai/gpt-4o-search" + }, + { + "provider": "openai", + "model": "gpt-5.1", + "canonical": "openai/gpt-5.1" + }, + { + "provider": "openai", + "model": "o3-pro", + "canonical": "openai/o3-pro" + }, + { + "provider": "openai", + "model": "gpt-4-turbo", + "canonical": "openai/gpt-4-turbo" + }, + { + "provider": "openai", + "model": "gpt-5.2-2025-12-11", + "canonical": "openai/gpt-5.2" + }, + { + "provider": "openai", + "model": "gpt-4.1-nano-2025-04-14", + "canonical": "openai/gpt-4.1-nano" + }, + { + "provider": "openai", + "model": "gpt-5-2025-08-07", + "canonical": "openai/gpt-5" + }, + { + "provider": "openai", + "model": "o3-deep-research-2025-06-26", + "canonical": "openai/o3-deep-research" + }, + { + "provider": "openai", + "model": "gpt-4", + "canonical": "openai/gpt-4" + }, + { + "provider": "openai", + "model": "gpt-4o-audio-preview", + "canonical": "openai/gpt-4o-audio" + }, + { + "provider": "openai", + "model": "gpt-4o-audio-preview-2024-12-17", + "canonical": "openai/gpt-4o-audio" + }, + { + "provider": "openai", + "model": "gpt-5.2-chat-latest", + "canonical": "openai/gpt-5.2-chat" + }, { "provider": "openai", "model": "o4-mini-2025-04-16", @@ -4006,173 +4130,8 @@ }, { "provider": "openai", - "model": "gpt-4.1-mini-2025-04-14", - "canonical": "openai/gpt-4.1-mini" - }, - { - "provider": "openai", - "model": "gpt-5.1", - "canonical": "openai/gpt-5.1" - }, - { - "provider": "openai", - "model": "o1-pro", - "canonical": "openai/o1-pro" - }, - { - "provider": "openai", - "model": "gpt-4o", - "canonical": "openai/gpt-4o" - }, - { - "provider": "openai", - "model": "gpt-5-pro", - "canonical": "openai/gpt-5-pro" - }, - { - "provider": "openai", - "model": "gpt-4-0125-preview", - "canonical": "openai/gpt-4" - }, - { - "provider": "openai", - "model": "gpt-4.1-2025-04-14", - "canonical": "openai/gpt-4.1" - }, - { - "provider": "openai", - "model": "gpt-3.5-turbo-1106", - "canonical": "openai/gpt-3.5-turbo" - }, - { - "provider": "openai", - "model": "gpt-4o-2024-11-20", - "canonical": "openai/gpt-4o" - }, - { - "provider": "openai", - "model": "gpt-3.5-turbo-instruct-0914", - "canonical": "openai/gpt-3.5-turbo-instruct" - }, - { - "provider": "openai", - "model": "gpt-5-nano", - "canonical": "openai/gpt-5-nano" - }, - { - "provider": "openai", - "model": "gpt-4.1-nano", - "canonical": "openai/gpt-4.1-nano" - }, - { - "provider": "openai", - "model": "o3-deep-research-2025-06-26", - "canonical": "openai/o3-deep-research" - }, - { - "provider": "openai", - "model": "o1-pro-2025-03-19", - "canonical": "openai/o1-pro" - }, - { - "provider": "openai", - "model": "gpt-4-1106-preview", - "canonical": "openai/gpt-4" - }, - { - "provider": "openai", - "model": "codex-mini-latest", - "canonical": "openai/codex-mini" - }, - { - "provider": "openai", - "model": "gpt-3.5-turbo-16k", - "canonical": "openai/gpt-3.5-turbo-16k" - }, - { - "provider": "openai", - "model": "gpt-5.1-2025-11-13", - "canonical": "openai/gpt-5.1" - }, - { - "provider": "openai", - "model": "gpt-4.1", - "canonical": "openai/gpt-4.1" - }, - { - "provider": "openai", - "model": "gpt-4o-mini", - "canonical": "openai/gpt-4o-mini" - }, - { - "provider": "openai", - "model": "gpt-5-chat-latest", - "canonical": "openai/gpt-5-chat" - }, - { - "provider": "openai", - "model": "gpt-4o-search-preview", - "canonical": "openai/gpt-4o-search" - }, - { - "provider": "openai", - "model": "gpt-4.1-nano-2025-04-14", - "canonical": "openai/gpt-4.1-nano" - }, - { - "provider": "openai", - "model": "gpt-4o-audio-preview", - "canonical": "openai/gpt-4o-audio" - }, - { - "provider": "openai", - "model": "o1", - "canonical": "openai/o1" - }, - { - "provider": "openai", - "model": "gpt-5-mini", - "canonical": "openai/gpt-5-mini" - }, - { - "provider": "openai", - "model": "gpt-5", - "canonical": "openai/gpt-5" - }, - { - "provider": "openai", - "model": "gpt-4o-search-preview-2025-03-11", - "canonical": "openai/gpt-4o-search" - }, - { - "provider": "openai", - "model": "gpt-3.5-turbo", - "canonical": "openai/gpt-3.5-turbo" - }, - { - "provider": "openai", - "model": "gpt-3.5-turbo-instruct", - "canonical": "openai/gpt-3.5-turbo-instruct" - }, - { - "provider": "openai", - "model": "gpt-5-codex", - "canonical": "openai/gpt-5-codex" - }, - { - "provider": "openai", - "model": "o3", - "canonical": "openai/o3" - }, - { - "provider": "openai", - "model": "o4-mini-deep-research-2025-06-26", - "canonical": "openai/o4-mini-deep-research" - }, - { - "provider": "openai", - "model": "gpt-4o-2024-05-13", - "canonical": "openai/gpt-4o" + "model": "gpt-5.2-pro", + "canonical": "openai/gpt-5.2-pro" }, { "provider": "openai", @@ -4181,119 +4140,9 @@ }, { "provider": "openai", - "model": "gpt-4o-audio-preview-2024-12-17", - "canonical": "openai/gpt-4o-audio" - }, - { - "provider": "openai", - "model": "gpt-4", - "canonical": "openai/gpt-4" - }, - { - "provider": "openai", - "model": "gpt-5-nano-2025-08-07", - "canonical": "openai/gpt-5-nano" - }, - { - "provider": "openai", - "model": "gpt-4-turbo", - "canonical": "openai/gpt-4-turbo" - }, - { - "provider": "openai", - "model": "o3-pro", - "canonical": "openai/o3-pro" - }, - { - "provider": "openai", - "model": "gpt-4-turbo-preview", - "canonical": "openai/gpt-4-turbo" - }, - { - "provider": "openai", - "model": "gpt-4o-2024-08-06", + "model": "gpt-4o-2024-05-13", "canonical": "openai/gpt-4o" }, - { - "provider": "openai", - "model": "o3-deep-research", - "canonical": "openai/o3-deep-research" - }, - { - "provider": "openai", - "model": "o3-2025-04-16", - "canonical": "openai/o3" - }, - { - "provider": "openai", - "model": "gpt-5.1-codex-mini", - "canonical": "openai/gpt-5.1-codex-mini" - }, - { - "provider": "openai", - "model": "o4-mini-deep-research", - "canonical": "openai/o4-mini-deep-research" - }, - { - "provider": "openai", - "model": "gpt-3.5-turbo-0125", - "canonical": "openai/gpt-3.5-turbo" - }, - { - "provider": "openai", - "model": "gpt-4o-mini-search-preview-2025-03-11", - "canonical": "openai/gpt-4o-mini-search" - }, - { - "provider": "openai", - "model": "gpt-4-0613", - "canonical": "openai/gpt-4" - }, - { - "provider": "openai", - "model": "o3-mini", - "canonical": "openai/o3-mini" - }, - { - "provider": "openai", - "model": "gpt-4o-mini-search-preview", - "canonical": "openai/gpt-4o-mini-search" - }, - { - "provider": "openai", - "model": "gpt-5.1-codex", - "canonical": "openai/gpt-5.1-codex" - }, - { - "provider": "openai", - "model": "o4-mini", - "canonical": "openai/o4-mini" - }, - { - "provider": "openai", - "model": "gpt-5-2025-08-07", - "canonical": "openai/gpt-5" - }, - { - "provider": "openai", - "model": "gpt-4-0314", - "canonical": "openai/gpt-4" - }, - { - "provider": "openai", - "model": "gpt-4o-mini-2024-07-18", - "canonical": "openai/gpt-4o-mini" - }, - { - "provider": "openai", - "model": "o3-pro-2025-06-10", - "canonical": "openai/o3-pro" - }, - { - "provider": "openai", - "model": "gpt-5.1-codex-max", - "canonical": "openai/gpt-5.1-codex-max" - }, { "provider": "openai", "model": "gpt-5-pro-2025-10-06", @@ -4301,8 +4150,18 @@ }, { "provider": "openai", - "model": "gpt-5-mini-2025-08-07", - "canonical": "openai/gpt-5-mini" + "model": "gpt-5.2-pro-2025-12-11", + "canonical": "openai/gpt-5.2-pro" + }, + { + "provider": "openai", + "model": "gpt-4-turbo-preview", + "canonical": "openai/gpt-4-turbo" + }, + { + "provider": "openai", + "model": "gpt-3.5-turbo-1106", + "canonical": "openai/gpt-3.5-turbo" }, { "provider": "openai", @@ -4311,283 +4170,23 @@ }, { "provider": "openai", - "model": "gpt-4.1-mini", - "canonical": "openai/gpt-4.1-mini" - }, - { - "provider": "openai", - "model": "chatgpt-4o-latest", - "canonical": "openai/chatgpt-4o" - }, - { - "provider": "openai", - "model": "o1-2024-12-17", - "canonical": "openai/o1" + "model": "gpt-5-nano", + "canonical": "openai/gpt-5-nano" }, { "provider": "openrouter", - "model": "openai/gpt-4o-2024-11-20", - "canonical": "openai/gpt-4o" + "model": "deepseek/deepseek-chat-v3.1", + "canonical": "deepseek/deepseek-chat" }, { "provider": "openrouter", - "model": "mistralai/mistral-large", - "canonical": "mistralai/mistral-large" + "model": "openai/gpt-4o-mini-2024-07-18", + "canonical": "openai/gpt-4o-mini" }, { "provider": "openrouter", - "model": "google/gemini-2.5-pro", - "canonical": "google/gemini-2.5-pro" - }, - { - "provider": "openrouter", - "model": "openai/gpt-5.1", - "canonical": "openai/gpt-5.1" - }, - { - "provider": "openrouter", - "model": "openai/o4-mini-deep-research", - "canonical": "openai/o4-mini-deep-research" - }, - { - "provider": "openrouter", - "model": "openai/gpt-4-1106-preview", - "canonical": "openai/gpt-4" - }, - { - "provider": "openrouter", - "model": "mistralai/ministral-3b-2512", - "canonical": "mistralai/ministral-3b" - }, - { - "provider": "openrouter", - "model": "openai/gpt-4o:extended", - "canonical": "openai/gpt-4o:extended" - }, - { - "provider": "openrouter", - "model": "anthropic/claude-sonnet-4", - "canonical": "anthropic/claude-sonnet-4" - }, - { - "provider": "openrouter", - "model": "mistralai/ministral-3b", - "canonical": "mistralai/ministral-3b" - }, - { - "provider": "openrouter", - "model": "mistralai/pixtral-12b", - "canonical": "mistralai/pixtral-12b" - }, - { - "provider": "openrouter", - "model": "ai21/jamba-large-1.7", - "canonical": "ai21/jamba-large-1.7" - }, - { - "provider": "openrouter", - "model": "anthropic/claude-3-haiku", - "canonical": "anthropic/claude-3-haiku" - }, - { - "provider": "openrouter", - "model": "deepseek/deepseek-r1-distill-llama-70b", - "canonical": "deepseek/deepseek-r1-distill-llama-70b" - }, - { - "provider": "openrouter", - "model": "openai/gpt-4o-2024-05-13", - "canonical": "openai/gpt-4o" - }, - { - "provider": "openrouter", - "model": "mistralai/mistral-medium-3.1", - "canonical": "mistralai/mistral-medium-3.1" - }, - { - "provider": "openrouter", - "model": "meta-llama/llama-3-70b-instruct", - "canonical": "meta-llama/llama-3-70b-instruct" - }, - { - "provider": "openrouter", - "model": "google/gemini-2.5-flash-lite-preview-09-2025", - "canonical": "google/gemini-2.5-flash-lite" - }, - { - "provider": "openrouter", - "model": "openai/gpt-3.5-turbo-16k", - "canonical": "openai/gpt-3.5-turbo-16k" - }, - { - "provider": "openrouter", - "model": "google/gemma-3-27b-it", - "canonical": "google/gemma-3-27b-it" - }, - { - "provider": "openrouter", - "model": "deepseek/deepseek-v3.1-terminus:exacto", - "canonical": "deepseek/deepseek-v3.1-terminus" - }, - { - "provider": "openrouter", - "model": "mistralai/mistral-large-2411", - "canonical": "mistralai/mistral-large" - }, - { - "provider": "openrouter", - "model": "mistralai/devstral-medium", - "canonical": "mistralai/devstral-medium" - }, - { - "provider": "openrouter", - "model": "qwen/qwen3-vl-30b-a3b-thinking", - "canonical": "qwen/qwen3-vl-30b-a3b-thinking" - }, - { - "provider": "openrouter", - "model": "x-ai/grok-4.1-fast", - "canonical": "x-ai/grok-4.1-fast" - }, - { - "provider": "openrouter", - "model": "meta-llama/llama-3.1-405b-instruct", - "canonical": "meta-llama/llama-3.1-405b-instruct" - }, - { - "provider": "openrouter", - "model": "qwen/qwen3-30b-a3b", - "canonical": "qwen/qwen3-30b-a3b" - }, - { - "provider": "openrouter", - "model": "qwen/qwen3-coder:exacto", - "canonical": "qwen/qwen3-coder" - }, - { - "provider": "openrouter", - "model": "qwen/qwen3-next-80b-a3b-instruct", - "canonical": "qwen/qwen3-next-80b-a3b-instruct" - }, - { - "provider": "openrouter", - "model": "x-ai/grok-3", - "canonical": "x-ai/grok-3" - }, - { - "provider": "openrouter", - "model": "google/gemini-2.0-flash-001", - "canonical": "google/gemini-2.0-flash" - }, - { - "provider": "openrouter", - "model": "meta-llama/llama-4-maverick", - "canonical": "meta-llama/llama-4-maverick" - }, - { - "provider": "openrouter", - "model": "anthropic/claude-3.5-sonnet", - "canonical": "anthropic/claude-3.5-sonnet" - }, - { - "provider": "openrouter", - "model": "mistralai/mistral-tiny", - "canonical": "mistralai/mistral-tiny" - }, - { - "provider": "openrouter", - "model": "openai/gpt-5.1-codex", - "canonical": "openai/gpt-5.1-codex" - }, - { - "provider": "openrouter", - "model": "openai/gpt-5-image-mini", - "canonical": "openai/gpt-5-image-mini" - }, - { - "provider": "openrouter", - "model": "openai/gpt-5-pro", - "canonical": "openai/gpt-5-pro" - }, - { - "provider": "openrouter", - "model": "openai/gpt-5.1-codex-max", - "canonical": "openai/gpt-5.1-codex-max" - }, - { - "provider": "openrouter", - "model": "openai/gpt-4-0314", - "canonical": "openai/gpt-4" - }, - { - "provider": "openrouter", - "model": "qwen/qwen3-vl-8b-instruct", - "canonical": "qwen/qwen3-vl-8b-instruct" - }, - { - "provider": "openrouter", - "model": "openai/o3", - "canonical": "openai/o3" - }, - { - "provider": "openrouter", - "model": "qwen/qwen3-235b-a22b", - "canonical": "qwen/qwen3-235b-a22b" - }, - { - "provider": "openrouter", - "model": "anthropic/claude-3.5-haiku", - "canonical": "anthropic/claude-3.5-haiku" - }, - { - "provider": "openrouter", - "model": "mistralai/ministral-8b-2512", - "canonical": "mistralai/ministral-8b" - }, - { - "provider": "openrouter", - "model": "google/gemini-2.5-flash", - "canonical": "google/gemini-2.5-flash" - }, - { - "provider": "openrouter", - "model": "openai/gpt-4.1", - "canonical": "openai/gpt-4.1" - }, - { - "provider": "openrouter", - "model": "mistralai/voxtral-small-24b-2507", - "canonical": "mistralai/voxtral-small-24b" - }, - { - "provider": "openrouter", - "model": "qwen/qwen3-coder", - "canonical": "qwen/qwen3-coder" - }, - { - "provider": "openrouter", - "model": "mistralai/ministral-8b", - "canonical": "mistralai/ministral-8b" - }, - { - "provider": "openrouter", - "model": "mistralai/codestral-2508", - "canonical": "mistralai/codestral" - }, - { - "provider": "openrouter", - "model": "meta-llama/llama-3.3-70b-instruct", - "canonical": "meta-llama/llama-3.3-70b-instruct" - }, - { - "provider": "openrouter", - "model": "qwen/qwen3-14b", - "canonical": "qwen/qwen3-14b" - }, - { - "provider": "openrouter", - "model": "openai/o4-mini", - "canonical": "openai/o4-mini" + "model": "openai/gpt-5.2-pro", + "canonical": "openai/gpt-5.2-pro" }, { "provider": "openrouter", @@ -4596,198 +4195,13 @@ }, { "provider": "openrouter", - "model": "openai/gpt-4o-2024-08-06", - "canonical": "openai/gpt-4o" + "model": "mistralai/mistral-small-creative", + "canonical": "mistralai/mistral-small-creative" }, { "provider": "openrouter", - "model": "openai/gpt-5", - "canonical": "openai/gpt-5" - }, - { - "provider": "openrouter", - "model": "x-ai/grok-code-fast-1", - "canonical": "x-ai/grok-code-fast-1" - }, - { - "provider": "openrouter", - "model": "anthropic/claude-opus-4", - "canonical": "anthropic/claude-opus-4" - }, - { - "provider": "openrouter", - "model": "qwen/qwen-vl-max", - "canonical": "qwen/qwen-vl-max" - }, - { - "provider": "openrouter", - "model": "google/gemini-2.5-pro-preview-05-06", - "canonical": "google/gemini-2.5-pro" - }, - { - "provider": "openrouter", - "model": "deepseek/deepseek-r1", - "canonical": "deepseek/deepseek-r1" - }, - { - "provider": "openrouter", - "model": "openai/gpt-4-turbo", - "canonical": "openai/gpt-4-turbo" - }, - { - "provider": "openrouter", - "model": "qwen/qwen-max", - "canonical": "qwen/qwen-max" - }, - { - "provider": "openrouter", - "model": "mistralai/mistral-7b-instruct", - "canonical": "mistralai/mistral-7b-instruct" - }, - { - "provider": "openrouter", - "model": "google/gemini-2.5-flash-lite", - "canonical": "google/gemini-2.5-flash-lite" - }, - { - "provider": "openrouter", - "model": "mistralai/mistral-large-2407", - "canonical": "mistralai/mistral-large" - }, - { - "provider": "openrouter", - "model": "mistralai/mistral-medium-3", - "canonical": "mistralai/mistral-medium-3" - }, - { - "provider": "openrouter", - "model": "qwen/qwen-2.5-72b-instruct", - "canonical": "qwen/qwen-2.5-72b-instruct" - }, - { - "provider": "openrouter", - "model": "anthropic/claude-sonnet-4.5", - "canonical": "anthropic/claude-sonnet-4.5" - }, - { - "provider": "openrouter", - "model": "openai/o3-mini", - "canonical": "openai/o3-mini" - }, - { - "provider": "openrouter", - "model": "mistralai/mistral-saba", - "canonical": "mistralai/mistral-saba" - }, - { - "provider": "openrouter", - "model": "openai/gpt-5-nano", - "canonical": "openai/gpt-5-nano" - }, - { - "provider": "openrouter", - "model": "openai/gpt-4.1-mini", - "canonical": "openai/gpt-4.1-mini" - }, - { - "provider": "openrouter", - "model": "anthropic/claude-opus-4.5", - "canonical": "anthropic/claude-opus-4.5" - }, - { - "provider": "openrouter", - "model": "x-ai/grok-4-fast", - "canonical": "x-ai/grok-4-fast" - }, - { - "provider": "openrouter", - "model": "mistralai/mixtral-8x7b-instruct", - "canonical": "mistralai/mixtral-8x7b-instruct" - }, - { - "provider": "openrouter", - "model": "meta-llama/llama-3.2-3b-instruct", - "canonical": "meta-llama/llama-3.2-3b-instruct" - }, - { - "provider": "openrouter", - "model": "openai/o4-mini-high", - "canonical": "openai/o4-mini-high" - }, - { - "provider": "openrouter", - "model": "qwen/qwen-plus-2025-07-28", - "canonical": "qwen/qwen-plus" - }, - { - "provider": "openrouter", - "model": "openai/gpt-4o-audio-preview", - "canonical": "openai/gpt-4o-audio" - }, - { - "provider": "openrouter", - "model": "google/gemini-2.5-pro-preview", - "canonical": "google/gemini-2.5-pro" - }, - { - "provider": "openrouter", - "model": "qwen/qwq-32b", - "canonical": "qwen/qwq-32b" - }, - { - "provider": "openrouter", - "model": "meta-llama/llama-3.1-70b-instruct", - "canonical": "meta-llama/llama-3.1-70b-instruct" - }, - { - "provider": "openrouter", - "model": "openai/gpt-4.1-nano", - "canonical": "openai/gpt-4.1-nano" - }, - { - "provider": "openrouter", - "model": "anthropic/claude-3.7-sonnet:thinking", - "canonical": "anthropic/claude-3.7-sonnet:thinking" - }, - { - "provider": "openrouter", - "model": "openai/o1", - "canonical": "openai/o1" - }, - { - "provider": "openrouter", - "model": "cohere/command-r-08-2024", - "canonical": "cohere/command-r-08" - }, - { - "provider": "openrouter", - "model": "qwen/qwen-plus", - "canonical": "qwen/qwen-plus" - }, - { - "provider": "openrouter", - "model": "qwen/qwen3-235b-a22b-thinking-2507", - "canonical": "qwen/qwen3-235b-a22b-thinking" - }, - { - "provider": "openrouter", - "model": "ai21/jamba-mini-1.7", - "canonical": "ai21/jamba-mini-1.7" - }, - { - "provider": "openrouter", - "model": "x-ai/grok-3-mini", - "canonical": "x-ai/grok-3-mini" - }, - { - "provider": "openrouter", - "model": "qwen/qwen3-vl-235b-a22b-instruct", - "canonical": "qwen/qwen3-vl-235b-a22b-instruct" - }, - { - "provider": "openrouter", - "model": "openai/gpt-oss-120b", - "canonical": "openai/gpt-oss-120b" + "model": "anthropic/claude-3.5-haiku-20241022", + "canonical": "anthropic/claude-3.5-haiku" }, { "provider": "openrouter", @@ -4796,34 +4210,89 @@ }, { "provider": "openrouter", - "model": "qwen/qwen3-coder-30b-a3b-instruct", - "canonical": "qwen/qwen3-coder-30b-a3b-instruct" + "model": "openai/o3-pro", + "canonical": "openai/o3-pro" }, { "provider": "openrouter", - "model": "openai/o3-mini-high", - "canonical": "openai/o3-mini-high" + "model": "google/gemini-2.5-flash-lite-preview-09-2025", + "canonical": "google/gemini-2.5-flash-lite" }, { "provider": "openrouter", - "model": "anthropic/claude-3.7-sonnet", - "canonical": "anthropic/claude-3.7-sonnet" + "model": "openai/codex-mini", + "canonical": "openai/codex-mini" }, { "provider": "openrouter", - "model": "deepseek/deepseek-v3.2-exp", - "canonical": "deepseek/deepseek" + "model": "openai/gpt-4o-2024-05-13", + "canonical": "openai/gpt-4o" }, { "provider": "openrouter", - "model": "qwen/qwen3-30b-a3b-thinking-2507", - "canonical": "qwen/qwen3-30b-a3b-thinking" + "model": "openai/o4-mini", + "canonical": "openai/o4-mini" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-3.5-sonnet", + "canonical": "anthropic/claude-3.5-sonnet" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.0-flash-001", + "canonical": "google/gemini-2.0-flash" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-coder", + "canonical": "qwen/qwen3-coder" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4.1-mini", + "canonical": "openai/gpt-4.1-mini" + }, + { + "provider": "openrouter", + "model": "openai/o3", + "canonical": "openai/o3" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5.2", + "canonical": "openai/gpt-5.2" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-235b-a22b", + "canonical": "qwen/qwen3-235b-a22b" }, { "provider": "openrouter", "model": "deepseek/deepseek-chat-v3-0324", "canonical": "deepseek/deepseek-chat" }, + { + "provider": "openrouter", + "model": "mistralai/ministral-8b-2512", + "canonical": "mistralai/ministral-8b" + }, + { + "provider": "openrouter", + "model": "mistralai/ministral-3b", + "canonical": "mistralai/ministral-3b" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4.1", + "canonical": "openai/gpt-4.1" + }, + { + "provider": "openrouter", + "model": "mistralai/codestral-2508", + "canonical": "mistralai/codestral" + }, { "provider": "openrouter", "model": "google/gemini-2.5-flash-preview-09-2025", @@ -4831,8 +4300,103 @@ }, { "provider": "openrouter", - "model": "openai/gpt-oss-safeguard-20b", - "canonical": "openai/gpt-oss-safeguard-20b" + "model": "openai/gpt-oss-120b:exacto", + "canonical": "openai/gpt-oss-120b" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-tiny", + "canonical": "mistralai/mistral-tiny" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-r1-distill-llama-70b", + "canonical": "deepseek/deepseek-r1-distill-llama-70b" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-pro-preview-05-06", + "canonical": "google/gemini-2.5-pro" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-large-2512", + "canonical": "mistralai/mistral-large" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5.1", + "canonical": "openai/gpt-5.1" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5.1-codex", + "canonical": "openai/gpt-5.1-codex" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-r1-0528", + "canonical": "deepseek/deepseek-r1" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-plus-2025-07-28", + "canonical": "qwen/qwen-plus" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-30b-a3b-thinking-2507", + "canonical": "qwen/qwen3-30b-a3b-thinking" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-coder:exacto", + "canonical": "qwen/qwen3-coder" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4-0314", + "canonical": "openai/gpt-4" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-opus-4", + "canonical": "anthropic/claude-opus-4" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-flash-lite", + "canonical": "google/gemini-2.5-flash-lite" + }, + { + "provider": "openrouter", + "model": "ai21/jamba-mini-1.7", + "canonical": "ai21/jamba-mini-1.7" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-235b-a22b-2507", + "canonical": "qwen/qwen3-235b-a22b" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-30b-a3b-instruct-2507", + "canonical": "qwen/qwen3-30b-a3b-instruct" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5-nano", + "canonical": "openai/gpt-5-nano" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3.1-405b-instruct", + "canonical": "meta-llama/llama-3.1-405b-instruct" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-large-2407", + "canonical": "mistralai/mistral-large" }, { "provider": "openrouter", @@ -4846,319 +4410,664 @@ }, { "provider": "openrouter", - "model": "meta-llama/llama-3.1-8b-instruct", - "canonical": "meta-llama/llama-3.1-8b-instruct" + "model": "anthropic/claude-3.7-sonnet:thinking", + "canonical": "anthropic/claude-3.7-sonnet:thinking" }, { "provider": "openrouter", - "model": "openai/gpt-3.5-turbo", - "canonical": "openai/gpt-3.5-turbo" - }, - { - "provider": "openrouter", - "model": "mistralai/pixtral-large-2411", - "canonical": "mistralai/pixtral-large" - }, - { - "provider": "openrouter", - "model": "deepseek/deepseek-v3.1-terminus", - "canonical": "deepseek/deepseek-v3.1-terminus" - }, - { - "provider": "openrouter", - "model": "openai/gpt-4o-mini", - "canonical": "openai/gpt-4o-mini" - }, - { - "provider": "openrouter", - "model": "mistralai/mistral-nemo", - "canonical": "mistralai/mistral-nemo" - }, - { - "provider": "openrouter", - "model": "qwen/qwen3-next-80b-a3b-thinking", - "canonical": "qwen/qwen3-next-80b-a3b-thinking" - }, - { - "provider": "openrouter", - "model": "qwen/qwen3-vl-235b-a22b-thinking", - "canonical": "qwen/qwen3-vl-235b-a22b-thinking" - }, - { - "provider": "openrouter", - "model": "openai/gpt-4o-mini-2024-07-18", - "canonical": "openai/gpt-4o-mini" - }, - { - "provider": "openrouter", - "model": "deepseek/deepseek-r1-0528", - "canonical": "deepseek/deepseek-r1" - }, - { - "provider": "openrouter", - "model": "google/gemini-3-pro-preview", - "canonical": "google/gemini-3-pro" - }, - { - "provider": "openrouter", - "model": "qwen/qwen3-8b", - "canonical": "qwen/qwen3-8b" - }, - { - "provider": "openrouter", - "model": "openai/o3-pro", - "canonical": "openai/o3-pro" - }, - { - "provider": "openrouter", - "model": "x-ai/grok-4", - "canonical": "x-ai/grok-4" - }, - { - "provider": "openrouter", - "model": "mistralai/mixtral-8x22b-instruct", - "canonical": "mistralai/mixtral-8x22b-instruct" - }, - { - "provider": "openrouter", - "model": "anthropic/claude-haiku-4.5", - "canonical": "anthropic/claude-haiku-4.5" - }, - { - "provider": "openrouter", - "model": "deepseek/deepseek-chat", - "canonical": "deepseek/deepseek-chat" - }, - { - "provider": "openrouter", - "model": "mistralai/mistral-large-2512", - "canonical": "mistralai/mistral-large" - }, - { - "provider": "openrouter", - "model": "qwen/qwen-plus-2025-07-28:thinking", - "canonical": "qwen/qwen-plus-2025-07-28:thinking" - }, - { - "provider": "openrouter", - "model": "qwen/qwen-turbo", - "canonical": "qwen/qwen-turbo" - }, - { - "provider": "openrouter", - "model": "openai/gpt-5.1-chat", - "canonical": "openai/gpt-5.1-chat" - }, - { - "provider": "openrouter", - "model": "openai/gpt-5-image", - "canonical": "openai/gpt-5-image" - }, - { - "provider": "openrouter", - "model": "openai/gpt-oss-20b", - "canonical": "openai/gpt-oss-20b" - }, - { - "provider": "openrouter", - "model": "openai/o3-deep-research", - "canonical": "openai/o3-deep-research" - }, - { - "provider": "openrouter", - "model": "openai/gpt-5-codex", - "canonical": "openai/gpt-5-codex" - }, - { - "provider": "openrouter", - "model": "openai/gpt-oss-120b:exacto", - "canonical": "openai/gpt-oss-120b" - }, - { - "provider": "openrouter", - "model": "qwen/qwen3-235b-a22b-2507", - "canonical": "qwen/qwen3-235b-a22b" - }, - { - "provider": "openrouter", - "model": "openai/gpt-4", - "canonical": "openai/gpt-4" - }, - { - "provider": "openrouter", - "model": "anthropic/claude-3-opus", - "canonical": "anthropic/claude-3-opus" - }, - { - "provider": "openrouter", - "model": "meta-llama/llama-4-scout", - "canonical": "meta-llama/llama-4-scout" - }, - { - "provider": "openrouter", - "model": "mistralai/devstral-small", - "canonical": "mistralai/devstral-small" - }, - { - "provider": "openrouter", - "model": "mistralai/mistral-small-3.2-24b-instruct", - "canonical": "mistralai/mistral-small-3.2-24b-instruct" - }, - { - "provider": "openrouter", - "model": "mistralai/ministral-14b-2512", - "canonical": "mistralai/ministral-14b" - }, - { - "provider": "openrouter", - "model": "mistralai/mistral-small-3.1-24b-instruct", - "canonical": "mistralai/mistral-small-3.1-24b-instruct" - }, - { - "provider": "openrouter", - "model": "openai/gpt-4-turbo-preview", - "canonical": "openai/gpt-4-turbo" - }, - { - "provider": "openrouter", - "model": "qwen/qwen3-30b-a3b-instruct-2507", - "canonical": "qwen/qwen3-30b-a3b-instruct" - }, - { - "provider": "openrouter", - "model": "anthropic/claude-opus-4.1", - "canonical": "anthropic/claude-opus-4.1" - }, - { - "provider": "openrouter", - "model": "qwen/qwen3-32b", - "canonical": "qwen/qwen3-32b" - }, - { - "provider": "openrouter", - "model": "qwen/qwen3-max", - "canonical": "qwen/qwen3-max" - }, - { - "provider": "openrouter", - "model": "qwen/qwen3-vl-8b-thinking", - "canonical": "qwen/qwen3-vl-8b-thinking" - }, - { - "provider": "openrouter", - "model": "openai/codex-mini", - "canonical": "openai/codex-mini" - }, - { - "provider": "openrouter", - "model": "openai/gpt-4o", - "canonical": "openai/gpt-4o" - }, - { - "provider": "openrouter", - "model": "mistralai/mistral-small-24b-instruct-2501", - "canonical": "mistralai/mistral-small-24b-instruct" - }, - { - "provider": "openrouter", - "model": "anthropic/claude-3.5-haiku-20241022", - "canonical": "anthropic/claude-3.5-haiku" - }, - { - "provider": "openrouter", - "model": "deepseek/deepseek-chat-v3.1", - "canonical": "deepseek/deepseek-chat" - }, - { - "provider": "openrouter", - "model": "openai/gpt-3.5-turbo-0613", - "canonical": "openai/gpt-3.5-turbo" - }, - { - "provider": "openrouter", - "model": "qwen/qwen3-coder-flash", - "canonical": "qwen/qwen3-coder-flash" - }, - { - "provider": "openrouter", - "model": "openai/gpt-5.1-codex-mini", - "canonical": "openai/gpt-5.1-codex-mini" + "model": "anthropic/claude-3-haiku", + "canonical": "anthropic/claude-3-haiku" }, { "provider": "openrouter", "model": "cohere/command-r-plus-08-2024", "canonical": "cohere/command-r-plus-08" }, + { + "provider": "openrouter", + "model": "openai/gpt-5-pro", + "canonical": "openai/gpt-5-pro" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4-turbo-preview", + "canonical": "openai/gpt-4-turbo" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-flash", + "canonical": "google/gemini-2.5-flash" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-32b", + "canonical": "qwen/qwen3-32b" + }, + { + "provider": "openrouter", + "model": "mistralai/mixtral-8x7b-instruct", + "canonical": "mistralai/mixtral-8x7b-instruct" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-saba", + "canonical": "mistralai/mistral-saba" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5-codex", + "canonical": "openai/gpt-5-codex" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5", + "canonical": "openai/gpt-5" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-4-maverick", + "canonical": "meta-llama/llama-4-maverick" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-plus-2025-07-28:thinking", + "canonical": "qwen/qwen-plus-2025-07-28:thinking" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-coder-30b-a3b-instruct", + "canonical": "qwen/qwen3-coder-30b-a3b-instruct" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3-70b-instruct", + "canonical": "meta-llama/llama-3-70b-instruct" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3.1-70b-instruct", + "canonical": "meta-llama/llama-3.1-70b-instruct" + }, + { + "provider": "openrouter", + "model": "mistralai/pixtral-large-2411", + "canonical": "mistralai/pixtral-large" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5.1-codex-mini", + "canonical": "openai/gpt-5.1-codex-mini" + }, + { + "provider": "openrouter", + "model": "mistralai/ministral-3b-2512", + "canonical": "mistralai/ministral-3b" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-vl-30b-a3b-thinking", + "canonical": "qwen/qwen3-vl-30b-a3b-thinking" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4", + "canonical": "openai/gpt-4" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-3-mini", + "canonical": "x-ai/grok-3-mini" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-4", + "canonical": "x-ai/grok-4" + }, + { + "provider": "openrouter", + "model": "mistralai/devstral-small", + "canonical": "mistralai/devstral-small" + }, { "provider": "openrouter", "model": "qwen/qwen3-vl-30b-a3b-instruct", "canonical": "qwen/qwen3-vl-30b-a3b-instruct" }, + { + "provider": "openrouter", + "model": "cohere/command-r-08-2024", + "canonical": "cohere/command-r-08" + }, + { + "provider": "openrouter", + "model": "mistralai/ministral-14b-2512", + "canonical": "mistralai/ministral-14b" + }, + { + "provider": "openrouter", + "model": "mistralai/devstral-medium", + "canonical": "mistralai/devstral-medium" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-max", + "canonical": "qwen/qwen-max" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-small-24b-instruct-2501", + "canonical": "mistralai/mistral-small-24b-instruct" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-coder-flash", + "canonical": "qwen/qwen3-coder-flash" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4o-mini", + "canonical": "openai/gpt-4o-mini" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-max", + "canonical": "qwen/qwen3-max" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-code-fast-1", + "canonical": "x-ai/grok-code-fast-1" + }, + { + "provider": "openrouter", + "model": "mistralai/voxtral-small-24b-2507", + "canonical": "mistralai/voxtral-small-24b" + }, + { + "provider": "openrouter", + "model": "openai/gpt-oss-safeguard-20b", + "canonical": "openai/gpt-oss-safeguard-20b" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-medium-3", + "canonical": "mistralai/mistral-medium-3" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-7b-instruct", + "canonical": "mistralai/mistral-7b-instruct" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4o", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-2.5-72b-instruct", + "canonical": "qwen/qwen-2.5-72b-instruct" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-14b", + "canonical": "qwen/qwen3-14b" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-small-3.1-24b-instruct", + "canonical": "mistralai/mistral-small-3.1-24b-instruct" + }, + { + "provider": "openrouter", + "model": "openai/gpt-3.5-turbo-16k", + "canonical": "openai/gpt-3.5-turbo-16k" + }, + { + "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": "openai/gpt-4o-audio-preview", + "canonical": "openai/gpt-4o-audio" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-4.1-fast", + "canonical": "x-ai/grok-4.1-fast" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-opus-4.1", + "canonical": "anthropic/claude-opus-4.1" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-large", + "canonical": "mistralai/mistral-large" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5-image", + "canonical": "openai/gpt-5-image" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5.1-codex-max", + "canonical": "openai/gpt-5.1-codex-max" + }, + { + "provider": "openrouter", + "model": "openai/gpt-oss-120b", + "canonical": "openai/gpt-oss-120b" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-4-fast", + "canonical": "x-ai/grok-4-fast" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5-image-mini", + "canonical": "openai/gpt-5-image-mini" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-next-80b-a3b-thinking", + "canonical": "qwen/qwen3-next-80b-a3b-thinking" + }, + { + "provider": "openrouter", + "model": "ai21/jamba-large-1.7", + "canonical": "ai21/jamba-large-1.7" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-3-opus", + "canonical": "anthropic/claude-3-opus" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3.2-3b-instruct", + "canonical": "meta-llama/llama-3.2-3b-instruct" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4-turbo", + "canonical": "openai/gpt-4-turbo" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-small-3.2-24b-instruct", + "canonical": "mistralai/mistral-small-3.2-24b-instruct" + }, + { + "provider": "openrouter", + "model": "openai/gpt-3.5-turbo-0613", + "canonical": "openai/gpt-3.5-turbo" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-turbo", + "canonical": "qwen/qwen-turbo" + }, + { + "provider": "openrouter", + "model": "qwen/qwq-32b", + "canonical": "qwen/qwq-32b" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-sonnet-4.5", + "canonical": "anthropic/claude-sonnet-4.5" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-next-80b-a3b-instruct", + "canonical": "qwen/qwen3-next-80b-a3b-instruct" + }, + { + "provider": "openrouter", + "model": "google/gemini-3-flash-preview", + "canonical": "google/gemini-3-flash" + }, + { + "provider": "openrouter", + "model": "openai/o1", + "canonical": "openai/o1" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-v3.1-terminus", + "canonical": "deepseek/deepseek-v3.1-terminus" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-nemo", + "canonical": "mistralai/mistral-nemo" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-235b-a22b-thinking-2507", + "canonical": "qwen/qwen3-235b-a22b-thinking" + }, + { + "provider": "openrouter", + "model": "openai/gpt-oss-20b", + "canonical": "openai/gpt-oss-20b" + }, + { + "provider": "openrouter", + "model": "mistralai/pixtral-12b", + "canonical": "mistralai/pixtral-12b" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-3.7-sonnet", + "canonical": "anthropic/claude-3.7-sonnet" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-v3.1-terminus:exacto", + "canonical": "deepseek/deepseek-v3.1-terminus" + }, + { + "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/o3-deep-research", + "canonical": "openai/o3-deep-research" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-chat", + "canonical": "deepseek/deepseek-chat" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-medium-3.1", + "canonical": "mistralai/mistral-medium-3.1" + }, + { + "provider": "openrouter", + "model": "openai/gpt-3.5-turbo", + "canonical": "openai/gpt-3.5-turbo" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-v3.2-exp", + "canonical": "deepseek/deepseek" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-pro", + "canonical": "google/gemini-2.5-pro" + }, { "provider": "openrouter", "model": "deepseek/deepseek-v3.2", "canonical": "deepseek/deepseek" }, { - "provider": "google", - "model": "gemini-2.0-flash", - "canonical": "google/gemini-2.0-flash" + "provider": "openrouter", + "model": "anthropic/claude-opus-4.5", + "canonical": "anthropic/claude-opus-4.5" }, { - "provider": "google", - "model": "gemini-2.5-flash", - "canonical": "google/gemini-2.5-flash" + "provider": "openrouter", + "model": "google/gemma-3-27b-it", + "canonical": "google/gemma-3-27b-it" }, { - "provider": "google", - "model": "gemini-2.5-flash-preview-09-2025", - "canonical": "google/gemini-2.5-flash" + "provider": "openrouter", + "model": "openai/gpt-5.1-chat", + "canonical": "openai/gpt-5.1-chat" }, { - "provider": "google", - "model": "gemini-2.0-flash-001", - "canonical": "google/gemini-2.0-flash" + "provider": "openrouter", + "model": "openai/gpt-5.2-chat", + "canonical": "openai/gpt-5.2-chat" }, { - "provider": "google", - "model": "gemma-3n-e4b-it", - "canonical": "google/gemma-3n-e4b-it" + "provider": "openrouter", + "model": "meta-llama/llama-3.1-8b-instruct", + "canonical": "meta-llama/llama-3.1-8b-instruct" }, { - "provider": "google", - "model": "gemini-2.5-pro", + "provider": "openrouter", + "model": "openai/gpt-4.1-nano", + "canonical": "openai/gpt-4.1-nano" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-plus", + "canonical": "qwen/qwen-plus" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-vl-max", + "canonical": "qwen/qwen-vl-max" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-30b-a3b", + "canonical": "qwen/qwen3-30b-a3b" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-8b", + "canonical": "qwen/qwen3-8b" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-vl-235b-a22b-instruct", + "canonical": "qwen/qwen3-vl-235b-a22b-instruct" + }, + { + "provider": "openrouter", + "model": "openai/o4-mini-high", + "canonical": "openai/o4-mini-high" + }, + { + "provider": "openrouter", + "model": "google/gemini-3-pro-preview", + "canonical": "google/gemini-3-pro" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-large-2411", + "canonical": "mistralai/mistral-large" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3.3-70b-instruct", + "canonical": "meta-llama/llama-3.3-70b-instruct" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-3.5-haiku", + "canonical": "anthropic/claude-3.5-haiku" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-sonnet-4", + "canonical": "anthropic/claude-sonnet-4" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-vl-235b-a22b-thinking", + "canonical": "qwen/qwen3-vl-235b-a22b-thinking" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-pro-preview", "canonical": "google/gemini-2.5-pro" }, { - "provider": "google", - "model": "gemma-3-4b-it", - "canonical": "google/gemma-3-4b-it" + "provider": "openrouter", + "model": "openai/o3-mini-high", + "canonical": "openai/o3-mini-high" }, { - "provider": "google", - "model": "gemini-2.5-flash-image", - "canonical": "google/gemini-2.5-flash-image" + "provider": "openrouter", + "model": "deepseek/deepseek-r1", + "canonical": "deepseek/deepseek-r1" }, { - "provider": "google", - "model": "gemini-3-pro-image-preview", - "canonical": "google/gemini-3-pro-image" + "provider": "openrouter", + "model": "qwen/qwen3-vl-8b-instruct", + "canonical": "qwen/qwen3-vl-8b-instruct" }, { - "provider": "google", - "model": "gemini-2.0-flash-exp", - "canonical": "google/gemini-2.0-flash" + "provider": "openrouter", + "model": "x-ai/grok-3", + "canonical": "x-ai/grok-3" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-vl-8b-thinking", + "canonical": "qwen/qwen3-vl-8b-thinking" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4o-2024-11-20", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openrouter", + "model": "mistralai/devstral-2512", + "canonical": "mistralai/devstral" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-4-scout", + "canonical": "meta-llama/llama-4-scout" + }, + { + "provider": "openrouter", + "model": "mistralai/ministral-8b", + "canonical": "mistralai/ministral-8b" + }, + { + "provider": "openrouter", + "model": "openai/o4-mini-deep-research", + "canonical": "openai/o4-mini-deep-research" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4-1106-preview", + "canonical": "openai/gpt-4" + }, + { + "provider": "openrouter", + "model": "mistralai/mixtral-8x22b-instruct", + "canonical": "mistralai/mixtral-8x22b-instruct" }, { "provider": "google", "model": "gemini-2.0-flash-lite-preview", "canonical": "google/gemini-2.0-flash-lite" }, + { + "provider": "google", + "model": "gemini-2.0-flash-lite", + "canonical": "google/gemini-2.0-flash-lite" + }, + { + "provider": "google", + "model": "gemini-3-flash-preview", + "canonical": "google/gemini-3-flash" + }, + { + "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": "gemma-3n-e4b-it", + "canonical": "google/gemma-3n-e4b-it" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-001", + "canonical": "google/gemini-2.0-flash" + }, + { + "provider": "google", + "model": "gemma-3-12b-it", + "canonical": "google/gemma-3-12b-it" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-lite-preview-02-05", + "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": "gemini-3-pro-image-preview", + "canonical": "google/gemini-3-pro-image" + }, + { + "provider": "google", + "model": "gemini-2.5-flash-image", + "canonical": "google/gemini-2.5-flash-image" + }, { "provider": "google", "model": "gemini-2.5-flash-lite", "canonical": "google/gemini-2.5-flash-lite" }, + { + "provider": "google", + "model": "gemini-2.5-flash-preview-09-2025", + "canonical": "google/gemini-2.5-flash" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-exp", + "canonical": "google/gemini-2.0-flash" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-lite-001", + "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", @@ -5169,184 +5078,165 @@ "model": "gemini-3-pro-preview", "canonical": "google/gemini-3-pro" }, - { - "provider": "google", - "model": "gemini-2.0-flash-lite-preview-02-05", - "canonical": "google/gemini-2.0-flash-lite" - }, - { - "provider": "google", - "model": "gemini-2.0-flash-lite-001", - "canonical": "google/gemini-2.0-flash-lite" - }, - { - "provider": "google", - "model": "gemini-2.5-flash-lite-preview-09-2025", - "canonical": "google/gemini-2.5-flash-lite" - }, { "provider": "google", "model": "gemma-3-27b-it", "canonical": "google/gemma-3-27b-it" - }, - { - "provider": "google", - "model": "gemini-2.0-flash-lite", - "canonical": "google/gemini-2.0-flash-lite" - }, - { - "provider": "google", - "model": "gemma-3-12b-it", - "canonical": "google/gemma-3-12b-it" } ], "model_counts": { - "anthropic": 10, - "google": 50, "tetrate": 0, - "xai": 0, - "openai": 633, - "openrouter": 225 + "openai": 646, + "google": 50, + "openrouter": 231, + "anthropic": 10, + "xai": 0 }, "canonical_models_used": [ - "mistralai/mistral-small-3.2-24b-instruct", - "meta-llama/llama-3-8b-instruct", - "mistralai/pixtral-12b", - "qwen/qwen3-coder-30b-a3b-instruct", - "anthropic/claude-opus-4", - "cohere/command-r-plus-08", - "google/gemini-2.5-flash-image", - "qwen/qwen3-next-80b-a3b-instruct", - "openai/gpt-4o-mini", - "cohere/command-r-08", - "qwen/qwen3-vl-235b-a22b-thinking", - "openai/gpt-5.1-codex-max", - "mistralai/mistral-large", - "google/gemma-3-27b-it", - "openai/gpt-oss-120b", - "openai/gpt-5", - "openai/gpt-5.1-chat", - "qwen/qwen3-vl-8b-thinking", - "openai/gpt-4o-audio", - "google/gemini-3-pro", - "openai/gpt-5.1-codex", - "openai/o3-pro", - "qwen/qwen3-coder-plus", "openai/gpt-4", - "openai/gpt-5-image-mini", + "openai/gpt-3.5-turbo-16k", "openai/gpt-3.5-turbo-instruct", "anthropic/claude-3-opus", - "mistralai/ministral-8b", - "qwen/qwen3-30b-a3b-instruct", - "openai/gpt-oss-20b", - "x-ai/grok-code-fast-1", - "mistralai/mistral-saba", - "qwen/qwen3-vl-30b-a3b-instruct", - "openai/o3", - "mistralai/mistral-7b-instruct", - "mistralai/mistral-nemo", - "qwen/qwen3-next-80b-a3b-thinking", - "x-ai/grok-3", - "meta-llama/llama-4-maverick", - "qwen/qwen3-coder-flash", - "openai/gpt-oss-safeguard-20b", - "anthropic/claude-opus-4.5", - "x-ai/grok-4.1-fast", - "google/gemma-3n-e4b-it", - "mistralai/pixtral-large", - "qwen/qwen3-235b-a22b-thinking", - "openai/gpt-5-codex", - "anthropic/claude-3.7-sonnet:thinking", - "anthropic/claude-3.7-sonnet", - "meta-llama/llama-3.3-70b-instruct", - "meta-llama/llama-4-scout", - "openai/gpt-5-nano", - "openai/o3-mini", - "openai/o4-mini-deep-research", - "openai/gpt-4o", - "deepseek/deepseek-v3.1-terminus", - "mistralai/mixtral-8x7b-instruct", - "qwen/qwen-plus-2025-07-28:thinking", - "qwen/qwen-plus", - "mistralai/ministral-14b", - "openai/gpt-5-mini", - "meta-llama/llama-3.2-3b-instruct", - "openai/gpt-5.1", - "openai/gpt-5-pro", - "qwen/qwen3-vl-8b-instruct", - "google/gemini-2.5-flash-lite", - "qwen/qwen-vl-max", + "anthropic/claude-haiku-4.5", "mistralai/devstral-medium", - "google/gemini-2.5-flash", - "meta-llama/llama-3-70b-instruct", - "mistralai/mistral-small-3.1-24b-instruct", - "qwen/qwen3-32b", - "openai/gpt-3.5-turbo-16k", - "openai/o3-deep-research", - "openai/o1-pro", + "anthropic/claude-opus-4.1", + "deepseek/deepseek-r1", + "x-ai/grok-3", + "qwen/qwen3-235b-a22b-thinking", + "qwen/qwen-plus", + "openai/gpt-4o", + "mistralai/mistral-tiny", + "mistralai/ministral-8b", + "qwen/qwen3-vl-8b-thinking", + "mistralai/mistral-small-3.2-24b-instruct", + "openai/o3-mini-high", + "qwen/qwen3-vl-30b-a3b-instruct", + "openai/gpt-4-turbo", + "openai/gpt-5-image", + "google/gemini-2.0-flash", + "google/gemini-3-pro", + "qwen/qwen-vl-max", + "openai/gpt-4o-audio", + "openai/gpt-5.2-pro", + "mistralai/codestral", + "qwen/qwen3-30b-a3b-instruct", + "openai/gpt-5.1-chat", + "anthropic/claude-3.5-sonnet", "meta-llama/llama-3.1-405b-instruct", + "qwen/qwen3-coder-plus", + "qwen/qwen3-coder-30b-a3b-instruct", + "meta-llama/llama-3.1-70b-instruct", + "openai/gpt-oss-safeguard-20b", + "qwen/qwen3-32b", + "mistralai/mistral-saba", + "openai/o4-mini", + "openai/o3-pro", + "mistralai/pixtral-12b", + "anthropic/claude-opus-4.5", + "meta-llama/llama-3-8b-instruct", + "deepseek/deepseek-v3.1-terminus", "anthropic/claude-sonnet-4", "deepseek/deepseek", - "google/gemini-3-pro-image", + "mistralai/devstral", + "cohere/command-r-08", + "openai/o3", + "openai/o4-mini-high", + "google/gemini-2.0-flash-lite", "ai21/jamba-mini-1.7", + "cohere/command-r-plus-08", + "qwen/qwen3-8b", + "qwen/qwen3-vl-30b-a3b-thinking", + "x-ai/grok-4", + "openai/o1-pro", + "openai/o4-mini-deep-research", + "x-ai/grok-4.1-fast", + "meta-llama/llama-4-maverick", + "anthropic/claude-sonnet-4.5", + "openai/gpt-5.1-codex-max", + "openai/gpt-5-pro", + "openai/gpt-5.1-codex", + "google/gemini-2.5-flash-lite", + "qwen/qwen3-vl-235b-a22b-thinking", + "openai/o1", + "openai/gpt-5", + "openai/chatgpt-4o", + "openai/gpt-3.5-turbo", + "deepseek/deepseek-chat", + "mistralai/ministral-3b", + "meta-llama/llama-4-scout", "anthropic/claude-3.5-haiku", - "qwen/qwen-turbo", - "google/gemma-3-4b-it", - "google/gemini-2.5-pro", + "openai/gpt-oss-120b", + "google/gemini-2.5-flash", + "openai/o3-deep-research", + "mistralai/mistral-medium-3", + "mistralai/pixtral-large", + "mistralai/mistral-small-3.1-24b-instruct", + "qwen/qwq-32b", + "meta-llama/llama-3.3-70b-instruct", + "x-ai/grok-4-fast", + "mistralai/devstral-small", + "mistralai/mistral-small-creative", + "qwen/qwen3-vl-8b-instruct", + "google/gemini-2.5-flash-image", + "anthropic/claude-opus-4", + "qwen/qwen3-14b", + "mistralai/mixtral-8x22b-instruct", + "google/gemma-3-27b-it", + "openai/gpt-4o-mini", + "mistralai/mistral-small-24b-instruct", + "x-ai/grok-3-mini", + "openai/gpt-4o:extended", + "qwen/qwen3-coder-flash", + "google/gemma-3n-e4b-it", + "mistralai/voxtral-small-24b", "qwen/qwen3-30b-a3b", + "google/gemini-2.5-pro", + "openai/gpt-5-mini", + "openai/gpt-5-chat", + "qwen/qwen-turbo", + "openai/gpt-5.2", + "qwen/qwen-plus-2025-07-28:thinking", + "openai/gpt-4.1", "qwen/qwen-2.5-72b-instruct", + "mistralai/mistral-nemo", + "mistralai/mistral-medium-3.1", + "openai/gpt-5-nano", + "openai/gpt-5.2-chat", + "qwen/qwen3-max", + "openai/gpt-5-codex", + "mistralai/mixtral-8x7b-instruct", "google/gemma-3-12b-it", "openai/gpt-4.1-mini", - "openai/gpt-4o-mini-search", - "x-ai/grok-4-fast", - "openai/gpt-4.1", - "openai/gpt-5.1-codex-mini", - "qwen/qwen3-max", - "openai/o4-mini", - "anthropic/claude-opus-4.1", - "mistralai/voxtral-small-24b", - "x-ai/grok-4", - "x-ai/grok-3-mini", - "qwen/qwen-max", - "anthropic/claude-sonnet-4.5", - "openai/gpt-4o-search", - "openai/gpt-5-chat", - "google/gemini-2.0-flash-lite", - "mistralai/mistral-small-24b-instruct", - "mistralai/mistral-medium-3", - "meta-llama/llama-3.1-8b-instruct", - "openai/gpt-4o:extended", - "openai/gpt-5-image", - "qwen/qwq-32b", - "deepseek/deepseek-chat", - "openai/o3-mini-high", - "mistralai/codestral", - "openai/codex-mini", - "deepseek/deepseek-r1", - "qwen/qwen3-30b-a3b-thinking", - "openai/o1", - "openai/gpt-4.1-nano", - "openai/chatgpt-4o", - "openai/o4-mini-high", - "openai/gpt-3.5-turbo", - "openai/gpt-4-turbo", - "anthropic/claude-3.5-sonnet", - "meta-llama/llama-3.1-70b-instruct", - "mistralai/mistral-tiny", - "qwen/qwen3-vl-235b-a22b-instruct", - "qwen/qwen3-8b", - "mistralai/devstral-small", - "anthropic/claude-haiku-4.5", - "deepseek/deepseek-r1-distill-llama-70b", - "qwen/qwen3-14b", - "mistralai/ministral-3b", + "mistralai/mistral-large", + "google/gemini-3-pro-image", "qwen/qwen3-235b-a22b", - "mistralai/mistral-medium-3.1", - "anthropic/claude-3-haiku", - "ai21/jamba-large-1.7", - "google/gemini-2.0-flash", - "qwen/qwen3-vl-30b-a3b-thinking", + "x-ai/grok-code-fast-1", + "openai/gpt-4.1-nano", + "openai/gpt-5.1-codex-mini", + "anthropic/claude-3.7-sonnet", + "openai/gpt-5.1", + "openai/gpt-4o-search", + "google/gemini-3-flash", + "qwen/qwen3-vl-235b-a22b-instruct", + "google/gemma-3-4b-it", + "openai/codex-mini", "qwen/qwen3-coder", - "mistralai/mixtral-8x22b-instruct" + "anthropic/claude-3-haiku", + "mistralai/mistral-7b-instruct", + "deepseek/deepseek-r1-distill-llama-70b", + "meta-llama/llama-3.2-3b-instruct", + "qwen/qwen3-next-80b-a3b-instruct", + "ai21/jamba-large-1.7", + "qwen/qwen-max", + "openai/gpt-4o-mini-search", + "anthropic/claude-3.7-sonnet:thinking", + "openai/gpt-oss-20b", + "qwen/qwen3-30b-a3b-thinking", + "meta-llama/llama-3.1-8b-instruct", + "openai/o3-mini", + "qwen/qwen3-next-80b-a3b-thinking", + "meta-llama/llama-3-70b-instruct", + "mistralai/ministral-14b", + "openai/gpt-5-image-mini" ] } \ No newline at end of file diff --git a/crates/goose/src/providers/canonical/data/canonical_models.json b/crates/goose/src/providers/canonical/data/canonical_models.json index 94cdcfe523..3178c92f76 100644 --- a/crates/goose/src/providers/canonical/data/canonical_models.json +++ b/crates/goose/src/providers/canonical/data/canonical_models.json @@ -365,7 +365,7 @@ "id": "deepseek/deepseek", "name": "DeepSeek: DeepSeek V3.2", "context_length": 163840, - "max_completion_tokens": 163840, + "max_completion_tokens": 65536, "input_modalities": [ "text" ], @@ -374,7 +374,7 @@ ], "supports_tools": true, "pricing": { - "prompt": 2.5e-7, + "prompt": 2.6e-7, "completion": 3.8e-7, "request": 0.0, "image": 0.0 @@ -684,6 +684,29 @@ "image": 0.00516 } }, + { + "id": "google/gemini-3-flash", + "name": "Google: Gemini 3 Flash Preview", + "context_length": 1048576, + "max_completion_tokens": 65535, + "input_modalities": [ + "text", + "image", + "file", + "audio", + "video" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 5e-7, + "completion": 3e-6, + "request": 0.0, + "image": 0.0 + } + }, { "id": "google/gemini-3-pro", "name": "Google: Gemini 3 Pro Preview", @@ -1443,6 +1466,24 @@ "image": 0.0 } }, + { + "id": "mistralai/mistral-small-creative", + "name": "Mistral: Mistral Small Creative", + "context_length": 32768, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1e-7, + "completion": 3e-7, + "request": 0.0, + "image": 0.0 + } + }, { "id": "mistralai/mistral-tiny", "name": "Mistral Tiny", @@ -3082,6 +3123,25 @@ "image": 0.0 } }, + { + "id": "qwen/qwen3-vl-32b-instruct", + "name": "Qwen: Qwen3 VL 32B Instruct", + "context_length": 262144, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 5e-7, + "completion": 1.5e-6, + "request": 0.0, + "image": 0.0 + } + }, { "id": "qwen/qwen3-vl-8b-instruct", "name": "Qwen: Qwen3 VL 8B Instruct",