From 87af4e49b4feea3f2d99c85ac7d34005e861eddc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 19 Dec 2025 15:40:16 +0000 Subject: [PATCH 1/2] chore(release): release version 1.18.0 --- Cargo.lock | 12 +- Cargo.toml | 2 +- .../data/canonical_mapping_report.json | 1368 +++++++++-------- .../canonical/data/canonical_models.json | 4 +- ui/desktop/openapi.json | 2 +- ui/desktop/package-lock.json | 4 +- ui/desktop/package.json | 2 +- 7 files changed, 699 insertions(+), 695 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e7e59b6486c..8d2c5bdbf15 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3067,7 +3067,7 @@ dependencies = [ [[package]] name = "goose" -version = "1.17.0" +version = "1.18.0" dependencies = [ "agent-client-protocol", "ahash", @@ -3156,7 +3156,7 @@ dependencies = [ [[package]] name = "goose-bench" -version = "1.17.0" +version = "1.18.0" dependencies = [ "anyhow", "async-trait", @@ -3179,7 +3179,7 @@ dependencies = [ [[package]] name = "goose-cli" -version = "1.17.0" +version = "1.18.0" dependencies = [ "agent-client-protocol", "anstream", @@ -3233,7 +3233,7 @@ dependencies = [ [[package]] name = "goose-mcp" -version = "1.17.0" +version = "1.18.0" dependencies = [ "anyhow", "async-trait", @@ -3298,7 +3298,7 @@ dependencies = [ [[package]] name = "goose-server" -version = "1.17.0" +version = "1.18.0" dependencies = [ "anyhow", "async-trait", @@ -3343,7 +3343,7 @@ dependencies = [ [[package]] name = "goose-test" -version = "1.17.0" +version = "1.18.0" dependencies = [ "clap", "serde_json", diff --git a/Cargo.toml b/Cargo.toml index 490c56b1270..fd250476b21 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ resolver = "2" [workspace.package] edition = "2021" -version = "1.17.0" +version = "1.18.0" authors = ["Block "] license = "Apache-2.0" repository = "https://github.com/block/goose" 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 1ba5cf6cc84..c7e11d232fc 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-18T16:22:56.520+00:00", + "timestamp": "2025-12-19T15:40:14.190522404+00:00", "unmapped_models": [ { "provider": "openai", @@ -2457,6 +2457,10 @@ "provider": "openrouter", "model": "nvidia/llama-3.3-nemotron-super-49b-v1.5" }, + { + "provider": "openrouter", + "model": "nvidia/nemotron-3-nano-30b-a3b" + }, { "provider": "openrouter", "model": "nvidia/nemotron-3-nano-30b-a3b:free" @@ -2695,48 +2699,7 @@ } ], "all_mappings": { - "anthropic": [ - { - "provider_model": "claude-3-5-haiku-20241022", - "canonical_model": "anthropic/claude-3.5-haiku" - }, - { - "provider_model": "claude-3-7-sonnet-20250219", - "canonical_model": "anthropic/claude-3.7-sonnet" - }, - { - "provider_model": "claude-3-haiku-20240307", - "canonical_model": "anthropic/claude-3-haiku" - }, - { - "provider_model": "claude-3-opus-20240229", - "canonical_model": "anthropic/claude-3-opus" - }, - { - "provider_model": "claude-haiku-4-5-20251001", - "canonical_model": "anthropic/claude-haiku-4.5" - }, - { - "provider_model": "claude-opus-4-1-20250805", - "canonical_model": "anthropic/claude-opus-4.1" - }, - { - "provider_model": "claude-opus-4-20250514", - "canonical_model": "anthropic/claude-opus-4" - }, - { - "provider_model": "claude-opus-4-5-20251101", - "canonical_model": "anthropic/claude-opus-4.5" - }, - { - "provider_model": "claude-sonnet-4-20250514", - "canonical_model": "anthropic/claude-sonnet-4" - }, - { - "provider_model": "claude-sonnet-4-5-20250929", - "canonical_model": "anthropic/claude-sonnet-4.5" - } - ], + "xai": [], "openrouter": [ { "provider_model": "ai21/jamba-large-1.7", @@ -3383,6 +3346,7 @@ "canonical_model": "x-ai/grok-code-fast-1" } ], + "tetrate": [], "google": [ { "provider_model": "gemini-2.0-flash", @@ -3469,8 +3433,6 @@ "canonical_model": "google/gemma-3n-e4b-it" } ], - "tetrate": [], - "xai": [], "openai": [ { "provider_model": "chatgpt-4o-latest", @@ -3760,28 +3722,70 @@ "provider_model": "o4-mini-deep-research-2025-06-26", "canonical_model": "openai/o4-mini-deep-research" } + ], + "anthropic": [ + { + "provider_model": "claude-3-5-haiku-20241022", + "canonical_model": "anthropic/claude-3.5-haiku" + }, + { + "provider_model": "claude-3-7-sonnet-20250219", + "canonical_model": "anthropic/claude-3.7-sonnet" + }, + { + "provider_model": "claude-3-haiku-20240307", + "canonical_model": "anthropic/claude-3-haiku" + }, + { + "provider_model": "claude-3-opus-20240229", + "canonical_model": "anthropic/claude-3-opus" + }, + { + "provider_model": "claude-haiku-4-5-20251001", + "canonical_model": "anthropic/claude-haiku-4.5" + }, + { + "provider_model": "claude-opus-4-1-20250805", + "canonical_model": "anthropic/claude-opus-4.1" + }, + { + "provider_model": "claude-opus-4-20250514", + "canonical_model": "anthropic/claude-opus-4" + }, + { + "provider_model": "claude-opus-4-5-20251101", + "canonical_model": "anthropic/claude-opus-4.5" + }, + { + "provider_model": "claude-sonnet-4-20250514", + "canonical_model": "anthropic/claude-sonnet-4" + }, + { + "provider_model": "claude-sonnet-4-5-20250929", + "canonical_model": "anthropic/claude-sonnet-4.5" + } ] }, "mapped_models": [ { "provider": "anthropic", - "model": "claude-opus-4-1-20250805", - "canonical": "anthropic/claude-opus-4.1" + "model": "claude-sonnet-4-5-20250929", + "canonical": "anthropic/claude-sonnet-4.5" }, { "provider": "anthropic", - "model": "claude-3-5-haiku-20241022", - "canonical": "anthropic/claude-3.5-haiku" + "model": "claude-3-opus-20240229", + "canonical": "anthropic/claude-3-opus" }, { "provider": "anthropic", - "model": "claude-3-7-sonnet-20250219", - "canonical": "anthropic/claude-3.7-sonnet" + "model": "claude-opus-4-1-20250805", + "canonical": "anthropic/claude-opus-4.1" }, { "provider": "anthropic", - "model": "claude-sonnet-4-5-20250929", - "canonical": "anthropic/claude-sonnet-4.5" + "model": "claude-3-haiku-20240307", + "canonical": "anthropic/claude-3-haiku" }, { "provider": "anthropic", @@ -3790,13 +3794,8 @@ }, { "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" + "model": "claude-3-5-haiku-20241022", + "canonical": "anthropic/claude-3.5-haiku" }, { "provider": "anthropic", @@ -3805,8 +3804,8 @@ }, { "provider": "anthropic", - "model": "claude-3-opus-20240229", - "canonical": "anthropic/claude-3-opus" + "model": "claude-3-7-sonnet-20250219", + "canonical": "anthropic/claude-3.7-sonnet" }, { "provider": "anthropic", @@ -3814,169 +3813,169 @@ "canonical": "anthropic/claude-haiku-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" + "model": "gpt-4o-2024-08-06", + "canonical": "openai/gpt-4o" }, { "provider": "openai", - "model": "o3-2025-04-16", - "canonical": "openai/o3" + "model": "gpt-4.1-2025-04-14", + "canonical": "openai/gpt-4.1" }, { "provider": "openai", - "model": "o1-2024-12-17", - "canonical": "openai/o1" + "model": "gpt-4.1-mini-2025-04-14", + "canonical": "openai/gpt-4.1-mini" }, { "provider": "openai", - "model": "gpt-5-mini", - "canonical": "openai/gpt-5-mini" + "model": "codex-mini-latest", + "canonical": "openai/codex-mini" }, { "provider": "openai", - "model": "o4-mini-deep-research", - "canonical": "openai/o4-mini-deep-research" + "model": "o1-pro", + "canonical": "openai/o1-pro" }, { "provider": "openai", - "model": "gpt-4.1-mini-2025-04-14", - "canonical": "openai/gpt-4.1-mini" + "model": "gpt-3.5-turbo-16k", + "canonical": "openai/gpt-3.5-turbo-16k" }, { "provider": "openai", - "model": "gpt-5", - "canonical": "openai/gpt-5" + "model": "gpt-5.1-codex", + "canonical": "openai/gpt-5.1-codex" }, { "provider": "openai", - "model": "codex-mini-latest", - "canonical": "openai/codex-mini" + "model": "o3-pro-2025-06-10", + "canonical": "openai/o3-pro" }, { "provider": "openai", - "model": "gpt-5.1-chat-latest", - "canonical": "openai/gpt-5.1-chat" + "model": "gpt-4.1-nano", + "canonical": "openai/gpt-4.1-nano" }, { "provider": "openai", - "model": "gpt-5-pro", - "canonical": "openai/gpt-5-pro" + "model": "gpt-5.2-pro", + "canonical": "openai/gpt-5.2-pro" }, { "provider": "openai", - "model": "gpt-5.1-codex", - "canonical": "openai/gpt-5.1-codex" + "model": "gpt-4o-mini-search-preview", + "canonical": "openai/gpt-4o-mini-search" }, { "provider": "openai", - "model": "gpt-5-mini-2025-08-07", - "canonical": "openai/gpt-5-mini" + "model": "gpt-4.1", + "canonical": "openai/gpt-4.1" }, { "provider": "openai", - "model": "gpt-3.5-turbo", - "canonical": "openai/gpt-3.5-turbo" + "model": "gpt-4.1-nano-2025-04-14", + "canonical": "openai/gpt-4.1-nano" }, { "provider": "openai", - "model": "gpt-4-0613", - "canonical": "openai/gpt-4" + "model": "gpt-4o", + "canonical": "openai/gpt-4o" }, { "provider": "openai", - "model": "o1-pro", - "canonical": "openai/o1-pro" + "model": "o1", + "canonical": "openai/o1" }, { "provider": "openai", - "model": "o3-deep-research", - "canonical": "openai/o3-deep-research" + "model": "o4-mini-2025-04-16", + "canonical": "openai/o4-mini" }, { "provider": "openai", - "model": "gpt-4.1-nano", - "canonical": "openai/gpt-4.1-nano" + "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" + "model": "gpt-5-pro-2025-10-06", + "canonical": "openai/gpt-5-pro" }, { "provider": "openai", - "model": "gpt-4-0314", - "canonical": "openai/gpt-4" + "model": "o3-deep-research-2025-06-26", + "canonical": "openai/o3-deep-research" }, { "provider": "openai", - "model": "gpt-4o-2024-08-06", - "canonical": "openai/gpt-4o" + "model": "gpt-5-chat-latest", + "canonical": "openai/gpt-5-chat" }, { "provider": "openai", - "model": "gpt-5.1-codex-mini", - "canonical": "openai/gpt-5.1-codex-mini" + "model": "gpt-5.1-codex-max", + "canonical": "openai/gpt-5.1-codex-max" }, { "provider": "openai", - "model": "gpt-4o-2024-11-20", - "canonical": "openai/gpt-4o" + "model": "gpt-5-codex", + "canonical": "openai/gpt-5-codex" }, { "provider": "openai", - "model": "gpt-4o", - "canonical": "openai/gpt-4o" + "model": "gpt-5.2-2025-12-11", + "canonical": "openai/gpt-5.2" }, { "provider": "openai", - "model": "o3-pro-2025-06-10", - "canonical": "openai/o3-pro" + "model": "chatgpt-4o-latest", + "canonical": "openai/chatgpt-4o" }, { "provider": "openai", - "model": "chatgpt-4o-latest", - "canonical": "openai/chatgpt-4o" + "model": "gpt-4o-audio-preview-2025-06-03", + "canonical": "openai/gpt-4o-audio" }, { "provider": "openai", - "model": "gpt-4o-mini-search-preview", - "canonical": "openai/gpt-4o-mini-search" + "model": "gpt-5-nano", + "canonical": "openai/gpt-5-nano" }, { "provider": "openai", - "model": "gpt-5.1-2025-11-13", - "canonical": "openai/gpt-5.1" + "model": "gpt-4o-mini-search-preview-2025-03-11", + "canonical": "openai/gpt-4o-mini-search" }, { "provider": "openai", - "model": "gpt-4-1106-preview", - "canonical": "openai/gpt-4" + "model": "o4-mini", + "canonical": "openai/o4-mini" }, { "provider": "openai", - "model": "o1", - "canonical": "openai/o1" + "model": "gpt-4-turbo-preview", + "canonical": "openai/gpt-4-turbo" }, { "provider": "openai", - "model": "gpt-3.5-turbo-0125", - "canonical": "openai/gpt-3.5-turbo" + "model": "gpt-3.5-turbo-instruct-0914", + "canonical": "openai/gpt-3.5-turbo-instruct" }, { "provider": "openai", - "model": "gpt-4o-mini-2024-07-18", - "canonical": "openai/gpt-4o-mini" + "model": "gpt-4o-2024-05-13", + "canonical": "openai/gpt-4o" }, { "provider": "openai", - "model": "o1-pro-2025-03-19", - "canonical": "openai/o1-pro" + "model": "gpt-5.1-codex-mini", + "canonical": "openai/gpt-5.1-codex-mini" }, { "provider": "openai", @@ -3985,133 +3984,133 @@ }, { "provider": "openai", - "model": "o4-mini", - "canonical": "openai/o4-mini" + "model": "gpt-4o-search-preview-2025-03-11", + "canonical": "openai/gpt-4o-search" }, { "provider": "openai", - "model": "gpt-4.1", - "canonical": "openai/gpt-4.1" + "model": "gpt-4-1106-preview", + "canonical": "openai/gpt-4" }, { "provider": "openai", - "model": "gpt-4-0125-preview", - "canonical": "openai/gpt-4" + "model": "gpt-5.1-chat-latest", + "canonical": "openai/gpt-5.1-chat" }, { "provider": "openai", - "model": "gpt-4o-search-preview-2025-03-11", - "canonical": "openai/gpt-4o-search" + "model": "o3-2025-04-16", + "canonical": "openai/o3" }, { "provider": "openai", - "model": "o3-mini", - "canonical": "openai/o3-mini" + "model": "gpt-4-0613", + "canonical": "openai/gpt-4" }, { "provider": "openai", - "model": "gpt-3.5-turbo-instruct-0914", - "canonical": "openai/gpt-3.5-turbo-instruct" + "model": "gpt-4o-search-preview", + "canonical": "openai/gpt-4o-search" }, { "provider": "openai", - "model": "gpt-5-nano-2025-08-07", - "canonical": "openai/gpt-5-nano" + "model": "gpt-4o-audio-preview", + "canonical": "openai/gpt-4o-audio" }, { "provider": "openai", - "model": "gpt-4o-mini", - "canonical": "openai/gpt-4o-mini" + "model": "gpt-5-2025-08-07", + "canonical": "openai/gpt-5" }, { "provider": "openai", - "model": "gpt-3.5-turbo-16k", - "canonical": "openai/gpt-3.5-turbo-16k" + "model": "o3-deep-research", + "canonical": "openai/o3-deep-research" }, { "provider": "openai", - "model": "gpt-3.5-turbo-instruct", - "canonical": "openai/gpt-3.5-turbo-instruct" + "model": "gpt-5-pro", + "canonical": "openai/gpt-5-pro" }, { "provider": "openai", - "model": "gpt-4.1-2025-04-14", - "canonical": "openai/gpt-4.1" + "model": "gpt-4o-2024-11-20", + "canonical": "openai/gpt-4o" }, { "provider": "openai", - "model": "gpt-5-codex", - "canonical": "openai/gpt-5-codex" + "model": "gpt-5-mini-2025-08-07", + "canonical": "openai/gpt-5-mini" }, { "provider": "openai", - "model": "gpt-5.1-codex-max", - "canonical": "openai/gpt-5.1-codex-max" + "model": "gpt-4-0125-preview", + "canonical": "openai/gpt-4" }, { "provider": "openai", - "model": "o4-mini-deep-research-2025-06-26", - "canonical": "openai/o4-mini-deep-research" + "model": "gpt-4-turbo-2024-04-09", + "canonical": "openai/gpt-4-turbo" }, { "provider": "openai", - "model": "gpt-4.1-mini", - "canonical": "openai/gpt-4.1-mini" + "model": "gpt-4-turbo", + "canonical": "openai/gpt-4-turbo" }, { "provider": "openai", - "model": "gpt-4o-search-preview", - "canonical": "openai/gpt-4o-search" + "model": "gpt-5-mini", + "canonical": "openai/gpt-5-mini" }, { "provider": "openai", - "model": "gpt-5.1", - "canonical": "openai/gpt-5.1" + "model": "gpt-4.1-mini", + "canonical": "openai/gpt-4.1-mini" }, { "provider": "openai", - "model": "o3-pro", - "canonical": "openai/o3-pro" + "model": "gpt-5", + "canonical": "openai/gpt-5" }, { "provider": "openai", - "model": "gpt-4-turbo", - "canonical": "openai/gpt-4-turbo" + "model": "gpt-4o-mini", + "canonical": "openai/gpt-4o-mini" }, { "provider": "openai", - "model": "gpt-5.2-2025-12-11", - "canonical": "openai/gpt-5.2" + "model": "gpt-4o-mini-2024-07-18", + "canonical": "openai/gpt-4o-mini" }, { "provider": "openai", - "model": "gpt-4.1-nano-2025-04-14", - "canonical": "openai/gpt-4.1-nano" + "model": "gpt-5.2-pro-2025-12-11", + "canonical": "openai/gpt-5.2-pro" }, { "provider": "openai", - "model": "gpt-5-2025-08-07", - "canonical": "openai/gpt-5" + "model": "o1-pro-2025-03-19", + "canonical": "openai/o1-pro" }, { "provider": "openai", - "model": "o3-deep-research-2025-06-26", - "canonical": "openai/o3-deep-research" + "model": "o3", + "canonical": "openai/o3" }, { "provider": "openai", - "model": "gpt-4", - "canonical": "openai/gpt-4" + "model": "o3-mini-2025-01-31", + "canonical": "openai/o3-mini" }, { "provider": "openai", - "model": "gpt-4o-audio-preview", - "canonical": "openai/gpt-4o-audio" + "model": "gpt-5-nano-2025-08-07", + "canonical": "openai/gpt-5-nano" }, { "provider": "openai", - "model": "gpt-4o-audio-preview-2024-12-17", - "canonical": "openai/gpt-4o-audio" + "model": "gpt-3.5-turbo-instruct", + "canonical": "openai/gpt-3.5-turbo-instruct" }, { "provider": "openai", @@ -4120,228 +4119,228 @@ }, { "provider": "openai", - "model": "o4-mini-2025-04-16", - "canonical": "openai/o4-mini" + "model": "o3-pro", + "canonical": "openai/o3-pro" }, { "provider": "openai", - "model": "o3-mini-2025-01-31", - "canonical": "openai/o3-mini" + "model": "gpt-5.1", + "canonical": "openai/gpt-5.1" }, { "provider": "openai", - "model": "gpt-5.2-pro", - "canonical": "openai/gpt-5.2-pro" + "model": "gpt-3.5-turbo-1106", + "canonical": "openai/gpt-3.5-turbo" }, { "provider": "openai", - "model": "gpt-4-turbo-2024-04-09", - "canonical": "openai/gpt-4-turbo" + "model": "gpt-4o-audio-preview-2024-12-17", + "canonical": "openai/gpt-4o-audio" }, { "provider": "openai", - "model": "gpt-4o-2024-05-13", - "canonical": "openai/gpt-4o" + "model": "gpt-4-0314", + "canonical": "openai/gpt-4" }, { "provider": "openai", - "model": "gpt-5-pro-2025-10-06", - "canonical": "openai/gpt-5-pro" + "model": "gpt-5.1-2025-11-13", + "canonical": "openai/gpt-5.1" }, { "provider": "openai", - "model": "gpt-5.2-pro-2025-12-11", - "canonical": "openai/gpt-5.2-pro" + "model": "o1-2024-12-17", + "canonical": "openai/o1" }, { "provider": "openai", - "model": "gpt-4-turbo-preview", - "canonical": "openai/gpt-4-turbo" + "model": "o4-mini-deep-research", + "canonical": "openai/o4-mini-deep-research" }, { "provider": "openai", - "model": "gpt-3.5-turbo-1106", - "canonical": "openai/gpt-3.5-turbo" + "model": "o3-mini", + "canonical": "openai/o3-mini" }, { "provider": "openai", - "model": "gpt-4o-audio-preview-2025-06-03", - "canonical": "openai/gpt-4o-audio" + "model": "o4-mini-deep-research-2025-06-26", + "canonical": "openai/o4-mini-deep-research" }, { "provider": "openai", - "model": "gpt-5-nano", - "canonical": "openai/gpt-5-nano" + "model": "gpt-4", + "canonical": "openai/gpt-4" }, { - "provider": "openrouter", - "model": "deepseek/deepseek-chat-v3.1", - "canonical": "deepseek/deepseek-chat" + "provider": "openai", + "model": "gpt-3.5-turbo", + "canonical": "openai/gpt-3.5-turbo" }, { "provider": "openrouter", - "model": "openai/gpt-4o-mini-2024-07-18", - "canonical": "openai/gpt-4o-mini" + "model": "qwen/qwen-vl-max", + "canonical": "qwen/qwen-vl-max" }, { "provider": "openrouter", - "model": "openai/gpt-5.2-pro", - "canonical": "openai/gpt-5.2-pro" + "model": "openai/o4-mini-deep-research", + "canonical": "openai/o4-mini-deep-research" }, { "provider": "openrouter", - "model": "meta-llama/llama-3-8b-instruct", - "canonical": "meta-llama/llama-3-8b-instruct" + "model": "x-ai/grok-3-mini", + "canonical": "x-ai/grok-3-mini" }, { "provider": "openrouter", - "model": "mistralai/mistral-small-creative", - "canonical": "mistralai/mistral-small-creative" + "model": "openai/gpt-3.5-turbo", + "canonical": "openai/gpt-3.5-turbo" }, { "provider": "openrouter", - "model": "anthropic/claude-3.5-haiku-20241022", - "canonical": "anthropic/claude-3.5-haiku" + "model": "openai/gpt-5.1-chat", + "canonical": "openai/gpt-5.1-chat" }, { "provider": "openrouter", - "model": "google/gemini-2.0-flash-lite-001", - "canonical": "google/gemini-2.0-flash-lite" + "model": "qwen/qwen3-next-80b-a3b-thinking", + "canonical": "qwen/qwen3-next-80b-a3b-thinking" }, { "provider": "openrouter", - "model": "openai/o3-pro", - "canonical": "openai/o3-pro" + "model": "openai/gpt-oss-safeguard-20b", + "canonical": "openai/gpt-oss-safeguard-20b" }, { "provider": "openrouter", - "model": "google/gemini-2.5-flash-lite-preview-09-2025", - "canonical": "google/gemini-2.5-flash-lite" + "model": "mistralai/mistral-large", + "canonical": "mistralai/mistral-large" }, { "provider": "openrouter", - "model": "openai/codex-mini", - "canonical": "openai/codex-mini" + "model": "openai/gpt-4-turbo", + "canonical": "openai/gpt-4-turbo" }, { "provider": "openrouter", - "model": "openai/gpt-4o-2024-05-13", - "canonical": "openai/gpt-4o" + "model": "google/gemini-2.0-flash-001", + "canonical": "google/gemini-2.0-flash" }, { "provider": "openrouter", - "model": "openai/o4-mini", - "canonical": "openai/o4-mini" + "model": "mistralai/pixtral-12b", + "canonical": "mistralai/pixtral-12b" }, { "provider": "openrouter", - "model": "anthropic/claude-3.5-sonnet", - "canonical": "anthropic/claude-3.5-sonnet" + "model": "ai21/jamba-mini-1.7", + "canonical": "ai21/jamba-mini-1.7" }, { "provider": "openrouter", - "model": "google/gemini-2.0-flash-001", - "canonical": "google/gemini-2.0-flash" + "model": "openai/gpt-4.1", + "canonical": "openai/gpt-4.1" }, { "provider": "openrouter", - "model": "qwen/qwen3-coder", - "canonical": "qwen/qwen3-coder" + "model": "openai/gpt-4o:extended", + "canonical": "openai/gpt-4o:extended" }, { "provider": "openrouter", - "model": "openai/gpt-4.1-mini", - "canonical": "openai/gpt-4.1-mini" + "model": "openai/o3-deep-research", + "canonical": "openai/o3-deep-research" }, { "provider": "openrouter", - "model": "openai/o3", - "canonical": "openai/o3" + "model": "qwen/qwen3-235b-a22b", + "canonical": "qwen/qwen3-235b-a22b" }, { "provider": "openrouter", - "model": "openai/gpt-5.2", - "canonical": "openai/gpt-5.2" + "model": "openai/o3-mini", + "canonical": "openai/o3-mini" }, { "provider": "openrouter", - "model": "qwen/qwen3-235b-a22b", - "canonical": "qwen/qwen3-235b-a22b" + "model": "qwen/qwen-2.5-72b-instruct", + "canonical": "qwen/qwen-2.5-72b-instruct" }, { "provider": "openrouter", - "model": "deepseek/deepseek-chat-v3-0324", - "canonical": "deepseek/deepseek-chat" + "model": "openai/gpt-5.1-codex", + "canonical": "openai/gpt-5.1-codex" }, { "provider": "openrouter", - "model": "mistralai/ministral-8b-2512", - "canonical": "mistralai/ministral-8b" + "model": "deepseek/deepseek-v3.1-terminus", + "canonical": "deepseek/deepseek-v3.1-terminus" }, { "provider": "openrouter", - "model": "mistralai/ministral-3b", - "canonical": "mistralai/ministral-3b" + "model": "qwen/qwen-plus-2025-07-28:thinking", + "canonical": "qwen/qwen-plus-2025-07-28:thinking" }, { "provider": "openrouter", - "model": "openai/gpt-4.1", - "canonical": "openai/gpt-4.1" + "model": "meta-llama/llama-3.1-405b-instruct", + "canonical": "meta-llama/llama-3.1-405b-instruct" }, { "provider": "openrouter", - "model": "mistralai/codestral-2508", - "canonical": "mistralai/codestral" + "model": "meta-llama/llama-4-maverick", + "canonical": "meta-llama/llama-4-maverick" }, { "provider": "openrouter", - "model": "google/gemini-2.5-flash-preview-09-2025", - "canonical": "google/gemini-2.5-flash" + "model": "qwen/qwen-turbo", + "canonical": "qwen/qwen-turbo" }, { "provider": "openrouter", - "model": "openai/gpt-oss-120b:exacto", - "canonical": "openai/gpt-oss-120b" + "model": "qwen/qwen3-235b-a22b-2507", + "canonical": "qwen/qwen3-235b-a22b" }, { "provider": "openrouter", - "model": "mistralai/mistral-tiny", - "canonical": "mistralai/mistral-tiny" + "model": "openai/gpt-3.5-turbo-0613", + "canonical": "openai/gpt-3.5-turbo" }, { "provider": "openrouter", - "model": "deepseek/deepseek-r1-distill-llama-70b", - "canonical": "deepseek/deepseek-r1-distill-llama-70b" + "model": "anthropic/claude-3.7-sonnet", + "canonical": "anthropic/claude-3.7-sonnet" }, { "provider": "openrouter", - "model": "google/gemini-2.5-pro-preview-05-06", - "canonical": "google/gemini-2.5-pro" + "model": "openai/gpt-5.1", + "canonical": "openai/gpt-5.1" }, { "provider": "openrouter", - "model": "mistralai/mistral-large-2512", - "canonical": "mistralai/mistral-large" + "model": "meta-llama/llama-3.1-70b-instruct", + "canonical": "meta-llama/llama-3.1-70b-instruct" }, { "provider": "openrouter", - "model": "openai/gpt-5.1", - "canonical": "openai/gpt-5.1" + "model": "google/gemma-3-27b-it", + "canonical": "google/gemma-3-27b-it" }, { "provider": "openrouter", - "model": "openai/gpt-5.1-codex", - "canonical": "openai/gpt-5.1-codex" + "model": "qwen/qwen3-32b", + "canonical": "qwen/qwen3-32b" }, { "provider": "openrouter", - "model": "deepseek/deepseek-r1-0528", - "canonical": "deepseek/deepseek-r1" + "model": "google/gemini-2.5-flash-lite-preview-09-2025", + "canonical": "google/gemini-2.5-flash-lite" }, { "provider": "openrouter", - "model": "qwen/qwen-plus-2025-07-28", - "canonical": "qwen/qwen-plus" + "model": "mistralai/ministral-3b-2512", + "canonical": "mistralai/ministral-3b" }, { "provider": "openrouter", @@ -4350,218 +4349,218 @@ }, { "provider": "openrouter", - "model": "qwen/qwen3-coder:exacto", - "canonical": "qwen/qwen3-coder" + "model": "google/gemini-2.5-flash-preview-09-2025", + "canonical": "google/gemini-2.5-flash" }, { "provider": "openrouter", - "model": "openai/gpt-4-0314", - "canonical": "openai/gpt-4" + "model": "mistralai/devstral-small", + "canonical": "mistralai/devstral-small" }, { "provider": "openrouter", - "model": "anthropic/claude-opus-4", - "canonical": "anthropic/claude-opus-4" + "model": "openai/gpt-4-turbo-preview", + "canonical": "openai/gpt-4-turbo" }, { "provider": "openrouter", - "model": "google/gemini-2.5-flash-lite", - "canonical": "google/gemini-2.5-flash-lite" + "model": "google/gemini-3-pro-preview", + "canonical": "google/gemini-3-pro" }, { "provider": "openrouter", - "model": "ai21/jamba-mini-1.7", - "canonical": "ai21/jamba-mini-1.7" + "model": "qwen/qwen3-coder-30b-a3b-instruct", + "canonical": "qwen/qwen3-coder-30b-a3b-instruct" }, { "provider": "openrouter", - "model": "qwen/qwen3-235b-a22b-2507", - "canonical": "qwen/qwen3-235b-a22b" + "model": "cohere/command-r-08-2024", + "canonical": "cohere/command-r-08" }, { "provider": "openrouter", - "model": "qwen/qwen3-30b-a3b-instruct-2507", - "canonical": "qwen/qwen3-30b-a3b-instruct" + "model": "google/gemini-2.5-pro", + "canonical": "google/gemini-2.5-pro" }, { "provider": "openrouter", - "model": "openai/gpt-5-nano", - "canonical": "openai/gpt-5-nano" + "model": "google/gemini-2.5-pro-preview-05-06", + "canonical": "google/gemini-2.5-pro" }, { "provider": "openrouter", - "model": "meta-llama/llama-3.1-405b-instruct", - "canonical": "meta-llama/llama-3.1-405b-instruct" + "model": "qwen/qwen3-14b", + "canonical": "qwen/qwen3-14b" }, { "provider": "openrouter", - "model": "mistralai/mistral-large-2407", - "canonical": "mistralai/mistral-large" + "model": "cohere/command-r-plus-08-2024", + "canonical": "cohere/command-r-plus-08" }, { "provider": "openrouter", - "model": "openai/gpt-5-mini", - "canonical": "openai/gpt-5-mini" + "model": "openai/gpt-oss-120b", + "canonical": "openai/gpt-oss-120b" }, { "provider": "openrouter", - "model": "qwen/qwen3-coder-plus", - "canonical": "qwen/qwen3-coder-plus" + "model": "deepseek/deepseek-chat-v3.1", + "canonical": "deepseek/deepseek-chat" }, { "provider": "openrouter", - "model": "anthropic/claude-3.7-sonnet:thinking", - "canonical": "anthropic/claude-3.7-sonnet:thinking" + "model": "anthropic/claude-3-opus", + "canonical": "anthropic/claude-3-opus" }, { "provider": "openrouter", - "model": "anthropic/claude-3-haiku", - "canonical": "anthropic/claude-3-haiku" + "model": "anthropic/claude-3.7-sonnet:thinking", + "canonical": "anthropic/claude-3.7-sonnet:thinking" }, { "provider": "openrouter", - "model": "cohere/command-r-plus-08-2024", - "canonical": "cohere/command-r-plus-08" + "model": "mistralai/ministral-3b", + "canonical": "mistralai/ministral-3b" }, { "provider": "openrouter", - "model": "openai/gpt-5-pro", - "canonical": "openai/gpt-5-pro" + "model": "anthropic/claude-opus-4.5", + "canonical": "anthropic/claude-opus-4.5" }, { "provider": "openrouter", - "model": "openai/gpt-4-turbo-preview", - "canonical": "openai/gpt-4-turbo" + "model": "ai21/jamba-large-1.7", + "canonical": "ai21/jamba-large-1.7" }, { "provider": "openrouter", - "model": "google/gemini-2.5-flash", - "canonical": "google/gemini-2.5-flash" + "model": "qwen/qwen3-vl-235b-a22b-instruct", + "canonical": "qwen/qwen3-vl-235b-a22b-instruct" }, { "provider": "openrouter", - "model": "qwen/qwen3-32b", - "canonical": "qwen/qwen3-32b" + "model": "openai/codex-mini", + "canonical": "openai/codex-mini" }, { "provider": "openrouter", - "model": "mistralai/mixtral-8x7b-instruct", - "canonical": "mistralai/mixtral-8x7b-instruct" + "model": "qwen/qwen3-30b-a3b", + "canonical": "qwen/qwen3-30b-a3b" }, { "provider": "openrouter", - "model": "mistralai/mistral-saba", - "canonical": "mistralai/mistral-saba" + "model": "mistralai/mistral-small-creative", + "canonical": "mistralai/mistral-small-creative" }, { "provider": "openrouter", - "model": "openai/gpt-5-codex", - "canonical": "openai/gpt-5-codex" + "model": "openai/gpt-4-1106-preview", + "canonical": "openai/gpt-4" }, { "provider": "openrouter", - "model": "openai/gpt-5", - "canonical": "openai/gpt-5" + "model": "qwen/qwen3-next-80b-a3b-instruct", + "canonical": "qwen/qwen3-next-80b-a3b-instruct" }, { "provider": "openrouter", - "model": "meta-llama/llama-4-maverick", - "canonical": "meta-llama/llama-4-maverick" + "model": "x-ai/grok-3", + "canonical": "x-ai/grok-3" }, { "provider": "openrouter", - "model": "qwen/qwen-plus-2025-07-28:thinking", - "canonical": "qwen/qwen-plus-2025-07-28:thinking" + "model": "openai/gpt-4.1-mini", + "canonical": "openai/gpt-4.1-mini" }, { "provider": "openrouter", - "model": "qwen/qwen3-coder-30b-a3b-instruct", - "canonical": "qwen/qwen3-coder-30b-a3b-instruct" + "model": "deepseek/deepseek-chat-v3-0324", + "canonical": "deepseek/deepseek-chat" }, { "provider": "openrouter", - "model": "meta-llama/llama-3-70b-instruct", - "canonical": "meta-llama/llama-3-70b-instruct" + "model": "openai/gpt-5-pro", + "canonical": "openai/gpt-5-pro" }, { "provider": "openrouter", - "model": "meta-llama/llama-3.1-70b-instruct", - "canonical": "meta-llama/llama-3.1-70b-instruct" + "model": "google/gemini-2.5-pro-preview", + "canonical": "google/gemini-2.5-pro" }, { "provider": "openrouter", - "model": "mistralai/pixtral-large-2411", - "canonical": "mistralai/pixtral-large" + "model": "mistralai/devstral-2512", + "canonical": "mistralai/devstral" }, { "provider": "openrouter", - "model": "openai/gpt-5.1-codex-mini", - "canonical": "openai/gpt-5.1-codex-mini" + "model": "openai/gpt-4o-audio-preview", + "canonical": "openai/gpt-4o-audio" }, { "provider": "openrouter", - "model": "mistralai/ministral-3b-2512", - "canonical": "mistralai/ministral-3b" + "model": "mistralai/ministral-8b", + "canonical": "mistralai/ministral-8b" }, { "provider": "openrouter", - "model": "qwen/qwen3-vl-30b-a3b-thinking", - "canonical": "qwen/qwen3-vl-30b-a3b-thinking" + "model": "openai/gpt-oss-120b:exacto", + "canonical": "openai/gpt-oss-120b" }, { "provider": "openrouter", - "model": "openai/gpt-4", - "canonical": "openai/gpt-4" + "model": "openai/gpt-oss-20b", + "canonical": "openai/gpt-oss-20b" }, { "provider": "openrouter", - "model": "x-ai/grok-3-mini", - "canonical": "x-ai/grok-3-mini" + "model": "anthropic/claude-3.5-haiku", + "canonical": "anthropic/claude-3.5-haiku" }, { "provider": "openrouter", - "model": "x-ai/grok-4", - "canonical": "x-ai/grok-4" + "model": "openai/gpt-5-nano", + "canonical": "openai/gpt-5-nano" }, { "provider": "openrouter", - "model": "mistralai/devstral-small", - "canonical": "mistralai/devstral-small" + "model": "google/gemini-3-flash-preview", + "canonical": "google/gemini-3-flash" }, { "provider": "openrouter", - "model": "qwen/qwen3-vl-30b-a3b-instruct", - "canonical": "qwen/qwen3-vl-30b-a3b-instruct" + "model": "openai/gpt-5-codex", + "canonical": "openai/gpt-5-codex" }, { "provider": "openrouter", - "model": "cohere/command-r-08-2024", - "canonical": "cohere/command-r-08" + "model": "x-ai/grok-4", + "canonical": "x-ai/grok-4" }, { "provider": "openrouter", - "model": "mistralai/ministral-14b-2512", - "canonical": "mistralai/ministral-14b" + "model": "anthropic/claude-3.5-sonnet", + "canonical": "anthropic/claude-3.5-sonnet" }, { "provider": "openrouter", - "model": "mistralai/devstral-medium", - "canonical": "mistralai/devstral-medium" + "model": "deepseek/deepseek-r1-0528", + "canonical": "deepseek/deepseek-r1" }, { "provider": "openrouter", - "model": "qwen/qwen-max", - "canonical": "qwen/qwen-max" + "model": "openai/gpt-4-0314", + "canonical": "openai/gpt-4" }, { "provider": "openrouter", - "model": "mistralai/mistral-small-24b-instruct-2501", - "canonical": "mistralai/mistral-small-24b-instruct" + "model": "mistralai/mixtral-8x7b-instruct", + "canonical": "mistralai/mixtral-8x7b-instruct" }, { "provider": "openrouter", - "model": "qwen/qwen3-coder-flash", - "canonical": "qwen/qwen3-coder-flash" + "model": "openai/o4-mini", + "canonical": "openai/o4-mini" }, { "provider": "openrouter", @@ -4570,88 +4569,88 @@ }, { "provider": "openrouter", - "model": "qwen/qwen3-max", - "canonical": "qwen/qwen3-max" + "model": "qwen/qwen-plus", + "canonical": "qwen/qwen-plus" }, { "provider": "openrouter", - "model": "x-ai/grok-code-fast-1", - "canonical": "x-ai/grok-code-fast-1" + "model": "openai/gpt-5.2", + "canonical": "openai/gpt-5.2" }, { "provider": "openrouter", - "model": "mistralai/voxtral-small-24b-2507", - "canonical": "mistralai/voxtral-small-24b" + "model": "openai/gpt-5.2-chat", + "canonical": "openai/gpt-5.2-chat" }, { "provider": "openrouter", - "model": "openai/gpt-oss-safeguard-20b", - "canonical": "openai/gpt-oss-safeguard-20b" + "model": "deepseek/deepseek-chat", + "canonical": "deepseek/deepseek-chat" }, { "provider": "openrouter", - "model": "mistralai/mistral-medium-3", - "canonical": "mistralai/mistral-medium-3" + "model": "deepseek/deepseek-r1-distill-llama-70b", + "canonical": "deepseek/deepseek-r1-distill-llama-70b" }, { "provider": "openrouter", - "model": "mistralai/mistral-7b-instruct", - "canonical": "mistralai/mistral-7b-instruct" + "model": "x-ai/grok-4.1-fast", + "canonical": "x-ai/grok-4.1-fast" }, { "provider": "openrouter", - "model": "openai/gpt-4o", - "canonical": "openai/gpt-4o" + "model": "deepseek/deepseek-v3.2-exp", + "canonical": "deepseek/deepseek" }, { "provider": "openrouter", - "model": "qwen/qwen-2.5-72b-instruct", - "canonical": "qwen/qwen-2.5-72b-instruct" + "model": "qwen/qwen3-coder-flash", + "canonical": "qwen/qwen3-coder-flash" }, { "provider": "openrouter", - "model": "qwen/qwen3-14b", - "canonical": "qwen/qwen3-14b" + "model": "openai/o4-mini-high", + "canonical": "openai/o4-mini-high" }, { "provider": "openrouter", - "model": "mistralai/mistral-small-3.1-24b-instruct", - "canonical": "mistralai/mistral-small-3.1-24b-instruct" + "model": "openai/gpt-5.1-codex-mini", + "canonical": "openai/gpt-5.1-codex-mini" }, { "provider": "openrouter", - "model": "openai/gpt-3.5-turbo-16k", - "canonical": "openai/gpt-3.5-turbo-16k" + "model": "qwen/qwen3-235b-a22b-thinking-2507", + "canonical": "qwen/qwen3-235b-a22b-thinking" }, { "provider": "openrouter", - "model": "anthropic/claude-haiku-4.5", - "canonical": "anthropic/claude-haiku-4.5" + "model": "openai/o3-pro", + "canonical": "openai/o3-pro" }, { "provider": "openrouter", - "model": "openai/o3-mini", - "canonical": "openai/o3-mini" + "model": "qwen/qwen3-max", + "canonical": "qwen/qwen3-max" }, { "provider": "openrouter", - "model": "openai/gpt-4o-audio-preview", - "canonical": "openai/gpt-4o-audio" + "model": "google/gemini-2.0-flash-lite-001", + "canonical": "google/gemini-2.0-flash-lite" }, { "provider": "openrouter", - "model": "x-ai/grok-4.1-fast", - "canonical": "x-ai/grok-4.1-fast" + "model": "mistralai/mixtral-8x22b-instruct", + "canonical": "mistralai/mixtral-8x22b-instruct" }, { "provider": "openrouter", - "model": "anthropic/claude-opus-4.1", - "canonical": "anthropic/claude-opus-4.1" + "model": "qwen/qwen3-8b", + "canonical": "qwen/qwen3-8b" }, { "provider": "openrouter", - "model": "mistralai/mistral-large", - "canonical": "mistralai/mistral-large" + "model": "mistralai/voxtral-small-24b-2507", + "canonical": "mistralai/voxtral-small-24b" }, { "provider": "openrouter", @@ -4660,18 +4659,18 @@ }, { "provider": "openrouter", - "model": "openai/gpt-5.1-codex-max", - "canonical": "openai/gpt-5.1-codex-max" + "model": "qwen/qwen3-coder", + "canonical": "qwen/qwen3-coder" }, { "provider": "openrouter", - "model": "openai/gpt-oss-120b", - "canonical": "openai/gpt-oss-120b" + "model": "meta-llama/llama-3-8b-instruct", + "canonical": "meta-llama/llama-3-8b-instruct" }, { "provider": "openrouter", - "model": "x-ai/grok-4-fast", - "canonical": "x-ai/grok-4-fast" + "model": "mistralai/mistral-small-24b-instruct-2501", + "canonical": "mistralai/mistral-small-24b-instruct" }, { "provider": "openrouter", @@ -4680,323 +4679,318 @@ }, { "provider": "openrouter", - "model": "qwen/qwen3-next-80b-a3b-thinking", - "canonical": "qwen/qwen3-next-80b-a3b-thinking" + "model": "qwen/qwen3-vl-30b-a3b-thinking", + "canonical": "qwen/qwen3-vl-30b-a3b-thinking" }, { "provider": "openrouter", - "model": "ai21/jamba-large-1.7", - "canonical": "ai21/jamba-large-1.7" + "model": "mistralai/mistral-medium-3.1", + "canonical": "mistralai/mistral-medium-3.1" }, { "provider": "openrouter", - "model": "anthropic/claude-3-opus", - "canonical": "anthropic/claude-3-opus" + "model": "openai/gpt-5-mini", + "canonical": "openai/gpt-5-mini" }, { "provider": "openrouter", - "model": "meta-llama/llama-3.2-3b-instruct", - "canonical": "meta-llama/llama-3.2-3b-instruct" + "model": "openai/gpt-4", + "canonical": "openai/gpt-4" }, { "provider": "openrouter", - "model": "openai/gpt-4-turbo", - "canonical": "openai/gpt-4-turbo" + "model": "mistralai/codestral-2508", + "canonical": "mistralai/codestral" }, { "provider": "openrouter", - "model": "mistralai/mistral-small-3.2-24b-instruct", - "canonical": "mistralai/mistral-small-3.2-24b-instruct" + "model": "openai/gpt-5.2-pro", + "canonical": "openai/gpt-5.2-pro" }, { "provider": "openrouter", - "model": "openai/gpt-3.5-turbo-0613", - "canonical": "openai/gpt-3.5-turbo" + "model": "openai/o1", + "canonical": "openai/o1" }, { "provider": "openrouter", - "model": "qwen/qwen-turbo", - "canonical": "qwen/qwen-turbo" + "model": "anthropic/claude-opus-4", + "canonical": "anthropic/claude-opus-4" }, { "provider": "openrouter", - "model": "qwen/qwq-32b", - "canonical": "qwen/qwq-32b" + "model": "openai/o3", + "canonical": "openai/o3" }, { "provider": "openrouter", - "model": "anthropic/claude-sonnet-4.5", - "canonical": "anthropic/claude-sonnet-4.5" + "model": "qwen/qwen3-vl-8b-instruct", + "canonical": "qwen/qwen3-vl-8b-instruct" }, { "provider": "openrouter", - "model": "qwen/qwen3-next-80b-a3b-instruct", - "canonical": "qwen/qwen3-next-80b-a3b-instruct" + "model": "x-ai/grok-4-fast", + "canonical": "x-ai/grok-4-fast" }, { "provider": "openrouter", - "model": "google/gemini-3-flash-preview", - "canonical": "google/gemini-3-flash" + "model": "mistralai/mistral-saba", + "canonical": "mistralai/mistral-saba" }, { "provider": "openrouter", - "model": "openai/o1", - "canonical": "openai/o1" + "model": "meta-llama/llama-3.3-70b-instruct", + "canonical": "meta-llama/llama-3.3-70b-instruct" }, { "provider": "openrouter", - "model": "deepseek/deepseek-v3.1-terminus", - "canonical": "deepseek/deepseek-v3.1-terminus" + "model": "deepseek/deepseek-r1", + "canonical": "deepseek/deepseek-r1" }, { "provider": "openrouter", - "model": "mistralai/mistral-nemo", - "canonical": "mistralai/mistral-nemo" + "model": "openai/gpt-4.1-nano", + "canonical": "openai/gpt-4.1-nano" }, { "provider": "openrouter", - "model": "qwen/qwen3-235b-a22b-thinking-2507", - "canonical": "qwen/qwen3-235b-a22b-thinking" + "model": "qwen/qwen3-30b-a3b-instruct-2507", + "canonical": "qwen/qwen3-30b-a3b-instruct" }, { "provider": "openrouter", - "model": "openai/gpt-oss-20b", - "canonical": "openai/gpt-oss-20b" + "model": "anthropic/claude-3.5-haiku-20241022", + "canonical": "anthropic/claude-3.5-haiku" }, { "provider": "openrouter", - "model": "mistralai/pixtral-12b", - "canonical": "mistralai/pixtral-12b" + "model": "openai/gpt-5", + "canonical": "openai/gpt-5" }, { "provider": "openrouter", - "model": "anthropic/claude-3.7-sonnet", - "canonical": "anthropic/claude-3.7-sonnet" + "model": "openai/gpt-3.5-turbo-16k", + "canonical": "openai/gpt-3.5-turbo-16k" }, { "provider": "openrouter", - "model": "deepseek/deepseek-v3.1-terminus:exacto", - "canonical": "deepseek/deepseek-v3.1-terminus" + "model": "openai/o3-mini-high", + "canonical": "openai/o3-mini-high" }, { "provider": "openrouter", - "model": "openai/gpt-4o-2024-08-06", - "canonical": "openai/gpt-4o" + "model": "google/gemini-2.5-flash-lite", + "canonical": "google/gemini-2.5-flash-lite" }, { "provider": "openrouter", - "model": "openai/gpt-4o:extended", - "canonical": "openai/gpt-4o:extended" + "model": "qwen/qwen3-vl-235b-a22b-thinking", + "canonical": "qwen/qwen3-vl-235b-a22b-thinking" }, { "provider": "openrouter", - "model": "openai/o3-deep-research", - "canonical": "openai/o3-deep-research" + "model": "anthropic/claude-opus-4.1", + "canonical": "anthropic/claude-opus-4.1" }, { "provider": "openrouter", - "model": "deepseek/deepseek-chat", - "canonical": "deepseek/deepseek-chat" + "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" + "model": "openai/gpt-4o-mini-2024-07-18", + "canonical": "openai/gpt-4o-mini" }, { "provider": "openrouter", - "model": "openai/gpt-3.5-turbo", - "canonical": "openai/gpt-3.5-turbo" + "model": "mistralai/mistral-large-2512", + "canonical": "mistralai/mistral-large" }, { "provider": "openrouter", - "model": "deepseek/deepseek-v3.2-exp", - "canonical": "deepseek/deepseek" + "model": "meta-llama/llama-3-70b-instruct", + "canonical": "meta-llama/llama-3-70b-instruct" }, { "provider": "openrouter", - "model": "google/gemini-2.5-pro", - "canonical": "google/gemini-2.5-pro" + "model": "anthropic/claude-haiku-4.5", + "canonical": "anthropic/claude-haiku-4.5" }, { "provider": "openrouter", - "model": "deepseek/deepseek-v3.2", - "canonical": "deepseek/deepseek" + "model": "qwen/qwen3-vl-30b-a3b-instruct", + "canonical": "qwen/qwen3-vl-30b-a3b-instruct" }, { "provider": "openrouter", - "model": "anthropic/claude-opus-4.5", - "canonical": "anthropic/claude-opus-4.5" + "model": "openai/gpt-4o", + "canonical": "openai/gpt-4o" }, { "provider": "openrouter", - "model": "google/gemma-3-27b-it", - "canonical": "google/gemma-3-27b-it" + "model": "anthropic/claude-3-haiku", + "canonical": "anthropic/claude-3-haiku" }, { "provider": "openrouter", - "model": "openai/gpt-5.1-chat", - "canonical": "openai/gpt-5.1-chat" + "model": "deepseek/deepseek-v3.2", + "canonical": "deepseek/deepseek" }, { "provider": "openrouter", - "model": "openai/gpt-5.2-chat", - "canonical": "openai/gpt-5.2-chat" + "model": "meta-llama/llama-3.2-3b-instruct", + "canonical": "meta-llama/llama-3.2-3b-instruct" }, { "provider": "openrouter", - "model": "meta-llama/llama-3.1-8b-instruct", - "canonical": "meta-llama/llama-3.1-8b-instruct" + "model": "mistralai/pixtral-large-2411", + "canonical": "mistralai/pixtral-large" }, { "provider": "openrouter", - "model": "openai/gpt-4.1-nano", - "canonical": "openai/gpt-4.1-nano" + "model": "qwen/qwen3-coder-plus", + "canonical": "qwen/qwen3-coder-plus" }, { "provider": "openrouter", - "model": "qwen/qwen-plus", - "canonical": "qwen/qwen-plus" + "model": "deepseek/deepseek-v3.1-terminus:exacto", + "canonical": "deepseek/deepseek-v3.1-terminus" }, { "provider": "openrouter", - "model": "qwen/qwen-vl-max", - "canonical": "qwen/qwen-vl-max" + "model": "google/gemini-2.5-flash", + "canonical": "google/gemini-2.5-flash" }, { "provider": "openrouter", - "model": "qwen/qwen3-30b-a3b", - "canonical": "qwen/qwen3-30b-a3b" + "model": "mistralai/mistral-large-2411", + "canonical": "mistralai/mistral-large" }, { "provider": "openrouter", - "model": "qwen/qwen3-8b", - "canonical": "qwen/qwen3-8b" + "model": "qwen/qwen3-vl-8b-thinking", + "canonical": "qwen/qwen3-vl-8b-thinking" }, { "provider": "openrouter", - "model": "qwen/qwen3-vl-235b-a22b-instruct", - "canonical": "qwen/qwen3-vl-235b-a22b-instruct" + "model": "x-ai/grok-code-fast-1", + "canonical": "x-ai/grok-code-fast-1" }, { "provider": "openrouter", - "model": "openai/o4-mini-high", - "canonical": "openai/o4-mini-high" + "model": "mistralai/ministral-14b-2512", + "canonical": "mistralai/ministral-14b" }, { "provider": "openrouter", - "model": "google/gemini-3-pro-preview", - "canonical": "google/gemini-3-pro" + "model": "mistralai/ministral-8b-2512", + "canonical": "mistralai/ministral-8b" }, { "provider": "openrouter", - "model": "mistralai/mistral-large-2411", - "canonical": "mistralai/mistral-large" + "model": "mistralai/mistral-7b-instruct", + "canonical": "mistralai/mistral-7b-instruct" }, { "provider": "openrouter", - "model": "meta-llama/llama-3.3-70b-instruct", - "canonical": "meta-llama/llama-3.3-70b-instruct" + "model": "qwen/qwen3-coder:exacto", + "canonical": "qwen/qwen3-coder" }, { "provider": "openrouter", - "model": "anthropic/claude-3.5-haiku", - "canonical": "anthropic/claude-3.5-haiku" + "model": "mistralai/devstral-medium", + "canonical": "mistralai/devstral-medium" }, { "provider": "openrouter", - "model": "anthropic/claude-sonnet-4", - "canonical": "anthropic/claude-sonnet-4" + "model": "qwen/qwen-plus-2025-07-28", + "canonical": "qwen/qwen-plus" }, { "provider": "openrouter", - "model": "qwen/qwen3-vl-235b-a22b-thinking", - "canonical": "qwen/qwen3-vl-235b-a22b-thinking" + "model": "mistralai/mistral-large-2407", + "canonical": "mistralai/mistral-large" }, { "provider": "openrouter", - "model": "google/gemini-2.5-pro-preview", - "canonical": "google/gemini-2.5-pro" + "model": "meta-llama/llama-4-scout", + "canonical": "meta-llama/llama-4-scout" }, { "provider": "openrouter", - "model": "openai/o3-mini-high", - "canonical": "openai/o3-mini-high" + "model": "meta-llama/llama-3.1-8b-instruct", + "canonical": "meta-llama/llama-3.1-8b-instruct" }, { "provider": "openrouter", - "model": "deepseek/deepseek-r1", - "canonical": "deepseek/deepseek-r1" + "model": "mistralai/mistral-nemo", + "canonical": "mistralai/mistral-nemo" }, { "provider": "openrouter", - "model": "qwen/qwen3-vl-8b-instruct", - "canonical": "qwen/qwen3-vl-8b-instruct" + "model": "openai/gpt-5.1-codex-max", + "canonical": "openai/gpt-5.1-codex-max" }, { "provider": "openrouter", - "model": "x-ai/grok-3", - "canonical": "x-ai/grok-3" + "model": "anthropic/claude-sonnet-4", + "canonical": "anthropic/claude-sonnet-4" }, { "provider": "openrouter", - "model": "qwen/qwen3-vl-8b-thinking", - "canonical": "qwen/qwen3-vl-8b-thinking" + "model": "mistralai/mistral-medium-3", + "canonical": "mistralai/mistral-medium-3" }, { "provider": "openrouter", - "model": "openai/gpt-4o-2024-11-20", - "canonical": "openai/gpt-4o" + "model": "mistralai/mistral-small-3.1-24b-instruct", + "canonical": "mistralai/mistral-small-3.1-24b-instruct" }, { "provider": "openrouter", - "model": "mistralai/devstral-2512", - "canonical": "mistralai/devstral" + "model": "qwen/qwen-max", + "canonical": "qwen/qwen-max" }, { "provider": "openrouter", - "model": "meta-llama/llama-4-scout", - "canonical": "meta-llama/llama-4-scout" + "model": "openai/gpt-4o-2024-08-06", + "canonical": "openai/gpt-4o" }, { "provider": "openrouter", - "model": "mistralai/ministral-8b", - "canonical": "mistralai/ministral-8b" + "model": "openai/gpt-4o-2024-11-20", + "canonical": "openai/gpt-4o" }, { "provider": "openrouter", - "model": "openai/o4-mini-deep-research", - "canonical": "openai/o4-mini-deep-research" + "model": "mistralai/mistral-small-3.2-24b-instruct", + "canonical": "mistralai/mistral-small-3.2-24b-instruct" }, { "provider": "openrouter", - "model": "openai/gpt-4-1106-preview", - "canonical": "openai/gpt-4" + "model": "anthropic/claude-sonnet-4.5", + "canonical": "anthropic/claude-sonnet-4.5" }, { "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" + "model": "mistralai/mistral-tiny", + "canonical": "mistralai/mistral-tiny" }, { - "provider": "google", - "model": "gemini-2.0-flash-lite", - "canonical": "google/gemini-2.0-flash-lite" + "provider": "openrouter", + "model": "qwen/qwq-32b", + "canonical": "qwen/qwq-32b" }, { "provider": "google", - "model": "gemini-3-flash-preview", - "canonical": "google/gemini-3-flash" + "model": "gemini-2.0-flash-001", + "canonical": "google/gemini-2.0-flash" }, { "provider": "google", - "model": "gemma-3-4b-it", - "canonical": "google/gemma-3-4b-it" + "model": "gemini-2.5-flash-lite-preview-09-2025", + "canonical": "google/gemini-2.5-flash-lite" }, { "provider": "google", @@ -5005,48 +4999,48 @@ }, { "provider": "google", - "model": "gemma-3n-e4b-it", - "canonical": "google/gemma-3n-e4b-it" + "model": "gemma-3-12b-it", + "canonical": "google/gemma-3-12b-it" }, { "provider": "google", - "model": "gemini-2.0-flash-001", - "canonical": "google/gemini-2.0-flash" + "model": "gemini-2.0-flash-lite-preview", + "canonical": "google/gemini-2.0-flash-lite" }, { "provider": "google", - "model": "gemma-3-12b-it", - "canonical": "google/gemma-3-12b-it" + "model": "gemini-3-flash-preview", + "canonical": "google/gemini-3-flash" }, { "provider": "google", - "model": "gemini-2.0-flash-lite-preview-02-05", - "canonical": "google/gemini-2.0-flash-lite" + "model": "gemini-2.0-flash", + "canonical": "google/gemini-2.0-flash" }, { "provider": "google", - "model": "gemini-2.0-flash", + "model": "gemini-2.0-flash-exp", "canonical": "google/gemini-2.0-flash" }, { "provider": "google", - "model": "gemini-2.5-flash-lite-preview-09-2025", - "canonical": "google/gemini-2.5-flash-lite" + "model": "gemini-3-pro-preview", + "canonical": "google/gemini-3-pro" }, { "provider": "google", - "model": "gemini-3-pro-image-preview", - "canonical": "google/gemini-3-pro-image" + "model": "gemini-2.5-flash-lite", + "canonical": "google/gemini-2.5-flash-lite" }, { "provider": "google", - "model": "gemini-2.5-flash-image", - "canonical": "google/gemini-2.5-flash-image" + "model": "gemini-2.0-flash-lite", + "canonical": "google/gemini-2.0-flash-lite" }, { "provider": "google", - "model": "gemini-2.5-flash-lite", - "canonical": "google/gemini-2.5-flash-lite" + "model": "gemini-2.5-flash-image-preview", + "canonical": "google/gemini-2.5-flash-image" }, { "provider": "google", @@ -5055,8 +5049,8 @@ }, { "provider": "google", - "model": "gemini-2.0-flash-exp", - "canonical": "google/gemini-2.0-flash" + "model": "gemini-2.5-pro", + "canonical": "google/gemini-2.5-pro" }, { "provider": "google", @@ -5065,178 +5059,188 @@ }, { "provider": "google", - "model": "gemini-2.5-pro", - "canonical": "google/gemini-2.5-pro" + "model": "gemma-3-4b-it", + "canonical": "google/gemma-3-4b-it" }, { "provider": "google", - "model": "gemini-2.5-flash-image-preview", + "model": "gemini-2.5-flash-image", "canonical": "google/gemini-2.5-flash-image" }, { "provider": "google", - "model": "gemini-3-pro-preview", - "canonical": "google/gemini-3-pro" + "model": "gemini-2.0-flash-lite-preview-02-05", + "canonical": "google/gemini-2.0-flash-lite" + }, + { + "provider": "google", + "model": "gemini-3-pro-image-preview", + "canonical": "google/gemini-3-pro-image" }, { "provider": "google", "model": "gemma-3-27b-it", "canonical": "google/gemma-3-27b-it" + }, + { + "provider": "google", + "model": "gemma-3n-e4b-it", + "canonical": "google/gemma-3n-e4b-it" } ], "model_counts": { - "tetrate": 0, "openai": 646, + "openrouter": 232, + "xai": 0, "google": 50, - "openrouter": 231, "anthropic": 10, - "xai": 0 + "tetrate": 0 }, "canonical_models_used": [ - "openai/gpt-4", - "openai/gpt-3.5-turbo-16k", - "openai/gpt-3.5-turbo-instruct", - "anthropic/claude-3-opus", - "anthropic/claude-haiku-4.5", - "mistralai/devstral-medium", - "anthropic/claude-opus-4.1", - "deepseek/deepseek-r1", - "x-ai/grok-3", - "qwen/qwen3-235b-a22b-thinking", + "qwen/qwen3-30b-a3b-thinking", + "mistralai/mistral-medium-3.1", + "openai/o3-mini", + "qwen/qwen-plus-2025-07-28:thinking", + "deepseek/deepseek-r1-distill-llama-70b", + "openai/gpt-5.2", + "mistralai/devstral", + "qwen/qwen3-max", + "qwen/qwen-2.5-72b-instruct", + "mistralai/mistral-saba", + "qwen/qwen3-30b-a3b-instruct", + "openai/o3-pro", + "anthropic/claude-3.7-sonnet", + "mistralai/voxtral-small-24b", + "openai/gpt-5.2-pro", + "qwen/qwen3-vl-235b-a22b-instruct", + "openai/gpt-5-codex", + "cohere/command-r-plus-08", "qwen/qwen-plus", - "openai/gpt-4o", - "mistralai/mistral-tiny", - "mistralai/ministral-8b", - "qwen/qwen3-vl-8b-thinking", - "mistralai/mistral-small-3.2-24b-instruct", + "google/gemma-3n-e4b-it", + "openai/gpt-4o-audio", + "google/gemini-3-flash", + "openai/gpt-4o-mini-search", + "openai/gpt-5-pro", + "ai21/jamba-mini-1.7", "openai/o3-mini-high", "qwen/qwen3-vl-30b-a3b-instruct", + "meta-llama/llama-4-maverick", + "anthropic/claude-sonnet-4", + "openai/o3-deep-research", + "openai/gpt-4o-search", + "mistralai/mistral-7b-instruct", + "openai/o4-mini", + "openai/o4-mini-deep-research", + "openai/gpt-5.1-codex-max", + "openai/o3", + "mistralai/mixtral-8x22b-instruct", + "mistralai/mistral-tiny", "openai/gpt-4-turbo", + "google/gemma-3-4b-it", + "openai/o1", + "qwen/qwen-turbo", + "qwen/qwen3-next-80b-a3b-instruct", + "qwen/qwen3-8b", + "openai/gpt-5.1", "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/o1-pro", + "qwen/qwen3-vl-8b-thinking", + "google/gemini-2.5-flash", + "x-ai/grok-4", + "meta-llama/llama-3.2-3b-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", + "openai/gpt-5.1-codex-mini", + "qwen/qwen3-30b-a3b", + "cohere/command-r-08", + "openai/gpt-5.1-codex", "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", + "qwen/qwen3-coder-flash", + "openai/gpt-3.5-turbo", "deepseek/deepseek", - "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", + "mistralai/ministral-3b", + "anthropic/claude-3-opus", + "meta-llama/llama-3.1-405b-instruct", + "qwen/qwen3-235b-a22b-thinking", + "mistralai/mistral-small-24b-instruct", + "google/gemma-3-12b-it", + "qwen/qwen3-coder", "qwen/qwen3-vl-30b-a3b-thinking", - "x-ai/grok-4", - "openai/o1-pro", - "openai/o4-mini-deep-research", + "anthropic/claude-opus-4", + "x-ai/grok-3", + "openai/gpt-5-chat", + "mistralai/codestral", + "x-ai/grok-code-fast-1", + "mistralai/mistral-small-3.2-24b-instruct", + "openai/gpt-4o", + "google/gemini-2.0-flash", + "openai/gpt-4.1-nano", + "deepseek/deepseek-chat", + "anthropic/claude-haiku-4.5", + "anthropic/claude-3.7-sonnet:thinking", + "anthropic/claude-3.5-sonnet", + "google/gemini-2.0-flash-lite", + "openai/gpt-4.1-mini", "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", + "google/gemini-2.5-pro", + "meta-llama/llama-3-8b-instruct", + "mistralai/ministral-8b", + "openai/gpt-5-nano", + "openai/gpt-oss-20b", + "x-ai/grok-3-mini", "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", - "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", + "google/gemma-3-27b-it", "x-ai/grok-4-fast", - "mistralai/devstral-small", + "meta-llama/llama-3.3-70b-instruct", + "meta-llama/llama-3.1-8b-instruct", + "mistralai/mistral-nemo", + "qwen/qwq-32b", + "openai/gpt-4o:extended", + "anthropic/claude-opus-4.5", + "qwen/qwen3-coder-plus", + "openai/o4-mini-high", + "openai/gpt-4o-mini", + "mistralai/ministral-14b", + "mistralai/mistral-small-3.1-24b-instruct", + "deepseek/deepseek-v3.1-terminus", + "mistralai/mistral-medium-3", + "qwen/qwen-max", "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", + "qwen/qwen3-32b", + "anthropic/claude-opus-4.1", + "ai21/jamba-large-1.7", + "openai/gpt-oss-120b", + "openai/gpt-3.5-turbo-16k", + "openai/chatgpt-4o", + "google/gemini-2.5-flash-lite", "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", + "qwen/qwen3-14b", "mistralai/mixtral-8x7b-instruct", - "google/gemma-3-12b-it", - "openai/gpt-4.1-mini", - "mistralai/mistral-large", + "openai/gpt-5-image-mini", + "qwen/qwen-vl-max", "google/gemini-3-pro-image", + "meta-llama/llama-4-scout", + "qwen/qwen3-coder-30b-a3b-instruct", + "anthropic/claude-3.5-haiku", + "google/gemini-3-pro", + "qwen/qwen3-vl-8b-instruct", + "mistralai/pixtral-large", + "mistralai/mistral-large", + "openai/gpt-3.5-turbo-instruct", + "qwen/qwen3-next-80b-a3b-thinking", + "mistralai/devstral-medium", "qwen/qwen3-235b-a22b", - "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/pixtral-12b", "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", + "openai/gpt-5", + "openai/codex-mini", + "openai/gpt-5-mini", + "openai/gpt-5.2-chat", + "openai/gpt-oss-safeguard-20b", + "mistralai/devstral-small", + "deepseek/deepseek-r1", "meta-llama/llama-3-70b-instruct", - "mistralai/ministral-14b", - "openai/gpt-5-image-mini" + "openai/gpt-4", + "anthropic/claude-sonnet-4.5" ] } \ 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 3178c92f76b..7cbe23ae1a9 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": 65536, + "max_completion_tokens": 163840, "input_modalities": [ "text" ], @@ -374,7 +374,7 @@ ], "supports_tools": true, "pricing": { - "prompt": 2.6e-7, + "prompt": 2.4e-7, "completion": 3.8e-7, "request": 0.0, "image": 0.0 diff --git a/ui/desktop/openapi.json b/ui/desktop/openapi.json index ca63e46a532..983af340b0e 100644 --- a/ui/desktop/openapi.json +++ b/ui/desktop/openapi.json @@ -10,7 +10,7 @@ "license": { "name": "Apache-2.0" }, - "version": "1.17.0" + "version": "1.18.0" }, "paths": { "/action-required/tool-confirmation": { diff --git a/ui/desktop/package-lock.json b/ui/desktop/package-lock.json index ef2156aa3de..6801fd53a47 100644 --- a/ui/desktop/package-lock.json +++ b/ui/desktop/package-lock.json @@ -1,12 +1,12 @@ { "name": "goose-app", - "version": "1.16.0", + "version": "1.18.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "goose-app", - "version": "1.16.0", + "version": "1.18.0", "license": "Apache-2.0", "dependencies": { "@ai-sdk/openai": "^2.0.76", diff --git a/ui/desktop/package.json b/ui/desktop/package.json index 065da8381d9..e5b93a1dc36 100644 --- a/ui/desktop/package.json +++ b/ui/desktop/package.json @@ -1,7 +1,7 @@ { "name": "goose-app", "productName": "Goose", - "version": "1.16.0", + "version": "1.18.0", "description": "Goose App", "engines": { "node": "^22.17.1" From 46699566eb95ec723e2af9eb761533ea43f19394 Mon Sep 17 00:00:00 2001 From: David Katz Date: Fri, 19 Dec 2025 13:15:56 -0500 Subject: [PATCH 2/2] Recipe slash command parsing (#6173) --- crates/goose/src/agents/agent.rs | 14 +++- crates/goose/src/agents/execute_commands.rs | 88 +++++++++++++++++---- 2 files changed, 82 insertions(+), 20 deletions(-) diff --git a/crates/goose/src/agents/agent.rs b/crates/goose/src/agents/agent.rs index 412902cc0fa..b0e3e530cbb 100644 --- a/crates/goose/src/agents/agent.rs +++ b/crates/goose/src/agents/agent.rs @@ -797,7 +797,15 @@ impl Agent { .await; match command_result { - Some(response) if response.role == rmcp::model::Role::Assistant => { + Err(e) => { + let error_message = Message::assistant() + .with_text(e.to_string()) + .with_visibility(true, false); + return Ok(Box::pin(stream::once(async move { + Ok(AgentEvent::Message(error_message)) + }))); + } + Ok(Some(response)) if response.role == rmcp::model::Role::Assistant => { SessionManager::add_message( &session_config.id, &user_message.clone().with_visibility(true, false), @@ -830,7 +838,7 @@ impl Agent { } })); } - Some(resolved_message) => { + Ok(Some(resolved_message)) => { SessionManager::add_message( &session_config.id, &user_message.clone().with_visibility(true, false), @@ -842,7 +850,7 @@ impl Agent { ) .await?; } - None => { + Ok(None) => { SessionManager::add_message(&session_config.id, &user_message).await?; } } diff --git a/crates/goose/src/agents/execute_commands.rs b/crates/goose/src/agents/execute_commands.rs index 7220bba5036..545fcb9b6de 100644 --- a/crates/goose/src/agents/execute_commands.rs +++ b/crates/goose/src/agents/execute_commands.rs @@ -41,7 +41,11 @@ pub fn list_commands() -> &'static [CommandDef] { } impl Agent { - pub async fn execute_command(&self, message_text: &str, session_id: &str) -> Option { + pub async fn execute_command( + &self, + message_text: &str, + session_id: &str, + ) -> Result> { let mut trimmed = message_text.trim().to_string(); if COMPACT_TRIGGERS.contains(&trimmed.as_str()) { @@ -49,37 +53,30 @@ impl Agent { } if !trimmed.starts_with('/') { - return None; + return Ok(None); } let command_str = trimmed.strip_prefix('/').unwrap_or(&trimmed); - let (command, params) = command_str + let (command, params_str) = command_str .split_once(' ') .map(|(cmd, p)| (cmd, p.trim())) .unwrap_or((command_str, "")); - let params: Vec<&str> = if params.is_empty() { + let params: Vec<&str> = if params_str.is_empty() { vec![] } else { - params.split_whitespace().collect() + params_str.split_whitespace().collect() }; - let result = match command { + match command { "prompts" => self.handle_prompts_command(¶ms, session_id).await, "prompt" => self.handle_prompt_command(¶ms, session_id).await, "compact" => self.handle_compact_command(session_id).await, "clear" => self.handle_clear_command(session_id).await, _ => { - self.handle_recipe_command(command, ¶ms, session_id) + self.handle_recipe_command(command, params_str, session_id) .await } - }; - - match result { - Ok(msg) => msg, - Err(e) => { - Some(Message::assistant().with_text(format!("Error executing /{}: {}", command, e))) - } } } @@ -264,7 +261,7 @@ impl Agent { async fn handle_recipe_command( &self, command: &str, - params: &[&str], + params_str: &str, _session_id: &str, ) -> Result> { let full_command = format!("/{}", command); @@ -284,7 +281,64 @@ impl Agent { .parent() .ok_or_else(|| anyhow!("Recipe path has no parent directory"))?; - let param_values: Vec = params.iter().map(|s| s.to_string()).collect(); + let recipe_dir_str = recipe_dir.display().to_string(); + let validation_result = + crate::recipe::validate_recipe::validate_recipe_template_from_content( + &recipe_content, + Some(recipe_dir_str), + ) + .map_err(|e| anyhow!("Failed to parse recipe: {}", e))?; + + let param_values: Vec = if params_str.is_empty() { + vec![] + } else { + let params_without_default = validation_result + .parameters + .as_ref() + .map(|params| params.iter().filter(|p| p.default.is_none()).count()) + .unwrap_or(0); + + if params_without_default <= 1 { + vec![params_str.to_string()] + } else { + let param_names: Vec = validation_result + .parameters + .as_ref() + .map(|params| { + params + .iter() + .filter(|p| p.default.is_none()) + .map(|p| p.key.clone()) + .collect() + }) + .unwrap_or_default(); + + let error_message = format!( + "The /{} recipe requires {} parameters: {}.\n\n\ + Slash command recipes only support 1 parameter.\n\n\ + **To use this recipe:**\n\ + • **CLI:** `goose run --recipe {} {}`\n\ + • **Desktop:** Launch from the recipes sidebar to fill in parameters", + command, + params_without_default, + param_names + .iter() + .map(|name| format!("**{}**", name)) + .collect::>() + .join(", "), + command, + param_names + .iter() + .map(|name| format!("--params {}=\"...\"", name)) + .collect::>() + .join(" ") + ); + + return Err(anyhow!(error_message)); + } + }; + + let param_values_len = param_values.len(); let recipe = match build_recipe_from_template_with_positional_params( recipe_content, @@ -298,7 +352,7 @@ impl Agent { "Recipe requires {} parameter(s): {}. Provided: {}", parameters.len(), parameters.join(", "), - params.len() + param_values_len )))); } Err(e) => return Err(anyhow!("Failed to build recipe: {}", e)),