From 02c719dfddb775a7f0311f83dcf8a29fb37ae2c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Sibiril?= <81782+aureliensibiril@users.noreply.github.com> Date: Mon, 13 Apr 2026 17:14:53 +0200 Subject: [PATCH] Use map for generated model registry data MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces []ModelDefinition with map[string]ModelDefinition so model ID uniqueness is enforced by the data structure itself and lookups do not require a linear scan. Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com> --- internal/cmd/genmodels/main.go | 5 +- pkg/llm/registry.go | 10 +- pkg/llm/registry_gen.go | 735 +++++++++++++-------------------- 3 files changed, 285 insertions(+), 465 deletions(-) diff --git a/internal/cmd/genmodels/main.go b/internal/cmd/genmodels/main.go index 27aa2789c..a6615bf78 100644 --- a/internal/cmd/genmodels/main.go +++ b/internal/cmd/genmodels/main.go @@ -118,7 +118,7 @@ func main() { package llm -var generatedModels = []ModelDefinition{ +var generatedModels = map[string]ModelDefinition{ `, iscHeader, openRouterURL, @@ -134,8 +134,7 @@ var generatedModels = []ModelDefinition{ fmt.Fprintf( &buf, - ` { - ID: %q, + ` %q: { Name: %q, Provider: %q, ContextLength: %d, diff --git a/pkg/llm/registry.go b/pkg/llm/registry.go index 60d48deb0..1675a7e07 100644 --- a/pkg/llm/registry.go +++ b/pkg/llm/registry.go @@ -19,8 +19,6 @@ import ( "sync" ) -//go:generate go run go.probo.inc/probo/internal/cmd/genmodels - type ( // ModelDefinition describes a model's capabilities and limits. ModelDefinition struct { @@ -61,11 +59,11 @@ var ( ) // NewRegistry builds a registry from the given model definitions. -func NewRegistry(models []ModelDefinition) *Registry { +func NewRegistry(models map[string]ModelDefinition) *Registry { r := &Registry{byID: make(map[string]*ModelDefinition, len(models)*3)} - for i := range models { - m := &models[i] - r.index(m) + for id, m := range models { + m.ID = id + r.index(&m) } return r } diff --git a/pkg/llm/registry_gen.go b/pkg/llm/registry_gen.go index 3dd52b343..71e06d4ac 100644 --- a/pkg/llm/registry_gen.go +++ b/pkg/llm/registry_gen.go @@ -14,13 +14,12 @@ // Code generated by genmodels; DO NOT EDIT. // Source: https://openrouter.ai/api/v1/models -// Generated: 2026-04-13T14:27:53Z +// Generated: 2026-04-13T15:14:11Z package llm -var generatedModels = []ModelDefinition{ - { - ID: "anthropic/claude-opus-4.6-fast", +var generatedModels = map[string]ModelDefinition{ + "anthropic/claude-opus-4.6-fast": { Name: "Anthropic: Claude Opus 4.6 (Fast)", Provider: "anthropic", ContextLength: 1000000, @@ -41,8 +40,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "google/gemma-4-26b-a4b-it:free", + "google/gemma-4-26b-a4b-it:free": { Name: "Google: Gemma 4 26B A4B (free)", Provider: "google", ContextLength: 262144, @@ -63,8 +61,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "google/gemma-4-26b-a4b-it", + "google/gemma-4-26b-a4b-it": { Name: "Google: Gemma 4 26B A4B ", Provider: "google", ContextLength: 262144, @@ -85,8 +82,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "google/gemma-4-31b-it:free", + "google/gemma-4-31b-it:free": { Name: "Google: Gemma 4 31B (free)", Provider: "google", ContextLength: 262144, @@ -107,8 +103,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "google/gemma-4-31b-it", + "google/gemma-4-31b-it": { Name: "Google: Gemma 4 31B", Provider: "google", ContextLength: 262144, @@ -129,8 +124,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "x-ai/grok-4.20-multi-agent", + "x-ai/grok-4.20-multi-agent": { Name: "xAI: Grok 4.20 Multi-Agent", Provider: "x-ai", ContextLength: 2000000, @@ -151,8 +145,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "x-ai/grok-4.20", + "x-ai/grok-4.20": { Name: "xAI: Grok 4.20", Provider: "x-ai", ContextLength: 2000000, @@ -173,8 +166,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "google/lyria-3-pro-preview", + "google/lyria-3-pro-preview": { Name: "Google: Lyria 3 Pro Preview", Provider: "google", ContextLength: 1048576, @@ -195,8 +187,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "google/lyria-3-clip-preview", + "google/lyria-3-clip-preview": { Name: "Google: Lyria 3 Clip Preview", Provider: "google", ContextLength: 1048576, @@ -217,8 +208,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-5.4-nano", + "openai/gpt-5.4-nano": { Name: "OpenAI: GPT-5.4 Nano", Provider: "openai", ContextLength: 400000, @@ -239,8 +229,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-5.4-mini", + "openai/gpt-5.4-mini": { Name: "OpenAI: GPT-5.4 Mini", Provider: "openai", ContextLength: 400000, @@ -261,8 +250,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "mistralai/mistral-small-2603", + "mistralai/mistral-small-2603": { Name: "Mistral: Mistral Small 4", Provider: "mistralai", ContextLength: 262144, @@ -283,8 +271,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-5.4-pro", + "openai/gpt-5.4-pro": { Name: "OpenAI: GPT-5.4 Pro", Provider: "openai", ContextLength: 1050000, @@ -305,8 +292,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-5.4", + "openai/gpt-5.4": { Name: "OpenAI: GPT-5.4", Provider: "openai", ContextLength: 1050000, @@ -327,8 +313,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-5.3-chat", + "openai/gpt-5.3-chat": { Name: "OpenAI: GPT-5.3 Chat", Provider: "openai", ContextLength: 128000, @@ -349,8 +334,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "google/gemini-3.1-flash-lite-preview", + "google/gemini-3.1-flash-lite-preview": { Name: "Google: Gemini 3.1 Flash Lite Preview", Provider: "google", ContextLength: 1048576, @@ -371,8 +355,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "google/gemini-3.1-flash-image-preview", + "google/gemini-3.1-flash-image-preview": { Name: "Google: Nano Banana 2 (Gemini 3.1 Flash Image Preview)", Provider: "google", ContextLength: 65536, @@ -393,8 +376,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "google/gemini-3.1-pro-preview-customtools", + "google/gemini-3.1-pro-preview-customtools": { Name: "Google: Gemini 3.1 Pro Preview Custom Tools", Provider: "google", ContextLength: 1048576, @@ -415,8 +397,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-5.3-codex", + "openai/gpt-5.3-codex": { Name: "OpenAI: GPT-5.3-Codex", Provider: "openai", ContextLength: 400000, @@ -437,8 +418,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "google/gemini-3.1-pro-preview", + "google/gemini-3.1-pro-preview": { Name: "Google: Gemini 3.1 Pro Preview", Provider: "google", ContextLength: 1048576, @@ -459,8 +439,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "anthropic/claude-sonnet-4.6", + "anthropic/claude-sonnet-4.6": { Name: "Anthropic: Claude Sonnet 4.6", Provider: "anthropic", ContextLength: 1000000, @@ -481,8 +460,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "anthropic/claude-opus-4.6", + "anthropic/claude-opus-4.6": { Name: "Anthropic: Claude Opus 4.6", Provider: "anthropic", ContextLength: 1000000, @@ -503,8 +481,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-audio", + "openai/gpt-audio": { Name: "OpenAI: GPT Audio", Provider: "openai", ContextLength: 128000, @@ -525,8 +502,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-audio-mini", + "openai/gpt-audio-mini": { Name: "OpenAI: GPT Audio Mini", Provider: "openai", ContextLength: 128000, @@ -547,8 +523,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-5.2-codex", + "openai/gpt-5.2-codex": { Name: "OpenAI: GPT-5.2-Codex", Provider: "openai", ContextLength: 400000, @@ -569,8 +544,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "google/gemini-3-flash-preview", + "google/gemini-3-flash-preview": { Name: "Google: Gemini 3 Flash Preview", Provider: "google", ContextLength: 1048576, @@ -591,8 +565,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "mistralai/mistral-small-creative", + "mistralai/mistral-small-creative": { Name: "Mistral: Mistral Small Creative", Provider: "mistralai", ContextLength: 32768, @@ -613,8 +586,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-5.2-chat", + "openai/gpt-5.2-chat": { Name: "OpenAI: GPT-5.2 Chat", Provider: "openai", ContextLength: 128000, @@ -635,8 +607,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-5.2-pro", + "openai/gpt-5.2-pro": { Name: "OpenAI: GPT-5.2 Pro", Provider: "openai", ContextLength: 400000, @@ -657,8 +628,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-5.2", + "openai/gpt-5.2": { Name: "OpenAI: GPT-5.2", Provider: "openai", ContextLength: 400000, @@ -679,8 +649,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "mistralai/devstral-2512", + "mistralai/devstral-2512": { Name: "Mistral: Devstral 2 2512", Provider: "mistralai", ContextLength: 262144, @@ -701,8 +670,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-5.1-codex-max", + "openai/gpt-5.1-codex-max": { Name: "OpenAI: GPT-5.1-Codex-Max", Provider: "openai", ContextLength: 400000, @@ -723,8 +691,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "amazon/nova-2-lite-v1", + "amazon/nova-2-lite-v1": { Name: "Amazon: Nova 2 Lite", Provider: "amazon", ContextLength: 1000000, @@ -745,8 +712,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "mistralai/ministral-14b-2512", + "mistralai/ministral-14b-2512": { Name: "Mistral: Ministral 3 14B 2512", Provider: "mistralai", ContextLength: 262144, @@ -767,8 +733,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "mistralai/ministral-8b-2512", + "mistralai/ministral-8b-2512": { Name: "Mistral: Ministral 3 8B 2512", Provider: "mistralai", ContextLength: 262144, @@ -789,8 +754,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "mistralai/ministral-3b-2512", + "mistralai/ministral-3b-2512": { Name: "Mistral: Ministral 3 3B 2512", Provider: "mistralai", ContextLength: 131072, @@ -811,8 +775,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "mistralai/mistral-large-2512", + "mistralai/mistral-large-2512": { Name: "Mistral: Mistral Large 3 2512", Provider: "mistralai", ContextLength: 262144, @@ -833,8 +796,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "deepseek/deepseek-v3.2-speciale", + "deepseek/deepseek-v3.2-speciale": { Name: "DeepSeek: DeepSeek V3.2 Speciale", Provider: "deepseek", ContextLength: 163840, @@ -855,8 +817,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "deepseek/deepseek-v3.2", + "deepseek/deepseek-v3.2": { Name: "DeepSeek: DeepSeek V3.2", Provider: "deepseek", ContextLength: 163840, @@ -877,8 +838,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "anthropic/claude-opus-4.5", + "anthropic/claude-opus-4.5": { Name: "Anthropic: Claude Opus 4.5", Provider: "anthropic", ContextLength: 200000, @@ -899,8 +859,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "google/gemini-3-pro-image-preview", + "google/gemini-3-pro-image-preview": { Name: "Google: Nano Banana Pro (Gemini 3 Pro Image Preview)", Provider: "google", ContextLength: 65536, @@ -921,8 +880,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "x-ai/grok-4.1-fast", + "x-ai/grok-4.1-fast": { Name: "xAI: Grok 4.1 Fast", Provider: "x-ai", ContextLength: 2000000, @@ -943,8 +901,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-5.1", + "openai/gpt-5.1": { Name: "OpenAI: GPT-5.1", Provider: "openai", ContextLength: 400000, @@ -965,8 +922,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-5.1-chat", + "openai/gpt-5.1-chat": { Name: "OpenAI: GPT-5.1 Chat", Provider: "openai", ContextLength: 128000, @@ -987,8 +943,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-5.1-codex", + "openai/gpt-5.1-codex": { Name: "OpenAI: GPT-5.1-Codex", Provider: "openai", ContextLength: 400000, @@ -1009,8 +964,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-5.1-codex-mini", + "openai/gpt-5.1-codex-mini": { Name: "OpenAI: GPT-5.1-Codex-Mini", Provider: "openai", ContextLength: 400000, @@ -1031,8 +985,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "amazon/nova-premier-v1", + "amazon/nova-premier-v1": { Name: "Amazon: Nova Premier 1.0", Provider: "amazon", ContextLength: 1000000, @@ -1053,8 +1006,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "perplexity/sonar-pro-search", + "perplexity/sonar-pro-search": { Name: "Perplexity: Sonar Pro Search", Provider: "perplexity", ContextLength: 200000, @@ -1075,8 +1027,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "mistralai/voxtral-small-24b-2507", + "mistralai/voxtral-small-24b-2507": { Name: "Mistral: Voxtral Small 24B 2507", Provider: "mistralai", ContextLength: 32000, @@ -1097,8 +1048,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-oss-safeguard-20b", + "openai/gpt-oss-safeguard-20b": { Name: "OpenAI: gpt-oss-safeguard-20b", Provider: "openai", ContextLength: 131072, @@ -1119,8 +1069,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-5-image-mini", + "openai/gpt-5-image-mini": { Name: "OpenAI: GPT-5 Image Mini", Provider: "openai", ContextLength: 400000, @@ -1141,8 +1090,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "anthropic/claude-haiku-4.5", + "anthropic/claude-haiku-4.5": { Name: "Anthropic: Claude Haiku 4.5", Provider: "anthropic", ContextLength: 200000, @@ -1163,8 +1111,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-5-image", + "openai/gpt-5-image": { Name: "OpenAI: GPT-5 Image", Provider: "openai", ContextLength: 400000, @@ -1185,8 +1132,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/o3-deep-research", + "openai/o3-deep-research": { Name: "OpenAI: o3 Deep Research", Provider: "openai", ContextLength: 200000, @@ -1207,8 +1153,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/o4-mini-deep-research", + "openai/o4-mini-deep-research": { Name: "OpenAI: o4 Mini Deep Research", Provider: "openai", ContextLength: 200000, @@ -1229,8 +1174,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "google/gemini-2.5-flash-image", + "google/gemini-2.5-flash-image": { Name: "Google: Nano Banana (Gemini 2.5 Flash Image)", Provider: "google", ContextLength: 32768, @@ -1251,8 +1195,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-5-pro", + "openai/gpt-5-pro": { Name: "OpenAI: GPT-5 Pro", Provider: "openai", ContextLength: 400000, @@ -1273,8 +1216,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "anthropic/claude-sonnet-4.5", + "anthropic/claude-sonnet-4.5": { Name: "Anthropic: Claude Sonnet 4.5", Provider: "anthropic", ContextLength: 1000000, @@ -1295,8 +1237,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "deepseek/deepseek-v3.2-exp", + "deepseek/deepseek-v3.2-exp": { Name: "DeepSeek: DeepSeek V3.2 Exp", Provider: "deepseek", ContextLength: 163840, @@ -1317,8 +1258,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "google/gemini-2.5-flash-lite-preview-09-2025", + "google/gemini-2.5-flash-lite-preview-09-2025": { Name: "Google: Gemini 2.5 Flash Lite Preview 09-2025", Provider: "google", ContextLength: 1048576, @@ -1339,8 +1279,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-5-codex", + "openai/gpt-5-codex": { Name: "OpenAI: GPT-5 Codex", Provider: "openai", ContextLength: 400000, @@ -1361,8 +1300,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "deepseek/deepseek-v3.1-terminus", + "deepseek/deepseek-v3.1-terminus": { Name: "DeepSeek: DeepSeek V3.1 Terminus", Provider: "deepseek", ContextLength: 163840, @@ -1383,8 +1321,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "x-ai/grok-4-fast", + "x-ai/grok-4-fast": { Name: "xAI: Grok 4 Fast", Provider: "x-ai", ContextLength: 2000000, @@ -1405,8 +1342,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "x-ai/grok-code-fast-1", + "x-ai/grok-code-fast-1": { Name: "xAI: Grok Code Fast 1", Provider: "x-ai", ContextLength: 256000, @@ -1427,8 +1363,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "deepseek/deepseek-chat-v3.1", + "deepseek/deepseek-chat-v3.1": { Name: "DeepSeek: DeepSeek V3.1", Provider: "deepseek", ContextLength: 32768, @@ -1449,8 +1384,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-4o-audio-preview", + "openai/gpt-4o-audio-preview": { Name: "OpenAI: GPT-4o Audio", Provider: "openai", ContextLength: 128000, @@ -1471,8 +1405,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "mistralai/mistral-medium-3.1", + "mistralai/mistral-medium-3.1": { Name: "Mistral: Mistral Medium 3.1", Provider: "mistralai", ContextLength: 131072, @@ -1493,8 +1426,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-5-chat", + "openai/gpt-5-chat": { Name: "OpenAI: GPT-5 Chat", Provider: "openai", ContextLength: 128000, @@ -1515,8 +1447,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-5", + "openai/gpt-5": { Name: "OpenAI: GPT-5", Provider: "openai", ContextLength: 400000, @@ -1537,8 +1468,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-5-mini", + "openai/gpt-5-mini": { Name: "OpenAI: GPT-5 Mini", Provider: "openai", ContextLength: 400000, @@ -1559,8 +1489,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-5-nano", + "openai/gpt-5-nano": { Name: "OpenAI: GPT-5 Nano", Provider: "openai", ContextLength: 400000, @@ -1581,8 +1510,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-oss-120b:free", + "openai/gpt-oss-120b:free": { Name: "OpenAI: gpt-oss-120b (free)", Provider: "openai", ContextLength: 131072, @@ -1603,8 +1531,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-oss-120b", + "openai/gpt-oss-120b": { Name: "OpenAI: gpt-oss-120b", Provider: "openai", ContextLength: 131072, @@ -1625,8 +1552,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-oss-20b:free", + "openai/gpt-oss-20b:free": { Name: "OpenAI: gpt-oss-20b (free)", Provider: "openai", ContextLength: 131072, @@ -1647,8 +1573,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-oss-20b", + "openai/gpt-oss-20b": { Name: "OpenAI: gpt-oss-20b", Provider: "openai", ContextLength: 131072, @@ -1669,8 +1594,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "anthropic/claude-opus-4.1", + "anthropic/claude-opus-4.1": { Name: "Anthropic: Claude Opus 4.1", Provider: "anthropic", ContextLength: 200000, @@ -1691,8 +1615,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "mistralai/codestral-2508", + "mistralai/codestral-2508": { Name: "Mistral: Codestral 2508", Provider: "mistralai", ContextLength: 256000, @@ -1713,8 +1636,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "google/gemini-2.5-flash-lite", + "google/gemini-2.5-flash-lite": { Name: "Google: Gemini 2.5 Flash Lite", Provider: "google", ContextLength: 1048576, @@ -1735,8 +1657,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "mistralai/devstral-medium", + "mistralai/devstral-medium": { Name: "Mistral: Devstral Medium", Provider: "mistralai", ContextLength: 131072, @@ -1757,8 +1678,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "mistralai/devstral-small", + "mistralai/devstral-small": { Name: "Mistral: Devstral Small 1.1", Provider: "mistralai", ContextLength: 131072, @@ -1779,8 +1699,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "x-ai/grok-4", + "x-ai/grok-4": { Name: "xAI: Grok 4", Provider: "x-ai", ContextLength: 256000, @@ -1801,8 +1720,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "google/gemma-3n-e2b-it:free", + "google/gemma-3n-e2b-it:free": { Name: "Google: Gemma 3n 2B (free)", Provider: "google", ContextLength: 8192, @@ -1823,8 +1741,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "mistralai/mistral-small-3.2-24b-instruct", + "mistralai/mistral-small-3.2-24b-instruct": { Name: "Mistral: Mistral Small 3.2 24B", Provider: "mistralai", ContextLength: 128000, @@ -1845,8 +1762,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "google/gemini-2.5-flash", + "google/gemini-2.5-flash": { Name: "Google: Gemini 2.5 Flash", Provider: "google", ContextLength: 1048576, @@ -1867,8 +1783,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "google/gemini-2.5-pro", + "google/gemini-2.5-pro": { Name: "Google: Gemini 2.5 Pro", Provider: "google", ContextLength: 1048576, @@ -1889,8 +1804,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/o3-pro", + "openai/o3-pro": { Name: "OpenAI: o3 Pro", Provider: "openai", ContextLength: 200000, @@ -1911,8 +1825,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "x-ai/grok-3-mini", + "x-ai/grok-3-mini": { Name: "xAI: Grok 3 Mini", Provider: "x-ai", ContextLength: 131072, @@ -1933,8 +1846,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "x-ai/grok-3", + "x-ai/grok-3": { Name: "xAI: Grok 3", Provider: "x-ai", ContextLength: 131072, @@ -1955,8 +1867,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "google/gemini-2.5-pro-preview", + "google/gemini-2.5-pro-preview": { Name: "Google: Gemini 2.5 Pro Preview 06-05", Provider: "google", ContextLength: 1048576, @@ -1977,8 +1888,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "deepseek/deepseek-r1-0528", + "deepseek/deepseek-r1-0528": { Name: "DeepSeek: R1 0528", Provider: "deepseek", ContextLength: 163840, @@ -1999,8 +1909,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "anthropic/claude-opus-4", + "anthropic/claude-opus-4": { Name: "Anthropic: Claude Opus 4", Provider: "anthropic", ContextLength: 200000, @@ -2021,8 +1930,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "anthropic/claude-sonnet-4", + "anthropic/claude-sonnet-4": { Name: "Anthropic: Claude Sonnet 4", Provider: "anthropic", ContextLength: 1000000, @@ -2043,8 +1951,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "google/gemma-3n-e4b-it:free", + "google/gemma-3n-e4b-it:free": { Name: "Google: Gemma 3n 4B (free)", Provider: "google", ContextLength: 8192, @@ -2065,8 +1972,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "google/gemma-3n-e4b-it", + "google/gemma-3n-e4b-it": { Name: "Google: Gemma 3n 4B", Provider: "google", ContextLength: 32768, @@ -2087,8 +1993,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "mistralai/mistral-medium-3", + "mistralai/mistral-medium-3": { Name: "Mistral: Mistral Medium 3", Provider: "mistralai", ContextLength: 131072, @@ -2109,8 +2014,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "google/gemini-2.5-pro-preview-05-06", + "google/gemini-2.5-pro-preview-05-06": { Name: "Google: Gemini 2.5 Pro Preview 05-06", Provider: "google", ContextLength: 1048576, @@ -2131,8 +2035,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "meta-llama/llama-guard-4-12b", + "meta-llama/llama-guard-4-12b": { Name: "Meta: Llama Guard 4 12B", Provider: "meta-llama", ContextLength: 163840, @@ -2153,8 +2056,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/o4-mini-high", + "openai/o4-mini-high": { Name: "OpenAI: o4 Mini High", Provider: "openai", ContextLength: 200000, @@ -2175,8 +2077,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/o3", + "openai/o3": { Name: "OpenAI: o3", Provider: "openai", ContextLength: 200000, @@ -2197,8 +2098,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/o4-mini", + "openai/o4-mini": { Name: "OpenAI: o4 Mini", Provider: "openai", ContextLength: 200000, @@ -2219,8 +2119,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/gpt-4.1", + "openai/gpt-4.1": { Name: "OpenAI: GPT-4.1", Provider: "openai", ContextLength: 1047576, @@ -2241,8 +2140,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-4.1-mini", + "openai/gpt-4.1-mini": { Name: "OpenAI: GPT-4.1 Mini", Provider: "openai", ContextLength: 1047576, @@ -2263,8 +2161,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-4.1-nano", + "openai/gpt-4.1-nano": { Name: "OpenAI: GPT-4.1 Nano", Provider: "openai", ContextLength: 1047576, @@ -2285,8 +2182,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "x-ai/grok-3-mini-beta", + "x-ai/grok-3-mini-beta": { Name: "xAI: Grok 3 Mini Beta", Provider: "x-ai", ContextLength: 131072, @@ -2307,8 +2203,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "x-ai/grok-3-beta", + "x-ai/grok-3-beta": { Name: "xAI: Grok 3 Beta", Provider: "x-ai", ContextLength: 131072, @@ -2329,8 +2224,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "meta-llama/llama-4-maverick", + "meta-llama/llama-4-maverick": { Name: "Meta: Llama 4 Maverick", Provider: "meta-llama", ContextLength: 1048576, @@ -2351,8 +2245,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "meta-llama/llama-4-scout", + "meta-llama/llama-4-scout": { Name: "Meta: Llama 4 Scout", Provider: "meta-llama", ContextLength: 327680, @@ -2373,8 +2266,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "deepseek/deepseek-chat-v3-0324", + "deepseek/deepseek-chat-v3-0324": { Name: "DeepSeek: DeepSeek V3 0324", Provider: "deepseek", ContextLength: 163840, @@ -2395,8 +2287,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "openai/o1-pro", + "openai/o1-pro": { Name: "OpenAI: o1-pro", Provider: "openai", ContextLength: 200000, @@ -2417,8 +2308,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "mistralai/mistral-small-3.1-24b-instruct", + "mistralai/mistral-small-3.1-24b-instruct": { Name: "Mistral: Mistral Small 3.1 24B", Provider: "mistralai", ContextLength: 128000, @@ -2439,8 +2329,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "google/gemma-3-4b-it:free", + "google/gemma-3-4b-it:free": { Name: "Google: Gemma 3 4B (free)", Provider: "google", ContextLength: 32768, @@ -2461,8 +2350,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "google/gemma-3-4b-it", + "google/gemma-3-4b-it": { Name: "Google: Gemma 3 4B", Provider: "google", ContextLength: 131072, @@ -2483,8 +2371,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "google/gemma-3-12b-it:free", + "google/gemma-3-12b-it:free": { Name: "Google: Gemma 3 12B (free)", Provider: "google", ContextLength: 32768, @@ -2505,8 +2392,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "google/gemma-3-12b-it", + "google/gemma-3-12b-it": { Name: "Google: Gemma 3 12B", Provider: "google", ContextLength: 131072, @@ -2527,8 +2413,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-4o-mini-search-preview", + "openai/gpt-4o-mini-search-preview": { Name: "OpenAI: GPT-4o-mini Search Preview", Provider: "openai", ContextLength: 128000, @@ -2549,8 +2434,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-4o-search-preview", + "openai/gpt-4o-search-preview": { Name: "OpenAI: GPT-4o Search Preview", Provider: "openai", ContextLength: 128000, @@ -2571,8 +2455,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "google/gemma-3-27b-it:free", + "google/gemma-3-27b-it:free": { Name: "Google: Gemma 3 27B (free)", Provider: "google", ContextLength: 131072, @@ -2593,8 +2476,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "google/gemma-3-27b-it", + "google/gemma-3-27b-it": { Name: "Google: Gemma 3 27B", Provider: "google", ContextLength: 131072, @@ -2615,8 +2497,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "perplexity/sonar-reasoning-pro", + "perplexity/sonar-reasoning-pro": { Name: "Perplexity: Sonar Reasoning Pro", Provider: "perplexity", ContextLength: 128000, @@ -2637,8 +2518,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "perplexity/sonar-pro", + "perplexity/sonar-pro": { Name: "Perplexity: Sonar Pro", Provider: "perplexity", ContextLength: 200000, @@ -2659,8 +2539,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "perplexity/sonar-deep-research", + "perplexity/sonar-deep-research": { Name: "Perplexity: Sonar Deep Research", Provider: "perplexity", ContextLength: 128000, @@ -2681,8 +2560,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "google/gemini-2.0-flash-lite-001", + "google/gemini-2.0-flash-lite-001": { Name: "Google: Gemini 2.0 Flash Lite", Provider: "google", ContextLength: 1048576, @@ -2703,8 +2581,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "anthropic/claude-3.7-sonnet", + "anthropic/claude-3.7-sonnet": { Name: "Anthropic: Claude 3.7 Sonnet", Provider: "anthropic", ContextLength: 200000, @@ -2725,8 +2602,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "anthropic/claude-3.7-sonnet:thinking", + "anthropic/claude-3.7-sonnet:thinking": { Name: "Anthropic: Claude 3.7 Sonnet (thinking)", Provider: "anthropic", ContextLength: 200000, @@ -2747,8 +2623,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "mistralai/mistral-saba", + "mistralai/mistral-saba": { Name: "Mistral: Saba", Provider: "mistralai", ContextLength: 32768, @@ -2769,8 +2644,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "meta-llama/llama-guard-3-8b", + "meta-llama/llama-guard-3-8b": { Name: "Llama Guard 3 8B", Provider: "meta-llama", ContextLength: 131072, @@ -2791,8 +2665,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/o3-mini-high", + "openai/o3-mini-high": { Name: "OpenAI: o3 Mini High", Provider: "openai", ContextLength: 200000, @@ -2813,8 +2686,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "google/gemini-2.0-flash-001", + "google/gemini-2.0-flash-001": { Name: "Google: Gemini 2.0 Flash", Provider: "google", ContextLength: 1048576, @@ -2835,8 +2707,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/o3-mini", + "openai/o3-mini": { Name: "OpenAI: o3 Mini", Provider: "openai", ContextLength: 200000, @@ -2857,8 +2728,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "mistralai/mistral-small-24b-instruct-2501", + "mistralai/mistral-small-24b-instruct-2501": { Name: "Mistral: Mistral Small 3", Provider: "mistralai", ContextLength: 32768, @@ -2879,8 +2749,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "deepseek/deepseek-r1-distill-qwen-32b", + "deepseek/deepseek-r1-distill-qwen-32b": { Name: "DeepSeek: R1 Distill Qwen 32B", Provider: "deepseek", ContextLength: 32768, @@ -2901,8 +2770,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "perplexity/sonar", + "perplexity/sonar": { Name: "Perplexity: Sonar", Provider: "perplexity", ContextLength: 127072, @@ -2923,8 +2791,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "deepseek/deepseek-r1-distill-llama-70b", + "deepseek/deepseek-r1-distill-llama-70b": { Name: "DeepSeek: R1 Distill Llama 70B", Provider: "deepseek", ContextLength: 131072, @@ -2945,8 +2812,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "deepseek/deepseek-r1", + "deepseek/deepseek-r1": { Name: "DeepSeek: R1", Provider: "deepseek", ContextLength: 64000, @@ -2967,8 +2833,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "deepseek/deepseek-chat", + "deepseek/deepseek-chat": { Name: "DeepSeek: DeepSeek V3", Provider: "deepseek", ContextLength: 163840, @@ -2989,8 +2854,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/o1", + "openai/o1": { Name: "OpenAI: o1", Provider: "openai", ContextLength: 200000, @@ -3011,8 +2875,7 @@ var generatedModels = []ModelDefinition{ Reasoning: true, }, }, - { - ID: "meta-llama/llama-3.3-70b-instruct:free", + "meta-llama/llama-3.3-70b-instruct:free": { Name: "Meta: Llama 3.3 70B Instruct (free)", Provider: "meta-llama", ContextLength: 65536, @@ -3033,8 +2896,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "meta-llama/llama-3.3-70b-instruct", + "meta-llama/llama-3.3-70b-instruct": { Name: "Meta: Llama 3.3 70B Instruct", Provider: "meta-llama", ContextLength: 131072, @@ -3055,8 +2917,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "amazon/nova-lite-v1", + "amazon/nova-lite-v1": { Name: "Amazon: Nova Lite 1.0", Provider: "amazon", ContextLength: 300000, @@ -3077,8 +2938,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "amazon/nova-micro-v1", + "amazon/nova-micro-v1": { Name: "Amazon: Nova Micro 1.0", Provider: "amazon", ContextLength: 128000, @@ -3099,8 +2959,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "amazon/nova-pro-v1", + "amazon/nova-pro-v1": { Name: "Amazon: Nova Pro 1.0", Provider: "amazon", ContextLength: 300000, @@ -3121,8 +2980,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-4o-2024-11-20", + "openai/gpt-4o-2024-11-20": { Name: "OpenAI: GPT-4o (2024-11-20)", Provider: "openai", ContextLength: 128000, @@ -3143,8 +3001,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "mistralai/mistral-large-2411", + "mistralai/mistral-large-2411": { Name: "Mistral Large 2411", Provider: "mistralai", ContextLength: 131072, @@ -3165,8 +3022,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "mistralai/mistral-large-2407", + "mistralai/mistral-large-2407": { Name: "Mistral Large 2407", Provider: "mistralai", ContextLength: 131072, @@ -3187,8 +3043,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "mistralai/pixtral-large-2411", + "mistralai/pixtral-large-2411": { Name: "Mistral: Pixtral Large 2411", Provider: "mistralai", ContextLength: 131072, @@ -3209,8 +3064,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "anthropic/claude-3.5-haiku", + "anthropic/claude-3.5-haiku": { Name: "Anthropic: Claude 3.5 Haiku", Provider: "anthropic", ContextLength: 200000, @@ -3231,52 +3085,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "meta-llama/llama-3.2-3b-instruct:free", - Name: "Meta: Llama 3.2 3B Instruct (free)", - Provider: "meta-llama", - ContextLength: 131072, - MaxOutputTokens: 0, - Supports: SupportedParameters{ - Temperature: true, - TopP: true, - TopK: true, - FrequencyPenalty: true, - PresencePenalty: true, - Stop: true, - Seed: false, - MaxTokens: true, - ToolChoice: false, - ParallelToolCalls: false, - ResponseFormat: false, - StructuredOutputs: false, - Reasoning: false, - }, - }, - { - ID: "meta-llama/llama-3.2-3b-instruct", - Name: "Meta: Llama 3.2 3B Instruct", - Provider: "meta-llama", - ContextLength: 80000, - MaxOutputTokens: 0, - Supports: SupportedParameters{ - Temperature: true, - TopP: true, - TopK: true, - FrequencyPenalty: true, - PresencePenalty: true, - Stop: false, - Seed: true, - MaxTokens: true, - ToolChoice: false, - ParallelToolCalls: false, - ResponseFormat: false, - StructuredOutputs: false, - Reasoning: false, - }, - }, - { - ID: "meta-llama/llama-3.2-1b-instruct", + "meta-llama/llama-3.2-1b-instruct": { Name: "Meta: Llama 3.2 1B Instruct", Provider: "meta-llama", ContextLength: 60000, @@ -3297,8 +3106,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "meta-llama/llama-3.2-11b-vision-instruct", + "meta-llama/llama-3.2-11b-vision-instruct": { Name: "Meta: Llama 3.2 11B Vision Instruct", Provider: "meta-llama", ContextLength: 131072, @@ -3319,8 +3127,49 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-4o-2024-08-06", + "meta-llama/llama-3.2-3b-instruct:free": { + Name: "Meta: Llama 3.2 3B Instruct (free)", + Provider: "meta-llama", + ContextLength: 131072, + MaxOutputTokens: 0, + Supports: SupportedParameters{ + Temperature: true, + TopP: true, + TopK: true, + FrequencyPenalty: true, + PresencePenalty: true, + Stop: true, + Seed: false, + MaxTokens: true, + ToolChoice: false, + ParallelToolCalls: false, + ResponseFormat: false, + StructuredOutputs: false, + Reasoning: false, + }, + }, + "meta-llama/llama-3.2-3b-instruct": { + Name: "Meta: Llama 3.2 3B Instruct", + Provider: "meta-llama", + ContextLength: 80000, + MaxOutputTokens: 0, + Supports: SupportedParameters{ + Temperature: true, + TopP: true, + TopK: true, + FrequencyPenalty: true, + PresencePenalty: true, + Stop: false, + Seed: true, + MaxTokens: true, + ToolChoice: false, + ParallelToolCalls: false, + ResponseFormat: false, + StructuredOutputs: false, + Reasoning: false, + }, + }, + "openai/gpt-4o-2024-08-06": { Name: "OpenAI: GPT-4o (2024-08-06)", Provider: "openai", ContextLength: 128000, @@ -3341,8 +3190,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "meta-llama/llama-3.1-8b-instruct", + "meta-llama/llama-3.1-8b-instruct": { Name: "Meta: Llama 3.1 8B Instruct", Provider: "meta-llama", ContextLength: 16384, @@ -3363,8 +3211,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "meta-llama/llama-3.1-70b-instruct", + "meta-llama/llama-3.1-70b-instruct": { Name: "Meta: Llama 3.1 70B Instruct", Provider: "meta-llama", ContextLength: 131072, @@ -3385,8 +3232,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "mistralai/mistral-nemo", + "mistralai/mistral-nemo": { Name: "Mistral: Mistral Nemo", Provider: "mistralai", ContextLength: 131072, @@ -3407,8 +3253,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-4o-mini-2024-07-18", + "openai/gpt-4o-mini-2024-07-18": { Name: "OpenAI: GPT-4o-mini (2024-07-18)", Provider: "openai", ContextLength: 128000, @@ -3429,8 +3274,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-4o-mini", + "openai/gpt-4o-mini": { Name: "OpenAI: GPT-4o-mini", Provider: "openai", ContextLength: 128000, @@ -3451,8 +3295,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "google/gemma-2-27b-it", + "google/gemma-2-27b-it": { Name: "Google: Gemma 2 27B", Provider: "google", ContextLength: 8192, @@ -3473,8 +3316,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "google/gemma-2-9b-it", + "google/gemma-2-9b-it": { Name: "Google: Gemma 2 9B", Provider: "google", ContextLength: 8192, @@ -3495,8 +3337,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-4o-2024-05-13", + "openai/gpt-4o-2024-05-13": { Name: "OpenAI: GPT-4o (2024-05-13)", Provider: "openai", ContextLength: 128000, @@ -3517,8 +3358,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-4o", + "openai/gpt-4o": { Name: "OpenAI: GPT-4o", Provider: "openai", ContextLength: 128000, @@ -3539,8 +3379,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-4o:extended", + "openai/gpt-4o:extended": { Name: "OpenAI: GPT-4o (extended)", Provider: "openai", ContextLength: 128000, @@ -3561,8 +3400,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "meta-llama/llama-3-8b-instruct", + "meta-llama/llama-3-8b-instruct": { Name: "Meta: Llama 3 8B Instruct", Provider: "meta-llama", ContextLength: 8192, @@ -3583,8 +3421,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "meta-llama/llama-3-70b-instruct", + "meta-llama/llama-3-70b-instruct": { Name: "Meta: Llama 3 70B Instruct", Provider: "meta-llama", ContextLength: 8192, @@ -3605,8 +3442,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "mistralai/mixtral-8x22b-instruct", + "mistralai/mixtral-8x22b-instruct": { Name: "Mistral: Mixtral 8x22B Instruct", Provider: "mistralai", ContextLength: 65536, @@ -3627,8 +3463,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-4-turbo", + "openai/gpt-4-turbo": { Name: "OpenAI: GPT-4 Turbo", Provider: "openai", ContextLength: 128000, @@ -3649,8 +3484,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "anthropic/claude-3-haiku", + "anthropic/claude-3-haiku": { Name: "Anthropic: Claude 3 Haiku", Provider: "anthropic", ContextLength: 200000, @@ -3671,8 +3505,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "mistralai/mistral-large", + "mistralai/mistral-large": { Name: "Mistral Large", Provider: "mistralai", ContextLength: 128000, @@ -3693,30 +3526,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-4-turbo-preview", - Name: "OpenAI: GPT-4 Turbo Preview", - Provider: "openai", - ContextLength: 128000, - MaxOutputTokens: 4096, - Supports: SupportedParameters{ - Temperature: true, - TopP: true, - TopK: false, - FrequencyPenalty: true, - PresencePenalty: true, - Stop: true, - Seed: true, - MaxTokens: true, - ToolChoice: true, - ParallelToolCalls: false, - ResponseFormat: true, - StructuredOutputs: true, - Reasoning: false, - }, - }, - { - ID: "openai/gpt-3.5-turbo-0613", + "openai/gpt-3.5-turbo-0613": { Name: "OpenAI: GPT-3.5 Turbo (older v0613)", Provider: "openai", ContextLength: 4095, @@ -3737,8 +3547,28 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "mistralai/mixtral-8x7b-instruct", + "openai/gpt-4-turbo-preview": { + Name: "OpenAI: GPT-4 Turbo Preview", + Provider: "openai", + ContextLength: 128000, + MaxOutputTokens: 4096, + Supports: SupportedParameters{ + Temperature: true, + TopP: true, + TopK: false, + FrequencyPenalty: true, + PresencePenalty: true, + Stop: true, + Seed: true, + MaxTokens: true, + ToolChoice: true, + ParallelToolCalls: false, + ResponseFormat: true, + StructuredOutputs: true, + Reasoning: false, + }, + }, + "mistralai/mixtral-8x7b-instruct": { Name: "Mistral: Mixtral 8x7B Instruct", Provider: "mistralai", ContextLength: 32768, @@ -3759,8 +3589,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-4-1106-preview", + "openai/gpt-4-1106-preview": { Name: "OpenAI: GPT-4 Turbo (older v1106)", Provider: "openai", ContextLength: 128000, @@ -3781,30 +3610,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-3.5-turbo-instruct", - Name: "OpenAI: GPT-3.5 Turbo Instruct", - Provider: "openai", - ContextLength: 4095, - MaxOutputTokens: 4096, - Supports: SupportedParameters{ - Temperature: true, - TopP: true, - TopK: false, - FrequencyPenalty: true, - PresencePenalty: true, - Stop: true, - Seed: true, - MaxTokens: true, - ToolChoice: false, - ParallelToolCalls: false, - ResponseFormat: true, - StructuredOutputs: true, - Reasoning: false, - }, - }, - { - ID: "mistralai/mistral-7b-instruct-v0.1", + "mistralai/mistral-7b-instruct-v0.1": { Name: "Mistral: Mistral 7B Instruct v0.1", Provider: "mistralai", ContextLength: 2824, @@ -3825,8 +3631,28 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-3.5-turbo-16k", + "openai/gpt-3.5-turbo-instruct": { + Name: "OpenAI: GPT-3.5 Turbo Instruct", + Provider: "openai", + ContextLength: 4095, + MaxOutputTokens: 4096, + Supports: SupportedParameters{ + Temperature: true, + TopP: true, + TopK: false, + FrequencyPenalty: true, + PresencePenalty: true, + Stop: true, + Seed: true, + MaxTokens: true, + ToolChoice: false, + ParallelToolCalls: false, + ResponseFormat: true, + StructuredOutputs: true, + Reasoning: false, + }, + }, + "openai/gpt-3.5-turbo-16k": { Name: "OpenAI: GPT-3.5 Turbo 16k", Provider: "openai", ContextLength: 16385, @@ -3847,8 +3673,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-4-0314", + "openai/gpt-4-0314": { Name: "OpenAI: GPT-4 (older v0314)", Provider: "openai", ContextLength: 8191, @@ -3869,30 +3694,7 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, - { - ID: "openai/gpt-4", - Name: "OpenAI: GPT-4", - Provider: "openai", - ContextLength: 8191, - MaxOutputTokens: 4096, - Supports: SupportedParameters{ - Temperature: true, - TopP: true, - TopK: false, - FrequencyPenalty: true, - PresencePenalty: true, - Stop: true, - Seed: true, - MaxTokens: true, - ToolChoice: true, - ParallelToolCalls: false, - ResponseFormat: true, - StructuredOutputs: true, - Reasoning: false, - }, - }, - { - ID: "openai/gpt-3.5-turbo", + "openai/gpt-3.5-turbo": { Name: "OpenAI: GPT-3.5 Turbo", Provider: "openai", ContextLength: 16385, @@ -3913,4 +3715,25 @@ var generatedModels = []ModelDefinition{ Reasoning: false, }, }, + "openai/gpt-4": { + Name: "OpenAI: GPT-4", + Provider: "openai", + ContextLength: 8191, + MaxOutputTokens: 4096, + Supports: SupportedParameters{ + Temperature: true, + TopP: true, + TopK: false, + FrequencyPenalty: true, + PresencePenalty: true, + Stop: true, + Seed: true, + MaxTokens: true, + ToolChoice: true, + ParallelToolCalls: false, + ResponseFormat: true, + StructuredOutputs: true, + Reasoning: false, + }, + }, }