From fb6ab197821f71d366906a595697dddac55fad9c Mon Sep 17 00:00:00 2001 From: Michael Dwan Date: Mon, 6 Jul 2026 12:34:40 -0600 Subject: [PATCH 1/6] remove AIG hand-run script pipeline The scripts/ + data/ pipeline hit gateway.ai.cloudflare.com/.../compat/models and hand-generated TOMLs under models/workers-ai/. It was never wired into the hourly model sync workflow, so its output drifted from providers/cloudflare-workers-ai/ by a year of merges. models/workers-ai/@cf still contains those stale, hand-generated TOMLs for now. --- .../data/api_response.json | 1 - .../data/model_families.json | 281 ------------------ .../data/model_names.json | 68 ----- .../scripts/01_fetch_model_data.sh | 73 ----- .../scripts/02_generate_model_names.sh | 102 ------- .../scripts/03_generate_model_toml.sh | 245 --------------- .../cloudflare-ai-gateway/scripts/utils.sh | 180 ----------- 7 files changed, 950 deletions(-) delete mode 100644 providers/cloudflare-ai-gateway/data/api_response.json delete mode 100644 providers/cloudflare-ai-gateway/data/model_families.json delete mode 100644 providers/cloudflare-ai-gateway/data/model_names.json delete mode 100755 providers/cloudflare-ai-gateway/scripts/01_fetch_model_data.sh delete mode 100755 providers/cloudflare-ai-gateway/scripts/02_generate_model_names.sh delete mode 100755 providers/cloudflare-ai-gateway/scripts/03_generate_model_toml.sh delete mode 100644 providers/cloudflare-ai-gateway/scripts/utils.sh diff --git a/providers/cloudflare-ai-gateway/data/api_response.json b/providers/cloudflare-ai-gateway/data/api_response.json deleted file mode 100644 index ed90d10f0b..0000000000 --- a/providers/cloudflare-ai-gateway/data/api_response.json +++ /dev/null @@ -1 +0,0 @@ -{"object":"list","data":[{"id":"google-ai-studio/gemini-3-flash-preview","object":"model","created_at":1766046035,"cost_in":5e-7,"cost_out":0.000003,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-3-flash-preview-20251217","object":"model","created_at":1766046035,"cost_in":5e-7,"cost_out":0.000003,"owned_by":"google-ai-studio"},{"id":"mistral/mistral-small-creative-20251216","object":"model","created_at":1766046034,"cost_in":1e-7,"cost_out":3e-7,"owned_by":"mistral"},{"id":"openrouter/google/gemini-3-flash-preview","object":"model","created_at":1766046034,"cost_in":5e-7,"cost_out":0.000003,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mistral-small-creative","object":"model","created_at":1766046033,"cost_in":1e-7,"cost_out":3e-7,"owned_by":"openrouter"},{"id":"mistral/mistral-small-creative","object":"model","created_at":1766046033,"cost_in":1e-7,"cost_out":3e-7,"owned_by":"mistral"},{"id":"openai/gpt-5.2-chat-latest","object":"model","created_at":1766046032,"cost_in":0.00000175,"cost_out":0.000014,"owned_by":"openai"},{"id":"azure-openai/kimi-k2-thinking","object":"model","created_at":1766046031,"cost_in":6e-7,"cost_out":0.0000025,"owned_by":"azure-openai"},{"id":"azure-openai/deepseek-v3.2","object":"model","created_at":1766046031,"cost_in":2.8e-7,"cost_out":4.2e-7,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-5.2-chat","object":"model","created_at":1766046030,"cost_in":0.00000175,"cost_out":0.000014,"owned_by":"azure-openai"},{"id":"azure-openai/deepseek-v3.2-speciale","object":"model","created_at":1766046030,"cost_in":2.8e-7,"cost_out":4.2e-7,"owned_by":"azure-openai"},{"id":"aws-bedrock/moonshot.kimi-k2-thinking","object":"model","created_at":1766046029,"cost_in":6e-7,"cost_out":0.0000025,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/mistral.ministral-3-14b-instruct","object":"model","created_at":1766046028,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/openai.gpt-oss-safeguard-120b","object":"model","created_at":1766046028,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/nvidia.nemotron-nano-9b-v2","object":"model","created_at":1766046027,"cost_in":6e-8,"cost_out":2.3e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/mistral.mixtral-8x7b-instruct-v0:1","object":"model","created_at":1766046026,"cost_in":7e-7,"cost_out":7e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/amazon.titan-text-express-v1:0:8k","object":"model","created_at":1766046026,"cost_in":2e-7,"cost_out":6e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/mistral.mistral-7b-instruct-v0:2","object":"model","created_at":1766046025,"cost_in":1.1e-7,"cost_out":1.1e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/openai.gpt-oss-safeguard-20b","object":"model","created_at":1766046024,"cost_in":7e-8,"cost_out":2e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/openai.gpt-oss-20b-1:0","object":"model","created_at":1766046024,"cost_in":7e-8,"cost_out":3e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/mistral.voxtral-mini-3b-2507","object":"model","created_at":1766046023,"cost_in":4e-8,"cost_out":4e-8,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/amazon.nova-2-lite-v1:0","object":"model","created_at":1766046023,"cost_in":3.3e-7,"cost_out":0.00000275,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/mistral.ministral-3-8b-instruct","object":"model","created_at":1766046022,"cost_in":1.5e-7,"cost_out":1.5e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/openai.gpt-oss-120b-1:0","object":"model","created_at":1766046021,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/mistral.voxtral-small-24b-2507","object":"model","created_at":1766046021,"cost_in":1.5e-7,"cost_out":3.5e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/nvidia.nemotron-nano-12b-v2","object":"model","created_at":1766046020,"cost_in":2e-7,"cost_out":6e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/google.gemma-3-12b-it","object":"model","created_at":1766046020,"cost_in":5e-8,"cost_out":1e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/google.gemma-3-27b-it","object":"model","created_at":1766046019,"cost_in":1.2e-7,"cost_out":2e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/qwen.qwen3-vl-235b-a22b","object":"model","created_at":1766046018,"cost_in":3e-7,"cost_out":0.0000015,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/mistral.mistral-large-2402-v1:0","object":"model","created_at":1766046018,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/minimax.minimax-m2","object":"model","created_at":1766046017,"cost_in":3e-7,"cost_out":0.0000012,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/qwen.qwen3-next-80b-a3b","object":"model","created_at":1766046017,"cost_in":1.4e-7,"cost_out":0.0000014,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/google.gemma-3-4b-it","object":"model","created_at":1766046016,"cost_in":4e-8,"cost_out":8e-8,"owned_by":"aws-bedrock"},{"id":"azure-openai/gpt-5.2","object":"model","created_at":1766046015,"cost_in":0.00000175,"cost_out":0.000014,"owned_by":"azure-openai"},{"id":"openrouter/openai/gpt-5.2","object":"model","created_at":1765485979,"cost_in":0.00000175,"cost_out":0.000014,"owned_by":"openrouter"},{"id":"openai/gpt-5.2","object":"model","created_at":1765485979,"cost_in":0.00000175,"cost_out":0.000014,"owned_by":"openai"},{"id":"openai/gpt-5.2-20251211","object":"model","created_at":1765485979,"cost_in":0.00000175,"cost_out":0.000014,"owned_by":"openai"},{"id":"openai/gpt-5.2-pro","object":"model","created_at":1765485978,"cost_in":0.000021,"cost_out":0.000168,"owned_by":"openai"},{"id":"openai/gpt-5.2-pro-20251211","object":"model","created_at":1765485978,"cost_in":0.000021,"cost_out":0.000168,"owned_by":"openai"},{"id":"openai/gpt-5.2-chat","object":"model","created_at":1765485977,"cost_in":0.00000175,"cost_out":0.000014,"owned_by":"openai"},{"id":"openai/gpt-5.2-chat-20251211","object":"model","created_at":1765485977,"cost_in":0.00000175,"cost_out":0.000014,"owned_by":"openai"},{"id":"openrouter/openai/gpt-5.2-pro","object":"model","created_at":1765485977,"cost_in":0.000021,"cost_out":0.000168,"owned_by":"openrouter"},{"id":"mistral/mistral-small-2506","object":"model","created_at":1765485976,"cost_in":1e-7,"cost_out":3e-7,"owned_by":"mistral"},{"id":"openrouter/openai/gpt-5.2-chat","object":"model","created_at":1765485976,"cost_in":0.00000175,"cost_out":0.000014,"owned_by":"openrouter"},{"id":"mistral/labs-devstral-small-2512","object":"model","created_at":1765485975,"cost_in":1e-7,"cost_out":3e-7,"owned_by":"mistral"},{"id":"openrouter/mistralai/devstral-2512","object":"model","created_at":1765485975,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"openrouter"},{"id":"mistral/devstral-2512","object":"model","created_at":1765485975,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"mistral"},{"id":"mistral/devstral-medium-latest","object":"model","created_at":1765485974,"cost_in":4e-7,"cost_out":0.000002,"owned_by":"mistral"},{"id":"grok/grok-4-1-fast-reasoning-latest","object":"model","created_at":1765280191,"cost_in":2e-7,"cost_out":5e-7,"owned_by":"grok"},{"id":"grok/grok-4-1-fast-reasoning","object":"model","created_at":1765280190,"cost_in":2e-7,"cost_out":5e-7,"owned_by":"grok"},{"id":"grok/grok-4-fast-reasoning-latest","object":"model","created_at":1765280189,"cost_in":2e-7,"cost_out":5e-7,"owned_by":"grok"},{"id":"azure-openai/gpt-5.1-codex-max","object":"model","created_at":1765277063,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-5.1-chat-2025-11-13","object":"model","created_at":1765277062,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"azure-openai"},{"id":"openrouter/z-ai/glm-4.6v","object":"model","created_at":1765277061,"cost_in":3e-7,"cost_out":9e-7,"owned_by":"openrouter"},{"id":"grok/grok-4-fast-reasoning","object":"model","created_at":1765277061,"cost_in":2e-7,"cost_out":5e-7,"owned_by":"grok"},{"id":"openrouter/relace/relace-search","object":"model","created_at":1765277060,"cost_in":0.000001,"cost_out":0.000003,"owned_by":"openrouter"},{"id":"azure-openai/gpt-5-pro","object":"model","created_at":1765277059,"cost_in":0.000015,"cost_out":0.00012,"owned_by":"azure-openai"},{"id":"openrouter/essentialai/rnj-1-instruct","object":"model","created_at":1765277059,"cost_in":1.5e-7,"cost_out":1.5e-7,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-5.1-codex-max","object":"model","created_at":1765277058,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openai/gpt-5.1-codex-max-20251204","object":"model","created_at":1765277058,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openai"},{"id":"openai/gpt-5.1-codex-max","object":"model","created_at":1765277057,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openai"},{"id":"openrouter/mistralai/ministral-3b-2512","object":"model","created_at":1765277056,"cost_in":1e-7,"cost_out":1e-7,"owned_by":"openrouter"},{"id":"mistral/ministral-3b-2512","object":"model","created_at":1765277056,"cost_in":1e-7,"cost_out":1e-7,"owned_by":"mistral"},{"id":"openrouter/mistralai/ministral-8b-2512","object":"model","created_at":1765277055,"cost_in":1.5e-7,"cost_out":1.5e-7,"owned_by":"openrouter"},{"id":"mistral/ministral-8b-2512","object":"model","created_at":1765277055,"cost_in":1.5e-7,"cost_out":1.5e-7,"owned_by":"mistral"},{"id":"mistral/ministral-14b-2512","object":"model","created_at":1765277054,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"mistral"},{"id":"openrouter/amazon/nova-2-lite-v1","object":"model","created_at":1765277053,"cost_in":3e-7,"cost_out":0.0000025,"owned_by":"openrouter"},{"id":"openrouter/mistralai/ministral-14b-2512","object":"model","created_at":1765277053,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"mistral/mistral-large-2512","object":"model","created_at":1765277052,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"mistral"},{"id":"openrouter/arcee-ai/trinity-mini","object":"model","created_at":1765277051,"cost_in":4.5e-8,"cost_out":1.5e-7,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mistral-large-2512","object":"model","created_at":1765277051,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"openrouter"},{"id":"deepseek/deepseek-v3.2","object":"model","created_at":1765277050,"cost_in":2.6e-7,"cost_out":3.8e-7,"owned_by":"deepseek"},{"id":"deepseek/deepseek-v3.2-20251201","object":"model","created_at":1765277050,"cost_in":2.6e-7,"cost_out":3.8e-7,"owned_by":"deepseek"},{"id":"openrouter/deepseek/deepseek-v3.2","object":"model","created_at":1765277049,"cost_in":2.6e-7,"cost_out":3.8e-7,"owned_by":"openrouter"},{"id":"deepseek/deepseek-v3.2-speciale","object":"model","created_at":1765277048,"cost_in":2.7e-7,"cost_out":4.1e-7,"owned_by":"deepseek"},{"id":"deepseek/deepseek-v3.2-speciale-20251201","object":"model","created_at":1765277048,"cost_in":2.7e-7,"cost_out":4.1e-7,"owned_by":"deepseek"},{"id":"openrouter/deepseek/deepseek-v3.2-speciale","object":"model","created_at":1765277047,"cost_in":2.7e-7,"cost_out":4.1e-7,"owned_by":"openrouter"},{"id":"azure-openai/phi-4-reasoning-plus","object":"model","created_at":1765277046,"cost_in":1.25e-7,"cost_out":5e-7,"owned_by":"azure-openai"},{"id":"azure-openai/mai-ds-r1","object":"model","created_at":1765277046,"cost_in":0.00000135,"cost_out":0.0000054,"owned_by":"azure-openai"},{"id":"azure-openai/phi-3-medium-4k-instruct","object":"model","created_at":1765277045,"cost_in":1.7e-7,"cost_out":6.8e-7,"owned_by":"azure-openai"},{"id":"azure-openai/phi-4-reasoning","object":"model","created_at":1765277045,"cost_in":1.25e-7,"cost_out":5e-7,"owned_by":"azure-openai"},{"id":"azure-openai/meta-llama-3.1-8b-instruct","object":"model","created_at":1765277044,"cost_in":3e-7,"cost_out":6.1e-7,"owned_by":"azure-openai"},{"id":"azure-openai/phi-3.5-moe-instruct","object":"model","created_at":1765277043,"cost_in":1.6e-7,"cost_out":6.4e-7,"owned_by":"azure-openai"},{"id":"azure-openai/llama-4-scout-17b-16e-instruct","object":"model","created_at":1765277043,"cost_in":2e-7,"cost_out":7.8e-7,"owned_by":"azure-openai"},{"id":"azure-openai/phi-4-multimodal","object":"model","created_at":1765277042,"cost_in":8e-8,"cost_out":3.2e-7,"owned_by":"azure-openai"},{"id":"azure-openai/meta-llama-3-8b-instruct","object":"model","created_at":1765277042,"cost_in":3e-7,"cost_out":6.1e-7,"owned_by":"azure-openai"},{"id":"azure-openai/phi-3-mini-128k-instruct","object":"model","created_at":1765277041,"cost_in":1.3e-7,"cost_out":5.2e-7,"owned_by":"azure-openai"},{"id":"azure-openai/llama-3.3-70b-instruct","object":"model","created_at":1765277040,"cost_in":7.1e-7,"cost_out":7.1e-7,"owned_by":"azure-openai"},{"id":"azure-openai/llama-3.2-90b-vision-instruct","object":"model","created_at":1765277040,"cost_in":0.00000204,"cost_out":0.00000204,"owned_by":"azure-openai"},{"id":"azure-openai/phi-3.5-mini-instruct","object":"model","created_at":1765277039,"cost_in":1.3e-7,"cost_out":5.2e-7,"owned_by":"azure-openai"},{"id":"azure-openai/phi-3-small-8k-instruct","object":"model","created_at":1765277038,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"azure-openai"},{"id":"azure-openai/meta-llama-3.1-70b-instruct","object":"model","created_at":1765277038,"cost_in":0.00000268,"cost_out":0.00000354,"owned_by":"azure-openai"},{"id":"azure-openai/phi-4-mini-reasoning","object":"model","created_at":1765277037,"cost_in":7.5e-8,"cost_out":3e-7,"owned_by":"azure-openai"},{"id":"azure-openai/meta-llama-3-70b-instruct","object":"model","created_at":1765277037,"cost_in":0.00000268,"cost_out":0.00000354,"owned_by":"azure-openai"},{"id":"azure-openai/phi-4","object":"model","created_at":1765277036,"cost_in":1.25e-7,"cost_out":5e-7,"owned_by":"azure-openai"},{"id":"azure-openai/phi-3-small-128k-instruct","object":"model","created_at":1765277035,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"azure-openai"},{"id":"azure-openai/llama-4-maverick-17b-128e-instruct-fp8","object":"model","created_at":1765277035,"cost_in":2.5e-7,"cost_out":0.000001,"owned_by":"azure-openai"},{"id":"azure-openai/meta-llama-3.1-405b-instruct","object":"model","created_at":1765277034,"cost_in":0.00000533,"cost_out":0.000016,"owned_by":"azure-openai"},{"id":"azure-openai/phi-3-mini-4k-instruct","object":"model","created_at":1765277034,"cost_in":1.3e-7,"cost_out":5.2e-7,"owned_by":"azure-openai"},{"id":"azure-openai/phi-4-mini","object":"model","created_at":1765277033,"cost_in":7.5e-8,"cost_out":3e-7,"owned_by":"azure-openai"},{"id":"azure-openai/phi-3-medium-128k-instruct","object":"model","created_at":1765277032,"cost_in":1.7e-7,"cost_out":6.8e-7,"owned_by":"azure-openai"},{"id":"azure-openai/llama-3.2-11b-vision-instruct","object":"model","created_at":1765277032,"cost_in":3.7e-7,"cost_out":3.7e-7,"owned_by":"azure-openai"},{"id":"azure-openai/mistral-small-2503","object":"model","created_at":1765277031,"cost_in":1e-7,"cost_out":3e-7,"owned_by":"azure-openai"},{"id":"azure-openai/mistral-large-2411","object":"model","created_at":1765277030,"cost_in":0.000002,"cost_out":0.000006,"owned_by":"azure-openai"},{"id":"azure-openai/codestral-2501","object":"model","created_at":1765277030,"cost_in":3e-7,"cost_out":9e-7,"owned_by":"azure-openai"},{"id":"azure-openai/ministral-3b","object":"model","created_at":1765277029,"cost_in":4e-8,"cost_out":4e-8,"owned_by":"azure-openai"},{"id":"azure-openai/mistral-nemo","object":"model","created_at":1765277029,"cost_in":1.5e-7,"cost_out":1.5e-7,"owned_by":"azure-openai"},{"id":"azure-openai/mistral-medium-2505","object":"model","created_at":1765277028,"cost_in":4e-7,"cost_out":0.000002,"owned_by":"azure-openai"},{"id":"azure-openai/model-router","object":"model","created_at":1765277027,"cost_in":1.4e-7,"cost_out":0,"owned_by":"azure-openai"},{"id":"azure-openai/text-embedding-ada-002","object":"model","created_at":1765277027,"cost_in":1e-7,"cost_out":0,"owned_by":"azure-openai"},{"id":"azure-openai/grok-3-mini","object":"model","created_at":1765277025,"cost_in":3e-7,"cost_out":5e-7,"owned_by":"azure-openai"},{"id":"azure-openai/cohere-embed-v3-english","object":"model","created_at":1765277025,"cost_in":1e-7,"cost_out":0,"owned_by":"azure-openai"},{"id":"azure-openai/cohere-command-r-plus-08-2024","object":"model","created_at":1765277024,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"azure-openai"},{"id":"azure-openai/grok-3","object":"model","created_at":1765277024,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"azure-openai"},{"id":"azure-openai/cohere-command-a","object":"model","created_at":1765277023,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"azure-openai"},{"id":"azure-openai/cohere-embed-v3-multilingual","object":"model","created_at":1765277022,"cost_in":1e-7,"cost_out":0,"owned_by":"azure-openai"},{"id":"azure-openai/grok-code-fast-1","object":"model","created_at":1765277022,"cost_in":2e-7,"cost_out":0.0000015,"owned_by":"azure-openai"},{"id":"azure-openai/cohere-command-r-08-2024","object":"model","created_at":1765277021,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"azure-openai"},{"id":"azure-openai/grok-4","object":"model","created_at":1765277021,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"azure-openai"},{"id":"azure-openai/cohere-embed-v-4-0","object":"model","created_at":1765277020,"cost_in":1.2e-7,"cost_out":0,"owned_by":"azure-openai"},{"id":"azure-openai/grok-4-fast-non-reasoning","object":"model","created_at":1765277019,"cost_in":2e-7,"cost_out":5e-7,"owned_by":"azure-openai"},{"id":"azure-openai/grok-4-fast-reasoning","object":"model","created_at":1765277019,"cost_in":2e-7,"cost_out":5e-7,"owned_by":"azure-openai"},{"id":"azure-openai/deepseek-v3-0324","object":"model","created_at":1765277018,"cost_in":0.00000114,"cost_out":0.00000456,"owned_by":"azure-openai"},{"id":"azure-openai/deepseek-r1","object":"model","created_at":1765277017,"cost_in":0.00000135,"cost_out":0.0000054,"owned_by":"azure-openai"},{"id":"azure-openai/deepseek-v3.1","object":"model","created_at":1765277017,"cost_in":5.6e-7,"cost_out":0.00000168,"owned_by":"azure-openai"},{"id":"anthropic/claude-opus-4-5-20251101","object":"model","created_at":1765277016,"cost_in":0.000005,"cost_out":0.000025,"owned_by":"anthropic"},{"id":"azure-openai/deepseek-r1-0528","object":"model","created_at":1765277016,"cost_in":0.00000135,"cost_out":0.0000054,"owned_by":"azure-openai"},{"id":"openrouter/prime-intellect/intellect-3","object":"model","created_at":1765277015,"cost_in":2e-7,"cost_out":0.0000011,"owned_by":"openrouter"},{"id":"aws-bedrock/global.anthropic.claude-opus-4-5-20251101-v1:0","object":"model","created_at":1765277014,"cost_in":0.000005,"cost_out":0.000025,"owned_by":"aws-bedrock"},{"id":"openrouter/tngtech/tng-r1t-chimera","object":"model","created_at":1765277014,"cost_in":3e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"aws-bedrock/anthropic.claude-opus-4-5-20251101-v1:0","object":"model","created_at":1765277013,"cost_in":0.000005,"cost_out":0.000025,"owned_by":"aws-bedrock"},{"id":"azure-openai/claude-opus-4-5","object":"model","created_at":1765277013,"cost_in":0.000005,"cost_out":0.000025,"owned_by":"azure-openai"},{"id":"anthropic/claude-opus-4-5","object":"model","created_at":1764012659,"cost_in":0.000005,"cost_out":0.000025,"owned_by":"anthropic"},{"id":"anthropic/claude-4.5-opus-20251124","object":"model","created_at":1764012658,"cost_in":0.000005,"cost_out":0.000025,"owned_by":"anthropic"},{"id":"anthropic/claude-opus-4.5","object":"model","created_at":1764012657,"cost_in":0.000005,"cost_out":0.000025,"owned_by":"anthropic"},{"id":"openrouter/anthropic/claude-opus-4.5","object":"model","created_at":1764012656,"cost_in":0.000005,"cost_out":0.000025,"owned_by":"openrouter"},{"id":"openrouter/allenai/olmo-3-7b-think","object":"model","created_at":1763969558,"cost_in":1.2e-7,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"openrouter/allenai/olmo-3-7b-instruct","object":"model","created_at":1763969557,"cost_in":1e-7,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"google-ai-studio/gemini-3-pro-image-preview-20251120","object":"model","created_at":1763969556,"cost_in":0.000002,"cost_out":0.000012,"owned_by":"google-ai-studio"},{"id":"openrouter/allenai/olmo-3-32b-think","object":"model","created_at":1763969556,"cost_in":3e-7,"cost_out":5.5e-7,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-3-pro-image-preview","object":"model","created_at":1763969555,"cost_in":0.000002,"cost_out":0.000012,"owned_by":"openrouter"},{"id":"google-ai-studio/gemini-3-pro-image-preview","object":"model","created_at":1763969555,"cost_in":0.000002,"cost_out":0.000012,"owned_by":"google-ai-studio"},{"id":"grok/grok-4-1-fast","object":"model","created_at":1763969554,"cost_in":2e-7,"cost_out":5e-7,"owned_by":"grok"},{"id":"grok/grok-4-1-fast-non-reasoning","object":"model","created_at":1763969554,"cost_in":2e-7,"cost_out":5e-7,"owned_by":"grok"},{"id":"grok/grok-4.1-fast-non-reasoning","object":"model","created_at":1763969553,"cost_in":2e-7,"cost_out":5e-7,"owned_by":"grok"},{"id":"grok/grok-4.1-fast","object":"model","created_at":1763969553,"cost_in":2e-7,"cost_out":5e-7,"owned_by":"grok"},{"id":"openrouter/x-ai/grok-4.1-fast","object":"model","created_at":1763969552,"cost_in":2e-7,"cost_out":5e-7,"owned_by":"openrouter"},{"id":"azure-openai/claude-haiku-4-5","object":"model","created_at":1763969551,"cost_in":0.000001,"cost_out":0.000005,"owned_by":"azure-openai"},{"id":"azure-openai/claude-sonnet-4-5","object":"model","created_at":1763969551,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"azure-openai"},{"id":"openrouter/deepcogito/cogito-v2.1-671b","object":"model","created_at":1763969550,"cost_in":0.00000125,"cost_out":0.00000125,"owned_by":"openrouter"},{"id":"azure-openai/claude-opus-4-1","object":"model","created_at":1763969550,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"azure-openai"},{"id":"google-vertex-ai/gemini-3-pro-preview","object":"model","created_at":1763969549,"cost_in":0.000002,"cost_out":0.000012,"owned_by":"google-vertex-ai"},{"id":"google-ai-studio/gemini-3-pro-preview","object":"model","created_at":1763485223,"cost_in":0.000002,"cost_out":0.000012,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-3-pro-preview-20251117","object":"model","created_at":1763485223,"cost_in":0.000002,"cost_out":0.000012,"owned_by":"google-ai-studio"},{"id":"openrouter/openrouter/sherlock-dash-alpha","object":"model","created_at":1763485222,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openai/gpt-5.1-chat-latest","object":"model","created_at":1763485222,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openai"},{"id":"openrouter/google/gemini-3-pro-preview","object":"model","created_at":1763485222,"cost_in":0.000002,"cost_out":0.000012,"owned_by":"openrouter"},{"id":"openrouter/openrouter/sherlock-think-alpha","object":"model","created_at":1763485221,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"azure-openai/gpt-5.1-chat","object":"model","created_at":1763153830,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-5.1-codex-mini","object":"model","created_at":1763153829,"cost_in":2.5e-7,"cost_out":0.000002,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-5.1","object":"model","created_at":1763153829,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-5.1-codex","object":"model","created_at":1763153828,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"azure-openai"},{"id":"openai/gpt-5.1-codex-mini-20251113","object":"model","created_at":1763110159,"cost_in":2.5e-7,"cost_out":0.000002,"owned_by":"openai"},{"id":"openrouter/openai/gpt-5.1-codex-mini","object":"model","created_at":1763110158,"cost_in":2.5e-7,"cost_out":0.000002,"owned_by":"openrouter"},{"id":"openai/gpt-5.1-codex-mini","object":"model","created_at":1763110158,"cost_in":2.5e-7,"cost_out":0.000002,"owned_by":"openai"},{"id":"openai/gpt-5.1-codex","object":"model","created_at":1763110157,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openai"},{"id":"openai/gpt-5.1-codex-20251113","object":"model","created_at":1763110157,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openai"},{"id":"openrouter/openai/gpt-5.1-codex","object":"model","created_at":1763110156,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openai/gpt-5.1-chat","object":"model","created_at":1763110155,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openai"},{"id":"openai/gpt-5.1-chat-20251113","object":"model","created_at":1763110155,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openai"},{"id":"openai/gpt-5.1-20251113","object":"model","created_at":1763110154,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openai"},{"id":"openrouter/openai/gpt-5.1-chat","object":"model","created_at":1763110154,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-5.1","object":"model","created_at":1763110153,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openai/gpt-5.1","object":"model","created_at":1763110153,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openai"},{"id":"workers-ai/@cf/qwen/qwen3-embedding-0.6b","object":"model","created_at":1763110152,"cost_in":1.2e-8,"cost_out":0,"owned_by":"workers-ai"},{"id":"openrouter/kwaipilot/kat-coder-pro:free","object":"model","created_at":1763110151,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"workers-ai/@cf/qwen/qwen3-30b-a3b-fp8","object":"model","created_at":1763110151,"cost_in":5.1e-8,"cost_out":3.4e-7,"owned_by":"workers-ai"},{"id":"openrouter/moonshotai/kimi-linear-48b-a3b-instruct","object":"model","created_at":1763110150,"cost_in":7e-7,"cost_out":9e-7,"owned_by":"openrouter"},{"id":"azure-openai/gpt-5-codex","object":"model","created_at":1763110150,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"azure-openai"},{"id":"openrouter/moonshotai/kimi-k2-thinking","object":"model","created_at":1763110149,"cost_in":4.5e-7,"cost_out":0.00000235,"owned_by":"openrouter"},{"id":"openrouter/openrouter/polaris-alpha","object":"model","created_at":1763110149,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"workers-ai/@cf/deepgram/aura-2-en","object":"model","created_at":1763110148,"cost_in":0,"cost_out":0,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/openai/whisper-large-v3-turbo","object":"model","created_at":1763110147,"cost_in":0,"cost_out":0,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/deepgram/aura-1","object":"model","created_at":1763110147,"cost_in":0,"cost_out":0,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/openai/whisper","object":"model","created_at":1763110146,"cost_in":0,"cost_out":0,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/deepgram/nova-3","object":"model","created_at":1763110146,"cost_in":0,"cost_out":0,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/deepgram/aura-2-es","object":"model","created_at":1763110145,"cost_in":0,"cost_out":0,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/pipecat-ai/smart-turn-v2","object":"model","created_at":1763110144,"cost_in":0,"cost_out":0,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/myshell-ai/melotts","object":"model","created_at":1763110144,"cost_in":0,"cost_out":0,"owned_by":"workers-ai"},{"id":"openrouter/perplexity/sonar-pro-search","object":"model","created_at":1763110143,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"openrouter/amazon/nova-premier-v1","object":"model","created_at":1763110143,"cost_in":0.0000025,"cost_out":0.0000125,"owned_by":"openrouter"},{"id":"mistral/voxtral-small-24b-2507","object":"model","created_at":1763110142,"cost_in":1e-7,"cost_out":3e-7,"owned_by":"mistral"},{"id":"cerebras/zai-glm-4.6","object":"model","created_at":1763110142,"cost_in":0,"cost_out":0,"owned_by":"cerebras"},{"id":"openrouter/mistralai/voxtral-small-24b-2507","object":"model","created_at":1763110141,"cost_in":1e-7,"cost_out":3e-7,"owned_by":"openrouter"},{"id":"ideogram/v_upscale","object":"model","created_at":1763110140,"cost_in":0.06,"cost_out":0,"owned_by":"ideogram"},{"id":"ideogram/v_describe","object":"model","created_at":1763110140,"cost_in":0.01,"cost_out":0,"owned_by":"ideogram"},{"id":"ideogram/v_3_custom","object":"model","created_at":1763110139,"cost_in":0,"cost_out":0.12,"owned_by":"ideogram"},{"id":"ideogram/v_3_custom_quality","object":"model","created_at":1763110139,"cost_in":0,"cost_out":0.18,"owned_by":"ideogram"},{"id":"ideogram/v_1","object":"model","created_at":1763110138,"cost_in":0,"cost_out":0.06,"owned_by":"ideogram"},{"id":"ideogram/v_3_custom_turbo","object":"model","created_at":1763110138,"cost_in":0,"cost_out":0.06,"owned_by":"ideogram"},{"id":"ideogram/v_1_turbo","object":"model","created_at":1763110137,"cost_in":0,"cost_out":0.02,"owned_by":"ideogram"},{"id":"ideogram/v_2a_turbo","object":"model","created_at":1763110136,"cost_in":0,"cost_out":0.025,"owned_by":"ideogram"},{"id":"ideogram/v_2a","object":"model","created_at":1763110136,"cost_in":0,"cost_out":0.04,"owned_by":"ideogram"},{"id":"ideogram/v_2_turbo","object":"model","created_at":1763110135,"cost_in":0,"cost_out":0.05,"owned_by":"ideogram"},{"id":"ideogram/v_2","object":"model","created_at":1763110135,"cost_in":0,"cost_out":0.08,"owned_by":"ideogram"},{"id":"ideogram/v_3_character","object":"model","created_at":1763110134,"cost_in":0,"cost_out":0.15,"owned_by":"ideogram"},{"id":"ideogram/v_3_quality_character","object":"model","created_at":1763110134,"cost_in":0,"cost_out":0.2,"owned_by":"ideogram"},{"id":"ideogram/v_3_turbo_character","object":"model","created_at":1763110133,"cost_in":0,"cost_out":0.1,"owned_by":"ideogram"},{"id":"ideogram/v_3","object":"model","created_at":1763110132,"cost_in":0,"cost_out":0.06,"owned_by":"ideogram"},{"id":"ideogram/v_3_quality","object":"model","created_at":1763110132,"cost_in":0,"cost_out":0.09,"owned_by":"ideogram"},{"id":"ideogram/v_3_flash","object":"model","created_at":1763110131,"cost_in":0,"cost_out":0.03,"owned_by":"ideogram"},{"id":"ideogram/v_3_turbo","object":"model","created_at":1763110131,"cost_in":0,"cost_out":0.03,"owned_by":"ideogram"},{"id":"baseten/deepseek-ai/deepseek-v3-0324","object":"model","created_at":1763110130,"cost_in":7.7e-7,"cost_out":7.7e-7,"owned_by":"baseten"},{"id":"baseten/deepseek-ai/deepseek-v3.1","object":"model","created_at":1763110129,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"baseten"},{"id":"baseten/deepseek-ai/deepseek-r1-0528","object":"model","created_at":1763110129,"cost_in":0.00000255,"cost_out":0.00000595,"owned_by":"baseten"},{"id":"baseten/moonshotai/kimi-k2-instruct-0905","object":"model","created_at":1763110128,"cost_in":6e-7,"cost_out":0.0000025,"owned_by":"baseten"},{"id":"baseten/moonshotai/kimi-k2-instruct-0711","object":"model","created_at":1763110128,"cost_in":6e-7,"cost_out":0.0000025,"owned_by":"baseten"},{"id":"baseten/qwen/qwen3-coder-480b-a35b-instruct","object":"model","created_at":1763110127,"cost_in":3.8e-7,"cost_out":0.00000153,"owned_by":"baseten"},{"id":"baseten/qwen/qwen3-235b-a22b-instruct-2507","object":"model","created_at":1763110127,"cost_in":2.2e-7,"cost_out":8e-7,"owned_by":"baseten"},{"id":"baseten/openai/gpt-oss-120b","object":"model","created_at":1763110126,"cost_in":1e-7,"cost_out":5e-7,"owned_by":"baseten"},{"id":"openrouter/nvidia/nemotron-nano-12b-v2-vl","object":"model","created_at":1763110125,"cost_in":2e-7,"cost_out":6e-7,"owned_by":"openrouter"},{"id":"baseten/zai-org/glm-4.6","object":"model","created_at":1763110125,"cost_in":6e-7,"cost_out":0.0000022,"owned_by":"baseten"},{"id":"openrouter/openai/gpt-oss-safeguard-20b","object":"model","created_at":1763110124,"cost_in":7.5e-8,"cost_out":3e-7,"owned_by":"openrouter"},{"id":"openai/gpt-oss-safeguard-20b","object":"model","created_at":1763110124,"cost_in":7.5e-8,"cost_out":3e-7,"owned_by":"openai"},{"id":"aws-bedrock/qwen.qwen3-235b-a22b-2507-v1:0","object":"model","created_at":1763110123,"cost_in":2.2e-7,"cost_out":8.8e-7,"owned_by":"aws-bedrock"},{"id":"huggingface/MiniMaxAI/MiniMax-M2","object":"model","created_at":1763110123,"cost_in":3e-7,"cost_out":0.0000012,"owned_by":"huggingface"},{"id":"aws-bedrock/qwen.qwen3-coder-480b-a35b-v1:0","object":"model","created_at":1763110122,"cost_in":2.2e-7,"cost_out":0.0000018,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/deepseek.v3-v1:0","object":"model","created_at":1763110121,"cost_in":5.8e-7,"cost_out":0.00000168,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/qwen.qwen3-32b-v1:0","object":"model","created_at":1763110121,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"aws-bedrock"},{"id":"openrouter/minimax/minimax-m2","object":"model","created_at":1763110120,"cost_in":2e-7,"cost_out":0.000001,"owned_by":"openrouter"},{"id":"aws-bedrock/qwen.qwen3-coder-30b-a3b-v1:0","object":"model","created_at":1763110120,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"aws-bedrock"},{"id":"openrouter/liquid/lfm-2.2-6b","object":"model","created_at":1763110119,"cost_in":5e-8,"cost_out":1e-7,"owned_by":"openrouter"},{"id":"openrouter/minimax/minimax-m2:free","object":"model","created_at":1763110119,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/liquid/lfm2-8b-a1b","object":"model","created_at":1763110118,"cost_in":5e-8,"cost_out":1e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-coder:exacto","object":"model","created_at":1763110117,"cost_in":3.8e-7,"cost_out":0.00000153,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-vl-32b-instruct","object":"model","created_at":1763110117,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-oss-120b:exacto","object":"model","created_at":1763110116,"cost_in":5e-8,"cost_out":2.4e-7,"owned_by":"openrouter"},{"id":"openai/gpt-oss-120b:exacto","object":"model","created_at":1763110116,"cost_in":5e-8,"cost_out":2.4e-7,"owned_by":"openai"},{"id":"deepseek/deepseek-v3.1-terminus:exacto","object":"model","created_at":1763110115,"cost_in":2.7e-7,"cost_out":0.000001,"owned_by":"deepseek"},{"id":"openrouter/moonshotai/kimi-k2-0905:exacto","object":"model","created_at":1763110115,"cost_in":6e-7,"cost_out":0.0000025,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-v3.1-terminus:exacto","object":"model","created_at":1763110114,"cost_in":2.7e-7,"cost_out":0.000001,"owned_by":"openrouter"},{"id":"google-vertex-ai/gemini-embedding-001","object":"model","created_at":1763110113,"cost_in":1.5e-7,"cost_out":0,"owned_by":"google-vertex-ai"},{"id":"openrouter/z-ai/glm-4.6:exacto","object":"model","created_at":1763110113,"cost_in":4.5e-7,"cost_out":0.0000019,"owned_by":"openrouter"},{"id":"huggingface/Qwen/Qwen3-Embedding-8B","object":"model","created_at":1763110111,"cost_in":1e-8,"cost_out":0,"owned_by":"huggingface"},{"id":"huggingface/Qwen/Qwen3-Embedding-4B","object":"model","created_at":1763110111,"cost_in":1e-8,"cost_out":0,"owned_by":"huggingface"},{"id":"openrouter/ibm-granite/granite-4.0-h-micro","object":"model","created_at":1763110110,"cost_in":1.7e-8,"cost_out":1.1e-7,"owned_by":"openrouter"},{"id":"google-ai-studio/gemini-embedding-001","object":"model","created_at":1763110110,"cost_in":1.5e-7,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"openrouter/deepcogito/cogito-v2-preview-llama-405b","object":"model","created_at":1763110109,"cost_in":0.0000035,"cost_out":0.0000035,"owned_by":"openrouter"},{"id":"openrouter/inclusionai/ring-1t","object":"model","created_at":1763110109,"cost_in":5.7e-7,"cost_out":0.00000228,"owned_by":"openrouter"},{"id":"openrouter/deepcogito/cogito-v2-preview-llama-405B","object":"model","created_at":1763110108,"cost_in":0.0000035,"cost_out":0.0000035,"owned_by":"openrouter"},{"id":"openai/gpt-5-image-mini","object":"model","created_at":1763110107,"cost_in":0.0000025,"cost_out":0.000002,"owned_by":"openai"},{"id":"openrouter/deepcogito/cogito-v2-preview-llama-70b","object":"model","created_at":1763110107,"cost_in":8.8e-7,"cost_out":8.8e-7,"owned_by":"openrouter"},{"id":"anthropic/claude-opus-4-0","object":"model","created_at":1763110106,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"anthropic"},{"id":"openrouter/openai/gpt-5-image-mini","object":"model","created_at":1763110106,"cost_in":0.0000025,"cost_out":0.000002,"owned_by":"openrouter"},{"id":"anthropic/claude-haiku-4-5","object":"model","created_at":1763110105,"cost_in":0.000001,"cost_out":0.000005,"owned_by":"anthropic"},{"id":"anthropic/claude-opus-4-1","object":"model","created_at":1763110105,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"anthropic"},{"id":"anthropic/claude-3-5-haiku-latest","object":"model","created_at":1763110104,"cost_in":8e-7,"cost_out":0.000004,"owned_by":"anthropic"},{"id":"anthropic/claude-3-7-sonnet-latest","object":"model","created_at":1763110103,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"anthropic/claude-sonnet-4-5","object":"model","created_at":1763110103,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"aws-bedrock/anthropic.claude-haiku-4-5-20251001-v1:0","object":"model","created_at":1763110102,"cost_in":0.000001,"cost_out":0.000005,"owned_by":"aws-bedrock"},{"id":"anthropic/claude-sonnet-4-0","object":"model","created_at":1763110102,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"openrouter/anthropic/claude-4.5-haiku","object":"model","created_at":1763110101,"cost_in":0.000001,"cost_out":0.000005,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-5-image","object":"model","created_at":1763110100,"cost_in":0.00001,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openai/gpt-5-image","object":"model","created_at":1763110100,"cost_in":0.00001,"cost_out":0.00001,"owned_by":"openai"},{"id":"anthropic/claude-haiku-4-5-20251001","object":"model","created_at":1763110099,"cost_in":0.000001,"cost_out":0.000005,"owned_by":"anthropic"},{"id":"anthropic/claude-haiku-4.5","object":"model","created_at":1763110098,"cost_in":0.000001,"cost_out":0.000005,"owned_by":"anthropic"},{"id":"anthropic/claude-4.5-haiku-20251001","object":"model","created_at":1763110098,"cost_in":0.000001,"cost_out":0.000005,"owned_by":"anthropic"},{"id":"google-vertex-ai/gemini-2.5-flash-lite-preview-09-2025","object":"model","created_at":1763110097,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"google-vertex-ai"},{"id":"openrouter/anthropic/claude-haiku-4.5","object":"model","created_at":1763110097,"cost_in":0.000001,"cost_out":0.000005,"owned_by":"openrouter"},{"id":"google-vertex-ai/gemini-2.5-flash-lite","object":"model","created_at":1763110096,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"google-vertex-ai"},{"id":"google-vertex-ai/gemini-2.5-flash-preview-09-2025","object":"model","created_at":1763110096,"cost_in":3e-7,"cost_out":0.0000025,"owned_by":"google-vertex-ai"},{"id":"google-vertex-ai/gemini-flash-latest","object":"model","created_at":1763110095,"cost_in":3e-7,"cost_out":0.0000025,"owned_by":"google-vertex-ai"},{"id":"google-ai-studio/gemini-2.5-pro-preview-tts","object":"model","created_at":1763110094,"cost_in":0.000001,"cost_out":0.00002,"owned_by":"google-ai-studio"},{"id":"google-vertex-ai/gemini-flash-lite-latest","object":"model","created_at":1763110094,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"google-vertex-ai"},{"id":"google-ai-studio/gemini-2.5-flash-preview-tts","object":"model","created_at":1763110093,"cost_in":5e-7,"cost_out":0.00001,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-live-2.5-flash","object":"model","created_at":1763110093,"cost_in":5e-7,"cost_out":0.000002,"owned_by":"google-ai-studio"},{"id":"openrouter/openai/o4-mini-deep-research","object":"model","created_at":1763110092,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"openrouter"},{"id":"openai/o4-mini-deep-research-2025-06-26","object":"model","created_at":1763110092,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"openai"},{"id":"openai/o3-deep-research-2025-06-26","object":"model","created_at":1763110091,"cost_in":0.00001,"cost_out":0.00004,"owned_by":"openai"},{"id":"openrouter/qwen/qwen3-vl-8b-instruct","object":"model","created_at":1763110090,"cost_in":6.4e-8,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/openai/o3-deep-research","object":"model","created_at":1763110090,"cost_in":0.00001,"cost_out":0.00004,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-vl-8b-thinking","object":"model","created_at":1763110089,"cost_in":1.8e-7,"cost_out":0.0000021,"owned_by":"openrouter"},{"id":"openrouter/nvidia/llama-3.3-nemotron-super-49b-v1.5","object":"model","created_at":1763110088,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/inclusionai/ling-1t","object":"model","created_at":1763110088,"cost_in":5.7e-7,"cost_out":0.00000228,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-vl-30b-a3b-instruct","object":"model","created_at":1763110087,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"openrouter"},{"id":"openrouter/baidu/ernie-4.5-21b-a3b-thinking","object":"model","created_at":1763110087,"cost_in":5.6e-8,"cost_out":2.24e-7,"owned_by":"openrouter"},{"id":"huggingface/zai-org/glm-4.6","object":"model","created_at":1763110086,"cost_in":6e-7,"cost_out":0.0000022,"owned_by":"huggingface"},{"id":"openrouter/qwen/qwen3-vl-30b-a3b-thinking","object":"model","created_at":1763110086,"cost_in":1.6e-7,"cost_out":8e-7,"owned_by":"openrouter"},{"id":"huggingface/moonshotai/kimi-k2-instruct-0905","object":"model","created_at":1763110083,"cost_in":0.000001,"cost_out":0.000003,"owned_by":"huggingface"},{"id":"huggingface/qwen/qwen3-coder-480b-a35b-instruct","object":"model","created_at":1763110078,"cost_in":0.000002,"cost_out":0.000002,"owned_by":"huggingface"},{"id":"huggingface/deepseek-ai/deepseek-r1-0528","object":"model","created_at":1763110077,"cost_in":0.000003,"cost_out":0.000005,"owned_by":"huggingface"},{"id":"workers-ai/@cf/ibm-granite/granite-4.0-h-micro","object":"model","created_at":1760573431,"cost_in":1.7e-8,"cost_out":1.1e-7,"owned_by":"workers-ai"},{"id":"openrouter/google/gemini-2.5-flash-image","object":"model","created_at":1759957487,"cost_in":3e-7,"cost_out":0.0000025,"owned_by":"openrouter"},{"id":"google-ai-studio/gemini-2.5-flash-image","object":"model","created_at":1759957487,"cost_in":3e-7,"cost_out":0.0000025,"owned_by":"google-ai-studio"},{"id":"openai/gpt-5-pro","object":"model","created_at":1759957486,"cost_in":0.000015,"cost_out":0.00012,"owned_by":"openai"},{"id":"openai/gpt-5-pro-2025-10-06","object":"model","created_at":1759957486,"cost_in":0.000015,"cost_out":0.00012,"owned_by":"openai"},{"id":"huggingface/zai-org/GLM-4.6","object":"model","created_at":1759957485,"cost_in":6e-7,"cost_out":0.0000022,"owned_by":"huggingface"},{"id":"openrouter/openai/gpt-5-pro","object":"model","created_at":1759957485,"cost_in":0.000015,"cost_out":0.00012,"owned_by":"openrouter"},{"id":"aws-bedrock/anthropic.claude-sonnet-4-5-20250929-v1:0","object":"model","created_at":1759957484,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/anthropic.claude-sonnet-4-5-20250929","object":"model","created_at":1759957483,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"aws-bedrock"},{"id":"openrouter/z-ai/glm-4.6","object":"model","created_at":1759957483,"cost_in":3.9e-7,"cost_out":0.0000019,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-sonnet-4.5","object":"model","created_at":1759957482,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"anthropic/claude-sonnet-4.5","object":"model","created_at":1759957482,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"anthropic/claude-4.5-sonnet-20250929","object":"model","created_at":1759957481,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"anthropic/claude-sonnet-4-5-20250929","object":"model","created_at":1759957481,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"anthropic/claude-4.5-sonnet","object":"model","created_at":1759957480,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"google-ai-studio/gemini-live-2.5-flash-preview-native-audio","object":"model","created_at":1759957479,"cost_in":5e-7,"cost_out":0.000002,"owned_by":"google-ai-studio"},{"id":"openrouter/anthropic/claude-4.5-sonnet","object":"model","created_at":1759957479,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"google-ai-studio/gemini-flash-lite-latest","object":"model","created_at":1759957478,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-flash-latest","object":"model","created_at":1759957478,"cost_in":3e-7,"cost_out":0.0000025,"owned_by":"google-ai-studio"},{"id":"openrouter/deepseek/deepseek-v3.2-exp","object":"model","created_at":1759957477,"cost_in":2.1e-7,"cost_out":3.2e-7,"owned_by":"openrouter"},{"id":"deepseek/deepseek-v3.2-exp","object":"model","created_at":1759957477,"cost_in":2.1e-7,"cost_out":3.2e-7,"owned_by":"deepseek"},{"id":"openrouter/thedrummer/cydonia-24b-v4.1","object":"model","created_at":1759957476,"cost_in":3e-7,"cost_out":5e-7,"owned_by":"openrouter"},{"id":"google-ai-studio/gemini-2.5-flash-lite-preview-09-2025","object":"model","created_at":1759957475,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"google-ai-studio"},{"id":"openrouter/relace/relace-apply-3","object":"model","created_at":1759957475,"cost_in":8.5e-7,"cost_out":0.00000125,"owned_by":"openrouter"},{"id":"google-ai-studio/gemini-2.5-flash-preview-09-2025","object":"model","created_at":1759957474,"cost_in":3e-7,"cost_out":0.0000025,"owned_by":"google-ai-studio"},{"id":"openrouter/google/gemini-2.5-flash-lite-preview-09-2025","object":"model","created_at":1759957474,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/x-ai/grok-4-fast","object":"model","created_at":1759957473,"cost_in":2e-7,"cost_out":5e-7,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.5-flash-preview-09-2025","object":"model","created_at":1759957473,"cost_in":3e-7,"cost_out":0.0000025,"owned_by":"openrouter"},{"id":"huggingface/Qwen/Qwen3-Next-80B-A3B-Thinking","object":"model","created_at":1759957472,"cost_in":3e-7,"cost_out":0.000002,"owned_by":"huggingface"},{"id":"huggingface/moonshotai/Kimi-K2-Instruct-0905","object":"model","created_at":1759957472,"cost_in":0.000001,"cost_out":0.000003,"owned_by":"huggingface"},{"id":"huggingface/Qwen/Qwen3-Next-80B-A3B-Instruct","object":"model","created_at":1759957471,"cost_in":2.5e-7,"cost_out":0.000001,"owned_by":"huggingface"},{"id":"grok/grok-4-fast","object":"model","created_at":1759957470,"cost_in":2e-7,"cost_out":5e-7,"owned_by":"grok"},{"id":"grok/grok-4-fast-non-reasoning","object":"model","created_at":1759957470,"cost_in":2e-7,"cost_out":5e-7,"owned_by":"grok"},{"id":"openrouter/qwen/qwen3-vl-235b-a22b-thinking","object":"model","created_at":1759957469,"cost_in":3e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-vl-235b-a22b-instruct","object":"model","created_at":1759957469,"cost_in":2e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-5-codex","object":"model","created_at":1759957468,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openai/gpt-5-codex","object":"model","created_at":1759957468,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openai"},{"id":"workers-ai/@cf/pfnet/plamo-embedding-1b","object":"model","created_at":1758845446,"cost_in":1.9e-8,"cost_out":0,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/ai4bharat/indictrans2-en-indic-1B","object":"model","created_at":1758845446,"cost_in":3.4e-7,"cost_out":3.4e-7,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/aisingapore/gemma-sea-lion-v4-27b-it","object":"model","created_at":1758845446,"cost_in":3.5e-7,"cost_out":5.6e-7,"owned_by":"workers-ai"},{"id":"openrouter/deepseek/deepseek-v3.1-terminus","object":"model","created_at":1758646221,"cost_in":2.1e-7,"cost_out":7.9e-7,"owned_by":"openrouter"},{"id":"deepseek/deepseek-v3.1-terminus","object":"model","created_at":1758646221,"cost_in":2.1e-7,"cost_out":7.9e-7,"owned_by":"deepseek"},{"id":"openrouter/alibaba/tongyi-deepresearch-30b-a3b","object":"model","created_at":1758646220,"cost_in":9e-8,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/x-ai/grok-4-fast:free","object":"model","created_at":1758646220,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-coder-flash","object":"model","created_at":1758646219,"cost_in":3e-7,"cost_out":0.0000015,"owned_by":"openrouter"},{"id":"openrouter/arcee-ai/afm-4.5b","object":"model","created_at":1758646218,"cost_in":4.8e-8,"cost_out":1.5e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-coder-plus","object":"model","created_at":1758646218,"cost_in":0.000001,"cost_out":0.000005,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen-plus-2025-07-28:thinking","object":"model","created_at":1758646217,"cost_in":4e-7,"cost_out":0.000004,"owned_by":"openrouter"},{"id":"openrouter/opengvlab/internvl3-78b","object":"model","created_at":1758646217,"cost_in":1e-7,"cost_out":3.9e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen-plus-2025-07-28","object":"model","created_at":1758646216,"cost_in":4e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-next-80b-a3b-instruct","object":"model","created_at":1758646215,"cost_in":9e-8,"cost_out":0.0000011,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-next-80b-a3b-thinking","object":"model","created_at":1758646215,"cost_in":1.2e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/nvidia/nemotron-nano-9b-v2","object":"model","created_at":1758646214,"cost_in":4e-8,"cost_out":1.6e-7,"owned_by":"openrouter"},{"id":"openrouter/meituan/longcat-flash-chat","object":"model","created_at":1758646214,"cost_in":1.5e-7,"cost_out":7.5e-7,"owned_by":"openrouter"},{"id":"openrouter/allenai/molmo-7b-d","object":"model","created_at":1758646213,"cost_in":1e-7,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"openrouter/openrouter/sonoma-dusk-alpha","object":"model","created_at":1758646212,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/openrouter/sonoma-sky-alpha","object":"model","created_at":1758646212,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/bytedance/seed-oss-36b-instruct","object":"model","created_at":1758646211,"cost_in":1.6e-7,"cost_out":6.5e-7,"owned_by":"openrouter"},{"id":"openrouter/stepfun-ai/step3","object":"model","created_at":1758646211,"cost_in":5.7e-7,"cost_out":0.00000142,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-max","object":"model","created_at":1758646210,"cost_in":0.0000012,"cost_out":0.000006,"owned_by":"openrouter"},{"id":"groq/moonshotai/kimi-k2-instruct-0905","object":"model","created_at":1758646210,"cost_in":0.000001,"cost_out":0.000003,"owned_by":"groq"},{"id":"openrouter/moonshotai/kimi-k2-0905","object":"model","created_at":1758646209,"cost_in":3.9e-7,"cost_out":0.0000019,"owned_by":"openrouter"},{"id":"openrouter/deepcogito/cogito-v2-preview-llama-109b-moe","object":"model","created_at":1758646208,"cost_in":1.8e-7,"cost_out":5.9e-7,"owned_by":"openrouter"},{"id":"openrouter/deepcogito/cogito-v2-preview-deepseek-671b","object":"model","created_at":1758646208,"cost_in":0.00000125,"cost_out":0.00000125,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-30b-a3b-thinking-2507","object":"model","created_at":1758646207,"cost_in":5.1e-8,"cost_out":3.4e-7,"owned_by":"openrouter"},{"id":"openrouter/moonshotai/kimi-dev-72b","object":"model","created_at":1758646207,"cost_in":2.9e-7,"cost_out":0.00000115,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-coder-30b-a3b-instruct","object":"model","created_at":1758646206,"cost_in":6e-8,"cost_out":2.5e-7,"owned_by":"openrouter"},{"id":"google-vertex-ai/gemini-2.5-flash","object":"model","created_at":1758646204,"cost_in":3e-7,"cost_out":0.0000025,"owned_by":"google-vertex-ai"},{"id":"mistral/mistral-medium-2505","object":"model","created_at":1758646203,"cost_in":4e-7,"cost_out":0.000002,"owned_by":"mistral"},{"id":"cerebras/qwen-3-235b-a22b-instruct-2507","object":"model","created_at":1758646203,"cost_in":6e-7,"cost_out":0.0000012,"owned_by":"cerebras"},{"id":"mistral/mistral-medium-2508","object":"model","created_at":1758646202,"cost_in":4e-7,"cost_out":0.000002,"owned_by":"mistral"},{"id":"cerebras/gpt-oss-120b","object":"model","created_at":1758646201,"cost_in":2.5e-7,"cost_out":6.9e-7,"owned_by":"cerebras"},{"id":"cerebras/qwen-3-coder-480b","object":"model","created_at":1758646201,"cost_in":0.000002,"cost_out":0.000002,"owned_by":"cerebras"},{"id":"openrouter/google/gemini-2.5-flash-image-preview:free","object":"model","created_at":1756254618,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.5-flash-image-preview","object":"model","created_at":1756254618,"cost_in":3e-7,"cost_out":0.0000025,"owned_by":"openrouter"},{"id":"openrouter/x-ai/grok-code-fast-1","object":"model","created_at":1756254618,"cost_in":2e-7,"cost_out":0.0000015,"owned_by":"openrouter"},{"id":"openrouter/nousresearch/hermes-4-405b","object":"model","created_at":1756254618,"cost_in":3e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/nousresearch/hermes-4-70b","object":"model","created_at":1756254618,"cost_in":1.1e-7,"cost_out":3.8e-7,"owned_by":"openrouter"},{"id":"google-ai-studio/gemini-2.5-flash-image-preview","object":"model","created_at":1756254011,"cost_in":3e-7,"cost_out":0.0000025,"owned_by":"google-ai-studio"},{"id":"grok/grok-code-fast-1","object":"model","created_at":1756254011,"cost_in":2e-7,"cost_out":0.0000015,"owned_by":"grok"},{"id":"google-ai-studio/gemini-2.5-flash-image-preview:free","object":"model","created_at":1756254011,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"openrouter/google/gemma-2-9b-it","object":"model","created_at":1756168273,"cost_in":3e-8,"cost_out":9e-8,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen2.5-vl-72b-instruct","object":"model","created_at":1756168272,"cost_in":3e-8,"cost_out":1.3e-7,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mistral-small-24b-instruct-2501","object":"model","created_at":1756168272,"cost_in":3e-8,"cost_out":1.1e-7,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-r1-distill-llama-70b","object":"model","created_at":1756168272,"cost_in":3e-8,"cost_out":1.3e-7,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-chat","object":"model","created_at":1756168272,"cost_in":3e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen-2.5-coder-32b-instruct","object":"model","created_at":1756168272,"cost_in":3e-8,"cost_out":1.1e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen-2.5-72b-instruct","object":"model","created_at":1756168272,"cost_in":7e-8,"cost_out":2.6e-7,"owned_by":"openrouter"},{"id":"openrouter/moonshotai/kimi-vl-a3b-thinking","object":"model","created_at":1756168271,"cost_in":2e-8,"cost_out":8e-8,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-v3-base","object":"model","created_at":1756168271,"cost_in":1.99919e-7,"cost_out":8.00064e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen2.5-vl-32b-instruct","object":"model","created_at":1756168271,"cost_in":5e-8,"cost_out":2.2e-7,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-chat-v3-0324","object":"model","created_at":1756168271,"cost_in":1.5e-7,"cost_out":7.5e-7,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mistral-small-3.1-24b-instruct","object":"model","created_at":1756168271,"cost_in":3e-8,"cost_out":1.1e-7,"owned_by":"openrouter"},{"id":"openrouter/google/gemma-3-12b-it","object":"model","created_at":1756168271,"cost_in":3e-8,"cost_out":1e-7,"owned_by":"openrouter"},{"id":"openrouter/google/gemma-3-27b-it","object":"model","created_at":1756168271,"cost_in":4e-8,"cost_out":1.5e-7,"owned_by":"openrouter"},{"id":"openrouter/thedrummer/skyfall-36b-v2","object":"model","created_at":1756168271,"cost_in":5.5e-7,"cost_out":8e-7,"owned_by":"openrouter"},{"id":"openrouter/cognitivecomputations/dolphin3.0-r1-mistral-24b","object":"model","created_at":1756168271,"cost_in":1e-8,"cost_out":5e-8,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-r1-0528","object":"model","created_at":1756168270,"cost_in":4e-7,"cost_out":0.00000175,"owned_by":"openrouter"},{"id":"openrouter/mistralai/devstral-small-2505","object":"model","created_at":1756168270,"cost_in":6e-8,"cost_out":1.2e-7,"owned_by":"openrouter"},{"id":"openrouter/nousresearch/deephermes-3-mistral-24b-preview","object":"model","created_at":1756168270,"cost_in":5e-8,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-30b-a3b","object":"model","created_at":1756168270,"cost_in":6e-8,"cost_out":2.2e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-32b","object":"model","created_at":1756168270,"cost_in":8e-8,"cost_out":2.4e-7,"owned_by":"openrouter"},{"id":"openrouter/tngtech/deepseek-r1t-chimera","object":"model","created_at":1756168270,"cost_in":3e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/thudm/glm-z1-32b","object":"model","created_at":1756168270,"cost_in":5e-8,"cost_out":2.2e-7,"owned_by":"openrouter"},{"id":"openrouter/microsoft/mai-ds-r1","object":"model","created_at":1756168270,"cost_in":3e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/shisa-ai/shisa-v2-llama3.3-70b","object":"model","created_at":1756168270,"cost_in":5e-8,"cost_out":2.2e-7,"owned_by":"openrouter"},{"id":"openrouter/arliai/qwq-32b-arliai-rpr-v1","object":"model","created_at":1756168270,"cost_in":3e-8,"cost_out":1.1e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-30b-a3b-instruct-2507","object":"model","created_at":1756168269,"cost_in":8e-8,"cost_out":3.3e-7,"owned_by":"openrouter"},{"id":"openrouter/z-ai/glm-4.5","object":"model","created_at":1756168269,"cost_in":3.5e-7,"cost_out":0.00000155,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-235b-a22b-thinking-2507","object":"model","created_at":1756168269,"cost_in":1.1e-7,"cost_out":6e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-235b-a22b-2507","object":"model","created_at":1756168269,"cost_in":7.1e-8,"cost_out":4.63e-7,"owned_by":"openrouter"},{"id":"mistral/mistral-small-24b-instruct-2501","object":"model","created_at":1756167663,"cost_in":3e-8,"cost_out":1.1e-7,"owned_by":"mistral"},{"id":"deepseek/deepseek-chat","object":"model","created_at":1756167663,"cost_in":3e-7,"cost_out":0.0000012,"owned_by":"deepseek"},{"id":"deepseek/deepseek-r1-distill-llama-70b","object":"model","created_at":1756167663,"cost_in":3e-8,"cost_out":1.3e-7,"owned_by":"deepseek"},{"id":"google-ai-studio/gemma-2-9b-it","object":"model","created_at":1756167663,"cost_in":3e-8,"cost_out":9e-8,"owned_by":"google-ai-studio"},{"id":"deepseek/deepseek-r1-0528","object":"model","created_at":1756167662,"cost_in":4e-7,"cost_out":0.00000175,"owned_by":"deepseek"},{"id":"mistral/devstral-small-2505","object":"model","created_at":1756167662,"cost_in":6e-8,"cost_out":1.2e-7,"owned_by":"mistral"},{"id":"deepseek/tngtech/deepseek-r1t-chimera","object":"model","created_at":1756167662,"cost_in":1.7992692e-7,"cost_out":7.200576e-7,"owned_by":"deepseek"},{"id":"deepseek/deepseek-v3-base","object":"model","created_at":1756167662,"cost_in":1.99919e-7,"cost_out":8.00064e-7,"owned_by":"deepseek"},{"id":"deepseek/deepseek-chat-v3-0324","object":"model","created_at":1756167662,"cost_in":1.5e-7,"cost_out":7.5e-7,"owned_by":"deepseek"},{"id":"mistral/mistral-small-3.1-24b-instruct","object":"model","created_at":1756167662,"cost_in":3e-8,"cost_out":1.1e-7,"owned_by":"mistral"},{"id":"google-ai-studio/gemma-3-12b-it","object":"model","created_at":1756167662,"cost_in":3e-8,"cost_out":1e-7,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemma-3-27b-it","object":"model","created_at":1756167662,"cost_in":4e-8,"cost_out":1.5e-7,"owned_by":"google-ai-studio"},{"id":"openrouter/alpindale/goliath-120b","object":"model","created_at":1755995442,"cost_in":0.000006,"cost_out":0.000008,"owned_by":"openrouter"},{"id":"openrouter/mancer/weaver","object":"model","created_at":1755995442,"cost_in":7.5e-7,"cost_out":0.000001,"owned_by":"openrouter"},{"id":"openrouter/undi95/remm-slerp-l2-13b","object":"model","created_at":1755995442,"cost_in":4.5e-7,"cost_out":6.5e-7,"owned_by":"openrouter"},{"id":"openrouter/anthracite-org/magnum-v4-72b","object":"model","created_at":1755995440,"cost_in":0.000003,"cost_out":0.000005,"owned_by":"openrouter"},{"id":"openrouter/thedrummer/rocinante-12b","object":"model","created_at":1755995440,"cost_in":1.7e-7,"cost_out":4.3e-7,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.2-11b-vision-instruct","object":"model","created_at":1755995440,"cost_in":4.9e-8,"cost_out":4.9e-8,"owned_by":"openrouter"},{"id":"openrouter/neversleep/llama-3.1-lumimaid-8b","object":"model","created_at":1755995440,"cost_in":9e-8,"cost_out":6e-7,"owned_by":"openrouter"},{"id":"openrouter/cognitivecomputations/dolphin3.0-mistral-24b","object":"model","created_at":1755995439,"cost_in":4e-8,"cost_out":1.7e-7,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-r1-distill-qwen-14b","object":"model","created_at":1755995439,"cost_in":1.2e-7,"cost_out":1.2e-7,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-3.7-sonnet","object":"model","created_at":1755995438,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"openrouter/thudm/glm-4-32b","object":"model","created_at":1755995437,"cost_in":5.5e-7,"cost_out":0.00000166,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mistral-small-3.2-24b-instruct","object":"model","created_at":1755995436,"cost_in":6e-8,"cost_out":1.8e-7,"owned_by":"openrouter"},{"id":"openrouter/google/gemma-3n-e4b-it","object":"model","created_at":1755995436,"cost_in":2e-8,"cost_out":4e-8,"owned_by":"openrouter"},{"id":"openrouter/z-ai/glm-4.5v","object":"model","created_at":1755995435,"cost_in":4.8e-7,"cost_out":0.00000144,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-oss-120b","object":"model","created_at":1755995435,"cost_in":3.9e-8,"cost_out":1.9e-7,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-oss-20b","object":"model","created_at":1755995435,"cost_in":3e-8,"cost_out":1.4e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-coder","object":"model","created_at":1755995435,"cost_in":2.2e-7,"cost_out":9.5e-7,"owned_by":"openrouter"},{"id":"openrouter/moonshotai/kimi-k2","object":"model","created_at":1755995435,"cost_in":4.56e-7,"cost_out":0.00000184,"owned_by":"openrouter"},{"id":"cerebras-ai/qwen-3-coder-480b","object":"model","created_at":1755950596,"cost_in":0.000002,"cost_out":0.000002,"owned_by":"cerebras-ai"},{"id":"deepseek/deepseek-chat-v3.1:thinking","object":"model","created_at":1755950596,"cost_in":5.5e-7,"cost_out":0.00000219,"owned_by":"deepseek"},{"id":"openai/o3-mini-2025-01-31","object":"model","created_at":1755950595,"cost_in":0.0000011,"cost_out":0.0000044,"owned_by":"openai"},{"id":"deepseek/deepseek-chat-v3","object":"model","created_at":1755950595,"cost_in":3e-7,"cost_out":0.0000012,"owned_by":"deepseek"},{"id":"cerebras-ai/gpt-oss-120b","object":"model","created_at":1755950595,"cost_in":2.5e-7,"cost_out":6.9e-7,"owned_by":"cerebras-ai"},{"id":"mistral/mistral-saba-2502","object":"model","created_at":1755950594,"cost_in":2e-7,"cost_out":6e-7,"owned_by":"mistral"},{"id":"openai/o3-mini-high-2025-01-31","object":"model","created_at":1755950594,"cost_in":0.0000011,"cost_out":0.0000044,"owned_by":"openai"},{"id":"mistral/mistral-small-3.1-24b-instruct-2503","object":"model","created_at":1755950593,"cost_in":3e-8,"cost_out":1.1e-7,"owned_by":"mistral"},{"id":"openai/gpt-4o-mini-search-preview-2025-03-11","object":"model","created_at":1755950593,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"openai"},{"id":"openai/gpt-4o-search-preview-2025-03-11","object":"model","created_at":1755950593,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"openai"},{"id":"openai/o4-mini-high-2025-04-16","object":"model","created_at":1755950592,"cost_in":0.0000011,"cost_out":0.0000044,"owned_by":"openai"},{"id":"openai/o3-2025-04-16","object":"model","created_at":1755950592,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"openai"},{"id":"openai/o4-mini-2025-04-16","object":"model","created_at":1755950592,"cost_in":0.0000011,"cost_out":0.0000044,"owned_by":"openai"},{"id":"anthropic/claude-4-opus-20250522","object":"model","created_at":1755950591,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"anthropic"},{"id":"anthropic/claude-4-sonnet-20250522","object":"model","created_at":1755950591,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"grok/grok-4-07-09","object":"model","created_at":1755950590,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"grok"},{"id":"mistral/mistral-small-3.2-24b-instruct-2506","object":"model","created_at":1755950590,"cost_in":6e-8,"cost_out":1.8e-7,"owned_by":"mistral"},{"id":"openai/o3-pro-2025-06-10","object":"model","created_at":1755950590,"cost_in":0.00002,"cost_out":0.00008,"owned_by":"openai"},{"id":"openai/gpt-5-nano-2025-08-07","object":"model","created_at":1755950589,"cost_in":5e-8,"cost_out":4e-7,"owned_by":"openai"},{"id":"anthropic/claude-4.1-opus-20250805","object":"model","created_at":1755950589,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"anthropic"},{"id":"openai/gpt-5-chat-2025-08-07","object":"model","created_at":1755950588,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openai"},{"id":"openai/gpt-5-2025-08-07","object":"model","created_at":1755950588,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openai"},{"id":"openai/gpt-5-mini-2025-08-07","object":"model","created_at":1755950588,"cost_in":2.5e-7,"cost_out":0.000002,"owned_by":"openai"},{"id":"google-vertex-ai/gemini-2.5-flash-preview-04-17","object":"model","created_at":1755950587,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"google-vertex-ai"},{"id":"google-vertex-ai/gemini-2.5-flash-lite-preview-06-17","object":"model","created_at":1755950587,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"google-vertex-ai"},{"id":"google-vertex-ai/gemini-2.0-flash","object":"model","created_at":1755950586,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"google-vertex-ai"},{"id":"google-vertex-ai/gemini-2.5-flash-preview-05-20","object":"model","created_at":1755950586,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"google-vertex-ai"},{"id":"google-vertex-ai/gemini-2.5-pro-preview-05-06","object":"model","created_at":1755950586,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"google-vertex-ai"},{"id":"google-vertex-ai/gemini-2.5-pro","object":"model","created_at":1755950585,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"google-vertex-ai"},{"id":"google-vertex-ai/gemini-2.0-flash-lite","object":"model","created_at":1755950585,"cost_in":7.5e-8,"cost_out":3e-7,"owned_by":"google-vertex-ai"},{"id":"google-vertex-ai/gemini-2.5-pro-preview-06-05","object":"model","created_at":1755950585,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"google-vertex-ai"},{"id":"openrouter/mistralai/devstral-medium-2507","object":"model","created_at":1755950584,"cost_in":4e-7,"cost_out":0.000002,"owned_by":"openrouter"},{"id":"openrouter/nousresearch/deephermes-3-llama-3-8b-preview","object":"model","created_at":1755950584,"cost_in":3e-8,"cost_out":1.1e-7,"owned_by":"openrouter"},{"id":"openrouter/featherless/qwerky-72b","object":"model","created_at":1755950583,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.5-pro-preview-06-05","object":"model","created_at":1755950583,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openrouter/mistralai/devstral-small-2507","object":"model","created_at":1755950583,"cost_in":1e-7,"cost_out":3e-7,"owned_by":"openrouter"},{"id":"openai/o4-mini-deep-research","object":"model","created_at":1755950582,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"openai"},{"id":"openai/o3-deep-research","object":"model","created_at":1755950582,"cost_in":0.00001,"cost_out":0.00004,"owned_by":"openai"},{"id":"mistral/devstral-medium-2507","object":"model","created_at":1755950581,"cost_in":4e-7,"cost_out":0.000002,"owned_by":"mistral"},{"id":"openai/codex-mini-latest","object":"model","created_at":1755950581,"cost_in":0.0000015,"cost_out":0.000006,"owned_by":"openai"},{"id":"openai/gpt-5-chat-latest","object":"model","created_at":1755950581,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openai"},{"id":"mistral/magistral-medium-latest","object":"model","created_at":1755950580,"cost_in":0.000002,"cost_out":0.000005,"owned_by":"mistral"},{"id":"mistral/magistral-small","object":"model","created_at":1755950580,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"mistral"},{"id":"mistral/devstral-small-2507","object":"model","created_at":1755950580,"cost_in":7e-8,"cost_out":2.8e-7,"owned_by":"mistral"},{"id":"huggingface/Qwen/Qwen3-Coder-480B-A35B-Instruct","object":"model","created_at":1755950579,"cost_in":0.000002,"cost_out":0.000002,"owned_by":"huggingface"},{"id":"huggingface/moonshotai/Kimi-K2-Instruct","object":"model","created_at":1755950579,"cost_in":0.000001,"cost_out":0.000003,"owned_by":"huggingface"},{"id":"huggingface/zai-org/GLM-4.5-Air","object":"model","created_at":1755950578,"cost_in":2e-7,"cost_out":0.0000011,"owned_by":"huggingface"},{"id":"huggingface/zai-org/GLM-4.5","object":"model","created_at":1755950578,"cost_in":6e-7,"cost_out":0.0000022,"owned_by":"huggingface"},{"id":"huggingface/Qwen/Qwen3-235B-A22B-Thinking-2507","object":"model","created_at":1755950578,"cost_in":3e-7,"cost_out":0.000003,"owned_by":"huggingface"},{"id":"huggingface/deepseek-ai/DeepSeek-R1-0528","object":"model","created_at":1755950577,"cost_in":0.000003,"cost_out":0.000005,"owned_by":"huggingface"},{"id":"huggingface/deepseek-ai/Deepseek-V3-0324","object":"model","created_at":1755950577,"cost_in":0.00000125,"cost_out":0.00000125,"owned_by":"huggingface"},{"id":"groq/meta-llama/llama-guard-4-12b","object":"model","created_at":1755950576,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"groq"},{"id":"groq/qwen/qwen3-32b","object":"model","created_at":1755950576,"cost_in":2.9e-7,"cost_out":5.9e-7,"owned_by":"groq"},{"id":"groq/moonshotai/kimi-k2-instruct","object":"model","created_at":1755950576,"cost_in":0.000001,"cost_out":0.000003,"owned_by":"groq"},{"id":"groq/mistral-saba-24b","object":"model","created_at":1755950575,"cost_in":7.9e-7,"cost_out":7.9e-7,"owned_by":"groq"},{"id":"groq/openai/gpt-oss-120b","object":"model","created_at":1755950575,"cost_in":1.5e-7,"cost_out":7.5e-7,"owned_by":"groq"},{"id":"groq/openai/gpt-oss-20b","object":"model","created_at":1755950575,"cost_in":1e-7,"cost_out":5e-7,"owned_by":"groq"},{"id":"groq/deepseek-r1-distill-llama-70b","object":"model","created_at":1755950574,"cost_in":7.5e-7,"cost_out":9.9e-7,"owned_by":"groq"},{"id":"groq/qwen-qwq-32b","object":"model","created_at":1755950574,"cost_in":2.9e-7,"cost_out":3.9e-7,"owned_by":"groq"},{"id":"grok/grok-2-latest","object":"model","created_at":1755950573,"cost_in":0.000002,"cost_out":0.00001,"owned_by":"grok"},{"id":"grok/grok-3-mini-fast-latest","object":"model","created_at":1755950573,"cost_in":6e-7,"cost_out":0.000004,"owned_by":"grok"},{"id":"grok/grok-3-latest","object":"model","created_at":1755950573,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"grok"},{"id":"grok/grok-3-mini-fast","object":"model","created_at":1755950572,"cost_in":6e-7,"cost_out":0.000004,"owned_by":"grok"},{"id":"grok/grok-3-fast","object":"model","created_at":1755950572,"cost_in":0.000005,"cost_out":0.000025,"owned_by":"grok"},{"id":"grok/grok-3-fast-latest","object":"model","created_at":1755950572,"cost_in":0.000005,"cost_out":0.000025,"owned_by":"grok"},{"id":"grok/grok-2-vision","object":"model","created_at":1755950571,"cost_in":0.000002,"cost_out":0.00001,"owned_by":"grok"},{"id":"grok/grok-2","object":"model","created_at":1755950571,"cost_in":0.000002,"cost_out":0.00001,"owned_by":"grok"},{"id":"google-ai-studio/gemini-1.5-flash-8b","object":"model","created_at":1755950570,"cost_in":3.75e-8,"cost_out":1.5e-7,"owned_by":"google-ai-studio"},{"id":"grok/grok-3-mini-latest","object":"model","created_at":1755950570,"cost_in":3e-7,"cost_out":5e-7,"owned_by":"grok"},{"id":"grok/grok-2-vision-latest","object":"model","created_at":1755950570,"cost_in":0.000002,"cost_out":0.00001,"owned_by":"grok"},{"id":"google-ai-studio/gemini-2.0-flash-lite","object":"model","created_at":1755950569,"cost_in":7.5e-8,"cost_out":3e-7,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-1.5-flash","object":"model","created_at":1755950569,"cost_in":7.5e-8,"cost_out":3e-7,"owned_by":"google-ai-studio"},{"id":"azure-openai/o3-mini","object":"model","created_at":1755950568,"cost_in":0.0000011,"cost_out":0.0000044,"owned_by":"azure-openai"},{"id":"azure-openai/o4-mini","object":"model","created_at":1755950568,"cost_in":0.0000011,"cost_out":0.0000044,"owned_by":"azure-openai"},{"id":"google-ai-studio/gemini-1.5-pro","object":"model","created_at":1755950568,"cost_in":0.00000125,"cost_out":0.000005,"owned_by":"google-ai-studio"},{"id":"azure-openai/o3","object":"model","created_at":1755950567,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"azure-openai"},{"id":"azure-openai/o1","object":"model","created_at":1755950567,"cost_in":0.000015,"cost_out":0.00006,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-3.5-turbo-0301","object":"model","created_at":1755950567,"cost_in":0.0000015,"cost_out":0.000002,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-5-chat","object":"model","created_at":1755950566,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-4.1-mini","object":"model","created_at":1755950566,"cost_in":4e-7,"cost_out":0.0000016,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-3.5-turbo-instruct","object":"model","created_at":1755950565,"cost_in":0.0000015,"cost_out":0.000002,"owned_by":"azure-openai"},{"id":"azure-openai/o1-mini","object":"model","created_at":1755950565,"cost_in":0.0000011,"cost_out":0.0000044,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-4o","object":"model","created_at":1755950565,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-4.1-nano","object":"model","created_at":1755950564,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-4.1","object":"model","created_at":1755950564,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"azure-openai"},{"id":"azure-openai/o1-preview","object":"model","created_at":1755950563,"cost_in":0.0000165,"cost_out":0.000066,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-4-turbo","object":"model","created_at":1755950563,"cost_in":0.00001,"cost_out":0.00003,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-5-nano","object":"model","created_at":1755950563,"cost_in":5e-8,"cost_out":4e-7,"owned_by":"azure-openai"},{"id":"azure-openai/codex-mini","object":"model","created_at":1755950562,"cost_in":0.0000015,"cost_out":0.000006,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-4-turbo-vision","object":"model","created_at":1755950562,"cost_in":0.00001,"cost_out":0.00003,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-3.5-turbo-0613","object":"model","created_at":1755950562,"cost_in":0.000003,"cost_out":0.000004,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-5","object":"model","created_at":1755950561,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-5-mini","object":"model","created_at":1755950561,"cost_in":2.5e-7,"cost_out":0.000002,"owned_by":"azure-openai"},{"id":"aws-bedrock/meta.llama3-2-11b-instruct-v1:0","object":"model","created_at":1755950560,"cost_in":1.6e-7,"cost_out":1.6e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/amazon.nova-micro-v1:0","object":"model","created_at":1755950560,"cost_in":3.5e-8,"cost_out":1.4e-7,"owned_by":"aws-bedrock"},{"id":"anthropic/claude-opus-4-1-20250805","object":"model","created_at":1755950560,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"anthropic"},{"id":"aws-bedrock/anthropic.claude-sonnet-4-20250514-v1:0","object":"model","created_at":1755950559,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/anthropic.claude-opus-4-1-20250805-v1:0","object":"model","created_at":1755950559,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/anthropic.claude-3-opus-20240229-v1:0","object":"model","created_at":1755950558,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0","object":"model","created_at":1755950558,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/meta.llama3-3-70b-instruct-v1:0","object":"model","created_at":1755950558,"cost_in":7.2e-7,"cost_out":7.2e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/ai21.jamba-1-5-large-v1:0","object":"model","created_at":1755950557,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/anthropic.claude-v2","object":"model","created_at":1755950557,"cost_in":0.000008,"cost_out":0.000024,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/meta.llama3-70b-instruct-v1:0","object":"model","created_at":1755950556,"cost_in":0.00000265,"cost_out":0.0000035,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/cohere.command-r-plus-v1:0","object":"model","created_at":1755950556,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/meta.llama3-2-90b-instruct-v1:0","object":"model","created_at":1755950556,"cost_in":7.2e-7,"cost_out":7.2e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/anthropic.claude-3-sonnet-20240229-v1:0","object":"model","created_at":1755950555,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/meta.llama4-scout-17b-instruct-v1:0","object":"model","created_at":1755950555,"cost_in":1.7e-7,"cost_out":6.6e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/amazon.nova-premier-v1:0","object":"model","created_at":1755950554,"cost_in":0.0000025,"cost_out":0.0000125,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/meta.llama3-8b-instruct-v1:0","object":"model","created_at":1755950554,"cost_in":3e-7,"cost_out":6e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/cohere.command-r-v1:0","object":"model","created_at":1755950554,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/amazon.nova-lite-v1:0","object":"model","created_at":1755950553,"cost_in":6e-8,"cost_out":2.4e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/deepseek.r1-v1:0","object":"model","created_at":1755950553,"cost_in":0.00000135,"cost_out":0.0000054,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/anthropic.claude-3-haiku-20240307-v1:0","object":"model","created_at":1755950553,"cost_in":2.5e-7,"cost_out":0.00000125,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/meta.llama3-1-8b-instruct-v1:0","object":"model","created_at":1755950552,"cost_in":2.2e-7,"cost_out":2.2e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0","object":"model","created_at":1755950552,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/meta.llama4-maverick-17b-instruct-v1:0","object":"model","created_at":1755950551,"cost_in":2.4e-7,"cost_out":9.7e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/anthropic.claude-instant-v1","object":"model","created_at":1755950551,"cost_in":8e-7,"cost_out":0.0000024,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/meta.llama3-1-70b-instruct-v1:0","object":"model","created_at":1755950551,"cost_in":7.2e-7,"cost_out":7.2e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/ai21.jamba-1-5-mini-v1:0","object":"model","created_at":1755950550,"cost_in":2e-7,"cost_out":4e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/anthropic.claude-opus-4-20250514-v1:0","object":"model","created_at":1755950550,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/cohere.command-light-text-v14","object":"model","created_at":1755950549,"cost_in":3e-7,"cost_out":6e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/meta.llama3-2-3b-instruct-v1:0","object":"model","created_at":1755950549,"cost_in":1.5e-7,"cost_out":1.5e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/anthropic.claude-v2:1","object":"model","created_at":1755950549,"cost_in":0.000008,"cost_out":0.000024,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/anthropic.claude-3-7-sonnet-20250219-v1:0","object":"model","created_at":1755950548,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/amazon.nova-pro-v1:0","object":"model","created_at":1755950548,"cost_in":8e-7,"cost_out":0.0000032,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/meta.llama3-2-1b-instruct-v1:0","object":"model","created_at":1755950548,"cost_in":1e-7,"cost_out":1e-7,"owned_by":"aws-bedrock"},{"id":"workers-ai/llama-3.1-8b-instruct","object":"model","created_at":1755950547,"cost_in":0.28,"cost_out":0.83,"owned_by":"workers-ai"},{"id":"aws-bedrock/anthropic.claude-3-5-haiku-20241022-v1:0","object":"model","created_at":1755950547,"cost_in":8e-7,"cost_out":0.000004,"owned_by":"aws-bedrock"},{"id":"workers-ai/llama-3.2-11b-vision-instruct","object":"model","created_at":1755950546,"cost_in":0.049,"cost_out":0.68,"owned_by":"workers-ai"},{"id":"workers-ai/bge-large-en-v1.5","object":"model","created_at":1755950546,"cost_in":0.2,"cost_out":0,"owned_by":"workers-ai"},{"id":"workers-ai/bge-base-en-v1.5","object":"model","created_at":1755950546,"cost_in":0.067,"cost_out":0,"owned_by":"workers-ai"},{"id":"workers-ai/llama-3.1-8b-instruct-awq","object":"model","created_at":1755950545,"cost_in":0.12,"cost_out":0.27,"owned_by":"workers-ai"},{"id":"workers-ai/llama-3-8b-instruct-awq","object":"model","created_at":1755950545,"cost_in":0.12,"cost_out":0.27,"owned_by":"workers-ai"},{"id":"workers-ai/bge-small-en-v1.5","object":"model","created_at":1755950544,"cost_in":0.02,"cost_out":0,"owned_by":"workers-ai"},{"id":"workers-ai/m2m100-1.2b","object":"model","created_at":1755950544,"cost_in":0.34,"cost_out":0.34,"owned_by":"workers-ai"},{"id":"workers-ai/llama-3.3-70b-instruct-fp8-fast","object":"model","created_at":1755950544,"cost_in":0.29,"cost_out":2.25,"owned_by":"workers-ai"},{"id":"workers-ai/llama-3.2-1b-instruct","object":"model","created_at":1755950543,"cost_in":0.027,"cost_out":0.2,"owned_by":"workers-ai"},{"id":"workers-ai/llama-3.1-8b-instruct-fp8","object":"model","created_at":1755950543,"cost_in":0.15,"cost_out":0.29,"owned_by":"workers-ai"},{"id":"workers-ai/distilbert-sst-2-int8","object":"model","created_at":1755950542,"cost_in":0.026,"cost_out":0,"owned_by":"workers-ai"},{"id":"workers-ai/llama-3.2-3b-instruct","object":"model","created_at":1755950542,"cost_in":0.051,"cost_out":0.34,"owned_by":"workers-ai"},{"id":"workers-ai/deepseek-r1-distill-qwen-32b","object":"model","created_at":1755950542,"cost_in":0.5,"cost_out":4.88,"owned_by":"workers-ai"},{"id":"workers-ai/llama-3-8b-instruct","object":"model","created_at":1755950541,"cost_in":0.28,"cost_out":0.83,"owned_by":"workers-ai"},{"id":"workers-ai/llama-2-7b-chat-fp16","object":"model","created_at":1755950541,"cost_in":0.56,"cost_out":6.67,"owned_by":"workers-ai"},{"id":"workers-ai/mistral-7b-instruct-v0.1","object":"model","created_at":1755950541,"cost_in":0.11,"cost_out":0.19,"owned_by":"workers-ai"},{"id":"workers-ai/bge-m3","object":"model","created_at":1755950540,"cost_in":0.012,"cost_out":0,"owned_by":"workers-ai"},{"id":"workers-ai/llama-guard-3-8b","object":"model","created_at":1755950540,"cost_in":0.48,"cost_out":0.03,"owned_by":"workers-ai"},{"id":"openrouter/deepseek/deepseek-chat-v3.1","object":"model","created_at":1755822610,"cost_in":1.5e-7,"cost_out":7.5e-7,"owned_by":"openrouter"},{"id":"deepseek/deepseek-chat-v3.1","object":"model","created_at":1755822007,"cost_in":1.5e-7,"cost_out":7.5e-7,"owned_by":"deepseek"},{"id":"openrouter/neversleep/noromaid-20b","object":"model","created_at":1755736216,"cost_in":0.000001,"cost_out":0.00000175,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-v3.1-base","object":"model","created_at":1755736212,"cost_in":2.5e-7,"cost_out":0.000001,"owned_by":"openrouter"},{"id":"deepseek/deepseek-v3.1-base","object":"model","created_at":1755735607,"cost_in":2.5e-7,"cost_out":0.000001,"owned_by":"deepseek"},{"id":"openrouter/openai/gpt-4o-audio-preview","object":"model","created_at":1755649817,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openai/gpt-4o-audio-preview","object":"model","created_at":1755649213,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"openai"},{"id":"openai/gpt-oss-120b","object":"model","created_at":1755562860,"cost_in":3.9e-8,"cost_out":1.9e-7,"owned_by":"openai"},{"id":"openai/gpt-oss-20b","object":"model","created_at":1755562860,"cost_in":3e-8,"cost_out":1.4e-7,"owned_by":"openai"},{"id":"openrouter/baidu/ernie-4.5-vl-424b-a47b","object":"model","created_at":1755477041,"cost_in":3.36e-7,"cost_out":0.000001,"owned_by":"openrouter"},{"id":"mistral/mistral-small-3.2-24b-instruct","object":"model","created_at":1755476438,"cost_in":6e-8,"cost_out":1.8e-7,"owned_by":"mistral"},{"id":"openrouter/baidu/ernie-4.5-vl-28b-a3b","object":"model","created_at":1755304259,"cost_in":1.12e-7,"cost_out":4.48e-7,"owned_by":"openrouter"},{"id":"openrouter/baidu/ernie-4.5-21b-a3b","object":"model","created_at":1755304259,"cost_in":5.6e-8,"cost_out":2.24e-7,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mistral-medium-3.1","object":"model","created_at":1755131433,"cost_in":4e-7,"cost_out":0.000002,"owned_by":"openrouter"},{"id":"mistral/mistral-medium-3.1","object":"model","created_at":1755130831,"cost_in":4e-7,"cost_out":0.000002,"owned_by":"mistral"},{"id":"openrouter/gryphe/mythomax-l2-13b","object":"model","created_at":1755045070,"cost_in":6e-8,"cost_out":6e-8,"owned_by":"openrouter"},{"id":"openrouter/google/gemma-2-27b-it","object":"model","created_at":1755045069,"cost_in":6.5e-7,"cost_out":6.5e-7,"owned_by":"openrouter"},{"id":"openrouter/thedrummer/unslopnemo-12b","object":"model","created_at":1755045068,"cost_in":4e-7,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/microsoft/phi-4","object":"model","created_at":1755045067,"cost_in":6e-8,"cost_out":1.4e-7,"owned_by":"openrouter"},{"id":"openrouter/cohere/command-a","object":"model","created_at":1755045066,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openrouter/thedrummer/anubis-70b-v1.1","object":"model","created_at":1755045064,"cost_in":7.5e-7,"cost_out":0.000001,"owned_by":"openrouter"},{"id":"google-ai-studio/gemma-2-27b-it","object":"model","created_at":1755044450,"cost_in":6.5e-7,"cost_out":6.5e-7,"owned_by":"google-ai-studio"},{"id":"cohere/command-a","object":"model","created_at":1755044449,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"cohere"},{"id":"openrouter/meta-llama/llama-guard-4-12b","object":"model","created_at":1754958665,"cost_in":1.8e-7,"cost_out":1.8e-7,"owned_by":"openrouter"},{"id":"openrouter/pygmalionai/mythalion-13b","object":"model","created_at":1754699414,"cost_in":7e-7,"cost_out":0.0000011,"owned_by":"openrouter"},{"id":"openrouter/ai21/jamba-large-1.7","object":"model","created_at":1754699413,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"openrouter"},{"id":"openrouter/ai21/jamba-mini-1.7","object":"model","created_at":1754699413,"cost_in":2e-7,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/alfredpros/codellama-7b-instruct-solidity","object":"model","created_at":1754699413,"cost_in":8e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-5","object":"model","created_at":1754613013,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-5-nano","object":"model","created_at":1754613013,"cost_in":5e-8,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-5-mini","object":"model","created_at":1754613013,"cost_in":2.5e-7,"cost_out":0.000002,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-5-chat","object":"model","created_at":1754613013,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openai/gpt-5-mini","object":"model","created_at":1754612410,"cost_in":2.5e-7,"cost_out":0.000002,"owned_by":"openai"},{"id":"openai/gpt-5-chat","object":"model","created_at":1754612410,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openai"},{"id":"openai/gpt-5-nano","object":"model","created_at":1754612410,"cost_in":5e-8,"cost_out":4e-7,"owned_by":"openai"},{"id":"openai/gpt-5","object":"model","created_at":1754612410,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openai"},{"id":"openrouter/openai/gpt-oss-20b:free","object":"model","created_at":1754526652,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openai/gpt-oss-20b:free","object":"model","created_at":1754526043,"cost_in":0,"cost_out":0,"owned_by":"openai"},{"id":"openrouter/anthropic/claude-opus-4.1","object":"model","created_at":1754440250,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"openrouter"},{"id":"anthropic/claude-opus-4.1","object":"model","created_at":1754439646,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"anthropic"},{"id":"workers-ai/@cf/openai/gpt-oss-120b","object":"model","created_at":1754439044,"cost_in":3.5e-7,"cost_out":7.5e-7,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/openai/gpt-oss-20b","object":"model","created_at":1754439044,"cost_in":2e-7,"cost_out":3e-7,"owned_by":"workers-ai"},{"id":"openrouter/z-ai/glm-4.5-air","object":"model","created_at":1754181044,"cost_in":1.04e-7,"cost_out":6.8e-7,"owned_by":"openrouter"},{"id":"openrouter/infermatic/mn-inferor-12b","object":"model","created_at":1754094656,"cost_in":6e-7,"cost_out":0.000001,"owned_by":"openrouter"},{"id":"openrouter/openrouter/horizon-beta","object":"model","created_at":1754094655,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/mistralai/codestral-2508","object":"model","created_at":1754094655,"cost_in":3e-7,"cost_out":9e-7,"owned_by":"openrouter"},{"id":"openrouter/morph/morph-v3-large","object":"model","created_at":1754094655,"cost_in":9e-7,"cost_out":0.0000019,"owned_by":"openrouter"},{"id":"openrouter/morph/morph-v3-fast","object":"model","created_at":1754094655,"cost_in":8e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"mistral/codestral-2508","object":"model","created_at":1754094051,"cost_in":3e-7,"cost_out":9e-7,"owned_by":"mistral"},{"id":"openrouter/openrouter/horizon-alpha","object":"model","created_at":1753921814,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/z-ai/glm-4.5-air:free","object":"model","created_at":1753835412,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/z-ai/glm-4-32b","object":"model","created_at":1753576252,"cost_in":1e-7,"cost_out":1e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-235b-a22b-2507:free","object":"model","created_at":1753489827,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-coder:free","object":"model","created_at":1753317044,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.5-flash-lite","object":"model","created_at":1753230623,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-235b-a22b-07-25","object":"model","created_at":1753230623,"cost_in":1.5e-7,"cost_out":8.5e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-235b-a22b-07-25:free","object":"model","created_at":1753230623,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/bytedance/ui-tars-1.5-7b","object":"model","created_at":1753230623,"cost_in":1e-7,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"openrouter/tngtech/deepseek-r1t2-chimera","object":"model","created_at":1753230623,"cost_in":3e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/thedrummer/valkyrie-49b-v1","object":"model","created_at":1753230623,"cost_in":6.5e-7,"cost_out":0.000001,"owned_by":"openrouter"},{"id":"google-ai-studio/gemini-2.5-flash-lite","object":"model","created_at":1753230021,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"google-ai-studio"},{"id":"deepseek/tngtech/deepseek-r1t2-chimera","object":"model","created_at":1753230021,"cost_in":3.02e-7,"cost_out":3.02e-7,"owned_by":"deepseek"},{"id":"openrouter/mistralai/magistral-small-2506","object":"model","created_at":1752798639,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"openrouter"},{"id":"mistral/magistral-small-2506","object":"model","created_at":1752798035,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"mistral"},{"id":"openrouter/sarvamai/sarvam-m","object":"model","created_at":1752625830,"cost_in":2.2e-8,"cost_out":2.2e-8,"owned_by":"openrouter"},{"id":"openrouter/agentica-org/deepcoder-14b-preview","object":"model","created_at":1752625830,"cost_in":1.5e-8,"cost_out":1.5e-8,"owned_by":"openrouter"},{"id":"openrouter/rekaai/reka-flash-3","object":"model","created_at":1752625830,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/mistralai/devstral-small","object":"model","created_at":1752625829,"cost_in":7e-8,"cost_out":2.8e-7,"owned_by":"openrouter"},{"id":"openrouter/tencent/hunyuan-a13b-instruct","object":"model","created_at":1752625829,"cost_in":1.4e-7,"cost_out":5.7e-7,"owned_by":"openrouter"},{"id":"mistral/devstral-small","object":"model","created_at":1752625223,"cost_in":7e-8,"cost_out":2.8e-7,"owned_by":"mistral"},{"id":"openrouter/mistralai/mistral-nemo","object":"model","created_at":1752539441,"cost_in":2e-8,"cost_out":4e-8,"owned_by":"openrouter"},{"id":"mistral/mistral-nemo","object":"model","created_at":1752538831,"cost_in":2e-8,"cost_out":4e-8,"owned_by":"mistral"},{"id":"openrouter/deepseek/deepseek-r1","object":"model","created_at":1752453019,"cost_in":3e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/moonshotai/kimi-k2:free","object":"model","created_at":1752453017,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"deepseek/deepseek-r1","object":"model","created_at":1752452413,"cost_in":3e-7,"cost_out":0.0000012,"owned_by":"deepseek"},{"id":"openrouter/switchpoint/router","object":"model","created_at":1752280262,"cost_in":8.5e-7,"cost_out":0.0000034,"owned_by":"openrouter"},{"id":"openrouter/thudm/glm-4.1v-9b-thinking","object":"model","created_at":1752280262,"cost_in":2.8e-8,"cost_out":1.104e-7,"owned_by":"openrouter"},{"id":"openrouter/mistralai/devstral-small-2505:free","object":"model","created_at":1752193833,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/x-ai/grok-4","object":"model","created_at":1752193832,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"openrouter/mistralai/devstral-medium","object":"model","created_at":1752193832,"cost_in":4e-7,"cost_out":0.000002,"owned_by":"openrouter"},{"id":"openrouter/cognitivecomputations/dolphin-mistral-24b-venice-edition:free","object":"model","created_at":1752193832,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"mistral/devstral-small-2505:free","object":"model","created_at":1752193226,"cost_in":0,"cost_out":0,"owned_by":"mistral"},{"id":"grok/grok-4","object":"model","created_at":1752193225,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"grok"},{"id":"mistral/devstral-medium","object":"model","created_at":1752193225,"cost_in":4e-7,"cost_out":0.000002,"owned_by":"mistral"},{"id":"openrouter/google/gemma-3n-e2b-it:free","object":"model","created_at":1752107411,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"google-ai-studio/gemma-3n-e2b-it:free","object":"model","created_at":1752106827,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"openrouter/thedrummer/anubis-pro-105b-v1","object":"model","created_at":1752021028,"cost_in":5e-7,"cost_out":0.000001,"owned_by":"openrouter"},{"id":"openrouter/tencent/hunyuan-a13b-instruct:free","object":"model","created_at":1752021027,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/tngtech/deepseek-r1t2-chimera:free","object":"model","created_at":1752021027,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"deepseek/tngtech/deepseek-r1t2-chimera:free","object":"model","created_at":1752020451,"cost_in":0,"cost_out":0,"owned_by":"deepseek"},{"id":"openrouter/neversleep/llama-3-lumimaid-8b","object":"model","created_at":1751934621,"cost_in":8e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.3-70b-instruct","object":"model","created_at":1751675447,"cost_in":1e-7,"cost_out":3.2e-7,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.1-8b-instruct","object":"model","created_at":1751675447,"cost_in":2e-8,"cost_out":3e-8,"owned_by":"openrouter"},{"id":"openrouter/nousresearch/hermes-3-llama-3.1-70b","object":"model","created_at":1751502665,"cost_in":3e-7,"cost_out":3e-7,"owned_by":"openrouter"},{"id":"openrouter/baidu/ernie-4.5-300b-a47b","object":"model","created_at":1751502663,"cost_in":2.24e-7,"cost_out":8.8e-7,"owned_by":"openrouter"},{"id":"openrouter/inception/mercury-coder","object":"model","created_at":1751502663,"cost_in":2.5e-7,"cost_out":0.000001,"owned_by":"openrouter"},{"id":"openrouter/openrouter/cypher-alpha:free","object":"model","created_at":1751416237,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/inception/mercury","object":"model","created_at":1751243443,"cost_in":2.5e-7,"cost_out":0.000001,"owned_by":"openrouter"},{"id":"openrouter/morph/morph-v2","object":"model","created_at":1750984216,"cost_in":0.0000012,"cost_out":0.0000027,"owned_by":"openrouter"},{"id":"google-ai-studio/gemma-3n-e4b-it","object":"model","created_at":1750983614,"cost_in":2e-8,"cost_out":4e-8,"owned_by":"google-ai-studio"},{"id":"openrouter/meta-llama/llama-3.2-3b-instruct","object":"model","created_at":1750897845,"cost_in":2e-8,"cost_out":2e-8,"owned_by":"openrouter"},{"id":"openrouter/sao10k/l3.1-euryale-70b","object":"model","created_at":1750897845,"cost_in":6.5e-7,"cost_out":7.5e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwq-32b","object":"model","created_at":1750897844,"cost_in":1.5e-7,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-r1-distill-qwen-32b","object":"model","created_at":1750897844,"cost_in":2.4e-7,"cost_out":2.4e-7,"owned_by":"openrouter"},{"id":"openrouter/sao10k/l3.3-euryale-70b","object":"model","created_at":1750897844,"cost_in":6.5e-7,"cost_out":7.5e-7,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-r1-0528-qwen3-8b","object":"model","created_at":1750897843,"cost_in":2e-8,"cost_out":1e-7,"owned_by":"openrouter"},{"id":"openrouter/opengvlab/internvl3-2b","object":"model","created_at":1750897843,"cost_in":5e-8,"cost_out":1e-7,"owned_by":"openrouter"},{"id":"openrouter/opengvlab/internvl3-14b","object":"model","created_at":1750897843,"cost_in":2e-7,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"deepseek/deepseek-r1-distill-qwen-32b","object":"model","created_at":1750897242,"cost_in":2.4e-7,"cost_out":2.4e-7,"owned_by":"deepseek"},{"id":"deepseek/deepseek-r1-0528-qwen3-8b","object":"model","created_at":1750897241,"cost_in":2e-8,"cost_out":1e-7,"owned_by":"deepseek"},{"id":"openrouter/minimax/minimax-m1:extended","object":"model","created_at":1750725043,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"anthropic/claude-sonnet-4-20250514","object":"model","created_at":1750721758,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"google-ai-studio/gemini-2.5-pro-preview-06-05","object":"model","created_at":1750721727,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/models/gemini-2.5-pro-preview-06-05","object":"model","created_at":1750721715,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/models/gemini-2.5-flash","object":"model","created_at":1750721613,"cost_in":3e-7,"cost_out":0.0000025,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/models/gemini-2.5-flash-preview-05-20","object":"model","created_at":1750721583,"cost_in":3e-7,"cost_out":0.0000025,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/models/gemini-2.5-flash-preview-04-17","object":"model","created_at":1750721556,"cost_in":3e-7,"cost_out":0.0000025,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-2.5-flash-preview-04-17","object":"model","created_at":1750721544,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"google-ai-studio"},{"id":"anthropic/claude-opus-4-20250514","object":"model","created_at":1750721368,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"anthropic"},{"id":"openrouter/mistralai/mistral-small-3.2-24b-instruct:free","object":"model","created_at":1750552239,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"mistral/mistral-small-3.2-24b-instruct:free","object":"model","created_at":1750551636,"cost_in":0,"cost_out":0,"owned_by":"mistral"},{"id":"openrouter/x-ai/grok-3","object":"model","created_at":1750465867,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"openrouter/x-ai/grok-3-mini","object":"model","created_at":1750465867,"cost_in":3e-7,"cost_out":5e-7,"owned_by":"openrouter"},{"id":"grok/grok-3-mini","object":"model","created_at":1750465263,"cost_in":3e-7,"cost_out":5e-7,"owned_by":"grok"},{"id":"grok/grok-3","object":"model","created_at":1750465263,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"grok"},{"id":"openai/gpt-4.1","object":"model","created_at":1750292423,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"openai"},{"id":"openrouter/google/gemini-2.5-flash-lite-preview-06-17","object":"model","created_at":1750206630,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.5-flash","object":"model","created_at":1750206630,"cost_in":3e-7,"cost_out":0.0000025,"owned_by":"openrouter"},{"id":"openrouter/minimax/minimax-m1","object":"model","created_at":1750206630,"cost_in":4e-7,"cost_out":0.0000022,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.5-pro","object":"model","created_at":1750206630,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"google-ai-studio/gemini-2.5-flash-lite-preview-06-17","object":"model","created_at":1750206028,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-2.5-flash","object":"model","created_at":1750206028,"cost_in":3e-7,"cost_out":0.0000025,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-2.5-pro","object":"model","created_at":1750206028,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"google-ai-studio"},{"id":"openrouter/moonshotai/kimi-dev-72b:free","object":"model","created_at":1750120259,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/openai/o3-pro","object":"model","created_at":1749688233,"cost_in":0.00002,"cost_out":0.00008,"owned_by":"openrouter"},{"id":"openai/o3-pro","object":"model","created_at":1749687630,"cost_in":0.00002,"cost_out":0.00008,"owned_by":"openai"},{"id":"openrouter/openai/o3","object":"model","created_at":1749601823,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"openrouter"},{"id":"openrouter/mistralai/magistral-medium-2506:thinking","object":"model","created_at":1749601821,"cost_in":0.000002,"cost_out":0.000005,"owned_by":"openrouter"},{"id":"openrouter/mistralai/magistral-medium-2506","object":"model","created_at":1749601821,"cost_in":0.000002,"cost_out":0.000005,"owned_by":"openrouter"},{"id":"mistral/magistral-medium-2506","object":"model","created_at":1749601213,"cost_in":0.000002,"cost_out":0.000005,"owned_by":"mistral"},{"id":"mistral/magistral-medium-2506:thinking","object":"model","created_at":1749601213,"cost_in":0.000002,"cost_out":0.000005,"owned_by":"mistral"},{"id":"openai/o3","object":"model","created_at":1749601213,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"openai"},{"id":"openrouter/qwen/qwen3-14b","object":"model","created_at":1749256222,"cost_in":5e-8,"cost_out":2.2e-7,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.5-pro-preview-05-06","object":"model","created_at":1749169822,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"google-ai-studio/gemini-2.5-pro-preview-05-06","object":"model","created_at":1749169220,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"google-ai-studio"},{"id":"openrouter/sentientagi/dobby-mini-unhinged-plus-llama-3.1-8b","object":"model","created_at":1749083421,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-235b-a22b","object":"model","created_at":1748997062,"cost_in":1.8e-7,"cost_out":5.4e-7,"owned_by":"openrouter"},{"id":"openai/gpt-4o-2024-05-13","object":"model","created_at":1748996457,"cost_in":0.000005,"cost_out":0.000015,"owned_by":"openai"},{"id":"openai/gpt-3.5-turbo-0613","object":"model","created_at":1748996457,"cost_in":0.000001,"cost_out":0.000002,"owned_by":"openai"},{"id":"openai/gpt-3.5-turbo-1106","object":"model","created_at":1748996457,"cost_in":0.000001,"cost_out":0.000002,"owned_by":"openai"},{"id":"openai/gpt-4-1106-preview","object":"model","created_at":1748996457,"cost_in":0.00001,"cost_out":0.00003,"owned_by":"openai"},{"id":"google-ai-studio/models/gemini-2.0-flash-lite","object":"model","created_at":1748975324,"cost_in":7.5e-8,"cost_out":3e-7,"owned_by":"google-ai-studio"},{"id":"openrouter/meta-llama/llama-4-maverick","object":"model","created_at":1748910651,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"openrouter"},{"id":"openrouter/microsoft/wizardlm-2-8x22b","object":"model","created_at":1748824221,"cost_in":4.8e-7,"cost_out":4.8e-7,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-r1-distill-qwen-7b","object":"model","created_at":1748651432,"cost_in":1e-7,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"deepseek/deepseek-r1-distill-qwen-7b","object":"model","created_at":1748650830,"cost_in":1e-7,"cost_out":2e-7,"owned_by":"deepseek"},{"id":"openrouter/deepseek/deepseek-r1-0528-qwen3-8b:free","object":"model","created_at":1748565010,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"deepseek/deepseek-r1-0528-qwen3-8b:free","object":"model","created_at":1748564406,"cost_in":0,"cost_out":0,"owned_by":"deepseek"},{"id":"openrouter/microsoft/phi-3-medium-128k-instruct","object":"model","created_at":1748478651,"cost_in":0.000001,"cost_out":0.000001,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mixtral-8x22b-instruct","object":"model","created_at":1748478651,"cost_in":0.000002,"cost_out":0.000006,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwq-32b-preview","object":"model","created_at":1748478650,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"openrouter/microsoft/phi-3.5-mini-128k-instruct","object":"model","created_at":1748478650,"cost_in":1e-7,"cost_out":1e-7,"owned_by":"openrouter"},{"id":"openrouter/sarvamai/sarvam-m:free","object":"model","created_at":1748478648,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/google/gemma-2b-it","object":"model","created_at":1748478648,"cost_in":1e-7,"cost_out":1e-7,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-r1-0528:free","object":"model","created_at":1748478648,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"mistral/mixtral-8x22b-instruct","object":"model","created_at":1748478046,"cost_in":0.000002,"cost_out":0.000006,"owned_by":"mistral"},{"id":"deepseek/deepseek-r1-0528:free","object":"model","created_at":1748478044,"cost_in":0,"cost_out":0,"owned_by":"deepseek"},{"id":"google-ai-studio/gemma-2b-it","object":"model","created_at":1748478044,"cost_in":1e-7,"cost_out":1e-7,"owned_by":"google-ai-studio"},{"id":"openrouter/nvidia/llama-3.1-nemotron-ultra-253b-v1","object":"model","created_at":1748392236,"cost_in":6e-7,"cost_out":0.0000018,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-opus-4","object":"model","created_at":1747960215,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-sonnet-4","object":"model","created_at":1747960215,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"anthropic/claude-sonnet-4","object":"model","created_at":1747959614,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"anthropic/claude-opus-4","object":"model","created_at":1747959614,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"anthropic"},{"id":"openrouter/mistralai/devstral-small:free","object":"model","created_at":1747873826,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"mistral/devstral-small:free","object":"model","created_at":1747873222,"cost_in":0,"cost_out":0,"owned_by":"mistral"},{"id":"google-ai-studio/gemini-2.0-flash","object":"model","created_at":1747834257,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"google-ai-studio"},{"id":"openrouter/google/gemini-2.5-flash-preview-05-20","object":"model","created_at":1747787418,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.5-flash-preview-05-20:thinking","object":"model","created_at":1747787418,"cost_in":1.5e-7,"cost_out":0.0000035,"owned_by":"openrouter"},{"id":"openrouter/google/gemma-3n-e4b-it:free","object":"model","created_at":1747787418,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"google-ai-studio/gemini-2.5-flash-preview-05-20:thinking","object":"model","created_at":1747786817,"cost_in":1.5e-7,"cost_out":0.0000035,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-2.5-flash-preview-05-20","object":"model","created_at":1747786817,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemma-3n-e4b-it:free","object":"model","created_at":1747786817,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"openrouter/nousresearch/hermes-3-llama-3.1-405b","object":"model","created_at":1747701005,"cost_in":0.000001,"cost_out":0.000001,"owned_by":"openrouter"},{"id":"openrouter/neversleep/llama-3-lumimaid-8b:extended","object":"model","created_at":1747441849,"cost_in":2e-7,"cost_out":0.00000125,"owned_by":"openrouter"},{"id":"openrouter/neversleep/llama-3.1-lumimaid-70b","object":"model","created_at":1747441848,"cost_in":0.0000025,"cost_out":0.000003,"owned_by":"openrouter"},{"id":"openrouter/openai/codex-mini","object":"model","created_at":1747441847,"cost_in":0.0000015,"cost_out":0.000006,"owned_by":"openrouter"},{"id":"openai/codex-mini","object":"model","created_at":1747441244,"cost_in":0.0000015,"cost_out":0.000006,"owned_by":"openai"},{"id":"openrouter/qwen/qwen-2.5-7b-instruct","object":"model","created_at":1747355451,"cost_in":4e-8,"cost_out":1e-7,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.3-8b-instruct:free","object":"model","created_at":1747355447,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-prover-v2","object":"model","created_at":1747096240,"cost_in":5e-7,"cost_out":0.00000218,"owned_by":"openrouter"},{"id":"deepseek/deepseek-prover-v2","object":"model","created_at":1747095632,"cost_in":5e-7,"cost_out":0.00000218,"owned_by":"deepseek"},{"id":"openrouter/nousresearch/deephermes-3-mistral-24b-preview:free","object":"model","created_at":1746837061,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mistral-medium-3","object":"model","created_at":1746664221,"cost_in":4e-7,"cost_out":0.000002,"owned_by":"openrouter"},{"id":"mistral/mistral-medium-3","object":"model","created_at":1746663621,"cost_in":4e-7,"cost_out":0.000002,"owned_by":"mistral"},{"id":"openrouter/google/gemini-2.5-pro-preview","object":"model","created_at":1746577840,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"google-ai-studio/gemini-2.5-pro-preview","object":"model","created_at":1746577233,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"google-ai-studio"},{"id":"openrouter/arcee-ai/maestro-reasoning","object":"model","created_at":1746491433,"cost_in":9e-7,"cost_out":0.0000033,"owned_by":"openrouter"},{"id":"openrouter/arcee-ai/virtuoso-large","object":"model","created_at":1746491433,"cost_in":7.5e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/arcee-ai/spotlight","object":"model","created_at":1746491433,"cost_in":1.8e-7,"cost_out":1.8e-7,"owned_by":"openrouter"},{"id":"openrouter/arcee-ai/caller-large","object":"model","created_at":1746491433,"cost_in":5.5e-7,"cost_out":8.5e-7,"owned_by":"openrouter"},{"id":"openrouter/arcee-ai/coder-large","object":"model","created_at":1746491433,"cost_in":5e-7,"cost_out":8e-7,"owned_by":"openrouter"},{"id":"openrouter/arcee-ai/virtuoso-medium-v2","object":"model","created_at":1746491433,"cost_in":5e-7,"cost_out":8e-7,"owned_by":"openrouter"},{"id":"openrouter/arcee-ai/arcee-blitz","object":"model","created_at":1746491433,"cost_in":4.5e-7,"cost_out":7.5e-7,"owned_by":"openrouter"},{"id":"openrouter/eva-unit-01/eva-qwen-2.5-72b","object":"model","created_at":1746318648,"cost_in":0.000004,"cost_out":0.000006,"owned_by":"openrouter"},{"id":"openrouter/microsoft/phi-4-reasoning-plus","object":"model","created_at":1746232222,"cost_in":7e-8,"cost_out":3.5e-7,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.2-90b-vision-instruct","object":"model","created_at":1746145862,"cost_in":3.5e-7,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/microsoft/phi-4-reasoning-plus:free","object":"model","created_at":1746145858,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/microsoft/phi-4-reasoning:free","object":"model","created_at":1746145858,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/allenai/olmo-7b-instruct","object":"model","created_at":1746059409,"cost_in":8e-8,"cost_out":2.4e-7,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-coder","object":"model","created_at":1746059409,"cost_in":4e-8,"cost_out":1.2e-7,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mixtral-8x7b-instruct","object":"model","created_at":1746059409,"cost_in":5.4e-7,"cost_out":5.4e-7,"owned_by":"openrouter"},{"id":"openrouter/undi95/toppy-m-7b","object":"model","created_at":1746059409,"cost_in":8e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mistral-7b-instruct-v0.1","object":"model","created_at":1746059409,"cost_in":1.1e-7,"cost_out":1.9e-7,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-guard-3-8b","object":"model","created_at":1746059408,"cost_in":2e-8,"cost_out":6e-8,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.2-1b-instruct","object":"model","created_at":1746059408,"cost_in":2.7e-8,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-4b:free","object":"model","created_at":1746059407,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/inception/mercury-coder-small-beta","object":"model","created_at":1746059407,"cost_in":2.5e-7,"cost_out":0.000001,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-0.6b-04-28:free","object":"model","created_at":1746059407,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-prover-v2:free","object":"model","created_at":1746059407,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/opengvlab/internvl3-14b:free","object":"model","created_at":1746059407,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/opengvlab/internvl3-2b:free","object":"model","created_at":1746059407,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-8b","object":"model","created_at":1746059407,"cost_in":2.8e-8,"cost_out":1.104e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen2.5-coder-7b-instruct","object":"model","created_at":1746059407,"cost_in":3e-8,"cost_out":9e-8,"owned_by":"openrouter"},{"id":"openrouter/nvidia/llama-3.3-nemotron-super-49b-v1","object":"model","created_at":1746059407,"cost_in":1.3e-7,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-1.7b:free","object":"model","created_at":1746059406,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"deepseek/deepseek-coder","object":"model","created_at":1746058805,"cost_in":4e-8,"cost_out":1.2e-7,"owned_by":"deepseek"},{"id":"mistral/mixtral-8x7b-instruct","object":"model","created_at":1746058805,"cost_in":5.4e-7,"cost_out":5.4e-7,"owned_by":"mistral"},{"id":"mistral/mistral-7b-instruct-v0.1","object":"model","created_at":1746058805,"cost_in":1.1e-7,"cost_out":1.9e-7,"owned_by":"mistral"},{"id":"deepseek/deepseek-prover-v2:free","object":"model","created_at":1746058804,"cost_in":0,"cost_out":0,"owned_by":"deepseek"},{"id":"openrouter/qwen/qwen3-32b:free","object":"model","created_at":1745886623,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-30b-a3b:free","object":"model","created_at":1745886623,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-14b:free","object":"model","created_at":1745886623,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-8b:free","object":"model","created_at":1745886623,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen3-235b-a22b:free","object":"model","created_at":1745886623,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mistral-7b-instruct","object":"model","created_at":1745886623,"cost_in":2.8e-8,"cost_out":5.4e-8,"owned_by":"openrouter"},{"id":"mistral/mistral-7b-instruct","object":"model","created_at":1745886021,"cost_in":2.8e-8,"cost_out":5.4e-8,"owned_by":"mistral"},{"id":"openrouter/mistralai/mistral-7b-instruct-v0.3","object":"model","created_at":1745800218,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"openrouter/tngtech/deepseek-r1t-chimera:free","object":"model","created_at":1745800216,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"mistral/mistral-7b-instruct-v0.3","object":"model","created_at":1745799615,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"mistral"},{"id":"deepseek/tngtech/deepseek-r1t-chimera:free","object":"model","created_at":1745799614,"cost_in":0,"cost_out":0,"owned_by":"deepseek"},{"id":"openrouter/thudm/glm-4-9b:free","object":"model","created_at":1745627408,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/thudm/glm-z1-rumination-32b","object":"model","created_at":1745627408,"cost_in":2.4e-7,"cost_out":2.4e-7,"owned_by":"openrouter"},{"id":"openrouter/thudm/glm-z1-9b:free","object":"model","created_at":1745627408,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.5-pro-exp-03-25","object":"model","created_at":1745627408,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"google-ai-studio/gemini-2.5-pro-exp-03-25","object":"model","created_at":1745626806,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"openrouter/meta-llama/llama-2-13b-chat","object":"model","created_at":1745541053,"cost_in":3e-7,"cost_out":3e-7,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.1-70b-instruct","object":"model","created_at":1745368236,"cost_in":4e-7,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/alpindale/magnum-72b","object":"model","created_at":1745281862,"cost_in":0.000004,"cost_out":0.000006,"owned_by":"openrouter"},{"id":"openrouter/neversleep/llama-3-lumimaid-70b","object":"model","created_at":1745281862,"cost_in":0.000004,"cost_out":0.000006,"owned_by":"openrouter"},{"id":"openrouter/microsoft/mai-ds-r1:free","object":"model","created_at":1745281855,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.1-405b:free","object":"model","created_at":1745195445,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/thudm/glm-4-32b:free","object":"model","created_at":1744936278,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.5-flash-preview:thinking","object":"model","created_at":1744936278,"cost_in":1.5e-7,"cost_out":0.0000035,"owned_by":"openrouter"},{"id":"openrouter/thudm/glm-z1-32b:free","object":"model","created_at":1744936278,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.5-flash-preview","object":"model","created_at":1744936278,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"openrouter"},{"id":"google-ai-studio/gemini-2.5-flash-preview:thinking","object":"model","created_at":1744935668,"cost_in":1.5e-7,"cost_out":0.0000035,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-2.5-flash-preview","object":"model","created_at":1744935668,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"google-ai-studio"},{"id":"openrouter/openai/o4-mini-high","object":"model","created_at":1744849833,"cost_in":0.0000011,"cost_out":0.0000044,"owned_by":"openrouter"},{"id":"openrouter/openai/o4-mini","object":"model","created_at":1744849833,"cost_in":0.0000011,"cost_out":0.0000044,"owned_by":"openrouter"},{"id":"openai/o4-mini-high","object":"model","created_at":1744849228,"cost_in":0.0000011,"cost_out":0.0000044,"owned_by":"openai"},{"id":"openai/o4-mini","object":"model","created_at":1744849228,"cost_in":0.0000011,"cost_out":0.0000044,"owned_by":"openai"},{"id":"workers-ai/@cf/meta/llama-4-scout-17b-16e-instruct","object":"model","created_at":1744848624,"cost_in":2.7e-7,"cost_out":8.5e-7,"owned_by":"workers-ai"},{"id":"openrouter/shisa-ai/shisa-v2-llama3.3-70b:free","object":"model","created_at":1744763422,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/eleutherai/llemma_7b","object":"model","created_at":1744677051,"cost_in":8e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-4.1-mini","object":"model","created_at":1744677051,"cost_in":4e-7,"cost_out":0.0000016,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-4.1-nano","object":"model","created_at":1744677050,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-4.1","object":"model","created_at":1744677050,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"openrouter"},{"id":"openai/gpt-4.1-nano","object":"model","created_at":1744676442,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"openai"},{"id":"openai/gpt-4.1-mini","object":"model","created_at":1744656645,"cost_in":4e-7,"cost_out":0.0000016,"owned_by":"openai"},{"id":"openai/gpt-4.1-nano-2025-04-14","object":"model","created_at":1744653446,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"openai"},{"id":"openai/gpt-4.1-2025-04-14","object":"model","created_at":1744653427,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"openai"},{"id":"openai/gpt-4.1-mini-2025-04-14","object":"model","created_at":1744653406,"cost_in":4e-7,"cost_out":0.0000016,"owned_by":"openai"},{"id":"openrouter/arliai/qwq-32b-arliai-rpr-v1:free","object":"model","created_at":1744590626,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/agentica-org/deepcoder-14b-preview:free","object":"model","created_at":1744590626,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3-70b-instruct","object":"model","created_at":1744417870,"cost_in":3e-7,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/sao10k/l3-lunaris-8b","object":"model","created_at":1744417868,"cost_in":4e-8,"cost_out":5e-8,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-4-scout","object":"model","created_at":1744417862,"cost_in":8e-8,"cost_out":3e-7,"owned_by":"openrouter"},{"id":"workers-ai/@cf/qwen/qwen2.5-coder-32b-instruct","object":"model","created_at":1744416644,"cost_in":6.6e-7,"cost_out":0.000001,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/mistralai/mistral-small-3.1-24b-instruct","object":"model","created_at":1744416644,"cost_in":3.5e-7,"cost_out":5.6e-7,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/google/gemma-3-12b-it","object":"model","created_at":1744416644,"cost_in":3.5e-7,"cost_out":5.6e-7,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/qwen/qwq-32b","object":"model","created_at":1744416644,"cost_in":6.6e-7,"cost_out":0.000001,"owned_by":"workers-ai"},{"id":"openrouter/moonshotai/kimi-vl-a3b-thinking:free","object":"model","created_at":1744331467,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/openrouter/optimus-alpha","object":"model","created_at":1744331467,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"groq/meta-llama/llama-4-scout-17b-16e-instruct","object":"model","created_at":1744308680,"cost_in":1.1e-7,"cost_out":3.4e-7,"owned_by":"groq"},{"id":"groq/meta-llama/llama-4-maverick-17b-128e-instruct","object":"model","created_at":1744308497,"cost_in":2e-7,"cost_out":6e-7,"owned_by":"groq"},{"id":"grok/grok-3-mini-beta","object":"model","created_at":1744308429,"cost_in":3e-7,"cost_out":5e-7,"owned_by":"grok"},{"id":"grok/grok-3-fast-beta","object":"model","created_at":1744308414,"cost_in":0.000005,"cost_out":0.000025,"owned_by":"grok"},{"id":"grok/grok-3-mini-fast-beta","object":"model","created_at":1744308404,"cost_in":6e-7,"cost_out":0.000004,"owned_by":"grok"},{"id":"grok/grok-3-mini-fast-high-beta","object":"model","created_at":1744308389,"cost_in":6e-7,"cost_out":0.000004,"owned_by":"grok"},{"id":"grok/grok-3-mini-high-beta","object":"model","created_at":1744308370,"cost_in":3e-7,"cost_out":5e-7,"owned_by":"grok"},{"id":"azure-openai/gpt-4.5-preview-2025-02-27","object":"model","created_at":1744308210,"cost_in":0.000075,"cost_out":0.00015,"owned_by":"azure-openai"},{"id":"openai/gpt-4.5-preview-2025-02-27","object":"model","created_at":1744308165,"cost_in":0.000075,"cost_out":0.00015,"owned_by":"openai"},{"id":"openai/gpt-4.5-2025-02-21-alpha","object":"model","created_at":1744308147,"cost_in":0.000075,"cost_out":0.00015,"owned_by":"openai"},{"id":"openai/gpt-4.5-2025","object":"model","created_at":1744308130,"cost_in":0.000075,"cost_out":0.00015,"owned_by":"openai"},{"id":"openrouter/x-ai/grok-3-beta","object":"model","created_at":1744245025,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"openrouter/x-ai/grok-3-mini-beta","object":"model","created_at":1744245025,"cost_in":3e-7,"cost_out":5e-7,"owned_by":"openrouter"},{"id":"grok/grok-3-beta","object":"model","created_at":1744244413,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"grok"},{"id":"workers-ai/@cf/facebook/bart-large-cnn","object":"model","created_at":1744243807,"cost_in":0,"cost_out":0,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/baai/bge-reranker-base","object":"model","created_at":1744243807,"cost_in":3.1e-9,"cost_out":0,"owned_by":"workers-ai"},{"id":"openrouter/nvidia/llama-3.3-nemotron-super-49b-v1:free","object":"model","created_at":1744158648,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/nvidia/llama-3.1-nemotron-nano-8b-v1:free","object":"model","created_at":1744158648,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/nvidia/llama-3.1-nemotron-ultra-253b-v1:free","object":"model","created_at":1744158648,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/tokyotech-llm/llama-3.1-swallow-8b-instruct-v0.3","object":"model","created_at":1744072213,"cost_in":1e-7,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"openrouter/nousresearch/nous-hermes-llama2-13b","object":"model","created_at":1743899450,"cost_in":1.8e-7,"cost_out":1.8e-7,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-4-scout:free","object":"model","created_at":1743899439,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-4-maverick:free","object":"model","created_at":1743899439,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen-2.5-7b-instruct:free","object":"model","created_at":1743813028,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/steelskull/l3.3-electra-r1-70b","object":"model","created_at":1743813024,"cost_in":7e-7,"cost_out":9.5e-7,"owned_by":"openrouter"},{"id":"openrouter/latitudegames/wayfarer-large-70b-llama-3.3","object":"model","created_at":1743813024,"cost_in":8e-7,"cost_out":9e-7,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.5-pro-preview-03-25","object":"model","created_at":1743813023,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"google-ai-studio/gemini-2.5-pro-preview-03-25","object":"model","created_at":1743812413,"cost_in":0.00000125,"cost_out":0.00001,"owned_by":"google-ai-studio"},{"id":"openrouter/openchat/openchat-7b","object":"model","created_at":1743726662,"cost_in":7e-8,"cost_out":7e-8,"owned_by":"openrouter"},{"id":"openrouter/all-hands/openhands-lm-32b-v0.1","object":"model","created_at":1743726655,"cost_in":0.0000026,"cost_out":0.0000034,"owned_by":"openrouter"},{"id":"openrouter/openrouter/quasar-alpha","object":"model","created_at":1743726654,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"workers-ai/@cf/meta/llama-guard-3-8b","object":"model","created_at":1743686418,"cost_in":4.8e-7,"cost_out":3e-8,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/deepseek-ai/deepseek-r1-distill-qwen-32b","object":"model","created_at":1743686418,"cost_in":5e-7,"cost_out":0.00000488,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/mistral/mistral-7b-instruct-v0.1","object":"model","created_at":1743686418,"cost_in":1.1e-7,"cost_out":1.9e-7,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/meta/llama-3.2-1b-instruct","object":"model","created_at":1743686418,"cost_in":2.7e-8,"cost_out":2e-7,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/meta/llama-3.1-8b-instruct-fp8","object":"model","created_at":1743686418,"cost_in":1.5e-7,"cost_out":2.9e-7,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/baai/bge-base-en-v1.5","object":"model","created_at":1743686418,"cost_in":6.7e-8,"cost_out":0,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/meta/llama-3.1-8b-instruct","object":"model","created_at":1743686418,"cost_in":2.8e-7,"cost_out":8.299999999999999e-7,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/baai/bge-small-en-v1.5","object":"model","created_at":1743686418,"cost_in":2e-8,"cost_out":0,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/meta/m2m100-1.2b","object":"model","created_at":1743686418,"cost_in":3.4e-7,"cost_out":3.4e-7,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/meta/llama-3.3-70b-instruct-fp8-fast","object":"model","created_at":1743686418,"cost_in":2.9e-7,"cost_out":0.00000225,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/meta/llama-3.1-8b-instruct-awq","object":"model","created_at":1743686418,"cost_in":1.2e-7,"cost_out":2.7e-7,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/baai/bge-large-en-v1.5","object":"model","created_at":1743686418,"cost_in":2e-7,"cost_out":0,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/meta/llama-3.2-11b-vision-instruct","object":"model","created_at":1743686418,"cost_in":4.9e-8,"cost_out":6.8e-7,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/meta/llama-3-8b-instruct-awq","object":"model","created_at":1743686418,"cost_in":1.2e-7,"cost_out":2.7e-7,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/meta/llama-3.2-3b-instruct","object":"model","created_at":1743686417,"cost_in":5.1e-8,"cost_out":3.4e-7,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/baai/bge-m3","object":"model","created_at":1743686417,"cost_in":1.2e-8,"cost_out":0,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/huggingface/distilbert-sst-2-int8","object":"model","created_at":1743686417,"cost_in":2.6e-8,"cost_out":0,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/meta/llama-3-8b-instruct","object":"model","created_at":1743686417,"cost_in":2.8e-7,"cost_out":8.3e-7,"owned_by":"workers-ai"},{"id":"workers-ai/@cf/meta/llama-2-7b-chat-fp16","object":"model","created_at":1743686417,"cost_in":5.6e-7,"cost_out":0.00000667,"owned_by":"workers-ai"},{"id":"openrouter/cohere/command-r","object":"model","created_at":1743639683,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"openrouter"},{"id":"openrouter/cohere/command-r-03-2024","object":"model","created_at":1743639683,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"openrouter"},{"id":"openrouter/cohere/command-r-plus","object":"model","created_at":1743639682,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"openrouter/cohere/command","object":"model","created_at":1743639682,"cost_in":0.000001,"cost_out":0.000002,"owned_by":"openrouter"},{"id":"openrouter/cohere/command-r-plus-04-2024","object":"model","created_at":1743639682,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"openrouter/sao10k/l3-euryale-70b","object":"model","created_at":1743639681,"cost_in":0.00000148,"cost_out":0.00000148,"owned_by":"openrouter"},{"id":"openrouter/cohere/command-r-08-2024","object":"model","created_at":1743639680,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"openrouter"},{"id":"openrouter/cohere/command-r-plus-08-2024","object":"model","created_at":1743639680,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"cohere/command-r-plus","object":"model","created_at":1743639069,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"cohere"},{"id":"cohere/command-r-plus-04-2024","object":"model","created_at":1743639069,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"cohere"},{"id":"cohere/command-r","object":"model","created_at":1743639069,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"cohere"},{"id":"cohere/command","object":"model","created_at":1743639069,"cost_in":0.000001,"cost_out":0.000002,"owned_by":"cohere"},{"id":"cohere/command-r-03-2024","object":"model","created_at":1743639069,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"cohere"},{"id":"cohere/command-r-plus-08-2024","object":"model","created_at":1743639068,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"cohere"},{"id":"cohere/command-r-08-2024","object":"model","created_at":1743639068,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"cohere"},{"id":"google-ai-studio/gemini-2.0-flash-exp-image-generation","object":"model","created_at":1743549839,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"google-ai-studio"},{"id":"mistral/open-codestral-mamba","object":"model","created_at":1743549786,"cost_in":3e-7,"cost_out":9e-7,"owned_by":"mistral"},{"id":"mistral/mistral-small-2503","object":"model","created_at":1743549744,"cost_in":1e-7,"cost_out":3e-7,"owned_by":"mistral"},{"id":"google-vertex-ai/mistral-small-2503","object":"model","created_at":1743549724,"cost_in":1e-7,"cost_out":3e-7,"owned_by":"google-vertex-ai"},{"id":"aws-bedrock/amazon.titan-text-express-v1","object":"model","created_at":1743549570,"cost_in":2e-7,"cost_out":6e-7,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/cohere.command-text-v14","object":"model","created_at":1743549523,"cost_in":0.0000015,"cost_out":0.000002,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/ai21.jamba-1-5-large-v1","object":"model","created_at":1743549477,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/eu.amazon.nova-pro-v1","object":"model","created_at":1743549392,"cost_in":8e-7,"cost_out":0,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/anthropic.claude-3-sonnet-20240229-v1","object":"model","created_at":1743549291,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"aws-bedrock"},{"id":"mistral/ministral-8b-2410","object":"model","created_at":1743549224,"cost_in":1e-7,"cost_out":1e-7,"owned_by":"mistral"},{"id":"mistral/mistral-large-2402","object":"model","created_at":1743549192,"cost_in":0.000002,"cost_out":0.000006,"owned_by":"mistral"},{"id":"google-ai-studio/gemini-2.0-flash-thinking","object":"model","created_at":1743547534,"cost_in":1e-7,"cost_out":7e-7,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-2.0-flash-exp","object":"model","created_at":1743547468,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"google-ai-studio"},{"id":"openrouter/mistral/ministral-8b","object":"model","created_at":1743466820,"cost_in":1e-7,"cost_out":1e-7,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-v3-base:free","object":"model","created_at":1743294058,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"deepseek/deepseek-v3-base:free","object":"model","created_at":1743293450,"cost_in":0,"cost_out":0,"owned_by":"deepseek"},{"id":"openrouter/scb10x/llama3.1-typhoon2-70b-instruct","object":"model","created_at":1743207646,"cost_in":8.8e-7,"cost_out":8.8e-7,"owned_by":"openrouter"},{"id":"openrouter/scb10x/llama3.1-typhoon2-8b-instruct","object":"model","created_at":1743207646,"cost_in":1.8e-7,"cost_out":1.8e-7,"owned_by":"openrouter"},{"id":"openrouter/google/gemma-3-4b-it","object":"model","created_at":1743207646,"cost_in":1.703e-8,"cost_out":6.8154e-8,"owned_by":"openrouter"},{"id":"google-ai-studio/gemma-3-4b-it","object":"model","created_at":1743207041,"cost_in":1.703e-8,"cost_out":6.8154e-8,"owned_by":"google-ai-studio"},{"id":"openrouter/qwen/qwen-2.5-vl-7b-instruct:free","object":"model","created_at":1743034825,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen2.5-vl-3b-instruct:free","object":"model","created_at":1743034821,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/bytedance-research/ui-tars-72b:free","object":"model","created_at":1743034821,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/allenai/molmo-7b-d:free","object":"model","created_at":1743034820,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/featherless/qwerky-72b:free","object":"model","created_at":1742948453,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.5-pro-exp-03-25:free","object":"model","created_at":1742948453,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"google-ai-studio/gemini-2.5-pro-exp-03-25:free","object":"model","created_at":1742947844,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"openrouter/deepseek/deepseek-chat-v3-0324:free","object":"model","created_at":1742862048,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen2.5-vl-32b-instruct:free","object":"model","created_at":1742862048,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"deepseek/deepseek-chat-v3-0324:free","object":"model","created_at":1742861444,"cost_in":0,"cost_out":0,"owned_by":"deepseek"},{"id":"openrouter/openai/o1-pro","object":"model","created_at":1742602856,"cost_in":0.00015,"cost_out":0.0006,"owned_by":"openrouter"},{"id":"openai/o1-pro","object":"model","created_at":1742602246,"cost_in":0.00015,"cost_out":0.0006,"owned_by":"openai"},{"id":"openrouter/mistralai/mistral-small-3.1-24b-instruct:free","object":"model","created_at":1742430072,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"mistral/mistral-small-3.1-24b-instruct:free","object":"model","created_at":1742429465,"cost_in":0,"cost_out":0,"owned_by":"mistral"},{"id":"openrouter/allenai/olmo-2-0325-32b-instruct","object":"model","created_at":1742343661,"cost_in":5e-8,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"openrouter/microsoft/phi-4-multimodal-instruct","object":"model","created_at":1742343661,"cost_in":5e-8,"cost_out":1e-7,"owned_by":"openrouter"},{"id":"openrouter/open-r1/olympiccoder-32b:free","object":"model","created_at":1742084443,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/open-r1/olympiccoder-7b:free","object":"model","created_at":1742084443,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/google/gemma-3-1b-it:free","object":"model","created_at":1741998037,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"google-ai-studio/gemma-3-1b-it:free","object":"model","created_at":1741997430,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"openrouter/mistralai/mistral-7b-instruct-v0.2","object":"model","created_at":1741911650,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen-2.5-vl-72b-instruct","object":"model","created_at":1741911647,"cost_in":6e-7,"cost_out":6e-7,"owned_by":"openrouter"},{"id":"openrouter/cohere/command-a-03-2025","object":"model","created_at":1741911644,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openrouter/google/gemma-3-12b-it:free","object":"model","created_at":1741911644,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/ai21/jamba-1.6-mini","object":"model","created_at":1741911644,"cost_in":2e-7,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/ai21/jamba-1.6-large","object":"model","created_at":1741911644,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"openrouter"},{"id":"openrouter/google/gemma-3-4b-it:free","object":"model","created_at":1741911644,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"mistral/mistral-7b-instruct-v0.2","object":"model","created_at":1741911040,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"mistral"},{"id":"google-ai-studio/gemma-3-12b-it:free","object":"model","created_at":1741911037,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemma-3-4b-it:free","object":"model","created_at":1741911037,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"cohere/command-a-03-2025","object":"model","created_at":1741906755,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"cohere"},{"id":"openrouter/qwen/qwen-2.5-72b-instruct:free","object":"model","created_at":1741825269,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwq-32b-preview:free","object":"model","created_at":1741825268,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-r1-distill-qwen-14b:free","object":"model","created_at":1741825267,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-4o-mini-search-preview","object":"model","created_at":1741825266,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"openrouter"},{"id":"openrouter/google/gemma-3-27b-it:free","object":"model","created_at":1741825265,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/tokyotech-llm/llama-3.1-swallow-70b-instruct-v0.3","object":"model","created_at":1741825265,"cost_in":6e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/rekaai/reka-flash-3:free","object":"model","created_at":1741825265,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-4o-search-preview","object":"model","created_at":1741825265,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openai/gpt-4o-search-preview","object":"model","created_at":1741824658,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"openai"},{"id":"google-ai-studio/gemma-3-27b-it:free","object":"model","created_at":1741824658,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"openai/gpt-4o-mini-search-preview","object":"model","created_at":1741824658,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"openai"},{"id":"deepseek/deepseek-r1-distill-qwen-14b:free","object":"model","created_at":1741824658,"cost_in":0,"cost_out":0,"owned_by":"deepseek"},{"id":"openrouter/qwen/qwen-2.5-vl-7b-instruct","object":"model","created_at":1741738869,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"replicate/deepseek-ai/deepseek-r1","object":"model","created_at":1741730907,"cost_in":0.00001,"cost_out":0.00001,"owned_by":"replicate"},{"id":"groq/deepseek-r1-distill-llama-70b-specdec","object":"model","created_at":1741730814,"cost_in":7.5e-7,"cost_out":9.9e-7,"owned_by":"groq"},{"id":"groq/deepseek-r1-distill-qwen-32b","object":"model","created_at":1741730772,"cost_in":2.9e-7,"cost_out":3.9e-7,"owned_by":"groq"},{"id":"openrouter/deepseek/deepseek-r1-zero","object":"model","created_at":1741719217,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"mistral/mistral-small-2501","object":"model","created_at":1741719183,"cost_in":1e-7,"cost_out":3e-7,"owned_by":"mistral"},{"id":"mistral/mistral-large-pixtral-2411","object":"model","created_at":1741718815,"cost_in":0.000002,"cost_out":0.000006,"owned_by":"mistral"},{"id":"openrouter/deepseek/deepseek-r1-distill-qwen-32b:free","object":"model","created_at":1741652424,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"deepseek/deepseek-r1-distill-qwen-14b","object":"model","created_at":1741651816,"cost_in":1.2e-7,"cost_out":1.2e-7,"owned_by":"deepseek"},{"id":"deepseek/deepseek-r1-distill-qwen-32b:free","object":"model","created_at":1741651816,"cost_in":0,"cost_out":0,"owned_by":"deepseek"},{"id":"openrouter/qwen/qwen-vl-max","object":"model","created_at":1741479671,"cost_in":8e-7,"cost_out":0.0000032,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen-vl-plus","object":"model","created_at":1741393219,"cost_in":2.1e-7,"cost_out":6.3e-7,"owned_by":"openrouter"},{"id":"openrouter/perplexity/sonar-deep-research","object":"model","created_at":1741393218,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"openrouter"},{"id":"openrouter/perplexity/sonar-pro","object":"model","created_at":1741393218,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"openrouter/perplexity/sonar-reasoning-pro","object":"model","created_at":1741393218,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"openrouter"},{"id":"perplexity-ai/sonar-deep-research","object":"model","created_at":1741392611,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"perplexity-ai"},{"id":"perplexity-ai/sonar-reasoning-pro","object":"model","created_at":1741392610,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"perplexity-ai"},{"id":"openrouter/deepseek/deepseek-r1-zero:free","object":"model","created_at":1741306838,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"deepseek/deepseek-r1-zero:free","object":"model","created_at":1741306234,"cost_in":0,"cost_out":0,"owned_by":"deepseek"},{"id":"openrouter/qwen/qwq-32b:free","object":"model","created_at":1741220412,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"aws-bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1","object":"model","created_at":1741107902,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"aws-bedrock"},{"id":"anthropic/claude-3-7-sonnet-20250219","object":"model","created_at":1741107719,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"openrouter/qwen/qwen2.5-32b-instruct","object":"model","created_at":1741047637,"cost_in":7.9e-7,"cost_out":7.9e-7,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3-8b","object":"model","created_at":1740788443,"cost_in":5e-8,"cost_out":8e-8,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3-70b","object":"model","created_at":1740788443,"cost_in":5.9e-7,"cost_out":7.9e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen-2.5-coder-32b-instruct:free","object":"model","created_at":1740788442,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/moonshotai/moonlight-16b-a3b-instruct:free","object":"model","created_at":1740788441,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/nousresearch/deephermes-3-llama-3-8b-preview:free","object":"model","created_at":1740788441,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openai/gpt-4o-realtime","object":"model","created_at":1740757615,"cost_in":0.000005,"cost_out":0.0000025,"owned_by":"openai"},{"id":"openrouter/openai/gpt-4.5-preview","object":"model","created_at":1740702054,"cost_in":0.000075,"cost_out":0.00015,"owned_by":"openrouter"},{"id":"openai/gpt-4.5-preview","object":"model","created_at":1740701448,"cost_in":0,"cost_out":0.00015,"owned_by":"openai"},{"id":"openrouter/anthropic/claude-3.7-sonnet:thinking","object":"model","created_at":1740529227,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.0-flash-lite-001","object":"model","created_at":1740529227,"cost_in":7.5e-8,"cost_out":3e-7,"owned_by":"openrouter"},{"id":"google-ai-studio/gemini-2.0-flash-lite-001","object":"model","created_at":1740528621,"cost_in":7.5e-8,"cost_out":3e-7,"owned_by":"google-ai-studio"},{"id":"anthropic/claude-3.7-sonnet:thinking","object":"model","created_at":1740528621,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"openrouter/anthropic/claude-3.7-sonnet:beta","object":"model","created_at":1740442808,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"anthropic/claude-3.7-sonnet:beta","object":"model","created_at":1740442204,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"anthropic/claude-3.7-sonnet","object":"model","created_at":1740442204,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"openrouter/perplexity/r1-1776","object":"model","created_at":1740010838,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"openrouter"},{"id":"perplexity-ai/r1-1776","object":"model","created_at":1740010232,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"perplexity-ai"},{"id":"openrouter/mistralai/mistral-saba","object":"model","created_at":1739838032,"cost_in":2e-7,"cost_out":6e-7,"owned_by":"openrouter"},{"id":"mistral/mistral-saba","object":"model","created_at":1739837426,"cost_in":2e-7,"cost_out":6e-7,"owned_by":"mistral"},{"id":"openrouter/aion-labs/aion-1.0-mini","object":"model","created_at":1739578834,"cost_in":7e-7,"cost_out":0.0000014,"owned_by":"openrouter"},{"id":"openrouter/cognitivecomputations/dolphin3.0-r1-mistral-24b:free","object":"model","created_at":1739492436,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/cognitivecomputations/dolphin3.0-mistral-24b:free","object":"model","created_at":1739492436,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/aion-labs/aion-1.0","object":"model","created_at":1739492436,"cost_in":0.000004,"cost_out":0.000008,"owned_by":"openrouter"},{"id":"openrouter/openai/o3-mini-high","object":"model","created_at":1739406036,"cost_in":0.0000011,"cost_out":0.0000044,"owned_by":"openrouter"},{"id":"openai/o3-mini-high","object":"model","created_at":1739405433,"cost_in":0.0000011,"cost_out":0.0000044,"owned_by":"openai"},{"id":"openrouter/mistralai/mistral-nemo:free","object":"model","created_at":1739319628,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mistral-small-24b-instruct-2501:free","object":"model","created_at":1739319625,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"mistral/mistral-nemo:free","object":"model","created_at":1739319021,"cost_in":0,"cost_out":0,"owned_by":"mistral"},{"id":"mistral/mistral-small-24b-instruct-2501:free","object":"model","created_at":1739319019,"cost_in":0,"cost_out":0,"owned_by":"mistral"},{"id":"openrouter/meta-llama/llama-2-70b-chat","object":"model","created_at":1739233263,"cost_in":9e-7,"cost_out":9e-7,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mixtral-8x7b","object":"model","created_at":1739233262,"cost_in":6e-7,"cost_out":6e-7,"owned_by":"openrouter"},{"id":"openrouter/sao10k/fimbulvetr-11b-v2","object":"model","created_at":1739233261,"cost_in":8e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/microsoft/wizardlm-2-7b","object":"model","created_at":1739233261,"cost_in":7e-8,"cost_out":7e-8,"owned_by":"openrouter"},{"id":"openrouter/databricks/dbrx-instruct","object":"model","created_at":1739233261,"cost_in":0.0000012,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/google/gemma-7b-it","object":"model","created_at":1739233261,"cost_in":1.5e-7,"cost_out":1.5e-7,"owned_by":"openrouter"},{"id":"openrouter/nousresearch/nous-hermes-2-mixtral-8x7b-dpo","object":"model","created_at":1739233261,"cost_in":6e-7,"cost_out":6e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen-2-72b-instruct","object":"model","created_at":1739233260,"cost_in":9e-7,"cost_out":9e-7,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-guard-2-8b","object":"model","created_at":1739233260,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"openrouter/openai/o1-mini-2024-09-12","object":"model","created_at":1739233259,"cost_in":0.0000011,"cost_out":0.0000044,"owned_by":"openrouter"},{"id":"openrouter/openai/o1-mini","object":"model","created_at":1739233259,"cost_in":0.0000011,"cost_out":0.0000044,"owned_by":"openrouter"},{"id":"openrouter/nvidia/llama-3.1-nemotron-70b-instruct:free","object":"model","created_at":1739233258,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/aion-labs/aion-rp-llama-3.1-8b","object":"model","created_at":1739233257,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"openrouter/perplexity/sonar","object":"model","created_at":1739233257,"cost_in":0.000001,"cost_out":0.000001,"owned_by":"openrouter"},{"id":"openrouter/openai/o3-mini","object":"model","created_at":1739233257,"cost_in":0.0000011,"cost_out":0.0000044,"owned_by":"openrouter"},{"id":"openrouter/perplexity/sonar-reasoning","object":"model","created_at":1739233257,"cost_in":0.000001,"cost_out":0.000005,"owned_by":"openrouter"},{"id":"openrouter/liquid/lfm-7b","object":"model","created_at":1739233257,"cost_in":1e-8,"cost_out":1e-8,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-r1:free","object":"model","created_at":1739233257,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-r1-distill-llama-70b:free","object":"model","created_at":1739233257,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/liquid/lfm-3b","object":"model","created_at":1739233257,"cost_in":2e-8,"cost_out":2e-8,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-chat:free","object":"model","created_at":1739233257,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/sophosympatheia/rogue-rose-103b-v0.2:free","object":"model","created_at":1739233257,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/sao10k/l3.1-70b-hanami-x1","object":"model","created_at":1739233257,"cost_in":0.000003,"cost_out":0.000003,"owned_by":"openrouter"},{"id":"openrouter/mistralai/codestral-2501","object":"model","created_at":1739233257,"cost_in":3e-7,"cost_out":9e-7,"owned_by":"openrouter"},{"id":"openrouter/minimax/minimax-01","object":"model","created_at":1739233257,"cost_in":2e-7,"cost_out":0.0000011,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.0-flash-thinking-exp-1219:free","object":"model","created_at":1739233257,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.3-70b-instruct:free","object":"model","created_at":1739233257,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.0-pro-exp-02-05:free","object":"model","created_at":1739233256,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.0-flash-lite-preview-02-05:free","object":"model","created_at":1739233256,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.0-flash-001","object":"model","created_at":1739233256,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen-turbo","object":"model","created_at":1739233256,"cost_in":5e-8,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen-vl-plus:free","object":"model","created_at":1739233256,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-r1-distill-llama-8b","object":"model","created_at":1739233256,"cost_in":4e-8,"cost_out":4e-8,"owned_by":"openrouter"},{"id":"openrouter/allenai/llama-3.1-tulu-3-405b","object":"model","created_at":1739233256,"cost_in":0.000005,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen-plus","object":"model","created_at":1739233256,"cost_in":4e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen-max","object":"model","created_at":1739233256,"cost_in":0.0000016,"cost_out":0.0000064,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-r1-distill-qwen-1.5b","object":"model","created_at":1739233256,"cost_in":1.8e-7,"cost_out":1.8e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen2.5-vl-72b-instruct:free","object":"model","created_at":1739233256,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"mistral/mixtral-8x7b","object":"model","created_at":1739232653,"cost_in":6e-7,"cost_out":6e-7,"owned_by":"mistral"},{"id":"google-ai-studio/gemini-pro","object":"model","created_at":1739232653,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"google-ai-studio"},{"id":"anthropic/claude-2.0","object":"model","created_at":1739232653,"cost_in":0.000008,"cost_out":0.000024,"owned_by":"anthropic"},{"id":"openai/gpt-3.5-turbo","object":"model","created_at":1739232653,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"openai"},{"id":"openai/gpt-4o","object":"model","created_at":1739232652,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"openai"},{"id":"google-ai-studio/gemma-7b-it","object":"model","created_at":1739232652,"cost_in":1.5e-7,"cost_out":1.5e-7,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-2.0-flash-thinking-exp-1219:free","object":"model","created_at":1739232651,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"openai/o1-mini-2024-09-12","object":"model","created_at":1739232651,"cost_in":0.0000011,"cost_out":0.0000044,"owned_by":"openai"},{"id":"openai/o1-mini","object":"model","created_at":1739232651,"cost_in":0.0000011,"cost_out":0.0000044,"owned_by":"openai"},{"id":"google-ai-studio/gemini-2.0-flash-lite-preview-02-05:free","object":"model","created_at":1739232650,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"deepseek/deepseek-r1-distill-qwen-1.5b","object":"model","created_at":1739232650,"cost_in":1.8e-7,"cost_out":1.8e-7,"owned_by":"deepseek"},{"id":"deepseek/deepseek-r1-distill-llama-8b","object":"model","created_at":1739232650,"cost_in":4e-8,"cost_out":4e-8,"owned_by":"deepseek"},{"id":"google-ai-studio/gemini-2.0-flash-001","object":"model","created_at":1739232650,"cost_in":1e-7,"cost_out":4e-7,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-2.0-pro-exp-02-05:free","object":"model","created_at":1739232650,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"deepseek/deepseek-r1-distill-llama-70b:free","object":"model","created_at":1739232650,"cost_in":0,"cost_out":0,"owned_by":"deepseek"},{"id":"perplexity-ai/sonar-reasoning","object":"model","created_at":1739232650,"cost_in":0.000001,"cost_out":0.000005,"owned_by":"perplexity-ai"},{"id":"deepseek/deepseek-chat:free","object":"model","created_at":1739232650,"cost_in":0,"cost_out":0,"owned_by":"deepseek"},{"id":"deepseek/deepseek-r1:free","object":"model","created_at":1739232650,"cost_in":0,"cost_out":0,"owned_by":"deepseek"},{"id":"mistral/codestral-2501","object":"model","created_at":1739232650,"cost_in":3e-7,"cost_out":9e-7,"owned_by":"mistral"},{"id":"azure-openai/gpt-3.5-turbo-0125","object":"model","created_at":1738807115,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"azure-openai"},{"id":"azure-openai/text-embedding-3-large","object":"model","created_at":1738807015,"cost_in":1.3e-7,"cost_out":0,"owned_by":"azure-openai"},{"id":"openai/o1-2024-12-17","object":"model","created_at":1738806987,"cost_in":0.000015,"cost_out":0.00006,"owned_by":"openai"},{"id":"google-vertex-ai/mistral-large-2411","object":"model","created_at":1738806951,"cost_in":0.000002,"cost_out":0.000006,"owned_by":"google-vertex-ai"},{"id":"cerebras/llama3.1-8b","object":"model","created_at":1738806921,"cost_in":1.0000000000000001e-7,"cost_out":1.0000000000000001e-7,"owned_by":"cerebras"},{"id":"cerebras/llama-3.3-70b","object":"model","created_at":1738806901,"cost_in":8.5e-7,"cost_out":0.0000012,"owned_by":"cerebras"},{"id":"aws-bedrock/anthropic.claude-3-5-sonnet-20241022-v2","object":"model","created_at":1738806764,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/anthropic.claude-3-haiku-20240307-v1","object":"model","created_at":1738806705,"cost_in":2.5e-7,"cost_out":0.00000125,"owned_by":"aws-bedrock"},{"id":"azure-openai/gpt-4-32k","object":"model","created_at":1738806612,"cost_in":0.00006,"cost_out":0.00012,"owned_by":"azure-openai"},{"id":"google-vertex-ai/codestral-2501","object":"model","created_at":1738806568,"cost_in":3e-7,"cost_out":9.000000000000001e-7,"owned_by":"google-vertex-ai"},{"id":"replicate/meta/meta-llama-3-8b-instruct","object":"model","created_at":1738806509,"cost_in":5.0000000000000004e-8,"cost_out":2.5e-7,"owned_by":"replicate"},{"id":"deepseek/deepseek-reasoner","object":"model","created_at":1738806446,"cost_in":2.8e-7,"cost_out":4.2e-7,"owned_by":"deepseek"},{"id":"perplexity-ai/sonar","object":"model","created_at":1738806346,"cost_in":0.000001,"cost_out":0.000001,"owned_by":"perplexity-ai"},{"id":"perplexity-ai/sonar-pro","object":"model","created_at":1738806329,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"perplexity-ai"},{"id":"openai/o3-mini","object":"model","created_at":1738805917,"cost_in":0.0000011,"cost_out":0.0000044,"owned_by":"openai"},{"id":"deepseek/deepseek-chat-v2.5","object":"model","created_at":1736267346,"cost_in":0.000002,"cost_out":0.000002,"owned_by":"deepseek"},{"id":"anthropic/claude-3.5-haiku","object":"model","created_at":1736267344,"cost_in":8e-7,"cost_out":0.000004,"owned_by":"anthropic"},{"id":"anthropic/claude-3.5-haiku:beta","object":"model","created_at":1736267344,"cost_in":8e-7,"cost_out":0.000004,"owned_by":"anthropic"},{"id":"google-ai-studio/gemini-2.0-flash-exp:free","object":"model","created_at":1736267343,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-exp-1206:free","object":"model","created_at":1736267343,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"anthropic/claude-3.5-haiku-20241022:beta","object":"model","created_at":1736267343,"cost_in":8e-7,"cost_out":0.000004,"owned_by":"anthropic"},{"id":"anthropic/claude-3.5-haiku-20241022","object":"model","created_at":1736267343,"cost_in":8e-7,"cost_out":0.000004,"owned_by":"anthropic"},{"id":"cohere/command-r7b-12-2024","object":"model","created_at":1736267342,"cost_in":3.75e-8,"cost_out":1.5e-7,"owned_by":"cohere"},{"id":"openai/o1","object":"model","created_at":1736267342,"cost_in":0.000015,"cost_out":0.00006,"owned_by":"openai"},{"id":"google-ai-studio/gemini-2.0-flash-thinking-exp:free","object":"model","created_at":1736267342,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"openrouter/meta-llama/llama-3-8b-instruct","object":"model","created_at":1736267292,"cost_in":3e-8,"cost_out":6e-8,"owned_by":"openrouter"},{"id":"openrouter/deepseek/deepseek-chat-v2.5","object":"model","created_at":1736267291,"cost_in":0.000002,"cost_out":0.000002,"owned_by":"openrouter"},{"id":"openrouter/nousresearch/hermes-2-pro-llama-3-8b","object":"model","created_at":1736267290,"cost_in":2.5e-8,"cost_out":8e-8,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.1-405b-instruct","object":"model","created_at":1736267288,"cost_in":0.0000035,"cost_out":0.0000035,"owned_by":"openrouter"},{"id":"openrouter/aetherwiing/mn-starcannon-12b","object":"model","created_at":1736267287,"cost_in":8e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/nothingiisreal/mn-celeste-12b","object":"model","created_at":1736267287,"cost_in":8e-7,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/liquid/lfm-40b","object":"model","created_at":1736267285,"cost_in":1.5e-7,"cost_out":1.5e-7,"owned_by":"openrouter"},{"id":"openrouter/nvidia/llama-3.1-nemotron-70b-instruct","object":"model","created_at":1736267284,"cost_in":0.0000012,"cost_out":0.0000012,"owned_by":"openrouter"},{"id":"openrouter/anthracite-org/magnum-v2-72b","object":"model","created_at":1736267284,"cost_in":0.000003,"cost_out":0.000003,"owned_by":"openrouter"},{"id":"openrouter/eva-unit-01/eva-qwen-2.5-32b","object":"model","created_at":1736267283,"cost_in":0.0000026,"cost_out":0.0000034,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-3.5-haiku-20241022","object":"model","created_at":1736267283,"cost_in":8e-7,"cost_out":0.000004,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-3.5-haiku:beta","object":"model","created_at":1736267283,"cost_in":8e-7,"cost_out":0.000004,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-3.5-haiku","object":"model","created_at":1736267283,"cost_in":8e-7,"cost_out":0.000004,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-3.5-haiku-20241022:beta","object":"model","created_at":1736267283,"cost_in":8e-7,"cost_out":0.000004,"owned_by":"openrouter"},{"id":"openrouter/x-ai/grok-2-vision-1212","object":"model","created_at":1736267282,"cost_in":0.000002,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-exp-1206:free","object":"model","created_at":1736267282,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/amazon/nova-micro-v1","object":"model","created_at":1736267282,"cost_in":3.5e-8,"cost_out":1.4e-7,"owned_by":"openrouter"},{"id":"openrouter/amazon/nova-lite-v1","object":"model","created_at":1736267282,"cost_in":6e-8,"cost_out":2.4e-7,"owned_by":"openrouter"},{"id":"openrouter/amazon/nova-pro-v1","object":"model","created_at":1736267282,"cost_in":8e-7,"cost_out":0.0000032,"owned_by":"openrouter"},{"id":"openrouter/openai/o1","object":"model","created_at":1736267281,"cost_in":0.000015,"cost_out":0.00006,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.0-flash-thinking-exp:free","object":"model","created_at":1736267281,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/inflatebot/mn-mag-mell-r1","object":"model","created_at":1736267281,"cost_in":9e-7,"cost_out":9e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qvq-72b-preview","object":"model","created_at":1736267281,"cost_in":2.5e-7,"cost_out":5e-7,"owned_by":"openrouter"},{"id":"openrouter/cohere/command-r7b-12-2024","object":"model","created_at":1736267281,"cost_in":3.75e-8,"cost_out":1.5e-7,"owned_by":"openrouter"},{"id":"openrouter/eva-unit-01/eva-llama-3.33-70b","object":"model","created_at":1736267281,"cost_in":0.000004,"cost_out":0.000006,"owned_by":"openrouter"},{"id":"openrouter/x-ai/grok-2-1212","object":"model","created_at":1736267281,"cost_in":0.000002,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-2.0-flash-exp:free","object":"model","created_at":1736267281,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"mistral/codestral-2405","object":"model","created_at":1735255232,"cost_in":2.0000000000000002e-7,"cost_out":6e-7,"owned_by":"mistral"},{"id":"groq/llama-3.2-90b-text-preview","object":"model","created_at":1735255191,"cost_in":9.000000000000001e-7,"cost_out":9.000000000000001e-7,"owned_by":"groq"},{"id":"mistral/pixtral-large-latest","object":"model","created_at":1735255159,"cost_in":0.000002,"cost_out":0.000006,"owned_by":"mistral"},{"id":"mistral/ministral-3b-latest","object":"model","created_at":1735255132,"cost_in":4e-8,"cost_out":4e-8,"owned_by":"mistral"},{"id":"groq/llama-3.2-11b-text-preview","object":"model","created_at":1735255089,"cost_in":1.8e-7,"cost_out":1.8e-7,"owned_by":"groq"},{"id":"openai/omni-moderation-latest-intents","object":"model","created_at":1735255014,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"openai"},{"id":"mistral/ministral-3b-2410","object":"model","created_at":1735254936,"cost_in":4e-8,"cost_out":4e-8,"owned_by":"mistral"},{"id":"groq/llama-3.3-70b-versatile","object":"model","created_at":1735254834,"cost_in":5.9e-7,"cost_out":7.9e-7,"owned_by":"groq"},{"id":"groq/llama-3.3-70b-specdec","object":"model","created_at":1735254775,"cost_in":5.9e-7,"cost_out":9.9e-7,"owned_by":"groq"},{"id":"google-vertex-ai/jamba-1.5-mini","object":"model","created_at":1735254708,"cost_in":2.0000000000000002e-7,"cost_out":4.0000000000000003e-7,"owned_by":"google-vertex-ai"},{"id":"grok/grok-2-1212","object":"model","created_at":1735254669,"cost_in":0.000002,"cost_out":0.00001,"owned_by":"grok"},{"id":"mistral/pixtral-12b-latest","object":"model","created_at":1735254626,"cost_in":1.5e-7,"cost_out":1.5e-7,"owned_by":"mistral"},{"id":"azure-openai/gpt-4o-2024-11-20","object":"model","created_at":1735254491,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"azure-openai"},{"id":"openai/o1-2024","object":"model","created_at":1735254434,"cost_in":0.000015,"cost_out":0.00006,"owned_by":"openai"},{"id":"cohere/command-r7b","object":"model","created_at":1735254373,"cost_in":3.75e-8,"cost_out":1.5e-7,"owned_by":"cohere"},{"id":"azure-openai/gpt-4o-mini-2024-07-18","object":"model","created_at":1735253893,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"azure-openai"},{"id":"grok/grok-2-vision-1212","object":"model","created_at":1735253858,"cost_in":0.000002,"cost_out":0.00001,"owned_by":"grok"},{"id":"google-vertex-ai/jamba-1.5-large@001","object":"model","created_at":1735253789,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"google-vertex-ai"},{"id":"google-vertex-ai/claude-3-5-sonnet","object":"model","created_at":1735253702,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"google-vertex-ai"},{"id":"aws-bedrock/us.anthropic.claude-3-5-haiku-20241022-v1","object":"model","created_at":1735253656,"cost_in":8.000000000000001e-7,"cost_out":0.000004,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/us.anthropic.claude-3-5-sonnet-20241022-v2","object":"model","created_at":1735253615,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"aws-bedrock"},{"id":"aws-bedrock/anthropic.claude-3-5-haiku-20241022-v1","object":"model","created_at":1735253536,"cost_in":8.000000000000001e-7,"cost_out":0.000004,"owned_by":"aws-bedrock"},{"id":"azure-openai/gpt-3.5-turbo-1106","object":"model","created_at":1735253455,"cost_in":0.000001,"cost_out":0.000002,"owned_by":"azure-openai"},{"id":"azure-openai/text-embedding-3-small","object":"model","created_at":1735253391,"cost_in":2e-8,"cost_out":0,"owned_by":"azure-openai"},{"id":"google-vertex-ai/mistral-nemo@2407","object":"model","created_at":1735253307,"cost_in":1.5e-7,"cost_out":1.5e-7,"owned_by":"google-vertex-ai"},{"id":"aws-bedrock/anthropic.claude-3-5-sonnet-20240620-v1","object":"model","created_at":1735253273,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"aws-bedrock"},{"id":"google-vertex-ai/claude-3-5-sonnet@20240620","object":"model","created_at":1735253190,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"google-vertex-ai"},{"id":"google-vertex-ai/claude-3-opus@20240229","object":"model","created_at":1735253138,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"google-vertex-ai"},{"id":"google-vertex-ai/codestral@2405","object":"model","created_at":1735253092,"cost_in":2.0000000000000002e-7,"cost_out":6e-7,"owned_by":"google-vertex-ai"},{"id":"openrouter/openai/gpt-4-0314","object":"model","created_at":1732817442,"cost_in":0.00003,"cost_out":0.00006,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-3.5-turbo-0125","object":"model","created_at":1732817442,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-3.5-turbo","object":"model","created_at":1732817442,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"openrouter"},{"id":"openrouter/undi95/remm-slerp-l2-13b:extended","object":"model","created_at":1732817441,"cost_in":0.000001125,"cost_out":0.000001125,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-2.0","object":"model","created_at":1732817441,"cost_in":0.000008,"cost_out":0.000024,"owned_by":"openrouter"},{"id":"openrouter/google/palm-2-codechat-bison","object":"model","created_at":1732817441,"cost_in":0.000001,"cost_out":0.000002,"owned_by":"openrouter"},{"id":"openrouter/gryphe/mythomax-l2-13b:free","object":"model","created_at":1732817441,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/google/palm-2-chat-bison","object":"model","created_at":1732817441,"cost_in":0.000001,"cost_out":0.000002,"owned_by":"openrouter"},{"id":"openrouter/gryphe/mythomax-l2-13b:nitro","object":"model","created_at":1732817441,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"openrouter/gryphe/mythomax-l2-13b:extended","object":"model","created_at":1732817441,"cost_in":0.000001125,"cost_out":0.000001125,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-4","object":"model","created_at":1732817441,"cost_in":0.00003,"cost_out":0.00006,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-3.5-turbo-instruct","object":"model","created_at":1732817440,"cost_in":0.0000015,"cost_out":0.000002,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-4-32k-0314","object":"model","created_at":1732817440,"cost_in":0.00006,"cost_out":0.00012,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-4-32k","object":"model","created_at":1732817440,"cost_in":0.00006,"cost_out":0.00012,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-3.5-turbo-16k","object":"model","created_at":1732817440,"cost_in":0.000003,"cost_out":0.000004,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-2.0:beta","object":"model","created_at":1732817440,"cost_in":0.000008,"cost_out":0.000024,"owned_by":"openrouter"},{"id":"openrouter/huggingfaceh4/zephyr-7b-beta:free","object":"model","created_at":1732817440,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/undi95/toppy-m-7b:nitro","object":"model","created_at":1732817439,"cost_in":7e-8,"cost_out":7e-8,"owned_by":"openrouter"},{"id":"openrouter/openrouter/auto","object":"model","created_at":1732817439,"cost_in":-1,"cost_out":-1,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-4-1106-preview","object":"model","created_at":1732817439,"cost_in":0.00001,"cost_out":0.00003,"owned_by":"openrouter"},{"id":"openrouter/google/palm-2-codechat-bison-32k","object":"model","created_at":1732817439,"cost_in":0.000001,"cost_out":0.000002,"owned_by":"openrouter"},{"id":"openrouter/google/palm-2-chat-bison-32k","object":"model","created_at":1732817439,"cost_in":0.000001,"cost_out":0.000002,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-3.5-turbo-1106","object":"model","created_at":1732817439,"cost_in":0.000001,"cost_out":0.000002,"owned_by":"openrouter"},{"id":"openrouter/jondurbin/airoboros-l2-70b","object":"model","created_at":1732817439,"cost_in":5e-7,"cost_out":5e-7,"owned_by":"openrouter"},{"id":"openrouter/xwin-lm/xwin-lm-70b","object":"model","created_at":1732817439,"cost_in":0.00000375,"cost_out":0.00000375,"owned_by":"openrouter"},{"id":"openrouter/openchat/openchat-7b:free","object":"model","created_at":1732817438,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-2.1","object":"model","created_at":1732817438,"cost_in":0.000008,"cost_out":0.000024,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-2:beta","object":"model","created_at":1732817438,"cost_in":0.000008,"cost_out":0.000024,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-2.1:beta","object":"model","created_at":1732817438,"cost_in":0.000008,"cost_out":0.000024,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-2","object":"model","created_at":1732817438,"cost_in":0.000008,"cost_out":0.000024,"owned_by":"openrouter"},{"id":"openrouter/teknium/openhermes-2.5-mistral-7b","object":"model","created_at":1732817438,"cost_in":1.7e-7,"cost_out":1.7e-7,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-4-vision-preview","object":"model","created_at":1732817438,"cost_in":0.00001,"cost_out":0.00003,"owned_by":"openrouter"},{"id":"openrouter/lizpreciatior/lzlv-70b-fp16-hf","object":"model","created_at":1732817438,"cost_in":3.5e-7,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/undi95/toppy-m-7b:free","object":"model","created_at":1732817438,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/cognitivecomputations/dolphin-mixtral-8x7b","object":"model","created_at":1732817437,"cost_in":5e-7,"cost_out":5e-7,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-pro","object":"model","created_at":1732817437,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-pro-vision","object":"model","created_at":1732817437,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mixtral-8x7b-instruct:nitro","object":"model","created_at":1732817437,"cost_in":5.4e-7,"cost_out":5.4e-7,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-3-sonnet","object":"model","created_at":1732817436,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-3-opus:beta","object":"model","created_at":1732817436,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-3-opus","object":"model","created_at":1732817436,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-3.5-turbo-0613","object":"model","created_at":1732817436,"cost_in":0.000001,"cost_out":0.000002,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mistral-large","object":"model","created_at":1732817436,"cost_in":0.000002,"cost_out":0.000006,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-4-turbo-preview","object":"model","created_at":1732817436,"cost_in":0.00001,"cost_out":0.00003,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mistral-small","object":"model","created_at":1732817436,"cost_in":2e-7,"cost_out":6e-7,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mistral-medium","object":"model","created_at":1732817436,"cost_in":0.00000275,"cost_out":0.0000081,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mistral-tiny","object":"model","created_at":1732817436,"cost_in":2.5e-7,"cost_out":2.5e-7,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-pro-1.5","object":"model","created_at":1732817435,"cost_in":0.00000125,"cost_out":0.000005,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-4-turbo","object":"model","created_at":1732817435,"cost_in":0.00001,"cost_out":0.00003,"owned_by":"openrouter"},{"id":"openrouter/sophosympatheia/midnight-rose-70b","object":"model","created_at":1732817435,"cost_in":8e-7,"cost_out":8e-7,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-3-haiku","object":"model","created_at":1732817435,"cost_in":2.5e-7,"cost_out":0.00000125,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-3-haiku:beta","object":"model","created_at":1732817435,"cost_in":2.5e-7,"cost_out":0.00000125,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-3-sonnet:beta","object":"model","created_at":1732817435,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3-8b-instruct:free","object":"model","created_at":1732817434,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3-8b-instruct:extended","object":"model","created_at":1732817434,"cost_in":1.875e-7,"cost_out":0.000001125,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3-8b-instruct:nitro","object":"model","created_at":1732817434,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"openrouter/perplexity/llama-3-sonar-large-32k-online","object":"model","created_at":1732817433,"cost_in":0.000001,"cost_out":0.000001,"owned_by":"openrouter"},{"id":"openrouter/perplexity/llama-3-sonar-small-32k-chat","object":"model","created_at":1732817433,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"openrouter/perplexity/llama-3-sonar-large-32k-chat","object":"model","created_at":1732817433,"cost_in":0.000001,"cost_out":0.000001,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-4o-2024-05-13","object":"model","created_at":1732817433,"cost_in":0.000005,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-4o","object":"model","created_at":1732817433,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-4o:extended","object":"model","created_at":1732817433,"cost_in":0.000006,"cost_out":0.000018,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3-70b-instruct:nitro","object":"model","created_at":1732817433,"cost_in":7.92e-7,"cost_out":7.92e-7,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mistral-7b-instruct:free","object":"model","created_at":1732817432,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mistral-7b-instruct:nitro","object":"model","created_at":1732817432,"cost_in":7e-8,"cost_out":7e-8,"owned_by":"openrouter"},{"id":"openrouter/microsoft/phi-3-mini-128k-instruct:free","object":"model","created_at":1732817432,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/microsoft/phi-3-mini-128k-instruct","object":"model","created_at":1732817432,"cost_in":1e-7,"cost_out":1e-7,"owned_by":"openrouter"},{"id":"openrouter/microsoft/phi-3-medium-128k-instruct:free","object":"model","created_at":1732817432,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-flash-1.5","object":"model","created_at":1732817432,"cost_in":7.5e-8,"cost_out":3e-7,"owned_by":"openrouter"},{"id":"openrouter/ai21/jamba-instruct","object":"model","created_at":1732817431,"cost_in":5e-7,"cost_out":7e-7,"owned_by":"openrouter"},{"id":"openrouter/01-ai/yi-large","object":"model","created_at":1732817431,"cost_in":0.000003,"cost_out":0.000003,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-3.5-sonnet-20240620:beta","object":"model","created_at":1732817431,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-3.5-sonnet-20240620","object":"model","created_at":1732817431,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"openrouter/cognitivecomputations/dolphin-mixtral-8x22b","object":"model","created_at":1732817431,"cost_in":9e-7,"cost_out":9e-7,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.1-405b-instruct:free","object":"model","created_at":1732817430,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/mistralai/codestral-mamba","object":"model","created_at":1732817430,"cost_in":2.5e-7,"cost_out":2.5e-7,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-4o-mini-2024-07-18","object":"model","created_at":1732817430,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-4o-mini","object":"model","created_at":1732817430,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen-2-7b-instruct:free","object":"model","created_at":1732817430,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen-2-7b-instruct","object":"model","created_at":1732817430,"cost_in":5.4e-8,"cost_out":5.4e-8,"owned_by":"openrouter"},{"id":"openrouter/google/gemma-2-9b-it:free","object":"model","created_at":1732817430,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/perplexity/llama-3.1-sonar-small-128k-online","object":"model","created_at":1732817429,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.1-70b-instruct:free","object":"model","created_at":1732817429,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/perplexity/llama-3.1-sonar-small-128k-chat","object":"model","created_at":1732817429,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.1-70b-instruct:nitro","object":"model","created_at":1732817429,"cost_in":0.00000325,"cost_out":0.00000325,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.1-8b-instruct:free","object":"model","created_at":1732817429,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.1-405b-instruct:nitro","object":"model","created_at":1732817429,"cost_in":0.00001462,"cost_out":0.00001462,"owned_by":"openrouter"},{"id":"openrouter/ai21/jamba-1-5-mini","object":"model","created_at":1732817428,"cost_in":2e-7,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/perplexity/llama-3.1-sonar-huge-128k-online","object":"model","created_at":1732817428,"cost_in":0.000005,"cost_out":0.000005,"owned_by":"openrouter"},{"id":"openrouter/nousresearch/hermes-3-llama-3.1-405b:free","object":"model","created_at":1732817428,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-pro-1.5-exp","object":"model","created_at":1732817428,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.1-405b","object":"model","created_at":1732817428,"cost_in":0.000004,"cost_out":0.000004,"owned_by":"openrouter"},{"id":"openrouter/openai/chatgpt-4o-latest","object":"model","created_at":1732817428,"cost_in":0.000005,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-4o-2024-08-06","object":"model","created_at":1732817428,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openrouter/perplexity/llama-3.1-sonar-large-128k-online","object":"model","created_at":1732817428,"cost_in":0.000001,"cost_out":0.000001,"owned_by":"openrouter"},{"id":"openrouter/perplexity/llama-3.1-sonar-large-128k-chat","object":"model","created_at":1732817428,"cost_in":0.000001,"cost_out":0.000001,"owned_by":"openrouter"},{"id":"openrouter/openai/o1-preview-2024-09-12","object":"model","created_at":1732817427,"cost_in":0.000015,"cost_out":0.00006,"owned_by":"openrouter"},{"id":"openrouter/openai/o1-preview","object":"model","created_at":1732817427,"cost_in":0.000015,"cost_out":0.00006,"owned_by":"openrouter"},{"id":"openrouter/mistralai/pixtral-12b","object":"model","created_at":1732817427,"cost_in":1e-7,"cost_out":1e-7,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-flash-1.5-8b-exp","object":"model","created_at":1732817427,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen-2-vl-7b-instruct","object":"model","created_at":1732817427,"cost_in":1e-7,"cost_out":1e-7,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-flash-1.5-exp","object":"model","created_at":1732817427,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/ai21/jamba-1-5-large","object":"model","created_at":1732817427,"cost_in":0.000002,"cost_out":0.000008,"owned_by":"openrouter"},{"id":"openrouter/qwen/qwen-2-vl-72b-instruct","object":"model","created_at":1732817426,"cost_in":4e-7,"cost_out":4e-7,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-flash-1.5-8b","object":"model","created_at":1732817425,"cost_in":3.75e-8,"cost_out":1.5e-7,"owned_by":"openrouter"},{"id":"openrouter/inflection/inflection-3-productivity","object":"model","created_at":1732817425,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openrouter/liquid/lfm-40b:free","object":"model","created_at":1732817425,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.2-1b-instruct:free","object":"model","created_at":1732817425,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.2-3b-instruct:free","object":"model","created_at":1732817425,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.2-11b-vision-instruct:free","object":"model","created_at":1732817425,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/meta-llama/llama-3.2-90b-vision-instruct:free","object":"model","created_at":1732817425,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-3.5-sonnet:beta","object":"model","created_at":1732817424,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"openrouter/anthropic/claude-3.5-sonnet","object":"model","created_at":1732817424,"cost_in":0.000006,"cost_out":0.00003,"owned_by":"openrouter"},{"id":"openrouter/x-ai/grok-beta","object":"model","created_at":1732817424,"cost_in":0.000005,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"openrouter/mistralai/ministral-8b","object":"model","created_at":1732817424,"cost_in":1e-7,"cost_out":1e-7,"owned_by":"openrouter"},{"id":"openrouter/mistralai/ministral-3b","object":"model","created_at":1732817424,"cost_in":4e-8,"cost_out":4e-8,"owned_by":"openrouter"},{"id":"openrouter/inflection/inflection-3-pi","object":"model","created_at":1732817424,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-exp-1114:free","object":"model","created_at":1732817423,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/raifle/sorcererlm-8x22b","object":"model","created_at":1732817423,"cost_in":0.0000045,"cost_out":0.0000045,"owned_by":"openrouter"},{"id":"openrouter/google/gemini-exp-1121:free","object":"model","created_at":1732817422,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/google/learnlm-1.5-pro-experimental:free","object":"model","created_at":1732817422,"cost_in":0,"cost_out":0,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mistral-large-2411","object":"model","created_at":1732817422,"cost_in":0.000002,"cost_out":0.000006,"owned_by":"openrouter"},{"id":"openrouter/openai/gpt-4o-2024-11-20","object":"model","created_at":1732817422,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"openrouter"},{"id":"openrouter/mistralai/mistral-large-2407","object":"model","created_at":1732817422,"cost_in":0.000002,"cost_out":0.000006,"owned_by":"openrouter"},{"id":"openrouter/x-ai/grok-vision-beta","object":"model","created_at":1732817422,"cost_in":0.000005,"cost_out":0.000015,"owned_by":"openrouter"},{"id":"openrouter/mistralai/pixtral-large-2411","object":"model","created_at":1732817422,"cost_in":0.000002,"cost_out":0.000006,"owned_by":"openrouter"},{"id":"google-ai-studio/learnlm-1.5-pro-experimental:free","object":"model","created_at":1732233660,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-exp-1114:free","object":"model","created_at":1732233660,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-exp-1121:free","object":"model","created_at":1732233659,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"openai/gpt-4o-2024-11-20","object":"model","created_at":1732147293,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"openai"},{"id":"grok/grok-vision-beta","object":"model","created_at":1732060901,"cost_in":0.000005,"cost_out":0.000015,"owned_by":"grok"},{"id":"mistral/mistral-large-2411","object":"model","created_at":1732060900,"cost_in":0.000002,"cost_out":0.000006,"owned_by":"mistral"},{"id":"mistral/pixtral-large-2411","object":"model","created_at":1732060900,"cost_in":0.000002,"cost_out":0.000006,"owned_by":"mistral"},{"id":"groq/llama-3.2-11b-vision-preview","object":"model","created_at":1731978494,"cost_in":1.8e-7,"cost_out":1.8e-7,"owned_by":"groq"},{"id":"azure-openai/o1-preview-2024-09-12","object":"model","created_at":1731978443,"cost_in":0.0000165,"cost_out":0.000066,"owned_by":"azure-openai"},{"id":"groq/llama-3.2-1b-preview","object":"model","created_at":1731978393,"cost_in":4e-8,"cost_out":4e-8,"owned_by":"groq"},{"id":"groq/llama-guard-3-8b","object":"model","created_at":1731978351,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"groq"},{"id":"groq/llama-3.2-90b-vision-preview","object":"model","created_at":1731978318,"cost_in":9.000000000000001e-7,"cost_out":9.000000000000001e-7,"owned_by":"groq"},{"id":"mistral/mistral-large-2407","object":"model","created_at":1731978079,"cost_in":0.000002,"cost_out":0.000006,"owned_by":"mistral"},{"id":"openai/omni-moderation-latest","object":"model","created_at":1731977860,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"openai"},{"id":"azure-openai/o1-mini-2024-09-12","object":"model","created_at":1731977825,"cost_in":0.0000032999999999999997,"cost_out":0.000013199999999999999,"owned_by":"azure-openai"},{"id":"mistral/ministral-8b-latest","object":"model","created_at":1731977778,"cost_in":1e-7,"cost_out":1e-7,"owned_by":"mistral"},{"id":"mistral/mistral-small-2409","object":"model","created_at":1731977740,"cost_in":2.0000000000000002e-7,"cost_out":6e-7,"owned_by":"mistral"},{"id":"google-ai-studio/gemini-exp-1114","object":"model","created_at":1731715238,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"anthropic/claude-instant-1","object":"model","created_at":1730851678,"cost_in":0.00000163,"cost_out":0.0000551,"owned_by":"anthropic"},{"id":"anthropic/claude-3-5-haiku-20241022","object":"model","created_at":1730764879,"cost_in":8e-7,"cost_out":0.000004,"owned_by":"anthropic"},{"id":"anthropic/claude-3-5-haiku-20241022:beta","object":"model","created_at":1730764878,"cost_in":0.000001,"cost_out":0.000005,"owned_by":"anthropic"},{"id":"anthropic/claude-3-5-haiku:beta","object":"model","created_at":1730764878,"cost_in":0.000001,"cost_out":0.000005,"owned_by":"anthropic"},{"id":"anthropic/claude-3-5-haiku","object":"model","created_at":1730764878,"cost_in":8e-7,"cost_out":0.000004,"owned_by":"anthropic"},{"id":"grok/grok-beta","object":"model","created_at":1729900878,"cost_in":0.000005,"cost_out":0.000015,"owned_by":"grok"},{"id":"anthropic/claude-3.5-sonnet-20240620:beta","object":"model","created_at":1729728082,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"anthropic/claude-3.5-sonnet-20240620","object":"model","created_at":1729728081,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"google-ai-studio/claude-3-5-sonnet-v2@20241022","object":"model","created_at":1729728072,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"google-ai-studio"},{"id":"anthropic/claude-3-5-sonnet-20241022","object":"model","created_at":1729728070,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"mistral/ministral-8b","object":"model","created_at":1729209668,"cost_in":1e-7,"cost_out":1e-7,"owned_by":"mistral"},{"id":"mistral/ministral-3b","object":"model","created_at":1729209668,"cost_in":4e-8,"cost_out":4e-8,"owned_by":"mistral"},{"id":"openai/gpt-3.5-turbo-0301","object":"model","created_at":1729123239,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"openai"},{"id":"groq/llama-3.2-3b-preview","object":"model","created_at":1728426942,"cost_in":6e-8,"cost_out":6e-8,"owned_by":"groq"},{"id":"replicate/meta/meta-llama-3-70b-instruct","object":"model","created_at":1728426394,"cost_in":6.5e-7,"cost_out":0.00000275,"owned_by":"replicate"},{"id":"mistral/open-mixtral-8x22b","object":"model","created_at":1728426320,"cost_in":0.000002,"cost_out":0.000006,"owned_by":"mistral"},{"id":"cohere/embed-multilingual-v3.0","object":"model","created_at":1728426181,"cost_in":1.0000000000000001e-7,"cost_out":1.0000000000000001e-7,"owned_by":"cohere"},{"id":"openai/ft:gpt-4o-2024-08-06","object":"model","created_at":1728426043,"cost_in":0.00000375,"cost_out":0.000015,"owned_by":"openai"},{"id":"mistral/open-mistral-nemo","object":"model","created_at":1728425801,"cost_in":1.5e-7,"cost_out":1.5e-7,"owned_by":"mistral"},{"id":"mistral/pixtral-12b-2409","object":"model","created_at":1728425771,"cost_in":1.5e-7,"cost_out":1.5e-7,"owned_by":"mistral"},{"id":"mistral/codestral-latest","object":"model","created_at":1728425740,"cost_in":3e-7,"cost_out":9e-7,"owned_by":"mistral"},{"id":"cohere/command-light-nightly","object":"model","created_at":1728425469,"cost_in":3e-7,"cost_out":6e-7,"owned_by":"cohere"},{"id":"cohere/command-light","object":"model","created_at":1728425451,"cost_in":3e-7,"cost_out":6e-7,"owned_by":"cohere"},{"id":"openai/babbage-002","object":"model","created_at":1728425195,"cost_in":0.0000016000000000000001,"cost_out":0.0000016000000000000001,"owned_by":"openai"},{"id":"openai/davinci-002","object":"model","created_at":1728425173,"cost_in":0.000012,"cost_out":0.000012,"owned_by":"openai"},{"id":"google-ai-studio/gemini-1.0-pro-001","object":"model","created_at":1728425136,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"google-ai-studio"},{"id":"azure-openai/gpt-4o-2024-08-06","object":"model","created_at":1728424982,"cost_in":0.00000275,"cost_out":0.000011,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-35-turbo-16k","object":"model","created_at":1728424889,"cost_in":0.000001,"cost_out":0.000002,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-4-turbo-2024-04-09","object":"model","created_at":1728424763,"cost_in":0.00001,"cost_out":0.00003,"owned_by":"azure-openai"},{"id":"perplexity-ai/llama-3.1-70b-instruct","object":"model","created_at":1728424698,"cost_in":0.000001,"cost_out":0.000001,"owned_by":"perplexity-ai"},{"id":"perplexity-ai/llama-3.1-8b-instruct","object":"model","created_at":1728424589,"cost_in":2.0000000000000002e-7,"cost_out":2.0000000000000002e-7,"owned_by":"perplexity-ai"},{"id":"google-ai-studio/gemini-pro-1.5","object":"model","created_at":1728345670,"cost_in":0.00000125,"cost_out":0.000005,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-flash-1.5-8b","object":"model","created_at":1728000098,"cost_in":3.75e-8,"cost_out":1.5e-7,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-flash-1.5-8b-exp","object":"model","created_at":1728000098,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/palm-2-chat-bison","object":"model","created_at":1727827274,"cost_in":0.000001,"cost_out":0.000002,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/palm-2-codechat-bison","object":"model","created_at":1727827274,"cost_in":0.000001,"cost_out":0.000002,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/palm-2-chat-bison-32k","object":"model","created_at":1727827273,"cost_in":0.000001,"cost_out":0.000002,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/palm-2-codechat-bison-32k","object":"model","created_at":1727827273,"cost_in":0.000001,"cost_out":0.000002,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-pro-vision","object":"model","created_at":1727827272,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-flash-1.5","object":"model","created_at":1727827268,"cost_in":7.5e-8,"cost_out":3e-7,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-1.0-pro-latest","object":"model","created_at":1727352359,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"google-ai-studio"},{"id":"perplexity-ai/mistral-7b-instruct","object":"model","created_at":1727349755,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"perplexity-ai"},{"id":"groq/llama-3.1-8b-instant","object":"model","created_at":1727349027,"cost_in":5e-8,"cost_out":8e-8,"owned_by":"groq"},{"id":"replicate/meta/meta-llama-3.1-405b-instruct","object":"model","created_at":1727293998,"cost_in":0.0000095,"cost_out":0.0000095,"owned_by":"replicate"},{"id":"mistral/pixtral-12b","object":"model","created_at":1727222446,"cost_in":1e-7,"cost_out":1e-7,"owned_by":"mistral"},{"id":"mistral/mistral-small","object":"model","created_at":1726704066,"cost_in":2e-7,"cost_out":6e-7,"owned_by":"mistral"},{"id":"mistral/mistral-large","object":"model","created_at":1726704065,"cost_in":0.000002,"cost_out":0.000006,"owned_by":"mistral"},{"id":"mistral/mistral-medium","object":"model","created_at":1726704065,"cost_in":0.00000275,"cost_out":0.0000081,"owned_by":"mistral"},{"id":"mistral/pixtral-12b:free","object":"model","created_at":1726444851,"cost_in":0,"cost_out":0,"owned_by":"mistral"},{"id":"openai/o1-preview-2024-09-12","object":"model","created_at":1726185661,"cost_in":0.000015,"cost_out":0.00006,"owned_by":"openai"},{"id":"openai/o1-preview","object":"model","created_at":1726185661,"cost_in":0.000015,"cost_out":0.00006,"owned_by":"openai"},{"id":"google-ai-studio/gemini-pro-1.5-exp","object":"model","created_at":1725062434,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-flash-1.5-exp","object":"model","created_at":1725062433,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-flash-8b-1.5-exp","object":"model","created_at":1724976025,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"google-ai-studio/gemini-1.0-pro","object":"model","created_at":1724803268,"cost_in":1.25e-7,"cost_out":3.75e-7,"owned_by":"google-ai-studio"},{"id":"replicate/replicate-internal/llama-405b-instruct-vllm","object":"model","created_at":1724798511,"cost_in":0.0000095,"cost_out":0.0000095,"owned_by":"replicate"},{"id":"groq/llama-3.1-70b","object":"model","created_at":1724797489,"cost_in":5.9e-7,"cost_out":7.9e-7,"owned_by":"groq"},{"id":"groq/Llama3-70b","object":"model","created_at":1724797101,"cost_in":5.9e-7,"cost_out":7.9e-7,"owned_by":"groq"},{"id":"azure-openai/gpt-4o-2024-05-13","object":"model","created_at":1724796480,"cost_in":0.000005,"cost_out":0.000015,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-35-turbo","object":"model","created_at":1724796106,"cost_in":0.000001,"cost_out":0.000002,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-4","object":"model","created_at":1724796030,"cost_in":0.00006,"cost_out":0.00012,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-4o-mini","object":"model","created_at":1724795550,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"azure-openai"},{"id":"openai/text-moderation-007","object":"model","created_at":1724794975,"cost_in":0,"cost_out":0,"owned_by":"openai"},{"id":"openai/ft:gpt-4o-mini-2024-07-18","object":"model","created_at":1724792771,"cost_in":3e-7,"cost_out":0.0000012,"owned_by":"openai"},{"id":"openai/ft:gpt-3.5-turbo-","object":"model","created_at":1724716869,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"openai"},{"id":"perplexity-ai/llama-3.1-sonar-huge-128k-online","object":"model","created_at":1723680046,"cost_in":0.000005,"cost_out":0.000005,"owned_by":"perplexity-ai"},{"id":"openai/chatgpt-4o-latest","object":"model","created_at":1723680046,"cost_in":0.000005,"cost_out":0.000015,"owned_by":"openai"},{"id":"openai/gpt-4o:extended","object":"model","created_at":1723593670,"cost_in":0.000006,"cost_out":0.000018,"owned_by":"openai"},{"id":"cohere/cohere/command-r","object":"model","created_at":1723593665,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"cohere"},{"id":"mistral/mistral-7b-instruct:free","object":"model","created_at":1723075265,"cost_in":0,"cost_out":0,"owned_by":"mistral"},{"id":"mistral/mistral-7b-instruct:nitro","object":"model","created_at":1723075264,"cost_in":7e-8,"cost_out":7e-8,"owned_by":"mistral"},{"id":"mistral/mistral-tiny","object":"model","created_at":1723075264,"cost_in":2.5e-7,"cost_out":2.5e-7,"owned_by":"mistral"},{"id":"mistral/mixtral-8x22b","object":"model","created_at":1723075263,"cost_in":0.00000108,"cost_out":0.00000108,"owned_by":"mistral"},{"id":"mistral/mixtral-8x7b-instruct:nitro","object":"model","created_at":1723075263,"cost_in":5.4e-7,"cost_out":5.4e-7,"owned_by":"mistral"},{"id":"openai/gpt-4o-2024-08-06","object":"model","created_at":1723075262,"cost_in":0.0000025,"cost_out":0.00001,"owned_by":"openai"},{"id":"mistral/codestral-mamba","object":"model","created_at":1723075262,"cost_in":2.5e-7,"cost_out":2.5e-7,"owned_by":"mistral"},{"id":"mistral/open-mixtral-8x7b","object":"model","created_at":1722988856,"cost_in":7e-7,"cost_out":7e-7,"owned_by":"mistral"},{"id":"mistral/mistral-small-latest","object":"model","created_at":1722988856,"cost_in":1e-7,"cost_out":3e-7,"owned_by":"mistral"},{"id":"mistral/mistral-medium-latest","object":"model","created_at":1722988856,"cost_in":4e-7,"cost_out":0.000002,"owned_by":"mistral"},{"id":"mistral/mistral-large-latest","object":"model","created_at":1722988856,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"mistral"},{"id":"mistral/mistral-embed","object":"model","created_at":1722988856,"cost_in":1e-7,"cost_out":0,"owned_by":"mistral"},{"id":"mistral/open-mistral-7b","object":"model","created_at":1722988855,"cost_in":2.5e-7,"cost_out":2.5e-7,"owned_by":"mistral"},{"id":"groq/mixtral-8x7b-32768","object":"model","created_at":1722902464,"cost_in":2.4e-7,"cost_out":2.4e-7,"owned_by":"groq"},{"id":"groq/gemma-7b-it","object":"model","created_at":1722902464,"cost_in":7e-8,"cost_out":7e-8,"owned_by":"groq"},{"id":"groq/llama3-70b-8192","object":"model","created_at":1722902464,"cost_in":5.9e-7,"cost_out":7.9e-7,"owned_by":"groq"},{"id":"groq/gemma2-9b-it","object":"model","created_at":1722902464,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"groq"},{"id":"groq/llama3-8b-8192","object":"model","created_at":1722902464,"cost_in":5e-8,"cost_out":8e-8,"owned_by":"groq"},{"id":"groq/llama3-groq-70b-8192-tool-use-preview","object":"model","created_at":1722902464,"cost_in":8.9e-7,"cost_out":8.9e-7,"owned_by":"groq"},{"id":"groq/llama3-groq-8b-8192-tool-use-preview","object":"model","created_at":1722902464,"cost_in":1.9e-7,"cost_out":1.9e-7,"owned_by":"groq"},{"id":"openai/gpt-3.5-turbo-16k","object":"model","created_at":1722470451,"cost_in":0.000003,"cost_out":0.000004,"owned_by":"openai"},{"id":"anthropic/claude-instant-1:beta","object":"model","created_at":1722470451,"cost_in":8e-7,"cost_out":0.0000024,"owned_by":"anthropic"},{"id":"anthropic/claude-2.0:beta","object":"model","created_at":1722470451,"cost_in":0.000008,"cost_out":0.000024,"owned_by":"anthropic"},{"id":"anthropic/claude-instant-1.0","object":"model","created_at":1722470451,"cost_in":8e-7,"cost_out":0.0000024,"owned_by":"anthropic"},{"id":"anthropic/claude-1.2","object":"model","created_at":1722470451,"cost_in":0.000008,"cost_out":0.000024,"owned_by":"anthropic"},{"id":"anthropic/claude-1","object":"model","created_at":1722470451,"cost_in":0.000008,"cost_out":0.000024,"owned_by":"anthropic"},{"id":"anthropic/claude-3-haiku:beta","object":"model","created_at":1722470450,"cost_in":2.5e-7,"cost_out":0.00000125,"owned_by":"anthropic"},{"id":"anthropic/claude-3-haiku","object":"model","created_at":1722470450,"cost_in":2.5e-7,"cost_out":0.00000125,"owned_by":"anthropic"},{"id":"google-ai-studio/gemma-7b-it:nitro","object":"model","created_at":1722470450,"cost_in":7e-8,"cost_out":7e-8,"owned_by":"google-ai-studio"},{"id":"anthropic/claude-3-sonnet:beta","object":"model","created_at":1722470450,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"anthropic/claude-3-opus:beta","object":"model","created_at":1722470450,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"anthropic"},{"id":"anthropic/claude-3-sonnet","object":"model","created_at":1722470450,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"anthropic/claude-3-opus","object":"model","created_at":1722470450,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"anthropic"},{"id":"google-ai-studio/gemma-7b-it:free","object":"model","created_at":1722470450,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"openai/gpt-4-turbo-preview","object":"model","created_at":1722470450,"cost_in":0.00001,"cost_out":0.00003,"owned_by":"openai"},{"id":"anthropic/claude-2.1:beta","object":"model","created_at":1722470450,"cost_in":0.000008,"cost_out":0.000024,"owned_by":"anthropic"},{"id":"anthropic/claude-2:beta","object":"model","created_at":1722470450,"cost_in":0.000008,"cost_out":0.000024,"owned_by":"anthropic"},{"id":"anthropic/claude-instant-1.1","object":"model","created_at":1722470450,"cost_in":8e-7,"cost_out":0.0000024,"owned_by":"anthropic"},{"id":"anthropic/claude-2.1","object":"model","created_at":1722470450,"cost_in":0.000008,"cost_out":0.000024,"owned_by":"anthropic"},{"id":"huggingface/zephyr-7b-beta:free","object":"model","created_at":1722470450,"cost_in":0,"cost_out":0,"owned_by":"huggingface"},{"id":"perplexity-ai/llama-3.1-sonar-large-128k-online","object":"model","created_at":1722470449,"cost_in":0.000001,"cost_out":0.000001,"owned_by":"perplexity-ai"},{"id":"perplexity-ai/llama-3.1-sonar-large-128k-chat","object":"model","created_at":1722470449,"cost_in":0.000001,"cost_out":0.000001,"owned_by":"perplexity-ai"},{"id":"perplexity-ai/llama-3.1-sonar-small-128k-online","object":"model","created_at":1722470449,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"perplexity-ai"},{"id":"perplexity-ai/llama-3.1-sonar-small-128k-chat","object":"model","created_at":1722470449,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"perplexity-ai"},{"id":"google-ai-studio/gemma-2-9b-it:free","object":"model","created_at":1722470449,"cost_in":0,"cost_out":0,"owned_by":"google-ai-studio"},{"id":"anthropic/claude-3.5-sonnet:beta","object":"model","created_at":1722470449,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"anthropic/claude-3.5-sonnet","object":"model","created_at":1722470449,"cost_in":0.000006,"cost_out":0.00003,"owned_by":"anthropic"},{"id":"perplexity-ai/llama-3-sonar-large-32k-online","object":"model","created_at":1722470449,"cost_in":0.000001,"cost_out":0.000001,"owned_by":"perplexity-ai"},{"id":"perplexity-ai/llama-3-sonar-large-32k-chat","object":"model","created_at":1722470449,"cost_in":0.000001,"cost_out":0.000001,"owned_by":"perplexity-ai"},{"id":"perplexity-ai/llama-3-sonar-small-32k-online","object":"model","created_at":1722470449,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"perplexity-ai"},{"id":"perplexity-ai/llama-3-sonar-small-32k-chat","object":"model","created_at":1722470449,"cost_in":2e-7,"cost_out":2e-7,"owned_by":"perplexity-ai"},{"id":"openai/gpt-4o-mini-2024-07-18","object":"model","created_at":1721728859,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"openai"},{"id":"openai/gpt-35-turbo-16k","object":"model","created_at":1721728859,"cost_in":0.000003,"cost_out":0.000004,"owned_by":"openai"},{"id":"openai/gpt-3.5-turbo-16k-0613","object":"model","created_at":1721728859,"cost_in":0.000003,"cost_out":0.000004,"owned_by":"openai"},{"id":"openai/gpt-3.5-turbo-0125","object":"model","created_at":1721728859,"cost_in":5e-7,"cost_out":0.0000015,"owned_by":"openai"},{"id":"openai/gpt-4-turbo","object":"model","created_at":1721728859,"cost_in":0.00001,"cost_out":0.00003,"owned_by":"openai"},{"id":"openai/gpt-4-turbo-2024-04-09","object":"model","created_at":1721728859,"cost_in":0.00001,"cost_out":0.00003,"owned_by":"openai"},{"id":"openai/gpt-4-turbo-0125-preview","object":"model","created_at":1721728859,"cost_in":0.00001,"cost_out":0.00003,"owned_by":"openai"},{"id":"openai/text-embedding-ada-002","object":"model","created_at":1721728859,"cost_in":1e-7,"cost_out":0,"owned_by":"openai"},{"id":"openai/text-embedding-ada","object":"model","created_at":1721728859,"cost_in":1e-7,"cost_out":0,"owned_by":"openai"},{"id":"openai/text-embedding-ada-002-v2","object":"model","created_at":1721728859,"cost_in":1e-7,"cost_out":0,"owned_by":"openai"},{"id":"openai/text-embedding-3-small","object":"model","created_at":1721728859,"cost_in":2e-8,"cost_out":0,"owned_by":"openai"},{"id":"openai/text-embedding-3-large","object":"model","created_at":1721728859,"cost_in":1.3e-7,"cost_out":0,"owned_by":"openai"},{"id":"openai/gpt-4-vision-preview","object":"model","created_at":1721728859,"cost_in":0.00001,"cost_out":0.00003,"owned_by":"openai"},{"id":"openai/gpt-35-turbo-16k-0613","object":"model","created_at":1721728859,"cost_in":0.000003,"cost_out":0.000004,"owned_by":"openai"},{"id":"openai/gpt-35-turbo","object":"model","created_at":1721728858,"cost_in":0.0000015,"cost_out":0.000002,"owned_by":"openai"},{"id":"openai/gpt-3.5-turbo-instruct","object":"model","created_at":1721728858,"cost_in":0.0000015,"cost_out":0.000002,"owned_by":"openai"},{"id":"openai/gpt-3.5-turbo-instruct-0914","object":"model","created_at":1721728858,"cost_in":0.0000015,"cost_out":0.000002,"owned_by":"openai"},{"id":"openai/gpt-4","object":"model","created_at":1721728858,"cost_in":0.00003,"cost_out":0.00006,"owned_by":"openai"},{"id":"openai/gpt-4-0314","object":"model","created_at":1721728858,"cost_in":0.00003,"cost_out":0.00006,"owned_by":"openai"},{"id":"openai/gpt-4-0613","object":"model","created_at":1721728858,"cost_in":0.00003,"cost_out":0.00006,"owned_by":"openai"},{"id":"openai/gpt-4-32k","object":"model","created_at":1721728858,"cost_in":0.00006,"cost_out":0.00012,"owned_by":"openai"},{"id":"openai/gpt-4-32k-0314","object":"model","created_at":1721728858,"cost_in":0.00006,"cost_out":0.00012,"owned_by":"openai"},{"id":"openai/gpt-4-32k-0613","object":"model","created_at":1721728858,"cost_in":0.00006,"cost_out":0.00012,"owned_by":"openai"},{"id":"openai/gpt-4-0125-preview","object":"model","created_at":1721728858,"cost_in":0.00003,"cost_out":0.00006,"owned_by":"openai"},{"id":"openai/gpt-4-1106-vision-preview","object":"model","created_at":1721728858,"cost_in":0.00001,"cost_out":0.00003,"owned_by":"openai"},{"id":"openai/gpt-4o-mini","object":"model","created_at":1721728858,"cost_in":1.5e-7,"cost_out":6e-7,"owned_by":"openai"},{"id":"google-ai-studio/gemini-1.0-pro-vision-001","object":"model","created_at":1721728857,"cost_in":1.25e-7,"cost_out":3.75e-7,"owned_by":"google-ai-studio"},{"id":"groq/llama2-70b-4096","object":"model","created_at":1721728857,"cost_in":7e-7,"cost_out":8e-7,"owned_by":"groq"},{"id":"groq/gemma-7b-8192","object":"model","created_at":1721728857,"cost_in":1e-7,"cost_out":1e-7,"owned_by":"groq"},{"id":"openai/ada","object":"model","created_at":1721728857,"cost_in":4e-7,"cost_out":4e-7,"owned_by":"openai"},{"id":"openai/text-ada-001","object":"model","created_at":1721728857,"cost_in":4e-7,"cost_out":4e-7,"owned_by":"openai"},{"id":"openai/babbage","object":"model","created_at":1721728857,"cost_in":5e-7,"cost_out":5e-7,"owned_by":"openai"},{"id":"openai/curie","object":"model","created_at":1721728857,"cost_in":0.000002,"cost_out":0.000002,"owned_by":"openai"},{"id":"openai/davinci","object":"model","created_at":1721728857,"cost_in":0.00002,"cost_out":0.00002,"owned_by":"openai"},{"id":"openai/text-curie-001","object":"model","created_at":1721728857,"cost_in":0.000002,"cost_out":0.000002,"owned_by":"openai"},{"id":"openai/text-davinci-001","object":"model","created_at":1721728857,"cost_in":0.00002,"cost_out":0.00002,"owned_by":"openai"},{"id":"openai/text-davinci-002","object":"model","created_at":1721728857,"cost_in":0.00002,"cost_out":0.00002,"owned_by":"openai"},{"id":"openai/text-davinci-003","object":"model","created_at":1721728857,"cost_in":0.00002,"cost_out":0.00002,"owned_by":"openai"},{"id":"anthropic/claude-instant-1.2","object":"model","created_at":1721728856,"cost_in":0.00000163,"cost_out":0.00000551,"owned_by":"anthropic"},{"id":"anthropic/claude-3-opus-20240229","object":"model","created_at":1721728856,"cost_in":0.000015,"cost_out":0.000075,"owned_by":"anthropic"},{"id":"anthropic/claude-v1","object":"model","created_at":1721728856,"cost_in":0.000008,"cost_out":0.000024,"owned_by":"anthropic"},{"id":"anthropic/claude-2","object":"model","created_at":1721728856,"cost_in":0.000008,"cost_out":0.000024,"owned_by":"anthropic"},{"id":"anthropic/claude-3-sonnet-20240229","object":"model","created_at":1721728856,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"anthropic/claude-3-5-sonnet-20240620","object":"model","created_at":1721728856,"cost_in":0.000003,"cost_out":0.000015,"owned_by":"anthropic"},{"id":"anthropic/claude-3-haiku-20240307","object":"model","created_at":1721728856,"cost_in":2.5e-7,"cost_out":0.00000125,"owned_by":"anthropic"},{"id":"azure-openai/gpt-4-turbo-preview","object":"model","created_at":1721728856,"cost_in":0.00001,"cost_out":0.00003,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-45-turbo","object":"model","created_at":1721728856,"cost_in":0.00001,"cost_out":0.00003,"owned_by":"azure-openai"},{"id":"azure-openai/gpt4-turbo-preview","object":"model","created_at":1721728856,"cost_in":0.00001,"cost_out":0.00003,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-4-preview-1106","object":"model","created_at":1721728856,"cost_in":0.00001,"cost_out":0.00003,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-35-turbo-1106","object":"model","created_at":1721728856,"cost_in":0.0000015,"cost_out":0.000002,"owned_by":"azure-openai"},{"id":"azure-openai/gpt35","object":"model","created_at":1721728856,"cost_in":0.0000015,"cost_out":0.000002,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-35-turbo-0613","object":"model","created_at":1721728856,"cost_in":0.0000015,"cost_out":0.000002,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-4-vision","object":"model","created_at":1721728856,"cost_in":0.00001,"cost_out":0.00003,"owned_by":"azure-openai"},{"id":"azure-openai/gpt-35-16k","object":"model","created_at":1721728856,"cost_in":0.000003,"cost_out":0.000004,"owned_by":"azure-openai"}]} diff --git a/providers/cloudflare-ai-gateway/data/model_families.json b/providers/cloudflare-ai-gateway/data/model_families.json deleted file mode 100644 index 9f880a4c20..0000000000 --- a/providers/cloudflare-ai-gateway/data/model_families.json +++ /dev/null @@ -1,281 +0,0 @@ -{ - "_comment": "Model family mappings for Cloudflare AI Gateway models. Patterns are matched in order (first match wins).", - "patterns": [ - { - "pattern": "^openai/gpt-3\\.?5", - "family": "gpt-3.5-turbo" - }, - { - "pattern": "^openai/gpt-4o-mini", - "family": "gpt-4o-mini" - }, - { - "pattern": "^openai/gpt-4o", - "family": "gpt-4o" - }, - { - "pattern": "^openai/gpt-4\\.?1", - "family": "gpt-4.1" - }, - { - "pattern": "^openai/gpt-4-turbo", - "family": "gpt-4-turbo" - }, - { - "pattern": "^openai/gpt-4$", - "family": "gpt-4" - }, - { - "pattern": "^openai/gpt-5\\.?1-codex", - "family": "gpt-5.1-codex" - }, - { - "pattern": "^openai/gpt-5\\.?1", - "family": "gpt-5.1" - }, - { - "pattern": "^openai/gpt-5\\.?2", - "family": "gpt-5.2" - }, - { - "pattern": "^openai/gpt-5", - "family": "gpt-5" - }, - { - "pattern": "^openai/o1", - "family": "o1" - }, - { - "pattern": "^openai/o3-pro", - "family": "o3-pro" - }, - { - "pattern": "^openai/o3-mini", - "family": "o3-mini" - }, - { - "pattern": "^openai/o3", - "family": "o3" - }, - { - "pattern": "^openai/o4-mini", - "family": "o4-mini" - }, - { - "pattern": "^openai/o4", - "family": "o4" - }, - { - "pattern": "^openai/gpt-oss-120b", - "family": "gpt-oss-120b" - }, - { - "pattern": "^openai/gpt-oss-20b", - "family": "gpt-oss-20b" - }, - { - "pattern": "^anthropic/claude-sonnet-4", - "family": "claude-sonnet" - }, - { - "pattern": "^anthropic/claude-opus-4", - "family": "claude-opus" - }, - { - "pattern": "^anthropic/claude-haiku-4", - "family": "claude-haiku" - }, - { - "pattern": "^anthropic/claude-3\\.?5-sonnet", - "family": "claude-sonnet" - }, - { - "pattern": "^anthropic/claude-3\\.?5-haiku", - "family": "claude-haiku" - }, - { - "pattern": "^anthropic/claude-3-opus", - "family": "claude-opus" - }, - { - "pattern": "^anthropic/claude-3-sonnet", - "family": "claude-sonnet" - }, - { - "pattern": "^anthropic/claude-3-haiku", - "family": "claude-haiku" - }, - { - "pattern": "llama-4-scout", - "family": "llama-4-scout" - }, - { - "pattern": "llama-4-maverick", - "family": "llama-4-maverick" - }, - { - "pattern": "llama-guard-3", - "family": "llama-guard" - }, - { - "pattern": "llama-3\\.?3", - "family": "llama-3.3" - }, - { - "pattern": "llama-3\\.?2-11b-vision", - "family": "llama-3.2-vision" - }, - { - "pattern": "llama-3\\.?2", - "family": "llama-3.2" - }, - { - "pattern": "llama-3\\.?1", - "family": "llama-3.1" - }, - { - "pattern": "llama-3", - "family": "llama-3" - }, - { - "pattern": "llama-2", - "family": "llama-2" - }, - { - "pattern": "qwen3-embedding", - "family": "qwen3-embedding" - }, - { - "pattern": "qwen3-coder", - "family": "qwen3-coder" - }, - { - "pattern": "qwen3", - "family": "qwen3" - }, - { - "pattern": "qwen2\\.?5-coder", - "family": "qwen2.5-coder" - }, - { - "pattern": "qwen2\\.?5", - "family": "qwen2.5" - }, - { - "pattern": "qwq-32b", - "family": "qwq" - }, - { - "pattern": "deepseek-r1-distill", - "family": "deepseek-r1-distill-qwen" - }, - { - "pattern": "deepseek-r1", - "family": "deepseek-r1" - }, - { - "pattern": "deepseek-v3", - "family": "deepseek-v3" - }, - { - "pattern": "deepseek-coder", - "family": "deepseek-coder" - }, - { - "pattern": "deepseek", - "family": "deepseek" - }, - { - "pattern": "gemma-sea-lion", - "family": "gemma-sea-lion" - }, - { - "pattern": "gemma-3", - "family": "gemma-3" - }, - { - "pattern": "gemma-2", - "family": "gemma-2" - }, - { - "pattern": "gemma", - "family": "gemma" - }, - { - "pattern": "mistral-small-3", - "family": "mistral-small" - }, - { - "pattern": "mistral-7b", - "family": "mistral-7b" - }, - { - "pattern": "mistral", - "family": "mistral" - }, - { - "pattern": "granite-4", - "family": "granite-4" - }, - { - "pattern": "granite", - "family": "granite" - }, - { - "pattern": "bge-reranker", - "family": "bge-reranker" - }, - { - "pattern": "bge-m3", - "family": "bge-m3" - }, - { - "pattern": "bge-large", - "family": "bge-large" - }, - { - "pattern": "bge-base", - "family": "bge-base" - }, - { - "pattern": "bge-small", - "family": "bge-small" - }, - { - "pattern": "aura-2", - "family": "aura-2" - }, - { - "pattern": "nova-3", - "family": "nova" - }, - { - "pattern": "bart-large-cnn", - "family": "bart" - }, - { - "pattern": "distilbert", - "family": "distilbert" - }, - { - "pattern": "melotts", - "family": "melotts" - }, - { - "pattern": "m2m100", - "family": "m2m100" - }, - { - "pattern": "plamo-embedding", - "family": "plamo-embedding" - }, - { - "pattern": "smart-turn", - "family": "smart-turn" - }, - { - "pattern": "indictrans2", - "family": "indictrans2" - } - ] -} diff --git a/providers/cloudflare-ai-gateway/data/model_names.json b/providers/cloudflare-ai-gateway/data/model_names.json deleted file mode 100644 index 36a05bd0bf..0000000000 --- a/providers/cloudflare-ai-gateway/data/model_names.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "anthropic/claude-3-5-haiku": "Claude 3.5 Haiku", - "anthropic/claude-3-haiku": "Claude 3 Haiku", - "anthropic/claude-3-opus": "Claude 3 Opus", - "anthropic/claude-3-sonnet": "Claude 3 Sonnet", - "anthropic/claude-3.5-haiku": "Claude 3.5 Haiku", - "anthropic/claude-3.5-sonnet": "Claude 3.5 Sonnet", - "anthropic/claude-fable-5": "Claude Fable 5", - "anthropic/claude-haiku-4-5": "Claude Haiku 4.5", - "anthropic/claude-opus-4": "Claude Opus 4", - "anthropic/claude-opus-4-1": "Claude Opus 4.1", - "anthropic/claude-opus-4-5": "Claude Opus 4.5", - "anthropic/claude-opus-4-6": "Claude Opus 4.6", - "anthropic/claude-sonnet-4": "Claude Sonnet 4", - "anthropic/claude-sonnet-4-5": "Claude Sonnet 4.5", - "openai/gpt-3.5-turbo": "GPT 3.5 Turbo", - "openai/gpt-4": "GPT 4", - "openai/gpt-4-turbo": "GPT 4 Turbo", - "openai/gpt-4o": "GPT 4o", - "openai/gpt-4o-mini": "GPT 4o Mini", - "openai/gpt-5.1": "GPT 5.1", - "openai/gpt-5.1-codex": "GPT 5.1 Codex", - "openai/gpt-5.2": "GPT 5.2", - "openai/o1": "o1", - "openai/o3": "o3", - "openai/o3-mini": "o3 Mini", - "openai/o3-pro": "o3 Pro", - "openai/o4-mini": "o4 Mini", - "workers-ai/@cf/ai4bharat/indictrans2-en-indic-1B": "IndicTrans2 EN-Indic 1B", - "workers-ai/@cf/aisingapore/gemma-sea-lion-v4-27b-it": "Gemma SEA-LION v4 27B IT", - "workers-ai/@cf/baai/bge-base-en-v1.5": "BGE Base EN v1.5", - "workers-ai/@cf/baai/bge-large-en-v1.5": "BGE Large EN v1.5", - "workers-ai/@cf/baai/bge-m3": "BGE M3", - "workers-ai/@cf/baai/bge-reranker-base": "BGE Reranker Base", - "workers-ai/@cf/baai/bge-small-en-v1.5": "BGE Small EN v1.5", - "workers-ai/@cf/deepgram/aura-2-en": "Deepgram Aura 2 (EN)", - "workers-ai/@cf/deepgram/aura-2-es": "Deepgram Aura 2 (ES)", - "workers-ai/@cf/deepgram/nova-3": "Deepgram Nova 3", - "workers-ai/@cf/deepseek-ai/deepseek-r1-distill-qwen-32b": "DeepSeek R1 Distill Qwen 32B", - "workers-ai/@cf/facebook/bart-large-cnn": "BART Large CNN", - "workers-ai/@cf/google/gemma-3-12b-it": "Gemma 3 12B IT", - "workers-ai/@cf/huggingface/distilbert-sst-2-int8": "DistilBERT SST-2 INT8", - "workers-ai/@cf/ibm-granite/granite-4.0-h-micro": "IBM Granite 4.0 H Micro", - "workers-ai/@cf/meta/llama-2-7b-chat-fp16": "Llama 2 7B Chat FP16", - "workers-ai/@cf/meta/llama-3-8b-instruct": "Llama 3 8B Instruct", - "workers-ai/@cf/meta/llama-3-8b-instruct-awq": "Llama 3 8B Instruct AWQ", - "workers-ai/@cf/meta/llama-3.1-8b-instruct": "Llama 3.1 8B Instruct", - "workers-ai/@cf/meta/llama-3.1-8b-instruct-awq": "Llama 3.1 8B Instruct AWQ", - "workers-ai/@cf/meta/llama-3.1-8b-instruct-fp8": "Llama 3.1 8B Instruct FP8", - "workers-ai/@cf/meta/llama-3.2-11b-vision-instruct": "Llama 3.2 11B Vision Instruct", - "workers-ai/@cf/meta/llama-3.2-1b-instruct": "Llama 3.2 1B Instruct", - "workers-ai/@cf/meta/llama-3.2-3b-instruct": "Llama 3.2 3B Instruct", - "workers-ai/@cf/meta/llama-3.3-70b-instruct-fp8-fast": "Llama 3.3 70B Instruct FP8 Fast", - "workers-ai/@cf/meta/llama-4-scout-17b-16e-instruct": "Llama 4 Scout 17B 16E Instruct", - "workers-ai/@cf/meta/llama-guard-3-8b": "Llama Guard 3 8B", - "workers-ai/@cf/meta/m2m100-1.2b": "M2M100 1.2B", - "workers-ai/@cf/mistral/mistral-7b-instruct-v0.1": "Mistral 7B Instruct v0.1", - "workers-ai/@cf/mistralai/mistral-small-3.1-24b-instruct": "Mistral Small 3.1 24B Instruct", - "workers-ai/@cf/myshell-ai/melotts": "MyShell MeloTTS", - "workers-ai/@cf/openai/gpt-oss-120b": "GPT OSS 120B", - "workers-ai/@cf/openai/gpt-oss-20b": "GPT OSS 20B", - "workers-ai/@cf/pfnet/plamo-embedding-1b": "PLaMo Embedding 1B", - "workers-ai/@cf/pipecat-ai/smart-turn-v2": "Pipecat Smart Turn v2", - "workers-ai/@cf/qwen/qwen2.5-coder-32b-instruct": "Qwen 2.5 Coder 32B Instruct", - "workers-ai/@cf/qwen/qwen3-30b-a3b-fp8": "Qwen3 30B A3B FP8", - "workers-ai/@cf/qwen/qwen3-embedding-0.6b": "Qwen3 Embedding 0.6B", - "workers-ai/@cf/qwen/qwq-32b": "QwQ 32B" -} \ No newline at end of file diff --git a/providers/cloudflare-ai-gateway/scripts/01_fetch_model_data.sh b/providers/cloudflare-ai-gateway/scripts/01_fetch_model_data.sh deleted file mode 100755 index 3695f7e933..0000000000 --- a/providers/cloudflare-ai-gateway/scripts/01_fetch_model_data.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env bash -# -# Generate model TOML files for Cloudflare AI Gateway -# -# This script runs the generation pipeline: -# 1. Fetch models from Cloudflare AI Gateway API -# 2. generate_model_names.sh - Updates model_names.json with new model IDs -# 3. generate_model_toml.sh - Generates TOML files for each model -# -# Required environment variables: -# CLOUDFLARE_API_TOKEN - Your Cloudflare API token -# CLOUDFLARE_ACCOUNT_ID - Your Cloudflare account ID -# CLOUDFLARE_GATEWAY_ID - Your AI Gateway name/ID -# -# Usage: -# CLOUDFLARE_API_TOKEN=xxx CLOUDFLARE_ACCOUNT_ID=xxx CLOUDFLARE_GATEWAY_ID=xxx ./generate_models.sh -# - -set -eo pipefail - -# ============================================================================= -# Step 1: Fetch models from Cloudflare AI Gateway -# ============================================================================= - -echo "=== Step 1: Fetching models from Cloudflare AI Gateway ===" - -# ============================================================================= -# Main script -# ============================================================================= - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROVIDER_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" -DATA_DIR="${PROVIDER_DIR}/data" -API_RESPONSE_FILE="${DATA_DIR}/api_response.json" - -# Validate required environment variables -if [[ -z "${CLOUDFLARE_API_TOKEN:-}" ]]; then - echo "Error: CLOUDFLARE_API_TOKEN environment variable is required" >&2 - exit 1 -fi - -if [[ -z "${CLOUDFLARE_ACCOUNT_ID:-}" ]]; then - echo "Error: CLOUDFLARE_ACCOUNT_ID environment variable is required" >&2 - exit 1 -fi - -if [[ -z "${CLOUDFLARE_GATEWAY_ID:-}" ]]; then - echo "Error: CLOUDFLARE_GATEWAY_ID environment variable is required" >&2 - exit 1 -fi - -API_URL="https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/compat/models" - -mkdir -p "${DATA_DIR}" -RESPONSE=$(curl -s -H "Authorization: Bearer ${CLOUDFLARE_API_TOKEN}" "${API_URL}") - -# Check if the response is valid JSON with data -if ! echo "${RESPONSE}" | jq -e '.data' > /dev/null 2>&1; then - echo "Error: Invalid API response or no data returned" >&2 - echo "Response: ${RESPONSE}" >&2 - exit 1 -fi - -MODEL_COUNT=$(echo "${RESPONSE}" | jq '.data | length') - -if [[ "${MODEL_COUNT}" -eq 0 ]]; then - echo "Error: No models found in API response" >&2 - exit 1 -fi - -echo "Found ${MODEL_COUNT} models from API" -echo "${RESPONSE}" > "${API_RESPONSE_FILE}" -echo "Saved API response to ${API_RESPONSE_FILE}" \ No newline at end of file diff --git a/providers/cloudflare-ai-gateway/scripts/02_generate_model_names.sh b/providers/cloudflare-ai-gateway/scripts/02_generate_model_names.sh deleted file mode 100755 index 311c4b3c2f..0000000000 --- a/providers/cloudflare-ai-gateway/scripts/02_generate_model_names.sh +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/env bash -# -# Generate/update model_names.json for Cloudflare AI Gateway -# -# This script reads the API response from data/api_response.json and adds -# any new model IDs to model_names.json with the ID as a placeholder value. -# Existing entries are preserved. -# -# Usage: -# ./generate_model_names.sh -# - -set -eo pipefail - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROVIDER_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" -source "${SCRIPT_DIR}/utils.sh" - -# ============================================================================= -# Step 2: Update model names -# ============================================================================= - -echo "" -echo "=== Step 2: Generating / adding missing model names ===" - -# ============================================================================= -# Main script -# ============================================================================= - -DATA_DIR="${PROVIDER_DIR}/data" -MODEL_NAMES_FILE="${DATA_DIR}/model_names.json" -API_RESPONSE_FILE="${DATA_DIR}/api_response.json" - -# Check if API response file exists -if [[ ! -f "${API_RESPONSE_FILE}" ]]; then - echo "Error: API response file not found at ${API_RESPONSE_FILE}" >&2 - echo "Run generate_models.sh first to fetch the API response." >&2 - exit 1 -fi - -# Check if the response is valid JSON with data -if ! jq -e '.data' "${API_RESPONSE_FILE}" > /dev/null 2>&1; then - echo "Error: Invalid API response or no data in ${API_RESPONSE_FILE}" >&2 - exit 1 -fi - -MODEL_COUNT=$(jq '.data | length' "${API_RESPONSE_FILE}") - -if [[ "${MODEL_COUNT}" -eq 0 ]]; then - echo "Error: No models found in API response" >&2 - exit 1 -fi - -echo "Found ${MODEL_COUNT} models in API response" - -# Initialize model_names.json if it doesn't exist -if [[ ! -f "${MODEL_NAMES_FILE}" ]]; then - echo "{}" > "${MODEL_NAMES_FILE}" -fi - -ADDED_COUNT=0 -SKIPPED_COUNT=0 - -# Process each model from the API response -while IFS= read -r MODEL_JSON; do - MODEL_ID=$(echo "${MODEL_JSON}" | jq -r '.id') - - # Skip empty IDs - [[ -z "${MODEL_ID}" || "${MODEL_ID}" == "null" ]] && continue - - # Check if this model should be included - if ! should_include_model "${MODEL_ID}"; then - echo "Skipping: ${MODEL_ID} (not in include list)" - ((SKIPPED_COUNT++)) || true - continue - fi - - # Check if model already exists in model_names.json - EXISTING=$(jq -r --arg id "${MODEL_ID}" '.[$id] // empty' "${MODEL_NAMES_FILE}") - - if [[ -z "${EXISTING}" ]]; then - # Add model ID to model_names.json with ID as placeholder - echo "Adding: ${MODEL_ID}" - TMP_FILE=$(mktemp) - jq --arg id "${MODEL_ID}" '.[$id] = $id' "${MODEL_NAMES_FILE}" > "${TMP_FILE}" - mv "${TMP_FILE}" "${MODEL_NAMES_FILE}" - ((ADDED_COUNT++)) || true - else - echo "Already exists: ${MODEL_ID}" - fi -done < <(jq -c '.data[]' "${API_RESPONSE_FILE}") - -TOTAL_COUNT=$(jq 'length' "${MODEL_NAMES_FILE}") - -echo "" -echo "Summary:" -echo " Models in API: ${MODEL_COUNT}" -echo " Models skipped: ${SKIPPED_COUNT}" -echo " New entries added: ${ADDED_COUNT}" -echo " Total entries in model_names.json: ${TOTAL_COUNT}" -echo "" -echo "Done! Review model_names.json and update placeholder values with human-readable names." diff --git a/providers/cloudflare-ai-gateway/scripts/03_generate_model_toml.sh b/providers/cloudflare-ai-gateway/scripts/03_generate_model_toml.sh deleted file mode 100755 index 29ab0514c9..0000000000 --- a/providers/cloudflare-ai-gateway/scripts/03_generate_model_toml.sh +++ /dev/null @@ -1,245 +0,0 @@ -#!/usr/bin/env bash -# -# Generate model TOML files for Cloudflare AI Gateway -# -# This script reads the API response from data/api_response.json and generates -# TOML files for each model. -# -# Usage: -# ./generate_model_toml.sh -# - -set -eo pipefail - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROVIDER_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" -source "${SCRIPT_DIR}/utils.sh" - -# ============================================================================= -# Step 3: Generate TOML files -# ============================================================================= - -echo "" -echo "=== Step 3: Generating model TOML files ===" - -# ============================================================================= -# Main script -# ============================================================================= -MODELS_DIR="${PROVIDER_DIR}/models" -DATA_DIR="${PROVIDER_DIR}/data" -PROVIDERS_DIR="${PROVIDER_DIR}/.." -MODEL_NAMES_FILE="${DATA_DIR}/model_names.json" -MODEL_FAMILIES_FILE="${DATA_DIR}/model_families.json" -API_RESPONSE_FILE="${DATA_DIR}/api_response.json" - -# Check if API response file exists -if [[ ! -f "${API_RESPONSE_FILE}" ]]; then - echo "Error: API response file not found at ${API_RESPONSE_FILE}" >&2 - echo "Run generate_models.sh first to fetch the API response." >&2 - exit 1 -fi - -# Check if the response is valid JSON with data -if ! jq -e '.data' "${API_RESPONSE_FILE}" > /dev/null 2>&1; then - echo "Error: Invalid API response or no data in ${API_RESPONSE_FILE}" >&2 - exit 1 -fi - -MODEL_COUNT=$(jq '.data | length' "${API_RESPONSE_FILE}") - -if [[ "${MODEL_COUNT}" -eq 0 ]]; then - echo "Error: No models found in API response" >&2 - exit 1 -fi - -echo "Found ${MODEL_COUNT} models in API response" - -# Create a temporary file to track API model files -API_MODEL_FILES=$(mktemp) -trap "rm -f ${API_MODEL_FILES}" EXIT - -GENERATED_COUNT=0 -SKIPPED_COUNT=0 -CROSS_REF_COUNT=0 - -# ============================================================================= -# Helper function to get model family from mapping file -# ============================================================================= -get_model_family() { - local model_id="$1" - - # Return empty if families file doesn't exist - if [[ ! -f "${MODEL_FAMILIES_FILE}" ]]; then - echo "" - return - fi - - # Try to match patterns in order - local family - family=$(jq -r --arg id "${model_id}" ' - .patterns[] | .pattern as $p | .family as $f | select($id | test($p)) | $f - ' "${MODEL_FAMILIES_FILE}" | head -n 1) - - # Return family if found, empty otherwise - if [[ -n "${family}" && "${family}" != "null" ]]; then - echo "${family}" - else - echo "" - fi -} - -# Process each model from the API response -while IFS= read -r MODEL_JSON; do - MODEL_ID=$(echo "${MODEL_JSON}" | jq -r '.id') - COST_IN=$(echo "${MODEL_JSON}" | jq -r '.cost_in // 0') - COST_OUT=$(echo "${MODEL_JSON}" | jq -r '.cost_out // 0') - CREATED_AT=$(echo "${MODEL_JSON}" | jq -r '.created_at // 0') - - # Skip empty IDs - [[ -z "${MODEL_ID}" || "${MODEL_ID}" == "null" ]] && continue - - # Check if this model should be included - if ! should_include_model "${MODEL_ID}"; then - ((SKIPPED_COUNT++)) || true - echo "Skipping: ${MODEL_ID}" - continue - fi - - ((INCLUDED_COUNT++)) || true - - # Extract provider and model name - PROVIDER=$(echo "${MODEL_ID}" | cut -d'/' -f1) - MODEL_NAME=$(echo "${MODEL_ID}" | cut -d'/' -f2-) - MODEL_PATH="${MODEL_ID}.toml" - - FULL_PATH="${MODELS_DIR}/${MODEL_PATH}" - echo "${FULL_PATH}" >> "${API_MODEL_FILES}" - - # Create directory if needed - MODEL_DIR=$(dirname "${FULL_PATH}") - mkdir -p "${MODEL_DIR}" - - # Check if we should cross-reference from source provider - SOURCE_FILE=$(find_source_file "${PROVIDER}" "${MODEL_NAME}" "${PROVIDERS_DIR}" || true); - - if [[ -n "${SOURCE_FILE}" && -f "${SOURCE_FILE}" ]]; then - echo "Cross-referencing: ${MODEL_PATH} <- ${SOURCE_FILE#${PROVIDERS_DIR}/}" - cp "${SOURCE_FILE}" "${FULL_PATH}" - ((CROSS_REF_COUNT++)) || true - else - # Generate file with defaults for workers-ai, replicate, etc. - echo "Generating: ${MODEL_PATH}" - ((GENERATED_COUNT++)) || true - - # Get display name from mapping file, or add model ID to file and use as-is - DISPLAY_NAME=$(jq -r --arg id "${MODEL_ID}" '.[$id] // empty' "${MODEL_NAMES_FILE}") - if [[ -z "${DISPLAY_NAME}" ]]; then - # Add model ID to model_names.json with ID as placeholder - TMP_FILE=$(mktemp) - jq --arg id "${MODEL_ID}" '.[$id] = $id' "${MODEL_NAMES_FILE}" > "${TMP_FILE}" - mv "${TMP_FILE}" "${MODEL_NAMES_FILE}" - DISPLAY_NAME="${MODEL_ID}" - fi - # Escape double quotes for TOML string - DISPLAY_NAME="${DISPLAY_NAME//\"/\\\"}" - - # Get model family from mapping file - MODEL_FAMILY=$(get_model_family "${MODEL_ID}") - - # Convert created_at timestamp to date (YYYY-MM-DD) - if [[ "${CREATED_AT}" != "0" && "${CREATED_AT}" != "null" ]]; then - RELEASE_DATE=$(date -r "${CREATED_AT}" +%Y-%m-%d 2>/dev/null || date -d "@${CREATED_AT}" +%Y-%m-%d 2>/dev/null || date +%Y-%m-%d) - else - RELEASE_DATE=$(date +%Y-%m-%d) - fi - - # Convert cost per token to cost per million tokens - # API returns cost per token, we need cost per 1M tokens - # Treat negative or invalid costs as 0 - # Note: jq outputs scientific notation with uppercase 'E', but bc requires lowercase 'e' - if [[ "${COST_IN}" != "0" && "${COST_IN}" != "null" ]]; then - COST_IN_BC=$(echo "${COST_IN}" | tr 'E' 'e') - COST_IN_PER_M=$(echo "${COST_IN_BC} * 1000000" | bc -l | sed 's/^\./0./' | sed 's/0*$//' | sed 's/\.$//') - # If negative, set to 0 - if (( $(echo "${COST_IN_PER_M} < 0" | bc -l) )); then - COST_IN_PER_M="0" - fi - else - COST_IN_PER_M="0" - fi - - if [[ "${COST_OUT}" != "0" && "${COST_OUT}" != "null" ]]; then - COST_OUT_BC=$(echo "${COST_OUT}" | tr 'E' 'e') - COST_OUT_PER_M=$(echo "${COST_OUT_BC} * 1000000" | bc -l | sed 's/^\./0./' | sed 's/0*$//' | sed 's/\.$//') - # If negative, set to 0 - if (( $(echo "${COST_OUT_PER_M} < 0" | bc -l) )); then - COST_OUT_PER_M="0" - fi - else - COST_OUT_PER_M="0" - fi - - # Always overwrite to ensure data is up to date - # Build the TOML content with optional family field - TOML_CONTENT="name = \"${DISPLAY_NAME}\"" - if [[ -n "${MODEL_FAMILY}" ]]; then - TOML_CONTENT="${TOML_CONTENT} -family = \"${MODEL_FAMILY}\"" - fi - TOML_CONTENT="${TOML_CONTENT} -release_date = \"${RELEASE_DATE}\" -last_updated = \"${RELEASE_DATE}\" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = ${COST_IN_PER_M} -output = ${COST_OUT_PER_M} - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = [\"text\"] -output = [\"text\"]" - - echo "${TOML_CONTENT}" > "${FULL_PATH}" - fi -done < <(jq -c '.data[]' "${API_RESPONSE_FILE}") - -# Find and remove models that are not in the API response -echo "" -echo "Checking for models to remove..." -REMOVED_COUNT=0 - -# Find all existing .toml files in models directory -if [[ -d "${MODELS_DIR}" ]]; then - while IFS= read -r -d '' EXISTING_FILE; do - if ! grep -qxF "${EXISTING_FILE}" "${API_MODEL_FILES}"; then - REL_PATH="${EXISTING_FILE#${MODELS_DIR}/}" - echo "Removing model not in API: ${REL_PATH}" - rm -f "${EXISTING_FILE}" - ((REMOVED_COUNT++)) || true - fi - done < <(find "${MODELS_DIR}" -name "*.toml" -type f -print0) -fi - -# Clean up empty directories -find "${MODELS_DIR}" -type d -empty -delete 2>/dev/null || true - -FINAL_COUNT=$(find "${MODELS_DIR}" -name "*.toml" -type f | wc -l | tr -d ' ') - -echo "" -echo "Summary:" -echo " Models from API: ${MODEL_COUNT}" -echo " Models skipped (filtered): ${SKIPPED_COUNT}" -echo " Models cross-referenced: ${CROSS_REF_COUNT}" -echo " Models generated: ${GENERATED_COUNT}" -echo " Models removed: ${REMOVED_COUNT}" -echo " Total models: ${FINAL_COUNT}" -echo "" -echo "Done!" diff --git a/providers/cloudflare-ai-gateway/scripts/utils.sh b/providers/cloudflare-ai-gateway/scripts/utils.sh deleted file mode 100644 index 3a11f938e5..0000000000 --- a/providers/cloudflare-ai-gateway/scripts/utils.sh +++ /dev/null @@ -1,180 +0,0 @@ -# Shared utilities for Cloudflare AI Gateway scripts -# Source this file: source "$(dirname "${BASH_SOURCE[0]}")/utils.sh" - -# ============================================================================= -# CONFIGURATION: Providers and models to include -# ============================================================================= - -# Providers to include ALL models from (generated with defaults) -INCLUDE_ALL_PROVIDERS="workers-ai" - -# Namespaces to skip entirely (provider/namespace format) -SKIP_NAMESPACES="replicate/replicate-internal" - -# Specific models to skip (exact model IDs) -SKIP_MODELS="aura-1 whisper" - -# Providers to cross-reference from source provider files -CROSS_REFERENCE_PROVIDERS="openai anthropic" - -# For cross-referenced providers, only include these well-known models (regex patterns) -# Format: "provider/model-pattern" -# Use $ anchor for exact matches to avoid dated versions and variants -# NOTE: These patterns match the Cloudflare API format (which uses BOTH dots and hyphens) -# The filename conversion to hyphens happens in 03_generate_model_toml.sh -WELL_KNOWN_MODELS=( - # OpenAI - canonical names only, no dated versions - # API uses BOTH dots and hyphens: gpt-5.1 AND gpt-5-1, gpt-3.5-turbo AND gpt-3-5-turbo - "openai/gpt-5[\.-]2$" - "openai/gpt-5[\.-]1$" - "openai/gpt-5[\.-]1-codex$" - "openai/gpt-4o$" - "openai/gpt-4o-mini$" - "openai/gpt-4-turbo$" - "openai/gpt-4$" - "openai/gpt-3[\.-]5-turbo$" - "openai/o1$" - "openai/o3$" - "openai/o3-mini$" - "openai/o3-pro$" - "openai/o4-mini$" - - # Anthropic - canonical names only, no dated versions or duplicates - # API uses BOTH dots and hyphens: claude-3.5-sonnet AND claude-3-5-sonnet - "anthropic/claude-sonnet-4-5$" - "anthropic/claude-opus-4-6$" - "anthropic/claude-opus-4-5$" - "anthropic/claude-haiku-4-5$" - "anthropic/claude-opus-4-1$" - "anthropic/claude-sonnet-4$" - "anthropic/claude-opus-4$" - "anthropic/claude-3[\.-]5-sonnet$" - "anthropic/claude-3[\.-]5-haiku$" - "anthropic/claude-3-opus$" - "anthropic/claude-3-sonnet$" - "anthropic/claude-3-haiku$" -) - -# ============================================================================= -# Helper function to get mapped model name for source file lookup -# ============================================================================= -# This function maps Cloudflare API model names to source provider file names. -# Input: model name from API (may have dots, e.g., "claude-3.5-sonnet") -# Output: source file name (uses hyphens, e.g., "claude-3-5-sonnet-20241022") -get_mapped_name() { - local model_name="$1" - # First convert dots to hyphens for consistent lookup - local normalized_name=$(echo "${model_name}" | sed 's/\./-/g') - - case "${normalized_name}" in - # Anthropic mappings - map to source file names with date suffixes - "claude-sonnet-4-5") echo "claude-sonnet-4-5" ;; - "claude-opus-4-6") echo "claude-opus-4-6" ;; - "claude-opus-4-5") echo "claude-opus-4-5" ;; - "claude-haiku-4-5") echo "claude-haiku-4-5" ;; - "claude-opus-4-1") echo "claude-opus-4-1" ;; - "claude-sonnet-4") echo "claude-sonnet-4-0" ;; - "claude-opus-4") echo "claude-opus-4-0" ;; - "claude-3-5-sonnet") echo "claude-3-5-sonnet-20241022" ;; - "claude-3-5-haiku") echo "claude-3-5-haiku-latest" ;; - "claude-3-opus") echo "claude-3-opus-20240229" ;; - "claude-3-sonnet") echo "claude-3-sonnet-20240229" ;; - "claude-3-haiku") echo "claude-3-haiku-20240307" ;; - # OpenAI mappings - source files use dots, but we look up with hyphens - "gpt-5-1") echo "gpt-5.1" ;; - "gpt-5-2") echo "gpt-5.2" ;; - "gpt-5-1-codex") echo "gpt-5.1-codex" ;; - "gpt-3-5-turbo") echo "gpt-3.5-turbo" ;; - *) echo "${normalized_name}" ;; - esac -} - -# ============================================================================= -# Helper function to check if a model should be included -# ============================================================================= -should_include_model() { - local model_id="$1" - local provider - - # Extract provider from model ID (first path segment) - provider=$(echo "${model_id}" | cut -d'/' -f1) - - # Check if model matches any skip pattern (partial match on model name) - for skip in ${SKIP_MODELS}; do - if [[ "${model_id}" == *"${skip}"* ]]; then - return 1 # Exclude - fi - done - - # Check if model is in a skipped namespace - for ns in ${SKIP_NAMESPACES}; do - if [[ "${model_id}" == ${ns}/* ]]; then - return 1 # Exclude - fi - done - - # Check if provider is in the "include all" list - for p in ${INCLUDE_ALL_PROVIDERS}; do - if [[ "${provider}" == "${p}" ]]; then - # Special case for workers-ai: only include models with workers-ai/@cf/ prefix - if [[ "${provider}" == "workers-ai" && "${model_id}" != "workers-ai/@cf/"* ]]; then - return 1 # Exclude workers-ai models that don't have @cf/ namespace - fi - return 0 # Include - fi - done - - # Check if model matches any well-known pattern - for pattern in "${WELL_KNOWN_MODELS[@]}"; do - if echo "${model_id}" | grep -qE "^${pattern}"; then - return 0 # Include - fi - done - - # Skip - return 1 -} - -# ============================================================================= -# Helper function to find source file for cross-referenced models -# ============================================================================= -find_source_file() { - local provider="$1" - local model_name="$2" - local providers_dir="$3" - - # Check if provider is in cross-reference list - local is_cross_ref=false - for p in ${CROSS_REFERENCE_PROVIDERS}; do - if [[ "${provider}" == "${p}" ]]; then - is_cross_ref=true - break - fi - done - - if [[ "${is_cross_ref}" != "true" ]]; then - return 1 - fi - - # Get mapped name - local mapped_name - mapped_name=$(get_mapped_name "${model_name}") - - local source_file="${providers_dir}/${provider}/models/${mapped_name}.toml" - - if [[ -f "${source_file}" ]]; then - echo "${source_file}" - return 0 - fi - - # Try original name if mapping didn't work - if [[ "${mapped_name}" != "${model_name}" ]]; then - source_file="${providers_dir}/${provider}/models/${model_name}.toml" - if [[ -f "${source_file}" ]]; then - echo "${source_file}" - return 0 - fi - fi - - return 1 -} From 5d5c816f1cce1daf583c99b04f109424ef05a122 Mon Sep 17 00:00:00 2001 From: Michael Dwan Date: Mon, 6 Jul 2026 12:34:51 -0600 Subject: [PATCH 2/6] symlink AIG workers-ai/@cf at cloudflare-workers-ai/@cf Delete the 43 hand-generated TOMLs under providers/cloudflare-ai-gateway/models/workers-ai/@cf and replace the subtree with a symlink to ../../../cloudflare-workers-ai/models/@cf so AIG's Workers AI catalog is the Cloudflare Workers AI catalog by construction. generate.ts, sync/index.ts, packages/web/src/render.tsx, and compare-model-migrations.ts all glob TOMLs with followSymlinks: true, so the symlink resolves at build/validate time and AIG's provider catalog materializes with WAI's contents. Merging a WAI sync PR now updates AIG's catalog on the next deploy too, through the same file. Net catalog change for AIG's workers-ai/: - 43 -> 22 models - drops 15 non-chat entries unique to AIG (BGE, Deepgram, MeloTTS, m2m100, distilbert, etc.) and 9 deprecated chat models - picks up 3 net-new WAI models (kimi-k2.7-code, glm-5.2, gemma-4-26b-a4b-it) Also rewrites providers/cloudflare-ai-gateway/README.md to describe the symlink and drop the (now-removed) shell pipeline docs. --- providers/cloudflare-ai-gateway/README.md | 261 ++---------------- .../models/workers-ai/@cf | 1 + .../ai4bharat/indictrans2-en-indic-1B.toml | 22 -- .../aisingapore/gemma-sea-lion-v4-27b-it.toml | 22 -- .../workers-ai/@cf/baai/bge-base-en-v1.5.toml | 22 -- .../@cf/baai/bge-large-en-v1.5.toml | 22 -- .../models/workers-ai/@cf/baai/bge-m3.toml | 22 -- .../@cf/baai/bge-reranker-base.toml | 22 -- .../@cf/baai/bge-small-en-v1.5.toml | 22 -- .../workers-ai/@cf/deepgram/aura-2-en.toml | 22 -- .../workers-ai/@cf/deepgram/aura-2-es.toml | 22 -- .../workers-ai/@cf/deepgram/nova-3.toml | 22 -- .../deepseek-r1-distill-qwen-32b.toml | 22 -- .../@cf/facebook/bart-large-cnn.toml | 22 -- .../workers-ai/@cf/google/gemma-3-12b-it.toml | 22 -- .../huggingface/distilbert-sst-2-int8.toml | 22 -- .../@cf/ibm-granite/granite-4.0-h-micro.toml | 22 -- .../@cf/meta/llama-2-7b-chat-fp16.toml | 22 -- .../@cf/meta/llama-3-8b-instruct-awq.toml | 22 -- .../@cf/meta/llama-3-8b-instruct.toml | 22 -- .../@cf/meta/llama-3.1-8b-instruct-awq.toml | 22 -- .../@cf/meta/llama-3.1-8b-instruct-fp8.toml | 22 -- .../@cf/meta/llama-3.1-8b-instruct.toml | 22 -- .../meta/llama-3.2-11b-vision-instruct.toml | 22 -- .../@cf/meta/llama-3.2-1b-instruct.toml | 22 -- .../@cf/meta/llama-3.2-3b-instruct.toml | 22 -- .../meta/llama-3.3-70b-instruct-fp8-fast.toml | 22 -- .../meta/llama-4-scout-17b-16e-instruct.toml | 22 -- .../workers-ai/@cf/meta/llama-guard-3-8b.toml | 22 -- .../workers-ai/@cf/meta/m2m100-1.2b.toml | 22 -- .../@cf/mistral/mistral-7b-instruct-v0.1.toml | 22 -- .../mistral-small-3.1-24b-instruct.toml | 22 -- .../workers-ai/@cf/moonshotai/kimi-k2.5.toml | 32 --- .../workers-ai/@cf/moonshotai/kimi-k2.6.toml | 32 --- .../workers-ai/@cf/myshell-ai/melotts.toml | 22 -- .../@cf/nvidia/nemotron-3-120b-a12b.toml | 29 -- .../workers-ai/@cf/openai/gpt-oss-120b.toml | 21 -- .../workers-ai/@cf/openai/gpt-oss-20b.toml | 21 -- .../@cf/pfnet/plamo-embedding-1b.toml | 22 -- .../@cf/pipecat-ai/smart-turn-v2.toml | 22 -- .../@cf/qwen/qwen2.5-coder-32b-instruct.toml | 22 -- .../@cf/qwen/qwen3-30b-a3b-fp8.toml | 22 -- .../@cf/qwen/qwen3-embedding-0.6b.toml | 22 -- .../models/workers-ai/@cf/qwen/qwq-32b.toml | 22 -- .../workers-ai/@cf/zai-org/glm-4.7-flash.toml | 27 -- .../workers-ai/@cf/zai-org/glm-5.2.toml | 15 - .../models/@cf/zai-org/glm-5.2.toml | 3 + 47 files changed, 25 insertions(+), 1231 deletions(-) create mode 120000 providers/cloudflare-ai-gateway/models/workers-ai/@cf delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/ai4bharat/indictrans2-en-indic-1B.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/aisingapore/gemma-sea-lion-v4-27b-it.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-base-en-v1.5.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-large-en-v1.5.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-m3.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-reranker-base.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-small-en-v1.5.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/deepgram/aura-2-en.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/deepgram/aura-2-es.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/deepgram/nova-3.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/deepseek-ai/deepseek-r1-distill-qwen-32b.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/facebook/bart-large-cnn.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/google/gemma-3-12b-it.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/huggingface/distilbert-sst-2-int8.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/ibm-granite/granite-4.0-h-micro.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-2-7b-chat-fp16.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3-8b-instruct-awq.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3-8b-instruct.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.1-8b-instruct-awq.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.1-8b-instruct-fp8.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.1-8b-instruct.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.2-11b-vision-instruct.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.2-1b-instruct.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.2-3b-instruct.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.3-70b-instruct-fp8-fast.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-4-scout-17b-16e-instruct.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-guard-3-8b.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/m2m100-1.2b.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/mistral/mistral-7b-instruct-v0.1.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/mistralai/mistral-small-3.1-24b-instruct.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/moonshotai/kimi-k2.5.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/moonshotai/kimi-k2.6.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/myshell-ai/melotts.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/nvidia/nemotron-3-120b-a12b.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/openai/gpt-oss-120b.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/openai/gpt-oss-20b.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/pfnet/plamo-embedding-1b.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/pipecat-ai/smart-turn-v2.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/qwen/qwen2.5-coder-32b-instruct.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/qwen/qwen3-30b-a3b-fp8.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/qwen/qwen3-embedding-0.6b.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/qwen/qwq-32b.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/zai-org/glm-4.7-flash.toml delete mode 100644 providers/cloudflare-ai-gateway/models/workers-ai/@cf/zai-org/glm-5.2.toml diff --git a/providers/cloudflare-ai-gateway/README.md b/providers/cloudflare-ai-gateway/README.md index 06d13eee89..3884a7ece4 100644 --- a/providers/cloudflare-ai-gateway/README.md +++ b/providers/cloudflare-ai-gateway/README.md @@ -1,255 +1,36 @@ -# Cloudflare AI Gateway Provider +# Cloudflare AI Gateway -This provider enables model management for Cloudflare AI Gateway, which acts as a unified proxy for multiple AI providers (OpenAI, Anthropic, Workers AI, Replicate, etc.). +Cloudflare AI Gateway proxies multiple upstream model providers behind a single endpoint. This provider surfaces the subset of that catalog that's kept in-repo. -## Overview - -Cloudflare AI Gateway provides a compatibility layer that allows you to access models from various providers through a single endpoint. This provider automatically fetches available models from the Cloudflare API and generates TOML configuration files for use in the models.dev system. - -## Directory Structure +## Catalog layout ``` -cloudflare-ai-gateway/ -├── data/ -│ ├── api_response.json # Cached API response from Cloudflare -│ └── model_names.json # Human-readable name mappings -├── models/ # Generated TOML files -│ ├── anthropic/ -│ ├── openai/ -│ ├── replicate/ -│ └── workers-ai/ -├── scripts/ -│ ├── 01_fetch_model_data.sh # Fetches models from Cloudflare API -│ ├── 02_generate_model_names.sh # Updates model name mappings -│ ├── 03_generate_model_toml.sh # Generates TOML files -│ └── utils.sh # Shared utility functions -├── provider.toml # Provider configuration -└── README.md # This file -``` - -## How It Works - -### 1. Model Fetching (01_fetch_model_data.sh) - -This script fetches the list of available models from the Cloudflare AI Gateway API: - -- **API Endpoint**: `https://gateway.ai.cloudflare.com/v1/{ACCOUNT_ID}/{GATEWAY_ID}/compat/models` -- **Authentication**: Uses `CLOUDFLARE_API_TOKEN` for authorization -- **Output**: Saves the API response to `data/api_response.json` - -The API returns model data including: -- Model ID (e.g., `openai/gpt-4o`, `anthropic/claude-3.5-sonnet`) -- Cost per token (input and output) -- Creation timestamp -- Other metadata - -### 2. Model Name Generation (02_generate_model_names.sh) - -This script manages the `data/model_names.json` file, which maps model IDs to human-readable names: - -- Reads from `data/api_response.json` -- Adds new model IDs to `model_names.json` (if not already present) -- Preserves existing name mappings -- Filters models based on configuration in `utils.sh` - -**Model Filtering**: -- Includes ALL models from: `workers-ai`, `replicate` -- Includes ONLY well-known models from: `openai`, `anthropic` -- Skips namespaces: `replicate/replicate-internal` -- Skips specific models: `aura-1`, `whisper` - -### 3. TOML Generation (03_generate_model_toml.sh) - -This script generates TOML configuration files for each model: - -**Two Generation Strategies**: - -1. **Cross-referencing** (for OpenAI and Anthropic): - - Copies TOML files from the source provider directories - - Maps Cloudflare model names to canonical provider names - - Example: `anthropic/claude-3.5-sonnet` → `../../anthropic/models/claude-3-5-sonnet-20241022.toml` - -2. **Auto-generation** (for Workers AI and Replicate): - - Generates TOML files with default values - - Uses cost and metadata from the API response - - Converts cost per token → cost per million tokens - - Sets default capabilities (context length, modalities, etc.) - -**Generated TOML Structure**: -```toml -name = "Model Name" -release_date = "2024-01-01" -last_updated = "2024-01-01" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.15 # USD per 1M input tokens -output = 0.60 # USD per 1M output tokens - -[limit] -context = 128000 # Max context tokens -output = 16384 # Max output tokens - -[modalities] -input = ["text"] -output = ["text"] +providers/cloudflare-ai-gateway/models/ +├── anthropic/ # hand-maintained +├── openai/ # hand-maintained +└── workers-ai/ # mirrored from providers/cloudflare-workers-ai ``` -### 4. Utilities (utils.sh) - -Shared configuration and helper functions: - -**Configuration**: -- `INCLUDE_ALL_PROVIDERS`: Providers to include all models from -- `CROSS_REFERENCE_PROVIDERS`: Providers to copy from source directories -- `WELL_KNOWN_MODELS`: Regex patterns for specific models to include -- `SKIP_NAMESPACES`: Namespaces to exclude -- `SKIP_MODELS`: Specific models to exclude +### `workers-ai/` -**Helper Functions**: -- `should_include_model()`: Determines if a model should be included -- `get_mapped_name()`: Maps Cloudflare names to source provider names -- `find_source_file()`: Locates source TOML files for cross-referencing +`workers-ai/@cf` is a symlink to `../../../cloudflare-workers-ai/models/@cf`. AIG's Workers AI catalog is the Cloudflare Workers AI catalog by construction -- there's no separate sync, no separate PR, no chance of drift. When the hourly `cloudflare-workers-ai` sync opens a PR that changes TOMLs under `providers/cloudflare-workers-ai/models/@cf/`, merging it updates AIG's `workers-ai/` catalog on the next deploy via `followSymlinks: true` in the build glob. -## Usage +The scope of `workers-ai/` therefore tracks the WAI sync exactly: whatever `bun models:sync cloudflare-workers-ai` produces, AIG surfaces. Broadening WAI's source (e.g. to cover embeddings, ASR, TTS) automatically broadens AIG. -### Prerequisites +### `openai/` and `anthropic/` -- Cloudflare account with AI Gateway configured -- Required environment variables: - - `CLOUDFLARE_API_TOKEN`: Your Cloudflare API token - - `CLOUDFLARE_ACCOUNT_ID`: Your Cloudflare account ID - - `CLOUDFLARE_GATEWAY_ID`: Your AI Gateway name/ID +These subtrees are hand-authored TOMLs for the OpenAI- and Anthropic-compatible routes AIG exposes. They're intentionally curated rather than synced, and are not touched by any model sync provider. -### Running the Scripts +## Provider configuration -Run scripts individually or in sequence: +`provider.toml` uses the `ai-gateway-provider` npm package, which posts to AIG's +universal endpoint (`https://gateway.ai.cloudflare.com/v1/{account}/{gateway}`). -```bash -# Step 1: Fetch model data from Cloudflare API -cd scripts -CLOUDFLARE_API_TOKEN=xxx \ -CLOUDFLARE_ACCOUNT_ID=xxx \ -CLOUDFLARE_GATEWAY_ID=xxx \ -./01_fetch_model_data.sh - -# Step 2: Update model name mappings -./02_generate_model_names.sh - -# Step 3: Generate TOML files -./03_generate_model_toml.sh -``` - -### Configuration - -Edit `scripts/utils.sh` to customize: - -1. **Add a provider to include all models**: -```bash -INCLUDE_ALL_PROVIDERS="workers-ai replicate my-new-provider" -``` - -2. **Add a well-known model**: -```bash -WELL_KNOWN_MODELS=( - # ... existing patterns ... - "openai/gpt-5$" -) -``` - -3. **Skip a namespace**: -```bash -SKIP_NAMESPACES="replicate/replicate-internal my-provider/internal" -``` - -4. **Cross-reference a provider**: -```bash -CROSS_REFERENCE_PROVIDERS="openai anthropic google" -``` - -### Model Name Mappings - -Edit `data/model_names.json` to provide human-readable names: - -```json -{ - "workers-ai/llama-3-8b-instruct": "Llama 3 8B Instruct", - "openai/gpt-4o": "GPT-4o", - "anthropic/claude-3.5-sonnet": "Claude 3.5 Sonnet" -} -``` - -## Model ID Format - -Cloudflare uses BOTH dots and hyphens in model IDs (the API returns both formats): -- **OpenAI**: `openai/gpt-5.1` OR `openai/gpt-5-1`, `openai/gpt-3.5-turbo` OR `openai/gpt-3-5-turbo` -- **Anthropic**: `anthropic/claude-3.5-sonnet` OR `anthropic/claude-3-5-sonnet`, `anthropic/claude-haiku-4-5` -- **Workers AI**: `workers-ai/@cf/meta/llama-3-8b-instruct` -- **Replicate**: `replicate/meta/meta-llama-3-70b-instruct` - -**Important**: The API returns duplicate models with different naming conventions (dots vs hyphens). The WELL_KNOWN_MODELS patterns handle both formats using `[\.-]` regex to match either a dot or hyphen. - -**File Path Conversion**: -- Dots are preserved in filenames: `openai/gpt-5.1.toml` -- Workers AI special handling: `workers-ai/@cf/meta/llama` → `workers-ai/llama.toml` - -## Cross-Referencing Logic - -For OpenAI and Anthropic models, the scripts map Cloudflare model IDs to canonical provider filenames: - -**Anthropic Mappings**: -- `claude-3.5-sonnet` → `claude-3-5-sonnet-20241022.toml` -- `claude-3.5-haiku` → `claude-3-5-haiku-latest.toml` -- `claude-3-opus` → `claude-3-opus-20240229.toml` - -**OpenAI Mappings**: -- `gpt-5.1` → `gpt-5.1.toml` -- `gpt-3.5-turbo` → `gpt-3.5-turbo.toml` - -This ensures consistency with the canonical provider definitions while supporting Cloudflare's naming conventions. - -## Cleanup - -The TOML generation script automatically: -- Removes models that are no longer in the API response -- Cleans up empty directories -- Maintains a clean models directory - -## Troubleshooting - -**API errors**: -- Verify environment variables are set correctly -- Check API token has necessary permissions -- Ensure Gateway ID matches your Cloudflare configuration - -**Missing models**: -- Check if the model is filtered by `utils.sh` configuration -- Review `WELL_KNOWN_MODELS` patterns -- Verify the model exists in `data/api_response.json` - -**Cross-referencing failures**: -- Ensure source provider directories exist (e.g., `../openai/models/`) -- Check model name mappings in `get_mapped_name()` -- Verify source TOML files exist with correct names - -## Provider Configuration - -The `provider.toml` file defines how OpenCode connects to Cloudflare AI Gateway: - -```toml -name = "Cloudflare AI Gateway" -env = ["CLOUDFLARE_API_TOKEN", "CLOUDFLARE_ACCOUNT_ID", "CLOUDFLARE_GATEWAY_ID"] -npm = "@ai-sdk/openai-compatible" -api = "https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/compat/" -doc = "https://developers.cloudflare.com/ai-gateway/" -``` +Required env vars: `CLOUDFLARE_API_TOKEN`, `CLOUDFLARE_ACCOUNT_ID`, `CLOUDFLARE_GATEWAY_ID`. -## Additional Resources +## References -- [Cloudflare AI Gateway Documentation](https://developers.cloudflare.com/ai-gateway/) -- [OpenAI Compatibility API](https://developers.cloudflare.com/ai-gateway/providers/openai/) -- [Vercel AI SDK](https://sdk.vercel.ai/) +- [Cloudflare AI Gateway](https://developers.cloudflare.com/ai-gateway/) +- [OpenAI compatibility](https://developers.cloudflare.com/ai-gateway/usage/providers/openai/) +- [Anthropic compatibility](https://developers.cloudflare.com/ai-gateway/usage/providers/anthropic/) +- [Workers AI catalog](https://developers.cloudflare.com/workers-ai/models/) diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf b/providers/cloudflare-ai-gateway/models/workers-ai/@cf new file mode 120000 index 0000000000..ddb6d9311c --- /dev/null +++ b/providers/cloudflare-ai-gateway/models/workers-ai/@cf @@ -0,0 +1 @@ +../../../cloudflare-workers-ai/models/@cf \ No newline at end of file diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/ai4bharat/indictrans2-en-indic-1B.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/ai4bharat/indictrans2-en-indic-1B.toml deleted file mode 100644 index 53c290b3e8..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/ai4bharat/indictrans2-en-indic-1B.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "IndicTrans2 EN-Indic 1B" -description = "General-purpose chat model for instruction following, writing, and analysis" -family = "indictrans" -release_date = "2025-09-25" -last_updated = "2025-09-25" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.34 -output = 0.34 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/aisingapore/gemma-sea-lion-v4-27b-it.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/aisingapore/gemma-sea-lion-v4-27b-it.toml deleted file mode 100644 index 78b80a2dbb..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/aisingapore/gemma-sea-lion-v4-27b-it.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Gemma SEA-LION v4 27B IT" -description = "Open Gemma instruction model for efficient chat and self-hosted deployments" -family = "gemma" -release_date = "2025-09-25" -last_updated = "2025-09-25" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.35 -output = 0.56 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-base-en-v1.5.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-base-en-v1.5.toml deleted file mode 100644 index 50395bd259..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-base-en-v1.5.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "BGE Base EN v1.5" -description = "General-purpose chat model for instruction following, writing, and analysis" -family = "bge" -release_date = "2025-04-03" -last_updated = "2025-04-03" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.067 -output = 0 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-large-en-v1.5.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-large-en-v1.5.toml deleted file mode 100644 index 561a3ea140..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-large-en-v1.5.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "BGE Large EN v1.5" -description = "Flagship model for demanding analysis, coding, and production agent workflows" -family = "bge" -release_date = "2025-04-03" -last_updated = "2025-04-03" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.2 -output = 0 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-m3.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-m3.toml deleted file mode 100644 index 320ced9c56..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-m3.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "BGE M3" -description = "Flagship model for demanding analysis, coding, and production agent workflows" -family = "bge" -release_date = "2025-04-03" -last_updated = "2025-04-03" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.012 -output = 0 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-reranker-base.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-reranker-base.toml deleted file mode 100644 index 4847191c81..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-reranker-base.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "BGE Reranker Base" -description = "Reranking model for improving retrieval quality in search and recommendation systems" -family = "bge" -release_date = "2025-04-09" -last_updated = "2025-04-09" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.0031 -output = 0 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-small-en-v1.5.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-small-en-v1.5.toml deleted file mode 100644 index 0be3f8ade4..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/baai/bge-small-en-v1.5.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "BGE Small EN v1.5" -description = "Efficient model for low-latency assistance, extraction, and routine automation" -family = "bge" -release_date = "2025-04-03" -last_updated = "2025-04-03" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.02 -output = 0 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/deepgram/aura-2-en.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/deepgram/aura-2-en.toml deleted file mode 100644 index ef62aaf0f8..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/deepgram/aura-2-en.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Deepgram Aura 2 (EN)" -description = "General-purpose chat model for instruction following, writing, and analysis" -family = "aura" -release_date = "2025-11-14" -last_updated = "2025-11-14" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0 -output = 0 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/deepgram/aura-2-es.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/deepgram/aura-2-es.toml deleted file mode 100644 index 554e48a4f0..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/deepgram/aura-2-es.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Deepgram Aura 2 (ES)" -description = "General-purpose chat model for instruction following, writing, and analysis" -family = "aura" -release_date = "2025-11-14" -last_updated = "2025-11-14" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0 -output = 0 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/deepgram/nova-3.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/deepgram/nova-3.toml deleted file mode 100644 index 9df4a0493b..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/deepgram/nova-3.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Deepgram Nova 3" -description = "General-purpose chat model for instruction following, writing, and analysis" -family = "nova" -release_date = "2025-11-14" -last_updated = "2025-11-14" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0 -output = 0 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/deepseek-ai/deepseek-r1-distill-qwen-32b.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/deepseek-ai/deepseek-r1-distill-qwen-32b.toml deleted file mode 100644 index d55d2b356e..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/deepseek-ai/deepseek-r1-distill-qwen-32b.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "DeepSeek R1 Distill Qwen 32B" -description = "Qwen reasoning model for deliberate problem solving, math, and coding" -family = "deepseek-thinking" -release_date = "2025-04-03" -last_updated = "2025-04-03" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.5 -output = 4.88 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/facebook/bart-large-cnn.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/facebook/bart-large-cnn.toml deleted file mode 100644 index ca5bd15c40..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/facebook/bart-large-cnn.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "BART Large CNN" -description = "Flagship model for demanding analysis, coding, and production agent workflows" -family = "bart" -release_date = "2025-04-09" -last_updated = "2025-04-09" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0 -output = 0 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/google/gemma-3-12b-it.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/google/gemma-3-12b-it.toml deleted file mode 100644 index 9de47f0d21..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/google/gemma-3-12b-it.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Gemma 3 12B IT" -description = "Open Gemma instruction model for efficient chat and self-hosted deployments" -family = "gemma" -release_date = "2025-04-11" -last_updated = "2025-04-11" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.35 -output = 0.56 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/huggingface/distilbert-sst-2-int8.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/huggingface/distilbert-sst-2-int8.toml deleted file mode 100644 index 1379684346..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/huggingface/distilbert-sst-2-int8.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "DistilBERT SST-2 INT8" -description = "General-purpose chat model for instruction following, writing, and analysis" -family = "distilbert" -release_date = "2025-04-03" -last_updated = "2025-04-03" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.026 -output = 0 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/ibm-granite/granite-4.0-h-micro.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/ibm-granite/granite-4.0-h-micro.toml deleted file mode 100644 index 48851b3d73..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/ibm-granite/granite-4.0-h-micro.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "IBM Granite 4.0 H Micro" -description = "Efficient model for low-latency assistance, extraction, and routine automation" -family = "granite" -release_date = "2025-10-15" -last_updated = "2025-10-15" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.017 -output = 0.11 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-2-7b-chat-fp16.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-2-7b-chat-fp16.toml deleted file mode 100644 index d48b8fc4e0..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-2-7b-chat-fp16.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Llama 2 7B Chat FP16" -description = "Open Llama instruction model for multilingual chat, reasoning, and coding" -family = "llama" -release_date = "2025-04-03" -last_updated = "2025-04-03" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.56 -output = 6.67 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3-8b-instruct-awq.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3-8b-instruct-awq.toml deleted file mode 100644 index 2864286bd4..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3-8b-instruct-awq.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Llama 3 8B Instruct AWQ" -description = "Open Llama instruction model for multilingual chat, reasoning, and coding" -family = "llama" -release_date = "2025-04-03" -last_updated = "2025-04-03" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.12 -output = 0.27 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3-8b-instruct.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3-8b-instruct.toml deleted file mode 100644 index 125198fb74..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3-8b-instruct.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Llama 3 8B Instruct" -description = "Open Llama instruction model for multilingual chat, reasoning, and coding" -family = "llama" -release_date = "2025-04-03" -last_updated = "2025-04-03" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.28 -output = 0.83 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.1-8b-instruct-awq.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.1-8b-instruct-awq.toml deleted file mode 100644 index 0c764f06c6..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.1-8b-instruct-awq.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Llama 3.1 8B Instruct AWQ" -description = "Open Llama instruction model for multilingual chat, reasoning, and coding" -family = "llama" -release_date = "2025-04-03" -last_updated = "2025-04-03" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.12 -output = 0.27 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.1-8b-instruct-fp8.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.1-8b-instruct-fp8.toml deleted file mode 100644 index 57df0b8fb1..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.1-8b-instruct-fp8.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Llama 3.1 8B Instruct FP8" -description = "Open Llama instruction model for multilingual chat, reasoning, and coding" -family = "llama" -release_date = "2025-04-03" -last_updated = "2025-04-03" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.15 -output = 0.29 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.1-8b-instruct.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.1-8b-instruct.toml deleted file mode 100644 index 6db81c336e..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.1-8b-instruct.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Llama 3.1 8B Instruct" -description = "Open Llama instruction model for multilingual chat, reasoning, and coding" -family = "llama" -release_date = "2025-04-03" -last_updated = "2025-04-03" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.28 -output = 0.8299999999999999 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.2-11b-vision-instruct.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.2-11b-vision-instruct.toml deleted file mode 100644 index 75023bc81e..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.2-11b-vision-instruct.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Llama 3.2 11B Vision Instruct" -description = "Open Llama instruction model for multilingual chat, reasoning, and coding" -family = "llama" -release_date = "2025-04-03" -last_updated = "2025-04-03" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.049 -output = 0.68 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.2-1b-instruct.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.2-1b-instruct.toml deleted file mode 100644 index 4e66eff7eb..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.2-1b-instruct.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Llama 3.2 1B Instruct" -description = "Open Llama instruction model for multilingual chat, reasoning, and coding" -family = "llama" -release_date = "2025-04-03" -last_updated = "2025-04-03" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.027 -output = 0.2 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.2-3b-instruct.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.2-3b-instruct.toml deleted file mode 100644 index bfc251c8c1..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.2-3b-instruct.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Llama 3.2 3B Instruct" -description = "Open Llama instruction model for multilingual chat, reasoning, and coding" -family = "llama" -release_date = "2025-04-03" -last_updated = "2025-04-03" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.051 -output = 0.34 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.3-70b-instruct-fp8-fast.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.3-70b-instruct-fp8-fast.toml deleted file mode 100644 index 3aabf88ba9..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-3.3-70b-instruct-fp8-fast.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Llama 3.3 70B Instruct FP8 Fast" -description = "Compact Llama instruction model for fast chat and local deployment" -family = "llama" -release_date = "2025-04-03" -last_updated = "2025-04-03" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.29 -output = 2.25 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-4-scout-17b-16e-instruct.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-4-scout-17b-16e-instruct.toml deleted file mode 100644 index ee5907a104..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-4-scout-17b-16e-instruct.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Llama 4 Scout 17B 16E Instruct" -description = "Open multimodal Llama model for long-context analysis and efficient agents" -family = "llama" -release_date = "2025-04-16" -last_updated = "2025-04-16" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.27 -output = 0.85 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-guard-3-8b.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-guard-3-8b.toml deleted file mode 100644 index 9fae81e8de..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/llama-guard-3-8b.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Llama Guard 3 8B" -description = "Safety model for policy screening, moderation, and risk-aware routing workflows" -family = "llama" -release_date = "2025-04-03" -last_updated = "2025-04-03" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.48 -output = 0.03 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/m2m100-1.2b.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/m2m100-1.2b.toml deleted file mode 100644 index 3a53893ce5..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/meta/m2m100-1.2b.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "M2M100 1.2B" -description = "General-purpose chat model for instruction following, writing, and analysis" -family = "m2m" -release_date = "2025-04-03" -last_updated = "2025-04-03" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.34 -output = 0.34 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/mistral/mistral-7b-instruct-v0.1.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/mistral/mistral-7b-instruct-v0.1.toml deleted file mode 100644 index e2aae716f4..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/mistral/mistral-7b-instruct-v0.1.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Mistral 7B Instruct v0.1" -description = "Mistral model for multilingual chat, reasoning, and tool-assisted workflows" -family = "mistral" -release_date = "2025-04-03" -last_updated = "2025-04-03" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.11 -output = 0.19 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/mistralai/mistral-small-3.1-24b-instruct.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/mistralai/mistral-small-3.1-24b-instruct.toml deleted file mode 100644 index c3b5a82fc7..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/mistralai/mistral-small-3.1-24b-instruct.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Mistral Small 3.1 24B Instruct" -description = "Efficient Mistral model for fast chat, extraction, and production assistants" -family = "mistral-small" -release_date = "2025-04-11" -last_updated = "2025-04-11" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.35 -output = 0.56 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/moonshotai/kimi-k2.5.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/moonshotai/kimi-k2.5.toml deleted file mode 100644 index 9613f91163..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/moonshotai/kimi-k2.5.toml +++ /dev/null @@ -1,32 +0,0 @@ -# Raw Workers AI input uses `reasoning_effort = low|medium|high` and -# `chat_template_kwargs.enable_thinking = true|false`. -# https://developers.cloudflare.com/workers-ai/models/kimi-k2.5/sync-input.json (accessed 2026-06-25) -name = "Kimi K2.5" -description = "Kimi multimodal agent model for visual understanding, coding, and planning" -family = "kimi-k2" -release_date = "2026-01-27" -last_updated = "2026-01-27" -attachment = true -reasoning = true -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high"] }] -structured_output = true -temperature = true -tool_call = true -knowledge = "2025-01" -open_weights = true - -[interleaved] -field = "reasoning_content" - -[cost] -input = 0.60 -output = 3.00 -cache_read = 0.10 - -[limit] -context = 256_000 -output = 256_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/moonshotai/kimi-k2.6.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/moonshotai/kimi-k2.6.toml deleted file mode 100644 index cf4d101366..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/moonshotai/kimi-k2.6.toml +++ /dev/null @@ -1,32 +0,0 @@ -# Raw Workers AI input uses `reasoning_effort = low|medium|high` and -# `chat_template_kwargs.thinking = true|false`. -# https://developers.cloudflare.com/workers-ai/models/kimi-k2.6/sync-input.json (accessed 2026-06-25) -name = "Kimi K2.6" -description = "Kimi multimodal agent model for visual understanding, coding, and planning" -family = "kimi-k2" -release_date = "2026-04-20" -last_updated = "2026-04-20" -attachment = true -reasoning = true -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high"] }] -structured_output = true -temperature = true -tool_call = true -knowledge = "2025-01" -open_weights = true - -[interleaved] -field = "reasoning_content" - -[cost] -input = 0.95 -output = 4.00 -cache_read = 0.16 - -[limit] -context = 256_000 -output = 256_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/myshell-ai/melotts.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/myshell-ai/melotts.toml deleted file mode 100644 index 6ed68939ea..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/myshell-ai/melotts.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "MyShell MeloTTS" -description = "General-purpose chat model for instruction following, writing, and analysis" -family = "melotts" -release_date = "2025-11-14" -last_updated = "2025-11-14" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0 -output = 0 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/nvidia/nemotron-3-120b-a12b.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/nvidia/nemotron-3-120b-a12b.toml deleted file mode 100644 index ff30964364..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/nvidia/nemotron-3-120b-a12b.toml +++ /dev/null @@ -1,29 +0,0 @@ -# Raw Workers AI input uses `reasoning_effort = low|medium|high` and -# `chat_template_kwargs.enable_thinking = true|false`. -# https://developers.cloudflare.com/workers-ai/models/nemotron-3-120b-a12b/sync-input.json (accessed 2026-06-25) -name = "Nemotron 3 Super 120B" -base_model = "nvidia/nemotron-3-super-120b-a12b" -family = "nemotron" -release_date = "2026-03-11" -last_updated = "2026-03-11" -attachment = false -reasoning = true -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high"] }] -temperature = true -tool_call = true -open_weights = true - -[interleaved] -field = "reasoning_content" - -[cost] -input = 0.50 -output = 1.50 - -[limit] -context = 256_000 -output = 256_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/openai/gpt-oss-120b.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/openai/gpt-oss-120b.toml deleted file mode 100644 index 19319dc60c..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/openai/gpt-oss-120b.toml +++ /dev/null @@ -1,21 +0,0 @@ -name = "GPT OSS 120B" -description = "Open-weight GPT model for self-hosted reasoning and instruction-following workloads" -release_date = "2025-08-05" -last_updated = "2025-08-05" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.35 -output = 0.75 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/openai/gpt-oss-20b.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/openai/gpt-oss-20b.toml deleted file mode 100644 index 471f1a3394..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/openai/gpt-oss-20b.toml +++ /dev/null @@ -1,21 +0,0 @@ -name = "GPT OSS 20B" -description = "Open-weight GPT model for self-hosted reasoning and instruction-following workloads" -release_date = "2025-08-05" -last_updated = "2025-08-05" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.2 -output = 0.3 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/pfnet/plamo-embedding-1b.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/pfnet/plamo-embedding-1b.toml deleted file mode 100644 index 6e67eab6d0..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/pfnet/plamo-embedding-1b.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "PLaMo Embedding 1B" -description = "Embedding model for semantic search, retrieval, clustering, and ranking pipelines" -family = "plamo" -release_date = "2025-09-25" -last_updated = "2025-09-25" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.019 -output = 0 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/pipecat-ai/smart-turn-v2.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/pipecat-ai/smart-turn-v2.toml deleted file mode 100644 index cdb5b7acf7..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/pipecat-ai/smart-turn-v2.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Pipecat Smart Turn v2" -description = "General-purpose chat model for instruction following, writing, and analysis" -family = "smart-turn" -release_date = "2025-11-14" -last_updated = "2025-11-14" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0 -output = 0 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/qwen/qwen2.5-coder-32b-instruct.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/qwen/qwen2.5-coder-32b-instruct.toml deleted file mode 100644 index d16f926bc7..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/qwen/qwen2.5-coder-32b-instruct.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Qwen 2.5 Coder 32B Instruct" -description = "Qwen coding model for software agents, repository edits, and code reasoning" -family = "qwen" -release_date = "2025-04-11" -last_updated = "2025-04-11" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.66 -output = 1 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/qwen/qwen3-30b-a3b-fp8.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/qwen/qwen3-30b-a3b-fp8.toml deleted file mode 100644 index aee429e3b0..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/qwen/qwen3-30b-a3b-fp8.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Qwen3 30B A3B FP8" -description = "Qwen instruction model for multilingual chat, reasoning, and tool use" -family = "qwen" -release_date = "2025-11-14" -last_updated = "2025-11-14" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.051 -output = 0.34 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/qwen/qwen3-embedding-0.6b.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/qwen/qwen3-embedding-0.6b.toml deleted file mode 100644 index 8585d29c60..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/qwen/qwen3-embedding-0.6b.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Qwen3 Embedding 0.6B" -description = "Embedding model for semantic search, retrieval, clustering, and ranking pipelines" -family = "qwen" -release_date = "2025-11-14" -last_updated = "2025-11-14" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.012 -output = 0 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/qwen/qwq-32b.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/qwen/qwq-32b.toml deleted file mode 100644 index 010260c3c0..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/qwen/qwq-32b.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "QwQ 32B" -description = "Qwen reasoning model for deliberate problem solving, math, and coding" -family = "qwen" -release_date = "2025-04-11" -last_updated = "2025-04-11" -attachment = false -reasoning = false -temperature = true -tool_call = false -open_weights = false - -[cost] -input = 0.66 -output = 1 - -[limit] -context = 128000 -output = 16384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/zai-org/glm-4.7-flash.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/zai-org/glm-4.7-flash.toml deleted file mode 100644 index 461d1fd202..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/zai-org/glm-4.7-flash.toml +++ /dev/null @@ -1,27 +0,0 @@ -# Raw Workers AI input uses `reasoning_effort = low|medium|high` and -# `chat_template_kwargs.enable_thinking = true|false`. -# https://developers.cloudflare.com/workers-ai/models/glm-4.7-flash/sync-input.json (accessed 2026-06-25) -name = "GLM-4.7-Flash" -description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -family = "glm-flash" -release_date = "2026-01-19" -last_updated = "2026-01-19" -attachment = false -reasoning = true -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high"] }] -temperature = true -tool_call = true -knowledge = "2025-04" -open_weights = true - -[cost] -input = 0.06 -output = 0.40 - -[limit] -context = 131_072 -output = 131_072 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/zai-org/glm-5.2.toml b/providers/cloudflare-ai-gateway/models/workers-ai/@cf/zai-org/glm-5.2.toml deleted file mode 100644 index fe4d6b28b4..0000000000 --- a/providers/cloudflare-ai-gateway/models/workers-ai/@cf/zai-org/glm-5.2.toml +++ /dev/null @@ -1,15 +0,0 @@ -# Raw Workers AI input uses `reasoning_effort = low|medium|high` and -# `chat_template_kwargs.enable_thinking = true|false`. -# https://developers.cloudflare.com/workers-ai/models/glm-5.2/sync-input.json (accessed 2026-07-13) -base_model = "zhipuai/glm-5.2" -name = "Glm 5.2" -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high"] }] - -[cost] -input = 1.4 -output = 4.4 -cache_read = 0.26 - -[limit] -context = 262_144 -output = 262_144 diff --git a/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-5.2.toml b/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-5.2.toml index e9d69e953b..fe4d6b28b4 100644 --- a/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-5.2.toml +++ b/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-5.2.toml @@ -1,3 +1,6 @@ +# Raw Workers AI input uses `reasoning_effort = low|medium|high` and +# `chat_template_kwargs.enable_thinking = true|false`. +# https://developers.cloudflare.com/workers-ai/models/glm-5.2/sync-input.json (accessed 2026-07-13) base_model = "zhipuai/glm-5.2" name = "Glm 5.2" reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high"] }] From 7bf6f4413f7f1bf69c51cf54338c04a5518f3c48 Mon Sep 17 00:00:00 2001 From: Michael Dwan Date: Wed, 15 Jul 2026 14:44:00 -0500 Subject: [PATCH 3/6] sync(cloudflare-workers-ai): fetch and reshape the native model catalog Cloudflare's Workers AI models API returns two shapes: format=openrouter (rich, but chat-models only) and a native format that covers everything else it serves (embeddings, ASR, TTS, translation, classification, image gen, etc). The WAI sync only ever fetched the openrouter shape, so those other models were invisible to models.dev even though Cloudflare serves them live. This teaches the sync to also fetch the native format, and reshape each native record into the same OpenRouterModel shape the existing pipeline already builds from -- mapping task type to input/output modality, converting per-million-token pricing to the per-token format the schema expects, and reading capability flags (tool calling, reasoning) out of the native properties array. Native pagination has no page count to trust (total_count reflects Cloudflare's whole catalog, not this account's view), so it pages until an empty result instead. Two fields -- output token limit and open-weights status -- have no source in either API shape for any model, so they're faked (0 / false). Guessing these two fields when a provider's API doesn't report them is already normal in this codebase (e.g. digitalocean.ts, chutes.ts, and wandb.ts all fall back to 0 for a missing output limit; chutes defaults open_weights to true, digitalocean/pioneer/llmgateway/vercel default it to false) -- and the old hand-run AIG pipeline this branch replaces did exactly this too, hardcoding context=128000 and output=16384 as shell constants on every model it generated. Where both formats report the same model, the richer openrouter record wins, keeping fields native lacks -- max_completion_tokens, structured_output, hugging_face_id -- on the 22 existing chat models. --- .../sync/providers/cloudflare-workers-ai.ts | 251 ++++++++++++++++-- .../cloudflare-workers-ai-native.json | 1 + packages/core/test/sync.test.ts | 145 +++++++++- 3 files changed, 377 insertions(+), 20 deletions(-) create mode 100644 packages/core/test/fixtures/cloudflare-workers-ai-native.json diff --git a/packages/core/src/sync/providers/cloudflare-workers-ai.ts b/packages/core/src/sync/providers/cloudflare-workers-ai.ts index 252e9ae9cb..5a084fdb20 100644 --- a/packages/core/src/sync/providers/cloudflare-workers-ai.ts +++ b/packages/core/src/sync/providers/cloudflare-workers-ai.ts @@ -58,11 +58,171 @@ const CloudflareResponse = z.object({ type CloudflareModel = z.infer; +// Native `ai/models/search` shape (no `format` param). Everything schema-relevant +// lives in the sparse `properties[]` array; see `flattenProperties`. +const NativeModel = z.object({ + id: z.string(), + name: z.string(), + description: z.string(), + task: z.object({ name: z.string() }), + created_at: z.string(), + properties: z.array( + z.object({ + property_id: z.string(), + value: z.unknown(), + }), + ), +}); + +const NativeResponse = z.object({ + result: z.array(NativeModel), +}).passthrough(); + +// The merged fetch result: every openrouter-format model, every native-format model, +// tagged so `parseModels`/`translateModel` know which reshape path to take. +const WorkersAiFetchResultSchema = z.object({ + openrouter: z.array(CloudflareModel), + native: z.array(NativeModel), +}); +type WorkersAiFetchResult = z.infer; + +type WorkersAiSourceModel = + | { format: "openrouter"; model: CloudflareModel } + | { format: "native"; model: NativeModel }; +export type NativeModel = z.infer; + +const NativePrice = z.object({ + unit: z.string(), + price: z.number(), + currency: z.string(), +}); + +type TaskModality = "text" | "audio" | "image" | "video" | "pdf"; + +// task.name -> modalities. Covers all 10 native task classes observed on the +// `ai/models/search` endpoint (see the plan this leaf inherits from). +export const TASK_MODALITIES: Record = { + "Text Generation": { input: ["text"], output: ["text"] }, + "Text Embeddings": { input: ["text"], output: ["text"] }, + "Text Classification": { input: ["text"], output: ["text"] }, + Translation: { input: ["text"], output: ["text"] }, + Summarization: { input: ["text"], output: ["text"] }, + "Automatic Speech Recognition": { input: ["audio"], output: ["text"] }, + "Text-to-Speech": { input: ["text"], output: ["audio"] }, + "Image-to-Text": { input: ["image", "text"], output: ["text"] }, + "Text-to-Image": { input: ["text"], output: ["image"] }, + "Image Classification": { input: ["image"], output: ["text"] }, + "Dumb Pipe": { input: ["audio"], output: ["text"] }, +}; + +// Native price is per-MILLION tokens; `price()` in openrouter.ts multiplies its +// string input by 1e6, so divide by 1e6 here to round-trip to the same per-token cost. +function tokenPriceString(amount: number) { + return String(amount / 1_000_000); +} + +function tokenSidePrice(amount: number | undefined, sibling: number | undefined) { + if (amount !== undefined) return tokenPriceString(amount); + return sibling !== undefined ? "0" : "-1"; +} + +export function flattenProperties(model: NativeModel): Record { + return Object.fromEntries(model.properties.map((property) => [property.property_id, property.value])); +} + +function parsePrices(value: unknown): z.infer[] { + const parsed = z.array(NativePrice).safeParse(value); + return parsed.success ? parsed.data : []; +} + +export function reshapeNative(model: NativeModel): OpenRouterModel { + const properties = flattenProperties(model); + const modalities = TASK_MODALITIES[model.task.name]; + if (modalities === undefined) { + throw new Error(`Unknown Cloudflare Workers AI native task: ${model.task.name}`); + } + + // Neither API shape reports an output-token limit or open-weights status for any + // model; fabricating them (0 / false) rather than skipping the model matches this + // codebase's existing practice for a provider that doesn't report a required field + // (see e.g. digitalocean.ts, chutes.ts, wandb.ts for output; chutes/digitalocean/ + // pioneer/llmgateway/vercel for open_weights). + const contextWindow = typeof properties.context_window === "string" + ? Number(properties.context_window) + : undefined; + + const prices = parsePrices(properties.price); + const tokenPrice = (unit: string) => prices.find((entry) => entry.unit === unit)?.price; + const inputTokenPrice = tokenPrice("per M input tokens"); + const outputTokenPrice = tokenPrice("per M output tokens"); + const cachedInputTokenPrice = tokenPrice("per M cached input tokens"); + + const supported_parameters: string[] = []; + if (properties.function_calling === "true") supported_parameters.push("tools", "tool_choice"); + if (properties.reasoning === "true") supported_parameters.push("reasoning"); + + // Native has no separate display name (unlike openrouter's "Publisher: Model"); the + // slug in `name` is the only human-readable identifier available. + const record: OpenRouterModel = { + id: model.name, + name: model.name, + created: Math.floor(new Date(`${model.created_at.replace(" ", "T")}Z`).getTime() / 1000), + hugging_face_id: null, + knowledge_cutoff: null, + context_length: contextWindow ?? 0, + architecture: { input_modalities: modalities.input, output_modalities: modalities.output }, + pricing: { + // Absent token pricing (audio/image-priced or free models) is deliberately left + // unfabricated: "-1" mirrors OpenRouter's own unavailable-price sentinel and keeps + // `price()` from inventing a false token cost. When only one side of a token + // price pair is present (e.g. an embeddings model has no output tokens), the + // other side is a real "0", not a fabrication -- there is nothing to bill. + prompt: tokenSidePrice(inputTokenPrice, outputTokenPrice), + completion: tokenSidePrice(outputTokenPrice, inputTokenPrice), + input_cache_read: cachedInputTokenPrice !== undefined ? tokenPriceString(cachedInputTokenPrice) : undefined, + }, + top_provider: { + context_length: contextWindow ?? 0, + max_completion_tokens: null, + }, + supported_parameters, + }; + + return record; +} + +// Audio/1k-character pricing (ASR, TTS) is outside the token-priced OpenRouter +// shape and must be applied to the built model after `buildWorkersAiModel`. +// Image-priced units (`per step`, `per 512 by 512 tile`, `per inference request`) +// and no-price models are left untouched: no token cost is invented for them. +export function applyAudioPricing(model: SyncedModel, native: NativeModel): SyncedModel { + const modalities = TASK_MODALITIES[native.task.name]; + const prices = parsePrices(flattenProperties(native).price); + const inputAudio = prices.find((entry) => entry.unit === "per audio minute")?.price + ?? prices.find((entry) => entry.unit === "per audio minute (websocket)")?.price; + const outputAudio = prices.find((entry) => entry.unit === "per audio minute")?.price + ?? prices.find((entry) => entry.unit === "per 1k characters")?.price; + + if (modalities?.input.includes("audio") && inputAudio !== undefined) { + return { + ...model, + cost: { input: 0, output: 0, ...model.cost, input_audio: inputAudio }, + } as SyncedModel; + } + if (modalities?.output.includes("audio") && outputAudio !== undefined) { + return { + ...model, + cost: { input: 0, output: 0, ...model.cost, output_audio: outputAudio }, + } as SyncedModel; + } + return model; +} + export const cloudflareWorkersAi = { id: "cloudflare-workers-ai", name: "Cloudflare Workers AI", modelsDir: "providers/cloudflare-workers-ai/models", - async fetchModels() { + async fetchModels(): Promise { const accountID = process.env.CLOUDFLARE_WORKERS_AI_SYNC_ACCOUNT_ID; const token = process.env.CLOUDFLARE_WORKERS_AI_SYNC_API_TOKEN; if (accountID === undefined || token === undefined) { @@ -71,30 +231,42 @@ export const cloudflareWorkersAi = { ); } - const first = await fetchPage(accountID, token, 1); - const models = parseCloudflareModels(first); - const pageInfo = CloudflareOpenRouterResponse.safeParse(first).success - ? CloudflareOpenRouterResponse.parse(first).result_info - : undefined; - - for (let page = 2; page <= (pageInfo?.total_pages ?? 1); page++) { - models.push(...parseCloudflareModels(await fetchPage(accountID, token, page))); - } + const [openrouter, native] = await Promise.all([ + fetchAllOpenRouterModels(accountID, token), + fetchAllNativeModels(accountID, token), + ]); - return { data: models }; + return { openrouter, native }; }, parseModels(raw) { - return parseCloudflareModels(raw); + const { openrouter, native } = WorkersAiFetchResultSchema.parse(raw); + // Merge by id: native fills the whole catalog, openrouter's rich chat-model records + // (structured_output, temperature, max_completion_tokens, hugging_face_id) win where + // both formats report the same model, so populate native first and let the + // openrouter pass overwrite matching keys. + const byID = new Map(); + for (const model of native) byID.set(stripWorkersAiPrefix(model.name), { format: "native", model }); + for (const model of openrouter) byID.set(stripWorkersAiPrefix(model.id), { format: "openrouter", model }); + return [...byID.values()]; }, - translateModel(model, context) { - const normalized = normalizeModel(model); - const id = normalized.id.replace(/^workers-ai\//, ""); + translateModel(source, context) { + if (source.format === "native") { + const parsed = OpenRouterModel.parse(reshapeNative(source.model)); + const id = stripWorkersAiPrefix(parsed.id); + return { + id, + model: applyAudioPricing(buildWorkersAiModel(parsed, context.existing(id)), source.model), + }; + } + + const normalized = normalizeModel(source.model); + const id = stripWorkersAiPrefix(normalized.id); return { id, model: buildWorkersAiModel(normalized, context.existing(id)), }; }, -} satisfies SyncProvider; +} satisfies SyncProvider; export function buildWorkersAiModel( model: z.infer, @@ -130,7 +302,7 @@ export function buildWorkersAiModel( } export function resolveCloudflareBaseModel(model: z.infer) { - const [, publisher] = model.id.replace(/^workers-ai\//, "").split("/"); + const [, publisher] = stripWorkersAiPrefix(model.id).split("/"); if (publisher === undefined) return undefined; const metadataPublisher = METADATA_PUBLISHERS[publisher]; @@ -157,12 +329,55 @@ function identityTokens(value: string) { return value.toLowerCase().match(/[a-z]+|\d+(?:\.\d+)?/g) ?? []; } -async function fetchPage(accountID: string, token: string, page: number) { +// Strips the AI Gateway `workers-ai/` routing prefix Cloudflare's openrouter-format +// endpoint puts on every id; native `name`s never carry it. Doubles as the merge key +// for matching an openrouter-format record against its native counterpart. +function stripWorkersAiPrefix(id: string): string { + return id.replace(/^workers-ai\//, ""); +} + +async function fetchAllOpenRouterModels(accountID: string, token: string): Promise { + const first = await fetchOpenRouterPage(accountID, token, 1); + const models = parseCloudflareModels(first); + const pageInfo = CloudflareOpenRouterResponse.safeParse(first).success + ? CloudflareOpenRouterResponse.parse(first).result_info + : undefined; + + for (let page = 2; page <= (pageInfo?.total_pages ?? 1); page++) { + models.push(...parseCloudflareModels(await fetchOpenRouterPage(accountID, token, page))); + } + + return models; +} + +// Native pagination reports no `total_pages` (and `total_count` is the GLOBAL catalog, +// not this token's) -- page until the API returns an empty result array. +async function fetchAllNativeModels(accountID: string, token: string): Promise { + const models: NativeModel[] = []; + for (let page = 1; ; page++) { + const pageModels = NativeResponse.parse(await fetchNativePage(accountID, token, page)).result; + if (pageModels.length === 0) break; + models.push(...pageModels); + } + return models; +} + +async function fetchOpenRouterPage(accountID: string, token: string, page: number) { const url = new URL(`${API_BASE}/${accountID}/ai/models/search`); url.searchParams.set("format", "openrouter"); url.searchParams.set("per_page", "1000"); url.searchParams.set("page", String(page)); + return fetchModelsPage(url, token); +} + +async function fetchNativePage(accountID: string, token: string, page: number) { + const url = new URL(`${API_BASE}/${accountID}/ai/models/search`); + url.searchParams.set("per_page", "100"); + url.searchParams.set("page", String(page)); + return fetchModelsPage(url, token); +} +async function fetchModelsPage(url: URL, token: string) { const response = await fetch(url, { headers: { Authorization: `Bearer ${token}` }, }); diff --git a/packages/core/test/fixtures/cloudflare-workers-ai-native.json b/packages/core/test/fixtures/cloudflare-workers-ai-native.json new file mode 100644 index 0000000000..4d4cfb9232 --- /dev/null +++ b/packages/core/test/fixtures/cloudflare-workers-ai-native.json @@ -0,0 +1 @@ +{"success":true,"result":[{"id":"fe8904cf-e20e-4884-b829-ed7cec0a01cb","source":1,"name":"@cf/pipecat-ai/smart-turn-v2","description":"An open source, community-driven, native audio turn detection model in 2nd version","task":{"id":"ccb1ca5a-043d-41a7-8a3b-61017b2796fd","name":"Dumb Pipe","description":"Internal - Dumb Pipe models don't use tensors"},"created_at":"2025-08-04 10:08:04.219","tags":[],"properties":[{"property_id":"async_queue","value":"true"},{"property_id":"price","value":[{"unit":"per audio minute","price":0.000338,"currency":"USD"}]},{"property_id":"realtime","value":"true"}]},{"id":"f9f2250b-1048-4a52-9910-d0bf976616a1","source":1,"name":"@cf/openai/gpt-oss-120b","description":"OpenAI’s open-weight models designed for powerful reasoning, agentic tasks, and versatile developer use cases – gpt-oss-120b is for production, general purpose, high reasoning use-cases.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2025-08-05 10:27:29.131","tags":[],"properties":[{"property_id":"context_window","value":"128000"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.35,"currency":"USD"},{"unit":"per M output tokens","price":0.75,"currency":"USD"}]},{"property_id":"function_calling","value":"true"},{"property_id":"reasoning","value":"true"}]},{"id":"eed32bc1-8775-4985-89ce-dd1405508ad8","source":1,"name":"@cf/baai/bge-m3","description":"Multi-Functionality, Multi-Linguality, and Multi-Granularity embeddings model.","task":{"id":"0137cdcf-162a-4108-94f2-1ca59e8c65ee","name":"Text Embeddings","description":"Feature extraction models transform raw data into numerical features that can be processed while preserving the information in the original dataset. These models are ideal as part of building vector search applications or Retrieval Augmented Generation workflows with Large Language Models (LLM)."},"created_at":"2024-05-22 19:27:09.781","tags":[],"properties":[{"property_id":"context_window","value":"60000"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.0118,"currency":"USD"}]}]},{"id":"eaf31752-a074-441f-8b70-d593255d2811","source":1,"name":"@cf/huggingface/distilbert-sst-2-int8","description":"Distilled BERT model that was finetuned on SST-2 for sentiment classification","task":{"id":"19606750-23ed-4371-aab2-c20349b53a60","name":"Text Classification","description":"Sentiment analysis or text classification is a common NLP task that classifies a text input into labels or classes."},"created_at":"2023-09-25 19:21:11.898","tags":[],"properties":[{"property_id":"price","value":[{"unit":"per M input tokens","price":0.0263,"currency":"USD"}]},{"property_id":"info","value":"https://huggingface.co/Intel/distilbert-base-uncased-finetuned-sst-2-english-int8-static"}]},{"id":"e8e8abe4-a372-4c13-815f-4688ba655c8e","source":1,"name":"@cf/google/gemma-2b-it-lora","description":"This is a Gemma-2B base model that Cloudflare dedicates for inference with LoRA adapters. Gemma is a family of lightweight, state-of-the-art open models from Google, built from the same research and technology used to create the Gemini models.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2024-04-02 00:19:34.669","tags":[],"properties":[{"property_id":"beta","value":"true"},{"property_id":"context_window","value":"8192"},{"property_id":"lora","value":"true"}]},{"id":"e580c765-810c-4da3-936c-a2808892f14c","source":1,"name":"@cf/black-forest-labs/flux-2-klein-9b","description":"FLUX.2 [klein] 9B is a 9 billion parameter model that can generate images from text descriptions and supports multi-reference editing capabilities.","task":{"id":"3d6e1f35-341b-4915-a6c8-9a7142a9033a","name":"Text-to-Image","description":"Generates images from input text. These models can be used to generate and modify images based on text prompts."},"created_at":"2026-01-14 12:55:54.294","tags":[],"properties":[{"property_id":"partner","value":"true"},{"property_id":"terms","value":"https://bfl.ai/legal/terms-of-service"}]},{"id":"d9dc8363-66f4-4bb0-8641-464ee7bfc131","source":1,"name":"@cf/meta/llama-3.2-3b-instruct","description":"The Llama 3.2 instruction-tuned text only models are optimized for multilingual dialogue use cases, including agentic retrieval and summarization tasks.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2024-09-25 20:05:43.986","tags":[],"properties":[{"property_id":"price","value":[{"unit":"per M input tokens","price":0.0509,"currency":"USD"},{"unit":"per M output tokens","price":0.335,"currency":"USD"}]},{"property_id":"context_window","value":"80000"},{"property_id":"lora","value":"true"},{"property_id":"terms","value":"https://github.com/meta-llama/llama-models/blob/main/models/llama3_2/LICENSE"}]},{"id":"cc80437b-9a8d-4f1a-9c77-9aaf0d226922","source":1,"name":"@cf/meta/llama-guard-3-8b","description":"Llama Guard 3 is a Llama-3.1-8B pretrained model, fine-tuned for content safety classification. Similar to previous versions, it can be used to classify content in both LLM inputs (prompt classification) and in LLM responses (response classification). It acts as an LLM – it generates text in its output that indicates whether a given prompt or response is safe or unsafe, and if unsafe, it also lists the content categories violated.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2025-01-22 23:26:23.495","tags":["moderation","safety","content-filtering","guardrails"],"properties":[{"property_id":"context_window","value":"131072"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.484,"currency":"USD"},{"unit":"per M output tokens","price":0.03,"currency":"USD"}]},{"property_id":"lora","value":"true"}]},{"id":"cb254e3b-372b-4d4e-8526-ada79940427a","source":1,"name":"@cf/qwen/qwen3-embedding-0.6b","description":"The Qwen3 Embedding model series is the latest proprietary model of the Qwen family, specifically designed for text embedding and ranking tasks. ","task":{"id":"0137cdcf-162a-4108-94f2-1ca59e8c65ee","name":"Text Embeddings","description":"Feature extraction models transform raw data into numerical features that can be processed while preserving the information in the original dataset. These models are ideal as part of building vector search applications or Retrieval Augmented Generation workflows with Large Language Models (LLM)."},"created_at":"2025-06-18 20:23:22.086","tags":[],"properties":[{"property_id":"context_window","value":"8192"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.0118,"currency":"USD"}]}]},{"id":"c837b2ac-4d9b-4d37-8811-34de60f0c44f","source":1,"name":"@cf/myshell-ai/melotts","description":"MeloTTS is a high-quality multi-lingual text-to-speech library by MyShell.ai.","task":{"id":"b52660a1-9a95-4ab2-8b1d-f232be34604a","name":"Text-to-Speech","description":"Text-to-Speech (TTS) is the task of generating natural sounding speech given text input. TTS models can be extended to have a single model that generates speech for multiple speakers and multiple languages."},"created_at":"2024-07-19 15:51:04.819","tags":[],"properties":[{"property_id":"price","value":[{"unit":"per audio minute","price":0.000205,"currency":"USD"}]}]},{"id":"c58c317b-0c15-4bda-abb6-93e275f282d9","source":1,"name":"@cf/mistral/mistral-7b-instruct-v0.2-lora","description":"The Mistral-7B-Instruct-v0.2 Large Language Model (LLM) is an instruct fine-tuned version of the Mistral-7B-v0.2.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2024-04-01 22:14:40.529","tags":[],"properties":[{"property_id":"beta","value":"true"},{"property_id":"context_window","value":"15000"},{"property_id":"lora","value":"true"}]},{"id":"c5255b94-2161-4779-bd25-54f061829a2a","source":1,"name":"@cf/deepgram/aura-2-es","description":"Aura-2 is a context-aware text-to-speech (TTS) model that applies natural pacing, expressiveness, and fillers based on the context of the provided text. The quality of your text input directly impacts the naturalness of the audio output.","task":{"id":"b52660a1-9a95-4ab2-8b1d-f232be34604a","name":"Text-to-Speech","description":"Text-to-Speech (TTS) is the task of generating natural sounding speech given text input. TTS models can be extended to have a single model that generates speech for multiple speakers and multiple languages."},"created_at":"2025-10-09 22:42:37.002","tags":[],"properties":[{"property_id":"async_queue","value":"true"},{"property_id":"price","value":[{"unit":"per 1k characters","price":0.03,"currency":"USD"}]},{"property_id":"partner","value":"true"},{"property_id":"terms","value":"https://deepgram.com/terms"},{"property_id":"realtime","value":"true"}]},{"id":"c29c7295-ff20-4b9b-bdcc-25136c19b21d","source":1,"name":"@cf/moonshotai/kimi-k2.7-code","description":"Kimi K2.7 is a frontier-scale open-source 1T parameter model with a 262.1k context window, multi-turn tool calling, vision inputs, and structured outputs for agentic workloads.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2026-06-12 11:45:20.582","tags":[],"properties":[{"property_id":"context_window","value":"262144"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.95,"currency":"USD"},{"unit":"per M output tokens","price":4,"currency":"USD"},{"unit":"per M cached input tokens","price":0.19,"currency":"USD"}]},{"property_id":"function_calling","value":"true"},{"property_id":"reasoning","value":"true"},{"property_id":"terms","value":"https://huggingface.co/moonshotai/Kimi-K2.7-Code/blob/main/LICENSE"},{"property_id":"vision","value":"true"}]},{"id":"c1c12ce4-c36a-4aa6-8da4-f63ba4b8984d","source":1,"name":"@cf/openai/whisper","description":"Whisper is a general-purpose speech recognition model. It is trained on a large dataset of diverse audio and is also a multitasking model that can perform multilingual speech recognition, speech translation, and language identification.","task":{"id":"dfce1c48-2a81-462e-a7fd-de97ce985207","name":"Automatic Speech Recognition","description":"Automatic speech recognition (ASR) models convert a speech signal, typically an audio input, to text."},"created_at":"2023-09-25 19:21:11.898","tags":[],"properties":[{"property_id":"price","value":[{"unit":"per audio minute","price":0.000453,"currency":"USD"}]},{"property_id":"info","value":"https://openai.com/research/whisper"}]},{"id":"bc2b61f6-7eb3-4cdf-94f5-ffc128bd6aa4","source":1,"name":"@cf/pfnet/plamo-embedding-1b","description":"PLaMo-Embedding-1B is a Japanese text embedding model developed by Preferred Networks, Inc.\n\nIt can convert Japanese text input into numerical vectors and can be used for a wide range of applications, including information retrieval, text classification, and clustering.","task":{"id":"0137cdcf-162a-4108-94f2-1ca59e8c65ee","name":"Text Embeddings","description":"Feature extraction models transform raw data into numerical features that can be processed while preserving the information in the original dataset. These models are ideal as part of building vector search applications or Retrieval Augmented Generation workflows with Large Language Models (LLM)."},"created_at":"2025-09-24 18:42:05.576","tags":[],"properties":[{"property_id":"price","value":[{"unit":"per M input tokens","price":0.0186,"currency":"USD"}]}]},{"id":"af274959-cb47-4ba8-9d8e-5a0a58b6b402","source":1,"name":"@cf/llava-hf/llava-1.5-7b-hf","description":"LLaVA is an open-source chatbot trained by fine-tuning LLaMA/Vicuna on GPT-generated multimodal instruction-following data. It is an auto-regressive language model, based on the transformer architecture.","task":{"id":"882a91d1-c331-4eec-bdad-834c919942a8","name":"Image-to-Text","description":"Image to text models output a text from a given image. Image captioning or optical character recognition can be considered as the most common applications of image to text."},"created_at":"2024-05-01 18:00:39.971","tags":[],"properties":[{"property_id":"beta","value":"true"}]},{"id":"ad01ab83-baf8-4e7b-8fed-a0a219d4eb45","source":1,"name":"@cf/deepseek-ai/deepseek-r1-distill-qwen-32b","description":"DeepSeek-R1-Distill-Qwen-32B is a model distilled from DeepSeek-R1 based on Qwen2.5. It outperforms OpenAI-o1-mini across various benchmarks, achieving new state-of-the-art results for dense models.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2025-01-22 19:48:55.776","tags":[],"properties":[{"property_id":"context_window","value":"80000"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.497,"currency":"USD"},{"unit":"per M output tokens","price":4.881,"currency":"USD"}]},{"property_id":"reasoning","value":"true"},{"property_id":"terms","value":"https://github.com/deepseek-ai/DeepSeek-R1/blob/main/LICENSE"}]},{"id":"a9abaef0-3031-47ad-8790-d311d8684c6c","source":1,"name":"@cf/runwayml/stable-diffusion-v1-5-inpainting","description":"Stable Diffusion Inpainting is a latent text-to-image diffusion model capable of generating photo-realistic images given any text input, with the extra capability of inpainting the pictures by using a mask.","task":{"id":"3d6e1f35-341b-4915-a6c8-9a7142a9033a","name":"Text-to-Image","description":"Generates images from input text. These models can be used to generate and modify images based on text prompts."},"created_at":"2024-02-27 17:23:57.528","tags":[],"properties":[{"property_id":"beta","value":"true"},{"property_id":"price","value":[{"unit":"per step","price":0,"currency":"USD"}]},{"property_id":"info","value":"https://huggingface.co/runwayml/stable-diffusion-inpainting"},{"property_id":"terms","value":"https://github.com/runwayml/stable-diffusion/blob/main/LICENSE"}]},{"id":"a2a2afba-b609-4325-8c41-5791ce962239","source":1,"name":"@cf/deepgram/flux","description":"Flux is the first conversational speech recognition model built specifically for voice agents.","task":{"id":"dfce1c48-2a81-462e-a7fd-de97ce985207","name":"Automatic Speech Recognition","description":"Automatic speech recognition (ASR) models convert a speech signal, typically an audio input, to text."},"created_at":"2025-09-29 21:07:55.114","tags":[],"properties":[{"property_id":"price","value":[{"unit":"per audio minute (websocket)","price":0.0077,"currency":"USD"}]},{"property_id":"partner","value":"true"},{"property_id":"terms","value":"https://deepgram.com/terms"},{"property_id":"realtime","value":"true"}]},{"id":"a226909f-eef8-4265-a3a0-90db0422762e","source":1,"name":"@cf/deepgram/nova-3","description":"Transcribe audio using Deepgram’s speech-to-text model","task":{"id":"dfce1c48-2a81-462e-a7fd-de97ce985207","name":"Automatic Speech Recognition","description":"Automatic speech recognition (ASR) models convert a speech signal, typically an audio input, to text."},"created_at":"2025-06-05 16:05:15.199","tags":[],"properties":[{"property_id":"async_queue","value":"true"},{"property_id":"price","value":[{"unit":"per audio minute","price":0.0052,"currency":"USD"},{"unit":"per audio minute (websocket)","price":0.0092,"currency":"USD"}]},{"property_id":"partner","value":"true"},{"property_id":"terms","value":"https://deepgram.com/terms"},{"property_id":"realtime","value":"true"}]},{"id":"9e087485-23dc-47fa-997d-f5bfafc0c7cc","source":1,"name":"@cf/black-forest-labs/flux-1-schnell","description":"FLUX.1 [schnell] is a 12 billion parameter rectified flow transformer capable of generating images from text descriptions. ","task":{"id":"3d6e1f35-341b-4915-a6c8-9a7142a9033a","name":"Text-to-Image","description":"Generates images from input text. These models can be used to generate and modify images based on text prompts."},"created_at":"2024-08-29 16:37:39.541","tags":[],"properties":[{"property_id":"price","value":[{"unit":"per 512 by 512 tile","price":0.0000528,"currency":"USD"},{"unit":"per step","price":0.000106,"currency":"USD"}]},{"property_id":"terms","value":"https://bfl.ai/legal/terms-of-service"}]},{"id":"9b9c87c6-d4b7-494c-b177-87feab5904db","source":1,"name":"@cf/meta/llama-3.1-8b-instruct-fp8","description":"Llama 3.1 8B quantized to FP8 precision","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2024-07-25 17:28:43.328","tags":[],"properties":[{"property_id":"price","value":[{"unit":"per M input tokens","price":0.152,"currency":"USD"},{"unit":"per M output tokens","price":0.287,"currency":"USD"}]},{"property_id":"context_window","value":"32000"},{"property_id":"terms","value":"https://github.com/meta-llama/llama-models/blob/main/models/llama3_1/LICENSE"}]},{"id":"906a57fd-b018-4d6c-a43e-a296d4cc5839","source":1,"name":"@cf/meta/llama-3.2-1b-instruct","description":"The Llama 3.2 instruction-tuned text only models are optimized for multilingual dialogue use cases, including agentic retrieval and summarization tasks.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2024-09-25 21:36:32.050","tags":[],"properties":[{"property_id":"price","value":[{"unit":"per M input tokens","price":0.027,"currency":"USD"},{"unit":"per M output tokens","price":0.201,"currency":"USD"}]},{"property_id":"context_window","value":"60000"},{"property_id":"terms","value":"https://github.com/meta-llama/llama-models/blob/main/models/llama3_2/LICENSE"}]},{"id":"8a5d00bd-de28-4a28-b37a-ce46d01ebaeb","source":1,"name":"@cf/moonshotai/kimi-k2.6","description":"Kimi K2.6 is a frontier-scale open-source 1T parameter model with a 262.1k context window, multi-turn tool calling, vision inputs, and structured outputs for agentic workloads.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2026-04-20 01:40:35.001","tags":[],"properties":[{"property_id":"async_queue","value":"true"},{"property_id":"context_window","value":"262144"},{"property_id":"function_calling","value":"true"},{"property_id":"reasoning","value":"true"},{"property_id":"terms","value":"https://huggingface.co/moonshotai/Kimi-K2.6/blob/main/LICENSE"},{"property_id":"vision","value":"true"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.95,"currency":"USD"},{"unit":"per M output tokens","price":4,"currency":"USD"},{"unit":"per M cached input tokens","price":0.16,"currency":"USD"}]}]},{"id":"86b3e51a-4b05-43fa-a403-0f27821919d2","source":1,"name":"@cf/zai-org/glm-4.7-flash","description":"GLM-4.7-Flash is a fast and efficient multilingual text generation model with a 131,072 token context window. Optimized for dialogue, instruction-following, and multi-turn tool calling across 100+ languages.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2026-01-28 16:04:39.346","tags":[],"properties":[{"property_id":"context_window","value":"131072"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.0605,"currency":"USD"},{"unit":"per M output tokens","price":0.4,"currency":"USD"}]},{"property_id":"function_calling","value":"true"},{"property_id":"reasoning","value":"true"}]},{"id":"7f9a76e1-d120-48dd-a565-101d328bbb02","source":1,"name":"@cf/microsoft/resnet-50","description":"50 layers deep image classification CNN trained on more than 1M images from ImageNet","task":{"id":"00cd182b-bf30-4fc4-8481-84a3ab349657","name":"Image Classification","description":"Image classification models take an image input and assigns it labels or classes."},"created_at":"2023-09-25 19:21:11.898","tags":[],"properties":[{"property_id":"price","value":[{"unit":"per inference request","price":0.00000251,"currency":"USD"}]},{"property_id":"info","value":"https://www.microsoft.com/en-us/research/blog/microsoft-vision-model-resnet-50-combines-web-scale-data-and-multi-task-learning-to-achieve-state-of-the-art/"}]},{"id":"7f797b20-3eb0-44fd-b571-6cbbaa3c423b","source":1,"name":"@cf/bytedance/stable-diffusion-xl-lightning","description":"SDXL-Lightning is a lightning-fast text-to-image generation model. It can generate high-quality 1024px images in a few steps.","task":{"id":"3d6e1f35-341b-4915-a6c8-9a7142a9033a","name":"Text-to-Image","description":"Generates images from input text. These models can be used to generate and modify images based on text prompts."},"created_at":"2024-02-27 17:41:29.578","tags":[],"properties":[{"property_id":"beta","value":"true"},{"property_id":"price","value":[{"unit":"per step","price":0,"currency":"USD"}]},{"property_id":"info","value":"https://huggingface.co/ByteDance/SDXL-Lightning"}]},{"id":"7ed8d8e8-6040-4680-843a-aef402d6b013","source":1,"name":"@cf/meta-llama/llama-2-7b-chat-hf-lora","description":"This is a Llama2 base model that Cloudflare dedicated for inference with LoRA adapters. Llama 2 is a collection of pretrained and fine-tuned generative text models ranging in scale from 7 billion to 70 billion parameters. This is the repository for the 7B fine-tuned model, optimized for dialogue use cases and converted for the Hugging Face Transformers format. ","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2024-04-02 00:17:18.579","tags":[],"properties":[{"property_id":"beta","value":"true"},{"property_id":"context_window","value":"8192"},{"property_id":"lora","value":"true"}]},{"id":"7a143886-c9bb-4a1c-be95-377b1973bc3b","source":1,"name":"@cf/meta/llama-3.3-70b-instruct-fp8-fast","description":"Llama 3.3 70B quantized to fp8 precision, optimized to be faster.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2024-12-06 17:09:18.338","tags":[],"properties":[{"property_id":"async_queue","value":"true"},{"property_id":"context_window","value":"24000"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.293,"currency":"USD"},{"unit":"per M output tokens","price":2.253,"currency":"USD"}]},{"property_id":"function_calling","value":"true"},{"property_id":"terms","value":"https://github.com/meta-llama/llama-models/blob/main/models/llama3_3/LICENSE"}]},{"id":"7952d0cc-cb00-4e10-be02-667565c2ee0f","source":1,"name":"@cf/ibm-granite/granite-4.0-h-micro","description":"Granite 4.0 instruct models deliver strong performance across benchmarks, achieving industry-leading results in key agentic tasks like instruction following and function calling. These efficiencies make the models well-suited for a wide range of use cases like retrieval-augmented generation (RAG), multi-agent workflows, and edge deployments.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2025-10-07 18:46:29.436","tags":[],"properties":[{"property_id":"context_window","value":"131000"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.017,"currency":"USD"},{"unit":"per M output tokens","price":0.112,"currency":"USD"}]},{"property_id":"function_calling","value":"true"}]},{"id":"7912c0ab-542e-44b9-b9ee-3113d226a8b5","source":1,"name":"@cf/lykon/dreamshaper-8-lcm","description":"Stable Diffusion model that has been fine-tuned to be better at photorealism without sacrificing range.","task":{"id":"3d6e1f35-341b-4915-a6c8-9a7142a9033a","name":"Text-to-Image","description":"Generates images from input text. These models can be used to generate and modify images based on text prompts."},"created_at":"2024-02-27 17:40:38.881","tags":[],"properties":[{"property_id":"info","value":"https://huggingface.co/Lykon/DreamShaper"}]},{"id":"724608fa-983e-495d-b95c-340d6b7e78be","source":1,"name":"@cf/leonardo/phoenix-1.0","description":"Phoenix 1.0 is a model by Leonardo.Ai that generates images with exceptional prompt adherence and coherent text.","task":{"id":"3d6e1f35-341b-4915-a6c8-9a7142a9033a","name":"Text-to-Image","description":"Generates images from input text. These models can be used to generate and modify images based on text prompts."},"created_at":"2025-08-25 18:12:18.073","tags":[],"properties":[{"property_id":"price","value":[{"unit":"per 512 by 512 tile","price":0.00583,"currency":"USD"},{"unit":"per step","price":0.00011,"currency":"USD"}]},{"property_id":"partner","value":"true"},{"property_id":"terms","value":"https://leonardo.ai/terms-of-service/"}]},{"id":"6d52253a-b731-4a03-b203-cde2d4fae871","source":1,"name":"@cf/stabilityai/stable-diffusion-xl-base-1.0","description":"Diffusion-based text-to-image generative model by Stability AI. Generates and modify images based on text prompts.","task":{"id":"3d6e1f35-341b-4915-a6c8-9a7142a9033a","name":"Text-to-Image","description":"Generates images from input text. These models can be used to generate and modify images based on text prompts."},"created_at":"2023-11-10 10:54:43.694","tags":[],"properties":[{"property_id":"beta","value":"true"},{"property_id":"price","value":[{"unit":"per step","price":0,"currency":"USD"}]},{"property_id":"info","value":"https://stability.ai/stable-diffusion"},{"property_id":"terms","value":"https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/LICENSE.md"}]},{"id":"617e7ec3-bf8d-4088-a863-4f89582d91b5","source":1,"name":"@cf/meta/m2m100-1.2b","description":"Multilingual encoder-decoder (seq-to-seq) model trained for Many-to-Many multilingual translation","task":{"id":"f57d07cb-9087-487a-bbbf-bc3e17fecc4b","name":"Translation","description":"Translation models convert a sequence of text from one language to another."},"created_at":"2023-09-25 19:21:11.898","tags":[],"properties":[{"property_id":"async_queue","value":"true"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.342,"currency":"USD"},{"unit":"per M output tokens","price":0.342,"currency":"USD"}]},{"property_id":"info","value":"https://github.com/facebookresearch/fairseq/tree/main/examples/m2m_100"},{"property_id":"languages","value":"english, chinese, french, spanish, arabic, russian, german, japanese, portuguese, hindi"},{"property_id":"terms","value":"https://github.com/facebookresearch/fairseq/blob/main/LICENSE"}]},{"id":"60920ed4-cf72-449a-a0f3-a38456b78262","source":1,"name":"@cf/ai4bharat/indictrans2-en-indic-1B","description":"IndicTrans2 is the first open-source transformer-based multilingual NMT model that supports high-quality translations across all the 22 scheduled Indic languages","task":{"id":"f57d07cb-9087-487a-bbbf-bc3e17fecc4b","name":"Translation","description":"Translation models convert a sequence of text from one language to another."},"created_at":"2025-09-23 18:19:17.382","tags":[],"properties":[{"property_id":"price","value":[{"unit":"per M input tokens","price":0.342,"currency":"USD"},{"unit":"per M output tokens","price":0.342,"currency":"USD"}]}]},{"id":"5cdffa8e-1b1e-48e8-85f1-ab9b943cdd32","source":1,"name":"@cf/black-forest-labs/flux-2-klein-4b","description":"FLUX.2 [klein] is an ultra-fast, distilled image model. It unifies image generation and editing in a single model, delivering state-of-the-art quality enabling interactive workflows, real-time previews, and latency-critical applications.","task":{"id":"3d6e1f35-341b-4915-a6c8-9a7142a9033a","name":"Text-to-Image","description":"Generates images from input text. These models can be used to generate and modify images based on text prompts."},"created_at":"2026-01-14 12:54:55.024","tags":[],"properties":[{"property_id":"partner","value":"true"},{"property_id":"terms","value":"https://bfl.ai/legal/terms-of-service"}]},{"id":"57fbd08a-a4c4-411c-910d-b9459ff36c20","source":1,"name":"@cf/baai/bge-small-en-v1.5","description":"BAAI general embedding (Small) model that transforms any given text into a 384-dimensional vector","task":{"id":"0137cdcf-162a-4108-94f2-1ca59e8c65ee","name":"Text Embeddings","description":"Feature extraction models transform raw data into numerical features that can be processed while preserving the information in the original dataset. These models are ideal as part of building vector search applications or Retrieval Augmented Generation workflows with Large Language Models (LLM)."},"created_at":"2023-11-07 15:43:58.042","tags":[],"properties":[{"property_id":"async_queue","value":"true"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.0202,"currency":"USD"}]},{"property_id":"info","value":"https://huggingface.co/BAAI/bge-small-en-v1.5"},{"property_id":"max_input_tokens","value":"512"},{"property_id":"output_dimensions","value":"384"}]},{"id":"51b71d5b-8bc0-4489-a107-95e542b69914","source":1,"name":"@cf/qwen/qwen2.5-coder-32b-instruct","description":"Qwen2.5-Coder is the latest series of Code-Specific Qwen large language models (formerly known as CodeQwen). As of now, Qwen2.5-Coder has covered six mainstream model sizes, 0.5, 1.5, 3, 7, 14, 32 billion parameters, to meet the needs of different developers. Qwen2.5-Coder brings the following improvements upon CodeQwen1.5:","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2025-02-27 00:31:43.829","tags":[],"properties":[{"property_id":"context_window","value":"32768"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.66,"currency":"USD"},{"unit":"per M output tokens","price":1,"currency":"USD"}]},{"property_id":"lora","value":"true"}]},{"id":"4edc7dfe-de78-4156-890c-85b79227694e","source":1,"name":"@cf/zai-org/glm-5.2","description":"Z.ai's flagship agentic coding model","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2026-06-15 09:51:05.921","tags":[],"properties":[{"property_id":"context_window","value":"262144"},{"property_id":"price","value":[{"unit":"per M input tokens","price":1.4,"currency":"USD"},{"unit":"per M output tokens","price":4.4,"currency":"USD"},{"unit":"per M cached input tokens","price":0.26,"currency":"USD"}]},{"property_id":"function_calling","value":"true"},{"property_id":"reasoning","value":"true"}]},{"id":"43dbadb4-2b0a-47e9-8479-34a49b971f1e","source":1,"name":"@cf/nvidia/nemotron-3-120b-a12b","description":"NVIDIA Nemotron 3 Super is a hybrid MoE model with leading accuracy for multi-agent applications and specialized agentic AI systems.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2026-02-24 23:22:47.215","tags":[],"properties":[{"property_id":"context_window","value":"256000"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.5,"currency":"USD"},{"unit":"per M output tokens","price":1.5,"currency":"USD"}]},{"property_id":"function_calling","value":"true"},{"property_id":"reasoning","value":"true"},{"property_id":"terms","value":"https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-nemotron-open-model-license/"}]},{"id":"429b9e8b-d99e-44de-91ad-706cf8183658","source":1,"name":"@cf/baai/bge-base-en-v1.5","description":"BAAI general embedding (Base) model that transforms any given text into a 768-dimensional vector","task":{"id":"0137cdcf-162a-4108-94f2-1ca59e8c65ee","name":"Text Embeddings","description":"Feature extraction models transform raw data into numerical features that can be processed while preserving the information in the original dataset. These models are ideal as part of building vector search applications or Retrieval Augmented Generation workflows with Large Language Models (LLM)."},"created_at":"2023-09-25 19:21:11.898","tags":[],"properties":[{"property_id":"async_queue","value":"true"},{"property_id":"context_window","value":"153600"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.0666,"currency":"USD"}]},{"property_id":"info","value":"https://huggingface.co/BAAI/bge-base-en-v1.5"},{"property_id":"max_input_tokens","value":"512"},{"property_id":"output_dimensions","value":"768"}]},{"id":"41ca173f-72d5-4420-8915-49e835d2676e","source":1,"name":"@cf/aisingapore/gemma-sea-lion-v4-27b-it","description":"SEA-LION stands for Southeast Asian Languages In One Network, which is a collection of Large Language Models (LLMs) which have been pretrained and instruct-tuned for the Southeast Asia (SEA) region.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2025-09-23 19:27:30.468","tags":[],"properties":[{"property_id":"context_window","value":"128000"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.351,"currency":"USD"},{"unit":"per M output tokens","price":0.555,"currency":"USD"}]}]},{"id":"4090e54c-eee4-4221-b410-10c1c0f92f17","source":1,"name":"@cf/qwen/qwen3-30b-a3b-fp8","description":"Qwen3 is the latest generation of large language models in Qwen series, offering a comprehensive suite of dense and mixture-of-experts (MoE) models. Built upon extensive training, Qwen3 delivers groundbreaking advancements in reasoning, instruction-following, agent capabilities, and multilingual support.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2025-04-30 21:36:10.009","tags":[],"properties":[{"property_id":"async_queue","value":"true"},{"property_id":"context_window","value":"32768"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.0509,"currency":"USD"},{"unit":"per M output tokens","price":0.335,"currency":"USD"}]},{"property_id":"function_calling","value":"true"},{"property_id":"reasoning","value":"true"}]},{"id":"3ae8936e-593e-4fb2-85ee-95dd8a057588","source":1,"name":"@cf/black-forest-labs/flux-2-dev","description":"FLUX.2 [dev] is an image model from Black Forest Labs where you can generate highly realistic and detailed images, with multi-reference support.","task":{"id":"3d6e1f35-341b-4915-a6c8-9a7142a9033a","name":"Text-to-Image","description":"Generates images from input text. These models can be used to generate and modify images based on text prompts."},"created_at":"2025-11-24 15:44:06.050","tags":[],"properties":[{"property_id":"partner","value":"true"},{"property_id":"terms","value":"https://bfl.ai/legal/terms-of-service"}]},{"id":"337170b7-bd2f-4631-9a57-688b579cf6d3","source":1,"name":"@cf/google/gemma-7b-it-lora","description":" This is a Gemma-7B base model that Cloudflare dedicates for inference with LoRA adapters. Gemma is a family of lightweight, state-of-the-art open models from Google, built from the same research and technology used to create the Gemini models.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2024-04-02 00:20:19.633","tags":[],"properties":[{"property_id":"beta","value":"true"},{"property_id":"context_window","value":"3500"},{"property_id":"lora","value":"true"}]},{"id":"328adb49-4a7d-43e3-a2d5-802ae8100fe7","source":1,"name":"@cf/google/gemma-4-26b-a4b-it","description":"Gemma 4 is Google's most intelligent family of open models, built from Gemini 3 research to maximize intelligence-per-parameter.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2026-04-02 15:05:22.642","tags":[],"properties":[{"property_id":"async_queue","value":"false"},{"property_id":"context_window","value":"256000"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.1,"currency":"USD"},{"unit":"per M output tokens","price":0.3,"currency":"USD"}]},{"property_id":"function_calling","value":"true"},{"property_id":"reasoning","value":"true"},{"property_id":"terms","value":"https://ai.google.dev/gemma/docs/gemma_4_license"},{"property_id":"vision","value":"true"}]},{"id":"31690291-ebdc-4f98-bcfc-a44844e215b7","source":1,"name":"@cf/mistralai/mistral-small-3.1-24b-instruct","description":"Building upon Mistral Small 3 (2501), Mistral Small 3.1 (2503) adds state-of-the-art vision understanding and enhances long context capabilities up to 128k tokens without compromising text performance. With 24 billion parameters, this model achieves top-tier capabilities in both text and vision tasks.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2025-03-18 03:28:37.890","tags":[],"properties":[{"property_id":"context_window","value":"128000"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.351,"currency":"USD"},{"unit":"per M output tokens","price":0.555,"currency":"USD"}]},{"property_id":"function_calling","value":"true"}]},{"id":"2cbc033b-ded8-4e02-bbb2-47cf05d5cfe5","source":1,"name":"@cf/meta/llama-3.2-11b-vision-instruct","description":" The Llama 3.2-Vision instruction-tuned models are optimized for visual recognition, image reasoning, captioning, and answering general questions about an image.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2024-09-25 05:36:04.547","tags":[],"properties":[{"property_id":"context_window","value":"128000"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.0485,"currency":"USD"},{"unit":"per M output tokens","price":0.676,"currency":"USD"}]},{"property_id":"lora","value":"true"},{"property_id":"terms","value":"https://github.com/meta-llama/llama-models/blob/main/models/llama3_2/LICENSE"},{"property_id":"vision","value":"true"}]},{"id":"2169496d-9c0e-4e49-8399-c44ee66bff7d","source":1,"name":"@cf/openai/whisper-tiny-en","description":"Whisper is a pre-trained model for automatic speech recognition (ASR) and speech translation. Trained on 680k hours of labelled data, Whisper models demonstrate a strong ability to generalize to many datasets and domains without the need for fine-tuning. This is the English-only version of the Whisper Tiny model which was trained on the task of speech recognition.","task":{"id":"dfce1c48-2a81-462e-a7fd-de97ce985207","name":"Automatic Speech Recognition","description":"Automatic speech recognition (ASR) models convert a speech signal, typically an audio input, to text."},"created_at":"2024-04-22 20:59:02.731","tags":[],"properties":[{"property_id":"beta","value":"true"}]},{"id":"200f0812-148c-48c1-915d-fb3277a94a08","source":1,"name":"@cf/openai/whisper-large-v3-turbo","description":"Whisper is a pre-trained model for automatic speech recognition (ASR) and speech translation. ","task":{"id":"dfce1c48-2a81-462e-a7fd-de97ce985207","name":"Automatic Speech Recognition","description":"Automatic speech recognition (ASR) models convert a speech signal, typically an audio input, to text."},"created_at":"2024-05-22 00:02:18.656","tags":[],"properties":[{"property_id":"async_queue","value":"true"},{"property_id":"price","value":[{"unit":"per audio minute","price":0.000513,"currency":"USD"}]}]},{"id":"1f55679f-009e-4456-aa4f-049a62b4b6a0","source":1,"name":"@cf/deepgram/aura-1","description":"Aura is a context-aware text-to-speech (TTS) model that applies natural pacing, expressiveness, and fillers based on the context of the provided text. The quality of your text input directly impacts the naturalness of the audio output.","task":{"id":"b52660a1-9a95-4ab2-8b1d-f232be34604a","name":"Text-to-Speech","description":"Text-to-Speech (TTS) is the task of generating natural sounding speech given text input. TTS models can be extended to have a single model that generates speech for multiple speakers and multiple languages."},"created_at":"2025-08-27 01:18:18.880","tags":[],"properties":[{"property_id":"async_queue","value":"true"},{"property_id":"price","value":[{"unit":"per 1k characters","price":0.015,"currency":"USD"}]},{"property_id":"partner","value":"true"},{"property_id":"terms","value":"https://deepgram.com/terms"},{"property_id":"realtime","value":"true"}]},{"id":"19547f04-7a6a-4f87-bf2c-f5e32fb12dc5","source":1,"name":"@cf/runwayml/stable-diffusion-v1-5-img2img","description":"Stable Diffusion is a latent text-to-image diffusion model capable of generating photo-realistic images. Img2img generate a new image from an input image with Stable Diffusion. ","task":{"id":"3d6e1f35-341b-4915-a6c8-9a7142a9033a","name":"Text-to-Image","description":"Generates images from input text. These models can be used to generate and modify images based on text prompts."},"created_at":"2024-02-27 17:32:28.581","tags":[],"properties":[{"property_id":"beta","value":"true"},{"property_id":"price","value":[{"unit":"per step","price":0,"currency":"USD"}]},{"property_id":"info","value":"https://huggingface.co/runwayml/stable-diffusion-v1-5"},{"property_id":"terms","value":"https://github.com/runwayml/stable-diffusion/blob/main/LICENSE"}]},{"id":"188a4e1e-253e-46d0-9616-0bf8c149763f","source":1,"name":"@cf/openai/gpt-oss-20b","description":"OpenAI’s open-weight models designed for powerful reasoning, agentic tasks, and versatile developer use cases – gpt-oss-20b is for lower latency, and local or specialized use-cases.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2025-08-05 10:49:53.265","tags":[],"properties":[{"property_id":"context_window","value":"128000"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.2,"currency":"USD"},{"unit":"per M output tokens","price":0.3,"currency":"USD"}]},{"property_id":"function_calling","value":"true"},{"property_id":"reasoning","value":"true"}]},{"id":"15631501-2742-4346-a469-22fe202188a2","source":1,"name":"@cf/google/embeddinggemma-300m","description":"EmbeddingGemma is a 300M parameter, state-of-the-art for its size, open embedding model from Google, built from Gemma 3 (with T5Gemma initialization) and the same research and technology used to create Gemini models. EmbeddingGemma produces vector representations of text, making it well-suited for search and retrieval tasks, including classification, clustering, and semantic similarity search. This model was trained with data in 100+ spoken languages.","task":{"id":"0137cdcf-162a-4108-94f2-1ca59e8c65ee","name":"Text Embeddings","description":"Feature extraction models transform raw data into numerical features that can be processed while preserving the information in the original dataset. These models are ideal as part of building vector search applications or Retrieval Augmented Generation workflows with Large Language Models (LLM)."},"created_at":"2025-09-04 16:38:44.980","tags":[],"properties":[]},{"id":"145337e7-cec3-4ebb-8e78-16ddfc75e580","source":1,"name":"@cf/baai/bge-reranker-base","description":"Different from embedding model, reranker uses question and document as input and directly output similarity instead of embedding. You can get a relevance score by inputting query and passage to the reranker. And the score can be mapped to a float value in [0,1] by sigmoid function.\n\n","task":{"id":"19606750-23ed-4371-aab2-c20349b53a60","name":"Text Classification","description":"Sentiment analysis or text classification is a common NLP task that classifies a text input into labels or classes."},"created_at":"2025-02-14 12:28:19.009","tags":[],"properties":[{"property_id":"price","value":[{"unit":"per M input tokens","price":0.00311,"currency":"USD"}]}]},{"id":"1161560b-87f9-4795-afb3-a905cf21bcf8","source":1,"name":"@cf/moondream/moondream3.1-9B-A2B","description":"Moondream 3 is a fast, efficient 9B mixture-of-experts vision language model (2B active parameters) that delivers frontier-level visual reasoning for tasks like object detection, pointing, OCR, and structured output.","task":{"id":"882a91d1-c331-4eec-bdad-834c919942a8","name":"Image-to-Text","description":"Image to text models output a text from a given image. Image captioning or optical character recognition can be considered as the most common applications of image to text."},"created_at":"2026-07-07 14:39:02.726","tags":[],"properties":[{"property_id":"price","value":[{"unit":"per M input tokens","price":0.3,"currency":"USD"},{"unit":"per M output tokens","price":1,"currency":"USD"}]},{"property_id":"terms","value":"https://moondream.ai/licenses/model/1.0"},{"property_id":"vision","value":"true"}]},{"id":"0e372c11-8720-46c9-a02d-666188a22dae","source":1,"name":"@cf/leonardo/lucid-origin","description":"Lucid Origin from Leonardo.AI is their most adaptable and prompt-responsive model to date. Whether you're generating images with sharp graphic design, stunning full-HD renders, or highly specific creative direction, it adheres closely to your prompts, renders text with accuracy, and supports a wide array of visual styles and aesthetics – from stylized concept art to crisp product mockups.\n","task":{"id":"3d6e1f35-341b-4915-a6c8-9a7142a9033a","name":"Text-to-Image","description":"Generates images from input text. These models can be used to generate and modify images based on text prompts."},"created_at":"2025-08-25 19:21:28.770","tags":[],"properties":[{"property_id":"price","value":[{"unit":"per 512 by 512 tile","price":0.007,"currency":"USD"},{"unit":"per step","price":0.000132,"currency":"USD"}]},{"property_id":"partner","value":"true"},{"property_id":"terms","value":"https://leonardo.ai/terms-of-service/"}]},{"id":"06455e78-19f7-487b-93cd-c05a3dd07813","source":1,"name":"@cf/meta/llama-4-scout-17b-16e-instruct","description":"Meta's Llama 4 Scout is a 17 billion parameter model with 16 experts that is natively multimodal. These models leverage a mixture-of-experts architecture to offer industry-leading performance in text and image understanding.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2025-04-05 20:25:56.137","tags":[],"properties":[{"property_id":"async_queue","value":"true"},{"property_id":"context_window","value":"131000"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.27,"currency":"USD"},{"unit":"per M output tokens","price":0.85,"currency":"USD"}]},{"property_id":"function_calling","value":"true"},{"property_id":"terms","value":"https://github.com/meta-llama/llama-models/blob/main/models/llama4/LICENSE"},{"property_id":"vision","value":"true"}]},{"id":"02c16efa-29f5-4304-8e6c-3d188889f875","source":1,"name":"@cf/qwen/qwq-32b","description":"QwQ is the reasoning model of the Qwen series. Compared with conventional instruction-tuned models, QwQ, which is capable of thinking and reasoning, can achieve significantly enhanced performance in downstream tasks, especially hard problems. QwQ-32B is the medium-sized reasoning model, which is capable of achieving competitive performance against state-of-the-art reasoning models, e.g., DeepSeek-R1, o1-mini.","task":{"id":"c329a1f9-323d-4e91-b2aa-582dd4188d34","name":"Text Generation","description":"Family of generative text models, such as large language models (LLM), that can be adapted for a variety of natural language tasks."},"created_at":"2025-03-05 21:52:40.974","tags":[],"properties":[{"property_id":"context_window","value":"24000"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.66,"currency":"USD"},{"unit":"per M output tokens","price":1,"currency":"USD"}]},{"property_id":"lora","value":"true"},{"property_id":"reasoning","value":"true"}]},{"id":"01bc2fb0-4bca-4598-b985-d2584a3f46c0","source":1,"name":"@cf/baai/bge-large-en-v1.5","description":"BAAI general embedding (Large) model that transforms any given text into a 1024-dimensional vector","task":{"id":"0137cdcf-162a-4108-94f2-1ca59e8c65ee","name":"Text Embeddings","description":"Feature extraction models transform raw data into numerical features that can be processed while preserving the information in the original dataset. These models are ideal as part of building vector search applications or Retrieval Augmented Generation workflows with Large Language Models (LLM)."},"created_at":"2023-11-07 15:43:58.042","tags":[],"properties":[{"property_id":"async_queue","value":"true"},{"property_id":"price","value":[{"unit":"per M input tokens","price":0.204,"currency":"USD"}]},{"property_id":"info","value":"https://huggingface.co/BAAI/bge-large-en-v1.5"},{"property_id":"max_input_tokens","value":"512"},{"property_id":"output_dimensions","value":"1024"}]},{"id":"01564c52-8717-47dc-8efd-907a2ca18301","source":1,"name":"@cf/deepgram/aura-2-en","description":"Aura-2 is a context-aware text-to-speech (TTS) model that applies natural pacing, expressiveness, and fillers based on the context of the provided text. The quality of your text input directly impacts the naturalness of the audio output.","task":{"id":"b52660a1-9a95-4ab2-8b1d-f232be34604a","name":"Text-to-Speech","description":"Text-to-Speech (TTS) is the task of generating natural sounding speech given text input. TTS models can be extended to have a single model that generates speech for multiple speakers and multiple languages."},"created_at":"2025-10-09 22:19:34.483","tags":[],"properties":[{"property_id":"async_queue","value":"true"},{"property_id":"price","value":[{"unit":"per 1k characters","price":0.03,"currency":"USD"}]},{"property_id":"partner","value":"true"},{"property_id":"terms","value":"https://deepgram.com/terms"},{"property_id":"realtime","value":"true"}]}],"errors":[],"messages":[],"result_info":{"count":61,"page":1,"per_page":100,"total_count":269}} \ No newline at end of file diff --git a/packages/core/test/sync.test.ts b/packages/core/test/sync.test.ts index 61357f3636..cce1caf361 100644 --- a/packages/core/test/sync.test.ts +++ b/packages/core/test/sync.test.ts @@ -1,5 +1,5 @@ import { expect, test } from "bun:test"; -import { mkdtemp, readFile, rm } from "node:fs/promises"; +import { mkdir, mkdtemp, readFile, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import path from "node:path"; @@ -10,6 +10,12 @@ import { parseAnthropicPricing, type AnthropicModel, } from "../src/sync/providers/anthropic.js"; +import { + buildWorkersAiModel, + cloudflareWorkersAi, + reshapeNative, + type NativeModel, +} from "../src/sync/providers/cloudflare-workers-ai.js"; import { buildDeepInfraModel, type DeepInfraModel } from "../src/sync/providers/deepinfra.js"; import { buildDigitalOceanModel, @@ -28,8 +34,8 @@ import { import { buildOpenRouterModel, openrouter, + OpenRouterModel, resolveCanonicalBaseModel, - type OpenRouterModel, } from "../src/sync/providers/openrouter.js"; import { buildLLMGatewayModel, type LLMGatewayModel } from "../src/sync/providers/llmgateway.js"; import { openai, parseOpenAIModels } from "../src/sync/providers/openai.js"; @@ -1348,3 +1354,138 @@ function openRouterModel(overrides: Partial = {}): OpenRouterMo ...overrides, }; } + +test("reshapes all Cloudflare Workers AI native fixture records into valid models", async () => { + const fixture = await Bun.file( + path.join(import.meta.dirname, "fixtures", "cloudflare-workers-ai-native.json"), + ).json() as { result: NativeModel[] }; + + const byID = new Map>(); + let valid = 0; + for (const native of fixture.result) { + const parsed = OpenRouterModel.parse(reshapeNative(native)); + const model = buildWorkersAiModel(parsed, undefined); + expect(model).toBeDefined(); + valid++; + byID.set(native.name, model); + } + + expect(valid).toBe(61); + + // No native record reports open_weights; every model fakes it to false, unless a + // matching base_model entry (e.g. gpt-oss-120b -> openai/gpt-oss-120b) supplies + // the real value instead. + for (const id of ["@cf/baai/bge-m3", "@cf/meta/m2m100-1.2b", "@cf/openai/whisper"]) { + expect(byID.get(id)?.open_weights).toBe(false); + } + + // No native record reports an output-token limit; it falls back to context when + // known (matching openrouter.ts's own fallback), or to 0 when context is also + // unknown. + expect(byID.get("@cf/baai/bge-m3")?.limit?.output).toBe(60_000); + + // Neither model's native record reports context_window, so both fake to 0. + for (const id of ["@cf/openai/whisper", "@cf/meta/m2m100-1.2b"]) { + expect(byID.get(id)?.limit?.context).toBe(0); + expect(byID.get(id)?.limit?.output).toBe(0); + } +}); + +test("round-trips exact Cloudflare Workers AI native token pricing", async () => { + const fixture = await Bun.file( + path.join(import.meta.dirname, "fixtures", "cloudflare-workers-ai-native.json"), + ).json() as { result: NativeModel[] }; + const byName = new Map(fixture.result.map((model) => [model.name, model])); + + const gptOss120b = byName.get("@cf/openai/gpt-oss-120b"); + const bgeM3 = byName.get("@cf/baai/bge-m3"); + const m2m100 = byName.get("@cf/meta/m2m100-1.2b"); + if (gptOss120b === undefined || bgeM3 === undefined || m2m100 === undefined) { + throw new Error("Fixture is missing an expected model"); + } + + const buildCost = (native: NativeModel) => { + return buildWorkersAiModel(OpenRouterModel.parse(reshapeNative(native)), undefined).cost; + }; + + expect(buildCost(gptOss120b)).toMatchObject({ input: 0.35, output: 0.75 }); + expect(buildCost(bgeM3)).toMatchObject({ input: 0.0118 }); + expect(buildCost(m2m100)).toMatchObject({ input: 0.342, output: 0.342 }); +}); + +test("merges Cloudflare Workers AI openrouter and native formats, openrouter winning on overlap", async () => { + const fixture = await Bun.file( + path.join(import.meta.dirname, "fixtures", "cloudflare-workers-ai-native.json"), + ).json() as { result: NativeModel[] }; + + const nativeOnly = fixture.result.find((model) => model.name === "@cf/openai/whisper"); + const nativeOverlap = fixture.result.find((model) => model.name === "@cf/openai/gpt-oss-120b"); + if (nativeOnly === undefined || nativeOverlap === undefined) { + throw new Error("Fixture is missing an expected model"); + } + + // A richer openrouter-format record for the same id as `nativeOverlap`, carrying fields + // (hugging_face_id) the native format never reports. + const openrouterOverlap = { + id: "workers-ai/@cf/openai/gpt-oss-120b", + name: "OpenAI: gpt-oss-120b", + created: 1_700_000_000, + hugging_face_id: "openai/gpt-oss-120b", + context_length: 128_000, + max_output_length: 16_384, + pricing: { prompt: "0.00000035", completion: "0.00000075" }, + }; + + const sourceModels = cloudflareWorkersAi.parseModels({ + openrouter: [openrouterOverlap], + native: [nativeOnly, nativeOverlap], + }); + + expect(sourceModels).toHaveLength(2); + + const overlap = sourceModels.find((source) => source.model.name.includes("gpt-oss-120b")); + const onlyNative = sourceModels.find((source) => source.format === "native" && source.model.name === "@cf/openai/whisper"); + expect(overlap?.format).toBe("openrouter"); + expect(onlyNative).toBeDefined(); +}); + +test("translateModel dispatches native and openrouter source models through their respective reshape paths", () => { + const context = { existing: () => undefined, authored: () => undefined }; + + const nativeSource = { + format: "native" as const, + model: { + id: "11111111-1111-1111-1111-111111111111", + name: "@cf/baai/bge-m3", + description: "Embeddings model", + task: { name: "Text Embeddings" }, + created_at: "2024-05-22 00:00:00.000", + properties: [ + { property_id: "context_window", value: "60000" }, + { property_id: "price", value: [{ unit: "per M input tokens", price: 0.0118, currency: "USD" }] }, + ], + }, + }; + const nativeTranslated = cloudflareWorkersAi.translateModel(nativeSource, context); + expect(nativeTranslated?.id).toBe("@cf/baai/bge-m3"); + expect(nativeTranslated?.model.cost).toMatchObject({ input: 0.0118 }); + expect(nativeTranslated?.model.open_weights).toBe(false); + + const openrouterSource = { + format: "openrouter" as const, + model: { + id: "workers-ai/@cf/meta/llama-3.1-8b-instruct-fp8", + name: "Meta: Llama 3.1 8B Instruct FP8", + created: 1_700_000_000, + hugging_face_id: null, + knowledge_cutoff: null, + context_length: 32_000, + architecture: { input_modalities: ["text"], output_modalities: ["text"] }, + pricing: { prompt: "0.000000152", completion: "0.000000287" }, + top_provider: { context_length: 32_000, max_completion_tokens: 4_096 }, + supported_parameters: [], + }, + }; + const openrouterTranslated = cloudflareWorkersAi.translateModel(openrouterSource, context); + expect(openrouterTranslated?.id).toBe("@cf/meta/llama-3.1-8b-instruct-fp8"); +}); From 642a38a0e5dbb024e865671d9a60202cf2eebae4 Mon Sep 17 00:00:00 2001 From: Michael Dwan Date: Wed, 15 Jul 2026 14:44:43 -0500 Subject: [PATCH 4/6] sync(cloudflare-workers-ai): add the 39 models the native-catalog fetch surfaces These 39 TOMLs are the sync's output against the live Workers AI API: every model Cloudflare serves that only reports through the native shape, not format=openrouter -- 5 embedding models, 3 TTS voices, ASR (whisper), translation (m2m100), image classification, several text-to-image models, a couple of LoRA chat variants, and others. They existed on Cloudflare's side already; the sync had no path to them until now. The 22 existing chat models came out byte-identical. --- .../ai4bharat/indictrans2-en-indic-1B.toml | 22 +++++++++++++++++ .../models/@cf/baai/bge-base-en-v1.5.toml | 23 ++++++++++++++++++ .../models/@cf/baai/bge-large-en-v1.5.toml | 23 ++++++++++++++++++ .../models/@cf/baai/bge-m3.toml | 23 ++++++++++++++++++ .../models/@cf/baai/bge-reranker-base.toml | 23 ++++++++++++++++++ .../models/@cf/baai/bge-small-en-v1.5.toml | 23 ++++++++++++++++++ .../@cf/black-forest-labs/flux-1-schnell.toml | 19 +++++++++++++++ .../@cf/black-forest-labs/flux-2-dev.toml | 19 +++++++++++++++ .../black-forest-labs/flux-2-klein-4b.toml | 19 +++++++++++++++ .../black-forest-labs/flux-2-klein-9b.toml | 19 +++++++++++++++ .../stable-diffusion-xl-lightning.toml | 19 +++++++++++++++ .../models/@cf/deepgram/aura-1.toml | 24 +++++++++++++++++++ .../models/@cf/deepgram/aura-2-en.toml | 24 +++++++++++++++++++ .../models/@cf/deepgram/aura-2-es.toml | 24 +++++++++++++++++++ .../models/@cf/deepgram/flux.toml | 24 +++++++++++++++++++ .../models/@cf/deepgram/nova-3.toml | 24 +++++++++++++++++++ .../@cf/google/embeddinggemma-300m.toml | 18 ++++++++++++++ .../models/@cf/google/gemma-2b-it-lora.toml | 19 +++++++++++++++ .../models/@cf/google/gemma-7b-it-lora.toml | 19 +++++++++++++++ .../huggingface/distilbert-sst-2-int8.toml | 23 ++++++++++++++++++ .../models/@cf/leonardo/lucid-origin.toml | 19 +++++++++++++++ .../models/@cf/leonardo/phoenix-1.0.toml | 19 +++++++++++++++ .../models/@cf/llava-hf/llava-1.5-7b-hf.toml | 19 +++++++++++++++ .../models/@cf/lykon/dreamshaper-8-lcm.toml | 19 +++++++++++++++ .../meta-llama/llama-2-7b-chat-hf-lora.toml | 19 +++++++++++++++ .../models/@cf/meta/m2m100-1.2b.toml | 22 +++++++++++++++++ .../models/@cf/microsoft/resnet-50.toml | 19 +++++++++++++++ .../mistral-7b-instruct-v0.2-lora.toml | 19 +++++++++++++++ .../@cf/moondream/moondream3.1-9B-A2B.toml | 22 +++++++++++++++++ .../models/@cf/myshell-ai/melotts.toml | 24 +++++++++++++++++++ .../@cf/openai/whisper-large-v3-turbo.toml | 24 +++++++++++++++++++ .../models/@cf/openai/whisper-tiny-en.toml | 19 +++++++++++++++ .../models/@cf/openai/whisper.toml | 24 +++++++++++++++++++ .../models/@cf/pfnet/plamo-embedding-1b.toml | 23 ++++++++++++++++++ .../models/@cf/pipecat-ai/smart-turn-v2.toml | 24 +++++++++++++++++++ .../models/@cf/qwen/qwen3-embedding-0.6b.toml | 23 ++++++++++++++++++ .../stable-diffusion-v1-5-img2img.toml | 19 +++++++++++++++ .../stable-diffusion-v1-5-inpainting.toml | 19 +++++++++++++++ .../stable-diffusion-xl-base-1.0.toml | 19 +++++++++++++++ 39 files changed, 826 insertions(+) create mode 100644 providers/cloudflare-workers-ai/models/@cf/ai4bharat/indictrans2-en-indic-1B.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/baai/bge-base-en-v1.5.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/baai/bge-large-en-v1.5.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/baai/bge-m3.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/baai/bge-reranker-base.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/baai/bge-small-en-v1.5.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-1-schnell.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-dev.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-klein-4b.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-klein-9b.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/bytedance/stable-diffusion-xl-lightning.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/deepgram/aura-1.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/deepgram/aura-2-en.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/deepgram/aura-2-es.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/deepgram/flux.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/deepgram/nova-3.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/google/embeddinggemma-300m.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/google/gemma-2b-it-lora.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/google/gemma-7b-it-lora.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/huggingface/distilbert-sst-2-int8.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/leonardo/lucid-origin.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/leonardo/phoenix-1.0.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/llava-hf/llava-1.5-7b-hf.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/lykon/dreamshaper-8-lcm.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/meta-llama/llama-2-7b-chat-hf-lora.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/meta/m2m100-1.2b.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/microsoft/resnet-50.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/mistral/mistral-7b-instruct-v0.2-lora.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/moondream/moondream3.1-9B-A2B.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/myshell-ai/melotts.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/openai/whisper-large-v3-turbo.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/openai/whisper-tiny-en.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/openai/whisper.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/pfnet/plamo-embedding-1b.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/pipecat-ai/smart-turn-v2.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/qwen/qwen3-embedding-0.6b.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/runwayml/stable-diffusion-v1-5-img2img.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/runwayml/stable-diffusion-v1-5-inpainting.toml create mode 100644 providers/cloudflare-workers-ai/models/@cf/stabilityai/stable-diffusion-xl-base-1.0.toml diff --git a/providers/cloudflare-workers-ai/models/@cf/ai4bharat/indictrans2-en-indic-1B.toml b/providers/cloudflare-workers-ai/models/@cf/ai4bharat/indictrans2-en-indic-1B.toml new file mode 100644 index 0000000000..d3bec4ae45 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/ai4bharat/indictrans2-en-indic-1B.toml @@ -0,0 +1,22 @@ +name = "@cf/ai4bharat/indictrans2-en-indic-1B" +description = "General-purpose chat model for instruction following, writing, and analysis" +release_date = "2025-09-23" +last_updated = "2025-09-23" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.342 +output = 0.342 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/baai/bge-base-en-v1.5.toml b/providers/cloudflare-workers-ai/models/@cf/baai/bge-base-en-v1.5.toml new file mode 100644 index 0000000000..762bf3399d --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/baai/bge-base-en-v1.5.toml @@ -0,0 +1,23 @@ +name = "@cf/baai/bge-base-en-v1.5" +description = "General-purpose chat model for instruction following, writing, and analysis" +family = "bge" +release_date = "2023-09-25" +last_updated = "2023-09-25" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.0666 +output = 0 + +[limit] +context = 153_600 +output = 153_600 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/baai/bge-large-en-v1.5.toml b/providers/cloudflare-workers-ai/models/@cf/baai/bge-large-en-v1.5.toml new file mode 100644 index 0000000000..bde14ce6d4 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/baai/bge-large-en-v1.5.toml @@ -0,0 +1,23 @@ +name = "@cf/baai/bge-large-en-v1.5" +description = "Flagship model for demanding analysis, coding, and production agent workflows" +family = "bge" +release_date = "2023-11-07" +last_updated = "2023-11-07" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.204 +output = 0 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/baai/bge-m3.toml b/providers/cloudflare-workers-ai/models/@cf/baai/bge-m3.toml new file mode 100644 index 0000000000..c63e7dfb03 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/baai/bge-m3.toml @@ -0,0 +1,23 @@ +name = "@cf/baai/bge-m3" +description = "Flagship model for demanding analysis, coding, and production agent workflows" +family = "bge" +release_date = "2024-05-22" +last_updated = "2024-05-22" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.0118 +output = 0 + +[limit] +context = 60_000 +output = 60_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/baai/bge-reranker-base.toml b/providers/cloudflare-workers-ai/models/@cf/baai/bge-reranker-base.toml new file mode 100644 index 0000000000..4e1a5923a9 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/baai/bge-reranker-base.toml @@ -0,0 +1,23 @@ +name = "@cf/baai/bge-reranker-base" +description = "Reranking model for improving retrieval quality in search and recommendation systems" +family = "bge" +release_date = "2025-02-14" +last_updated = "2025-02-14" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.00311 +output = 0 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/baai/bge-small-en-v1.5.toml b/providers/cloudflare-workers-ai/models/@cf/baai/bge-small-en-v1.5.toml new file mode 100644 index 0000000000..ed71ff8bba --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/baai/bge-small-en-v1.5.toml @@ -0,0 +1,23 @@ +name = "@cf/baai/bge-small-en-v1.5" +description = "Efficient model for low-latency assistance, extraction, and routine automation" +family = "bge" +release_date = "2023-11-07" +last_updated = "2023-11-07" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.0202 +output = 0 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-1-schnell.toml b/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-1-schnell.toml new file mode 100644 index 0000000000..af9c4ff26a --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-1-schnell.toml @@ -0,0 +1,19 @@ +name = "@cf/black-forest-labs/flux-1-schnell" +description = "Image model for prompt-driven generation, editing, and visual design workflows" +family = "flux" +release_date = "2024-08-29" +last_updated = "2024-08-29" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["image"] diff --git a/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-dev.toml b/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-dev.toml new file mode 100644 index 0000000000..3abacd1031 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-dev.toml @@ -0,0 +1,19 @@ +name = "@cf/black-forest-labs/flux-2-dev" +description = "Image model for prompt-driven generation, editing, and visual design workflows" +family = "flux" +release_date = "2025-11-24" +last_updated = "2025-11-24" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["image"] diff --git a/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-klein-4b.toml b/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-klein-4b.toml new file mode 100644 index 0000000000..c044c8a536 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-klein-4b.toml @@ -0,0 +1,19 @@ +name = "@cf/black-forest-labs/flux-2-klein-4b" +description = "Image model for prompt-driven generation, editing, and visual design workflows" +family = "flux" +release_date = "2026-01-14" +last_updated = "2026-01-14" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["image"] diff --git a/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-klein-9b.toml b/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-klein-9b.toml new file mode 100644 index 0000000000..6530fcb422 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-klein-9b.toml @@ -0,0 +1,19 @@ +name = "@cf/black-forest-labs/flux-2-klein-9b" +description = "Image model for prompt-driven generation, editing, and visual design workflows" +family = "flux" +release_date = "2026-01-14" +last_updated = "2026-01-14" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["image"] diff --git a/providers/cloudflare-workers-ai/models/@cf/bytedance/stable-diffusion-xl-lightning.toml b/providers/cloudflare-workers-ai/models/@cf/bytedance/stable-diffusion-xl-lightning.toml new file mode 100644 index 0000000000..5dadb9b324 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/bytedance/stable-diffusion-xl-lightning.toml @@ -0,0 +1,19 @@ +name = "@cf/bytedance/stable-diffusion-xl-lightning" +description = "Image model for prompt-driven generation, editing, and visual design workflows" +family = "stable-diffusion" +release_date = "2024-02-27" +last_updated = "2024-02-27" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["image"] diff --git a/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-1.toml b/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-1.toml new file mode 100644 index 0000000000..06dad8cd35 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-1.toml @@ -0,0 +1,24 @@ +name = "@cf/deepgram/aura-1" +description = "Speech generation model for controllable voice, narration, and audio delivery" +family = "aura" +release_date = "2025-08-27" +last_updated = "2025-08-27" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0 +output = 0 +output_audio = 0.015 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["audio"] diff --git a/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-2-en.toml b/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-2-en.toml new file mode 100644 index 0000000000..1060530f24 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-2-en.toml @@ -0,0 +1,24 @@ +name = "@cf/deepgram/aura-2-en" +description = "Speech generation model for controllable voice, narration, and audio delivery" +family = "aura" +release_date = "2025-10-09" +last_updated = "2025-10-09" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0 +output = 0 +output_audio = 0.03 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["audio"] diff --git a/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-2-es.toml b/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-2-es.toml new file mode 100644 index 0000000000..dee7925e1f --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-2-es.toml @@ -0,0 +1,24 @@ +name = "@cf/deepgram/aura-2-es" +description = "Speech generation model for controllable voice, narration, and audio delivery" +family = "aura" +release_date = "2025-10-09" +last_updated = "2025-10-09" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0 +output = 0 +output_audio = 0.03 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["audio"] diff --git a/providers/cloudflare-workers-ai/models/@cf/deepgram/flux.toml b/providers/cloudflare-workers-ai/models/@cf/deepgram/flux.toml new file mode 100644 index 0000000000..eed032bb90 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/deepgram/flux.toml @@ -0,0 +1,24 @@ +name = "@cf/deepgram/flux" +description = "Image model for prompt-driven generation, editing, and visual design workflows" +family = "flux" +release_date = "2025-09-29" +last_updated = "2025-09-29" +attachment = true +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0 +output = 0 +input_audio = 0.0077 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["audio"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/deepgram/nova-3.toml b/providers/cloudflare-workers-ai/models/@cf/deepgram/nova-3.toml new file mode 100644 index 0000000000..75a8f45757 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/deepgram/nova-3.toml @@ -0,0 +1,24 @@ +name = "@cf/deepgram/nova-3" +description = "Multimodal model for analyzing text, images, documents, and rich media" +family = "nova" +release_date = "2025-06-05" +last_updated = "2025-06-05" +attachment = true +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0 +output = 0 +input_audio = 0.0052 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["audio"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/google/embeddinggemma-300m.toml b/providers/cloudflare-workers-ai/models/@cf/google/embeddinggemma-300m.toml new file mode 100644 index 0000000000..f1725bbbee --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/google/embeddinggemma-300m.toml @@ -0,0 +1,18 @@ +name = "@cf/google/embeddinggemma-300m" +description = "General-purpose chat model for instruction following, writing, and analysis" +release_date = "2025-09-04" +last_updated = "2025-09-04" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/google/gemma-2b-it-lora.toml b/providers/cloudflare-workers-ai/models/@cf/google/gemma-2b-it-lora.toml new file mode 100644 index 0000000000..cfdc86c2d4 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/google/gemma-2b-it-lora.toml @@ -0,0 +1,19 @@ +name = "@cf/google/gemma-2b-it-lora" +description = "Open Gemma instruction model for efficient chat and self-hosted deployments" +family = "gemma" +release_date = "2024-04-02" +last_updated = "2024-04-02" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 8_192 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/google/gemma-7b-it-lora.toml b/providers/cloudflare-workers-ai/models/@cf/google/gemma-7b-it-lora.toml new file mode 100644 index 0000000000..010c3a9454 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/google/gemma-7b-it-lora.toml @@ -0,0 +1,19 @@ +name = "@cf/google/gemma-7b-it-lora" +description = "Open Gemma instruction model for efficient chat and self-hosted deployments" +family = "gemma" +release_date = "2024-04-02" +last_updated = "2024-04-02" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 3_500 +output = 3_500 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/huggingface/distilbert-sst-2-int8.toml b/providers/cloudflare-workers-ai/models/@cf/huggingface/distilbert-sst-2-int8.toml new file mode 100644 index 0000000000..bd057165ab --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/huggingface/distilbert-sst-2-int8.toml @@ -0,0 +1,23 @@ +name = "@cf/huggingface/distilbert-sst-2-int8" +description = "General-purpose chat model for instruction following, writing, and analysis" +family = "distilbert" +release_date = "2023-09-25" +last_updated = "2023-09-25" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.0263 +output = 0 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/leonardo/lucid-origin.toml b/providers/cloudflare-workers-ai/models/@cf/leonardo/lucid-origin.toml new file mode 100644 index 0000000000..debfd84dc5 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/leonardo/lucid-origin.toml @@ -0,0 +1,19 @@ +name = "@cf/leonardo/lucid-origin" +description = "Image model for prompt-driven generation, editing, and visual design workflows" +family = "lucid" +release_date = "2025-08-25" +last_updated = "2025-08-25" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["image"] diff --git a/providers/cloudflare-workers-ai/models/@cf/leonardo/phoenix-1.0.toml b/providers/cloudflare-workers-ai/models/@cf/leonardo/phoenix-1.0.toml new file mode 100644 index 0000000000..7f3eed28e6 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/leonardo/phoenix-1.0.toml @@ -0,0 +1,19 @@ +name = "@cf/leonardo/phoenix-1.0" +description = "Image model for prompt-driven generation, editing, and visual design workflows" +family = "phoenix" +release_date = "2025-08-25" +last_updated = "2025-08-25" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["image"] diff --git a/providers/cloudflare-workers-ai/models/@cf/llava-hf/llava-1.5-7b-hf.toml b/providers/cloudflare-workers-ai/models/@cf/llava-hf/llava-1.5-7b-hf.toml new file mode 100644 index 0000000000..a7e6cf9886 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/llava-hf/llava-1.5-7b-hf.toml @@ -0,0 +1,19 @@ +name = "@cf/llava-hf/llava-1.5-7b-hf" +description = "Multimodal model for analyzing text, images, documents, and rich media" +family = "llava" +release_date = "2024-05-01" +last_updated = "2024-05-01" +attachment = true +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["image", "text"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/lykon/dreamshaper-8-lcm.toml b/providers/cloudflare-workers-ai/models/@cf/lykon/dreamshaper-8-lcm.toml new file mode 100644 index 0000000000..550f15d3a6 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/lykon/dreamshaper-8-lcm.toml @@ -0,0 +1,19 @@ +name = "@cf/lykon/dreamshaper-8-lcm" +description = "Image model for prompt-driven generation, editing, and visual design workflows" +family = "dreamshaper" +release_date = "2024-02-27" +last_updated = "2024-02-27" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["image"] diff --git a/providers/cloudflare-workers-ai/models/@cf/meta-llama/llama-2-7b-chat-hf-lora.toml b/providers/cloudflare-workers-ai/models/@cf/meta-llama/llama-2-7b-chat-hf-lora.toml new file mode 100644 index 0000000000..08ab99f994 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/meta-llama/llama-2-7b-chat-hf-lora.toml @@ -0,0 +1,19 @@ +name = "@cf/meta-llama/llama-2-7b-chat-hf-lora" +description = "Open Llama instruction model for multilingual chat, reasoning, and coding" +family = "llama" +release_date = "2024-04-02" +last_updated = "2024-04-02" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 8_192 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/meta/m2m100-1.2b.toml b/providers/cloudflare-workers-ai/models/@cf/meta/m2m100-1.2b.toml new file mode 100644 index 0000000000..b94d54a152 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/meta/m2m100-1.2b.toml @@ -0,0 +1,22 @@ +name = "@cf/meta/m2m100-1.2b" +description = "General-purpose chat model for instruction following, writing, and analysis" +release_date = "2023-09-25" +last_updated = "2023-09-25" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.342 +output = 0.342 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/microsoft/resnet-50.toml b/providers/cloudflare-workers-ai/models/@cf/microsoft/resnet-50.toml new file mode 100644 index 0000000000..e37d9cc8e3 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/microsoft/resnet-50.toml @@ -0,0 +1,19 @@ +name = "@cf/microsoft/resnet-50" +description = "Multimodal model for analyzing text, images, documents, and rich media" +family = "resnet" +release_date = "2023-09-25" +last_updated = "2023-09-25" +attachment = true +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["image"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/mistral/mistral-7b-instruct-v0.2-lora.toml b/providers/cloudflare-workers-ai/models/@cf/mistral/mistral-7b-instruct-v0.2-lora.toml new file mode 100644 index 0000000000..3a0dd3aea3 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/mistral/mistral-7b-instruct-v0.2-lora.toml @@ -0,0 +1,19 @@ +name = "@cf/mistral/mistral-7b-instruct-v0.2-lora" +description = "Mistral model for multilingual chat, reasoning, and tool-assisted workflows" +family = "mistral" +release_date = "2024-04-01" +last_updated = "2024-04-01" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 15_000 +output = 15_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/moondream/moondream3.1-9B-A2B.toml b/providers/cloudflare-workers-ai/models/@cf/moondream/moondream3.1-9B-A2B.toml new file mode 100644 index 0000000000..c3c3569c32 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/moondream/moondream3.1-9B-A2B.toml @@ -0,0 +1,22 @@ +name = "@cf/moondream/moondream3.1-9B-A2B" +description = "Multimodal model for analyzing text, images, documents, and rich media" +release_date = "2026-07-07" +last_updated = "2026-07-07" +attachment = true +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.3 +output = 1 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["image", "text"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/myshell-ai/melotts.toml b/providers/cloudflare-workers-ai/models/@cf/myshell-ai/melotts.toml new file mode 100644 index 0000000000..765dbec5a9 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/myshell-ai/melotts.toml @@ -0,0 +1,24 @@ +name = "@cf/myshell-ai/melotts" +description = "Speech generation model for controllable voice, narration, and audio delivery" +family = "melotts" +release_date = "2024-07-19" +last_updated = "2024-07-19" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0 +output = 0 +output_audio = 0.000205 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["audio"] diff --git a/providers/cloudflare-workers-ai/models/@cf/openai/whisper-large-v3-turbo.toml b/providers/cloudflare-workers-ai/models/@cf/openai/whisper-large-v3-turbo.toml new file mode 100644 index 0000000000..18d5e28c8b --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/openai/whisper-large-v3-turbo.toml @@ -0,0 +1,24 @@ +name = "@cf/openai/whisper-large-v3-turbo" +description = "Speech transcription model for accurate audio-to-text and captioning workflows" +family = "whisper" +release_date = "2024-05-22" +last_updated = "2024-05-22" +attachment = true +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0 +output = 0 +input_audio = 0.000513 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["audio"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/openai/whisper-tiny-en.toml b/providers/cloudflare-workers-ai/models/@cf/openai/whisper-tiny-en.toml new file mode 100644 index 0000000000..90dfab3b4b --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/openai/whisper-tiny-en.toml @@ -0,0 +1,19 @@ +name = "@cf/openai/whisper-tiny-en" +description = "Speech transcription model for accurate audio-to-text and captioning workflows" +family = "whisper" +release_date = "2024-04-22" +last_updated = "2024-04-22" +attachment = true +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["audio"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/openai/whisper.toml b/providers/cloudflare-workers-ai/models/@cf/openai/whisper.toml new file mode 100644 index 0000000000..7939c5314f --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/openai/whisper.toml @@ -0,0 +1,24 @@ +name = "@cf/openai/whisper" +description = "Speech transcription model for accurate audio-to-text and captioning workflows" +family = "whisper" +release_date = "2023-09-25" +last_updated = "2023-09-25" +attachment = true +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0 +output = 0 +input_audio = 0.000453 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["audio"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/pfnet/plamo-embedding-1b.toml b/providers/cloudflare-workers-ai/models/@cf/pfnet/plamo-embedding-1b.toml new file mode 100644 index 0000000000..77a78e5670 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/pfnet/plamo-embedding-1b.toml @@ -0,0 +1,23 @@ +name = "@cf/pfnet/plamo-embedding-1b" +description = "Embedding model for semantic search, retrieval, clustering, and ranking pipelines" +family = "plamo" +release_date = "2025-09-24" +last_updated = "2025-09-24" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.0186 +output = 0 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/pipecat-ai/smart-turn-v2.toml b/providers/cloudflare-workers-ai/models/@cf/pipecat-ai/smart-turn-v2.toml new file mode 100644 index 0000000000..11ec6c02ea --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/pipecat-ai/smart-turn-v2.toml @@ -0,0 +1,24 @@ +name = "@cf/pipecat-ai/smart-turn-v2" +description = "Multimodal model for analyzing text, images, documents, and rich media" +family = "smart-turn" +release_date = "2025-08-04" +last_updated = "2025-08-04" +attachment = true +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0 +output = 0 +input_audio = 0.000338 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["audio"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/qwen/qwen3-embedding-0.6b.toml b/providers/cloudflare-workers-ai/models/@cf/qwen/qwen3-embedding-0.6b.toml new file mode 100644 index 0000000000..0e4d8f1c6b --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/qwen/qwen3-embedding-0.6b.toml @@ -0,0 +1,23 @@ +name = "@cf/qwen/qwen3-embedding-0.6b" +description = "Embedding model for semantic search, retrieval, clustering, and ranking pipelines" +family = "qwen" +release_date = "2025-06-18" +last_updated = "2025-06-18" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.0118 +output = 0 + +[limit] +context = 8_192 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/runwayml/stable-diffusion-v1-5-img2img.toml b/providers/cloudflare-workers-ai/models/@cf/runwayml/stable-diffusion-v1-5-img2img.toml new file mode 100644 index 0000000000..ed22a18240 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/runwayml/stable-diffusion-v1-5-img2img.toml @@ -0,0 +1,19 @@ +name = "@cf/runwayml/stable-diffusion-v1-5-img2img" +description = "Image model for prompt-driven generation, editing, and visual design workflows" +family = "stable-diffusion" +release_date = "2024-02-27" +last_updated = "2024-02-27" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["image"] diff --git a/providers/cloudflare-workers-ai/models/@cf/runwayml/stable-diffusion-v1-5-inpainting.toml b/providers/cloudflare-workers-ai/models/@cf/runwayml/stable-diffusion-v1-5-inpainting.toml new file mode 100644 index 0000000000..ffd3497252 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/runwayml/stable-diffusion-v1-5-inpainting.toml @@ -0,0 +1,19 @@ +name = "@cf/runwayml/stable-diffusion-v1-5-inpainting" +description = "Image model for prompt-driven generation, editing, and visual design workflows" +family = "stable-diffusion" +release_date = "2024-02-27" +last_updated = "2024-02-27" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["image"] diff --git a/providers/cloudflare-workers-ai/models/@cf/stabilityai/stable-diffusion-xl-base-1.0.toml b/providers/cloudflare-workers-ai/models/@cf/stabilityai/stable-diffusion-xl-base-1.0.toml new file mode 100644 index 0000000000..838a288446 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/stabilityai/stable-diffusion-xl-base-1.0.toml @@ -0,0 +1,19 @@ +name = "@cf/stabilityai/stable-diffusion-xl-base-1.0" +description = "Image model for prompt-driven generation, editing, and visual design workflows" +family = "stable-diffusion" +release_date = "2023-11-10" +last_updated = "2023-11-10" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["image"] From 1032b191de198c8c642d4dc6c70b55bc786a7b9c Mon Sep 17 00:00:00 2001 From: Michael Dwan Date: Mon, 20 Jul 2026 10:25:52 -0600 Subject: [PATCH 5/6] fix(sync): resolve three AI-reviewer findings on cloudflare-workers-ai native sync PR #3313 review comment: https://github.com/anomalyco/models.dev/pull/3313#issuecomment-5005625490 1. resolveCloudflareBaseModel prefers the most-specific token match instead of giving up when multiple candidates subset-match (e.g. whisper-large-v3 and whisper-large-v3-turbo both matching @cf/openai/whisper-large-v3-turbo), which was causing the sync to fall back to a full inline definition that duplicated and contradicted the canonical model. A genuine tie (equal token counts) still returns no match. Also stops buildWorkersAiModel from emitting fabricated limit.context/output=0 overrides and stops the openrouter.ts name-override logic from forcing a native record's raw id slug through as a display name -- both were masking correct inheritance once base_model resolved. 2. The 9 audio-priced cloudflare-workers-ai TOMLs (whisper, whisper-large-v3-turbo, nova-3, flux, aura-1, aura-2-en, aura-2-es, melotts, smart-turn-v2) hold Cloudflare's native per-audio-minute / per-1k-character prices, not the schema's documented per-million-token unit. Rather than fabricate a tokens-per-minute conversion, a leading comment documenting the true unit is now emitted by the sync itself via a new optional SyncProvider.translateModel header hook, so it survives regeneration. 3. reshapeNative preserves the native API's per-model description and threads it through as nativeDescription, winning over both a previously synced description and the heuristic fallback on the non-base_model path (models with a resolved base_model keep inheriting their curated description). This also fixes @cf/deepgram/flux, whose 'flux' substring was tripping image-model heuristics in both describeModel and family inference despite being an ASR model. Family inference is now gated by output modality (familyMatchesModalities) so an image/video family name can't be stamped on a model that doesn't declare that output modality, and a previously-synced family that no longer matches current modalities is cleared instead of preserved forever. Also trims stray leading/ trailing whitespace Cloudflare's native API sometimes includes in descriptions. nativeDescription and the tightened name-override condition are additive and only ever fire for callers that pass them (currently just cloudflare-workers-ai); the modality gating and stale-family clearing run for every provider through the shared buildOpenRouterModel/inferFamily, since the bug they fix lives in that shared matching logic. --- packages/core/src/family.ts | 17 ++ packages/core/src/sync/index.ts | 22 +- .../sync/providers/cloudflare-workers-ai.ts | 127 ++++++++-- .../core/src/sync/providers/openrouter.ts | 32 ++- packages/core/test/sync.test.ts | 225 +++++++++++++++++- 5 files changed, 388 insertions(+), 35 deletions(-) diff --git a/packages/core/src/family.ts b/packages/core/src/family.ts index 3eaec99af2..363c4617e1 100644 --- a/packages/core/src/family.ts +++ b/packages/core/src/family.ts @@ -449,3 +449,20 @@ export function inferKimiFamily(...values: string[]): ModelFamily | undefined { if (/kimi[\s_-]*k3/.test(target)) return "kimi-k3"; return undefined; } + +// Families named after image/video generators (e.g. "flux", "sora") are strictly +// output-modality families: a name/id substring match against one of these is only +// valid when the model's own declared output modalities agree. This stops a model +// that merely shares a name with an image or video generator (e.g. Deepgram's ASR +// model "flux", which outputs text) from being stamped with that generator's family. +const IMAGE_FAMILIES = new Set([ + "dall-e", "flux", "imagen", "recraft", "stable-diffusion", "ideogram", "dreamshaper", "gpt-image", "nano-banana", +]); + +const VIDEO_FAMILIES = new Set(["sora", "veo", "runway", "dream-machine", "ray"]); + +export function familyMatchesModalities(family: ModelFamily, outputModalities: string[]): boolean { + if (IMAGE_FAMILIES.has(family)) return outputModalities.includes("image"); + if (VIDEO_FAMILIES.has(family)) return outputModalities.includes("video"); + return true; +} diff --git a/packages/core/src/sync/index.ts b/packages/core/src/sync/index.ts index 3b8c8fce97..ebc3128fb4 100644 --- a/packages/core/src/sync/index.ts +++ b/packages/core/src/sync/index.ts @@ -77,7 +77,12 @@ export interface SyncProvider { existing(id: string): ExistingModel | undefined; authored(id: string): ExistingModel | undefined; }, - ): { id: string; model: SyncedModel; metadata?: { id: string; model: SyncedMetadata } } | undefined; + ): { + id: string; + model: SyncedModel; + metadata?: { id: string; model: SyncedMetadata }; + header?: string; + } | undefined; } export interface SyncResult { @@ -165,7 +170,7 @@ export async function syncProvider( const { models: existing, brokenSymlinks } = existingState; let { modelMetadata } = existingState; const sourceModels = provider.parseModels(await provider.fetchModels()); - const desired = new Map; content: string }>(); + const desired = new Map; content: string; header: string }>(); const desiredMetadata = new Map; content: string }>(); const skippedRemote: string[] = []; @@ -242,9 +247,14 @@ export async function syncProvider( throw parsed.error; } + // An existing file's leading comment block always wins (it may have been + // hand-edited); a provider-supplied header only seeds a file lacking one so it + // survives the next sync as that file's preserved leading comment. + const header = existing.get(relativePath)?.header || translated.header || ""; desired.set(relativePath, { model: parsed.data, - content: (existing.get(relativePath)?.header ?? "") + formatToml(parsed.data), + content: header + formatToml(parsed.data), + header, }); } @@ -315,7 +325,11 @@ export async function syncProvider( continue; } - if (!(provider.sameModel?.(current.authored, file.model) ?? sameModel(relativePath, current.authored, file.model))) { + // A provider-supplied header (e.g. documenting a native pricing unit) that isn't + // yet present on disk must be written even when the model data itself is unchanged, + // or the comment would never reach an existing file. + const headerMissing = current.header === "" && file.header !== ""; + if (headerMissing || !(provider.sameModel?.(current.authored, file.model) ?? sameModel(relativePath, current.authored, file.model))) { if (options.newOnly) { unchanged++; continue; diff --git a/packages/core/src/sync/providers/cloudflare-workers-ai.ts b/packages/core/src/sync/providers/cloudflare-workers-ai.ts index 5a084fdb20..2302c3b8fb 100644 --- a/packages/core/src/sync/providers/cloudflare-workers-ai.ts +++ b/packages/core/src/sync/providers/cloudflare-workers-ai.ts @@ -191,31 +191,57 @@ export function reshapeNative(model: NativeModel): OpenRouterModel { return record; } +// `cost.input_audio`/`cost.output_audio` are documented (README, schema.ts) as "per +// million audio tokens", but Cloudflare's native API never reports a token count for +// audio -- only a per-minute or per-1k-character price. Converting would require +// fabricating a tokens-per-minute constant the API doesn't provide, so these fields +// instead carry the true native unit, and `audioPricingHeader` documents that unit as +// a leading TOML comment (see `providers/evroc/models/openai/whisper-large-v3-turbo.toml` +// for the existing repo precedent of this same native-unit-with-comment pattern). +function findAudioPrice(prices: z.infer[], units: readonly string[]) { + for (const unit of units) { + const entry = prices.find((price) => price.unit === unit); + if (entry !== undefined) return entry; + } + return undefined; +} + +function audioPricingHeader(unit: string): string { + return `# ${unit}\n`; +} + // Audio/1k-character pricing (ASR, TTS) is outside the token-priced OpenRouter // shape and must be applied to the built model after `buildWorkersAiModel`. // Image-priced units (`per step`, `per 512 by 512 tile`, `per inference request`) // and no-price models are left untouched: no token cost is invented for them. -export function applyAudioPricing(model: SyncedModel, native: NativeModel): SyncedModel { +export function applyAudioPricing( + model: SyncedModel, + native: NativeModel, +): { model: SyncedModel; header?: string } { const modalities = TASK_MODALITIES[native.task.name]; const prices = parsePrices(flattenProperties(native).price); - const inputAudio = prices.find((entry) => entry.unit === "per audio minute")?.price - ?? prices.find((entry) => entry.unit === "per audio minute (websocket)")?.price; - const outputAudio = prices.find((entry) => entry.unit === "per audio minute")?.price - ?? prices.find((entry) => entry.unit === "per 1k characters")?.price; + const inputAudio = findAudioPrice(prices, ["per audio minute", "per audio minute (websocket)"]); + const outputAudio = findAudioPrice(prices, ["per audio minute", "per 1k characters"]); if (modalities?.input.includes("audio") && inputAudio !== undefined) { return { - ...model, - cost: { input: 0, output: 0, ...model.cost, input_audio: inputAudio }, - } as SyncedModel; + model: { + ...model, + cost: { input: 0, output: 0, ...model.cost, input_audio: inputAudio.price }, + } as SyncedModel, + header: audioPricingHeader(inputAudio.unit), + }; } if (modalities?.output.includes("audio") && outputAudio !== undefined) { return { - ...model, - cost: { input: 0, output: 0, ...model.cost, output_audio: outputAudio }, - } as SyncedModel; + model: { + ...model, + cost: { input: 0, output: 0, ...model.cost, output_audio: outputAudio.price }, + } as SyncedModel, + header: audioPricingHeader(outputAudio.unit), + }; } - return model; + return { model }; } export const cloudflareWorkersAi = { @@ -253,10 +279,11 @@ export const cloudflareWorkersAi = { if (source.format === "native") { const parsed = OpenRouterModel.parse(reshapeNative(source.model)); const id = stripWorkersAiPrefix(parsed.id); - return { - id, - model: applyAudioPricing(buildWorkersAiModel(parsed, context.existing(id)), source.model), - }; + const { model, header } = applyAudioPricing( + buildWorkersAiModel(parsed, context.existing(id), source.model.description.trim()), + source.model, + ); + return { id, model, header }; } const normalized = normalizeModel(source.model); @@ -271,24 +298,36 @@ export const cloudflareWorkersAi = { export function buildWorkersAiModel( model: z.infer, existing: ExistingModel | undefined, + nativeDescription?: string, ): SyncedModel { + const baseModel = existing?.base_model ?? resolveCloudflareBaseModel(model); + + // Neither Cloudflare API shape reports a context window for every model (the native + // `ai/models/search` endpoint omits it for e.g. Whisper); `reshapeNative` fabricates + // `context_length = 0` rather than skip the model (see the comment there). Once a + // base_model resolves, that fabricated 0 must not out-compete the base metadata's + // real 448/448 -- so when context is unknown, don't fall back to a preserved + // `existing.limit.output` for `max_completion_tokens` either, since that value may + // itself be a fabricated 0 carried over from a prior sync round. + const contextKnown = model.context_length > 0; + const source = { ...model, name: existing?.name ?? model.name, top_provider: { ...model.top_provider, - max_completion_tokens: existing?.limit?.output ?? model.top_provider.max_completion_tokens, + max_completion_tokens: contextKnown + ? existing?.limit?.output ?? model.top_provider.max_completion_tokens + : null, }, }; const synced = { - ...buildOpenRouterModel( - source, - existing, - existing?.base_model ?? resolveCloudflareBaseModel(model), - ), + ...buildOpenRouterModel(source, existing, baseModel, nativeDescription), reasoning_options: existing?.reasoning_options, }; - if ("base_model" in synced) return synced; + if ("base_model" in synced) { + return contextKnown ? synced : withoutFabricatedLimits(synced); + } return { ...synced, name: existing?.name ?? synced.name, @@ -301,6 +340,20 @@ export function buildWorkersAiModel( }; } +// Once base_model resolves, an override `limit.context`/`limit.output` of exactly 0 +// is always a fabricated placeholder (no real model has a zero-token limit) -- drop it +// so the field inherits the base metadata's real value instead of clobbering it. +function withoutFabricatedLimits(synced: SyncedModel & { base_model: string }): SyncedModel { + if (!("limit" in synced) || synced.limit === undefined) return synced; + + const limit = { ...synced.limit }; + if (limit.context === 0) delete limit.context; + if (limit.output === 0) delete limit.output; + + const { limit: _unused, ...rest } = synced; + return Object.keys(limit).length > 0 ? { ...rest, limit } : rest; +} + export function resolveCloudflareBaseModel(model: z.infer) { const [, publisher] = stripWorkersAiPrefix(model.id).split("/"); if (publisher === undefined) return undefined; @@ -322,7 +375,33 @@ export function resolveCloudflareBaseModel(model: z.infer identityTokens(file).every((token) => identity.has(token))); - return matches.length === 1 ? `${metadataPublisher}/${matches[0]}` : undefined; + const match = mostSpecificMatch(matches); + return match === undefined ? undefined : `${metadataPublisher}/${match}`; +} + +// Among subset-matching candidates (e.g. "whisper-large-v3" and "whisper-large-v3-turbo" +// both matching "@cf/openai/whisper-large-v3-turbo"), prefer the one with the most +// identity tokens -- the most specific match. A genuine tie keeps the prior +// conservative behavior of returning no match. +export function mostSpecificMatch(matches: string[]): string | undefined { + if (matches.length === 0) return undefined; + if (matches.length === 1) return matches[0]; + + let best: string | undefined; + let bestCount = -1; + let tied = false; + for (const file of matches) { + const count = identityTokens(file).length; + if (count > bestCount) { + best = file; + bestCount = count; + tied = false; + } else if (count === bestCount) { + tied = true; + } + } + + return tied ? undefined : best; } function identityTokens(value: string) { diff --git a/packages/core/src/sync/providers/openrouter.ts b/packages/core/src/sync/providers/openrouter.ts index 41ffc0ffb4..8aa5ec44e1 100644 --- a/packages/core/src/sync/providers/openrouter.ts +++ b/packages/core/src/sync/providers/openrouter.ts @@ -3,7 +3,7 @@ import { readFileSync, readdirSync } from "node:fs"; import path from "node:path"; import { describeModel } from "../../describe.js"; -import { inferKimiFamily, ModelFamilyValues } from "../../family.js"; +import { familyMatchesModalities, inferKimiFamily, ModelFamilyValues } from "../../family.js"; import type { ExistingModel, SyncProvider, SyncedFullModel, SyncedModel } from "../index.js"; const API_ENDPOINT = "https://openrouter.ai/api/v1/models"; @@ -150,7 +150,7 @@ function modalities(values: string[], fallback: Modality[]): Modality[] { return [...new Set(result.length > 0 ? result : fallback)]; } -function inferFamily(model: OpenRouterModel, name: string) { +function inferFamily(model: OpenRouterModel, name: string, outputModalities: string[]) { const kimiFamily = inferKimiFamily(model.id, name); if (kimiFamily !== undefined) return kimiFamily; @@ -158,6 +158,7 @@ function inferFamily(model: OpenRouterModel, name: string) { return [...ModelFamilyValues] .sort((a, b) => b.length - a.length) .find((family) => { + if (!familyMatchesModalities(family, outputModalities)) return false; const value = family.toLowerCase().replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); if (family === "o") { return new RegExp(`(^|[^a-z0-9])${value}(?=\\d|$|[^a-z0-9])`).test(target); @@ -170,6 +171,7 @@ export function buildOpenRouterModel( model: OpenRouterModel, existing: ExistingModel | undefined, baseModel?: string, + nativeDescription?: string, ): SyncedModel { const params = new Set(model.supported_parameters); const name = model.name.replace(/^[^:]+:\s+/, ""); @@ -184,9 +186,15 @@ export function buildOpenRouterModel( const reasoning_options = openRouterReasoningOptions(model.reasoning) ?? (reasoning ? existing?.reasoning_options : undefined); const context = model.context_length; - const family = inferFamily(model, name); + const family = inferFamily(model, name, output); const releaseDate = dateFromTimestamp(model.created); - const familyValue = existing?.family === "o" && family !== "o" + // A previously-synced family that no longer matches this model's declared output + // modalities (e.g. a stale "flux" on a model that doesn't output images) is not + // preserved -- it was wrong when it was written, and the freshly inferred family + // (possibly undefined) replaces it, the same way the pre-existing "o" escape hatch + // below lets a freshly inferred family override a stale one. + const staleFamily = existing?.family !== undefined && !familyMatchesModalities(existing.family, output); + const familyValue = staleFamily || (existing?.family === "o" && family !== "o") ? family : (existing?.family ?? family); const attachment = input.some((value) => value !== "text"); @@ -216,7 +224,11 @@ export function buildOpenRouterModel( return factorBaseModel( canonical, { - name: baseModel !== undefined || model.id.endsWith(":free") || canonicalOverride === canonical + // A caller-resolved baseModel (e.g. cloudflare-workers-ai's fuzzy identity-token + // match) may carry a real vendor display name worth keeping as an override -- + // but only when it says something beyond the bare model id (native Cloudflare + // records have no separate display name, so their `name` is just the id slug). + name: (baseModel !== undefined && name !== model.id) || model.id.endsWith(":free") || canonicalOverride === canonical ? name : undefined, description: existing?.description ?? describeModel({ @@ -249,7 +261,15 @@ export function buildOpenRouterModel( return { name, - description: existing?.description ?? describeModel({ + // A native-API-supplied description is provider-accurate text; it wins over both + // a previously synced description and the heuristic fallback (see cloudflare-workers-ai's + // reshapeNative, which is the only current source of nativeDescription). This is a + // deliberate exception to the "existing wins" convention every other provider follows: + // there is no hand-edit escape hatch for description on a native-sourced, non-base_model + // record -- the next sync always overwrites it with the API's text. Necessary because the + // "existing" value for these records is itself sync-generated (never hand-corrected), so + // existing-wins would let a wrong heuristic description win forever with no way to self-correct. + description: nativeDescription ?? existing?.description ?? describeModel({ id: model.id, name, family: familyValue, diff --git a/packages/core/test/sync.test.ts b/packages/core/test/sync.test.ts index cce1caf361..472a572e84 100644 --- a/packages/core/test/sync.test.ts +++ b/packages/core/test/sync.test.ts @@ -3,7 +3,7 @@ import { mkdir, mkdtemp, readFile, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import path from "node:path"; -import { formatToml, preserveReasoningOptions, syncProvider, type SyncProvider } from "../src/sync/index.js"; +import { formatToml, preserveReasoningOptions, syncProvider, type ExistingModel, type SyncProvider } from "../src/sync/index.js"; import { anthropic, buildAnthropicModel, @@ -11,9 +11,12 @@ import { type AnthropicModel, } from "../src/sync/providers/anthropic.js"; import { + applyAudioPricing, buildWorkersAiModel, cloudflareWorkersAi, + mostSpecificMatch, reshapeNative, + resolveCloudflareBaseModel, type NativeModel, } from "../src/sync/providers/cloudflare-workers-ai.js"; import { buildDeepInfraModel, type DeepInfraModel } from "../src/sync/providers/deepinfra.js"; @@ -37,6 +40,7 @@ import { OpenRouterModel, resolveCanonicalBaseModel, } from "../src/sync/providers/openrouter.js"; +import { familyMatchesModalities } from "../src/family.js"; import { buildLLMGatewayModel, type LLMGatewayModel } from "../src/sync/providers/llmgateway.js"; import { openai, parseOpenAIModels } from "../src/sync/providers/openai.js"; import { resolveVeniceBaseModel } from "../src/sync/providers/venice.js"; @@ -1203,6 +1207,83 @@ test("preserves the authored header comment block when rewriting a changed model } }); +test("writes a provider-supplied header once and preserves it on a later unrelated sync", async () => { + const dir = await mkdtemp(path.join(tmpdir(), "sync-header-seed-")); + const modelsDir = path.join(dir, "providers", "example", "models"); + await Bun.write(path.join(modelsDir, "example-model.toml"), [ + 'name = "Example Model"', + 'release_date = "2026-01-01"', + 'last_updated = "2026-01-01"', + "attachment = false", + "reasoning = false", + "tool_call = true", + "open_weights = false", + "", + "[cost]", + "input = 1", + "output = 2", + "output_audio = 0.03", + "", + "[limit]", + "context = 1_000", + "output = 100", + "", + "[modalities]", + 'input = ["text"]', + 'output = ["audio"]', + "", + ].join("\n")); + + const provider: SyncProvider<{ id: string }> = { + id: "example", + name: "Example", + modelsDir, + deleteMissing: false, + async fetchModels() { + return [{ id: "example-model" }]; + }, + parseModels(raw) { + return raw as { id: string }[]; + }, + translateModel(model) { + return { + id: model.id, + model: { + name: "Example Model", + description: "Example model used to verify sync header seeding behavior", + release_date: "2026-01-01", + last_updated: "2026-01-01", + attachment: false, + reasoning: false, + tool_call: true, + open_weights: false, + cost: { input: 1, output: 2, output_audio: 0.03 }, + limit: { context: 1_000, output: 100 }, + modalities: { input: ["text"], output: ["audio"] }, + }, + header: "# per 1k characters\n", + }; + }, + }; + + try { + const first = await syncProvider(provider); + expect(first.updated).toBe(1); + const afterFirst = await readFile(path.join(modelsDir, "example-model.toml"), "utf8"); + expect(afterFirst).toStartWith("# per 1k characters\n"); + expect([...afterFirst.matchAll(/# per 1k characters/g)]).toHaveLength(1); + + const second = await syncProvider(provider); + expect(second.updated).toBe(0); + expect(second.unchanged).toBe(1); + const afterSecond = await readFile(path.join(modelsDir, "example-model.toml"), "utf8"); + expect(afterSecond).toBe(afterFirst); + expect([...afterSecond.matchAll(/# per 1k characters/g)]).toHaveLength(1); + } finally { + await rm(dir, { recursive: true, force: true }); + } +}); + test("retains authored data when OpenRouter reports an unavailable stub", () => { const authored = { name: "Claude Fable Latest", @@ -1413,6 +1494,148 @@ test("round-trips exact Cloudflare Workers AI native token pricing", async () => expect(buildCost(m2m100)).toMatchObject({ input: 0.342, output: 0.342 }); }); +test("applyAudioPricing documents the native pricing unit as a leading-comment header", async () => { + const fixture = await Bun.file( + path.join(import.meta.dirname, "fixtures", "cloudflare-workers-ai-native.json"), + ).json() as { result: NativeModel[] }; + const whisper = fixture.result.find((model) => model.name === "@cf/openai/whisper"); + const aura1 = fixture.result.find((model) => model.name === "@cf/deepgram/aura-1"); + if (whisper === undefined || aura1 === undefined) throw new Error("Fixture is missing an expected model"); + + // Cloudflare's native API reports these as "per audio minute" / "per 1k characters", + // never as a token count -- input_audio/output_audio carry that true native value + // (see cloudflare-workers-ai.ts), and applyAudioPricing must surface the exact unit + // string so the sync can document it instead of the schema's "per million tokens". + const asr = applyAudioPricing(buildWorkersAiModel(OpenRouterModel.parse(reshapeNative(whisper)), undefined), whisper); + expect(asr.model.cost).toMatchObject({ input_audio: 0.000453 }); + expect(asr.header).toBe("# per audio minute\n"); + + const tts = applyAudioPricing(buildWorkersAiModel(OpenRouterModel.parse(reshapeNative(aura1)), undefined), aura1); + expect(tts.model.cost).toMatchObject({ output_audio: 0.015 }); + expect(tts.header).toBe("# per 1k characters\n"); +}); + +test("resolveCloudflareBaseModel prefers the most-specific subset match", () => { + // Both "whisper-large-v3" (4 tokens) and "whisper-large-v3-turbo" (5 tokens) subset-match + // @cf/openai/whisper-large-v3-turbo; the more specific one should win instead of the + // ambiguous match falling back to an inline definition. + expect( + resolveCloudflareBaseModel( + openRouterModel({ id: "workers-ai/@cf/openai/whisper-large-v3-turbo", name: "Whisper Large v3 Turbo" }), + ), + ).toBe("openai/whisper-large-v3-turbo"); +}); + +test("mostSpecificMatch falls back to no match on a genuine tie", () => { + // "whisper-large-v3" (4 tokens) and "whisper-tiny-en" (3 tokens) aren't a tie -- the + // 4-token candidate wins. + expect(mostSpecificMatch(["whisper-large-v3", "whisper-tiny-en"])).toBe("whisper-large-v3"); + + // Two equally-specific candidates (3 tokens each); neither is more specific than the + // other, so the conservative no-match fallback applies. + expect(mostSpecificMatch(["whisper-large-v3", "whisper-large-v4"])).toBeUndefined(); +}); + +test("buildWorkersAiModel emits whisper-large-v3-turbo as a base_model pointer", async () => { + const fixture = await Bun.file( + path.join(import.meta.dirname, "fixtures", "cloudflare-workers-ai-native.json"), + ).json() as { result: NativeModel[] }; + const native = fixture.result.find((model) => model.name === "@cf/openai/whisper-large-v3-turbo"); + if (native === undefined) throw new Error("Fixture is missing whisper-large-v3-turbo"); + + const model = buildWorkersAiModel(OpenRouterModel.parse(reshapeNative(native)), undefined); + + expect("base_model" in model && model.base_model).toBe("openai/whisper-large-v3-turbo"); + + // The native record fabricates context_length=0 (Cloudflare reports no context window + // for Whisper) and has no real display name (its `name` is just the id slug). None of + // that fabricated/placeholder data should surface as an override once base_model + // resolves -- open_weights, limit.context, limit.output, and name must all be absent + // so they inherit the base metadata's true=true, 448, 448, and "Whisper Large v3 Turbo". + expect(model).not.toHaveProperty("open_weights"); + expect(model).not.toHaveProperty("name"); + expect((model as { limit?: { context?: number; output?: number } }).limit?.context).toBeUndefined(); + expect((model as { limit?: { context?: number; output?: number } }).limit?.output).toBeUndefined(); +}); + +test("Cloudflare Workers AI native sync prefers the native API description and never stamps an audio ASR model with an image family", async () => { + // Regression for @cf/deepgram/flux: its id/name contains "flux", which both + // describe.ts's image-model heuristic and openrouter.ts's family-name substring + // match used to mistake for the Black Forest Labs image model, even though flux is + // audio-in/text-out speech recognition. The fix threads the native API's own + // description through (which correctly describes it as an ASR model) and blocks a + // family whose name implies an image/video output modality from matching a model + // that doesn't declare that modality. + const fixture = await Bun.file( + path.join(import.meta.dirname, "fixtures", "cloudflare-workers-ai-native.json"), + ).json() as { result: NativeModel[] }; + const flux = fixture.result.find((model) => model.name === "@cf/deepgram/flux"); + if (flux === undefined) throw new Error("Fixture is missing @cf/deepgram/flux"); + + const context = { existing: () => undefined, authored: () => undefined }; + const translated = cloudflareWorkersAi.translateModel({ format: "native", model: flux }, context); + if (translated === undefined) throw new Error("translateModel returned no result for flux"); + + expect(translated.model.description).toBe(flux.description); + expect(translated.model.description).not.toContain("Image model"); + expect((translated.model as { family?: string }).family).toBeUndefined(); +}); + +test("Cloudflare Workers AI native sync clears a previously-synced stale image family that no longer matches the model's modalities", async () => { + // A prior sync (before this fix) wrote family="flux" into flux.toml. Regenerating + // must not preserve that stale value just because it's already on the existing + // file -- the family-value fallback (`existing?.family ?? family`) would otherwise + // keep "flux" forever once it's written once. + const fixture = await Bun.file( + path.join(import.meta.dirname, "fixtures", "cloudflare-workers-ai-native.json"), + ).json() as { result: NativeModel[] }; + const flux = fixture.result.find((model) => model.name === "@cf/deepgram/flux"); + if (flux === undefined) throw new Error("Fixture is missing @cf/deepgram/flux"); + + const staleExisting = { family: "flux" } as ExistingModel; + const context = { + existing: (id: string) => id === "@cf/deepgram/flux" ? staleExisting : undefined, + authored: () => undefined, + }; + const translated = cloudflareWorkersAi.translateModel({ format: "native", model: flux }, context); + if (translated === undefined) throw new Error("translateModel returned no result for flux"); + + expect((translated.model as { family?: string }).family).toBeUndefined(); +}); + +test("Cloudflare Workers AI native sync surfaces the native description for other native models with real API text", async () => { + const fixture = await Bun.file( + path.join(import.meta.dirname, "fixtures", "cloudflare-workers-ai-native.json"), + ).json() as { result: NativeModel[] }; + const byName = new Map(fixture.result.map((model) => [model.name, model])); + const context = { existing: () => undefined, authored: () => undefined }; + + for (const id of [ + "@cf/deepgram/nova-3", + "@cf/deepgram/aura-1", + "@cf/deepgram/aura-2-en", + "@cf/deepgram/aura-2-es", + "@cf/myshell-ai/melotts", + "@cf/pipecat-ai/smart-turn-v2", + "@cf/openai/whisper", + ]) { + const native = byName.get(id); + if (native === undefined) throw new Error(`Fixture is missing ${id}`); + const translated = cloudflareWorkersAi.translateModel({ format: "native", model: native }, context); + if (translated === undefined) throw new Error(`translateModel returned no result for ${id}`); + expect(translated.model.description).toBe(native.description); + } +}); + +test("familyMatchesModalities rejects an image/video family when the model doesn't declare that output modality", () => { + expect(familyMatchesModalities("flux", ["text"])).toBe(false); + expect(familyMatchesModalities("flux", ["image"])).toBe(true); + expect(familyMatchesModalities("sora", ["text"])).toBe(false); + expect(familyMatchesModalities("sora", ["video"])).toBe(true); + // A non-modality-gated family (e.g. a text chat family) is unaffected. + expect(familyMatchesModalities("gpt", ["text"])).toBe(true); +}); + test("merges Cloudflare Workers AI openrouter and native formats, openrouter winning on overlap", async () => { const fixture = await Bun.file( path.join(import.meta.dirname, "fixtures", "cloudflare-workers-ai-native.json"), From 6ed620d4b9a37e150781f982c492d096d4aae625 Mon Sep 17 00:00:00 2001 From: Michael Dwan Date: Mon, 20 Jul 2026 10:26:03 -0600 Subject: [PATCH 6/6] chore(sync): regenerate cloudflare-workers-ai native models Regenerated output of the fixes in the prior commit: whisper-large-v3-turbo and glm-4.7-flash now resolve to base_model pointers instead of full inline definitions; the 9 audio-priced models carry a leading comment documenting their native pricing unit; native models regenerate with their accurate API-supplied description instead of a heuristic guess (most visibly @cf/deepgram/flux, which no longer carries an image description or family="flux"); flux-1-schnell and the other genuine image models are unaffected and correctly keep family="flux". --- .../ai4bharat/indictrans2-en-indic-1B.toml | 2 +- .../models/@cf/baai/bge-base-en-v1.5.toml | 2 +- .../models/@cf/baai/bge-large-en-v1.5.toml | 2 +- .../models/@cf/baai/bge-m3.toml | 2 +- .../models/@cf/baai/bge-reranker-base.toml | 2 +- .../models/@cf/baai/bge-small-en-v1.5.toml | 2 +- .../@cf/black-forest-labs/flux-1-schnell.toml | 2 +- .../@cf/black-forest-labs/flux-2-dev.toml | 2 +- .../black-forest-labs/flux-2-klein-4b.toml | 2 +- .../black-forest-labs/flux-2-klein-9b.toml | 2 +- .../stable-diffusion-xl-lightning.toml | 2 +- .../models/@cf/deepgram/aura-1.toml | 3 ++- .../models/@cf/deepgram/aura-2-en.toml | 3 ++- .../models/@cf/deepgram/aura-2-es.toml | 3 ++- .../models/@cf/deepgram/flux.toml | 4 +-- .../models/@cf/deepgram/nova-3.toml | 3 ++- .../@cf/google/embeddinggemma-300m.toml | 2 +- .../models/@cf/google/gemma-2b-it-lora.toml | 2 +- .../models/@cf/google/gemma-7b-it-lora.toml | 2 +- .../huggingface/distilbert-sst-2-int8.toml | 2 +- .../models/@cf/leonardo/lucid-origin.toml | 2 +- .../models/@cf/leonardo/phoenix-1.0.toml | 2 +- .../models/@cf/llava-hf/llava-1.5-7b-hf.toml | 2 +- .../models/@cf/lykon/dreamshaper-8-lcm.toml | 2 +- .../meta-llama/llama-2-7b-chat-hf-lora.toml | 2 +- .../models/@cf/meta/m2m100-1.2b.toml | 2 +- .../models/@cf/microsoft/resnet-50.toml | 2 +- .../mistral-7b-instruct-v0.2-lora.toml | 2 +- .../@cf/moondream/moondream3.1-9B-A2B.toml | 2 +- .../models/@cf/myshell-ai/melotts.toml | 3 ++- .../@cf/openai/whisper-large-v3-turbo.toml | 17 ++----------- .../models/@cf/openai/whisper-tiny-en.toml | 2 +- .../models/@cf/openai/whisper.toml | 3 ++- .../models/@cf/pfnet/plamo-embedding-1b.toml | 2 +- .../models/@cf/pipecat-ai/smart-turn-v2.toml | 3 ++- .../models/@cf/qwen/qwen3-embedding-0.6b.toml | 2 +- .../stable-diffusion-v1-5-img2img.toml | 2 +- .../stable-diffusion-v1-5-inpainting.toml | 2 +- .../stable-diffusion-xl-base-1.0.toml | 2 +- .../models/@cf/zai-org/glm-4.7-flash.toml | 25 ++++++------------- 40 files changed, 56 insertions(+), 71 deletions(-) diff --git a/providers/cloudflare-workers-ai/models/@cf/ai4bharat/indictrans2-en-indic-1B.toml b/providers/cloudflare-workers-ai/models/@cf/ai4bharat/indictrans2-en-indic-1B.toml index d3bec4ae45..fe3d238a2e 100644 --- a/providers/cloudflare-workers-ai/models/@cf/ai4bharat/indictrans2-en-indic-1B.toml +++ b/providers/cloudflare-workers-ai/models/@cf/ai4bharat/indictrans2-en-indic-1B.toml @@ -1,5 +1,5 @@ name = "@cf/ai4bharat/indictrans2-en-indic-1B" -description = "General-purpose chat model for instruction following, writing, and analysis" +description = "IndicTrans2 is the first open-source transformer-based multilingual NMT model that supports high-quality translations across all the 22 scheduled Indic languages" release_date = "2025-09-23" last_updated = "2025-09-23" attachment = false diff --git a/providers/cloudflare-workers-ai/models/@cf/baai/bge-base-en-v1.5.toml b/providers/cloudflare-workers-ai/models/@cf/baai/bge-base-en-v1.5.toml index 762bf3399d..e62ead9283 100644 --- a/providers/cloudflare-workers-ai/models/@cf/baai/bge-base-en-v1.5.toml +++ b/providers/cloudflare-workers-ai/models/@cf/baai/bge-base-en-v1.5.toml @@ -1,5 +1,5 @@ name = "@cf/baai/bge-base-en-v1.5" -description = "General-purpose chat model for instruction following, writing, and analysis" +description = "BAAI general embedding (Base) model that transforms any given text into a 768-dimensional vector" family = "bge" release_date = "2023-09-25" last_updated = "2023-09-25" diff --git a/providers/cloudflare-workers-ai/models/@cf/baai/bge-large-en-v1.5.toml b/providers/cloudflare-workers-ai/models/@cf/baai/bge-large-en-v1.5.toml index bde14ce6d4..e1848465e9 100644 --- a/providers/cloudflare-workers-ai/models/@cf/baai/bge-large-en-v1.5.toml +++ b/providers/cloudflare-workers-ai/models/@cf/baai/bge-large-en-v1.5.toml @@ -1,5 +1,5 @@ name = "@cf/baai/bge-large-en-v1.5" -description = "Flagship model for demanding analysis, coding, and production agent workflows" +description = "BAAI general embedding (Large) model that transforms any given text into a 1024-dimensional vector" family = "bge" release_date = "2023-11-07" last_updated = "2023-11-07" diff --git a/providers/cloudflare-workers-ai/models/@cf/baai/bge-m3.toml b/providers/cloudflare-workers-ai/models/@cf/baai/bge-m3.toml index c63e7dfb03..dc4292a977 100644 --- a/providers/cloudflare-workers-ai/models/@cf/baai/bge-m3.toml +++ b/providers/cloudflare-workers-ai/models/@cf/baai/bge-m3.toml @@ -1,5 +1,5 @@ name = "@cf/baai/bge-m3" -description = "Flagship model for demanding analysis, coding, and production agent workflows" +description = "Multi-Functionality, Multi-Linguality, and Multi-Granularity embeddings model." family = "bge" release_date = "2024-05-22" last_updated = "2024-05-22" diff --git a/providers/cloudflare-workers-ai/models/@cf/baai/bge-reranker-base.toml b/providers/cloudflare-workers-ai/models/@cf/baai/bge-reranker-base.toml index 4e1a5923a9..41fd807c7f 100644 --- a/providers/cloudflare-workers-ai/models/@cf/baai/bge-reranker-base.toml +++ b/providers/cloudflare-workers-ai/models/@cf/baai/bge-reranker-base.toml @@ -1,5 +1,5 @@ name = "@cf/baai/bge-reranker-base" -description = "Reranking model for improving retrieval quality in search and recommendation systems" +description = "Different from embedding model, reranker uses question and document as input and directly output similarity instead of embedding. You can get a relevance score by inputting query and passage to the reranker. And the score can be mapped to a float value in [0,1] by sigmoid function." family = "bge" release_date = "2025-02-14" last_updated = "2025-02-14" diff --git a/providers/cloudflare-workers-ai/models/@cf/baai/bge-small-en-v1.5.toml b/providers/cloudflare-workers-ai/models/@cf/baai/bge-small-en-v1.5.toml index ed71ff8bba..31c2b20ee9 100644 --- a/providers/cloudflare-workers-ai/models/@cf/baai/bge-small-en-v1.5.toml +++ b/providers/cloudflare-workers-ai/models/@cf/baai/bge-small-en-v1.5.toml @@ -1,5 +1,5 @@ name = "@cf/baai/bge-small-en-v1.5" -description = "Efficient model for low-latency assistance, extraction, and routine automation" +description = "BAAI general embedding (Small) model that transforms any given text into a 384-dimensional vector" family = "bge" release_date = "2023-11-07" last_updated = "2023-11-07" diff --git a/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-1-schnell.toml b/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-1-schnell.toml index af9c4ff26a..d698a6ce9c 100644 --- a/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-1-schnell.toml +++ b/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-1-schnell.toml @@ -1,5 +1,5 @@ name = "@cf/black-forest-labs/flux-1-schnell" -description = "Image model for prompt-driven generation, editing, and visual design workflows" +description = "FLUX.1 [schnell] is a 12 billion parameter rectified flow transformer capable of generating images from text descriptions." family = "flux" release_date = "2024-08-29" last_updated = "2024-08-29" diff --git a/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-dev.toml b/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-dev.toml index 3abacd1031..0ce2172683 100644 --- a/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-dev.toml +++ b/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-dev.toml @@ -1,5 +1,5 @@ name = "@cf/black-forest-labs/flux-2-dev" -description = "Image model for prompt-driven generation, editing, and visual design workflows" +description = "FLUX.2 [dev] is an image model from Black Forest Labs where you can generate highly realistic and detailed images, with multi-reference support." family = "flux" release_date = "2025-11-24" last_updated = "2025-11-24" diff --git a/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-klein-4b.toml b/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-klein-4b.toml index c044c8a536..8fa816da38 100644 --- a/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-klein-4b.toml +++ b/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-klein-4b.toml @@ -1,5 +1,5 @@ name = "@cf/black-forest-labs/flux-2-klein-4b" -description = "Image model for prompt-driven generation, editing, and visual design workflows" +description = "FLUX.2 [klein] is an ultra-fast, distilled image model. It unifies image generation and editing in a single model, delivering state-of-the-art quality enabling interactive workflows, real-time previews, and latency-critical applications." family = "flux" release_date = "2026-01-14" last_updated = "2026-01-14" diff --git a/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-klein-9b.toml b/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-klein-9b.toml index 6530fcb422..4a030d8f87 100644 --- a/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-klein-9b.toml +++ b/providers/cloudflare-workers-ai/models/@cf/black-forest-labs/flux-2-klein-9b.toml @@ -1,5 +1,5 @@ name = "@cf/black-forest-labs/flux-2-klein-9b" -description = "Image model for prompt-driven generation, editing, and visual design workflows" +description = "FLUX.2 [klein] 9B is a 9 billion parameter model that can generate images from text descriptions and supports multi-reference editing capabilities." family = "flux" release_date = "2026-01-14" last_updated = "2026-01-14" diff --git a/providers/cloudflare-workers-ai/models/@cf/bytedance/stable-diffusion-xl-lightning.toml b/providers/cloudflare-workers-ai/models/@cf/bytedance/stable-diffusion-xl-lightning.toml index 5dadb9b324..2e24fa2a1f 100644 --- a/providers/cloudflare-workers-ai/models/@cf/bytedance/stable-diffusion-xl-lightning.toml +++ b/providers/cloudflare-workers-ai/models/@cf/bytedance/stable-diffusion-xl-lightning.toml @@ -1,5 +1,5 @@ name = "@cf/bytedance/stable-diffusion-xl-lightning" -description = "Image model for prompt-driven generation, editing, and visual design workflows" +description = "SDXL-Lightning is a lightning-fast text-to-image generation model. It can generate high-quality 1024px images in a few steps." family = "stable-diffusion" release_date = "2024-02-27" last_updated = "2024-02-27" diff --git a/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-1.toml b/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-1.toml index 06dad8cd35..0f3c0d6feb 100644 --- a/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-1.toml +++ b/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-1.toml @@ -1,5 +1,6 @@ +# per 1k characters name = "@cf/deepgram/aura-1" -description = "Speech generation model for controllable voice, narration, and audio delivery" +description = "Aura is a context-aware text-to-speech (TTS) model that applies natural pacing, expressiveness, and fillers based on the context of the provided text. The quality of your text input directly impacts the naturalness of the audio output." family = "aura" release_date = "2025-08-27" last_updated = "2025-08-27" diff --git a/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-2-en.toml b/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-2-en.toml index 1060530f24..d3e4d4fa12 100644 --- a/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-2-en.toml +++ b/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-2-en.toml @@ -1,5 +1,6 @@ +# per 1k characters name = "@cf/deepgram/aura-2-en" -description = "Speech generation model for controllable voice, narration, and audio delivery" +description = "Aura-2 is a context-aware text-to-speech (TTS) model that applies natural pacing, expressiveness, and fillers based on the context of the provided text. The quality of your text input directly impacts the naturalness of the audio output." family = "aura" release_date = "2025-10-09" last_updated = "2025-10-09" diff --git a/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-2-es.toml b/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-2-es.toml index dee7925e1f..9368f676f6 100644 --- a/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-2-es.toml +++ b/providers/cloudflare-workers-ai/models/@cf/deepgram/aura-2-es.toml @@ -1,5 +1,6 @@ +# per 1k characters name = "@cf/deepgram/aura-2-es" -description = "Speech generation model for controllable voice, narration, and audio delivery" +description = "Aura-2 is a context-aware text-to-speech (TTS) model that applies natural pacing, expressiveness, and fillers based on the context of the provided text. The quality of your text input directly impacts the naturalness of the audio output." family = "aura" release_date = "2025-10-09" last_updated = "2025-10-09" diff --git a/providers/cloudflare-workers-ai/models/@cf/deepgram/flux.toml b/providers/cloudflare-workers-ai/models/@cf/deepgram/flux.toml index eed032bb90..07bdf4d28d 100644 --- a/providers/cloudflare-workers-ai/models/@cf/deepgram/flux.toml +++ b/providers/cloudflare-workers-ai/models/@cf/deepgram/flux.toml @@ -1,6 +1,6 @@ +# per audio minute (websocket) name = "@cf/deepgram/flux" -description = "Image model for prompt-driven generation, editing, and visual design workflows" -family = "flux" +description = "Flux is the first conversational speech recognition model built specifically for voice agents." release_date = "2025-09-29" last_updated = "2025-09-29" attachment = true diff --git a/providers/cloudflare-workers-ai/models/@cf/deepgram/nova-3.toml b/providers/cloudflare-workers-ai/models/@cf/deepgram/nova-3.toml index 75a8f45757..e9531f93e2 100644 --- a/providers/cloudflare-workers-ai/models/@cf/deepgram/nova-3.toml +++ b/providers/cloudflare-workers-ai/models/@cf/deepgram/nova-3.toml @@ -1,5 +1,6 @@ +# per audio minute name = "@cf/deepgram/nova-3" -description = "Multimodal model for analyzing text, images, documents, and rich media" +description = "Transcribe audio using Deepgram’s speech-to-text model" family = "nova" release_date = "2025-06-05" last_updated = "2025-06-05" diff --git a/providers/cloudflare-workers-ai/models/@cf/google/embeddinggemma-300m.toml b/providers/cloudflare-workers-ai/models/@cf/google/embeddinggemma-300m.toml index f1725bbbee..8155eeee70 100644 --- a/providers/cloudflare-workers-ai/models/@cf/google/embeddinggemma-300m.toml +++ b/providers/cloudflare-workers-ai/models/@cf/google/embeddinggemma-300m.toml @@ -1,5 +1,5 @@ name = "@cf/google/embeddinggemma-300m" -description = "General-purpose chat model for instruction following, writing, and analysis" +description = "EmbeddingGemma is a 300M parameter, state-of-the-art for its size, open embedding model from Google, built from Gemma 3 (with T5Gemma initialization) and the same research and technology used to create Gemini models. EmbeddingGemma produces vector representations of text, making it well-suited for search and retrieval tasks, including classification, clustering, and semantic similarity search. This model was trained with data in 100+ spoken languages." release_date = "2025-09-04" last_updated = "2025-09-04" attachment = false diff --git a/providers/cloudflare-workers-ai/models/@cf/google/gemma-2b-it-lora.toml b/providers/cloudflare-workers-ai/models/@cf/google/gemma-2b-it-lora.toml index cfdc86c2d4..f9e5bdf72d 100644 --- a/providers/cloudflare-workers-ai/models/@cf/google/gemma-2b-it-lora.toml +++ b/providers/cloudflare-workers-ai/models/@cf/google/gemma-2b-it-lora.toml @@ -1,5 +1,5 @@ name = "@cf/google/gemma-2b-it-lora" -description = "Open Gemma instruction model for efficient chat and self-hosted deployments" +description = "This is a Gemma-2B base model that Cloudflare dedicates for inference with LoRA adapters. Gemma is a family of lightweight, state-of-the-art open models from Google, built from the same research and technology used to create the Gemini models." family = "gemma" release_date = "2024-04-02" last_updated = "2024-04-02" diff --git a/providers/cloudflare-workers-ai/models/@cf/google/gemma-7b-it-lora.toml b/providers/cloudflare-workers-ai/models/@cf/google/gemma-7b-it-lora.toml index 010c3a9454..254cc16710 100644 --- a/providers/cloudflare-workers-ai/models/@cf/google/gemma-7b-it-lora.toml +++ b/providers/cloudflare-workers-ai/models/@cf/google/gemma-7b-it-lora.toml @@ -1,5 +1,5 @@ name = "@cf/google/gemma-7b-it-lora" -description = "Open Gemma instruction model for efficient chat and self-hosted deployments" +description = "This is a Gemma-7B base model that Cloudflare dedicates for inference with LoRA adapters. Gemma is a family of lightweight, state-of-the-art open models from Google, built from the same research and technology used to create the Gemini models." family = "gemma" release_date = "2024-04-02" last_updated = "2024-04-02" diff --git a/providers/cloudflare-workers-ai/models/@cf/huggingface/distilbert-sst-2-int8.toml b/providers/cloudflare-workers-ai/models/@cf/huggingface/distilbert-sst-2-int8.toml index bd057165ab..54f4f8310f 100644 --- a/providers/cloudflare-workers-ai/models/@cf/huggingface/distilbert-sst-2-int8.toml +++ b/providers/cloudflare-workers-ai/models/@cf/huggingface/distilbert-sst-2-int8.toml @@ -1,5 +1,5 @@ name = "@cf/huggingface/distilbert-sst-2-int8" -description = "General-purpose chat model for instruction following, writing, and analysis" +description = "Distilled BERT model that was finetuned on SST-2 for sentiment classification" family = "distilbert" release_date = "2023-09-25" last_updated = "2023-09-25" diff --git a/providers/cloudflare-workers-ai/models/@cf/leonardo/lucid-origin.toml b/providers/cloudflare-workers-ai/models/@cf/leonardo/lucid-origin.toml index debfd84dc5..a6435f253a 100644 --- a/providers/cloudflare-workers-ai/models/@cf/leonardo/lucid-origin.toml +++ b/providers/cloudflare-workers-ai/models/@cf/leonardo/lucid-origin.toml @@ -1,5 +1,5 @@ name = "@cf/leonardo/lucid-origin" -description = "Image model for prompt-driven generation, editing, and visual design workflows" +description = "Lucid Origin from Leonardo.AI is their most adaptable and prompt-responsive model to date. Whether you're generating images with sharp graphic design, stunning full-HD renders, or highly specific creative direction, it adheres closely to your prompts, renders text with accuracy, and supports a wide array of visual styles and aesthetics – from stylized concept art to crisp product mockups." family = "lucid" release_date = "2025-08-25" last_updated = "2025-08-25" diff --git a/providers/cloudflare-workers-ai/models/@cf/leonardo/phoenix-1.0.toml b/providers/cloudflare-workers-ai/models/@cf/leonardo/phoenix-1.0.toml index 7f3eed28e6..8993dec6dc 100644 --- a/providers/cloudflare-workers-ai/models/@cf/leonardo/phoenix-1.0.toml +++ b/providers/cloudflare-workers-ai/models/@cf/leonardo/phoenix-1.0.toml @@ -1,5 +1,5 @@ name = "@cf/leonardo/phoenix-1.0" -description = "Image model for prompt-driven generation, editing, and visual design workflows" +description = "Phoenix 1.0 is a model by Leonardo.Ai that generates images with exceptional prompt adherence and coherent text." family = "phoenix" release_date = "2025-08-25" last_updated = "2025-08-25" diff --git a/providers/cloudflare-workers-ai/models/@cf/llava-hf/llava-1.5-7b-hf.toml b/providers/cloudflare-workers-ai/models/@cf/llava-hf/llava-1.5-7b-hf.toml index a7e6cf9886..95f47177a4 100644 --- a/providers/cloudflare-workers-ai/models/@cf/llava-hf/llava-1.5-7b-hf.toml +++ b/providers/cloudflare-workers-ai/models/@cf/llava-hf/llava-1.5-7b-hf.toml @@ -1,5 +1,5 @@ name = "@cf/llava-hf/llava-1.5-7b-hf" -description = "Multimodal model for analyzing text, images, documents, and rich media" +description = "LLaVA is an open-source chatbot trained by fine-tuning LLaMA/Vicuna on GPT-generated multimodal instruction-following data. It is an auto-regressive language model, based on the transformer architecture." family = "llava" release_date = "2024-05-01" last_updated = "2024-05-01" diff --git a/providers/cloudflare-workers-ai/models/@cf/lykon/dreamshaper-8-lcm.toml b/providers/cloudflare-workers-ai/models/@cf/lykon/dreamshaper-8-lcm.toml index 550f15d3a6..d7713f88a9 100644 --- a/providers/cloudflare-workers-ai/models/@cf/lykon/dreamshaper-8-lcm.toml +++ b/providers/cloudflare-workers-ai/models/@cf/lykon/dreamshaper-8-lcm.toml @@ -1,5 +1,5 @@ name = "@cf/lykon/dreamshaper-8-lcm" -description = "Image model for prompt-driven generation, editing, and visual design workflows" +description = "Stable Diffusion model that has been fine-tuned to be better at photorealism without sacrificing range." family = "dreamshaper" release_date = "2024-02-27" last_updated = "2024-02-27" diff --git a/providers/cloudflare-workers-ai/models/@cf/meta-llama/llama-2-7b-chat-hf-lora.toml b/providers/cloudflare-workers-ai/models/@cf/meta-llama/llama-2-7b-chat-hf-lora.toml index 08ab99f994..82387b7a66 100644 --- a/providers/cloudflare-workers-ai/models/@cf/meta-llama/llama-2-7b-chat-hf-lora.toml +++ b/providers/cloudflare-workers-ai/models/@cf/meta-llama/llama-2-7b-chat-hf-lora.toml @@ -1,5 +1,5 @@ name = "@cf/meta-llama/llama-2-7b-chat-hf-lora" -description = "Open Llama instruction model for multilingual chat, reasoning, and coding" +description = "This is a Llama2 base model that Cloudflare dedicated for inference with LoRA adapters. Llama 2 is a collection of pretrained and fine-tuned generative text models ranging in scale from 7 billion to 70 billion parameters. This is the repository for the 7B fine-tuned model, optimized for dialogue use cases and converted for the Hugging Face Transformers format." family = "llama" release_date = "2024-04-02" last_updated = "2024-04-02" diff --git a/providers/cloudflare-workers-ai/models/@cf/meta/m2m100-1.2b.toml b/providers/cloudflare-workers-ai/models/@cf/meta/m2m100-1.2b.toml index b94d54a152..e57149f685 100644 --- a/providers/cloudflare-workers-ai/models/@cf/meta/m2m100-1.2b.toml +++ b/providers/cloudflare-workers-ai/models/@cf/meta/m2m100-1.2b.toml @@ -1,5 +1,5 @@ name = "@cf/meta/m2m100-1.2b" -description = "General-purpose chat model for instruction following, writing, and analysis" +description = "Multilingual encoder-decoder (seq-to-seq) model trained for Many-to-Many multilingual translation" release_date = "2023-09-25" last_updated = "2023-09-25" attachment = false diff --git a/providers/cloudflare-workers-ai/models/@cf/microsoft/resnet-50.toml b/providers/cloudflare-workers-ai/models/@cf/microsoft/resnet-50.toml index e37d9cc8e3..343b495cc9 100644 --- a/providers/cloudflare-workers-ai/models/@cf/microsoft/resnet-50.toml +++ b/providers/cloudflare-workers-ai/models/@cf/microsoft/resnet-50.toml @@ -1,5 +1,5 @@ name = "@cf/microsoft/resnet-50" -description = "Multimodal model for analyzing text, images, documents, and rich media" +description = "50 layers deep image classification CNN trained on more than 1M images from ImageNet" family = "resnet" release_date = "2023-09-25" last_updated = "2023-09-25" diff --git a/providers/cloudflare-workers-ai/models/@cf/mistral/mistral-7b-instruct-v0.2-lora.toml b/providers/cloudflare-workers-ai/models/@cf/mistral/mistral-7b-instruct-v0.2-lora.toml index 3a0dd3aea3..5cb06a707e 100644 --- a/providers/cloudflare-workers-ai/models/@cf/mistral/mistral-7b-instruct-v0.2-lora.toml +++ b/providers/cloudflare-workers-ai/models/@cf/mistral/mistral-7b-instruct-v0.2-lora.toml @@ -1,5 +1,5 @@ name = "@cf/mistral/mistral-7b-instruct-v0.2-lora" -description = "Mistral model for multilingual chat, reasoning, and tool-assisted workflows" +description = "The Mistral-7B-Instruct-v0.2 Large Language Model (LLM) is an instruct fine-tuned version of the Mistral-7B-v0.2." family = "mistral" release_date = "2024-04-01" last_updated = "2024-04-01" diff --git a/providers/cloudflare-workers-ai/models/@cf/moondream/moondream3.1-9B-A2B.toml b/providers/cloudflare-workers-ai/models/@cf/moondream/moondream3.1-9B-A2B.toml index c3c3569c32..e975f5ce05 100644 --- a/providers/cloudflare-workers-ai/models/@cf/moondream/moondream3.1-9B-A2B.toml +++ b/providers/cloudflare-workers-ai/models/@cf/moondream/moondream3.1-9B-A2B.toml @@ -1,5 +1,5 @@ name = "@cf/moondream/moondream3.1-9B-A2B" -description = "Multimodal model for analyzing text, images, documents, and rich media" +description = "Moondream 3 is a fast, efficient 9B mixture-of-experts vision language model (2B active parameters) that delivers frontier-level visual reasoning for tasks like object detection, pointing, OCR, and structured output." release_date = "2026-07-07" last_updated = "2026-07-07" attachment = true diff --git a/providers/cloudflare-workers-ai/models/@cf/myshell-ai/melotts.toml b/providers/cloudflare-workers-ai/models/@cf/myshell-ai/melotts.toml index 765dbec5a9..4dd933bc79 100644 --- a/providers/cloudflare-workers-ai/models/@cf/myshell-ai/melotts.toml +++ b/providers/cloudflare-workers-ai/models/@cf/myshell-ai/melotts.toml @@ -1,5 +1,6 @@ +# per audio minute name = "@cf/myshell-ai/melotts" -description = "Speech generation model for controllable voice, narration, and audio delivery" +description = "MeloTTS is a high-quality multi-lingual text-to-speech library by MyShell.ai." family = "melotts" release_date = "2024-07-19" last_updated = "2024-07-19" diff --git a/providers/cloudflare-workers-ai/models/@cf/openai/whisper-large-v3-turbo.toml b/providers/cloudflare-workers-ai/models/@cf/openai/whisper-large-v3-turbo.toml index 18d5e28c8b..a9ff3da10b 100644 --- a/providers/cloudflare-workers-ai/models/@cf/openai/whisper-large-v3-turbo.toml +++ b/providers/cloudflare-workers-ai/models/@cf/openai/whisper-large-v3-turbo.toml @@ -1,24 +1,11 @@ -name = "@cf/openai/whisper-large-v3-turbo" +# per audio minute +base_model = "openai/whisper-large-v3-turbo" description = "Speech transcription model for accurate audio-to-text and captioning workflows" -family = "whisper" -release_date = "2024-05-22" -last_updated = "2024-05-22" attachment = true -reasoning = false temperature = false -tool_call = false structured_output = false -open_weights = false [cost] input = 0 output = 0 input_audio = 0.000513 - -[limit] -context = 0 -output = 0 - -[modalities] -input = ["audio"] -output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/openai/whisper-tiny-en.toml b/providers/cloudflare-workers-ai/models/@cf/openai/whisper-tiny-en.toml index 90dfab3b4b..43b631767a 100644 --- a/providers/cloudflare-workers-ai/models/@cf/openai/whisper-tiny-en.toml +++ b/providers/cloudflare-workers-ai/models/@cf/openai/whisper-tiny-en.toml @@ -1,5 +1,5 @@ name = "@cf/openai/whisper-tiny-en" -description = "Speech transcription model for accurate audio-to-text and captioning workflows" +description = "Whisper is a pre-trained model for automatic speech recognition (ASR) and speech translation. Trained on 680k hours of labelled data, Whisper models demonstrate a strong ability to generalize to many datasets and domains without the need for fine-tuning. This is the English-only version of the Whisper Tiny model which was trained on the task of speech recognition." family = "whisper" release_date = "2024-04-22" last_updated = "2024-04-22" diff --git a/providers/cloudflare-workers-ai/models/@cf/openai/whisper.toml b/providers/cloudflare-workers-ai/models/@cf/openai/whisper.toml index 7939c5314f..6365cd4b65 100644 --- a/providers/cloudflare-workers-ai/models/@cf/openai/whisper.toml +++ b/providers/cloudflare-workers-ai/models/@cf/openai/whisper.toml @@ -1,5 +1,6 @@ +# per audio minute name = "@cf/openai/whisper" -description = "Speech transcription model for accurate audio-to-text and captioning workflows" +description = "Whisper is a general-purpose speech recognition model. It is trained on a large dataset of diverse audio and is also a multitasking model that can perform multilingual speech recognition, speech translation, and language identification." family = "whisper" release_date = "2023-09-25" last_updated = "2023-09-25" diff --git a/providers/cloudflare-workers-ai/models/@cf/pfnet/plamo-embedding-1b.toml b/providers/cloudflare-workers-ai/models/@cf/pfnet/plamo-embedding-1b.toml index 77a78e5670..20ac01d3bb 100644 --- a/providers/cloudflare-workers-ai/models/@cf/pfnet/plamo-embedding-1b.toml +++ b/providers/cloudflare-workers-ai/models/@cf/pfnet/plamo-embedding-1b.toml @@ -1,5 +1,5 @@ name = "@cf/pfnet/plamo-embedding-1b" -description = "Embedding model for semantic search, retrieval, clustering, and ranking pipelines" +description = "PLaMo-Embedding-1B is a Japanese text embedding model developed by Preferred Networks, Inc.\n\nIt can convert Japanese text input into numerical vectors and can be used for a wide range of applications, including information retrieval, text classification, and clustering." family = "plamo" release_date = "2025-09-24" last_updated = "2025-09-24" diff --git a/providers/cloudflare-workers-ai/models/@cf/pipecat-ai/smart-turn-v2.toml b/providers/cloudflare-workers-ai/models/@cf/pipecat-ai/smart-turn-v2.toml index 11ec6c02ea..12162cb7f4 100644 --- a/providers/cloudflare-workers-ai/models/@cf/pipecat-ai/smart-turn-v2.toml +++ b/providers/cloudflare-workers-ai/models/@cf/pipecat-ai/smart-turn-v2.toml @@ -1,5 +1,6 @@ +# per audio minute name = "@cf/pipecat-ai/smart-turn-v2" -description = "Multimodal model for analyzing text, images, documents, and rich media" +description = "An open source, community-driven, native audio turn detection model in 2nd version" family = "smart-turn" release_date = "2025-08-04" last_updated = "2025-08-04" diff --git a/providers/cloudflare-workers-ai/models/@cf/qwen/qwen3-embedding-0.6b.toml b/providers/cloudflare-workers-ai/models/@cf/qwen/qwen3-embedding-0.6b.toml index 0e4d8f1c6b..6d2c640d0c 100644 --- a/providers/cloudflare-workers-ai/models/@cf/qwen/qwen3-embedding-0.6b.toml +++ b/providers/cloudflare-workers-ai/models/@cf/qwen/qwen3-embedding-0.6b.toml @@ -1,5 +1,5 @@ name = "@cf/qwen/qwen3-embedding-0.6b" -description = "Embedding model for semantic search, retrieval, clustering, and ranking pipelines" +description = "The Qwen3 Embedding model series is the latest proprietary model of the Qwen family, specifically designed for text embedding and ranking tasks." family = "qwen" release_date = "2025-06-18" last_updated = "2025-06-18" diff --git a/providers/cloudflare-workers-ai/models/@cf/runwayml/stable-diffusion-v1-5-img2img.toml b/providers/cloudflare-workers-ai/models/@cf/runwayml/stable-diffusion-v1-5-img2img.toml index ed22a18240..553ff4662c 100644 --- a/providers/cloudflare-workers-ai/models/@cf/runwayml/stable-diffusion-v1-5-img2img.toml +++ b/providers/cloudflare-workers-ai/models/@cf/runwayml/stable-diffusion-v1-5-img2img.toml @@ -1,5 +1,5 @@ name = "@cf/runwayml/stable-diffusion-v1-5-img2img" -description = "Image model for prompt-driven generation, editing, and visual design workflows" +description = "Stable Diffusion is a latent text-to-image diffusion model capable of generating photo-realistic images. Img2img generate a new image from an input image with Stable Diffusion." family = "stable-diffusion" release_date = "2024-02-27" last_updated = "2024-02-27" diff --git a/providers/cloudflare-workers-ai/models/@cf/runwayml/stable-diffusion-v1-5-inpainting.toml b/providers/cloudflare-workers-ai/models/@cf/runwayml/stable-diffusion-v1-5-inpainting.toml index ffd3497252..58e2e530a7 100644 --- a/providers/cloudflare-workers-ai/models/@cf/runwayml/stable-diffusion-v1-5-inpainting.toml +++ b/providers/cloudflare-workers-ai/models/@cf/runwayml/stable-diffusion-v1-5-inpainting.toml @@ -1,5 +1,5 @@ name = "@cf/runwayml/stable-diffusion-v1-5-inpainting" -description = "Image model for prompt-driven generation, editing, and visual design workflows" +description = "Stable Diffusion Inpainting is a latent text-to-image diffusion model capable of generating photo-realistic images given any text input, with the extra capability of inpainting the pictures by using a mask." family = "stable-diffusion" release_date = "2024-02-27" last_updated = "2024-02-27" diff --git a/providers/cloudflare-workers-ai/models/@cf/stabilityai/stable-diffusion-xl-base-1.0.toml b/providers/cloudflare-workers-ai/models/@cf/stabilityai/stable-diffusion-xl-base-1.0.toml index 838a288446..0ec26e7987 100644 --- a/providers/cloudflare-workers-ai/models/@cf/stabilityai/stable-diffusion-xl-base-1.0.toml +++ b/providers/cloudflare-workers-ai/models/@cf/stabilityai/stable-diffusion-xl-base-1.0.toml @@ -1,5 +1,5 @@ name = "@cf/stabilityai/stable-diffusion-xl-base-1.0" -description = "Image model for prompt-driven generation, editing, and visual design workflows" +description = "Diffusion-based text-to-image generative model by Stability AI. Generates and modify images based on text prompts." family = "stable-diffusion" release_date = "2023-11-10" last_updated = "2023-11-10" diff --git a/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-4.7-flash.toml b/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-4.7-flash.toml index 197fa7c94b..e2b003ca0a 100644 --- a/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-4.7-flash.toml +++ b/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-4.7-flash.toml @@ -1,32 +1,23 @@ # Native `/ai/run` accepts `reasoning_effort = low|medium|high` and # `chat_template_kwargs.enable_thinking = true|false`; no budget is documented. # https://developers.cloudflare.com/workers-ai/models/glm-4.7-flash/sync-input.json (accessed 2026-06-25) - -name = "GLM-4.7-Flash" +base_model = "zhipuai/glm-4.7-flash" description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -family = "glm-flash" -release_date = "2026-01-19" -last_updated = "2026-01-19" -attachment = false -reasoning = true -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high"] }] -temperature = true -tool_call = true structured_output = true -knowledge = "2025-04" -open_weights = true [interleaved] field = "reasoning_content" +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + [cost] input = 0.0605 output = 0.4 [limit] context = 131_072 -output = 131_072 - -[modalities] -input = ["text"] -output = ["text"]