diff --git a/crates/goose-cli/src/commands/configure.rs b/crates/goose-cli/src/commands/configure.rs index 407d755d748c..b6ae23df2674 100644 --- a/crates/goose-cli/src/commands/configure.rs +++ b/crates/goose-cli/src/commands/configure.rs @@ -576,7 +576,7 @@ pub async fn configure_provider_dialog() -> anyhow::Result { let models_res = { let temp_model_config = ModelConfig::new(&provider_meta.default_model)?; let temp_provider = create(provider_name, temp_model_config).await?; - temp_provider.fetch_supported_models().await + temp_provider.fetch_recommended_models().await }; spin.stop(style("Model fetch complete").green()); diff --git a/crates/goose-server/src/routes/config_management.rs b/crates/goose-server/src/routes/config_management.rs index 3b4848bf5a06..c70a1bb9db01 100644 --- a/crates/goose-server/src/routes/config_management.rs +++ b/crates/goose-server/src/routes/config_management.rs @@ -392,7 +392,9 @@ pub async fn get_provider_models( .await .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; - match provider.fetch_supported_models().await { + let models_result = provider.fetch_recommended_models().await; + + match models_result { Ok(Some(models)) => Ok(Json(models)), Ok(None) => Ok(Json(Vec::new())), Err(provider_error) => { diff --git a/crates/goose/canonical_mapping_report.json b/crates/goose/canonical_mapping_report.json new file mode 100644 index 000000000000..79c03c3b9e8c --- /dev/null +++ b/crates/goose/canonical_mapping_report.json @@ -0,0 +1,4413 @@ +{ + "timestamp": "2025-11-12T18:31:21.379526+00:00", + "unmapped_models": [ + { + "provider": "openai", + "model": "ada:ft-square-2023-01-20-06-09-37" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-03-22-57-10" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-03-23-17-02" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-03-23-39-19" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-00-06-28" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-00-26-44" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-01-04-45" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-01-25-59" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-01-35-31" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-01-49-59" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-01-52-25" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-01-53-11" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-01-54-49" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-01-56-59" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-01-58-41" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-02-00-26" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-02-02-17" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-02-03-39" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-02-05-16" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-02-06-44" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-02-08-18" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-22-05-09-46" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-22-05-27-21" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-27-17-40-56" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-27-19-20-20" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-27-19-35-21" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-27-21-26-06" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-03-01-19-58-17" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-03-02-11-40-22" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-03-02-16-01-19" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-03-06-11-43-24" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-04-05-18-59-44" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-06-14-21-43-36" + }, + { + "provider": "openai", + "model": "ada:ft-square:ada-fine-tuned-pb-books-2023-06-10-01-41-30" + }, + { + "provider": "openai", + "model": "ada:ft-square:get-classify-test-1-2023-03-01-22-20-54" + }, + { + "provider": "openai", + "model": "ada:ft-square:get-classify-test-2-2023-03-01-23-00-30" + }, + { + "provider": "openai", + "model": "ada:ft-square:latha-2023-06-07-06-56-00" + }, + { + "provider": "openai", + "model": "ada:ft-square:mcc-from-items-2023-03-09-23-20-33" + }, + { + "provider": "openai", + "model": "ada:ft-square:mcc-from-items-2023-03-10-02-02-01" + }, + { + "provider": "openai", + "model": "ada:ft-square:sq-interview-rubrics-2023-03-01-23-25-00" + }, + { + "provider": "openai", + "model": "ada:ft-square:test-2023-06-07-07-05-04" + }, + { + "provider": "openai", + "model": "babbage-002" + }, + { + "provider": "openai", + "model": "babbage:ft-square-2023-02-28-14-48-38" + }, + { + "provider": "openai", + "model": "codex-mini-latest" + }, + { + "provider": "openai", + "model": "computer-use-preview" + }, + { + "provider": "openai", + "model": "computer-use-preview-2025-03-11" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-01-04-00-17-01" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-03-20-54-03" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-03-22-00-22" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-03-23-12-33" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-03-23-38-15" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-03-23-50-25" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-03-23-56-35" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-04-00-10-16" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-04-00-30-47" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-04-01-10-58" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-14-03-10-35" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-14-05-13-05" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-24-12-25-24" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-24-13-42-34" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-24-16-41-35" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-24-18-12-55" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-27-22-00-27" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-28-12-28-40" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-28-16-08-29" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-28-23-14-48" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-03-02-01-48-30" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-03-02-13-12-20" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-03-02-16-17-24" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-03-06-14-16-22" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-03-09-04-37-07" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-04-05-19-33-31" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-04-05-23-44-20" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-05-01-19-30-51" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-05-02-16-19-15" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-06-08-20-11-11" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-06-12-14-33-09" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-06-14-22-55-22" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-06-14-23-23-37" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-06-14-23-25-31" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-06-14-23-37-23" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-06-15-14-24-56" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-06-15-15-16-31" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-06-15-15-21-41" + }, + { + "provider": "openai", + "model": "curie:ft-square:andrewbyers-iso-dates-2-2023-06-09-19-23-52" + }, + { + "provider": "openai", + "model": "curie:ft-square:andrewbyers-iso-dates-2023-06-09-16-22-54" + }, + { + "provider": "openai", + "model": "curie:ft-square:bartosz-2023-06-15-16-50-00" + }, + { + "provider": "openai", + "model": "curie:ft-square:bartosz-2023-06-15-17-40-30" + }, + { + "provider": "openai", + "model": "dall-e-2" + }, + { + "provider": "openai", + "model": "dall-e-3" + }, + { + "provider": "openai", + "model": "davinci-002" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-01-31-46" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-01-35-06" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-01-38-32" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-19-52-40" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-19-56-06" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-19-58-46" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-20-02-03" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-20-05-47" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-20-11-53" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-20-15-38" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-24-18-22-49" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-27-19-06-04" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-27-20-03-10" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-27-20-43-03" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-27-21-15-51" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-27-21-56-57" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-27-23-00-36" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-28-15-35-39" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-28-22-02-29" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-01-01-34-16" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-01-04-50-27" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-01-21-52-35" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-01-23-53-42" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-02-06-29-26" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-02-07-43-23" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-02-08-33-27" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-02-09-27-04" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-02-19-42-43" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-02-23-34-00" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-02-23-40-51" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-02-23-46-02" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-02-23-54-35" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-03-01-26-16" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-06-07-40-58" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-05-02-17-37-42" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-06-03-01-27-58" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-06-03-02-41-38" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-06-04-20-17-25" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-07-31-06-04-37" + }, + { + "provider": "openai", + "model": "davinci:ft-square:conversational-ordering-2023-03-01-03-35-26" + }, + { + "provider": "openai", + "model": "davinci:ft-square:conversational-ordering-2023-03-01-19-34-59" + }, + { + "provider": "openai", + "model": "davinci:ft-square:martech-fox-2023-07-03-12-08-51" + }, + { + "provider": "openai", + "model": "davinci:ft-square:ppg-1-2023-03-03-22-44-53" + }, + { + "provider": "openai", + "model": "davinci:ft-square:ppg-2-2023-03-04-00-09-06" + }, + { + "provider": "openai", + "model": "davinci:ft-square:product-descriptions-1-2023-02-18-02-01-38" + }, + { + "provider": "openai", + "model": "davinci:ft-square:product-descriptions-2023-02-18-01-37-53" + }, + { + "provider": "openai", + "model": "davinci:ft-square:sq-interview-rubrics-2023-03-01-06-12-57" + }, + { + "provider": "openai", + "model": "davinci:ft-square:test-2023-06-02-21-46-09" + }, + { + "provider": "openai", + "model": "davinci:ft-square:test-2023-06-07-07-18-50" + }, + { + "provider": "openai", + "model": "davinci:ft-square:testmodel-2023-06-09-06-33-46" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::979OeECc" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::979X87hI" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::979tUAKY" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::9BaZ6utW" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::9BaZ962b:ckpt-step-418" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::9BaZ9TI9:ckpt-step-1254" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::9BaZ9yXw:ckpt-step-836" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::9f7y6Fq3:ckpt-step-132" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::9f7y6d94:ckpt-step-66" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::9f7y6tDo" + }, + { + "provider": "openai", + "model": "ft:davinci-002:square::8IHIFNF8" + }, + { + "provider": "openai", + "model": "ft:davinci-002:square::979av0Ca" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9BdO7p4k" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9BdO9dyB:ckpt-step-418" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9BdOAZhy:ckpt-step-1254" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9BdOAzyd:ckpt-step-836" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9BdjnxSh" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9Bdjq2HN:ckpt-step-836" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9BdjqEL2:ckpt-step-418" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9BdjqWL2:ckpt-step-1254" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9CBYL14U" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9CBYOIYz:ckpt-step-531" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9CBYOe1X:ckpt-step-1062" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9CBYPJjH:ckpt-step-1593" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9dWw13R5:ckpt-step-531" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9dWw21NB:ckpt-step-1062" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9dWw2Jmx" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9w2wKEHK:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9w2wKRUk" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9w2wKfxt:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9wDsxF0M:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9wDsxJU5" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9wDsxcuJ:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9wLTi98n:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9wLTiHPk:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9wLTiuf3" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A1oa308p:ckpt-step-768" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A1oa4UVH:ckpt-step-1536" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A1oa4fY2" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A21LQ3B7:ckpt-step-1536" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A21LQjft:ckpt-step-768" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A21LRYaU" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A3F6X0tu:ckpt-step-906" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A3F6XYh7:ckpt-step-1812" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A3F6YGI4" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A3F7A46A:ckpt-step-906" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A3F7AHaO:ckpt-step-1812" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A3F7AoD8" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::BDIOxNBa" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::BDIOxtLv:ckpt-step-499" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::BDIOxz40:ckpt-step-998" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::BDIbgGdy" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::BDM8mQGM" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::BDQoyuDs" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::BPmNgoWc:ckpt-step-80" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::BPmNj3MY:ckpt-step-90" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::BPmNkBwY" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square:regex-generator:BV3pHd69" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square:regex-generator:BV3pHfFP:ckpt-step-608" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square:regex-generator:BV3pHz34:ckpt-step-304" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0613:square::7xkXhz2F" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0613:square:recipe-ner:8m9bUTJB" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square::8INlSFiD" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square::8IittuHW" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square::8VQq2h9i" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:presale-prod-update:A1VCz1Ng:ckpt-step-772" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:presale-prod-update:A1VCz1dF" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:presale-prod-update:A1VCzSam:ckpt-step-1544" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9esUGGea:ckpt-step-1522" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9esUGnko" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9f8il0PV" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9f8iljLm:ckpt-step-1611" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9f9O9vmz:ckpt-step-751" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9f9OA72b:ckpt-step-1502" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9f9OAsBX" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9fAO711i:ckpt-step-753" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9fAO71NV" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9fAO7nhv:ckpt-step-1506" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9fB61NQG" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9fB61ZZn:ckpt-step-1520" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9fB61cPW:ckpt-step-760" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9fCbI5U9" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9fCbICqK:ckpt-step-761" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-pm-35:9djnKK85:ckpt-step-1533" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-pm-35:9djnL0G0" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9BpIi1ah" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9BpIlVui:ckpt-step-418" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9BpIle5X:ckpt-step-836" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9BpImGbJ:ckpt-step-1254" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9CERwrnZ" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9CERyuVp:ckpt-step-531" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9CERz6l4:ckpt-step-1593" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9CERzjIk:ckpt-step-1062" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9dWi6cve:ckpt-step-531" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9dWi7AH4" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9dWi7d0k:ckpt-step-1062" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9wGGcJwE:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9wGGceZ1:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9wGGcsCI" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9wLlEcBS:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9wLlFM71" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9wLlFtmK:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9wP6wXmY:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9wP6xJ7K" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9wP6xUW9:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9yR6Pmck:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9yR6Q01x" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9yR6QRCI:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9ySoC7vZ" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9ySoC9RL:ckpt-step-1482" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9ySoCHH9:ckpt-step-741" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::A1os36ZY:ckpt-step-768" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::A1os3SzM:ckpt-step-1536" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::A1os4RF0" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:g11n-helper:ALxGZf5Y:ckpt-step-54" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:g11n-helper:ALxGaifK:ckpt-step-72" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:g11n-helper:ALxGasbI" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:presale-prod-update:A1VkM3KW:ckpt-step-772" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:presale-prod-update:A1VkMPxN:ckpt-step-1544" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:presale-prod-update:A1VkMugi" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:tarkin:9a8eE6A4:ckpt-step-763" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:tarkin:9a8eEWdX" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:tarkin:9a8eEkGS:ckpt-step-1526" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:tarkin:9aDzHMdR:ckpt-step-3054" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:tarkin:9aDzHdca:ckpt-step-1527" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:tarkin:9aDzI3c1" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:tarkin:9ckg06KE:ckpt-step-70636" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:tarkin:9ckg06yx:ckpt-step-35318" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:tarkin:9ckg1W41" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-2025-04-14:square:hotel-sys-design:Bn8TRXx7:ckpt-step-77" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-2025-04-14:square:hotel-sys-design:Bn8TSnvc" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-2025-04-14:square:hotel-sys-design:Bn8TSuqu:ckpt-step-88" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-2025-04-14:square:picasso-tbl:Be4ohJ5c:ckpt-step-555" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-2025-04-14:square:picasso-tbl:Be4okWcV" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-2025-04-14:square:picasso-tbl:Be4okcLm:ckpt-step-1110" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-mini-2025-04-14:square::BmTIcrto:ckpt-step-666" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-mini-2025-04-14:square::BmTIfHgD" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-mini-2025-04-14:square::BmTIfv3N:ckpt-step-1332" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-mini-2025-04-14:square::BwjlIHbe" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-mini-2025-04-14:square::BwjlIMor:ckpt-step-1018" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-nano-2025-04-14:square:qliao-plathelp-v1:CRNAywx8" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9eTWHHtG" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9eTWHI2d:ckpt-step-80" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9eTWHWR7:ckpt-step-90" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9eoDA1QR:ckpt-step-32" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9eoDARki" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9eoDAkYo:ckpt-step-64" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9eqA79i0:ckpt-step-59" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9eqA8TBe:ckpt-step-118" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9eqA8pCn" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9hgDsAHH:ckpt-step-66" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9hgDsHOi:ckpt-step-132" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9hgDtDpP" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9yPneKZF:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9yPnf26m:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9yPnfZ3w" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:pfi-golang:9smel7hl:ckpt-step-434" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:pfi-golang:9smelXOJ" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:pfi-golang:9smeltpg:ckpt-step-217" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:pfi:9sjuwq38:ckpt-step-505" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:pfi:9sjux561" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:pfi:9sjuxLbk:ckpt-step-1010" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9e48jPvC:ckpt-step-1510" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9e48kfSc" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9e4FyHOk:ckpt-step-528" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9e4FzikM:ckpt-step-1056" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9e4Fzzq8" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9e6FlhBM" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9e6Flnjr:ckpt-step-1526" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9e8EgHNk" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9e8Egd2H:ckpt-step-1526" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9ePrc2Qr" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9ePrcUgW:ckpt-step-1524" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmac:9eSm4CmX:ckpt-step-1513" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmac:9eSm4Nvi" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmac:9eVTYdgL:ckpt-step-1513" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmac:9eVTZNWy" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmac:9ellv805:ckpt-step-812" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmac:9ellvsEx" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmar:9gCyNcoZ:ckpt-step-753" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmar:9gCyOII4" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmar:9gCyOTcP:ckpt-step-1506" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmar:9gEX8El2:ckpt-step-1552" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmar:9gEX9ft2" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmas:9eq84If3" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmas:9eq84hU9:ckpt-step-1522" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-full-meal:9e2Qax41:ckpt-step-528" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-full-meal:9e2Qb1sn" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-full-meal:9e2QbHP1:ckpt-step-1056" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-piece-meal:9dgu0Q1g:ckpt-step-1533" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-piece-meal:9dgu1KXd" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-pm-4o:9dkScYcs" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-pm-4o:9dkScysk:ckpt-step-1533" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin:9dfz3A8x" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:test-ft:9e4bJAtq:ckpt-step-27" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:test-ft:9e4bKBv0:ckpt-step-54" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:test-ft:9e4bKlvw" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:thunderbird:9bd8MQGp:ckpt-step-88" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:thunderbird:9bd8NB8K" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:thunderbird:9bd8NX77:ckpt-step-132" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:12-21-24:Ah0F4uLP:ckpt-step-185" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:12-21-24:Ah0FNFHQ:ckpt-step-370" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:12-21-24:Ah0FNFS1" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::9yOpXJbd:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::9yOpXVGv" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::9yOpXmyQ:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::9yWRL773:ckpt-step-1482" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::9yWRLeLB:ckpt-step-741" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::9yWRM8Zn" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A1pIt632" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A1pItfDC:ckpt-step-1536" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A1pItofx:ckpt-step-768" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A218TwmT:ckpt-step-768" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A218UZjU:ckpt-step-1536" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A218UzZf" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A3FCYhcv:ckpt-step-906" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A3FCYpNh:ckpt-step-1812" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A3FCZe3h" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A6lkYKvg:ckpt-step-80" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A6lkYTPi:ckpt-step-90" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A6lkZ4nA" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADYnVcKn:ckpt-step-153" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADYnWDpr:ckpt-step-306" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADYnWF7g" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADcZL13Y:ckpt-step-149" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADcZLJjk:ckpt-step-298" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADcZMaZB" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADdWL6S7:ckpt-step-149" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADdWLGiA:ckpt-step-298" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADdWLpNL" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADv4G9ED:ckpt-step-310" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADv4GfJI" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADv4GslV:ckpt-step-155" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AFvffbd6:ckpt-step-60" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AFvfgOvb" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AFvfgYxS:ckpt-step-75" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AIrPDXh4:ckpt-step-70" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AIrPE1Jn:ckpt-step-84" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AIrPFDOA" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AIrRI7Py" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AIrRIbun:ckpt-step-70" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AIrRIz3n:ckpt-step-84" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AJPMFYjn:ckpt-step-70" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AJPMSMwR:ckpt-step-84" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AJPMTSQg" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALDZQz9s:ckpt-step-57" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALDZbB0b:ckpt-step-57" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALDZlhsT:ckpt-step-57" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALDZrh8z:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALDZrhRU:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALDZrhWY:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALDZs4af" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALDZsBZ7" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALDZsiMB" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALelRGKV:ckpt-step-75" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALelRQjh:ckpt-step-50" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALelSl5l" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALfXG00U:ckpt-step-26" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALfXHUyM" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALfXHdnT:ckpt-step-52" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AM3Kk6bJ:ckpt-step-57" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AM3Km10T:ckpt-step-114" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AM3KmncS" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMHzrhbX:ckpt-step-58" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI02GZM:ckpt-step-58" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0CTR7:ckpt-step-58" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0MEJb:ckpt-step-116" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0MZIn:ckpt-step-116" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0MbSE:ckpt-step-116" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0NAKb:ckpt-step-116" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0NGtf" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0NZqn:ckpt-step-58" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0NfHv" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0Nkxa" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0NxXJ" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMgDbCpJ:ckpt-step-61" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMgDmR8i:ckpt-step-61" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMgDwgwF:ckpt-step-61" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMgE01SL" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMgE0Zqi" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMgE0dya:ckpt-step-122" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMgE0l6B" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMgE0lmy:ckpt-step-122" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMgE0x9A:ckpt-step-122" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANBhCPM4:ckpt-step-71" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANBhNQrL:ckpt-step-71" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANBhXvS0:ckpt-step-71" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANBheCpk:ckpt-step-142" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANBheHqF:ckpt-step-142" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANBhelmB:ckpt-step-142" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANBhfHg0" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANBhfP3K" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANBhfWTj" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANR81FlE:ckpt-step-71" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANR8340Y" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANR83UMp:ckpt-step-142" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANWxC4R0:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANWxMc5r:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANWxWkuX:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANWxb3ul" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANWxbR1m:ckpt-step-152" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANWxbZ7u:ckpt-step-152" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANWxbueA:ckpt-step-152" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANWxbx9d" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANWxcbir" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANnTNQfB:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANnTXwXd:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANnTeBFW:ckpt-step-152" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANnTeWRz" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANnTedmK:ckpt-step-152" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANnTenB6" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANq2D506:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANq2OJoT:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANq2Ykg1:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANq2f35h:ckpt-step-152" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANq2fWSn:ckpt-step-152" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANq2fkPg:ckpt-step-152" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANq2g1fc" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANq2g4RI" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANq2gT5D" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::BDcdETt3" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::BDgw3aRR:ckpt-step-770" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::BDgwAYDm" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:presale-prod-update:A1VLdLFo:ckpt-step-772" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:presale-prod-update:A1VLdpp9:ckpt-step-1544" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:presale-prod-update:A1VLef0R" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-1-3-2025-733pm:Aln8wDEd:ckpt-step-57" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-1-3-2025-733pm:Aln99EJs:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-1-3-2025-733pm:Aln99po1" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-1-3-2025:AljIGSIY:ckpt-step-114" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-1-3-2025:AljIUDTx:ckpt-step-228" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-1-3-2025:AljIUw1E" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-4o-beta1:AU2gb0ZW:ckpt-step-99" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-4o-beta1:AU2glfI3:ckpt-step-99" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-4o-beta1:AU2goBN9:ckpt-step-198" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-4o-beta1:AU2goRoo:ckpt-step-198" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-4o-beta1:AU2gpUkI" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-4o-beta1:AU2gpkQO" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uipath:AStGEJCN:ckpt-step-140" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uipath:AStGEPHu" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uipath:AStGErTc:ckpt-step-70" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::9yQURl9e:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::9yQUS8UO" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::9yQUSboN:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::9yS9rcIf:ckpt-step-741" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::9yS9sWBR:ckpt-step-1482" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::9yS9sZgG" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::9yYfNBYp" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::9yYfNYZR:ckpt-step-741" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::9yYfNa27:ckpt-step-1482" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::A1o0y9c3:ckpt-step-1536" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::A1o0yYU0" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::A1o0yoGv:ckpt-step-768" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::A20kHEh1:ckpt-step-1536" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::A20kHL5C" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::A20kHQH6:ckpt-step-768" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::A3Ew9LPO:ckpt-step-1812" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::A3Ew9Pfa:ckpt-step-906" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::A3EwAWC6" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::C9PyMpaX:ckpt-step-926" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::C9PyNU6h" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:merchant-mappings-v1:BVLby6lj:ckpt-step-80" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:merchant-mappings-v1:BVLc6ocQ:ckpt-step-90" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:merchant-mappings-v1:BVLc6zzK" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:merchant-tokens:BUsD3Vq9" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:presale-prod-update:A1V43nWF:ckpt-step-772" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:presale-prod-update:A1V44IqT" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:presale-prod-update:A1V44Vjp:ckpt-step-1544" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:ql-plathelp-241:CRPREgy9:ckpt-step-241" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:ql-plathelp-241:CRPRFEus:ckpt-step-482" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:ql-plathelp-241:CRPRGYXt" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:support-250:Ao0TXJT1:ckpt-step-250" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:support-250:Ao0TYWiG" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:support-250:Ao0TYf9o:ckpt-step-500" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:support-50:AnziWXoE:ckpt-step-50" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:support-50:AnziY3TM" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:support-50:AnziYbeg:ckpt-step-100" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:tarkin:9ozEIZnh:ckpt-step-1751" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:tarkin:9ozEMo2r" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:tarkin:9qecJUHK:ckpt-step-2223" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:tarkin:9qecJuVm" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:tarkin:9qvs9txe:ckpt-step-2241" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:tarkin:9qvsAbS8" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:tarkin:9rJTBC8M:ckpt-step-2241" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:tarkin:9rJTCzuI" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-audio-preview" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-audio-preview-2024-12-17" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-realtime-preview" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-realtime-preview-2024-12-17" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-transcribe" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-tts" + }, + { + "provider": "openai", + "model": "gpt-4o-realtime-preview" + }, + { + "provider": "openai", + "model": "gpt-4o-realtime-preview-2024-10-01" + }, + { + "provider": "openai", + "model": "gpt-4o-realtime-preview-2024-12-17" + }, + { + "provider": "openai", + "model": "gpt-4o-realtime-preview-2025-06-03" + }, + { + "provider": "openai", + "model": "gpt-4o-transcribe" + }, + { + "provider": "openai", + "model": "gpt-4o-transcribe-diarize" + }, + { + "provider": "openai", + "model": "gpt-5-chat-latest" + }, + { + "provider": "openai", + "model": "gpt-5-search-api" + }, + { + "provider": "openai", + "model": "gpt-5-search-api-2025-10-14" + }, + { + "provider": "openai", + "model": "gpt-audio" + }, + { + "provider": "openai", + "model": "gpt-audio-2025-08-28" + }, + { + "provider": "openai", + "model": "gpt-audio-mini" + }, + { + "provider": "openai", + "model": "gpt-audio-mini-2025-10-06" + }, + { + "provider": "openai", + "model": "gpt-image-1" + }, + { + "provider": "openai", + "model": "gpt-image-1-mini" + }, + { + "provider": "openai", + "model": "gpt-realtime" + }, + { + "provider": "openai", + "model": "gpt-realtime-2025-08-28" + }, + { + "provider": "openai", + "model": "gpt-realtime-mini" + }, + { + "provider": "openai", + "model": "gpt-realtime-mini-2025-10-06" + }, + { + "provider": "openai", + "model": "o1-mini" + }, + { + "provider": "openai", + "model": "o1-mini-2024-09-12" + }, + { + "provider": "openai", + "model": "omni-moderation-2024-09-26" + }, + { + "provider": "openai", + "model": "omni-moderation-latest" + }, + { + "provider": "openai", + "model": "sora-2" + }, + { + "provider": "openai", + "model": "sora-2-pro" + }, + { + "provider": "openai", + "model": "text-embedding-3-large" + }, + { + "provider": "openai", + "model": "text-embedding-3-small" + }, + { + "provider": "openai", + "model": "text-embedding-ada-002" + }, + { + "provider": "openai", + "model": "tts-1" + }, + { + "provider": "openai", + "model": "tts-1-1106" + }, + { + "provider": "openai", + "model": "tts-1-hd" + }, + { + "provider": "openai", + "model": "tts-1-hd-1106" + }, + { + "provider": "openai", + "model": "whisper-1" + }, + { + "provider": "openrouter", + "model": "ai21/jamba-large-1.7" + }, + { + "provider": "openrouter", + "model": "ai21/jamba-mini-1.7" + }, + { + "provider": "openrouter", + "model": "alibaba/tongyi-deepresearch-30b-a3b" + }, + { + "provider": "openrouter", + "model": "alibaba/tongyi-deepresearch-30b-a3b:free" + }, + { + "provider": "openrouter", + "model": "amazon/nova-lite-v1" + }, + { + "provider": "openrouter", + "model": "amazon/nova-micro-v1" + }, + { + "provider": "openrouter", + "model": "amazon/nova-premier-v1" + }, + { + "provider": "openrouter", + "model": "amazon/nova-pro-v1" + }, + { + "provider": "openrouter", + "model": "arcee-ai/virtuoso-large" + }, + { + "provider": "openrouter", + "model": "baidu/ernie-4.5-21b-a3b" + }, + { + "provider": "openrouter", + "model": "baidu/ernie-4.5-vl-28b-a3b" + }, + { + "provider": "openrouter", + "model": "cohere/command-r-08-2024" + }, + { + "provider": "openrouter", + "model": "cohere/command-r-plus-08-2024" + }, + { + "provider": "openrouter", + "model": "deepcogito/cogito-v2-preview-llama-109b-moe" + }, + { + "provider": "openrouter", + "model": "deepcogito/cogito-v2-preview-llama-405b" + }, + { + "provider": "openrouter", + "model": "deepcogito/cogito-v2-preview-llama-70b" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-chat" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-chat-v3-0324" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-chat-v3-0324:free" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-chat-v3.1" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-r1" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-r1-0528" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-r1-distill-llama-70b" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-v3.1-terminus" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-v3.1-terminus:exacto" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-v3.2-exp" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.0-flash-exp:free" + }, + { + "provider": "openrouter", + "model": "inception/mercury" + }, + { + "provider": "openrouter", + "model": "inception/mercury-coder" + }, + { + "provider": "openrouter", + "model": "inclusionai/ling-1t" + }, + { + "provider": "openrouter", + "model": "inclusionai/ring-1t" + }, + { + "provider": "openrouter", + "model": "kwaipilot/kat-coder-pro:free" + }, + { + "provider": "openrouter", + "model": "meituan/longcat-flash-chat:free" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3-70b-instruct" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3-8b-instruct" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3.1-405b-instruct" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3.1-70b-instruct" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3.1-8b-instruct" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3.2-3b-instruct" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3.3-70b-instruct" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3.3-70b-instruct:free" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3.3-8b-instruct:free" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-4-maverick" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-4-maverick:free" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-4-scout" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-4-scout:free" + }, + { + "provider": "openrouter", + "model": "microsoft/phi-3-medium-128k-instruct" + }, + { + "provider": "openrouter", + "model": "microsoft/phi-3-mini-128k-instruct" + }, + { + "provider": "openrouter", + "model": "microsoft/phi-3.5-mini-128k-instruct" + }, + { + "provider": "openrouter", + "model": "minimax/minimax-m1" + }, + { + "provider": "openrouter", + "model": "minimax/minimax-m2" + }, + { + "provider": "openrouter", + "model": "mistralai/codestral-2501" + }, + { + "provider": "openrouter", + "model": "mistralai/codestral-2508" + }, + { + "provider": "openrouter", + "model": "mistralai/devstral-medium" + }, + { + "provider": "openrouter", + "model": "mistralai/devstral-small" + }, + { + "provider": "openrouter", + "model": "mistralai/devstral-small-2505" + }, + { + "provider": "openrouter", + "model": "mistralai/magistral-medium-2506" + }, + { + "provider": "openrouter", + "model": "mistralai/magistral-medium-2506:thinking" + }, + { + "provider": "openrouter", + "model": "mistralai/magistral-small-2506" + }, + { + "provider": "openrouter", + "model": "mistralai/ministral-3b" + }, + { + "provider": "openrouter", + "model": "mistralai/ministral-8b" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-7b-instruct" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-7b-instruct-v0.1" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-7b-instruct:free" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-large" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-large-2407" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-large-2411" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-medium-3" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-medium-3.1" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-nemo" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-saba" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-small" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-small-24b-instruct-2501" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-small-3.1-24b-instruct" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-small-3.1-24b-instruct:free" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-small-3.2-24b-instruct" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-small-3.2-24b-instruct:free" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-tiny" + }, + { + "provider": "openrouter", + "model": "mistralai/mixtral-8x22b-instruct" + }, + { + "provider": "openrouter", + "model": "mistralai/mixtral-8x7b-instruct" + }, + { + "provider": "openrouter", + "model": "mistralai/pixtral-12b" + }, + { + "provider": "openrouter", + "model": "mistralai/pixtral-large-2411" + }, + { + "provider": "openrouter", + "model": "mistralai/voxtral-small-24b-2507" + }, + { + "provider": "openrouter", + "model": "moonshotai/kimi-k2" + }, + { + "provider": "openrouter", + "model": "moonshotai/kimi-k2-0905" + }, + { + "provider": "openrouter", + "model": "moonshotai/kimi-k2-0905:exacto" + }, + { + "provider": "openrouter", + "model": "moonshotai/kimi-k2-thinking" + }, + { + "provider": "openrouter", + "model": "nousresearch/deephermes-3-mistral-24b-preview" + }, + { + "provider": "openrouter", + "model": "nousresearch/hermes-3-llama-3.1-70b" + }, + { + "provider": "openrouter", + "model": "nousresearch/hermes-4-405b" + }, + { + "provider": "openrouter", + "model": "nousresearch/hermes-4-70b" + }, + { + "provider": "openrouter", + "model": "nvidia/llama-3.1-nemotron-70b-instruct" + }, + { + "provider": "openrouter", + "model": "nvidia/llama-3.3-nemotron-super-49b-v1.5" + }, + { + "provider": "openrouter", + "model": "nvidia/nemotron-nano-12b-v2-vl:free" + }, + { + "provider": "openrouter", + "model": "nvidia/nemotron-nano-9b-v2" + }, + { + "provider": "openrouter", + "model": "nvidia/nemotron-nano-9b-v2:free" + }, + { + "provider": "openrouter", + "model": "openai/gpt-oss-20b:free" + }, + { + "provider": "openrouter", + "model": "openrouter/polaris-alpha" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-2.5-72b-instruct" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-2.5-7b-instruct" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-max" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-plus" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-plus-2025-07-28" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-plus-2025-07-28:thinking" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-turbo" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-vl-max" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-14b" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-235b-a22b" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-235b-a22b-2507" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-235b-a22b-thinking-2507" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-235b-a22b:free" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-30b-a3b" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-30b-a3b-instruct-2507" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-30b-a3b-thinking-2507" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-32b" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-4b:free" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-8b" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-coder" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-coder-30b-a3b-instruct" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-coder-flash" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-coder-plus" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-coder:exacto" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-coder:free" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-max" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-next-80b-a3b-instruct" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-next-80b-a3b-thinking" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-vl-235b-a22b-instruct" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-vl-235b-a22b-thinking" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-vl-30b-a3b-instruct" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-vl-30b-a3b-thinking" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-vl-8b-instruct" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-vl-8b-thinking" + }, + { + "provider": "openrouter", + "model": "qwen/qwq-32b" + }, + { + "provider": "openrouter", + "model": "sao10k/l3-euryale-70b" + }, + { + "provider": "openrouter", + "model": "sao10k/l3.1-euryale-70b" + }, + { + "provider": "openrouter", + "model": "stepfun-ai/step3" + }, + { + "provider": "openrouter", + "model": "thedrummer/rocinante-12b" + }, + { + "provider": "openrouter", + "model": "thedrummer/unslopnemo-12b" + }, + { + "provider": "openrouter", + "model": "tngtech/deepseek-r1t2-chimera" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-3" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-3-beta" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-3-mini" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-3-mini-beta" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-4" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-4-fast" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-code-fast-1" + }, + { + "provider": "openrouter", + "model": "z-ai/glm-4-32b" + }, + { + "provider": "openrouter", + "model": "z-ai/glm-4.5" + }, + { + "provider": "openrouter", + "model": "z-ai/glm-4.5-air" + }, + { + "provider": "openrouter", + "model": "z-ai/glm-4.5-air:free" + }, + { + "provider": "openrouter", + "model": "z-ai/glm-4.5v" + }, + { + "provider": "openrouter", + "model": "z-ai/glm-4.6" + }, + { + "provider": "openrouter", + "model": "z-ai/glm-4.6:exacto" + }, + { + "provider": "databricks", + "model": "baxen-migration-demo" + }, + { + "provider": "databricks", + "model": "big-hack" + }, + { + "provider": "databricks", + "model": "case_history_hackweek" + }, + { + "provider": "databricks", + "model": "case-history-checker" + }, + { + "provider": "databricks", + "model": "claude-3-5-haiku" + }, + { + "provider": "databricks", + "model": "claude-3-5-sonnet" + }, + { + "provider": "databricks", + "model": "claude-3-5-sonnet-2" + }, + { + "provider": "databricks", + "model": "claude-3-7-sonnet" + }, + { + "provider": "databricks", + "model": "claude-4" + }, + { + "provider": "databricks", + "model": "claude-4-opus" + }, + { + "provider": "databricks", + "model": "claude-haiku" + }, + { + "provider": "databricks", + "model": "claude-opus" + }, + { + "provider": "databricks", + "model": "claude-sonnet" + }, + { + "provider": "databricks", + "model": "cmg-test-iris" + }, + { + "provider": "databricks", + "model": "code-review-gpt-5" + }, + { + "provider": "databricks", + "model": "code-review-gpt-5-mini" + }, + { + "provider": "databricks", + "model": "codellama-7b-hf-ift" + }, + { + "provider": "databricks", + "model": "column-mapping-model-endpoint" + }, + { + "provider": "databricks", + "model": "column-mapping-model-endpoint-v2" + }, + { + "provider": "databricks", + "model": "dummy-model-ml-gp-endpoint" + }, + { + "provider": "databricks", + "model": "e5-large-v2" + }, + { + "provider": "databricks", + "model": "gemini-1-5-flash" + }, + { + "provider": "databricks", + "model": "gemini-1-5-pro" + }, + { + "provider": "databricks", + "model": "gemini-2-0-flash" + }, + { + "provider": "databricks", + "model": "gemini-2-5-flash" + }, + { + "provider": "databricks", + "model": "gemini-2-5-flash-latest" + }, + { + "provider": "databricks", + "model": "gemini-2-5-pro" + }, + { + "provider": "databricks", + "model": "gemini-2-5-pro-exp" + }, + { + "provider": "databricks", + "model": "gemini-flash-lite-latest" + }, + { + "provider": "databricks", + "model": "gemini-pro" + }, + { + "provider": "databricks", + "model": "goose" + }, + { + "provider": "databricks", + "model": "goose-claude-3-5-sonnet" + }, + { + "provider": "databricks", + "model": "goose-claude-3-7-sonnet" + }, + { + "provider": "databricks", + "model": "goose-claude-4-5-sonnet" + }, + { + "provider": "databricks", + "model": "goose-claude-4-opus" + }, + { + "provider": "databricks", + "model": "goose-claude-4-sonnet" + }, + { + "provider": "databricks", + "model": "goose-claude-4-sonnet-bedrock" + }, + { + "provider": "databricks", + "model": "goose-gemini-2-5-pro" + }, + { + "provider": "databricks", + "model": "goose-gpt-4-1" + }, + { + "provider": "databricks", + "model": "goose-gpt-4o" + }, + { + "provider": "databricks", + "model": "goose-gpt-5" + }, + { + "provider": "databricks", + "model": "goose-gpt-oss" + }, + { + "provider": "databricks", + "model": "goose-o1" + }, + { + "provider": "databricks", + "model": "goose-o3" + }, + { + "provider": "databricks", + "model": "goose-o4-mini" + }, + { + "provider": "databricks", + "model": "gpt-3-5-turbo" + }, + { + "provider": "databricks", + "model": "gpt-3-5-turbo-0125" + }, + { + "provider": "databricks", + "model": "gpt-3-5-turbo-16k" + }, + { + "provider": "databricks", + "model": "gpt-3-5-turbo-instruct" + }, + { + "provider": "databricks", + "model": "gpt-4" + }, + { + "provider": "databricks", + "model": "gpt-4-0125-preview" + }, + { + "provider": "databricks", + "model": "gpt-4-1-2025-04-14" + }, + { + "provider": "databricks", + "model": "gpt-4-1-mini" + }, + { + "provider": "databricks", + "model": "gpt-4-1-nano" + }, + { + "provider": "databricks", + "model": "gpt-4-turbo" + }, + { + "provider": "databricks", + "model": "gpt-4-turbo-2024-04-09" + }, + { + "provider": "databricks", + "model": "gpt-4-vision-preview" + }, + { + "provider": "databricks", + "model": "gpt-4o" + }, + { + "provider": "databricks", + "model": "gpt-4o-2024-05-13" + }, + { + "provider": "databricks", + "model": "gpt-4o-2024-11-20" + }, + { + "provider": "databricks", + "model": "gpt-4o-mini" + }, + { + "provider": "databricks", + "model": "gpt-4o-mini-2024-07-18" + }, + { + "provider": "databricks", + "model": "gpt-5" + }, + { + "provider": "databricks", + "model": "gpt-5-mini-high" + }, + { + "provider": "databricks", + "model": "gpt-5-nano" + }, + { + "provider": "databricks", + "model": "gpt-vision" + }, + { + "provider": "databricks", + "model": "hackweek-snowflake-gpt-query-generator" + }, + { + "provider": "databricks", + "model": "headless-goose" + }, + { + "provider": "databricks", + "model": "headless-goose-claude-4-sonnet" + }, + { + "provider": "databricks", + "model": "headless-goose-o3-mini" + }, + { + "provider": "databricks", + "model": "icg-poc" + }, + { + "provider": "databricks", + "model": "invoice_parser_test" + }, + { + "provider": "databricks", + "model": "jina-reranker-v1-turbo-en" + }, + { + "provider": "databricks", + "model": "kgoose-cashapp-claude-4-sonnet" + }, + { + "provider": "databricks", + "model": "kgoose-cashapp-claude-sonnet-4-5" + }, + { + "provider": "databricks", + "model": "kgoose-claude-4-sonnet" + }, + { + "provider": "databricks", + "model": "kgoose-claude-haiku-4-5" + }, + { + "provider": "databricks", + "model": "kgoose-claude-sonnet-4-5" + }, + { + "provider": "databricks", + "model": "kgoose-gemini-2-5-flash" + }, + { + "provider": "databricks", + "model": "kgoose-gpt-4-1" + }, + { + "provider": "databricks", + "model": "kgoose-gpt-4-1-mini" + }, + { + "provider": "databricks", + "model": "kgoose-gpt-4-1-nano" + }, + { + "provider": "databricks", + "model": "kgoose-gpt-4o" + }, + { + "provider": "databricks", + "model": "kgoose-gpt-5" + }, + { + "provider": "databricks", + "model": "kgoose-gpt-5-mini" + }, + { + "provider": "databricks", + "model": "kgoose-gpt-5-nano" + }, + { + "provider": "databricks", + "model": "kgoose-o3" + }, + { + "provider": "databricks", + "model": "kgoose-o4-mini" + }, + { + "provider": "databricks", + "model": "korhan-openai-test" + }, + { + "provider": "databricks", + "model": "korhan-openai-wrapper" + }, + { + "provider": "databricks", + "model": "moderation" + }, + { + "provider": "databricks", + "model": "ng-tools-claude-haiku-3-5" + }, + { + "provider": "databricks", + "model": "ng-tools-claude-opus-4" + }, + { + "provider": "databricks", + "model": "ng-tools-claude-opus-4-1" + }, + { + "provider": "databricks", + "model": "ng-tools-claude-sonnet-3-7" + }, + { + "provider": "databricks", + "model": "ng-tools-claude-sonnet-4" + }, + { + "provider": "databricks", + "model": "ng-tools-gpt-5-nano" + }, + { + "provider": "databricks", + "model": "o1" + }, + { + "provider": "databricks", + "model": "o1-2024-12-17" + }, + { + "provider": "databricks", + "model": "o1-mini" + }, + { + "provider": "databricks", + "model": "o1-preview" + }, + { + "provider": "databricks", + "model": "o3" + }, + { + "provider": "databricks", + "model": "o3-cdd-autopilot" + }, + { + "provider": "databricks", + "model": "o3-mini" + }, + { + "provider": "databricks", + "model": "optimized-llama2-7b" + }, + { + "provider": "databricks", + "model": "opus-mt-en-es" + }, + { + "provider": "databricks", + "model": "opus-mt-en-fr" + }, + { + "provider": "databricks", + "model": "opus-mt-en-ja" + }, + { + "provider": "databricks", + "model": "opus-mt-es-en" + }, + { + "provider": "databricks", + "model": "opus-mt-fr-en" + }, + { + "provider": "databricks", + "model": "opus-mt-ja-en" + }, + { + "provider": "databricks", + "model": "p2p-device-recovery-classify" + }, + { + "provider": "databricks", + "model": "picasso_embeddings" + }, + { + "provider": "databricks", + "model": "prime_model" + }, + { + "provider": "databricks", + "model": "raml-claude-sonnet-4-5" + }, + { + "provider": "databricks", + "model": "reportiq_selector_1" + }, + { + "provider": "databricks", + "model": "reportiq_selector_md_file" + }, + { + "provider": "databricks", + "model": "snowflake-gpt-query-generator-v3" + }, + { + "provider": "databricks", + "model": "sq-bank-statement-classifier" + }, + { + "provider": "databricks", + "model": "sq-bank-statement-parser" + }, + { + "provider": "databricks", + "model": "support-article-intent-mapping" + }, + { + "provider": "databricks", + "model": "text-embedding-3-large" + }, + { + "provider": "databricks", + "model": "text-embedding-3-small" + }, + { + "provider": "databricks", + "model": "text-embedding-ada-002" + }, + { + "provider": "databricks", + "model": "databricks-gpt-5" + }, + { + "provider": "databricks", + "model": "databricks-gemini-2-5-flash" + }, + { + "provider": "databricks", + "model": "databricks-claude-sonnet-4-5" + }, + { + "provider": "databricks", + "model": "databricks-gpt-oss-120b" + }, + { + "provider": "databricks", + "model": "databricks-gpt-5-mini" + }, + { + "provider": "databricks", + "model": "databricks-gpt-5-nano" + }, + { + "provider": "databricks", + "model": "databricks-gemini-2-5-pro" + }, + { + "provider": "databricks", + "model": "databricks-gpt-oss-20b" + }, + { + "provider": "databricks", + "model": "databricks-llama-4-maverick" + }, + { + "provider": "databricks", + "model": "databricks-gemma-3-12b" + }, + { + "provider": "databricks", + "model": "databricks-meta-llama-3-1-8b-instruct" + }, + { + "provider": "databricks", + "model": "databricks-meta-llama-3-3-70b-instruct" + }, + { + "provider": "databricks", + "model": "databricks-claude-opus-4-1" + }, + { + "provider": "databricks", + "model": "databricks-claude-sonnet-4" + }, + { + "provider": "databricks", + "model": "databricks-claude-3-7-sonnet" + }, + { + "provider": "databricks", + "model": "databricks-gte-large-en" + }, + { + "provider": "databricks", + "model": "databricks-bge-large-en" + }, + { + "provider": "databricks", + "model": "databricks-meta-llama-3-1-405b-instruct" + }, + { + "provider": "databricks", + "model": "databricks-claude-opus-4" + }, + { + "provider": "google", + "model": "aqa" + }, + { + "provider": "google", + "model": "embedding-001" + }, + { + "provider": "google", + "model": "embedding-gecko-001" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-exp-image-generation" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-preview-image-generation" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-thinking-exp" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-thinking-exp-01-21" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-thinking-exp-1219" + }, + { + "provider": "google", + "model": "gemini-2.0-pro-exp" + }, + { + "provider": "google", + "model": "gemini-2.0-pro-exp-02-05" + }, + { + "provider": "google", + "model": "gemini-2.5-computer-use-preview-10-2025" + }, + { + "provider": "google", + "model": "gemini-2.5-flash-preview-tts" + }, + { + "provider": "google", + "model": "gemini-2.5-pro-preview-tts" + }, + { + "provider": "google", + "model": "gemini-embedding-001" + }, + { + "provider": "google", + "model": "gemini-embedding-exp" + }, + { + "provider": "google", + "model": "gemini-embedding-exp-03-07" + }, + { + "provider": "google", + "model": "gemini-exp-1206" + }, + { + "provider": "google", + "model": "gemini-flash-latest" + }, + { + "provider": "google", + "model": "gemini-flash-lite-latest" + }, + { + "provider": "google", + "model": "gemini-pro-latest" + }, + { + "provider": "google", + "model": "gemini-robotics-er-1.5-preview" + }, + { + "provider": "google", + "model": "gemma-3-1b-it" + }, + { + "provider": "google", + "model": "gemma-3n-e2b-it" + }, + { + "provider": "google", + "model": "imagen-4.0-generate-preview-06-06" + }, + { + "provider": "google", + "model": "imagen-4.0-ultra-generate-preview-06-06" + }, + { + "provider": "google", + "model": "learnlm-2.0-flash-experimental" + }, + { + "provider": "google", + "model": "text-embedding-004" + } + ], + "all_mappings": { + "openrouter": [ + { + "provider_model": "anthropic/claude-3-haiku", + "canonical_model": "anthropic/claude-3-haiku", + "verified": true + }, + { + "provider_model": "anthropic/claude-3-opus", + "canonical_model": "anthropic/claude-3-opus", + "verified": true + }, + { + "provider_model": "anthropic/claude-3.5-haiku", + "canonical_model": "anthropic/claude-3.5-haiku", + "verified": true + }, + { + "provider_model": "anthropic/claude-3.5-haiku-20241022", + "canonical_model": "anthropic/claude-3.5-haiku", + "verified": true + }, + { + "provider_model": "anthropic/claude-3.5-sonnet", + "canonical_model": "anthropic/claude-3.5-sonnet", + "verified": true + }, + { + "provider_model": "anthropic/claude-3.5-sonnet-20240620", + "canonical_model": "anthropic/claude-3.5-sonnet", + "verified": true + }, + { + "provider_model": "anthropic/claude-3.7-sonnet", + "canonical_model": "anthropic/claude-3.7-sonnet", + "verified": true + }, + { + "provider_model": "anthropic/claude-3.7-sonnet:thinking", + "canonical_model": "anthropic/claude-3.7-sonnet:thinking", + "verified": true + }, + { + "provider_model": "anthropic/claude-haiku-4.5", + "canonical_model": "anthropic/claude-haiku", + "verified": true + }, + { + "provider_model": "anthropic/claude-opus-4", + "canonical_model": "anthropic/claude-opus", + "verified": true + }, + { + "provider_model": "anthropic/claude-opus-4.1", + "canonical_model": "anthropic/claude-opus", + "verified": true + }, + { + "provider_model": "anthropic/claude-sonnet-4", + "canonical_model": "anthropic/claude-sonnet", + "verified": true + }, + { + "provider_model": "anthropic/claude-sonnet-4.5", + "canonical_model": "anthropic/claude-sonnet", + "verified": true + }, + { + "provider_model": "google/gemini-2.0-flash-001", + "canonical_model": "google/gemini-2.0-flash", + "verified": true + }, + { + "provider_model": "google/gemini-2.0-flash-lite-001", + "canonical_model": "google/gemini-2.0-flash-lite", + "verified": true + }, + { + "provider_model": "google/gemini-2.5-flash", + "canonical_model": "google/gemini-2.5-flash", + "verified": true + }, + { + "provider_model": "google/gemini-2.5-flash-lite", + "canonical_model": "google/gemini-2.5-flash-lite", + "verified": true + }, + { + "provider_model": "google/gemini-2.5-flash-lite-preview-06-17", + "canonical_model": "google/gemini-2.5-flash-lite", + "verified": true + }, + { + "provider_model": "google/gemini-2.5-flash-lite-preview-09-2025", + "canonical_model": "google/gemini-2.5-flash-lite", + "verified": true + }, + { + "provider_model": "google/gemini-2.5-flash-preview-09-2025", + "canonical_model": "google/gemini-2.5-flash", + "verified": true + }, + { + "provider_model": "google/gemini-2.5-pro", + "canonical_model": "google/gemini-2.5-pro", + "verified": true + }, + { + "provider_model": "google/gemini-2.5-pro-preview", + "canonical_model": "google/gemini-2.5-pro", + "verified": true + }, + { + "provider_model": "google/gemini-2.5-pro-preview-05-06", + "canonical_model": "google/gemini-2.5-pro", + "verified": true + }, + { + "provider_model": "google/gemma-3-27b-it", + "canonical_model": "google/gemma-3-27b-it", + "verified": true + }, + { + "provider_model": "openai/codex-mini", + "canonical_model": "openai/codex-mini", + "verified": true + }, + { + "provider_model": "openai/gpt-3.5-turbo", + "canonical_model": "openai/gpt-3.5-turbo", + "verified": true + }, + { + "provider_model": "openai/gpt-3.5-turbo-0613", + "canonical_model": "openai/gpt-3.5-turbo", + "verified": true + }, + { + "provider_model": "openai/gpt-3.5-turbo-16k", + "canonical_model": "openai/gpt-3.5-turbo-16k", + "verified": true + }, + { + "provider_model": "openai/gpt-4", + "canonical_model": "openai/gpt", + "verified": true + }, + { + "provider_model": "openai/gpt-4-0314", + "canonical_model": "openai/gpt", + "verified": true + }, + { + "provider_model": "openai/gpt-4-1106-preview", + "canonical_model": "openai/gpt", + "verified": true + }, + { + "provider_model": "openai/gpt-4-turbo", + "canonical_model": "openai/gpt-4-turbo", + "verified": true + }, + { + "provider_model": "openai/gpt-4-turbo-preview", + "canonical_model": "openai/gpt-4-turbo", + "verified": true + }, + { + "provider_model": "openai/gpt-4.1", + "canonical_model": "openai/gpt", + "verified": true + }, + { + "provider_model": "openai/gpt-4.1-mini", + "canonical_model": "openai/gpt-4.1-mini", + "verified": true + }, + { + "provider_model": "openai/gpt-4.1-nano", + "canonical_model": "openai/gpt-4.1-nano", + "verified": true + }, + { + "provider_model": "openai/gpt-4o", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "openai/gpt-4o-2024-05-13", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "openai/gpt-4o-2024-08-06", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "openai/gpt-4o-2024-11-20", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "openai/gpt-4o-audio-preview", + "canonical_model": "openai/gpt-4o-audio", + "verified": true + }, + { + "provider_model": "openai/gpt-4o-mini", + "canonical_model": "openai/gpt-4o-mini", + "verified": true + }, + { + "provider_model": "openai/gpt-4o-mini-2024-07-18", + "canonical_model": "openai/gpt-4o-mini", + "verified": true + }, + { + "provider_model": "openai/gpt-4o:extended", + "canonical_model": "openai/gpt-4o:extended", + "verified": true + }, + { + "provider_model": "openai/gpt-5", + "canonical_model": "openai/gpt", + "verified": true + }, + { + "provider_model": "openai/gpt-5-codex", + "canonical_model": "openai/gpt-5-codex", + "verified": true + }, + { + "provider_model": "openai/gpt-5-image", + "canonical_model": "openai/gpt-5-image", + "verified": true + }, + { + "provider_model": "openai/gpt-5-image-mini", + "canonical_model": "openai/gpt-5-image-mini", + "verified": true + }, + { + "provider_model": "openai/gpt-5-mini", + "canonical_model": "openai/gpt-5-mini", + "verified": true + }, + { + "provider_model": "openai/gpt-5-nano", + "canonical_model": "openai/gpt-5-nano", + "verified": true + }, + { + "provider_model": "openai/gpt-5-pro", + "canonical_model": "openai/gpt-5-pro", + "verified": true + }, + { + "provider_model": "openai/gpt-oss-120b", + "canonical_model": "openai/gpt-oss-120b", + "verified": true + }, + { + "provider_model": "openai/gpt-oss-120b:exacto", + "canonical_model": "openai/gpt-oss-120b:exacto", + "verified": true + }, + { + "provider_model": "openai/gpt-oss-20b", + "canonical_model": "openai/gpt-oss-20b", + "verified": true + }, + { + "provider_model": "openai/gpt-oss-safeguard-20b", + "canonical_model": "openai/gpt-oss-safeguard-20b", + "verified": true + }, + { + "provider_model": "openai/o1", + "canonical_model": "openai/o1", + "verified": true + }, + { + "provider_model": "openai/o3", + "canonical_model": "openai/o3", + "verified": true + }, + { + "provider_model": "openai/o3-deep-research", + "canonical_model": "openai/o3-deep-research", + "verified": true + }, + { + "provider_model": "openai/o3-mini", + "canonical_model": "openai/o3-mini", + "verified": true + }, + { + "provider_model": "openai/o3-mini-high", + "canonical_model": "openai/o3-mini-high", + "verified": true + }, + { + "provider_model": "openai/o3-pro", + "canonical_model": "openai/o3-pro", + "verified": true + }, + { + "provider_model": "openai/o4-mini", + "canonical_model": "openai/o4-mini", + "verified": true + }, + { + "provider_model": "openai/o4-mini-deep-research", + "canonical_model": "openai/o4-mini-deep-research", + "verified": true + }, + { + "provider_model": "openai/o4-mini-high", + "canonical_model": "openai/o4-mini-high", + "verified": true + } + ], + "anthropic": [ + { + "provider_model": "claude-3-5-haiku-20241022", + "canonical_model": "anthropic/claude-3.5-haiku", + "verified": true + }, + { + "provider_model": "claude-3-7-sonnet-20250219", + "canonical_model": "anthropic/claude-3.7-sonnet", + "verified": true + }, + { + "provider_model": "claude-3-haiku-20240307", + "canonical_model": "anthropic/claude-3-haiku", + "verified": true + }, + { + "provider_model": "claude-3-opus-20240229", + "canonical_model": "anthropic/claude-3-opus", + "verified": true + }, + { + "provider_model": "claude-haiku-4-5-20251001", + "canonical_model": "anthropic/claude-haiku", + "verified": true + }, + { + "provider_model": "claude-opus-4-1-20250805", + "canonical_model": "anthropic/claude-opus", + "verified": true + }, + { + "provider_model": "claude-opus-4-20250514", + "canonical_model": "anthropic/claude-opus", + "verified": true + }, + { + "provider_model": "claude-sonnet-4-20250514", + "canonical_model": "anthropic/claude-sonnet", + "verified": true + }, + { + "provider_model": "claude-sonnet-4-5-20250929", + "canonical_model": "anthropic/claude-sonnet", + "verified": true + } + ], + "openai": [ + { + "provider_model": "chatgpt-4o-latest", + "canonical_model": "openai/chatgpt-4o-latest", + "verified": true + }, + { + "provider_model": "gpt-3.5-turbo", + "canonical_model": "openai/gpt-3.5-turbo", + "verified": true + }, + { + "provider_model": "gpt-3.5-turbo-0125", + "canonical_model": "openai/gpt-3.5-turbo", + "verified": true + }, + { + "provider_model": "gpt-3.5-turbo-1106", + "canonical_model": "openai/gpt-3.5-turbo", + "verified": true + }, + { + "provider_model": "gpt-3.5-turbo-16k", + "canonical_model": "openai/gpt-3.5-turbo-16k", + "verified": true + }, + { + "provider_model": "gpt-3.5-turbo-instruct", + "canonical_model": "openai/gpt-3.5-turbo-instruct", + "verified": true + }, + { + "provider_model": "gpt-3.5-turbo-instruct-0914", + "canonical_model": "openai/gpt-3.5-turbo-instruct", + "verified": true + }, + { + "provider_model": "gpt-4", + "canonical_model": "openai/gpt", + "verified": true + }, + { + "provider_model": "gpt-4-0125-preview", + "canonical_model": "openai/gpt", + "verified": true + }, + { + "provider_model": "gpt-4-0314", + "canonical_model": "openai/gpt", + "verified": true + }, + { + "provider_model": "gpt-4-0613", + "canonical_model": "openai/gpt", + "verified": true + }, + { + "provider_model": "gpt-4-1106-preview", + "canonical_model": "openai/gpt", + "verified": true + }, + { + "provider_model": "gpt-4-turbo", + "canonical_model": "openai/gpt-4-turbo", + "verified": true + }, + { + "provider_model": "gpt-4-turbo-2024-04-09", + "canonical_model": "openai/gpt-4-turbo", + "verified": true + }, + { + "provider_model": "gpt-4-turbo-preview", + "canonical_model": "openai/gpt-4-turbo", + "verified": true + }, + { + "provider_model": "gpt-4.1", + "canonical_model": "openai/gpt", + "verified": true + }, + { + "provider_model": "gpt-4.1-2025-04-14", + "canonical_model": "openai/gpt", + "verified": true + }, + { + "provider_model": "gpt-4.1-mini", + "canonical_model": "openai/gpt-4.1-mini", + "verified": true + }, + { + "provider_model": "gpt-4.1-mini-2025-04-14", + "canonical_model": "openai/gpt-4.1-mini", + "verified": true + }, + { + "provider_model": "gpt-4.1-nano", + "canonical_model": "openai/gpt-4.1-nano", + "verified": true + }, + { + "provider_model": "gpt-4.1-nano-2025-04-14", + "canonical_model": "openai/gpt-4.1-nano", + "verified": true + }, + { + "provider_model": "gpt-4o", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "gpt-4o-2024-05-13", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "gpt-4o-2024-08-06", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "gpt-4o-2024-11-20", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "gpt-4o-audio-preview", + "canonical_model": "openai/gpt-4o-audio", + "verified": true + }, + { + "provider_model": "gpt-4o-audio-preview-2024-10-01", + "canonical_model": "openai/gpt-4o-audio", + "verified": true + }, + { + "provider_model": "gpt-4o-audio-preview-2024-12-17", + "canonical_model": "openai/gpt-4o-audio", + "verified": true + }, + { + "provider_model": "gpt-4o-audio-preview-2025-06-03", + "canonical_model": "openai/gpt-4o-audio", + "verified": true + }, + { + "provider_model": "gpt-4o-mini", + "canonical_model": "openai/gpt-4o-mini", + "verified": true + }, + { + "provider_model": "gpt-4o-mini-2024-07-18", + "canonical_model": "openai/gpt-4o-mini", + "verified": true + }, + { + "provider_model": "gpt-4o-mini-search-preview", + "canonical_model": "openai/gpt-4o-mini-search", + "verified": true + }, + { + "provider_model": "gpt-4o-mini-search-preview-2025-03-11", + "canonical_model": "openai/gpt-4o-mini-search", + "verified": true + }, + { + "provider_model": "gpt-4o-search-preview", + "canonical_model": "openai/gpt-4o-search", + "verified": true + }, + { + "provider_model": "gpt-4o-search-preview-2025-03-11", + "canonical_model": "openai/gpt-4o-search", + "verified": true + }, + { + "provider_model": "gpt-5", + "canonical_model": "openai/gpt", + "verified": true + }, + { + "provider_model": "gpt-5-2025-08-07", + "canonical_model": "openai/gpt", + "verified": true + }, + { + "provider_model": "gpt-5-codex", + "canonical_model": "openai/gpt-5-codex", + "verified": true + }, + { + "provider_model": "gpt-5-mini", + "canonical_model": "openai/gpt-5-mini", + "verified": true + }, + { + "provider_model": "gpt-5-mini-2025-08-07", + "canonical_model": "openai/gpt-5-mini", + "verified": true + }, + { + "provider_model": "gpt-5-nano", + "canonical_model": "openai/gpt-5-nano", + "verified": true + }, + { + "provider_model": "gpt-5-nano-2025-08-07", + "canonical_model": "openai/gpt-5-nano", + "verified": true + }, + { + "provider_model": "gpt-5-pro", + "canonical_model": "openai/gpt-5-pro", + "verified": true + }, + { + "provider_model": "gpt-5-pro-2025-10-06", + "canonical_model": "openai/gpt-5-pro", + "verified": true + }, + { + "provider_model": "o1", + "canonical_model": "openai/o1", + "verified": true + }, + { + "provider_model": "o1-2024-12-17", + "canonical_model": "openai/o1", + "verified": true + }, + { + "provider_model": "o1-pro", + "canonical_model": "openai/o1-pro", + "verified": true + }, + { + "provider_model": "o1-pro-2025-03-19", + "canonical_model": "openai/o1-pro", + "verified": true + }, + { + "provider_model": "o3", + "canonical_model": "openai/o3", + "verified": true + }, + { + "provider_model": "o3-2025-04-16", + "canonical_model": "openai/o3", + "verified": true + }, + { + "provider_model": "o3-deep-research", + "canonical_model": "openai/o3-deep-research", + "verified": true + }, + { + "provider_model": "o3-deep-research-2025-06-26", + "canonical_model": "openai/o3-deep-research", + "verified": true + }, + { + "provider_model": "o3-mini", + "canonical_model": "openai/o3-mini", + "verified": true + }, + { + "provider_model": "o3-mini-2025-01-31", + "canonical_model": "openai/o3-mini", + "verified": true + }, + { + "provider_model": "o3-pro", + "canonical_model": "openai/o3-pro", + "verified": true + }, + { + "provider_model": "o3-pro-2025-06-10", + "canonical_model": "openai/o3-pro", + "verified": true + }, + { + "provider_model": "o4-mini", + "canonical_model": "openai/o4-mini", + "verified": true + }, + { + "provider_model": "o4-mini-2025-04-16", + "canonical_model": "openai/o4-mini", + "verified": true + }, + { + "provider_model": "o4-mini-deep-research", + "canonical_model": "openai/o4-mini-deep-research", + "verified": true + }, + { + "provider_model": "o4-mini-deep-research-2025-06-26", + "canonical_model": "openai/o4-mini-deep-research", + "verified": true + } + ], + "google": [ + { + "provider_model": "gemini-2.0-flash", + "canonical_model": "google/gemini-2.0-flash", + "verified": true + }, + { + "provider_model": "gemini-2.0-flash-001", + "canonical_model": "google/gemini-2.0-flash", + "verified": true + }, + { + "provider_model": "gemini-2.0-flash-exp", + "canonical_model": "google/gemini-2.0-flash", + "verified": true + }, + { + "provider_model": "gemini-2.0-flash-lite", + "canonical_model": "google/gemini-2.0-flash-lite", + "verified": true + }, + { + "provider_model": "gemini-2.0-flash-lite-001", + "canonical_model": "google/gemini-2.0-flash-lite", + "verified": true + }, + { + "provider_model": "gemini-2.0-flash-lite-preview", + "canonical_model": "google/gemini-2.0-flash-lite", + "verified": true + }, + { + "provider_model": "gemini-2.0-flash-lite-preview-02-05", + "canonical_model": "google/gemini-2.0-flash-lite", + "verified": true + }, + { + "provider_model": "gemini-2.5-flash", + "canonical_model": "google/gemini-2.5-flash", + "verified": true + }, + { + "provider_model": "gemini-2.5-flash-image", + "canonical_model": "google/gemini-2.5-flash-image", + "verified": true + }, + { + "provider_model": "gemini-2.5-flash-image-preview", + "canonical_model": "google/gemini-2.5-flash-image", + "verified": true + }, + { + "provider_model": "gemini-2.5-flash-lite", + "canonical_model": "google/gemini-2.5-flash-lite", + "verified": true + }, + { + "provider_model": "gemini-2.5-flash-lite-preview-06-17", + "canonical_model": "google/gemini-2.5-flash-lite", + "verified": true + }, + { + "provider_model": "gemini-2.5-flash-lite-preview-09-2025", + "canonical_model": "google/gemini-2.5-flash-lite", + "verified": true + }, + { + "provider_model": "gemini-2.5-flash-preview-05-20", + "canonical_model": "google/gemini-2.5-flash", + "verified": true + }, + { + "provider_model": "gemini-2.5-flash-preview-09-2025", + "canonical_model": "google/gemini-2.5-flash", + "verified": true + }, + { + "provider_model": "gemini-2.5-pro", + "canonical_model": "google/gemini-2.5-pro", + "verified": true + }, + { + "provider_model": "gemini-2.5-pro-preview-03-25", + "canonical_model": "google/gemini-2.5-pro", + "verified": true + }, + { + "provider_model": "gemini-2.5-pro-preview-05-06", + "canonical_model": "google/gemini-2.5-pro", + "verified": true + }, + { + "provider_model": "gemini-2.5-pro-preview-06-05", + "canonical_model": "google/gemini-2.5-pro", + "verified": true + }, + { + "provider_model": "gemma-3-12b-it", + "canonical_model": "google/gemma-3-12b-it", + "verified": true + }, + { + "provider_model": "gemma-3-27b-it", + "canonical_model": "google/gemma-3-27b-it", + "verified": true + }, + { + "provider_model": "gemma-3-4b-it", + "canonical_model": "google/gemma-3-4b-it", + "verified": true + }, + { + "provider_model": "gemma-3n-e4b-it", + "canonical_model": "google/gemma-3n-e4b-it", + "verified": true + } + ], + "databricks": [], + "tetrate": [] + }, + "model_counts": { + "openrouter": 217, + "anthropic": 9, + "openai": 625, + "tetrate": 0, + "databricks": 143, + "google": 50 + }, + "canonical_models_used": [ + "openai/gpt-5-image-mini", + "google/gemini-2.5-flash-image", + "openai/gpt-4.1-mini", + "openai/o4-mini-high", + "google/gemini-2.5-flash-lite", + "openai/gpt-4-turbo", + "anthropic/claude-sonnet", + "openai/gpt-4o-mini", + "google/gemma-3-4b-it", + "openai/gpt-3.5-turbo-instruct", + "openai/gpt-3.5-turbo-16k", + "google/gemma-3n-e4b-it", + "anthropic/claude-3-opus", + "google/gemma-3-12b-it", + "openai/o3", + "openai/gpt-oss-safeguard-20b", + "anthropic/claude-3.5-haiku", + "openai/o1-pro", + "openai/o3-mini", + "openai/chatgpt-4o-latest", + "openai/gpt-3.5-turbo", + "anthropic/claude-3-haiku", + "openai/gpt", + "openai/gpt-5-codex", + "openai/o3-deep-research", + "anthropic/claude-3.7-sonnet:thinking", + "anthropic/claude-haiku", + "anthropic/claude-3.7-sonnet", + "openai/gpt-4.1-nano", + "openai/o4-mini", + "openai/o3-mini-high", + "openai/o4-mini-deep-research", + "openai/gpt-oss-120b", + "openai/gpt-4o-audio", + "openai/o3-pro", + "openai/gpt-5-image", + "google/gemini-2.5-flash", + "google/gemma-3-27b-it", + "openai/gpt-oss-20b", + "google/gemini-2.5-pro", + "anthropic/claude-3.5-sonnet", + "openai/o1", + "openai/gpt-oss-120b:exacto", + "openai/gpt-4o-mini-search", + "openai/gpt-5-pro", + "openai/gpt-4o", + "openai/codex-mini", + "google/gemini-2.0-flash-lite", + "anthropic/claude-opus", + "openai/gpt-4o:extended", + "google/gemini-2.0-flash", + "openai/gpt-5-mini", + "openai/gpt-5-nano", + "openai/gpt-4o-search" + ] +} \ No newline at end of file diff --git a/crates/goose/examples/build_canonical_models.rs b/crates/goose/examples/build_canonical_models.rs new file mode 100644 index 000000000000..36f563bd62bc --- /dev/null +++ b/crates/goose/examples/build_canonical_models.rs @@ -0,0 +1,254 @@ +/// Build canonical models from OpenRouter API +/// +/// This script fetches models from OpenRouter and converts them to canonical format. +/// Usage: +/// cargo run --example build_canonical_models +/// +use anyhow::{Context, Result}; +use goose::providers::canonical::{ + canonical_name, CanonicalModel, CanonicalModelRegistry, Pricing, +}; +use serde_json::Value; +use std::collections::HashMap; + +const OPENROUTER_API_URL: &str = "https://openrouter.ai/api/v1/models"; +const ALLOWED_PROVIDERS: &[&str] = &[ + "anthropic", + "google", + "openai", + "meta-llama", + "mistralai", + "x-ai", + "deepseek", + "cohere", + "ai21", + "qwen", +]; + +#[tokio::main] +async fn main() -> Result<()> { + println!("Fetching models from OpenRouter API..."); + + let client = reqwest::Client::new(); + let response = client + .get(OPENROUTER_API_URL) + .header("User-Agent", "goose/canonical-builder") + .send() + .await + .context("Failed to fetch from OpenRouter API")?; + + let json: Value = response + .json() + .await + .context("Failed to parse OpenRouter response")?; + + let models = json["data"] + .as_array() + .context("Expected 'data' array in OpenRouter response")? + .clone(); + + println!("Processing {} models from OpenRouter...", models.len()); + + // First pass: Group models by canonical ID and track the one with shortest name + let mut canonical_groups: HashMap = HashMap::new(); + let mut shortest_names: HashMap = HashMap::new(); + + for model in &models { + let id = model["id"].as_str().unwrap(); + let name = model["name"].as_str().context("Model missing id field")?; + + // Skip OpenRouter-specific pricing variants (:free, :nitro) + // Keep :extended since it has different context length + if id.contains(":free") || id.contains(":nitro") { + continue; + } + + let canonical_id = canonical_name("openrouter", id); + + let provider = canonical_id.split('/').next().unwrap_or(""); + if !ALLOWED_PROVIDERS.contains(&provider) { + continue; + } + + let prompt_cost = model + .get("pricing") + .and_then(|p| p.get("prompt")) + .and_then(|v| v.as_str()) + .and_then(|s| s.parse::().ok()) + .unwrap_or(0.0); + + let completion_cost = model + .get("pricing") + .and_then(|p| p.get("completion")) + .and_then(|v| v.as_str()) + .and_then(|s| s.parse::().ok()) + .unwrap_or(0.0); + + let has_paid_pricing = prompt_cost > 0.0 || completion_cost > 0.0; + + if let Some(existing_model) = canonical_groups.get(&canonical_id) { + let existing_name = shortest_names.get(&canonical_id).unwrap(); + + let existing_prompt = existing_model + .get("pricing") + .and_then(|p| p.get("prompt")) + .and_then(|v| v.as_str()) + .and_then(|s| s.parse::().ok()) + .unwrap_or(0.0); + + let existing_completion = existing_model + .get("pricing") + .and_then(|p| p.get("completion")) + .and_then(|v| v.as_str()) + .and_then(|s| s.parse::().ok()) + .unwrap_or(0.0); + + let existing_has_paid = existing_prompt > 0.0 || existing_completion > 0.0; + + let should_replace = if has_paid_pricing != existing_has_paid { + has_paid_pricing // Prefer the one with paid pricing + } else { + name.len() < existing_name.len() // Both same pricing tier, prefer shorter name + }; + + if should_replace { + println!( + " Updating {} from '{}' (paid: {}) to '{}' (paid: {})", + canonical_id, + existing_model["id"].as_str().unwrap(), + existing_has_paid, + id, + has_paid_pricing + ); + shortest_names.insert(canonical_id.clone(), name.to_string()); + canonical_groups.insert(canonical_id, model); + } + } else { + println!( + " Adding: {} (from {}, paid: {})", + canonical_id, id, has_paid_pricing + ); + shortest_names.insert(canonical_id.clone(), name.to_string()); + canonical_groups.insert(canonical_id, model); + } + } + + // Filter out beta/preview variants if non-beta version exists + let beta_suffixes = ["-beta", "-preview", "-alpha"]; + let mut to_remove = Vec::new(); + + for canonical_id in canonical_groups.keys() { + for suffix in &beta_suffixes { + if canonical_id.ends_with(suffix) { + // Check if non-beta version exists + let base_id = canonical_id.strip_suffix(suffix).unwrap(); + if canonical_groups.contains_key(base_id) { + println!( + " Filtering out {} (non-beta version {} exists)", + canonical_id, base_id + ); + to_remove.push(canonical_id.clone()); + break; + } + } + } + } + + for id in to_remove { + canonical_groups.remove(&id); + shortest_names.remove(&id); + } + + // Second pass: Build the registry with the selected models + let mut registry = CanonicalModelRegistry::new(); + + for (canonical_id, model) in canonical_groups.iter() { + let name = shortest_names.get(canonical_id).unwrap(); + + let context_length = model["context_length"].as_u64().unwrap_or(128_000) as usize; + + let max_completion_tokens = model + .get("top_provider") + .and_then(|tp| tp.get("max_completion_tokens")) + .and_then(|v| v.as_u64()) + .map(|v| v as usize); + + let input_modalities: Vec = model + .get("architecture") + .and_then(|arch| arch.get("input_modalities")) + .and_then(|v| v.as_array()) + .map(|arr| { + arr.iter() + .filter_map(|v| v.as_str()) + .map(|s| s.to_string()) + .collect() + }) + .unwrap_or_else(|| vec!["text".to_string()]); + + let output_modalities: Vec = model + .get("architecture") + .and_then(|arch| arch.get("output_modalities")) + .and_then(|v| v.as_array()) + .map(|arr| { + arr.iter() + .filter_map(|v| v.as_str()) + .map(|s| s.to_string()) + .collect() + }) + .unwrap_or_else(|| vec!["text".to_string()]); + + let supports_tools = model + .get("supported_parameters") + .and_then(|v| v.as_array()) + .map(|params| params.iter().any(|param| param.as_str() == Some("tools"))) + .unwrap_or(false); + + let pricing_obj = model + .get("pricing") + .context("Model missing pricing field")?; + let pricing = Pricing { + prompt: pricing_obj + .get("prompt") + .and_then(|v| v.as_str()) + .and_then(|s| s.parse().ok()), + completion: pricing_obj + .get("completion") + .and_then(|v| v.as_str()) + .and_then(|s| s.parse().ok()), + request: pricing_obj + .get("request") + .and_then(|v| v.as_str()) + .and_then(|s| s.parse().ok()), + image: pricing_obj + .get("image") + .and_then(|v| v.as_str()) + .and_then(|s| s.parse().ok()), + }; + + let canonical_model = CanonicalModel { + id: canonical_id.clone(), + name: name.to_string(), + context_length, + max_completion_tokens, + input_modalities, + output_modalities, + supports_tools, + pricing, + }; + + registry.register(canonical_model); + } + + use std::path::PathBuf; + + let output_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("src/providers/canonical/data/canonical_models.json"); + registry.to_file(&output_path)?; + println!( + "\n✓ Wrote {} models to {}", + registry.count(), + output_path.display() + ); + + Ok(()) +} diff --git a/crates/goose/examples/canonical_model_checker.rs b/crates/goose/examples/canonical_model_checker.rs new file mode 100644 index 000000000000..8c6cf530b89a --- /dev/null +++ b/crates/goose/examples/canonical_model_checker.rs @@ -0,0 +1,369 @@ +/// Canonical Model Checker +/// +/// This script checks which models from top providers are properly mapped to canonical models. +/// It maintains a lock file of mappings and detects changes between runs. +/// +/// Outputs: +/// - Models that are NOT mapped to canonical models +/// - Full list of (provider, model) <-> canonical-model mappings +/// - Diff report showing mapping changes since last run: +/// * Changed mappings (model now maps to a different canonical model) +/// * Added mappings (model gained a canonical mapping) +/// * Removed mappings (model lost its canonical mapping) +/// +/// Output File: +/// - src/providers/canonical/data/canonical_mapping_report.json +/// Contains full report with mapping data (acts as a lock file) +/// +/// Usage: +/// cargo run --example canonical_model_checker -- [--output custom_path.json] +/// +use anyhow::{Context, Result}; +use goose::providers::{canonical::ModelMapping, create_with_named_model}; +use serde::{Deserialize, Serialize}; +use std::collections::{HashMap, HashSet}; +use std::path::PathBuf; + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)] +struct ProviderModelPair { + provider: String, + model: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +struct MappingEntry { + provider: String, + model: String, + canonical: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +struct MappingReport { + /// Timestamp of this report + timestamp: String, + + /// Models that are NOT mapped to canonical models + unmapped_models: Vec, + + /// All mappings: (provider, model) -> canonical model + /// Stored per provider for backward compatibility + all_mappings: HashMap>, + + /// Flat list of all mappings for easier comparison (lock file format) + mapped_models: Vec, + + /// Total models checked per provider + model_counts: HashMap, + + /// Canonical models referenced + canonical_models_used: HashSet, +} + +impl MappingReport { + fn new() -> Self { + Self { + timestamp: chrono::Utc::now().to_rfc3339(), + unmapped_models: Vec::new(), + all_mappings: HashMap::new(), + mapped_models: Vec::new(), + model_counts: HashMap::new(), + canonical_models_used: HashSet::new(), + } + } + + fn add_provider_results( + &mut self, + provider_name: &str, + fetched_models: Vec, + mappings: Vec, + ) { + let mapping_map: HashMap = mappings + .iter() + .map(|m| (m.provider_model.clone(), m.canonical_model.clone())) + .collect(); + + for model in &fetched_models { + if !mapping_map.contains_key(model) { + self.unmapped_models.push(ProviderModelPair { + provider: provider_name.to_string(), + model: model.clone(), + }); + } + } + + for (model, canonical) in &mapping_map { + self.canonical_models_used.insert(canonical.clone()); + self.mapped_models.push(MappingEntry { + provider: provider_name.to_string(), + model: model.clone(), + canonical: canonical.clone(), + }); + } + + self.all_mappings + .insert(provider_name.to_string(), mappings); + self.model_counts + .insert(provider_name.to_string(), fetched_models.len()); + } + + fn print_summary(&self) { + println!("\n{}", "=".repeat(80)); + println!("CANONICAL MODEL MAPPING REPORT"); + println!("{}", "=".repeat(80)); + println!("\nGenerated: {}\n", self.timestamp); + + println!("Models Checked Per Provider:"); + println!("{}", "-".repeat(80)); + let mut providers: Vec<_> = self.model_counts.iter().collect(); + providers.sort_by_key(|(name, _)| *name); + for (provider, count) in providers { + let mapped = self + .all_mappings + .get(provider) + .map(|m| m.len()) + .unwrap_or(0); + let unmapped = count - mapped; + println!( + " {:<20} Total: {:>3} Mapped: {:>3} Unmapped: {:>3}", + provider, count, mapped, unmapped + ); + } + + println!("\n{}", "=".repeat(80)); + println!("UNMAPPED MODELS ({})", self.unmapped_models.len()); + println!("{}", "=".repeat(80)); + + if self.unmapped_models.is_empty() { + println!("✓ All models are mapped to canonical models!"); + } else { + let mut unmapped_by_provider: HashMap<&str, Vec<&str>> = HashMap::new(); + for pair in &self.unmapped_models { + unmapped_by_provider + .entry(pair.provider.as_str()) + .or_default() + .push(pair.model.as_str()); + } + + let mut providers: Vec<_> = unmapped_by_provider.keys().collect(); + providers.sort(); + + for provider in providers { + println!("\n{}:", provider); + let mut models = unmapped_by_provider[provider].to_vec(); + models.sort(); + for model in models { + println!(" - {}", model); + } + } + } + + println!("\n{}", "=".repeat(80)); + println!( + "CANONICAL MODELS REFERENCED ({})", + self.canonical_models_used.len() + ); + println!("{}", "=".repeat(80)); + if self.canonical_models_used.is_empty() { + println!(" (none yet)"); + } else { + let mut canonical: Vec<_> = self.canonical_models_used.iter().collect(); + canonical.sort(); + for model in canonical { + println!(" - {}", model); + } + } + + println!("\n{}", "=".repeat(80)); + } + + fn compare_with_previous(&self, previous: &MappingReport) { + println!("\n{}", "=".repeat(80)); + println!("CHANGES SINCE PREVIOUS RUN"); + println!("{}", "=".repeat(80)); + + let mut prev_map: HashMap<(String, String), String> = HashMap::new(); + for entry in &previous.mapped_models { + prev_map.insert( + (entry.provider.clone(), entry.model.clone()), + entry.canonical.clone(), + ); + } + + let mut curr_map: HashMap<(String, String), String> = HashMap::new(); + for entry in &self.mapped_models { + curr_map.insert( + (entry.provider.clone(), entry.model.clone()), + entry.canonical.clone(), + ); + } + + let mut changed_mappings = Vec::new(); + let mut added_mappings = Vec::new(); + let mut removed_mappings = Vec::new(); + + for (key @ (provider, model), canonical) in &curr_map { + match prev_map.get(key) { + Some(prev_canonical) if prev_canonical != canonical => { + changed_mappings.push(( + provider.clone(), + model.clone(), + prev_canonical.clone(), + canonical.clone(), + )); + } + None => { + added_mappings.push((provider.clone(), model.clone(), canonical.clone())); + } + _ => { + // No change + } + } + } + + for (key @ (provider, model), canonical) in &prev_map { + if !curr_map.contains_key(key) { + removed_mappings.push((provider.clone(), model.clone(), canonical.clone())); + } + } + + if changed_mappings.is_empty() && added_mappings.is_empty() && removed_mappings.is_empty() { + println!("\nNo changes in model mappings."); + } else { + if !changed_mappings.is_empty() { + println!("\n⚠ Changed Mappings ({}):", changed_mappings.len()); + println!(" (Models that now map to a different canonical model)"); + for (provider, model, old_canonical, new_canonical) in changed_mappings { + println!(" {} / {}", provider, model); + println!(" WAS: {}", old_canonical); + println!(" NOW: {}", new_canonical); + } + } + + if !added_mappings.is_empty() { + println!("\n✓ Added Mappings ({}):", added_mappings.len()); + println!(" (Models that gained a canonical mapping)"); + for (provider, model, canonical) in added_mappings { + println!(" {} / {} -> {}", provider, model, canonical); + } + } + + if !removed_mappings.is_empty() { + println!("\n✗ Removed Mappings ({}):", removed_mappings.len()); + println!(" (Models that lost their canonical mapping)"); + for (provider, model, canonical) in removed_mappings { + println!(" {} / {} (was: {})", provider, model, canonical); + } + } + } + + println!("\n{}", "=".repeat(80)); + } + + fn save_to_file(&self, path: &PathBuf) -> Result<()> { + let json = serde_json::to_string_pretty(self).context("Failed to serialize report")?; + std::fs::write(path, json).context("Failed to write report file")?; + Ok(()) + } + + fn load_from_file(path: &PathBuf) -> Result { + let content = std::fs::read_to_string(path).context("Failed to read report file")?; + let report: MappingReport = + serde_json::from_str(&content).context("Failed to parse report file")?; + Ok(report) + } +} + +async fn check_provider( + provider_name: &str, + model_for_init: &str, +) -> Result<(Vec, Vec)> { + println!("Checking provider: {}", provider_name); + + let provider = match create_with_named_model(provider_name, model_for_init).await { + Ok(p) => p, + Err(e) => { + println!(" ⚠ Failed to create provider: {}", e); + println!(" This is expected if credentials are not configured."); + return Ok((Vec::new(), Vec::new())); + } + }; + + let fetched_models = match provider.fetch_supported_models().await { + Ok(Some(models)) => { + println!(" ✓ Fetched {} models", models.len()); + models + } + Ok(None) => { + println!(" ⚠ Provider does not support model listing"); + Vec::new() + } + Err(e) => { + println!(" ⚠ Failed to fetch models: {}", e); + println!(" This is expected if credentials are not configured."); + Vec::new() + } + }; + + let mut mappings = Vec::new(); + for model in &fetched_models { + match provider.map_to_canonical_model(model).await { + Ok(Some(canonical)) => { + mappings.push(ModelMapping::new(model.clone(), canonical)); + } + Ok(None) => { + // No mapping found for this model + } + Err(e) => { + println!(" ⚠ Failed to map model '{}': {}", model, e); + } + } + } + println!(" ✓ Found {} mappings", mappings.len()); + + Ok((fetched_models, mappings)) +} + +#[tokio::main] +async fn main() -> Result<()> { + println!("Canonical Model Checker"); + println!("Checking model mappings for top providers...\n"); + + // Define providers to check with their default models + let providers = vec![ + ("anthropic", "claude-3-5-sonnet-20241022"), + ("openai", "gpt-4"), + ("openrouter", "anthropic/claude-3.5-sonnet"), + ("google", "gemini-1.5-pro-002"), + ("tetrate", "claude-3-5-sonnet-computer-use"), + ("xai", "grok-code-fast-1"), + ]; + + let mut report = MappingReport::new(); + + for (provider_name, default_model) in providers { + let (fetched, mappings) = check_provider(provider_name, default_model).await?; + report.add_provider_results(provider_name, fetched, mappings); + println!(); + } + + report.print_summary(); + + let args: Vec = std::env::args().collect(); + let output_path = if args.len() > 2 && args[1] == "--output" { + PathBuf::from(&args[2]) + } else { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("src/providers/canonical/data/canonical_mapping_report.json") + }; + + if output_path.exists() { + if let Ok(previous) = MappingReport::load_from_file(&output_path) { + report.compare_with_previous(&previous); + } + } + + report.save_to_file(&output_path)?; + println!("\n✓ Report saved to: {}", output_path.display()); + + Ok(()) +} diff --git a/crates/goose/src/providers/base.rs b/crates/goose/src/providers/base.rs index e908cd88c94f..4a84fff8e0f6 100644 --- a/crates/goose/src/providers/base.rs +++ b/crates/goose/src/providers/base.rs @@ -2,6 +2,7 @@ use anyhow::Result; use futures::Stream; use serde::{Deserialize, Serialize}; +use super::canonical::{map_to_canonical_model, CanonicalModelRegistry}; use super::errors::ProviderError; use super::retry::RetryConfig; use crate::config::base::ConfigValue; @@ -415,6 +416,52 @@ pub trait Provider: Send + Sync { Ok(None) } + /// Fetch models filtered by canonical registry and usability + async fn fetch_recommended_models(&self) -> Result>, ProviderError> { + let all_models = match self.fetch_supported_models().await? { + Some(models) => models, + None => return Ok(None), + }; + + let registry = CanonicalModelRegistry::bundled().map_err(|e| { + ProviderError::ExecutionError(format!("Failed to load canonical registry: {}", e)) + })?; + + let provider_name = self.get_name(); + + let recommended_models: Vec = all_models + .iter() + .filter(|model| { + map_to_canonical_model(provider_name, model, registry) + .and_then(|canonical_id| registry.get(&canonical_id)) + .map(|m| m.input_modalities.contains(&"text".to_string())) + .unwrap_or(false) + }) + .cloned() + .collect(); + + if recommended_models.is_empty() { + Ok(Some(all_models)) + } else { + Ok(Some(recommended_models)) + } + } + + async fn map_to_canonical_model( + &self, + provider_model: &str, + ) -> Result, ProviderError> { + let registry = CanonicalModelRegistry::bundled().map_err(|e| { + ProviderError::ExecutionError(format!("Failed to load canonical registry: {}", e)) + })?; + + Ok(map_to_canonical_model( + self.get_name(), + provider_model, + registry, + )) + } + fn supports_embeddings(&self) -> bool { false } diff --git a/crates/goose/src/providers/canonical/README.md b/crates/goose/src/providers/canonical/README.md new file mode 100644 index 000000000000..61bf29ccdd9c --- /dev/null +++ b/crates/goose/src/providers/canonical/README.md @@ -0,0 +1,24 @@ +# Canonical Model System + +Provides a unified view of model metadata (pricing, capabilities, context limits) across different LLM providers. +Normalizes provider-specific model names (e.g., `claude-3-5-sonnet-20241022`) +to canonical IDs (e.g., `anthropic/claude-3.5-sonnet`). + +## Scripts + +### Build Canonical Models +Fetches latest model metadata from OpenRouter and updates the registry: +```bash +cargo run --example build_canonical_models +``` +Writes to: `src/providers/canonical/data/canonical_models.json` + +### Check Model Mappings +Tests provider model mappings and tracks changes over time: +```bash +cargo run --example canonical_model_checker +``` +- Reports unmapped models +- Compares with previous runs (like a lock file) +- Shows changed/added/removed mappings +- Writes to: `src/providers/canonical/data/canonical_mapping_report.json` diff --git a/crates/goose/src/providers/canonical/data/canonical_mapping_report.json b/crates/goose/src/providers/canonical/data/canonical_mapping_report.json new file mode 100644 index 000000000000..f526b61646c1 --- /dev/null +++ b/crates/goose/src/providers/canonical/data/canonical_mapping_report.json @@ -0,0 +1,5352 @@ +{ + "timestamp": "2025-12-11T15:48:25.968909+00:00", + "unmapped_models": [ + { + "provider": "openai", + "model": "ada:ft-square-2023-01-20-06-09-37" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-03-22-57-10" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-03-23-17-02" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-03-23-39-19" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-00-06-28" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-00-26-44" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-01-04-45" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-01-25-59" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-01-35-31" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-01-49-59" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-01-52-25" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-01-53-11" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-01-54-49" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-01-56-59" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-01-58-41" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-02-00-26" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-02-02-17" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-02-03-39" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-02-05-16" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-02-06-44" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-04-02-08-18" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-22-05-09-46" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-22-05-27-21" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-27-17-40-56" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-27-19-20-20" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-27-19-35-21" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-02-27-21-26-06" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-03-01-19-58-17" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-03-02-11-40-22" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-03-02-16-01-19" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-03-06-11-43-24" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-04-05-18-59-44" + }, + { + "provider": "openai", + "model": "ada:ft-square-2023-06-14-21-43-36" + }, + { + "provider": "openai", + "model": "ada:ft-square:ada-fine-tuned-pb-books-2023-06-10-01-41-30" + }, + { + "provider": "openai", + "model": "ada:ft-square:get-classify-test-1-2023-03-01-22-20-54" + }, + { + "provider": "openai", + "model": "ada:ft-square:get-classify-test-2-2023-03-01-23-00-30" + }, + { + "provider": "openai", + "model": "ada:ft-square:latha-2023-06-07-06-56-00" + }, + { + "provider": "openai", + "model": "ada:ft-square:mcc-from-items-2023-03-09-23-20-33" + }, + { + "provider": "openai", + "model": "ada:ft-square:mcc-from-items-2023-03-10-02-02-01" + }, + { + "provider": "openai", + "model": "ada:ft-square:sq-interview-rubrics-2023-03-01-23-25-00" + }, + { + "provider": "openai", + "model": "ada:ft-square:test-2023-06-07-07-05-04" + }, + { + "provider": "openai", + "model": "babbage-002" + }, + { + "provider": "openai", + "model": "babbage:ft-square-2023-02-28-14-48-38" + }, + { + "provider": "openai", + "model": "computer-use-preview" + }, + { + "provider": "openai", + "model": "computer-use-preview-2025-03-11" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-01-04-00-17-01" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-03-20-54-03" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-03-22-00-22" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-03-23-12-33" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-03-23-38-15" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-03-23-50-25" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-03-23-56-35" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-04-00-10-16" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-04-00-30-47" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-04-01-10-58" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-14-03-10-35" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-14-05-13-05" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-24-12-25-24" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-24-13-42-34" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-24-16-41-35" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-24-18-12-55" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-27-22-00-27" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-28-12-28-40" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-28-16-08-29" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-02-28-23-14-48" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-03-02-01-48-30" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-03-02-13-12-20" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-03-02-16-17-24" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-03-06-14-16-22" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-03-09-04-37-07" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-04-05-19-33-31" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-04-05-23-44-20" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-05-01-19-30-51" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-05-02-16-19-15" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-06-08-20-11-11" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-06-12-14-33-09" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-06-14-22-55-22" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-06-14-23-23-37" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-06-14-23-25-31" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-06-14-23-37-23" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-06-15-14-24-56" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-06-15-15-16-31" + }, + { + "provider": "openai", + "model": "curie:ft-square-2023-06-15-15-21-41" + }, + { + "provider": "openai", + "model": "curie:ft-square:andrewbyers-iso-dates-2-2023-06-09-19-23-52" + }, + { + "provider": "openai", + "model": "curie:ft-square:andrewbyers-iso-dates-2023-06-09-16-22-54" + }, + { + "provider": "openai", + "model": "curie:ft-square:bartosz-2023-06-15-16-50-00" + }, + { + "provider": "openai", + "model": "curie:ft-square:bartosz-2023-06-15-17-40-30" + }, + { + "provider": "openai", + "model": "dall-e-2" + }, + { + "provider": "openai", + "model": "dall-e-3" + }, + { + "provider": "openai", + "model": "davinci-002" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-01-31-46" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-01-35-06" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-01-38-32" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-19-52-40" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-19-56-06" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-19-58-46" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-20-02-03" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-20-05-47" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-20-11-53" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-03-20-15-38" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-24-18-22-49" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-27-19-06-04" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-27-20-03-10" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-27-20-43-03" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-27-21-15-51" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-27-21-56-57" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-27-23-00-36" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-28-15-35-39" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-02-28-22-02-29" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-01-01-34-16" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-01-04-50-27" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-01-21-52-35" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-01-23-53-42" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-02-06-29-26" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-02-07-43-23" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-02-08-33-27" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-02-09-27-04" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-02-19-42-43" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-02-23-34-00" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-02-23-40-51" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-02-23-46-02" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-02-23-54-35" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-03-01-26-16" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-03-06-07-40-58" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-05-02-17-37-42" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-06-03-01-27-58" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-06-03-02-41-38" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-06-04-20-17-25" + }, + { + "provider": "openai", + "model": "davinci:ft-square-2023-07-31-06-04-37" + }, + { + "provider": "openai", + "model": "davinci:ft-square:conversational-ordering-2023-03-01-03-35-26" + }, + { + "provider": "openai", + "model": "davinci:ft-square:conversational-ordering-2023-03-01-19-34-59" + }, + { + "provider": "openai", + "model": "davinci:ft-square:martech-fox-2023-07-03-12-08-51" + }, + { + "provider": "openai", + "model": "davinci:ft-square:ppg-1-2023-03-03-22-44-53" + }, + { + "provider": "openai", + "model": "davinci:ft-square:ppg-2-2023-03-04-00-09-06" + }, + { + "provider": "openai", + "model": "davinci:ft-square:product-descriptions-1-2023-02-18-02-01-38" + }, + { + "provider": "openai", + "model": "davinci:ft-square:product-descriptions-2023-02-18-01-37-53" + }, + { + "provider": "openai", + "model": "davinci:ft-square:sq-interview-rubrics-2023-03-01-06-12-57" + }, + { + "provider": "openai", + "model": "davinci:ft-square:test-2023-06-02-21-46-09" + }, + { + "provider": "openai", + "model": "davinci:ft-square:test-2023-06-07-07-18-50" + }, + { + "provider": "openai", + "model": "davinci:ft-square:testmodel-2023-06-09-06-33-46" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::979OeECc" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::979X87hI" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::979tUAKY" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::9BaZ6utW" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::9BaZ962b:ckpt-step-418" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::9BaZ9TI9:ckpt-step-1254" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::9BaZ9yXw:ckpt-step-836" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::9f7y6Fq3:ckpt-step-132" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::9f7y6d94:ckpt-step-66" + }, + { + "provider": "openai", + "model": "ft:babbage-002:square::9f7y6tDo" + }, + { + "provider": "openai", + "model": "ft:davinci-002:square::8IHIFNF8" + }, + { + "provider": "openai", + "model": "ft:davinci-002:square::979av0Ca" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9BdO7p4k" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9BdO9dyB:ckpt-step-418" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9BdOAZhy:ckpt-step-1254" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9BdOAzyd:ckpt-step-836" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9BdjnxSh" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9Bdjq2HN:ckpt-step-836" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9BdjqEL2:ckpt-step-418" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9BdjqWL2:ckpt-step-1254" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9CBYL14U" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9CBYOIYz:ckpt-step-531" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9CBYOe1X:ckpt-step-1062" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9CBYPJjH:ckpt-step-1593" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9dWw13R5:ckpt-step-531" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9dWw21NB:ckpt-step-1062" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9dWw2Jmx" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9w2wKEHK:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9w2wKRUk" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9w2wKfxt:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9wDsxF0M:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9wDsxJU5" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9wDsxcuJ:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9wLTi98n:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9wLTiHPk:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::9wLTiuf3" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A1oa308p:ckpt-step-768" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A1oa4UVH:ckpt-step-1536" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A1oa4fY2" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A21LQ3B7:ckpt-step-1536" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A21LQjft:ckpt-step-768" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A21LRYaU" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A3F6X0tu:ckpt-step-906" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A3F6XYh7:ckpt-step-1812" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A3F6YGI4" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A3F7A46A:ckpt-step-906" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A3F7AHaO:ckpt-step-1812" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::A3F7AoD8" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::BDIOxNBa" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::BDIOxtLv:ckpt-step-499" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::BDIOxz40:ckpt-step-998" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::BDIbgGdy" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::BDM8mQGM" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::BDQoyuDs" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::BPmNgoWc:ckpt-step-80" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::BPmNj3MY:ckpt-step-90" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square::BPmNkBwY" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square:regex-generator:BV3pHd69" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square:regex-generator:BV3pHfFP:ckpt-step-608" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0125:square:regex-generator:BV3pHz34:ckpt-step-304" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0613:square::7xkXhz2F" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-0613:square:recipe-ner:8m9bUTJB" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square::8INlSFiD" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square::8IittuHW" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square::8VQq2h9i" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:presale-prod-update:A1VCz1Ng:ckpt-step-772" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:presale-prod-update:A1VCz1dF" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:presale-prod-update:A1VCzSam:ckpt-step-1544" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9esUGGea:ckpt-step-1522" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9esUGnko" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9f8il0PV" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9f8iljLm:ckpt-step-1611" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9f9O9vmz:ckpt-step-751" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9f9OA72b:ckpt-step-1502" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9f9OAsBX" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9fAO711i:ckpt-step-753" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9fAO71NV" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9fAO7nhv:ckpt-step-1506" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9fB61NQG" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9fB61ZZn:ckpt-step-1520" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9fB61cPW:ckpt-step-760" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9fCbI5U9" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-fmac:9fCbICqK:ckpt-step-761" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-pm-35:9djnKK85:ckpt-step-1533" + }, + { + "provider": "openai", + "model": "ft:gpt-3.5-turbo-1106:square:tarkin-pm-35:9djnL0G0" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9BpIi1ah" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9BpIlVui:ckpt-step-418" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9BpIle5X:ckpt-step-836" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9BpImGbJ:ckpt-step-1254" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9CERwrnZ" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9CERyuVp:ckpt-step-531" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9CERz6l4:ckpt-step-1593" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9CERzjIk:ckpt-step-1062" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9dWi6cve:ckpt-step-531" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9dWi7AH4" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9dWi7d0k:ckpt-step-1062" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9wGGcJwE:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9wGGceZ1:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9wGGcsCI" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9wLlEcBS:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9wLlFM71" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9wLlFtmK:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9wP6wXmY:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9wP6xJ7K" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9wP6xUW9:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9yR6Pmck:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9yR6Q01x" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9yR6QRCI:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9ySoC7vZ" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9ySoC9RL:ckpt-step-1482" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::9ySoCHH9:ckpt-step-741" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::A1os36ZY:ckpt-step-768" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::A1os3SzM:ckpt-step-1536" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square::A1os4RF0" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:g11n-helper:ALxGZf5Y:ckpt-step-54" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:g11n-helper:ALxGaifK:ckpt-step-72" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:g11n-helper:ALxGasbI" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:presale-prod-update:A1VkM3KW:ckpt-step-772" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:presale-prod-update:A1VkMPxN:ckpt-step-1544" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:presale-prod-update:A1VkMugi" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:tarkin:9a8eE6A4:ckpt-step-763" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:tarkin:9a8eEWdX" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:tarkin:9a8eEkGS:ckpt-step-1526" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:tarkin:9aDzHMdR:ckpt-step-3054" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:tarkin:9aDzHdca:ckpt-step-1527" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:tarkin:9aDzI3c1" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:tarkin:9ckg06KE:ckpt-step-70636" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:tarkin:9ckg06yx:ckpt-step-35318" + }, + { + "provider": "openai", + "model": "ft:gpt-4-0613:square:tarkin:9ckg1W41" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-2025-04-14:square:hotel-sys-design:Bn8TRXx7:ckpt-step-77" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-2025-04-14:square:hotel-sys-design:Bn8TSnvc" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-2025-04-14:square:hotel-sys-design:Bn8TSuqu:ckpt-step-88" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-2025-04-14:square:picasso-tbl:Be4ohJ5c:ckpt-step-555" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-2025-04-14:square:picasso-tbl:Be4okWcV" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-2025-04-14:square:picasso-tbl:Be4okcLm:ckpt-step-1110" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-mini-2025-04-14:square::BmTIcrto:ckpt-step-666" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-mini-2025-04-14:square::BmTIfHgD" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-mini-2025-04-14:square::BmTIfv3N:ckpt-step-1332" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-mini-2025-04-14:square::BwjlIHbe" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-mini-2025-04-14:square::BwjlIMor:ckpt-step-1018" + }, + { + "provider": "openai", + "model": "ft:gpt-4.1-nano-2025-04-14:square:qliao-plathelp-v1:CRNAywx8" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9eTWHHtG" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9eTWHI2d:ckpt-step-80" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9eTWHWR7:ckpt-step-90" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9eoDA1QR:ckpt-step-32" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9eoDARki" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9eoDAkYo:ckpt-step-64" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9eqA79i0:ckpt-step-59" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9eqA8TBe:ckpt-step-118" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9eqA8pCn" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9hgDsAHH:ckpt-step-66" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9hgDsHOi:ckpt-step-132" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9hgDtDpP" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9yPneKZF:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9yPnf26m:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square::9yPnfZ3w" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:pfi-golang:9smel7hl:ckpt-step-434" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:pfi-golang:9smelXOJ" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:pfi-golang:9smeltpg:ckpt-step-217" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:pfi:9sjuwq38:ckpt-step-505" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:pfi:9sjux561" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:pfi:9sjuxLbk:ckpt-step-1010" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9e48jPvC:ckpt-step-1510" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9e48kfSc" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9e4FyHOk:ckpt-step-528" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9e4FzikM:ckpt-step-1056" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9e4Fzzq8" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9e6FlhBM" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9e6Flnjr:ckpt-step-1526" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9e8EgHNk" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9e8Egd2H:ckpt-step-1526" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9ePrc2Qr" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fma:9ePrcUgW:ckpt-step-1524" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmac:9eSm4CmX:ckpt-step-1513" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmac:9eSm4Nvi" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmac:9eVTYdgL:ckpt-step-1513" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmac:9eVTZNWy" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmac:9ellv805:ckpt-step-812" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmac:9ellvsEx" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmar:9gCyNcoZ:ckpt-step-753" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmar:9gCyOII4" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmar:9gCyOTcP:ckpt-step-1506" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmar:9gEX8El2:ckpt-step-1552" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmar:9gEX9ft2" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmas:9eq84If3" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-fmas:9eq84hU9:ckpt-step-1522" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-full-meal:9e2Qax41:ckpt-step-528" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-full-meal:9e2Qb1sn" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-full-meal:9e2QbHP1:ckpt-step-1056" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-piece-meal:9dgu0Q1g:ckpt-step-1533" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-piece-meal:9dgu1KXd" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-pm-4o:9dkScYcs" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin-pm-4o:9dkScysk:ckpt-step-1533" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:tarkin:9dfz3A8x" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:test-ft:9e4bJAtq:ckpt-step-27" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:test-ft:9e4bKBv0:ckpt-step-54" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:test-ft:9e4bKlvw" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:thunderbird:9bd8MQGp:ckpt-step-88" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:thunderbird:9bd8NB8K" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-05-13:square:thunderbird:9bd8NX77:ckpt-step-132" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:12-21-24:Ah0F4uLP:ckpt-step-185" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:12-21-24:Ah0FNFHQ:ckpt-step-370" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:12-21-24:Ah0FNFS1" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::9yOpXJbd:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::9yOpXVGv" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::9yOpXmyQ:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::9yWRL773:ckpt-step-1482" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::9yWRLeLB:ckpt-step-741" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::9yWRM8Zn" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A1pIt632" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A1pItfDC:ckpt-step-1536" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A1pItofx:ckpt-step-768" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A218TwmT:ckpt-step-768" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A218UZjU:ckpt-step-1536" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A218UzZf" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A3FCYhcv:ckpt-step-906" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A3FCYpNh:ckpt-step-1812" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A3FCZe3h" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A6lkYKvg:ckpt-step-80" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A6lkYTPi:ckpt-step-90" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::A6lkZ4nA" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADYnVcKn:ckpt-step-153" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADYnWDpr:ckpt-step-306" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADYnWF7g" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADcZL13Y:ckpt-step-149" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADcZLJjk:ckpt-step-298" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADcZMaZB" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADdWL6S7:ckpt-step-149" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADdWLGiA:ckpt-step-298" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADdWLpNL" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADv4G9ED:ckpt-step-310" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADv4GfJI" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ADv4GslV:ckpt-step-155" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AFvffbd6:ckpt-step-60" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AFvfgOvb" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AFvfgYxS:ckpt-step-75" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AIrPDXh4:ckpt-step-70" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AIrPE1Jn:ckpt-step-84" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AIrPFDOA" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AIrRI7Py" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AIrRIbun:ckpt-step-70" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AIrRIz3n:ckpt-step-84" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AJPMFYjn:ckpt-step-70" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AJPMSMwR:ckpt-step-84" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AJPMTSQg" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALDZQz9s:ckpt-step-57" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALDZbB0b:ckpt-step-57" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALDZlhsT:ckpt-step-57" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALDZrh8z:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALDZrhRU:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALDZrhWY:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALDZs4af" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALDZsBZ7" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALDZsiMB" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALelRGKV:ckpt-step-75" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALelRQjh:ckpt-step-50" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALelSl5l" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALfXG00U:ckpt-step-26" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALfXHUyM" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ALfXHdnT:ckpt-step-52" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AM3Kk6bJ:ckpt-step-57" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AM3Km10T:ckpt-step-114" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AM3KmncS" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMHzrhbX:ckpt-step-58" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI02GZM:ckpt-step-58" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0CTR7:ckpt-step-58" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0MEJb:ckpt-step-116" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0MZIn:ckpt-step-116" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0MbSE:ckpt-step-116" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0NAKb:ckpt-step-116" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0NGtf" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0NZqn:ckpt-step-58" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0NfHv" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0Nkxa" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMI0NxXJ" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMgDbCpJ:ckpt-step-61" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMgDmR8i:ckpt-step-61" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMgDwgwF:ckpt-step-61" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMgE01SL" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMgE0Zqi" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMgE0dya:ckpt-step-122" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMgE0l6B" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMgE0lmy:ckpt-step-122" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::AMgE0x9A:ckpt-step-122" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANBhCPM4:ckpt-step-71" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANBhNQrL:ckpt-step-71" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANBhXvS0:ckpt-step-71" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANBheCpk:ckpt-step-142" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANBheHqF:ckpt-step-142" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANBhelmB:ckpt-step-142" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANBhfHg0" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANBhfP3K" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANBhfWTj" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANR81FlE:ckpt-step-71" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANR8340Y" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANR83UMp:ckpt-step-142" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANWxC4R0:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANWxMc5r:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANWxWkuX:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANWxb3ul" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANWxbR1m:ckpt-step-152" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANWxbZ7u:ckpt-step-152" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANWxbueA:ckpt-step-152" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANWxbx9d" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANWxcbir" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANnTNQfB:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANnTXwXd:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANnTeBFW:ckpt-step-152" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANnTeWRz" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANnTedmK:ckpt-step-152" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANnTenB6" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANq2D506:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANq2OJoT:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANq2Ykg1:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANq2f35h:ckpt-step-152" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANq2fWSn:ckpt-step-152" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANq2fkPg:ckpt-step-152" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANq2g1fc" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANq2g4RI" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::ANq2gT5D" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::BDcdETt3" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::BDgw3aRR:ckpt-step-770" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::BDgwAYDm" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::Cl22v5JX:ckpt-step-50" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::Cl22ws6P" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square::Cl22ww03:ckpt-step-100" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:presale-prod-update:A1VLdLFo:ckpt-step-772" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:presale-prod-update:A1VLdpp9:ckpt-step-1544" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:presale-prod-update:A1VLef0R" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-1-3-2025-733pm:Aln8wDEd:ckpt-step-57" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-1-3-2025-733pm:Aln99EJs:ckpt-step-76" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-1-3-2025-733pm:Aln99po1" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-1-3-2025:AljIGSIY:ckpt-step-114" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-1-3-2025:AljIUDTx:ckpt-step-228" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-1-3-2025:AljIUw1E" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-4o-beta1:AU2gb0ZW:ckpt-step-99" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-4o-beta1:AU2glfI3:ckpt-step-99" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-4o-beta1:AU2goBN9:ckpt-step-198" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-4o-beta1:AU2goRoo:ckpt-step-198" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-4o-beta1:AU2gpUkI" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uip-4o-beta1:AU2gpkQO" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uipath:AStGEJCN:ckpt-step-140" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uipath:AStGEPHu" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-2024-08-06:square:uipath:AStGErTc:ckpt-step-70" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::9yQURl9e:ckpt-step-702" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::9yQUS8UO" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::9yQUSboN:ckpt-step-1404" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::9yS9rcIf:ckpt-step-741" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::9yS9sWBR:ckpt-step-1482" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::9yS9sZgG" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::9yYfNBYp" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::9yYfNYZR:ckpt-step-741" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::9yYfNa27:ckpt-step-1482" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::A1o0y9c3:ckpt-step-1536" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::A1o0yYU0" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::A1o0yoGv:ckpt-step-768" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::A20kHEh1:ckpt-step-1536" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::A20kHL5C" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::A20kHQH6:ckpt-step-768" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::A3Ew9LPO:ckpt-step-1812" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::A3Ew9Pfa:ckpt-step-906" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::A3EwAWC6" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::C9PyMpaX:ckpt-step-926" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square::C9PyNU6h" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:ading-test:CjZH4S3Z:ckpt-step-10" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:ading-test:CjZH51lQ:ckpt-step-20" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:ading-test:CjZH5Os2" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:merchant-mappings-v1:BVLby6lj:ckpt-step-80" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:merchant-mappings-v1:BVLc6ocQ:ckpt-step-90" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:merchant-mappings-v1:BVLc6zzK" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:merchant-tokens:BUsD3Vq9" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:presale-prod-update:A1V43nWF:ckpt-step-772" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:presale-prod-update:A1V44IqT" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:presale-prod-update:A1V44Vjp:ckpt-step-1544" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:ql-plathelp-241:CRPREgy9:ckpt-step-241" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:ql-plathelp-241:CRPRFEus:ckpt-step-482" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:ql-plathelp-241:CRPRGYXt" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:support-250:Ao0TXJT1:ckpt-step-250" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:support-250:Ao0TYWiG" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:support-250:Ao0TYf9o:ckpt-step-500" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:support-50:AnziWXoE:ckpt-step-50" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:support-50:AnziY3TM" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:support-50:AnziYbeg:ckpt-step-100" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:tarkin:9ozEIZnh:ckpt-step-1751" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:tarkin:9ozEMo2r" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:tarkin:9qecJUHK:ckpt-step-2223" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:tarkin:9qecJuVm" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:tarkin:9qvs9txe:ckpt-step-2241" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:tarkin:9qvsAbS8" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:tarkin:9rJTBC8M:ckpt-step-2241" + }, + { + "provider": "openai", + "model": "ft:gpt-4o-mini-2024-07-18:square:tarkin:9rJTCzuI" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-audio-preview" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-audio-preview-2024-12-17" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-realtime-preview" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-realtime-preview-2024-12-17" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-transcribe" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-tts" + }, + { + "provider": "openai", + "model": "gpt-4o-realtime-preview" + }, + { + "provider": "openai", + "model": "gpt-4o-realtime-preview-2024-12-17" + }, + { + "provider": "openai", + "model": "gpt-4o-realtime-preview-2025-06-03" + }, + { + "provider": "openai", + "model": "gpt-4o-transcribe" + }, + { + "provider": "openai", + "model": "gpt-4o-transcribe-diarize" + }, + { + "provider": "openai", + "model": "gpt-5-search-api" + }, + { + "provider": "openai", + "model": "gpt-5-search-api-2025-10-14" + }, + { + "provider": "openai", + "model": "gpt-audio" + }, + { + "provider": "openai", + "model": "gpt-audio-2025-08-28" + }, + { + "provider": "openai", + "model": "gpt-audio-mini" + }, + { + "provider": "openai", + "model": "gpt-audio-mini-2025-10-06" + }, + { + "provider": "openai", + "model": "gpt-image-1" + }, + { + "provider": "openai", + "model": "gpt-image-1-mini" + }, + { + "provider": "openai", + "model": "gpt-realtime" + }, + { + "provider": "openai", + "model": "gpt-realtime-2025-08-28" + }, + { + "provider": "openai", + "model": "gpt-realtime-mini" + }, + { + "provider": "openai", + "model": "gpt-realtime-mini-2025-10-06" + }, + { + "provider": "openai", + "model": "omni-moderation-2024-09-26" + }, + { + "provider": "openai", + "model": "omni-moderation-latest" + }, + { + "provider": "openai", + "model": "sora-2" + }, + { + "provider": "openai", + "model": "sora-2-pro" + }, + { + "provider": "openai", + "model": "text-embedding-3-large" + }, + { + "provider": "openai", + "model": "text-embedding-3-small" + }, + { + "provider": "openai", + "model": "text-embedding-ada-002" + }, + { + "provider": "openai", + "model": "tts-1" + }, + { + "provider": "openai", + "model": "tts-1-1106" + }, + { + "provider": "openai", + "model": "tts-1-hd" + }, + { + "provider": "openai", + "model": "tts-1-hd-1106" + }, + { + "provider": "openai", + "model": "whisper-1" + }, + { + "provider": "openrouter", + "model": "alibaba/tongyi-deepresearch-30b-a3b" + }, + { + "provider": "openrouter", + "model": "alibaba/tongyi-deepresearch-30b-a3b:free" + }, + { + "provider": "openrouter", + "model": "allenai/olmo-3-7b-instruct" + }, + { + "provider": "openrouter", + "model": "amazon/nova-2-lite-v1" + }, + { + "provider": "openrouter", + "model": "amazon/nova-2-lite-v1:free" + }, + { + "provider": "openrouter", + "model": "amazon/nova-lite-v1" + }, + { + "provider": "openrouter", + "model": "amazon/nova-micro-v1" + }, + { + "provider": "openrouter", + "model": "amazon/nova-premier-v1" + }, + { + "provider": "openrouter", + "model": "amazon/nova-pro-v1" + }, + { + "provider": "openrouter", + "model": "arcee-ai/trinity-mini" + }, + { + "provider": "openrouter", + "model": "arcee-ai/trinity-mini:free" + }, + { + "provider": "openrouter", + "model": "arcee-ai/virtuoso-large" + }, + { + "provider": "openrouter", + "model": "baidu/ernie-4.5-21b-a3b" + }, + { + "provider": "openrouter", + "model": "baidu/ernie-4.5-vl-28b-a3b" + }, + { + "provider": "openrouter", + "model": "deepcogito/cogito-v2-preview-llama-109b-moe" + }, + { + "provider": "openrouter", + "model": "deepcogito/cogito-v2-preview-llama-405b" + }, + { + "provider": "openrouter", + "model": "deepcogito/cogito-v2-preview-llama-70b" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.0-flash-exp:free" + }, + { + "provider": "openrouter", + "model": "inception/mercury" + }, + { + "provider": "openrouter", + "model": "inception/mercury-coder" + }, + { + "provider": "openrouter", + "model": "kwaipilot/kat-coder-pro:free" + }, + { + "provider": "openrouter", + "model": "meituan/longcat-flash-chat:free" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3.3-70b-instruct:free" + }, + { + "provider": "openrouter", + "model": "microsoft/phi-3-medium-128k-instruct" + }, + { + "provider": "openrouter", + "model": "microsoft/phi-3-mini-128k-instruct" + }, + { + "provider": "openrouter", + "model": "microsoft/phi-3.5-mini-128k-instruct" + }, + { + "provider": "openrouter", + "model": "minimax/minimax-m1" + }, + { + "provider": "openrouter", + "model": "minimax/minimax-m2" + }, + { + "provider": "openrouter", + "model": "mistralai/devstral-2512" + }, + { + "provider": "openrouter", + "model": "mistralai/devstral-2512:free" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-7b-instruct:free" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-small-3.1-24b-instruct:free" + }, + { + "provider": "openrouter", + "model": "moonshotai/kimi-k2" + }, + { + "provider": "openrouter", + "model": "moonshotai/kimi-k2-0905" + }, + { + "provider": "openrouter", + "model": "moonshotai/kimi-k2-0905:exacto" + }, + { + "provider": "openrouter", + "model": "moonshotai/kimi-k2-thinking" + }, + { + "provider": "openrouter", + "model": "nex-agi/deepseek-v3.1-nex-n1:free" + }, + { + "provider": "openrouter", + "model": "nousresearch/deephermes-3-mistral-24b-preview" + }, + { + "provider": "openrouter", + "model": "nousresearch/hermes-4-405b" + }, + { + "provider": "openrouter", + "model": "nousresearch/hermes-4-70b" + }, + { + "provider": "openrouter", + "model": "nvidia/llama-3.1-nemotron-70b-instruct" + }, + { + "provider": "openrouter", + "model": "nvidia/llama-3.3-nemotron-super-49b-v1.5" + }, + { + "provider": "openrouter", + "model": "nvidia/nemotron-nano-12b-v2-vl:free" + }, + { + "provider": "openrouter", + "model": "nvidia/nemotron-nano-9b-v2" + }, + { + "provider": "openrouter", + "model": "nvidia/nemotron-nano-9b-v2:free" + }, + { + "provider": "openrouter", + "model": "openai/gpt-oss-120b:free" + }, + { + "provider": "openrouter", + "model": "openai/gpt-oss-20b:free" + }, + { + "provider": "openrouter", + "model": "prime-intellect/intellect-3" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-235b-a22b:free" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-4b:free" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-coder:free" + }, + { + "provider": "openrouter", + "model": "relace/relace-search" + }, + { + "provider": "openrouter", + "model": "sao10k/l3-euryale-70b" + }, + { + "provider": "openrouter", + "model": "sao10k/l3.1-euryale-70b" + }, + { + "provider": "openrouter", + "model": "stepfun-ai/step3" + }, + { + "provider": "openrouter", + "model": "thedrummer/rocinante-12b" + }, + { + "provider": "openrouter", + "model": "thedrummer/unslopnemo-12b" + }, + { + "provider": "openrouter", + "model": "tngtech/deepseek-r1t2-chimera" + }, + { + "provider": "openrouter", + "model": "tngtech/tng-r1t-chimera" + }, + { + "provider": "openrouter", + "model": "tngtech/tng-r1t-chimera:free" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-3-beta" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-3-mini-beta" + }, + { + "provider": "openrouter", + "model": "z-ai/glm-4-32b" + }, + { + "provider": "openrouter", + "model": "z-ai/glm-4.5" + }, + { + "provider": "openrouter", + "model": "z-ai/glm-4.5-air" + }, + { + "provider": "openrouter", + "model": "z-ai/glm-4.5-air:free" + }, + { + "provider": "openrouter", + "model": "z-ai/glm-4.5v" + }, + { + "provider": "openrouter", + "model": "z-ai/glm-4.6" + }, + { + "provider": "openrouter", + "model": "z-ai/glm-4.6:exacto" + }, + { + "provider": "openrouter", + "model": "z-ai/glm-4.6v" + }, + { + "provider": "google", + "model": "aqa" + }, + { + "provider": "google", + "model": "embedding-001" + }, + { + "provider": "google", + "model": "embedding-gecko-001" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-exp-image-generation" + }, + { + "provider": "google", + "model": "gemini-2.5-computer-use-preview-10-2025" + }, + { + "provider": "google", + "model": "gemini-2.5-flash-native-audio-latest" + }, + { + "provider": "google", + "model": "gemini-2.5-flash-preview-tts" + }, + { + "provider": "google", + "model": "gemini-2.5-pro-preview-tts" + }, + { + "provider": "google", + "model": "gemini-embedding-001" + }, + { + "provider": "google", + "model": "gemini-embedding-exp" + }, + { + "provider": "google", + "model": "gemini-embedding-exp-03-07" + }, + { + "provider": "google", + "model": "gemini-exp-1206" + }, + { + "provider": "google", + "model": "gemini-flash-latest" + }, + { + "provider": "google", + "model": "gemini-flash-lite-latest" + }, + { + "provider": "google", + "model": "gemini-pro-latest" + }, + { + "provider": "google", + "model": "gemini-robotics-er-1.5-preview" + }, + { + "provider": "google", + "model": "gemma-3-1b-it" + }, + { + "provider": "google", + "model": "gemma-3n-e2b-it" + }, + { + "provider": "google", + "model": "imagen-4.0-fast-generate-001" + }, + { + "provider": "google", + "model": "imagen-4.0-generate-001" + }, + { + "provider": "google", + "model": "imagen-4.0-generate-preview-06-06" + }, + { + "provider": "google", + "model": "imagen-4.0-ultra-generate-001" + }, + { + "provider": "google", + "model": "imagen-4.0-ultra-generate-preview-06-06" + }, + { + "provider": "google", + "model": "nano-banana-pro-preview" + }, + { + "provider": "google", + "model": "text-embedding-004" + }, + { + "provider": "google", + "model": "veo-2.0-generate-001" + }, + { + "provider": "google", + "model": "veo-3.0-fast-generate-001" + }, + { + "provider": "google", + "model": "veo-3.0-generate-001" + }, + { + "provider": "google", + "model": "veo-3.1-fast-generate-preview" + }, + { + "provider": "google", + "model": "veo-3.1-generate-preview" + } + ], + "all_mappings": { + "xai": [], + "tetrate": [], + "google": [ + { + "provider_model": "gemini-2.0-flash", + "canonical_model": "google/gemini-2.0-flash", + "verified": true + }, + { + "provider_model": "gemini-2.0-flash-001", + "canonical_model": "google/gemini-2.0-flash", + "verified": true + }, + { + "provider_model": "gemini-2.0-flash-exp", + "canonical_model": "google/gemini-2.0-flash", + "verified": true + }, + { + "provider_model": "gemini-2.0-flash-lite", + "canonical_model": "google/gemini-2.0-flash-lite", + "verified": true + }, + { + "provider_model": "gemini-2.0-flash-lite-001", + "canonical_model": "google/gemini-2.0-flash-lite", + "verified": true + }, + { + "provider_model": "gemini-2.0-flash-lite-preview", + "canonical_model": "google/gemini-2.0-flash-lite", + "verified": true + }, + { + "provider_model": "gemini-2.0-flash-lite-preview-02-05", + "canonical_model": "google/gemini-2.0-flash-lite", + "verified": true + }, + { + "provider_model": "gemini-2.5-flash", + "canonical_model": "google/gemini-2.5-flash", + "verified": true + }, + { + "provider_model": "gemini-2.5-flash-image", + "canonical_model": "google/gemini-2.5-flash-image", + "verified": true + }, + { + "provider_model": "gemini-2.5-flash-image-preview", + "canonical_model": "google/gemini-2.5-flash-image", + "verified": true + }, + { + "provider_model": "gemini-2.5-flash-lite", + "canonical_model": "google/gemini-2.5-flash-lite", + "verified": true + }, + { + "provider_model": "gemini-2.5-flash-lite-preview-09-2025", + "canonical_model": "google/gemini-2.5-flash-lite", + "verified": true + }, + { + "provider_model": "gemini-2.5-flash-preview-09-2025", + "canonical_model": "google/gemini-2.5-flash", + "verified": true + }, + { + "provider_model": "gemini-2.5-pro", + "canonical_model": "google/gemini-2.5-pro", + "verified": true + }, + { + "provider_model": "gemini-3-pro-image-preview", + "canonical_model": "google/gemini-3-pro-image", + "verified": true + }, + { + "provider_model": "gemini-3-pro-preview", + "canonical_model": "google/gemini-3-pro", + "verified": true + }, + { + "provider_model": "gemma-3-12b-it", + "canonical_model": "google/gemma-3-12b-it", + "verified": true + }, + { + "provider_model": "gemma-3-27b-it", + "canonical_model": "google/gemma-3-27b-it", + "verified": true + }, + { + "provider_model": "gemma-3-4b-it", + "canonical_model": "google/gemma-3-4b-it", + "verified": true + }, + { + "provider_model": "gemma-3n-e4b-it", + "canonical_model": "google/gemma-3n-e4b-it", + "verified": true + } + ], + "anthropic": [ + { + "provider_model": "claude-3-5-haiku-20241022", + "canonical_model": "anthropic/claude-3.5-haiku", + "verified": true + }, + { + "provider_model": "claude-3-7-sonnet-20250219", + "canonical_model": "anthropic/claude-3.7-sonnet", + "verified": true + }, + { + "provider_model": "claude-3-haiku-20240307", + "canonical_model": "anthropic/claude-3-haiku", + "verified": true + }, + { + "provider_model": "claude-3-opus-20240229", + "canonical_model": "anthropic/claude-3-opus", + "verified": true + }, + { + "provider_model": "claude-haiku-4-5-20251001", + "canonical_model": "anthropic/claude-haiku-4.5", + "verified": true + }, + { + "provider_model": "claude-opus-4-1-20250805", + "canonical_model": "anthropic/claude-opus-4.1", + "verified": true + }, + { + "provider_model": "claude-opus-4-20250514", + "canonical_model": "anthropic/claude-opus-4", + "verified": true + }, + { + "provider_model": "claude-opus-4-5-20251101", + "canonical_model": "anthropic/claude-opus-4.5", + "verified": true + }, + { + "provider_model": "claude-sonnet-4-20250514", + "canonical_model": "anthropic/claude-sonnet-4", + "verified": true + }, + { + "provider_model": "claude-sonnet-4-5-20250929", + "canonical_model": "anthropic/claude-sonnet-4.5", + "verified": true + } + ], + "openrouter": [ + { + "provider_model": "ai21/jamba-large-1.7", + "canonical_model": "ai21/jamba-large-1.7", + "verified": true + }, + { + "provider_model": "ai21/jamba-mini-1.7", + "canonical_model": "ai21/jamba-mini-1.7", + "verified": true + }, + { + "provider_model": "anthropic/claude-3-haiku", + "canonical_model": "anthropic/claude-3-haiku", + "verified": true + }, + { + "provider_model": "anthropic/claude-3-opus", + "canonical_model": "anthropic/claude-3-opus", + "verified": true + }, + { + "provider_model": "anthropic/claude-3.5-haiku", + "canonical_model": "anthropic/claude-3.5-haiku", + "verified": true + }, + { + "provider_model": "anthropic/claude-3.5-haiku-20241022", + "canonical_model": "anthropic/claude-3.5-haiku", + "verified": true + }, + { + "provider_model": "anthropic/claude-3.5-sonnet", + "canonical_model": "anthropic/claude-3.5-sonnet", + "verified": true + }, + { + "provider_model": "anthropic/claude-3.7-sonnet", + "canonical_model": "anthropic/claude-3.7-sonnet", + "verified": true + }, + { + "provider_model": "anthropic/claude-3.7-sonnet:thinking", + "canonical_model": "anthropic/claude-3.7-sonnet:thinking", + "verified": true + }, + { + "provider_model": "anthropic/claude-haiku-4.5", + "canonical_model": "anthropic/claude-haiku-4.5", + "verified": true + }, + { + "provider_model": "anthropic/claude-opus-4", + "canonical_model": "anthropic/claude-opus-4", + "verified": true + }, + { + "provider_model": "anthropic/claude-opus-4.1", + "canonical_model": "anthropic/claude-opus-4.1", + "verified": true + }, + { + "provider_model": "anthropic/claude-opus-4.5", + "canonical_model": "anthropic/claude-opus-4.5", + "verified": true + }, + { + "provider_model": "anthropic/claude-sonnet-4", + "canonical_model": "anthropic/claude-sonnet-4", + "verified": true + }, + { + "provider_model": "anthropic/claude-sonnet-4.5", + "canonical_model": "anthropic/claude-sonnet-4.5", + "verified": true + }, + { + "provider_model": "cohere/command-r-08-2024", + "canonical_model": "cohere/command-r-08", + "verified": true + }, + { + "provider_model": "cohere/command-r-plus-08-2024", + "canonical_model": "cohere/command-r-plus-08", + "verified": true + }, + { + "provider_model": "deepseek/deepseek-chat", + "canonical_model": "deepseek/deepseek-chat", + "verified": true + }, + { + "provider_model": "deepseek/deepseek-chat-v3-0324", + "canonical_model": "deepseek/deepseek-chat", + "verified": true + }, + { + "provider_model": "deepseek/deepseek-chat-v3.1", + "canonical_model": "deepseek/deepseek-chat", + "verified": true + }, + { + "provider_model": "deepseek/deepseek-r1", + "canonical_model": "deepseek/deepseek-r1", + "verified": true + }, + { + "provider_model": "deepseek/deepseek-r1-0528", + "canonical_model": "deepseek/deepseek-r1", + "verified": true + }, + { + "provider_model": "deepseek/deepseek-r1-distill-llama-70b", + "canonical_model": "deepseek/deepseek-r1-distill-llama-70b", + "verified": true + }, + { + "provider_model": "deepseek/deepseek-v3.1-terminus", + "canonical_model": "deepseek/deepseek-v3.1-terminus", + "verified": true + }, + { + "provider_model": "deepseek/deepseek-v3.1-terminus:exacto", + "canonical_model": "deepseek/deepseek-v3.1-terminus", + "verified": true + }, + { + "provider_model": "deepseek/deepseek-v3.2", + "canonical_model": "deepseek/deepseek", + "verified": true + }, + { + "provider_model": "deepseek/deepseek-v3.2-exp", + "canonical_model": "deepseek/deepseek", + "verified": true + }, + { + "provider_model": "google/gemini-2.0-flash-001", + "canonical_model": "google/gemini-2.0-flash", + "verified": true + }, + { + "provider_model": "google/gemini-2.0-flash-lite-001", + "canonical_model": "google/gemini-2.0-flash-lite", + "verified": true + }, + { + "provider_model": "google/gemini-2.5-flash", + "canonical_model": "google/gemini-2.5-flash", + "verified": true + }, + { + "provider_model": "google/gemini-2.5-flash-lite", + "canonical_model": "google/gemini-2.5-flash-lite", + "verified": true + }, + { + "provider_model": "google/gemini-2.5-flash-lite-preview-09-2025", + "canonical_model": "google/gemini-2.5-flash-lite", + "verified": true + }, + { + "provider_model": "google/gemini-2.5-flash-preview-09-2025", + "canonical_model": "google/gemini-2.5-flash", + "verified": true + }, + { + "provider_model": "google/gemini-2.5-pro", + "canonical_model": "google/gemini-2.5-pro", + "verified": true + }, + { + "provider_model": "google/gemini-2.5-pro-preview", + "canonical_model": "google/gemini-2.5-pro", + "verified": true + }, + { + "provider_model": "google/gemini-2.5-pro-preview-05-06", + "canonical_model": "google/gemini-2.5-pro", + "verified": true + }, + { + "provider_model": "google/gemini-3-pro-preview", + "canonical_model": "google/gemini-3-pro", + "verified": true + }, + { + "provider_model": "google/gemma-3-27b-it", + "canonical_model": "google/gemma-3-27b-it", + "verified": true + }, + { + "provider_model": "meta-llama/llama-3-70b-instruct", + "canonical_model": "meta-llama/llama-3-70b-instruct", + "verified": true + }, + { + "provider_model": "meta-llama/llama-3-8b-instruct", + "canonical_model": "meta-llama/llama-3-8b-instruct", + "verified": true + }, + { + "provider_model": "meta-llama/llama-3.1-405b-instruct", + "canonical_model": "meta-llama/llama-3.1-405b-instruct", + "verified": true + }, + { + "provider_model": "meta-llama/llama-3.1-70b-instruct", + "canonical_model": "meta-llama/llama-3.1-70b-instruct", + "verified": true + }, + { + "provider_model": "meta-llama/llama-3.1-8b-instruct", + "canonical_model": "meta-llama/llama-3.1-8b-instruct", + "verified": true + }, + { + "provider_model": "meta-llama/llama-3.2-3b-instruct", + "canonical_model": "meta-llama/llama-3.2-3b-instruct", + "verified": true + }, + { + "provider_model": "meta-llama/llama-3.3-70b-instruct", + "canonical_model": "meta-llama/llama-3.3-70b-instruct", + "verified": true + }, + { + "provider_model": "meta-llama/llama-4-maverick", + "canonical_model": "meta-llama/llama-4-maverick", + "verified": true + }, + { + "provider_model": "meta-llama/llama-4-scout", + "canonical_model": "meta-llama/llama-4-scout", + "verified": true + }, + { + "provider_model": "mistralai/codestral-2508", + "canonical_model": "mistralai/codestral", + "verified": true + }, + { + "provider_model": "mistralai/devstral-medium", + "canonical_model": "mistralai/devstral-medium", + "verified": true + }, + { + "provider_model": "mistralai/devstral-small", + "canonical_model": "mistralai/devstral-small", + "verified": true + }, + { + "provider_model": "mistralai/ministral-14b-2512", + "canonical_model": "mistralai/ministral-14b", + "verified": true + }, + { + "provider_model": "mistralai/ministral-3b", + "canonical_model": "mistralai/ministral-3b", + "verified": true + }, + { + "provider_model": "mistralai/ministral-3b-2512", + "canonical_model": "mistralai/ministral-3b", + "verified": true + }, + { + "provider_model": "mistralai/ministral-8b", + "canonical_model": "mistralai/ministral-8b", + "verified": true + }, + { + "provider_model": "mistralai/ministral-8b-2512", + "canonical_model": "mistralai/ministral-8b", + "verified": true + }, + { + "provider_model": "mistralai/mistral-7b-instruct", + "canonical_model": "mistralai/mistral-7b-instruct", + "verified": true + }, + { + "provider_model": "mistralai/mistral-large", + "canonical_model": "mistralai/mistral-large", + "verified": true + }, + { + "provider_model": "mistralai/mistral-large-2407", + "canonical_model": "mistralai/mistral-large", + "verified": true + }, + { + "provider_model": "mistralai/mistral-large-2411", + "canonical_model": "mistralai/mistral-large", + "verified": true + }, + { + "provider_model": "mistralai/mistral-large-2512", + "canonical_model": "mistralai/mistral-large", + "verified": true + }, + { + "provider_model": "mistralai/mistral-medium-3", + "canonical_model": "mistralai/mistral-medium-3", + "verified": true + }, + { + "provider_model": "mistralai/mistral-medium-3.1", + "canonical_model": "mistralai/mistral-medium-3.1", + "verified": true + }, + { + "provider_model": "mistralai/mistral-nemo", + "canonical_model": "mistralai/mistral-nemo", + "verified": true + }, + { + "provider_model": "mistralai/mistral-saba", + "canonical_model": "mistralai/mistral-saba", + "verified": true + }, + { + "provider_model": "mistralai/mistral-small-24b-instruct-2501", + "canonical_model": "mistralai/mistral-small-24b-instruct", + "verified": true + }, + { + "provider_model": "mistralai/mistral-small-3.1-24b-instruct", + "canonical_model": "mistralai/mistral-small-3.1-24b-instruct", + "verified": true + }, + { + "provider_model": "mistralai/mistral-small-3.2-24b-instruct", + "canonical_model": "mistralai/mistral-small-3.2-24b-instruct", + "verified": true + }, + { + "provider_model": "mistralai/mistral-tiny", + "canonical_model": "mistralai/mistral-tiny", + "verified": true + }, + { + "provider_model": "mistralai/mixtral-8x22b-instruct", + "canonical_model": "mistralai/mixtral-8x22b-instruct", + "verified": true + }, + { + "provider_model": "mistralai/mixtral-8x7b-instruct", + "canonical_model": "mistralai/mixtral-8x7b-instruct", + "verified": true + }, + { + "provider_model": "mistralai/pixtral-12b", + "canonical_model": "mistralai/pixtral-12b", + "verified": true + }, + { + "provider_model": "mistralai/pixtral-large-2411", + "canonical_model": "mistralai/pixtral-large", + "verified": true + }, + { + "provider_model": "mistralai/voxtral-small-24b-2507", + "canonical_model": "mistralai/voxtral-small-24b", + "verified": true + }, + { + "provider_model": "openai/codex-mini", + "canonical_model": "openai/codex-mini", + "verified": true + }, + { + "provider_model": "openai/gpt-3.5-turbo", + "canonical_model": "openai/gpt-3.5-turbo", + "verified": true + }, + { + "provider_model": "openai/gpt-3.5-turbo-0613", + "canonical_model": "openai/gpt-3.5-turbo", + "verified": true + }, + { + "provider_model": "openai/gpt-3.5-turbo-16k", + "canonical_model": "openai/gpt-3.5-turbo-16k", + "verified": true + }, + { + "provider_model": "openai/gpt-4", + "canonical_model": "openai/gpt-4", + "verified": true + }, + { + "provider_model": "openai/gpt-4-0314", + "canonical_model": "openai/gpt-4", + "verified": true + }, + { + "provider_model": "openai/gpt-4-1106-preview", + "canonical_model": "openai/gpt-4", + "verified": true + }, + { + "provider_model": "openai/gpt-4-turbo", + "canonical_model": "openai/gpt-4-turbo", + "verified": true + }, + { + "provider_model": "openai/gpt-4-turbo-preview", + "canonical_model": "openai/gpt-4-turbo", + "verified": true + }, + { + "provider_model": "openai/gpt-4.1", + "canonical_model": "openai/gpt-4.1", + "verified": true + }, + { + "provider_model": "openai/gpt-4.1-mini", + "canonical_model": "openai/gpt-4.1-mini", + "verified": true + }, + { + "provider_model": "openai/gpt-4.1-nano", + "canonical_model": "openai/gpt-4.1-nano", + "verified": true + }, + { + "provider_model": "openai/gpt-4o", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "openai/gpt-4o-2024-05-13", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "openai/gpt-4o-2024-08-06", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "openai/gpt-4o-2024-11-20", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "openai/gpt-4o-audio-preview", + "canonical_model": "openai/gpt-4o-audio", + "verified": true + }, + { + "provider_model": "openai/gpt-4o-mini", + "canonical_model": "openai/gpt-4o-mini", + "verified": true + }, + { + "provider_model": "openai/gpt-4o-mini-2024-07-18", + "canonical_model": "openai/gpt-4o-mini", + "verified": true + }, + { + "provider_model": "openai/gpt-4o:extended", + "canonical_model": "openai/gpt-4o:extended", + "verified": true + }, + { + "provider_model": "openai/gpt-5", + "canonical_model": "openai/gpt-5", + "verified": true + }, + { + "provider_model": "openai/gpt-5-codex", + "canonical_model": "openai/gpt-5-codex", + "verified": true + }, + { + "provider_model": "openai/gpt-5-image", + "canonical_model": "openai/gpt-5-image", + "verified": true + }, + { + "provider_model": "openai/gpt-5-image-mini", + "canonical_model": "openai/gpt-5-image-mini", + "verified": true + }, + { + "provider_model": "openai/gpt-5-mini", + "canonical_model": "openai/gpt-5-mini", + "verified": true + }, + { + "provider_model": "openai/gpt-5-nano", + "canonical_model": "openai/gpt-5-nano", + "verified": true + }, + { + "provider_model": "openai/gpt-5-pro", + "canonical_model": "openai/gpt-5-pro", + "verified": true + }, + { + "provider_model": "openai/gpt-5.1", + "canonical_model": "openai/gpt-5.1", + "verified": true + }, + { + "provider_model": "openai/gpt-5.1-chat", + "canonical_model": "openai/gpt-5.1-chat", + "verified": true + }, + { + "provider_model": "openai/gpt-5.1-codex", + "canonical_model": "openai/gpt-5.1-codex", + "verified": true + }, + { + "provider_model": "openai/gpt-5.1-codex-max", + "canonical_model": "openai/gpt-5.1-codex-max", + "verified": true + }, + { + "provider_model": "openai/gpt-5.1-codex-mini", + "canonical_model": "openai/gpt-5.1-codex-mini", + "verified": true + }, + { + "provider_model": "openai/gpt-oss-120b", + "canonical_model": "openai/gpt-oss-120b", + "verified": true + }, + { + "provider_model": "openai/gpt-oss-120b:exacto", + "canonical_model": "openai/gpt-oss-120b", + "verified": true + }, + { + "provider_model": "openai/gpt-oss-20b", + "canonical_model": "openai/gpt-oss-20b", + "verified": true + }, + { + "provider_model": "openai/gpt-oss-safeguard-20b", + "canonical_model": "openai/gpt-oss-safeguard-20b", + "verified": true + }, + { + "provider_model": "openai/o1", + "canonical_model": "openai/o1", + "verified": true + }, + { + "provider_model": "openai/o3", + "canonical_model": "openai/o3", + "verified": true + }, + { + "provider_model": "openai/o3-deep-research", + "canonical_model": "openai/o3-deep-research", + "verified": true + }, + { + "provider_model": "openai/o3-mini", + "canonical_model": "openai/o3-mini", + "verified": true + }, + { + "provider_model": "openai/o3-mini-high", + "canonical_model": "openai/o3-mini-high", + "verified": true + }, + { + "provider_model": "openai/o3-pro", + "canonical_model": "openai/o3-pro", + "verified": true + }, + { + "provider_model": "openai/o4-mini", + "canonical_model": "openai/o4-mini", + "verified": true + }, + { + "provider_model": "openai/o4-mini-deep-research", + "canonical_model": "openai/o4-mini-deep-research", + "verified": true + }, + { + "provider_model": "openai/o4-mini-high", + "canonical_model": "openai/o4-mini-high", + "verified": true + }, + { + "provider_model": "qwen/qwen-2.5-72b-instruct", + "canonical_model": "qwen/qwen-2.5-72b-instruct", + "verified": true + }, + { + "provider_model": "qwen/qwen-max", + "canonical_model": "qwen/qwen-max", + "verified": true + }, + { + "provider_model": "qwen/qwen-plus", + "canonical_model": "qwen/qwen-plus", + "verified": true + }, + { + "provider_model": "qwen/qwen-plus-2025-07-28", + "canonical_model": "qwen/qwen-plus", + "verified": true + }, + { + "provider_model": "qwen/qwen-plus-2025-07-28:thinking", + "canonical_model": "qwen/qwen-plus-2025-07-28:thinking", + "verified": true + }, + { + "provider_model": "qwen/qwen-turbo", + "canonical_model": "qwen/qwen-turbo", + "verified": true + }, + { + "provider_model": "qwen/qwen-vl-max", + "canonical_model": "qwen/qwen-vl-max", + "verified": true + }, + { + "provider_model": "qwen/qwen3-14b", + "canonical_model": "qwen/qwen3-14b", + "verified": true + }, + { + "provider_model": "qwen/qwen3-235b-a22b", + "canonical_model": "qwen/qwen3-235b-a22b", + "verified": true + }, + { + "provider_model": "qwen/qwen3-235b-a22b-2507", + "canonical_model": "qwen/qwen3-235b-a22b", + "verified": true + }, + { + "provider_model": "qwen/qwen3-235b-a22b-thinking-2507", + "canonical_model": "qwen/qwen3-235b-a22b-thinking", + "verified": true + }, + { + "provider_model": "qwen/qwen3-30b-a3b", + "canonical_model": "qwen/qwen3-30b-a3b", + "verified": true + }, + { + "provider_model": "qwen/qwen3-30b-a3b-instruct-2507", + "canonical_model": "qwen/qwen3-30b-a3b-instruct", + "verified": true + }, + { + "provider_model": "qwen/qwen3-30b-a3b-thinking-2507", + "canonical_model": "qwen/qwen3-30b-a3b-thinking", + "verified": true + }, + { + "provider_model": "qwen/qwen3-32b", + "canonical_model": "qwen/qwen3-32b", + "verified": true + }, + { + "provider_model": "qwen/qwen3-8b", + "canonical_model": "qwen/qwen3-8b", + "verified": true + }, + { + "provider_model": "qwen/qwen3-coder", + "canonical_model": "qwen/qwen3-coder", + "verified": true + }, + { + "provider_model": "qwen/qwen3-coder-30b-a3b-instruct", + "canonical_model": "qwen/qwen3-coder-30b-a3b-instruct", + "verified": true + }, + { + "provider_model": "qwen/qwen3-coder-flash", + "canonical_model": "qwen/qwen3-coder-flash", + "verified": true + }, + { + "provider_model": "qwen/qwen3-coder-plus", + "canonical_model": "qwen/qwen3-coder-plus", + "verified": true + }, + { + "provider_model": "qwen/qwen3-coder:exacto", + "canonical_model": "qwen/qwen3-coder", + "verified": true + }, + { + "provider_model": "qwen/qwen3-max", + "canonical_model": "qwen/qwen3-max", + "verified": true + }, + { + "provider_model": "qwen/qwen3-next-80b-a3b-instruct", + "canonical_model": "qwen/qwen3-next-80b-a3b-instruct", + "verified": true + }, + { + "provider_model": "qwen/qwen3-next-80b-a3b-thinking", + "canonical_model": "qwen/qwen3-next-80b-a3b-thinking", + "verified": true + }, + { + "provider_model": "qwen/qwen3-vl-235b-a22b-instruct", + "canonical_model": "qwen/qwen3-vl-235b-a22b-instruct", + "verified": true + }, + { + "provider_model": "qwen/qwen3-vl-235b-a22b-thinking", + "canonical_model": "qwen/qwen3-vl-235b-a22b-thinking", + "verified": true + }, + { + "provider_model": "qwen/qwen3-vl-30b-a3b-instruct", + "canonical_model": "qwen/qwen3-vl-30b-a3b-instruct", + "verified": true + }, + { + "provider_model": "qwen/qwen3-vl-30b-a3b-thinking", + "canonical_model": "qwen/qwen3-vl-30b-a3b-thinking", + "verified": true + }, + { + "provider_model": "qwen/qwen3-vl-8b-instruct", + "canonical_model": "qwen/qwen3-vl-8b-instruct", + "verified": true + }, + { + "provider_model": "qwen/qwen3-vl-8b-thinking", + "canonical_model": "qwen/qwen3-vl-8b-thinking", + "verified": true + }, + { + "provider_model": "qwen/qwq-32b", + "canonical_model": "qwen/qwq-32b", + "verified": true + }, + { + "provider_model": "x-ai/grok-3", + "canonical_model": "x-ai/grok-3", + "verified": true + }, + { + "provider_model": "x-ai/grok-3-mini", + "canonical_model": "x-ai/grok-3-mini", + "verified": true + }, + { + "provider_model": "x-ai/grok-4", + "canonical_model": "x-ai/grok-4", + "verified": true + }, + { + "provider_model": "x-ai/grok-4-fast", + "canonical_model": "x-ai/grok-4-fast", + "verified": true + }, + { + "provider_model": "x-ai/grok-4.1-fast", + "canonical_model": "x-ai/grok-4.1-fast", + "verified": true + }, + { + "provider_model": "x-ai/grok-code-fast-1", + "canonical_model": "x-ai/grok-code-fast-1", + "verified": true + } + ], + "openai": [ + { + "provider_model": "chatgpt-4o-latest", + "canonical_model": "openai/chatgpt-4o", + "verified": true + }, + { + "provider_model": "codex-mini-latest", + "canonical_model": "openai/codex-mini", + "verified": true + }, + { + "provider_model": "gpt-3.5-turbo", + "canonical_model": "openai/gpt-3.5-turbo", + "verified": true + }, + { + "provider_model": "gpt-3.5-turbo-0125", + "canonical_model": "openai/gpt-3.5-turbo", + "verified": true + }, + { + "provider_model": "gpt-3.5-turbo-1106", + "canonical_model": "openai/gpt-3.5-turbo", + "verified": true + }, + { + "provider_model": "gpt-3.5-turbo-16k", + "canonical_model": "openai/gpt-3.5-turbo-16k", + "verified": true + }, + { + "provider_model": "gpt-3.5-turbo-instruct", + "canonical_model": "openai/gpt-3.5-turbo-instruct", + "verified": true + }, + { + "provider_model": "gpt-3.5-turbo-instruct-0914", + "canonical_model": "openai/gpt-3.5-turbo-instruct", + "verified": true + }, + { + "provider_model": "gpt-4", + "canonical_model": "openai/gpt-4", + "verified": true + }, + { + "provider_model": "gpt-4-0125-preview", + "canonical_model": "openai/gpt-4", + "verified": true + }, + { + "provider_model": "gpt-4-0314", + "canonical_model": "openai/gpt-4", + "verified": true + }, + { + "provider_model": "gpt-4-0613", + "canonical_model": "openai/gpt-4", + "verified": true + }, + { + "provider_model": "gpt-4-1106-preview", + "canonical_model": "openai/gpt-4", + "verified": true + }, + { + "provider_model": "gpt-4-turbo", + "canonical_model": "openai/gpt-4-turbo", + "verified": true + }, + { + "provider_model": "gpt-4-turbo-2024-04-09", + "canonical_model": "openai/gpt-4-turbo", + "verified": true + }, + { + "provider_model": "gpt-4-turbo-preview", + "canonical_model": "openai/gpt-4-turbo", + "verified": true + }, + { + "provider_model": "gpt-4.1", + "canonical_model": "openai/gpt-4.1", + "verified": true + }, + { + "provider_model": "gpt-4.1-2025-04-14", + "canonical_model": "openai/gpt-4.1", + "verified": true + }, + { + "provider_model": "gpt-4.1-mini", + "canonical_model": "openai/gpt-4.1-mini", + "verified": true + }, + { + "provider_model": "gpt-4.1-mini-2025-04-14", + "canonical_model": "openai/gpt-4.1-mini", + "verified": true + }, + { + "provider_model": "gpt-4.1-nano", + "canonical_model": "openai/gpt-4.1-nano", + "verified": true + }, + { + "provider_model": "gpt-4.1-nano-2025-04-14", + "canonical_model": "openai/gpt-4.1-nano", + "verified": true + }, + { + "provider_model": "gpt-4o", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "gpt-4o-2024-05-13", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "gpt-4o-2024-08-06", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "gpt-4o-2024-11-20", + "canonical_model": "openai/gpt-4o", + "verified": true + }, + { + "provider_model": "gpt-4o-audio-preview", + "canonical_model": "openai/gpt-4o-audio", + "verified": true + }, + { + "provider_model": "gpt-4o-audio-preview-2024-12-17", + "canonical_model": "openai/gpt-4o-audio", + "verified": true + }, + { + "provider_model": "gpt-4o-audio-preview-2025-06-03", + "canonical_model": "openai/gpt-4o-audio", + "verified": true + }, + { + "provider_model": "gpt-4o-mini", + "canonical_model": "openai/gpt-4o-mini", + "verified": true + }, + { + "provider_model": "gpt-4o-mini-2024-07-18", + "canonical_model": "openai/gpt-4o-mini", + "verified": true + }, + { + "provider_model": "gpt-4o-mini-search-preview", + "canonical_model": "openai/gpt-4o-mini-search", + "verified": true + }, + { + "provider_model": "gpt-4o-mini-search-preview-2025-03-11", + "canonical_model": "openai/gpt-4o-mini-search", + "verified": true + }, + { + "provider_model": "gpt-4o-search-preview", + "canonical_model": "openai/gpt-4o-search", + "verified": true + }, + { + "provider_model": "gpt-4o-search-preview-2025-03-11", + "canonical_model": "openai/gpt-4o-search", + "verified": true + }, + { + "provider_model": "gpt-5", + "canonical_model": "openai/gpt-5", + "verified": true + }, + { + "provider_model": "gpt-5-2025-08-07", + "canonical_model": "openai/gpt-5", + "verified": true + }, + { + "provider_model": "gpt-5-chat-latest", + "canonical_model": "openai/gpt-5-chat", + "verified": true + }, + { + "provider_model": "gpt-5-codex", + "canonical_model": "openai/gpt-5-codex", + "verified": true + }, + { + "provider_model": "gpt-5-mini", + "canonical_model": "openai/gpt-5-mini", + "verified": true + }, + { + "provider_model": "gpt-5-mini-2025-08-07", + "canonical_model": "openai/gpt-5-mini", + "verified": true + }, + { + "provider_model": "gpt-5-nano", + "canonical_model": "openai/gpt-5-nano", + "verified": true + }, + { + "provider_model": "gpt-5-nano-2025-08-07", + "canonical_model": "openai/gpt-5-nano", + "verified": true + }, + { + "provider_model": "gpt-5-pro", + "canonical_model": "openai/gpt-5-pro", + "verified": true + }, + { + "provider_model": "gpt-5-pro-2025-10-06", + "canonical_model": "openai/gpt-5-pro", + "verified": true + }, + { + "provider_model": "gpt-5.1", + "canonical_model": "openai/gpt-5.1", + "verified": true + }, + { + "provider_model": "gpt-5.1-2025-11-13", + "canonical_model": "openai/gpt-5.1", + "verified": true + }, + { + "provider_model": "gpt-5.1-chat-latest", + "canonical_model": "openai/gpt-5.1-chat", + "verified": true + }, + { + "provider_model": "gpt-5.1-codex", + "canonical_model": "openai/gpt-5.1-codex", + "verified": true + }, + { + "provider_model": "gpt-5.1-codex-max", + "canonical_model": "openai/gpt-5.1-codex-max", + "verified": true + }, + { + "provider_model": "gpt-5.1-codex-mini", + "canonical_model": "openai/gpt-5.1-codex-mini", + "verified": true + }, + { + "provider_model": "o1", + "canonical_model": "openai/o1", + "verified": true + }, + { + "provider_model": "o1-2024-12-17", + "canonical_model": "openai/o1", + "verified": true + }, + { + "provider_model": "o1-pro", + "canonical_model": "openai/o1-pro", + "verified": true + }, + { + "provider_model": "o1-pro-2025-03-19", + "canonical_model": "openai/o1-pro", + "verified": true + }, + { + "provider_model": "o3", + "canonical_model": "openai/o3", + "verified": true + }, + { + "provider_model": "o3-2025-04-16", + "canonical_model": "openai/o3", + "verified": true + }, + { + "provider_model": "o3-deep-research", + "canonical_model": "openai/o3-deep-research", + "verified": true + }, + { + "provider_model": "o3-deep-research-2025-06-26", + "canonical_model": "openai/o3-deep-research", + "verified": true + }, + { + "provider_model": "o3-mini", + "canonical_model": "openai/o3-mini", + "verified": true + }, + { + "provider_model": "o3-mini-2025-01-31", + "canonical_model": "openai/o3-mini", + "verified": true + }, + { + "provider_model": "o3-pro", + "canonical_model": "openai/o3-pro", + "verified": true + }, + { + "provider_model": "o3-pro-2025-06-10", + "canonical_model": "openai/o3-pro", + "verified": true + }, + { + "provider_model": "o4-mini", + "canonical_model": "openai/o4-mini", + "verified": true + }, + { + "provider_model": "o4-mini-2025-04-16", + "canonical_model": "openai/o4-mini", + "verified": true + }, + { + "provider_model": "o4-mini-deep-research", + "canonical_model": "openai/o4-mini-deep-research", + "verified": true + }, + { + "provider_model": "o4-mini-deep-research-2025-06-26", + "canonical_model": "openai/o4-mini-deep-research", + "verified": true + } + ] + }, + "mapped_models": [ + { + "provider": "anthropic", + "model": "claude-opus-4-20250514", + "canonical": "anthropic/claude-opus-4" + }, + { + "provider": "anthropic", + "model": "claude-opus-4-1-20250805", + "canonical": "anthropic/claude-opus-4.1" + }, + { + "provider": "anthropic", + "model": "claude-3-5-haiku-20241022", + "canonical": "anthropic/claude-3.5-haiku" + }, + { + "provider": "anthropic", + "model": "claude-3-opus-20240229", + "canonical": "anthropic/claude-3-opus" + }, + { + "provider": "anthropic", + "model": "claude-haiku-4-5-20251001", + "canonical": "anthropic/claude-haiku-4.5" + }, + { + "provider": "anthropic", + "model": "claude-sonnet-4-5-20250929", + "canonical": "anthropic/claude-sonnet-4.5" + }, + { + "provider": "anthropic", + "model": "claude-opus-4-5-20251101", + "canonical": "anthropic/claude-opus-4.5" + }, + { + "provider": "anthropic", + "model": "claude-3-7-sonnet-20250219", + "canonical": "anthropic/claude-3.7-sonnet" + }, + { + "provider": "anthropic", + "model": "claude-sonnet-4-20250514", + "canonical": "anthropic/claude-sonnet-4" + }, + { + "provider": "anthropic", + "model": "claude-3-haiku-20240307", + "canonical": "anthropic/claude-3-haiku" + }, + { + "provider": "openai", + "model": "gpt-5.1-chat-latest", + "canonical": "openai/gpt-5.1-chat" + }, + { + "provider": "openai", + "model": "o4-mini-2025-04-16", + "canonical": "openai/o4-mini" + }, + { + "provider": "openai", + "model": "o3-mini-2025-01-31", + "canonical": "openai/o3-mini" + }, + { + "provider": "openai", + "model": "gpt-4.1-mini-2025-04-14", + "canonical": "openai/gpt-4.1-mini" + }, + { + "provider": "openai", + "model": "gpt-5.1", + "canonical": "openai/gpt-5.1" + }, + { + "provider": "openai", + "model": "o1-pro", + "canonical": "openai/o1-pro" + }, + { + "provider": "openai", + "model": "gpt-4o", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openai", + "model": "gpt-5-pro", + "canonical": "openai/gpt-5-pro" + }, + { + "provider": "openai", + "model": "gpt-4-0125-preview", + "canonical": "openai/gpt-4" + }, + { + "provider": "openai", + "model": "gpt-4.1-2025-04-14", + "canonical": "openai/gpt-4.1" + }, + { + "provider": "openai", + "model": "gpt-3.5-turbo-1106", + "canonical": "openai/gpt-3.5-turbo" + }, + { + "provider": "openai", + "model": "gpt-4o-2024-11-20", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openai", + "model": "gpt-3.5-turbo-instruct-0914", + "canonical": "openai/gpt-3.5-turbo-instruct" + }, + { + "provider": "openai", + "model": "gpt-5-nano", + "canonical": "openai/gpt-5-nano" + }, + { + "provider": "openai", + "model": "gpt-4.1-nano", + "canonical": "openai/gpt-4.1-nano" + }, + { + "provider": "openai", + "model": "o3-deep-research-2025-06-26", + "canonical": "openai/o3-deep-research" + }, + { + "provider": "openai", + "model": "o1-pro-2025-03-19", + "canonical": "openai/o1-pro" + }, + { + "provider": "openai", + "model": "gpt-4-1106-preview", + "canonical": "openai/gpt-4" + }, + { + "provider": "openai", + "model": "codex-mini-latest", + "canonical": "openai/codex-mini" + }, + { + "provider": "openai", + "model": "gpt-3.5-turbo-16k", + "canonical": "openai/gpt-3.5-turbo-16k" + }, + { + "provider": "openai", + "model": "gpt-5.1-2025-11-13", + "canonical": "openai/gpt-5.1" + }, + { + "provider": "openai", + "model": "gpt-4.1", + "canonical": "openai/gpt-4.1" + }, + { + "provider": "openai", + "model": "gpt-4o-mini", + "canonical": "openai/gpt-4o-mini" + }, + { + "provider": "openai", + "model": "gpt-5-chat-latest", + "canonical": "openai/gpt-5-chat" + }, + { + "provider": "openai", + "model": "gpt-4o-search-preview", + "canonical": "openai/gpt-4o-search" + }, + { + "provider": "openai", + "model": "gpt-4.1-nano-2025-04-14", + "canonical": "openai/gpt-4.1-nano" + }, + { + "provider": "openai", + "model": "gpt-4o-audio-preview", + "canonical": "openai/gpt-4o-audio" + }, + { + "provider": "openai", + "model": "o1", + "canonical": "openai/o1" + }, + { + "provider": "openai", + "model": "gpt-5-mini", + "canonical": "openai/gpt-5-mini" + }, + { + "provider": "openai", + "model": "gpt-5", + "canonical": "openai/gpt-5" + }, + { + "provider": "openai", + "model": "gpt-4o-search-preview-2025-03-11", + "canonical": "openai/gpt-4o-search" + }, + { + "provider": "openai", + "model": "gpt-3.5-turbo", + "canonical": "openai/gpt-3.5-turbo" + }, + { + "provider": "openai", + "model": "gpt-3.5-turbo-instruct", + "canonical": "openai/gpt-3.5-turbo-instruct" + }, + { + "provider": "openai", + "model": "gpt-5-codex", + "canonical": "openai/gpt-5-codex" + }, + { + "provider": "openai", + "model": "o3", + "canonical": "openai/o3" + }, + { + "provider": "openai", + "model": "o4-mini-deep-research-2025-06-26", + "canonical": "openai/o4-mini-deep-research" + }, + { + "provider": "openai", + "model": "gpt-4o-2024-05-13", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openai", + "model": "gpt-4-turbo-2024-04-09", + "canonical": "openai/gpt-4-turbo" + }, + { + "provider": "openai", + "model": "gpt-4o-audio-preview-2024-12-17", + "canonical": "openai/gpt-4o-audio" + }, + { + "provider": "openai", + "model": "gpt-4", + "canonical": "openai/gpt-4" + }, + { + "provider": "openai", + "model": "gpt-5-nano-2025-08-07", + "canonical": "openai/gpt-5-nano" + }, + { + "provider": "openai", + "model": "gpt-4-turbo", + "canonical": "openai/gpt-4-turbo" + }, + { + "provider": "openai", + "model": "o3-pro", + "canonical": "openai/o3-pro" + }, + { + "provider": "openai", + "model": "gpt-4-turbo-preview", + "canonical": "openai/gpt-4-turbo" + }, + { + "provider": "openai", + "model": "gpt-4o-2024-08-06", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openai", + "model": "o3-deep-research", + "canonical": "openai/o3-deep-research" + }, + { + "provider": "openai", + "model": "o3-2025-04-16", + "canonical": "openai/o3" + }, + { + "provider": "openai", + "model": "gpt-5.1-codex-mini", + "canonical": "openai/gpt-5.1-codex-mini" + }, + { + "provider": "openai", + "model": "o4-mini-deep-research", + "canonical": "openai/o4-mini-deep-research" + }, + { + "provider": "openai", + "model": "gpt-3.5-turbo-0125", + "canonical": "openai/gpt-3.5-turbo" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-search-preview-2025-03-11", + "canonical": "openai/gpt-4o-mini-search" + }, + { + "provider": "openai", + "model": "gpt-4-0613", + "canonical": "openai/gpt-4" + }, + { + "provider": "openai", + "model": "o3-mini", + "canonical": "openai/o3-mini" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-search-preview", + "canonical": "openai/gpt-4o-mini-search" + }, + { + "provider": "openai", + "model": "gpt-5.1-codex", + "canonical": "openai/gpt-5.1-codex" + }, + { + "provider": "openai", + "model": "o4-mini", + "canonical": "openai/o4-mini" + }, + { + "provider": "openai", + "model": "gpt-5-2025-08-07", + "canonical": "openai/gpt-5" + }, + { + "provider": "openai", + "model": "gpt-4-0314", + "canonical": "openai/gpt-4" + }, + { + "provider": "openai", + "model": "gpt-4o-mini-2024-07-18", + "canonical": "openai/gpt-4o-mini" + }, + { + "provider": "openai", + "model": "o3-pro-2025-06-10", + "canonical": "openai/o3-pro" + }, + { + "provider": "openai", + "model": "gpt-5.1-codex-max", + "canonical": "openai/gpt-5.1-codex-max" + }, + { + "provider": "openai", + "model": "gpt-5-pro-2025-10-06", + "canonical": "openai/gpt-5-pro" + }, + { + "provider": "openai", + "model": "gpt-5-mini-2025-08-07", + "canonical": "openai/gpt-5-mini" + }, + { + "provider": "openai", + "model": "gpt-4o-audio-preview-2025-06-03", + "canonical": "openai/gpt-4o-audio" + }, + { + "provider": "openai", + "model": "gpt-4.1-mini", + "canonical": "openai/gpt-4.1-mini" + }, + { + "provider": "openai", + "model": "chatgpt-4o-latest", + "canonical": "openai/chatgpt-4o" + }, + { + "provider": "openai", + "model": "o1-2024-12-17", + "canonical": "openai/o1" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4o-2024-11-20", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-large", + "canonical": "mistralai/mistral-large" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-pro", + "canonical": "google/gemini-2.5-pro" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5.1", + "canonical": "openai/gpt-5.1" + }, + { + "provider": "openrouter", + "model": "openai/o4-mini-deep-research", + "canonical": "openai/o4-mini-deep-research" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4-1106-preview", + "canonical": "openai/gpt-4" + }, + { + "provider": "openrouter", + "model": "mistralai/ministral-3b-2512", + "canonical": "mistralai/ministral-3b" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4o:extended", + "canonical": "openai/gpt-4o:extended" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-sonnet-4", + "canonical": "anthropic/claude-sonnet-4" + }, + { + "provider": "openrouter", + "model": "mistralai/ministral-3b", + "canonical": "mistralai/ministral-3b" + }, + { + "provider": "openrouter", + "model": "mistralai/pixtral-12b", + "canonical": "mistralai/pixtral-12b" + }, + { + "provider": "openrouter", + "model": "ai21/jamba-large-1.7", + "canonical": "ai21/jamba-large-1.7" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-3-haiku", + "canonical": "anthropic/claude-3-haiku" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-r1-distill-llama-70b", + "canonical": "deepseek/deepseek-r1-distill-llama-70b" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4o-2024-05-13", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-medium-3.1", + "canonical": "mistralai/mistral-medium-3.1" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3-70b-instruct", + "canonical": "meta-llama/llama-3-70b-instruct" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-flash-lite-preview-09-2025", + "canonical": "google/gemini-2.5-flash-lite" + }, + { + "provider": "openrouter", + "model": "openai/gpt-3.5-turbo-16k", + "canonical": "openai/gpt-3.5-turbo-16k" + }, + { + "provider": "openrouter", + "model": "google/gemma-3-27b-it", + "canonical": "google/gemma-3-27b-it" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-v3.1-terminus:exacto", + "canonical": "deepseek/deepseek-v3.1-terminus" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-large-2411", + "canonical": "mistralai/mistral-large" + }, + { + "provider": "openrouter", + "model": "mistralai/devstral-medium", + "canonical": "mistralai/devstral-medium" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-vl-30b-a3b-thinking", + "canonical": "qwen/qwen3-vl-30b-a3b-thinking" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-4.1-fast", + "canonical": "x-ai/grok-4.1-fast" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3.1-405b-instruct", + "canonical": "meta-llama/llama-3.1-405b-instruct" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-30b-a3b", + "canonical": "qwen/qwen3-30b-a3b" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-coder:exacto", + "canonical": "qwen/qwen3-coder" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-next-80b-a3b-instruct", + "canonical": "qwen/qwen3-next-80b-a3b-instruct" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-3", + "canonical": "x-ai/grok-3" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.0-flash-001", + "canonical": "google/gemini-2.0-flash" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-4-maverick", + "canonical": "meta-llama/llama-4-maverick" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-3.5-sonnet", + "canonical": "anthropic/claude-3.5-sonnet" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-tiny", + "canonical": "mistralai/mistral-tiny" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5.1-codex", + "canonical": "openai/gpt-5.1-codex" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5-image-mini", + "canonical": "openai/gpt-5-image-mini" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5-pro", + "canonical": "openai/gpt-5-pro" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5.1-codex-max", + "canonical": "openai/gpt-5.1-codex-max" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4-0314", + "canonical": "openai/gpt-4" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-vl-8b-instruct", + "canonical": "qwen/qwen3-vl-8b-instruct" + }, + { + "provider": "openrouter", + "model": "openai/o3", + "canonical": "openai/o3" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-235b-a22b", + "canonical": "qwen/qwen3-235b-a22b" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-3.5-haiku", + "canonical": "anthropic/claude-3.5-haiku" + }, + { + "provider": "openrouter", + "model": "mistralai/ministral-8b-2512", + "canonical": "mistralai/ministral-8b" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-flash", + "canonical": "google/gemini-2.5-flash" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4.1", + "canonical": "openai/gpt-4.1" + }, + { + "provider": "openrouter", + "model": "mistralai/voxtral-small-24b-2507", + "canonical": "mistralai/voxtral-small-24b" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-coder", + "canonical": "qwen/qwen3-coder" + }, + { + "provider": "openrouter", + "model": "mistralai/ministral-8b", + "canonical": "mistralai/ministral-8b" + }, + { + "provider": "openrouter", + "model": "mistralai/codestral-2508", + "canonical": "mistralai/codestral" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3.3-70b-instruct", + "canonical": "meta-llama/llama-3.3-70b-instruct" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-14b", + "canonical": "qwen/qwen3-14b" + }, + { + "provider": "openrouter", + "model": "openai/o4-mini", + "canonical": "openai/o4-mini" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3-8b-instruct", + "canonical": "meta-llama/llama-3-8b-instruct" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4o-2024-08-06", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5", + "canonical": "openai/gpt-5" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-code-fast-1", + "canonical": "x-ai/grok-code-fast-1" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-opus-4", + "canonical": "anthropic/claude-opus-4" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-vl-max", + "canonical": "qwen/qwen-vl-max" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-pro-preview-05-06", + "canonical": "google/gemini-2.5-pro" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-r1", + "canonical": "deepseek/deepseek-r1" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4-turbo", + "canonical": "openai/gpt-4-turbo" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-max", + "canonical": "qwen/qwen-max" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-7b-instruct", + "canonical": "mistralai/mistral-7b-instruct" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-flash-lite", + "canonical": "google/gemini-2.5-flash-lite" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-large-2407", + "canonical": "mistralai/mistral-large" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-medium-3", + "canonical": "mistralai/mistral-medium-3" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-2.5-72b-instruct", + "canonical": "qwen/qwen-2.5-72b-instruct" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-sonnet-4.5", + "canonical": "anthropic/claude-sonnet-4.5" + }, + { + "provider": "openrouter", + "model": "openai/o3-mini", + "canonical": "openai/o3-mini" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-saba", + "canonical": "mistralai/mistral-saba" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5-nano", + "canonical": "openai/gpt-5-nano" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4.1-mini", + "canonical": "openai/gpt-4.1-mini" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-opus-4.5", + "canonical": "anthropic/claude-opus-4.5" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-4-fast", + "canonical": "x-ai/grok-4-fast" + }, + { + "provider": "openrouter", + "model": "mistralai/mixtral-8x7b-instruct", + "canonical": "mistralai/mixtral-8x7b-instruct" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3.2-3b-instruct", + "canonical": "meta-llama/llama-3.2-3b-instruct" + }, + { + "provider": "openrouter", + "model": "openai/o4-mini-high", + "canonical": "openai/o4-mini-high" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-plus-2025-07-28", + "canonical": "qwen/qwen-plus" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4o-audio-preview", + "canonical": "openai/gpt-4o-audio" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-pro-preview", + "canonical": "google/gemini-2.5-pro" + }, + { + "provider": "openrouter", + "model": "qwen/qwq-32b", + "canonical": "qwen/qwq-32b" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3.1-70b-instruct", + "canonical": "meta-llama/llama-3.1-70b-instruct" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4.1-nano", + "canonical": "openai/gpt-4.1-nano" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-3.7-sonnet:thinking", + "canonical": "anthropic/claude-3.7-sonnet:thinking" + }, + { + "provider": "openrouter", + "model": "openai/o1", + "canonical": "openai/o1" + }, + { + "provider": "openrouter", + "model": "cohere/command-r-08-2024", + "canonical": "cohere/command-r-08" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-plus", + "canonical": "qwen/qwen-plus" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-235b-a22b-thinking-2507", + "canonical": "qwen/qwen3-235b-a22b-thinking" + }, + { + "provider": "openrouter", + "model": "ai21/jamba-mini-1.7", + "canonical": "ai21/jamba-mini-1.7" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-3-mini", + "canonical": "x-ai/grok-3-mini" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-vl-235b-a22b-instruct", + "canonical": "qwen/qwen3-vl-235b-a22b-instruct" + }, + { + "provider": "openrouter", + "model": "openai/gpt-oss-120b", + "canonical": "openai/gpt-oss-120b" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.0-flash-lite-001", + "canonical": "google/gemini-2.0-flash-lite" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-coder-30b-a3b-instruct", + "canonical": "qwen/qwen3-coder-30b-a3b-instruct" + }, + { + "provider": "openrouter", + "model": "openai/o3-mini-high", + "canonical": "openai/o3-mini-high" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-3.7-sonnet", + "canonical": "anthropic/claude-3.7-sonnet" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-v3.2-exp", + "canonical": "deepseek/deepseek" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-30b-a3b-thinking-2507", + "canonical": "qwen/qwen3-30b-a3b-thinking" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-chat-v3-0324", + "canonical": "deepseek/deepseek-chat" + }, + { + "provider": "openrouter", + "model": "google/gemini-2.5-flash-preview-09-2025", + "canonical": "google/gemini-2.5-flash" + }, + { + "provider": "openrouter", + "model": "openai/gpt-oss-safeguard-20b", + "canonical": "openai/gpt-oss-safeguard-20b" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5-mini", + "canonical": "openai/gpt-5-mini" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-coder-plus", + "canonical": "qwen/qwen3-coder-plus" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-3.1-8b-instruct", + "canonical": "meta-llama/llama-3.1-8b-instruct" + }, + { + "provider": "openrouter", + "model": "openai/gpt-3.5-turbo", + "canonical": "openai/gpt-3.5-turbo" + }, + { + "provider": "openrouter", + "model": "mistralai/pixtral-large-2411", + "canonical": "mistralai/pixtral-large" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-v3.1-terminus", + "canonical": "deepseek/deepseek-v3.1-terminus" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4o-mini", + "canonical": "openai/gpt-4o-mini" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-nemo", + "canonical": "mistralai/mistral-nemo" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-next-80b-a3b-thinking", + "canonical": "qwen/qwen3-next-80b-a3b-thinking" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-vl-235b-a22b-thinking", + "canonical": "qwen/qwen3-vl-235b-a22b-thinking" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4o-mini-2024-07-18", + "canonical": "openai/gpt-4o-mini" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-r1-0528", + "canonical": "deepseek/deepseek-r1" + }, + { + "provider": "openrouter", + "model": "google/gemini-3-pro-preview", + "canonical": "google/gemini-3-pro" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-8b", + "canonical": "qwen/qwen3-8b" + }, + { + "provider": "openrouter", + "model": "openai/o3-pro", + "canonical": "openai/o3-pro" + }, + { + "provider": "openrouter", + "model": "x-ai/grok-4", + "canonical": "x-ai/grok-4" + }, + { + "provider": "openrouter", + "model": "mistralai/mixtral-8x22b-instruct", + "canonical": "mistralai/mixtral-8x22b-instruct" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-haiku-4.5", + "canonical": "anthropic/claude-haiku-4.5" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-chat", + "canonical": "deepseek/deepseek-chat" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-large-2512", + "canonical": "mistralai/mistral-large" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-plus-2025-07-28:thinking", + "canonical": "qwen/qwen-plus-2025-07-28:thinking" + }, + { + "provider": "openrouter", + "model": "qwen/qwen-turbo", + "canonical": "qwen/qwen-turbo" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5.1-chat", + "canonical": "openai/gpt-5.1-chat" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5-image", + "canonical": "openai/gpt-5-image" + }, + { + "provider": "openrouter", + "model": "openai/gpt-oss-20b", + "canonical": "openai/gpt-oss-20b" + }, + { + "provider": "openrouter", + "model": "openai/o3-deep-research", + "canonical": "openai/o3-deep-research" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5-codex", + "canonical": "openai/gpt-5-codex" + }, + { + "provider": "openrouter", + "model": "openai/gpt-oss-120b:exacto", + "canonical": "openai/gpt-oss-120b" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-235b-a22b-2507", + "canonical": "qwen/qwen3-235b-a22b" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4", + "canonical": "openai/gpt-4" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-3-opus", + "canonical": "anthropic/claude-3-opus" + }, + { + "provider": "openrouter", + "model": "meta-llama/llama-4-scout", + "canonical": "meta-llama/llama-4-scout" + }, + { + "provider": "openrouter", + "model": "mistralai/devstral-small", + "canonical": "mistralai/devstral-small" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-small-3.2-24b-instruct", + "canonical": "mistralai/mistral-small-3.2-24b-instruct" + }, + { + "provider": "openrouter", + "model": "mistralai/ministral-14b-2512", + "canonical": "mistralai/ministral-14b" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-small-3.1-24b-instruct", + "canonical": "mistralai/mistral-small-3.1-24b-instruct" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4-turbo-preview", + "canonical": "openai/gpt-4-turbo" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-30b-a3b-instruct-2507", + "canonical": "qwen/qwen3-30b-a3b-instruct" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-opus-4.1", + "canonical": "anthropic/claude-opus-4.1" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-32b", + "canonical": "qwen/qwen3-32b" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-max", + "canonical": "qwen/qwen3-max" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-vl-8b-thinking", + "canonical": "qwen/qwen3-vl-8b-thinking" + }, + { + "provider": "openrouter", + "model": "openai/codex-mini", + "canonical": "openai/codex-mini" + }, + { + "provider": "openrouter", + "model": "openai/gpt-4o", + "canonical": "openai/gpt-4o" + }, + { + "provider": "openrouter", + "model": "mistralai/mistral-small-24b-instruct-2501", + "canonical": "mistralai/mistral-small-24b-instruct" + }, + { + "provider": "openrouter", + "model": "anthropic/claude-3.5-haiku-20241022", + "canonical": "anthropic/claude-3.5-haiku" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-chat-v3.1", + "canonical": "deepseek/deepseek-chat" + }, + { + "provider": "openrouter", + "model": "openai/gpt-3.5-turbo-0613", + "canonical": "openai/gpt-3.5-turbo" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-coder-flash", + "canonical": "qwen/qwen3-coder-flash" + }, + { + "provider": "openrouter", + "model": "openai/gpt-5.1-codex-mini", + "canonical": "openai/gpt-5.1-codex-mini" + }, + { + "provider": "openrouter", + "model": "cohere/command-r-plus-08-2024", + "canonical": "cohere/command-r-plus-08" + }, + { + "provider": "openrouter", + "model": "qwen/qwen3-vl-30b-a3b-instruct", + "canonical": "qwen/qwen3-vl-30b-a3b-instruct" + }, + { + "provider": "openrouter", + "model": "deepseek/deepseek-v3.2", + "canonical": "deepseek/deepseek" + }, + { + "provider": "google", + "model": "gemini-2.0-flash", + "canonical": "google/gemini-2.0-flash" + }, + { + "provider": "google", + "model": "gemini-2.5-flash", + "canonical": "google/gemini-2.5-flash" + }, + { + "provider": "google", + "model": "gemini-2.5-flash-preview-09-2025", + "canonical": "google/gemini-2.5-flash" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-001", + "canonical": "google/gemini-2.0-flash" + }, + { + "provider": "google", + "model": "gemma-3n-e4b-it", + "canonical": "google/gemma-3n-e4b-it" + }, + { + "provider": "google", + "model": "gemini-2.5-pro", + "canonical": "google/gemini-2.5-pro" + }, + { + "provider": "google", + "model": "gemma-3-4b-it", + "canonical": "google/gemma-3-4b-it" + }, + { + "provider": "google", + "model": "gemini-2.5-flash-image", + "canonical": "google/gemini-2.5-flash-image" + }, + { + "provider": "google", + "model": "gemini-3-pro-image-preview", + "canonical": "google/gemini-3-pro-image" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-exp", + "canonical": "google/gemini-2.0-flash" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-lite-preview", + "canonical": "google/gemini-2.0-flash-lite" + }, + { + "provider": "google", + "model": "gemini-2.5-flash-lite", + "canonical": "google/gemini-2.5-flash-lite" + }, + { + "provider": "google", + "model": "gemini-2.5-flash-image-preview", + "canonical": "google/gemini-2.5-flash-image" + }, + { + "provider": "google", + "model": "gemini-3-pro-preview", + "canonical": "google/gemini-3-pro" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-lite-preview-02-05", + "canonical": "google/gemini-2.0-flash-lite" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-lite-001", + "canonical": "google/gemini-2.0-flash-lite" + }, + { + "provider": "google", + "model": "gemini-2.5-flash-lite-preview-09-2025", + "canonical": "google/gemini-2.5-flash-lite" + }, + { + "provider": "google", + "model": "gemma-3-27b-it", + "canonical": "google/gemma-3-27b-it" + }, + { + "provider": "google", + "model": "gemini-2.0-flash-lite", + "canonical": "google/gemini-2.0-flash-lite" + }, + { + "provider": "google", + "model": "gemma-3-12b-it", + "canonical": "google/gemma-3-12b-it" + } + ], + "model_counts": { + "anthropic": 10, + "google": 50, + "tetrate": 0, + "xai": 0, + "openai": 633, + "openrouter": 225 + }, + "canonical_models_used": [ + "mistralai/mistral-small-3.2-24b-instruct", + "meta-llama/llama-3-8b-instruct", + "mistralai/pixtral-12b", + "qwen/qwen3-coder-30b-a3b-instruct", + "anthropic/claude-opus-4", + "cohere/command-r-plus-08", + "google/gemini-2.5-flash-image", + "qwen/qwen3-next-80b-a3b-instruct", + "openai/gpt-4o-mini", + "cohere/command-r-08", + "qwen/qwen3-vl-235b-a22b-thinking", + "openai/gpt-5.1-codex-max", + "mistralai/mistral-large", + "google/gemma-3-27b-it", + "openai/gpt-oss-120b", + "openai/gpt-5", + "openai/gpt-5.1-chat", + "qwen/qwen3-vl-8b-thinking", + "openai/gpt-4o-audio", + "google/gemini-3-pro", + "openai/gpt-5.1-codex", + "openai/o3-pro", + "qwen/qwen3-coder-plus", + "openai/gpt-4", + "openai/gpt-5-image-mini", + "openai/gpt-3.5-turbo-instruct", + "anthropic/claude-3-opus", + "mistralai/ministral-8b", + "qwen/qwen3-30b-a3b-instruct", + "openai/gpt-oss-20b", + "x-ai/grok-code-fast-1", + "mistralai/mistral-saba", + "qwen/qwen3-vl-30b-a3b-instruct", + "openai/o3", + "mistralai/mistral-7b-instruct", + "mistralai/mistral-nemo", + "qwen/qwen3-next-80b-a3b-thinking", + "x-ai/grok-3", + "meta-llama/llama-4-maverick", + "qwen/qwen3-coder-flash", + "openai/gpt-oss-safeguard-20b", + "anthropic/claude-opus-4.5", + "x-ai/grok-4.1-fast", + "google/gemma-3n-e4b-it", + "mistralai/pixtral-large", + "qwen/qwen3-235b-a22b-thinking", + "openai/gpt-5-codex", + "anthropic/claude-3.7-sonnet:thinking", + "anthropic/claude-3.7-sonnet", + "meta-llama/llama-3.3-70b-instruct", + "meta-llama/llama-4-scout", + "openai/gpt-5-nano", + "openai/o3-mini", + "openai/o4-mini-deep-research", + "openai/gpt-4o", + "deepseek/deepseek-v3.1-terminus", + "mistralai/mixtral-8x7b-instruct", + "qwen/qwen-plus-2025-07-28:thinking", + "qwen/qwen-plus", + "mistralai/ministral-14b", + "openai/gpt-5-mini", + "meta-llama/llama-3.2-3b-instruct", + "openai/gpt-5.1", + "openai/gpt-5-pro", + "qwen/qwen3-vl-8b-instruct", + "google/gemini-2.5-flash-lite", + "qwen/qwen-vl-max", + "mistralai/devstral-medium", + "google/gemini-2.5-flash", + "meta-llama/llama-3-70b-instruct", + "mistralai/mistral-small-3.1-24b-instruct", + "qwen/qwen3-32b", + "openai/gpt-3.5-turbo-16k", + "openai/o3-deep-research", + "openai/o1-pro", + "meta-llama/llama-3.1-405b-instruct", + "anthropic/claude-sonnet-4", + "deepseek/deepseek", + "google/gemini-3-pro-image", + "ai21/jamba-mini-1.7", + "anthropic/claude-3.5-haiku", + "qwen/qwen-turbo", + "google/gemma-3-4b-it", + "google/gemini-2.5-pro", + "qwen/qwen3-30b-a3b", + "qwen/qwen-2.5-72b-instruct", + "google/gemma-3-12b-it", + "openai/gpt-4.1-mini", + "openai/gpt-4o-mini-search", + "x-ai/grok-4-fast", + "openai/gpt-4.1", + "openai/gpt-5.1-codex-mini", + "qwen/qwen3-max", + "openai/o4-mini", + "anthropic/claude-opus-4.1", + "mistralai/voxtral-small-24b", + "x-ai/grok-4", + "x-ai/grok-3-mini", + "qwen/qwen-max", + "anthropic/claude-sonnet-4.5", + "openai/gpt-4o-search", + "openai/gpt-5-chat", + "google/gemini-2.0-flash-lite", + "mistralai/mistral-small-24b-instruct", + "mistralai/mistral-medium-3", + "meta-llama/llama-3.1-8b-instruct", + "openai/gpt-4o:extended", + "openai/gpt-5-image", + "qwen/qwq-32b", + "deepseek/deepseek-chat", + "openai/o3-mini-high", + "mistralai/codestral", + "openai/codex-mini", + "deepseek/deepseek-r1", + "qwen/qwen3-30b-a3b-thinking", + "openai/o1", + "openai/gpt-4.1-nano", + "openai/chatgpt-4o", + "openai/o4-mini-high", + "openai/gpt-3.5-turbo", + "openai/gpt-4-turbo", + "anthropic/claude-3.5-sonnet", + "meta-llama/llama-3.1-70b-instruct", + "mistralai/mistral-tiny", + "qwen/qwen3-vl-235b-a22b-instruct", + "qwen/qwen3-8b", + "mistralai/devstral-small", + "anthropic/claude-haiku-4.5", + "deepseek/deepseek-r1-distill-llama-70b", + "qwen/qwen3-14b", + "mistralai/ministral-3b", + "qwen/qwen3-235b-a22b", + "mistralai/mistral-medium-3.1", + "anthropic/claude-3-haiku", + "ai21/jamba-large-1.7", + "google/gemini-2.0-flash", + "qwen/qwen3-vl-30b-a3b-thinking", + "qwen/qwen3-coder", + "mistralai/mixtral-8x22b-instruct" + ] +} \ 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 new file mode 100644 index 000000000000..94cdcfe52346 --- /dev/null +++ b/crates/goose/src/providers/canonical/data/canonical_models.json @@ -0,0 +1,3257 @@ +[ + { + "id": "ai21/jamba-large-1.7", + "name": "AI21: Jamba Large 1.7", + "context_length": 256000, + "max_completion_tokens": 4096, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2e-6, + "completion": 8e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "ai21/jamba-mini-1.7", + "name": "AI21: Jamba Mini 1.7", + "context_length": 256000, + "max_completion_tokens": 4096, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2e-7, + "completion": 4e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "anthropic/claude-3-haiku", + "name": "Anthropic: Claude 3 Haiku", + "context_length": 200000, + "max_completion_tokens": 4096, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2.5e-7, + "completion": 1.25e-6, + "request": 0.0, + "image": 0.0004 + } + }, + { + "id": "anthropic/claude-3-opus", + "name": "Anthropic: Claude 3 Opus", + "context_length": 200000, + "max_completion_tokens": 4096, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 0.000015, + "completion": 0.000075, + "request": 0.0, + "image": 0.024 + } + }, + { + "id": "anthropic/claude-3.5-haiku", + "name": "Anthropic: Claude 3.5 Haiku", + "context_length": 200000, + "max_completion_tokens": 8192, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 8e-7, + "completion": 4e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "anthropic/claude-3.5-sonnet", + "name": "Anthropic: Claude 3.5 Sonnet", + "context_length": 200000, + "max_completion_tokens": 8192, + "input_modalities": [ + "text", + "image", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 6e-6, + "completion": 0.00003, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "anthropic/claude-3.7-sonnet", + "name": "Anthropic: Claude 3.7 Sonnet", + "context_length": 200000, + "max_completion_tokens": 64000, + "input_modalities": [ + "text", + "image", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-6, + "completion": 0.000015, + "request": 0.0, + "image": 0.0048 + } + }, + { + "id": "anthropic/claude-3.7-sonnet:thinking", + "name": "Anthropic: Claude 3.7 Sonnet (thinking)", + "context_length": 200000, + "max_completion_tokens": 64000, + "input_modalities": [ + "text", + "image", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-6, + "completion": 0.000015, + "request": 0.0, + "image": 0.0048 + } + }, + { + "id": "anthropic/claude-haiku-4.5", + "name": "Anthropic: Claude Haiku 4.5", + "context_length": 200000, + "max_completion_tokens": 64000, + "input_modalities": [ + "image", + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1e-6, + "completion": 5e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "anthropic/claude-opus-4", + "name": "Anthropic: Claude Opus 4", + "context_length": 200000, + "max_completion_tokens": 32000, + "input_modalities": [ + "image", + "text", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 0.000015, + "completion": 0.000075, + "request": 0.0, + "image": 0.024 + } + }, + { + "id": "anthropic/claude-opus-4.1", + "name": "Anthropic: Claude Opus 4.1", + "context_length": 200000, + "max_completion_tokens": 32000, + "input_modalities": [ + "image", + "text", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 0.000015, + "completion": 0.000075, + "request": 0.0, + "image": 0.024 + } + }, + { + "id": "anthropic/claude-opus-4.5", + "name": "Anthropic: Claude Opus 4.5", + "context_length": 200000, + "max_completion_tokens": 32000, + "input_modalities": [ + "file", + "image", + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 5e-6, + "completion": 0.000025, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "anthropic/claude-sonnet-4", + "name": "Anthropic: Claude Sonnet 4", + "context_length": 1000000, + "max_completion_tokens": 64000, + "input_modalities": [ + "image", + "text", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-6, + "completion": 0.000015, + "request": 0.0, + "image": 0.0048 + } + }, + { + "id": "anthropic/claude-sonnet-4.5", + "name": "Anthropic: Claude Sonnet 4.5", + "context_length": 1000000, + "max_completion_tokens": 64000, + "input_modalities": [ + "text", + "image", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-6, + "completion": 0.000015, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "cohere/command-a", + "name": "Cohere: Command A", + "context_length": 256000, + "max_completion_tokens": 8192, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 2.5e-6, + "completion": 0.00001, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "cohere/command-r-08", + "name": "Cohere: Command R (08-2024)", + "context_length": 128000, + "max_completion_tokens": 4000, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.5e-7, + "completion": 6e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "cohere/command-r-plus-08", + "name": "Cohere: Command R+ (08-2024)", + "context_length": 128000, + "max_completion_tokens": 4000, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2.5e-6, + "completion": 0.00001, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "cohere/command-r7b-12", + "name": "Cohere: Command R7B (12-2024)", + "context_length": 128000, + "max_completion_tokens": 4000, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 3.75e-8, + "completion": 1.5e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "deepseek/deepseek", + "name": "DeepSeek: DeepSeek V3.2", + "context_length": 163840, + "max_completion_tokens": 163840, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2.5e-7, + "completion": 3.8e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "deepseek/deepseek-chat", + "name": "DeepSeek: DeepSeek V3", + "context_length": 163840, + "max_completion_tokens": 163840, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-7, + "completion": 1.2e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "deepseek/deepseek-prover", + "name": "DeepSeek: DeepSeek Prover V2", + "context_length": 163840, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 5e-7, + "completion": 2.18e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "deepseek/deepseek-r1", + "name": "DeepSeek: R1", + "context_length": 163840, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-7, + "completion": 1.2e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "deepseek/deepseek-r1-0528-qwen3-8b", + "name": "DeepSeek: DeepSeek R1 0528 Qwen3 8B", + "context_length": 32768, + "max_completion_tokens": 32768, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 2e-8, + "completion": 1e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "deepseek/deepseek-r1-distill-llama-70b", + "name": "DeepSeek: R1 Distill Llama 70B", + "context_length": 131072, + "max_completion_tokens": 131072, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-8, + "completion": 1.3e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "deepseek/deepseek-r1-distill-qwen-14b", + "name": "DeepSeek: R1 Distill Qwen 14B", + "context_length": 32768, + "max_completion_tokens": 16384, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 1.2e-7, + "completion": 1.2e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "deepseek/deepseek-r1-distill-qwen-32b", + "name": "DeepSeek: R1 Distill Qwen 32B", + "context_length": 64000, + "max_completion_tokens": 32000, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 2.4e-7, + "completion": 2.4e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "deepseek/deepseek-v3.1-terminus", + "name": "DeepSeek: DeepSeek V3.1 Terminus", + "context_length": 163840, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2.1e-7, + "completion": 7.9e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "deepseek/deepseek-v3.2-speciale", + "name": "DeepSeek: DeepSeek V3.2 Speciale", + "context_length": 163840, + "max_completion_tokens": 65536, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 2.7e-7, + "completion": 4.1e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "google/gemini-2.0-flash", + "name": "Google: Gemini 2.0 Flash", + "context_length": 1048576, + "max_completion_tokens": 8192, + "input_modalities": [ + "text", + "image", + "file", + "audio", + "video" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1e-7, + "completion": 4e-7, + "request": 0.0, + "image": 0.0000258 + } + }, + { + "id": "google/gemini-2.0-flash-lite", + "name": "Google: Gemini 2.0 Flash Lite", + "context_length": 1048576, + "max_completion_tokens": 8192, + "input_modalities": [ + "text", + "image", + "file", + "audio", + "video" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 7.5e-8, + "completion": 3e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "google/gemini-2.5-flash", + "name": "Google: Gemini 2.5 Flash", + "context_length": 1048576, + "max_completion_tokens": 65535, + "input_modalities": [ + "file", + "image", + "text", + "audio", + "video" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-7, + "completion": 2.5e-6, + "request": 0.0, + "image": 0.001238 + } + }, + { + "id": "google/gemini-2.5-flash-image", + "name": "Google: Gemini 2.5 Flash Image (Nano Banana)", + "context_length": 32768, + "max_completion_tokens": 32768, + "input_modalities": [ + "image", + "text" + ], + "output_modalities": [ + "image", + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 3e-7, + "completion": 2.5e-6, + "request": 0.0, + "image": 0.001238 + } + }, + { + "id": "google/gemini-2.5-flash-lite", + "name": "Google: Gemini 2.5 Flash Lite", + "context_length": 1048576, + "max_completion_tokens": 65535, + "input_modalities": [ + "text", + "image", + "file", + "audio", + "video" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1e-7, + "completion": 4e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "google/gemini-2.5-pro", + "name": "Google: Gemini 2.5 Pro", + "context_length": 1048576, + "max_completion_tokens": 65536, + "input_modalities": [ + "text", + "image", + "file", + "audio", + "video" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.25e-6, + "completion": 0.00001, + "request": 0.0, + "image": 0.00516 + } + }, + { + "id": "google/gemini-3-pro", + "name": "Google: Gemini 3 Pro Preview", + "context_length": 1048576, + "max_completion_tokens": 65536, + "input_modalities": [ + "text", + "image", + "file", + "audio", + "video" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2e-6, + "completion": 0.000012, + "request": 0.0, + "image": 0.008256 + } + }, + { + "id": "google/gemini-3-pro-image", + "name": "Google: Nano Banana Pro (Gemini 3 Pro Image Preview)", + "context_length": 65536, + "max_completion_tokens": 32768, + "input_modalities": [ + "image", + "text" + ], + "output_modalities": [ + "image", + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 2e-6, + "completion": 0.000012, + "request": 0.0, + "image": 0.067 + } + }, + { + "id": "google/gemma-2-27b-it", + "name": "Google: Gemma 2 27B", + "context_length": 8192, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 6.5e-7, + "completion": 6.5e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "google/gemma-2-9b-it", + "name": "Google: Gemma 2 9B", + "context_length": 8192, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 3e-8, + "completion": 9e-8, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "google/gemma-3-12b-it", + "name": "Google: Gemma 3 12B", + "context_length": 131072, + "max_completion_tokens": 131072, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 3e-8, + "completion": 1e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "google/gemma-3-27b-it", + "name": "Google: Gemma 3 27B", + "context_length": 96000, + "max_completion_tokens": 96000, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 4e-8, + "completion": 1.5e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "google/gemma-3-4b-it", + "name": "Google: Gemma 3 4B", + "context_length": 96000, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 1.703012e-8, + "completion": 6.81536e-8, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "google/gemma-3n-e4b-it", + "name": "Google: Gemma 3n 4B", + "context_length": 32768, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 2e-8, + "completion": 4e-8, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "meta-llama/llama-3-70b-instruct", + "name": "Meta: Llama 3 70B Instruct", + "context_length": 8192, + "max_completion_tokens": 16384, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-7, + "completion": 4e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "meta-llama/llama-3-8b-instruct", + "name": "Meta: Llama 3 8B Instruct", + "context_length": 8192, + "max_completion_tokens": 16384, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-8, + "completion": 6e-8, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "meta-llama/llama-3.1-405b", + "name": "Meta: Llama 3.1 405B (base)", + "context_length": 32768, + "max_completion_tokens": 32768, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 4e-6, + "completion": 4e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "meta-llama/llama-3.1-405b-instruct", + "name": "Meta: Llama 3.1 405B Instruct", + "context_length": 130815, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3.5e-6, + "completion": 3.5e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "meta-llama/llama-3.1-70b-instruct", + "name": "Meta: Llama 3.1 70B Instruct", + "context_length": 131072, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 4e-7, + "completion": 4e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "meta-llama/llama-3.1-8b-instruct", + "name": "Meta: Llama 3.1 8B Instruct", + "context_length": 131072, + "max_completion_tokens": 16384, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2e-8, + "completion": 3e-8, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "meta-llama/llama-3.2-11b-vision-instruct", + "name": "Meta: Llama 3.2 11B Vision Instruct", + "context_length": 131072, + "max_completion_tokens": 16384, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 4.9e-8, + "completion": 4.9e-8, + "request": 0.0, + "image": 0.00007948 + } + }, + { + "id": "meta-llama/llama-3.2-1b-instruct", + "name": "Meta: Llama 3.2 1B Instruct", + "context_length": 60000, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 2.7e-8, + "completion": 2e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "meta-llama/llama-3.2-3b-instruct", + "name": "Meta: Llama 3.2 3B Instruct", + "context_length": 131072, + "max_completion_tokens": 16384, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2e-8, + "completion": 2e-8, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "meta-llama/llama-3.2-90b-vision-instruct", + "name": "Meta: Llama 3.2 90B Vision Instruct", + "context_length": 32768, + "max_completion_tokens": 16384, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 3.5e-7, + "completion": 4e-7, + "request": 0.0, + "image": 0.0005058 + } + }, + { + "id": "meta-llama/llama-3.3-70b-instruct", + "name": "Meta: Llama 3.3 70B Instruct", + "context_length": 131072, + "max_completion_tokens": 16384, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1e-7, + "completion": 3.2e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "meta-llama/llama-4-maverick", + "name": "Meta: Llama 4 Maverick", + "context_length": 1048576, + "max_completion_tokens": 16384, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.5e-7, + "completion": 6e-7, + "request": 0.0, + "image": 0.0006684 + } + }, + { + "id": "meta-llama/llama-4-scout", + "name": "Meta: Llama 4 Scout", + "context_length": 327680, + "max_completion_tokens": 16384, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 8e-8, + "completion": 3e-7, + "request": 0.0, + "image": 0.0003342 + } + }, + { + "id": "meta-llama/llama-guard-2-8b", + "name": "Meta: LlamaGuard 2 8B", + "context_length": 8192, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 2e-7, + "completion": 2e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "meta-llama/llama-guard-3-8b", + "name": "Llama Guard 3 8B", + "context_length": 131072, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 2e-8, + "completion": 6e-8, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "meta-llama/llama-guard-4-12b", + "name": "Meta: Llama Guard 4 12B", + "context_length": 163840, + "input_modalities": [ + "image", + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 1.8e-7, + "completion": 1.8e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/codestral", + "name": "Mistral: Codestral 2508", + "context_length": 256000, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-7, + "completion": 9e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/devstral", + "name": "Mistral: Devstral 2 2512", + "context_length": 262144, + "max_completion_tokens": 65536, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.5e-7, + "completion": 6e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/devstral-medium", + "name": "Mistral: Devstral Medium", + "context_length": 131072, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 4e-7, + "completion": 2e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/devstral-small", + "name": "Mistral: Devstral Small 1.1", + "context_length": 128000, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 7e-8, + "completion": 2.8e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/ministral-14b", + "name": "Mistral: Ministral 3 14B 2512", + "context_length": 262144, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2e-7, + "completion": 2e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/ministral-3b", + "name": "Mistral: Ministral 3B", + "context_length": 131072, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 4e-8, + "completion": 4e-8, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/ministral-8b", + "name": "Mistral: Ministral 8B", + "context_length": 131072, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1e-7, + "completion": 1e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/mistral-7b-instruct", + "name": "Mistral: Mistral 7B Instruct", + "context_length": 32768, + "max_completion_tokens": 16384, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2.8e-8, + "completion": 5.4e-8, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/mistral-large", + "name": "Mistral Large", + "context_length": 128000, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2e-6, + "completion": 6e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/mistral-medium-3", + "name": "Mistral: Mistral Medium 3", + "context_length": 131072, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 4e-7, + "completion": 2e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/mistral-medium-3.1", + "name": "Mistral: Mistral Medium 3.1", + "context_length": 131072, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 4e-7, + "completion": 2e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/mistral-nemo", + "name": "Mistral: Mistral Nemo", + "context_length": 131072, + "max_completion_tokens": 16384, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2e-8, + "completion": 4e-8, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/mistral-saba", + "name": "Mistral: Saba", + "context_length": 32768, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2e-7, + "completion": 6e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/mistral-small-24b-instruct", + "name": "Mistral: Mistral Small 3", + "context_length": 32768, + "max_completion_tokens": 32768, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-8, + "completion": 1.1e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/mistral-small-3.1-24b-instruct", + "name": "Mistral: Mistral Small 3.1 24B", + "context_length": 131072, + "max_completion_tokens": 131072, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-8, + "completion": 1.1e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/mistral-small-3.2-24b-instruct", + "name": "Mistral: Mistral Small 3.2 24B", + "context_length": 131072, + "max_completion_tokens": 131072, + "input_modalities": [ + "image", + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 6e-8, + "completion": 1.8e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/mistral-tiny", + "name": "Mistral Tiny", + "context_length": 32768, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2.5e-7, + "completion": 2.5e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/mixtral-8x22b-instruct", + "name": "Mistral: Mixtral 8x22B Instruct", + "context_length": 65536, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2e-6, + "completion": 6e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/mixtral-8x7b-instruct", + "name": "Mistral: Mixtral 8x7B Instruct", + "context_length": 32768, + "max_completion_tokens": 16384, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 5.4e-7, + "completion": 5.4e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "mistralai/pixtral-12b", + "name": "Mistral: Pixtral 12B", + "context_length": 32768, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1e-7, + "completion": 1e-7, + "request": 0.0, + "image": 0.0001445 + } + }, + { + "id": "mistralai/pixtral-large", + "name": "Mistral: Pixtral Large 2411", + "context_length": 131072, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2e-6, + "completion": 6e-6, + "request": 0.0, + "image": 0.002888 + } + }, + { + "id": "mistralai/voxtral-small-24b", + "name": "Mistral: Voxtral Small 24B 2507", + "context_length": 32000, + "input_modalities": [ + "text", + "audio" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1e-7, + "completion": 3e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/chatgpt-4o", + "name": "OpenAI: ChatGPT-4o", + "context_length": 128000, + "max_completion_tokens": 16384, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 5e-6, + "completion": 0.000015, + "request": 0.0, + "image": 0.007225 + } + }, + { + "id": "openai/codex-mini", + "name": "OpenAI: Codex Mini", + "context_length": 200000, + "max_completion_tokens": 100000, + "input_modalities": [ + "image", + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.5e-6, + "completion": 6e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-3.5-turbo", + "name": "OpenAI: GPT-3.5 Turbo", + "context_length": 16385, + "max_completion_tokens": 4096, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 5e-7, + "completion": 1.5e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-3.5-turbo-16k", + "name": "OpenAI: GPT-3.5 Turbo 16k", + "context_length": 16385, + "max_completion_tokens": 4096, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-6, + "completion": 4e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-3.5-turbo-instruct", + "name": "OpenAI: GPT-3.5 Turbo Instruct", + "context_length": 4095, + "max_completion_tokens": 4096, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 1.5e-6, + "completion": 2e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-4", + "name": "OpenAI: GPT-4", + "context_length": 8191, + "max_completion_tokens": 4096, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 0.00003, + "completion": 0.00006, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-4-turbo", + "name": "OpenAI: GPT-4 Turbo", + "context_length": 128000, + "max_completion_tokens": 4096, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 0.00001, + "completion": 0.00003, + "request": 0.0, + "image": 0.01445 + } + }, + { + "id": "openai/gpt-4.1", + "name": "OpenAI: GPT-4.1", + "context_length": 1047576, + "max_completion_tokens": 32768, + "input_modalities": [ + "image", + "text", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2e-6, + "completion": 8e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-4.1-mini", + "name": "OpenAI: GPT-4.1 Mini", + "context_length": 1047576, + "max_completion_tokens": 32768, + "input_modalities": [ + "image", + "text", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 4e-7, + "completion": 1.6e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-4.1-nano", + "name": "OpenAI: GPT-4.1 Nano", + "context_length": 1047576, + "max_completion_tokens": 32768, + "input_modalities": [ + "image", + "text", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1e-7, + "completion": 4e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-4o", + "name": "OpenAI: GPT-4o", + "context_length": 128000, + "max_completion_tokens": 16384, + "input_modalities": [ + "text", + "image", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2.5e-6, + "completion": 0.00001, + "request": 0.0, + "image": 0.003613 + } + }, + { + "id": "openai/gpt-4o-audio", + "name": "OpenAI: GPT-4o Audio", + "context_length": 128000, + "max_completion_tokens": 16384, + "input_modalities": [ + "audio", + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2.5e-6, + "completion": 0.00001, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-4o-mini", + "name": "OpenAI: GPT-4o-mini", + "context_length": 128000, + "max_completion_tokens": 16384, + "input_modalities": [ + "text", + "image", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.5e-7, + "completion": 6e-7, + "request": 0.0, + "image": 0.000217 + } + }, + { + "id": "openai/gpt-4o-mini-search", + "name": "OpenAI: GPT-4o-mini Search Preview", + "context_length": 128000, + "max_completion_tokens": 16384, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 1.5e-7, + "completion": 6e-7, + "request": 0.0275, + "image": 0.000217 + } + }, + { + "id": "openai/gpt-4o-search", + "name": "OpenAI: GPT-4o Search Preview", + "context_length": 128000, + "max_completion_tokens": 16384, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 2.5e-6, + "completion": 0.00001, + "request": 0.035, + "image": 0.003613 + } + }, + { + "id": "openai/gpt-4o:extended", + "name": "OpenAI: GPT-4o (extended)", + "context_length": 128000, + "max_completion_tokens": 64000, + "input_modalities": [ + "text", + "image", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 6e-6, + "completion": 0.000018, + "request": 0.0, + "image": 0.007225 + } + }, + { + "id": "openai/gpt-5", + "name": "OpenAI: GPT-5", + "context_length": 400000, + "max_completion_tokens": 128000, + "input_modalities": [ + "text", + "image", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.25e-6, + "completion": 0.00001, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-5-chat", + "name": "OpenAI: GPT-5 Chat", + "context_length": 128000, + "max_completion_tokens": 16384, + "input_modalities": [ + "file", + "image", + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 1.25e-6, + "completion": 0.00001, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-5-codex", + "name": "OpenAI: GPT-5 Codex", + "context_length": 400000, + "max_completion_tokens": 128000, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.25e-6, + "completion": 0.00001, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-5-image", + "name": "OpenAI: GPT-5 Image", + "context_length": 400000, + "max_completion_tokens": 128000, + "input_modalities": [ + "image", + "text", + "file" + ], + "output_modalities": [ + "image", + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 0.00001, + "completion": 0.00001, + "request": 0.0, + "image": 0.00001 + } + }, + { + "id": "openai/gpt-5-image-mini", + "name": "OpenAI: GPT-5 Image Mini", + "context_length": 400000, + "max_completion_tokens": 128000, + "input_modalities": [ + "file", + "image", + "text" + ], + "output_modalities": [ + "image", + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2.5e-6, + "completion": 2e-6, + "request": 0.0, + "image": 2.5e-6 + } + }, + { + "id": "openai/gpt-5-mini", + "name": "OpenAI: GPT-5 Mini", + "context_length": 400000, + "max_completion_tokens": 128000, + "input_modalities": [ + "text", + "image", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2.5e-7, + "completion": 2e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-5-nano", + "name": "OpenAI: GPT-5 Nano", + "context_length": 400000, + "max_completion_tokens": 128000, + "input_modalities": [ + "text", + "image", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 5e-8, + "completion": 4e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-5-pro", + "name": "OpenAI: GPT-5 Pro", + "context_length": 400000, + "max_completion_tokens": 128000, + "input_modalities": [ + "image", + "text", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 0.000015, + "completion": 0.00012, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-5.1", + "name": "OpenAI: GPT-5.1", + "context_length": 400000, + "max_completion_tokens": 128000, + "input_modalities": [ + "image", + "text", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.25e-6, + "completion": 0.00001, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-5.1-chat", + "name": "OpenAI: GPT-5.1 Chat", + "context_length": 128000, + "max_completion_tokens": 16384, + "input_modalities": [ + "file", + "image", + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.25e-6, + "completion": 0.00001, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-5.1-codex", + "name": "OpenAI: GPT-5.1-Codex", + "context_length": 400000, + "max_completion_tokens": 128000, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.25e-6, + "completion": 0.00001, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-5.1-codex-max", + "name": "OpenAI: GPT-5.1-Codex-Max", + "context_length": 400000, + "max_completion_tokens": 128000, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.25e-6, + "completion": 0.00001, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-5.1-codex-mini", + "name": "OpenAI: GPT-5.1-Codex-Mini", + "context_length": 400000, + "max_completion_tokens": 100000, + "input_modalities": [ + "image", + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2.5e-7, + "completion": 2e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-5.2", + "name": "OpenAI: GPT-5.2", + "context_length": 400000, + "max_completion_tokens": 128000, + "input_modalities": [ + "file", + "image", + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.75e-6, + "completion": 0.000014, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-5.2-chat", + "name": "OpenAI: GPT-5.2 Chat", + "context_length": 128000, + "max_completion_tokens": 16384, + "input_modalities": [ + "file", + "image", + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.75e-6, + "completion": 0.000014, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-5.2-pro", + "name": "OpenAI: GPT-5.2 Pro", + "context_length": 400000, + "max_completion_tokens": 128000, + "input_modalities": [ + "image", + "text", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 0.000021, + "completion": 0.000168, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-oss-120b", + "name": "OpenAI: gpt-oss-120b", + "context_length": 131072, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3.9e-8, + "completion": 1.9e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-oss-20b", + "name": "OpenAI: gpt-oss-20b", + "context_length": 131072, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-8, + "completion": 1.4e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/gpt-oss-safeguard-20b", + "name": "OpenAI: gpt-oss-safeguard-20b", + "context_length": 131072, + "max_completion_tokens": 65536, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 7.5e-8, + "completion": 3e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/o1", + "name": "OpenAI: o1", + "context_length": 200000, + "max_completion_tokens": 100000, + "input_modalities": [ + "text", + "image", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 0.000015, + "completion": 0.00006, + "request": 0.0, + "image": 0.021675 + } + }, + { + "id": "openai/o1-pro", + "name": "OpenAI: o1-pro", + "context_length": 200000, + "max_completion_tokens": 100000, + "input_modalities": [ + "text", + "image", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 0.00015, + "completion": 0.0006, + "request": 0.0, + "image": 0.21675 + } + }, + { + "id": "openai/o3", + "name": "OpenAI: o3", + "context_length": 200000, + "max_completion_tokens": 100000, + "input_modalities": [ + "image", + "text", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2e-6, + "completion": 8e-6, + "request": 0.0, + "image": 0.00153 + } + }, + { + "id": "openai/o3-deep-research", + "name": "OpenAI: o3 Deep Research", + "context_length": 200000, + "max_completion_tokens": 100000, + "input_modalities": [ + "image", + "text", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 0.00001, + "completion": 0.00004, + "request": 0.0, + "image": 0.00765 + } + }, + { + "id": "openai/o3-mini", + "name": "OpenAI: o3 Mini", + "context_length": 200000, + "max_completion_tokens": 100000, + "input_modalities": [ + "text", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.1e-6, + "completion": 4.4e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/o3-mini-high", + "name": "OpenAI: o3 Mini High", + "context_length": 200000, + "max_completion_tokens": 100000, + "input_modalities": [ + "text", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.1e-6, + "completion": 4.4e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "openai/o3-pro", + "name": "OpenAI: o3 Pro", + "context_length": 200000, + "max_completion_tokens": 100000, + "input_modalities": [ + "text", + "file", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 0.00002, + "completion": 0.00008, + "request": 0.0, + "image": 0.0153 + } + }, + { + "id": "openai/o4-mini", + "name": "OpenAI: o4 Mini", + "context_length": 200000, + "max_completion_tokens": 100000, + "input_modalities": [ + "image", + "text", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.1e-6, + "completion": 4.4e-6, + "request": 0.0, + "image": 0.0008415 + } + }, + { + "id": "openai/o4-mini-deep-research", + "name": "OpenAI: o4 Mini Deep Research", + "context_length": 200000, + "max_completion_tokens": 100000, + "input_modalities": [ + "file", + "image", + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2e-6, + "completion": 8e-6, + "request": 0.0, + "image": 0.00153 + } + }, + { + "id": "openai/o4-mini-high", + "name": "OpenAI: o4 Mini High", + "context_length": 200000, + "max_completion_tokens": 100000, + "input_modalities": [ + "image", + "text", + "file" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.1e-6, + "completion": 4.4e-6, + "request": 0.0, + "image": 0.0008415 + } + }, + { + "id": "qwen/qwen-2.5-72b-instruct", + "name": "Qwen2.5 72B Instruct", + "context_length": 32768, + "max_completion_tokens": 32768, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 7e-8, + "completion": 2.6e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen-2.5-7b-instruct", + "name": "Qwen: Qwen2.5 7B Instruct", + "context_length": 32768, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 4e-8, + "completion": 1e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen-2.5-coder-32b-instruct", + "name": "Qwen2.5 Coder 32B Instruct", + "context_length": 32768, + "max_completion_tokens": 32768, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 3e-8, + "completion": 1.1e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen-2.5-vl-7b-instruct", + "name": "Qwen: Qwen2.5-VL 7B Instruct", + "context_length": 32768, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 2e-7, + "completion": 2e-7, + "request": 0.0, + "image": 0.0001445 + } + }, + { + "id": "qwen/qwen-max", + "name": "Qwen: Qwen-Max ", + "context_length": 32768, + "max_completion_tokens": 8192, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.6e-6, + "completion": 6.4e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen-plus", + "name": "Qwen: Qwen-Plus", + "context_length": 131072, + "max_completion_tokens": 8192, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 4e-7, + "completion": 1.2e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen-plus-2025-07-28:thinking", + "name": "Qwen: Qwen Plus 0728 (thinking)", + "context_length": 1000000, + "max_completion_tokens": 32768, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 4e-7, + "completion": 4e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen-turbo", + "name": "Qwen: Qwen-Turbo", + "context_length": 1000000, + "max_completion_tokens": 8192, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 5e-8, + "completion": 2e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen-vl-max", + "name": "Qwen: Qwen VL Max", + "context_length": 131072, + "max_completion_tokens": 8192, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 8e-7, + "completion": 3.2e-6, + "request": 0.0, + "image": 0.001024 + } + }, + { + "id": "qwen/qwen-vl-plus", + "name": "Qwen: Qwen VL Plus", + "context_length": 7500, + "max_completion_tokens": 1500, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 2.1e-7, + "completion": 6.3e-7, + "request": 0.0, + "image": 0.0002688 + } + }, + { + "id": "qwen/qwen2.5-coder-7b-instruct", + "name": "Qwen: Qwen2.5 Coder 7B Instruct", + "context_length": 32768, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 3e-8, + "completion": 9e-8, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen2.5-vl-32b-instruct", + "name": "Qwen: Qwen2.5 VL 32B Instruct", + "context_length": 16384, + "max_completion_tokens": 16384, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 5e-8, + "completion": 2.2e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen2.5-vl-72b-instruct", + "name": "Qwen: Qwen2.5 VL 72B Instruct", + "context_length": 32768, + "max_completion_tokens": 32768, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": false, + "pricing": { + "prompt": 3e-8, + "completion": 1.3e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-14b", + "name": "Qwen: Qwen3 14B", + "context_length": 40960, + "max_completion_tokens": 40960, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 5e-8, + "completion": 2.2e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-235b-a22b", + "name": "Qwen: Qwen3 235B A22B", + "context_length": 40960, + "max_completion_tokens": 40960, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.8e-7, + "completion": 5.4e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-235b-a22b-thinking", + "name": "Qwen: Qwen3 235B A22B Thinking 2507", + "context_length": 262144, + "max_completion_tokens": 262144, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.1e-7, + "completion": 6e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-30b-a3b", + "name": "Qwen: Qwen3 30B A3B", + "context_length": 40960, + "max_completion_tokens": 40960, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 6e-8, + "completion": 2.2e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-30b-a3b-instruct", + "name": "Qwen: Qwen3 30B A3B Instruct 2507", + "context_length": 262144, + "max_completion_tokens": 262144, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 8e-8, + "completion": 3.3e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-30b-a3b-thinking", + "name": "Qwen: Qwen3 30B A3B Thinking 2507", + "context_length": 32768, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 5.1e-8, + "completion": 3.4e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-32b", + "name": "Qwen: Qwen3 32B", + "context_length": 40960, + "max_completion_tokens": 40960, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 8e-8, + "completion": 2.4e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-8b", + "name": "Qwen: Qwen3 8B", + "context_length": 128000, + "max_completion_tokens": 20000, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2.8e-8, + "completion": 1.104e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-coder", + "name": "Qwen: Qwen3 Coder 480B A35B", + "context_length": 262144, + "max_completion_tokens": 262144, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2.2e-7, + "completion": 9.5e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-coder-30b-a3b-instruct", + "name": "Qwen: Qwen3 Coder 30B A3B Instruct", + "context_length": 262144, + "max_completion_tokens": 262144, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 6e-8, + "completion": 2.5e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-coder-flash", + "name": "Qwen: Qwen3 Coder Flash", + "context_length": 128000, + "max_completion_tokens": 65536, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-7, + "completion": 1.5e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-coder-plus", + "name": "Qwen: Qwen3 Coder Plus", + "context_length": 128000, + "max_completion_tokens": 65536, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1e-6, + "completion": 5e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-max", + "name": "Qwen: Qwen3 Max", + "context_length": 256000, + "max_completion_tokens": 32768, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.2e-6, + "completion": 6e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-next-80b-a3b-instruct", + "name": "Qwen: Qwen3 Next 80B A3B Instruct", + "context_length": 262144, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 9e-8, + "completion": 1.1e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-next-80b-a3b-thinking", + "name": "Qwen: Qwen3 Next 80B A3B Thinking", + "context_length": 131072, + "max_completion_tokens": 32768, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.2e-7, + "completion": 1.2e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-vl-235b-a22b-instruct", + "name": "Qwen: Qwen3 VL 235B A22B Instruct", + "context_length": 262144, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2e-7, + "completion": 1.2e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-vl-235b-a22b-thinking", + "name": "Qwen: Qwen3 VL 235B A22B Thinking", + "context_length": 262144, + "max_completion_tokens": 262144, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-7, + "completion": 1.2e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-vl-30b-a3b-instruct", + "name": "Qwen: Qwen3 VL 30B A3B Instruct", + "context_length": 262144, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.5e-7, + "completion": 6e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-vl-30b-a3b-thinking", + "name": "Qwen: Qwen3 VL 30B A3B Thinking", + "context_length": 131072, + "max_completion_tokens": 32768, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.6e-7, + "completion": 8e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-vl-8b-instruct", + "name": "Qwen: Qwen3 VL 8B Instruct", + "context_length": 131072, + "max_completion_tokens": 32768, + "input_modalities": [ + "image", + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 6.4e-8, + "completion": 4e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwen3-vl-8b-thinking", + "name": "Qwen: Qwen3 VL 8B Thinking", + "context_length": 256000, + "max_completion_tokens": 32768, + "input_modalities": [ + "image", + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.8e-7, + "completion": 2.1e-6, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "qwen/qwq-32b", + "name": "Qwen: QwQ 32B", + "context_length": 32768, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 1.5e-7, + "completion": 4e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "x-ai/grok-3", + "name": "xAI: Grok 3", + "context_length": 131072, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-6, + "completion": 0.000015, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "x-ai/grok-3-mini", + "name": "xAI: Grok 3 Mini", + "context_length": 131072, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-7, + "completion": 5e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "x-ai/grok-4", + "name": "xAI: Grok 4", + "context_length": 256000, + "input_modalities": [ + "image", + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 3e-6, + "completion": 0.000015, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "x-ai/grok-4-fast", + "name": "xAI: Grok 4 Fast", + "context_length": 2000000, + "max_completion_tokens": 30000, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2e-7, + "completion": 5e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "x-ai/grok-4.1-fast", + "name": "xAI: Grok 4.1 Fast", + "context_length": 2000000, + "max_completion_tokens": 30000, + "input_modalities": [ + "text", + "image" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2e-7, + "completion": 5e-7, + "request": 0.0, + "image": 0.0 + } + }, + { + "id": "x-ai/grok-code-fast-1", + "name": "xAI: Grok Code Fast 1", + "context_length": 256000, + "max_completion_tokens": 10000, + "input_modalities": [ + "text" + ], + "output_modalities": [ + "text" + ], + "supports_tools": true, + "pricing": { + "prompt": 2e-7, + "completion": 1.5e-6, + "request": 0.0, + "image": 0.0 + } + } +] \ No newline at end of file diff --git a/crates/goose/src/providers/canonical/mod.rs b/crates/goose/src/providers/canonical/mod.rs new file mode 100644 index 000000000000..1aac285ca516 --- /dev/null +++ b/crates/goose/src/providers/canonical/mod.rs @@ -0,0 +1,22 @@ +mod model; +mod name_builder; +mod registry; + +pub use model::{CanonicalModel, Pricing}; +pub use name_builder::{canonical_name, map_to_canonical_model, strip_version_suffix}; +pub use registry::CanonicalModelRegistry; + +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +pub struct ModelMapping { + pub provider_model: String, + pub canonical_model: String, +} + +impl ModelMapping { + pub fn new(provider_model: impl Into, canonical_model: impl Into) -> Self { + Self { + provider_model: provider_model.into(), + canonical_model: canonical_model.into(), + } + } +} diff --git a/crates/goose/src/providers/canonical/model.rs b/crates/goose/src/providers/canonical/model.rs new file mode 100644 index 000000000000..77108b495105 --- /dev/null +++ b/crates/goose/src/providers/canonical/model.rs @@ -0,0 +1,53 @@ +use serde::{Deserialize, Serialize}; + +/// Pricing information for a model (all costs in USD per token) +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Pricing { + /// Cost per prompt token + #[serde(skip_serializing_if = "Option::is_none")] + pub prompt: Option, + + /// Cost per completion token + #[serde(skip_serializing_if = "Option::is_none")] + pub completion: Option, + + /// Cost per request + #[serde(skip_serializing_if = "Option::is_none")] + pub request: Option, + + /// Cost per image + #[serde(skip_serializing_if = "Option::is_none")] + pub image: Option, +} + +/// Canonical representation of a model +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct CanonicalModel { + /// Model identifier (e.g., "anthropic/claude-3-5-sonnet" or "openai/gpt-4o:extended") + pub id: String, + + /// Human-readable name (e.g., "Claude 3.5 Sonnet") + pub name: String, + + /// Maximum context window size in tokens + pub context_length: usize, + + /// Maximum completion tokens + #[serde(skip_serializing_if = "Option::is_none")] + pub max_completion_tokens: Option, + + /// Input modalities supported (e.g., ["text", "image"]) + #[serde(default)] + pub input_modalities: Vec, + + /// Output modalities supported (e.g., ["text"]) + #[serde(default)] + pub output_modalities: Vec, + + /// Whether the model supports tool calling + #[serde(default)] + pub supports_tools: bool, + + /// Pricing for this model + pub pricing: Pricing, +} diff --git a/crates/goose/src/providers/canonical/name_builder.rs b/crates/goose/src/providers/canonical/name_builder.rs new file mode 100644 index 000000000000..c82629ed56c4 --- /dev/null +++ b/crates/goose/src/providers/canonical/name_builder.rs @@ -0,0 +1,542 @@ +use once_cell::sync::Lazy; +use regex::Regex; + +static NORMALIZE_VERSION_RE: Lazy = Lazy::new(|| Regex::new(r"-(\d)-(\d)(-|$)").unwrap()); + +static STRIP_PATTERNS: Lazy> = Lazy::new(|| { + vec![ + Regex::new(r"-latest$").unwrap(), + Regex::new(r"-preview(-\d+)*$").unwrap(), + Regex::new(r"-exp(-\d+)*$").unwrap(), + Regex::new(r":exacto$").unwrap(), + Regex::new(r"-\d{8}$").unwrap(), + Regex::new(r"-\d{4}-\d{2}-\d{2}$").unwrap(), + Regex::new(r"-v\d+(\.\d+)*$").unwrap(), + Regex::new(r"-\d{3,}$").unwrap(), + Regex::new(r"-bedrock$").unwrap(), + ] +}); + +static CLAUDE_PATTERNS: Lazy> = Lazy::new(|| { + ["sonnet", "opus", "haiku"] + .iter() + .map(|&size| { + ( + Regex::new(&format!("claude-([0-9.-]+)-{}", size)).unwrap(), + Regex::new(&format!("claude-{}-([0-9.-]+)", size)).unwrap(), + size, + ) + }) + .collect() +}); + +/// Build canonical model name from provider and model identifiers +pub fn canonical_name(provider: &str, model: &str) -> String { + let model_base = strip_version_suffix(model); + + // OpenRouter models are already in canonical format + if provider == "openrouter" { + model_base + } else { + format!("{}/{}", provider, model_base) + } +} + +/// Try to build a canonical name and check if it exists in the registry +fn try_canonical( + provider: &str, + model: &str, + registry: &super::CanonicalModelRegistry, +) -> Option { + let candidate = canonical_name(provider, model); + registry.get(&candidate).map(|_| candidate) +} + +/// Try to map a provider/model pair to a canonical model +pub fn map_to_canonical_model( + provider: &str, + model: &str, + registry: &super::CanonicalModelRegistry, +) -> Option { + // Try direct mapping first + if let Some(candidate) = try_canonical(provider, model, registry) { + return Some(candidate); + } + + // Try with common prefixes stripped + let model_stripped = strip_common_prefixes(model); + if model_stripped != model { + if let Some(candidate) = try_canonical(provider, &model_stripped, registry) { + return Some(candidate); + } + } + + // Try word-order swapping for Claude models (claude-4-opus ↔ claude-opus-4) + if let Some(swapped) = swap_claude_word_order(&model_stripped) { + if let Some(candidate) = try_canonical(provider, &swapped, registry) { + return Some(candidate); + } + + if is_hosting_provider(provider) { + if let Some(inferred) = infer_provider_from_model(&swapped) { + if let Some(candidate) = try_canonical(inferred, &swapped, registry) { + return Some(candidate); + } + } + } + } + + // For hosting providers, try to infer the real provider from model name patterns + if is_hosting_provider(provider) { + if let Some(inferred_provider) = infer_provider_from_model(&model_stripped) { + if let Some(candidate) = try_canonical(inferred_provider, &model_stripped, registry) { + return Some(candidate); + } + } + + if let Some(inferred) = infer_provider_from_model(model) { + if let Some(candidate) = try_canonical(inferred, model, registry) { + return Some(candidate); + } + } + } + + // For provider-prefixed models like "databricks-meta-llama-3-1-70b" + if let Some((extracted_provider, extracted_model)) = extract_provider_prefix(&model_stripped) { + if let Some(candidate) = try_canonical(extracted_provider, extracted_model, registry) { + return Some(candidate); + } + } + + None +} + +/// Swap word order for Claude models to handle both naming conventions +fn swap_claude_word_order(model: &str) -> Option { + if !model.starts_with("claude-") { + return None; + } + + for (forward_re, reverse_re, size) in CLAUDE_PATTERNS.iter() { + if let Some(captures) = forward_re.captures(model) { + let version = &captures[1]; + return Some(format!("claude-{}-{}", size, version)); + } + + if let Some(captures) = reverse_re.captures(model) { + let version = &captures[1]; + return Some(format!("claude-{}-{}", version, size)); + } + } + + None +} + +fn is_hosting_provider(provider: &str) -> bool { + matches!(provider, "databricks" | "openrouter" | "azure" | "bedrock") +} + +/// Infer the real provider from model name patterns +fn infer_provider_from_model(model: &str) -> Option<&'static str> { + let model_lower = model.to_lowercase(); + + if model_lower.contains("claude") { + return Some("anthropic"); + } + + if model_lower.starts_with("gpt-") + || model_lower.starts_with("o1") + || model_lower.starts_with("o3") + || model_lower.starts_with("o4") + || model_lower.starts_with("chatgpt-") + { + return Some("openai"); + } + + if model_lower.starts_with("gemini-") || model_lower.starts_with("gemma-") { + return Some("google"); + } + + if model_lower.contains("llama") { + return Some("meta-llama"); + } + + if model_lower.starts_with("mistral") + || model_lower.starts_with("mixtral") + || model_lower.starts_with("codestral") + || model_lower.starts_with("ministral") + || model_lower.starts_with("pixtral") + || model_lower.starts_with("devstral") + || model_lower.starts_with("voxtral") + { + return Some("mistralai"); + } + + if model_lower.contains("deepseek") { + return Some("deepseek"); + } + + if model_lower.contains("qwen") { + return Some("qwen"); + } + + if model_lower.contains("grok") { + return Some("x-ai"); + } + + if model_lower.contains("jamba") { + return Some("ai21"); + } + + if model_lower.contains("command") { + return Some("cohere"); + } + + None +} + +/// Strip common prefixes from model names using pattern matching +/// Looks for known model family patterns and strips everything before them +fn strip_common_prefixes(model: &str) -> String { + let model_patterns = [ + "claude-", + "gpt-", + "gemini-", + "gemma-", + "o1-", + "o1", + "o3-", + "o3", + "o4-", + "llama-", + "mistral-", + "mixtral-", + "chatgpt-", + "deepseek-", + "qwen-", + "grok-", + "jamba-", + "command-", + "codestral", + "ministral-", + "pixtral-", + "devstral-", + ]; + + let mut earliest_pos = None; + + for pattern in &model_patterns { + if let Some(pos) = model.to_lowercase().find(pattern) { + if earliest_pos.is_none() || pos < earliest_pos.unwrap() { + earliest_pos = Some(pos); + } + } + } + + // If we found a pattern, strip everything before it + if let Some(pos) = earliest_pos { + return model.get(pos..).unwrap_or(model).to_string(); + } + + model.to_string() +} + +/// Try to extract provider prefix from model names like "databricks-meta-llama-3-1-70b" +/// Returns (provider, model) tuple if found +fn extract_provider_prefix(model: &str) -> Option<(&'static str, &str)> { + let known_providers = [ + "anthropic", + "openai", + "google", + "meta-llama", + "mistralai", + "cohere", + "ai21", + "amazon", + "deepseek", + "qwen", + "x-ai", + "nvidia", + "microsoft", + "perplexity", + ]; + + for provider in &known_providers { + let prefix = format!("{}-", provider); + if model.starts_with(&prefix) { + if let Some(model_part) = model.strip_prefix(&prefix) { + return Some((provider, model_part)); + } + } + } + + None +} + +/// Strip version suffixes from model names and normalize version numbers +pub fn strip_version_suffix(model: &str) -> String { + let mut result = NORMALIZE_VERSION_RE + .replace_all(model, "-$1.$2$3") + .to_string(); + + let mut changed = true; + while changed { + let before = result.clone(); + for pattern in STRIP_PATTERNS.iter() { + result = pattern.replace(&result, "").to_string(); + } + changed = result != before; + } + + result +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_map_to_canonical_model() { + let r = super::super::CanonicalModelRegistry::bundled().unwrap(); + + // === Direct provider (non-hosting) === + assert_eq!( + map_to_canonical_model("anthropic", "claude-3-5-sonnet-20241022", r), + Some("anthropic/claude-3.5-sonnet".to_string()) + ); + assert_eq!( + map_to_canonical_model("openai", "gpt-4o-latest", r), + Some("openai/gpt-4o".to_string()) + ); + assert_eq!( + map_to_canonical_model("openai", "gpt-4-turbo-2024-04-09", r), + Some("openai/gpt-4-turbo".to_string()) + ); + + // === OpenRouter (already canonical format) === + assert_eq!( + map_to_canonical_model("openrouter", "anthropic/claude-3.5-sonnet", r), + Some("anthropic/claude-3.5-sonnet".to_string()) + ); + + // === Anthropic Claude - basic === + assert_eq!( + map_to_canonical_model("databricks", "claude-3-5-sonnet", r), + Some("anthropic/claude-3.5-sonnet".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "claude-3-5-sonnet-20241022", r), + Some("anthropic/claude-3.5-sonnet".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "claude-3-5-sonnet-latest", r), + Some("anthropic/claude-3.5-sonnet".to_string()) + ); + + // === Claude word-order swapping (3.x series) === + assert_eq!( + map_to_canonical_model("databricks", "claude-haiku-3-5", r), + Some("anthropic/claude-3.5-haiku".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "claude-sonnet-3-7", r), + Some("anthropic/claude-3.7-sonnet".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "ng-tools-claude-haiku-3-5", r), + Some("anthropic/claude-3.5-haiku".to_string()) + ); + + // === Claude word-order swapping (4.x series) === + assert_eq!( + map_to_canonical_model("databricks", "claude-4-opus", r), + Some("anthropic/claude-opus-4".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "claude-4-sonnet", r), + Some("anthropic/claude-sonnet-4".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "raml-claude-opus-4-5", r), + Some("anthropic/claude-opus-4.5".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "databricks-claude-sonnet-4-5", r), + Some("anthropic/claude-sonnet-4.5".to_string()) + ); + + // === Claude with custom prefixes === + assert_eq!( + map_to_canonical_model("databricks", "goose-claude-4-opus", r), + Some("anthropic/claude-opus-4".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "kgoose-claude-4-sonnet", r), + Some("anthropic/claude-sonnet-4".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "headless-goose-claude-4-sonnet", r), + Some("anthropic/claude-sonnet-4".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "kgoose-cashapp-claude-4-sonnet", r), + Some("anthropic/claude-sonnet-4".to_string()) + ); + + // === Claude with platform suffixes === + assert_eq!( + map_to_canonical_model("databricks", "claude-4-sonnet-bedrock", r), + Some("anthropic/claude-sonnet-4".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "goose-claude-4-sonnet-bedrock", r), + Some("anthropic/claude-sonnet-4".to_string()) + ); + assert_eq!( + map_to_canonical_model("bedrock", "claude-3-5-sonnet", r), + Some("anthropic/claude-3.5-sonnet".to_string()) + ); + + // === OpenAI GPT === + assert_eq!( + map_to_canonical_model("databricks", "gpt-4o", r), + Some("openai/gpt-4o".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "gpt-4o-2024-11-20", r), + Some("openai/gpt-4o".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "gpt-4o-latest", r), + Some("openai/gpt-4o".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "kgoose-gpt-4o", r), + Some("openai/gpt-4o".to_string()) + ); + assert_eq!( + map_to_canonical_model("azure", "gpt-4o", r), + Some("openai/gpt-4o".to_string()) + ); + + // === OpenAI O-series === + assert_eq!( + map_to_canonical_model("databricks", "goose-o1", r), + Some("openai/o1".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "kgoose-o3", r), + Some("openai/o3".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "headless-goose-o3-mini", r), + Some("openai/o3-mini".to_string()) + ); + + // === Google Gemini === + assert_eq!( + map_to_canonical_model("databricks", "gemini-2-5-flash", r), + Some("google/gemini-2.5-flash".to_string()) + ); + + // === Meta Llama === + assert_eq!( + map_to_canonical_model("databricks", "meta-llama-3-1-70b-instruct", r), + Some("meta-llama/llama-3.1-70b-instruct".to_string()) + ); + + // === Mistral variants === + assert_eq!( + map_to_canonical_model("databricks", "codestral", r), + Some("mistralai/codestral".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "ministral-8b", r), + Some("mistralai/ministral-8b".to_string()) + ); + + // === DeepSeek === + assert_eq!( + map_to_canonical_model("databricks", "databricks-deepseek-chat", r), + Some("deepseek/deepseek-chat".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "deepseek-r1", r), + Some("deepseek/deepseek-r1".to_string()) + ); + + // === Qwen === + assert_eq!( + map_to_canonical_model("databricks", "qwen-2-5-72b-instruct", r), + Some("qwen/qwen-2.5-72b-instruct".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "goose-qwen-2-5-72b-instruct", r), + Some("qwen/qwen-2.5-72b-instruct".to_string()) + ); + + // === Grok (X.AI) === + assert_eq!( + map_to_canonical_model("databricks", "grok-3", r), + Some("x-ai/grok-3".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "databricks-grok-4-fast", r), + Some("x-ai/grok-4-fast".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "kgoose-grok-4-fast", r), + Some("x-ai/grok-4-fast".to_string()) + ); + + // === Jamba (AI21) === + assert_eq!( + map_to_canonical_model("databricks", "jamba-large-1-7", r), + Some("ai21/jamba-large-1.7".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "databricks-jamba-large-1-7", r), + Some("ai21/jamba-large-1.7".to_string()) + ); + + // === Cohere Command === + assert_eq!( + map_to_canonical_model("databricks", "command-r-plus-08", r), + Some("cohere/command-r-plus-08".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "goose-command-r-08", r), + Some("cohere/command-r-08".to_string()) + ); + + // === Provider-prefixed extraction === + assert_eq!( + map_to_canonical_model("databricks", "anthropic-claude-3-5-sonnet", r), + Some("anthropic/claude-3.5-sonnet".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "openai-gpt-4o", r), + Some("openai/gpt-4o".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "google-gemini-2-5-flash", r), + Some("google/gemini-2.5-flash".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "mistralai-mistral-large", r), + Some("mistralai/mistral-large".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "deepseek-deepseek-chat", r), + Some("deepseek/deepseek-chat".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "qwen-qwen-2-5-72b-instruct", r), + Some("qwen/qwen-2.5-72b-instruct".to_string()) + ); + assert_eq!( + map_to_canonical_model("databricks", "x-ai-grok-3", r), + Some("x-ai/grok-3".to_string()) + ); + } +} diff --git a/crates/goose/src/providers/canonical/registry.rs b/crates/goose/src/providers/canonical/registry.rs new file mode 100644 index 000000000000..b601bfca1158 --- /dev/null +++ b/crates/goose/src/providers/canonical/registry.rs @@ -0,0 +1,92 @@ +use super::CanonicalModel; +use anyhow::{Context, Result}; +use once_cell::sync::Lazy; +use std::collections::HashMap; +use std::path::Path; + +/// Cached bundled canonical model registry +static BUNDLED_REGISTRY: Lazy> = Lazy::new(|| { + const CANONICAL_MODELS_JSON: &str = include_str!("data/canonical_models.json"); + + let models: Vec = serde_json::from_str(CANONICAL_MODELS_JSON) + .context("Failed to parse bundled canonical models JSON")?; + + let mut registry = CanonicalModelRegistry::new(); + for model in models { + registry.register(model); + } + + Ok(registry) +}); + +#[derive(Debug, Clone)] +pub struct CanonicalModelRegistry { + models: HashMap, +} + +impl CanonicalModelRegistry { + pub fn new() -> Self { + Self { + models: HashMap::new(), + } + } + + pub fn bundled() -> Result<&'static Self> { + BUNDLED_REGISTRY + .as_ref() + .map_err(|e| anyhow::anyhow!("{}", e)) + } + + pub fn from_file(path: impl AsRef) -> Result { + let content = std::fs::read_to_string(path.as_ref()) + .context("Failed to read canonical models file")?; + + let models: Vec = + serde_json::from_str(&content).context("Failed to parse canonical models JSON")?; + + let mut registry = Self::new(); + for model in models { + registry.register(model); + } + + Ok(registry) + } + + pub fn to_file(&self, path: impl AsRef) -> Result<()> { + let mut models: Vec<&CanonicalModel> = self.models.values().collect(); + models.sort_by(|a, b| a.id.cmp(&b.id)); + + let json = serde_json::to_string_pretty(&models) + .context("Failed to serialize canonical models")?; + + std::fs::write(path.as_ref(), json).context("Failed to write canonical models file")?; + + Ok(()) + } + + pub fn register(&mut self, model: CanonicalModel) { + self.models.insert(model.id.clone(), model); + } + + pub fn get(&self, name: &str) -> Option<&CanonicalModel> { + self.models.get(name) + } + + pub fn all_models(&self) -> Vec<&CanonicalModel> { + self.models.values().collect() + } + + pub fn count(&self) -> usize { + self.models.len() + } + + pub fn contains(&self, name: &str) -> bool { + self.models.contains_key(name) + } +} + +impl Default for CanonicalModelRegistry { + fn default() -> Self { + Self::new() + } +} diff --git a/crates/goose/src/providers/mod.rs b/crates/goose/src/providers/mod.rs index 2e27b45d6da0..3c3e64344d7f 100644 --- a/crates/goose/src/providers/mod.rs +++ b/crates/goose/src/providers/mod.rs @@ -5,6 +5,7 @@ pub mod azure; pub mod azureauth; pub mod base; pub mod bedrock; +pub mod canonical; pub mod claude_code; pub mod cursor_agent; pub mod databricks; diff --git a/ui/desktop/src/components/settings/models/modelInterface.ts b/ui/desktop/src/components/settings/models/modelInterface.ts index b3cec2469e19..e37729dfbb68 100644 --- a/ui/desktop/src/components/settings/models/modelInterface.ts +++ b/ui/desktop/src/components/settings/models/modelInterface.ts @@ -47,7 +47,7 @@ export interface ProviderModelsResult { } /** - * Fetches models for all active providers in parallel. + * Fetches recommended models for all active providers in parallel. * Falls back to known_models if fetching fails or returns no models. */ export async function fetchModelsForProviders( diff --git a/ui/desktop/src/components/settings/models/subcomponents/SwitchModelModal.tsx b/ui/desktop/src/components/settings/models/subcomponents/SwitchModelModal.tsx index a1c346359093..849c5ff14d4a 100644 --- a/ui/desktop/src/components/settings/models/subcomponents/SwitchModelModal.tsx +++ b/ui/desktop/src/components/settings/models/subcomponents/SwitchModelModal.tsx @@ -197,7 +197,7 @@ export const SwitchModelModal = ({ setLoadingModels(true); - // Fetching models for all providers + // Fetching models for all providers (always recommended) const results = await fetchModelsForProviders(activeProviders, getProviderModels); // Process results and build grouped options