From 024da6f89aa1c31168601acc0590fa0478b5db53 Mon Sep 17 00:00:00 2001 From: Universe Date: Tue, 13 Oct 2026 05:02:51 +0900 Subject: [PATCH 1/8] Record text labs and sourced provider input variants --- catalogue/PROVENANCE.md | 25 + catalogue/models.json | 465 +++++++++++++++++- models/alibaba/wan-3.0/card.toml | 4 + models/anthropic/claude-fable-5.1/card.toml | 9 + models/anthropic/claude-fable-5/card.toml | 9 + models/anthropic/claude-haiku-5.5/card.toml | 9 + models/anthropic/claude-opus-4.8/card.toml | 9 + models/anthropic/claude-opus-5.5/card.toml | 9 + models/anthropic/claude-opus-5/card.toml | 9 + models/anthropic/claude-sonnet-5.5/card.toml | 9 + models/anthropic/claude-sonnet-5/card.toml | 9 + models/black-forest-labs/flux-2-max/card.toml | 4 + models/black-forest-labs/flux-2-pro/card.toml | 4 + models/bytedance/seedance-2.0/card.toml | 4 + models/bytedance/seedance-2.5/card.toml | 3 + models/bytedance/seedream-5.0-lite/card.toml | 4 + models/bytedance/seedream-5.0-pro/card.toml | 4 + models/google/gemini-3-pro-image/card.toml | 4 + .../gemini-3.1-flash-image-preview/card.toml | 4 + .../google/gemini-3.1-pro-preview/card.toml | 9 + models/google/gemini-3.7-flash/card.toml | 9 + models/google/gemini-3.8-flash/card.toml | 9 + models/google/veo-3.1-fast/card.toml | 4 + models/google/veo-3.1-lite/card.toml | 4 + models/google/veo-3.1/card.toml | 4 + models/openai/gpt-5.5-pro/card.toml | 9 + models/openai/gpt-5.5/card.toml | 9 + models/openai/gpt-5.6-luna/card.toml | 9 + models/openai/gpt-5.6-sol/card.toml | 9 + models/openai/gpt-5.6-terra/card.toml | 9 + models/openai/gpt-6-astra/card.toml | 9 + models/openai/gpt-image-2.5-flare/card.toml | 4 + .../openai/gpt-image-2.5-sunburst/card.toml | 4 + models/openai/gpt-image-2/card.toml | 6 +- models/recraft-ai/recraft-v4.1/card.toml | 3 + models/tripo/rig-check/operation.toml | 8 + models/xai/grok-imagine-image-2.0/card.toml | 4 + models/xai/grok-imagine-video-1.5/card.toml | 3 + scripts/check.py | 3 + tests/test_check.py | 6 + 40 files changed, 729 insertions(+), 2 deletions(-) diff --git a/catalogue/PROVENANCE.md b/catalogue/PROVENANCE.md index f50dbb8..efe1c88 100644 --- a/catalogue/PROVENANCE.md +++ b/catalogue/PROVENANCE.md @@ -702,3 +702,28 @@ https://fal.ai/models/xai/grok-imagine-video/v1.5/image-to-video VERIFY before prod: models.dev lists no per-1M price for gemini-embedding-2 yet; using the gemini-embedding-001 family input rate ($0.15 / 1M) as a conservative stand-in. + +## Text labs and Vercel endpoints (2026-10-13) + +Text cards identify the lab named by their existing first-party release source: +OpenAI, Anthropic, or Google. Their exact serving IDs are verified against +[Vercel's public model discovery](https://ai-gateway.vercel.sh/v1/models), +which lists all 17 recorded text models. This records availability, not a price +or a routing preference. Existing model release dates and prices are unchanged. + +## fal input variants (2026-10-13) + +Bindings list the text and image variants documented on their exact fal API +pages. Each endpoint includes its own source URL; existing `references` fields +remain unchanged. GPT Image 2's ID is corrected to `openai/gpt-image-2` from +[fal's API example](https://fal.ai/models/openai/gpt-image-2/api); the overview's +hand-written quick start still shows `fal-ai/gpt-image-2`, which disagrees with +the generated API documentation. The generated endpoint-specific API example +is the more specific source. This correction does not change prices. + +## Tripo rig check + +[Tripo's rig-check documentation](https://developers.tripo3d.ai/en/docs/animations-rig-check) +identifies the operation and lab but does not establish its first public release +day. It carries `basis: provider_endpoint` and `date: null`, as do the rigging +endpoints; a consumer must not substitute its own integration date. diff --git a/catalogue/models.json b/catalogue/models.json index 34209ee..dd5d7d0 100644 --- a/catalogue/models.json +++ b/catalogue/models.json @@ -3,6 +3,7 @@ "text.catalog": { "anthropic/claude-fable-5": { "id": "anthropic/claude-fable-5", + "vendor": "anthropic", "label": "Claude Fable 5", "short_label": "Fable 5", "multimodal": true, @@ -25,10 +26,25 @@ "date": "2026-06-09", "basis": "model", "source_url": "https://platform.claude.com/docs/en/release-notes/overview" + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "anthropic/claude-fable-5", + "url": "https://vercel.com/ai-gateway/models/claude-fable-5", + "endpoints": [ + { + "id": "anthropic/claude-fable-5", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ] + } } }, "anthropic/claude-fable-5.1": { "id": "anthropic/claude-fable-5.1", + "vendor": "anthropic", "label": "Claude Fable 5.1", "short_label": "Fable 5.1", "multimodal": true, @@ -51,10 +67,25 @@ "date": "2026-09-01", "basis": "model", "source_url": "https://platform.claude.com/docs/en/models/fable-5-1/overview" + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "anthropic/claude-fable-5.1", + "url": "https://vercel.com/ai-gateway/models/claude-fable-5.1", + "endpoints": [ + { + "id": "anthropic/claude-fable-5.1", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ] + } } }, "anthropic/claude-haiku-5.5": { "id": "anthropic/claude-haiku-5.5", + "vendor": "anthropic", "label": "Claude Haiku 5.5", "short_label": "Haiku 5.5", "multimodal": true, @@ -82,10 +113,25 @@ "input_multiplier": 5, "output_multiplier": 5 } + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "anthropic/claude-haiku-5.5", + "url": "https://vercel.com/ai-gateway/models/claude-haiku-5.5", + "endpoints": [ + { + "id": "anthropic/claude-haiku-5.5", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ] + } } }, "anthropic/claude-opus-4.8": { "id": "anthropic/claude-opus-4.8", + "vendor": "anthropic", "label": "Claude Opus 4.8", "short_label": "Opus 4.8", "multimodal": true, @@ -108,10 +154,25 @@ "date": "2026-05-28", "basis": "model", "source_url": "https://platform.claude.com/docs/en/release-notes/overview" + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "anthropic/claude-opus-4.8", + "url": "https://vercel.com/ai-gateway/models/claude-opus-4.8", + "endpoints": [ + { + "id": "anthropic/claude-opus-4.8", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ] + } } }, "anthropic/claude-opus-5": { "id": "anthropic/claude-opus-5", + "vendor": "anthropic", "label": "Claude Opus 5", "short_label": "Opus 5", "multimodal": true, @@ -134,10 +195,25 @@ "date": "2026-07-24", "basis": "model", "source_url": "https://platform.claude.com/docs/en/release-notes/overview" + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "anthropic/claude-opus-5", + "url": "https://vercel.com/ai-gateway/models/claude-opus-5", + "endpoints": [ + { + "id": "anthropic/claude-opus-5", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ] + } } }, "anthropic/claude-opus-5.5": { "id": "anthropic/claude-opus-5.5", + "vendor": "anthropic", "label": "Claude Opus 5.5", "short_label": "Opus 5.5", "multimodal": true, @@ -160,10 +236,25 @@ "date": "2026-09-22", "basis": "model", "source_url": "https://platform.claude.com/docs/en/models/opus-5-5/overview" + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "anthropic/claude-opus-5.5", + "url": "https://vercel.com/ai-gateway/models/claude-opus-5.5", + "endpoints": [ + { + "id": "anthropic/claude-opus-5.5", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ] + } } }, "anthropic/claude-sonnet-5": { "id": "anthropic/claude-sonnet-5", + "vendor": "anthropic", "label": "Claude Sonnet 5", "short_label": "Sonnet 5", "multimodal": true, @@ -186,10 +277,25 @@ "date": "2026-06-30", "basis": "model", "source_url": "https://platform.claude.com/docs/en/release-notes/overview" + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "anthropic/claude-sonnet-5", + "url": "https://vercel.com/ai-gateway/models/claude-sonnet-5", + "endpoints": [ + { + "id": "anthropic/claude-sonnet-5", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ] + } } }, "anthropic/claude-sonnet-5.5": { "id": "anthropic/claude-sonnet-5.5", + "vendor": "anthropic", "label": "Claude Sonnet 5.5", "short_label": "Sonnet 5.5", "multimodal": true, @@ -212,10 +318,25 @@ "date": "2026-09-28", "basis": "model", "source_url": "https://platform.claude.com/docs/en/models/sonnet-5-5/overview" + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "anthropic/claude-sonnet-5.5", + "url": "https://vercel.com/ai-gateway/models/claude-sonnet-5.5", + "endpoints": [ + { + "id": "anthropic/claude-sonnet-5.5", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ] + } } }, "google/gemini-3.1-pro-preview": { "id": "google/gemini-3.1-pro-preview", + "vendor": "google", "label": "Gemini 3.1 Pro Preview", "short_label": "Gemini 3.1 Pro", "multimodal": true, @@ -243,10 +364,25 @@ "input_multiplier": 2, "output_multiplier": 1.5 } + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "google/gemini-3.1-pro-preview", + "url": "https://vercel.com/ai-gateway/models/gemini-3.1-pro-preview", + "endpoints": [ + { + "id": "google/gemini-3.1-pro-preview", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ] + } } }, "google/gemini-3.7-flash": { "id": "google/gemini-3.7-flash", + "vendor": "google", "label": "Gemini 3.7 Flash", "multimodal": true, "image_input_mimes": [ @@ -268,10 +404,25 @@ "date": "2026-08-13", "basis": "model", "source_url": "https://ai.google.dev/gemini-api/docs/changelog" + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "google/gemini-3.7-flash", + "url": "https://vercel.com/ai-gateway/models/gemini-3.7-flash", + "endpoints": [ + { + "id": "google/gemini-3.7-flash", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ] + } } }, "google/gemini-3.8-flash": { "id": "google/gemini-3.8-flash", + "vendor": "google", "label": "Gemini 3.8 Flash", "multimodal": true, "image_input_mimes": [ @@ -293,10 +444,25 @@ "date": "2026-09-02", "basis": "model", "source_url": "https://ai.google.dev/gemini-api/docs/changelog" + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "google/gemini-3.8-flash", + "url": "https://vercel.com/ai-gateway/models/gemini-3.8-flash", + "endpoints": [ + { + "id": "google/gemini-3.8-flash", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ] + } } }, "openai/gpt-5.5": { "id": "openai/gpt-5.5", + "vendor": "openai", "label": "GPT-5.5", "multimodal": true, "image_input_mimes": [ @@ -322,10 +488,25 @@ "input_multiplier": 2, "output_multiplier": 1.5 } + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "openai/gpt-5.5", + "url": "https://vercel.com/ai-gateway/models/gpt-5.5", + "endpoints": [ + { + "id": "openai/gpt-5.5", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ] + } } }, "openai/gpt-5.5-pro": { "id": "openai/gpt-5.5-pro", + "vendor": "openai", "label": "GPT-5.5 Pro", "multimodal": true, "image_input_mimes": [ @@ -345,10 +526,25 @@ "date": "2026-04-23", "basis": "model", "source_url": "https://openai.com/index/introducing-gpt-5-5/" + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "openai/gpt-5.5-pro", + "url": "https://vercel.com/ai-gateway/models/gpt-5.5-pro", + "endpoints": [ + { + "id": "openai/gpt-5.5-pro", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ] + } } }, "openai/gpt-5.6-luna": { "id": "openai/gpt-5.6-luna", + "vendor": "openai", "label": "GPT-5.6 Luna", "multimodal": true, "image_input_mimes": [ @@ -375,10 +571,25 @@ "input_multiplier": 2, "output_multiplier": 1.5 } + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "openai/gpt-5.6-luna", + "url": "https://vercel.com/ai-gateway/models/gpt-5.6-luna", + "endpoints": [ + { + "id": "openai/gpt-5.6-luna", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ] + } } }, "openai/gpt-5.6-sol": { "id": "openai/gpt-5.6-sol", + "vendor": "openai", "label": "GPT-5.6 Sol", "multimodal": true, "image_input_mimes": [ @@ -405,10 +616,25 @@ "input_multiplier": 2, "output_multiplier": 1.5 } + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "openai/gpt-5.6-sol", + "url": "https://vercel.com/ai-gateway/models/gpt-5.6-sol", + "endpoints": [ + { + "id": "openai/gpt-5.6-sol", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ] + } } }, "openai/gpt-5.6-terra": { "id": "openai/gpt-5.6-terra", + "vendor": "openai", "label": "GPT-5.6 Terra", "multimodal": true, "image_input_mimes": [ @@ -435,10 +661,25 @@ "input_multiplier": 2, "output_multiplier": 1.5 } + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "openai/gpt-5.6-terra", + "url": "https://vercel.com/ai-gateway/models/gpt-5.6-terra", + "endpoints": [ + { + "id": "openai/gpt-5.6-terra", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ] + } } }, "openai/gpt-6-astra": { "id": "openai/gpt-6-astra", + "vendor": "openai", "label": "GPT-6 Astra", "multimodal": true, "image_input_mimes": [ @@ -465,6 +706,20 @@ "input_multiplier": 2, "output_multiplier": 1.5 } + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "openai/gpt-6-astra", + "url": "https://vercel.com/ai-gateway/models/gpt-6-astra", + "endpoints": [ + { + "id": "openai/gpt-6-astra", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ] + } } } }, @@ -515,6 +770,18 @@ } }, "fal": { + "endpoints": [ + { + "id": "fal-ai/flux-2-max", + "input": "text", + "source_url": "https://fal.ai/models/fal-ai/flux-2-max/api" + }, + { + "id": "fal-ai/flux-2-max/edit", + "input": "image", + "source_url": "https://fal.ai/models/fal-ai/flux-2-max/edit/api" + } + ], "provider": "fal", "id": "fal-ai/flux-2-max", "pricing": { @@ -574,6 +841,18 @@ } }, "fal": { + "endpoints": [ + { + "id": "fal-ai/flux-2-pro", + "input": "text", + "source_url": "https://fal.ai/models/fal-ai/flux-2-pro/api" + }, + { + "id": "fal-ai/flux-2-pro/edit", + "input": "image", + "source_url": "https://fal.ai/models/fal-ai/flux-2-pro/edit/api" + } + ], "provider": "fal", "id": "fal-ai/flux-2-pro", "pricing": { @@ -814,6 +1093,18 @@ } }, "fal": { + "endpoints": [ + { + "id": "bytedance/seedream/v5/lite/text-to-image", + "input": "text", + "source_url": "https://fal.ai/models/bytedance/seedream/v5/lite/text-to-image/api" + }, + { + "id": "fal-ai/bytedance/seedream/v5/lite/edit", + "input": "image", + "source_url": "https://fal.ai/models/fal-ai/bytedance/seedream/v5/lite/edit/api" + } + ], "provider": "fal", "id": "bytedance/seedream/v5/lite/text-to-image", "pricing": { @@ -869,6 +1160,18 @@ } }, "fal": { + "endpoints": [ + { + "id": "bytedance/seedream/v5/pro/edit", + "input": "image", + "source_url": "https://fal.ai/models/bytedance/seedream/v5/pro/edit/api" + }, + { + "id": "bytedance/seedream/v5/pro/text-to-image", + "input": "text", + "source_url": "https://fal.ai/models/bytedance/seedream/v5/pro/text-to-image/api" + } + ], "provider": "fal", "id": "bytedance/seedream/v5/pro/text-to-image", "pricing": { @@ -937,6 +1240,18 @@ } }, "fal": { + "endpoints": [ + { + "id": "fal-ai/nano-banana-pro", + "input": "text", + "source_url": "https://fal.ai/models/fal-ai/nano-banana-pro/api" + }, + { + "id": "fal-ai/nano-banana-pro/edit", + "input": "image", + "source_url": "https://fal.ai/models/fal-ai/nano-banana-pro/edit/api" + } + ], "provider": "fal", "id": "fal-ai/nano-banana-pro", "pricing": { @@ -998,6 +1313,18 @@ } }, "fal": { + "endpoints": [ + { + "id": "fal-ai/nano-banana-2", + "input": "text", + "source_url": "https://fal.ai/models/fal-ai/nano-banana-2/api" + }, + { + "id": "fal-ai/nano-banana-2/edit", + "input": "image", + "source_url": "https://fal.ai/models/fal-ai/nano-banana-2/edit/api" + } + ], "provider": "fal", "id": "fal-ai/nano-banana-2", "pricing": { @@ -1292,8 +1619,20 @@ } }, "fal": { + "endpoints": [ + { + "id": "openai/gpt-image-2", + "input": "text", + "source_url": "https://fal.ai/models/openai/gpt-image-2/api" + }, + { + "id": "openai/gpt-image-2/edit", + "input": "image", + "source_url": "https://fal.ai/models/openai/gpt-image-2/edit/api" + } + ], "provider": "fal", - "id": "fal-ai/gpt-image-2", + "id": "openai/gpt-image-2", "avg_cost_usd": 0.053, "url": "https://fal.ai/models/openai/gpt-image-2", "pricing": { @@ -1417,6 +1756,18 @@ } }, "fal": { + "endpoints": [ + { + "id": "openai/gpt-image-2.5/flare/edit", + "input": "image", + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/edit/api" + }, + { + "id": "openai/gpt-image-2.5/flare/text-to-image", + "input": "text", + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image/api" + } + ], "provider": "fal", "id": "openai/gpt-image-2.5/flare/text-to-image", "avg_cost_usd": 0.055, @@ -1526,6 +1877,18 @@ } }, "fal": { + "endpoints": [ + { + "id": "openai/gpt-image-2.5/sunburst/edit", + "input": "image", + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/edit/api" + }, + { + "id": "openai/gpt-image-2.5/sunburst/text-to-image", + "input": "text", + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image/api" + } + ], "provider": "fal", "id": "openai/gpt-image-2.5/sunburst/text-to-image", "avg_cost_usd": 0.055, @@ -1655,6 +2018,13 @@ } }, "fal": { + "endpoints": [ + { + "id": "fal-ai/recraft/v4.1/text-to-image", + "input": "text", + "source_url": "https://fal.ai/models/fal-ai/recraft/v4.1/text-to-image/api" + } + ], "provider": "fal", "id": "fal-ai/recraft/v4.1/text-to-image", "pricing": { @@ -1719,6 +2089,18 @@ } }, "fal": { + "endpoints": [ + { + "id": "xai/grok-imagine-image/v2.0/edit", + "input": "image", + "source_url": "https://fal.ai/models/xai/grok-imagine-image/v2.0/edit/api" + }, + { + "id": "xai/grok-imagine-image/v2.0/text-to-image", + "input": "text", + "source_url": "https://fal.ai/models/xai/grok-imagine-image/v2.0/text-to-image/api" + } + ], "provider": "fal", "id": "xai/grok-imagine-image/v2.0/text-to-image", "avg_cost_usd": 0.06, @@ -1793,6 +2175,18 @@ } }, "fal": { + "endpoints": [ + { + "id": "alibaba/wan-3.0/image-to-video", + "input": "image", + "source_url": "https://fal.ai/models/alibaba/wan-3.0/image-to-video/api" + }, + { + "id": "alibaba/wan-3.0/text-to-video", + "input": "text", + "source_url": "https://fal.ai/models/alibaba/wan-3.0/text-to-video/api" + } + ], "provider": "fal", "id": "alibaba/wan-3.0/image-to-video", "input": "image", @@ -1837,6 +2231,18 @@ }, "providers": { "fal": { + "endpoints": [ + { + "id": "bytedance/seedance-2.0/image-to-video", + "input": "image", + "source_url": "https://fal.ai/models/bytedance/seedance-2.0/image-to-video/api" + }, + { + "id": "bytedance/seedance-2.0/text-to-video", + "input": "text", + "source_url": "https://fal.ai/models/bytedance/seedance-2.0/text-to-video/api" + } + ], "provider": "fal", "id": "bytedance/seedance-2.0/image-to-video", "input": "image", @@ -1899,6 +2305,13 @@ }, "providers": { "fal": { + "endpoints": [ + { + "id": "bytedance/seedance-2.5/image-to-video", + "input": "image", + "source_url": "https://fal.ai/models/bytedance/seedance-2.5/image-to-video/api" + } + ], "provider": "fal", "id": "bytedance/seedance-2.5/image-to-video", "input": "image", @@ -1966,6 +2379,18 @@ } }, "fal": { + "endpoints": [ + { + "id": "fal-ai/veo3.1", + "input": "text", + "source_url": "https://fal.ai/models/fal-ai/veo3.1/api" + }, + { + "id": "fal-ai/veo3.1/image-to-video", + "input": "image", + "source_url": "https://fal.ai/models/fal-ai/veo3.1/image-to-video/api" + } + ], "provider": "fal", "id": "fal-ai/veo3.1/image-to-video", "input": "image", @@ -2054,6 +2479,18 @@ } }, "fal": { + "endpoints": [ + { + "id": "fal-ai/veo3.1/fast", + "input": "text", + "source_url": "https://fal.ai/models/fal-ai/veo3.1/fast/api" + }, + { + "id": "fal-ai/veo3.1/fast/image-to-video", + "input": "image", + "source_url": "https://fal.ai/models/fal-ai/veo3.1/fast/image-to-video/api" + } + ], "provider": "fal", "id": "fal-ai/veo3.1/fast/image-to-video", "input": "image", @@ -2120,6 +2557,18 @@ } }, "fal": { + "endpoints": [ + { + "id": "fal-ai/veo3.1/lite", + "input": "text", + "source_url": "https://fal.ai/models/fal-ai/veo3.1/lite/api" + }, + { + "id": "fal-ai/veo3.1/lite/image-to-video", + "input": "image", + "source_url": "https://fal.ai/models/fal-ai/veo3.1/lite/image-to-video/api" + } + ], "provider": "fal", "id": "fal-ai/veo3.1/lite/image-to-video", "input": "image", @@ -2184,6 +2633,13 @@ } }, "fal": { + "endpoints": [ + { + "id": "xai/grok-imagine-video/v1.5/image-to-video", + "input": "image", + "source_url": "https://fal.ai/models/xai/grok-imagine-video/v1.5/image-to-video/api" + } + ], "provider": "fal", "id": "xai/grok-imagine-video/v1.5/image-to-video", "input": "image", @@ -2744,11 +3200,18 @@ "aquatic" ], "url": "https://developers.tripo3d.ai/en/docs/animations-rig-check", + "label": "Tripo Rig Check", + "vendor": "tripo", "pricing": { "type": "per_operation_credits", "credits": 0, "usd_per_credit": 0.01, "source_url": "https://developers.tripo3d.ai/en/pricing" + }, + "release": { + "basis": "provider_endpoint", + "source_url": "https://developers.tripo3d.ai/en/docs/animations-rig-check", + "date": null } }, "image_tools.models": { diff --git a/models/alibaba/wan-3.0/card.toml b/models/alibaba/wan-3.0/card.toml index 38b9217..2211061 100644 --- a/models/alibaba/wan-3.0/card.toml +++ b/models/alibaba/wan-3.0/card.toml @@ -32,6 +32,10 @@ type = "per_second" 1080p = { audio = 0.2 } [providers.fal] +endpoints = [ + { id = "alibaba/wan-3.0/image-to-video", input = "image", source_url = "https://fal.ai/models/alibaba/wan-3.0/image-to-video/api" }, + { id = "alibaba/wan-3.0/text-to-video", input = "text", source_url = "https://fal.ai/models/alibaba/wan-3.0/text-to-video/api" }, +] provider = "fal" id = "alibaba/wan-3.0/image-to-video" input = "image" diff --git a/models/anthropic/claude-fable-5.1/card.toml b/models/anthropic/claude-fable-5.1/card.toml index f397883..d7db535 100644 --- a/models/anthropic/claude-fable-5.1/card.toml +++ b/models/anthropic/claude-fable-5.1/card.toml @@ -1,5 +1,6 @@ id = "anthropic/claude-fable-5.1" section = "text.catalog" +vendor = "anthropic" label = "Claude Fable 5.1" short_label = "Fable 5.1" @@ -14,3 +15,11 @@ cost = { input = 10, output = 50, cache_read = 0.25, cache_write = 12.5 } date = "2026-09-01" basis = "model" source_url = "https://platform.claude.com/docs/en/models/fable-5-1/overview" + +[providers.vercel] +provider = "vercel" +id = "anthropic/claude-fable-5.1" +url = "https://vercel.com/ai-gateway/models/claude-fable-5.1" +endpoints = [ + { id = "anthropic/claude-fable-5.1", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, +] diff --git a/models/anthropic/claude-fable-5/card.toml b/models/anthropic/claude-fable-5/card.toml index c7accf4..1fca6bd 100644 --- a/models/anthropic/claude-fable-5/card.toml +++ b/models/anthropic/claude-fable-5/card.toml @@ -1,5 +1,6 @@ id = "anthropic/claude-fable-5" section = "text.catalog" +vendor = "anthropic" label = "Claude Fable 5" short_label = "Fable 5" @@ -14,3 +15,11 @@ cost = { input = 10, output = 50, cache_read = 1, cache_write = 12.5 } date = "2026-06-09" basis = "model" source_url = "https://platform.claude.com/docs/en/release-notes/overview" + +[providers.vercel] +provider = "vercel" +id = "anthropic/claude-fable-5" +url = "https://vercel.com/ai-gateway/models/claude-fable-5" +endpoints = [ + { id = "anthropic/claude-fable-5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, +] diff --git a/models/anthropic/claude-haiku-5.5/card.toml b/models/anthropic/claude-haiku-5.5/card.toml index 6776e70..1a5ab36 100644 --- a/models/anthropic/claude-haiku-5.5/card.toml +++ b/models/anthropic/claude-haiku-5.5/card.toml @@ -1,5 +1,6 @@ id = "anthropic/claude-haiku-5.5" section = "text.catalog" +vendor = "anthropic" label = "Claude Haiku 5.5" short_label = "Haiku 5.5" @@ -26,3 +27,11 @@ cache_write = 0.125 input_tokens_above = 100_000 input_multiplier = 5 output_multiplier = 5 + +[providers.vercel] +provider = "vercel" +id = "anthropic/claude-haiku-5.5" +url = "https://vercel.com/ai-gateway/models/claude-haiku-5.5" +endpoints = [ + { id = "anthropic/claude-haiku-5.5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, +] diff --git a/models/anthropic/claude-opus-4.8/card.toml b/models/anthropic/claude-opus-4.8/card.toml index 36568e7..a5fb590 100644 --- a/models/anthropic/claude-opus-4.8/card.toml +++ b/models/anthropic/claude-opus-4.8/card.toml @@ -1,5 +1,6 @@ id = "anthropic/claude-opus-4.8" section = "text.catalog" +vendor = "anthropic" label = "Claude Opus 4.8" short_label = "Opus 4.8" @@ -14,3 +15,11 @@ cost = { input = 5, output = 25, cache_read = 0.5, cache_write = 6.25 } date = "2026-05-28" basis = "model" source_url = "https://platform.claude.com/docs/en/release-notes/overview" + +[providers.vercel] +provider = "vercel" +id = "anthropic/claude-opus-4.8" +url = "https://vercel.com/ai-gateway/models/claude-opus-4.8" +endpoints = [ + { id = "anthropic/claude-opus-4.8", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, +] diff --git a/models/anthropic/claude-opus-5.5/card.toml b/models/anthropic/claude-opus-5.5/card.toml index ba66f82..4257566 100644 --- a/models/anthropic/claude-opus-5.5/card.toml +++ b/models/anthropic/claude-opus-5.5/card.toml @@ -1,5 +1,6 @@ id = "anthropic/claude-opus-5.5" section = "text.catalog" +vendor = "anthropic" label = "Claude Opus 5.5" short_label = "Opus 5.5" @@ -14,3 +15,11 @@ cost = { input = 4, output = 20, cache_read = 0.2, cache_write = 5 } date = "2026-09-22" basis = "model" source_url = "https://platform.claude.com/docs/en/models/opus-5-5/overview" + +[providers.vercel] +provider = "vercel" +id = "anthropic/claude-opus-5.5" +url = "https://vercel.com/ai-gateway/models/claude-opus-5.5" +endpoints = [ + { id = "anthropic/claude-opus-5.5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, +] diff --git a/models/anthropic/claude-opus-5/card.toml b/models/anthropic/claude-opus-5/card.toml index bd588d8..098fcfe 100644 --- a/models/anthropic/claude-opus-5/card.toml +++ b/models/anthropic/claude-opus-5/card.toml @@ -1,5 +1,6 @@ id = "anthropic/claude-opus-5" section = "text.catalog" +vendor = "anthropic" label = "Claude Opus 5" short_label = "Opus 5" @@ -14,3 +15,11 @@ cost = { input = 5, output = 25, cache_read = 0.5, cache_write = 6.25 } date = "2026-07-24" basis = "model" source_url = "https://platform.claude.com/docs/en/release-notes/overview" + +[providers.vercel] +provider = "vercel" +id = "anthropic/claude-opus-5" +url = "https://vercel.com/ai-gateway/models/claude-opus-5" +endpoints = [ + { id = "anthropic/claude-opus-5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, +] diff --git a/models/anthropic/claude-sonnet-5.5/card.toml b/models/anthropic/claude-sonnet-5.5/card.toml index 7005424..128ecf6 100644 --- a/models/anthropic/claude-sonnet-5.5/card.toml +++ b/models/anthropic/claude-sonnet-5.5/card.toml @@ -1,5 +1,6 @@ id = "anthropic/claude-sonnet-5.5" section = "text.catalog" +vendor = "anthropic" label = "Claude Sonnet 5.5" short_label = "Sonnet 5.5" @@ -14,3 +15,11 @@ cost = { input = 2, output = 10, cache_read = 0.1, cache_write = 2.5 } date = "2026-09-28" basis = "model" source_url = "https://platform.claude.com/docs/en/models/sonnet-5-5/overview" + +[providers.vercel] +provider = "vercel" +id = "anthropic/claude-sonnet-5.5" +url = "https://vercel.com/ai-gateway/models/claude-sonnet-5.5" +endpoints = [ + { id = "anthropic/claude-sonnet-5.5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, +] diff --git a/models/anthropic/claude-sonnet-5/card.toml b/models/anthropic/claude-sonnet-5/card.toml index 965bf82..0690f64 100644 --- a/models/anthropic/claude-sonnet-5/card.toml +++ b/models/anthropic/claude-sonnet-5/card.toml @@ -1,5 +1,6 @@ id = "anthropic/claude-sonnet-5" section = "text.catalog" +vendor = "anthropic" label = "Claude Sonnet 5" short_label = "Sonnet 5" @@ -14,3 +15,11 @@ cost = { input = 2, output = 10, cache_read = 0.2, cache_write = 2.5 } date = "2026-06-30" basis = "model" source_url = "https://platform.claude.com/docs/en/release-notes/overview" + +[providers.vercel] +provider = "vercel" +id = "anthropic/claude-sonnet-5" +url = "https://vercel.com/ai-gateway/models/claude-sonnet-5" +endpoints = [ + { id = "anthropic/claude-sonnet-5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, +] diff --git a/models/black-forest-labs/flux-2-max/card.toml b/models/black-forest-labs/flux-2-max/card.toml index a27ad2e..6f73130 100644 --- a/models/black-forest-labs/flux-2-max/card.toml +++ b/models/black-forest-labs/flux-2-max/card.toml @@ -31,6 +31,10 @@ url = "https://openrouter.ai/black-forest-labs/flux.2-max" references = { id = "black-forest-labs/flux.2-max", max = 8 } [providers.fal] +endpoints = [ + { id = "fal-ai/flux-2-max", input = "text", source_url = "https://fal.ai/models/fal-ai/flux-2-max/api" }, + { id = "fal-ai/flux-2-max/edit", input = "image", source_url = "https://fal.ai/models/fal-ai/flux-2-max/edit/api" }, +] provider = "fal" id = "fal-ai/flux-2-max" pricing = { type = "per_image_flat", usd = 0.07 } diff --git a/models/black-forest-labs/flux-2-pro/card.toml b/models/black-forest-labs/flux-2-pro/card.toml index 3f8a7d7..8189768 100644 --- a/models/black-forest-labs/flux-2-pro/card.toml +++ b/models/black-forest-labs/flux-2-pro/card.toml @@ -31,6 +31,10 @@ url = "https://openrouter.ai/black-forest-labs/flux.2-pro" references = { id = "black-forest-labs/flux.2-pro", max = 8 } [providers.fal] +endpoints = [ + { id = "fal-ai/flux-2-pro", input = "text", source_url = "https://fal.ai/models/fal-ai/flux-2-pro/api" }, + { id = "fal-ai/flux-2-pro/edit", input = "image", source_url = "https://fal.ai/models/fal-ai/flux-2-pro/edit/api" }, +] provider = "fal" id = "fal-ai/flux-2-pro" pricing = { type = "per_image_flat", usd = 0.03 } diff --git a/models/bytedance/seedance-2.0/card.toml b/models/bytedance/seedance-2.0/card.toml index baf2177..3833802 100644 --- a/models/bytedance/seedance-2.0/card.toml +++ b/models/bytedance/seedance-2.0/card.toml @@ -17,6 +17,10 @@ basis = "model" source_url = "https://seed.bytedance.com/en/blog/seedance-2-0-%E6%AD%A3%E5%BC%8F%E5%8F%91%E5%B8%83" [providers.fal] +endpoints = [ + { id = "bytedance/seedance-2.0/image-to-video", input = "image", source_url = "https://fal.ai/models/bytedance/seedance-2.0/image-to-video/api" }, + { id = "bytedance/seedance-2.0/text-to-video", input = "text", source_url = "https://fal.ai/models/bytedance/seedance-2.0/text-to-video/api" }, +] provider = "fal" id = "bytedance/seedance-2.0/image-to-video" input = "image" diff --git a/models/bytedance/seedance-2.5/card.toml b/models/bytedance/seedance-2.5/card.toml index 5ba96f7..5f3fbca 100644 --- a/models/bytedance/seedance-2.5/card.toml +++ b/models/bytedance/seedance-2.5/card.toml @@ -17,6 +17,9 @@ basis = "model" source_url = "https://seed.bytedance.com/en/blog/one-take-creation-flexible-referencing-introducing-seedance-2-5" [providers.fal] +endpoints = [ + { id = "bytedance/seedance-2.5/image-to-video", input = "image", source_url = "https://fal.ai/models/bytedance/seedance-2.5/image-to-video/api" }, +] provider = "fal" id = "bytedance/seedance-2.5/image-to-video" input = "image" diff --git a/models/bytedance/seedream-5.0-lite/card.toml b/models/bytedance/seedream-5.0-lite/card.toml index 0fb914b..a1235b0 100644 --- a/models/bytedance/seedream-5.0-lite/card.toml +++ b/models/bytedance/seedream-5.0-lite/card.toml @@ -31,6 +31,10 @@ url = "https://openrouter.ai/bytedance-seed/seedream-5-0-lite" references = { id = "bytedance-seed/seedream-5-0-lite", max = 14 } [providers.fal] +endpoints = [ + { id = "bytedance/seedream/v5/lite/text-to-image", input = "text", source_url = "https://fal.ai/models/bytedance/seedream/v5/lite/text-to-image/api" }, + { id = "fal-ai/bytedance/seedream/v5/lite/edit", input = "image", source_url = "https://fal.ai/models/fal-ai/bytedance/seedream/v5/lite/edit/api" }, +] provider = "fal" id = "bytedance/seedream/v5/lite/text-to-image" pricing = { type = "per_image_flat", usd = 0.035 } diff --git a/models/bytedance/seedream-5.0-pro/card.toml b/models/bytedance/seedream-5.0-pro/card.toml index 9587d90..0aaf36e 100644 --- a/models/bytedance/seedream-5.0-pro/card.toml +++ b/models/bytedance/seedream-5.0-pro/card.toml @@ -30,6 +30,10 @@ url = "https://openrouter.ai/bytedance-seed/seedream-5-0-pro" references = { id = "bytedance-seed/seedream-5-0-pro", max = 14 } [providers.fal] +endpoints = [ + { id = "bytedance/seedream/v5/pro/edit", input = "image", source_url = "https://fal.ai/models/bytedance/seedream/v5/pro/edit/api" }, + { id = "bytedance/seedream/v5/pro/text-to-image", input = "text", source_url = "https://fal.ai/models/bytedance/seedream/v5/pro/text-to-image/api" }, +] provider = "fal" id = "bytedance/seedream/v5/pro/text-to-image" pricing = { type = "per_image_flat", usd = 0.0675 } diff --git a/models/google/gemini-3-pro-image/card.toml b/models/google/gemini-3-pro-image/card.toml index a4b6601..d24f0fd 100644 --- a/models/google/gemini-3-pro-image/card.toml +++ b/models/google/gemini-3-pro-image/card.toml @@ -31,6 +31,10 @@ url = "https://openrouter.ai/google/gemini-3-pro-image-preview" references = { id = "google/gemini-3-pro-image-preview", max = 14 } [providers.fal] +endpoints = [ + { id = "fal-ai/nano-banana-pro", input = "text", source_url = "https://fal.ai/models/fal-ai/nano-banana-pro/api" }, + { id = "fal-ai/nano-banana-pro/edit", input = "image", source_url = "https://fal.ai/models/fal-ai/nano-banana-pro/edit/api" }, +] provider = "fal" id = "fal-ai/nano-banana-pro" pricing = { type = "per_image_flat", usd = 0.15 } diff --git a/models/google/gemini-3.1-flash-image-preview/card.toml b/models/google/gemini-3.1-flash-image-preview/card.toml index fc7b4c8..b5674e0 100644 --- a/models/google/gemini-3.1-flash-image-preview/card.toml +++ b/models/google/gemini-3.1-flash-image-preview/card.toml @@ -31,6 +31,10 @@ url = "https://openrouter.ai/google/gemini-3.1-flash-image" references = { id = "google/gemini-3.1-flash-image", max = 14 } [providers.fal] +endpoints = [ + { id = "fal-ai/nano-banana-2", input = "text", source_url = "https://fal.ai/models/fal-ai/nano-banana-2/api" }, + { id = "fal-ai/nano-banana-2/edit", input = "image", source_url = "https://fal.ai/models/fal-ai/nano-banana-2/edit/api" }, +] provider = "fal" id = "fal-ai/nano-banana-2" pricing = { type = "per_image_flat", usd = 0.08 } diff --git a/models/google/gemini-3.1-pro-preview/card.toml b/models/google/gemini-3.1-pro-preview/card.toml index d34c8c3..9f21024 100644 --- a/models/google/gemini-3.1-pro-preview/card.toml +++ b/models/google/gemini-3.1-pro-preview/card.toml @@ -1,5 +1,6 @@ id = "google/gemini-3.1-pro-preview" section = "text.catalog" +vendor = "google" label = "Gemini 3.1 Pro Preview" short_label = "Gemini 3.1 Pro" @@ -23,3 +24,11 @@ cache_read = 0.2 input_tokens_above = 200_000 input_multiplier = 2 output_multiplier = 1.5 + +[providers.vercel] +provider = "vercel" +id = "google/gemini-3.1-pro-preview" +url = "https://vercel.com/ai-gateway/models/gemini-3.1-pro-preview" +endpoints = [ + { id = "google/gemini-3.1-pro-preview", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, +] diff --git a/models/google/gemini-3.7-flash/card.toml b/models/google/gemini-3.7-flash/card.toml index 9523f35..0e2c4b5 100644 --- a/models/google/gemini-3.7-flash/card.toml +++ b/models/google/gemini-3.7-flash/card.toml @@ -1,5 +1,6 @@ id = "google/gemini-3.7-flash" section = "text.catalog" +vendor = "google" label = "Gemini 3.7 Flash" multimodal = true @@ -13,3 +14,11 @@ cost = { input = 1.5, output = 7.5, cache_read = 0.15 } date = "2026-08-13" basis = "model" source_url = "https://ai.google.dev/gemini-api/docs/changelog" + +[providers.vercel] +provider = "vercel" +id = "google/gemini-3.7-flash" +url = "https://vercel.com/ai-gateway/models/gemini-3.7-flash" +endpoints = [ + { id = "google/gemini-3.7-flash", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, +] diff --git a/models/google/gemini-3.8-flash/card.toml b/models/google/gemini-3.8-flash/card.toml index 02eb0f2..ee71b9d 100644 --- a/models/google/gemini-3.8-flash/card.toml +++ b/models/google/gemini-3.8-flash/card.toml @@ -1,5 +1,6 @@ id = "google/gemini-3.8-flash" section = "text.catalog" +vendor = "google" label = "Gemini 3.8 Flash" multimodal = true @@ -13,3 +14,11 @@ cost = { input = 1.5, output = 7.5, cache_read = 0.15 } date = "2026-09-02" basis = "model" source_url = "https://ai.google.dev/gemini-api/docs/changelog" + +[providers.vercel] +provider = "vercel" +id = "google/gemini-3.8-flash" +url = "https://vercel.com/ai-gateway/models/gemini-3.8-flash" +endpoints = [ + { id = "google/gemini-3.8-flash", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, +] diff --git a/models/google/veo-3.1-fast/card.toml b/models/google/veo-3.1-fast/card.toml index d243462..6f91f75 100644 --- a/models/google/veo-3.1-fast/card.toml +++ b/models/google/veo-3.1-fast/card.toml @@ -32,6 +32,10 @@ type = "per_second" 4k = { audio = 0.35, silent = 0.3 } [providers.fal] +endpoints = [ + { id = "fal-ai/veo3.1/fast", input = "text", source_url = "https://fal.ai/models/fal-ai/veo3.1/fast/api" }, + { id = "fal-ai/veo3.1/fast/image-to-video", input = "image", source_url = "https://fal.ai/models/fal-ai/veo3.1/fast/image-to-video/api" }, +] provider = "fal" id = "fal-ai/veo3.1/fast/image-to-video" input = "image" diff --git a/models/google/veo-3.1-lite/card.toml b/models/google/veo-3.1-lite/card.toml index c85ebb9..04e9eb9 100644 --- a/models/google/veo-3.1-lite/card.toml +++ b/models/google/veo-3.1-lite/card.toml @@ -31,6 +31,10 @@ type = "per_second" 1080p = { audio = 0.08, silent = 0.05 } [providers.fal] +endpoints = [ + { id = "fal-ai/veo3.1/lite", input = "text", source_url = "https://fal.ai/models/fal-ai/veo3.1/lite/api" }, + { id = "fal-ai/veo3.1/lite/image-to-video", input = "image", source_url = "https://fal.ai/models/fal-ai/veo3.1/lite/image-to-video/api" }, +] provider = "fal" id = "fal-ai/veo3.1/lite/image-to-video" input = "image" diff --git a/models/google/veo-3.1/card.toml b/models/google/veo-3.1/card.toml index 82ee5df..6c3b5cf 100644 --- a/models/google/veo-3.1/card.toml +++ b/models/google/veo-3.1/card.toml @@ -32,6 +32,10 @@ type = "per_second" 4k = { audio = 0.6, silent = 0.4 } [providers.fal] +endpoints = [ + { id = "fal-ai/veo3.1", input = "text", source_url = "https://fal.ai/models/fal-ai/veo3.1/api" }, + { id = "fal-ai/veo3.1/image-to-video", input = "image", source_url = "https://fal.ai/models/fal-ai/veo3.1/image-to-video/api" }, +] provider = "fal" id = "fal-ai/veo3.1/image-to-video" input = "image" diff --git a/models/openai/gpt-5.5-pro/card.toml b/models/openai/gpt-5.5-pro/card.toml index fdcba14..e43889a 100644 --- a/models/openai/gpt-5.5-pro/card.toml +++ b/models/openai/gpt-5.5-pro/card.toml @@ -1,5 +1,6 @@ id = "openai/gpt-5.5-pro" section = "text.catalog" +vendor = "openai" label = "GPT-5.5 Pro" multimodal = true @@ -13,3 +14,11 @@ cost = { input = 30, output = 180 } date = "2026-04-23" basis = "model" source_url = "https://openai.com/index/introducing-gpt-5-5/" + +[providers.vercel] +provider = "vercel" +id = "openai/gpt-5.5-pro" +url = "https://vercel.com/ai-gateway/models/gpt-5.5-pro" +endpoints = [ + { id = "openai/gpt-5.5-pro", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, +] diff --git a/models/openai/gpt-5.5/card.toml b/models/openai/gpt-5.5/card.toml index 9bc8be9..e1e100b 100644 --- a/models/openai/gpt-5.5/card.toml +++ b/models/openai/gpt-5.5/card.toml @@ -1,5 +1,6 @@ id = "openai/gpt-5.5" section = "text.catalog" +vendor = "openai" label = "GPT-5.5" multimodal = true @@ -22,3 +23,11 @@ cache_read = 0.5 input_tokens_above = 272_000 input_multiplier = 2 output_multiplier = 1.5 + +[providers.vercel] +provider = "vercel" +id = "openai/gpt-5.5" +url = "https://vercel.com/ai-gateway/models/gpt-5.5" +endpoints = [ + { id = "openai/gpt-5.5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, +] diff --git a/models/openai/gpt-5.6-luna/card.toml b/models/openai/gpt-5.6-luna/card.toml index b9e1004..bdc2c6f 100644 --- a/models/openai/gpt-5.6-luna/card.toml +++ b/models/openai/gpt-5.6-luna/card.toml @@ -1,5 +1,6 @@ id = "openai/gpt-5.6-luna" section = "text.catalog" +vendor = "openai" label = "GPT-5.6 Luna" multimodal = true @@ -23,3 +24,11 @@ cache_write = 0.25 input_tokens_above = 272_000 input_multiplier = 2 output_multiplier = 1.5 + +[providers.vercel] +provider = "vercel" +id = "openai/gpt-5.6-luna" +url = "https://vercel.com/ai-gateway/models/gpt-5.6-luna" +endpoints = [ + { id = "openai/gpt-5.6-luna", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, +] diff --git a/models/openai/gpt-5.6-sol/card.toml b/models/openai/gpt-5.6-sol/card.toml index 7f4ab50..2d0d161 100644 --- a/models/openai/gpt-5.6-sol/card.toml +++ b/models/openai/gpt-5.6-sol/card.toml @@ -1,5 +1,6 @@ id = "openai/gpt-5.6-sol" section = "text.catalog" +vendor = "openai" label = "GPT-5.6 Sol" multimodal = true @@ -23,3 +24,11 @@ cache_write = 5 input_tokens_above = 272_000 input_multiplier = 2 output_multiplier = 1.5 + +[providers.vercel] +provider = "vercel" +id = "openai/gpt-5.6-sol" +url = "https://vercel.com/ai-gateway/models/gpt-5.6-sol" +endpoints = [ + { id = "openai/gpt-5.6-sol", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, +] diff --git a/models/openai/gpt-5.6-terra/card.toml b/models/openai/gpt-5.6-terra/card.toml index 9c39f0a..b4c579c 100644 --- a/models/openai/gpt-5.6-terra/card.toml +++ b/models/openai/gpt-5.6-terra/card.toml @@ -1,5 +1,6 @@ id = "openai/gpt-5.6-terra" section = "text.catalog" +vendor = "openai" label = "GPT-5.6 Terra" multimodal = true @@ -23,3 +24,11 @@ cache_write = 2.5 input_tokens_above = 272_000 input_multiplier = 2 output_multiplier = 1.5 + +[providers.vercel] +provider = "vercel" +id = "openai/gpt-5.6-terra" +url = "https://vercel.com/ai-gateway/models/gpt-5.6-terra" +endpoints = [ + { id = "openai/gpt-5.6-terra", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, +] diff --git a/models/openai/gpt-6-astra/card.toml b/models/openai/gpt-6-astra/card.toml index bd0c380..1f96771 100644 --- a/models/openai/gpt-6-astra/card.toml +++ b/models/openai/gpt-6-astra/card.toml @@ -1,5 +1,6 @@ id = "openai/gpt-6-astra" section = "text.catalog" +vendor = "openai" label = "GPT-6 Astra" multimodal = true @@ -23,3 +24,11 @@ cache_write = 12.5 input_tokens_above = 272_000 input_multiplier = 2 output_multiplier = 1.5 + +[providers.vercel] +provider = "vercel" +id = "openai/gpt-6-astra" +url = "https://vercel.com/ai-gateway/models/gpt-6-astra" +endpoints = [ + { id = "openai/gpt-6-astra", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, +] diff --git a/models/openai/gpt-image-2.5-flare/card.toml b/models/openai/gpt-image-2.5-flare/card.toml index 8634160..78600d6 100644 --- a/models/openai/gpt-image-2.5-flare/card.toml +++ b/models/openai/gpt-image-2.5-flare/card.toml @@ -35,6 +35,10 @@ transparent_background = false references = { id = "openai/gpt-image-2.5-flare", max = 16 } [providers.fal] +endpoints = [ + { id = "openai/gpt-image-2.5/flare/edit", input = "image", source_url = "https://fal.ai/models/openai/gpt-image-2.5/flare/edit/api" }, + { id = "openai/gpt-image-2.5/flare/text-to-image", input = "text", source_url = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image/api" }, +] provider = "fal" id = "openai/gpt-image-2.5/flare/text-to-image" avg_cost_usd = 0.055 diff --git a/models/openai/gpt-image-2.5-sunburst/card.toml b/models/openai/gpt-image-2.5-sunburst/card.toml index cd40246..c189941 100644 --- a/models/openai/gpt-image-2.5-sunburst/card.toml +++ b/models/openai/gpt-image-2.5-sunburst/card.toml @@ -35,6 +35,10 @@ transparent_background = false references = { id = "openai/gpt-image-2.5-sunburst", max = 16 } [providers.fal] +endpoints = [ + { id = "openai/gpt-image-2.5/sunburst/edit", input = "image", source_url = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/edit/api" }, + { id = "openai/gpt-image-2.5/sunburst/text-to-image", input = "text", source_url = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image/api" }, +] provider = "fal" id = "openai/gpt-image-2.5/sunburst/text-to-image" avg_cost_usd = 0.055 diff --git a/models/openai/gpt-image-2/card.toml b/models/openai/gpt-image-2/card.toml index f630c80..ef42afe 100644 --- a/models/openai/gpt-image-2/card.toml +++ b/models/openai/gpt-image-2/card.toml @@ -32,8 +32,12 @@ transparent_background = false references = { id = "openai/gpt-image-2", max = 16 } [providers.fal] +endpoints = [ + { id = "openai/gpt-image-2", input = "text", source_url = "https://fal.ai/models/openai/gpt-image-2/api" }, + { id = "openai/gpt-image-2/edit", input = "image", source_url = "https://fal.ai/models/openai/gpt-image-2/edit/api" }, +] provider = "fal" -id = "fal-ai/gpt-image-2" +id = "openai/gpt-image-2" avg_cost_usd = 0.053 url = "https://fal.ai/models/openai/gpt-image-2" diff --git a/models/recraft-ai/recraft-v4.1/card.toml b/models/recraft-ai/recraft-v4.1/card.toml index b178215..929d79e 100644 --- a/models/recraft-ai/recraft-v4.1/card.toml +++ b/models/recraft-ai/recraft-v4.1/card.toml @@ -31,6 +31,9 @@ url = "https://openrouter.ai/recraft/recraft-v4.1" references = { id = "recraft/recraft-v4.1", max = 1 } [providers.fal] +endpoints = [ + { id = "fal-ai/recraft/v4.1/text-to-image", input = "text", source_url = "https://fal.ai/models/fal-ai/recraft/v4.1/text-to-image/api" }, +] provider = "fal" id = "fal-ai/recraft/v4.1/text-to-image" pricing = { type = "per_image_flat", usd = 0.035 } diff --git a/models/tripo/rig-check/operation.toml b/models/tripo/rig-check/operation.toml index 8ac2cff..c9fd827 100644 --- a/models/tripo/rig-check/operation.toml +++ b/models/tripo/rig-check/operation.toml @@ -7,8 +7,16 @@ input = { formats = ["glb"], max_bytes = 150_000_000 } rig_types = ["biped", "quadruped", "hexapod", "octopod", "avian", "serpentine", "aquatic"] url = "https://developers.tripo3d.ai/en/docs/animations-rig-check" +label = "Tripo Rig Check" +vendor = "tripo" +null_keys = ["release.date"] + [pricing] type = "per_operation_credits" credits = 0 usd_per_credit = 0.01 source_url = "https://developers.tripo3d.ai/en/pricing" + +[release] +basis = "provider_endpoint" +source_url = "https://developers.tripo3d.ai/en/docs/animations-rig-check" diff --git a/models/xai/grok-imagine-image-2.0/card.toml b/models/xai/grok-imagine-image-2.0/card.toml index 0b465af..14f9888 100644 --- a/models/xai/grok-imagine-image-2.0/card.toml +++ b/models/xai/grok-imagine-image-2.0/card.toml @@ -46,6 +46,10 @@ type = "per_image_tiered" "medium/2048x2048" = 0.08 [providers.fal] +endpoints = [ + { id = "xai/grok-imagine-image/v2.0/edit", input = "image", source_url = "https://fal.ai/models/xai/grok-imagine-image/v2.0/edit/api" }, + { id = "xai/grok-imagine-image/v2.0/text-to-image", input = "text", source_url = "https://fal.ai/models/xai/grok-imagine-image/v2.0/text-to-image/api" }, +] provider = "fal" id = "xai/grok-imagine-image/v2.0/text-to-image" avg_cost_usd = 0.06 diff --git a/models/xai/grok-imagine-video-1.5/card.toml b/models/xai/grok-imagine-video-1.5/card.toml index 529d897..2b893b9 100644 --- a/models/xai/grok-imagine-video-1.5/card.toml +++ b/models/xai/grok-imagine-video-1.5/card.toml @@ -33,6 +33,9 @@ usd_per_input_image = 0.01 1080p = { audio = 0.25 } [providers.fal] +endpoints = [ + { id = "xai/grok-imagine-video/v1.5/image-to-video", input = "image", source_url = "https://fal.ai/models/xai/grok-imagine-video/v1.5/image-to-video/api" }, +] provider = "fal" id = "xai/grok-imagine-video/v1.5/image-to-video" input = "image" diff --git a/scripts/check.py b/scripts/check.py index 6fd604c..54dc7f7 100644 --- a/scripts/check.py +++ b/scripts/check.py @@ -102,6 +102,9 @@ def invariant_errors(facts: dict[str, Any]) -> Iterator[str]: if card.get("id") != key: yield f"{where}: id {card.get('id')!r} does not match its table key" + if section == "text.catalog" and not card.get("vendor"): + yield f"{where}: text card requires a vendor lab" + release = card.get("release") if isinstance(release, dict): date = release.get("date") diff --git a/tests/test_check.py b/tests/test_check.py index 1cd8161..9e3a03c 100644 --- a/tests/test_check.py +++ b/tests/test_check.py @@ -339,3 +339,9 @@ def mutate(facts): def test_existing_binding_without_endpoints_remains_valid(): assert check.check(MODELS_JSON, SCHEMA) == [] + + +def test_text_card_requires_vendor_lab(): + def mutate(facts): + first("text.catalog", facts).pop("vendor", None) + assert any("requires a vendor lab" in e for e in mutated(mutate)) From a2a4e1a756e26d0f03aa4602daf74a806a77d9b6 Mon Sep 17 00:00:00 2001 From: Universe Date: Tue, 13 Oct 2026 05:16:05 +0900 Subject: [PATCH 2/8] Use verified discovery source for text binding URLs --- catalogue/models.json | 36 +++++++++---------- models/anthropic/claude-fable-5.1/card.toml | 2 +- models/anthropic/claude-fable-5/card.toml | 2 +- models/anthropic/claude-haiku-5.5/card.toml | 2 +- models/anthropic/claude-opus-4.8/card.toml | 2 +- models/anthropic/claude-opus-5.5/card.toml | 2 +- models/anthropic/claude-opus-5/card.toml | 2 +- models/anthropic/claude-sonnet-5.5/card.toml | 2 +- models/anthropic/claude-sonnet-5/card.toml | 2 +- .../google/gemini-3.1-pro-preview/card.toml | 2 +- models/google/gemini-3.7-flash/card.toml | 2 +- models/google/gemini-3.8-flash/card.toml | 2 +- models/openai/gpt-5.5-pro/card.toml | 2 +- models/openai/gpt-5.5/card.toml | 2 +- models/openai/gpt-5.6-luna/card.toml | 2 +- models/openai/gpt-5.6-sol/card.toml | 2 +- models/openai/gpt-5.6-terra/card.toml | 2 +- models/openai/gpt-6-astra/card.toml | 4 +-- 18 files changed, 36 insertions(+), 36 deletions(-) diff --git a/catalogue/models.json b/catalogue/models.json index dd5d7d0..786a1aa 100644 --- a/catalogue/models.json +++ b/catalogue/models.json @@ -31,7 +31,7 @@ "vercel": { "provider": "vercel", "id": "anthropic/claude-fable-5", - "url": "https://vercel.com/ai-gateway/models/claude-fable-5", + "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { "id": "anthropic/claude-fable-5", @@ -72,7 +72,7 @@ "vercel": { "provider": "vercel", "id": "anthropic/claude-fable-5.1", - "url": "https://vercel.com/ai-gateway/models/claude-fable-5.1", + "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { "id": "anthropic/claude-fable-5.1", @@ -118,7 +118,7 @@ "vercel": { "provider": "vercel", "id": "anthropic/claude-haiku-5.5", - "url": "https://vercel.com/ai-gateway/models/claude-haiku-5.5", + "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { "id": "anthropic/claude-haiku-5.5", @@ -159,7 +159,7 @@ "vercel": { "provider": "vercel", "id": "anthropic/claude-opus-4.8", - "url": "https://vercel.com/ai-gateway/models/claude-opus-4.8", + "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { "id": "anthropic/claude-opus-4.8", @@ -200,7 +200,7 @@ "vercel": { "provider": "vercel", "id": "anthropic/claude-opus-5", - "url": "https://vercel.com/ai-gateway/models/claude-opus-5", + "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { "id": "anthropic/claude-opus-5", @@ -241,7 +241,7 @@ "vercel": { "provider": "vercel", "id": "anthropic/claude-opus-5.5", - "url": "https://vercel.com/ai-gateway/models/claude-opus-5.5", + "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { "id": "anthropic/claude-opus-5.5", @@ -282,7 +282,7 @@ "vercel": { "provider": "vercel", "id": "anthropic/claude-sonnet-5", - "url": "https://vercel.com/ai-gateway/models/claude-sonnet-5", + "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { "id": "anthropic/claude-sonnet-5", @@ -323,7 +323,7 @@ "vercel": { "provider": "vercel", "id": "anthropic/claude-sonnet-5.5", - "url": "https://vercel.com/ai-gateway/models/claude-sonnet-5.5", + "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { "id": "anthropic/claude-sonnet-5.5", @@ -369,7 +369,7 @@ "vercel": { "provider": "vercel", "id": "google/gemini-3.1-pro-preview", - "url": "https://vercel.com/ai-gateway/models/gemini-3.1-pro-preview", + "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { "id": "google/gemini-3.1-pro-preview", @@ -409,7 +409,7 @@ "vercel": { "provider": "vercel", "id": "google/gemini-3.7-flash", - "url": "https://vercel.com/ai-gateway/models/gemini-3.7-flash", + "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { "id": "google/gemini-3.7-flash", @@ -449,7 +449,7 @@ "vercel": { "provider": "vercel", "id": "google/gemini-3.8-flash", - "url": "https://vercel.com/ai-gateway/models/gemini-3.8-flash", + "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { "id": "google/gemini-3.8-flash", @@ -493,7 +493,7 @@ "vercel": { "provider": "vercel", "id": "openai/gpt-5.5", - "url": "https://vercel.com/ai-gateway/models/gpt-5.5", + "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { "id": "openai/gpt-5.5", @@ -531,7 +531,7 @@ "vercel": { "provider": "vercel", "id": "openai/gpt-5.5-pro", - "url": "https://vercel.com/ai-gateway/models/gpt-5.5-pro", + "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { "id": "openai/gpt-5.5-pro", @@ -576,7 +576,7 @@ "vercel": { "provider": "vercel", "id": "openai/gpt-5.6-luna", - "url": "https://vercel.com/ai-gateway/models/gpt-5.6-luna", + "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { "id": "openai/gpt-5.6-luna", @@ -621,7 +621,7 @@ "vercel": { "provider": "vercel", "id": "openai/gpt-5.6-sol", - "url": "https://vercel.com/ai-gateway/models/gpt-5.6-sol", + "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { "id": "openai/gpt-5.6-sol", @@ -666,7 +666,7 @@ "vercel": { "provider": "vercel", "id": "openai/gpt-5.6-terra", - "url": "https://vercel.com/ai-gateway/models/gpt-5.6-terra", + "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { "id": "openai/gpt-5.6-terra", @@ -694,7 +694,7 @@ "release": { "date": "2026-09-04", "basis": "provider_endpoint", - "source_url": "https://vercel.com/ai-gateway/models/gpt-6-astra" + "source_url": "https://ai-gateway.vercel.sh/v1/models" }, "cost": { "input": 10, @@ -711,7 +711,7 @@ "vercel": { "provider": "vercel", "id": "openai/gpt-6-astra", - "url": "https://vercel.com/ai-gateway/models/gpt-6-astra", + "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { "id": "openai/gpt-6-astra", diff --git a/models/anthropic/claude-fable-5.1/card.toml b/models/anthropic/claude-fable-5.1/card.toml index d7db535..004d7b1 100644 --- a/models/anthropic/claude-fable-5.1/card.toml +++ b/models/anthropic/claude-fable-5.1/card.toml @@ -19,7 +19,7 @@ source_url = "https://platform.claude.com/docs/en/models/fable-5-1/overview" [providers.vercel] provider = "vercel" id = "anthropic/claude-fable-5.1" -url = "https://vercel.com/ai-gateway/models/claude-fable-5.1" +url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "anthropic/claude-fable-5.1", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] diff --git a/models/anthropic/claude-fable-5/card.toml b/models/anthropic/claude-fable-5/card.toml index 1fca6bd..c0fa4a8 100644 --- a/models/anthropic/claude-fable-5/card.toml +++ b/models/anthropic/claude-fable-5/card.toml @@ -19,7 +19,7 @@ source_url = "https://platform.claude.com/docs/en/release-notes/overview" [providers.vercel] provider = "vercel" id = "anthropic/claude-fable-5" -url = "https://vercel.com/ai-gateway/models/claude-fable-5" +url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "anthropic/claude-fable-5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] diff --git a/models/anthropic/claude-haiku-5.5/card.toml b/models/anthropic/claude-haiku-5.5/card.toml index 1a5ab36..f3693e8 100644 --- a/models/anthropic/claude-haiku-5.5/card.toml +++ b/models/anthropic/claude-haiku-5.5/card.toml @@ -31,7 +31,7 @@ output_multiplier = 5 [providers.vercel] provider = "vercel" id = "anthropic/claude-haiku-5.5" -url = "https://vercel.com/ai-gateway/models/claude-haiku-5.5" +url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "anthropic/claude-haiku-5.5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] diff --git a/models/anthropic/claude-opus-4.8/card.toml b/models/anthropic/claude-opus-4.8/card.toml index a5fb590..6c2226e 100644 --- a/models/anthropic/claude-opus-4.8/card.toml +++ b/models/anthropic/claude-opus-4.8/card.toml @@ -19,7 +19,7 @@ source_url = "https://platform.claude.com/docs/en/release-notes/overview" [providers.vercel] provider = "vercel" id = "anthropic/claude-opus-4.8" -url = "https://vercel.com/ai-gateway/models/claude-opus-4.8" +url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "anthropic/claude-opus-4.8", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] diff --git a/models/anthropic/claude-opus-5.5/card.toml b/models/anthropic/claude-opus-5.5/card.toml index 4257566..508c710 100644 --- a/models/anthropic/claude-opus-5.5/card.toml +++ b/models/anthropic/claude-opus-5.5/card.toml @@ -19,7 +19,7 @@ source_url = "https://platform.claude.com/docs/en/models/opus-5-5/overview" [providers.vercel] provider = "vercel" id = "anthropic/claude-opus-5.5" -url = "https://vercel.com/ai-gateway/models/claude-opus-5.5" +url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "anthropic/claude-opus-5.5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] diff --git a/models/anthropic/claude-opus-5/card.toml b/models/anthropic/claude-opus-5/card.toml index 098fcfe..6a90133 100644 --- a/models/anthropic/claude-opus-5/card.toml +++ b/models/anthropic/claude-opus-5/card.toml @@ -19,7 +19,7 @@ source_url = "https://platform.claude.com/docs/en/release-notes/overview" [providers.vercel] provider = "vercel" id = "anthropic/claude-opus-5" -url = "https://vercel.com/ai-gateway/models/claude-opus-5" +url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "anthropic/claude-opus-5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] diff --git a/models/anthropic/claude-sonnet-5.5/card.toml b/models/anthropic/claude-sonnet-5.5/card.toml index 128ecf6..96ec58d 100644 --- a/models/anthropic/claude-sonnet-5.5/card.toml +++ b/models/anthropic/claude-sonnet-5.5/card.toml @@ -19,7 +19,7 @@ source_url = "https://platform.claude.com/docs/en/models/sonnet-5-5/overview" [providers.vercel] provider = "vercel" id = "anthropic/claude-sonnet-5.5" -url = "https://vercel.com/ai-gateway/models/claude-sonnet-5.5" +url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "anthropic/claude-sonnet-5.5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] diff --git a/models/anthropic/claude-sonnet-5/card.toml b/models/anthropic/claude-sonnet-5/card.toml index 0690f64..bc5c08d 100644 --- a/models/anthropic/claude-sonnet-5/card.toml +++ b/models/anthropic/claude-sonnet-5/card.toml @@ -19,7 +19,7 @@ source_url = "https://platform.claude.com/docs/en/release-notes/overview" [providers.vercel] provider = "vercel" id = "anthropic/claude-sonnet-5" -url = "https://vercel.com/ai-gateway/models/claude-sonnet-5" +url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "anthropic/claude-sonnet-5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] diff --git a/models/google/gemini-3.1-pro-preview/card.toml b/models/google/gemini-3.1-pro-preview/card.toml index 9f21024..d68b0e1 100644 --- a/models/google/gemini-3.1-pro-preview/card.toml +++ b/models/google/gemini-3.1-pro-preview/card.toml @@ -28,7 +28,7 @@ output_multiplier = 1.5 [providers.vercel] provider = "vercel" id = "google/gemini-3.1-pro-preview" -url = "https://vercel.com/ai-gateway/models/gemini-3.1-pro-preview" +url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "google/gemini-3.1-pro-preview", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] diff --git a/models/google/gemini-3.7-flash/card.toml b/models/google/gemini-3.7-flash/card.toml index 0e2c4b5..9864665 100644 --- a/models/google/gemini-3.7-flash/card.toml +++ b/models/google/gemini-3.7-flash/card.toml @@ -18,7 +18,7 @@ source_url = "https://ai.google.dev/gemini-api/docs/changelog" [providers.vercel] provider = "vercel" id = "google/gemini-3.7-flash" -url = "https://vercel.com/ai-gateway/models/gemini-3.7-flash" +url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "google/gemini-3.7-flash", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] diff --git a/models/google/gemini-3.8-flash/card.toml b/models/google/gemini-3.8-flash/card.toml index ee71b9d..62a86d2 100644 --- a/models/google/gemini-3.8-flash/card.toml +++ b/models/google/gemini-3.8-flash/card.toml @@ -18,7 +18,7 @@ source_url = "https://ai.google.dev/gemini-api/docs/changelog" [providers.vercel] provider = "vercel" id = "google/gemini-3.8-flash" -url = "https://vercel.com/ai-gateway/models/gemini-3.8-flash" +url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "google/gemini-3.8-flash", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] diff --git a/models/openai/gpt-5.5-pro/card.toml b/models/openai/gpt-5.5-pro/card.toml index e43889a..ab91624 100644 --- a/models/openai/gpt-5.5-pro/card.toml +++ b/models/openai/gpt-5.5-pro/card.toml @@ -18,7 +18,7 @@ source_url = "https://openai.com/index/introducing-gpt-5-5/" [providers.vercel] provider = "vercel" id = "openai/gpt-5.5-pro" -url = "https://vercel.com/ai-gateway/models/gpt-5.5-pro" +url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "openai/gpt-5.5-pro", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] diff --git a/models/openai/gpt-5.5/card.toml b/models/openai/gpt-5.5/card.toml index e1e100b..5070178 100644 --- a/models/openai/gpt-5.5/card.toml +++ b/models/openai/gpt-5.5/card.toml @@ -27,7 +27,7 @@ output_multiplier = 1.5 [providers.vercel] provider = "vercel" id = "openai/gpt-5.5" -url = "https://vercel.com/ai-gateway/models/gpt-5.5" +url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "openai/gpt-5.5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] diff --git a/models/openai/gpt-5.6-luna/card.toml b/models/openai/gpt-5.6-luna/card.toml index bdc2c6f..760fc9b 100644 --- a/models/openai/gpt-5.6-luna/card.toml +++ b/models/openai/gpt-5.6-luna/card.toml @@ -28,7 +28,7 @@ output_multiplier = 1.5 [providers.vercel] provider = "vercel" id = "openai/gpt-5.6-luna" -url = "https://vercel.com/ai-gateway/models/gpt-5.6-luna" +url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "openai/gpt-5.6-luna", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] diff --git a/models/openai/gpt-5.6-sol/card.toml b/models/openai/gpt-5.6-sol/card.toml index 2d0d161..eaa4933 100644 --- a/models/openai/gpt-5.6-sol/card.toml +++ b/models/openai/gpt-5.6-sol/card.toml @@ -28,7 +28,7 @@ output_multiplier = 1.5 [providers.vercel] provider = "vercel" id = "openai/gpt-5.6-sol" -url = "https://vercel.com/ai-gateway/models/gpt-5.6-sol" +url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "openai/gpt-5.6-sol", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] diff --git a/models/openai/gpt-5.6-terra/card.toml b/models/openai/gpt-5.6-terra/card.toml index b4c579c..4205deb 100644 --- a/models/openai/gpt-5.6-terra/card.toml +++ b/models/openai/gpt-5.6-terra/card.toml @@ -28,7 +28,7 @@ output_multiplier = 1.5 [providers.vercel] provider = "vercel" id = "openai/gpt-5.6-terra" -url = "https://vercel.com/ai-gateway/models/gpt-5.6-terra" +url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "openai/gpt-5.6-terra", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] diff --git a/models/openai/gpt-6-astra/card.toml b/models/openai/gpt-6-astra/card.toml index 1f96771..6321568 100644 --- a/models/openai/gpt-6-astra/card.toml +++ b/models/openai/gpt-6-astra/card.toml @@ -12,7 +12,7 @@ output_limit = 128_000 [release] date = "2026-09-04" basis = "provider_endpoint" -source_url = "https://vercel.com/ai-gateway/models/gpt-6-astra" +source_url = "https://ai-gateway.vercel.sh/v1/models" [cost] input = 10 @@ -28,7 +28,7 @@ output_multiplier = 1.5 [providers.vercel] provider = "vercel" id = "openai/gpt-6-astra" -url = "https://vercel.com/ai-gateway/models/gpt-6-astra" +url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "openai/gpt-6-astra", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] From 31e607b7b9492ac8ec161e3d22ab3b9c37b0350d Mon Sep 17 00:00:00 2001 From: Universe Date: Tue, 13 Oct 2026 19:47:14 +0900 Subject: [PATCH 3/8] Record sourced calculators, vision rules and native provider facts --- catalogue/PROVENANCE.md | 197 +- catalogue/models.json | 5023 ++++++++++++++++- models/alibaba/wan-3.0/card.toml | 37 +- models/anthropic/claude-fable-5.1/card.toml | 26 + models/anthropic/claude-fable-5/card.toml | 26 + models/anthropic/claude-haiku-5.5/card.toml | 36 + models/anthropic/claude-opus-4.8/card.toml | 26 + models/anthropic/claude-opus-5.5/card.toml | 26 + models/anthropic/claude-opus-5/card.toml | 26 + models/anthropic/claude-sonnet-5.5/card.toml | 26 + models/anthropic/claude-sonnet-5/card.toml | 26 + models/black-forest-labs/flux-2-max/card.toml | 61 +- models/black-forest-labs/flux-2-pro/card.toml | 58 +- models/bytedance/seedance-2.0/card.toml | 81 +- models/bytedance/seedance-2.5/card.toml | 48 +- models/bytedance/seedream-5.0-lite/card.toml | 61 +- models/bytedance/seedream-5.0-pro/card.toml | 63 +- models/google/gemini-3-pro-image/card.toml | 68 +- .../gemini-3.1-flash-image-preview/card.toml | 73 +- .../google/gemini-3.1-pro-preview/card.toml | 33 + models/google/gemini-3.7-flash/card.toml | 25 + models/google/gemini-3.8-flash/card.toml | 25 + models/google/veo-3.1-fast/card.toml | 35 +- models/google/veo-3.1-lite/card.toml | 35 +- models/google/veo-3.1/card.toml | 35 +- models/microsoft/trellis-2/card.toml | 37 + models/openai/gpt-5.5-pro/card.toml | 24 + models/openai/gpt-5.5/card.toml | 36 + models/openai/gpt-5.6-luna/card.toml | 39 + models/openai/gpt-5.6-sol/card.toml | 39 + models/openai/gpt-5.6-terra/card.toml | 39 + models/openai/gpt-6-astra/card.toml | 39 + models/openai/gpt-image-2.5-flare/card.toml | 98 +- .../openai/gpt-image-2.5-sunburst/card.toml | 98 +- models/openai/gpt-image-2/card.toml | 77 +- models/recraft-ai/recraft-v4.1/card.toml | 22 +- .../hunyuan-3d/v3.1/pro/image-to-3d/card.toml | 18 + .../hunyuan-3d/v3.1/pro/text-to-3d/card.toml | 11 + models/tripo/h3.1/card.toml | 86 + models/tripo/p1/card.toml | 71 + models/tripo/p2/card.toml | 74 + models/tripo/rig-check/operation.toml | 8 + models/tripo/rig-v1.0/card.toml | 12 + models/tripo/rig-v2.5/card.toml | 19 + models/xai/grok-imagine-image-2.0/card.toml | 62 +- models/xai/grok-imagine-video-1.5/card.toml | 15 +- 46 files changed, 6798 insertions(+), 302 deletions(-) diff --git a/catalogue/PROVENANCE.md b/catalogue/PROVENANCE.md index efe1c88..ef998d8 100644 --- a/catalogue/PROVENANCE.md +++ b/catalogue/PROVENANCE.md @@ -391,9 +391,11 @@ Represented as flat at the 1MP baseline. Verified 2026-09-02. OpenRouter `supported_parameters.input_references` 0–8 (2026-09-02). As on Flux 2 Pro. -## `constraints: { min_edge: 256, max_edge: 1440 },` +## `constraints: null,` -Same envelope as Flux 2 Pro pending a vendor spec for Max. +The inherited Flux 2 Pro edge envelope was unverified for Max and is withdrawn. +See the 2026-10-13 media qualifications below for the independently sourced +fal endpoint bounds. ## `providers: {` @@ -571,8 +573,8 @@ https://vercel.com/ai-gateway/models/veo-3.1-generate-001 ## `fal: {` -fal.ai — image-to-video endpoint (capability is keyed into the id; -t2v is a separate `fal-ai/veo3.1` endpoint, not catalogued). Rate +fal.ai — image-to-video endpoint `fal-ai/veo3.1/image-to-video`; the +separate text-to-video endpoint `fal-ai/veo3.1` is also catalogued. Rate matrix is identical to the Vercel AI Gateway's: $0.40/s audio and $0.20/s silent at 720p/1080p, $0.60/$0.40 at 4K. https://fal.ai/models/fal-ai/veo3.1/image-to-video @@ -605,7 +607,7 @@ Google — Veo 3.1 Lite The budget Veo: 720p/1080p only, 4/6/8s, native audio. Rates identical on Vercel AI Gateway and fal (verified 2026-09-02). Vercel AI Gateway supports both text and image input (FAQ verified 2026-09-07); the fal binding -below requires an image. Hosted GG's narrower wire is a host concern. +requires an image. ## `"alibaba/wan-3.0": {` @@ -708,8 +710,9 @@ input rate ($0.15 / 1M) as a conservative stand-in. Text cards identify the lab named by their existing first-party release source: OpenAI, Anthropic, or Google. Their exact serving IDs are verified against [Vercel's public model discovery](https://ai-gateway.vercel.sh/v1/models), -which lists all 17 recorded text models. This records availability, not a price -or a routing preference. Existing model release dates and prices are unchanged. +which lists all 17 recorded text models. These identifiers record availability, +not a routing preference. Existing model release dates are unchanged. Standard +serving prices, bands and limits are qualified separately below. ## fal input variants (2026-10-13) @@ -727,3 +730,183 @@ is the more specific source. This correction does not change prices. identifies the operation and lab but does not establish its first public release day. It carries `basis: provider_endpoint` and `date: null`, as do the rigging endpoints; a consumer must not substitute its own integration date. + +## Media endpoint parameters and limits (2026-10-13) + +The recorded fal image, video and 3D variants now include native parameter facts +from their endpoint-specific API pages and public OpenAPI documents. Each +endpoint's `source_url` identifies that variant; a parameter with a different +source carries its own `source_url`. Names such as `image_size.width` denote +native nested fields. An `image_size` preset enum is the published string-option +list, not a complete validator for its string-or-object input. + +Model-specific `x-fal` size metadata takes precedence over generic `ImageSize` +component bounds. The generic component alone does not establish a model's +intrinsic envelope. Area and aspect bounds are recorded only where the exact +endpoint publishes them. In particular: + +- [Seedream 5.0 Lite's input schema](https://fal.ai/models/bytedance/seedream/v5/lite/text-to-image/api) + explicitly states a 2560×1440 to 4096×4096 total-area range. Its below-floor + scaling behavior is separate from that supported output range. +- Seedream edit's ten references and Grok Image edit's five references come from + their exact endpoint schema descriptions, which are more specific than the + missing JSON `maxItems` keywords. Nano Banana 2 and Pro's fourteen-reference + limits come from their respective [Nano Banana 2 edit overview](https://fal.ai/models/fal-ai/nano-banana-2/edit) + and [Nano Banana Pro edit overview](https://fal.ai/models/fal-ai/nano-banana-pro/edit). +- [Flux Pro's edit overview](https://fal.ai/models/fal-ai/flux-2-pro/edit) publishes + nine references and 9MP total input. Flux Max's corresponding reference count + is unspecified. Neither edit schema publishes the generation variant's + `x-fal` dimension extension, so those generation bounds are not copied to edit. +- Flux and Recraft do not publish a `num_images` parameter in these endpoint + schemas. Unpublished seed bounds and reference counts remain absent. A missing + fact does not establish unlimited input or an intrinsic model limit. + +### Intrinsic envelope corrections + +[BytePlus's Seedance 2.0 documentation](https://docs.byteplus.com/en/docs/modelark/seedance-2-0) +and its [video-generation tutorial](https://docs.byteplus.com/id/docs/modelark/video-generation-tutorial) +establish the 4–15-second duration range and six aspect ratios: 21:9, 16:9, 4:3, +1:1, 3:4 and 9:16. The old five-second minimum and incomplete ratio list are +corrected. The exact fal text and image variants independently agree. + +Gemini 3 Pro Image's inherited 1536-pixel edge limit is withdrawn. Its +[fal generation schema](https://fal.ai/models/fal-ai/nano-banana-pro/api) and +[edit schema](https://fal.ai/models/fal-ai/nano-banana-pro/edit/api) document +1K/2K/4K resolution choices. Those tier labels do not establish a universal +per-edge maximum: dimensions also depend on aspect ratio. No replacement +intrinsic envelope is inferred from another model's output-size table. + +Flux Max's copied Pro edge envelope is also withdrawn. The +[lab overview](https://docs.bfl.ml/flux_2/flux2_overview) says up to 4MP without +establishing an exact pixel conversion. The +[fal generation schema](https://fal.ai/models/fal-ai/flux-2-max/api) independently +publishes 256–2560 per edge, steps of 16, and 4,194,304 total pixels. These are +provider-endpoint facts, not a conversion of the lab's 4MP statement. + +### Variable fal image prices + +The existing baseline `usd`, `type` and average-cost fields are unchanged. +Additive fields describe the published variable portions of those schedules: + +- [Flux Pro](https://fal.ai/models/fal-ai/flux-2-pro/edit) bills $0.03 for the first + output megapixel and $0.015 per additional input/output megapixel, rounded up. + Its examples price 1024×1024 at $0.03 and 1920×1080 at $0.045. The first-unit + scope is `output`; no precise universal pixels-per-megapixel conversion is + inferred from those examples. +- [Flux Max](https://fal.ai/models/fal-ai/flux-2-max/edit) bills $0.07 for the first + processed megapixel and $0.03 for each additional megapixel, including inputs. + Its first-unit scope is `processed`. No rounding rule is copied from Pro. +- [Nano Banana 2](https://fal.ai/models/fal-ai/nano-banana-2) retains $0.08 per image. + Published multipliers are 0.75× for 0.5K, 1.5× for 2K and 2× for 4K. Web search + adds $0.015 and high thinking adds $0.002 when used. The + [edit page](https://fal.ai/models/fal-ai/nano-banana-2/edit) states the same terms. +- [Nano Banana Pro](https://fal.ai/models/fal-ai/nano-banana-pro) retains $0.15 per + image; 4K costs 2× and web search adds $0.015 when used. Its + [edit page](https://fal.ai/models/fal-ai/nano-banana-pro/edit) agrees. No additional + thinking fee or special 2K multiplier is inferred. + +### Native 3D operation facts + +Tripo generation, rigging and rig-check variants carry their own native API paths, +version enums and parameter facts. The sources are Tripo's separate +[P text-generation](https://developers.tripo3d.ai/en/docs/generation-text-to-model/p), +[P image-generation](https://developers.tripo3d.ai/en/docs/generation-image-to-model/p), +[P multiview](https://developers.tripo3d.ai/en/docs/generation-multiview-to-model/p), +[standard text-generation](https://developers.tripo3d.ai/en/docs/generation-text-to-model/standard), +[standard image-generation](https://developers.tripo3d.ai/en/docs/generation-image-to-model/standard), +[standard multiview](https://developers.tripo3d.ai/en/docs/generation-multiview-to-model/standard), +[rigging](https://developers.tripo3d.ai/en/docs/animations-rig) and +[rig-check](https://developers.tripo3d.ai/en/docs/animations-rig-check) pages. +Multiview is image input; its native path distinguishes the operation. Its +task-ID, four-slot legacy and named-view input forms do not justify one universal +array cardinality. H3.1's 2,000,000-face detailed bound does not replace its +1,500,000-face standard bound. No new seed limits or undocumented output-format +parameter are invented. The `fast` texture option requires the documented +`v3.5-20260815` texture version. + +The fal [Hunyuan image](https://fal.ai/models/fal-ai/hunyuan-3d/v3.1/pro/image-to-3d/api), +[Hunyuan text](https://fal.ai/models/fal-ai/hunyuan-3d/v3.1/pro/text-to-3d/api) and +[TRELLIS.2](https://fal.ai/models/fal-ai/trellis-2/api) endpoints likewise record +their native input types, enums and bounds. Hunyuan's image-dimension prose +describes the reference input; it is not an output-image envelope. TRELLIS.2's +resolution, mesh, texture, sampling, guidance and UV parameters retain their +published units and bounds. These partial parameter maps do not claim to replace +the providers' complete request schemas or cross-field validation rules. + +## Published image output calculators and examples (2026-10-13) + +The GPT Image 2 and GPT Image 2.5 cards record the calculator in +[OpenAI's image generation guide](https://developers.openai.com/api/docs/guides/image-generation), +including its [published JavaScript](https://developers.openai.com/_astro/GptImageTokenCalculator.react.DukR73TZ.js). +That source supplies the quality coefficients, area constants, ties-to-even +short-axis rounding and final upward token rounding. The examples are estimates +from that calculator, not measured usage or guaranteed whole-request prices. +They exclude text/image inputs, reasoning and partial-image output charges. +Exact output-token examples were verified with the calculator rather than inferred +by dividing a rounded USD price by the token rate. + +The GPT Image 2.5 cards also retain all six published size rows from fal's +[Flare](https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image) and +[Sunburst](https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image) +price tables. Their `1920x1080` row conflicts with the documented requirement that +both dimensions be divisible by 16: 1080 is not. That quoted USD example remains +source-backed, but has no `output_tokens` value. OpenAI's calculator UI rejects +that size; calling only its unvalidated arithmetic function is not evidence of +an admissible request. Example dimensions must therefore be checked against the +model and endpoint constraints before use. + +[fal's GPT Image 2 page](https://fal.ai/models/openai/gpt-image-2) bills text and +image tokens, so its binding now records token rates instead of treating the +rounded per-image examples as a fixed tariff. All three fal GPT Image bindings +publish the same six native token rates and say total cost rounds upward to +`$0.0001`, recorded as `rounding_usd`. A rounded example is not an exact total +request maximum. OpenAI's separately published cached-input rates apply to its +Responses image-generation tool, not direct Images API requests; recording a +provider's cache price does not promise a cache hit or cached billing on every API. + +The six fal image endpoints' option bounds come from their endpoint-specific +public OpenAPI schemas. Image 2 allows at most four outputs; Image 2.5 allows ten. +Prompt bounds are character counts, not bytes or tokens. The shared generic +`ImageSize` definition permits larger dimensions, but the model-specific size +description and OpenAI guide impose the stricter 3840px edge, pixel-area, +16px-step and aspect constraints recorded on the endpoints. No undocumented +minimum number of reference images is inferred from an array being required. + +## Vision tokenization parameters (2026-10-13) + +[OpenAI's vision guide](https://developers.openai.com/api/docs/guides/images-vision) +explicitly lists GPT-5.5, GPT-5.6 Sol/Terra/Luna and GPT-6 Astra as 32px patch +models with a 1.2 token multiplier. It also supplies detail-specific resizing +limits and the separate 30,000-patch rejection threshold. Low detail fits within +512px on each side; a 256-patch allowance can be derived from that square, but is +not recorded as an independently published patch budget. The guide does not +qualify GPT-5.5 Pro's patch formula, so that card has no invented formula. + +[Claude's vision guide](https://platform.claude.com/docs/en/build-with-claude/vision) +identifies 28px visual-token patches, a 2576px long edge and a 4784 visual-token +ceiling for Claude 4.7 and later. These are processing limits: oversized native +images may be downscaled before tokenization. + +[Google's media-resolution guide](https://ai.google.dev/gemini-api/docs/media-resolution) +labels the Gemini 3 family token counts approximate. The cards preserve that +qualification and each resolution's published budget, including the 2240-token +`ultra_high` budget. That maximum is not a fixed billable count for every image. +These parameters describe provider tokenization, not a consumer's authorization +buffers or a claim that preflight estimates equal final charges. + +## Vercel standard token pricing and capabilities (2026-10-13) + +[Vercel's public model feed](https://ai-gateway.vercel.sh/v1/models) supplies the +standard decimal USD-per-token rates, input-length pricing bands, served +context/output limits and provider-backed image-input, tools, reasoning and +structured-output facts for the 17 recorded text bindings. A band's minimum is +inclusive and maximum is exclusive; an omitted maximum is unbounded. Published +band thresholds are preserved exactly rather than normalized across models. +Provider serving limits can be narrower than the intrinsic lab limits, so both +are retained at their respective scopes. + +Standard token pricing excludes separately published fast, regional, alternate +service-tier and server-tool prices. It is not a claim that those options have +the same rate. Streaming is an API transport behavior rather than a per-model +flag in the feed, and a provider's structured-output support does not establish +every consumer's particular JSON-format compatibility. diff --git a/catalogue/models.json b/catalogue/models.json index 786a1aa..1cdc431 100644 --- a/catalogue/models.json +++ b/catalogue/models.json @@ -38,7 +38,35 @@ "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } - ] + ], + "token_pricing": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "unit": "usd_per_token", + "input": "0.00001", + "output": "0.00005", + "input_cache_read": "0.000001", + "input_cache_write": "0.0000125" + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + } + }, + "vision_tokenization": { + "source_url": "https://platform.claude.com/docs/en/build-with-claude/vision", + "patch_size_px": 28, + "maximum_tokens_per_image": 4784, + "detail_maximum_edges": { + "default": 2576 } } }, @@ -79,7 +107,35 @@ "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } - ] + ], + "token_pricing": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "unit": "usd_per_token", + "input": "0.00001", + "output": "0.00005", + "input_cache_read": "0.00000025", + "input_cache_write": "0.0000125" + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + } + }, + "vision_tokenization": { + "source_url": "https://platform.claude.com/docs/en/build-with-claude/vision", + "patch_size_px": 28, + "maximum_tokens_per_image": 4784, + "detail_maximum_edges": { + "default": 2576 } } }, @@ -125,7 +181,81 @@ "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } - ] + ], + "token_pricing": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "unit": "usd_per_token", + "input": "0.0000001", + "output": "0.0000005", + "input_cache_read": "0.00000001", + "input_cache_write": "0.000000125", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "usd_per_token": "0.0000001", + "maximum_input_tokens": 100001 + }, + { + "meter": "input", + "minimum_input_tokens": 100001, + "usd_per_token": "0.0000005" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "usd_per_token": "0.0000005", + "maximum_input_tokens": 100001 + }, + { + "meter": "output", + "minimum_input_tokens": 100001, + "usd_per_token": "0.0000025" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "usd_per_token": "0.00000001", + "maximum_input_tokens": 100001 + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 100001, + "usd_per_token": "0.00000005" + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 0, + "usd_per_token": "0.000000125", + "maximum_input_tokens": 100001 + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 100001, + "usd_per_token": "0.000000625" + } + ] + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + } + }, + "vision_tokenization": { + "source_url": "https://platform.claude.com/docs/en/build-with-claude/vision", + "patch_size_px": 28, + "maximum_tokens_per_image": 4784, + "detail_maximum_edges": { + "default": 2576 } } }, @@ -166,7 +296,35 @@ "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } - ] + ], + "token_pricing": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "unit": "usd_per_token", + "input": "0.000005", + "output": "0.000025", + "input_cache_read": "0.0000005", + "input_cache_write": "0.00000625" + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + } + }, + "vision_tokenization": { + "source_url": "https://platform.claude.com/docs/en/build-with-claude/vision", + "patch_size_px": 28, + "maximum_tokens_per_image": 4784, + "detail_maximum_edges": { + "default": 2576 } } }, @@ -207,7 +365,35 @@ "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } - ] + ], + "token_pricing": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "unit": "usd_per_token", + "input": "0.000005", + "output": "0.000025", + "input_cache_read": "0.0000005", + "input_cache_write": "0.00000625" + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + } + }, + "vision_tokenization": { + "source_url": "https://platform.claude.com/docs/en/build-with-claude/vision", + "patch_size_px": 28, + "maximum_tokens_per_image": 4784, + "detail_maximum_edges": { + "default": 2576 } } }, @@ -248,7 +434,35 @@ "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } - ] + ], + "token_pricing": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "unit": "usd_per_token", + "input": "0.000004", + "output": "0.00002", + "input_cache_read": "0.0000002", + "input_cache_write": "0.000005" + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + } + }, + "vision_tokenization": { + "source_url": "https://platform.claude.com/docs/en/build-with-claude/vision", + "patch_size_px": 28, + "maximum_tokens_per_image": 4784, + "detail_maximum_edges": { + "default": 2576 } } }, @@ -289,7 +503,35 @@ "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } - ] + ], + "token_pricing": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "unit": "usd_per_token", + "input": "0.000002", + "output": "0.00001", + "input_cache_read": "0.0000002", + "input_cache_write": "0.0000025" + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + } + }, + "vision_tokenization": { + "source_url": "https://platform.claude.com/docs/en/build-with-claude/vision", + "patch_size_px": 28, + "maximum_tokens_per_image": 4784, + "detail_maximum_edges": { + "default": 2576 } } }, @@ -330,7 +572,35 @@ "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } - ] + ], + "token_pricing": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "unit": "usd_per_token", + "input": "0.000002", + "output": "0.00001", + "input_cache_read": "0.0000001", + "input_cache_write": "0.0000025" + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + } + }, + "vision_tokenization": { + "source_url": "https://platform.claude.com/docs/en/build-with-claude/vision", + "patch_size_px": 28, + "maximum_tokens_per_image": 4784, + "detail_maximum_edges": { + "default": 2576 } } }, @@ -376,7 +646,73 @@ "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } - ] + ], + "token_pricing": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "unit": "usd_per_token", + "input": "0.000002", + "output": "0.000012", + "input_cache_read": "0.0000002", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "usd_per_token": "0.000002", + "maximum_input_tokens": 200001 + }, + { + "meter": "input", + "minimum_input_tokens": 200001, + "usd_per_token": "0.000004" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "usd_per_token": "0.000012", + "maximum_input_tokens": 200001 + }, + { + "meter": "output", + "minimum_input_tokens": 200001, + "usd_per_token": "0.000018" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "usd_per_token": "0.0000002", + "maximum_input_tokens": 200001 + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 200001, + "usd_per_token": "0.0000004" + } + ] + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 64000 + } + } + }, + "vision_tokenization": { + "source_url": "https://ai.google.dev/gemini-api/docs/media-resolution", + "maximum_tokens_per_image": 2240, + "token_counts_approximate": true, + "detail_token_budgets": { + "unspecified": 1120, + "low": 280, + "medium": 560, + "high": 1120, + "ultra_high": 2240 } } }, @@ -416,7 +752,38 @@ "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } - ] + ], + "token_pricing": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "unit": "usd_per_token", + "input": "0.00000075", + "output": "0.00000375", + "input_cache_read": "0.000000075" + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 65535 + } + } + }, + "vision_tokenization": { + "source_url": "https://ai.google.dev/gemini-api/docs/media-resolution", + "maximum_tokens_per_image": 2240, + "token_counts_approximate": true, + "detail_token_budgets": { + "unspecified": 1120, + "low": 280, + "medium": 560, + "high": 1120, + "ultra_high": 2240 } } }, @@ -456,7 +823,38 @@ "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } - ] + ], + "token_pricing": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "unit": "usd_per_token", + "input": "0.00000075", + "output": "0.00000375", + "input_cache_read": "0.000000075" + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 65535 + } + } + }, + "vision_tokenization": { + "source_url": "https://ai.google.dev/gemini-api/docs/media-resolution", + "maximum_tokens_per_image": 2240, + "token_counts_approximate": true, + "detail_token_budgets": { + "unspecified": 1120, + "low": 280, + "medium": 560, + "high": 1120, + "ultra_high": 2240 } } }, @@ -500,7 +898,79 @@ "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } - ] + ], + "token_pricing": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "unit": "usd_per_token", + "input": "0.000005", + "output": "0.00003", + "input_cache_read": "0.0000005", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "usd_per_token": "0.000005", + "maximum_input_tokens": 272000 + }, + { + "meter": "input", + "minimum_input_tokens": 272000, + "usd_per_token": "0.00001" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "usd_per_token": "0.00003", + "maximum_input_tokens": 272000 + }, + { + "meter": "output", + "minimum_input_tokens": 272000, + "usd_per_token": "0.000045" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "usd_per_token": "0.0000005", + "maximum_input_tokens": 272000 + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 272000, + "usd_per_token": "0.000001" + } + ] + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + } + }, + "vision_tokenization": { + "source_url": "https://developers.openai.com/api/docs/guides/images-vision", + "patch_size_px": 32, + "token_multiplier": 1.2, + "token_rounding": "ceil", + "maximum_patch_count": 30000, + "detail_patch_budgets": { + "high": 2500, + "original": 10000, + "auto": 10000 + }, + "detail_maximum_edges": { + "low": 512, + "high": 2048, + "original": 6000, + "auto": 6000 } } }, @@ -538,7 +1008,49 @@ "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } - ] + ], + "token_pricing": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "unit": "usd_per_token", + "input": "0.00003", + "output": "0.00018", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "usd_per_token": "0.00003", + "maximum_input_tokens": 272000 + }, + { + "meter": "input", + "minimum_input_tokens": 272000, + "usd_per_token": "0.00006" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "usd_per_token": "0.00018", + "maximum_input_tokens": 272000 + }, + { + "meter": "output", + "minimum_input_tokens": 272000, + "usd_per_token": "0.00027" + } + ] + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } } } }, @@ -583,7 +1095,89 @@ "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } - ] + ], + "token_pricing": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "unit": "usd_per_token", + "input": "0.0000002", + "output": "0.0000012", + "input_cache_read": "0.00000002", + "input_cache_write": "0.00000025", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "usd_per_token": "0.0000002", + "maximum_input_tokens": 272000 + }, + { + "meter": "input", + "minimum_input_tokens": 272000, + "usd_per_token": "0.0000004" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "usd_per_token": "0.0000012", + "maximum_input_tokens": 272000 + }, + { + "meter": "output", + "minimum_input_tokens": 272000, + "usd_per_token": "0.0000018" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "usd_per_token": "0.00000002", + "maximum_input_tokens": 272000 + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 272000, + "usd_per_token": "0.00000004" + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 0, + "usd_per_token": "0.00000025", + "maximum_input_tokens": 272000 + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 272000, + "usd_per_token": "0.0000005" + } + ] + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1050000, + "max_output_tokens": 128000 + } + } + }, + "vision_tokenization": { + "source_url": "https://developers.openai.com/api/docs/guides/images-vision", + "patch_size_px": 32, + "token_multiplier": 1.2, + "token_rounding": "ceil", + "maximum_patch_count": 30000, + "detail_patch_budgets": { + "high": 2500 + }, + "detail_maximum_edges": { + "low": 512, + "high": 2048, + "original": 65535, + "auto": 65535 } } }, @@ -628,7 +1222,89 @@ "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } - ] + ], + "token_pricing": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "unit": "usd_per_token", + "input": "0.000004", + "output": "0.00002", + "input_cache_read": "0.0000004", + "input_cache_write": "0.000005", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "usd_per_token": "0.000004", + "maximum_input_tokens": 272000 + }, + { + "meter": "input", + "minimum_input_tokens": 272000, + "usd_per_token": "0.000008" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "usd_per_token": "0.00002", + "maximum_input_tokens": 272000 + }, + { + "meter": "output", + "minimum_input_tokens": 272000, + "usd_per_token": "0.00003" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "usd_per_token": "0.0000004", + "maximum_input_tokens": 272000 + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 272000, + "usd_per_token": "0.0000008" + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 0, + "usd_per_token": "0.000005", + "maximum_input_tokens": 272000 + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 272000, + "usd_per_token": "0.00001" + } + ] + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1050000, + "max_output_tokens": 128000 + } + } + }, + "vision_tokenization": { + "source_url": "https://developers.openai.com/api/docs/guides/images-vision", + "patch_size_px": 32, + "token_multiplier": 1.2, + "token_rounding": "ceil", + "maximum_patch_count": 30000, + "detail_patch_budgets": { + "high": 2500 + }, + "detail_maximum_edges": { + "low": 512, + "high": 2048, + "original": 65535, + "auto": 65535 } } }, @@ -673,7 +1349,89 @@ "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } - ] + ], + "token_pricing": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "unit": "usd_per_token", + "input": "0.000002", + "output": "0.000012", + "input_cache_read": "0.0000002", + "input_cache_write": "0.0000025", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "usd_per_token": "0.000002", + "maximum_input_tokens": 272000 + }, + { + "meter": "input", + "minimum_input_tokens": 272000, + "usd_per_token": "0.000004" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "usd_per_token": "0.000012", + "maximum_input_tokens": 272000 + }, + { + "meter": "output", + "minimum_input_tokens": 272000, + "usd_per_token": "0.000018" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "usd_per_token": "0.0000002", + "maximum_input_tokens": 272000 + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 272000, + "usd_per_token": "0.0000004" + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 0, + "usd_per_token": "0.0000025", + "maximum_input_tokens": 272000 + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 272000, + "usd_per_token": "0.000005" + } + ] + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1050000, + "max_output_tokens": 128000 + } + } + }, + "vision_tokenization": { + "source_url": "https://developers.openai.com/api/docs/guides/images-vision", + "patch_size_px": 32, + "token_multiplier": 1.2, + "token_rounding": "ceil", + "maximum_patch_count": 30000, + "detail_patch_budgets": { + "high": 2500 + }, + "detail_maximum_edges": { + "low": 512, + "high": 2048, + "original": 65535, + "auto": 65535 } } }, @@ -718,7 +1476,89 @@ "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } - ] + ], + "token_pricing": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "unit": "usd_per_token", + "input": "0.00001", + "output": "0.00005", + "input_cache_read": "0.000001", + "input_cache_write": "0.0000125", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "usd_per_token": "0.00001", + "maximum_input_tokens": 272001 + }, + { + "meter": "input", + "minimum_input_tokens": 272001, + "usd_per_token": "0.00002" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "usd_per_token": "0.00005", + "maximum_input_tokens": 272001 + }, + { + "meter": "output", + "minimum_input_tokens": 272001, + "usd_per_token": "0.000075" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "usd_per_token": "0.000001", + "maximum_input_tokens": 272001 + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 272001, + "usd_per_token": "0.000002" + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 0, + "usd_per_token": "0.0000125", + "maximum_input_tokens": 272001 + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 272001, + "usd_per_token": "0.000025" + } + ] + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1050000, + "max_output_tokens": 128000 + } + } + }, + "vision_tokenization": { + "source_url": "https://developers.openai.com/api/docs/guides/images-vision", + "patch_size_px": 32, + "token_multiplier": 1.2, + "token_rounding": "ceil", + "maximum_patch_count": 30000, + "detail_patch_budgets": { + "high": 2500 + }, + "detail_maximum_edges": { + "low": 512, + "high": 65535, + "original": 65535, + "auto": 65535 } } } @@ -731,10 +1571,6 @@ "vendor": "black-forest-labs", "speed_label": "slow", "speed_max": "45s", - "constraints": { - "min_edge": 256, - "max_edge": 1440 - }, "pricing": { "type": "per_image_flat", "usd": 0.07 @@ -770,30 +1606,144 @@ } }, "fal": { + "provider": "fal", + "id": "fal-ai/flux-2-max", + "pricing": { + "type": "per_image_flat", + "usd": 0.07, + "included_megapixels": 1, + "included_megapixels_scope": "processed", + "usd_per_additional_megapixel": 0.03, + "input_megapixels_billed": true, + "source_url": "https://fal.ai/models/fal-ai/flux-2-max/edit" + }, + "avg_cost_usd": 0.07, + "url": "https://fal.ai/models/fal-ai/flux-2-max", "endpoints": [ { "id": "fal-ai/flux-2-max", "input": "text", - "source_url": "https://fal.ai/models/fal-ai/flux-2-max/api" + "source_url": "https://fal.ai/models/fal-ai/flux-2-max/api", + "parameters": { + "enable_safety_checker": { + "type": "boolean" + }, + "image_size": { + "enum": [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9" + ] + }, + "image_size.height": { + "type": "integer", + "maximum": 2560, + "minimum": 256, + "multiple_of": 16 + }, + "image_size.width": { + "type": "integer", + "maximum": 2560, + "minimum": 256, + "multiple_of": 16 + }, + "output_format": { + "enum": [ + "jpeg", + "png" + ], + "type": "string" + }, + "prompt": { + "type": "string" + }, + "safety_tolerance": { + "enum": [ + "1", + "2", + "3", + "4", + "5" + ], + "type": "string" + }, + "seed": { + "type": "integer" + } + }, + "image_constraints": { + "max_edge": 2560, + "min_edge": 256, + "max_pixels": 4194304, + "step": 16 + } }, { "id": "fal-ai/flux-2-max/edit", "input": "image", - "source_url": "https://fal.ai/models/fal-ai/flux-2-max/edit/api" + "source_url": "https://fal.ai/models/fal-ai/flux-2-max/edit/api", + "parameters": { + "enable_safety_checker": { + "type": "boolean" + }, + "image_size": { + "enum": [ + "auto", + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9" + ] + }, + "image_size.height": { + "type": "integer", + "maximum": 14142, + "minimum": 1 + }, + "image_size.width": { + "type": "integer", + "maximum": 14142, + "minimum": 1 + }, + "image_urls": { + "type": "array" + }, + "output_format": { + "enum": [ + "jpeg", + "png" + ], + "type": "string" + }, + "prompt": { + "type": "string" + }, + "safety_tolerance": { + "enum": [ + "1", + "2", + "3", + "4", + "5" + ], + "type": "string" + }, + "seed": { + "type": "integer" + } + } } - ], - "provider": "fal", - "id": "fal-ai/flux-2-max", - "pricing": { - "type": "per_image_flat", - "usd": 0.07 - }, - "avg_cost_usd": 0.07, - "url": "https://fal.ai/models/fal-ai/flux-2-max" + ] } }, "styles": null, - "sizes": null + "sizes": null, + "constraints": null }, "bfl/flux-2-pro": { "id": "bfl/flux-2-pro", @@ -841,26 +1791,142 @@ } }, "fal": { + "provider": "fal", + "id": "fal-ai/flux-2-pro", + "pricing": { + "type": "per_image_flat", + "usd": 0.03, + "included_megapixels": 1, + "included_megapixels_scope": "output", + "usd_per_additional_megapixel": 0.015, + "input_megapixels_billed": true, + "megapixel_rounding": "ceil", + "source_url": "https://fal.ai/models/fal-ai/flux-2-pro/edit" + }, + "avg_cost_usd": 0.03, + "url": "https://fal.ai/models/fal-ai/flux-2-pro", "endpoints": [ { "id": "fal-ai/flux-2-pro", "input": "text", - "source_url": "https://fal.ai/models/fal-ai/flux-2-pro/api" + "source_url": "https://fal.ai/models/fal-ai/flux-2-pro/api", + "parameters": { + "enable_safety_checker": { + "type": "boolean" + }, + "image_size": { + "enum": [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9" + ] + }, + "image_size.height": { + "maximum": 2560, + "type": "integer", + "minimum": 256, + "multiple_of": 16 + }, + "image_size.width": { + "maximum": 2560, + "type": "integer", + "minimum": 256, + "multiple_of": 16 + }, + "output_format": { + "enum": [ + "jpeg", + "png" + ], + "type": "string" + }, + "prompt": { + "type": "string" + }, + "safety_tolerance": { + "enum": [ + "1", + "2", + "3", + "4", + "5" + ], + "type": "string" + }, + "seed": { + "type": "integer" + } + }, + "image_constraints": { + "max_edge": 2560, + "min_edge": 256, + "max_pixels": 4194304, + "step": 16 + } }, { "id": "fal-ai/flux-2-pro/edit", "input": "image", - "source_url": "https://fal.ai/models/fal-ai/flux-2-pro/edit/api" + "source_url": "https://fal.ai/models/fal-ai/flux-2-pro/edit/api", + "parameters": { + "enable_safety_checker": { + "type": "boolean" + }, + "image_size": { + "enum": [ + "auto", + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9" + ] + }, + "image_size.height": { + "maximum": 14142, + "type": "integer", + "minimum": 1 + }, + "image_size.width": { + "maximum": 14142, + "type": "integer", + "minimum": 1 + }, + "image_urls": { + "type": "array", + "max_items": 9, + "source_url": "https://fal.ai/models/fal-ai/flux-2-pro/edit" + }, + "output_format": { + "enum": [ + "jpeg", + "png" + ], + "type": "string" + }, + "prompt": { + "type": "string" + }, + "safety_tolerance": { + "enum": [ + "1", + "2", + "3", + "4", + "5" + ], + "type": "string" + }, + "seed": { + "type": "integer" + } + } } - ], - "provider": "fal", - "id": "fal-ai/flux-2-pro", - "pricing": { - "type": "per_image_flat", - "usd": 0.03 - }, - "avg_cost_usd": 0.03, - "url": "https://fal.ai/models/fal-ai/flux-2-pro" + ] } }, "styles": null, @@ -1093,26 +2159,120 @@ } }, "fal": { + "provider": "fal", + "id": "bytedance/seedream/v5/lite/text-to-image", + "pricing": { + "type": "per_image_flat", + "usd": 0.035 + }, + "avg_cost_usd": 0.035, + "url": "https://fal.ai/models/bytedance/seedream/v5/lite/text-to-image", "endpoints": [ { "id": "bytedance/seedream/v5/lite/text-to-image", "input": "text", - "source_url": "https://fal.ai/models/bytedance/seedream/v5/lite/text-to-image/api" + "source_url": "https://fal.ai/models/bytedance/seedream/v5/lite/text-to-image/api", + "parameters": { + "enable_safety_checker": { + "type": "boolean" + }, + "image_size": { + "enum": [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto_2K", + "auto_3K", + "auto_4K" + ] + }, + "image_size.height": { + "maximum": 14142, + "type": "integer", + "minimum": 1 + }, + "image_size.width": { + "maximum": 14142, + "type": "integer", + "minimum": 1 + }, + "max_images": { + "maximum": 6, + "minimum": 1, + "type": "integer" + }, + "num_images": { + "maximum": 6, + "minimum": 1, + "type": "integer" + }, + "prompt": { + "type": "string" + } + }, + "image_constraints": { + "min_pixels": 3686400, + "max_pixels": 16777216 + } }, { "id": "fal-ai/bytedance/seedream/v5/lite/edit", "input": "image", - "source_url": "https://fal.ai/models/fal-ai/bytedance/seedream/v5/lite/edit/api" + "source_url": "https://fal.ai/models/fal-ai/bytedance/seedream/v5/lite/edit/api", + "parameters": { + "enable_safety_checker": { + "type": "boolean" + }, + "image_size": { + "enum": [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto_2K", + "auto_3K", + "auto_4K" + ] + }, + "image_size.height": { + "maximum": 14142, + "type": "integer", + "minimum": 1 + }, + "image_size.width": { + "maximum": 14142, + "type": "integer", + "minimum": 1 + }, + "image_urls": { + "type": "array", + "max_items": 10 + }, + "max_images": { + "maximum": 6, + "minimum": 1, + "type": "integer" + }, + "num_images": { + "maximum": 6, + "minimum": 1, + "type": "integer" + }, + "prompt": { + "type": "string" + } + }, + "image_constraints": { + "min_pixels": 3686400, + "max_pixels": 16777216 + } } - ], - "provider": "fal", - "id": "bytedance/seedream/v5/lite/text-to-image", - "pricing": { - "type": "per_image_flat", - "usd": 0.035 - }, - "avg_cost_usd": 0.035, - "url": "https://fal.ai/models/bytedance/seedream/v5/lite/text-to-image" + ] } }, "styles": null, @@ -1160,26 +2320,144 @@ } }, "fal": { + "provider": "fal", + "id": "bytedance/seedream/v5/pro/text-to-image", + "pricing": { + "type": "per_image_flat", + "usd": 0.0675 + }, + "avg_cost_usd": 0.0675, + "url": "https://fal.ai/models/bytedance/seedream/v5/pro/text-to-image", "endpoints": [ { "id": "bytedance/seedream/v5/pro/edit", "input": "image", - "source_url": "https://fal.ai/models/bytedance/seedream/v5/pro/edit/api" + "source_url": "https://fal.ai/models/bytedance/seedream/v5/pro/edit/api", + "parameters": { + "enable_safety_checker": { + "type": "boolean" + }, + "enhance_prompt_mode": { + "enum": [ + "standard", + "fast" + ], + "type": "string" + }, + "image_size": { + "enum": [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto_1K", + "auto_2K" + ] + }, + "image_size.height": { + "maximum": 14142, + "type": "integer", + "minimum": 1 + }, + "image_size.width": { + "maximum": 14142, + "type": "integer", + "minimum": 1 + }, + "image_urls": { + "type": "array", + "max_items": 10 + }, + "num_images": { + "maximum": 6, + "type": "integer", + "minimum": 1 + }, + "output_format": { + "enum": [ + "jpeg", + "png" + ], + "type": "string" + }, + "prompt": { + "type": "string" + } + }, + "image_constraints": { + "max_pixels": 4194304, + "min_pixels": 1048576, + "aspect_ratio": { + "min": 0.0625, + "max": 16 + } + } }, { "id": "bytedance/seedream/v5/pro/text-to-image", "input": "text", - "source_url": "https://fal.ai/models/bytedance/seedream/v5/pro/text-to-image/api" + "source_url": "https://fal.ai/models/bytedance/seedream/v5/pro/text-to-image/api", + "parameters": { + "enable_safety_checker": { + "type": "boolean" + }, + "enhance_prompt_mode": { + "enum": [ + "standard", + "fast" + ], + "type": "string" + }, + "image_size": { + "enum": [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto_1K", + "auto_2K" + ] + }, + "image_size.height": { + "maximum": 14142, + "type": "integer", + "minimum": 1 + }, + "image_size.width": { + "maximum": 14142, + "type": "integer", + "minimum": 1 + }, + "num_images": { + "maximum": 6, + "type": "integer", + "minimum": 1 + }, + "output_format": { + "enum": [ + "jpeg", + "png" + ], + "type": "string" + }, + "prompt": { + "type": "string" + } + }, + "image_constraints": { + "max_pixels": 4194304, + "min_pixels": 1048576, + "aspect_ratio": { + "min": 0.0625, + "max": 16 + } + } } - ], - "provider": "fal", - "id": "bytedance/seedream/v5/pro/text-to-image", - "pricing": { - "type": "per_image_flat", - "usd": 0.0675 - }, - "avg_cost_usd": 0.0675, - "url": "https://fal.ai/models/bytedance/seedream/v5/pro/text-to-image" + ] } }, "constraints": { @@ -1199,9 +2477,6 @@ "vendor": "google", "speed_label": "medium", "speed_max": "30s", - "constraints": { - "max_edge": 1536 - }, "pricing": { "type": "per_token", "input": 2, @@ -1240,30 +2515,177 @@ } }, "fal": { + "provider": "fal", + "id": "fal-ai/nano-banana-pro", + "pricing": { + "type": "per_image_flat", + "usd": 0.15, + "resolution_multipliers": { + "4K": 2 + }, + "web_search_usd": 0.015, + "source_url": "https://fal.ai/models/fal-ai/nano-banana-pro" + }, + "avg_cost_usd": 0.15, + "url": "https://fal.ai/models/fal-ai/nano-banana-pro", "endpoints": [ { "id": "fal-ai/nano-banana-pro", "input": "text", - "source_url": "https://fal.ai/models/fal-ai/nano-banana-pro/api" + "source_url": "https://fal.ai/models/fal-ai/nano-banana-pro/api", + "parameters": { + "aspect_ratio": { + "type": "string", + "enum": [ + "auto", + "21:9", + "16:9", + "3:2", + "4:3", + "5:4", + "1:1", + "4:5", + "3:4", + "2:3", + "9:16" + ] + }, + "enable_web_search": { + "type": "boolean" + }, + "limit_generations": { + "type": "boolean" + }, + "num_images": { + "minimum": 1, + "maximum": 4, + "type": "integer" + }, + "output_format": { + "type": "string", + "enum": [ + "jpeg", + "png", + "webp" + ] + }, + "prompt": { + "max_length": 50000, + "type": "string", + "min_length": 3 + }, + "resolution": { + "type": "string", + "enum": [ + "1K", + "2K", + "4K" + ] + }, + "safety_tolerance": { + "type": "string", + "enum": [ + "1", + "2", + "3", + "4", + "5", + "6" + ] + }, + "seed": { + "type": "integer" + }, + "system_prompt": { + "max_length": 50000, + "type": "string" + } + } }, { "id": "fal-ai/nano-banana-pro/edit", "input": "image", - "source_url": "https://fal.ai/models/fal-ai/nano-banana-pro/edit/api" + "source_url": "https://fal.ai/models/fal-ai/nano-banana-pro/edit/api", + "parameters": { + "aspect_ratio": { + "type": "string", + "enum": [ + "auto", + "21:9", + "16:9", + "3:2", + "4:3", + "5:4", + "1:1", + "4:5", + "3:4", + "2:3", + "9:16" + ] + }, + "enable_web_search": { + "type": "boolean" + }, + "image_urls": { + "type": "array", + "max_items": 14, + "source_url": "https://fal.ai/models/fal-ai/nano-banana-pro/edit" + }, + "limit_generations": { + "type": "boolean" + }, + "num_images": { + "minimum": 1, + "maximum": 4, + "type": "integer" + }, + "output_format": { + "type": "string", + "enum": [ + "jpeg", + "png", + "webp" + ] + }, + "prompt": { + "max_length": 50000, + "type": "string", + "min_length": 3 + }, + "resolution": { + "type": "string", + "enum": [ + "1K", + "2K", + "4K" + ] + }, + "safety_tolerance": { + "type": "string", + "enum": [ + "1", + "2", + "3", + "4", + "5", + "6" + ] + }, + "seed": { + "type": "integer" + }, + "system_prompt": { + "max_length": 50000, + "type": "string" + } + } } - ], - "provider": "fal", - "id": "fal-ai/nano-banana-pro", - "pricing": { - "type": "per_image_flat", - "usd": 0.15 - }, - "avg_cost_usd": 0.15, - "url": "https://fal.ai/models/fal-ai/nano-banana-pro" + ] } }, "styles": null, - "sizes": null + "sizes": null, + "constraints": null }, "google/gemini-3.1-flash-image-preview": { "id": "google/gemini-3.1-flash-image-preview", @@ -1313,26 +2735,185 @@ } }, "fal": { + "provider": "fal", + "id": "fal-ai/nano-banana-2", + "pricing": { + "type": "per_image_flat", + "usd": 0.08, + "resolution_multipliers": { + "0.5K": 0.75, + "2K": 1.5, + "4K": 2 + }, + "web_search_usd": 0.015, + "high_thinking_usd": 0.002, + "source_url": "https://fal.ai/models/fal-ai/nano-banana-2" + }, + "avg_cost_usd": 0.08, + "url": "https://fal.ai/models/fal-ai/nano-banana-2", "endpoints": [ { "id": "fal-ai/nano-banana-2", "input": "text", - "source_url": "https://fal.ai/models/fal-ai/nano-banana-2/api" + "source_url": "https://fal.ai/models/fal-ai/nano-banana-2/api", + "parameters": { + "aspect_ratio": { + "enum": [ + "auto", + "21:9", + "16:9", + "3:2", + "4:3", + "5:4", + "1:1", + "4:5", + "3:4", + "2:3", + "9:16", + "4:1", + "1:4", + "8:1", + "1:8" + ], + "type": "string" + }, + "enable_web_search": { + "type": "boolean" + }, + "limit_generations": { + "type": "boolean" + }, + "num_images": { + "minimum": 1, + "maximum": 4, + "type": "integer" + }, + "output_format": { + "enum": [ + "jpeg", + "png", + "webp" + ], + "type": "string" + }, + "prompt": { + "min_length": 3, + "type": "string", + "max_length": 50000 + }, + "resolution": { + "enum": [ + "0.5K", + "1K", + "2K", + "4K" + ], + "type": "string" + }, + "safety_tolerance": { + "enum": [ + "1", + "2", + "3", + "4", + "5", + "6" + ], + "type": "string" + }, + "seed": { + "type": "integer" + }, + "system_prompt": { + "type": "string", + "max_length": 50000 + } + } }, { "id": "fal-ai/nano-banana-2/edit", "input": "image", - "source_url": "https://fal.ai/models/fal-ai/nano-banana-2/edit/api" + "source_url": "https://fal.ai/models/fal-ai/nano-banana-2/edit/api", + "parameters": { + "aspect_ratio": { + "enum": [ + "auto", + "21:9", + "16:9", + "3:2", + "4:3", + "5:4", + "1:1", + "4:5", + "3:4", + "2:3", + "9:16", + "4:1", + "1:4", + "8:1", + "1:8" + ], + "type": "string" + }, + "enable_web_search": { + "type": "boolean" + }, + "image_urls": { + "type": "array", + "max_items": 14, + "source_url": "https://fal.ai/models/fal-ai/nano-banana-2/edit" + }, + "limit_generations": { + "type": "boolean" + }, + "num_images": { + "minimum": 1, + "maximum": 4, + "type": "integer" + }, + "output_format": { + "enum": [ + "jpeg", + "png", + "webp" + ], + "type": "string" + }, + "prompt": { + "min_length": 3, + "type": "string", + "max_length": 50000 + }, + "resolution": { + "enum": [ + "0.5K", + "1K", + "2K", + "4K" + ], + "type": "string" + }, + "safety_tolerance": { + "enum": [ + "1", + "2", + "3", + "4", + "5", + "6" + ], + "type": "string" + }, + "seed": { + "type": "integer" + }, + "system_prompt": { + "type": "string", + "max_length": 50000 + } + } } - ], - "provider": "fal", - "id": "fal-ai/nano-banana-2", - "pricing": { - "type": "per_image_flat", - "usd": 0.08 - }, - "avg_cost_usd": 0.08, - "url": "https://fal.ai/models/fal-ai/nano-banana-2" + ] } }, "styles": null, @@ -1623,12 +3204,154 @@ { "id": "openai/gpt-image-2", "input": "text", - "source_url": "https://fal.ai/models/openai/gpt-image-2/api" + "source_url": "https://fal.ai/models/openai/gpt-image-2/api", + "parameters": { + "prompt": { + "type": "string", + "min_length": 2, + "max_length": 32000 + }, + "num_images": { + "type": "integer", + "minimum": 1, + "maximum": 4 + }, + "quality": { + "type": "string", + "enum": [ + "auto", + "low", + "medium", + "high" + ] + }, + "background": { + "type": "string", + "enum": [ + "auto", + "transparent", + "opaque" + ] + }, + "output_format": { + "type": "string", + "enum": [ + "jpeg", + "png", + "webp" + ] + }, + "image_size": { + "enum": [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto" + ] + }, + "image_size.width": { + "type": "integer", + "minimum": 1, + "maximum": 3840, + "multiple_of": 16 + }, + "image_size.height": { + "type": "integer", + "minimum": 1, + "maximum": 3840, + "multiple_of": 16 + } + }, + "image_constraints": { + "min_pixels": 655360, + "max_pixels": 8294400, + "step": 16, + "max_edge": 3840, + "aspect_ratio": { + "max": 3 + } + } }, { "id": "openai/gpt-image-2/edit", "input": "image", - "source_url": "https://fal.ai/models/openai/gpt-image-2/edit/api" + "source_url": "https://fal.ai/models/openai/gpt-image-2/edit/api", + "parameters": { + "prompt": { + "type": "string", + "min_length": 2, + "max_length": 32000 + }, + "num_images": { + "type": "integer", + "minimum": 1, + "maximum": 4 + }, + "quality": { + "type": "string", + "enum": [ + "auto", + "low", + "medium", + "high" + ] + }, + "background": { + "type": "string", + "enum": [ + "auto", + "transparent", + "opaque" + ] + }, + "output_format": { + "type": "string", + "enum": [ + "jpeg", + "png", + "webp" + ] + }, + "image_urls": { + "type": "array", + "max_items": 16 + }, + "image_size": { + "enum": [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto" + ] + }, + "image_size.width": { + "type": "integer", + "minimum": 1, + "maximum": 3840, + "multiple_of": 16 + }, + "image_size.height": { + "type": "integer", + "minimum": 1, + "maximum": 3840, + "multiple_of": 16 + } + }, + "image_constraints": { + "min_pixels": 655360, + "max_pixels": 8294400, + "step": 16, + "max_edge": 3840, + "aspect_ratio": { + "max": 3 + } + } } ], "provider": "fal", @@ -1636,12 +3359,15 @@ "avg_cost_usd": 0.053, "url": "https://fal.ai/models/openai/gpt-image-2", "pricing": { - "type": "per_image_tiered", - "tiers": { - "low/1024x1024": 0.006, - "medium/1024x1024": 0.053, - "high/1024x1024": 0.211 - } + "source_url": "https://fal.ai/models/openai/gpt-image-2", + "rounding_usd": 0.0001, + "type": "per_token", + "input": 5, + "cached_input": 1.25, + "image_input": 8, + "cached_image_input": 2, + "text_output": 10, + "output": 30 } } }, @@ -1675,6 +3401,102 @@ "output": 30 } }, + "output_token_calculator": { + "source_url": "https://developers.openai.com/api/docs/guides/image-generation", + "source_js_url": "https://developers.openai.com/_astro/GptImageTokenCalculator.react.DukR73TZ.js", + "area_offset": 2000000, + "area_divisor": 4000000, + "short_axis_rounding": "nearest_ties_even", + "token_rounding": "ceil", + "quality_axes": { + "low": 16, + "medium": 48, + "high": 96 + }, + "examples": [ + { + "width": 1024, + "height": 1024, + "quality": "low", + "output_tokens": 196, + "usd": 0.00588, + "usd_precision": 5, + "source_url": "https://developers.openai.com/api/docs/guides/image-generation" + }, + { + "width": 1024, + "height": 1536, + "quality": "low", + "output_tokens": 158, + "usd": 0.00474, + "usd_precision": 5, + "source_url": "https://developers.openai.com/api/docs/guides/image-generation" + }, + { + "width": 1536, + "height": 1024, + "quality": "low", + "output_tokens": 158, + "usd": 0.00474, + "usd_precision": 5, + "source_url": "https://developers.openai.com/api/docs/guides/image-generation" + }, + { + "width": 1024, + "height": 1024, + "quality": "medium", + "output_tokens": 1756, + "usd": 0.05268, + "usd_precision": 5, + "source_url": "https://developers.openai.com/api/docs/guides/image-generation" + }, + { + "width": 1024, + "height": 1536, + "quality": "medium", + "output_tokens": 1372, + "usd": 0.04116, + "usd_precision": 5, + "source_url": "https://developers.openai.com/api/docs/guides/image-generation" + }, + { + "width": 1536, + "height": 1024, + "quality": "medium", + "output_tokens": 1372, + "usd": 0.04116, + "usd_precision": 5, + "source_url": "https://developers.openai.com/api/docs/guides/image-generation" + }, + { + "width": 1024, + "height": 1024, + "quality": "high", + "output_tokens": 7024, + "usd": 0.21072, + "usd_precision": 5, + "source_url": "https://developers.openai.com/api/docs/guides/image-generation" + }, + { + "width": 1024, + "height": 1536, + "quality": "high", + "output_tokens": 5488, + "usd": 0.16464, + "usd_precision": 5, + "source_url": "https://developers.openai.com/api/docs/guides/image-generation" + }, + { + "width": 1536, + "height": 1024, + "quality": "high", + "output_tokens": 5488, + "usd": 0.16464, + "usd_precision": 5, + "source_url": "https://developers.openai.com/api/docs/guides/image-generation" + } + ] + }, "styles": null }, "openai/gpt-image-2.5-flare": { @@ -1760,12 +3582,168 @@ { "id": "openai/gpt-image-2.5/flare/edit", "input": "image", - "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/edit/api" + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/edit/api", + "parameters": { + "prompt": { + "type": "string", + "min_length": 1, + "max_length": 32000 + }, + "num_images": { + "type": "integer", + "minimum": 1, + "maximum": 10 + }, + "quality": { + "type": "string", + "enum": [ + "auto", + "low", + "medium", + "high", + "xhigh", + "max" + ] + }, + "background": { + "type": "string", + "enum": [ + "auto", + "transparent", + "opaque" + ] + }, + "output_format": { + "type": "string", + "enum": [ + "jpeg", + "png", + "webp" + ] + }, + "image_urls": { + "type": "array", + "max_items": 16 + }, + "output_compression": { + "type": "integer", + "minimum": 0, + "maximum": 100 + }, + "image_size": { + "enum": [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto" + ] + }, + "image_size.width": { + "type": "integer", + "minimum": 1, + "maximum": 3840, + "multiple_of": 16 + }, + "image_size.height": { + "type": "integer", + "minimum": 1, + "maximum": 3840, + "multiple_of": 16 + } + }, + "image_constraints": { + "min_pixels": 655360, + "max_pixels": 8294400, + "step": 16, + "max_edge": 3840, + "aspect_ratio": { + "max": 3 + } + } }, { "id": "openai/gpt-image-2.5/flare/text-to-image", "input": "text", - "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image/api" + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image/api", + "parameters": { + "prompt": { + "type": "string", + "min_length": 1, + "max_length": 32000 + }, + "num_images": { + "type": "integer", + "minimum": 1, + "maximum": 10 + }, + "quality": { + "type": "string", + "enum": [ + "auto", + "low", + "medium", + "high", + "xhigh", + "max" + ] + }, + "background": { + "type": "string", + "enum": [ + "auto", + "transparent", + "opaque" + ] + }, + "output_format": { + "type": "string", + "enum": [ + "jpeg", + "png", + "webp" + ] + }, + "output_compression": { + "type": "integer", + "minimum": 0, + "maximum": 100 + }, + "image_size": { + "enum": [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto" + ] + }, + "image_size.width": { + "type": "integer", + "minimum": 1, + "maximum": 3840, + "multiple_of": 16 + }, + "image_size.height": { + "type": "integer", + "minimum": 1, + "maximum": 3840, + "multiple_of": 16 + } + }, + "image_constraints": { + "min_pixels": 655360, + "max_pixels": 8294400, + "step": 16, + "max_edge": 3840, + "aspect_ratio": { + "max": 3 + } + } } ], "provider": "fal", @@ -1777,6 +3755,8 @@ "max": 16 }, "pricing": { + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image", + "rounding_usd": 0.0001, "type": "per_token", "input": 5, "cached_input": 1.25, @@ -1796,6 +3776,333 @@ "max": 3 } }, + "output_token_calculator": { + "source_url": "https://developers.openai.com/api/docs/guides/image-generation", + "source_js_url": "https://developers.openai.com/_astro/GptImageTokenCalculator.react.DukR73TZ.js", + "area_offset": 2000000, + "area_divisor": 4000000, + "short_axis_rounding": "nearest_ties_even", + "token_rounding": "ceil", + "quality_axes": { + "low": 16, + "medium": 24, + "high": 48, + "xhigh": 64, + "max": 96 + }, + "examples": [ + { + "width": 1024, + "height": 768, + "quality": "low", + "output_tokens": 134, + "usd": 0.00402, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 1024, + "height": 1024, + "quality": "low", + "output_tokens": 196, + "usd": 0.00588, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 1024, + "height": 1536, + "quality": "low", + "output_tokens": 158, + "usd": 0.00474, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 1536, + "height": 1024, + "quality": "low", + "output_tokens": 158, + "usd": 0.00474, + "usd_precision": 5, + "source_url": "https://developers.openai.com/api/docs/guides/image-generation" + }, + { + "width": 1920, + "height": 1080, + "quality": "low", + "usd": 0.00441, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 2560, + "height": 1440, + "quality": "low", + "output_tokens": 205, + "usd": 0.00615, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 3840, + "height": 2160, + "quality": "low", + "output_tokens": 371, + "usd": 0.01113, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 1024, + "height": 768, + "quality": "medium", + "output_tokens": 301, + "usd": 0.00903, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 1024, + "height": 1024, + "quality": "medium", + "output_tokens": 439, + "usd": 0.01317, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 1024, + "height": 1536, + "quality": "medium", + "output_tokens": 343, + "usd": 0.01029, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 1536, + "height": 1024, + "quality": "medium", + "output_tokens": 343, + "usd": 0.01029, + "usd_precision": 5, + "source_url": "https://developers.openai.com/api/docs/guides/image-generation" + }, + { + "width": 1920, + "height": 1080, + "quality": "medium", + "usd": 0.01029, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 2560, + "height": 1440, + "quality": "medium", + "output_tokens": 478, + "usd": 0.01434, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 3840, + "height": 2160, + "quality": "medium", + "output_tokens": 865, + "usd": 0.02595, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 1024, + "height": 768, + "quality": "high", + "output_tokens": 1204, + "usd": 0.03612, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 1024, + "height": 1024, + "quality": "high", + "output_tokens": 1756, + "usd": 0.05268, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 1024, + "height": 1536, + "quality": "high", + "output_tokens": 1372, + "usd": 0.04116, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 1536, + "height": 1024, + "quality": "high", + "output_tokens": 1372, + "usd": 0.04116, + "usd_precision": 5, + "source_url": "https://developers.openai.com/api/docs/guides/image-generation" + }, + { + "width": 1920, + "height": 1080, + "quality": "high", + "usd": 0.0396, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 2560, + "height": 1440, + "quality": "high", + "output_tokens": 1843, + "usd": 0.05529, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 3840, + "height": 2160, + "quality": "high", + "output_tokens": 3336, + "usd": 0.10008, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 1024, + "height": 768, + "quality": "xhigh", + "output_tokens": 2140, + "usd": 0.0642, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 1024, + "height": 1024, + "quality": "xhigh", + "output_tokens": 3122, + "usd": 0.09366, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 1024, + "height": 1536, + "quality": "xhigh", + "output_tokens": 2459, + "usd": 0.07377, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 1536, + "height": 1024, + "quality": "xhigh", + "output_tokens": 2459, + "usd": 0.07377, + "usd_precision": 5, + "source_url": "https://developers.openai.com/api/docs/guides/image-generation" + }, + { + "width": 1920, + "height": 1080, + "quality": "xhigh", + "usd": 0.07041, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 2560, + "height": 1440, + "quality": "xhigh", + "output_tokens": 3276, + "usd": 0.09828, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 3840, + "height": 2160, + "quality": "xhigh", + "output_tokens": 5930, + "usd": 0.1779, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 1024, + "height": 768, + "quality": "max", + "output_tokens": 4815, + "usd": 0.14445, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 1024, + "height": 1024, + "quality": "max", + "output_tokens": 7024, + "usd": 0.21072, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 1024, + "height": 1536, + "quality": "max", + "output_tokens": 5488, + "usd": 0.16464, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 1536, + "height": 1024, + "quality": "max", + "output_tokens": 5488, + "usd": 0.16464, + "usd_precision": 5, + "source_url": "https://developers.openai.com/api/docs/guides/image-generation" + }, + { + "width": 1920, + "height": 1080, + "quality": "max", + "usd": 0.1584, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 2560, + "height": 1440, + "quality": "max", + "output_tokens": 7370, + "usd": 0.2211, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + { + "width": 3840, + "height": 2160, + "quality": "max", + "output_tokens": 13342, + "usd": 0.40026, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + } + ] + }, "styles": null }, "openai/gpt-image-2.5-sunburst": { @@ -1881,12 +4188,168 @@ { "id": "openai/gpt-image-2.5/sunburst/edit", "input": "image", - "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/edit/api" + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/edit/api", + "parameters": { + "prompt": { + "type": "string", + "min_length": 1, + "max_length": 32000 + }, + "num_images": { + "type": "integer", + "minimum": 1, + "maximum": 10 + }, + "quality": { + "type": "string", + "enum": [ + "auto", + "low", + "medium", + "high", + "xhigh", + "max" + ] + }, + "background": { + "type": "string", + "enum": [ + "auto", + "transparent", + "opaque" + ] + }, + "output_format": { + "type": "string", + "enum": [ + "jpeg", + "png", + "webp" + ] + }, + "image_urls": { + "type": "array", + "max_items": 16 + }, + "output_compression": { + "type": "integer", + "minimum": 0, + "maximum": 100 + }, + "image_size": { + "enum": [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto" + ] + }, + "image_size.width": { + "type": "integer", + "minimum": 1, + "maximum": 3840, + "multiple_of": 16 + }, + "image_size.height": { + "type": "integer", + "minimum": 1, + "maximum": 3840, + "multiple_of": 16 + } + }, + "image_constraints": { + "min_pixels": 655360, + "max_pixels": 8294400, + "step": 16, + "max_edge": 3840, + "aspect_ratio": { + "max": 3 + } + } }, { "id": "openai/gpt-image-2.5/sunburst/text-to-image", "input": "text", - "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image/api" + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image/api", + "parameters": { + "prompt": { + "type": "string", + "min_length": 1, + "max_length": 32000 + }, + "num_images": { + "type": "integer", + "minimum": 1, + "maximum": 10 + }, + "quality": { + "type": "string", + "enum": [ + "auto", + "low", + "medium", + "high", + "xhigh", + "max" + ] + }, + "background": { + "type": "string", + "enum": [ + "auto", + "transparent", + "opaque" + ] + }, + "output_format": { + "type": "string", + "enum": [ + "jpeg", + "png", + "webp" + ] + }, + "output_compression": { + "type": "integer", + "minimum": 0, + "maximum": 100 + }, + "image_size": { + "enum": [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto" + ] + }, + "image_size.width": { + "type": "integer", + "minimum": 1, + "maximum": 3840, + "multiple_of": 16 + }, + "image_size.height": { + "type": "integer", + "minimum": 1, + "maximum": 3840, + "multiple_of": 16 + } + }, + "image_constraints": { + "min_pixels": 655360, + "max_pixels": 8294400, + "step": 16, + "max_edge": 3840, + "aspect_ratio": { + "max": 3 + } + } } ], "provider": "fal", @@ -1898,6 +4361,8 @@ "max": 16 }, "pricing": { + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image", + "rounding_usd": 0.0001, "type": "per_token", "input": 5, "cached_input": 1.25, @@ -1917,6 +4382,333 @@ "max": 3 } }, + "output_token_calculator": { + "source_url": "https://developers.openai.com/api/docs/guides/image-generation", + "source_js_url": "https://developers.openai.com/_astro/GptImageTokenCalculator.react.DukR73TZ.js", + "area_offset": 2000000, + "area_divisor": 4000000, + "short_axis_rounding": "nearest_ties_even", + "token_rounding": "ceil", + "quality_axes": { + "low": 16, + "medium": 24, + "high": 48, + "xhigh": 64, + "max": 96 + }, + "examples": [ + { + "width": 1024, + "height": 768, + "quality": "low", + "output_tokens": 134, + "usd": 0.00402, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 1024, + "height": 1024, + "quality": "low", + "output_tokens": 196, + "usd": 0.00588, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 1024, + "height": 1536, + "quality": "low", + "output_tokens": 158, + "usd": 0.00474, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 1536, + "height": 1024, + "quality": "low", + "output_tokens": 158, + "usd": 0.00474, + "usd_precision": 5, + "source_url": "https://developers.openai.com/api/docs/guides/image-generation" + }, + { + "width": 1920, + "height": 1080, + "quality": "low", + "usd": 0.00441, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 2560, + "height": 1440, + "quality": "low", + "output_tokens": 205, + "usd": 0.00615, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 3840, + "height": 2160, + "quality": "low", + "output_tokens": 371, + "usd": 0.01113, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 1024, + "height": 768, + "quality": "medium", + "output_tokens": 301, + "usd": 0.00903, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 1024, + "height": 1024, + "quality": "medium", + "output_tokens": 439, + "usd": 0.01317, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 1024, + "height": 1536, + "quality": "medium", + "output_tokens": 343, + "usd": 0.01029, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 1536, + "height": 1024, + "quality": "medium", + "output_tokens": 343, + "usd": 0.01029, + "usd_precision": 5, + "source_url": "https://developers.openai.com/api/docs/guides/image-generation" + }, + { + "width": 1920, + "height": 1080, + "quality": "medium", + "usd": 0.01029, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 2560, + "height": 1440, + "quality": "medium", + "output_tokens": 478, + "usd": 0.01434, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 3840, + "height": 2160, + "quality": "medium", + "output_tokens": 865, + "usd": 0.02595, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 1024, + "height": 768, + "quality": "high", + "output_tokens": 1204, + "usd": 0.03612, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 1024, + "height": 1024, + "quality": "high", + "output_tokens": 1756, + "usd": 0.05268, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 1024, + "height": 1536, + "quality": "high", + "output_tokens": 1372, + "usd": 0.04116, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 1536, + "height": 1024, + "quality": "high", + "output_tokens": 1372, + "usd": 0.04116, + "usd_precision": 5, + "source_url": "https://developers.openai.com/api/docs/guides/image-generation" + }, + { + "width": 1920, + "height": 1080, + "quality": "high", + "usd": 0.0396, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 2560, + "height": 1440, + "quality": "high", + "output_tokens": 1843, + "usd": 0.05529, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 3840, + "height": 2160, + "quality": "high", + "output_tokens": 3336, + "usd": 0.10008, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 1024, + "height": 768, + "quality": "xhigh", + "output_tokens": 2140, + "usd": 0.0642, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 1024, + "height": 1024, + "quality": "xhigh", + "output_tokens": 3122, + "usd": 0.09366, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 1024, + "height": 1536, + "quality": "xhigh", + "output_tokens": 2459, + "usd": 0.07377, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 1536, + "height": 1024, + "quality": "xhigh", + "output_tokens": 2459, + "usd": 0.07377, + "usd_precision": 5, + "source_url": "https://developers.openai.com/api/docs/guides/image-generation" + }, + { + "width": 1920, + "height": 1080, + "quality": "xhigh", + "usd": 0.07041, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 2560, + "height": 1440, + "quality": "xhigh", + "output_tokens": 3276, + "usd": 0.09828, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 3840, + "height": 2160, + "quality": "xhigh", + "output_tokens": 5930, + "usd": 0.1779, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 1024, + "height": 768, + "quality": "max", + "output_tokens": 4815, + "usd": 0.14445, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 1024, + "height": 1024, + "quality": "max", + "output_tokens": 7024, + "usd": 0.21072, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 1024, + "height": 1536, + "quality": "max", + "output_tokens": 5488, + "usd": 0.16464, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 1536, + "height": 1024, + "quality": "max", + "output_tokens": 5488, + "usd": 0.16464, + "usd_precision": 5, + "source_url": "https://developers.openai.com/api/docs/guides/image-generation" + }, + { + "width": 1920, + "height": 1080, + "quality": "max", + "usd": 0.1584, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 2560, + "height": 1440, + "quality": "max", + "output_tokens": 7370, + "usd": 0.2211, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + { + "width": 3840, + "height": 2160, + "quality": "max", + "output_tokens": 13342, + "usd": 0.40026, + "usd_precision": 5, + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + } + ] + }, "styles": null }, "recraft/recraft-v3": { @@ -2018,13 +4810,6 @@ } }, "fal": { - "endpoints": [ - { - "id": "fal-ai/recraft/v4.1/text-to-image", - "input": "text", - "source_url": "https://fal.ai/models/fal-ai/recraft/v4.1/text-to-image/api" - } - ], "provider": "fal", "id": "fal-ai/recraft/v4.1/text-to-image", "pricing": { @@ -2032,7 +4817,44 @@ "usd": 0.035 }, "avg_cost_usd": 0.035, - "url": "https://fal.ai/models/fal-ai/recraft/v4.1/text-to-image" + "url": "https://fal.ai/models/fal-ai/recraft/v4.1/text-to-image", + "endpoints": [ + { + "id": "fal-ai/recraft/v4.1/text-to-image", + "input": "text", + "source_url": "https://fal.ai/models/fal-ai/recraft/v4.1/text-to-image/api", + "parameters": { + "enable_safety_checker": { + "type": "boolean" + }, + "image_size": { + "enum": [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9" + ] + }, + "image_size.height": { + "maximum": 14142, + "type": "integer", + "minimum": 1 + }, + "image_size.width": { + "maximum": 14142, + "type": "integer", + "minimum": 1 + }, + "prompt": { + "min_length": 1, + "type": "string", + "max_length": 10000 + } + } + } + ] } }, "styles": null, @@ -2089,18 +4911,6 @@ } }, "fal": { - "endpoints": [ - { - "id": "xai/grok-imagine-image/v2.0/edit", - "input": "image", - "source_url": "https://fal.ai/models/xai/grok-imagine-image/v2.0/edit/api" - }, - { - "id": "xai/grok-imagine-image/v2.0/text-to-image", - "input": "text", - "source_url": "https://fal.ai/models/xai/grok-imagine-image/v2.0/text-to-image/api" - } - ], "provider": "fal", "id": "xai/grok-imagine-image/v2.0/text-to-image", "avg_cost_usd": 0.06, @@ -2113,7 +4923,132 @@ "low/2048x2048": 0.06, "medium/2048x2048": 0.08 } - } + }, + "endpoints": [ + { + "id": "xai/grok-imagine-image/v2.0/edit", + "input": "image", + "source_url": "https://fal.ai/models/xai/grok-imagine-image/v2.0/edit/api", + "parameters": { + "aspect_ratio": { + "type": "string", + "enum": [ + "auto", + "2:1", + "20:9", + "19.5:9", + "16:9", + "4:3", + "3:2", + "1:1", + "2:3", + "3:4", + "9:16", + "9:19.5", + "9:20", + "1:2" + ] + }, + "enable_safety_checker": { + "type": "boolean" + }, + "image_urls": { + "type": "array", + "max_items": 5 + }, + "num_images": { + "maximum": 4, + "minimum": 1, + "type": "integer" + }, + "output_format": { + "type": "string", + "enum": [ + "jpeg", + "png", + "webp" + ] + }, + "prompt": { + "max_length": 8000, + "type": "string" + }, + "quality": { + "type": "string", + "enum": [ + "low", + "medium" + ] + }, + "resolution": { + "type": "string", + "enum": [ + "1k", + "2k" + ] + } + } + }, + { + "id": "xai/grok-imagine-image/v2.0/text-to-image", + "input": "text", + "source_url": "https://fal.ai/models/xai/grok-imagine-image/v2.0/text-to-image/api", + "parameters": { + "aspect_ratio": { + "type": "string", + "enum": [ + "2:1", + "20:9", + "19.5:9", + "16:9", + "4:3", + "3:2", + "1:1", + "2:3", + "3:4", + "9:16", + "9:19.5", + "9:20", + "1:2" + ] + }, + "enable_safety_checker": { + "type": "boolean" + }, + "num_images": { + "maximum": 4, + "minimum": 1, + "type": "integer" + }, + "output_format": { + "type": "string", + "enum": [ + "jpeg", + "png", + "webp" + ] + }, + "prompt": { + "max_length": 8000, + "type": "string" + }, + "quality": { + "type": "string", + "enum": [ + "low", + "medium" + ] + }, + "resolution": { + "type": "string", + "enum": [ + "1k", + "2k" + ] + } + } + } + ] } }, "pricing": { @@ -2175,18 +5110,6 @@ } }, "fal": { - "endpoints": [ - { - "id": "alibaba/wan-3.0/image-to-video", - "input": "image", - "source_url": "https://fal.ai/models/alibaba/wan-3.0/image-to-video/api" - }, - { - "id": "alibaba/wan-3.0/text-to-video", - "input": "text", - "source_url": "https://fal.ai/models/alibaba/wan-3.0/text-to-video/api" - } - ], "provider": "fal", "id": "alibaba/wan-3.0/image-to-video", "input": "image", @@ -2205,7 +5128,117 @@ "audio": 0.2 } } - } + }, + "endpoints": [ + { + "id": "alibaba/wan-3.0/image-to-video", + "input": "image", + "source_url": "https://fal.ai/models/alibaba/wan-3.0/image-to-video/api", + "parameters": { + "aspect_ratio": { + "enum": [ + "adaptive", + "16:9", + "4:3", + "1:1", + "3:4", + "9:16" + ], + "type": "string" + }, + "audio": { + "type": "boolean" + }, + "duration": { + "maximum": 30, + "minimum": 2, + "type": "integer" + }, + "enable_prompt_expansion": { + "type": "boolean" + }, + "enable_safety_checker": { + "type": "boolean" + }, + "enable_thinking": { + "type": "boolean" + }, + "prompt": { + "max_length": 20000, + "type": "string" + }, + "resolution": { + "enum": [ + "480p", + "720p", + "1080p" + ], + "type": "string" + }, + "seed": { + "maximum": 2147483647, + "minimum": 0, + "type": "integer" + }, + "start_image_url": { + "type": "string" + } + } + }, + { + "id": "alibaba/wan-3.0/text-to-video", + "input": "text", + "source_url": "https://fal.ai/models/alibaba/wan-3.0/text-to-video/api", + "parameters": { + "aspect_ratio": { + "enum": [ + "adaptive", + "16:9", + "4:3", + "1:1", + "3:4", + "9:16" + ], + "type": "string" + }, + "audio": { + "type": "boolean" + }, + "duration": { + "maximum": 30, + "minimum": 2, + "type": "integer" + }, + "enable_prompt_expansion": { + "type": "boolean" + }, + "enable_safety_checker": { + "type": "boolean" + }, + "enable_thinking": { + "type": "boolean" + }, + "prompt": { + "max_length": 20000, + "min_length": 1, + "type": "string" + }, + "resolution": { + "enum": [ + "480p", + "720p", + "1080p" + ], + "type": "string" + }, + "seed": { + "maximum": 2147483647, + "minimum": 0, + "type": "integer" + } + } + } + ] } } }, @@ -2215,11 +5248,14 @@ "short_description": "ByteDance's video model — image-to-video with reference modes, up to 4K, at roughly two-thirds the price of Seedance 2.5.", "vendor": "bytedance", "aspect_ratios": [ + "21:9", "16:9", - "9:16", - "1:1" + "4:3", + "1:1", + "3:4", + "9:16" ], - "min_duration": 5, + "min_duration": 4, "max_duration": 15, "audio": true, "speed_label": "slow", @@ -2231,18 +5267,6 @@ }, "providers": { "fal": { - "endpoints": [ - { - "id": "bytedance/seedance-2.0/image-to-video", - "input": "image", - "source_url": "https://fal.ai/models/bytedance/seedance-2.0/image-to-video/api" - }, - { - "id": "bytedance/seedance-2.0/text-to-video", - "input": "text", - "source_url": "https://fal.ai/models/bytedance/seedance-2.0/text-to-video/api" - } - ], "provider": "fal", "id": "bytedance/seedance-2.0/image-to-video", "input": "image", @@ -2258,7 +5282,146 @@ "audio": 0.682 } } - } + }, + "endpoints": [ + { + "id": "bytedance/seedance-2.0/image-to-video", + "input": "image", + "source_url": "https://fal.ai/models/bytedance/seedance-2.0/image-to-video/api", + "parameters": { + "aspect_ratio": { + "type": "string", + "enum": [ + "auto", + "21:9", + "16:9", + "4:3", + "1:1", + "3:4", + "9:16" + ] + }, + "bitrate_mode": { + "enum": [ + "standard", + "high" + ], + "type": "string" + }, + "codec": { + "enum": [ + "auto", + "H264", + "H265" + ], + "type": "string" + }, + "duration": { + "enum": [ + "auto", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ], + "type": "string" + }, + "generate_audio": { + "type": "boolean" + }, + "image_url": { + "type": "string" + }, + "prompt": { + "type": "string" + }, + "resolution": { + "enum": [ + "480p", + "720p", + "1080p", + "4k" + ], + "type": "string" + } + } + }, + { + "id": "bytedance/seedance-2.0/text-to-video", + "input": "text", + "source_url": "https://fal.ai/models/bytedance/seedance-2.0/text-to-video/api", + "parameters": { + "aspect_ratio": { + "type": "string", + "enum": [ + "auto", + "21:9", + "16:9", + "4:3", + "1:1", + "3:4", + "9:16" + ] + }, + "bitrate_mode": { + "enum": [ + "standard", + "high" + ], + "type": "string" + }, + "codec": { + "enum": [ + "auto", + "H264", + "H265" + ], + "type": "string" + }, + "duration": { + "enum": [ + "auto", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ], + "type": "string" + }, + "generate_audio": { + "type": "boolean" + }, + "prompt": { + "type": "string" + }, + "resolution": { + "enum": [ + "480p", + "720p", + "1080p", + "4k" + ], + "type": "string" + } + } + } + ] }, "openrouter": { "provider": "openrouter", @@ -2305,13 +5468,6 @@ }, "providers": { "fal": { - "endpoints": [ - { - "id": "bytedance/seedance-2.5/image-to-video", - "input": "image", - "source_url": "https://fal.ai/models/bytedance/seedance-2.5/image-to-video/api" - } - ], "provider": "fal", "id": "bytedance/seedance-2.5/image-to-video", "input": "image", @@ -2330,9 +5486,92 @@ "audio": 1.164 } } - } - } - } + }, + "endpoints": [ + { + "id": "bytedance/seedance-2.5/image-to-video", + "input": "image", + "source_url": "https://fal.ai/models/bytedance/seedance-2.5/image-to-video/api", + "parameters": { + "aspect_ratio": { + "type": "string", + "enum": [ + "auto" + ] + }, + "bitrate_mode": { + "type": "string", + "enum": [ + "standard", + "high" + ] + }, + "codec": { + "type": "string", + "enum": [ + "auto", + "H264", + "H265" + ] + }, + "draft": { + "type": "boolean" + }, + "duration": { + "type": "string", + "enum": [ + "auto", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25", + "26", + "27", + "28", + "29", + "30" + ] + }, + "generate_audio": { + "type": "boolean" + }, + "image_url": { + "type": "string" + }, + "prompt": { + "type": "string" + }, + "resolution": { + "type": "string", + "enum": [ + "480p", + "720p", + "1080p" + ] + } + } + } + ] + } + } }, "google/veo-3.1": { "id": "google/veo-3.1", @@ -2379,18 +5618,6 @@ } }, "fal": { - "endpoints": [ - { - "id": "fal-ai/veo3.1", - "input": "text", - "source_url": "https://fal.ai/models/fal-ai/veo3.1/api" - }, - { - "id": "fal-ai/veo3.1/image-to-video", - "input": "image", - "source_url": "https://fal.ai/models/fal-ai/veo3.1/image-to-video/api" - } - ], "provider": "fal", "id": "fal-ai/veo3.1/image-to-video", "input": "image", @@ -2412,7 +5639,121 @@ "silent": 0.4 } } - } + }, + "endpoints": [ + { + "id": "fal-ai/veo3.1", + "input": "text", + "source_url": "https://fal.ai/models/fal-ai/veo3.1/api", + "parameters": { + "aspect_ratio": { + "enum": [ + "16:9", + "9:16" + ], + "type": "string" + }, + "auto_fix": { + "type": "boolean" + }, + "duration": { + "enum": [ + "4s", + "6s", + "8s" + ], + "type": "string" + }, + "generate_audio": { + "type": "boolean" + }, + "prompt": { + "type": "string", + "max_length": 20000 + }, + "resolution": { + "enum": [ + "720p", + "1080p", + "4k" + ], + "type": "string" + }, + "safety_tolerance": { + "enum": [ + "1", + "2", + "3", + "4", + "5", + "6" + ], + "type": "string" + }, + "seed": { + "type": "integer" + } + } + }, + { + "id": "fal-ai/veo3.1/image-to-video", + "input": "image", + "source_url": "https://fal.ai/models/fal-ai/veo3.1/image-to-video/api", + "parameters": { + "aspect_ratio": { + "enum": [ + "auto", + "16:9", + "9:16" + ], + "type": "string" + }, + "auto_fix": { + "type": "boolean" + }, + "duration": { + "enum": [ + "4s", + "6s", + "8s" + ], + "type": "string" + }, + "generate_audio": { + "type": "boolean" + }, + "image_url": { + "type": "string" + }, + "prompt": { + "type": "string", + "max_length": 20000 + }, + "resolution": { + "enum": [ + "720p", + "1080p", + "4k" + ], + "type": "string" + }, + "safety_tolerance": { + "enum": [ + "1", + "2", + "3", + "4", + "5", + "6" + ], + "type": "string" + }, + "seed": { + "type": "integer" + } + } + } + ] }, "openrouter": { "provider": "openrouter", @@ -2479,18 +5820,6 @@ } }, "fal": { - "endpoints": [ - { - "id": "fal-ai/veo3.1/fast", - "input": "text", - "source_url": "https://fal.ai/models/fal-ai/veo3.1/fast/api" - }, - { - "id": "fal-ai/veo3.1/fast/image-to-video", - "input": "image", - "source_url": "https://fal.ai/models/fal-ai/veo3.1/fast/image-to-video/api" - } - ], "provider": "fal", "id": "fal-ai/veo3.1/fast/image-to-video", "input": "image", @@ -2512,7 +5841,121 @@ "silent": 0.3 } } - } + }, + "endpoints": [ + { + "id": "fal-ai/veo3.1/fast", + "input": "text", + "source_url": "https://fal.ai/models/fal-ai/veo3.1/fast/api", + "parameters": { + "aspect_ratio": { + "enum": [ + "16:9", + "9:16" + ], + "type": "string" + }, + "auto_fix": { + "type": "boolean" + }, + "duration": { + "enum": [ + "4s", + "6s", + "8s" + ], + "type": "string" + }, + "generate_audio": { + "type": "boolean" + }, + "prompt": { + "type": "string", + "max_length": 20000 + }, + "resolution": { + "enum": [ + "720p", + "1080p", + "4k" + ], + "type": "string" + }, + "safety_tolerance": { + "enum": [ + "1", + "2", + "3", + "4", + "5", + "6" + ], + "type": "string" + }, + "seed": { + "type": "integer" + } + } + }, + { + "id": "fal-ai/veo3.1/fast/image-to-video", + "input": "image", + "source_url": "https://fal.ai/models/fal-ai/veo3.1/fast/image-to-video/api", + "parameters": { + "aspect_ratio": { + "enum": [ + "auto", + "16:9", + "9:16" + ], + "type": "string" + }, + "auto_fix": { + "type": "boolean" + }, + "duration": { + "enum": [ + "4s", + "6s", + "8s" + ], + "type": "string" + }, + "generate_audio": { + "type": "boolean" + }, + "image_url": { + "type": "string" + }, + "prompt": { + "type": "string", + "max_length": 20000 + }, + "resolution": { + "enum": [ + "720p", + "1080p", + "4k" + ], + "type": "string" + }, + "safety_tolerance": { + "enum": [ + "1", + "2", + "3", + "4", + "5", + "6" + ], + "type": "string" + }, + "seed": { + "type": "integer" + } + } + } + ] } } }, @@ -2557,18 +6000,6 @@ } }, "fal": { - "endpoints": [ - { - "id": "fal-ai/veo3.1/lite", - "input": "text", - "source_url": "https://fal.ai/models/fal-ai/veo3.1/lite/api" - }, - { - "id": "fal-ai/veo3.1/lite/image-to-video", - "input": "image", - "source_url": "https://fal.ai/models/fal-ai/veo3.1/lite/image-to-video/api" - } - ], "provider": "fal", "id": "fal-ai/veo3.1/lite/image-to-video", "input": "image", @@ -2586,7 +6017,119 @@ "silent": 0.05 } } - } + }, + "endpoints": [ + { + "id": "fal-ai/veo3.1/lite", + "input": "text", + "source_url": "https://fal.ai/models/fal-ai/veo3.1/lite/api", + "parameters": { + "aspect_ratio": { + "enum": [ + "16:9", + "9:16" + ], + "type": "string" + }, + "auto_fix": { + "type": "boolean" + }, + "duration": { + "enum": [ + "4s", + "6s", + "8s" + ], + "type": "string" + }, + "generate_audio": { + "type": "boolean" + }, + "prompt": { + "type": "string", + "max_length": 20000 + }, + "resolution": { + "enum": [ + "720p", + "1080p" + ], + "type": "string" + }, + "safety_tolerance": { + "enum": [ + "1", + "2", + "3", + "4", + "5", + "6" + ], + "type": "string" + }, + "seed": { + "type": "integer" + } + } + }, + { + "id": "fal-ai/veo3.1/lite/image-to-video", + "input": "image", + "source_url": "https://fal.ai/models/fal-ai/veo3.1/lite/image-to-video/api", + "parameters": { + "aspect_ratio": { + "enum": [ + "auto", + "16:9", + "9:16" + ], + "type": "string" + }, + "auto_fix": { + "type": "boolean" + }, + "duration": { + "enum": [ + "4s", + "6s", + "8s" + ], + "type": "string" + }, + "generate_audio": { + "type": "boolean" + }, + "image_url": { + "type": "string" + }, + "prompt": { + "type": "string", + "max_length": 20000 + }, + "resolution": { + "enum": [ + "720p", + "1080p" + ], + "type": "string" + }, + "safety_tolerance": { + "enum": [ + "1", + "2", + "3", + "4", + "5", + "6" + ], + "type": "string" + }, + "seed": { + "type": "integer" + } + } + } + ] } } }, @@ -2633,13 +6176,6 @@ } }, "fal": { - "endpoints": [ - { - "id": "xai/grok-imagine-video/v1.5/image-to-video", - "input": "image", - "source_url": "https://fal.ai/models/xai/grok-imagine-video/v1.5/image-to-video/api" - } - ], "provider": "fal", "id": "xai/grok-imagine-video/v1.5/image-to-video", "input": "image", @@ -2659,7 +6195,39 @@ "audio": 0.25 } } - } + }, + "endpoints": [ + { + "id": "xai/grok-imagine-video/v1.5/image-to-video", + "input": "image", + "source_url": "https://fal.ai/models/xai/grok-imagine-video/v1.5/image-to-video/api", + "parameters": { + "duration": { + "minimum": 1, + "maximum": 15, + "type": "integer" + }, + "enable_safety_checker": { + "type": "boolean" + }, + "image_url": { + "type": "string" + }, + "prompt": { + "max_length": 4096, + "type": "string" + }, + "resolution": { + "type": "string", + "enum": [ + "480p", + "720p", + "1080p" + ] + } + } + } + ] } } } @@ -2859,7 +6427,55 @@ "multi_view": 0.15, "custom_face_count": 0.15 } - } + }, + "endpoints": [ + { + "id": "fal-ai/hunyuan-3d/v3.1/pro/image-to-3d", + "input": "image", + "source_url": "https://fal.ai/models/fal-ai/hunyuan-3d/v3.1/pro/image-to-3d/api", + "parameters": { + "back_image_url": { + "type": "string" + }, + "bottom_image_url": { + "type": "string" + }, + "enable_pbr": { + "type": "boolean" + }, + "face_count": { + "minimum": 40000, + "type": "integer", + "maximum": 1500000 + }, + "generate_type": { + "enum": [ + "Normal", + "Geometry" + ], + "type": "string" + }, + "input_image_url": { + "type": "string" + }, + "left_front_image_url": { + "type": "string" + }, + "left_image_url": { + "type": "string" + }, + "right_front_image_url": { + "type": "string" + }, + "right_image_url": { + "type": "string" + }, + "top_image_url": { + "type": "string" + } + } + } + ] }, "fal-ai/hunyuan-3d/v3.1/pro/text-to-3d": { "id": "fal-ai/hunyuan-3d/v3.1/pro/text-to-3d", @@ -2894,7 +6510,35 @@ "pbr": 0.15, "custom_face_count": 0.15 } - } + }, + "endpoints": [ + { + "id": "fal-ai/hunyuan-3d/v3.1/pro/text-to-3d", + "input": "text", + "source_url": "https://fal.ai/models/fal-ai/hunyuan-3d/v3.1/pro/text-to-3d/api", + "parameters": { + "enable_pbr": { + "type": "boolean" + }, + "face_count": { + "minimum": 40000, + "type": "integer", + "maximum": 1500000 + }, + "generate_type": { + "enum": [ + "Normal", + "Geometry" + ], + "type": "string" + }, + "prompt": { + "type": "string", + "max_length": 1024 + } + } + } + ] }, "fal-ai/trellis-2": { "id": "fal-ai/trellis-2", @@ -2927,7 +6571,166 @@ "1024": 0.3, "1536": 0.35 } - } + }, + "endpoints": [ + { + "id": "fal-ai/trellis-2", + "input": "image", + "source_url": "https://fal.ai/models/fal-ai/trellis-2/api", + "parameters": { + "decimation_target": { + "type": "integer", + "maximum": 2000000, + "minimum": 5000 + }, + "image_url": { + "type": "string" + }, + "remesh": { + "type": "boolean" + }, + "remesh_band": { + "type": "number", + "maximum": 4, + "minimum": 0 + }, + "remesh_project": { + "type": "number", + "maximum": 1, + "minimum": 0 + }, + "resolution": { + "enum": [ + 512, + 1024, + 1536 + ], + "type": "integer" + }, + "seed": { + "type": "integer" + }, + "shape_slat_guidance_interval_end": { + "type": "number", + "maximum": 1, + "minimum": 0 + }, + "shape_slat_guidance_interval_start": { + "type": "number", + "maximum": 1, + "minimum": 0 + }, + "shape_slat_guidance_rescale": { + "type": "number", + "maximum": 1, + "minimum": 0 + }, + "shape_slat_guidance_strength": { + "type": "number", + "maximum": 10, + "minimum": 0 + }, + "shape_slat_rescale_t": { + "type": "number", + "maximum": 6, + "minimum": 1 + }, + "shape_slat_sampling_steps": { + "type": "integer", + "maximum": 50, + "minimum": 1 + }, + "ss_guidance_interval_end": { + "type": "number", + "maximum": 1, + "minimum": 0 + }, + "ss_guidance_interval_start": { + "type": "number", + "maximum": 1, + "minimum": 0 + }, + "ss_guidance_rescale": { + "type": "number", + "maximum": 1, + "minimum": 0 + }, + "ss_guidance_strength": { + "type": "number", + "maximum": 10, + "minimum": 0 + }, + "ss_rescale_t": { + "type": "number", + "maximum": 6, + "minimum": 1 + }, + "ss_sampling_steps": { + "type": "integer", + "maximum": 50, + "minimum": 1 + }, + "tex_slat_guidance_interval_end": { + "type": "number", + "maximum": 1, + "minimum": 0 + }, + "tex_slat_guidance_interval_start": { + "type": "number", + "maximum": 1, + "minimum": 0 + }, + "tex_slat_guidance_rescale": { + "type": "number", + "maximum": 1, + "minimum": 0 + }, + "tex_slat_guidance_strength": { + "type": "number", + "maximum": 10, + "minimum": 0 + }, + "tex_slat_rescale_t": { + "type": "number", + "maximum": 6, + "minimum": 1 + }, + "tex_slat_sampling_steps": { + "type": "integer", + "maximum": 50, + "minimum": 1 + }, + "texture_size": { + "enum": [ + 1024, + 2048, + 4096 + ], + "type": "integer" + }, + "uv_unwrap_angle_threshold_deg": { + "type": "number", + "maximum": 180, + "minimum": 0 + }, + "uv_unwrap_global_iterations": { + "type": "integer", + "maximum": 10, + "minimum": 1 + }, + "uv_unwrap_refine_iterations": { + "type": "integer", + "maximum": 10, + "minimum": 0 + }, + "uv_unwrap_smooth_strength": { + "type": "number", + "maximum": 10, + "minimum": 0 + } + } + } + ] } }, "three_d.model_generation.models": { @@ -2984,7 +6787,275 @@ "multiview": 20 }, "detailed_geometry_credits": 20 - } + }, + "endpoints": [ + { + "id": "/generation/text-to-model", + "input": "text", + "source_url": "https://developers.tripo3d.ai/en/docs/generation-text-to-model/standard", + "parameters": { + "auto_size": { + "type": "boolean" + }, + "compress": { + "type": "string", + "enum": [ + "geometry" + ] + }, + "export_orientation": { + "type": "string", + "enum": [ + "+x", + "-x", + "-y", + "+y" + ] + }, + "export_uv": { + "type": "boolean" + }, + "face_limit": { + "type": "integer", + "maximum": 2000000 + }, + "generate_parts": { + "type": "boolean" + }, + "geometry_quality": { + "type": "string", + "enum": [ + "standard", + "detailed" + ] + }, + "image_seed": { + "type": "integer" + }, + "model": { + "type": "string", + "enum": [ + "v3.1-20260211" + ] + }, + "model_seed": { + "type": "integer" + }, + "negative_prompt": { + "type": "string", + "max_length": 255 + }, + "pbr": { + "type": "boolean" + }, + "prompt": { + "type": "string", + "max_length": 1024 + }, + "quad": { + "type": "boolean" + }, + "smart_low_poly": { + "type": "boolean" + }, + "texture": { + "type": "boolean" + }, + "texture_quality": { + "type": "string", + "enum": [ + "fast", + "standard", + "detailed", + "extreme" + ] + }, + "texture_seed": { + "type": "integer" + }, + "texture_version": { + "type": "string", + "enum": [ + "v3.5-20260815", + "v3.0-20250812", + "v2.5-20250123" + ] + } + } + }, + { + "id": "/generation/image-to-model", + "input": "image", + "source_url": "https://developers.tripo3d.ai/en/docs/generation-image-to-model/standard", + "parameters": { + "auto_size": { + "type": "boolean" + }, + "compress": { + "type": "string", + "enum": [ + "geometry" + ] + }, + "export_orientation": { + "type": "string", + "enum": [ + "+x", + "-x", + "-y", + "+y" + ] + }, + "export_uv": { + "type": "boolean" + }, + "face_limit": { + "type": "integer", + "maximum": 2000000 + }, + "generate_parts": { + "type": "boolean" + }, + "geometry_quality": { + "type": "string", + "enum": [ + "standard", + "detailed" + ] + }, + "input": { + "type": "string" + }, + "model": { + "type": "string", + "enum": [ + "v3.1-20260211" + ] + }, + "model_seed": { + "type": "integer" + }, + "pbr": { + "type": "boolean" + }, + "quad": { + "type": "boolean" + }, + "smart_low_poly": { + "type": "boolean" + }, + "texture": { + "type": "boolean" + }, + "texture_quality": { + "type": "string", + "enum": [ + "fast", + "standard", + "detailed", + "extreme" + ] + }, + "texture_seed": { + "type": "integer" + }, + "texture_version": { + "type": "string", + "enum": [ + "v3.5-20260815", + "v3.0-20250812", + "v2.5-20250123" + ] + } + } + }, + { + "id": "/generation/multiview-to-model", + "input": "image", + "source_url": "https://developers.tripo3d.ai/en/docs/generation-multiview-to-model/standard", + "parameters": { + "auto_size": { + "type": "boolean" + }, + "compress": { + "type": "string", + "enum": [ + "geometry" + ] + }, + "export_orientation": { + "type": "string", + "enum": [ + "+x", + "-x", + "-y", + "+y" + ] + }, + "export_uv": { + "type": "boolean" + }, + "face_limit": { + "type": "integer", + "maximum": 2000000 + }, + "generate_parts": { + "type": "boolean" + }, + "geometry_quality": { + "type": "string", + "enum": [ + "standard", + "detailed" + ] + }, + "inputs": { + "type": "array" + }, + "model": { + "type": "string", + "enum": [ + "v3.1-20260211" + ] + }, + "model_seed": { + "type": "integer" + }, + "pbr": { + "type": "boolean" + }, + "quad": { + "type": "boolean" + }, + "smart_low_poly": { + "type": "boolean" + }, + "texture": { + "type": "boolean" + }, + "texture_quality": { + "type": "string", + "enum": [ + "fast", + "standard", + "detailed", + "extreme" + ] + }, + "texture_seed": { + "type": "integer" + }, + "texture_version": { + "type": "string", + "enum": [ + "v3.5-20260815", + "v3.0-20250812", + "v2.5-20250123" + ] + } + } + } + ] }, "tripo/p1": { "id": "tripo/p1", @@ -3033,7 +7104,212 @@ "image": 40, "multiview": 40 } - } + }, + "endpoints": [ + { + "id": "/generation/text-to-model", + "input": "text", + "source_url": "https://developers.tripo3d.ai/en/docs/generation-text-to-model/p", + "parameters": { + "auto_size": { + "type": "boolean" + }, + "export_orientation": { + "type": "string", + "enum": [ + "+x", + "-x", + "-y", + "+y" + ] + }, + "export_uv": { + "type": "boolean" + }, + "face_limit": { + "type": "integer", + "minimum": 50, + "maximum": 20000 + }, + "image_seed": { + "type": "integer" + }, + "model": { + "type": "string", + "enum": [ + "P1-20260311" + ] + }, + "model_seed": { + "type": "integer" + }, + "negative_prompt": { + "type": "string", + "max_length": 255 + }, + "pbr": { + "type": "boolean" + }, + "prompt": { + "type": "string", + "max_length": 1024 + }, + "texture": { + "type": "boolean" + }, + "texture_quality": { + "type": "string", + "enum": [ + "fast", + "standard", + "detailed", + "extreme" + ] + }, + "texture_seed": { + "type": "integer" + }, + "texture_version": { + "type": "string", + "enum": [ + "v3.5-20260815", + "v3.0-20250812", + "v2.5-20250123" + ] + } + } + }, + { + "id": "/generation/image-to-model", + "input": "image", + "source_url": "https://developers.tripo3d.ai/en/docs/generation-image-to-model/p", + "parameters": { + "auto_size": { + "type": "boolean" + }, + "export_orientation": { + "type": "string", + "enum": [ + "+x", + "-x", + "-y", + "+y" + ] + }, + "export_uv": { + "type": "boolean" + }, + "face_limit": { + "type": "integer", + "minimum": 50, + "maximum": 20000 + }, + "input": { + "type": "string" + }, + "model": { + "type": "string", + "enum": [ + "P1-20260311" + ] + }, + "model_seed": { + "type": "integer" + }, + "pbr": { + "type": "boolean" + }, + "texture": { + "type": "boolean" + }, + "texture_quality": { + "type": "string", + "enum": [ + "fast", + "standard", + "detailed", + "extreme" + ] + }, + "texture_seed": { + "type": "integer" + }, + "texture_version": { + "type": "string", + "enum": [ + "v3.5-20260815", + "v3.0-20250812", + "v2.5-20250123" + ] + } + } + }, + { + "id": "/generation/multiview-to-model", + "input": "image", + "source_url": "https://developers.tripo3d.ai/en/docs/generation-multiview-to-model/p", + "parameters": { + "auto_size": { + "type": "boolean" + }, + "export_orientation": { + "type": "string", + "enum": [ + "+x", + "-x", + "-y", + "+y" + ] + }, + "export_uv": { + "type": "boolean" + }, + "face_limit": { + "type": "integer", + "minimum": 50, + "maximum": 20000 + }, + "inputs": { + "type": "array" + }, + "model": { + "type": "string", + "enum": [ + "P1-20260311" + ] + }, + "model_seed": { + "type": "integer" + }, + "pbr": { + "type": "boolean" + }, + "texture": { + "type": "boolean" + }, + "texture_quality": { + "type": "string", + "enum": [ + "fast", + "standard", + "detailed", + "extreme" + ] + }, + "texture_seed": { + "type": "integer" + }, + "texture_version": { + "type": "string", + "enum": [ + "v3.5-20260815", + "v3.0-20250812", + "v2.5-20250123" + ] + } + } + } + ] }, "tripo/p2": { "id": "tripo/p2", @@ -3082,7 +7358,221 @@ "image": 100, "multiview": 100 } - } + }, + "endpoints": [ + { + "id": "/generation/text-to-model", + "input": "text", + "source_url": "https://developers.tripo3d.ai/en/docs/generation-text-to-model/p", + "parameters": { + "auto_size": { + "type": "boolean" + }, + "export_orientation": { + "type": "string", + "enum": [ + "+x", + "-x", + "-y", + "+y" + ] + }, + "export_uv": { + "type": "boolean" + }, + "face_limit": { + "type": "integer", + "minimum": 48, + "maximum": 50000 + }, + "image_seed": { + "type": "integer" + }, + "model": { + "type": "string", + "enum": [ + "P2-20260801" + ] + }, + "model_seed": { + "type": "integer" + }, + "negative_prompt": { + "type": "string", + "max_length": 255 + }, + "pbr": { + "type": "boolean" + }, + "prompt": { + "type": "string", + "max_length": 1024 + }, + "quad": { + "type": "boolean" + }, + "texture": { + "type": "boolean" + }, + "texture_quality": { + "type": "string", + "enum": [ + "fast", + "standard", + "detailed", + "extreme" + ] + }, + "texture_seed": { + "type": "integer" + }, + "texture_version": { + "type": "string", + "enum": [ + "v3.5-20260815", + "v3.0-20250812", + "v2.5-20250123" + ] + } + } + }, + { + "id": "/generation/image-to-model", + "input": "image", + "source_url": "https://developers.tripo3d.ai/en/docs/generation-image-to-model/p", + "parameters": { + "auto_size": { + "type": "boolean" + }, + "export_orientation": { + "type": "string", + "enum": [ + "+x", + "-x", + "-y", + "+y" + ] + }, + "export_uv": { + "type": "boolean" + }, + "face_limit": { + "type": "integer", + "minimum": 48, + "maximum": 50000 + }, + "input": { + "type": "string" + }, + "model": { + "type": "string", + "enum": [ + "P2-20260801" + ] + }, + "model_seed": { + "type": "integer" + }, + "pbr": { + "type": "boolean" + }, + "quad": { + "type": "boolean" + }, + "texture": { + "type": "boolean" + }, + "texture_quality": { + "type": "string", + "enum": [ + "fast", + "standard", + "detailed", + "extreme" + ] + }, + "texture_seed": { + "type": "integer" + }, + "texture_version": { + "type": "string", + "enum": [ + "v3.5-20260815", + "v3.0-20250812", + "v2.5-20250123" + ] + } + } + }, + { + "id": "/generation/multiview-to-model", + "input": "image", + "source_url": "https://developers.tripo3d.ai/en/docs/generation-multiview-to-model/p", + "parameters": { + "auto_size": { + "type": "boolean" + }, + "export_orientation": { + "type": "string", + "enum": [ + "+x", + "-x", + "-y", + "+y" + ] + }, + "export_uv": { + "type": "boolean" + }, + "face_limit": { + "type": "integer", + "minimum": 48, + "maximum": 50000 + }, + "inputs": { + "type": "array" + }, + "model": { + "type": "string", + "enum": [ + "P2-20260801" + ] + }, + "model_seed": { + "type": "integer" + }, + "pbr": { + "type": "boolean" + }, + "quad": { + "type": "boolean" + }, + "texture": { + "type": "boolean" + }, + "texture_quality": { + "type": "string", + "enum": [ + "fast", + "standard", + "detailed", + "extreme" + ] + }, + "texture_seed": { + "type": "integer" + }, + "texture_version": { + "type": "string", + "enum": [ + "v3.5-20260815", + "v3.0-20250812", + "v2.5-20250123" + ] + } + } + } + ] } }, "three_d.rigging.models": { @@ -3128,7 +7618,45 @@ "basis": "provider_endpoint", "source_url": "https://developers.tripo3d.ai/en/docs/animations-rig", "date": null - } + }, + "endpoints": [ + { + "id": "/animations/rig", + "input": "task", + "source_url": "https://developers.tripo3d.ai/en/docs/animations-rig", + "parameters": { + "input": { + "type": "string" + }, + "model": { + "type": "string", + "enum": [ + "v1.0-20240301" + ] + }, + "out_format": { + "type": "string", + "enum": [ + "glb", + "fbx" + ] + }, + "rig_type": { + "type": "string", + "enum": [ + "biped" + ] + }, + "spec": { + "type": "string", + "enum": [ + "tripo", + "mixamo" + ] + } + } + } + ] }, "tripo/rig-v2.5": { "id": "tripo/rig-v2.5", @@ -3177,7 +7705,50 @@ "basis": "provider_endpoint", "source_url": "https://developers.tripo3d.ai/en/docs/animations-rig", "date": null - } + }, + "endpoints": [ + { + "id": "/animations/rig", + "input": "task", + "source_url": "https://developers.tripo3d.ai/en/docs/animations-rig", + "parameters": { + "input": { + "type": "string" + }, + "model": { + "type": "string", + "enum": [ + "v2.5-20260210" + ] + }, + "out_format": { + "type": "string", + "enum": [ + "glb", + "fbx" + ] + }, + "rig_type": { + "type": "string", + "enum": [ + "quadruped", + "hexapod", + "octopod", + "avian", + "serpentine", + "aquatic" + ] + }, + "spec": { + "type": "string", + "enum": [ + "tripo", + "mixamo" + ] + } + } + } + ] } }, "three_d.rig_check.operation": { @@ -3212,7 +7783,19 @@ "basis": "provider_endpoint", "source_url": "https://developers.tripo3d.ai/en/docs/animations-rig-check", "date": null - } + }, + "endpoints": [ + { + "id": "/animations/rig-check", + "input": "task", + "source_url": "https://developers.tripo3d.ai/en/docs/animations-rig-check", + "parameters": { + "input": { + "type": "string" + } + } + } + ] }, "image_tools.models": { "851-labs/background-remover": { diff --git a/models/alibaba/wan-3.0/card.toml b/models/alibaba/wan-3.0/card.toml index 2211061..1146c6b 100644 --- a/models/alibaba/wan-3.0/card.toml +++ b/models/alibaba/wan-3.0/card.toml @@ -32,10 +32,6 @@ type = "per_second" 1080p = { audio = 0.2 } [providers.fal] -endpoints = [ - { id = "alibaba/wan-3.0/image-to-video", input = "image", source_url = "https://fal.ai/models/alibaba/wan-3.0/image-to-video/api" }, - { id = "alibaba/wan-3.0/text-to-video", input = "text", source_url = "https://fal.ai/models/alibaba/wan-3.0/text-to-video/api" }, -] provider = "fal" id = "alibaba/wan-3.0/image-to-video" input = "image" @@ -49,3 +45,36 @@ type = "per_second" 480p = { audio = 0.05 } 720p = { audio = 0.1 } 1080p = { audio = 0.2 } + +[[providers.fal.endpoints]] +id = "alibaba/wan-3.0/image-to-video" +input = "image" +source_url = "https://fal.ai/models/alibaba/wan-3.0/image-to-video/api" + +[providers.fal.endpoints.parameters] +"aspect_ratio" = { "enum" = ["adaptive", "16:9", "4:3", "1:1", "3:4", "9:16"], "type" = "string" } +"audio" = { "type" = "boolean" } +"duration" = { "maximum" = 30, "minimum" = 2, "type" = "integer" } +"enable_prompt_expansion" = { "type" = "boolean" } +"enable_safety_checker" = { "type" = "boolean" } +"enable_thinking" = { "type" = "boolean" } +"prompt" = { "max_length" = 20000, "type" = "string" } +"resolution" = { "enum" = ["480p", "720p", "1080p"], "type" = "string" } +"seed" = { "maximum" = 2147483647, "minimum" = 0, "type" = "integer" } +"start_image_url" = { "type" = "string" } + +[[providers.fal.endpoints]] +id = "alibaba/wan-3.0/text-to-video" +input = "text" +source_url = "https://fal.ai/models/alibaba/wan-3.0/text-to-video/api" + +[providers.fal.endpoints.parameters] +"aspect_ratio" = { "enum" = ["adaptive", "16:9", "4:3", "1:1", "3:4", "9:16"], "type" = "string" } +"audio" = { "type" = "boolean" } +"duration" = { "maximum" = 30, "minimum" = 2, "type" = "integer" } +"enable_prompt_expansion" = { "type" = "boolean" } +"enable_safety_checker" = { "type" = "boolean" } +"enable_thinking" = { "type" = "boolean" } +"prompt" = { "max_length" = 20000, "min_length" = 1, "type" = "string" } +"resolution" = { "enum" = ["480p", "720p", "1080p"], "type" = "string" } +"seed" = { "maximum" = 2147483647, "minimum" = 0, "type" = "integer" } diff --git a/models/anthropic/claude-fable-5.1/card.toml b/models/anthropic/claude-fable-5.1/card.toml index 004d7b1..6cf8293 100644 --- a/models/anthropic/claude-fable-5.1/card.toml +++ b/models/anthropic/claude-fable-5.1/card.toml @@ -23,3 +23,29 @@ url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "anthropic/claude-fable-5.1", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] + +[providers.vercel.token_pricing] +source_url = "https://ai-gateway.vercel.sh/v1/models" +unit = "usd_per_token" +input = "0.00001" +output = "0.00005" +input_cache_read = "0.00000025" +input_cache_write = "0.0000125" + +[providers.vercel.capabilities] +source_url = "https://ai-gateway.vercel.sh/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.vercel.limits] +source_url = "https://ai-gateway.vercel.sh/v1/models" +context_tokens = 1000000 +max_output_tokens = 128000 + +[vision_tokenization] +source_url = "https://platform.claude.com/docs/en/build-with-claude/vision" +patch_size_px = 28 +maximum_tokens_per_image = 4784 +detail_maximum_edges = { "default" = 2576 } diff --git a/models/anthropic/claude-fable-5/card.toml b/models/anthropic/claude-fable-5/card.toml index c0fa4a8..eb5de54 100644 --- a/models/anthropic/claude-fable-5/card.toml +++ b/models/anthropic/claude-fable-5/card.toml @@ -23,3 +23,29 @@ url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "anthropic/claude-fable-5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] + +[providers.vercel.token_pricing] +source_url = "https://ai-gateway.vercel.sh/v1/models" +unit = "usd_per_token" +input = "0.00001" +output = "0.00005" +input_cache_read = "0.000001" +input_cache_write = "0.0000125" + +[providers.vercel.capabilities] +source_url = "https://ai-gateway.vercel.sh/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.vercel.limits] +source_url = "https://ai-gateway.vercel.sh/v1/models" +context_tokens = 1000000 +max_output_tokens = 128000 + +[vision_tokenization] +source_url = "https://platform.claude.com/docs/en/build-with-claude/vision" +patch_size_px = 28 +maximum_tokens_per_image = 4784 +detail_maximum_edges = { "default" = 2576 } diff --git a/models/anthropic/claude-haiku-5.5/card.toml b/models/anthropic/claude-haiku-5.5/card.toml index f3693e8..72c88dc 100644 --- a/models/anthropic/claude-haiku-5.5/card.toml +++ b/models/anthropic/claude-haiku-5.5/card.toml @@ -35,3 +35,39 @@ url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "anthropic/claude-haiku-5.5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] + +[providers.vercel.token_pricing] +source_url = "https://ai-gateway.vercel.sh/v1/models" +unit = "usd_per_token" +input = "0.0000001" +output = "0.0000005" +input_cache_read = "0.00000001" +input_cache_write = "0.000000125" +tiers = [ + { "meter" = "input", "minimum_input_tokens" = 0, "usd_per_token" = "0.0000001", "maximum_input_tokens" = 100001 }, + { "meter" = "input", "minimum_input_tokens" = 100001, "usd_per_token" = "0.0000005" }, + { "meter" = "output", "minimum_input_tokens" = 0, "usd_per_token" = "0.0000005", "maximum_input_tokens" = 100001 }, + { "meter" = "output", "minimum_input_tokens" = 100001, "usd_per_token" = "0.0000025" }, + { "meter" = "input_cache_read", "minimum_input_tokens" = 0, "usd_per_token" = "0.00000001", "maximum_input_tokens" = 100001 }, + { "meter" = "input_cache_read", "minimum_input_tokens" = 100001, "usd_per_token" = "0.00000005" }, + { "meter" = "input_cache_write", "minimum_input_tokens" = 0, "usd_per_token" = "0.000000125", "maximum_input_tokens" = 100001 }, + { "meter" = "input_cache_write", "minimum_input_tokens" = 100001, "usd_per_token" = "0.000000625" }, +] + +[providers.vercel.capabilities] +source_url = "https://ai-gateway.vercel.sh/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.vercel.limits] +source_url = "https://ai-gateway.vercel.sh/v1/models" +context_tokens = 1000000 +max_output_tokens = 128000 + +[vision_tokenization] +source_url = "https://platform.claude.com/docs/en/build-with-claude/vision" +patch_size_px = 28 +maximum_tokens_per_image = 4784 +detail_maximum_edges = { "default" = 2576 } diff --git a/models/anthropic/claude-opus-4.8/card.toml b/models/anthropic/claude-opus-4.8/card.toml index 6c2226e..e062f0f 100644 --- a/models/anthropic/claude-opus-4.8/card.toml +++ b/models/anthropic/claude-opus-4.8/card.toml @@ -23,3 +23,29 @@ url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "anthropic/claude-opus-4.8", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] + +[providers.vercel.token_pricing] +source_url = "https://ai-gateway.vercel.sh/v1/models" +unit = "usd_per_token" +input = "0.000005" +output = "0.000025" +input_cache_read = "0.0000005" +input_cache_write = "0.00000625" + +[providers.vercel.capabilities] +source_url = "https://ai-gateway.vercel.sh/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.vercel.limits] +source_url = "https://ai-gateway.vercel.sh/v1/models" +context_tokens = 1000000 +max_output_tokens = 128000 + +[vision_tokenization] +source_url = "https://platform.claude.com/docs/en/build-with-claude/vision" +patch_size_px = 28 +maximum_tokens_per_image = 4784 +detail_maximum_edges = { "default" = 2576 } diff --git a/models/anthropic/claude-opus-5.5/card.toml b/models/anthropic/claude-opus-5.5/card.toml index 508c710..ebad1ef 100644 --- a/models/anthropic/claude-opus-5.5/card.toml +++ b/models/anthropic/claude-opus-5.5/card.toml @@ -23,3 +23,29 @@ url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "anthropic/claude-opus-5.5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] + +[providers.vercel.token_pricing] +source_url = "https://ai-gateway.vercel.sh/v1/models" +unit = "usd_per_token" +input = "0.000004" +output = "0.00002" +input_cache_read = "0.0000002" +input_cache_write = "0.000005" + +[providers.vercel.capabilities] +source_url = "https://ai-gateway.vercel.sh/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.vercel.limits] +source_url = "https://ai-gateway.vercel.sh/v1/models" +context_tokens = 1000000 +max_output_tokens = 128000 + +[vision_tokenization] +source_url = "https://platform.claude.com/docs/en/build-with-claude/vision" +patch_size_px = 28 +maximum_tokens_per_image = 4784 +detail_maximum_edges = { "default" = 2576 } diff --git a/models/anthropic/claude-opus-5/card.toml b/models/anthropic/claude-opus-5/card.toml index 6a90133..66197a3 100644 --- a/models/anthropic/claude-opus-5/card.toml +++ b/models/anthropic/claude-opus-5/card.toml @@ -23,3 +23,29 @@ url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "anthropic/claude-opus-5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] + +[providers.vercel.token_pricing] +source_url = "https://ai-gateway.vercel.sh/v1/models" +unit = "usd_per_token" +input = "0.000005" +output = "0.000025" +input_cache_read = "0.0000005" +input_cache_write = "0.00000625" + +[providers.vercel.capabilities] +source_url = "https://ai-gateway.vercel.sh/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.vercel.limits] +source_url = "https://ai-gateway.vercel.sh/v1/models" +context_tokens = 1000000 +max_output_tokens = 128000 + +[vision_tokenization] +source_url = "https://platform.claude.com/docs/en/build-with-claude/vision" +patch_size_px = 28 +maximum_tokens_per_image = 4784 +detail_maximum_edges = { "default" = 2576 } diff --git a/models/anthropic/claude-sonnet-5.5/card.toml b/models/anthropic/claude-sonnet-5.5/card.toml index 96ec58d..2807a54 100644 --- a/models/anthropic/claude-sonnet-5.5/card.toml +++ b/models/anthropic/claude-sonnet-5.5/card.toml @@ -23,3 +23,29 @@ url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "anthropic/claude-sonnet-5.5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] + +[providers.vercel.token_pricing] +source_url = "https://ai-gateway.vercel.sh/v1/models" +unit = "usd_per_token" +input = "0.000002" +output = "0.00001" +input_cache_read = "0.0000001" +input_cache_write = "0.0000025" + +[providers.vercel.capabilities] +source_url = "https://ai-gateway.vercel.sh/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.vercel.limits] +source_url = "https://ai-gateway.vercel.sh/v1/models" +context_tokens = 1000000 +max_output_tokens = 128000 + +[vision_tokenization] +source_url = "https://platform.claude.com/docs/en/build-with-claude/vision" +patch_size_px = 28 +maximum_tokens_per_image = 4784 +detail_maximum_edges = { "default" = 2576 } diff --git a/models/anthropic/claude-sonnet-5/card.toml b/models/anthropic/claude-sonnet-5/card.toml index bc5c08d..d94b1f7 100644 --- a/models/anthropic/claude-sonnet-5/card.toml +++ b/models/anthropic/claude-sonnet-5/card.toml @@ -23,3 +23,29 @@ url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "anthropic/claude-sonnet-5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] + +[providers.vercel.token_pricing] +source_url = "https://ai-gateway.vercel.sh/v1/models" +unit = "usd_per_token" +input = "0.000002" +output = "0.00001" +input_cache_read = "0.0000002" +input_cache_write = "0.0000025" + +[providers.vercel.capabilities] +source_url = "https://ai-gateway.vercel.sh/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.vercel.limits] +source_url = "https://ai-gateway.vercel.sh/v1/models" +context_tokens = 1000000 +max_output_tokens = 128000 + +[vision_tokenization] +source_url = "https://platform.claude.com/docs/en/build-with-claude/vision" +patch_size_px = 28 +maximum_tokens_per_image = 4784 +detail_maximum_edges = { "default" = 2576 } diff --git a/models/black-forest-labs/flux-2-max/card.toml b/models/black-forest-labs/flux-2-max/card.toml index 6f73130..3c31c49 100644 --- a/models/black-forest-labs/flux-2-max/card.toml +++ b/models/black-forest-labs/flux-2-max/card.toml @@ -1,13 +1,12 @@ id = "bfl/flux-2-max" section = "image.models" -null_keys = ["styles", "sizes"] +null_keys = ["styles", "sizes", "constraints"] label = "Flux 2 Max" short_description = "Black Forest Labs' highest-fidelity Flux 2 — maximum prompt adherence and detail." vendor = "black-forest-labs" speed_label = "slow" speed_max = "45s" -constraints = { min_edge = 256, max_edge = 1440 } pricing = { type = "per_image_flat", usd = 0.07 } avg_cost_usd = 0.07 @@ -31,12 +30,60 @@ url = "https://openrouter.ai/black-forest-labs/flux.2-max" references = { id = "black-forest-labs/flux.2-max", max = 8 } [providers.fal] -endpoints = [ - { id = "fal-ai/flux-2-max", input = "text", source_url = "https://fal.ai/models/fal-ai/flux-2-max/api" }, - { id = "fal-ai/flux-2-max/edit", input = "image", source_url = "https://fal.ai/models/fal-ai/flux-2-max/edit/api" }, -] provider = "fal" id = "fal-ai/flux-2-max" -pricing = { type = "per_image_flat", usd = 0.07 } +pricing = { type = "per_image_flat", usd = 0.07, included_megapixels = 1, included_megapixels_scope = "processed", usd_per_additional_megapixel = 0.03, input_megapixels_billed = true, source_url = "https://fal.ai/models/fal-ai/flux-2-max/edit" } avg_cost_usd = 0.07 url = "https://fal.ai/models/fal-ai/flux-2-max" + +[[providers.fal.endpoints]] +id = "fal-ai/flux-2-max" +input = "text" +source_url = "https://fal.ai/models/fal-ai/flux-2-max/api" + +[providers.fal.endpoints.parameters] +"enable_safety_checker" = { "type" = "boolean" } +"image_size" = { "enum" = [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", +] } +"image_size.height" = { "type" = "integer", "maximum" = 2560, "minimum" = 256, "multiple_of" = 16 } +"image_size.width" = { "type" = "integer", "maximum" = 2560, "minimum" = 256, "multiple_of" = 16 } +"output_format" = { "enum" = ["jpeg", "png"], "type" = "string" } +"prompt" = { "type" = "string" } +"safety_tolerance" = { "enum" = ["1", "2", "3", "4", "5"], "type" = "string" } +"seed" = { "type" = "integer" } + +[providers.fal.endpoints.image_constraints] +max_edge = 2560 +min_edge = 256 +max_pixels = 4194304 +step = 16 + +[[providers.fal.endpoints]] +id = "fal-ai/flux-2-max/edit" +input = "image" +source_url = "https://fal.ai/models/fal-ai/flux-2-max/edit/api" + +[providers.fal.endpoints.parameters] +"enable_safety_checker" = { "type" = "boolean" } +"image_size" = { "enum" = [ + "auto", + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", +] } +"image_size.height" = { "type" = "integer", "maximum" = 14142, "minimum" = 1 } +"image_size.width" = { "type" = "integer", "maximum" = 14142, "minimum" = 1 } +"image_urls" = { "type" = "array" } +"output_format" = { "enum" = ["jpeg", "png"], "type" = "string" } +"prompt" = { "type" = "string" } +"safety_tolerance" = { "enum" = ["1", "2", "3", "4", "5"], "type" = "string" } +"seed" = { "type" = "integer" } diff --git a/models/black-forest-labs/flux-2-pro/card.toml b/models/black-forest-labs/flux-2-pro/card.toml index 8189768..88f0517 100644 --- a/models/black-forest-labs/flux-2-pro/card.toml +++ b/models/black-forest-labs/flux-2-pro/card.toml @@ -31,12 +31,60 @@ url = "https://openrouter.ai/black-forest-labs/flux.2-pro" references = { id = "black-forest-labs/flux.2-pro", max = 8 } [providers.fal] -endpoints = [ - { id = "fal-ai/flux-2-pro", input = "text", source_url = "https://fal.ai/models/fal-ai/flux-2-pro/api" }, - { id = "fal-ai/flux-2-pro/edit", input = "image", source_url = "https://fal.ai/models/fal-ai/flux-2-pro/edit/api" }, -] provider = "fal" id = "fal-ai/flux-2-pro" -pricing = { type = "per_image_flat", usd = 0.03 } +pricing = { type = "per_image_flat", usd = 0.03, included_megapixels = 1, included_megapixels_scope = "output", usd_per_additional_megapixel = 0.015, input_megapixels_billed = true, megapixel_rounding = "ceil", source_url = "https://fal.ai/models/fal-ai/flux-2-pro/edit" } avg_cost_usd = 0.03 url = "https://fal.ai/models/fal-ai/flux-2-pro" + +[[providers.fal.endpoints]] +id = "fal-ai/flux-2-pro" +input = "text" +source_url = "https://fal.ai/models/fal-ai/flux-2-pro/api" + +[providers.fal.endpoints.parameters] +"enable_safety_checker" = { "type" = "boolean" } +"image_size" = { "enum" = [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", +] } +"image_size.height" = { "maximum" = 2560, "type" = "integer", "minimum" = 256, "multiple_of" = 16 } +"image_size.width" = { "maximum" = 2560, "type" = "integer", "minimum" = 256, "multiple_of" = 16 } +"output_format" = { "enum" = ["jpeg", "png"], "type" = "string" } +"prompt" = { "type" = "string" } +"safety_tolerance" = { "enum" = ["1", "2", "3", "4", "5"], "type" = "string" } +"seed" = { "type" = "integer" } + +[providers.fal.endpoints.image_constraints] +max_edge = 2560 +min_edge = 256 +max_pixels = 4194304 +step = 16 + +[[providers.fal.endpoints]] +id = "fal-ai/flux-2-pro/edit" +input = "image" +source_url = "https://fal.ai/models/fal-ai/flux-2-pro/edit/api" + +[providers.fal.endpoints.parameters] +"enable_safety_checker" = { "type" = "boolean" } +"image_size" = { "enum" = [ + "auto", + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", +] } +"image_size.height" = { "maximum" = 14142, "type" = "integer", "minimum" = 1 } +"image_size.width" = { "maximum" = 14142, "type" = "integer", "minimum" = 1 } +"image_urls" = { "type" = "array", "max_items" = 9, "source_url" = "https://fal.ai/models/fal-ai/flux-2-pro/edit" } +"output_format" = { "enum" = ["jpeg", "png"], "type" = "string" } +"prompt" = { "type" = "string" } +"safety_tolerance" = { "enum" = ["1", "2", "3", "4", "5"], "type" = "string" } +"seed" = { "type" = "integer" } diff --git a/models/bytedance/seedance-2.0/card.toml b/models/bytedance/seedance-2.0/card.toml index 3833802..285b077 100644 --- a/models/bytedance/seedance-2.0/card.toml +++ b/models/bytedance/seedance-2.0/card.toml @@ -4,8 +4,8 @@ section = "video.models" label = "Seedance 2.0" short_description = "ByteDance's video model — image-to-video with reference modes, up to 4K, at roughly two-thirds the price of Seedance 2.5." vendor = "bytedance" -aspect_ratios = ["16:9", "9:16", "1:1"] -min_duration = 5 +aspect_ratios = ["21:9", "16:9", "4:3", "1:1", "3:4", "9:16"] +min_duration = 4 max_duration = 15 audio = true speed_label = "slow" @@ -17,10 +17,6 @@ basis = "model" source_url = "https://seed.bytedance.com/en/blog/seedance-2-0-%E6%AD%A3%E5%BC%8F%E5%8F%91%E5%B8%83" [providers.fal] -endpoints = [ - { id = "bytedance/seedance-2.0/image-to-video", input = "image", source_url = "https://fal.ai/models/bytedance/seedance-2.0/image-to-video/api" }, - { id = "bytedance/seedance-2.0/text-to-video", input = "text", source_url = "https://fal.ai/models/bytedance/seedance-2.0/text-to-video/api" }, -] provider = "fal" id = "bytedance/seedance-2.0/image-to-video" input = "image" @@ -41,3 +37,76 @@ url = "https://openrouter.ai/bytedance/seedance-2.0" [providers.openrouter.pricing] type = "per_second" usd_per_second = { 480p = { audio = 0.06726 }, 720p = { audio = 0.06726 } } + +[[providers.fal.endpoints]] +id = "bytedance/seedance-2.0/image-to-video" +input = "image" +source_url = "https://fal.ai/models/bytedance/seedance-2.0/image-to-video/api" + +[providers.fal.endpoints.parameters] +"aspect_ratio" = { "type" = "string", "enum" = [ + "auto", + "21:9", + "16:9", + "4:3", + "1:1", + "3:4", + "9:16", +] } +"bitrate_mode" = { "enum" = ["standard", "high"], "type" = "string" } +"codec" = { "enum" = ["auto", "H264", "H265"], "type" = "string" } +"duration" = { "enum" = [ + "auto", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", +], "type" = "string" } +"generate_audio" = { "type" = "boolean" } +"image_url" = { "type" = "string" } +"prompt" = { "type" = "string" } +"resolution" = { "enum" = ["480p", "720p", "1080p", "4k"], "type" = "string" } + +[[providers.fal.endpoints]] +id = "bytedance/seedance-2.0/text-to-video" +input = "text" +source_url = "https://fal.ai/models/bytedance/seedance-2.0/text-to-video/api" + +[providers.fal.endpoints.parameters] +"aspect_ratio" = { "type" = "string", "enum" = [ + "auto", + "21:9", + "16:9", + "4:3", + "1:1", + "3:4", + "9:16", +] } +"bitrate_mode" = { "enum" = ["standard", "high"], "type" = "string" } +"codec" = { "enum" = ["auto", "H264", "H265"], "type" = "string" } +"duration" = { "enum" = [ + "auto", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", +], "type" = "string" } +"generate_audio" = { "type" = "boolean" } +"prompt" = { "type" = "string" } +"resolution" = { "enum" = ["480p", "720p", "1080p", "4k"], "type" = "string" } diff --git a/models/bytedance/seedance-2.5/card.toml b/models/bytedance/seedance-2.5/card.toml index 5f3fbca..69c1bee 100644 --- a/models/bytedance/seedance-2.5/card.toml +++ b/models/bytedance/seedance-2.5/card.toml @@ -17,9 +17,6 @@ basis = "model" source_url = "https://seed.bytedance.com/en/blog/one-take-creation-flexible-referencing-introducing-seedance-2-5" [providers.fal] -endpoints = [ - { id = "bytedance/seedance-2.5/image-to-video", input = "image", source_url = "https://fal.ai/models/bytedance/seedance-2.5/image-to-video/api" }, -] provider = "fal" id = "bytedance/seedance-2.5/image-to-video" input = "image" @@ -33,3 +30,48 @@ type = "per_second" 480p = { audio = 0.2205 } 720p = { audio = 0.473 } 1080p = { audio = 1.164 } + +[[providers.fal.endpoints]] +id = "bytedance/seedance-2.5/image-to-video" +input = "image" +source_url = "https://fal.ai/models/bytedance/seedance-2.5/image-to-video/api" + +[providers.fal.endpoints.parameters] +"aspect_ratio" = { "type" = "string", "enum" = ["auto"] } +"bitrate_mode" = { "type" = "string", "enum" = ["standard", "high"] } +"codec" = { "type" = "string", "enum" = ["auto", "H264", "H265"] } +"draft" = { "type" = "boolean" } +"duration" = { "type" = "string", "enum" = [ + "auto", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25", + "26", + "27", + "28", + "29", + "30", +] } +"generate_audio" = { "type" = "boolean" } +"image_url" = { "type" = "string" } +"prompt" = { "type" = "string" } +"resolution" = { "type" = "string", "enum" = ["480p", "720p", "1080p"] } diff --git a/models/bytedance/seedream-5.0-lite/card.toml b/models/bytedance/seedream-5.0-lite/card.toml index a1235b0..96882c6 100644 --- a/models/bytedance/seedream-5.0-lite/card.toml +++ b/models/bytedance/seedream-5.0-lite/card.toml @@ -31,12 +31,65 @@ url = "https://openrouter.ai/bytedance-seed/seedream-5-0-lite" references = { id = "bytedance-seed/seedream-5-0-lite", max = 14 } [providers.fal] -endpoints = [ - { id = "bytedance/seedream/v5/lite/text-to-image", input = "text", source_url = "https://fal.ai/models/bytedance/seedream/v5/lite/text-to-image/api" }, - { id = "fal-ai/bytedance/seedream/v5/lite/edit", input = "image", source_url = "https://fal.ai/models/fal-ai/bytedance/seedream/v5/lite/edit/api" }, -] provider = "fal" id = "bytedance/seedream/v5/lite/text-to-image" pricing = { type = "per_image_flat", usd = 0.035 } avg_cost_usd = 0.035 url = "https://fal.ai/models/bytedance/seedream/v5/lite/text-to-image" + +[[providers.fal.endpoints]] +id = "bytedance/seedream/v5/lite/text-to-image" +input = "text" +source_url = "https://fal.ai/models/bytedance/seedream/v5/lite/text-to-image/api" + +[providers.fal.endpoints.parameters] +"enable_safety_checker" = { "type" = "boolean" } +"image_size" = { "enum" = [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto_2K", + "auto_3K", + "auto_4K", +] } +"image_size.height" = { "maximum" = 14142, "type" = "integer", "minimum" = 1 } +"image_size.width" = { "maximum" = 14142, "type" = "integer", "minimum" = 1 } +"max_images" = { "maximum" = 6, "minimum" = 1, "type" = "integer" } +"num_images" = { "maximum" = 6, "minimum" = 1, "type" = "integer" } +"prompt" = { "type" = "string" } + +[providers.fal.endpoints.image_constraints] +min_pixels = 3686400 +max_pixels = 16777216 + +[[providers.fal.endpoints]] +id = "fal-ai/bytedance/seedream/v5/lite/edit" +input = "image" +source_url = "https://fal.ai/models/fal-ai/bytedance/seedream/v5/lite/edit/api" + +[providers.fal.endpoints.parameters] +"enable_safety_checker" = { "type" = "boolean" } +"image_size" = { "enum" = [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto_2K", + "auto_3K", + "auto_4K", +] } +"image_size.height" = { "maximum" = 14142, "type" = "integer", "minimum" = 1 } +"image_size.width" = { "maximum" = 14142, "type" = "integer", "minimum" = 1 } +"image_urls" = { "type" = "array", "max_items" = 10 } +"max_images" = { "maximum" = 6, "minimum" = 1, "type" = "integer" } +"num_images" = { "maximum" = 6, "minimum" = 1, "type" = "integer" } +"prompt" = { "type" = "string" } + +[providers.fal.endpoints.image_constraints] +min_pixels = 3686400 +max_pixels = 16777216 diff --git a/models/bytedance/seedream-5.0-pro/card.toml b/models/bytedance/seedream-5.0-pro/card.toml index 0aaf36e..3c9cb82 100644 --- a/models/bytedance/seedream-5.0-pro/card.toml +++ b/models/bytedance/seedream-5.0-pro/card.toml @@ -30,10 +30,6 @@ url = "https://openrouter.ai/bytedance-seed/seedream-5-0-pro" references = { id = "bytedance-seed/seedream-5-0-pro", max = 14 } [providers.fal] -endpoints = [ - { id = "bytedance/seedream/v5/pro/edit", input = "image", source_url = "https://fal.ai/models/bytedance/seedream/v5/pro/edit/api" }, - { id = "bytedance/seedream/v5/pro/text-to-image", input = "text", source_url = "https://fal.ai/models/bytedance/seedream/v5/pro/text-to-image/api" }, -] provider = "fal" id = "bytedance/seedream/v5/pro/text-to-image" pricing = { type = "per_image_flat", usd = 0.0675 } @@ -44,3 +40,62 @@ url = "https://fal.ai/models/bytedance/seedream/v5/pro/text-to-image" min_pixels = 1_048_576 max_pixels = 4_194_304 aspect_ratio = { max = 16 } + +[[providers.fal.endpoints]] +id = "bytedance/seedream/v5/pro/edit" +input = "image" +source_url = "https://fal.ai/models/bytedance/seedream/v5/pro/edit/api" + +[providers.fal.endpoints.parameters] +"enable_safety_checker" = { "type" = "boolean" } +"enhance_prompt_mode" = { "enum" = ["standard", "fast"], "type" = "string" } +"image_size" = { "enum" = [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto_1K", + "auto_2K", +] } +"image_size.height" = { "maximum" = 14142, "type" = "integer", "minimum" = 1 } +"image_size.width" = { "maximum" = 14142, "type" = "integer", "minimum" = 1 } +"image_urls" = { "type" = "array", "max_items" = 10 } +"num_images" = { "maximum" = 6, "type" = "integer", "minimum" = 1 } +"output_format" = { "enum" = ["jpeg", "png"], "type" = "string" } +"prompt" = { "type" = "string" } + +[providers.fal.endpoints.image_constraints] +max_pixels = 4194304 +min_pixels = 1048576 +aspect_ratio = { "min" = 0.0625, "max" = 16 } + +[[providers.fal.endpoints]] +id = "bytedance/seedream/v5/pro/text-to-image" +input = "text" +source_url = "https://fal.ai/models/bytedance/seedream/v5/pro/text-to-image/api" + +[providers.fal.endpoints.parameters] +"enable_safety_checker" = { "type" = "boolean" } +"enhance_prompt_mode" = { "enum" = ["standard", "fast"], "type" = "string" } +"image_size" = { "enum" = [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto_1K", + "auto_2K", +] } +"image_size.height" = { "maximum" = 14142, "type" = "integer", "minimum" = 1 } +"image_size.width" = { "maximum" = 14142, "type" = "integer", "minimum" = 1 } +"num_images" = { "maximum" = 6, "type" = "integer", "minimum" = 1 } +"output_format" = { "enum" = ["jpeg", "png"], "type" = "string" } +"prompt" = { "type" = "string" } + +[providers.fal.endpoints.image_constraints] +max_pixels = 4194304 +min_pixels = 1048576 +aspect_ratio = { "min" = 0.0625, "max" = 16 } diff --git a/models/google/gemini-3-pro-image/card.toml b/models/google/gemini-3-pro-image/card.toml index d24f0fd..ffa065f 100644 --- a/models/google/gemini-3-pro-image/card.toml +++ b/models/google/gemini-3-pro-image/card.toml @@ -1,13 +1,12 @@ id = "google/gemini-3-pro-image" section = "image.models" -null_keys = ["styles", "sizes"] +null_keys = ["styles", "sizes", "constraints"] label = "Gemini 3 Pro Image" short_description = "High-quality multimodal model with native image generation" vendor = "google" speed_label = "medium" speed_max = "30s" -constraints = { max_edge = 1536 } pricing = { type = "per_token", input = 2, output = 12 } avg_cost_usd = 0.015 @@ -31,12 +30,67 @@ url = "https://openrouter.ai/google/gemini-3-pro-image-preview" references = { id = "google/gemini-3-pro-image-preview", max = 14 } [providers.fal] -endpoints = [ - { id = "fal-ai/nano-banana-pro", input = "text", source_url = "https://fal.ai/models/fal-ai/nano-banana-pro/api" }, - { id = "fal-ai/nano-banana-pro/edit", input = "image", source_url = "https://fal.ai/models/fal-ai/nano-banana-pro/edit/api" }, -] provider = "fal" id = "fal-ai/nano-banana-pro" -pricing = { type = "per_image_flat", usd = 0.15 } +pricing = { type = "per_image_flat", usd = 0.15, resolution_multipliers = { "4K" = 2 }, web_search_usd = 0.015, source_url = "https://fal.ai/models/fal-ai/nano-banana-pro" } avg_cost_usd = 0.15 url = "https://fal.ai/models/fal-ai/nano-banana-pro" + +[[providers.fal.endpoints]] +id = "fal-ai/nano-banana-pro" +input = "text" +source_url = "https://fal.ai/models/fal-ai/nano-banana-pro/api" + +[providers.fal.endpoints.parameters] +"aspect_ratio" = { "type" = "string", "enum" = [ + "auto", + "21:9", + "16:9", + "3:2", + "4:3", + "5:4", + "1:1", + "4:5", + "3:4", + "2:3", + "9:16", +] } +"enable_web_search" = { "type" = "boolean" } +"limit_generations" = { "type" = "boolean" } +"num_images" = { "minimum" = 1, "maximum" = 4, "type" = "integer" } +"output_format" = { "type" = "string", "enum" = ["jpeg", "png", "webp"] } +"prompt" = { "max_length" = 50000, "type" = "string", "min_length" = 3 } +"resolution" = { "type" = "string", "enum" = ["1K", "2K", "4K"] } +"safety_tolerance" = { "type" = "string", "enum" = ["1", "2", "3", "4", "5", "6"] } +"seed" = { "type" = "integer" } +"system_prompt" = { "max_length" = 50000, "type" = "string" } + +[[providers.fal.endpoints]] +id = "fal-ai/nano-banana-pro/edit" +input = "image" +source_url = "https://fal.ai/models/fal-ai/nano-banana-pro/edit/api" + +[providers.fal.endpoints.parameters] +"aspect_ratio" = { "type" = "string", "enum" = [ + "auto", + "21:9", + "16:9", + "3:2", + "4:3", + "5:4", + "1:1", + "4:5", + "3:4", + "2:3", + "9:16", +] } +"enable_web_search" = { "type" = "boolean" } +"image_urls" = { "type" = "array", "max_items" = 14, "source_url" = "https://fal.ai/models/fal-ai/nano-banana-pro/edit" } +"limit_generations" = { "type" = "boolean" } +"num_images" = { "minimum" = 1, "maximum" = 4, "type" = "integer" } +"output_format" = { "type" = "string", "enum" = ["jpeg", "png", "webp"] } +"prompt" = { "max_length" = 50000, "type" = "string", "min_length" = 3 } +"resolution" = { "type" = "string", "enum" = ["1K", "2K", "4K"] } +"safety_tolerance" = { "type" = "string", "enum" = ["1", "2", "3", "4", "5", "6"] } +"seed" = { "type" = "integer" } +"system_prompt" = { "max_length" = 50000, "type" = "string" } diff --git a/models/google/gemini-3.1-flash-image-preview/card.toml b/models/google/gemini-3.1-flash-image-preview/card.toml index b5674e0..8dbb360 100644 --- a/models/google/gemini-3.1-flash-image-preview/card.toml +++ b/models/google/gemini-3.1-flash-image-preview/card.toml @@ -31,12 +31,75 @@ url = "https://openrouter.ai/google/gemini-3.1-flash-image" references = { id = "google/gemini-3.1-flash-image", max = 14 } [providers.fal] -endpoints = [ - { id = "fal-ai/nano-banana-2", input = "text", source_url = "https://fal.ai/models/fal-ai/nano-banana-2/api" }, - { id = "fal-ai/nano-banana-2/edit", input = "image", source_url = "https://fal.ai/models/fal-ai/nano-banana-2/edit/api" }, -] provider = "fal" id = "fal-ai/nano-banana-2" -pricing = { type = "per_image_flat", usd = 0.08 } +pricing = { type = "per_image_flat", usd = 0.08, resolution_multipliers = { "0.5K" = 0.75, "2K" = 1.5, "4K" = 2 }, web_search_usd = 0.015, high_thinking_usd = 0.002, source_url = "https://fal.ai/models/fal-ai/nano-banana-2" } avg_cost_usd = 0.08 url = "https://fal.ai/models/fal-ai/nano-banana-2" + +[[providers.fal.endpoints]] +id = "fal-ai/nano-banana-2" +input = "text" +source_url = "https://fal.ai/models/fal-ai/nano-banana-2/api" + +[providers.fal.endpoints.parameters] +"aspect_ratio" = { "enum" = [ + "auto", + "21:9", + "16:9", + "3:2", + "4:3", + "5:4", + "1:1", + "4:5", + "3:4", + "2:3", + "9:16", + "4:1", + "1:4", + "8:1", + "1:8", +], "type" = "string" } +"enable_web_search" = { "type" = "boolean" } +"limit_generations" = { "type" = "boolean" } +"num_images" = { "minimum" = 1, "maximum" = 4, "type" = "integer" } +"output_format" = { "enum" = ["jpeg", "png", "webp"], "type" = "string" } +"prompt" = { "min_length" = 3, "type" = "string", "max_length" = 50000 } +"resolution" = { "enum" = ["0.5K", "1K", "2K", "4K"], "type" = "string" } +"safety_tolerance" = { "enum" = ["1", "2", "3", "4", "5", "6"], "type" = "string" } +"seed" = { "type" = "integer" } +"system_prompt" = { "type" = "string", "max_length" = 50000 } + +[[providers.fal.endpoints]] +id = "fal-ai/nano-banana-2/edit" +input = "image" +source_url = "https://fal.ai/models/fal-ai/nano-banana-2/edit/api" + +[providers.fal.endpoints.parameters] +"aspect_ratio" = { "enum" = [ + "auto", + "21:9", + "16:9", + "3:2", + "4:3", + "5:4", + "1:1", + "4:5", + "3:4", + "2:3", + "9:16", + "4:1", + "1:4", + "8:1", + "1:8", +], "type" = "string" } +"enable_web_search" = { "type" = "boolean" } +"image_urls" = { "type" = "array", "max_items" = 14, "source_url" = "https://fal.ai/models/fal-ai/nano-banana-2/edit" } +"limit_generations" = { "type" = "boolean" } +"num_images" = { "minimum" = 1, "maximum" = 4, "type" = "integer" } +"output_format" = { "enum" = ["jpeg", "png", "webp"], "type" = "string" } +"prompt" = { "min_length" = 3, "type" = "string", "max_length" = 50000 } +"resolution" = { "enum" = ["0.5K", "1K", "2K", "4K"], "type" = "string" } +"safety_tolerance" = { "enum" = ["1", "2", "3", "4", "5", "6"], "type" = "string" } +"seed" = { "type" = "integer" } +"system_prompt" = { "type" = "string", "max_length" = 50000 } diff --git a/models/google/gemini-3.1-pro-preview/card.toml b/models/google/gemini-3.1-pro-preview/card.toml index d68b0e1..acb11d8 100644 --- a/models/google/gemini-3.1-pro-preview/card.toml +++ b/models/google/gemini-3.1-pro-preview/card.toml @@ -32,3 +32,36 @@ url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "google/gemini-3.1-pro-preview", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] + +[providers.vercel.token_pricing] +source_url = "https://ai-gateway.vercel.sh/v1/models" +unit = "usd_per_token" +input = "0.000002" +output = "0.000012" +input_cache_read = "0.0000002" +tiers = [ + { "meter" = "input", "minimum_input_tokens" = 0, "usd_per_token" = "0.000002", "maximum_input_tokens" = 200001 }, + { "meter" = "input", "minimum_input_tokens" = 200001, "usd_per_token" = "0.000004" }, + { "meter" = "output", "minimum_input_tokens" = 0, "usd_per_token" = "0.000012", "maximum_input_tokens" = 200001 }, + { "meter" = "output", "minimum_input_tokens" = 200001, "usd_per_token" = "0.000018" }, + { "meter" = "input_cache_read", "minimum_input_tokens" = 0, "usd_per_token" = "0.0000002", "maximum_input_tokens" = 200001 }, + { "meter" = "input_cache_read", "minimum_input_tokens" = 200001, "usd_per_token" = "0.0000004" }, +] + +[providers.vercel.capabilities] +source_url = "https://ai-gateway.vercel.sh/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.vercel.limits] +source_url = "https://ai-gateway.vercel.sh/v1/models" +context_tokens = 1000000 +max_output_tokens = 64000 + +[vision_tokenization] +source_url = "https://ai.google.dev/gemini-api/docs/media-resolution" +maximum_tokens_per_image = 2240 +token_counts_approximate = true +detail_token_budgets = { "unspecified" = 1120, "low" = 280, "medium" = 560, "high" = 1120, "ultra_high" = 2240 } diff --git a/models/google/gemini-3.7-flash/card.toml b/models/google/gemini-3.7-flash/card.toml index 9864665..c3c3c78 100644 --- a/models/google/gemini-3.7-flash/card.toml +++ b/models/google/gemini-3.7-flash/card.toml @@ -22,3 +22,28 @@ url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "google/gemini-3.7-flash", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] + +[providers.vercel.token_pricing] +source_url = "https://ai-gateway.vercel.sh/v1/models" +unit = "usd_per_token" +input = "0.00000075" +output = "0.00000375" +input_cache_read = "0.000000075" + +[providers.vercel.capabilities] +source_url = "https://ai-gateway.vercel.sh/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.vercel.limits] +source_url = "https://ai-gateway.vercel.sh/v1/models" +context_tokens = 1000000 +max_output_tokens = 65535 + +[vision_tokenization] +source_url = "https://ai.google.dev/gemini-api/docs/media-resolution" +maximum_tokens_per_image = 2240 +token_counts_approximate = true +detail_token_budgets = { "unspecified" = 1120, "low" = 280, "medium" = 560, "high" = 1120, "ultra_high" = 2240 } diff --git a/models/google/gemini-3.8-flash/card.toml b/models/google/gemini-3.8-flash/card.toml index 62a86d2..74959cc 100644 --- a/models/google/gemini-3.8-flash/card.toml +++ b/models/google/gemini-3.8-flash/card.toml @@ -22,3 +22,28 @@ url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "google/gemini-3.8-flash", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] + +[providers.vercel.token_pricing] +source_url = "https://ai-gateway.vercel.sh/v1/models" +unit = "usd_per_token" +input = "0.00000075" +output = "0.00000375" +input_cache_read = "0.000000075" + +[providers.vercel.capabilities] +source_url = "https://ai-gateway.vercel.sh/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.vercel.limits] +source_url = "https://ai-gateway.vercel.sh/v1/models" +context_tokens = 1000000 +max_output_tokens = 65535 + +[vision_tokenization] +source_url = "https://ai.google.dev/gemini-api/docs/media-resolution" +maximum_tokens_per_image = 2240 +token_counts_approximate = true +detail_token_budgets = { "unspecified" = 1120, "low" = 280, "medium" = 560, "high" = 1120, "ultra_high" = 2240 } diff --git a/models/google/veo-3.1-fast/card.toml b/models/google/veo-3.1-fast/card.toml index 6f91f75..6bd05dc 100644 --- a/models/google/veo-3.1-fast/card.toml +++ b/models/google/veo-3.1-fast/card.toml @@ -32,10 +32,6 @@ type = "per_second" 4k = { audio = 0.35, silent = 0.3 } [providers.fal] -endpoints = [ - { id = "fal-ai/veo3.1/fast", input = "text", source_url = "https://fal.ai/models/fal-ai/veo3.1/fast/api" }, - { id = "fal-ai/veo3.1/fast/image-to-video", input = "image", source_url = "https://fal.ai/models/fal-ai/veo3.1/fast/image-to-video/api" }, -] provider = "fal" id = "fal-ai/veo3.1/fast/image-to-video" input = "image" @@ -49,3 +45,34 @@ type = "per_second" 720p = { audio = 0.15, silent = 0.1 } 1080p = { audio = 0.15, silent = 0.1 } 4k = { audio = 0.35, silent = 0.3 } + +[[providers.fal.endpoints]] +id = "fal-ai/veo3.1/fast" +input = "text" +source_url = "https://fal.ai/models/fal-ai/veo3.1/fast/api" + +[providers.fal.endpoints.parameters] +"aspect_ratio" = { "enum" = ["16:9", "9:16"], "type" = "string" } +"auto_fix" = { "type" = "boolean" } +"duration" = { "enum" = ["4s", "6s", "8s"], "type" = "string" } +"generate_audio" = { "type" = "boolean" } +"prompt" = { "type" = "string", "max_length" = 20000 } +"resolution" = { "enum" = ["720p", "1080p", "4k"], "type" = "string" } +"safety_tolerance" = { "enum" = ["1", "2", "3", "4", "5", "6"], "type" = "string" } +"seed" = { "type" = "integer" } + +[[providers.fal.endpoints]] +id = "fal-ai/veo3.1/fast/image-to-video" +input = "image" +source_url = "https://fal.ai/models/fal-ai/veo3.1/fast/image-to-video/api" + +[providers.fal.endpoints.parameters] +"aspect_ratio" = { "enum" = ["auto", "16:9", "9:16"], "type" = "string" } +"auto_fix" = { "type" = "boolean" } +"duration" = { "enum" = ["4s", "6s", "8s"], "type" = "string" } +"generate_audio" = { "type" = "boolean" } +"image_url" = { "type" = "string" } +"prompt" = { "type" = "string", "max_length" = 20000 } +"resolution" = { "enum" = ["720p", "1080p", "4k"], "type" = "string" } +"safety_tolerance" = { "enum" = ["1", "2", "3", "4", "5", "6"], "type" = "string" } +"seed" = { "type" = "integer" } diff --git a/models/google/veo-3.1-lite/card.toml b/models/google/veo-3.1-lite/card.toml index 04e9eb9..a8e7d8a 100644 --- a/models/google/veo-3.1-lite/card.toml +++ b/models/google/veo-3.1-lite/card.toml @@ -31,10 +31,6 @@ type = "per_second" 1080p = { audio = 0.08, silent = 0.05 } [providers.fal] -endpoints = [ - { id = "fal-ai/veo3.1/lite", input = "text", source_url = "https://fal.ai/models/fal-ai/veo3.1/lite/api" }, - { id = "fal-ai/veo3.1/lite/image-to-video", input = "image", source_url = "https://fal.ai/models/fal-ai/veo3.1/lite/image-to-video/api" }, -] provider = "fal" id = "fal-ai/veo3.1/lite/image-to-video" input = "image" @@ -47,3 +43,34 @@ type = "per_second" [providers.fal.pricing.usd_per_second] 720p = { audio = 0.05, silent = 0.03 } 1080p = { audio = 0.08, silent = 0.05 } + +[[providers.fal.endpoints]] +id = "fal-ai/veo3.1/lite" +input = "text" +source_url = "https://fal.ai/models/fal-ai/veo3.1/lite/api" + +[providers.fal.endpoints.parameters] +"aspect_ratio" = { "enum" = ["16:9", "9:16"], "type" = "string" } +"auto_fix" = { "type" = "boolean" } +"duration" = { "enum" = ["4s", "6s", "8s"], "type" = "string" } +"generate_audio" = { "type" = "boolean" } +"prompt" = { "type" = "string", "max_length" = 20000 } +"resolution" = { "enum" = ["720p", "1080p"], "type" = "string" } +"safety_tolerance" = { "enum" = ["1", "2", "3", "4", "5", "6"], "type" = "string" } +"seed" = { "type" = "integer" } + +[[providers.fal.endpoints]] +id = "fal-ai/veo3.1/lite/image-to-video" +input = "image" +source_url = "https://fal.ai/models/fal-ai/veo3.1/lite/image-to-video/api" + +[providers.fal.endpoints.parameters] +"aspect_ratio" = { "enum" = ["auto", "16:9", "9:16"], "type" = "string" } +"auto_fix" = { "type" = "boolean" } +"duration" = { "enum" = ["4s", "6s", "8s"], "type" = "string" } +"generate_audio" = { "type" = "boolean" } +"image_url" = { "type" = "string" } +"prompt" = { "type" = "string", "max_length" = 20000 } +"resolution" = { "enum" = ["720p", "1080p"], "type" = "string" } +"safety_tolerance" = { "enum" = ["1", "2", "3", "4", "5", "6"], "type" = "string" } +"seed" = { "type" = "integer" } diff --git a/models/google/veo-3.1/card.toml b/models/google/veo-3.1/card.toml index 6c3b5cf..5d7d54c 100644 --- a/models/google/veo-3.1/card.toml +++ b/models/google/veo-3.1/card.toml @@ -32,10 +32,6 @@ type = "per_second" 4k = { audio = 0.6, silent = 0.4 } [providers.fal] -endpoints = [ - { id = "fal-ai/veo3.1", input = "text", source_url = "https://fal.ai/models/fal-ai/veo3.1/api" }, - { id = "fal-ai/veo3.1/image-to-video", input = "image", source_url = "https://fal.ai/models/fal-ai/veo3.1/image-to-video/api" }, -] provider = "fal" id = "fal-ai/veo3.1/image-to-video" input = "image" @@ -60,3 +56,34 @@ url = "https://openrouter.ai/google/veo-3.1" [providers.openrouter.pricing] type = "per_second" usd_per_second = { 720p = { audio = 0.4 }, 1080p = { audio = 0.4 } } + +[[providers.fal.endpoints]] +id = "fal-ai/veo3.1" +input = "text" +source_url = "https://fal.ai/models/fal-ai/veo3.1/api" + +[providers.fal.endpoints.parameters] +"aspect_ratio" = { "enum" = ["16:9", "9:16"], "type" = "string" } +"auto_fix" = { "type" = "boolean" } +"duration" = { "enum" = ["4s", "6s", "8s"], "type" = "string" } +"generate_audio" = { "type" = "boolean" } +"prompt" = { "type" = "string", "max_length" = 20000 } +"resolution" = { "enum" = ["720p", "1080p", "4k"], "type" = "string" } +"safety_tolerance" = { "enum" = ["1", "2", "3", "4", "5", "6"], "type" = "string" } +"seed" = { "type" = "integer" } + +[[providers.fal.endpoints]] +id = "fal-ai/veo3.1/image-to-video" +input = "image" +source_url = "https://fal.ai/models/fal-ai/veo3.1/image-to-video/api" + +[providers.fal.endpoints.parameters] +"aspect_ratio" = { "enum" = ["auto", "16:9", "9:16"], "type" = "string" } +"auto_fix" = { "type" = "boolean" } +"duration" = { "enum" = ["4s", "6s", "8s"], "type" = "string" } +"generate_audio" = { "type" = "boolean" } +"image_url" = { "type" = "string" } +"prompt" = { "type" = "string", "max_length" = 20000 } +"resolution" = { "enum" = ["720p", "1080p", "4k"], "type" = "string" } +"safety_tolerance" = { "enum" = ["1", "2", "3", "4", "5", "6"], "type" = "string" } +"seed" = { "type" = "integer" } diff --git a/models/microsoft/trellis-2/card.toml b/models/microsoft/trellis-2/card.toml index 2a18742..e34a219 100644 --- a/models/microsoft/trellis-2/card.toml +++ b/models/microsoft/trellis-2/card.toml @@ -20,3 +20,40 @@ source_url = "https://huggingface.co/microsoft/TRELLIS.2-4B" type = "per_generation_by_resolution" default_resolution = "1024" usd_by_resolution = { 512 = 0.25, 1024 = 0.3, 1536 = 0.35 } + +[[endpoints]] +id = "fal-ai/trellis-2" +input = "image" +source_url = "https://fal.ai/models/fal-ai/trellis-2/api" + +[endpoints.parameters] +"decimation_target" = { "type" = "integer", "maximum" = 2000000, "minimum" = 5000 } +"image_url" = { "type" = "string" } +"remesh" = { "type" = "boolean" } +"remesh_band" = { "type" = "number", "maximum" = 4, "minimum" = 0 } +"remesh_project" = { "type" = "number", "maximum" = 1, "minimum" = 0 } +"resolution" = { "enum" = [512, 1024, 1536], "type" = "integer" } +"seed" = { "type" = "integer" } +"shape_slat_guidance_interval_end" = { "type" = "number", "maximum" = 1, "minimum" = 0 } +"shape_slat_guidance_interval_start" = { "type" = "number", "maximum" = 1, "minimum" = 0 } +"shape_slat_guidance_rescale" = { "type" = "number", "maximum" = 1, "minimum" = 0 } +"shape_slat_guidance_strength" = { "type" = "number", "maximum" = 10, "minimum" = 0 } +"shape_slat_rescale_t" = { "type" = "number", "maximum" = 6, "minimum" = 1 } +"shape_slat_sampling_steps" = { "type" = "integer", "maximum" = 50, "minimum" = 1 } +"ss_guidance_interval_end" = { "type" = "number", "maximum" = 1, "minimum" = 0 } +"ss_guidance_interval_start" = { "type" = "number", "maximum" = 1, "minimum" = 0 } +"ss_guidance_rescale" = { "type" = "number", "maximum" = 1, "minimum" = 0 } +"ss_guidance_strength" = { "type" = "number", "maximum" = 10, "minimum" = 0 } +"ss_rescale_t" = { "type" = "number", "maximum" = 6, "minimum" = 1 } +"ss_sampling_steps" = { "type" = "integer", "maximum" = 50, "minimum" = 1 } +"tex_slat_guidance_interval_end" = { "type" = "number", "maximum" = 1, "minimum" = 0 } +"tex_slat_guidance_interval_start" = { "type" = "number", "maximum" = 1, "minimum" = 0 } +"tex_slat_guidance_rescale" = { "type" = "number", "maximum" = 1, "minimum" = 0 } +"tex_slat_guidance_strength" = { "type" = "number", "maximum" = 10, "minimum" = 0 } +"tex_slat_rescale_t" = { "type" = "number", "maximum" = 6, "minimum" = 1 } +"tex_slat_sampling_steps" = { "type" = "integer", "maximum" = 50, "minimum" = 1 } +"texture_size" = { "enum" = [1024, 2048, 4096], "type" = "integer" } +"uv_unwrap_angle_threshold_deg" = { "type" = "number", "maximum" = 180, "minimum" = 0 } +"uv_unwrap_global_iterations" = { "type" = "integer", "maximum" = 10, "minimum" = 1 } +"uv_unwrap_refine_iterations" = { "type" = "integer", "maximum" = 10, "minimum" = 0 } +"uv_unwrap_smooth_strength" = { "type" = "number", "maximum" = 10, "minimum" = 0 } diff --git a/models/openai/gpt-5.5-pro/card.toml b/models/openai/gpt-5.5-pro/card.toml index ab91624..4028861 100644 --- a/models/openai/gpt-5.5-pro/card.toml +++ b/models/openai/gpt-5.5-pro/card.toml @@ -22,3 +22,27 @@ url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "openai/gpt-5.5-pro", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] + +[providers.vercel.token_pricing] +source_url = "https://ai-gateway.vercel.sh/v1/models" +unit = "usd_per_token" +input = "0.00003" +output = "0.00018" +tiers = [ + { "meter" = "input", "minimum_input_tokens" = 0, "usd_per_token" = "0.00003", "maximum_input_tokens" = 272000 }, + { "meter" = "input", "minimum_input_tokens" = 272000, "usd_per_token" = "0.00006" }, + { "meter" = "output", "minimum_input_tokens" = 0, "usd_per_token" = "0.00018", "maximum_input_tokens" = 272000 }, + { "meter" = "output", "minimum_input_tokens" = 272000, "usd_per_token" = "0.00027" }, +] + +[providers.vercel.capabilities] +source_url = "https://ai-gateway.vercel.sh/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.vercel.limits] +source_url = "https://ai-gateway.vercel.sh/v1/models" +context_tokens = 1000000 +max_output_tokens = 128000 diff --git a/models/openai/gpt-5.5/card.toml b/models/openai/gpt-5.5/card.toml index 5070178..f14006b 100644 --- a/models/openai/gpt-5.5/card.toml +++ b/models/openai/gpt-5.5/card.toml @@ -31,3 +31,39 @@ url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "openai/gpt-5.5", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] + +[providers.vercel.token_pricing] +source_url = "https://ai-gateway.vercel.sh/v1/models" +unit = "usd_per_token" +input = "0.000005" +output = "0.00003" +input_cache_read = "0.0000005" +tiers = [ + { "meter" = "input", "minimum_input_tokens" = 0, "usd_per_token" = "0.000005", "maximum_input_tokens" = 272000 }, + { "meter" = "input", "minimum_input_tokens" = 272000, "usd_per_token" = "0.00001" }, + { "meter" = "output", "minimum_input_tokens" = 0, "usd_per_token" = "0.00003", "maximum_input_tokens" = 272000 }, + { "meter" = "output", "minimum_input_tokens" = 272000, "usd_per_token" = "0.000045" }, + { "meter" = "input_cache_read", "minimum_input_tokens" = 0, "usd_per_token" = "0.0000005", "maximum_input_tokens" = 272000 }, + { "meter" = "input_cache_read", "minimum_input_tokens" = 272000, "usd_per_token" = "0.000001" }, +] + +[providers.vercel.capabilities] +source_url = "https://ai-gateway.vercel.sh/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.vercel.limits] +source_url = "https://ai-gateway.vercel.sh/v1/models" +context_tokens = 1000000 +max_output_tokens = 128000 + +[vision_tokenization] +source_url = "https://developers.openai.com/api/docs/guides/images-vision" +patch_size_px = 32 +token_multiplier = 1.2 +token_rounding = "ceil" +maximum_patch_count = 30000 +detail_patch_budgets = { "high" = 2500, "original" = 10000, "auto" = 10000 } +detail_maximum_edges = { "low" = 512, "high" = 2048, "original" = 6000, "auto" = 6000 } diff --git a/models/openai/gpt-5.6-luna/card.toml b/models/openai/gpt-5.6-luna/card.toml index 760fc9b..b85bf4b 100644 --- a/models/openai/gpt-5.6-luna/card.toml +++ b/models/openai/gpt-5.6-luna/card.toml @@ -32,3 +32,42 @@ url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "openai/gpt-5.6-luna", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] + +[providers.vercel.token_pricing] +source_url = "https://ai-gateway.vercel.sh/v1/models" +unit = "usd_per_token" +input = "0.0000002" +output = "0.0000012" +input_cache_read = "0.00000002" +input_cache_write = "0.00000025" +tiers = [ + { "meter" = "input", "minimum_input_tokens" = 0, "usd_per_token" = "0.0000002", "maximum_input_tokens" = 272000 }, + { "meter" = "input", "minimum_input_tokens" = 272000, "usd_per_token" = "0.0000004" }, + { "meter" = "output", "minimum_input_tokens" = 0, "usd_per_token" = "0.0000012", "maximum_input_tokens" = 272000 }, + { "meter" = "output", "minimum_input_tokens" = 272000, "usd_per_token" = "0.0000018" }, + { "meter" = "input_cache_read", "minimum_input_tokens" = 0, "usd_per_token" = "0.00000002", "maximum_input_tokens" = 272000 }, + { "meter" = "input_cache_read", "minimum_input_tokens" = 272000, "usd_per_token" = "0.00000004" }, + { "meter" = "input_cache_write", "minimum_input_tokens" = 0, "usd_per_token" = "0.00000025", "maximum_input_tokens" = 272000 }, + { "meter" = "input_cache_write", "minimum_input_tokens" = 272000, "usd_per_token" = "0.0000005" }, +] + +[providers.vercel.capabilities] +source_url = "https://ai-gateway.vercel.sh/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.vercel.limits] +source_url = "https://ai-gateway.vercel.sh/v1/models" +context_tokens = 1050000 +max_output_tokens = 128000 + +[vision_tokenization] +source_url = "https://developers.openai.com/api/docs/guides/images-vision" +patch_size_px = 32 +token_multiplier = 1.2 +token_rounding = "ceil" +maximum_patch_count = 30000 +detail_patch_budgets = { "high" = 2500 } +detail_maximum_edges = { "low" = 512, "high" = 2048, "original" = 65535, "auto" = 65535 } diff --git a/models/openai/gpt-5.6-sol/card.toml b/models/openai/gpt-5.6-sol/card.toml index eaa4933..79c6176 100644 --- a/models/openai/gpt-5.6-sol/card.toml +++ b/models/openai/gpt-5.6-sol/card.toml @@ -32,3 +32,42 @@ url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "openai/gpt-5.6-sol", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] + +[providers.vercel.token_pricing] +source_url = "https://ai-gateway.vercel.sh/v1/models" +unit = "usd_per_token" +input = "0.000004" +output = "0.00002" +input_cache_read = "0.0000004" +input_cache_write = "0.000005" +tiers = [ + { "meter" = "input", "minimum_input_tokens" = 0, "usd_per_token" = "0.000004", "maximum_input_tokens" = 272000 }, + { "meter" = "input", "minimum_input_tokens" = 272000, "usd_per_token" = "0.000008" }, + { "meter" = "output", "minimum_input_tokens" = 0, "usd_per_token" = "0.00002", "maximum_input_tokens" = 272000 }, + { "meter" = "output", "minimum_input_tokens" = 272000, "usd_per_token" = "0.00003" }, + { "meter" = "input_cache_read", "minimum_input_tokens" = 0, "usd_per_token" = "0.0000004", "maximum_input_tokens" = 272000 }, + { "meter" = "input_cache_read", "minimum_input_tokens" = 272000, "usd_per_token" = "0.0000008" }, + { "meter" = "input_cache_write", "minimum_input_tokens" = 0, "usd_per_token" = "0.000005", "maximum_input_tokens" = 272000 }, + { "meter" = "input_cache_write", "minimum_input_tokens" = 272000, "usd_per_token" = "0.00001" }, +] + +[providers.vercel.capabilities] +source_url = "https://ai-gateway.vercel.sh/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.vercel.limits] +source_url = "https://ai-gateway.vercel.sh/v1/models" +context_tokens = 1050000 +max_output_tokens = 128000 + +[vision_tokenization] +source_url = "https://developers.openai.com/api/docs/guides/images-vision" +patch_size_px = 32 +token_multiplier = 1.2 +token_rounding = "ceil" +maximum_patch_count = 30000 +detail_patch_budgets = { "high" = 2500 } +detail_maximum_edges = { "low" = 512, "high" = 2048, "original" = 65535, "auto" = 65535 } diff --git a/models/openai/gpt-5.6-terra/card.toml b/models/openai/gpt-5.6-terra/card.toml index 4205deb..53437ce 100644 --- a/models/openai/gpt-5.6-terra/card.toml +++ b/models/openai/gpt-5.6-terra/card.toml @@ -32,3 +32,42 @@ url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "openai/gpt-5.6-terra", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] + +[providers.vercel.token_pricing] +source_url = "https://ai-gateway.vercel.sh/v1/models" +unit = "usd_per_token" +input = "0.000002" +output = "0.000012" +input_cache_read = "0.0000002" +input_cache_write = "0.0000025" +tiers = [ + { "meter" = "input", "minimum_input_tokens" = 0, "usd_per_token" = "0.000002", "maximum_input_tokens" = 272000 }, + { "meter" = "input", "minimum_input_tokens" = 272000, "usd_per_token" = "0.000004" }, + { "meter" = "output", "minimum_input_tokens" = 0, "usd_per_token" = "0.000012", "maximum_input_tokens" = 272000 }, + { "meter" = "output", "minimum_input_tokens" = 272000, "usd_per_token" = "0.000018" }, + { "meter" = "input_cache_read", "minimum_input_tokens" = 0, "usd_per_token" = "0.0000002", "maximum_input_tokens" = 272000 }, + { "meter" = "input_cache_read", "minimum_input_tokens" = 272000, "usd_per_token" = "0.0000004" }, + { "meter" = "input_cache_write", "minimum_input_tokens" = 0, "usd_per_token" = "0.0000025", "maximum_input_tokens" = 272000 }, + { "meter" = "input_cache_write", "minimum_input_tokens" = 272000, "usd_per_token" = "0.000005" }, +] + +[providers.vercel.capabilities] +source_url = "https://ai-gateway.vercel.sh/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.vercel.limits] +source_url = "https://ai-gateway.vercel.sh/v1/models" +context_tokens = 1050000 +max_output_tokens = 128000 + +[vision_tokenization] +source_url = "https://developers.openai.com/api/docs/guides/images-vision" +patch_size_px = 32 +token_multiplier = 1.2 +token_rounding = "ceil" +maximum_patch_count = 30000 +detail_patch_budgets = { "high" = 2500 } +detail_maximum_edges = { "low" = 512, "high" = 2048, "original" = 65535, "auto" = 65535 } diff --git a/models/openai/gpt-6-astra/card.toml b/models/openai/gpt-6-astra/card.toml index 6321568..ce79565 100644 --- a/models/openai/gpt-6-astra/card.toml +++ b/models/openai/gpt-6-astra/card.toml @@ -32,3 +32,42 @@ url = "https://ai-gateway.vercel.sh/v1/models" endpoints = [ { id = "openai/gpt-6-astra", input = "text", source_url = "https://ai-gateway.vercel.sh/v1/models" }, ] + +[providers.vercel.token_pricing] +source_url = "https://ai-gateway.vercel.sh/v1/models" +unit = "usd_per_token" +input = "0.00001" +output = "0.00005" +input_cache_read = "0.000001" +input_cache_write = "0.0000125" +tiers = [ + { "meter" = "input", "minimum_input_tokens" = 0, "usd_per_token" = "0.00001", "maximum_input_tokens" = 272001 }, + { "meter" = "input", "minimum_input_tokens" = 272001, "usd_per_token" = "0.00002" }, + { "meter" = "output", "minimum_input_tokens" = 0, "usd_per_token" = "0.00005", "maximum_input_tokens" = 272001 }, + { "meter" = "output", "minimum_input_tokens" = 272001, "usd_per_token" = "0.000075" }, + { "meter" = "input_cache_read", "minimum_input_tokens" = 0, "usd_per_token" = "0.000001", "maximum_input_tokens" = 272001 }, + { "meter" = "input_cache_read", "minimum_input_tokens" = 272001, "usd_per_token" = "0.000002" }, + { "meter" = "input_cache_write", "minimum_input_tokens" = 0, "usd_per_token" = "0.0000125", "maximum_input_tokens" = 272001 }, + { "meter" = "input_cache_write", "minimum_input_tokens" = 272001, "usd_per_token" = "0.000025" }, +] + +[providers.vercel.capabilities] +source_url = "https://ai-gateway.vercel.sh/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.vercel.limits] +source_url = "https://ai-gateway.vercel.sh/v1/models" +context_tokens = 1050000 +max_output_tokens = 128000 + +[vision_tokenization] +source_url = "https://developers.openai.com/api/docs/guides/images-vision" +patch_size_px = 32 +token_multiplier = 1.2 +token_rounding = "ceil" +maximum_patch_count = 30000 +detail_patch_budgets = { "high" = 2500 } +detail_maximum_edges = { "low" = 512, "high" = 65535, "original" = 65535, "auto" = 65535 } diff --git a/models/openai/gpt-image-2.5-flare/card.toml b/models/openai/gpt-image-2.5-flare/card.toml index 78600d6..a487c1b 100644 --- a/models/openai/gpt-image-2.5-flare/card.toml +++ b/models/openai/gpt-image-2.5-flare/card.toml @@ -36,8 +36,54 @@ references = { id = "openai/gpt-image-2.5-flare", max = 16 } [providers.fal] endpoints = [ - { id = "openai/gpt-image-2.5/flare/edit", input = "image", source_url = "https://fal.ai/models/openai/gpt-image-2.5/flare/edit/api" }, - { id = "openai/gpt-image-2.5/flare/text-to-image", input = "text", source_url = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image/api" }, + { "id" = "openai/gpt-image-2.5/flare/edit", "input" = "image", "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/edit/api", "parameters" = { "prompt" = { "type" = "string", "min_length" = 1, "max_length" = 32000 }, "num_images" = { "type" = "integer", "minimum" = 1, "maximum" = 10 }, "quality" = { "type" = "string", "enum" = [ + "auto", + "low", + "medium", + "high", + "xhigh", + "max", + ] }, "background" = { "type" = "string", "enum" = [ + "auto", + "transparent", + "opaque", + ] }, "output_format" = { "type" = "string", "enum" = [ + "jpeg", + "png", + "webp", + ] }, "image_urls" = { "type" = "array", "max_items" = 16 }, "output_compression" = { "type" = "integer", "minimum" = 0, "maximum" = 100 }, "image_size" = { "enum" = [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto", + ] }, "image_size.width" = { "type" = "integer", "minimum" = 1, "maximum" = 3840, "multiple_of" = 16 }, "image_size.height" = { "type" = "integer", "minimum" = 1, "maximum" = 3840, "multiple_of" = 16 } }, "image_constraints" = { "min_pixels" = 655360, "max_pixels" = 8294400, "step" = 16, "max_edge" = 3840, "aspect_ratio" = { "max" = 3 } } }, + { "id" = "openai/gpt-image-2.5/flare/text-to-image", "input" = "text", "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image/api", "parameters" = { "prompt" = { "type" = "string", "min_length" = 1, "max_length" = 32000 }, "num_images" = { "type" = "integer", "minimum" = 1, "maximum" = 10 }, "quality" = { "type" = "string", "enum" = [ + "auto", + "low", + "medium", + "high", + "xhigh", + "max", + ] }, "background" = { "type" = "string", "enum" = [ + "auto", + "transparent", + "opaque", + ] }, "output_format" = { "type" = "string", "enum" = [ + "jpeg", + "png", + "webp", + ] }, "output_compression" = { "type" = "integer", "minimum" = 0, "maximum" = 100 }, "image_size" = { "enum" = [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto", + ] }, "image_size.width" = { "type" = "integer", "minimum" = 1, "maximum" = 3840, "multiple_of" = 16 }, "image_size.height" = { "type" = "integer", "minimum" = 1, "maximum" = 3840, "multiple_of" = 16 } }, "image_constraints" = { "min_pixels" = 655360, "max_pixels" = 8294400, "step" = 16, "max_edge" = 3840, "aspect_ratio" = { "max" = 3 } } }, ] provider = "fal" id = "openai/gpt-image-2.5/flare/text-to-image" @@ -46,6 +92,8 @@ url = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" references = { id = "openai/gpt-image-2.5/flare/edit", max = 16 } [providers.fal.pricing] +source_url = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" +rounding_usd = 0.0001 type = "per_token" input = 5 cached_input = 1.25 @@ -60,3 +108,49 @@ max_edge = 3840 min_pixels = 655_360 max_pixels = 8_294_400 aspect_ratio = { max = 3 } + +[output_token_calculator] +source_url = "https://developers.openai.com/api/docs/guides/image-generation" +source_js_url = "https://developers.openai.com/_astro/GptImageTokenCalculator.react.DukR73TZ.js" +area_offset = 2000000 +area_divisor = 4000000 +short_axis_rounding = "nearest_ties_even" +token_rounding = "ceil" +quality_axes = { "low" = 16, "medium" = 24, "high" = 48, "xhigh" = 64, "max" = 96 } +examples = [ + { "width" = 1024, "height" = 768, "quality" = "low", "output_tokens" = 134, "usd" = 0.00402, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 1024, "height" = 1024, "quality" = "low", "output_tokens" = 196, "usd" = 0.00588, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 1024, "height" = 1536, "quality" = "low", "output_tokens" = 158, "usd" = 0.00474, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 1536, "height" = 1024, "quality" = "low", "output_tokens" = 158, "usd" = 0.00474, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, + { "width" = 1920, "height" = 1080, "quality" = "low", "usd" = 0.00441, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 2560, "height" = 1440, "quality" = "low", "output_tokens" = 205, "usd" = 0.00615, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 3840, "height" = 2160, "quality" = "low", "output_tokens" = 371, "usd" = 0.01113, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 1024, "height" = 768, "quality" = "medium", "output_tokens" = 301, "usd" = 0.00903, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 1024, "height" = 1024, "quality" = "medium", "output_tokens" = 439, "usd" = 0.01317, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 1024, "height" = 1536, "quality" = "medium", "output_tokens" = 343, "usd" = 0.01029, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 1536, "height" = 1024, "quality" = "medium", "output_tokens" = 343, "usd" = 0.01029, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, + { "width" = 1920, "height" = 1080, "quality" = "medium", "usd" = 0.01029, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 2560, "height" = 1440, "quality" = "medium", "output_tokens" = 478, "usd" = 0.01434, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 3840, "height" = 2160, "quality" = "medium", "output_tokens" = 865, "usd" = 0.02595, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 1024, "height" = 768, "quality" = "high", "output_tokens" = 1204, "usd" = 0.03612, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 1024, "height" = 1024, "quality" = "high", "output_tokens" = 1756, "usd" = 0.05268, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 1024, "height" = 1536, "quality" = "high", "output_tokens" = 1372, "usd" = 0.04116, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 1536, "height" = 1024, "quality" = "high", "output_tokens" = 1372, "usd" = 0.04116, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, + { "width" = 1920, "height" = 1080, "quality" = "high", "usd" = 0.0396, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 2560, "height" = 1440, "quality" = "high", "output_tokens" = 1843, "usd" = 0.05529, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 3840, "height" = 2160, "quality" = "high", "output_tokens" = 3336, "usd" = 0.10008, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 1024, "height" = 768, "quality" = "xhigh", "output_tokens" = 2140, "usd" = 0.0642, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 1024, "height" = 1024, "quality" = "xhigh", "output_tokens" = 3122, "usd" = 0.09366, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 1024, "height" = 1536, "quality" = "xhigh", "output_tokens" = 2459, "usd" = 0.07377, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 1536, "height" = 1024, "quality" = "xhigh", "output_tokens" = 2459, "usd" = 0.07377, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, + { "width" = 1920, "height" = 1080, "quality" = "xhigh", "usd" = 0.07041, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 2560, "height" = 1440, "quality" = "xhigh", "output_tokens" = 3276, "usd" = 0.09828, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 3840, "height" = 2160, "quality" = "xhigh", "output_tokens" = 5930, "usd" = 0.1779, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 1024, "height" = 768, "quality" = "max", "output_tokens" = 4815, "usd" = 0.14445, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 1024, "height" = 1024, "quality" = "max", "output_tokens" = 7024, "usd" = 0.21072, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 1024, "height" = 1536, "quality" = "max", "output_tokens" = 5488, "usd" = 0.16464, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 1536, "height" = 1024, "quality" = "max", "output_tokens" = 5488, "usd" = 0.16464, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, + { "width" = 1920, "height" = 1080, "quality" = "max", "usd" = 0.1584, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 2560, "height" = 1440, "quality" = "max", "output_tokens" = 7370, "usd" = 0.2211, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, + { "width" = 3840, "height" = 2160, "quality" = "max", "output_tokens" = 13342, "usd" = 0.40026, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, +] diff --git a/models/openai/gpt-image-2.5-sunburst/card.toml b/models/openai/gpt-image-2.5-sunburst/card.toml index c189941..719b92c 100644 --- a/models/openai/gpt-image-2.5-sunburst/card.toml +++ b/models/openai/gpt-image-2.5-sunburst/card.toml @@ -36,8 +36,54 @@ references = { id = "openai/gpt-image-2.5-sunburst", max = 16 } [providers.fal] endpoints = [ - { id = "openai/gpt-image-2.5/sunburst/edit", input = "image", source_url = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/edit/api" }, - { id = "openai/gpt-image-2.5/sunburst/text-to-image", input = "text", source_url = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image/api" }, + { "id" = "openai/gpt-image-2.5/sunburst/edit", "input" = "image", "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/edit/api", "parameters" = { "prompt" = { "type" = "string", "min_length" = 1, "max_length" = 32000 }, "num_images" = { "type" = "integer", "minimum" = 1, "maximum" = 10 }, "quality" = { "type" = "string", "enum" = [ + "auto", + "low", + "medium", + "high", + "xhigh", + "max", + ] }, "background" = { "type" = "string", "enum" = [ + "auto", + "transparent", + "opaque", + ] }, "output_format" = { "type" = "string", "enum" = [ + "jpeg", + "png", + "webp", + ] }, "image_urls" = { "type" = "array", "max_items" = 16 }, "output_compression" = { "type" = "integer", "minimum" = 0, "maximum" = 100 }, "image_size" = { "enum" = [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto", + ] }, "image_size.width" = { "type" = "integer", "minimum" = 1, "maximum" = 3840, "multiple_of" = 16 }, "image_size.height" = { "type" = "integer", "minimum" = 1, "maximum" = 3840, "multiple_of" = 16 } }, "image_constraints" = { "min_pixels" = 655360, "max_pixels" = 8294400, "step" = 16, "max_edge" = 3840, "aspect_ratio" = { "max" = 3 } } }, + { "id" = "openai/gpt-image-2.5/sunburst/text-to-image", "input" = "text", "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image/api", "parameters" = { "prompt" = { "type" = "string", "min_length" = 1, "max_length" = 32000 }, "num_images" = { "type" = "integer", "minimum" = 1, "maximum" = 10 }, "quality" = { "type" = "string", "enum" = [ + "auto", + "low", + "medium", + "high", + "xhigh", + "max", + ] }, "background" = { "type" = "string", "enum" = [ + "auto", + "transparent", + "opaque", + ] }, "output_format" = { "type" = "string", "enum" = [ + "jpeg", + "png", + "webp", + ] }, "output_compression" = { "type" = "integer", "minimum" = 0, "maximum" = 100 }, "image_size" = { "enum" = [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto", + ] }, "image_size.width" = { "type" = "integer", "minimum" = 1, "maximum" = 3840, "multiple_of" = 16 }, "image_size.height" = { "type" = "integer", "minimum" = 1, "maximum" = 3840, "multiple_of" = 16 } }, "image_constraints" = { "min_pixels" = 655360, "max_pixels" = 8294400, "step" = 16, "max_edge" = 3840, "aspect_ratio" = { "max" = 3 } } }, ] provider = "fal" id = "openai/gpt-image-2.5/sunburst/text-to-image" @@ -46,6 +92,8 @@ url = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" references = { id = "openai/gpt-image-2.5/sunburst/edit", max = 16 } [providers.fal.pricing] +source_url = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" +rounding_usd = 0.0001 type = "per_token" input = 5 cached_input = 1.25 @@ -60,3 +108,49 @@ max_edge = 3840 min_pixels = 655_360 max_pixels = 8_294_400 aspect_ratio = { max = 3 } + +[output_token_calculator] +source_url = "https://developers.openai.com/api/docs/guides/image-generation" +source_js_url = "https://developers.openai.com/_astro/GptImageTokenCalculator.react.DukR73TZ.js" +area_offset = 2000000 +area_divisor = 4000000 +short_axis_rounding = "nearest_ties_even" +token_rounding = "ceil" +quality_axes = { "low" = 16, "medium" = 24, "high" = 48, "xhigh" = 64, "max" = 96 } +examples = [ + { "width" = 1024, "height" = 768, "quality" = "low", "output_tokens" = 134, "usd" = 0.00402, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 1024, "height" = 1024, "quality" = "low", "output_tokens" = 196, "usd" = 0.00588, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 1024, "height" = 1536, "quality" = "low", "output_tokens" = 158, "usd" = 0.00474, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 1536, "height" = 1024, "quality" = "low", "output_tokens" = 158, "usd" = 0.00474, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, + { "width" = 1920, "height" = 1080, "quality" = "low", "usd" = 0.00441, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 2560, "height" = 1440, "quality" = "low", "output_tokens" = 205, "usd" = 0.00615, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 3840, "height" = 2160, "quality" = "low", "output_tokens" = 371, "usd" = 0.01113, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 1024, "height" = 768, "quality" = "medium", "output_tokens" = 301, "usd" = 0.00903, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 1024, "height" = 1024, "quality" = "medium", "output_tokens" = 439, "usd" = 0.01317, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 1024, "height" = 1536, "quality" = "medium", "output_tokens" = 343, "usd" = 0.01029, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 1536, "height" = 1024, "quality" = "medium", "output_tokens" = 343, "usd" = 0.01029, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, + { "width" = 1920, "height" = 1080, "quality" = "medium", "usd" = 0.01029, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 2560, "height" = 1440, "quality" = "medium", "output_tokens" = 478, "usd" = 0.01434, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 3840, "height" = 2160, "quality" = "medium", "output_tokens" = 865, "usd" = 0.02595, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 1024, "height" = 768, "quality" = "high", "output_tokens" = 1204, "usd" = 0.03612, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 1024, "height" = 1024, "quality" = "high", "output_tokens" = 1756, "usd" = 0.05268, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 1024, "height" = 1536, "quality" = "high", "output_tokens" = 1372, "usd" = 0.04116, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 1536, "height" = 1024, "quality" = "high", "output_tokens" = 1372, "usd" = 0.04116, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, + { "width" = 1920, "height" = 1080, "quality" = "high", "usd" = 0.0396, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 2560, "height" = 1440, "quality" = "high", "output_tokens" = 1843, "usd" = 0.05529, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 3840, "height" = 2160, "quality" = "high", "output_tokens" = 3336, "usd" = 0.10008, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 1024, "height" = 768, "quality" = "xhigh", "output_tokens" = 2140, "usd" = 0.0642, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 1024, "height" = 1024, "quality" = "xhigh", "output_tokens" = 3122, "usd" = 0.09366, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 1024, "height" = 1536, "quality" = "xhigh", "output_tokens" = 2459, "usd" = 0.07377, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 1536, "height" = 1024, "quality" = "xhigh", "output_tokens" = 2459, "usd" = 0.07377, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, + { "width" = 1920, "height" = 1080, "quality" = "xhigh", "usd" = 0.07041, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 2560, "height" = 1440, "quality" = "xhigh", "output_tokens" = 3276, "usd" = 0.09828, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 3840, "height" = 2160, "quality" = "xhigh", "output_tokens" = 5930, "usd" = 0.1779, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 1024, "height" = 768, "quality" = "max", "output_tokens" = 4815, "usd" = 0.14445, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 1024, "height" = 1024, "quality" = "max", "output_tokens" = 7024, "usd" = 0.21072, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 1024, "height" = 1536, "quality" = "max", "output_tokens" = 5488, "usd" = 0.16464, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 1536, "height" = 1024, "quality" = "max", "output_tokens" = 5488, "usd" = 0.16464, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, + { "width" = 1920, "height" = 1080, "quality" = "max", "usd" = 0.1584, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 2560, "height" = 1440, "quality" = "max", "output_tokens" = 7370, "usd" = 0.2211, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, + { "width" = 3840, "height" = 2160, "quality" = "max", "output_tokens" = 13342, "usd" = 0.40026, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, +] diff --git a/models/openai/gpt-image-2/card.toml b/models/openai/gpt-image-2/card.toml index ef42afe..61e2c55 100644 --- a/models/openai/gpt-image-2/card.toml +++ b/models/openai/gpt-image-2/card.toml @@ -33,8 +33,50 @@ references = { id = "openai/gpt-image-2", max = 16 } [providers.fal] endpoints = [ - { id = "openai/gpt-image-2", input = "text", source_url = "https://fal.ai/models/openai/gpt-image-2/api" }, - { id = "openai/gpt-image-2/edit", input = "image", source_url = "https://fal.ai/models/openai/gpt-image-2/edit/api" }, + { "id" = "openai/gpt-image-2", "input" = "text", "source_url" = "https://fal.ai/models/openai/gpt-image-2/api", "parameters" = { "prompt" = { "type" = "string", "min_length" = 2, "max_length" = 32000 }, "num_images" = { "type" = "integer", "minimum" = 1, "maximum" = 4 }, "quality" = { "type" = "string", "enum" = [ + "auto", + "low", + "medium", + "high", + ] }, "background" = { "type" = "string", "enum" = [ + "auto", + "transparent", + "opaque", + ] }, "output_format" = { "type" = "string", "enum" = [ + "jpeg", + "png", + "webp", + ] }, "image_size" = { "enum" = [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto", + ] }, "image_size.width" = { "type" = "integer", "minimum" = 1, "maximum" = 3840, "multiple_of" = 16 }, "image_size.height" = { "type" = "integer", "minimum" = 1, "maximum" = 3840, "multiple_of" = 16 } }, "image_constraints" = { "min_pixels" = 655360, "max_pixels" = 8294400, "step" = 16, "max_edge" = 3840, "aspect_ratio" = { "max" = 3 } } }, + { "id" = "openai/gpt-image-2/edit", "input" = "image", "source_url" = "https://fal.ai/models/openai/gpt-image-2/edit/api", "parameters" = { "prompt" = { "type" = "string", "min_length" = 2, "max_length" = 32000 }, "num_images" = { "type" = "integer", "minimum" = 1, "maximum" = 4 }, "quality" = { "type" = "string", "enum" = [ + "auto", + "low", + "medium", + "high", + ] }, "background" = { "type" = "string", "enum" = [ + "auto", + "transparent", + "opaque", + ] }, "output_format" = { "type" = "string", "enum" = [ + "jpeg", + "png", + "webp", + ] }, "image_urls" = { "type" = "array", "max_items" = 16 }, "image_size" = { "enum" = [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto", + ] }, "image_size.width" = { "type" = "integer", "minimum" = 1, "maximum" = 3840, "multiple_of" = 16 }, "image_size.height" = { "type" = "integer", "minimum" = 1, "maximum" = 3840, "multiple_of" = 16 } }, "image_constraints" = { "min_pixels" = 655360, "max_pixels" = 8294400, "step" = 16, "max_edge" = 3840, "aspect_ratio" = { "max" = 3 } } }, ] provider = "fal" id = "openai/gpt-image-2" @@ -42,8 +84,15 @@ avg_cost_usd = 0.053 url = "https://fal.ai/models/openai/gpt-image-2" [providers.fal.pricing] -type = "per_image_tiered" -tiers = { "low/1024x1024" = 0.006, "medium/1024x1024" = 0.053, "high/1024x1024" = 0.211 } +source_url = "https://fal.ai/models/openai/gpt-image-2" +rounding_usd = 0.0001 +type = "per_token" +input = 5 +cached_input = 1.25 +image_input = 8 +cached_image_input = 2 +text_output = 10 +output = 30 [constraints] step = 16 @@ -72,3 +121,23 @@ cached_input = 1.25 image_input = 8 cached_image_input = 2 output = 30 + +[output_token_calculator] +source_url = "https://developers.openai.com/api/docs/guides/image-generation" +source_js_url = "https://developers.openai.com/_astro/GptImageTokenCalculator.react.DukR73TZ.js" +area_offset = 2000000 +area_divisor = 4000000 +short_axis_rounding = "nearest_ties_even" +token_rounding = "ceil" +quality_axes = { "low" = 16, "medium" = 48, "high" = 96 } +examples = [ + { "width" = 1024, "height" = 1024, "quality" = "low", "output_tokens" = 196, "usd" = 0.00588, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, + { "width" = 1024, "height" = 1536, "quality" = "low", "output_tokens" = 158, "usd" = 0.00474, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, + { "width" = 1536, "height" = 1024, "quality" = "low", "output_tokens" = 158, "usd" = 0.00474, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, + { "width" = 1024, "height" = 1024, "quality" = "medium", "output_tokens" = 1756, "usd" = 0.05268, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, + { "width" = 1024, "height" = 1536, "quality" = "medium", "output_tokens" = 1372, "usd" = 0.04116, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, + { "width" = 1536, "height" = 1024, "quality" = "medium", "output_tokens" = 1372, "usd" = 0.04116, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, + { "width" = 1024, "height" = 1024, "quality" = "high", "output_tokens" = 7024, "usd" = 0.21072, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, + { "width" = 1024, "height" = 1536, "quality" = "high", "output_tokens" = 5488, "usd" = 0.16464, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, + { "width" = 1536, "height" = 1024, "quality" = "high", "output_tokens" = 5488, "usd" = 0.16464, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, +] diff --git a/models/recraft-ai/recraft-v4.1/card.toml b/models/recraft-ai/recraft-v4.1/card.toml index 929d79e..aca9663 100644 --- a/models/recraft-ai/recraft-v4.1/card.toml +++ b/models/recraft-ai/recraft-v4.1/card.toml @@ -31,11 +31,27 @@ url = "https://openrouter.ai/recraft/recraft-v4.1" references = { id = "recraft/recraft-v4.1", max = 1 } [providers.fal] -endpoints = [ - { id = "fal-ai/recraft/v4.1/text-to-image", input = "text", source_url = "https://fal.ai/models/fal-ai/recraft/v4.1/text-to-image/api" }, -] provider = "fal" id = "fal-ai/recraft/v4.1/text-to-image" pricing = { type = "per_image_flat", usd = 0.035 } avg_cost_usd = 0.035 url = "https://fal.ai/models/fal-ai/recraft/v4.1/text-to-image" + +[[providers.fal.endpoints]] +id = "fal-ai/recraft/v4.1/text-to-image" +input = "text" +source_url = "https://fal.ai/models/fal-ai/recraft/v4.1/text-to-image/api" + +[providers.fal.endpoints.parameters] +"enable_safety_checker" = { "type" = "boolean" } +"image_size" = { "enum" = [ + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", +] } +"image_size.height" = { "maximum" = 14142, "type" = "integer", "minimum" = 1 } +"image_size.width" = { "maximum" = 14142, "type" = "integer", "minimum" = 1 } +"prompt" = { "min_length" = 1, "type" = "string", "max_length" = 10000 } diff --git a/models/tencent/hunyuan-3d/v3.1/pro/image-to-3d/card.toml b/models/tencent/hunyuan-3d/v3.1/pro/image-to-3d/card.toml index 189cc17..8292d19 100644 --- a/models/tencent/hunyuan-3d/v3.1/pro/image-to-3d/card.toml +++ b/models/tencent/hunyuan-3d/v3.1/pro/image-to-3d/card.toml @@ -20,3 +20,21 @@ source_url = "https://cloud.tencent.com/document/product/1804/120694" type = "per_generation_base_plus_surcharges" base_usd = 0.375 surcharges_usd = { pbr = 0.15, multi_view = 0.15, custom_face_count = 0.15 } + +[[endpoints]] +id = "fal-ai/hunyuan-3d/v3.1/pro/image-to-3d" +input = "image" +source_url = "https://fal.ai/models/fal-ai/hunyuan-3d/v3.1/pro/image-to-3d/api" + +[endpoints.parameters] +"back_image_url" = { "type" = "string" } +"bottom_image_url" = { "type" = "string" } +"enable_pbr" = { "type" = "boolean" } +"face_count" = { "minimum" = 40000, "type" = "integer", "maximum" = 1500000 } +"generate_type" = { "enum" = ["Normal", "Geometry"], "type" = "string" } +"input_image_url" = { "type" = "string" } +"left_front_image_url" = { "type" = "string" } +"left_image_url" = { "type" = "string" } +"right_front_image_url" = { "type" = "string" } +"right_image_url" = { "type" = "string" } +"top_image_url" = { "type" = "string" } diff --git a/models/tencent/hunyuan-3d/v3.1/pro/text-to-3d/card.toml b/models/tencent/hunyuan-3d/v3.1/pro/text-to-3d/card.toml index 158582e..0821110 100644 --- a/models/tencent/hunyuan-3d/v3.1/pro/text-to-3d/card.toml +++ b/models/tencent/hunyuan-3d/v3.1/pro/text-to-3d/card.toml @@ -20,3 +20,14 @@ source_url = "https://cloud.tencent.com/document/product/1804/120694" type = "per_generation_base_plus_surcharges" base_usd = 0.375 surcharges_usd = { pbr = 0.15, custom_face_count = 0.15 } + +[[endpoints]] +id = "fal-ai/hunyuan-3d/v3.1/pro/text-to-3d" +input = "text" +source_url = "https://fal.ai/models/fal-ai/hunyuan-3d/v3.1/pro/text-to-3d/api" + +[endpoints.parameters] +"enable_pbr" = { "type" = "boolean" } +"face_count" = { "minimum" = 40000, "type" = "integer", "maximum" = 1500000 } +"generate_type" = { "enum" = ["Normal", "Geometry"], "type" = "string" } +"prompt" = { "type" = "string", "max_length" = 1024 } diff --git a/models/tripo/h3.1/card.toml b/models/tripo/h3.1/card.toml index ad94553..aaceb9e 100644 --- a/models/tripo/h3.1/card.toml +++ b/models/tripo/h3.1/card.toml @@ -27,3 +27,89 @@ texture_credits = { standard = 10, detailed = 20, extreme = 30 } source_url = "https://developers.tripo3d.ai/en/pricing" base_credits = { text = 10, image = 20, multiview = 20 } detailed_geometry_credits = 20 + +[[endpoints]] +id = "/generation/text-to-model" +input = "text" +source_url = "https://developers.tripo3d.ai/en/docs/generation-text-to-model/standard" + +[endpoints.parameters] +"auto_size" = { "type" = "boolean" } +"compress" = { "type" = "string", "enum" = ["geometry"] } +"export_orientation" = { "type" = "string", "enum" = ["+x", "-x", "-y", "+y"] } +"export_uv" = { "type" = "boolean" } +"face_limit" = { "type" = "integer", "maximum" = 2000000 } +"generate_parts" = { "type" = "boolean" } +"geometry_quality" = { "type" = "string", "enum" = ["standard", "detailed"] } +"image_seed" = { "type" = "integer" } +"model" = { "type" = "string", "enum" = ["v3.1-20260211"] } +"model_seed" = { "type" = "integer" } +"negative_prompt" = { "type" = "string", "max_length" = 255 } +"pbr" = { "type" = "boolean" } +"prompt" = { "type" = "string", "max_length" = 1024 } +"quad" = { "type" = "boolean" } +"smart_low_poly" = { "type" = "boolean" } +"texture" = { "type" = "boolean" } +"texture_quality" = { "type" = "string", "enum" = ["fast", "standard", "detailed", "extreme"] } +"texture_seed" = { "type" = "integer" } +"texture_version" = { "type" = "string", "enum" = [ + "v3.5-20260815", + "v3.0-20250812", + "v2.5-20250123", +] } + +[[endpoints]] +id = "/generation/image-to-model" +input = "image" +source_url = "https://developers.tripo3d.ai/en/docs/generation-image-to-model/standard" + +[endpoints.parameters] +"auto_size" = { "type" = "boolean" } +"compress" = { "type" = "string", "enum" = ["geometry"] } +"export_orientation" = { "type" = "string", "enum" = ["+x", "-x", "-y", "+y"] } +"export_uv" = { "type" = "boolean" } +"face_limit" = { "type" = "integer", "maximum" = 2000000 } +"generate_parts" = { "type" = "boolean" } +"geometry_quality" = { "type" = "string", "enum" = ["standard", "detailed"] } +"input" = { "type" = "string" } +"model" = { "type" = "string", "enum" = ["v3.1-20260211"] } +"model_seed" = { "type" = "integer" } +"pbr" = { "type" = "boolean" } +"quad" = { "type" = "boolean" } +"smart_low_poly" = { "type" = "boolean" } +"texture" = { "type" = "boolean" } +"texture_quality" = { "type" = "string", "enum" = ["fast", "standard", "detailed", "extreme"] } +"texture_seed" = { "type" = "integer" } +"texture_version" = { "type" = "string", "enum" = [ + "v3.5-20260815", + "v3.0-20250812", + "v2.5-20250123", +] } + +[[endpoints]] +id = "/generation/multiview-to-model" +input = "image" +source_url = "https://developers.tripo3d.ai/en/docs/generation-multiview-to-model/standard" + +[endpoints.parameters] +"auto_size" = { "type" = "boolean" } +"compress" = { "type" = "string", "enum" = ["geometry"] } +"export_orientation" = { "type" = "string", "enum" = ["+x", "-x", "-y", "+y"] } +"export_uv" = { "type" = "boolean" } +"face_limit" = { "type" = "integer", "maximum" = 2000000 } +"generate_parts" = { "type" = "boolean" } +"geometry_quality" = { "type" = "string", "enum" = ["standard", "detailed"] } +"inputs" = { "type" = "array" } +"model" = { "type" = "string", "enum" = ["v3.1-20260211"] } +"model_seed" = { "type" = "integer" } +"pbr" = { "type" = "boolean" } +"quad" = { "type" = "boolean" } +"smart_low_poly" = { "type" = "boolean" } +"texture" = { "type" = "boolean" } +"texture_quality" = { "type" = "string", "enum" = ["fast", "standard", "detailed", "extreme"] } +"texture_seed" = { "type" = "integer" } +"texture_version" = { "type" = "string", "enum" = [ + "v3.5-20260815", + "v3.0-20250812", + "v2.5-20250123", +] } diff --git a/models/tripo/p1/card.toml b/models/tripo/p1/card.toml index 9fd8f81..e707009 100644 --- a/models/tripo/p1/card.toml +++ b/models/tripo/p1/card.toml @@ -25,3 +25,74 @@ usd_per_credit = 0.01 texture_credits = { standard = 10, detailed = 20, extreme = 30 } source_url = "https://developers.tripo3d.ai/en/pricing" base_credits = { text = 30, image = 40, multiview = 40 } + +[[endpoints]] +id = "/generation/text-to-model" +input = "text" +source_url = "https://developers.tripo3d.ai/en/docs/generation-text-to-model/p" + +[endpoints.parameters] +"auto_size" = { "type" = "boolean" } +"export_orientation" = { "type" = "string", "enum" = ["+x", "-x", "-y", "+y"] } +"export_uv" = { "type" = "boolean" } +"face_limit" = { "type" = "integer", "minimum" = 50, "maximum" = 20000 } +"image_seed" = { "type" = "integer" } +"model" = { "type" = "string", "enum" = ["P1-20260311"] } +"model_seed" = { "type" = "integer" } +"negative_prompt" = { "type" = "string", "max_length" = 255 } +"pbr" = { "type" = "boolean" } +"prompt" = { "type" = "string", "max_length" = 1024 } +"texture" = { "type" = "boolean" } +"texture_quality" = { "type" = "string", "enum" = ["fast", "standard", "detailed", "extreme"] } +"texture_seed" = { "type" = "integer" } +"texture_version" = { "type" = "string", "enum" = [ + "v3.5-20260815", + "v3.0-20250812", + "v2.5-20250123", +] } + +[[endpoints]] +id = "/generation/image-to-model" +input = "image" +source_url = "https://developers.tripo3d.ai/en/docs/generation-image-to-model/p" + +[endpoints.parameters] +"auto_size" = { "type" = "boolean" } +"export_orientation" = { "type" = "string", "enum" = ["+x", "-x", "-y", "+y"] } +"export_uv" = { "type" = "boolean" } +"face_limit" = { "type" = "integer", "minimum" = 50, "maximum" = 20000 } +"input" = { "type" = "string" } +"model" = { "type" = "string", "enum" = ["P1-20260311"] } +"model_seed" = { "type" = "integer" } +"pbr" = { "type" = "boolean" } +"texture" = { "type" = "boolean" } +"texture_quality" = { "type" = "string", "enum" = ["fast", "standard", "detailed", "extreme"] } +"texture_seed" = { "type" = "integer" } +"texture_version" = { "type" = "string", "enum" = [ + "v3.5-20260815", + "v3.0-20250812", + "v2.5-20250123", +] } + +[[endpoints]] +id = "/generation/multiview-to-model" +input = "image" +source_url = "https://developers.tripo3d.ai/en/docs/generation-multiview-to-model/p" + +[endpoints.parameters] +"auto_size" = { "type" = "boolean" } +"export_orientation" = { "type" = "string", "enum" = ["+x", "-x", "-y", "+y"] } +"export_uv" = { "type" = "boolean" } +"face_limit" = { "type" = "integer", "minimum" = 50, "maximum" = 20000 } +"inputs" = { "type" = "array" } +"model" = { "type" = "string", "enum" = ["P1-20260311"] } +"model_seed" = { "type" = "integer" } +"pbr" = { "type" = "boolean" } +"texture" = { "type" = "boolean" } +"texture_quality" = { "type" = "string", "enum" = ["fast", "standard", "detailed", "extreme"] } +"texture_seed" = { "type" = "integer" } +"texture_version" = { "type" = "string", "enum" = [ + "v3.5-20260815", + "v3.0-20250812", + "v2.5-20250123", +] } diff --git a/models/tripo/p2/card.toml b/models/tripo/p2/card.toml index 88d2d2c..2d2983e 100644 --- a/models/tripo/p2/card.toml +++ b/models/tripo/p2/card.toml @@ -25,3 +25,77 @@ usd_per_credit = 0.01 texture_credits = { standard = 10, detailed = 20, extreme = 30 } source_url = "https://developers.tripo3d.ai/en/pricing" base_credits = { text = 100, image = 100, multiview = 100 } + +[[endpoints]] +id = "/generation/text-to-model" +input = "text" +source_url = "https://developers.tripo3d.ai/en/docs/generation-text-to-model/p" + +[endpoints.parameters] +"auto_size" = { "type" = "boolean" } +"export_orientation" = { "type" = "string", "enum" = ["+x", "-x", "-y", "+y"] } +"export_uv" = { "type" = "boolean" } +"face_limit" = { "type" = "integer", "minimum" = 48, "maximum" = 50000 } +"image_seed" = { "type" = "integer" } +"model" = { "type" = "string", "enum" = ["P2-20260801"] } +"model_seed" = { "type" = "integer" } +"negative_prompt" = { "type" = "string", "max_length" = 255 } +"pbr" = { "type" = "boolean" } +"prompt" = { "type" = "string", "max_length" = 1024 } +"quad" = { "type" = "boolean" } +"texture" = { "type" = "boolean" } +"texture_quality" = { "type" = "string", "enum" = ["fast", "standard", "detailed", "extreme"] } +"texture_seed" = { "type" = "integer" } +"texture_version" = { "type" = "string", "enum" = [ + "v3.5-20260815", + "v3.0-20250812", + "v2.5-20250123", +] } + +[[endpoints]] +id = "/generation/image-to-model" +input = "image" +source_url = "https://developers.tripo3d.ai/en/docs/generation-image-to-model/p" + +[endpoints.parameters] +"auto_size" = { "type" = "boolean" } +"export_orientation" = { "type" = "string", "enum" = ["+x", "-x", "-y", "+y"] } +"export_uv" = { "type" = "boolean" } +"face_limit" = { "type" = "integer", "minimum" = 48, "maximum" = 50000 } +"input" = { "type" = "string" } +"model" = { "type" = "string", "enum" = ["P2-20260801"] } +"model_seed" = { "type" = "integer" } +"pbr" = { "type" = "boolean" } +"quad" = { "type" = "boolean" } +"texture" = { "type" = "boolean" } +"texture_quality" = { "type" = "string", "enum" = ["fast", "standard", "detailed", "extreme"] } +"texture_seed" = { "type" = "integer" } +"texture_version" = { "type" = "string", "enum" = [ + "v3.5-20260815", + "v3.0-20250812", + "v2.5-20250123", +] } + +[[endpoints]] +id = "/generation/multiview-to-model" +input = "image" +source_url = "https://developers.tripo3d.ai/en/docs/generation-multiview-to-model/p" + +[endpoints.parameters] +"auto_size" = { "type" = "boolean" } +"export_orientation" = { "type" = "string", "enum" = ["+x", "-x", "-y", "+y"] } +"export_uv" = { "type" = "boolean" } +"face_limit" = { "type" = "integer", "minimum" = 48, "maximum" = 50000 } +"inputs" = { "type" = "array" } +"model" = { "type" = "string", "enum" = ["P2-20260801"] } +"model_seed" = { "type" = "integer" } +"pbr" = { "type" = "boolean" } +"quad" = { "type" = "boolean" } +"texture" = { "type" = "boolean" } +"texture_quality" = { "type" = "string", "enum" = ["fast", "standard", "detailed", "extreme"] } +"texture_seed" = { "type" = "integer" } +"texture_version" = { "type" = "string", "enum" = [ + "v3.5-20260815", + "v3.0-20250812", + "v2.5-20250123", +] } diff --git a/models/tripo/rig-check/operation.toml b/models/tripo/rig-check/operation.toml index c9fd827..0095218 100644 --- a/models/tripo/rig-check/operation.toml +++ b/models/tripo/rig-check/operation.toml @@ -20,3 +20,11 @@ source_url = "https://developers.tripo3d.ai/en/pricing" [release] basis = "provider_endpoint" source_url = "https://developers.tripo3d.ai/en/docs/animations-rig-check" + +[[endpoints]] +id = "/animations/rig-check" +input = "task" +source_url = "https://developers.tripo3d.ai/en/docs/animations-rig-check" + +[endpoints.parameters] +"input" = { "type" = "string" } diff --git a/models/tripo/rig-v1.0/card.toml b/models/tripo/rig-v1.0/card.toml index 3f82313..55bab35 100644 --- a/models/tripo/rig-v1.0/card.toml +++ b/models/tripo/rig-v1.0/card.toml @@ -23,3 +23,15 @@ source_url = "https://developers.tripo3d.ai/en/pricing" [release] basis = "provider_endpoint" source_url = "https://developers.tripo3d.ai/en/docs/animations-rig" + +[[endpoints]] +id = "/animations/rig" +input = "task" +source_url = "https://developers.tripo3d.ai/en/docs/animations-rig" + +[endpoints.parameters] +"input" = { "type" = "string" } +"model" = { "type" = "string", "enum" = ["v1.0-20240301"] } +"out_format" = { "type" = "string", "enum" = ["glb", "fbx"] } +"rig_type" = { "type" = "string", "enum" = ["biped"] } +"spec" = { "type" = "string", "enum" = ["tripo", "mixamo"] } diff --git a/models/tripo/rig-v2.5/card.toml b/models/tripo/rig-v2.5/card.toml index e10e59d..c8f6981 100644 --- a/models/tripo/rig-v2.5/card.toml +++ b/models/tripo/rig-v2.5/card.toml @@ -23,3 +23,22 @@ source_url = "https://developers.tripo3d.ai/en/pricing" [release] basis = "provider_endpoint" source_url = "https://developers.tripo3d.ai/en/docs/animations-rig" + +[[endpoints]] +id = "/animations/rig" +input = "task" +source_url = "https://developers.tripo3d.ai/en/docs/animations-rig" + +[endpoints.parameters] +"input" = { "type" = "string" } +"model" = { "type" = "string", "enum" = ["v2.5-20260210"] } +"out_format" = { "type" = "string", "enum" = ["glb", "fbx"] } +"rig_type" = { "type" = "string", "enum" = [ + "quadruped", + "hexapod", + "octopod", + "avian", + "serpentine", + "aquatic", +] } +"spec" = { "type" = "string", "enum" = ["tripo", "mixamo"] } diff --git a/models/xai/grok-imagine-image-2.0/card.toml b/models/xai/grok-imagine-image-2.0/card.toml index 14f9888..c811660 100644 --- a/models/xai/grok-imagine-image-2.0/card.toml +++ b/models/xai/grok-imagine-image-2.0/card.toml @@ -46,10 +46,6 @@ type = "per_image_tiered" "medium/2048x2048" = 0.08 [providers.fal] -endpoints = [ - { id = "xai/grok-imagine-image/v2.0/edit", input = "image", source_url = "https://fal.ai/models/xai/grok-imagine-image/v2.0/edit/api" }, - { id = "xai/grok-imagine-image/v2.0/text-to-image", input = "text", source_url = "https://fal.ai/models/xai/grok-imagine-image/v2.0/text-to-image/api" }, -] provider = "fal" id = "xai/grok-imagine-image/v2.0/text-to-image" avg_cost_usd = 0.06 @@ -72,3 +68,61 @@ type = "per_image_tiered" "medium/1024x1024" = 0.06 "low/2048x2048" = 0.06 "medium/2048x2048" = 0.08 + +[[providers.fal.endpoints]] +id = "xai/grok-imagine-image/v2.0/edit" +input = "image" +source_url = "https://fal.ai/models/xai/grok-imagine-image/v2.0/edit/api" + +[providers.fal.endpoints.parameters] +"aspect_ratio" = { "type" = "string", "enum" = [ + "auto", + "2:1", + "20:9", + "19.5:9", + "16:9", + "4:3", + "3:2", + "1:1", + "2:3", + "3:4", + "9:16", + "9:19.5", + "9:20", + "1:2", +] } +"enable_safety_checker" = { "type" = "boolean" } +"image_urls" = { "type" = "array", "max_items" = 5 } +"num_images" = { "maximum" = 4, "minimum" = 1, "type" = "integer" } +"output_format" = { "type" = "string", "enum" = ["jpeg", "png", "webp"] } +"prompt" = { "max_length" = 8000, "type" = "string" } +"quality" = { "type" = "string", "enum" = ["low", "medium"] } +"resolution" = { "type" = "string", "enum" = ["1k", "2k"] } + +[[providers.fal.endpoints]] +id = "xai/grok-imagine-image/v2.0/text-to-image" +input = "text" +source_url = "https://fal.ai/models/xai/grok-imagine-image/v2.0/text-to-image/api" + +[providers.fal.endpoints.parameters] +"aspect_ratio" = { "type" = "string", "enum" = [ + "2:1", + "20:9", + "19.5:9", + "16:9", + "4:3", + "3:2", + "1:1", + "2:3", + "3:4", + "9:16", + "9:19.5", + "9:20", + "1:2", +] } +"enable_safety_checker" = { "type" = "boolean" } +"num_images" = { "maximum" = 4, "minimum" = 1, "type" = "integer" } +"output_format" = { "type" = "string", "enum" = ["jpeg", "png", "webp"] } +"prompt" = { "max_length" = 8000, "type" = "string" } +"quality" = { "type" = "string", "enum" = ["low", "medium"] } +"resolution" = { "type" = "string", "enum" = ["1k", "2k"] } diff --git a/models/xai/grok-imagine-video-1.5/card.toml b/models/xai/grok-imagine-video-1.5/card.toml index 2b893b9..1b1ffd1 100644 --- a/models/xai/grok-imagine-video-1.5/card.toml +++ b/models/xai/grok-imagine-video-1.5/card.toml @@ -33,9 +33,6 @@ usd_per_input_image = 0.01 1080p = { audio = 0.25 } [providers.fal] -endpoints = [ - { id = "xai/grok-imagine-video/v1.5/image-to-video", input = "image", source_url = "https://fal.ai/models/xai/grok-imagine-video/v1.5/image-to-video/api" }, -] provider = "fal" id = "xai/grok-imagine-video/v1.5/image-to-video" input = "image" @@ -50,3 +47,15 @@ usd_per_input_image = 0.01 480p = { audio = 0.08 } 720p = { audio = 0.14 } 1080p = { audio = 0.25 } + +[[providers.fal.endpoints]] +id = "xai/grok-imagine-video/v1.5/image-to-video" +input = "image" +source_url = "https://fal.ai/models/xai/grok-imagine-video/v1.5/image-to-video/api" + +[providers.fal.endpoints.parameters] +"duration" = { "minimum" = 1, "maximum" = 15, "type" = "integer" } +"enable_safety_checker" = { "type" = "boolean" } +"image_url" = { "type" = "string" } +"prompt" = { "max_length" = 4096, "type" = "string" } +"resolution" = { "type" = "string", "enum" = ["480p", "720p", "1080p"] } From d45dca7c579725632867ccd832fb98b42750d202 Mon Sep 17 00:00:00 2001 From: Universe Date: Tue, 13 Oct 2026 19:50:40 +0900 Subject: [PATCH 4/8] Clarify published vision estimates --- catalogue/PROVENANCE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/catalogue/PROVENANCE.md b/catalogue/PROVENANCE.md index ef998d8..75de752 100644 --- a/catalogue/PROVENANCE.md +++ b/catalogue/PROVENANCE.md @@ -891,8 +891,8 @@ images may be downscaled before tokenization. labels the Gemini 3 family token counts approximate. The cards preserve that qualification and each resolution's published budget, including the 2240-token `ultra_high` budget. That maximum is not a fixed billable count for every image. -These parameters describe provider tokenization, not a consumer's authorization -buffers or a claim that preflight estimates equal final charges. +These parameters describe provider tokenization. Preflight estimates do not +establish final charges. ## Vercel standard token pricing and capabilities (2026-10-13) From b3bbcf974a48bd92ae229e5c4bf5df1747c382f1 Mon Sep 17 00:00:00 2001 From: Universe Date: Tue, 13 Oct 2026 21:05:51 +0900 Subject: [PATCH 5/8] Describe public provider coverage, prices and model distribution --- .agents/skills/catalogue/SKILL.md | 74 +++-- .agents/skills/catalogue/pricing.md | 38 ++- .agents/skills/catalogue/providers.md | 17 +- .agents/skills/provenance/SKILL.md | 4 +- AGENTS.md | 24 +- README.md | 35 ++- catalogue/README.md | 104 ++++++- catalogue/schemas/models.schema.json | 383 ++++++++++++++++++++++++-- scripts/check.py | 135 ++++++++- tests/test_distribution.py | 264 ++++++++++++++++++ tests/test_provider_coverage.py | 234 ++++++++++++++++ 11 files changed, 1207 insertions(+), 105 deletions(-) create mode 100644 tests/test_distribution.py create mode 100644 tests/test_provider_coverage.py diff --git a/.agents/skills/catalogue/SKILL.md b/.agents/skills/catalogue/SKILL.md index bb65003..c9e9729 100644 --- a/.agents/skills/catalogue/SKILL.md +++ b/.agents/skills/catalogue/SKILL.md @@ -4,8 +4,8 @@ description: > Research, add, update, deprecate, or remove AI model catalogue entries — text, image, video, audio, 3D, image tools, and embedding models — with their capabilities, limits, provider bindings, and published prices. - Covers what an entry is, per-provider ID rules, pricing shapes, lifecycle - rules (steady-state pricing, deprecate vs. delete), and the verification + Covers what an entry is, per-provider ID rules, regular pricing, native + reference and provider coverage, public distribution, and the verification checklist. Use when bumping a model version, adding a model or provider binding, updating a price, or auditing entries against provider docs. Release dates are covered by $provenance. @@ -37,13 +37,19 @@ An entry is a set of facts about one model, each traceable to a source: - **Identity:** `id`, `label`, `vendor`, family. - **Release:** see `$provenance`. +- **Distribution:** official code and weight links, exact weight variants, access + conditions, and separately sourced code/weight licenses. Use the model-level + `distribution` shape in [`catalogue/README.md`](../../../catalogue/README.md#model-distribution). + Leave unknown facts omitted. Available weights do not establish a native hosted API; + public downloads do not establish an open-source classification or unrestricted use. - **Capabilities:** modalities, accepted image MIME types, tool calling, audio, transparent background, and so on. Never derive one capability from another (for example, image MIME types from `multimodal`); record each from its own source. - **Limits:** context window and output limit (text); sizes, size constraints, aspect ratios (image); durations and aspect ratios (video). -- **Bindings:** for each provider that serves it, the provider's exact ID, its published - price, and optionally a URL and a deprecation flag. +- **Bindings:** exact call IDs, sourced regular prices when known, and provider-specific + contracts. A native `reference_provider` is a presentation choice. Explicit + `provider_coverage` distinguishes listed providers from source-backed absence/exclusion. Facts are independent of products. Adding a verified fact does not list the model in any Grida product, and removing a product listing does not delete the fact. @@ -52,12 +58,12 @@ Grida product, and removing a product listing does not delete the fact. The same model has different IDs, availability, and prices on different providers. -- **Text, audio, image tools, 3D:** one entry per provider endpoint. The `id` is in that - provider's format, and the provider or namespace fixes the route. +- **Text, audio, image tools, 3D:** retain existing endpoint-shaped IDs and direct-provider + facts. Add `providers` bindings without rewriting those existing identities. - **Image and video:** one canonical entry (`vendor/model`, e.g. `google/veo-3.1`) holding the model's intrinsic facts, plus a `providers` record keyed by provider. Each binding has its - own call ID and price. Bindings carry no preference order; choosing a provider is a - consumer's decision. + own call ID and price. `reference_provider` identifies the verified native API to show + first; choosing which provider to call remains a consumer decision. Preserve IDs exactly as the provider spells them. Never case-convert or normalize them. Per-provider ID formats, pricing pages, and known quirks are in @@ -68,20 +74,22 @@ Per-provider ID formats, pricing pages, and known quirks are in The catalogue states what is true and useful **now**. Its shape must never record how recently someone got round to updating it. -- **Price the steady state, not the promotion.** If a vendor runs an introductory or - time-limited rate, record the price that applies after it ends, and note the promotion and - its end date in `PROVENANCE.md`. Otherwise the promotion ending is a silent cost increase. - Recheck when the date passes: a promotion can become permanent, which changes the fact. -- **Deprecate an entry that is still a real choice.** Mark it deprecated (Grida's - `legacy: true`) when someone might reasonably still pick it: same price as its successor, - or better at something. -- **Delete an entry whose successor is strictly dominant:** never worse on any axis, better - on at least one. An entry nobody should choose is noise in every picker. -- **A binding needs a usable, verified price.** If a provider exposes no billable unit for a - model (for example, a $0/MTok placeholder for video), leave that binding out rather than - inventing a price. -- **Catalogue only what is used.** Do not add a capability, endpoint variant, or field for a - case nobody serves yet. Add it when the second case arrives. +- **Regular, non-promotional prices only.** Record the provider's sourced regular rate, + even when an introductory or time-limited discount is active when adding or updating a + model. Do not track promotional rates, end dates, or expiry rechecks. A discounted live + feed does not establish the regular price; do not infer it from a discount percentage or + another provider's rate. If the regular rate cannot be verified, report the missing + evidence and leave the price unrecorded. +- **Preserve existing entries during coverage work.** Do not delete a model because a + successor exists or because a consumer does not currently serve it. Lifecycle and + offering changes need separate review. Do not introduce product policy fields. +- **Unknown prices remain unknown.** Verified endpoint existence can be recorded without + a price. A $0/MTok video placeholder is not a usable unit; omit that price and record + the qualification. If the contract itself cannot be represented reliably, use a + source-backed exclusion rather than inventing capabilities or amounts. +- **Coverage is source-backed.** Add the native API and verified OpenRouter, Vercel and + fal media bindings. Add Grida only where its public service actually offers the model. + An unserved catalogue entry remains useful; do not invent a Grida binding. Removing an entry is a contract change for consumers: some embed the catalogue at build time and only see the change in their next release. Say so in the PR. @@ -98,12 +106,16 @@ time and only see the change in their next release. Say so in the PR. - When two first-party sources conflict, first check they describe the same thing (variant, provider, region, tier, resolution, date). If they truly conflict, decide which wins and why (more specific page, dated changelog), record it in `catalogue/PROVENANCE.md`, and - never average. If it can't be resolved from public sources, leave the value and ask. + never average. If it cannot be resolved from public sources, leave the disputed fact + unrecorded and document the gap. Aggregate behavioral questions for a separately + approved probe; do not make paid inference calls as part of catalogue maintenance. ## Pricing -Record the provider's published list price in the provider's own billing unit. Never -convert to credits, add margin, or substitute a negotiated or account-specific rate. The +Record the provider's advertised regular price in its published billing unit. Public +Grida prices are provider facts too; they do not authorize disclosing internal economics +or deriving a different price from another provider. Never convert to credits, add an +internal margin, or substitute a negotiated/account-specific rate. The pricing shapes in use and their rules are in [`pricing.md`](./pricing.md). ## Workflow @@ -128,17 +140,21 @@ pricing shapes in use and their rules are in [`pricing.md`](./pricing.md). homepage, and its official logo (see [`models/README.md`](../../../models/README.md#a-lab)). Fields are `lower_snake_case`; IDs keep their exact spelling. Run `uv run scripts/build.py`, then `uv run scripts/check.py`. -5. **Record qualifications** that do not fit the JSON (promotions, long-context bands, - ambiguous units) in `catalogue/PROVENANCE.md`, with source URLs. +5. **Record qualifications** that do not fit the JSON (regular-price evidence, + long-context bands, ambiguous units) in `catalogue/PROVENANCE.md`, with source URLs. ## After any update - [ ] Every new or changed fact has a first-party source, cited in the PR description - [ ] No value was estimated, rounded, or copied from an aggregator without verification -- [ ] Prices are published list prices in the provider's own unit, at the steady state +- [ ] Prices are sourced regular, non-promotional rates in the provider's own unit; + promotional rates and expiry tracking are excluded - [ ] IDs are exact; field names are `lower_snake_case` +- [ ] Distribution links are official; code and weight licenses/access are independently + sourced, with no inferred hosted API or license permissions - [ ] Every entry has a complete `release` (`$provenance`) -- [ ] Deprecated vs. deleted was decided by the lifecycle rules above +- [ ] Native reference, canonical provider coverage and any exclusions are sourced; existing + model identities and unserved entries are preserved - [ ] `catalogue/models.json` was regenerated with `uv run scripts/build.py`, not edited by hand - [ ] `uv run scripts/check.py` passes - [ ] Nothing from a private source made it into the diff, the commit, or the PR (see `AGENTS.md`) diff --git a/.agents/skills/catalogue/pricing.md b/.agents/skills/catalogue/pricing.md index b9b1f92..57e816b 100644 --- a/.agents/skills/catalogue/pricing.md +++ b/.agents/skills/catalogue/pricing.md @@ -7,12 +7,20 @@ Supplements [`SKILL.md`](./SKILL.md). Load this when you add or change a price. - **Published list price, in the provider's unit.** Record what the provider's public pricing page says, in the unit it bills: per million tokens, per image, per second, per run, per 1,000 characters, or provider credits with their published USD rate. Do not - convert units or currencies. + convert currencies. Exact decimal unit normalization is allowed when both the source + unit and contract unit are explicit; it must not round or change billing semantics. - **A price belongs to a binding.** The same model can cost different amounts on different - providers. On canonical entries (image, video), each binding carries its own `pricing`. -- **Steady state, not promotion.** See the lifecycle rules in [`SKILL.md`](./SKILL.md). -- **No usable unit, no binding.** If a provider shows a placeholder price (for example, - $0/MTok for video), leave the binding out. + providers. Each binding or endpoint carries its own price without changing intrinsic + model facts. Public Grida service prices are eligible; its supplier selection, funding + fees, credit conversions and margin are not catalogue data. +- **Regular, non-promotional rates only, even during an active promotion.** Do not + maintain promotional prices, expiry dates, or a promotion calendar. Verify the regular + rate from that provider's own source; a discounted feed or another provider's rate is + insufficient. See the lifecycle rules in [`SKILL.md`](./SKILL.md). +- **No usable unit, no price.** If a provider shows a placeholder price (for example, + $0/MTok for video), leave that price out. A verified endpoint can still have a binding; + document unknown regular rates. Use a sourced exclusion only for a contract that cannot + be reliably listed, not to hide unfinished research. - **Estimates are not prices.** `avg_cost_usd` and `cost_usd` are coarse per-request estimates, not published facts. Keep them consistent with the published rates and never cite them as a source. @@ -22,6 +30,19 @@ Supplements [`SKILL.md`](./SKILL.md). Load this when you add or change a price. These are the `pricing.type` values in the current authored data. Before adding a new shape, check whether an existing one can express the price without loss. +`published_pricing` is an additive provider-neutral shape for publicly advertised +USD meter components, conditions, request-wide quantity bands, and quantity +rounding. Its contract is in +[`catalogue/README.md`](../../../catalogue/README.md#published-service-prices-and-contracts). +Use it only from the service's own public evidence. Its source is the advertised +price, not assumptions about that service's suppliers or margins. + +`token_pricing` records exact decimal USD-per-token rates. Keep cache-write TTLs +distinct: `input_cache_write_1h` records the one-hour rate when published; +`scope` qualifies the standard tier and the base cache-write duration. A +cache-storage-per-hour amount is a different unit and must not be inserted as +a per-token write price. + ### Text Text entries use a `cost` object instead of a typed `pricing` union. Values are USD per @@ -90,7 +111,10 @@ silent output, omit those keys rather than copying another provider's rates. 1. Open the provider's own pricing page or model page (see [`providers.md`](./providers.md)). 2. Record the date you checked it in the PR description. -3. If the page qualifies the price (region, tier, batch discount, promotion end date), note - the qualification and URL in `PROVENANCE.md`. +3. Verify that the quoted rate is regular and non-promotional. Record its source and + applicable conditions (region, service tier, batch mode, billing unit) in + `PROVENANCE.md` when needed. Do not record promotional rates or end dates. If public + sources establish only a promotional rate, leave the regular price unrecorded and + document the verification gap; do not guess it. 4. If two first-party pages disagree, follow "When sources disagree" in [`SKILL.md`](./SKILL.md). diff --git a/.agents/skills/catalogue/providers.md b/.agents/skills/catalogue/providers.md index edb5af8..817c644 100644 --- a/.agents/skills/catalogue/providers.md +++ b/.agents/skills/catalogue/providers.md @@ -22,6 +22,7 @@ change a `basis: "model"` release date. | fal | Endpoint path: `fal-ai/veo3.1/image-to-video`, `fal-ai/flux-2-pro/edit` | | OpenRouter | `vendor/model`: `google/veo-3.1`, `google/veo-3.1-fast` | | Replicate | `owner/model`: `google/lyria-3`, `nightmareai/real-esrgan` | +| Grida | Public model ID or model-specific operation ID from its API catalogue | On fal, the capability is often part of the ID (`…/image-to-video`, `…/edit`). A different capability on fal is a different endpoint, so it is a different binding. @@ -37,17 +38,27 @@ capability on fal is a different endpoint, so it is a different binding. | fal | `https://fal.ai/models/`; pricing API: `https://fal.ai/docs/documentation/model-apis/pricing` | | OpenRouter | `https://openrouter.ai//` | | Vercel AI Gateway | `https://vercel.com/ai-gateway/models/` | +| Grida | `https://gateway.grida.ai/llms.txt`; linked discovery and operation schemas | | models.dev | `https://models.dev/api.json`. **Discovery only**, never a source | ## Known quirks -- **Availability differs by provider.** A model can be on OpenRouter and fal but not on the - Vercel AI Gateway. A canonical entry simply omits the binding it does not have. +- **Availability differs by provider.** A model can be on OpenRouter and fal but not on + Vercel. Verify native API, OpenRouter, Vercel and fal (media only) against first-party + sources; retain `provider_coverage` dispositions. Grida is required only when its + public service actually offers the model. Absence needs evidence, not an incomplete + search. A consistent spec/identity/pricing incompatibility may justify a sourced + per-model exclusion. Never use private routing preference as an exclusion reason. - **Metering differs by provider.** For one video model, one provider may meter audio and silent output and 4K, while another sells only audio-on output at 720p/1080p. Record each provider's own matrix. - **Placeholder prices.** OpenRouter can show `$0/MTok` for video models. That is not a - usable price: leave the binding out. + usable price: omit the price and document the qualification. Verify image/video + endpoints directly; a text feed does not describe those modalities. +- **Native reference.** Set `reference_provider` to the actual native API binding, or an + existing direct native provider, after verification. Prefer one qualified Google API + unless another has a meaningful published contract difference. Open-weight code or + artifacts establish `distribution`, not a billable API run by the model lab. - **Namespaces differ from vendor IDs.** For example, image IDs may use a short namespace (`bfl/…`) while the vendor field is `black-forest-labs`. Keep whatever the authored data uses; do not "fix" an ID to match a vendor name. diff --git a/.agents/skills/provenance/SKILL.md b/.agents/skills/provenance/SKILL.md index 08965cb..675709d 100644 --- a/.agents/skills/provenance/SKILL.md +++ b/.agents/skills/provenance/SKILL.md @@ -77,7 +77,9 @@ history. Never fill in an approximate day. A JSON value cannot hold its own caveats. Write a note in [`catalogue/PROVENANCE.md`](../../../catalogue/PROVENANCE.md) when a fact needs one. For example: -- A promotion: the steady-state price that was recorded, and the promotion's end date. +- Regular-price evidence: the provider's source establishing its non-promotional rate, + or a verification gap when only a promotional rate is published. Do not track discounted + prices, promotion end dates, or expiry rechecks. - A pricing band, such as long-context multipliers, with its threshold and source. - A capability shared by a model family, with the page that states it. - A conflict between sources, and why one was chosen. diff --git a/AGENTS.md b/AGENTS.md index cabc097..023d3a0 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -63,9 +63,13 @@ file, commit, branch name, or PR: - the name, URL, path, file, PR, or tooling of a private repository or service; - how a consumer routes requests (which provider for which model, fallback order); -- negotiated, wholesale, or account-specific prices; margins, markups, credit conversions; +- negotiated, wholesale, or account-specific prices; internal margins, funding fees, credit conversions; - provider account details, contract or rights reviews; -- hostnames, account IDs, credential or environment variable names, budgets, roadmap. +- private hostnames, account IDs, credential or environment variable names, budgets, roadmap. + +Published service contracts, public API URLs and advertised regular prices are public +provider facts, including Grida's. Record them without disclosing supplier selection, +internal tariff calculations or funding policy. Restate a need in neutral, public terms ("per-second video pricing keyed by resolution"). When in doubt, leave it out and ask. @@ -81,14 +85,24 @@ doesn't belong in the contract. See `$catalogue` and `$provenance`. - **Never fabricate.** If a value cannot be verified, leave it out and say so. Do not estimate a price, round a limit, or infer a release day. -- **Published prices only.** No negotiated, wholesale, account-specific, or internal prices. - No markup, credit conversion, or margin. +- **Published regular prices only.** Use sourced, non-promotional provider rates even + during an active promotion. Do not maintain promotional prices or expiry tracking. + No negotiated, wholesale, account-specific, or internal prices; no internal markup, credit + conversion, or internal margin. A provider's publicly advertised rate is eligible even + when its internal economics are unknown. Never infer an unknown regular rate. - **Preserve IDs exactly.** Model and provider IDs keep their exact spelling and casing. Authored field names are `lower_snake_case`. - **Additive by default.** Add fields; do not rename or repurpose them. A breaking change needs a new schema version, decided with the user. - **Facts are independent of products.** Being catalogued is not the same as being offered - by a Grida product. + by a Grida product. Keep existing entries when reviewing provider coverage; deleting a + model or expanding an offering requires a separate review. +- **Provider coverage is explicit.** Qualify the native lab API as `reference_provider` + where it exists. It is a presentation reference, never a routing default. Record + OpenRouter, Vercel and fal (media only) where verified, and Grida where it serves the + model. Record source-backed absence or exclusion in `provider_coverage`; unfinished + research is not evidence of absence. Open weights do not imply a native hosted API. + See the catalogue skill for coverage and public price rules. ## Skills diff --git a/README.md b/README.md index 370659f..18a740f 100644 --- a/README.md +++ b/README.md @@ -80,22 +80,24 @@ consumes a projection of it. ## What is in a catalogue entry -| Kind | Examples | -| ------------------------- | --------------------------------------------------------------------------------------------- | -| **Identity** | Canonical ID (`vendor/model`), label, vendor, family (text, image, video, audio, 3D, …) | -| **Release provenance** | First broad public release date, its basis, and the first-party source URL | -| **Capabilities** | Modalities, accepted image formats, tool calling, audio, transparent background | -| **Limits** | Context window, output limit, sizes, aspect ratios, durations, size constraints | -| **Provider bindings** | The exact ID a provider uses for the model (Vercel AI Gateway, fal, OpenRouter, Replicate, …) | -| **Published prices** | Public list prices per provider, in the provider's own billing unit | -| **Published calculators** | Sourced output-token formulae, examples, and image-input tokenization rules | +| Kind | Examples | +| ------------------------- | --------------------------------------------------------------------------------------- | +| **Identity** | Canonical ID (`vendor/model`), label, vendor, family (text, image, video, audio, 3D, …) | +| **Release provenance** | First broad public release date, its basis, and the first-party source URL | +| **Capabilities** | Modalities, accepted image formats, tool calling, audio, transparent background | +| **Limits** | Context window, output limit, sizes, aspect ratios, durations, size constraints | +| **Provider bindings** | Exact provider IDs, a native API reference, and sourced coverage/exclusion reasons | +| **Model distribution** | Official code and weight links, exact variants, access conditions and separate licenses | +| **Published prices** | Public list prices per provider, in the provider's own billing unit | +| **Published calculators** | Sourced output-token formulae, examples, and image-input tokenization rules | ## What it is not - **Not a router or SDK.** A provider binding records that an endpoint exists and what it costs. It does not implement a client or grant permission to call it. -- **Not billing.** The catalogue holds published list prices. Credits, markups, tariffs, and - negotiated or account-specific rates belong to their owners, not here. +- **Not billing execution.** The catalogue holds publicly advertised regular prices, + including Grida's public service price. Funding fees, credit conversion, margins, + supplier selection and negotiated/account-specific rates stay with their owners. - **Not a live mirror.** Nothing is scraped into this repository automatically. Discovery tools such as [models.dev](https://models.dev) give leads; a person verifies each fact against a first-party source. @@ -111,10 +113,13 @@ with a JSON Schema, readable from any language. Its shape and rules are document ## Principles - **Every fact has a source.** Prices, limits, and release dates cite a first-party page. -- **The catalogue states what is true now.** Price the steady state, not the promotion. - Deprecate a model someone might still pick; remove one whose successor is strictly better. -- **An ID is never portable.** The same model has different IDs, availability, and prices on - different providers. Bindings are recorded per provider. +- **Regular prices, without promotion tracking.** Record sourced, non-promotional + provider rates even during an active discount. Do not maintain discounted prices or + promotion expiry dates. Existing models remain available for consumer review; provider + coverage changes do not silently remove them. +- **An ID is never portable.** The same model has different IDs, availability, parameters + and prices on different providers. Bindings retain those differences. A sourced native + `reference_provider` is presented first; it does not choose a consumer's route. - **Additive by default.** Consumers depend on the shape. Fields are added; breaking changes get a new schema version. diff --git a/catalogue/README.md b/catalogue/README.md index 657482c..867938f 100644 --- a/catalogue/README.md +++ b/catalogue/README.md @@ -50,8 +50,9 @@ section is a table of cards keyed by card ID: Cards are listed in ID order within each section; the order carries no meaning. Every card has `id` (equal to its table key), `label`, and `release` (`{ date, basis, source_url }`). The rest depends on the family. Image and video cards are -canonical (`vendor/model`) and hold a `providers` record of bindings keyed by provider; -other families have one card per provider endpoint. +canonical (`vendor/model`) and hold a `providers` record of bindings keyed by provider. +Other families retain their existing IDs and direct-provider facts, and may also add +`providers`; the same additions are supported on embeddings and the rig-check operation. ## Labs @@ -71,8 +72,9 @@ license, and are used under each owner's guidelines. breaking change needs a new schema version and a new `$id`. - **IDs are exact.** Model and provider IDs keep the spelling their owner uses. - **Fields are `lower_snake_case`.** -- **Facts only.** No listing, lifecycle, ordering, or default choices (`listed`, `status`, +- **Facts only.** No product listing, lifecycle or routing defaults (`listed`, `status`, `legacy`, `deprecated`, `default`); those belong to each consumer. + `reference_provider` identifies the native API for presentation, not a routing default. - **Sourced.** Every value traces to a first-party page; qualifications go in `PROVENANCE.md`. The schema's `$id` is `https://grida.co/schemas/ai-model-facts-v1.json`. It is kept @@ -104,15 +106,101 @@ uv run pytest # the checker rejects what it should ## Provider endpoints A provider binding may list `endpoints`: exact call IDs with `input` (`text`, -`image`, `video`, `audio`, or `task`) and a first-party `source_url`. These identify -input variants, not a routing preference. The existing binding `id` remains its -primary call ID; `references` and pricing retain their existing meaning. +`image`, `multi_image`, `video`, `audio`, `task`, or `asset`) and a first-party `source_url`. These identify +input variants, not a routing preference. The existing binding `id` retains its +provider-defined model or primary call identity; `references` and pricing retain +their existing meaning. Endpoint IDs are unique within a binding. The list records documented variants, not an assertion that a consumer supports every variant. `vendor`, including on text cards, identifies the model's lab in `labs.json`. It is independent of a model ID's namespace and its serving provider. +### Native reference and coverage + +Every family, including embedding and the rig-check operation, may add a +`providers` record without changing its existing ID or direct-provider fields. +Each binding has exact `provider` and `id` values, an optional first-party +`source_url`, and independently sourced serving facts. A verified binding can +omit an unknown regular price; omission never means free inference. + +Optional `reference_provider` names a real native API binding, or the existing +direct `provider` when that card describes the native API already. Consumers may +present it first as the lab's reference. It does not prescribe which provider to +call, and JSON object order carries no meaning. Official weights do not establish +a native hosted API. This field records a sourced reference, not a provider registry. + +`provider_coverage` maps provider names to `{ disposition, source_url, reason? }`: + +- `listed` requires a binding or matching direct provider. +- `not_listed` records verified absence from that provider's published catalogue. +- `excluded` records an incompatible or unverifiable specification, identity or + pricing contract that makes a reliable listing inappropriate. + +The last two require a public, source-backed `reason` and cannot coexist with a +binding for that provider. Do not use an exclusion for routing preference or +unfinished research. Missing coverage remains unrecorded, not proof of absence. +Maintain coverage for native APIs, OpenRouter, Vercel and fal media where verified. +Grida bindings describe only models actually offered by its public service; +other catalogue models remain useful independently. + +### Published service prices and contracts + +A binding or endpoint may record `published_pricing` with first-party +`source_url`, `currency: "USD"`, and nonempty `components`. This provider-neutral +shape expresses advertised regular prices, including Grida's public price, using: + +- `meter`, `unit`, and exact decimal-string `usd_per_unit`; optional + `per_quantity` is a positive decimal denominator (one when omitted). +- Optional `id` identifies a component uniquely within that price. +- Optional `when` is a JSON Schema predicate over public request parameters. +- Optional `quantity_range: { meter, min, max }` is a half-open range with decimal + bounds; an omitted or null `max` leaves it unbounded. It selects a component for the range, + not marginal volume pricing. +- Optional `quantity_rounding: { mode, increment }` preserves quantity rounding: + `none` permits an omitted or null increment; `ceil` requires a positive decimal increment. + +For TOML arrays, omit the optional null upper bound or increment; `null_keys` +addresses object paths, not array indexes. Omission has the same defined semantics +as JSON null here and never means a zero price. + +Rates, ranges and rounding are sourced service facts. Internal margins, funding +fees, credit conversions, supplier routing and account-specific prices are excluded. +Do not derive a public service price from another provider's price without the +service's own published evidence. Unknown or promotional rates stay unrecorded. + +Endpoints may name a public `operation` and `interface`, and link authoritative +`request_schema_url` and `result_schema_url`. Links are absolute HTTPS without +credentials; schemas are not copied or fetched by the catalogue checker. +Existing `parameters` remains partial descriptive metadata, not a substitute for +the linked contract. A provider-specific capability difference stays on its binding +or endpoint rather than overwriting the model's intrinsic facts. + +## Model distribution + +A card may record `distribution`, independently of its hosted provider bindings. +It requires a first-party `source_url` and at least `code` or `weights`: + +- `code.repository_url` identifies the official source-code repository. +- `weights` is a nonempty array of official weight repositories or artifact pages. + Each item has `url`; an optional `id` preserves the exact published weight variant. + Distinct variants may share a repository URL, but their IDs must be distinct. +- Code and each weight item may independently record `license: { name, url }`. + Use the publisher's license name and its license text or model-card URL, including + custom licenses. An unverified license stays omitted; code and weights need not + use the same license. +- A weight item's optional `access` is `public` or `gated`, as documented by its + publisher. Omission means unrecorded access conditions. Public access does not + establish unrestricted use or an open-source classification. + +All URLs must be absolute HTTPS URLs without embedded credentials. Unknown +distribution facts stay omitted. These records describe published artifacts; +they do not establish a hosted API, an inference price, or permissions beyond the +linked licenses. `distribution` belongs to model cards, not provider bindings, +endpoint variants, or the rig-check operation. Existing cards remain valid +without it. See [TRELLIS.2](../models/microsoft/trellis-2/card.toml) for sourced +code and weight records. + ## Published calculators and serving facts Optional additions record the facts at the scope their source describes. A card's @@ -148,7 +236,9 @@ Missing fields mean unrecorded facts, never unsupported features or zero prices. `max_output_tokens`. Neither object chooses a consumer's supported features. - **Token pricing.** `token_pricing` records `unit: "usd_per_token"`, a `source_url`, and exact decimal strings for `input`, `output`, - `input_cache_read`, and `input_cache_write` where published. Optional `tiers` + `input_cache_read`, `input_cache_write`, and `input_cache_write_1h` where published. + Optional `scope` records a source-backed service tier or cache-duration qualification; + a storage-per-hour rate does not belong in a per-token meter. Optional `tiers` carry `meter`, an inclusive `minimum_input_tokens`, an exclusive `maximum_input_tokens`, and `usd_per_token`. An omitted or null maximum means no published upper bound. Bands may differ by meter and cannot overlap for the diff --git a/catalogue/schemas/models.schema.json b/catalogue/schemas/models.schema.json index abc1a68..103f7ff 100644 --- a/catalogue/schemas/models.schema.json +++ b/catalogue/schemas/models.schema.json @@ -62,7 +62,26 @@ "type": "object", "additionalProperties": { "type": "object", - "required": ["id", "label"] + "required": ["id", "label"], + "properties": { + "distribution": { + "$ref": "#/$defs/distribution" + }, + "providers": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/provider_binding" + } + }, + "reference_provider": { + "type": "string", + "minLength": 1, + "description": "Native API binding to present first as a model reference; not a routing choice." + }, + "provider_coverage": { + "$ref": "#/$defs/provider_coverage" + } + } } }, "three_d.rig_check.operation": { @@ -75,6 +94,7 @@ "provider": { "const": "tripo" }, + "distribution": false, "binding_id": { "const": "rig-check" }, @@ -138,6 +158,20 @@ "items": { "$ref": "#/$defs/provider_endpoint" } + }, + "providers": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/provider_binding" + } + }, + "reference_provider": { + "type": "string", + "minLength": 1, + "description": "Native API binding to present first as a model reference; not a routing choice." + }, + "provider_coverage": { + "$ref": "#/$defs/provider_coverage" } } } @@ -198,33 +232,7 @@ "providers": { "type": "object", "additionalProperties": { - "type": "object", - "required": ["provider", "id"], - "properties": { - "provider": { - "type": "string" - }, - "id": { - "type": "string", - "minLength": 1 - }, - "endpoints": { - "type": "array", - "minItems": 1, - "items": { - "$ref": "#/$defs/provider_endpoint" - } - }, - "capabilities": { - "$ref": "#/$defs/capabilities" - }, - "token_pricing": { - "$ref": "#/$defs/token_pricing" - }, - "limits": { - "$ref": "#/$defs/limits" - } - } + "$ref": "#/$defs/provider_binding" } }, "vendor": { @@ -232,6 +240,9 @@ "minLength": 1, "description": "Lab ID resolving in labs.json; independent of the serving provider." }, + "distribution": { + "$ref": "#/$defs/distribution" + }, "output_token_calculator": { "$ref": "#/$defs/output_token_calculator" }, @@ -250,6 +261,14 @@ "items": { "$ref": "#/$defs/provider_endpoint" } + }, + "reference_provider": { + "type": "string", + "minLength": 1, + "description": "Native API binding to present first as a model reference; not a routing choice." + }, + "provider_coverage": { + "$ref": "#/$defs/provider_coverage" } } }, @@ -330,7 +349,7 @@ "minLength": 1 }, "input": { - "enum": ["text", "image", "video", "audio", "task"] + "enum": ["text", "image", "video", "audio", "task", "multi_image", "asset"] }, "source_url": { "type": "string", @@ -351,6 +370,27 @@ }, "limits": { "$ref": "#/$defs/limits" + }, + "operation": { + "type": "string", + "minLength": 1 + }, + "interface": { + "type": "string", + "minLength": 1 + }, + "published_pricing": { + "$ref": "#/$defs/published_pricing" + }, + "request_schema_url": { + "type": "string", + "format": "uri", + "pattern": "^https://[^/]+(?:/|$)" + }, + "result_schema_url": { + "type": "string", + "format": "uri", + "pattern": "^https://[^/]+(?:/|$)" } } }, @@ -614,6 +654,15 @@ "items": { "$ref": "#/$defs/token_price_tier" } + }, + "scope": { + "type": "string", + "minLength": 1 + }, + "input_cache_write_1h": { + "type": "string", + "pattern": "^(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?$", + "description": "Exact non-negative decimal amount; no exponent notation." } } }, @@ -623,7 +672,13 @@ "required": ["meter", "minimum_input_tokens", "usd_per_token"], "properties": { "meter": { - "enum": ["input", "output", "input_cache_read", "input_cache_write"] + "enum": [ + "input", + "output", + "input_cache_read", + "input_cache_write", + "input_cache_write_1h" + ] }, "minimum_input_tokens": { "type": "integer", @@ -740,6 +795,87 @@ } } }, + "distribution": { + "description": "Official code and weight distribution facts. Availability does not establish a hosted API or permissions beyond the linked licenses.", + "type": "object", + "additionalProperties": false, + "required": ["source_url"], + "anyOf": [ + { + "required": ["code"] + }, + { + "required": ["weights"] + } + ], + "properties": { + "source_url": { + "type": "string", + "format": "uri", + "pattern": "^https://[^/]+(?:/|$)" + }, + "code": { + "type": "object", + "additionalProperties": false, + "required": ["repository_url"], + "properties": { + "repository_url": { + "type": "string", + "format": "uri", + "pattern": "^https://[^/]+(?:/|$)" + }, + "license": { + "$ref": "#/$defs/artifact_license" + } + } + }, + "weights": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": false, + "required": ["url"], + "properties": { + "id": { + "description": "The exact published weight variant identifier, when available.", + "type": "string", + "minLength": 1 + }, + "url": { + "type": "string", + "format": "uri", + "pattern": "^https://[^/]+(?:/|$)" + }, + "license": { + "$ref": "#/$defs/artifact_license" + }, + "access": { + "description": "Public download or gated access as documented by the publisher; independent of license permissions.", + "enum": ["public", "gated"] + } + } + } + } + } + }, + "artifact_license": { + "type": "object", + "additionalProperties": false, + "required": ["name", "url"], + "properties": { + "name": { + "description": "The publisher's license name, including custom licenses; do not infer an SPDX identifier.", + "type": "string", + "minLength": 1 + }, + "url": { + "type": "string", + "format": "uri", + "pattern": "^https://[^/]+(?:/|$)" + } + } + }, "limits": { "type": "object", "additionalProperties": false, @@ -760,6 +896,193 @@ "minimum": 1 } } + }, + "provider_coverage": { + "type": "object", + "minProperties": 1, + "additionalProperties": { + "type": "object", + "additionalProperties": false, + "required": ["disposition", "source_url"], + "properties": { + "disposition": { + "enum": ["listed", "not_listed", "excluded"] + }, + "source_url": { + "type": "string", + "format": "uri", + "pattern": "^https://[^/]+(?:/|$)" + }, + "reason": { + "type": "string", + "minLength": 1 + } + }, + "if": { + "properties": { + "disposition": { + "enum": ["not_listed", "excluded"] + } + } + }, + "then": { + "required": ["reason"] + } + } + }, + "published_price_component": { + "type": "object", + "additionalProperties": false, + "required": ["meter", "unit", "usd_per_unit"], + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "meter": { + "type": "string", + "minLength": 1 + }, + "unit": { + "type": "string", + "minLength": 1 + }, + "usd_per_unit": { + "type": "string", + "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "per_quantity": { + "type": "string", + "pattern": "^(?=.*[1-9])(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "when": { + "type": "object", + "description": "Public JSON Schema predicate restricting the request parameters to which this component applies." + }, + "quantity_rounding": { + "type": "object", + "additionalProperties": false, + "required": ["mode"], + "properties": { + "mode": { + "enum": ["none", "ceil"] + }, + "increment": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "pattern": "^(?=.*[1-9])(0|[1-9][0-9]*)(\\.[0-9]+)?$" + } + ] + } + }, + "if": { + "properties": { + "mode": { + "const": "ceil" + } + } + }, + "then": { + "required": ["increment"], + "properties": { + "increment": { + "type": "string", + "pattern": "^(?=.*[1-9])(0|[1-9][0-9]*)(\\.[0-9]+)?$" + } + } + } + }, + "quantity_range": { + "type": "object", + "additionalProperties": false, + "required": ["meter", "min"], + "properties": { + "meter": { + "type": "string", + "minLength": 1 + }, + "min": { + "type": "string", + "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "max": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "pattern": "^(?=.*[1-9])(0|[1-9][0-9]*)(\\.[0-9]+)?$" + } + ] + } + } + } + } + }, + "published_pricing": { + "type": "object", + "additionalProperties": false, + "required": ["source_url", "currency", "components"], + "properties": { + "source_url": { + "type": "string", + "format": "uri", + "pattern": "^https://[^/]+(?:/|$)" + }, + "currency": { + "const": "USD" + }, + "components": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/$defs/published_price_component" + } + } + } + }, + "provider_binding": { + "type": "object", + "required": ["provider", "id"], + "properties": { + "provider": { + "type": "string" + }, + "id": { + "type": "string", + "minLength": 1 + }, + "distribution": false, + "endpoints": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/$defs/provider_endpoint" + } + }, + "capabilities": { + "$ref": "#/$defs/capabilities" + }, + "token_pricing": { + "$ref": "#/$defs/token_pricing" + }, + "limits": { + "$ref": "#/$defs/limits" + }, + "source_url": { + "type": "string", + "format": "uri", + "pattern": "^https://[^/]+(?:/|$)" + }, + "published_pricing": { + "$ref": "#/$defs/published_pricing" + } + } } } } diff --git a/scripts/check.py b/scripts/check.py index eb2d4fe..7805cb9 100644 --- a/scripts/check.py +++ b/scripts/check.py @@ -24,12 +24,14 @@ import json import math import sys +from decimal import Decimal, InvalidOperation from fractions import Fraction from pathlib import Path from typing import Any, Iterator from urllib.parse import urlsplit from jsonschema import Draft202012Validator +from jsonschema.exceptions import SchemaError import build import cards @@ -91,10 +93,12 @@ def is_calendar_date(value: str) -> bool: SOURCED_OBJECTS = ( + "distribution", "output_token_calculator", "vision_tokenization", "capabilities", "token_pricing", + "published_pricing", "limits", ) @@ -228,8 +232,125 @@ def token_pricing_errors(pricing: dict[str, Any], where: str) -> Iterator[str]: yield f"{where}: overlapping input-token tiers for {meter}" +def distribution_errors(distribution: dict[str, Any], where: str) -> Iterator[str]: + code = distribution.get("code") + artifacts = [] + if isinstance(code, dict): + code_where = f"{where}/code" + yield from source_url_errors(code.get("repository_url"), f"{code_where}/repository_url") + artifacts.append((code_where, code)) + weights = distribution.get("weights", []) + seen_ids: set[str] = set() + seen_urls: dict[str, list[str | None]] = {} + if isinstance(weights, list): + for index, weight in enumerate(weights): + if not isinstance(weight, dict): + continue + weight_where = f"{where}/weights/{index}" + artifacts.append((weight_where, weight)) + url, variant = weight.get("url"), weight.get("id") + yield from source_url_errors(url, f"{weight_where}/url") + if isinstance(variant, str): + if variant in seen_ids: + yield f"{weight_where}: duplicate weight variant {variant!r}" + seen_ids.add(variant) + else: + variant = None + if isinstance(url, str): + previous = seen_urls.setdefault(url, []) + if previous and (variant is None or None in previous or variant in previous): + yield f"{weight_where}: duplicate weight URL without distinct variant IDs" + previous.append(variant) + for artifact_where, artifact in artifacts: + license = artifact.get("license") + if isinstance(license, dict): + yield from source_url_errors(license.get("url"), f"{artifact_where}/license/url") + + +def published_pricing_errors(pricing: dict[str, Any], where: str) -> Iterator[str]: + """Preserve exact public meter amounts without accepting malformed bands.""" + seen_ids = set() + components = pricing.get("components", []) + if not isinstance(components, list): + return + for index, component in enumerate(components): + if not isinstance(component, dict): + continue + component_where = f"{where}/components/{index}" + identifier = component.get("id") + if isinstance(identifier, str): + if identifier in seen_ids: + yield f"{component_where}: duplicate price component id {identifier!r}" + seen_ids.add(identifier) + condition = component.get("when") + if isinstance(condition, dict): + try: + json.dumps(condition, allow_nan=False) + Draft202012Validator.check_schema(condition) + except (SchemaError, TypeError, ValueError): + yield f"{component_where}: when must be a valid JSON Schema predicate" + rounding = component.get("quantity_rounding") + if isinstance(rounding, dict): + if rounding.get("mode") == "none" and rounding.get("increment") is not None: + yield f"{component_where}: no rounding requires a null increment" + if rounding.get("mode") == "ceil" and rounding.get("increment") is None: + yield f"{component_where}: ceil rounding requires an increment" + band = component.get("quantity_range") + if isinstance(band, dict) and band.get("max") is not None: + try: + minimum, maximum = Decimal(band.get("min")), Decimal(band.get("max")) + except (InvalidOperation, TypeError, ValueError): + continue # the schema reports malformed numbers + if minimum.is_finite() and maximum.is_finite() and minimum >= maximum: + yield f"{component_where}: exclusive range max must exceed min" + + +def provider_fact_errors(facts: dict[str, Any]) -> Iterator[str]: + for section, table in facts.items(): + if not isinstance(table, dict): + continue + entries = [(section, table)] if section in NON_TABLE_SECTIONS else [ + (f"{section}/{key}", card) for key, card in table.items() + ] + for where, card in entries: + if not isinstance(card, dict): + continue + providers = card.get("providers", {}) + providers = providers if isinstance(providers, dict) else {} + for name, binding in providers.items(): + if not isinstance(binding, dict): + continue + if binding.get("provider") != name: + yield f"{where}/providers/{name}: binding.provider is {binding.get('provider')!r}" + if not binding.get("id"): + yield f"{where}/providers/{name}: binding has no id" + if "source_url" in binding: + yield from source_url_errors(binding["source_url"], f"{where}/providers/{name}") + direct = card.get("provider") + reference = card.get("reference_provider") + if isinstance(reference, str) and reference not in providers and reference != direct: + yield f"{where}: reference_provider has no provider binding or direct provider" + coverage = card.get("provider_coverage", {}) + if not isinstance(coverage, dict): + continue + for provider, record in coverage.items(): + if not isinstance(record, dict): + continue + record_where = f"{where}/provider_coverage/{provider}" + yield from source_url_errors(record.get("source_url"), record_where) + listed = provider in providers or provider == direct + disposition = record.get("disposition") + if disposition == "listed" and not listed: + yield f"{record_where}: listed provider has no binding or direct provider" + if isinstance(disposition, str) and disposition in {"not_listed", "excluded"} and listed: + yield f"{record_where}: absent or excluded provider still has a binding" + + def published_fact_errors(facts: dict[str, Any]) -> Iterator[str]: for where, value in fact_objects(facts): + for key in ("source_url", "request_schema_url", "result_schema_url"): + if key in value: + yield from source_url_errors(value[key], f"{where}/{key}") endpoints = value.get("endpoints", []) seen_endpoint_ids = set() if isinstance(endpoints, list): @@ -249,10 +370,14 @@ def published_fact_errors(facts: dict[str, Any]) -> Iterator[str]: if "source_js_url" in sourced: yield from source_url_errors(sourced["source_js_url"], f"{sourced_where}/source_js_url") yield from numeric_range_errors(sourced, sourced_where) - if name == "output_token_calculator": + if name == "distribution": + yield from distribution_errors(sourced, sourced_where) + elif name == "output_token_calculator": yield from calculator_errors(sourced, sourced_where) elif name == "token_pricing": yield from token_pricing_errors(sourced, sourced_where) + elif name == "published_pricing": + yield from published_pricing_errors(sourced, sourced_where) if "parameters" in value or "image_constraints" in value: yield from source_url_errors(value.get("source_url"), where) parameters = value.get("parameters", {}) @@ -318,14 +443,8 @@ def invariant_errors(facts: dict[str, Any]) -> Iterator[str]: if not isinstance(providers, dict) or not providers: yield f"{where}: has no provider bindings" continue - for name, binding in providers.items(): - if not isinstance(binding, dict): - continue - if binding.get("provider") != name: - yield f"{where}/providers/{name}: binding.provider is {binding.get('provider')!r}" - if not binding.get("id"): - yield f"{where}/providers/{name}: binding has no id" + yield from provider_fact_errors(facts) yield from published_fact_errors(facts) for exception in sorted(KNOWN_EXCEPTIONS - used_exceptions): diff --git a/tests/test_distribution.py b/tests/test_distribution.py new file mode 100644 index 0000000..4b94cf5 --- /dev/null +++ b/tests/test_distribution.py @@ -0,0 +1,264 @@ +"""Source and weight distribution facts belong to models, not hosted endpoints.""" + +from __future__ import annotations + +import copy +import importlib.util +from pathlib import Path + +import pytest + +ROOT = Path(__file__).resolve().parent.parent +spec = importlib.util.spec_from_file_location("distribution_check", ROOT / "scripts" / "check.py") +check = importlib.util.module_from_spec(spec) +assert spec.loader is not None +spec.loader.exec_module(check) + +CATALOGUE = check.load(check.MODELS_JSON) +SCHEMA = check.load(check.MODELS_SCHEMA) +MODEL_SECTIONS = tuple( + section for section in CATALOGUE if section not in {"$schema", "three_d.rig_check.operation"} +) +SOURCE = "https://model.example/releases/example" +CODE_URL = "https://github.com/example/model" +WEIGHTS_URL = "https://huggingface.co/example/model" +DISTRIBUTION = { + "source_url": SOURCE, + "code": { + "repository_url": CODE_URL, + "license": {"name": "MIT", "url": f"{CODE_URL}/blob/main/LICENSE"}, + }, + "weights": [ + { + "id": "example-4b", + "url": WEIGHTS_URL, + "license": {"name": "Example Weights License", "url": f"{WEIGHTS_URL}/blob/main/LICENSE"}, + "access": "gated", + } + ], +} +ENDPOINT = { + "id": "provider/example", + "input": "text", + "source_url": "https://provider.example/models/example/api", +} + + +def first(facts, section="image.models"): + return next(iter(facts[section].values())) + + +def validate(distribution=DISTRIBUTION, section="image.models"): + facts = copy.deepcopy(CATALOGUE) + first(facts, section)["distribution"] = copy.deepcopy(distribution) + return check.check(facts, SCHEMA) + + +def test_omitted_distribution_preserves_existing_cards(): + facts = copy.deepcopy(CATALOGUE) + for section in MODEL_SECTIONS: + for card in facts[section].values(): + card.pop("distribution", None) + assert check.check(facts, SCHEMA) == [] + + +@pytest.mark.parametrize("section", MODEL_SECTIONS) +def test_distribution_is_intrinsic_to_every_model_family(section): + assert validate(section=section) == [] + + +@pytest.mark.parametrize( + "distribution", + [ + {"source_url": SOURCE, "code": {"repository_url": CODE_URL}}, + {"source_url": SOURCE, "weights": [{"url": WEIGHTS_URL}]}, + { + "source_url": SOURCE, + "code": {"repository_url": CODE_URL}, + "weights": [{"url": WEIGHTS_URL}], + }, + ], +) +def test_code_weights_licenses_and_access_are_independent_optional_facts(distribution): + assert validate(distribution) == [] + + +@pytest.mark.parametrize("access", ["public", "gated"]) +def test_weight_access_records_published_access_conditions(access): + distribution = copy.deepcopy(DISTRIBUTION) + distribution["weights"][0]["access"] = access + assert validate(distribution) == [] + + +@pytest.mark.parametrize( + "distribution", + [ + {}, + {"source_url": SOURCE}, + {"code": {"repository_url": CODE_URL}}, + {"source_url": SOURCE, "code": {}}, + {"source_url": SOURCE, "weights": []}, + {"source_url": SOURCE, "weights": [{}]}, + {"source_url": SOURCE, "code": None}, + {"source_url": SOURCE, "weights": None}, + ], +) +def test_distribution_requires_provenance_and_at_least_one_usable_distribution(distribution): + assert validate(distribution) + + +@pytest.mark.parametrize("kind", ["code", "weights"]) +@pytest.mark.parametrize("missing", ["name", "url"]) +def test_present_license_requires_its_name_and_source_link(kind, missing): + distribution = copy.deepcopy(DISTRIBUTION) + target = distribution["code"] if kind == "code" else distribution["weights"][0] + target["license"].pop(missing) + assert validate(distribution) + + +@pytest.mark.parametrize( + "path", + [ + ("source_url",), + ("code", "repository_url"), + ("code", "license", "name"), + ("code", "license", "url"), + ("weights", 0, "id"), + ("weights", 0, "url"), + ("weights", 0, "license", "name"), + ("weights", 0, "license", "url"), + ], +) +def test_present_distribution_identifiers_and_links_cannot_be_empty(path): + distribution = copy.deepcopy(DISTRIBUTION) + target = distribution + for part in path[:-1]: + target = target[part] + target[path[-1]] = "" + assert validate(distribution) + + +@pytest.mark.parametrize( + "path", + [ + ("source_url",), + ("code", "repository_url"), + ("code", "license", "url"), + ("weights", 0, "url"), + ("weights", 0, "license", "url"), + ], +) +@pytest.mark.parametrize( + "url", + [ + "http://model.example/artifact", + "/artifacts/model", + "https://", + "https://user:password@model.example/artifact", + "https://user@model.example/artifact", + ], +) +def test_every_distribution_link_is_absolute_https_without_credentials(path, url): + distribution = copy.deepcopy(DISTRIBUTION) + target = distribution + for part in path[:-1]: + target = target[part] + target[path[-1]] = url + assert validate(distribution) + + +@pytest.mark.parametrize("access", ["open", "private", "unknown", "", True]) +def test_weight_access_does_not_infer_other_permissions(access): + distribution = copy.deepcopy(DISTRIBUTION) + distribution["weights"][0]["access"] = access + assert validate(distribution) + + +@pytest.mark.parametrize( + "path, key", + [ + ((), "open_source"), + ((), "commercial_use"), + (("code",), "commercial_use"), + (("code", "license"), "approved"), + (("weights", 0), "commercial_use"), + (("weights", 0, "license"), "approved"), + ], +) +def test_distribution_objects_do_not_accept_inferred_rights_or_arbitrary_fields(path, key): + distribution = copy.deepcopy(DISTRIBUTION) + target = distribution + for part in path: + target = target[part] + target[key] = True + assert validate(distribution) + + +def test_distinct_exact_variants_can_share_one_weights_repository(): + distribution = { + "source_url": SOURCE, + "weights": [ + {"id": "example-4b", "url": WEIGHTS_URL}, + {"id": "example-8b", "url": WEIGHTS_URL}, + ], + } + assert validate(distribution) == [] + + +def test_distinct_weights_repositories_do_not_require_invented_variant_ids(): + distribution = { + "source_url": SOURCE, + "weights": [ + {"url": f"{WEIGHTS_URL}-small"}, + {"url": f"{WEIGHTS_URL}-large"}, + ], + } + assert validate(distribution) == [] + + +def test_exact_variant_ids_cannot_repeat_even_with_different_repository_urls(): + distribution = { + "source_url": SOURCE, + "weights": [ + {"id": "example-4b", "url": WEIGHTS_URL}, + {"id": "example-4b", "url": f"{WEIGHTS_URL}-mirror"}, + ], + } + assert validate(distribution) + + +@pytest.mark.parametrize("ids", [(None, None), (None, "example-4b"), ("example-4b", None)]) +def test_repeated_weights_repository_requires_distinct_explicit_variant_ids(ids): + weights = [{"url": WEIGHTS_URL}, {"url": WEIGHTS_URL}] + for weight, variant_id in zip(weights, ids): + if variant_id is not None: + weight["id"] = variant_id + assert validate({"source_url": SOURCE, "weights": weights}) + + +def test_distribution_is_not_a_hosted_provider_binding_fact(): + facts = copy.deepcopy(CATALOGUE) + binding = next(iter(first(facts)["providers"].values())) + binding["distribution"] = copy.deepcopy(DISTRIBUTION) + assert check.check(facts, SCHEMA) + + +@pytest.mark.parametrize("placement", ["binding", "model", "operation"]) +def test_distribution_cannot_be_attached_to_endpoint_variants(placement): + facts = copy.deepcopy(CATALOGUE) + if placement == "binding": + target = next(iter(first(facts)["providers"].values())) + elif placement == "model": + target = first(facts, "three_d.models") + else: + target = facts["three_d.rig_check.operation"] + endpoint = copy.deepcopy(ENDPOINT) + endpoint["distribution"] = copy.deepcopy(DISTRIBUTION) + target["endpoints"] = [endpoint] + assert check.check(facts, SCHEMA) + + +def test_distribution_is_not_a_rig_check_operation_fact(): + facts = copy.deepcopy(CATALOGUE) + facts["three_d.rig_check.operation"]["distribution"] = copy.deepcopy(DISTRIBUTION) + assert check.check(facts, SCHEMA) diff --git a/tests/test_provider_coverage.py b/tests/test_provider_coverage.py new file mode 100644 index 0000000..b10eb91 --- /dev/null +++ b/tests/test_provider_coverage.py @@ -0,0 +1,234 @@ +"""Provider facts apply uniformly to model families and preserve public price meaning.""" + +from __future__ import annotations + +import copy +import importlib.util +from pathlib import Path + +import pytest + +ROOT = Path(__file__).resolve().parent.parent +spec = importlib.util.spec_from_file_location("coverage_check", ROOT / "scripts" / "check.py") +check = importlib.util.module_from_spec(spec) +assert spec.loader is not None +spec.loader.exec_module(check) +CATALOGUE = check.load(check.MODELS_JSON) +SCHEMA = check.load(check.MODELS_SCHEMA) +SECTIONS = tuple(section for section in CATALOGUE if section != "$schema") +SOURCE = "https://provider.example/models" +BINDING = {"id": "test-model", "provider": "example", "source_url": SOURCE} +PRICE = { + "source_url": SOURCE, + "currency": "USD", + "components": [{ + "id": "input-band", "meter": "input_tokens", "unit": "token", + "usd_per_unit": "0.0000015", "per_quantity": "1", + "when": {"properties": {"quality": {"enum": ["standard", "high"]}}}, + "quantity_rounding": {"mode": "none", "increment": None}, + "quantity_range": {"meter": "input_tokens", "min": "0", "max": "1000"}, + }], +} + + +def mutate(callback, section="image.models"): + facts = copy.deepcopy(CATALOGUE) + card = facts[section] if section in check.NON_TABLE_SECTIONS else next(iter(facts[section].values())) + callback(card) + return check.check(facts, SCHEMA) + + +def add_binding(card): + card.setdefault("providers", {})["example"] = copy.deepcopy(BINDING) + card["reference_provider"] = "example" + card.setdefault("provider_coverage", {})["example"] = { + "disposition": "listed", "source_url": SOURCE, + } + + +@pytest.mark.parametrize("section", SECTIONS) +def test_reference_and_coverage_are_valid_in_every_family_and_operation(section): + assert mutate(add_binding, section) == [] + + +@pytest.mark.parametrize("section", SECTIONS) +def test_provider_key_must_match_even_outside_image_and_video(section): + def edit(card): + add_binding(card) + card["providers"]["example"]["provider"] = "different" + assert any("binding.provider" in error for error in mutate(edit, section)) + + +def test_reference_resolves_existing_native_direct_provider_without_duplicate_binding(): + def edit(card): + card["reference_provider"] = card["provider"] + assert mutate(edit, "three_d.rig_check.operation") == [] + + +def test_reference_does_not_create_an_invented_provider(): + assert any("reference_provider" in error for error in mutate(lambda card: card.update(reference_provider="invented"))) + + +@pytest.mark.parametrize("disposition", ["not_listed", "excluded"]) +def test_absence_requires_a_public_reason_and_cannot_coexist_with_binding(disposition): + def no_reason(card): + card["provider_coverage"] = {"unlisted": {"disposition": disposition, "source_url": SOURCE}} + assert mutate(no_reason) + def contradictory(card): + add_binding(card) + card["provider_coverage"]["example"].update(disposition=disposition, reason="Documented incompatible contract") + assert any("still has a binding" in error for error in mutate(contradictory)) + def valid(card): + card["provider_coverage"] = {"unlisted": { + "disposition": disposition, "source_url": SOURCE, "reason": "Published endpoint uses a different model identity", + }} + assert mutate(valid) == [] + + +def test_listed_coverage_cannot_replace_a_missing_binding(): + def edit(card): + card["provider_coverage"] = {"invented": {"disposition": "listed", "source_url": SOURCE}} + assert any("no binding" in error for error in mutate(edit)) + + +@pytest.mark.parametrize("url", ["http://example.com", "https://user:password@example.com", "/models"]) +def test_coverage_and_binding_sources_reject_unsafe_or_relative_links(url): + def edit(card): + add_binding(card) + card["provider_coverage"]["example"]["source_url"] = url + assert mutate(edit) + def binding(card): + add_binding(card) + card["providers"]["example"]["source_url"] = url + assert mutate(binding) + + +def price_mutation(callback=lambda price: None, *, endpoint=False): + def edit(card): + add_binding(card) + target = card["providers"]["example"] + if endpoint: + target["endpoints"] = [{"id": "generate", "operation": "image.generate", "interface": "openai.images", "input": "multi_image", "source_url": SOURCE}] + target = target["endpoints"][0] + target["published_pricing"] = copy.deepcopy(PRICE) + callback(target["published_pricing"]) + return mutate(edit) + + +@pytest.mark.parametrize("endpoint", [False, True]) +def test_public_usd_components_are_exact_and_provider_neutral(endpoint): + assert price_mutation(endpoint=endpoint) == [] + + +@pytest.mark.parametrize("value", [1.5, "-1", "NaN", "1e-5", "0.0.1"]) +def test_published_rates_use_nonnegative_decimal_strings(value): + assert price_mutation(lambda price: price["components"][0].update(usd_per_unit=value)) + + +@pytest.mark.parametrize("value", ["0", "0.0", "-1", 1]) +def test_price_denominator_must_be_a_positive_decimal(value): + assert price_mutation(lambda price: price["components"][0].update(per_quantity=value)) + + +@pytest.mark.parametrize("band", [{"min": "1000", "max": "1000"}, {"min": "1001", "max": "1000"}]) +def test_half_open_price_bands_must_have_positive_width(band): + assert price_mutation(lambda price: price["components"][0]["quantity_range"].update(band)) + + +def test_unbounded_price_band_remains_valid(): + assert price_mutation(lambda price: price["components"][0]["quantity_range"].update(max=None)) == [] + + +@pytest.mark.parametrize("rounding", [{"mode": "none", "increment": "1"}, {"mode": "ceil", "increment": None}]) +def test_rounding_mode_and_increment_must_agree(rounding): + assert price_mutation(lambda price: price["components"][0].update(quantity_rounding=rounding)) + + +def test_ceil_quantity_rounding_preserves_its_positive_increment(): + assert price_mutation(lambda price: price["components"][0].update(quantity_rounding={"mode": "ceil", "increment": "1"})) == [] + + +def test_duplicate_component_identity_rejected(): + assert price_mutation(lambda price: price["components"].append(copy.deepcopy(price["components"][0]))) + + +@pytest.mark.parametrize("extra", ["margin", "credits_per_dollar", "promotion_end", "account_price"]) +def test_published_pricing_does_not_accept_business_or_promotion_fields(extra): + assert price_mutation(lambda price: price.update({extra: "example"})) + + +def test_public_price_requires_currency_source_and_components(): + for field in ["source_url", "currency", "components"]: + assert price_mutation(lambda price: price.pop(field)) + + +def test_price_conditions_are_valid_json_schema_predicates(): + assert price_mutation(lambda price: price["components"][0].update(when={"properties": {"quality": {"const": "high"}}})) == [] + assert price_mutation(lambda price: price["components"][0].update(when={"type": "not-a-json-type"})) + + +@pytest.mark.parametrize("field", ["request_schema_url", "result_schema_url"]) +def test_public_contract_links_are_https_without_credentials(field): + def edit(card): + add_binding(card) + card["providers"]["example"]["endpoints"] = [{ + "id": "generate", "input": "image", "source_url": SOURCE, + field: "https://user:password@example.com/schema", + }] + assert mutate(edit) + + +def test_cache_write_ttls_remain_separate_prices(): + def edit(card): + add_binding(card) + card["providers"]["example"]["token_pricing"] = { + "source_url": SOURCE, "unit": "usd_per_token", "scope": "Standard service; cache writes 5 minutes and 1 hour", + "input_cache_write": "0.00000125", "input_cache_write_1h": "0.000002", + } + assert mutate(edit) == [] + + +def test_toml_omission_preserves_unbounded_range_and_no_rounding(): + """Arrays need no synthetic nulls: TOML omits only semantically optional fields.""" + import tomllib + pricing = tomllib.loads(''' +source_url = "https://provider.example/models" +currency = "USD" +[[components]] +meter = "input_tokens" +unit = "token" +usd_per_unit = "0.000005" +[components.quantity_rounding] +mode = "none" +[components.quantity_range] +meter = "input_tokens" +min = "1000" +''') + def replace(price): + price.clear() + price.update(pricing) + assert price_mutation(replace, endpoint=True) == [] + assert "max" not in pricing["components"][0]["quantity_range"] + assert "increment" not in pricing["components"][0]["quantity_rounding"] + + +def test_missing_component_rate_is_unknown_not_zero(): + assert price_mutation(lambda price: price["components"][0].pop("usd_per_unit")) + assert mutate(add_binding) == [] # known provider can omit the entire unknown price + + +def test_ceil_cannot_omit_increment(): + assert price_mutation(lambda price: price["components"][0].update(quantity_rounding={"mode": "ceil"})) + + +@pytest.mark.parametrize("disposition", [[], {}, 1, None]) +def test_malformed_coverage_disposition_reports_errors_without_crashing(disposition): + def edit(card): + add_binding(card) + card["provider_coverage"]["example"]["disposition"] = disposition + assert mutate(edit) + + +@pytest.mark.parametrize("number", [float("nan"), float("inf"), -float("inf")]) +def test_price_conditions_are_finite_json(number): + assert price_mutation(lambda price: price["components"][0].update(when={"properties": {"quantity": {"maximum": number}}})) From d7716e6dce13a4240a1bc48c301de96d104b6324 Mon Sep 17 00:00:00 2001 From: Universe Date: Tue, 13 Oct 2026 21:06:13 +0900 Subject: [PATCH 6/8] Qualify native and public provider coverage with regular rates --- catalogue/PROVENANCE.md | 137 +- catalogue/models.json | 8862 +++++++++++++++-- models/851-labs/background-remover/card.toml | 5 + models/alibaba/wan-3.0/card.toml | 81 + models/anthropic/claude-fable-5.1/card.toml | 99 +- models/anthropic/claude-fable-5/card.toml | 99 +- models/anthropic/claude-haiku-5.5/card.toml | 105 +- models/anthropic/claude-opus-4.8/card.toml | 99 +- models/anthropic/claude-opus-5.5/card.toml | 81 +- models/anthropic/claude-opus-5/card.toml | 99 +- models/anthropic/claude-sonnet-5.5/card.toml | 81 +- models/anthropic/claude-sonnet-5/card.toml | 99 +- models/black-forest-labs/flux-2-max/card.toml | 32 + models/black-forest-labs/flux-2-pro/card.toml | 32 + .../flux-kontext-max/card.toml | 14 + .../flux-kontext-pro/card.toml | 14 + .../black-forest-labs/flux-pro-1.1/card.toml | 21 + models/bria/remove-background/card.toml | 23 + models/bytedance/seedance-2.0/card.toml | 91 +- models/bytedance/seedance-2.5/card.toml | 88 + models/bytedance/seedream-4.5/card.toml | 14 + models/bytedance/seedream-5.0-lite/card.toml | 31 + models/bytedance/seedream-5.0-pro/card.toml | 31 + .../eleven_text_to_sound_v2/card.toml | 14 + models/elevenlabs/eleven_v3/card.toml | 14 + models/google/gemini-3-pro-image/card.toml | 31 + .../gemini-3.1-flash-image-preview/card.toml | 31 + .../gemini-3.1-flash-lite-image/card.toml | 21 + .../google/gemini-3.1-pro-preview/card.toml | 116 +- models/google/gemini-3.7-flash/card.toml | 104 +- models/google/gemini-3.8-flash/card.toml | 103 +- models/google/gemini-embedding-2/card.toml | 30 +- models/google/lyria-3-pro/card.toml | 28 + models/google/lyria-3/card.toml | 28 + models/google/veo-3.1-fast/card.toml | 52 + models/google/veo-3.1-lite/card.toml | 51 + models/google/veo-3.1/card.toml | 31 + models/meta/muse-image-1.0/card.toml | 25 + models/microsoft/trellis-2/card.toml | 33 + models/nightmareai/real-esrgan/card.toml | 9 + models/openai/gpt-5.5-pro/card.toml | 104 +- models/openai/gpt-5.5/card.toml | 117 +- models/openai/gpt-5.6-luna/card.toml | 123 +- models/openai/gpt-5.6-sol/card.toml | 116 +- models/openai/gpt-5.6-terra/card.toml | 123 +- models/openai/gpt-6-astra/card.toml | 123 +- models/openai/gpt-image-1-mini/card.toml | 48 + models/openai/gpt-image-1.5/card.toml | 22 + models/openai/gpt-image-2.5-flare/card.toml | 73 +- .../openai/gpt-image-2.5-sunburst/card.toml | 73 +- models/openai/gpt-image-2/card.toml | 70 +- .../recraft-remove-background/card.toml | 15 + models/recraft-ai/recraft-v3/card.toml | 14 + models/recraft-ai/recraft-v4.1/card.toml | 28 + .../hunyuan-3d/v3.1/pro/image-to-3d/card.toml | 37 + .../hunyuan-3d/v3.1/pro/text-to-3d/card.toml | 37 + models/tripo/h3.1/card.toml | 39 + models/tripo/p1/card.toml | 34 + models/tripo/p2/card.toml | 40 + models/tripo/rig-check/operation.toml | 21 + models/tripo/rig-v1.0/card.toml | 21 + models/tripo/rig-v2.5/card.toml | 21 + models/xai/grok-imagine-image-2.0/card.toml | 31 + models/xai/grok-imagine-video-1.5/card.toml | 66 + 64 files changed, 11540 insertions(+), 815 deletions(-) diff --git a/catalogue/PROVENANCE.md b/catalogue/PROVENANCE.md index 75de752..a3105c2 100644 --- a/catalogue/PROVENANCE.md +++ b/catalogue/PROVENANCE.md @@ -101,9 +101,8 @@ https://platform.claude.com/docs/en/models/sonnet-5-5/whats-new-sonnet-5-5 ## `"anthropic/claude-sonnet-5": {` -$2/$10 is the standard rate, not a live discount: it launched as an -introductory rate and Anthropic made it permanent, cancelling the -announced step up to $3/$15. Do not restore the higher card. +$2/$10 per million input/output tokens is Anthropic's published regular rate. +Do not substitute an obsolete higher rate. https://platform.claude.com/docs/en/about-claude/pricing ## `"anthropic/claude-fable-5.1": {` @@ -134,11 +133,12 @@ https://platform.claude.com/docs/en/models/opus-5-5/migration-guide Google's cache model is read + hourly storage (no one-time write premium that matches `cacheWrite` semantics), so the field is omitted. -Steady-state rates. Google is promoting $0.75 in / $3.75 out / $0.075 -cacheRead through 2026-12-31; these are the prices that apply from -2027-01-01. Checking Google's page before then will show the lower -set — that is the promotion, not a correction. Gemini 3.8 Flash is GA, -and this exact id is live on both Vercel AI Gateway and OpenRouter. +The intrinsic cost records Google's published regular rates: $1.50 input, +$7.50 output, and $0.15 cached input per million tokens. Promotional rates +and their expiry dates are excluded. This evidence applies to Google's +rates; each serving provider's regular prices need its own evidence. +Gemini 3.8 Flash is GA, and this exact id is listed on both Vercel AI Gateway +and OpenRouter. https://ai.google.dev/gemini-api/docs/models/gemini-3.8-flash https://ai.google.dev/gemini-api/docs/pricing https://vercel.com/ai-gateway/models/gemini-3.8-flash @@ -894,19 +894,108 @@ qualification and each resolution's published budget, including the 2240-token These parameters describe provider tokenization. Preflight estimates do not establish final charges. -## Vercel standard token pricing and capabilities (2026-10-13) - -[Vercel's public model feed](https://ai-gateway.vercel.sh/v1/models) supplies the -standard decimal USD-per-token rates, input-length pricing bands, served -context/output limits and provider-backed image-input, tools, reasoning and -structured-output facts for the 17 recorded text bindings. A band's minimum is -inclusive and maximum is exclusive; an omitted maximum is unbounded. Published -band thresholds are preserved exactly rather than normalized across models. -Provider serving limits can be narrower than the intrinsic lab limits, so both -are retained at their respective scopes. - -Standard token pricing excludes separately published fast, regional, alternate -service-tier and server-tool prices. It is not a claim that those options have -the same rate. Streaming is an API transport behavior rather than a per-model -flag in the feed, and a provider's structured-output support does not establish -every consumer's particular JSON-format compatibility. +## Text provider references and regular pricing (2026-10-13) + +All 17 text cards retain independent native, Vercel and OpenRouter bindings. +The native model pages establish exact IDs and synchronous limits. Claude's +[pricing table](https://platform.claude.com/docs/en/about-claude/pricing) separates +five-minute and one-hour cache writes. Google's +[Standard pricing](https://ai.google.dev/gemini-api/docs/pricing) excludes optional +cache storage, grounding and alternate service tiers. Native and intermediary +limits and input-length bands intentionally remain distinct; a native reference +is a presentation choice, not a routing preference. + +[Vercel's model feed](https://ai-gateway.vercel.sh/v1/models) supplies serving +limits and supported capabilities. Prices were checked against each model's +public page for regular-rate qualification. The +[Gemini 3.7 Flash](https://vercel.com/ai-gateway/models/gemini-3.7-flash) and +[Gemini 3.8 Flash](https://vercel.com/ai-gateway/models/gemini-3.8-flash) pages +publish explicit list tiers of $1.50 input, $7.50 output and $0.15 cached input +per million tokens. These replace discounted feed values; they are not inferred +by reversing a percentage. OpenRouter's corresponding model pages independently +publish the same list rates. Standard/global pricing excludes regional premiums, +optional tools and alternate service tiers. + +[OpenRouter's model feed](https://openrouter.ai/api/v1/models) supplies its exact +IDs, modalities, limits and capabilities. Each model page qualifies the rates; +provider input-length boundaries are preserved exactly. The +[GPT-5.6 Sol endpoint listing](https://openrouter.ai/api/v1/models/openai/gpt-5.6-sol/endpoints) +independently establishes the recorded Standard rates and tiers. Time-based +cache-storage rates are not per-token cache-write prices. + +The native [GPT-5.6 Sol page](https://developers.openai.com/api/docs/models/gpt-5.6-sol) +and [OpenAI pricing](https://developers.openai.com/api/docs/pricing) qualify the +visible native rate as promotional without publishing a regular replacement. +That binding therefore omits pricing; unknown does not mean free. Its Vercel and +OpenRouter prices remain independently sourced. No discount schedule is tracked. +GPT-5.5 Pro has no invented native cache discount or unverified native +long-context price; intermediary bands remain separate provider facts. + +## TRELLIS.2 distribution (2026-10-13) + +Microsoft's [official repository](https://github.com/microsoft/TRELLIS.2) links +the [TRELLIS.2-4B weights](https://huggingface.co/microsoft/TRELLIS.2-4B). +The [code license](https://github.com/microsoft/TRELLIS.2/blob/main/LICENSE) +and the weight model card both identify MIT; these are recorded separately. +The Hugging Face model metadata reports `gated: false`, so the published weight +access is recorded as public. Dependency licenses remain separate from these +artifact licenses. Distribution links do not establish a hosted inference API, +free inference or permission for every possible use. + +## Provider coverage and non-text differences (2026-10-13) + +All existing cards are retained. Provider coverage was checked against +[OpenRouter discovery](https://openrouter.ai/api/v1/models) and its image, video +and embedding feeds, [Vercel discovery](https://ai-gateway.vercel.sh/v1/models), +and fal's endpoint catalogue. Exact aliases matter: OpenRouter's Muse and Lyria +preview IDs differ from canonical card IDs. `not_listed` records absence from +those inspected public listings, not a promise that a provider will never offer +an equivalent endpoint. fal coverage is restricted to media. + +Native references now identify actual lab APIs, including BytePlus for ByteDance, +Google Developer API, Meta, BFL, Recraft, xAI and Alibaba. Open weights do not +invent a lab-hosted API. Native and reseller prices retain their own meters: + +- OpenRouter GPT Image 2 uses separate text-input, image-input and image-output + token meters. Its 2.5 endpoints now list transparency; its Image 2 endpoint + lists only `auto` and `opaque`. +- Seedance video-token SKUs replace an inaccurate OpenRouter per-second estimate. + Input-video, resolution and audio variants remain distinct. BytePlus's current + [pricing page](https://docs.byteplus.com/en/docs/ModelArk/model-pricing) + publishes Seedream Pro's 2.61-million-pixel threshold; older indexed material + differs. The dated native model ID is retained. +- Google's [regular embedding prices](https://ai.google.dev/gemini-api/docs/pricing) + distinguish text, image, audio and video inputs. A provider that only publishes + some meters does not inherit the others by assumption. +- [BFL pricing](https://bfl.ai/pricing) distinguishes first versus additional/input + megapixels, ceiling rounding, pixel units and capped input sizes. Its flat + FLUX 1.1 image price is not fal's megapixel price. Native xAI input-image charges + and Alibaba's documented International-region regular rates remain qualified. + +fal Tripo P2, native Tencent Hunyuan and native Bria retain verified endpoints +without an invented regular USD price. Bria's hosted checkpoint is not pinned by +its API reference. OpenRouter Muse's image-specific endpoint metadata is empty; +its general endpoint token meters do not establish image parameter parity. +These gaps are explicit qualifications, not zero-price defaults or passed paid +behavior tests. Real-ESRGAN's official code link is distribution metadata, not +an invented native hosted provider. + +## Grida public service bindings (2026-10-13) + +Grida bindings cover its existing 40 models and the rig-check operation; the +other 21 retained model cards do not claim Grida availability. Public +[model discovery](https://gateway.grida.ai/v1/models), +[endpoint discovery](https://gateway.grida.ai/v1/endpoints), and +[operation schemas](https://gateway.grida.ai/schemas/operations.json) establish +service identities and contracts. Discovery requires authentication. Synchronous +image, asynchronous video and specialized operation interfaces stay explicit; +these bindings do not imply another provider's parameter compatibility. + +`published_pricing` records advertised USD per named quantity, including bands, +conditions and rounding. Provider-specific normalized quantities are not raw +image counts or guaranteed per-request totals. Source unit identifiers are +preserved. Grida's two Gemini Flash regular-price entries are the proposed next +published schedule; release coordination must precede describing those rates as +already live. Other recorded service rates match the inspected discovery. +This catalogue describes public service facts without supplier selection or +private financial policy. diff --git a/catalogue/models.json b/catalogue/models.json index 1cdc431..f6ec138 100644 --- a/catalogue/models.json +++ b/catalogue/models.json @@ -4,6 +4,7 @@ "anthropic/claude-fable-5": { "id": "anthropic/claude-fable-5", "vendor": "anthropic", + "reference_provider": "anthropic", "label": "Claude Fable 5", "short_label": "Fable 5", "multimodal": true, @@ -40,8 +41,9 @@ } ], "token_pricing": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://vercel.com/ai-gateway/models/claude-fable-5", "unit": "usd_per_token", + "scope": "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration.", "input": "0.00001", "output": "0.00005", "input_cache_read": "0.000001", @@ -59,6 +61,137 @@ "context_tokens": 1000000, "max_output_tokens": 128000 } + }, + "anthropic": { + "provider": "anthropic", + "id": "claude-fable-5", + "url": "https://platform.claude.com/docs/en/models/fable-5/overview", + "source_url": "https://platform.claude.com/docs/en/models/fable-5/overview", + "endpoints": [ + { + "id": "claude-fable-5", + "input": "text", + "source_url": "https://platform.claude.com/docs/en/models/fable-5/overview" + } + ], + "token_pricing": { + "source_url": "https://platform.claude.com/docs/en/models/fable-5/overview", + "unit": "usd_per_token", + "scope": "Standard global synchronous service; input_cache_write is the 5-minute cache write, input_cache_write_1h is the 1-hour cache write. Batch, fast mode and regional premiums are excluded.", + "input": "0.00001", + "output": "0.00005", + "input_cache_write": "0.0000125", + "input_cache_write_1h": "0.00002", + "input_cache_read": "0.000001" + }, + "capabilities": { + "source_url": "https://platform.claude.com/docs/en/models/fable-5/overview", + "image_input": true, + "reasoning": true + }, + "limits": { + "source_url": "https://platform.claude.com/docs/en/models/fable-5/overview", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + }, + "openrouter": { + "provider": "openrouter", + "id": "anthropic/claude-fable-5", + "url": "https://openrouter.ai/anthropic/claude-fable-5", + "source_url": "https://openrouter.ai/anthropic/claude-fable-5", + "endpoints": [ + { + "id": "anthropic/claude-fable-5", + "input": "text", + "source_url": "https://openrouter.ai/api/v1/models" + } + ], + "token_pricing": { + "source_url": "https://openrouter.ai/anthropic/claude-fable-5", + "unit": "usd_per_token", + "scope": "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. input_cache_write is the 5-minute cache write; input_cache_write_1h is the 1-hour cache write.", + "input": "0.00001", + "output": "0.00005", + "input_cache_read": "0.000001", + "input_cache_write": "0.0000125", + "input_cache_write_1h": "0.00002" + }, + "capabilities": { + "source_url": "https://openrouter.ai/api/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://openrouter.ai/api/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + }, + "grida": { + "provider": "grida", + "id": "anthropic/claude-fable-5", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "anthropic/claude-fable-5", + "input": "text", + "source_url": "https://gateway.grida.ai/v1/models", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "input_tokens", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.00001" + }, + { + "id": "cached_input_tokens", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.000001" + }, + { + "id": "output_tokens", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.00005" + } + ] + } + } + ], + "capabilities": { + "source_url": "https://gateway.grida.ai/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://gateway.grida.ai/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } } }, "vision_tokenization": { @@ -68,11 +201,35 @@ "detail_maximum_edges": { "default": 2576 } + }, + "provider_coverage": { + "anthropic": { + "disposition": "listed", + "source_url": "https://platform.claude.com/docs/en/models/fable-5/overview" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/claude-fable-5" + }, + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/anthropic/claude-fable-5" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + }, + "fal": { + "disposition": "excluded", + "source_url": "https://fal.ai/models", + "reason": "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." + } } }, "anthropic/claude-fable-5.1": { "id": "anthropic/claude-fable-5.1", "vendor": "anthropic", + "reference_provider": "anthropic", "label": "Claude Fable 5.1", "short_label": "Fable 5.1", "multimodal": true, @@ -109,8 +266,9 @@ } ], "token_pricing": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://vercel.com/ai-gateway/models/claude-fable-5.1", "unit": "usd_per_token", + "scope": "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration.", "input": "0.00001", "output": "0.00005", "input_cache_read": "0.00000025", @@ -128,6 +286,137 @@ "context_tokens": 1000000, "max_output_tokens": 128000 } + }, + "anthropic": { + "provider": "anthropic", + "id": "claude-fable-5-1", + "url": "https://platform.claude.com/docs/en/models/fable-5-1/overview", + "source_url": "https://platform.claude.com/docs/en/models/fable-5-1/overview", + "endpoints": [ + { + "id": "claude-fable-5-1", + "input": "text", + "source_url": "https://platform.claude.com/docs/en/models/fable-5-1/overview" + } + ], + "token_pricing": { + "source_url": "https://platform.claude.com/docs/en/models/fable-5-1/overview", + "unit": "usd_per_token", + "scope": "Standard global synchronous service; input_cache_write is the 5-minute cache write, input_cache_write_1h is the 1-hour cache write. Batch, fast mode and regional premiums are excluded.", + "input": "0.00001", + "output": "0.00005", + "input_cache_write": "0.0000125", + "input_cache_write_1h": "0.00002", + "input_cache_read": "0.00000025" + }, + "capabilities": { + "source_url": "https://platform.claude.com/docs/en/models/fable-5-1/overview", + "image_input": true, + "reasoning": true + }, + "limits": { + "source_url": "https://platform.claude.com/docs/en/models/fable-5-1/overview", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + }, + "openrouter": { + "provider": "openrouter", + "id": "anthropic/claude-fable-5.1", + "url": "https://openrouter.ai/anthropic/claude-fable-5.1", + "source_url": "https://openrouter.ai/anthropic/claude-fable-5.1", + "endpoints": [ + { + "id": "anthropic/claude-fable-5.1", + "input": "text", + "source_url": "https://openrouter.ai/api/v1/models" + } + ], + "token_pricing": { + "source_url": "https://openrouter.ai/anthropic/claude-fable-5.1", + "unit": "usd_per_token", + "scope": "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. input_cache_write is the 5-minute cache write; input_cache_write_1h is the 1-hour cache write.", + "input": "0.00001", + "output": "0.00005", + "input_cache_read": "0.00000025", + "input_cache_write": "0.0000125", + "input_cache_write_1h": "0.00002" + }, + "capabilities": { + "source_url": "https://openrouter.ai/api/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://openrouter.ai/api/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + }, + "grida": { + "provider": "grida", + "id": "anthropic/claude-fable-5.1", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "anthropic/claude-fable-5.1", + "input": "text", + "source_url": "https://gateway.grida.ai/v1/models", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "input_tokens", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.00001" + }, + { + "id": "cached_input_tokens", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.00000025" + }, + { + "id": "output_tokens", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.00005" + } + ] + } + } + ], + "capabilities": { + "source_url": "https://gateway.grida.ai/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://gateway.grida.ai/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } } }, "vision_tokenization": { @@ -137,11 +426,35 @@ "detail_maximum_edges": { "default": 2576 } + }, + "provider_coverage": { + "anthropic": { + "disposition": "listed", + "source_url": "https://platform.claude.com/docs/en/models/fable-5-1/overview" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/claude-fable-5.1" + }, + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/anthropic/claude-fable-5.1" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + }, + "fal": { + "disposition": "excluded", + "source_url": "https://fal.ai/models", + "reason": "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." + } } }, "anthropic/claude-haiku-5.5": { "id": "anthropic/claude-haiku-5.5", "vendor": "anthropic", + "reference_provider": "anthropic", "label": "Claude Haiku 5.5", "short_label": "Haiku 5.5", "multimodal": true, @@ -183,8 +496,9 @@ } ], "token_pricing": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://vercel.com/ai-gateway/models/claude-haiku-5.5", "unit": "usd_per_token", + "scope": "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration.", "input": "0.0000001", "output": "0.0000005", "input_cache_read": "0.00000001", @@ -248,76 +562,189 @@ "context_tokens": 1000000, "max_output_tokens": 128000 } - } - }, - "vision_tokenization": { - "source_url": "https://platform.claude.com/docs/en/build-with-claude/vision", - "patch_size_px": 28, - "maximum_tokens_per_image": 4784, - "detail_maximum_edges": { - "default": 2576 - } - } - }, - "anthropic/claude-opus-4.8": { - "id": "anthropic/claude-opus-4.8", - "vendor": "anthropic", - "label": "Claude Opus 4.8", - "short_label": "Opus 4.8", - "multimodal": true, - "image_input_mimes": [ - "image/jpeg", - "image/png", - "image/gif", - "image/webp" - ], - "tool_call": true, - "context_window": 1000000, - "output_limit": 128000, - "cost": { - "input": 5, - "output": 25, - "cache_read": 0.5, - "cache_write": 6.25 - }, - "release": { - "date": "2026-05-28", - "basis": "model", - "source_url": "https://platform.claude.com/docs/en/release-notes/overview" - }, - "providers": { - "vercel": { - "provider": "vercel", - "id": "anthropic/claude-opus-4.8", - "url": "https://ai-gateway.vercel.sh/v1/models", + }, + "anthropic": { + "provider": "anthropic", + "id": "claude-haiku-5-5", + "url": "https://platform.claude.com/docs/en/models/haiku-5-5/overview", + "source_url": "https://platform.claude.com/docs/en/models/haiku-5-5/overview", "endpoints": [ { - "id": "anthropic/claude-opus-4.8", + "id": "claude-haiku-5-5", "input": "text", - "source_url": "https://ai-gateway.vercel.sh/v1/models" + "source_url": "https://platform.claude.com/docs/en/models/haiku-5-5/overview" } ], "token_pricing": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://platform.claude.com/docs/en/models/haiku-5-5/overview", "unit": "usd_per_token", - "input": "0.000005", - "output": "0.000025", - "input_cache_read": "0.0000005", - "input_cache_write": "0.00000625" + "scope": "Standard global synchronous service; input_cache_write is the 5-minute cache write, input_cache_write_1h is the 1-hour cache write. Batch, fast mode and regional premiums are excluded.", + "input": "0.0000001", + "output": "0.0000005", + "input_cache_write": "0.000000125", + "input_cache_write_1h": "0.0000002", + "input_cache_read": "0.00000001", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "maximum_input_tokens": 100001, + "usd_per_token": "0.0000001" + }, + { + "meter": "input", + "minimum_input_tokens": 100001, + "usd_per_token": "0.0000005" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "maximum_input_tokens": 100001, + "usd_per_token": "0.0000005" + }, + { + "meter": "output", + "minimum_input_tokens": 100001, + "usd_per_token": "0.0000025" + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 0, + "maximum_input_tokens": 100001, + "usd_per_token": "0.000000125" + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 100001, + "usd_per_token": "0.000000625" + }, + { + "meter": "input_cache_write_1h", + "minimum_input_tokens": 0, + "maximum_input_tokens": 100001, + "usd_per_token": "0.0000002" + }, + { + "meter": "input_cache_write_1h", + "minimum_input_tokens": 100001, + "usd_per_token": "0.0000010" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "maximum_input_tokens": 100001, + "usd_per_token": "0.00000001" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 100001, + "usd_per_token": "0.00000005" + } + ] }, "capabilities": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://platform.claude.com/docs/en/models/haiku-5-5/overview", "image_input": true, - "tools": true, - "reasoning": true, - "structured_output": true + "reasoning": true }, "limits": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://platform.claude.com/docs/en/models/haiku-5-5/overview", "context_tokens": 1000000, "max_output_tokens": 128000 } - } + }, + "openrouter": { + "provider": "openrouter", + "id": "anthropic/claude-haiku-5.5", + "url": "https://openrouter.ai/anthropic/claude-haiku-5.5", + "source_url": "https://openrouter.ai/anthropic/claude-haiku-5.5", + "endpoints": [ + { + "id": "anthropic/claude-haiku-5.5", + "input": "text", + "source_url": "https://openrouter.ai/api/v1/models" + } + ], + "token_pricing": { + "source_url": "https://openrouter.ai/anthropic/claude-haiku-5.5", + "unit": "usd_per_token", + "scope": "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. input_cache_write is the 5-minute cache write; input_cache_write_1h is the 1-hour cache write.", + "input": "0.0000001", + "output": "0.0000005", + "input_cache_read": "0.00000001", + "input_cache_write": "0.000000125", + "input_cache_write_1h": "0.0000002", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "maximum_input_tokens": 100000, + "usd_per_token": "0.0000001" + }, + { + "meter": "input", + "minimum_input_tokens": 100000, + "usd_per_token": "0.0000005" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "maximum_input_tokens": 100000, + "usd_per_token": "0.0000005" + }, + { + "meter": "output", + "minimum_input_tokens": 100000, + "usd_per_token": "0.0000025" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "maximum_input_tokens": 100000, + "usd_per_token": "0.00000001" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 100000, + "usd_per_token": "0.00000005" + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 0, + "maximum_input_tokens": 100000, + "usd_per_token": "0.000000125" + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 100000, + "usd_per_token": "0.000000625" + }, + { + "meter": "input_cache_write_1h", + "minimum_input_tokens": 0, + "maximum_input_tokens": 100000, + "usd_per_token": "0.0000002" + }, + { + "meter": "input_cache_write_1h", + "minimum_input_tokens": 100000, + "usd_per_token": "0.000001" + } + ] + }, + "capabilities": { + "source_url": "https://openrouter.ai/api/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://openrouter.ai/api/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + } }, "vision_tokenization": { "source_url": "https://platform.claude.com/docs/en/build-with-claude/vision", @@ -326,13 +753,33 @@ "detail_maximum_edges": { "default": 2576 } + }, + "provider_coverage": { + "anthropic": { + "disposition": "listed", + "source_url": "https://platform.claude.com/docs/en/models/haiku-5-5/overview" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/claude-haiku-5.5" + }, + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/anthropic/claude-haiku-5.5" + }, + "fal": { + "disposition": "excluded", + "source_url": "https://fal.ai/models", + "reason": "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." + } } }, - "anthropic/claude-opus-5": { - "id": "anthropic/claude-opus-5", + "anthropic/claude-opus-4.8": { + "id": "anthropic/claude-opus-4.8", "vendor": "anthropic", - "label": "Claude Opus 5", - "short_label": "Opus 5", + "reference_provider": "anthropic", + "label": "Claude Opus 4.8", + "short_label": "Opus 4.8", "multimodal": true, "image_input_mimes": [ "image/jpeg", @@ -350,25 +797,26 @@ "cache_write": 6.25 }, "release": { - "date": "2026-07-24", + "date": "2026-05-28", "basis": "model", "source_url": "https://platform.claude.com/docs/en/release-notes/overview" }, "providers": { "vercel": { "provider": "vercel", - "id": "anthropic/claude-opus-5", + "id": "anthropic/claude-opus-4.8", "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { - "id": "anthropic/claude-opus-5", + "id": "anthropic/claude-opus-4.8", "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } ], "token_pricing": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://vercel.com/ai-gateway/models/claude-opus-4.8", "unit": "usd_per_token", + "scope": "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration.", "input": "0.000005", "output": "0.000025", "input_cache_read": "0.0000005", @@ -386,72 +834,134 @@ "context_tokens": 1000000, "max_output_tokens": 128000 } - } - }, - "vision_tokenization": { - "source_url": "https://platform.claude.com/docs/en/build-with-claude/vision", - "patch_size_px": 28, - "maximum_tokens_per_image": 4784, - "detail_maximum_edges": { - "default": 2576 - } - } - }, - "anthropic/claude-opus-5.5": { - "id": "anthropic/claude-opus-5.5", - "vendor": "anthropic", - "label": "Claude Opus 5.5", - "short_label": "Opus 5.5", - "multimodal": true, - "image_input_mimes": [ - "image/jpeg", - "image/png", - "image/gif", - "image/webp" - ], - "tool_call": true, - "context_window": 1000000, - "output_limit": 128000, - "cost": { - "input": 4, - "output": 20, - "cache_read": 0.2, - "cache_write": 5 - }, - "release": { - "date": "2026-09-22", - "basis": "model", - "source_url": "https://platform.claude.com/docs/en/models/opus-5-5/overview" - }, - "providers": { - "vercel": { - "provider": "vercel", - "id": "anthropic/claude-opus-5.5", - "url": "https://ai-gateway.vercel.sh/v1/models", + }, + "anthropic": { + "provider": "anthropic", + "id": "claude-opus-4-8", + "url": "https://platform.claude.com/docs/en/models/opus-4-8/overview", + "source_url": "https://platform.claude.com/docs/en/models/opus-4-8/overview", "endpoints": [ { - "id": "anthropic/claude-opus-5.5", + "id": "claude-opus-4-8", "input": "text", - "source_url": "https://ai-gateway.vercel.sh/v1/models" + "source_url": "https://platform.claude.com/docs/en/models/opus-4-8/overview" } ], "token_pricing": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://platform.claude.com/docs/en/models/opus-4-8/overview", "unit": "usd_per_token", - "input": "0.000004", - "output": "0.00002", - "input_cache_read": "0.0000002", - "input_cache_write": "0.000005" + "scope": "Standard global synchronous service; input_cache_write is the 5-minute cache write, input_cache_write_1h is the 1-hour cache write. Batch, fast mode and regional premiums are excluded.", + "input": "0.000005", + "output": "0.000025", + "input_cache_write": "0.00000625", + "input_cache_write_1h": "0.00001", + "input_cache_read": "0.0000005" }, "capabilities": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://platform.claude.com/docs/en/models/opus-4-8/overview", + "image_input": true, + "reasoning": true + }, + "limits": { + "source_url": "https://platform.claude.com/docs/en/models/opus-4-8/overview", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + }, + "openrouter": { + "provider": "openrouter", + "id": "anthropic/claude-opus-4.8", + "url": "https://openrouter.ai/anthropic/claude-opus-4.8", + "source_url": "https://openrouter.ai/anthropic/claude-opus-4.8", + "endpoints": [ + { + "id": "anthropic/claude-opus-4.8", + "input": "text", + "source_url": "https://openrouter.ai/api/v1/models" + } + ], + "token_pricing": { + "source_url": "https://openrouter.ai/anthropic/claude-opus-4.8", + "unit": "usd_per_token", + "scope": "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. input_cache_write is the 5-minute cache write; input_cache_write_1h is the 1-hour cache write.", + "input": "0.000005", + "output": "0.000025", + "input_cache_read": "0.0000005", + "input_cache_write": "0.00000625", + "input_cache_write_1h": "0.00001" + }, + "capabilities": { + "source_url": "https://openrouter.ai/api/v1/models", "image_input": true, "tools": true, "reasoning": true, "structured_output": true }, "limits": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://openrouter.ai/api/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + }, + "grida": { + "provider": "grida", + "id": "anthropic/claude-opus-4.8", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "anthropic/claude-opus-4.8", + "input": "text", + "source_url": "https://gateway.grida.ai/v1/models", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "input_tokens", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.000005" + }, + { + "id": "cached_input_tokens", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.0000005" + }, + { + "id": "output_tokens", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.000025" + } + ] + } + } + ], + "capabilities": { + "source_url": "https://gateway.grida.ai/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://gateway.grida.ai/v1/models", "context_tokens": 1000000, "max_output_tokens": 128000 } @@ -464,13 +974,37 @@ "detail_maximum_edges": { "default": 2576 } + }, + "provider_coverage": { + "anthropic": { + "disposition": "listed", + "source_url": "https://platform.claude.com/docs/en/models/opus-4-8/overview" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/claude-opus-4.8" + }, + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/anthropic/claude-opus-4.8" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + }, + "fal": { + "disposition": "excluded", + "source_url": "https://fal.ai/models", + "reason": "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." + } } }, - "anthropic/claude-sonnet-5": { - "id": "anthropic/claude-sonnet-5", + "anthropic/claude-opus-5": { + "id": "anthropic/claude-opus-5", "vendor": "anthropic", - "label": "Claude Sonnet 5", - "short_label": "Sonnet 5", + "reference_provider": "anthropic", + "label": "Claude Opus 5", + "short_label": "Opus 5", "multimodal": true, "image_input_mimes": [ "image/jpeg", @@ -482,35 +1016,36 @@ "context_window": 1000000, "output_limit": 128000, "cost": { - "input": 2, - "output": 10, - "cache_read": 0.2, - "cache_write": 2.5 + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 }, "release": { - "date": "2026-06-30", + "date": "2026-07-24", "basis": "model", "source_url": "https://platform.claude.com/docs/en/release-notes/overview" }, "providers": { "vercel": { "provider": "vercel", - "id": "anthropic/claude-sonnet-5", + "id": "anthropic/claude-opus-5", "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { - "id": "anthropic/claude-sonnet-5", + "id": "anthropic/claude-opus-5", "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } ], "token_pricing": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://vercel.com/ai-gateway/models/claude-opus-5", "unit": "usd_per_token", - "input": "0.000002", - "output": "0.00001", - "input_cache_read": "0.0000002", - "input_cache_write": "0.0000025" + "scope": "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration.", + "input": "0.000005", + "output": "0.000025", + "input_cache_read": "0.0000005", + "input_cache_write": "0.00000625" }, "capabilities": { "source_url": "https://ai-gateway.vercel.sh/v1/models", @@ -524,168 +1059,2024 @@ "context_tokens": 1000000, "max_output_tokens": 128000 } - } - }, - "vision_tokenization": { - "source_url": "https://platform.claude.com/docs/en/build-with-claude/vision", - "patch_size_px": 28, - "maximum_tokens_per_image": 4784, - "detail_maximum_edges": { - "default": 2576 - } - } - }, - "anthropic/claude-sonnet-5.5": { - "id": "anthropic/claude-sonnet-5.5", - "vendor": "anthropic", - "label": "Claude Sonnet 5.5", - "short_label": "Sonnet 5.5", - "multimodal": true, - "image_input_mimes": [ - "image/jpeg", - "image/png", - "image/gif", - "image/webp" - ], - "tool_call": true, - "context_window": 1000000, - "output_limit": 128000, - "cost": { - "input": 2, + }, + "anthropic": { + "provider": "anthropic", + "id": "claude-opus-5", + "url": "https://platform.claude.com/docs/en/models/opus-5/overview", + "source_url": "https://platform.claude.com/docs/en/models/opus-5/overview", + "endpoints": [ + { + "id": "claude-opus-5", + "input": "text", + "source_url": "https://platform.claude.com/docs/en/models/opus-5/overview" + } + ], + "token_pricing": { + "source_url": "https://platform.claude.com/docs/en/models/opus-5/overview", + "unit": "usd_per_token", + "scope": "Standard global synchronous service; input_cache_write is the 5-minute cache write, input_cache_write_1h is the 1-hour cache write. Batch, fast mode and regional premiums are excluded.", + "input": "0.000005", + "output": "0.000025", + "input_cache_write": "0.00000625", + "input_cache_write_1h": "0.00001", + "input_cache_read": "0.0000005" + }, + "capabilities": { + "source_url": "https://platform.claude.com/docs/en/models/opus-5/overview", + "image_input": true, + "reasoning": true + }, + "limits": { + "source_url": "https://platform.claude.com/docs/en/models/opus-5/overview", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + }, + "openrouter": { + "provider": "openrouter", + "id": "anthropic/claude-opus-5", + "url": "https://openrouter.ai/anthropic/claude-opus-5", + "source_url": "https://openrouter.ai/anthropic/claude-opus-5", + "endpoints": [ + { + "id": "anthropic/claude-opus-5", + "input": "text", + "source_url": "https://openrouter.ai/api/v1/models" + } + ], + "token_pricing": { + "source_url": "https://openrouter.ai/anthropic/claude-opus-5", + "unit": "usd_per_token", + "scope": "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. input_cache_write is the 5-minute cache write; input_cache_write_1h is the 1-hour cache write.", + "input": "0.000005", + "output": "0.000025", + "input_cache_read": "0.0000005", + "input_cache_write": "0.00000625", + "input_cache_write_1h": "0.00001" + }, + "capabilities": { + "source_url": "https://openrouter.ai/api/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://openrouter.ai/api/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + }, + "grida": { + "provider": "grida", + "id": "anthropic/claude-opus-5", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "anthropic/claude-opus-5", + "input": "text", + "source_url": "https://gateway.grida.ai/v1/models", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "input_tokens", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.000005" + }, + { + "id": "cached_input_tokens", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.0000005" + }, + { + "id": "output_tokens", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.000025" + } + ] + } + } + ], + "capabilities": { + "source_url": "https://gateway.grida.ai/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://gateway.grida.ai/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + } + }, + "vision_tokenization": { + "source_url": "https://platform.claude.com/docs/en/build-with-claude/vision", + "patch_size_px": 28, + "maximum_tokens_per_image": 4784, + "detail_maximum_edges": { + "default": 2576 + } + }, + "provider_coverage": { + "anthropic": { + "disposition": "listed", + "source_url": "https://platform.claude.com/docs/en/models/opus-5/overview" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/claude-opus-5" + }, + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/anthropic/claude-opus-5" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + }, + "fal": { + "disposition": "excluded", + "source_url": "https://fal.ai/models", + "reason": "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." + } + } + }, + "anthropic/claude-opus-5.5": { + "id": "anthropic/claude-opus-5.5", + "vendor": "anthropic", + "reference_provider": "anthropic", + "label": "Claude Opus 5.5", + "short_label": "Opus 5.5", + "multimodal": true, + "image_input_mimes": [ + "image/jpeg", + "image/png", + "image/gif", + "image/webp" + ], + "tool_call": true, + "context_window": 1000000, + "output_limit": 128000, + "cost": { + "input": 4, + "output": 20, + "cache_read": 0.2, + "cache_write": 5 + }, + "release": { + "date": "2026-09-22", + "basis": "model", + "source_url": "https://platform.claude.com/docs/en/models/opus-5-5/overview" + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "anthropic/claude-opus-5.5", + "url": "https://ai-gateway.vercel.sh/v1/models", + "endpoints": [ + { + "id": "anthropic/claude-opus-5.5", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ], + "token_pricing": { + "source_url": "https://vercel.com/ai-gateway/models/claude-opus-5.5", + "unit": "usd_per_token", + "scope": "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration.", + "input": "0.000004", + "output": "0.00002", + "input_cache_read": "0.0000002", + "input_cache_write": "0.000005" + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + }, + "anthropic": { + "provider": "anthropic", + "id": "claude-opus-5-5", + "url": "https://platform.claude.com/docs/en/models/opus-5-5/overview", + "source_url": "https://platform.claude.com/docs/en/models/opus-5-5/overview", + "endpoints": [ + { + "id": "claude-opus-5-5", + "input": "text", + "source_url": "https://platform.claude.com/docs/en/models/opus-5-5/overview" + } + ], + "token_pricing": { + "source_url": "https://platform.claude.com/docs/en/models/opus-5-5/overview", + "unit": "usd_per_token", + "scope": "Standard global synchronous service; input_cache_write is the 5-minute cache write, input_cache_write_1h is the 1-hour cache write. Batch, fast mode and regional premiums are excluded.", + "input": "0.000004", + "output": "0.00002", + "input_cache_write": "0.000005", + "input_cache_write_1h": "0.000008", + "input_cache_read": "0.0000002" + }, + "capabilities": { + "source_url": "https://platform.claude.com/docs/en/models/opus-5-5/overview", + "image_input": true, + "reasoning": true + }, + "limits": { + "source_url": "https://platform.claude.com/docs/en/models/opus-5-5/overview", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + }, + "openrouter": { + "provider": "openrouter", + "id": "anthropic/claude-opus-5.5", + "url": "https://openrouter.ai/anthropic/claude-opus-5.5", + "source_url": "https://openrouter.ai/anthropic/claude-opus-5.5", + "endpoints": [ + { + "id": "anthropic/claude-opus-5.5", + "input": "text", + "source_url": "https://openrouter.ai/api/v1/models" + } + ], + "token_pricing": { + "source_url": "https://openrouter.ai/anthropic/claude-opus-5.5", + "unit": "usd_per_token", + "scope": "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. input_cache_write is the 5-minute cache write; input_cache_write_1h is the 1-hour cache write.", + "input": "0.000004", + "output": "0.00002", + "input_cache_read": "0.0000002", + "input_cache_write": "0.000005", + "input_cache_write_1h": "0.000008" + }, + "capabilities": { + "source_url": "https://openrouter.ai/api/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://openrouter.ai/api/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + } + }, + "vision_tokenization": { + "source_url": "https://platform.claude.com/docs/en/build-with-claude/vision", + "patch_size_px": 28, + "maximum_tokens_per_image": 4784, + "detail_maximum_edges": { + "default": 2576 + } + }, + "provider_coverage": { + "anthropic": { + "disposition": "listed", + "source_url": "https://platform.claude.com/docs/en/models/opus-5-5/overview" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/claude-opus-5.5" + }, + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/anthropic/claude-opus-5.5" + }, + "fal": { + "disposition": "excluded", + "source_url": "https://fal.ai/models", + "reason": "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." + } + } + }, + "anthropic/claude-sonnet-5": { + "id": "anthropic/claude-sonnet-5", + "vendor": "anthropic", + "reference_provider": "anthropic", + "label": "Claude Sonnet 5", + "short_label": "Sonnet 5", + "multimodal": true, + "image_input_mimes": [ + "image/jpeg", + "image/png", + "image/gif", + "image/webp" + ], + "tool_call": true, + "context_window": 1000000, + "output_limit": 128000, + "cost": { + "input": 2, "output": 10, - "cache_read": 0.1, + "cache_read": 0.2, "cache_write": 2.5 }, "release": { - "date": "2026-09-28", + "date": "2026-06-30", "basis": "model", - "source_url": "https://platform.claude.com/docs/en/models/sonnet-5-5/overview" + "source_url": "https://platform.claude.com/docs/en/release-notes/overview" }, "providers": { "vercel": { "provider": "vercel", - "id": "anthropic/claude-sonnet-5.5", + "id": "anthropic/claude-sonnet-5", "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { - "id": "anthropic/claude-sonnet-5.5", + "id": "anthropic/claude-sonnet-5", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ], + "token_pricing": { + "source_url": "https://vercel.com/ai-gateway/models/claude-sonnet-5", + "unit": "usd_per_token", + "scope": "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration.", + "input": "0.000002", + "output": "0.00001", + "input_cache_read": "0.0000002", + "input_cache_write": "0.0000025" + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + }, + "anthropic": { + "provider": "anthropic", + "id": "claude-sonnet-5", + "url": "https://platform.claude.com/docs/en/models/sonnet-5/overview", + "source_url": "https://platform.claude.com/docs/en/models/sonnet-5/overview", + "endpoints": [ + { + "id": "claude-sonnet-5", + "input": "text", + "source_url": "https://platform.claude.com/docs/en/models/sonnet-5/overview" + } + ], + "token_pricing": { + "source_url": "https://platform.claude.com/docs/en/models/sonnet-5/overview", + "unit": "usd_per_token", + "scope": "Standard global synchronous service; input_cache_write is the 5-minute cache write, input_cache_write_1h is the 1-hour cache write. Batch, fast mode and regional premiums are excluded.", + "input": "0.000002", + "output": "0.00001", + "input_cache_write": "0.0000025", + "input_cache_write_1h": "0.000004", + "input_cache_read": "0.0000002" + }, + "capabilities": { + "source_url": "https://platform.claude.com/docs/en/models/sonnet-5/overview", + "image_input": true, + "reasoning": true + }, + "limits": { + "source_url": "https://platform.claude.com/docs/en/models/sonnet-5/overview", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + }, + "openrouter": { + "provider": "openrouter", + "id": "anthropic/claude-sonnet-5", + "url": "https://openrouter.ai/anthropic/claude-sonnet-5", + "source_url": "https://openrouter.ai/anthropic/claude-sonnet-5", + "endpoints": [ + { + "id": "anthropic/claude-sonnet-5", + "input": "text", + "source_url": "https://openrouter.ai/api/v1/models" + } + ], + "token_pricing": { + "source_url": "https://openrouter.ai/anthropic/claude-sonnet-5", + "unit": "usd_per_token", + "scope": "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. input_cache_write is the 5-minute cache write; input_cache_write_1h is the 1-hour cache write.", + "input": "0.000002", + "output": "0.00001", + "input_cache_read": "0.0000002", + "input_cache_write": "0.0000025", + "input_cache_write_1h": "0.000004" + }, + "capabilities": { + "source_url": "https://openrouter.ai/api/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://openrouter.ai/api/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + }, + "grida": { + "provider": "grida", + "id": "anthropic/claude-sonnet-5", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "anthropic/claude-sonnet-5", + "input": "text", + "source_url": "https://gateway.grida.ai/v1/models", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "input_tokens", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.000002" + }, + { + "id": "cached_input_tokens", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.0000002" + }, + { + "id": "output_tokens", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.00001" + } + ] + } + } + ], + "capabilities": { + "source_url": "https://gateway.grida.ai/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://gateway.grida.ai/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + } + }, + "vision_tokenization": { + "source_url": "https://platform.claude.com/docs/en/build-with-claude/vision", + "patch_size_px": 28, + "maximum_tokens_per_image": 4784, + "detail_maximum_edges": { + "default": 2576 + } + }, + "provider_coverage": { + "anthropic": { + "disposition": "listed", + "source_url": "https://platform.claude.com/docs/en/models/sonnet-5/overview" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/claude-sonnet-5" + }, + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/anthropic/claude-sonnet-5" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + }, + "fal": { + "disposition": "excluded", + "source_url": "https://fal.ai/models", + "reason": "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." + } + } + }, + "anthropic/claude-sonnet-5.5": { + "id": "anthropic/claude-sonnet-5.5", + "vendor": "anthropic", + "reference_provider": "anthropic", + "label": "Claude Sonnet 5.5", + "short_label": "Sonnet 5.5", + "multimodal": true, + "image_input_mimes": [ + "image/jpeg", + "image/png", + "image/gif", + "image/webp" + ], + "tool_call": true, + "context_window": 1000000, + "output_limit": 128000, + "cost": { + "input": 2, + "output": 10, + "cache_read": 0.1, + "cache_write": 2.5 + }, + "release": { + "date": "2026-09-28", + "basis": "model", + "source_url": "https://platform.claude.com/docs/en/models/sonnet-5-5/overview" + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "anthropic/claude-sonnet-5.5", + "url": "https://ai-gateway.vercel.sh/v1/models", + "endpoints": [ + { + "id": "anthropic/claude-sonnet-5.5", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ], + "token_pricing": { + "source_url": "https://vercel.com/ai-gateway/models/claude-sonnet-5.5", + "unit": "usd_per_token", + "scope": "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration.", + "input": "0.000002", + "output": "0.00001", + "input_cache_read": "0.0000001", + "input_cache_write": "0.0000025" + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + }, + "anthropic": { + "provider": "anthropic", + "id": "claude-sonnet-5-5", + "url": "https://platform.claude.com/docs/en/models/sonnet-5-5/overview", + "source_url": "https://platform.claude.com/docs/en/models/sonnet-5-5/overview", + "endpoints": [ + { + "id": "claude-sonnet-5-5", + "input": "text", + "source_url": "https://platform.claude.com/docs/en/models/sonnet-5-5/overview" + } + ], + "token_pricing": { + "source_url": "https://platform.claude.com/docs/en/models/sonnet-5-5/overview", + "unit": "usd_per_token", + "scope": "Standard global synchronous service; input_cache_write is the 5-minute cache write, input_cache_write_1h is the 1-hour cache write. Batch, fast mode and regional premiums are excluded.", + "input": "0.000002", + "output": "0.00001", + "input_cache_write": "0.0000025", + "input_cache_write_1h": "0.000004", + "input_cache_read": "0.0000001" + }, + "capabilities": { + "source_url": "https://platform.claude.com/docs/en/models/sonnet-5-5/overview", + "image_input": true, + "reasoning": true + }, + "limits": { + "source_url": "https://platform.claude.com/docs/en/models/sonnet-5-5/overview", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + }, + "openrouter": { + "provider": "openrouter", + "id": "anthropic/claude-sonnet-5.5", + "url": "https://openrouter.ai/anthropic/claude-sonnet-5.5", + "source_url": "https://openrouter.ai/anthropic/claude-sonnet-5.5", + "endpoints": [ + { + "id": "anthropic/claude-sonnet-5.5", + "input": "text", + "source_url": "https://openrouter.ai/api/v1/models" + } + ], + "token_pricing": { + "source_url": "https://openrouter.ai/anthropic/claude-sonnet-5.5", + "unit": "usd_per_token", + "scope": "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. input_cache_write is the 5-minute cache write; input_cache_write_1h is the 1-hour cache write.", + "input": "0.000002", + "output": "0.00001", + "input_cache_read": "0.0000001", + "input_cache_write": "0.0000025", + "input_cache_write_1h": "0.000004" + }, + "capabilities": { + "source_url": "https://openrouter.ai/api/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://openrouter.ai/api/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + } + }, + "vision_tokenization": { + "source_url": "https://platform.claude.com/docs/en/build-with-claude/vision", + "patch_size_px": 28, + "maximum_tokens_per_image": 4784, + "detail_maximum_edges": { + "default": 2576 + } + }, + "provider_coverage": { + "anthropic": { + "disposition": "listed", + "source_url": "https://platform.claude.com/docs/en/models/sonnet-5-5/overview" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/claude-sonnet-5.5" + }, + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/anthropic/claude-sonnet-5.5" + }, + "fal": { + "disposition": "excluded", + "source_url": "https://fal.ai/models", + "reason": "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." + } + } + }, + "google/gemini-3.1-pro-preview": { + "id": "google/gemini-3.1-pro-preview", + "vendor": "google", + "reference_provider": "google", + "label": "Gemini 3.1 Pro Preview", + "short_label": "Gemini 3.1 Pro", + "multimodal": true, + "image_input_mimes": [ + "image/png", + "image/jpeg", + "image/webp", + "image/heic", + "image/heif" + ], + "tool_call": true, + "context_window": 1048576, + "output_limit": 65536, + "release": { + "date": "2026-02-19", + "basis": "model", + "source_url": "https://ai.google.dev/gemini-api/docs/changelog" + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2, + "long_context": { + "input_tokens_above": 200000, + "input_multiplier": 2, + "output_multiplier": 1.5 + } + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "google/gemini-3.1-pro-preview", + "url": "https://ai-gateway.vercel.sh/v1/models", + "endpoints": [ + { + "id": "google/gemini-3.1-pro-preview", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ], + "token_pricing": { + "source_url": "https://vercel.com/ai-gateway/models/gemini-3.1-pro-preview", + "unit": "usd_per_token", + "scope": "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration.", + "input": "0.000002", + "output": "0.000012", + "input_cache_read": "0.0000002", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "usd_per_token": "0.000002", + "maximum_input_tokens": 200001 + }, + { + "meter": "input", + "minimum_input_tokens": 200001, + "usd_per_token": "0.000004" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "usd_per_token": "0.000012", + "maximum_input_tokens": 200001 + }, + { + "meter": "output", + "minimum_input_tokens": 200001, + "usd_per_token": "0.000018" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "usd_per_token": "0.0000002", + "maximum_input_tokens": 200001 + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 200001, + "usd_per_token": "0.0000004" + } + ] + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 64000 + } + }, + "google": { + "provider": "google", + "id": "gemini-3.1-pro-preview", + "url": "https://ai.google.dev/gemini-api/docs/models/gemini-3.1-pro-preview", + "source_url": "https://ai.google.dev/gemini-api/docs/models/gemini-3.1-pro-preview", + "endpoints": [ + { + "id": "gemini-3.1-pro-preview", + "input": "text", + "source_url": "https://ai.google.dev/gemini-api/docs/models/gemini-3.1-pro-preview" + } + ], + "token_pricing": { + "source_url": "https://ai.google.dev/gemini-api/docs/pricing", + "unit": "usd_per_token", + "scope": "Regular Standard paid-tier input/output/cache-read token rates. Context-cache storage per hour, grounding tools and alternate service tiers are excluded.", + "input": "0.000002", + "output": "0.000012", + "input_cache_read": "0.0000002", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "maximum_input_tokens": 200001, + "usd_per_token": "0.000002" + }, + { + "meter": "input", + "minimum_input_tokens": 200001, + "usd_per_token": "0.000004" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "maximum_input_tokens": 200001, + "usd_per_token": "0.000012" + }, + { + "meter": "output", + "minimum_input_tokens": 200001, + "usd_per_token": "0.000018" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "maximum_input_tokens": 200001, + "usd_per_token": "0.0000002" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 200001, + "usd_per_token": "0.0000004" + } + ] + }, + "capabilities": { + "source_url": "https://ai.google.dev/gemini-api/docs/models/gemini-3.1-pro-preview", + "image_input": true, + "reasoning": true, + "tools": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai.google.dev/gemini-api/docs/models/gemini-3.1-pro-preview", + "context_tokens": 1048576, + "max_output_tokens": 65536 + } + }, + "openrouter": { + "provider": "openrouter", + "id": "google/gemini-3.1-pro-preview", + "url": "https://openrouter.ai/google/gemini-3.1-pro-preview", + "source_url": "https://openrouter.ai/google/gemini-3.1-pro-preview", + "endpoints": [ + { + "id": "google/gemini-3.1-pro-preview", + "input": "text", + "source_url": "https://openrouter.ai/api/v1/models" + } + ], + "token_pricing": { + "source_url": "https://openrouter.ai/google/gemini-3.1-pro-preview", + "unit": "usd_per_token", + "scope": "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. Context-cache storage per hour is excluded.", + "input": "0.000002", + "output": "0.000012", + "input_cache_read": "0.0000002", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "maximum_input_tokens": 200000, + "usd_per_token": "0.000002" + }, + { + "meter": "input", + "minimum_input_tokens": 200000, + "usd_per_token": "0.000004" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "maximum_input_tokens": 200000, + "usd_per_token": "0.000012" + }, + { + "meter": "output", + "minimum_input_tokens": 200000, + "usd_per_token": "0.000018" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "maximum_input_tokens": 200000, + "usd_per_token": "0.0000002" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 200000, + "usd_per_token": "0.0000004" + } + ] + }, + "capabilities": { + "source_url": "https://openrouter.ai/api/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://openrouter.ai/api/v1/models", + "context_tokens": 1048576, + "max_output_tokens": 65536 + } + }, + "grida": { + "provider": "grida", + "id": "google/gemini-3.1-pro-preview", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "google/gemini-3.1-pro-preview", + "input": "text", + "source_url": "https://gateway.grida.ai/v1/models", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "input_tokens.0", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "200001" + }, + "usd_per_unit": "0.000002" + }, + { + "id": "input_tokens.1", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "200001" + }, + "usd_per_unit": "0.000004" + }, + { + "id": "cached_input_tokens.0", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "200001" + }, + "usd_per_unit": "0.0000002" + }, + { + "id": "cached_input_tokens.1", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "200001" + }, + "usd_per_unit": "0.0000004" + }, + { + "id": "output_tokens.0", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "200001" + }, + "usd_per_unit": "0.000012" + }, + { + "id": "output_tokens.1", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "200001" + }, + "usd_per_unit": "0.000018" + } + ] + } + } + ], + "capabilities": { + "source_url": "https://gateway.grida.ai/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://gateway.grida.ai/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 64000 + } + } + }, + "vision_tokenization": { + "source_url": "https://ai.google.dev/gemini-api/docs/media-resolution", + "maximum_tokens_per_image": 2240, + "token_counts_approximate": true, + "detail_token_budgets": { + "unspecified": 1120, + "low": 280, + "medium": 560, + "high": 1120, + "ultra_high": 2240 + } + }, + "provider_coverage": { + "google": { + "disposition": "listed", + "source_url": "https://ai.google.dev/gemini-api/docs/models/gemini-3.1-pro-preview" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/gemini-3.1-pro-preview" + }, + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/google/gemini-3.1-pro-preview" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + }, + "fal": { + "disposition": "excluded", + "source_url": "https://fal.ai/models", + "reason": "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." + } + } + }, + "google/gemini-3.7-flash": { + "id": "google/gemini-3.7-flash", + "vendor": "google", + "reference_provider": "google", + "label": "Gemini 3.7 Flash", + "multimodal": true, + "image_input_mimes": [ + "image/png", + "image/jpeg", + "image/webp", + "image/heic", + "image/heif" + ], + "tool_call": true, + "context_window": 1048576, + "output_limit": 65536, + "cost": { + "input": 1.5, + "output": 7.5, + "cache_read": 0.15 + }, + "release": { + "date": "2026-08-13", + "basis": "model", + "source_url": "https://ai.google.dev/gemini-api/docs/changelog" + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "google/gemini-3.7-flash", + "url": "https://ai-gateway.vercel.sh/v1/models", + "endpoints": [ + { + "id": "google/gemini-3.7-flash", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ], + "token_pricing": { + "source_url": "https://vercel.com/ai-gateway/models/gemini-3.7-flash", + "unit": "usd_per_token", + "scope": "Regular Standard global token rates from the model page list-cost tiers; alternate service tiers and regional premiums are excluded.", + "input": "0.0000015", + "output": "0.0000075", + "input_cache_read": "0.00000015" + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 65535 + } + }, + "google": { + "provider": "google", + "id": "gemini-3.7-flash", + "url": "https://ai.google.dev/gemini-api/docs/models/gemini-3.7-flash", + "source_url": "https://ai.google.dev/gemini-api/docs/models/gemini-3.7-flash", + "endpoints": [ + { + "id": "gemini-3.7-flash", + "input": "text", + "source_url": "https://ai.google.dev/gemini-api/docs/models/gemini-3.7-flash" + } + ], + "deprecated": true, + "token_pricing": { + "source_url": "https://ai.google.dev/gemini-api/docs/pricing", + "unit": "usd_per_token", + "scope": "Regular Standard paid-tier input/output/cache-read token rates. Context-cache storage per hour, grounding tools and alternate service tiers are excluded. Deprecated model ID redirects to Gemini 3.8 Flash under the native API.", + "input": "0.0000015", + "output": "0.0000075", + "input_cache_read": "0.00000015" + }, + "capabilities": { + "source_url": "https://ai.google.dev/gemini-api/docs/models/gemini-3.7-flash", + "image_input": true, + "reasoning": true, + "tools": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai.google.dev/gemini-api/docs/models/gemini-3.7-flash", + "context_tokens": 1048576, + "max_output_tokens": 65536 + } + }, + "openrouter": { + "provider": "openrouter", + "id": "google/gemini-3.7-flash", + "url": "https://openrouter.ai/google/gemini-3.7-flash", + "source_url": "https://openrouter.ai/google/gemini-3.7-flash", + "endpoints": [ + { + "id": "google/gemini-3.7-flash", + "input": "text", + "source_url": "https://openrouter.ai/api/v1/models" + } + ], + "token_pricing": { + "source_url": "https://openrouter.ai/google/gemini-3.7-flash", + "unit": "usd_per_token", + "scope": "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. Context-cache storage per hour is excluded.", + "input": "0.0000015", + "output": "0.0000075", + "input_cache_read": "0.00000015" + }, + "capabilities": { + "source_url": "https://openrouter.ai/api/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://openrouter.ai/api/v1/models", + "context_tokens": 1048576, + "max_output_tokens": 65536 + } + }, + "grida": { + "provider": "grida", + "id": "google/gemini-3.7-flash", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "google/gemini-3.7-flash", + "input": "text", + "source_url": "https://gateway.grida.ai/v1/models", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "input_tokens", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.0000015" + }, + { + "id": "cached_input_tokens", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.00000015" + }, + { + "id": "output_tokens", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.0000075" + } + ] + } + } + ], + "capabilities": { + "source_url": "https://gateway.grida.ai/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://gateway.grida.ai/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 65535 + } + } + }, + "vision_tokenization": { + "source_url": "https://ai.google.dev/gemini-api/docs/media-resolution", + "maximum_tokens_per_image": 2240, + "token_counts_approximate": true, + "detail_token_budgets": { + "unspecified": 1120, + "low": 280, + "medium": 560, + "high": 1120, + "ultra_high": 2240 + } + }, + "provider_coverage": { + "google": { + "disposition": "listed", + "source_url": "https://ai.google.dev/gemini-api/docs/models/gemini-3.7-flash" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/gemini-3.7-flash" + }, + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/google/gemini-3.7-flash" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + }, + "fal": { + "disposition": "excluded", + "source_url": "https://fal.ai/models", + "reason": "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." + } + } + }, + "google/gemini-3.8-flash": { + "id": "google/gemini-3.8-flash", + "vendor": "google", + "reference_provider": "google", + "label": "Gemini 3.8 Flash", + "multimodal": true, + "image_input_mimes": [ + "image/png", + "image/jpeg", + "image/webp", + "image/heic", + "image/heif" + ], + "tool_call": true, + "context_window": 1048576, + "output_limit": 65536, + "cost": { + "input": 1.5, + "output": 7.5, + "cache_read": 0.15 + }, + "release": { + "date": "2026-09-02", + "basis": "model", + "source_url": "https://ai.google.dev/gemini-api/docs/changelog" + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "google/gemini-3.8-flash", + "url": "https://ai-gateway.vercel.sh/v1/models", + "endpoints": [ + { + "id": "google/gemini-3.8-flash", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ], + "token_pricing": { + "source_url": "https://vercel.com/ai-gateway/models/gemini-3.8-flash", + "unit": "usd_per_token", + "scope": "Regular Standard global token rates from the model page list-cost tiers; alternate service tiers and regional premiums are excluded.", + "input": "0.0000015", + "output": "0.0000075", + "input_cache_read": "0.00000015" + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 65535 + } + }, + "google": { + "provider": "google", + "id": "gemini-3.8-flash", + "url": "https://ai.google.dev/gemini-api/docs/models/gemini-3.8-flash", + "source_url": "https://ai.google.dev/gemini-api/docs/models/gemini-3.8-flash", + "endpoints": [ + { + "id": "gemini-3.8-flash", + "input": "text", + "source_url": "https://ai.google.dev/gemini-api/docs/models/gemini-3.8-flash" + } + ], + "token_pricing": { + "source_url": "https://ai.google.dev/gemini-api/docs/pricing", + "unit": "usd_per_token", + "scope": "Regular Standard paid-tier input/output/cache-read token rates. Context-cache storage per hour, grounding tools and alternate service tiers are excluded.", + "input": "0.0000015", + "output": "0.0000075", + "input_cache_read": "0.00000015" + }, + "capabilities": { + "source_url": "https://ai.google.dev/gemini-api/docs/models/gemini-3.8-flash", + "image_input": true, + "reasoning": true, + "tools": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai.google.dev/gemini-api/docs/models/gemini-3.8-flash", + "context_tokens": 1048576, + "max_output_tokens": 65536 + } + }, + "openrouter": { + "provider": "openrouter", + "id": "google/gemini-3.8-flash", + "url": "https://openrouter.ai/google/gemini-3.8-flash", + "source_url": "https://openrouter.ai/google/gemini-3.8-flash", + "endpoints": [ + { + "id": "google/gemini-3.8-flash", + "input": "text", + "source_url": "https://openrouter.ai/api/v1/models" + } + ], + "token_pricing": { + "source_url": "https://openrouter.ai/google/gemini-3.8-flash", + "unit": "usd_per_token", + "scope": "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. Context-cache storage per hour is excluded.", + "input": "0.0000015", + "output": "0.0000075", + "input_cache_read": "0.00000015" + }, + "capabilities": { + "source_url": "https://openrouter.ai/api/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://openrouter.ai/api/v1/models", + "context_tokens": 1048576, + "max_output_tokens": 65536 + } + }, + "grida": { + "provider": "grida", + "id": "google/gemini-3.8-flash", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "google/gemini-3.8-flash", + "input": "text", + "source_url": "https://gateway.grida.ai/v1/models", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "input_tokens", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.0000015" + }, + { + "id": "cached_input_tokens", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.00000015" + }, + { + "id": "output_tokens", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.0000075" + } + ] + } + } + ], + "capabilities": { + "source_url": "https://gateway.grida.ai/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://gateway.grida.ai/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 65535 + } + } + }, + "vision_tokenization": { + "source_url": "https://ai.google.dev/gemini-api/docs/media-resolution", + "maximum_tokens_per_image": 2240, + "token_counts_approximate": true, + "detail_token_budgets": { + "unspecified": 1120, + "low": 280, + "medium": 560, + "high": 1120, + "ultra_high": 2240 + } + }, + "provider_coverage": { + "google": { + "disposition": "listed", + "source_url": "https://ai.google.dev/gemini-api/docs/models/gemini-3.8-flash" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/gemini-3.8-flash" + }, + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/google/gemini-3.8-flash" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + }, + "fal": { + "disposition": "excluded", + "source_url": "https://fal.ai/models", + "reason": "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." + } + } + }, + "openai/gpt-5.5": { + "id": "openai/gpt-5.5", + "vendor": "openai", + "reference_provider": "openai", + "label": "GPT-5.5", + "multimodal": true, + "image_input_mimes": [ + "image/png", + "image/jpeg", + "image/webp", + "image/gif" + ], + "tool_call": true, + "context_window": 1050000, + "output_limit": 128000, + "release": { + "date": "2026-04-23", + "basis": "model", + "source_url": "https://openai.com/index/introducing-gpt-5-5/" + }, + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5, + "long_context": { + "input_tokens_above": 272000, + "input_multiplier": 2, + "output_multiplier": 1.5 + } + }, + "providers": { + "vercel": { + "provider": "vercel", + "id": "openai/gpt-5.5", + "url": "https://ai-gateway.vercel.sh/v1/models", + "endpoints": [ + { + "id": "openai/gpt-5.5", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ], + "token_pricing": { + "source_url": "https://vercel.com/ai-gateway/models/gpt-5.5", + "unit": "usd_per_token", + "scope": "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration.", + "input": "0.000005", + "output": "0.00003", + "input_cache_read": "0.0000005", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "usd_per_token": "0.000005", + "maximum_input_tokens": 272000 + }, + { + "meter": "input", + "minimum_input_tokens": 272000, + "usd_per_token": "0.00001" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "usd_per_token": "0.00003", + "maximum_input_tokens": 272000 + }, + { + "meter": "output", + "minimum_input_tokens": 272000, + "usd_per_token": "0.000045" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "usd_per_token": "0.0000005", + "maximum_input_tokens": 272000 + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 272000, + "usd_per_token": "0.000001" + } + ] + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1000000, + "max_output_tokens": 128000 + } + }, + "openai": { + "provider": "openai", + "id": "gpt-5.5", + "url": "https://developers.openai.com/api/docs/models/gpt-5.5", + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.5", + "endpoints": [ + { + "id": "gpt-5.5", + "input": "text", + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.5" + } + ], + "token_pricing": { + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.5", + "unit": "usd_per_token", + "scope": "Standard synchronous text token rates; optional tools and other service tiers are excluded.", + "input": "0.000005", + "output": "0.00003", + "input_cache_read": "0.0000005", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272001, + "usd_per_token": "0.000005" + }, + { + "meter": "input", + "minimum_input_tokens": 272001, + "usd_per_token": "0.000010" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272001, + "usd_per_token": "0.00003" + }, + { + "meter": "output", + "minimum_input_tokens": 272001, + "usd_per_token": "0.000045" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272001, + "usd_per_token": "0.0000005" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 272001, + "usd_per_token": "0.0000010" + } + ] + }, + "capabilities": { + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.5", + "image_input": true, + "reasoning": true, + "tools": true, + "structured_output": true, + "streaming": true + }, + "limits": { + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.5", + "context_tokens": 1050000, + "max_output_tokens": 128000 + } + }, + "openrouter": { + "provider": "openrouter", + "id": "openai/gpt-5.5", + "url": "https://openrouter.ai/openai/gpt-5.5", + "source_url": "https://openrouter.ai/openai/gpt-5.5", + "endpoints": [ + { + "id": "openai/gpt-5.5", + "input": "text", + "source_url": "https://openrouter.ai/api/v1/models" + } + ], + "token_pricing": { + "source_url": "https://openrouter.ai/openai/gpt-5.5", + "unit": "usd_per_token", + "scope": "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded.", + "input": "0.000005", + "output": "0.00003", + "input_cache_read": "0.0000005", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272000, + "usd_per_token": "0.000005" + }, + { + "meter": "input", + "minimum_input_tokens": 272000, + "usd_per_token": "0.00001" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272000, + "usd_per_token": "0.00003" + }, + { + "meter": "output", + "minimum_input_tokens": 272000, + "usd_per_token": "0.000045" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272000, + "usd_per_token": "0.0000005" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 272000, + "usd_per_token": "0.000001" + } + ] + }, + "capabilities": { + "source_url": "https://openrouter.ai/api/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://openrouter.ai/api/v1/models", + "context_tokens": 1050000, + "max_output_tokens": 128000 + } + }, + "grida": { + "provider": "grida", + "id": "openai/gpt-5.5", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "openai/gpt-5.5", "input": "text", - "source_url": "https://ai-gateway.vercel.sh/v1/models" + "source_url": "https://gateway.grida.ai/v1/models", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "input_tokens.0", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "272000" + }, + "usd_per_unit": "0.000005" + }, + { + "id": "input_tokens.1", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "272000" + }, + "usd_per_unit": "0.00001" + }, + { + "id": "cached_input_tokens.0", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "272000" + }, + "usd_per_unit": "0.0000005" + }, + { + "id": "cached_input_tokens.1", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "272000" + }, + "usd_per_unit": "0.000001" + }, + { + "id": "output_tokens.0", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "272000" + }, + "usd_per_unit": "0.00003" + }, + { + "id": "output_tokens.1", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "272000" + }, + "usd_per_unit": "0.000045" + } + ] + } } ], - "token_pricing": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", - "unit": "usd_per_token", - "input": "0.000002", - "output": "0.00001", - "input_cache_read": "0.0000001", - "input_cache_write": "0.0000025" - }, "capabilities": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://gateway.grida.ai/v1/models", "image_input": true, "tools": true, "reasoning": true, "structured_output": true }, "limits": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://gateway.grida.ai/v1/models", "context_tokens": 1000000, "max_output_tokens": 128000 } } }, "vision_tokenization": { - "source_url": "https://platform.claude.com/docs/en/build-with-claude/vision", - "patch_size_px": 28, - "maximum_tokens_per_image": 4784, + "source_url": "https://developers.openai.com/api/docs/guides/images-vision", + "patch_size_px": 32, + "token_multiplier": 1.2, + "token_rounding": "ceil", + "maximum_patch_count": 30000, + "detail_patch_budgets": { + "high": 2500, + "original": 10000, + "auto": 10000 + }, "detail_maximum_edges": { - "default": 2576 + "low": 512, + "high": 2048, + "original": 6000, + "auto": 6000 + } + }, + "provider_coverage": { + "openai": { + "disposition": "listed", + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.5" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/gpt-5.5" + }, + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/openai/gpt-5.5" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + }, + "fal": { + "disposition": "excluded", + "source_url": "https://fal.ai/models", + "reason": "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." } } }, - "google/gemini-3.1-pro-preview": { - "id": "google/gemini-3.1-pro-preview", - "vendor": "google", - "label": "Gemini 3.1 Pro Preview", - "short_label": "Gemini 3.1 Pro", + "openai/gpt-5.5-pro": { + "id": "openai/gpt-5.5-pro", + "vendor": "openai", + "reference_provider": "openai", + "label": "GPT-5.5 Pro", "multimodal": true, "image_input_mimes": [ "image/png", "image/jpeg", "image/webp", - "image/heic", - "image/heif" + "image/gif" ], "tool_call": true, - "context_window": 1048576, - "output_limit": 65536, + "context_window": 1050000, + "output_limit": 128000, + "cost": { + "input": 30, + "output": 180 + }, "release": { - "date": "2026-02-19", + "date": "2026-04-23", "basis": "model", - "source_url": "https://ai.google.dev/gemini-api/docs/changelog" - }, - "cost": { - "input": 2, - "output": 12, - "cache_read": 0.2, - "long_context": { - "input_tokens_above": 200000, - "input_multiplier": 2, - "output_multiplier": 1.5 - } + "source_url": "https://openai.com/index/introducing-gpt-5-5/" }, "providers": { "vercel": { "provider": "vercel", - "id": "google/gemini-3.1-pro-preview", + "id": "openai/gpt-5.5-pro", "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { - "id": "google/gemini-3.1-pro-preview", + "id": "openai/gpt-5.5-pro", "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } ], "token_pricing": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://vercel.com/ai-gateway/models/gpt-5.5-pro", "unit": "usd_per_token", - "input": "0.000002", - "output": "0.000012", - "input_cache_read": "0.0000002", + "scope": "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration.", + "input": "0.00003", + "output": "0.00018", "tiers": [ { "meter": "input", "minimum_input_tokens": 0, - "usd_per_token": "0.000002", - "maximum_input_tokens": 200001 + "usd_per_token": "0.00003", + "maximum_input_tokens": 272000 }, { "meter": "input", - "minimum_input_tokens": 200001, - "usd_per_token": "0.000004" + "minimum_input_tokens": 272000, + "usd_per_token": "0.00006" }, { "meter": "output", "minimum_input_tokens": 0, - "usd_per_token": "0.000012", - "maximum_input_tokens": 200001 + "usd_per_token": "0.00018", + "maximum_input_tokens": 272000 }, { "meter": "output", - "minimum_input_tokens": 200001, - "usd_per_token": "0.000018" - }, - { - "meter": "input_cache_read", - "minimum_input_tokens": 0, - "usd_per_token": "0.0000002", - "maximum_input_tokens": 200001 - }, - { - "meter": "input_cache_read", - "minimum_input_tokens": 200001, - "usd_per_token": "0.0000004" + "minimum_input_tokens": 272000, + "usd_per_token": "0.00027" } ] }, @@ -699,169 +3090,231 @@ "limits": { "source_url": "https://ai-gateway.vercel.sh/v1/models", "context_tokens": 1000000, - "max_output_tokens": 64000 + "max_output_tokens": 128000 } - } - }, - "vision_tokenization": { - "source_url": "https://ai.google.dev/gemini-api/docs/media-resolution", - "maximum_tokens_per_image": 2240, - "token_counts_approximate": true, - "detail_token_budgets": { - "unspecified": 1120, - "low": 280, - "medium": 560, - "high": 1120, - "ultra_high": 2240 - } - } - }, - "google/gemini-3.7-flash": { - "id": "google/gemini-3.7-flash", - "vendor": "google", - "label": "Gemini 3.7 Flash", - "multimodal": true, - "image_input_mimes": [ - "image/png", - "image/jpeg", - "image/webp", - "image/heic", - "image/heif" - ], - "tool_call": true, - "context_window": 1048576, - "output_limit": 65536, - "cost": { - "input": 1.5, - "output": 7.5, - "cache_read": 0.15 - }, - "release": { - "date": "2026-08-13", - "basis": "model", - "source_url": "https://ai.google.dev/gemini-api/docs/changelog" - }, - "providers": { - "vercel": { - "provider": "vercel", - "id": "google/gemini-3.7-flash", - "url": "https://ai-gateway.vercel.sh/v1/models", + }, + "openai": { + "provider": "openai", + "id": "gpt-5.5-pro", + "url": "https://developers.openai.com/api/docs/models/gpt-5.5-pro", + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.5-pro", "endpoints": [ { - "id": "google/gemini-3.7-flash", + "id": "gpt-5.5-pro", "input": "text", - "source_url": "https://ai-gateway.vercel.sh/v1/models" + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.5-pro" } ], "token_pricing": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.5-pro", "unit": "usd_per_token", - "input": "0.00000075", - "output": "0.00000375", - "input_cache_read": "0.000000075" + "scope": "Standard text rates for prompts up to 272,000 input tokens; cached input has no discount. Longer-context rates are not recorded here.", + "input": "0.00003", + "output": "0.00018" }, "capabilities": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.5-pro", "image_input": true, - "tools": true, "reasoning": true, - "structured_output": true + "tools": true, + "structured_output": true, + "streaming": false }, "limits": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", - "context_tokens": 1000000, - "max_output_tokens": 65535 + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.5-pro", + "context_tokens": 1050000, + "max_output_tokens": 128000 } - } - }, - "vision_tokenization": { - "source_url": "https://ai.google.dev/gemini-api/docs/media-resolution", - "maximum_tokens_per_image": 2240, - "token_counts_approximate": true, - "detail_token_budgets": { - "unspecified": 1120, - "low": 280, - "medium": 560, - "high": 1120, - "ultra_high": 2240 - } - } - }, - "google/gemini-3.8-flash": { - "id": "google/gemini-3.8-flash", - "vendor": "google", - "label": "Gemini 3.8 Flash", - "multimodal": true, - "image_input_mimes": [ - "image/png", - "image/jpeg", - "image/webp", - "image/heic", - "image/heif" - ], - "tool_call": true, - "context_window": 1048576, - "output_limit": 65536, - "cost": { - "input": 1.5, - "output": 7.5, - "cache_read": 0.15 - }, - "release": { - "date": "2026-09-02", - "basis": "model", - "source_url": "https://ai.google.dev/gemini-api/docs/changelog" - }, - "providers": { - "vercel": { - "provider": "vercel", - "id": "google/gemini-3.8-flash", - "url": "https://ai-gateway.vercel.sh/v1/models", + }, + "openrouter": { + "provider": "openrouter", + "id": "openai/gpt-5.5-pro", + "url": "https://openrouter.ai/openai/gpt-5.5-pro", + "source_url": "https://openrouter.ai/openai/gpt-5.5-pro", + "endpoints": [ + { + "id": "openai/gpt-5.5-pro", + "input": "text", + "source_url": "https://openrouter.ai/api/v1/models" + } + ], + "token_pricing": { + "source_url": "https://openrouter.ai/openai/gpt-5.5-pro", + "unit": "usd_per_token", + "scope": "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded.", + "input": "0.00003", + "output": "0.00018", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272000, + "usd_per_token": "0.00003" + }, + { + "meter": "input", + "minimum_input_tokens": 272000, + "usd_per_token": "0.00006" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272000, + "usd_per_token": "0.00018" + }, + { + "meter": "output", + "minimum_input_tokens": 272000, + "usd_per_token": "0.00027" + } + ] + }, + "capabilities": { + "source_url": "https://openrouter.ai/api/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://openrouter.ai/api/v1/models", + "context_tokens": 1050000, + "max_output_tokens": 128000 + } + }, + "grida": { + "provider": "grida", + "id": "openai/gpt-5.5-pro", + "url": "https://gateway.grida.ai/v1/models", "endpoints": [ { - "id": "google/gemini-3.8-flash", + "id": "openai/gpt-5.5-pro", "input": "text", - "source_url": "https://ai-gateway.vercel.sh/v1/models" + "source_url": "https://gateway.grida.ai/v1/models", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "input_tokens.0", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "272000" + }, + "usd_per_unit": "0.00003" + }, + { + "id": "input_tokens.1", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "272000" + }, + "usd_per_unit": "0.00006" + }, + { + "id": "cached_input_tokens", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.00003" + }, + { + "id": "output_tokens.0", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "272000" + }, + "usd_per_unit": "0.00018" + }, + { + "id": "output_tokens.1", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "272000" + }, + "usd_per_unit": "0.00027" + } + ] + } } ], - "token_pricing": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", - "unit": "usd_per_token", - "input": "0.00000075", - "output": "0.00000375", - "input_cache_read": "0.000000075" - }, "capabilities": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://gateway.grida.ai/v1/models", "image_input": true, "tools": true, "reasoning": true, "structured_output": true }, "limits": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://gateway.grida.ai/v1/models", "context_tokens": 1000000, - "max_output_tokens": 65535 + "max_output_tokens": 128000 } } }, - "vision_tokenization": { - "source_url": "https://ai.google.dev/gemini-api/docs/media-resolution", - "maximum_tokens_per_image": 2240, - "token_counts_approximate": true, - "detail_token_budgets": { - "unspecified": 1120, - "low": 280, - "medium": 560, - "high": 1120, - "ultra_high": 2240 + "provider_coverage": { + "openai": { + "disposition": "listed", + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.5-pro" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/gpt-5.5-pro" + }, + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/openai/gpt-5.5-pro" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + }, + "fal": { + "disposition": "excluded", + "source_url": "https://fal.ai/models", + "reason": "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." } } }, - "openai/gpt-5.5": { - "id": "openai/gpt-5.5", + "openai/gpt-5.6-luna": { + "id": "openai/gpt-5.6-luna", "vendor": "openai", - "label": "GPT-5.5", + "reference_provider": "openai", + "label": "GPT-5.6 Luna", "multimodal": true, "image_input_mimes": [ "image/png", @@ -873,14 +3326,15 @@ "context_window": 1050000, "output_limit": 128000, "release": { - "date": "2026-04-23", + "date": "2026-07-09", "basis": "model", - "source_url": "https://openai.com/index/introducing-gpt-5-5/" + "source_url": "https://openai.com/index/gpt-5-6/" }, "cost": { - "input": 5, - "output": 30, - "cache_read": 0.5, + "input": 0.2, + "output": 1.2, + "cache_read": 0.02, + "cache_write": 0.25, "long_context": { "input_tokens_above": 272000, "input_multiplier": 2, @@ -890,54 +3344,67 @@ "providers": { "vercel": { "provider": "vercel", - "id": "openai/gpt-5.5", + "id": "openai/gpt-5.6-luna", "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { - "id": "openai/gpt-5.5", + "id": "openai/gpt-5.6-luna", "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } ], "token_pricing": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://vercel.com/ai-gateway/models/gpt-5.6-luna", "unit": "usd_per_token", - "input": "0.000005", - "output": "0.00003", - "input_cache_read": "0.0000005", + "scope": "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration.", + "input": "0.0000002", + "output": "0.0000012", + "input_cache_read": "0.00000002", + "input_cache_write": "0.00000025", "tiers": [ { "meter": "input", "minimum_input_tokens": 0, - "usd_per_token": "0.000005", + "usd_per_token": "0.0000002", "maximum_input_tokens": 272000 }, { "meter": "input", "minimum_input_tokens": 272000, - "usd_per_token": "0.00001" + "usd_per_token": "0.0000004" }, { "meter": "output", "minimum_input_tokens": 0, - "usd_per_token": "0.00003", + "usd_per_token": "0.0000012", "maximum_input_tokens": 272000 }, { "meter": "output", "minimum_input_tokens": 272000, - "usd_per_token": "0.000045" + "usd_per_token": "0.0000018" }, { "meter": "input_cache_read", "minimum_input_tokens": 0, - "usd_per_token": "0.0000005", + "usd_per_token": "0.00000002", "maximum_input_tokens": 272000 }, { "meter": "input_cache_read", "minimum_input_tokens": 272000, - "usd_per_token": "0.000001" + "usd_per_token": "0.00000004" + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 0, + "usd_per_token": "0.00000025", + "maximum_input_tokens": 272000 + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 272000, + "usd_per_token": "0.0000005" } ] }, @@ -950,7 +3417,291 @@ }, "limits": { "source_url": "https://ai-gateway.vercel.sh/v1/models", - "context_tokens": 1000000, + "context_tokens": 1050000, + "max_output_tokens": 128000 + } + }, + "openai": { + "provider": "openai", + "id": "gpt-5.6-luna", + "url": "https://developers.openai.com/api/docs/models/gpt-5.6-luna", + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.6-luna", + "endpoints": [ + { + "id": "gpt-5.6-luna", + "input": "text", + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.6-luna" + } + ], + "token_pricing": { + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.6-luna", + "unit": "usd_per_token", + "scope": "Standard synchronous text token rates; optional tools and other service tiers are excluded.", + "input": "0.0000002", + "output": "0.0000012", + "input_cache_read": "0.00000002", + "input_cache_write": "0.00000025", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272001, + "usd_per_token": "0.0000002" + }, + { + "meter": "input", + "minimum_input_tokens": 272001, + "usd_per_token": "0.0000004" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272001, + "usd_per_token": "0.0000012" + }, + { + "meter": "output", + "minimum_input_tokens": 272001, + "usd_per_token": "0.00000180" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272001, + "usd_per_token": "0.00000002" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 272001, + "usd_per_token": "0.00000004" + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272001, + "usd_per_token": "0.00000025" + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 272001, + "usd_per_token": "0.00000050" + } + ] + }, + "capabilities": { + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.6-luna", + "image_input": true, + "reasoning": true, + "tools": true, + "structured_output": true, + "streaming": true + }, + "limits": { + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.6-luna", + "context_tokens": 1050000, + "max_output_tokens": 128000 + } + }, + "openrouter": { + "provider": "openrouter", + "id": "openai/gpt-5.6-luna", + "url": "https://openrouter.ai/openai/gpt-5.6-luna", + "source_url": "https://openrouter.ai/openai/gpt-5.6-luna", + "endpoints": [ + { + "id": "openai/gpt-5.6-luna", + "input": "text", + "source_url": "https://openrouter.ai/api/v1/models" + } + ], + "token_pricing": { + "source_url": "https://openrouter.ai/openai/gpt-5.6-luna", + "unit": "usd_per_token", + "scope": "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded.", + "input": "0.0000002", + "output": "0.0000012", + "input_cache_read": "0.00000002", + "input_cache_write": "0.00000025", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272000, + "usd_per_token": "0.0000002" + }, + { + "meter": "input", + "minimum_input_tokens": 272000, + "usd_per_token": "0.0000004" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272000, + "usd_per_token": "0.0000012" + }, + { + "meter": "output", + "minimum_input_tokens": 272000, + "usd_per_token": "0.0000018" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272000, + "usd_per_token": "0.00000002" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 272000, + "usd_per_token": "0.00000004" + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272000, + "usd_per_token": "0.00000025" + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 272000, + "usd_per_token": "0.0000005" + } + ] + }, + "capabilities": { + "source_url": "https://openrouter.ai/api/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://openrouter.ai/api/v1/models", + "context_tokens": 1050000, + "max_output_tokens": 128000 + } + }, + "grida": { + "provider": "grida", + "id": "openai/gpt-5.6-luna", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "openai/gpt-5.6-luna", + "input": "text", + "source_url": "https://gateway.grida.ai/v1/models", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "input_tokens.0", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "272000" + }, + "usd_per_unit": "0.0000002" + }, + { + "id": "input_tokens.1", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "272000" + }, + "usd_per_unit": "0.0000004" + }, + { + "id": "cached_input_tokens.0", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "272000" + }, + "usd_per_unit": "0.00000002" + }, + { + "id": "cached_input_tokens.1", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "272000" + }, + "usd_per_unit": "0.00000004" + }, + { + "id": "output_tokens.0", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "272000" + }, + "usd_per_unit": "0.0000012" + }, + { + "id": "output_tokens.1", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "272000" + }, + "usd_per_unit": "0.0000018" + } + ] + } + } + ], + "capabilities": { + "source_url": "https://gateway.grida.ai/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://gateway.grida.ai/v1/models", + "context_tokens": 1050000, "max_output_tokens": 128000 } } @@ -962,22 +3713,44 @@ "token_rounding": "ceil", "maximum_patch_count": 30000, "detail_patch_budgets": { - "high": 2500, - "original": 10000, - "auto": 10000 + "high": 2500 }, "detail_maximum_edges": { "low": 512, "high": 2048, - "original": 6000, - "auto": 6000 + "original": 65535, + "auto": 65535 + } + }, + "provider_coverage": { + "openai": { + "disposition": "listed", + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.6-luna" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/gpt-5.6-luna" + }, + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/openai/gpt-5.6-luna" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + }, + "fal": { + "disposition": "excluded", + "source_url": "https://fal.ai/models", + "reason": "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." } } }, - "openai/gpt-5.5-pro": { - "id": "openai/gpt-5.5-pro", + "openai/gpt-5.6-sol": { + "id": "openai/gpt-5.6-sol", "vendor": "openai", - "label": "GPT-5.5 Pro", + "reference_provider": "openai", + "label": "GPT-5.6 Sol", "multimodal": true, "image_input_mimes": [ "image/png", @@ -988,54 +3761,75 @@ "tool_call": true, "context_window": 1050000, "output_limit": 128000, - "cost": { - "input": 30, - "output": 180 - }, "release": { - "date": "2026-04-23", + "date": "2026-07-09", "basis": "model", - "source_url": "https://openai.com/index/introducing-gpt-5-5/" + "source_url": "https://openai.com/index/gpt-5-6/" }, "providers": { "vercel": { "provider": "vercel", - "id": "openai/gpt-5.5-pro", + "id": "openai/gpt-5.6-sol", "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { - "id": "openai/gpt-5.5-pro", + "id": "openai/gpt-5.6-sol", "input": "text", "source_url": "https://ai-gateway.vercel.sh/v1/models" } ], "token_pricing": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://vercel.com/ai-gateway/models/gpt-5.6-sol", "unit": "usd_per_token", - "input": "0.00003", - "output": "0.00018", + "scope": "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration.", + "input": "0.000004", + "output": "0.00002", + "input_cache_read": "0.0000004", + "input_cache_write": "0.000005", "tiers": [ { "meter": "input", "minimum_input_tokens": 0, - "usd_per_token": "0.00003", + "usd_per_token": "0.000004", "maximum_input_tokens": 272000 }, { "meter": "input", "minimum_input_tokens": 272000, - "usd_per_token": "0.00006" + "usd_per_token": "0.000008" }, { "meter": "output", "minimum_input_tokens": 0, - "usd_per_token": "0.00018", + "usd_per_token": "0.00002", "maximum_input_tokens": 272000 }, { "meter": "output", "minimum_input_tokens": 272000, - "usd_per_token": "0.00027" + "usd_per_token": "0.00003" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "usd_per_token": "0.0000004", + "maximum_input_tokens": 272000 + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 272000, + "usd_per_token": "0.0000008" + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 0, + "usd_per_token": "0.000005", + "maximum_input_tokens": 272000 + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 272000, + "usd_per_token": "0.00001" } ] }, @@ -1048,117 +3842,235 @@ }, "limits": { "source_url": "https://ai-gateway.vercel.sh/v1/models", - "context_tokens": 1000000, + "context_tokens": 1050000, "max_output_tokens": 128000 } - } - } - }, - "openai/gpt-5.6-luna": { - "id": "openai/gpt-5.6-luna", - "vendor": "openai", - "label": "GPT-5.6 Luna", - "multimodal": true, - "image_input_mimes": [ - "image/png", - "image/jpeg", - "image/webp", - "image/gif" - ], - "tool_call": true, - "context_window": 1050000, - "output_limit": 128000, - "release": { - "date": "2026-07-09", - "basis": "model", - "source_url": "https://openai.com/index/gpt-5-6/" - }, - "cost": { - "input": 0.2, - "output": 1.2, - "cache_read": 0.02, - "cache_write": 0.25, - "long_context": { - "input_tokens_above": 272000, - "input_multiplier": 2, - "output_multiplier": 1.5 - } - }, - "providers": { - "vercel": { - "provider": "vercel", - "id": "openai/gpt-5.6-luna", - "url": "https://ai-gateway.vercel.sh/v1/models", + }, + "openai": { + "provider": "openai", + "id": "gpt-5.6-sol", + "url": "https://developers.openai.com/api/docs/models/gpt-5.6-sol", + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.6-sol", "endpoints": [ { - "id": "openai/gpt-5.6-luna", + "id": "gpt-5.6-sol", "input": "text", - "source_url": "https://ai-gateway.vercel.sh/v1/models" + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.6-sol" + } + ], + "capabilities": { + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.6-sol", + "image_input": true, + "reasoning": true, + "tools": true, + "structured_output": true, + "streaming": true + }, + "limits": { + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.6-sol", + "context_tokens": 1050000, + "max_output_tokens": 128000 + } + }, + "openrouter": { + "provider": "openrouter", + "id": "openai/gpt-5.6-sol", + "url": "https://openrouter.ai/openai/gpt-5.6-sol", + "source_url": "https://openrouter.ai/openai/gpt-5.6-sol", + "endpoints": [ + { + "id": "openai/gpt-5.6-sol", + "input": "text", + "source_url": "https://openrouter.ai/api/v1/models" } ], "token_pricing": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://openrouter.ai/openai/gpt-5.6-sol", "unit": "usd_per_token", - "input": "0.0000002", - "output": "0.0000012", - "input_cache_read": "0.00000002", - "input_cache_write": "0.00000025", + "scope": "Regular Standard Azure endpoint token rates, also shown as list input/output/cache-read rates in the model page. Other endpoints and service tiers may differ.", + "input": "0.000004", + "output": "0.00002", + "input_cache_read": "0.0000004", + "input_cache_write": "0.000005", "tiers": [ { "meter": "input", "minimum_input_tokens": 0, - "usd_per_token": "0.0000002", - "maximum_input_tokens": 272000 + "maximum_input_tokens": 272000, + "usd_per_token": "0.000004" }, { "meter": "input", "minimum_input_tokens": 272000, - "usd_per_token": "0.0000004" + "usd_per_token": "0.000008" }, { "meter": "output", "minimum_input_tokens": 0, - "usd_per_token": "0.0000012", - "maximum_input_tokens": 272000 + "maximum_input_tokens": 272000, + "usd_per_token": "0.00002" }, { "meter": "output", "minimum_input_tokens": 272000, - "usd_per_token": "0.0000018" + "usd_per_token": "0.00003" }, { "meter": "input_cache_read", "minimum_input_tokens": 0, - "usd_per_token": "0.00000002", - "maximum_input_tokens": 272000 + "maximum_input_tokens": 272000, + "usd_per_token": "0.0000004" }, { "meter": "input_cache_read", "minimum_input_tokens": 272000, - "usd_per_token": "0.00000004" + "usd_per_token": "0.0000008" }, { "meter": "input_cache_write", "minimum_input_tokens": 0, - "usd_per_token": "0.00000025", - "maximum_input_tokens": 272000 + "maximum_input_tokens": 272000, + "usd_per_token": "0.000005" }, { "meter": "input_cache_write", "minimum_input_tokens": 272000, - "usd_per_token": "0.0000005" + "usd_per_token": "0.00001" } ] }, "capabilities": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://openrouter.ai/api/v1/models", "image_input": true, "tools": true, "reasoning": true, "structured_output": true }, "limits": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://openrouter.ai/api/v1/models", + "context_tokens": 1050000, + "max_output_tokens": 128000 + } + }, + "grida": { + "provider": "grida", + "id": "openai/gpt-5.6-sol", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "openai/gpt-5.6-sol", + "input": "text", + "source_url": "https://gateway.grida.ai/v1/models", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "input_tokens.0", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "272000" + }, + "usd_per_unit": "0.000004" + }, + { + "id": "input_tokens.1", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "272000" + }, + "usd_per_unit": "0.000008" + }, + { + "id": "cached_input_tokens.0", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "272000" + }, + "usd_per_unit": "0.0000004" + }, + { + "id": "cached_input_tokens.1", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "272000" + }, + "usd_per_unit": "0.0000008" + }, + { + "id": "output_tokens.0", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "272000" + }, + "usd_per_unit": "0.00002" + }, + { + "id": "output_tokens.1", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "272000" + }, + "usd_per_unit": "0.00003" + } + ] + } + } + ], + "capabilities": { + "source_url": "https://gateway.grida.ai/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://gateway.grida.ai/v1/models", "context_tokens": 1050000, "max_output_tokens": 128000 } @@ -1179,12 +4091,37 @@ "original": 65535, "auto": 65535 } + }, + "provider_coverage": { + "openai": { + "disposition": "listed", + "reason": "Native model availability is verified; its published pricing is promotional, so an unqualified regular native price is not recorded.", + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.6-sol" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/gpt-5.6-sol" + }, + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/openai/gpt-5.6-sol" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + }, + "fal": { + "disposition": "excluded", + "source_url": "https://fal.ai/models", + "reason": "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." + } } }, - "openai/gpt-5.6-sol": { - "id": "openai/gpt-5.6-sol", + "openai/gpt-5.6-terra": { + "id": "openai/gpt-5.6-terra", "vendor": "openai", - "label": "GPT-5.6 Sol", + "reference_provider": "openai", + "label": "GPT-5.6 Terra", "multimodal": true, "image_input_mimes": [ "image/png", @@ -1201,10 +4138,10 @@ "source_url": "https://openai.com/index/gpt-5-6/" }, "cost": { - "input": 4, - "output": 20, - "cache_read": 0.4, - "cache_write": 5, + "input": 2, + "output": 12, + "cache_read": 0.2, + "cache_write": 2.5, "long_context": { "input_tokens_above": 272000, "input_multiplier": 2, @@ -1214,145 +4151,180 @@ "providers": { "vercel": { "provider": "vercel", - "id": "openai/gpt-5.6-sol", + "id": "openai/gpt-5.6-terra", "url": "https://ai-gateway.vercel.sh/v1/models", "endpoints": [ { - "id": "openai/gpt-5.6-sol", + "id": "openai/gpt-5.6-terra", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ], + "token_pricing": { + "source_url": "https://vercel.com/ai-gateway/models/gpt-5.6-terra", + "unit": "usd_per_token", + "scope": "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration.", + "input": "0.000002", + "output": "0.000012", + "input_cache_read": "0.0000002", + "input_cache_write": "0.0000025", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "usd_per_token": "0.000002", + "maximum_input_tokens": 272000 + }, + { + "meter": "input", + "minimum_input_tokens": 272000, + "usd_per_token": "0.000004" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "usd_per_token": "0.000012", + "maximum_input_tokens": 272000 + }, + { + "meter": "output", + "minimum_input_tokens": 272000, + "usd_per_token": "0.000018" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "usd_per_token": "0.0000002", + "maximum_input_tokens": 272000 + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 272000, + "usd_per_token": "0.0000004" + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 0, + "usd_per_token": "0.0000025", + "maximum_input_tokens": 272000 + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 272000, + "usd_per_token": "0.000005" + } + ] + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1050000, + "max_output_tokens": 128000 + } + }, + "openai": { + "provider": "openai", + "id": "gpt-5.6-terra", + "url": "https://developers.openai.com/api/docs/models/gpt-5.6-terra", + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.6-terra", + "endpoints": [ + { + "id": "gpt-5.6-terra", "input": "text", - "source_url": "https://ai-gateway.vercel.sh/v1/models" + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.6-terra" } ], "token_pricing": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.6-terra", "unit": "usd_per_token", - "input": "0.000004", - "output": "0.00002", - "input_cache_read": "0.0000004", - "input_cache_write": "0.000005", + "scope": "Standard synchronous text token rates; optional tools and other service tiers are excluded.", + "input": "0.000002", + "output": "0.000012", + "input_cache_read": "0.0000002", + "input_cache_write": "0.0000025", "tiers": [ { "meter": "input", "minimum_input_tokens": 0, - "usd_per_token": "0.000004", - "maximum_input_tokens": 272000 + "maximum_input_tokens": 272001, + "usd_per_token": "0.000002" }, { "meter": "input", - "minimum_input_tokens": 272000, - "usd_per_token": "0.000008" + "minimum_input_tokens": 272001, + "usd_per_token": "0.000004" }, { "meter": "output", "minimum_input_tokens": 0, - "usd_per_token": "0.00002", - "maximum_input_tokens": 272000 + "maximum_input_tokens": 272001, + "usd_per_token": "0.000012" }, { "meter": "output", - "minimum_input_tokens": 272000, - "usd_per_token": "0.00003" + "minimum_input_tokens": 272001, + "usd_per_token": "0.0000180" }, { "meter": "input_cache_read", "minimum_input_tokens": 0, - "usd_per_token": "0.0000004", - "maximum_input_tokens": 272000 + "maximum_input_tokens": 272001, + "usd_per_token": "0.0000002" }, { "meter": "input_cache_read", - "minimum_input_tokens": 272000, - "usd_per_token": "0.0000008" + "minimum_input_tokens": 272001, + "usd_per_token": "0.0000004" }, { "meter": "input_cache_write", "minimum_input_tokens": 0, - "usd_per_token": "0.000005", - "maximum_input_tokens": 272000 + "maximum_input_tokens": 272001, + "usd_per_token": "0.0000025" }, { "meter": "input_cache_write", - "minimum_input_tokens": 272000, - "usd_per_token": "0.00001" + "minimum_input_tokens": 272001, + "usd_per_token": "0.0000050" } ] }, "capabilities": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.6-terra", "image_input": true, - "tools": true, "reasoning": true, - "structured_output": true + "tools": true, + "structured_output": true, + "streaming": true }, "limits": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.6-terra", "context_tokens": 1050000, "max_output_tokens": 128000 } - } - }, - "vision_tokenization": { - "source_url": "https://developers.openai.com/api/docs/guides/images-vision", - "patch_size_px": 32, - "token_multiplier": 1.2, - "token_rounding": "ceil", - "maximum_patch_count": 30000, - "detail_patch_budgets": { - "high": 2500 }, - "detail_maximum_edges": { - "low": 512, - "high": 2048, - "original": 65535, - "auto": 65535 - } - } - }, - "openai/gpt-5.6-terra": { - "id": "openai/gpt-5.6-terra", - "vendor": "openai", - "label": "GPT-5.6 Terra", - "multimodal": true, - "image_input_mimes": [ - "image/png", - "image/jpeg", - "image/webp", - "image/gif" - ], - "tool_call": true, - "context_window": 1050000, - "output_limit": 128000, - "release": { - "date": "2026-07-09", - "basis": "model", - "source_url": "https://openai.com/index/gpt-5-6/" - }, - "cost": { - "input": 2, - "output": 12, - "cache_read": 0.2, - "cache_write": 2.5, - "long_context": { - "input_tokens_above": 272000, - "input_multiplier": 2, - "output_multiplier": 1.5 - } - }, - "providers": { - "vercel": { - "provider": "vercel", + "openrouter": { + "provider": "openrouter", "id": "openai/gpt-5.6-terra", - "url": "https://ai-gateway.vercel.sh/v1/models", + "url": "https://openrouter.ai/openai/gpt-5.6-terra", + "source_url": "https://openrouter.ai/openai/gpt-5.6-terra", "endpoints": [ { "id": "openai/gpt-5.6-terra", "input": "text", - "source_url": "https://ai-gateway.vercel.sh/v1/models" + "source_url": "https://openrouter.ai/api/v1/models" } ], "token_pricing": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://openrouter.ai/openai/gpt-5.6-terra", "unit": "usd_per_token", + "scope": "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded.", "input": "0.000002", "output": "0.000012", "input_cache_read": "0.0000002", @@ -1361,8 +4333,8 @@ { "meter": "input", "minimum_input_tokens": 0, - "usd_per_token": "0.000002", - "maximum_input_tokens": 272000 + "maximum_input_tokens": 272000, + "usd_per_token": "0.000002" }, { "meter": "input", @@ -1372,8 +4344,8 @@ { "meter": "output", "minimum_input_tokens": 0, - "usd_per_token": "0.000012", - "maximum_input_tokens": 272000 + "maximum_input_tokens": 272000, + "usd_per_token": "0.000012" }, { "meter": "output", @@ -1383,8 +4355,8 @@ { "meter": "input_cache_read", "minimum_input_tokens": 0, - "usd_per_token": "0.0000002", - "maximum_input_tokens": 272000 + "maximum_input_tokens": 272000, + "usd_per_token": "0.0000002" }, { "meter": "input_cache_read", @@ -1394,8 +4366,8 @@ { "meter": "input_cache_write", "minimum_input_tokens": 0, - "usd_per_token": "0.0000025", - "maximum_input_tokens": 272000 + "maximum_input_tokens": 272000, + "usd_per_token": "0.0000025" }, { "meter": "input_cache_write", @@ -1405,14 +4377,137 @@ ] }, "capabilities": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://openrouter.ai/api/v1/models", "image_input": true, "tools": true, "reasoning": true, "structured_output": true }, "limits": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://openrouter.ai/api/v1/models", + "context_tokens": 1050000, + "max_output_tokens": 128000 + } + }, + "grida": { + "provider": "grida", + "id": "openai/gpt-5.6-terra", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "openai/gpt-5.6-terra", + "input": "text", + "source_url": "https://gateway.grida.ai/v1/models", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "input_tokens.0", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "272000" + }, + "usd_per_unit": "0.000002" + }, + { + "id": "input_tokens.1", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "272000" + }, + "usd_per_unit": "0.000004" + }, + { + "id": "cached_input_tokens.0", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "272000" + }, + "usd_per_unit": "0.0000002" + }, + { + "id": "cached_input_tokens.1", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "272000" + }, + "usd_per_unit": "0.0000004" + }, + { + "id": "output_tokens.0", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "272000" + }, + "usd_per_unit": "0.000012" + }, + { + "id": "output_tokens.1", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "272000" + }, + "usd_per_unit": "0.000018" + } + ] + } + } + ], + "capabilities": { + "source_url": "https://gateway.grida.ai/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://gateway.grida.ai/v1/models", "context_tokens": 1050000, "max_output_tokens": 128000 } @@ -1433,11 +4528,35 @@ "original": 65535, "auto": 65535 } + }, + "provider_coverage": { + "openai": { + "disposition": "listed", + "source_url": "https://developers.openai.com/api/docs/models/gpt-5.6-terra" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/gpt-5.6-terra" + }, + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/openai/gpt-5.6-terra" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + }, + "fal": { + "disposition": "excluded", + "source_url": "https://fal.ai/models", + "reason": "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." + } } }, "openai/gpt-6-astra": { "id": "openai/gpt-6-astra", "vendor": "openai", + "reference_provider": "openai", "label": "GPT-6 Astra", "multimodal": true, "image_input_mimes": [ @@ -1469,17 +4588,179 @@ "vercel": { "provider": "vercel", "id": "openai/gpt-6-astra", - "url": "https://ai-gateway.vercel.sh/v1/models", + "url": "https://ai-gateway.vercel.sh/v1/models", + "endpoints": [ + { + "id": "openai/gpt-6-astra", + "input": "text", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + } + ], + "token_pricing": { + "source_url": "https://vercel.com/ai-gateway/models/gpt-6-astra", + "unit": "usd_per_token", + "scope": "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration.", + "input": "0.00001", + "output": "0.00005", + "input_cache_read": "0.000001", + "input_cache_write": "0.0000125", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "usd_per_token": "0.00001", + "maximum_input_tokens": 272001 + }, + { + "meter": "input", + "minimum_input_tokens": 272001, + "usd_per_token": "0.00002" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "usd_per_token": "0.00005", + "maximum_input_tokens": 272001 + }, + { + "meter": "output", + "minimum_input_tokens": 272001, + "usd_per_token": "0.000075" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "usd_per_token": "0.000001", + "maximum_input_tokens": 272001 + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 272001, + "usd_per_token": "0.000002" + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 0, + "usd_per_token": "0.0000125", + "maximum_input_tokens": 272001 + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 272001, + "usd_per_token": "0.000025" + } + ] + }, + "capabilities": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "context_tokens": 1050000, + "max_output_tokens": 128000 + } + }, + "openai": { + "provider": "openai", + "id": "gpt-6-astra", + "url": "https://developers.openai.com/api/docs/models/gpt-6-astra", + "source_url": "https://developers.openai.com/api/docs/models/gpt-6-astra", + "endpoints": [ + { + "id": "gpt-6-astra", + "input": "text", + "source_url": "https://developers.openai.com/api/docs/models/gpt-6-astra" + } + ], + "token_pricing": { + "source_url": "https://developers.openai.com/api/docs/models/gpt-6-astra", + "unit": "usd_per_token", + "scope": "Standard synchronous text token rates; optional tools and other service tiers are excluded.", + "input": "0.00001", + "output": "0.00005", + "input_cache_read": "0.000001", + "input_cache_write": "0.0000125", + "tiers": [ + { + "meter": "input", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272001, + "usd_per_token": "0.00001" + }, + { + "meter": "input", + "minimum_input_tokens": 272001, + "usd_per_token": "0.00002" + }, + { + "meter": "output", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272001, + "usd_per_token": "0.00005" + }, + { + "meter": "output", + "minimum_input_tokens": 272001, + "usd_per_token": "0.000075" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272001, + "usd_per_token": "0.000001" + }, + { + "meter": "input_cache_read", + "minimum_input_tokens": 272001, + "usd_per_token": "0.000002" + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 0, + "maximum_input_tokens": 272001, + "usd_per_token": "0.0000125" + }, + { + "meter": "input_cache_write", + "minimum_input_tokens": 272001, + "usd_per_token": "0.0000250" + } + ] + }, + "capabilities": { + "source_url": "https://developers.openai.com/api/docs/models/gpt-6-astra", + "image_input": true, + "reasoning": true, + "tools": true, + "structured_output": true, + "streaming": true + }, + "limits": { + "source_url": "https://developers.openai.com/api/docs/models/gpt-6-astra", + "context_tokens": 1050000, + "max_output_tokens": 128000 + } + }, + "openrouter": { + "provider": "openrouter", + "id": "openai/gpt-6-astra", + "url": "https://openrouter.ai/openai/gpt-6-astra", + "source_url": "https://openrouter.ai/openai/gpt-6-astra", "endpoints": [ { "id": "openai/gpt-6-astra", "input": "text", - "source_url": "https://ai-gateway.vercel.sh/v1/models" + "source_url": "https://openrouter.ai/api/v1/models" } ], "token_pricing": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://openrouter.ai/openai/gpt-6-astra", "unit": "usd_per_token", + "scope": "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded.", "input": "0.00001", "output": "0.00005", "input_cache_read": "0.000001", @@ -1488,58 +4769,181 @@ { "meter": "input", "minimum_input_tokens": 0, - "usd_per_token": "0.00001", - "maximum_input_tokens": 272001 + "maximum_input_tokens": 272000, + "usd_per_token": "0.00001" }, { "meter": "input", - "minimum_input_tokens": 272001, + "minimum_input_tokens": 272000, "usd_per_token": "0.00002" }, { "meter": "output", "minimum_input_tokens": 0, - "usd_per_token": "0.00005", - "maximum_input_tokens": 272001 + "maximum_input_tokens": 272000, + "usd_per_token": "0.00005" }, { "meter": "output", - "minimum_input_tokens": 272001, + "minimum_input_tokens": 272000, "usd_per_token": "0.000075" }, { "meter": "input_cache_read", "minimum_input_tokens": 0, - "usd_per_token": "0.000001", - "maximum_input_tokens": 272001 + "maximum_input_tokens": 272000, + "usd_per_token": "0.000001" }, { "meter": "input_cache_read", - "minimum_input_tokens": 272001, + "minimum_input_tokens": 272000, "usd_per_token": "0.000002" }, { "meter": "input_cache_write", "minimum_input_tokens": 0, - "usd_per_token": "0.0000125", - "maximum_input_tokens": 272001 + "maximum_input_tokens": 272000, + "usd_per_token": "0.0000125" }, { "meter": "input_cache_write", - "minimum_input_tokens": 272001, + "minimum_input_tokens": 272000, "usd_per_token": "0.000025" } ] }, "capabilities": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://openrouter.ai/api/v1/models", "image_input": true, "tools": true, "reasoning": true, "structured_output": true }, "limits": { - "source_url": "https://ai-gateway.vercel.sh/v1/models", + "source_url": "https://openrouter.ai/api/v1/models", + "context_tokens": 1050000, + "max_output_tokens": 128000 + } + }, + "grida": { + "provider": "grida", + "id": "openai/gpt-6-astra", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "openai/gpt-6-astra", + "input": "text", + "source_url": "https://gateway.grida.ai/v1/models", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "input_tokens.0", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "272001" + }, + "usd_per_unit": "0.00001" + }, + { + "id": "input_tokens.1", + "meter": "input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "272001" + }, + "usd_per_unit": "0.00002" + }, + { + "id": "cached_input_tokens.0", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "272001" + }, + "usd_per_unit": "0.000001" + }, + { + "id": "cached_input_tokens.1", + "meter": "cached_input_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "272001" + }, + "usd_per_unit": "0.000002" + }, + { + "id": "output_tokens.0", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "0", + "max": "272001" + }, + "usd_per_unit": "0.00005" + }, + { + "id": "output_tokens.1", + "meter": "output_tokens", + "unit": "token", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "quantity_range": { + "meter": "total_input_tokens", + "min": "272001" + }, + "usd_per_unit": "0.000075" + } + ] + } + } + ], + "capabilities": { + "source_url": "https://gateway.grida.ai/v1/models", + "image_input": true, + "tools": true, + "reasoning": true, + "structured_output": true + }, + "limits": { + "source_url": "https://gateway.grida.ai/v1/models", "context_tokens": 1050000, "max_output_tokens": 128000 } @@ -1560,11 +4964,35 @@ "original": 65535, "auto": 65535 } + }, + "provider_coverage": { + "openai": { + "disposition": "listed", + "source_url": "https://developers.openai.com/api/docs/models/gpt-6-astra" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/gpt-6-astra" + }, + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/openai/gpt-6-astra" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + }, + "fal": { + "disposition": "excluded", + "source_url": "https://fal.ai/models", + "reason": "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." + } } } }, "image.models": { "bfl/flux-2-max": { + "reference_provider": "bfl", "id": "bfl/flux-2-max", "label": "Flux 2 Max", "short_description": "Black Forest Labs' highest-fidelity Flux 2 — maximum prompt adherence and detail.", @@ -1739,6 +5167,106 @@ } } ] + }, + "bfl": { + "provider": "bfl", + "id": "flux-2-max", + "source_url": "https://bfl.ai/pricing", + "url": "https://bfl.ai/pricing", + "pricing": { + "type": "per_image_flat", + "usd": 0.07, + "included_megapixels": 1, + "included_megapixels_scope": "output", + "usd_per_additional_megapixel": 0.03, + "input_megapixels_billed": true, + "megapixel_rounding": "ceil", + "pixels_per_megapixel": 1048576, + "multiple_reference_images_megapixels_each": 1, + "source_url": "https://bfl.ai/pricing", + "input_max_megapixels": 4 + } + }, + "grida": { + "provider": "grida", + "id": "bfl/flux-2-max", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "image.bfl.flux-2-max.references", + "operation": "image.bfl.flux-2-max.references", + "input": "multi_image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.bfl.flux-2-max.references.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_1", + "interface": "images.edits", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.07" + } + ] + } + }, + { + "id": "image.bfl.flux-2-max.text", + "operation": "image.bfl.flux-2-max.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.bfl.flux-2-max.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_1", + "interface": "images.generations", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.07" + } + ] + } + } + ] + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/black-forest-labs/flux.2-max" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/flux-2-max" + }, + "bfl": { + "disposition": "listed", + "source_url": "https://bfl.ai/pricing" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" } }, "styles": null, @@ -1746,6 +5274,7 @@ "constraints": null }, "bfl/flux-2-pro": { + "reference_provider": "bfl", "id": "bfl/flux-2-pro", "label": "Flux 2 Pro", "short_description": "Latest Flux model with best-in-class image quality and prompt adherence", @@ -1927,12 +5456,113 @@ } } ] + }, + "bfl": { + "provider": "bfl", + "id": "flux-2-pro", + "source_url": "https://bfl.ai/pricing", + "url": "https://bfl.ai/pricing", + "pricing": { + "type": "per_image_flat", + "usd": 0.03, + "included_megapixels": 1, + "included_megapixels_scope": "output", + "usd_per_additional_megapixel": 0.015, + "input_megapixels_billed": true, + "megapixel_rounding": "ceil", + "pixels_per_megapixel": 1048576, + "multiple_reference_images_megapixels_each": 1, + "source_url": "https://bfl.ai/pricing", + "input_max_megapixels": 4 + } + }, + "grida": { + "provider": "grida", + "id": "bfl/flux-2-pro", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "image.bfl.flux-2-pro.references", + "operation": "image.bfl.flux-2-pro.references", + "input": "multi_image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.bfl.flux-2-pro.references.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_1", + "interface": "images.edits", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.03" + } + ] + } + }, + { + "id": "image.bfl.flux-2-pro.text", + "operation": "image.bfl.flux-2-pro.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.bfl.flux-2-pro.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_1", + "interface": "images.generations", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.03" + } + ] + } + } + ] + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/black-forest-labs/flux.2-pro" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/flux-2-pro" + }, + "bfl": { + "disposition": "listed", + "source_url": "https://bfl.ai/pricing" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" } }, "styles": null, "sizes": null }, "bfl/flux-kontext-max": { + "reference_provider": "bfl", "id": "bfl/flux-kontext-max", "label": "Flux Kontext Max", "short_description": "Highest quality Flux model for context-aware image generation and editing", @@ -1971,12 +5601,43 @@ }, "avg_cost_usd": 0.08, "url": "https://fal.ai/models/fal-ai/flux-pro/kontext/max" + }, + "bfl": { + "provider": "bfl", + "id": "flux-kontext-max", + "source_url": "https://docs.bfl.ai/quick_start/pricing", + "url": "https://docs.bfl.ai/quick_start/pricing", + "pricing": { + "type": "per_image_flat", + "usd": 0.08, + "source_url": "https://docs.bfl.ai/quick_start/pricing" + } + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "not_listed", + "source_url": "https://openrouter.ai/api/v1/images/models", + "reason": "No matching model/version is listed in the inspected public image model catalogue." + }, + "vercel": { + "disposition": "listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/flux-pro/kontext/max" + }, + "bfl": { + "disposition": "listed", + "source_url": "https://docs.bfl.ai/quick_start/pricing" } }, "styles": null, "sizes": null }, "bfl/flux-kontext-pro": { + "reference_provider": "bfl", "id": "bfl/flux-kontext-pro", "label": "Flux Kontext Pro", "short_description": "Fast context-aware image generation and editing", @@ -2015,12 +5676,43 @@ }, "avg_cost_usd": 0.04, "url": "https://fal.ai/models/fal-ai/flux-pro/kontext" + }, + "bfl": { + "provider": "bfl", + "id": "flux-kontext-pro", + "source_url": "https://docs.bfl.ai/quick_start/pricing", + "url": "https://docs.bfl.ai/quick_start/pricing", + "pricing": { + "type": "per_image_flat", + "usd": 0.04, + "source_url": "https://docs.bfl.ai/quick_start/pricing" + } + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "not_listed", + "source_url": "https://openrouter.ai/api/v1/images/models", + "reason": "No matching model/version is listed in the inspected public image model catalogue." + }, + "vercel": { + "disposition": "listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/flux-pro/kontext" + }, + "bfl": { + "disposition": "listed", + "source_url": "https://docs.bfl.ai/quick_start/pricing" } }, "styles": null, "sizes": null }, "bfl/flux-pro-1.1": { + "reference_provider": "bfl", "id": "bfl/flux-pro-1.1", "label": "Flux Pro 1.1", "short_description": "Faster, better FLUX Pro. Text-to-image model with excellent image quality and output diversity.", @@ -2050,12 +5742,55 @@ "usd": 0.04 }, "avg_cost_usd": 0.04 + }, + "bfl": { + "provider": "bfl", + "id": "flux-pro-1.1", + "source_url": "https://docs.bfl.ai/quick_start/pricing", + "url": "https://docs.bfl.ai/quick_start/pricing", + "pricing": { + "type": "per_image_flat", + "usd": 0.04, + "source_url": "https://docs.bfl.ai/quick_start/pricing" + } + }, + "fal": { + "provider": "fal", + "id": "fal-ai/flux-pro/v1.1", + "source_url": "https://fal.ai/models/fal-ai/flux-pro/v1.1", + "url": "https://fal.ai/models/fal-ai/flux-pro/v1.1", + "pricing": { + "type": "per_megapixel", + "usd": 0.04, + "rounding": "ceil", + "source_url": "https://fal.ai/models/fal-ai/flux-pro/v1.1" + } + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "not_listed", + "source_url": "https://openrouter.ai/api/v1/images/models", + "reason": "No matching model/version is listed in the inspected public image model catalogue." + }, + "vercel": { + "disposition": "listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/flux-pro/v1.1" + }, + "bfl": { + "disposition": "listed", + "source_url": "https://docs.bfl.ai/quick_start/pricing" } }, "styles": null, "sizes": null }, "bytedance/seedream-4.5": { + "reference_provider": "byteplus", "id": "bytedance/seedream-4.5", "label": "Seedream 4.5", "short_description": "ByteDance's unified image generation and editing model.", @@ -2108,12 +5843,42 @@ }, "avg_cost_usd": 0.04, "url": "https://fal.ai/models/fal-ai/bytedance/seedream/v4.5/text-to-image" + }, + "byteplus": { + "provider": "byteplus", + "id": "seedream-4-5-251128", + "source_url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing", + "url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing", + "pricing": { + "type": "per_image_flat", + "usd": 0.04, + "source_url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" + } + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/bytedance-seed/seedream-4.5" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/bytedance/seedream/v4.5/text-to-image" + }, + "byteplus": { + "disposition": "listed", + "source_url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" } }, "styles": null, "sizes": null }, "bytedance/seedream-5.0-lite": { + "reference_provider": "byteplus", "id": "bytedance/seedream-5.0-lite", "label": "Seedream 5.0 Lite", "short_description": "ByteDance's fast 2K–4K image model — Seedream 5.0 quality at the 4.5 price point.", @@ -2273,12 +6038,105 @@ } } ] + }, + "byteplus": { + "provider": "byteplus", + "id": "seedream-5-0-lite-260128", + "source_url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing", + "url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing", + "pricing": { + "type": "per_image_flat", + "usd": 0.035, + "source_url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" + } + }, + "grida": { + "provider": "grida", + "id": "bytedance/seedream-5.0-lite", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "image.bytedance.seedream-5.0-lite.references", + "operation": "image.bytedance.seedream-5.0-lite.references", + "input": "multi_image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.bytedance.seedream-5.0-lite.references.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_6", + "interface": "images.edits", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.035" + } + ] + } + }, + { + "id": "image.bytedance.seedream-5.0-lite.text", + "operation": "image.bytedance.seedream-5.0-lite.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.bytedance.seedream-5.0-lite.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_6", + "interface": "images.generations", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.035" + } + ] + } + } + ] + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/bytedance-seed/seedream-5-0-lite" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/bytedance/seedream/v5/lite/text-to-image" + }, + "byteplus": { + "disposition": "listed", + "source_url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" } }, "styles": null, "sizes": null }, "bytedance/seedream-5.0-pro": { + "reference_provider": "byteplus", "id": "bytedance/seedream-5.0-pro", "label": "Seedream 5.0 Pro", "short_description": "ByteDance's flagship image model — dense layouts, infographics and text-heavy compositions at 1K–2K.", @@ -2458,6 +6316,84 @@ } } ] + }, + "byteplus": { + "provider": "byteplus", + "id": "dola-seedream-5-0-pro-260628", + "source_url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing", + "url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing", + "pricing": { + "type": "per_image_tiered", + "threshold_pixels": 2610000, + "tiers": { + "generation_at_or_below_threshold": 0.045, + "generation_above_threshold": 0.09, + "layer_decomposition_at_or_below_threshold": 0.0225, + "layer_decomposition_above_threshold": 0.045 + }, + "included_input_images": 1, + "usd_per_additional_input_image": 0.003, + "source_url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" + } + }, + "grida": { + "provider": "grida", + "id": "bytedance/seedream-5.0-pro", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "image.bytedance.seedream-5.0-pro.references", + "operation": "image.bytedance.seedream-5.0-pro.references", + "input": "multi_image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.bytedance.seedream-5.0-pro.references.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_6", + "interface": "images.edits", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.0675" + } + ] + } + }, + { + "id": "image.bytedance.seedream-5.0-pro.text", + "operation": "image.bytedance.seedream-5.0-pro.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.bytedance.seedream-5.0-pro.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_6", + "interface": "images.generations", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.0675" + } + ] + } + } + ] } }, "constraints": { @@ -2467,10 +6403,33 @@ "max": 16 } }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/bytedance-seed/seedream-5-0-pro" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/bytedance/seedream/v5/pro/text-to-image" + }, + "byteplus": { + "disposition": "listed", + "source_url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + } + }, "styles": null, "sizes": null }, "google/gemini-3-pro-image": { + "reference_provider": "google", "id": "google/gemini-3-pro-image", "label": "Gemini 3 Pro Image", "short_description": "High-quality multimodal model with native image generation", @@ -2681,6 +6640,100 @@ } } ] + }, + "google": { + "provider": "google", + "id": "gemini-3-pro-image", + "source_url": "https://ai.google.dev/gemini-api/docs/pricing", + "url": "https://ai.google.dev/gemini-api/docs/pricing", + "pricing": { + "type": "per_token", + "input": 2, + "text_output": 12, + "output": 120, + "source_url": "https://ai.google.dev/gemini-api/docs/pricing" + } + }, + "grida": { + "provider": "grida", + "id": "google/gemini-3-pro-image", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "image.google.gemini-3-pro-image.references", + "operation": "image.google.gemini-3-pro-image.references", + "input": "multi_image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.google.gemini-3-pro-image.references.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_4", + "interface": "images.edits", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.15" + } + ] + } + }, + { + "id": "image.google.gemini-3-pro-image.text", + "operation": "image.google.gemini-3-pro-image.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.google.gemini-3-pro-image.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_4", + "interface": "images.generations", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.15" + } + ] + } + } + ] + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/google/gemini-3-pro-image-preview" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/nano-banana-pro" + }, + "google": { + "disposition": "listed", + "source_url": "https://ai.google.dev/gemini-api/docs/pricing" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" } }, "styles": null, @@ -2688,6 +6741,7 @@ "constraints": null }, "google/gemini-3.1-flash-image-preview": { + "reference_provider": "google", "id": "google/gemini-3.1-flash-image-preview", "label": "Gemini 3.1 Flash Image", "short_description": "Fast, efficient multimodal model with native image generation", @@ -2914,12 +6968,107 @@ } } ] + }, + "google": { + "provider": "google", + "id": "gemini-3.1-flash-image", + "source_url": "https://ai.google.dev/gemini-api/docs/pricing", + "url": "https://ai.google.dev/gemini-api/docs/pricing", + "pricing": { + "type": "per_token", + "input": 0.5, + "text_output": 3, + "output": 60, + "source_url": "https://ai.google.dev/gemini-api/docs/pricing" + } + }, + "grida": { + "provider": "grida", + "id": "google/gemini-3.1-flash-image-preview", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "image.google.gemini-3.1-flash-image-preview.references", + "operation": "image.google.gemini-3.1-flash-image-preview.references", + "input": "multi_image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.google.gemini-3.1-flash-image-preview.references.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_4", + "interface": "images.edits", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.08" + } + ] + } + }, + { + "id": "image.google.gemini-3.1-flash-image-preview.text", + "operation": "image.google.gemini-3.1-flash-image-preview.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.google.gemini-3.1-flash-image-preview.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_4", + "interface": "images.generations", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.08" + } + ] + } + } + ] + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/google/gemini-3.1-flash-image" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/nano-banana-2" + }, + "google": { + "disposition": "listed", + "source_url": "https://ai.google.dev/gemini-api/docs/pricing" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" } }, "styles": null, "sizes": null }, "google/gemini-3.1-flash-lite-image": { + "reference_provider": "google", "id": "google/gemini-3.1-flash-lite-image", "label": "Gemini 3.1 Flash Lite Image", "short_description": "Fastest, most cost-efficient Gemini image model; 1K output only.", @@ -2961,12 +7110,58 @@ }, "avg_cost_usd": 0.034, "url": "https://openrouter.ai/google/gemini-3.1-flash-lite-image" + }, + "google": { + "provider": "google", + "id": "gemini-3.1-flash-lite-image", + "source_url": "https://ai.google.dev/gemini-api/docs/pricing", + "url": "https://ai.google.dev/gemini-api/docs/pricing", + "pricing": { + "type": "per_token", + "input": 0.25, + "text_output": 1.5, + "output": 30, + "source_url": "https://ai.google.dev/gemini-api/docs/pricing" + } + }, + "fal": { + "provider": "fal", + "id": "google/nano-banana-2-lite", + "source_url": "https://fal.ai/models/google/nano-banana-2-lite", + "url": "https://fal.ai/models/google/nano-banana-2-lite", + "pricing": { + "type": "per_token", + "input": 0.3125, + "image_input": 0.3125, + "text_output": 1.875, + "output": 37.5, + "source_url": "https://fal.ai/models/google/nano-banana-2-lite" + } + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/google/gemini-3.1-flash-lite-image" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/google/nano-banana-2-lite" + }, + "google": { + "disposition": "listed", + "source_url": "https://ai.google.dev/gemini-api/docs/pricing" } }, "styles": null, "sizes": null }, "meta/muse-image-1.0": { + "reference_provider": "meta", "id": "meta/muse-image-1.0", "label": "Muse Image 1.0", "short_description": "Meta's agentic image model — reasons before it renders; generates and edits from text and references.", @@ -3002,6 +7197,54 @@ }, "avg_cost_usd": 0.01, "url": "https://fal.ai/models/meta/muse-image/text-to-image" + }, + "meta": { + "provider": "meta", + "id": "muse-image-1.0", + "source_url": "https://dev.meta.ai/docs/image-generation", + "url": "https://dev.meta.ai/docs/image-generation", + "pricing": { + "type": "per_image_flat", + "usd": 0.01, + "billing_quantity": "successfully_generated_returned_images", + "source_url": "https://dev.meta.ai/docs/image-generation" + } + }, + "openrouter": { + "provider": "openrouter", + "id": "meta/muse-image", + "url": "https://openrouter.ai/meta/muse-image", + "source_url": "https://openrouter.ai/api/v1/models/meta/muse-image/endpoints", + "pricing": { + "type": "per_token", + "image_input": 2.39520958083832, + "output": 2.39520958083832, + "source_url": "https://openrouter.ai/api/v1/models/meta/muse-image/endpoints" + }, + "qualifications": [ + { + "source_url": "https://openrouter.ai/api/v1/images/models/meta/muse-image/endpoints", + "notes": "The model is listed in image discovery, but image-specific endpoint metadata is empty. Published token meters come from general endpoint metadata; image parameter parity is not inferred." + } + ] + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/api/v1/models/meta/muse-image/endpoints" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/meta/muse-image/text-to-image" + }, + "meta": { + "disposition": "listed", + "source_url": "https://dev.meta.ai/docs/image-generation" } }, "styles": null, @@ -3009,6 +7252,7 @@ "constraints": null }, "openai/gpt-image-1-mini": { + "reference_provider": "openai", "id": "openai/gpt-image-1-mini", "label": "GPT Image Mini", "short_description": "Cost-efficient image generation model", @@ -3048,6 +7292,110 @@ "output": 8 }, "avg_cost_usd": 0.011 + }, + "openai": { + "provider": "openai", + "id": "gpt-image-1-mini", + "source_url": "https://developers.openai.com/api/docs/models/gpt-image-1-mini", + "url": "https://developers.openai.com/api/docs/models/gpt-image-1-mini", + "pricing": { + "input": 2, + "cached_input": 0.2, + "image_input": 2.5, + "cached_image_input": 0.25, + "output": 8, + "type": "per_token", + "source_url": "https://developers.openai.com/api/docs/models/gpt-image-1-mini" + } + }, + "fal": { + "provider": "fal", + "id": "fal-ai/gpt-image-1-mini", + "source_url": "https://fal.ai/models/fal-ai/gpt-image-1-mini", + "url": "https://fal.ai/models/fal-ai/gpt-image-1-mini", + "pricing": { + "type": "per_image_tiered", + "tiers": { + "low/1024x1024": 0.005, + "low/1024x1536": 0.006, + "low/1536x1024": 0.006, + "medium/1024x1024": 0.011, + "medium/1024x1536": 0.015, + "medium/1536x1024": 0.015, + "high/1024x1024": 0.036, + "high/1024x1536": 0.052, + "high/1536x1024": 0.052 + }, + "input_text_usd_per_million": 2, + "total_rounding_usd": 0.01, + "source_url": "https://fal.ai/models/fal-ai/gpt-image-1-mini" + }, + "input": "text" + }, + "openrouter": { + "provider": "openrouter", + "id": "openai/gpt-image-1-mini", + "source_url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-1-mini/endpoints", + "url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-1-mini/endpoints", + "pricing": { + "type": "per_token", + "image_input": 2.5, + "input": 2.0, + "output": 8.0, + "source_url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-1-mini/endpoints" + }, + "transparent_background": true, + "references": { + "id": "openai/gpt-image-1-mini", + "max": 16 + }, + "endpoints": [ + { + "id": "openai/gpt-image-1-mini", + "source_url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-1-mini/endpoints", + "parameters": { + "aspect_ratio": { + "enum": [ + "1:1", + "3:2", + "2:3", + "auto" + ] + }, + "quality": { + "enum": [ + "auto", + "low", + "medium", + "high" + ] + }, + "background": { + "enum": [ + "auto", + "transparent", + "opaque" + ] + }, + "n": { + "type": "integer", + "minimum": 1, + "maximum": 10 + }, + "input_references": { + "type": "integer", + "minimum": 0, + "maximum": 16 + }, + "output_compression": { + "type": "integer", + "minimum": 0, + "maximum": 100 + } + }, + "input": "text" + } + ] } }, "pricing": { @@ -3071,10 +7419,29 @@ "output": 8 } }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-1-mini/endpoints" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/gpt-image-1-mini" + }, + "openai": { + "disposition": "listed", + "source_url": "https://developers.openai.com/api/docs/models/gpt-image-1-mini" + } + }, "styles": null, "constraints": null }, "openai/gpt-image-1.5": { + "reference_provider": "openai", "id": "openai/gpt-image-1.5", "label": "GPT Image 1.5", "short_description": "Previous-generation image model. Superseded by GPT Image 2.", @@ -3114,6 +7481,45 @@ "output": 32 }, "avg_cost_usd": 0.034 + }, + "openai": { + "provider": "openai", + "id": "gpt-image-1.5", + "source_url": "https://developers.openai.com/api/docs/models/gpt-image-1.5", + "url": "https://developers.openai.com/api/docs/models/gpt-image-1.5", + "pricing": { + "input": 5, + "cached_input": 1.25, + "image_input": 8, + "cached_image_input": 2, + "output": 32, + "type": "per_token", + "source_url": "https://developers.openai.com/api/docs/models/gpt-image-1.5" + } + }, + "fal": { + "provider": "fal", + "id": "fal-ai/gpt-image-1.5", + "source_url": "https://fal.ai/models/fal-ai/gpt-image-1.5", + "url": "https://fal.ai/models/fal-ai/gpt-image-1.5", + "pricing": { + "type": "per_image_tiered", + "tiers": { + "low/1024x1024": 0.009, + "low/1024x1536": 0.013, + "low/1536x1024": 0.013, + "medium/1024x1024": 0.034, + "medium/1024x1536": 0.051, + "medium/1536x1024": 0.05, + "high/1024x1024": 0.133, + "high/1024x1536": 0.2, + "high/1536x1024": 0.199 + }, + "input_text_usd_per_million": 5, + "text_output_usd_per_million": 10, + "source_url": "https://fal.ai/models/fal-ai/gpt-image-1.5" + }, + "input": "text" } }, "pricing": { @@ -3137,10 +7543,30 @@ "output": 32 } }, + "provider_coverage": { + "openrouter": { + "disposition": "not_listed", + "source_url": "https://openrouter.ai/api/v1/images/models", + "reason": "No matching model/version is listed in the inspected public image model catalogue." + }, + "vercel": { + "disposition": "listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/gpt-image-1.5" + }, + "openai": { + "disposition": "listed", + "source_url": "https://developers.openai.com/api/docs/models/gpt-image-1.5" + } + }, "styles": null, "constraints": null }, "openai/gpt-image-2": { + "reference_provider": "openai", "id": "openai/gpt-image-2", "label": "GPT Image 2", "short_description": "Previous-generation image model. Superseded by GPT Image 2.5.", @@ -3183,22 +7609,6 @@ "avg_cost_usd": 0.053, "transparent_background": null }, - "openrouter": { - "provider": "openrouter", - "id": "openai/gpt-image-2", - "pricing": { - "type": "per_token", - "input": 8, - "output": 8 - }, - "avg_cost_usd": 0.05, - "url": "https://openrouter.ai/openai/gpt-image-2", - "transparent_background": false, - "references": { - "id": "openai/gpt-image-2", - "max": 16 - } - }, "fal": { "endpoints": [ { @@ -3351,24 +7761,167 @@ "aspect_ratio": { "max": 3 } - } + } + } + ], + "provider": "fal", + "id": "openai/gpt-image-2", + "avg_cost_usd": 0.053, + "url": "https://fal.ai/models/openai/gpt-image-2", + "pricing": { + "source_url": "https://fal.ai/models/openai/gpt-image-2", + "rounding_usd": 0.0001, + "type": "per_token", + "input": 5, + "cached_input": 1.25, + "image_input": 8, + "cached_image_input": 2, + "text_output": 10, + "output": 30 + } + }, + "openai": { + "provider": "openai", + "id": "gpt-image-2", + "source_url": "https://developers.openai.com/api/docs/models/gpt-image-2", + "url": "https://developers.openai.com/api/docs/models/gpt-image-2", + "pricing": { + "input": 5, + "cached_input": 1.25, + "image_input": 8, + "cached_image_input": 2, + "output": 30, + "type": "per_token", + "source_url": "https://developers.openai.com/api/docs/models/gpt-image-2" + } + }, + "openrouter": { + "provider": "openrouter", + "id": "openai/gpt-image-2", + "source_url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2/endpoints", + "url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2/endpoints", + "pricing": { + "type": "per_token", + "image_input": 8.0, + "input": 5.0, + "output": 30.0, + "source_url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2/endpoints" + }, + "transparent_background": false, + "references": { + "id": "openai/gpt-image-2", + "max": 16 + }, + "endpoints": [ + { + "id": "openai/gpt-image-2", + "source_url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2/endpoints", + "parameters": { + "aspect_ratio": { + "enum": [ + "1:1", + "3:2", + "2:3", + "4:3", + "3:4", + "16:9", + "9:16", + "21:9", + "auto" + ] + }, + "quality": { + "enum": [ + "auto", + "low", + "medium", + "high" + ] + }, + "background": { + "enum": [ + "auto", + "opaque" + ] + }, + "n": { + "type": "integer", + "minimum": 1, + "maximum": 10 + }, + "input_references": { + "type": "integer", + "minimum": 0, + "maximum": 16 + }, + "output_compression": { + "type": "integer", + "minimum": 0, + "maximum": 100 + } + }, + "input": "text" } - ], - "provider": "fal", + ] + }, + "grida": { + "provider": "grida", "id": "openai/gpt-image-2", - "avg_cost_usd": 0.053, - "url": "https://fal.ai/models/openai/gpt-image-2", - "pricing": { - "source_url": "https://fal.ai/models/openai/gpt-image-2", - "rounding_usd": 0.0001, - "type": "per_token", - "input": 5, - "cached_input": 1.25, - "image_input": 8, - "cached_image_input": 2, - "text_output": 10, - "output": 30 - } + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "image.openai.gpt-image-2.references", + "operation": "image.openai.gpt-image-2.references", + "input": "multi_image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.openai.gpt-image-2.references.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_4", + "interface": "images.edits", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "1" + } + ] + } + }, + { + "id": "image.openai.gpt-image-2.text", + "operation": "image.openai.gpt-image-2.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.openai.gpt-image-2.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_4", + "interface": "images.generations", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "1" + } + ] + } + } + ] } }, "constraints": { @@ -3497,9 +8050,32 @@ } ] }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2/endpoints" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/openai/gpt-image-2" + }, + "openai": { + "disposition": "listed", + "source_url": "https://developers.openai.com/api/docs/models/gpt-image-2" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + } + }, "styles": null }, "openai/gpt-image-2.5-flare": { + "reference_provider": "openai", "id": "openai/gpt-image-2.5-flare", "label": "GPT Image 2.5 Flare", "short_description": "Fast image generation and reference-guided editing.", @@ -3560,23 +8136,6 @@ "avg_cost_usd": 0.055, "url": "https://vercel.com/ai-gateway/models/gpt-image-2.5-flare" }, - "openrouter": { - "provider": "openrouter", - "id": "openai/gpt-image-2.5-flare", - "pricing": { - "type": "per_token", - "input": 5, - "image_input": 8, - "output": 30 - }, - "avg_cost_usd": 0.055, - "url": "https://openrouter.ai/openai/gpt-image-2.5-flare", - "transparent_background": false, - "references": { - "id": "openai/gpt-image-2.5-flare", - "max": 16 - } - }, "fal": { "endpoints": [ { @@ -3765,6 +8324,152 @@ "text_output": 10, "output": 30 } + }, + "openai": { + "provider": "openai", + "id": "gpt-image-2.5-flare", + "source_url": "https://developers.openai.com/api/docs/models/gpt-image-2.5-flare", + "url": "https://developers.openai.com/api/docs/models/gpt-image-2.5-flare", + "pricing": { + "type": "per_token", + "input": 5, + "cached_input": 1.25, + "output": 30, + "image_input": 8, + "cached_image_input": 2, + "source_url": "https://developers.openai.com/api/docs/models/gpt-image-2.5-flare" + } + }, + "openrouter": { + "provider": "openrouter", + "id": "openai/gpt-image-2.5-flare", + "source_url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-flare/endpoints", + "url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-flare/endpoints", + "pricing": { + "type": "per_token", + "image_input": 8.0, + "input": 5.0, + "output": 30.0, + "source_url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-flare/endpoints" + }, + "transparent_background": true, + "references": { + "id": "openai/gpt-image-2.5-flare", + "max": 16 + }, + "endpoints": [ + { + "id": "openai/gpt-image-2.5-flare", + "source_url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-flare/endpoints", + "parameters": { + "aspect_ratio": { + "enum": [ + "1:1", + "3:2", + "2:3", + "4:3", + "3:4", + "16:9", + "9:16", + "21:9", + "auto" + ] + }, + "quality": { + "enum": [ + "auto", + "low", + "medium", + "high", + "xhigh", + "max" + ] + }, + "background": { + "enum": [ + "auto", + "transparent", + "opaque" + ] + }, + "n": { + "type": "integer", + "minimum": 1, + "maximum": 10 + }, + "input_references": { + "type": "integer", + "minimum": 0, + "maximum": 16 + }, + "output_compression": { + "type": "integer", + "minimum": 0, + "maximum": 100 + } + }, + "input": "text" + } + ] + }, + "grida": { + "provider": "grida", + "id": "openai/gpt-image-2.5-flare", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "image.openai.gpt-image-2.5-flare.references", + "operation": "image.openai.gpt-image-2.5-flare.references", + "input": "multi_image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.openai.gpt-image-2.5-flare.references.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_10", + "interface": "images.edits", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "1" + } + ] + } + }, + { + "id": "image.openai.gpt-image-2.5-flare.text", + "operation": "image.openai.gpt-image-2.5-flare.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.openai.gpt-image-2.5-flare.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_10", + "interface": "images.generations", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "1" + } + ] + } + } + ] } }, "constraints": { @@ -4103,9 +8808,32 @@ } ] }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-flare/endpoints" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/gpt-image-2.5-flare" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" + }, + "openai": { + "disposition": "listed", + "source_url": "https://developers.openai.com/api/docs/models/gpt-image-2.5-flare" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + } + }, "styles": null }, "openai/gpt-image-2.5-sunburst": { + "reference_provider": "openai", "id": "openai/gpt-image-2.5-sunburst", "label": "GPT Image 2.5 Sunburst", "short_description": "Detailed image generation and precise editing with longer generation times.", @@ -4166,23 +8894,6 @@ "avg_cost_usd": 0.055, "url": "https://vercel.com/ai-gateway/models/gpt-image-2.5-sunburst" }, - "openrouter": { - "provider": "openrouter", - "id": "openai/gpt-image-2.5-sunburst", - "pricing": { - "type": "per_token", - "input": 5, - "image_input": 8, - "output": 30 - }, - "avg_cost_usd": 0.055, - "url": "https://openrouter.ai/openai/gpt-image-2.5-sunburst", - "transparent_background": false, - "references": { - "id": "openai/gpt-image-2.5-sunburst", - "max": 16 - } - }, "fal": { "endpoints": [ { @@ -4319,58 +9030,204 @@ }, "image_size": { "enum": [ - "square_hd", - "square", - "portrait_4_3", - "portrait_16_9", - "landscape_4_3", - "landscape_16_9", - "auto" + "square_hd", + "square", + "portrait_4_3", + "portrait_16_9", + "landscape_4_3", + "landscape_16_9", + "auto" + ] + }, + "image_size.width": { + "type": "integer", + "minimum": 1, + "maximum": 3840, + "multiple_of": 16 + }, + "image_size.height": { + "type": "integer", + "minimum": 1, + "maximum": 3840, + "multiple_of": 16 + } + }, + "image_constraints": { + "min_pixels": 655360, + "max_pixels": 8294400, + "step": 16, + "max_edge": 3840, + "aspect_ratio": { + "max": 3 + } + } + } + ], + "provider": "fal", + "id": "openai/gpt-image-2.5/sunburst/text-to-image", + "avg_cost_usd": 0.055, + "url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image", + "references": { + "id": "openai/gpt-image-2.5/sunburst/edit", + "max": 16 + }, + "pricing": { + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image", + "rounding_usd": 0.0001, + "type": "per_token", + "input": 5, + "cached_input": 1.25, + "image_input": 8, + "cached_image_input": 2, + "text_output": 10, + "output": 30 + } + }, + "openai": { + "provider": "openai", + "id": "gpt-image-2.5-sunburst", + "source_url": "https://developers.openai.com/api/docs/models/gpt-image-2.5-sunburst", + "url": "https://developers.openai.com/api/docs/models/gpt-image-2.5-sunburst", + "pricing": { + "type": "per_token", + "input": 5, + "cached_input": 1.25, + "output": 30, + "image_input": 8, + "cached_image_input": 2, + "source_url": "https://developers.openai.com/api/docs/models/gpt-image-2.5-sunburst" + } + }, + "openrouter": { + "provider": "openrouter", + "id": "openai/gpt-image-2.5-sunburst", + "source_url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-sunburst/endpoints", + "url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-sunburst/endpoints", + "pricing": { + "type": "per_token", + "image_input": 8.0, + "input": 5.0, + "output": 30.0, + "source_url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-sunburst/endpoints" + }, + "transparent_background": true, + "references": { + "id": "openai/gpt-image-2.5-sunburst", + "max": 16 + }, + "endpoints": [ + { + "id": "openai/gpt-image-2.5-sunburst", + "source_url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-sunburst/endpoints", + "parameters": { + "aspect_ratio": { + "enum": [ + "1:1", + "3:2", + "2:3", + "4:3", + "3:4", + "16:9", + "9:16", + "21:9", + "auto" + ] + }, + "quality": { + "enum": [ + "auto", + "low", + "medium", + "high", + "xhigh", + "max" + ] + }, + "background": { + "enum": [ + "auto", + "transparent", + "opaque" ] }, - "image_size.width": { + "n": { "type": "integer", "minimum": 1, - "maximum": 3840, - "multiple_of": 16 + "maximum": 10 }, - "image_size.height": { + "input_references": { "type": "integer", - "minimum": 1, - "maximum": 3840, - "multiple_of": 16 + "minimum": 0, + "maximum": 16 + }, + "output_compression": { + "type": "integer", + "minimum": 0, + "maximum": 100 } }, - "image_constraints": { - "min_pixels": 655360, - "max_pixels": 8294400, - "step": 16, - "max_edge": 3840, - "aspect_ratio": { - "max": 3 - } + "input": "text" + } + ] + }, + "grida": { + "provider": "grida", + "id": "openai/gpt-image-2.5-sunburst", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "image.openai.gpt-image-2.5-sunburst.references", + "operation": "image.openai.gpt-image-2.5-sunburst.references", + "input": "multi_image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.openai.gpt-image-2.5-sunburst.references.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_10", + "interface": "images.edits", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "1" + } + ] + } + }, + { + "id": "image.openai.gpt-image-2.5-sunburst.text", + "operation": "image.openai.gpt-image-2.5-sunburst.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.openai.gpt-image-2.5-sunburst.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_10", + "interface": "images.generations", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "1" + } + ] } } - ], - "provider": "fal", - "id": "openai/gpt-image-2.5/sunburst/text-to-image", - "avg_cost_usd": 0.055, - "url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image", - "references": { - "id": "openai/gpt-image-2.5/sunburst/edit", - "max": 16 - }, - "pricing": { - "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image", - "rounding_usd": 0.0001, - "type": "per_token", - "input": 5, - "cached_input": 1.25, - "image_input": 8, - "cached_image_input": 2, - "text_output": 10, - "output": 30 - } + ] } }, "constraints": { @@ -4709,9 +9566,32 @@ } ] }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-sunburst/endpoints" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/gpt-image-2.5-sunburst" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" + }, + "openai": { + "disposition": "listed", + "source_url": "https://developers.openai.com/api/docs/models/gpt-image-2.5-sunburst" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + } + }, "styles": null }, "recraft/recraft-v3": { + "reference_provider": "recraft", "id": "recraft/recraft-v3", "label": "Recraft V3", "short_description": "Design-grade image model with strong text rendering and vector styles.", @@ -4760,12 +9640,42 @@ }, "avg_cost_usd": 0.04, "url": "https://fal.ai/models/fal-ai/recraft/v3/text-to-image" + }, + "recraft": { + "provider": "recraft", + "id": "recraftv3", + "source_url": "https://www.recraft.ai/docs/api-reference/pricing", + "url": "https://www.recraft.ai/docs/api-reference/pricing", + "pricing": { + "type": "per_image_flat", + "usd": 0.04, + "source_url": "https://www.recraft.ai/docs/api-reference/pricing" + } + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/recraft/recraft-v3" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/recraft/v3/text-to-image" + }, + "recraft": { + "disposition": "listed", + "source_url": "https://www.recraft.ai/docs/api-reference/pricing" } }, "styles": null, "sizes": null }, "recraft/recraft-v4.1": { + "reference_provider": "recraft", "id": "recraft/recraft-v4.1", "label": "Recraft V4.1", "short_description": "Design-first image model — sharper prompt control and production-ready raster for brand and editorial work.", @@ -4855,12 +9765,79 @@ } } ] + }, + "recraft": { + "provider": "recraft", + "id": "recraftv4_1", + "source_url": "https://www.recraft.ai/docs/api-reference/pricing", + "url": "https://www.recraft.ai/docs/api-reference/pricing", + "pricing": { + "type": "per_image_flat", + "usd": 0.035, + "source_url": "https://www.recraft.ai/docs/api-reference/pricing" + } + }, + "grida": { + "provider": "grida", + "id": "recraft/recraft-v4.1", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "image.recraft.recraft-v4.1.text", + "operation": "image.recraft.recraft-v4.1.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.recraft.recraft-v4.1.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_1", + "interface": "images.generations", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.035" + } + ] + } + } + ] + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/recraft/recraft-v4.1" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/recraft/v4.1/text-to-image" + }, + "recraft": { + "disposition": "listed", + "source_url": "https://www.recraft.ai/docs/api-reference/pricing" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" } }, "styles": null, "sizes": null }, "xai/grok-imagine-image-2.0": { + "reference_provider": "xai", "id": "xai/grok-imagine-image-2.0", "label": "Grok Imagine Image 2.0", "short_description": "SpaceXAI's image model — fast 1K/2K generation with a low-cost quality tier.", @@ -5049,6 +10026,84 @@ } } ] + }, + "xai": { + "provider": "xai", + "id": "grok-imagine-image-2.0", + "source_url": "https://docs.x.ai/developers/models/grok-imagine-image-2.0", + "url": "https://docs.x.ai/developers/models/grok-imagine-image-2.0", + "pricing": { + "type": "per_image_tiered", + "tiers": { + "low/1k": 0.04, + "low/1.5k": 0.05, + "low/2k": 0.06, + "medium/1k": 0.06, + "medium/1.5k": 0.07, + "medium/2k": 0.08 + }, + "input_image_usd": 0.01, + "source_url": "https://docs.x.ai/developers/models/grok-imagine-image-2.0" + } + }, + "grida": { + "provider": "grida", + "id": "xai/grok-imagine-image-2.0", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "image.xai.grok-imagine-image-2.0.references", + "operation": "image.xai.grok-imagine-image-2.0.references", + "input": "multi_image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.xai.grok-imagine-image-2.0.references.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_4", + "interface": "images.edits", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.01" + } + ] + } + }, + { + "id": "image.xai.grok-imagine-image-2.0.text", + "operation": "image.xai.grok-imagine-image-2.0.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/image.xai.grok-imagine-image-2.0.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_4", + "interface": "images.generations", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.01" + } + ] + } + } + ] } }, "pricing": { @@ -5060,12 +10115,35 @@ "medium/2048x2048": 0.08 } }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/x-ai/grok-imagine-image-2.0" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/xai/grok-imagine-image/v2.0/text-to-image" + }, + "xai": { + "disposition": "listed", + "source_url": "https://docs.x.ai/developers/models/grok-imagine-image-2.0" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + } + }, "styles": null, "sizes": null } }, "video.models": { "alibaba/wan-3.0": { + "reference_provider": "alibaba", "id": "alibaba/wan-3.0", "label": "Wan 3.0", "short_description": "Alibaba's flagship video model — long clips (up to 30s) with bundled audio at the lowest per-second rates in the catalogue.", @@ -5239,10 +10317,185 @@ } } ] + }, + "alibaba": { + "provider": "alibaba", + "id": "wan3.0-video", + "source_url": "https://www.alibabacloud.com/help/en/model-studio/wan3-0-video", + "url": "https://www.alibabacloud.com/help/en/model-studio/wan3-0-video", + "pricing": { + "type": "per_second", + "region": "Singapore", + "deployment_scope": "International", + "usd_per_second": { + "480p": 0.05, + "720p": 0.1, + "1080p": 0.2 + }, + "source_url": "https://www.alibabacloud.com/help/en/model-studio/wan3-0-video" + } + }, + "openrouter": { + "provider": "openrouter", + "id": "alibaba/wan-3.0", + "source_url": "https://openrouter.ai/api/v1/videos/models", + "url": "https://openrouter.ai/api/v1/videos/models", + "pricing": { + "type": "provider_skus", + "skus": { + "duration_seconds_480p": "0.05", + "duration_seconds_720p": "0.1", + "duration_seconds_1080p": "0.2" + }, + "source_unit_notes": "duration_seconds: USD/second; video_tokens: USD/token; cents_per: cents per named unit", + "source_url": "https://openrouter.ai/api/v1/videos/models" + }, + "endpoints": [ + { + "id": "alibaba/wan-3.0", + "source_url": "https://openrouter.ai/api/v1/videos/models", + "parameters": { + "resolution": { + "enum": [ + "480p", + "720p", + "1080p" + ] + }, + "duration": { + "type": "integer", + "enum": [ + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30 + ] + }, + "aspect_ratio": { + "type": "string", + "enum": [ + "16:9", + "4:3", + "1:1", + "3:4", + "9:16" + ] + } + }, + "input": "text" + } + ] + }, + "grida": { + "provider": "grida", + "id": "alibaba/wan-3.0", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "video.alibaba.wan-3.0.image", + "operation": "video.alibaba.wan-3.0.image", + "input": "image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/video.alibaba.wan-3.0.image.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", + "interface": "videos", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.05" + } + ] + } + }, + { + "id": "video.alibaba.wan-3.0.text", + "operation": "video.alibaba.wan-3.0.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/video.alibaba.wan-3.0.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", + "interface": "videos", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.05" + } + ] + } + } + ] + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/api/v1/videos/models" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/wan-v3.0-video" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/alibaba/wan-3.0/image-to-video" + }, + "alibaba": { + "disposition": "listed", + "source_url": "https://www.alibabacloud.com/help/en/model-studio/wan3-0-video" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" } } }, "bytedance/seedance-2.0": { + "reference_provider": "byteplus", "id": "bytedance/seedance-2.0", "label": "Seedance 2.0", "short_description": "ByteDance's video model — image-to-video with reference modes, up to 4K, at roughly two-thirds the price of Seedance 2.5.", @@ -5410,40 +10663,249 @@ "prompt": { "type": "string" }, - "resolution": { + "resolution": { + "enum": [ + "480p", + "720p", + "1080p", + "4k" + ], + "type": "string" + } + } + } + ] + }, + "vercel": { + "provider": "vercel", + "id": "bytedance/seedance-2.0", + "source_url": "https://vercel.com/ai-gateway/models/seedance-2.0", + "url": "https://vercel.com/ai-gateway/models/seedance-2.0", + "pricing": { + "type": "video_token_tiers", + "tiers": [ + { + "resolution": "480p", + "no_video_input": { + "cost_per_million_tokens": "7" + }, + "with_video_input": { + "cost_per_million_tokens": "4.3" + } + }, + { + "resolution": "720p", + "no_video_input": { + "cost_per_million_tokens": "7" + }, + "with_video_input": { + "cost_per_million_tokens": "4.3" + } + }, + { + "resolution": "1080p", + "no_video_input": { + "cost_per_million_tokens": "7.7" + }, + "with_video_input": { + "cost_per_million_tokens": "4.7" + } + }, + { + "resolution": "4k", + "no_video_input": { + "cost_per_million_tokens": "4" + }, + "with_video_input": { + "cost_per_million_tokens": "2.4" + } + } + ], + "notes": "Pricing varies based on whether the input contains video. When video is included in the input, all tokens are billed at the reduced rate. Token count includes both input and output video and is subject to minimum token floors based on output duration.", + "source_url": "https://vercel.com/ai-gateway/models/seedance-2.0" + }, + "input": "text-or-image" + }, + "byteplus": { + "provider": "byteplus", + "id": "dreamina-seedance-2-0-260128", + "source_url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing", + "url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing", + "pricing": { + "type": "video_token_tiers", + "usd_per_million_tokens": { + "480p": { + "without_video_input": 7, + "with_video_input": 4.3 + }, + "720p": { + "without_video_input": 7, + "with_video_input": 4.3 + }, + "1080p": { + "without_video_input": 7.7, + "with_video_input": 4.7 + }, + "4k": { + "without_video_input": 4, + "with_video_input": 2.4 + } + }, + "billing_quantity": "usage.completion_tokens", + "source_url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" + } + }, + "openrouter": { + "provider": "openrouter", + "id": "bytedance/seedance-2.0", + "source_url": "https://openrouter.ai/api/v1/videos/models", + "url": "https://openrouter.ai/api/v1/videos/models", + "pricing": { + "type": "provider_skus", + "skus": { + "video_tokens": "0.000007", + "video_tokens_4k": "0.000004", + "video_tokens_1080p": "0.0000077", + "video_tokens_without_audio": "0.000007", + "video_tokens_with_video_input": "0.0000043", + "video_tokens_4k_with_video_input": "0.0000024", + "video_tokens_1080p_with_video_input": "0.0000047" + }, + "source_unit_notes": "duration_seconds: USD/second; video_tokens: USD/token; cents_per: cents per named unit", + "source_url": "https://openrouter.ai/api/v1/videos/models" + }, + "endpoints": [ + { + "id": "bytedance/seedance-2.0", + "source_url": "https://openrouter.ai/api/v1/videos/models", + "parameters": { + "resolution": { + "enum": [ + "480p", + "720p", + "1080p", + "4K" + ] + }, + "duration": { + "type": "integer", + "enum": [ + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ] + }, + "aspect_ratio": { + "type": "string", "enum": [ - "480p", - "720p", - "1080p", - "4k" - ], - "type": "string" + "1:1", + "3:4", + "9:16", + "4:3", + "16:9", + "21:9", + "9:21" + ] } - } + }, + "input": "text" } ] }, - "openrouter": { - "provider": "openrouter", + "grida": { + "provider": "grida", "id": "bytedance/seedance-2.0", - "input": "text-or-image", - "avg_cost_usd": 0.34, - "url": "https://openrouter.ai/bytedance/seedance-2.0", - "pricing": { - "type": "per_second", - "usd_per_second": { - "480p": { - "audio": 0.06726 - }, - "720p": { - "audio": 0.06726 + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "video.bytedance.seedance-2.0.image", + "operation": "video.bytedance.seedance-2.0.image", + "input": "image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/video.bytedance.seedance-2.0.image.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", + "interface": "videos", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.014" + } + ] + } + }, + { + "id": "video.bytedance.seedance-2.0.text", + "operation": "video.bytedance.seedance-2.0.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/video.bytedance.seedance-2.0.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", + "interface": "videos", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.014" + } + ] } } - } + ] + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/api/v1/videos/models" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/seedance-2.0" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/bytedance/seedance-2.0/image-to-video" + }, + "byteplus": { + "disposition": "listed", + "source_url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" } } }, "bytedance/seedance-2.5": { + "reference_provider": "byteplus", "id": "bytedance/seedance-2.5", "label": "Seedance 2.5", "short_description": "ByteDance's latest video model — up to 30-second clips with native audio, reference and editing modes.", @@ -5570,10 +11032,206 @@ } } ] + }, + "vercel": { + "provider": "vercel", + "id": "bytedance/seedance-2.5", + "source_url": "https://vercel.com/ai-gateway/models/seedance-2.5", + "url": "https://vercel.com/ai-gateway/models/seedance-2.5", + "pricing": { + "type": "video_token_tiers", + "tiers": [ + { + "resolution": "480p", + "no_video_input": { + "cost_per_million_tokens": "10.7" + }, + "with_video_input": { + "cost_per_million_tokens": "6.4" + } + }, + { + "resolution": "720p", + "no_video_input": { + "cost_per_million_tokens": "10.7" + }, + "with_video_input": { + "cost_per_million_tokens": "6.4" + } + }, + { + "resolution": "1080p", + "no_video_input": { + "cost_per_million_tokens": "11.7" + }, + "with_video_input": { + "cost_per_million_tokens": "7" + } + } + ], + "notes": "Pricing varies based on whether the input contains video. When video is included in the input, all tokens are billed at the reduced rate. Token count includes both input and output video and is subject to minimum token floors based on output duration.", + "source_url": "https://vercel.com/ai-gateway/models/seedance-2.5" + }, + "input": "text-or-image" + }, + "byteplus": { + "provider": "byteplus", + "id": "dreamina-seedance-2-5-260628", + "source_url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing", + "url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing", + "pricing": { + "type": "video_token_tiers", + "usd_per_million_tokens": { + "480p": { + "without_video_input": 10.7, + "with_video_input": 6.4 + }, + "720p": { + "without_video_input": 10.7, + "with_video_input": 6.4 + }, + "1080p": { + "without_video_input": 11.7, + "with_video_input": 7 + } + }, + "billing_quantity": "usage.completion_tokens", + "source_url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" + } + }, + "openrouter": { + "provider": "openrouter", + "id": "bytedance/seedance-2.5", + "source_url": "https://openrouter.ai/api/v1/videos/models", + "url": "https://openrouter.ai/api/v1/videos/models", + "pricing": { + "type": "provider_skus", + "skus": { + "video_tokens": "0.0000107", + "video_tokens_without_audio": "0.0000107", + "video_tokens_with_video_input": "0.0000064" + }, + "source_unit_notes": "duration_seconds: USD/second; video_tokens: USD/token; cents_per: cents per named unit", + "source_url": "https://openrouter.ai/api/v1/videos/models" + }, + "endpoints": [ + { + "id": "bytedance/seedance-2.5", + "source_url": "https://openrouter.ai/api/v1/videos/models", + "parameters": { + "resolution": { + "enum": [ + "480p", + "720p" + ] + }, + "duration": { + "type": "integer", + "enum": [ + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30 + ] + }, + "aspect_ratio": { + "type": "string", + "enum": [ + "16:9", + "4:3", + "1:1", + "3:4", + "9:16", + "21:9" + ] + } + }, + "input": "text" + } + ] + }, + "grida": { + "provider": "grida", + "id": "bytedance/seedance-2.5", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "video.bytedance.seedance-2.5.image", + "operation": "video.bytedance.seedance-2.5.image", + "input": "image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/video.bytedance.seedance-2.5.image.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", + "interface": "videos", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.0214" + } + ] + } + } + ] + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/api/v1/videos/models" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/seedance-2.5" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/bytedance/seedance-2.5/image-to-video" + }, + "byteplus": { + "disposition": "listed", + "source_url": "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" } } }, "google/veo-3.1": { + "reference_provider": "google", "id": "google/veo-3.1", "label": "Veo 3.1", "short_description": "Google's flagship video model — strong prompt adherence with native, synchronized audio.", @@ -5772,10 +11430,113 @@ } } } + }, + "google": { + "provider": "google", + "id": "veo-3.1-generate-preview", + "source_url": "https://ai.google.dev/gemini-api/docs/pricing", + "url": "https://ai.google.dev/gemini-api/docs/pricing", + "pricing": { + "type": "per_second", + "usd_per_second": { + "720p": { + "audio": 0.4 + }, + "1080p": { + "audio": 0.4 + }, + "4k": { + "audio": 0.6 + } + }, + "source_url": "https://ai.google.dev/gemini-api/docs/pricing" + } + }, + "grida": { + "provider": "grida", + "id": "google/veo-3.1", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "video.google.veo-3.1.image", + "operation": "video.google.veo-3.1.image", + "input": "image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/video.google.veo-3.1.image.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", + "interface": "videos", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.4" + } + ] + } + }, + { + "id": "video.google.veo-3.1.text", + "operation": "video.google.veo-3.1.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/video.google.veo-3.1.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", + "interface": "videos", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.4" + } + ] + } + } + ] + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/google/veo-3.1" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/veo-3.1-generate-001" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/veo3.1/image-to-video" + }, + "google": { + "disposition": "listed", + "source_url": "https://ai.google.dev/gemini-api/docs/pricing" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" } } }, "google/veo-3.1-fast": { + "reference_provider": "google", "id": "google/veo-3.1-fast", "label": "Veo 3.1 Fast", "short_description": "Faster, cheaper Veo 3.1 — the same envelope and native audio at a fraction of the price.", @@ -5956,10 +11717,163 @@ } } ] + }, + "google": { + "provider": "google", + "id": "veo-3.1-fast-generate-preview", + "source_url": "https://ai.google.dev/gemini-api/docs/pricing", + "url": "https://ai.google.dev/gemini-api/docs/pricing", + "pricing": { + "type": "per_second", + "usd_per_second": { + "720p": { + "audio": 0.1 + }, + "1080p": { + "audio": 0.12 + }, + "4k": { + "audio": 0.3 + } + }, + "source_url": "https://ai.google.dev/gemini-api/docs/pricing" + } + }, + "openrouter": { + "provider": "openrouter", + "id": "google/veo-3.1-fast", + "source_url": "https://openrouter.ai/api/v1/videos/models", + "url": "https://openrouter.ai/api/v1/videos/models", + "pricing": { + "type": "provider_skus", + "skus": { + "duration_seconds_with_audio": "0.12", + "duration_seconds_with_audio_4k": "0.30", + "duration_seconds_without_audio": "0.10", + "duration_seconds_with_audio_720p": "0.10", + "duration_seconds_without_audio_4k": "0.25", + "duration_seconds_without_audio_720p": "0.08" + }, + "source_unit_notes": "duration_seconds: USD/second; video_tokens: USD/token; cents_per: cents per named unit", + "source_url": "https://openrouter.ai/api/v1/videos/models" + }, + "endpoints": [ + { + "id": "google/veo-3.1-fast", + "source_url": "https://openrouter.ai/api/v1/videos/models", + "parameters": { + "resolution": { + "enum": [ + "720p", + "1080p", + "4K" + ] + }, + "duration": { + "type": "integer", + "enum": [ + 4, + 6, + 8 + ] + }, + "aspect_ratio": { + "type": "string", + "enum": [ + "16:9", + "9:16" + ] + } + }, + "input": "text" + } + ] + }, + "grida": { + "provider": "grida", + "id": "google/veo-3.1-fast", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "video.google.veo-3.1-fast.image", + "operation": "video.google.veo-3.1-fast.image", + "input": "image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/video.google.veo-3.1-fast.image.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", + "interface": "videos", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.15" + } + ] + } + }, + { + "id": "video.google.veo-3.1-fast.text", + "operation": "video.google.veo-3.1-fast.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/video.google.veo-3.1-fast.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", + "interface": "videos", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.15" + } + ] + } + } + ] + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/api/v1/videos/models" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/veo-3.1-fast-generate-001" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/veo3.1/fast/image-to-video" + }, + "google": { + "disposition": "listed", + "source_url": "https://ai.google.dev/gemini-api/docs/pricing" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" } } }, "google/veo-3.1-lite": { + "reference_provider": "google", "id": "google/veo-3.1-lite", "label": "Veo 3.1 Lite", "short_description": "Budget Veo 3.1 — 720p/1080p clips with native audio for a few cents a second.", @@ -6124,16 +12038,163 @@ ], "type": "string" }, - "seed": { - "type": "integer" + "seed": { + "type": "integer" + } + } + } + ] + }, + "google": { + "provider": "google", + "id": "veo-3.1-lite-generate-preview", + "source_url": "https://ai.google.dev/gemini-api/docs/pricing", + "url": "https://ai.google.dev/gemini-api/docs/pricing", + "pricing": { + "type": "per_second", + "usd_per_second": { + "720p": { + "audio": 0.05 + }, + "1080p": { + "audio": 0.08 + } + }, + "source_url": "https://ai.google.dev/gemini-api/docs/pricing" + } + }, + "openrouter": { + "provider": "openrouter", + "id": "google/veo-3.1-lite", + "source_url": "https://openrouter.ai/api/v1/videos/models", + "url": "https://openrouter.ai/api/v1/videos/models", + "pricing": { + "type": "provider_skus", + "skus": { + "duration_seconds_with_audio": "0.08", + "duration_seconds_without_audio": "0.05", + "duration_seconds_with_audio_720p": "0.05", + "duration_seconds_without_audio_720p": "0.03" + }, + "source_unit_notes": "duration_seconds: USD/second; video_tokens: USD/token; cents_per: cents per named unit", + "source_url": "https://openrouter.ai/api/v1/videos/models" + }, + "endpoints": [ + { + "id": "google/veo-3.1-lite", + "source_url": "https://openrouter.ai/api/v1/videos/models", + "parameters": { + "resolution": { + "enum": [ + "720p", + "1080p" + ] + }, + "duration": { + "type": "integer", + "enum": [ + 8, + 4, + 6 + ] + }, + "aspect_ratio": { + "type": "string", + "enum": [ + "16:9", + "9:16" + ] } + }, + "input": "text" + } + ] + }, + "grida": { + "provider": "grida", + "id": "google/veo-3.1-lite", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "video.google.veo-3.1-lite.image", + "operation": "video.google.veo-3.1-lite.image", + "input": "image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/video.google.veo-3.1-lite.image.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", + "interface": "videos", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.05" + } + ] + } + }, + { + "id": "video.google.veo-3.1-lite.text", + "operation": "video.google.veo-3.1-lite.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/video.google.veo-3.1-lite.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", + "interface": "videos", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.05" + } + ] } } ] } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/api/v1/videos/models" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/veo-3.1-lite-generate-001" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/veo3.1/lite/image-to-video" + }, + "google": { + "disposition": "listed", + "source_url": "https://ai.google.dev/gemini-api/docs/pricing" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" + } } }, "xai/grok-imagine-video-1.5": { + "reference_provider": "xai", "id": "xai/grok-imagine-video-1.5", "label": "Grok Imagine Video 1.5", "short_description": "SpaceXAI's image-to-video model — animates a still into cinematic video with native, lip-synced audio.", @@ -6228,12 +12289,149 @@ } } ] + }, + "xai": { + "provider": "xai", + "id": "grok-imagine-video-1.5", + "source_url": "https://docs.x.ai/developers/models/grok-imagine-video-1.5", + "url": "https://docs.x.ai/developers/models/grok-imagine-video-1.5", + "pricing": { + "type": "per_second", + "usd_per_second": { + "480p": 0.08, + "720p": 0.14, + "1080p": 0.25 + }, + "input_image_usd": 0.01, + "source_url": "https://docs.x.ai/developers/models/grok-imagine-video-1.5" + } + }, + "openrouter": { + "provider": "openrouter", + "id": "x-ai/grok-imagine-video-1.5", + "source_url": "https://openrouter.ai/api/v1/videos/models", + "url": "https://openrouter.ai/api/v1/videos/models", + "pricing": { + "type": "provider_skus", + "skus": { + "cents_per_image_input": "1", + "cents_per_video_output_second_480p": "8", + "cents_per_video_output_second_720p": "14", + "cents_per_video_output_second_1080p": "25" + }, + "source_unit_notes": "duration_seconds: USD/second; video_tokens: USD/token; cents_per: cents per named unit", + "source_url": "https://openrouter.ai/api/v1/videos/models" + }, + "endpoints": [ + { + "id": "x-ai/grok-imagine-video-1.5", + "source_url": "https://openrouter.ai/api/v1/videos/models", + "parameters": { + "resolution": { + "enum": [ + "480p", + "720p", + "1080p" + ] + }, + "duration": { + "type": "integer", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ] + }, + "aspect_ratio": { + "type": "string", + "enum": [ + "16:9", + "9:16", + "1:1", + "4:3", + "3:4", + "3:2", + "2:3" + ] + } + }, + "input": "text" + } + ] + }, + "grida": { + "provider": "grida", + "id": "xai/grok-imagine-video-1.5", + "url": "https://gateway.grida.ai/v1/models", + "endpoints": [ + { + "id": "video.xai.grok-imagine-video-1.5.image", + "operation": "video.xai.grok-imagine-video-1.5.image", + "input": "image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/video.xai.grok-imagine-video-1.5.image.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", + "interface": "videos", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/models", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.01" + } + ] + } + } + ] + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/api/v1/videos/models" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/grok-imagine-video-1.5" + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/xai/grok-imagine-video/v1.5/image-to-video" + }, + "xai": { + "disposition": "listed", + "source_url": "https://docs.x.ai/developers/models/grok-imagine-video-1.5" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/models" } } } }, "audio.music.models": { "google/lyria-3": { + "reference_provider": "google", "id": "google/lyria-3", "label": "Lyria 3", "short_description": "Generate 30-second 48kHz stereo music clips from text or images.", @@ -6273,9 +12471,64 @@ "mode": "fixed", "seconds": 30 } + }, + "providers": { + "google": { + "provider": "google", + "id": "lyria-3-clip-preview", + "source_url": "https://ai.google.dev/gemini-api/docs/pricing", + "url": "https://ai.google.dev/gemini-api/docs/pricing", + "pricing": { + "type": "per_run_flat", + "usd": 0.04, + "source_url": "https://ai.google.dev/gemini-api/docs/pricing" + } + }, + "fal": { + "provider": "fal", + "id": "fal-ai/lyria3", + "source_url": "https://fal.ai/models/fal-ai/lyria3", + "url": "https://fal.ai/models/fal-ai/lyria3", + "pricing": { + "type": "per_run_flat", + "usd": 0.04, + "source_url": "https://fal.ai/models/fal-ai/lyria3" + } + }, + "openrouter": { + "provider": "openrouter", + "id": "google/lyria-3-clip-preview", + "source_url": "https://openrouter.ai/google/lyria-3-clip-preview", + "url": "https://openrouter.ai/google/lyria-3-clip-preview", + "pricing": { + "type": "per_run_flat", + "usd": 0.04, + "source_url": "https://openrouter.ai/google/lyria-3-clip-preview" + } + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/google/lyria-3-clip-preview" + }, + "vercel": { + "disposition": "not_listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "reason": "No matching model/version is listed in the inspected public Gateway model catalogue." + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/lyria3" + }, + "google": { + "disposition": "listed", + "source_url": "https://ai.google.dev/gemini-api/docs/pricing" + } } }, "google/lyria-3-pro": { + "reference_provider": "google", "id": "google/lyria-3-pro", "label": "Lyria 3 Pro", "short_description": "Generate full-length tracks up to ~3 minutes from text or images.", @@ -6315,11 +12568,66 @@ "mode": "up_to", "max_seconds": 180 } + }, + "providers": { + "google": { + "provider": "google", + "id": "lyria-3-pro-preview", + "source_url": "https://ai.google.dev/gemini-api/docs/pricing", + "url": "https://ai.google.dev/gemini-api/docs/pricing", + "pricing": { + "type": "per_run_flat", + "usd": 0.08, + "source_url": "https://ai.google.dev/gemini-api/docs/pricing" + } + }, + "fal": { + "provider": "fal", + "id": "fal-ai/lyria3/pro", + "source_url": "https://fal.ai/models/fal-ai/lyria3/pro", + "url": "https://fal.ai/models/fal-ai/lyria3/pro", + "pricing": { + "type": "per_run_flat", + "usd": 0.08, + "source_url": "https://fal.ai/models/fal-ai/lyria3/pro" + } + }, + "openrouter": { + "provider": "openrouter", + "id": "google/lyria-3-pro-preview", + "source_url": "https://openrouter.ai/google/lyria-3-pro-preview", + "url": "https://openrouter.ai/google/lyria-3-pro-preview", + "pricing": { + "type": "per_run_flat", + "usd": 0.08, + "source_url": "https://openrouter.ai/google/lyria-3-pro-preview" + } + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/google/lyria-3-pro-preview" + }, + "vercel": { + "disposition": "not_listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "reason": "No matching model/version is listed in the inspected public Gateway model catalogue." + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/lyria3/pro" + }, + "google": { + "disposition": "listed", + "source_url": "https://ai.google.dev/gemini-api/docs/pricing" + } } } }, "audio.sound_effects.models": { "eleven_text_to_sound_v2": { + "reference_provider": "elevenlabs", "id": "eleven_text_to_sound_v2", "label": "Eleven Text to Sound v2", "short_description": "Generate loopable sound effects up to 30 seconds from text.", @@ -6354,11 +12662,45 @@ "automatic_duration_credits": 100, "specified_duration_credits_per_second": 11 }, + "providers": { + "fal": { + "provider": "fal", + "id": "fal-ai/elevenlabs/sound-effects/v2", + "source_url": "https://fal.ai/models/fal-ai/elevenlabs/sound-effects/v2", + "url": "https://fal.ai/models/fal-ai/elevenlabs/sound-effects/v2", + "pricing": { + "type": "per_second", + "usd": 0.002, + "source_url": "https://fal.ai/models/fal-ai/elevenlabs/sound-effects/v2" + } + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "not_listed", + "source_url": "https://openrouter.ai/api/v1/models", + "reason": "No matching model/version is listed in the inspected public model catalogue." + }, + "vercel": { + "disposition": "not_listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "reason": "No matching model/version is listed in the inspected public Gateway model catalogue." + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/elevenlabs/sound-effects/v2" + }, + "elevenlabs": { + "disposition": "listed", + "source_url": "https://elevenlabs.io/docs/api-reference/text-to-sound-effects/convert" + } + }, "avg_cost_usd": null } }, "audio.text_to_speech.models": { "eleven_v3": { + "reference_provider": "elevenlabs", "id": "eleven_v3", "label": "Eleven v3", "short_description": "Generate expressive speech with bracketed audio and emotion tags.", @@ -6388,11 +12730,45 @@ ], "sample_rate_hz": 44100, "bit_rate_kbps": 128 + }, + "providers": { + "fal": { + "provider": "fal", + "id": "fal-ai/elevenlabs/tts/eleven-v3", + "source_url": "https://fal.ai/models/fal-ai/elevenlabs/tts/eleven-v3", + "url": "https://fal.ai/models/fal-ai/elevenlabs/tts/eleven-v3", + "pricing": { + "type": "per_1000_characters", + "usd": 0.1, + "source_url": "https://fal.ai/models/fal-ai/elevenlabs/tts/eleven-v3" + } + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "not_listed", + "source_url": "https://openrouter.ai/api/v1/models", + "reason": "No matching model/version is listed in the inspected public model catalogue." + }, + "vercel": { + "disposition": "not_listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "reason": "No matching model/version is listed in the inspected public Gateway model catalogue." + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/elevenlabs/tts/eleven-v3" + }, + "elevenlabs": { + "disposition": "listed", + "source_url": "https://elevenlabs.io/docs/api-reference/text-to-speech/convert" + } } } }, "three_d.models": { "fal-ai/hunyuan-3d/v3.1/pro/image-to-3d": { + "reference_provider": "tencent", "id": "fal-ai/hunyuan-3d/v3.1/pro/image-to-3d", "label": "Hunyuan 3D v3.1 Pro — Image", "short_description": "Generate a textured 3D asset from one image or up to eight views.", @@ -6475,9 +12851,102 @@ } } } - ] + ], + "provider_coverage": { + "openrouter": { + "disposition": "not_listed", + "source_url": "https://openrouter.ai/api/v1/models", + "reason": "No matching model/version is listed in the inspected public model catalogue." + }, + "vercel": { + "disposition": "not_listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "reason": "No matching model/version is listed in the inspected public Gateway model catalogue." + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/hunyuan-3d/v3.1/pro/image-to-3d" + }, + "tencent": { + "disposition": "listed", + "source_url": "https://www.tencentcloud.com/document/api/1284/75540" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/endpoints" + } + }, + "providers": { + "tencent": { + "provider": "tencent", + "id": "SubmitHunyuanTo3DProJob", + "source_url": "https://www.tencentcloud.com/document/api/1284/75540", + "url": "https://www.tencentcloud.com/document/api/1284/75540", + "endpoints": [ + { + "id": "SubmitHunyuanTo3DProJob", + "source_url": "https://www.tencentcloud.com/document/api/1284/75540", + "parameters": { + "Model": { + "type": "string", + "enum": [ + "3.1" + ] + }, + "Version": { + "type": "string", + "enum": [ + "2023-09-01" + ] + } + }, + "input": "image" + } + ], + "qualifications": [ + { + "source_url": "https://www.tencentcloud.com/document/api/1284/75540", + "notes": "The native API supports version 3.1. Its regular USD price is not established by this API reference; no reseller price is substituted." + } + ] + }, + "grida": { + "provider": "grida", + "id": "fal-ai/hunyuan-3d/v3.1/pro/image-to-3d", + "url": "https://gateway.grida.ai/v1/endpoints", + "endpoints": [ + { + "id": "three-d.fal-ai.hunyuan-3d.v3.1.pro.image-to-3d.image", + "operation": "three-d.fal-ai.hunyuan-3d.v3.1.pro.image-to-3d.image", + "input": "image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.fal-ai.hunyuan-3d.v3.1.pro.image-to-3d.image.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", + "interface": "endpoints", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/endpoints", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.015" + } + ] + } + } + ] + } + } }, "fal-ai/hunyuan-3d/v3.1/pro/text-to-3d": { + "reference_provider": "tencent", "id": "fal-ai/hunyuan-3d/v3.1/pro/text-to-3d", "label": "Hunyuan 3D v3.1 Pro — Text", "short_description": "Generate a textured 3D asset from a text prompt.", @@ -6538,7 +13007,99 @@ } } } - ] + ], + "provider_coverage": { + "openrouter": { + "disposition": "not_listed", + "source_url": "https://openrouter.ai/api/v1/models", + "reason": "No matching model/version is listed in the inspected public model catalogue." + }, + "vercel": { + "disposition": "not_listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "reason": "No matching model/version is listed in the inspected public Gateway model catalogue." + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/hunyuan-3d/v3.1/pro/text-to-3d" + }, + "tencent": { + "disposition": "listed", + "source_url": "https://www.tencentcloud.com/document/api/1284/75540" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/endpoints" + } + }, + "providers": { + "tencent": { + "provider": "tencent", + "id": "SubmitHunyuanTo3DProJob", + "source_url": "https://www.tencentcloud.com/document/api/1284/75540", + "url": "https://www.tencentcloud.com/document/api/1284/75540", + "endpoints": [ + { + "id": "SubmitHunyuanTo3DProJob", + "source_url": "https://www.tencentcloud.com/document/api/1284/75540", + "parameters": { + "Model": { + "type": "string", + "enum": [ + "3.1" + ] + }, + "Version": { + "type": "string", + "enum": [ + "2023-09-01" + ] + } + }, + "input": "text" + } + ], + "qualifications": [ + { + "source_url": "https://www.tencentcloud.com/document/api/1284/75540", + "notes": "The native API supports version 3.1. Its regular USD price is not established by this API reference; no reseller price is substituted." + } + ] + }, + "grida": { + "provider": "grida", + "id": "fal-ai/hunyuan-3d/v3.1/pro/text-to-3d", + "url": "https://gateway.grida.ai/v1/endpoints", + "endpoints": [ + { + "id": "three-d.fal-ai.hunyuan-3d.v3.1.pro.text-to-3d.text", + "operation": "three-d.fal-ai.hunyuan-3d.v3.1.pro.text-to-3d.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.fal-ai.hunyuan-3d.v3.1.pro.text-to-3d.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", + "interface": "endpoints", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/endpoints", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.015" + } + ] + } + } + ] + } + } }, "fal-ai/trellis-2": { "id": "fal-ai/trellis-2", @@ -6563,6 +13124,27 @@ "basis": "model", "source_url": "https://huggingface.co/microsoft/TRELLIS.2-4B" }, + "distribution": { + "source_url": "https://github.com/microsoft/TRELLIS.2", + "code": { + "repository_url": "https://github.com/microsoft/TRELLIS.2", + "license": { + "name": "MIT", + "url": "https://github.com/microsoft/TRELLIS.2/blob/main/LICENSE" + } + }, + "weights": [ + { + "id": "microsoft/TRELLIS.2-4B", + "url": "https://huggingface.co/microsoft/TRELLIS.2-4B", + "access": "public", + "license": { + "name": "MIT", + "url": "https://huggingface.co/microsoft/TRELLIS.2-4B" + } + } + ] + }, "pricing": { "type": "per_generation_by_resolution", "default_resolution": "1024", @@ -6728,13 +13310,74 @@ "maximum": 10, "minimum": 0 } - } + } + } + ], + "provider_coverage": { + "openrouter": { + "disposition": "not_listed", + "source_url": "https://openrouter.ai/api/v1/models", + "reason": "No matching model/version is listed in the inspected public model catalogue." + }, + "vercel": { + "disposition": "not_listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "reason": "No matching model/version is listed in the inspected public Gateway model catalogue." + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/trellis-2" + }, + "microsoft": { + "disposition": "not_listed", + "source_url": "https://github.com/microsoft/TRELLIS.2", + "reason": "The official release distributes code and weights; it does not document a Microsoft-hosted inference API for this model." + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/endpoints" + } + }, + "providers": { + "grida": { + "provider": "grida", + "id": "fal-ai/trellis-2", + "url": "https://gateway.grida.ai/v1/endpoints", + "endpoints": [ + { + "id": "three-d.fal-ai.trellis-2.image", + "operation": "three-d.fal-ai.trellis-2.image", + "input": "image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.fal-ai.trellis-2.image.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", + "interface": "endpoints", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/endpoints", + "currency": "USD", + "components": [ + { + "id": "fal_output_units", + "meter": "fal_output_units", + "unit": "provider_unit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.05" + } + ] + } + } + ] } - ] + } } }, "three_d.model_generation.models": { "tripo/h3.1": { + "reference_provider": "tripo", "id": "tripo/h3.1", "vendor": "tripo", "provider": "tripo", @@ -7055,9 +13698,160 @@ } } } - ] + ], + "providers": { + "fal": { + "provider": "fal", + "id": "tripo3d/h3.1/text-to-3d", + "source_url": "https://fal.ai/models/tripo3d/h3.1/text-to-3d", + "url": "https://fal.ai/models/tripo3d/h3.1/text-to-3d", + "pricing": { + "type": "per_generation_credits", + "usd_per_credit": 0.01, + "base_credits": { + "text": 10, + "image": 20, + "multiview": 20 + }, + "texture_credits": { + "standard": 10, + "detailed": 20 + }, + "detailed_geometry_credits": 20, + "quad_credits": 5, + "source_url": "https://fal.ai/models/tripo3d/h3.1/text-to-3d" + }, + "endpoints": [ + { + "id": "tripo3d/h3.1/text-to-3d", + "source_url": "https://fal.ai/models/tripo3d/h3.1/text-to-3d/api", + "input": "text" + }, + { + "id": "tripo3d/h3.1/image-to-3d", + "source_url": "https://fal.ai/models/tripo3d/h3.1/image-to-3d/api", + "input": "image" + }, + { + "id": "tripo3d/h3.1/multiview-to-3d", + "source_url": "https://fal.ai/models/tripo3d/h3.1/multiview-to-3d/api", + "input": "image" + } + ] + }, + "grida": { + "provider": "grida", + "id": "tripo/h3.1", + "url": "https://gateway.grida.ai/v1/endpoints", + "endpoints": [ + { + "id": "three-d.tripo.h3.1.image", + "operation": "three-d.tripo.h3.1.image", + "input": "image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.h3.1.image.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", + "interface": "endpoints", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/endpoints", + "currency": "USD", + "components": [ + { + "id": "provider_credits", + "meter": "provider_credits", + "unit": "provider_credit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.01" + } + ] + } + }, + { + "id": "three-d.tripo.h3.1.multiview", + "operation": "three-d.tripo.h3.1.multiview", + "input": "multi_image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.h3.1.multiview.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", + "interface": "endpoints", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/endpoints", + "currency": "USD", + "components": [ + { + "id": "provider_credits", + "meter": "provider_credits", + "unit": "provider_credit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.01" + } + ] + } + }, + { + "id": "three-d.tripo.h3.1.text", + "operation": "three-d.tripo.h3.1.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.h3.1.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", + "interface": "endpoints", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/endpoints", + "currency": "USD", + "components": [ + { + "id": "provider_credits", + "meter": "provider_credits", + "unit": "provider_credit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.01" + } + ] + } + } + ] + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "not_listed", + "source_url": "https://openrouter.ai/api/v1/models", + "reason": "No matching model/version is listed in the inspected public model catalogue." + }, + "vercel": { + "disposition": "not_listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "reason": "No matching model/version is listed in the inspected public Gateway model catalogue." + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/tripo3d/h3.1/text-to-3d" + }, + "tripo": { + "disposition": "listed", + "source_url": "https://developers.tripo3d.ai/en/docs/generation-text-to-model/standard" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/endpoints" + } + } }, "tripo/p1": { + "reference_provider": "tripo", "id": "tripo/p1", "vendor": "tripo", "provider": "tripo", @@ -7309,9 +14103,134 @@ } } } - ] + ], + "providers": { + "fal": { + "provider": "fal", + "id": "tripo3d/p1/text-to-3d", + "source_url": "https://fal.ai/models/tripo3d/p1/text-to-3d", + "url": "https://fal.ai/models/tripo3d/p1/text-to-3d", + "pricing": { + "type": "per_generation_credits", + "usd_per_credit": 0.01, + "base_credits": 40, + "texture_credits": 10, + "source_url": "https://fal.ai/models/tripo3d/p1/text-to-3d" + } + }, + "grida": { + "provider": "grida", + "id": "tripo/p1", + "url": "https://gateway.grida.ai/v1/endpoints", + "endpoints": [ + { + "id": "three-d.tripo.p1.image", + "operation": "three-d.tripo.p1.image", + "input": "image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.p1.image.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", + "interface": "endpoints", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/endpoints", + "currency": "USD", + "components": [ + { + "id": "provider_credits", + "meter": "provider_credits", + "unit": "provider_credit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.01" + } + ] + } + }, + { + "id": "three-d.tripo.p1.multiview", + "operation": "three-d.tripo.p1.multiview", + "input": "multi_image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.p1.multiview.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", + "interface": "endpoints", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/endpoints", + "currency": "USD", + "components": [ + { + "id": "provider_credits", + "meter": "provider_credits", + "unit": "provider_credit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.01" + } + ] + } + }, + { + "id": "three-d.tripo.p1.text", + "operation": "three-d.tripo.p1.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.p1.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", + "interface": "endpoints", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/endpoints", + "currency": "USD", + "components": [ + { + "id": "provider_credits", + "meter": "provider_credits", + "unit": "provider_credit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.01" + } + ] + } + } + ] + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "not_listed", + "source_url": "https://openrouter.ai/api/v1/models", + "reason": "No matching model/version is listed in the inspected public model catalogue." + }, + "vercel": { + "disposition": "not_listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "reason": "No matching model/version is listed in the inspected public Gateway model catalogue." + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/tripo3d/p1/text-to-3d" + }, + "tripo": { + "disposition": "listed", + "source_url": "https://developers.tripo3d.ai/en/docs/generation-text-to-model/p" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/endpoints" + } + } }, "tripo/p2": { + "reference_provider": "tripo", "id": "tripo/p2", "vendor": "tripo", "provider": "tripo", @@ -7572,11 +14491,147 @@ } } } - ] + ], + "providers": { + "fal": { + "provider": "fal", + "id": "tripo3d/p2/text-to-3d", + "url": "https://fal.ai/models/tripo3d/p2/text-to-3d", + "source_url": "https://fal.ai/models/tripo3d/p2/text-to-3d/api", + "qualifications": [ + { + "source_url": "https://fal.ai/models/tripo3d/p2/text-to-3d", + "notes": "The public endpoint documentation verifies P2 submission. No regular USD rate is published on the inspected endpoint page; direct-provider pricing is not substituted." + } + ], + "endpoints": [ + { + "id": "tripo3d/p2/text-to-3d", + "source_url": "https://fal.ai/models/tripo3d/p2/text-to-3d/api", + "input": "text" + }, + { + "id": "tripo3d/p2/image-to-3d", + "source_url": "https://fal.ai/models/tripo3d/p2/image-to-3d/api", + "input": "image" + } + ] + }, + "grida": { + "provider": "grida", + "id": "tripo/p2", + "url": "https://gateway.grida.ai/v1/endpoints", + "endpoints": [ + { + "id": "three-d.tripo.p2.image", + "operation": "three-d.tripo.p2.image", + "input": "image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.p2.image.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", + "interface": "endpoints", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/endpoints", + "currency": "USD", + "components": [ + { + "id": "provider_credits", + "meter": "provider_credits", + "unit": "provider_credit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.01" + } + ] + } + }, + { + "id": "three-d.tripo.p2.multiview", + "operation": "three-d.tripo.p2.multiview", + "input": "multi_image", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.p2.multiview.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", + "interface": "endpoints", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/endpoints", + "currency": "USD", + "components": [ + { + "id": "provider_credits", + "meter": "provider_credits", + "unit": "provider_credit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.01" + } + ] + } + }, + { + "id": "three-d.tripo.p2.text", + "operation": "three-d.tripo.p2.text", + "input": "text", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.p2.text.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", + "interface": "endpoints", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/endpoints", + "currency": "USD", + "components": [ + { + "id": "provider_credits", + "meter": "provider_credits", + "unit": "provider_credit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.01" + } + ] + } + } + ] + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "not_listed", + "source_url": "https://openrouter.ai/api/v1/models", + "reason": "No matching model/version is listed in the inspected public model catalogue." + }, + "vercel": { + "disposition": "not_listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "reason": "No matching model/version is listed in the inspected public Gateway model catalogue." + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/tripo3d/p2/text-to-3d/api" + }, + "tripo": { + "disposition": "listed", + "source_url": "https://developers.tripo3d.ai/en/docs/generation-text-to-model/p" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/endpoints" + } + } } }, "three_d.rigging.models": { "tripo/rig-v1.0": { + "reference_provider": "tripo", "id": "tripo/rig-v1.0", "vendor": "tripo", "provider": "tripo", @@ -7656,9 +14711,70 @@ } } } - ] + ], + "provider_coverage": { + "openrouter": { + "disposition": "not_listed", + "source_url": "https://openrouter.ai/api/v1/models", + "reason": "No matching model/version is listed in the inspected public model catalogue." + }, + "vercel": { + "disposition": "not_listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "reason": "No matching model/version is listed in the inspected public Gateway model catalogue." + }, + "fal": { + "disposition": "not_listed", + "source_url": "https://fal.ai/models", + "reason": "No matching model/version is listed in the inspected public media catalogue." + }, + "tripo": { + "disposition": "listed", + "source_url": "https://developers.tripo3d.ai/en/docs/animations-rig" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/endpoints" + } + }, + "providers": { + "grida": { + "provider": "grida", + "id": "tripo/rig-v1.0", + "url": "https://gateway.grida.ai/v1/endpoints", + "endpoints": [ + { + "id": "three-d.tripo.rig-v1.0.mesh", + "operation": "three-d.tripo.rig-v1.0.mesh", + "input": "asset", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.rig-v1.0.mesh.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", + "interface": "endpoints", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/endpoints", + "currency": "USD", + "components": [ + { + "id": "provider_credits", + "meter": "provider_credits", + "unit": "provider_credit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.01" + } + ] + } + } + ] + } + } }, "tripo/rig-v2.5": { + "reference_provider": "tripo", "id": "tripo/rig-v2.5", "vendor": "tripo", "provider": "tripo", @@ -7748,10 +14864,71 @@ } } } - ] + ], + "provider_coverage": { + "openrouter": { + "disposition": "not_listed", + "source_url": "https://openrouter.ai/api/v1/models", + "reason": "No matching model/version is listed in the inspected public model catalogue." + }, + "vercel": { + "disposition": "not_listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "reason": "No matching model/version is listed in the inspected public Gateway model catalogue." + }, + "fal": { + "disposition": "not_listed", + "source_url": "https://fal.ai/models", + "reason": "No matching model/version is listed in the inspected public media catalogue." + }, + "tripo": { + "disposition": "listed", + "source_url": "https://developers.tripo3d.ai/en/docs/animations-rig" + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/endpoints" + } + }, + "providers": { + "grida": { + "provider": "grida", + "id": "tripo/rig-v2.5", + "url": "https://gateway.grida.ai/v1/endpoints", + "endpoints": [ + { + "id": "three-d.tripo.rig-v2.5.mesh", + "operation": "three-d.tripo.rig-v2.5.mesh", + "input": "asset", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.rig-v2.5.mesh.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", + "interface": "endpoints", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/endpoints", + "currency": "USD", + "components": [ + { + "id": "provider_credits", + "meter": "provider_credits", + "unit": "provider_credit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.01" + } + ] + } + } + ] + } + } } }, "three_d.rig_check.operation": { + "reference_provider": "tripo", "feature": "rig-check", "provider": "tripo", "binding_id": "rig-check", @@ -7795,7 +14972,67 @@ } } } - ] + ], + "provider_coverage": { + "tripo": { + "disposition": "listed", + "source_url": "https://developers.tripo3d.ai/en/docs/animations-rig-check" + }, + "openrouter": { + "disposition": "not_listed", + "source_url": "https://openrouter.ai/api/v1/models", + "reason": "No rig-check operation is listed in the inspected public model catalogue." + }, + "vercel": { + "disposition": "not_listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "reason": "No rig-check operation is listed in the inspected public Gateway catalogue." + }, + "fal": { + "disposition": "not_listed", + "source_url": "https://fal.ai/models", + "reason": "No matching Tripo rig-check operation is listed in the inspected public media catalogue." + }, + "grida": { + "disposition": "listed", + "source_url": "https://gateway.grida.ai/v1/endpoints" + } + }, + "providers": { + "grida": { + "provider": "grida", + "id": "three-d.tripo.rig-check", + "url": "https://gateway.grida.ai/v1/endpoints", + "endpoints": [ + { + "id": "three-d.tripo.rig-check", + "operation": "three-d.tripo.rig-check", + "input": "asset", + "source_url": "https://gateway.grida.ai/schemas/operations.json", + "request_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.rig-check.input", + "result_schema_url": "https://gateway.grida.ai/schemas/operations.json#/$defs/rig_check_result", + "interface": "endpoints", + "published_pricing": { + "source_url": "https://gateway.grida.ai/v1/endpoints", + "currency": "USD", + "components": [ + { + "id": "provider_credits", + "meter": "provider_credits", + "unit": "provider_credit", + "per_quantity": "1", + "when": {}, + "quantity_rounding": { + "mode": "none" + }, + "usd_per_unit": "0.01" + } + ] + } + } + ] + } + } }, "image_tools.models": { "851-labs/background-remover": { @@ -7808,9 +15045,27 @@ "basis": "provider_endpoint", "source_url": "https://replicate.com/851-labs/background-remover/versions", "date": null + }, + "provider_coverage": { + "openrouter": { + "disposition": "not_listed", + "source_url": "https://openrouter.ai/api/v1/models", + "reason": "No matching model/version is listed in the inspected public model catalogue." + }, + "vercel": { + "disposition": "not_listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "reason": "No matching model/version is listed in the inspected public Gateway model catalogue." + }, + "fal": { + "disposition": "not_listed", + "source_url": "https://fal.ai/models", + "reason": "This card identifies a specific hosted implementation; no identical implementation/version was verified in the public media catalogue." + } } }, "bria/remove-background": { + "reference_provider": "bria", "id": "bria/remove-background", "label": "Bria Remove Background", "url": "https://replicate.com/bria/remove-background", @@ -7820,6 +15075,54 @@ "date": "2024-11-12", "basis": "model", "source_url": "https://bria.ai/blog/brias-new-state-of-the-art-remove-background-outperforms-the-competition" + }, + "providers": { + "fal": { + "provider": "fal", + "id": "fal-ai/bria/background/remove", + "source_url": "https://fal.ai/models/fal-ai/bria/background/remove", + "url": "https://fal.ai/models/fal-ai/bria/background/remove", + "pricing": { + "type": "per_image_tiered", + "tiers": { + "without_prompt": 0.018, + "with_prompt": 0.03 + }, + "source_url": "https://fal.ai/models/fal-ai/bria/background/remove" + } + }, + "bria": { + "provider": "bria", + "id": "/v2/image/edit/remove_background", + "source_url": "https://docs.bria.ai/image-editing/editing/background-remove", + "url": "https://docs.bria.ai/image-editing/editing/background-remove", + "qualifications": [ + { + "source_url": "https://docs.bria.ai/image-editing/editing/background-remove", + "notes": "Native background-removal endpoint verified. The API documentation does not establish a regular USD price or pin the current hosted checkpoint; neither is inferred from reseller listings." + } + ] + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "not_listed", + "source_url": "https://openrouter.ai/api/v1/models", + "reason": "No matching model/version is listed in the inspected public model catalogue." + }, + "vercel": { + "disposition": "not_listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "reason": "No matching model/version is listed in the inspected public Gateway model catalogue." + }, + "fal": { + "disposition": "listed", + "source_url": "https://fal.ai/models/fal-ai/bria/background/remove" + }, + "bria": { + "disposition": "listed", + "source_url": "https://docs.bria.ai/image-editing/editing/background-remove" + } } }, "nightmareai/real-esrgan": { @@ -7832,9 +15135,33 @@ "date": "2021-07-22", "basis": "model", "source_url": "https://github.com/xinntao/Real-ESRGAN/releases/tag/v0.1.0" + }, + "provider_coverage": { + "openrouter": { + "disposition": "not_listed", + "source_url": "https://openrouter.ai/api/v1/models", + "reason": "No matching model/version is listed in the inspected public model catalogue." + }, + "vercel": { + "disposition": "not_listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "reason": "No matching model/version is listed in the inspected public Gateway model catalogue." + }, + "fal": { + "disposition": "not_listed", + "source_url": "https://fal.ai/models", + "reason": "This card identifies a specific hosted implementation; no identical implementation/version was verified in the public media catalogue." + } + }, + "distribution": { + "source_url": "https://github.com/xinntao/Real-ESRGAN", + "code": { + "repository_url": "https://github.com/xinntao/Real-ESRGAN" + } } }, "recraft-ai/recraft-remove-background": { + "reference_provider": "recraft", "id": "recraft-ai/recraft-remove-background", "label": "Recraft Remove Background", "url": "https://replicate.com/recraft-ai/recraft-remove-background", @@ -7844,11 +15171,54 @@ "basis": "provider_endpoint", "source_url": "https://replicate.com/recraft-ai/recraft-remove-background/versions", "date": null + }, + "providers": { + "recraft": { + "provider": "recraft", + "id": "/v1/images/removeBackground", + "source_url": "https://www.recraft.ai/docs/api-reference/tools/remove-background", + "url": "https://www.recraft.ai/docs/api-reference/tools/remove-background", + "pricing": { + "type": "per_run_flat", + "usd": 0.01, + "source_url": "https://www.recraft.ai/docs/api-reference/tools/remove-background" + } + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "not_listed", + "source_url": "https://openrouter.ai/api/v1/models", + "reason": "No matching model/version is listed in the inspected public model catalogue." + }, + "vercel": { + "disposition": "not_listed", + "source_url": "https://ai-gateway.vercel.sh/v1/models", + "reason": "No matching model/version is listed in the inspected public Gateway model catalogue." + }, + "fal": { + "disposition": "not_listed", + "source_url": "https://fal.ai/models", + "reason": "No matching model/version is listed in the inspected public media catalogue." + }, + "recraft": { + "disposition": "listed", + "source_url": "https://www.recraft.ai/docs/api-reference/tools/remove-background" + } } } }, "embedding.models": { "google/gemini-embedding-2": { + "pricing": { + "type": "per_token_input", + "input": 0.2, + "image_input": 0.45, + "audio_input": 6.5, + "video_input": 12, + "source_url": "https://ai.google.dev/gemini-api/docs/pricing" + }, + "reference_provider": "google", "id": "google/gemini-embedding-2", "label": "Gemini Embedding 2", "deprecated": false, @@ -7858,16 +15228,72 @@ "dimensions": 1536, "normalized": true, "multimodal": true, - "pricing": { - "type": "per_token_input", - "input": 0.15 - }, "avg_cost_usd": 2e-05, "url": "https://ai.google.dev/gemini-api/docs/models/gemini-embedding-2-preview", "release": { "date": "2026-03-10", "basis": "model", "source_url": "https://ai.google.dev/gemini-api/docs/changelog" + }, + "providers": { + "google": { + "provider": "google", + "id": "gemini-embedding-2", + "source_url": "https://ai.google.dev/gemini-api/docs/pricing", + "url": "https://ai.google.dev/gemini-api/docs/pricing", + "pricing": { + "type": "per_token_input", + "input": 0.2, + "image_input": 0.45, + "audio_input": 6.5, + "video_input": 12, + "source_url": "https://ai.google.dev/gemini-api/docs/pricing" + } + }, + "vercel": { + "provider": "vercel", + "id": "google/gemini-embedding-2", + "source_url": "https://vercel.com/ai-gateway/models/gemini-embedding-2", + "url": "https://vercel.com/ai-gateway/models/gemini-embedding-2", + "pricing": { + "type": "per_token_input", + "input": 0.2, + "audio_input": 6.5, + "source_url": "https://vercel.com/ai-gateway/models/gemini-embedding-2" + } + }, + "openrouter": { + "provider": "openrouter", + "id": "google/gemini-embedding-2", + "source_url": "https://openrouter.ai/api/v1/embeddings/models", + "url": "https://openrouter.ai/api/v1/embeddings/models", + "pricing": { + "type": "per_token_input", + "input": 0.2, + "image_input": 0.45, + "audio_input": 6.5, + "source_url": "https://openrouter.ai/api/v1/embeddings/models" + } + } + }, + "provider_coverage": { + "openrouter": { + "disposition": "listed", + "source_url": "https://openrouter.ai/api/v1/embeddings/models" + }, + "vercel": { + "disposition": "listed", + "source_url": "https://vercel.com/ai-gateway/models/gemini-embedding-2" + }, + "fal": { + "disposition": "excluded", + "source_url": "https://fal.ai/models", + "reason": "Embedding models are outside this catalogue's fal media-provider coverage." + }, + "google": { + "disposition": "listed", + "source_url": "https://ai.google.dev/gemini-api/docs/pricing" + } } } } diff --git a/models/851-labs/background-remover/card.toml b/models/851-labs/background-remover/card.toml index cd57217..56c5553 100644 --- a/models/851-labs/background-remover/card.toml +++ b/models/851-labs/background-remover/card.toml @@ -10,3 +10,8 @@ cost_usd = 0.00048 [release] basis = "provider_endpoint" source_url = "https://replicate.com/851-labs/background-remover/versions" + +[provider_coverage] +openrouter = { "disposition" = "not_listed", "source_url" = "https://openrouter.ai/api/v1/models", "reason" = "No matching model/version is listed in the inspected public model catalogue." } +vercel = { "disposition" = "not_listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models", "reason" = "No matching model/version is listed in the inspected public Gateway model catalogue." } +fal = { "disposition" = "not_listed", "source_url" = "https://fal.ai/models", "reason" = "This card identifies a specific hosted implementation; no identical implementation/version was verified in the public media catalogue." } diff --git a/models/alibaba/wan-3.0/card.toml b/models/alibaba/wan-3.0/card.toml index 1146c6b..6771e4d 100644 --- a/models/alibaba/wan-3.0/card.toml +++ b/models/alibaba/wan-3.0/card.toml @@ -1,3 +1,4 @@ +reference_provider = "alibaba" id = "alibaba/wan-3.0" section = "video.models" @@ -78,3 +79,83 @@ source_url = "https://fal.ai/models/alibaba/wan-3.0/text-to-video/api" "prompt" = { "max_length" = 20000, "min_length" = 1, "type" = "string" } "resolution" = { "enum" = ["480p", "720p", "1080p"], "type" = "string" } "seed" = { "maximum" = 2147483647, "minimum" = 0, "type" = "integer" } + +[providers.alibaba] +provider = "alibaba" +id = "wan3.0-video" +source_url = "https://www.alibabacloud.com/help/en/model-studio/wan3-0-video" +url = "https://www.alibabacloud.com/help/en/model-studio/wan3-0-video" +pricing = { "type" = "per_second", "region" = "Singapore", "deployment_scope" = "International", "usd_per_second" = { "480p" = 0.05, "720p" = 0.1, "1080p" = 0.2 }, "source_url" = "https://www.alibabacloud.com/help/en/model-studio/wan3-0-video" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/api/v1/videos/models" } +vercel = { "disposition" = "listed", "source_url" = "https://vercel.com/ai-gateway/models/wan-v3.0-video" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/alibaba/wan-3.0/image-to-video" } +alibaba = { "disposition" = "listed", "source_url" = "https://www.alibabacloud.com/help/en/model-studio/wan3-0-video" } + +[providers.openrouter] +provider = "openrouter" +id = "alibaba/wan-3.0" +source_url = "https://openrouter.ai/api/v1/videos/models" +url = "https://openrouter.ai/api/v1/videos/models" +pricing = { "type" = "provider_skus", "skus" = { "duration_seconds_480p" = "0.05", "duration_seconds_720p" = "0.1", "duration_seconds_1080p" = "0.2" }, "source_unit_notes" = "duration_seconds: USD/second; video_tokens: USD/token; cents_per: cents per named unit", "source_url" = "https://openrouter.ai/api/v1/videos/models" } +endpoints = [ + { "id" = "alibaba/wan-3.0", "source_url" = "https://openrouter.ai/api/v1/videos/models", "parameters" = { "resolution" = { "enum" = [ + "480p", + "720p", + "1080p", + ] }, "duration" = { "type" = "integer", "enum" = [ + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + ] }, "aspect_ratio" = { "type" = "string", "enum" = [ + "16:9", + "4:3", + "1:1", + "3:4", + "9:16", + ] } }, "input" = "text" }, +] + +[providers.grida] +provider = "grida" +id = "alibaba/wan-3.0" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "video.alibaba.wan-3.0.image", "operation" = "video.alibaba.wan-3.0.image", "input" = "image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/video.alibaba.wan-3.0.image.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", "interface" = "videos", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.05" }, + ] } }, + { "id" = "video.alibaba.wan-3.0.text", "operation" = "video.alibaba.wan-3.0.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/video.alibaba.wan-3.0.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", "interface" = "videos", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.05" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" diff --git a/models/anthropic/claude-fable-5.1/card.toml b/models/anthropic/claude-fable-5.1/card.toml index 6cf8293..6fe8e96 100644 --- a/models/anthropic/claude-fable-5.1/card.toml +++ b/models/anthropic/claude-fable-5.1/card.toml @@ -1,6 +1,7 @@ id = "anthropic/claude-fable-5.1" section = "text.catalog" vendor = "anthropic" +reference_provider = "anthropic" label = "Claude Fable 5.1" short_label = "Fable 5.1" @@ -25,8 +26,9 @@ endpoints = [ ] [providers.vercel.token_pricing] -source_url = "https://ai-gateway.vercel.sh/v1/models" +source_url = "https://vercel.com/ai-gateway/models/claude-fable-5.1" unit = "usd_per_token" +scope = "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration." input = "0.00001" output = "0.00005" input_cache_read = "0.00000025" @@ -49,3 +51,98 @@ source_url = "https://platform.claude.com/docs/en/build-with-claude/vision" patch_size_px = 28 maximum_tokens_per_image = 4784 detail_maximum_edges = { "default" = 2576 } + +[providers.anthropic] +provider = "anthropic" +id = "claude-fable-5-1" +url = "https://platform.claude.com/docs/en/models/fable-5-1/overview" +source_url = "https://platform.claude.com/docs/en/models/fable-5-1/overview" +endpoints = [ + { id = "claude-fable-5-1", input = "text", source_url = "https://platform.claude.com/docs/en/models/fable-5-1/overview" }, +] + +[providers.anthropic.token_pricing] +source_url = "https://platform.claude.com/docs/en/models/fable-5-1/overview" +unit = "usd_per_token" +scope = "Standard global synchronous service; input_cache_write is the 5-minute cache write, input_cache_write_1h is the 1-hour cache write. Batch, fast mode and regional premiums are excluded." +input = "0.00001" +output = "0.00005" +input_cache_write = "0.0000125" +input_cache_write_1h = "0.00002" +input_cache_read = "0.00000025" + +[providers.anthropic.capabilities] +source_url = "https://platform.claude.com/docs/en/models/fable-5-1/overview" +image_input = true +reasoning = true + +[providers.anthropic.limits] +source_url = "https://platform.claude.com/docs/en/models/fable-5-1/overview" +context_tokens = 1000000 +max_output_tokens = 128000 + +[providers.openrouter] +provider = "openrouter" +id = "anthropic/claude-fable-5.1" +url = "https://openrouter.ai/anthropic/claude-fable-5.1" +source_url = "https://openrouter.ai/anthropic/claude-fable-5.1" +endpoints = [ + { id = "anthropic/claude-fable-5.1", input = "text", source_url = "https://openrouter.ai/api/v1/models" }, +] + +[providers.openrouter.token_pricing] +source_url = "https://openrouter.ai/anthropic/claude-fable-5.1" +unit = "usd_per_token" +scope = "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. input_cache_write is the 5-minute cache write; input_cache_write_1h is the 1-hour cache write." +input = "0.00001" +output = "0.00005" +input_cache_read = "0.00000025" +input_cache_write = "0.0000125" +input_cache_write_1h = "0.00002" + +[providers.openrouter.capabilities] +source_url = "https://openrouter.ai/api/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.openrouter.limits] +source_url = "https://openrouter.ai/api/v1/models" +context_tokens = 1000000 +max_output_tokens = 128000 + +[provider_coverage.anthropic] +disposition = "listed" +source_url = "https://platform.claude.com/docs/en/models/fable-5-1/overview" + +[provider_coverage.vercel] +disposition = "listed" +source_url = "https://vercel.com/ai-gateway/models/claude-fable-5.1" + +[provider_coverage.openrouter] +disposition = "listed" +source_url = "https://openrouter.ai/anthropic/claude-fable-5.1" + +[providers.grida] +provider = "grida" +id = "anthropic/claude-fable-5.1" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "anthropic/claude-fable-5.1", "input" = "text", "source_url" = "https://gateway.grida.ai/v1/models", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "input_tokens", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.00001" }, + { "id" = "cached_input_tokens", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.00000025" }, + { "id" = "output_tokens", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.00005" }, + ] } }, +] +capabilities = { "source_url" = "https://gateway.grida.ai/v1/models", "image_input" = true, "tools" = true, "reasoning" = true, "structured_output" = true } +limits = { "source_url" = "https://gateway.grida.ai/v1/models", "context_tokens" = 1000000, "max_output_tokens" = 128000 } + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" + +[provider_coverage.fal] +disposition = "excluded" +source_url = "https://fal.ai/models" +reason = "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." diff --git a/models/anthropic/claude-fable-5/card.toml b/models/anthropic/claude-fable-5/card.toml index eb5de54..79e141b 100644 --- a/models/anthropic/claude-fable-5/card.toml +++ b/models/anthropic/claude-fable-5/card.toml @@ -1,6 +1,7 @@ id = "anthropic/claude-fable-5" section = "text.catalog" vendor = "anthropic" +reference_provider = "anthropic" label = "Claude Fable 5" short_label = "Fable 5" @@ -25,8 +26,9 @@ endpoints = [ ] [providers.vercel.token_pricing] -source_url = "https://ai-gateway.vercel.sh/v1/models" +source_url = "https://vercel.com/ai-gateway/models/claude-fable-5" unit = "usd_per_token" +scope = "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration." input = "0.00001" output = "0.00005" input_cache_read = "0.000001" @@ -49,3 +51,98 @@ source_url = "https://platform.claude.com/docs/en/build-with-claude/vision" patch_size_px = 28 maximum_tokens_per_image = 4784 detail_maximum_edges = { "default" = 2576 } + +[providers.anthropic] +provider = "anthropic" +id = "claude-fable-5" +url = "https://platform.claude.com/docs/en/models/fable-5/overview" +source_url = "https://platform.claude.com/docs/en/models/fable-5/overview" +endpoints = [ + { id = "claude-fable-5", input = "text", source_url = "https://platform.claude.com/docs/en/models/fable-5/overview" }, +] + +[providers.anthropic.token_pricing] +source_url = "https://platform.claude.com/docs/en/models/fable-5/overview" +unit = "usd_per_token" +scope = "Standard global synchronous service; input_cache_write is the 5-minute cache write, input_cache_write_1h is the 1-hour cache write. Batch, fast mode and regional premiums are excluded." +input = "0.00001" +output = "0.00005" +input_cache_write = "0.0000125" +input_cache_write_1h = "0.00002" +input_cache_read = "0.000001" + +[providers.anthropic.capabilities] +source_url = "https://platform.claude.com/docs/en/models/fable-5/overview" +image_input = true +reasoning = true + +[providers.anthropic.limits] +source_url = "https://platform.claude.com/docs/en/models/fable-5/overview" +context_tokens = 1000000 +max_output_tokens = 128000 + +[providers.openrouter] +provider = "openrouter" +id = "anthropic/claude-fable-5" +url = "https://openrouter.ai/anthropic/claude-fable-5" +source_url = "https://openrouter.ai/anthropic/claude-fable-5" +endpoints = [ + { id = "anthropic/claude-fable-5", input = "text", source_url = "https://openrouter.ai/api/v1/models" }, +] + +[providers.openrouter.token_pricing] +source_url = "https://openrouter.ai/anthropic/claude-fable-5" +unit = "usd_per_token" +scope = "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. input_cache_write is the 5-minute cache write; input_cache_write_1h is the 1-hour cache write." +input = "0.00001" +output = "0.00005" +input_cache_read = "0.000001" +input_cache_write = "0.0000125" +input_cache_write_1h = "0.00002" + +[providers.openrouter.capabilities] +source_url = "https://openrouter.ai/api/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.openrouter.limits] +source_url = "https://openrouter.ai/api/v1/models" +context_tokens = 1000000 +max_output_tokens = 128000 + +[provider_coverage.anthropic] +disposition = "listed" +source_url = "https://platform.claude.com/docs/en/models/fable-5/overview" + +[provider_coverage.vercel] +disposition = "listed" +source_url = "https://vercel.com/ai-gateway/models/claude-fable-5" + +[provider_coverage.openrouter] +disposition = "listed" +source_url = "https://openrouter.ai/anthropic/claude-fable-5" + +[providers.grida] +provider = "grida" +id = "anthropic/claude-fable-5" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "anthropic/claude-fable-5", "input" = "text", "source_url" = "https://gateway.grida.ai/v1/models", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "input_tokens", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.00001" }, + { "id" = "cached_input_tokens", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.000001" }, + { "id" = "output_tokens", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.00005" }, + ] } }, +] +capabilities = { "source_url" = "https://gateway.grida.ai/v1/models", "image_input" = true, "tools" = true, "reasoning" = true, "structured_output" = true } +limits = { "source_url" = "https://gateway.grida.ai/v1/models", "context_tokens" = 1000000, "max_output_tokens" = 128000 } + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" + +[provider_coverage.fal] +disposition = "excluded" +source_url = "https://fal.ai/models" +reason = "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." diff --git a/models/anthropic/claude-haiku-5.5/card.toml b/models/anthropic/claude-haiku-5.5/card.toml index 72c88dc..bfb535d 100644 --- a/models/anthropic/claude-haiku-5.5/card.toml +++ b/models/anthropic/claude-haiku-5.5/card.toml @@ -1,6 +1,7 @@ id = "anthropic/claude-haiku-5.5" section = "text.catalog" vendor = "anthropic" +reference_provider = "anthropic" label = "Claude Haiku 5.5" short_label = "Haiku 5.5" @@ -37,8 +38,9 @@ endpoints = [ ] [providers.vercel.token_pricing] -source_url = "https://ai-gateway.vercel.sh/v1/models" +source_url = "https://vercel.com/ai-gateway/models/claude-haiku-5.5" unit = "usd_per_token" +scope = "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration." input = "0.0000001" output = "0.0000005" input_cache_read = "0.00000001" @@ -71,3 +73,104 @@ source_url = "https://platform.claude.com/docs/en/build-with-claude/vision" patch_size_px = 28 maximum_tokens_per_image = 4784 detail_maximum_edges = { "default" = 2576 } + +[providers.anthropic] +provider = "anthropic" +id = "claude-haiku-5-5" +url = "https://platform.claude.com/docs/en/models/haiku-5-5/overview" +source_url = "https://platform.claude.com/docs/en/models/haiku-5-5/overview" +endpoints = [ + { id = "claude-haiku-5-5", input = "text", source_url = "https://platform.claude.com/docs/en/models/haiku-5-5/overview" }, +] + +[providers.anthropic.token_pricing] +source_url = "https://platform.claude.com/docs/en/models/haiku-5-5/overview" +unit = "usd_per_token" +scope = "Standard global synchronous service; input_cache_write is the 5-minute cache write, input_cache_write_1h is the 1-hour cache write. Batch, fast mode and regional premiums are excluded." +input = "0.0000001" +output = "0.0000005" +input_cache_write = "0.000000125" +input_cache_write_1h = "0.0000002" +input_cache_read = "0.00000001" +tiers = [ + { meter = "input", minimum_input_tokens = 0, maximum_input_tokens = 100001, usd_per_token = "0.0000001" }, + { meter = "input", minimum_input_tokens = 100001, usd_per_token = "0.0000005" }, + { meter = "output", minimum_input_tokens = 0, maximum_input_tokens = 100001, usd_per_token = "0.0000005" }, + { meter = "output", minimum_input_tokens = 100001, usd_per_token = "0.0000025" }, + { meter = "input_cache_write", minimum_input_tokens = 0, maximum_input_tokens = 100001, usd_per_token = "0.000000125" }, + { meter = "input_cache_write", minimum_input_tokens = 100001, usd_per_token = "0.000000625" }, + { meter = "input_cache_write_1h", minimum_input_tokens = 0, maximum_input_tokens = 100001, usd_per_token = "0.0000002" }, + { meter = "input_cache_write_1h", minimum_input_tokens = 100001, usd_per_token = "0.0000010" }, + { meter = "input_cache_read", minimum_input_tokens = 0, maximum_input_tokens = 100001, usd_per_token = "0.00000001" }, + { meter = "input_cache_read", minimum_input_tokens = 100001, usd_per_token = "0.00000005" }, +] + +[providers.anthropic.capabilities] +source_url = "https://platform.claude.com/docs/en/models/haiku-5-5/overview" +image_input = true +reasoning = true + +[providers.anthropic.limits] +source_url = "https://platform.claude.com/docs/en/models/haiku-5-5/overview" +context_tokens = 1000000 +max_output_tokens = 128000 + +[providers.openrouter] +provider = "openrouter" +id = "anthropic/claude-haiku-5.5" +url = "https://openrouter.ai/anthropic/claude-haiku-5.5" +source_url = "https://openrouter.ai/anthropic/claude-haiku-5.5" +endpoints = [ + { id = "anthropic/claude-haiku-5.5", input = "text", source_url = "https://openrouter.ai/api/v1/models" }, +] + +[providers.openrouter.token_pricing] +source_url = "https://openrouter.ai/anthropic/claude-haiku-5.5" +unit = "usd_per_token" +scope = "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. input_cache_write is the 5-minute cache write; input_cache_write_1h is the 1-hour cache write." +input = "0.0000001" +output = "0.0000005" +input_cache_read = "0.00000001" +input_cache_write = "0.000000125" +input_cache_write_1h = "0.0000002" +tiers = [ + { meter = "input", minimum_input_tokens = 0, maximum_input_tokens = 100000, usd_per_token = "0.0000001" }, + { meter = "input", minimum_input_tokens = 100000, usd_per_token = "0.0000005" }, + { meter = "output", minimum_input_tokens = 0, maximum_input_tokens = 100000, usd_per_token = "0.0000005" }, + { meter = "output", minimum_input_tokens = 100000, usd_per_token = "0.0000025" }, + { meter = "input_cache_read", minimum_input_tokens = 0, maximum_input_tokens = 100000, usd_per_token = "0.00000001" }, + { meter = "input_cache_read", minimum_input_tokens = 100000, usd_per_token = "0.00000005" }, + { meter = "input_cache_write", minimum_input_tokens = 0, maximum_input_tokens = 100000, usd_per_token = "0.000000125" }, + { meter = "input_cache_write", minimum_input_tokens = 100000, usd_per_token = "0.000000625" }, + { meter = "input_cache_write_1h", minimum_input_tokens = 0, maximum_input_tokens = 100000, usd_per_token = "0.0000002" }, + { meter = "input_cache_write_1h", minimum_input_tokens = 100000, usd_per_token = "0.000001" }, +] + +[providers.openrouter.capabilities] +source_url = "https://openrouter.ai/api/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.openrouter.limits] +source_url = "https://openrouter.ai/api/v1/models" +context_tokens = 1000000 +max_output_tokens = 128000 + +[provider_coverage.anthropic] +disposition = "listed" +source_url = "https://platform.claude.com/docs/en/models/haiku-5-5/overview" + +[provider_coverage.vercel] +disposition = "listed" +source_url = "https://vercel.com/ai-gateway/models/claude-haiku-5.5" + +[provider_coverage.openrouter] +disposition = "listed" +source_url = "https://openrouter.ai/anthropic/claude-haiku-5.5" + +[provider_coverage.fal] +disposition = "excluded" +source_url = "https://fal.ai/models" +reason = "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." diff --git a/models/anthropic/claude-opus-4.8/card.toml b/models/anthropic/claude-opus-4.8/card.toml index e062f0f..403b89b 100644 --- a/models/anthropic/claude-opus-4.8/card.toml +++ b/models/anthropic/claude-opus-4.8/card.toml @@ -1,6 +1,7 @@ id = "anthropic/claude-opus-4.8" section = "text.catalog" vendor = "anthropic" +reference_provider = "anthropic" label = "Claude Opus 4.8" short_label = "Opus 4.8" @@ -25,8 +26,9 @@ endpoints = [ ] [providers.vercel.token_pricing] -source_url = "https://ai-gateway.vercel.sh/v1/models" +source_url = "https://vercel.com/ai-gateway/models/claude-opus-4.8" unit = "usd_per_token" +scope = "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration." input = "0.000005" output = "0.000025" input_cache_read = "0.0000005" @@ -49,3 +51,98 @@ source_url = "https://platform.claude.com/docs/en/build-with-claude/vision" patch_size_px = 28 maximum_tokens_per_image = 4784 detail_maximum_edges = { "default" = 2576 } + +[providers.anthropic] +provider = "anthropic" +id = "claude-opus-4-8" +url = "https://platform.claude.com/docs/en/models/opus-4-8/overview" +source_url = "https://platform.claude.com/docs/en/models/opus-4-8/overview" +endpoints = [ + { id = "claude-opus-4-8", input = "text", source_url = "https://platform.claude.com/docs/en/models/opus-4-8/overview" }, +] + +[providers.anthropic.token_pricing] +source_url = "https://platform.claude.com/docs/en/models/opus-4-8/overview" +unit = "usd_per_token" +scope = "Standard global synchronous service; input_cache_write is the 5-minute cache write, input_cache_write_1h is the 1-hour cache write. Batch, fast mode and regional premiums are excluded." +input = "0.000005" +output = "0.000025" +input_cache_write = "0.00000625" +input_cache_write_1h = "0.00001" +input_cache_read = "0.0000005" + +[providers.anthropic.capabilities] +source_url = "https://platform.claude.com/docs/en/models/opus-4-8/overview" +image_input = true +reasoning = true + +[providers.anthropic.limits] +source_url = "https://platform.claude.com/docs/en/models/opus-4-8/overview" +context_tokens = 1000000 +max_output_tokens = 128000 + +[providers.openrouter] +provider = "openrouter" +id = "anthropic/claude-opus-4.8" +url = "https://openrouter.ai/anthropic/claude-opus-4.8" +source_url = "https://openrouter.ai/anthropic/claude-opus-4.8" +endpoints = [ + { id = "anthropic/claude-opus-4.8", input = "text", source_url = "https://openrouter.ai/api/v1/models" }, +] + +[providers.openrouter.token_pricing] +source_url = "https://openrouter.ai/anthropic/claude-opus-4.8" +unit = "usd_per_token" +scope = "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. input_cache_write is the 5-minute cache write; input_cache_write_1h is the 1-hour cache write." +input = "0.000005" +output = "0.000025" +input_cache_read = "0.0000005" +input_cache_write = "0.00000625" +input_cache_write_1h = "0.00001" + +[providers.openrouter.capabilities] +source_url = "https://openrouter.ai/api/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.openrouter.limits] +source_url = "https://openrouter.ai/api/v1/models" +context_tokens = 1000000 +max_output_tokens = 128000 + +[provider_coverage.anthropic] +disposition = "listed" +source_url = "https://platform.claude.com/docs/en/models/opus-4-8/overview" + +[provider_coverage.vercel] +disposition = "listed" +source_url = "https://vercel.com/ai-gateway/models/claude-opus-4.8" + +[provider_coverage.openrouter] +disposition = "listed" +source_url = "https://openrouter.ai/anthropic/claude-opus-4.8" + +[providers.grida] +provider = "grida" +id = "anthropic/claude-opus-4.8" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "anthropic/claude-opus-4.8", "input" = "text", "source_url" = "https://gateway.grida.ai/v1/models", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "input_tokens", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.000005" }, + { "id" = "cached_input_tokens", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.0000005" }, + { "id" = "output_tokens", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.000025" }, + ] } }, +] +capabilities = { "source_url" = "https://gateway.grida.ai/v1/models", "image_input" = true, "tools" = true, "reasoning" = true, "structured_output" = true } +limits = { "source_url" = "https://gateway.grida.ai/v1/models", "context_tokens" = 1000000, "max_output_tokens" = 128000 } + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" + +[provider_coverage.fal] +disposition = "excluded" +source_url = "https://fal.ai/models" +reason = "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." diff --git a/models/anthropic/claude-opus-5.5/card.toml b/models/anthropic/claude-opus-5.5/card.toml index ebad1ef..776c1e6 100644 --- a/models/anthropic/claude-opus-5.5/card.toml +++ b/models/anthropic/claude-opus-5.5/card.toml @@ -1,6 +1,7 @@ id = "anthropic/claude-opus-5.5" section = "text.catalog" vendor = "anthropic" +reference_provider = "anthropic" label = "Claude Opus 5.5" short_label = "Opus 5.5" @@ -25,8 +26,9 @@ endpoints = [ ] [providers.vercel.token_pricing] -source_url = "https://ai-gateway.vercel.sh/v1/models" +source_url = "https://vercel.com/ai-gateway/models/claude-opus-5.5" unit = "usd_per_token" +scope = "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration." input = "0.000004" output = "0.00002" input_cache_read = "0.0000002" @@ -49,3 +51,80 @@ source_url = "https://platform.claude.com/docs/en/build-with-claude/vision" patch_size_px = 28 maximum_tokens_per_image = 4784 detail_maximum_edges = { "default" = 2576 } + +[providers.anthropic] +provider = "anthropic" +id = "claude-opus-5-5" +url = "https://platform.claude.com/docs/en/models/opus-5-5/overview" +source_url = "https://platform.claude.com/docs/en/models/opus-5-5/overview" +endpoints = [ + { id = "claude-opus-5-5", input = "text", source_url = "https://platform.claude.com/docs/en/models/opus-5-5/overview" }, +] + +[providers.anthropic.token_pricing] +source_url = "https://platform.claude.com/docs/en/models/opus-5-5/overview" +unit = "usd_per_token" +scope = "Standard global synchronous service; input_cache_write is the 5-minute cache write, input_cache_write_1h is the 1-hour cache write. Batch, fast mode and regional premiums are excluded." +input = "0.000004" +output = "0.00002" +input_cache_write = "0.000005" +input_cache_write_1h = "0.000008" +input_cache_read = "0.0000002" + +[providers.anthropic.capabilities] +source_url = "https://platform.claude.com/docs/en/models/opus-5-5/overview" +image_input = true +reasoning = true + +[providers.anthropic.limits] +source_url = "https://platform.claude.com/docs/en/models/opus-5-5/overview" +context_tokens = 1000000 +max_output_tokens = 128000 + +[providers.openrouter] +provider = "openrouter" +id = "anthropic/claude-opus-5.5" +url = "https://openrouter.ai/anthropic/claude-opus-5.5" +source_url = "https://openrouter.ai/anthropic/claude-opus-5.5" +endpoints = [ + { id = "anthropic/claude-opus-5.5", input = "text", source_url = "https://openrouter.ai/api/v1/models" }, +] + +[providers.openrouter.token_pricing] +source_url = "https://openrouter.ai/anthropic/claude-opus-5.5" +unit = "usd_per_token" +scope = "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. input_cache_write is the 5-minute cache write; input_cache_write_1h is the 1-hour cache write." +input = "0.000004" +output = "0.00002" +input_cache_read = "0.0000002" +input_cache_write = "0.000005" +input_cache_write_1h = "0.000008" + +[providers.openrouter.capabilities] +source_url = "https://openrouter.ai/api/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.openrouter.limits] +source_url = "https://openrouter.ai/api/v1/models" +context_tokens = 1000000 +max_output_tokens = 128000 + +[provider_coverage.anthropic] +disposition = "listed" +source_url = "https://platform.claude.com/docs/en/models/opus-5-5/overview" + +[provider_coverage.vercel] +disposition = "listed" +source_url = "https://vercel.com/ai-gateway/models/claude-opus-5.5" + +[provider_coverage.openrouter] +disposition = "listed" +source_url = "https://openrouter.ai/anthropic/claude-opus-5.5" + +[provider_coverage.fal] +disposition = "excluded" +source_url = "https://fal.ai/models" +reason = "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." diff --git a/models/anthropic/claude-opus-5/card.toml b/models/anthropic/claude-opus-5/card.toml index 66197a3..6cd9d6c 100644 --- a/models/anthropic/claude-opus-5/card.toml +++ b/models/anthropic/claude-opus-5/card.toml @@ -1,6 +1,7 @@ id = "anthropic/claude-opus-5" section = "text.catalog" vendor = "anthropic" +reference_provider = "anthropic" label = "Claude Opus 5" short_label = "Opus 5" @@ -25,8 +26,9 @@ endpoints = [ ] [providers.vercel.token_pricing] -source_url = "https://ai-gateway.vercel.sh/v1/models" +source_url = "https://vercel.com/ai-gateway/models/claude-opus-5" unit = "usd_per_token" +scope = "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration." input = "0.000005" output = "0.000025" input_cache_read = "0.0000005" @@ -49,3 +51,98 @@ source_url = "https://platform.claude.com/docs/en/build-with-claude/vision" patch_size_px = 28 maximum_tokens_per_image = 4784 detail_maximum_edges = { "default" = 2576 } + +[providers.anthropic] +provider = "anthropic" +id = "claude-opus-5" +url = "https://platform.claude.com/docs/en/models/opus-5/overview" +source_url = "https://platform.claude.com/docs/en/models/opus-5/overview" +endpoints = [ + { id = "claude-opus-5", input = "text", source_url = "https://platform.claude.com/docs/en/models/opus-5/overview" }, +] + +[providers.anthropic.token_pricing] +source_url = "https://platform.claude.com/docs/en/models/opus-5/overview" +unit = "usd_per_token" +scope = "Standard global synchronous service; input_cache_write is the 5-minute cache write, input_cache_write_1h is the 1-hour cache write. Batch, fast mode and regional premiums are excluded." +input = "0.000005" +output = "0.000025" +input_cache_write = "0.00000625" +input_cache_write_1h = "0.00001" +input_cache_read = "0.0000005" + +[providers.anthropic.capabilities] +source_url = "https://platform.claude.com/docs/en/models/opus-5/overview" +image_input = true +reasoning = true + +[providers.anthropic.limits] +source_url = "https://platform.claude.com/docs/en/models/opus-5/overview" +context_tokens = 1000000 +max_output_tokens = 128000 + +[providers.openrouter] +provider = "openrouter" +id = "anthropic/claude-opus-5" +url = "https://openrouter.ai/anthropic/claude-opus-5" +source_url = "https://openrouter.ai/anthropic/claude-opus-5" +endpoints = [ + { id = "anthropic/claude-opus-5", input = "text", source_url = "https://openrouter.ai/api/v1/models" }, +] + +[providers.openrouter.token_pricing] +source_url = "https://openrouter.ai/anthropic/claude-opus-5" +unit = "usd_per_token" +scope = "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. input_cache_write is the 5-minute cache write; input_cache_write_1h is the 1-hour cache write." +input = "0.000005" +output = "0.000025" +input_cache_read = "0.0000005" +input_cache_write = "0.00000625" +input_cache_write_1h = "0.00001" + +[providers.openrouter.capabilities] +source_url = "https://openrouter.ai/api/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.openrouter.limits] +source_url = "https://openrouter.ai/api/v1/models" +context_tokens = 1000000 +max_output_tokens = 128000 + +[provider_coverage.anthropic] +disposition = "listed" +source_url = "https://platform.claude.com/docs/en/models/opus-5/overview" + +[provider_coverage.vercel] +disposition = "listed" +source_url = "https://vercel.com/ai-gateway/models/claude-opus-5" + +[provider_coverage.openrouter] +disposition = "listed" +source_url = "https://openrouter.ai/anthropic/claude-opus-5" + +[providers.grida] +provider = "grida" +id = "anthropic/claude-opus-5" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "anthropic/claude-opus-5", "input" = "text", "source_url" = "https://gateway.grida.ai/v1/models", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "input_tokens", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.000005" }, + { "id" = "cached_input_tokens", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.0000005" }, + { "id" = "output_tokens", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.000025" }, + ] } }, +] +capabilities = { "source_url" = "https://gateway.grida.ai/v1/models", "image_input" = true, "tools" = true, "reasoning" = true, "structured_output" = true } +limits = { "source_url" = "https://gateway.grida.ai/v1/models", "context_tokens" = 1000000, "max_output_tokens" = 128000 } + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" + +[provider_coverage.fal] +disposition = "excluded" +source_url = "https://fal.ai/models" +reason = "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." diff --git a/models/anthropic/claude-sonnet-5.5/card.toml b/models/anthropic/claude-sonnet-5.5/card.toml index 2807a54..5a2e709 100644 --- a/models/anthropic/claude-sonnet-5.5/card.toml +++ b/models/anthropic/claude-sonnet-5.5/card.toml @@ -1,6 +1,7 @@ id = "anthropic/claude-sonnet-5.5" section = "text.catalog" vendor = "anthropic" +reference_provider = "anthropic" label = "Claude Sonnet 5.5" short_label = "Sonnet 5.5" @@ -25,8 +26,9 @@ endpoints = [ ] [providers.vercel.token_pricing] -source_url = "https://ai-gateway.vercel.sh/v1/models" +source_url = "https://vercel.com/ai-gateway/models/claude-sonnet-5.5" unit = "usd_per_token" +scope = "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration." input = "0.000002" output = "0.00001" input_cache_read = "0.0000001" @@ -49,3 +51,80 @@ source_url = "https://platform.claude.com/docs/en/build-with-claude/vision" patch_size_px = 28 maximum_tokens_per_image = 4784 detail_maximum_edges = { "default" = 2576 } + +[providers.anthropic] +provider = "anthropic" +id = "claude-sonnet-5-5" +url = "https://platform.claude.com/docs/en/models/sonnet-5-5/overview" +source_url = "https://platform.claude.com/docs/en/models/sonnet-5-5/overview" +endpoints = [ + { id = "claude-sonnet-5-5", input = "text", source_url = "https://platform.claude.com/docs/en/models/sonnet-5-5/overview" }, +] + +[providers.anthropic.token_pricing] +source_url = "https://platform.claude.com/docs/en/models/sonnet-5-5/overview" +unit = "usd_per_token" +scope = "Standard global synchronous service; input_cache_write is the 5-minute cache write, input_cache_write_1h is the 1-hour cache write. Batch, fast mode and regional premiums are excluded." +input = "0.000002" +output = "0.00001" +input_cache_write = "0.0000025" +input_cache_write_1h = "0.000004" +input_cache_read = "0.0000001" + +[providers.anthropic.capabilities] +source_url = "https://platform.claude.com/docs/en/models/sonnet-5-5/overview" +image_input = true +reasoning = true + +[providers.anthropic.limits] +source_url = "https://platform.claude.com/docs/en/models/sonnet-5-5/overview" +context_tokens = 1000000 +max_output_tokens = 128000 + +[providers.openrouter] +provider = "openrouter" +id = "anthropic/claude-sonnet-5.5" +url = "https://openrouter.ai/anthropic/claude-sonnet-5.5" +source_url = "https://openrouter.ai/anthropic/claude-sonnet-5.5" +endpoints = [ + { id = "anthropic/claude-sonnet-5.5", input = "text", source_url = "https://openrouter.ai/api/v1/models" }, +] + +[providers.openrouter.token_pricing] +source_url = "https://openrouter.ai/anthropic/claude-sonnet-5.5" +unit = "usd_per_token" +scope = "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. input_cache_write is the 5-minute cache write; input_cache_write_1h is the 1-hour cache write." +input = "0.000002" +output = "0.00001" +input_cache_read = "0.0000001" +input_cache_write = "0.0000025" +input_cache_write_1h = "0.000004" + +[providers.openrouter.capabilities] +source_url = "https://openrouter.ai/api/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.openrouter.limits] +source_url = "https://openrouter.ai/api/v1/models" +context_tokens = 1000000 +max_output_tokens = 128000 + +[provider_coverage.anthropic] +disposition = "listed" +source_url = "https://platform.claude.com/docs/en/models/sonnet-5-5/overview" + +[provider_coverage.vercel] +disposition = "listed" +source_url = "https://vercel.com/ai-gateway/models/claude-sonnet-5.5" + +[provider_coverage.openrouter] +disposition = "listed" +source_url = "https://openrouter.ai/anthropic/claude-sonnet-5.5" + +[provider_coverage.fal] +disposition = "excluded" +source_url = "https://fal.ai/models" +reason = "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." diff --git a/models/anthropic/claude-sonnet-5/card.toml b/models/anthropic/claude-sonnet-5/card.toml index d94b1f7..0661c30 100644 --- a/models/anthropic/claude-sonnet-5/card.toml +++ b/models/anthropic/claude-sonnet-5/card.toml @@ -1,6 +1,7 @@ id = "anthropic/claude-sonnet-5" section = "text.catalog" vendor = "anthropic" +reference_provider = "anthropic" label = "Claude Sonnet 5" short_label = "Sonnet 5" @@ -25,8 +26,9 @@ endpoints = [ ] [providers.vercel.token_pricing] -source_url = "https://ai-gateway.vercel.sh/v1/models" +source_url = "https://vercel.com/ai-gateway/models/claude-sonnet-5" unit = "usd_per_token" +scope = "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration." input = "0.000002" output = "0.00001" input_cache_read = "0.0000002" @@ -49,3 +51,98 @@ source_url = "https://platform.claude.com/docs/en/build-with-claude/vision" patch_size_px = 28 maximum_tokens_per_image = 4784 detail_maximum_edges = { "default" = 2576 } + +[providers.anthropic] +provider = "anthropic" +id = "claude-sonnet-5" +url = "https://platform.claude.com/docs/en/models/sonnet-5/overview" +source_url = "https://platform.claude.com/docs/en/models/sonnet-5/overview" +endpoints = [ + { id = "claude-sonnet-5", input = "text", source_url = "https://platform.claude.com/docs/en/models/sonnet-5/overview" }, +] + +[providers.anthropic.token_pricing] +source_url = "https://platform.claude.com/docs/en/models/sonnet-5/overview" +unit = "usd_per_token" +scope = "Standard global synchronous service; input_cache_write is the 5-minute cache write, input_cache_write_1h is the 1-hour cache write. Batch, fast mode and regional premiums are excluded." +input = "0.000002" +output = "0.00001" +input_cache_write = "0.0000025" +input_cache_write_1h = "0.000004" +input_cache_read = "0.0000002" + +[providers.anthropic.capabilities] +source_url = "https://platform.claude.com/docs/en/models/sonnet-5/overview" +image_input = true +reasoning = true + +[providers.anthropic.limits] +source_url = "https://platform.claude.com/docs/en/models/sonnet-5/overview" +context_tokens = 1000000 +max_output_tokens = 128000 + +[providers.openrouter] +provider = "openrouter" +id = "anthropic/claude-sonnet-5" +url = "https://openrouter.ai/anthropic/claude-sonnet-5" +source_url = "https://openrouter.ai/anthropic/claude-sonnet-5" +endpoints = [ + { id = "anthropic/claude-sonnet-5", input = "text", source_url = "https://openrouter.ai/api/v1/models" }, +] + +[providers.openrouter.token_pricing] +source_url = "https://openrouter.ai/anthropic/claude-sonnet-5" +unit = "usd_per_token" +scope = "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. input_cache_write is the 5-minute cache write; input_cache_write_1h is the 1-hour cache write." +input = "0.000002" +output = "0.00001" +input_cache_read = "0.0000002" +input_cache_write = "0.0000025" +input_cache_write_1h = "0.000004" + +[providers.openrouter.capabilities] +source_url = "https://openrouter.ai/api/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.openrouter.limits] +source_url = "https://openrouter.ai/api/v1/models" +context_tokens = 1000000 +max_output_tokens = 128000 + +[provider_coverage.anthropic] +disposition = "listed" +source_url = "https://platform.claude.com/docs/en/models/sonnet-5/overview" + +[provider_coverage.vercel] +disposition = "listed" +source_url = "https://vercel.com/ai-gateway/models/claude-sonnet-5" + +[provider_coverage.openrouter] +disposition = "listed" +source_url = "https://openrouter.ai/anthropic/claude-sonnet-5" + +[providers.grida] +provider = "grida" +id = "anthropic/claude-sonnet-5" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "anthropic/claude-sonnet-5", "input" = "text", "source_url" = "https://gateway.grida.ai/v1/models", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "input_tokens", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.000002" }, + { "id" = "cached_input_tokens", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.0000002" }, + { "id" = "output_tokens", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.00001" }, + ] } }, +] +capabilities = { "source_url" = "https://gateway.grida.ai/v1/models", "image_input" = true, "tools" = true, "reasoning" = true, "structured_output" = true } +limits = { "source_url" = "https://gateway.grida.ai/v1/models", "context_tokens" = 1000000, "max_output_tokens" = 128000 } + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" + +[provider_coverage.fal] +disposition = "excluded" +source_url = "https://fal.ai/models" +reason = "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." diff --git a/models/black-forest-labs/flux-2-max/card.toml b/models/black-forest-labs/flux-2-max/card.toml index 3c31c49..907e08b 100644 --- a/models/black-forest-labs/flux-2-max/card.toml +++ b/models/black-forest-labs/flux-2-max/card.toml @@ -1,3 +1,4 @@ +reference_provider = "bfl" id = "bfl/flux-2-max" section = "image.models" null_keys = ["styles", "sizes", "constraints"] @@ -87,3 +88,34 @@ source_url = "https://fal.ai/models/fal-ai/flux-2-max/edit/api" "prompt" = { "type" = "string" } "safety_tolerance" = { "enum" = ["1", "2", "3", "4", "5"], "type" = "string" } "seed" = { "type" = "integer" } + + +[providers.bfl] +provider = "bfl" +id = "flux-2-max" +source_url = "https://bfl.ai/pricing" +url = "https://bfl.ai/pricing" +pricing = { "type" = "per_image_flat", "usd" = 0.07, "included_megapixels" = 1, "included_megapixels_scope" = "output", "usd_per_additional_megapixel" = 0.03, "input_megapixels_billed" = true, "megapixel_rounding" = "ceil", "pixels_per_megapixel" = 1048576, "multiple_reference_images_megapixels_each" = 1, "source_url" = "https://bfl.ai/pricing", "input_max_megapixels" = 4 } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/black-forest-labs/flux.2-max" } +vercel = { "disposition" = "listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/flux-2-max" } +bfl = { "disposition" = "listed", "source_url" = "https://bfl.ai/pricing" } + +[providers.grida] +provider = "grida" +id = "bfl/flux-2-max" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "image.bfl.flux-2-max.references", "operation" = "image.bfl.flux-2-max.references", "input" = "multi_image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.bfl.flux-2-max.references.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_1", "interface" = "images.edits", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.07" }, + ] } }, + { "id" = "image.bfl.flux-2-max.text", "operation" = "image.bfl.flux-2-max.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.bfl.flux-2-max.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_1", "interface" = "images.generations", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.07" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" diff --git a/models/black-forest-labs/flux-2-pro/card.toml b/models/black-forest-labs/flux-2-pro/card.toml index 88f0517..d410ec1 100644 --- a/models/black-forest-labs/flux-2-pro/card.toml +++ b/models/black-forest-labs/flux-2-pro/card.toml @@ -1,3 +1,4 @@ +reference_provider = "bfl" id = "bfl/flux-2-pro" section = "image.models" null_keys = ["styles", "sizes"] @@ -88,3 +89,34 @@ source_url = "https://fal.ai/models/fal-ai/flux-2-pro/edit/api" "prompt" = { "type" = "string" } "safety_tolerance" = { "enum" = ["1", "2", "3", "4", "5"], "type" = "string" } "seed" = { "type" = "integer" } + + +[providers.bfl] +provider = "bfl" +id = "flux-2-pro" +source_url = "https://bfl.ai/pricing" +url = "https://bfl.ai/pricing" +pricing = { "type" = "per_image_flat", "usd" = 0.03, "included_megapixels" = 1, "included_megapixels_scope" = "output", "usd_per_additional_megapixel" = 0.015, "input_megapixels_billed" = true, "megapixel_rounding" = "ceil", "pixels_per_megapixel" = 1048576, "multiple_reference_images_megapixels_each" = 1, "source_url" = "https://bfl.ai/pricing", "input_max_megapixels" = 4 } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/black-forest-labs/flux.2-pro" } +vercel = { "disposition" = "listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/flux-2-pro" } +bfl = { "disposition" = "listed", "source_url" = "https://bfl.ai/pricing" } + +[providers.grida] +provider = "grida" +id = "bfl/flux-2-pro" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "image.bfl.flux-2-pro.references", "operation" = "image.bfl.flux-2-pro.references", "input" = "multi_image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.bfl.flux-2-pro.references.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_1", "interface" = "images.edits", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.03" }, + ] } }, + { "id" = "image.bfl.flux-2-pro.text", "operation" = "image.bfl.flux-2-pro.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.bfl.flux-2-pro.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_1", "interface" = "images.generations", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.03" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" diff --git a/models/black-forest-labs/flux-kontext-max/card.toml b/models/black-forest-labs/flux-kontext-max/card.toml index 599ec13..919bfec 100644 --- a/models/black-forest-labs/flux-kontext-max/card.toml +++ b/models/black-forest-labs/flux-kontext-max/card.toml @@ -1,3 +1,4 @@ +reference_provider = "bfl" id = "bfl/flux-kontext-max" section = "image.models" null_keys = ["styles", "sizes"] @@ -28,3 +29,16 @@ id = "fal-ai/flux-pro/kontext/max" pricing = { type = "per_image_flat", usd = 0.08 } avg_cost_usd = 0.08 url = "https://fal.ai/models/fal-ai/flux-pro/kontext/max" + +[providers.bfl] +provider = "bfl" +id = "flux-kontext-max" +source_url = "https://docs.bfl.ai/quick_start/pricing" +url = "https://docs.bfl.ai/quick_start/pricing" +pricing = { "type" = "per_image_flat", "usd" = 0.08, "source_url" = "https://docs.bfl.ai/quick_start/pricing" } + +[provider_coverage] +openrouter = { "disposition" = "not_listed", "source_url" = "https://openrouter.ai/api/v1/images/models", "reason" = "No matching model/version is listed in the inspected public image model catalogue." } +vercel = { "disposition" = "listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/flux-pro/kontext/max" } +bfl = { "disposition" = "listed", "source_url" = "https://docs.bfl.ai/quick_start/pricing" } diff --git a/models/black-forest-labs/flux-kontext-pro/card.toml b/models/black-forest-labs/flux-kontext-pro/card.toml index 52fcc7b..b899ff4 100644 --- a/models/black-forest-labs/flux-kontext-pro/card.toml +++ b/models/black-forest-labs/flux-kontext-pro/card.toml @@ -1,3 +1,4 @@ +reference_provider = "bfl" id = "bfl/flux-kontext-pro" section = "image.models" null_keys = ["styles", "sizes"] @@ -28,3 +29,16 @@ id = "fal-ai/flux-pro/kontext" pricing = { type = "per_image_flat", usd = 0.04 } avg_cost_usd = 0.04 url = "https://fal.ai/models/fal-ai/flux-pro/kontext" + +[providers.bfl] +provider = "bfl" +id = "flux-kontext-pro" +source_url = "https://docs.bfl.ai/quick_start/pricing" +url = "https://docs.bfl.ai/quick_start/pricing" +pricing = { "type" = "per_image_flat", "usd" = 0.04, "source_url" = "https://docs.bfl.ai/quick_start/pricing" } + +[provider_coverage] +openrouter = { "disposition" = "not_listed", "source_url" = "https://openrouter.ai/api/v1/images/models", "reason" = "No matching model/version is listed in the inspected public image model catalogue." } +vercel = { "disposition" = "listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/flux-pro/kontext" } +bfl = { "disposition" = "listed", "source_url" = "https://docs.bfl.ai/quick_start/pricing" } diff --git a/models/black-forest-labs/flux-pro-1.1/card.toml b/models/black-forest-labs/flux-pro-1.1/card.toml index 0ae4c9d..ca532b8 100644 --- a/models/black-forest-labs/flux-pro-1.1/card.toml +++ b/models/black-forest-labs/flux-pro-1.1/card.toml @@ -1,3 +1,4 @@ +reference_provider = "bfl" id = "bfl/flux-pro-1.1" section = "image.models" null_keys = ["styles", "sizes"] @@ -21,3 +22,23 @@ provider = "vercel" id = "bfl/flux-pro-1.1" pricing = { type = "per_image_flat", usd = 0.04 } avg_cost_usd = 0.04 + +[providers.bfl] +provider = "bfl" +id = "flux-pro-1.1" +source_url = "https://docs.bfl.ai/quick_start/pricing" +url = "https://docs.bfl.ai/quick_start/pricing" +pricing = { "type" = "per_image_flat", "usd" = 0.04, "source_url" = "https://docs.bfl.ai/quick_start/pricing" } + +[providers.fal] +provider = "fal" +id = "fal-ai/flux-pro/v1.1" +source_url = "https://fal.ai/models/fal-ai/flux-pro/v1.1" +url = "https://fal.ai/models/fal-ai/flux-pro/v1.1" +pricing = { "type" = "per_megapixel", "usd" = 0.04, "rounding" = "ceil", "source_url" = "https://fal.ai/models/fal-ai/flux-pro/v1.1" } + +[provider_coverage] +openrouter = { "disposition" = "not_listed", "source_url" = "https://openrouter.ai/api/v1/images/models", "reason" = "No matching model/version is listed in the inspected public image model catalogue." } +vercel = { "disposition" = "listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/flux-pro/v1.1" } +bfl = { "disposition" = "listed", "source_url" = "https://docs.bfl.ai/quick_start/pricing" } diff --git a/models/bria/remove-background/card.toml b/models/bria/remove-background/card.toml index dd25689..fa56d5d 100644 --- a/models/bria/remove-background/card.toml +++ b/models/bria/remove-background/card.toml @@ -1,3 +1,4 @@ +reference_provider = "bria" id = "bria/remove-background" section = "image_tools.models" @@ -10,3 +11,25 @@ cost_usd = 0.018 date = "2024-11-12" basis = "model" source_url = "https://bria.ai/blog/brias-new-state-of-the-art-remove-background-outperforms-the-competition" + +[providers.fal] +provider = "fal" +id = "fal-ai/bria/background/remove" +source_url = "https://fal.ai/models/fal-ai/bria/background/remove" +url = "https://fal.ai/models/fal-ai/bria/background/remove" +pricing = { "type" = "per_image_tiered", "tiers" = { "without_prompt" = 0.018, "with_prompt" = 0.03 }, "source_url" = "https://fal.ai/models/fal-ai/bria/background/remove" } + +[providers.bria] +provider = "bria" +id = "/v2/image/edit/remove_background" +source_url = "https://docs.bria.ai/image-editing/editing/background-remove" +url = "https://docs.bria.ai/image-editing/editing/background-remove" +qualifications = [ + { "source_url" = "https://docs.bria.ai/image-editing/editing/background-remove", "notes" = "Native background-removal endpoint verified. The API documentation does not establish a regular USD price or pin the current hosted checkpoint; neither is inferred from reseller listings." }, +] + +[provider_coverage] +openrouter = { "disposition" = "not_listed", "source_url" = "https://openrouter.ai/api/v1/models", "reason" = "No matching model/version is listed in the inspected public model catalogue." } +vercel = { "disposition" = "not_listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models", "reason" = "No matching model/version is listed in the inspected public Gateway model catalogue." } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/bria/background/remove" } +bria = { "disposition" = "listed", "source_url" = "https://docs.bria.ai/image-editing/editing/background-remove" } diff --git a/models/bytedance/seedance-2.0/card.toml b/models/bytedance/seedance-2.0/card.toml index 285b077..13795ae 100644 --- a/models/bytedance/seedance-2.0/card.toml +++ b/models/bytedance/seedance-2.0/card.toml @@ -1,3 +1,4 @@ +reference_provider = "byteplus" id = "bytedance/seedance-2.0" section = "video.models" @@ -27,17 +28,6 @@ url = "https://fal.ai/models/bytedance/seedance-2.0/image-to-video" type = "per_second" usd_per_second = { 720p = { audio = 0.3034 }, 1080p = { audio = 0.682 } } -[providers.openrouter] -provider = "openrouter" -id = "bytedance/seedance-2.0" -input = "text-or-image" -avg_cost_usd = 0.34 -url = "https://openrouter.ai/bytedance/seedance-2.0" - -[providers.openrouter.pricing] -type = "per_second" -usd_per_second = { 480p = { audio = 0.06726 }, 720p = { audio = 0.06726 } } - [[providers.fal.endpoints]] id = "bytedance/seedance-2.0/image-to-video" input = "image" @@ -110,3 +100,82 @@ source_url = "https://fal.ai/models/bytedance/seedance-2.0/text-to-video/api" "generate_audio" = { "type" = "boolean" } "prompt" = { "type" = "string" } "resolution" = { "enum" = ["480p", "720p", "1080p", "4k"], "type" = "string" } + +[providers.vercel] +provider = "vercel" +id = "bytedance/seedance-2.0" +source_url = "https://vercel.com/ai-gateway/models/seedance-2.0" +url = "https://vercel.com/ai-gateway/models/seedance-2.0" +pricing = { "type" = "video_token_tiers", "tiers" = [ + { "resolution" = "480p", "no_video_input" = { "cost_per_million_tokens" = "7" }, "with_video_input" = { "cost_per_million_tokens" = "4.3" } }, + { "resolution" = "720p", "no_video_input" = { "cost_per_million_tokens" = "7" }, "with_video_input" = { "cost_per_million_tokens" = "4.3" } }, + { "resolution" = "1080p", "no_video_input" = { "cost_per_million_tokens" = "7.7" }, "with_video_input" = { "cost_per_million_tokens" = "4.7" } }, + { "resolution" = "4k", "no_video_input" = { "cost_per_million_tokens" = "4" }, "with_video_input" = { "cost_per_million_tokens" = "2.4" } }, +], "notes" = "Pricing varies based on whether the input contains video. When video is included in the input, all tokens are billed at the reduced rate. Token count includes both input and output video and is subject to minimum token floors based on output duration.", "source_url" = "https://vercel.com/ai-gateway/models/seedance-2.0" } +input = "text-or-image" + +[providers.byteplus] +provider = "byteplus" +id = "dreamina-seedance-2-0-260128" +source_url = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" +url = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" +pricing = { "type" = "video_token_tiers", "usd_per_million_tokens" = { "480p" = { "without_video_input" = 7, "with_video_input" = 4.3 }, "720p" = { "without_video_input" = 7, "with_video_input" = 4.3 }, "1080p" = { "without_video_input" = 7.7, "with_video_input" = 4.7 }, "4k" = { "without_video_input" = 4, "with_video_input" = 2.4 } }, "billing_quantity" = "usage.completion_tokens", "source_url" = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/api/v1/videos/models" } +vercel = { "disposition" = "listed", "source_url" = "https://vercel.com/ai-gateway/models/seedance-2.0" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/bytedance/seedance-2.0/image-to-video" } +byteplus = { "disposition" = "listed", "source_url" = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" } + +[providers.openrouter] +provider = "openrouter" +id = "bytedance/seedance-2.0" +source_url = "https://openrouter.ai/api/v1/videos/models" +url = "https://openrouter.ai/api/v1/videos/models" +pricing = { "type" = "provider_skus", "skus" = { "video_tokens" = "0.000007", "video_tokens_4k" = "0.000004", "video_tokens_1080p" = "0.0000077", "video_tokens_without_audio" = "0.000007", "video_tokens_with_video_input" = "0.0000043", "video_tokens_4k_with_video_input" = "0.0000024", "video_tokens_1080p_with_video_input" = "0.0000047" }, "source_unit_notes" = "duration_seconds: USD/second; video_tokens: USD/token; cents_per: cents per named unit", "source_url" = "https://openrouter.ai/api/v1/videos/models" } +endpoints = [ + { "id" = "bytedance/seedance-2.0", "source_url" = "https://openrouter.ai/api/v1/videos/models", "parameters" = { "resolution" = { "enum" = [ + "480p", + "720p", + "1080p", + "4K", + ] }, "duration" = { "type" = "integer", "enum" = [ + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + ] }, "aspect_ratio" = { "type" = "string", "enum" = [ + "1:1", + "3:4", + "9:16", + "4:3", + "16:9", + "21:9", + "9:21", + ] } }, "input" = "text" }, +] + +[providers.grida] +provider = "grida" +id = "bytedance/seedance-2.0" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "video.bytedance.seedance-2.0.image", "operation" = "video.bytedance.seedance-2.0.image", "input" = "image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/video.bytedance.seedance-2.0.image.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", "interface" = "videos", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.014" }, + ] } }, + { "id" = "video.bytedance.seedance-2.0.text", "operation" = "video.bytedance.seedance-2.0.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/video.bytedance.seedance-2.0.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", "interface" = "videos", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.014" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" diff --git a/models/bytedance/seedance-2.5/card.toml b/models/bytedance/seedance-2.5/card.toml index 69c1bee..2fb239d 100644 --- a/models/bytedance/seedance-2.5/card.toml +++ b/models/bytedance/seedance-2.5/card.toml @@ -1,3 +1,4 @@ +reference_provider = "byteplus" id = "bytedance/seedance-2.5" section = "video.models" @@ -75,3 +76,90 @@ source_url = "https://fal.ai/models/bytedance/seedance-2.5/image-to-video/api" "image_url" = { "type" = "string" } "prompt" = { "type" = "string" } "resolution" = { "type" = "string", "enum" = ["480p", "720p", "1080p"] } + +[providers.vercel] +provider = "vercel" +id = "bytedance/seedance-2.5" +source_url = "https://vercel.com/ai-gateway/models/seedance-2.5" +url = "https://vercel.com/ai-gateway/models/seedance-2.5" +pricing = { "type" = "video_token_tiers", "tiers" = [ + { "resolution" = "480p", "no_video_input" = { "cost_per_million_tokens" = "10.7" }, "with_video_input" = { "cost_per_million_tokens" = "6.4" } }, + { "resolution" = "720p", "no_video_input" = { "cost_per_million_tokens" = "10.7" }, "with_video_input" = { "cost_per_million_tokens" = "6.4" } }, + { "resolution" = "1080p", "no_video_input" = { "cost_per_million_tokens" = "11.7" }, "with_video_input" = { "cost_per_million_tokens" = "7" } }, +], "notes" = "Pricing varies based on whether the input contains video. When video is included in the input, all tokens are billed at the reduced rate. Token count includes both input and output video and is subject to minimum token floors based on output duration.", "source_url" = "https://vercel.com/ai-gateway/models/seedance-2.5" } +input = "text-or-image" + +[providers.byteplus] +provider = "byteplus" +id = "dreamina-seedance-2-5-260628" +source_url = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" +url = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" +pricing = { "type" = "video_token_tiers", "usd_per_million_tokens" = { "480p" = { "without_video_input" = 10.7, "with_video_input" = 6.4 }, "720p" = { "without_video_input" = 10.7, "with_video_input" = 6.4 }, "1080p" = { "without_video_input" = 11.7, "with_video_input" = 7 } }, "billing_quantity" = "usage.completion_tokens", "source_url" = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/api/v1/videos/models" } +vercel = { "disposition" = "listed", "source_url" = "https://vercel.com/ai-gateway/models/seedance-2.5" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/bytedance/seedance-2.5/image-to-video" } +byteplus = { "disposition" = "listed", "source_url" = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" } + +[providers.openrouter] +provider = "openrouter" +id = "bytedance/seedance-2.5" +source_url = "https://openrouter.ai/api/v1/videos/models" +url = "https://openrouter.ai/api/v1/videos/models" +pricing = { "type" = "provider_skus", "skus" = { "video_tokens" = "0.0000107", "video_tokens_without_audio" = "0.0000107", "video_tokens_with_video_input" = "0.0000064" }, "source_unit_notes" = "duration_seconds: USD/second; video_tokens: USD/token; cents_per: cents per named unit", "source_url" = "https://openrouter.ai/api/v1/videos/models" } +endpoints = [ + { "id" = "bytedance/seedance-2.5", "source_url" = "https://openrouter.ai/api/v1/videos/models", "parameters" = { "resolution" = { "enum" = [ + "480p", + "720p", + ] }, "duration" = { "type" = "integer", "enum" = [ + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + ] }, "aspect_ratio" = { "type" = "string", "enum" = [ + "16:9", + "4:3", + "1:1", + "3:4", + "9:16", + "21:9", + ] } }, "input" = "text" }, +] + +[providers.grida] +provider = "grida" +id = "bytedance/seedance-2.5" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "video.bytedance.seedance-2.5.image", "operation" = "video.bytedance.seedance-2.5.image", "input" = "image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/video.bytedance.seedance-2.5.image.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", "interface" = "videos", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.0214" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" diff --git a/models/bytedance/seedream-4.5/card.toml b/models/bytedance/seedream-4.5/card.toml index 766d7ed..392bc56 100644 --- a/models/bytedance/seedream-4.5/card.toml +++ b/models/bytedance/seedream-4.5/card.toml @@ -1,3 +1,4 @@ +reference_provider = "byteplus" id = "bytedance/seedream-4.5" section = "image.models" null_keys = ["styles", "sizes"] @@ -36,3 +37,16 @@ id = "fal-ai/bytedance/seedream/v4.5/text-to-image" pricing = { type = "per_image_flat", usd = 0.04 } avg_cost_usd = 0.04 url = "https://fal.ai/models/fal-ai/bytedance/seedream/v4.5/text-to-image" + +[providers.byteplus] +provider = "byteplus" +id = "seedream-4-5-251128" +source_url = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" +url = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" +pricing = { "type" = "per_image_flat", "usd" = 0.04, "source_url" = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/bytedance-seed/seedream-4.5" } +vercel = { "disposition" = "listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/bytedance/seedream/v4.5/text-to-image" } +byteplus = { "disposition" = "listed", "source_url" = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" } diff --git a/models/bytedance/seedream-5.0-lite/card.toml b/models/bytedance/seedream-5.0-lite/card.toml index 96882c6..ece57e7 100644 --- a/models/bytedance/seedream-5.0-lite/card.toml +++ b/models/bytedance/seedream-5.0-lite/card.toml @@ -1,3 +1,4 @@ +reference_provider = "byteplus" id = "bytedance/seedream-5.0-lite" section = "image.models" null_keys = ["styles", "sizes"] @@ -93,3 +94,33 @@ source_url = "https://fal.ai/models/fal-ai/bytedance/seedream/v5/lite/edit/api" [providers.fal.endpoints.image_constraints] min_pixels = 3686400 max_pixels = 16777216 + +[providers.byteplus] +provider = "byteplus" +id = "seedream-5-0-lite-260128" +source_url = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" +url = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" +pricing = { "type" = "per_image_flat", "usd" = 0.035, "source_url" = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/bytedance-seed/seedream-5-0-lite" } +vercel = { "disposition" = "listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/bytedance/seedream/v5/lite/text-to-image" } +byteplus = { "disposition" = "listed", "source_url" = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" } + +[providers.grida] +provider = "grida" +id = "bytedance/seedream-5.0-lite" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "image.bytedance.seedream-5.0-lite.references", "operation" = "image.bytedance.seedream-5.0-lite.references", "input" = "multi_image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.bytedance.seedream-5.0-lite.references.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_6", "interface" = "images.edits", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.035" }, + ] } }, + { "id" = "image.bytedance.seedream-5.0-lite.text", "operation" = "image.bytedance.seedream-5.0-lite.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.bytedance.seedream-5.0-lite.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_6", "interface" = "images.generations", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.035" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" diff --git a/models/bytedance/seedream-5.0-pro/card.toml b/models/bytedance/seedream-5.0-pro/card.toml index 3c9cb82..245c98c 100644 --- a/models/bytedance/seedream-5.0-pro/card.toml +++ b/models/bytedance/seedream-5.0-pro/card.toml @@ -1,3 +1,4 @@ +reference_provider = "byteplus" id = "bytedance/seedream-5.0-pro" section = "image.models" null_keys = ["styles", "sizes"] @@ -99,3 +100,33 @@ source_url = "https://fal.ai/models/bytedance/seedream/v5/pro/text-to-image/api" max_pixels = 4194304 min_pixels = 1048576 aspect_ratio = { "min" = 0.0625, "max" = 16 } + +[providers.byteplus] +provider = "byteplus" +id = "dola-seedream-5-0-pro-260628" +source_url = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" +url = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" +pricing = { "type" = "per_image_tiered", "threshold_pixels" = 2610000, "tiers" = { "generation_at_or_below_threshold" = 0.045, "generation_above_threshold" = 0.09, "layer_decomposition_at_or_below_threshold" = 0.0225, "layer_decomposition_above_threshold" = 0.045 }, "included_input_images" = 1, "usd_per_additional_input_image" = 0.003, "source_url" = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/bytedance-seed/seedream-5-0-pro" } +vercel = { "disposition" = "listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/bytedance/seedream/v5/pro/text-to-image" } +byteplus = { "disposition" = "listed", "source_url" = "https://docs.byteplus.com/en/docs/ModelArk/model-pricing" } + +[providers.grida] +provider = "grida" +id = "bytedance/seedream-5.0-pro" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "image.bytedance.seedream-5.0-pro.references", "operation" = "image.bytedance.seedream-5.0-pro.references", "input" = "multi_image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.bytedance.seedream-5.0-pro.references.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_6", "interface" = "images.edits", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.0675" }, + ] } }, + { "id" = "image.bytedance.seedream-5.0-pro.text", "operation" = "image.bytedance.seedream-5.0-pro.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.bytedance.seedream-5.0-pro.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_6", "interface" = "images.generations", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.0675" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" diff --git a/models/elevenlabs/eleven_text_to_sound_v2/card.toml b/models/elevenlabs/eleven_text_to_sound_v2/card.toml index a91d730..031649b 100644 --- a/models/elevenlabs/eleven_text_to_sound_v2/card.toml +++ b/models/elevenlabs/eleven_text_to_sound_v2/card.toml @@ -1,3 +1,4 @@ +reference_provider = "elevenlabs" id = "eleven_text_to_sound_v2" section = "audio.sound_effects.models" null_keys = ["avg_cost_usd"] @@ -27,3 +28,16 @@ duration = { mode = "automatic_or_fixed", min_seconds = 0.5, max_seconds = 30 } type = "provider_credits" automatic_duration_credits = 100 specified_duration_credits_per_second = 11 + +[providers.fal] +provider = "fal" +id = "fal-ai/elevenlabs/sound-effects/v2" +source_url = "https://fal.ai/models/fal-ai/elevenlabs/sound-effects/v2" +url = "https://fal.ai/models/fal-ai/elevenlabs/sound-effects/v2" +pricing = { "type" = "per_second", "usd" = 0.002, "source_url" = "https://fal.ai/models/fal-ai/elevenlabs/sound-effects/v2" } + +[provider_coverage] +openrouter = { "disposition" = "not_listed", "source_url" = "https://openrouter.ai/api/v1/models", "reason" = "No matching model/version is listed in the inspected public model catalogue." } +vercel = { "disposition" = "not_listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models", "reason" = "No matching model/version is listed in the inspected public Gateway model catalogue." } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/elevenlabs/sound-effects/v2" } +elevenlabs = { "disposition" = "listed", "source_url" = "https://elevenlabs.io/docs/api-reference/text-to-sound-effects/convert" } diff --git a/models/elevenlabs/eleven_v3/card.toml b/models/elevenlabs/eleven_v3/card.toml index 53e6115..00e8ad9 100644 --- a/models/elevenlabs/eleven_v3/card.toml +++ b/models/elevenlabs/eleven_v3/card.toml @@ -1,3 +1,4 @@ +reference_provider = "elevenlabs" id = "eleven_v3" section = "audio.text_to_speech.models" @@ -21,3 +22,16 @@ default_format = "mp3" formats = ["mp3"] sample_rate_hz = 44_100 bit_rate_kbps = 128 + +[providers.fal] +provider = "fal" +id = "fal-ai/elevenlabs/tts/eleven-v3" +source_url = "https://fal.ai/models/fal-ai/elevenlabs/tts/eleven-v3" +url = "https://fal.ai/models/fal-ai/elevenlabs/tts/eleven-v3" +pricing = { "type" = "per_1000_characters", "usd" = 0.1, "source_url" = "https://fal.ai/models/fal-ai/elevenlabs/tts/eleven-v3" } + +[provider_coverage] +openrouter = { "disposition" = "not_listed", "source_url" = "https://openrouter.ai/api/v1/models", "reason" = "No matching model/version is listed in the inspected public model catalogue." } +vercel = { "disposition" = "not_listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models", "reason" = "No matching model/version is listed in the inspected public Gateway model catalogue." } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/elevenlabs/tts/eleven-v3" } +elevenlabs = { "disposition" = "listed", "source_url" = "https://elevenlabs.io/docs/api-reference/text-to-speech/convert" } diff --git a/models/google/gemini-3-pro-image/card.toml b/models/google/gemini-3-pro-image/card.toml index ffa065f..9f57b7f 100644 --- a/models/google/gemini-3-pro-image/card.toml +++ b/models/google/gemini-3-pro-image/card.toml @@ -1,3 +1,4 @@ +reference_provider = "google" id = "google/gemini-3-pro-image" section = "image.models" null_keys = ["styles", "sizes", "constraints"] @@ -94,3 +95,33 @@ source_url = "https://fal.ai/models/fal-ai/nano-banana-pro/edit/api" "safety_tolerance" = { "type" = "string", "enum" = ["1", "2", "3", "4", "5", "6"] } "seed" = { "type" = "integer" } "system_prompt" = { "max_length" = 50000, "type" = "string" } + +[providers.google] +provider = "google" +id = "gemini-3-pro-image" +source_url = "https://ai.google.dev/gemini-api/docs/pricing" +url = "https://ai.google.dev/gemini-api/docs/pricing" +pricing = { "type" = "per_token", "input" = 2, "text_output" = 12, "output" = 120, "source_url" = "https://ai.google.dev/gemini-api/docs/pricing" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/google/gemini-3-pro-image-preview" } +vercel = { "disposition" = "listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/nano-banana-pro" } +google = { "disposition" = "listed", "source_url" = "https://ai.google.dev/gemini-api/docs/pricing" } + +[providers.grida] +provider = "grida" +id = "google/gemini-3-pro-image" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "image.google.gemini-3-pro-image.references", "operation" = "image.google.gemini-3-pro-image.references", "input" = "multi_image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.google.gemini-3-pro-image.references.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_4", "interface" = "images.edits", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.15" }, + ] } }, + { "id" = "image.google.gemini-3-pro-image.text", "operation" = "image.google.gemini-3-pro-image.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.google.gemini-3-pro-image.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_4", "interface" = "images.generations", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.15" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" diff --git a/models/google/gemini-3.1-flash-image-preview/card.toml b/models/google/gemini-3.1-flash-image-preview/card.toml index 8dbb360..4f6fdbb 100644 --- a/models/google/gemini-3.1-flash-image-preview/card.toml +++ b/models/google/gemini-3.1-flash-image-preview/card.toml @@ -1,3 +1,4 @@ +reference_provider = "google" id = "google/gemini-3.1-flash-image-preview" section = "image.models" null_keys = ["styles", "sizes"] @@ -103,3 +104,33 @@ source_url = "https://fal.ai/models/fal-ai/nano-banana-2/edit/api" "safety_tolerance" = { "enum" = ["1", "2", "3", "4", "5", "6"], "type" = "string" } "seed" = { "type" = "integer" } "system_prompt" = { "type" = "string", "max_length" = 50000 } + +[providers.google] +provider = "google" +id = "gemini-3.1-flash-image" +source_url = "https://ai.google.dev/gemini-api/docs/pricing" +url = "https://ai.google.dev/gemini-api/docs/pricing" +pricing = { "type" = "per_token", "input" = 0.5, "text_output" = 3, "output" = 60, "source_url" = "https://ai.google.dev/gemini-api/docs/pricing" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/google/gemini-3.1-flash-image" } +vercel = { "disposition" = "listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/nano-banana-2" } +google = { "disposition" = "listed", "source_url" = "https://ai.google.dev/gemini-api/docs/pricing" } + +[providers.grida] +provider = "grida" +id = "google/gemini-3.1-flash-image-preview" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "image.google.gemini-3.1-flash-image-preview.references", "operation" = "image.google.gemini-3.1-flash-image-preview.references", "input" = "multi_image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.google.gemini-3.1-flash-image-preview.references.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_4", "interface" = "images.edits", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.08" }, + ] } }, + { "id" = "image.google.gemini-3.1-flash-image-preview.text", "operation" = "image.google.gemini-3.1-flash-image-preview.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.google.gemini-3.1-flash-image-preview.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_4", "interface" = "images.generations", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.08" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" diff --git a/models/google/gemini-3.1-flash-lite-image/card.toml b/models/google/gemini-3.1-flash-lite-image/card.toml index e220826..9ac3db8 100644 --- a/models/google/gemini-3.1-flash-lite-image/card.toml +++ b/models/google/gemini-3.1-flash-lite-image/card.toml @@ -1,3 +1,4 @@ +reference_provider = "google" id = "google/gemini-3.1-flash-lite-image" section = "image.models" null_keys = ["styles", "sizes"] @@ -28,3 +29,23 @@ id = "google/gemini-3.1-flash-lite-image" pricing = { type = "per_token", input = 0.25, output = 1.5 } avg_cost_usd = 0.034 url = "https://openrouter.ai/google/gemini-3.1-flash-lite-image" + +[providers.google] +provider = "google" +id = "gemini-3.1-flash-lite-image" +source_url = "https://ai.google.dev/gemini-api/docs/pricing" +url = "https://ai.google.dev/gemini-api/docs/pricing" +pricing = { "type" = "per_token", "input" = 0.25, "text_output" = 1.5, "output" = 30, "source_url" = "https://ai.google.dev/gemini-api/docs/pricing" } + +[providers.fal] +provider = "fal" +id = "google/nano-banana-2-lite" +source_url = "https://fal.ai/models/google/nano-banana-2-lite" +url = "https://fal.ai/models/google/nano-banana-2-lite" +pricing = { "type" = "per_token", "input" = 0.3125, "image_input" = 0.3125, "text_output" = 1.875, "output" = 37.5, "source_url" = "https://fal.ai/models/google/nano-banana-2-lite" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/google/gemini-3.1-flash-lite-image" } +vercel = { "disposition" = "listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/google/nano-banana-2-lite" } +google = { "disposition" = "listed", "source_url" = "https://ai.google.dev/gemini-api/docs/pricing" } diff --git a/models/google/gemini-3.1-pro-preview/card.toml b/models/google/gemini-3.1-pro-preview/card.toml index acb11d8..04df642 100644 --- a/models/google/gemini-3.1-pro-preview/card.toml +++ b/models/google/gemini-3.1-pro-preview/card.toml @@ -1,6 +1,7 @@ id = "google/gemini-3.1-pro-preview" section = "text.catalog" vendor = "google" +reference_provider = "google" label = "Gemini 3.1 Pro Preview" short_label = "Gemini 3.1 Pro" @@ -34,8 +35,9 @@ endpoints = [ ] [providers.vercel.token_pricing] -source_url = "https://ai-gateway.vercel.sh/v1/models" +source_url = "https://vercel.com/ai-gateway/models/gemini-3.1-pro-preview" unit = "usd_per_token" +scope = "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration." input = "0.000002" output = "0.000012" input_cache_read = "0.0000002" @@ -65,3 +67,115 @@ source_url = "https://ai.google.dev/gemini-api/docs/media-resolution" maximum_tokens_per_image = 2240 token_counts_approximate = true detail_token_budgets = { "unspecified" = 1120, "low" = 280, "medium" = 560, "high" = 1120, "ultra_high" = 2240 } + +[providers.google] +provider = "google" +id = "gemini-3.1-pro-preview" +url = "https://ai.google.dev/gemini-api/docs/models/gemini-3.1-pro-preview" +source_url = "https://ai.google.dev/gemini-api/docs/models/gemini-3.1-pro-preview" +endpoints = [ + { id = "gemini-3.1-pro-preview", input = "text", source_url = "https://ai.google.dev/gemini-api/docs/models/gemini-3.1-pro-preview" }, +] + +[providers.google.token_pricing] +source_url = "https://ai.google.dev/gemini-api/docs/pricing" +unit = "usd_per_token" +scope = "Regular Standard paid-tier input/output/cache-read token rates. Context-cache storage per hour, grounding tools and alternate service tiers are excluded." +input = "0.000002" +output = "0.000012" +input_cache_read = "0.0000002" +tiers = [ + { meter = "input", minimum_input_tokens = 0, maximum_input_tokens = 200001, usd_per_token = "0.000002" }, + { meter = "input", minimum_input_tokens = 200001, usd_per_token = "0.000004" }, + { meter = "output", minimum_input_tokens = 0, maximum_input_tokens = 200001, usd_per_token = "0.000012" }, + { meter = "output", minimum_input_tokens = 200001, usd_per_token = "0.000018" }, + { meter = "input_cache_read", minimum_input_tokens = 0, maximum_input_tokens = 200001, usd_per_token = "0.0000002" }, + { meter = "input_cache_read", minimum_input_tokens = 200001, usd_per_token = "0.0000004" }, +] + +[providers.google.capabilities] +source_url = "https://ai.google.dev/gemini-api/docs/models/gemini-3.1-pro-preview" +image_input = true +reasoning = true +tools = true +structured_output = true + +[providers.google.limits] +source_url = "https://ai.google.dev/gemini-api/docs/models/gemini-3.1-pro-preview" +context_tokens = 1048576 +max_output_tokens = 65536 + +[providers.openrouter] +provider = "openrouter" +id = "google/gemini-3.1-pro-preview" +url = "https://openrouter.ai/google/gemini-3.1-pro-preview" +source_url = "https://openrouter.ai/google/gemini-3.1-pro-preview" +endpoints = [ + { id = "google/gemini-3.1-pro-preview", input = "text", source_url = "https://openrouter.ai/api/v1/models" }, +] + +[providers.openrouter.token_pricing] +source_url = "https://openrouter.ai/google/gemini-3.1-pro-preview" +unit = "usd_per_token" +scope = "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. Context-cache storage per hour is excluded." +input = "0.000002" +output = "0.000012" +input_cache_read = "0.0000002" +tiers = [ + { meter = "input", minimum_input_tokens = 0, maximum_input_tokens = 200000, usd_per_token = "0.000002" }, + { meter = "input", minimum_input_tokens = 200000, usd_per_token = "0.000004" }, + { meter = "output", minimum_input_tokens = 0, maximum_input_tokens = 200000, usd_per_token = "0.000012" }, + { meter = "output", minimum_input_tokens = 200000, usd_per_token = "0.000018" }, + { meter = "input_cache_read", minimum_input_tokens = 0, maximum_input_tokens = 200000, usd_per_token = "0.0000002" }, + { meter = "input_cache_read", minimum_input_tokens = 200000, usd_per_token = "0.0000004" }, +] + +[providers.openrouter.capabilities] +source_url = "https://openrouter.ai/api/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.openrouter.limits] +source_url = "https://openrouter.ai/api/v1/models" +context_tokens = 1048576 +max_output_tokens = 65536 + +[provider_coverage.google] +disposition = "listed" +source_url = "https://ai.google.dev/gemini-api/docs/models/gemini-3.1-pro-preview" + +[provider_coverage.vercel] +disposition = "listed" +source_url = "https://vercel.com/ai-gateway/models/gemini-3.1-pro-preview" + +[provider_coverage.openrouter] +disposition = "listed" +source_url = "https://openrouter.ai/google/gemini-3.1-pro-preview" + +[providers.grida] +provider = "grida" +id = "google/gemini-3.1-pro-preview" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "google/gemini-3.1-pro-preview", "input" = "text", "source_url" = "https://gateway.grida.ai/v1/models", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "input_tokens.0", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "200001" }, "usd_per_unit" = "0.000002" }, + { "id" = "input_tokens.1", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "200001" }, "usd_per_unit" = "0.000004" }, + { "id" = "cached_input_tokens.0", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "200001" }, "usd_per_unit" = "0.0000002" }, + { "id" = "cached_input_tokens.1", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "200001" }, "usd_per_unit" = "0.0000004" }, + { "id" = "output_tokens.0", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "200001" }, "usd_per_unit" = "0.000012" }, + { "id" = "output_tokens.1", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "200001" }, "usd_per_unit" = "0.000018" }, + ] } }, +] +capabilities = { "source_url" = "https://gateway.grida.ai/v1/models", "image_input" = true, "tools" = true, "reasoning" = true, "structured_output" = true } +limits = { "source_url" = "https://gateway.grida.ai/v1/models", "context_tokens" = 1000000, "max_output_tokens" = 64000 } + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" + +[provider_coverage.fal] +disposition = "excluded" +source_url = "https://fal.ai/models" +reason = "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." diff --git a/models/google/gemini-3.7-flash/card.toml b/models/google/gemini-3.7-flash/card.toml index c3c3c78..0cdc67c 100644 --- a/models/google/gemini-3.7-flash/card.toml +++ b/models/google/gemini-3.7-flash/card.toml @@ -1,6 +1,7 @@ id = "google/gemini-3.7-flash" section = "text.catalog" vendor = "google" +reference_provider = "google" label = "Gemini 3.7 Flash" multimodal = true @@ -24,11 +25,12 @@ endpoints = [ ] [providers.vercel.token_pricing] -source_url = "https://ai-gateway.vercel.sh/v1/models" +source_url = "https://vercel.com/ai-gateway/models/gemini-3.7-flash" unit = "usd_per_token" -input = "0.00000075" -output = "0.00000375" -input_cache_read = "0.000000075" +scope = "Regular Standard global token rates from the model page list-cost tiers; alternate service tiers and regional premiums are excluded." +input = "0.0000015" +output = "0.0000075" +input_cache_read = "0.00000015" [providers.vercel.capabilities] source_url = "https://ai-gateway.vercel.sh/v1/models" @@ -47,3 +49,97 @@ source_url = "https://ai.google.dev/gemini-api/docs/media-resolution" maximum_tokens_per_image = 2240 token_counts_approximate = true detail_token_budgets = { "unspecified" = 1120, "low" = 280, "medium" = 560, "high" = 1120, "ultra_high" = 2240 } + +[providers.google] +provider = "google" +id = "gemini-3.7-flash" +url = "https://ai.google.dev/gemini-api/docs/models/gemini-3.7-flash" +source_url = "https://ai.google.dev/gemini-api/docs/models/gemini-3.7-flash" +endpoints = [ + { id = "gemini-3.7-flash", input = "text", source_url = "https://ai.google.dev/gemini-api/docs/models/gemini-3.7-flash" }, +] +deprecated = true + +[providers.google.token_pricing] +source_url = "https://ai.google.dev/gemini-api/docs/pricing" +unit = "usd_per_token" +scope = "Regular Standard paid-tier input/output/cache-read token rates. Context-cache storage per hour, grounding tools and alternate service tiers are excluded. Deprecated model ID redirects to Gemini 3.8 Flash under the native API." +input = "0.0000015" +output = "0.0000075" +input_cache_read = "0.00000015" + +[providers.google.capabilities] +source_url = "https://ai.google.dev/gemini-api/docs/models/gemini-3.7-flash" +image_input = true +reasoning = true +tools = true +structured_output = true + +[providers.google.limits] +source_url = "https://ai.google.dev/gemini-api/docs/models/gemini-3.7-flash" +context_tokens = 1048576 +max_output_tokens = 65536 + +[providers.openrouter] +provider = "openrouter" +id = "google/gemini-3.7-flash" +url = "https://openrouter.ai/google/gemini-3.7-flash" +source_url = "https://openrouter.ai/google/gemini-3.7-flash" +endpoints = [ + { id = "google/gemini-3.7-flash", input = "text", source_url = "https://openrouter.ai/api/v1/models" }, +] + +[providers.openrouter.token_pricing] +source_url = "https://openrouter.ai/google/gemini-3.7-flash" +unit = "usd_per_token" +scope = "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. Context-cache storage per hour is excluded." +input = "0.0000015" +output = "0.0000075" +input_cache_read = "0.00000015" + +[providers.openrouter.capabilities] +source_url = "https://openrouter.ai/api/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.openrouter.limits] +source_url = "https://openrouter.ai/api/v1/models" +context_tokens = 1048576 +max_output_tokens = 65536 + +[provider_coverage.google] +disposition = "listed" +source_url = "https://ai.google.dev/gemini-api/docs/models/gemini-3.7-flash" + +[provider_coverage.vercel] +disposition = "listed" +source_url = "https://vercel.com/ai-gateway/models/gemini-3.7-flash" + +[provider_coverage.openrouter] +disposition = "listed" +source_url = "https://openrouter.ai/google/gemini-3.7-flash" + +[providers.grida] +provider = "grida" +id = "google/gemini-3.7-flash" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "google/gemini-3.7-flash", "input" = "text", "source_url" = "https://gateway.grida.ai/v1/models", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "input_tokens", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.0000015" }, + { "id" = "cached_input_tokens", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.00000015" }, + { "id" = "output_tokens", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.0000075" }, + ] } }, +] +capabilities = { "source_url" = "https://gateway.grida.ai/v1/models", "image_input" = true, "tools" = true, "reasoning" = true, "structured_output" = true } +limits = { "source_url" = "https://gateway.grida.ai/v1/models", "context_tokens" = 1000000, "max_output_tokens" = 65535 } + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" + +[provider_coverage.fal] +disposition = "excluded" +source_url = "https://fal.ai/models" +reason = "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." diff --git a/models/google/gemini-3.8-flash/card.toml b/models/google/gemini-3.8-flash/card.toml index 74959cc..89ca70a 100644 --- a/models/google/gemini-3.8-flash/card.toml +++ b/models/google/gemini-3.8-flash/card.toml @@ -1,6 +1,7 @@ id = "google/gemini-3.8-flash" section = "text.catalog" vendor = "google" +reference_provider = "google" label = "Gemini 3.8 Flash" multimodal = true @@ -24,11 +25,12 @@ endpoints = [ ] [providers.vercel.token_pricing] -source_url = "https://ai-gateway.vercel.sh/v1/models" +source_url = "https://vercel.com/ai-gateway/models/gemini-3.8-flash" unit = "usd_per_token" -input = "0.00000075" -output = "0.00000375" -input_cache_read = "0.000000075" +scope = "Regular Standard global token rates from the model page list-cost tiers; alternate service tiers and regional premiums are excluded." +input = "0.0000015" +output = "0.0000075" +input_cache_read = "0.00000015" [providers.vercel.capabilities] source_url = "https://ai-gateway.vercel.sh/v1/models" @@ -47,3 +49,96 @@ source_url = "https://ai.google.dev/gemini-api/docs/media-resolution" maximum_tokens_per_image = 2240 token_counts_approximate = true detail_token_budgets = { "unspecified" = 1120, "low" = 280, "medium" = 560, "high" = 1120, "ultra_high" = 2240 } + +[providers.google] +provider = "google" +id = "gemini-3.8-flash" +url = "https://ai.google.dev/gemini-api/docs/models/gemini-3.8-flash" +source_url = "https://ai.google.dev/gemini-api/docs/models/gemini-3.8-flash" +endpoints = [ + { id = "gemini-3.8-flash", input = "text", source_url = "https://ai.google.dev/gemini-api/docs/models/gemini-3.8-flash" }, +] + +[providers.google.token_pricing] +source_url = "https://ai.google.dev/gemini-api/docs/pricing" +unit = "usd_per_token" +scope = "Regular Standard paid-tier input/output/cache-read token rates. Context-cache storage per hour, grounding tools and alternate service tiers are excluded." +input = "0.0000015" +output = "0.0000075" +input_cache_read = "0.00000015" + +[providers.google.capabilities] +source_url = "https://ai.google.dev/gemini-api/docs/models/gemini-3.8-flash" +image_input = true +reasoning = true +tools = true +structured_output = true + +[providers.google.limits] +source_url = "https://ai.google.dev/gemini-api/docs/models/gemini-3.8-flash" +context_tokens = 1048576 +max_output_tokens = 65536 + +[providers.openrouter] +provider = "openrouter" +id = "google/gemini-3.8-flash" +url = "https://openrouter.ai/google/gemini-3.8-flash" +source_url = "https://openrouter.ai/google/gemini-3.8-flash" +endpoints = [ + { id = "google/gemini-3.8-flash", input = "text", source_url = "https://openrouter.ai/api/v1/models" }, +] + +[providers.openrouter.token_pricing] +source_url = "https://openrouter.ai/google/gemini-3.8-flash" +unit = "usd_per_token" +scope = "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded. Context-cache storage per hour is excluded." +input = "0.0000015" +output = "0.0000075" +input_cache_read = "0.00000015" + +[providers.openrouter.capabilities] +source_url = "https://openrouter.ai/api/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.openrouter.limits] +source_url = "https://openrouter.ai/api/v1/models" +context_tokens = 1048576 +max_output_tokens = 65536 + +[provider_coverage.google] +disposition = "listed" +source_url = "https://ai.google.dev/gemini-api/docs/models/gemini-3.8-flash" + +[provider_coverage.vercel] +disposition = "listed" +source_url = "https://vercel.com/ai-gateway/models/gemini-3.8-flash" + +[provider_coverage.openrouter] +disposition = "listed" +source_url = "https://openrouter.ai/google/gemini-3.8-flash" + +[providers.grida] +provider = "grida" +id = "google/gemini-3.8-flash" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "google/gemini-3.8-flash", "input" = "text", "source_url" = "https://gateway.grida.ai/v1/models", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "input_tokens", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.0000015" }, + { "id" = "cached_input_tokens", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.00000015" }, + { "id" = "output_tokens", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.0000075" }, + ] } }, +] +capabilities = { "source_url" = "https://gateway.grida.ai/v1/models", "image_input" = true, "tools" = true, "reasoning" = true, "structured_output" = true } +limits = { "source_url" = "https://gateway.grida.ai/v1/models", "context_tokens" = 1000000, "max_output_tokens" = 65535 } + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" + +[provider_coverage.fal] +disposition = "excluded" +source_url = "https://fal.ai/models" +reason = "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." diff --git a/models/google/gemini-embedding-2/card.toml b/models/google/gemini-embedding-2/card.toml index ee8db82..0a3e0e6 100644 --- a/models/google/gemini-embedding-2/card.toml +++ b/models/google/gemini-embedding-2/card.toml @@ -1,3 +1,5 @@ +pricing = { "type" = "per_token_input", "input" = 0.2, "image_input" = 0.45, "audio_input" = 6.5, "video_input" = 12, "source_url" = "https://ai.google.dev/gemini-api/docs/pricing" } +reference_provider = "google" id = "google/gemini-embedding-2" section = "embedding.models" @@ -9,7 +11,6 @@ category = "embedding/multimodal" dimensions = 1536 normalized = true multimodal = true -pricing = { type = "per_token_input", input = 0.15 } avg_cost_usd = 2e-05 url = "https://ai.google.dev/gemini-api/docs/models/gemini-embedding-2-preview" @@ -17,3 +18,30 @@ url = "https://ai.google.dev/gemini-api/docs/models/gemini-embedding-2-preview" date = "2026-03-10" basis = "model" source_url = "https://ai.google.dev/gemini-api/docs/changelog" + +[providers.google] +provider = "google" +id = "gemini-embedding-2" +source_url = "https://ai.google.dev/gemini-api/docs/pricing" +url = "https://ai.google.dev/gemini-api/docs/pricing" +pricing = { "type" = "per_token_input", "input" = 0.2, "image_input" = 0.45, "audio_input" = 6.5, "video_input" = 12, "source_url" = "https://ai.google.dev/gemini-api/docs/pricing" } + +[providers.vercel] +provider = "vercel" +id = "google/gemini-embedding-2" +source_url = "https://vercel.com/ai-gateway/models/gemini-embedding-2" +url = "https://vercel.com/ai-gateway/models/gemini-embedding-2" +pricing = { "type" = "per_token_input", "input" = 0.2, "audio_input" = 6.5, "source_url" = "https://vercel.com/ai-gateway/models/gemini-embedding-2" } + +[providers.openrouter] +provider = "openrouter" +id = "google/gemini-embedding-2" +source_url = "https://openrouter.ai/api/v1/embeddings/models" +url = "https://openrouter.ai/api/v1/embeddings/models" +pricing = { "type" = "per_token_input", "input" = 0.2, "image_input" = 0.45, "audio_input" = 6.5, "source_url" = "https://openrouter.ai/api/v1/embeddings/models" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/api/v1/embeddings/models" } +vercel = { "disposition" = "listed", "source_url" = "https://vercel.com/ai-gateway/models/gemini-embedding-2" } +fal = { "disposition" = "excluded", "source_url" = "https://fal.ai/models", "reason" = "Embedding models are outside this catalogue's fal media-provider coverage." } +google = { "disposition" = "listed", "source_url" = "https://ai.google.dev/gemini-api/docs/pricing" } diff --git a/models/google/lyria-3-pro/card.toml b/models/google/lyria-3-pro/card.toml index 19f0939..b284185 100644 --- a/models/google/lyria-3-pro/card.toml +++ b/models/google/lyria-3-pro/card.toml @@ -1,3 +1,4 @@ +reference_provider = "google" id = "google/lyria-3-pro" section = "audio.music.models" @@ -26,3 +27,30 @@ formats = ["mp3"] sample_rate_hz = 48_000 channels = 2 duration = { mode = "up_to", max_seconds = 180 } + +[providers.google] +provider = "google" +id = "lyria-3-pro-preview" +source_url = "https://ai.google.dev/gemini-api/docs/pricing" +url = "https://ai.google.dev/gemini-api/docs/pricing" +pricing = { "type" = "per_run_flat", "usd" = 0.08, "source_url" = "https://ai.google.dev/gemini-api/docs/pricing" } + +[providers.fal] +provider = "fal" +id = "fal-ai/lyria3/pro" +source_url = "https://fal.ai/models/fal-ai/lyria3/pro" +url = "https://fal.ai/models/fal-ai/lyria3/pro" +pricing = { "type" = "per_run_flat", "usd" = 0.08, "source_url" = "https://fal.ai/models/fal-ai/lyria3/pro" } + +[providers.openrouter] +provider = "openrouter" +id = "google/lyria-3-pro-preview" +source_url = "https://openrouter.ai/google/lyria-3-pro-preview" +url = "https://openrouter.ai/google/lyria-3-pro-preview" +pricing = { "type" = "per_run_flat", "usd" = 0.08, "source_url" = "https://openrouter.ai/google/lyria-3-pro-preview" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/google/lyria-3-pro-preview" } +vercel = { "disposition" = "not_listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models", "reason" = "No matching model/version is listed in the inspected public Gateway model catalogue." } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/lyria3/pro" } +google = { "disposition" = "listed", "source_url" = "https://ai.google.dev/gemini-api/docs/pricing" } diff --git a/models/google/lyria-3/card.toml b/models/google/lyria-3/card.toml index a059f6c..0f800db 100644 --- a/models/google/lyria-3/card.toml +++ b/models/google/lyria-3/card.toml @@ -1,3 +1,4 @@ +reference_provider = "google" id = "google/lyria-3" section = "audio.music.models" @@ -26,3 +27,30 @@ formats = ["mp3"] sample_rate_hz = 48_000 channels = 2 duration = { mode = "fixed", seconds = 30 } + +[providers.google] +provider = "google" +id = "lyria-3-clip-preview" +source_url = "https://ai.google.dev/gemini-api/docs/pricing" +url = "https://ai.google.dev/gemini-api/docs/pricing" +pricing = { "type" = "per_run_flat", "usd" = 0.04, "source_url" = "https://ai.google.dev/gemini-api/docs/pricing" } + +[providers.fal] +provider = "fal" +id = "fal-ai/lyria3" +source_url = "https://fal.ai/models/fal-ai/lyria3" +url = "https://fal.ai/models/fal-ai/lyria3" +pricing = { "type" = "per_run_flat", "usd" = 0.04, "source_url" = "https://fal.ai/models/fal-ai/lyria3" } + +[providers.openrouter] +provider = "openrouter" +id = "google/lyria-3-clip-preview" +source_url = "https://openrouter.ai/google/lyria-3-clip-preview" +url = "https://openrouter.ai/google/lyria-3-clip-preview" +pricing = { "type" = "per_run_flat", "usd" = 0.04, "source_url" = "https://openrouter.ai/google/lyria-3-clip-preview" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/google/lyria-3-clip-preview" } +vercel = { "disposition" = "not_listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models", "reason" = "No matching model/version is listed in the inspected public Gateway model catalogue." } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/lyria3" } +google = { "disposition" = "listed", "source_url" = "https://ai.google.dev/gemini-api/docs/pricing" } diff --git a/models/google/veo-3.1-fast/card.toml b/models/google/veo-3.1-fast/card.toml index 6bd05dc..5321945 100644 --- a/models/google/veo-3.1-fast/card.toml +++ b/models/google/veo-3.1-fast/card.toml @@ -1,3 +1,4 @@ +reference_provider = "google" id = "google/veo-3.1-fast" section = "video.models" @@ -76,3 +77,54 @@ source_url = "https://fal.ai/models/fal-ai/veo3.1/fast/image-to-video/api" "resolution" = { "enum" = ["720p", "1080p", "4k"], "type" = "string" } "safety_tolerance" = { "enum" = ["1", "2", "3", "4", "5", "6"], "type" = "string" } "seed" = { "type" = "integer" } + +[providers.google] +provider = "google" +id = "veo-3.1-fast-generate-preview" +source_url = "https://ai.google.dev/gemini-api/docs/pricing" +url = "https://ai.google.dev/gemini-api/docs/pricing" +pricing = { "type" = "per_second", "usd_per_second" = { "720p" = { "audio" = 0.1 }, "1080p" = { "audio" = 0.12 }, "4k" = { "audio" = 0.3 } }, "source_url" = "https://ai.google.dev/gemini-api/docs/pricing" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/api/v1/videos/models" } +vercel = { "disposition" = "listed", "source_url" = "https://vercel.com/ai-gateway/models/veo-3.1-fast-generate-001" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/veo3.1/fast/image-to-video" } +google = { "disposition" = "listed", "source_url" = "https://ai.google.dev/gemini-api/docs/pricing" } + +[providers.openrouter] +provider = "openrouter" +id = "google/veo-3.1-fast" +source_url = "https://openrouter.ai/api/v1/videos/models" +url = "https://openrouter.ai/api/v1/videos/models" +pricing = { "type" = "provider_skus", "skus" = { "duration_seconds_with_audio" = "0.12", "duration_seconds_with_audio_4k" = "0.30", "duration_seconds_without_audio" = "0.10", "duration_seconds_with_audio_720p" = "0.10", "duration_seconds_without_audio_4k" = "0.25", "duration_seconds_without_audio_720p" = "0.08" }, "source_unit_notes" = "duration_seconds: USD/second; video_tokens: USD/token; cents_per: cents per named unit", "source_url" = "https://openrouter.ai/api/v1/videos/models" } +endpoints = [ + { "id" = "google/veo-3.1-fast", "source_url" = "https://openrouter.ai/api/v1/videos/models", "parameters" = { "resolution" = { "enum" = [ + "720p", + "1080p", + "4K", + ] }, "duration" = { "type" = "integer", "enum" = [ + 4, + 6, + 8, + ] }, "aspect_ratio" = { "type" = "string", "enum" = [ + "16:9", + "9:16", + ] } }, "input" = "text" }, +] + +[providers.grida] +provider = "grida" +id = "google/veo-3.1-fast" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "video.google.veo-3.1-fast.image", "operation" = "video.google.veo-3.1-fast.image", "input" = "image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/video.google.veo-3.1-fast.image.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", "interface" = "videos", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.15" }, + ] } }, + { "id" = "video.google.veo-3.1-fast.text", "operation" = "video.google.veo-3.1-fast.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/video.google.veo-3.1-fast.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", "interface" = "videos", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.15" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" diff --git a/models/google/veo-3.1-lite/card.toml b/models/google/veo-3.1-lite/card.toml index a8e7d8a..8817748 100644 --- a/models/google/veo-3.1-lite/card.toml +++ b/models/google/veo-3.1-lite/card.toml @@ -1,3 +1,4 @@ +reference_provider = "google" id = "google/veo-3.1-lite" section = "video.models" @@ -74,3 +75,53 @@ source_url = "https://fal.ai/models/fal-ai/veo3.1/lite/image-to-video/api" "resolution" = { "enum" = ["720p", "1080p"], "type" = "string" } "safety_tolerance" = { "enum" = ["1", "2", "3", "4", "5", "6"], "type" = "string" } "seed" = { "type" = "integer" } + +[providers.google] +provider = "google" +id = "veo-3.1-lite-generate-preview" +source_url = "https://ai.google.dev/gemini-api/docs/pricing" +url = "https://ai.google.dev/gemini-api/docs/pricing" +pricing = { "type" = "per_second", "usd_per_second" = { "720p" = { "audio" = 0.05 }, "1080p" = { "audio" = 0.08 } }, "source_url" = "https://ai.google.dev/gemini-api/docs/pricing" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/api/v1/videos/models" } +vercel = { "disposition" = "listed", "source_url" = "https://vercel.com/ai-gateway/models/veo-3.1-lite-generate-001" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/veo3.1/lite/image-to-video" } +google = { "disposition" = "listed", "source_url" = "https://ai.google.dev/gemini-api/docs/pricing" } + +[providers.openrouter] +provider = "openrouter" +id = "google/veo-3.1-lite" +source_url = "https://openrouter.ai/api/v1/videos/models" +url = "https://openrouter.ai/api/v1/videos/models" +pricing = { "type" = "provider_skus", "skus" = { "duration_seconds_with_audio" = "0.08", "duration_seconds_without_audio" = "0.05", "duration_seconds_with_audio_720p" = "0.05", "duration_seconds_without_audio_720p" = "0.03" }, "source_unit_notes" = "duration_seconds: USD/second; video_tokens: USD/token; cents_per: cents per named unit", "source_url" = "https://openrouter.ai/api/v1/videos/models" } +endpoints = [ + { "id" = "google/veo-3.1-lite", "source_url" = "https://openrouter.ai/api/v1/videos/models", "parameters" = { "resolution" = { "enum" = [ + "720p", + "1080p", + ] }, "duration" = { "type" = "integer", "enum" = [ + 8, + 4, + 6, + ] }, "aspect_ratio" = { "type" = "string", "enum" = [ + "16:9", + "9:16", + ] } }, "input" = "text" }, +] + +[providers.grida] +provider = "grida" +id = "google/veo-3.1-lite" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "video.google.veo-3.1-lite.image", "operation" = "video.google.veo-3.1-lite.image", "input" = "image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/video.google.veo-3.1-lite.image.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", "interface" = "videos", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.05" }, + ] } }, + { "id" = "video.google.veo-3.1-lite.text", "operation" = "video.google.veo-3.1-lite.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/video.google.veo-3.1-lite.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", "interface" = "videos", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.05" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" diff --git a/models/google/veo-3.1/card.toml b/models/google/veo-3.1/card.toml index 5d7d54c..952d094 100644 --- a/models/google/veo-3.1/card.toml +++ b/models/google/veo-3.1/card.toml @@ -1,3 +1,4 @@ +reference_provider = "google" id = "google/veo-3.1" section = "video.models" @@ -87,3 +88,33 @@ source_url = "https://fal.ai/models/fal-ai/veo3.1/image-to-video/api" "resolution" = { "enum" = ["720p", "1080p", "4k"], "type" = "string" } "safety_tolerance" = { "enum" = ["1", "2", "3", "4", "5", "6"], "type" = "string" } "seed" = { "type" = "integer" } + +[providers.google] +provider = "google" +id = "veo-3.1-generate-preview" +source_url = "https://ai.google.dev/gemini-api/docs/pricing" +url = "https://ai.google.dev/gemini-api/docs/pricing" +pricing = { "type" = "per_second", "usd_per_second" = { "720p" = { "audio" = 0.4 }, "1080p" = { "audio" = 0.4 }, "4k" = { "audio" = 0.6 } }, "source_url" = "https://ai.google.dev/gemini-api/docs/pricing" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/google/veo-3.1" } +vercel = { "disposition" = "listed", "source_url" = "https://vercel.com/ai-gateway/models/veo-3.1-generate-001" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/veo3.1/image-to-video" } +google = { "disposition" = "listed", "source_url" = "https://ai.google.dev/gemini-api/docs/pricing" } + +[providers.grida] +provider = "grida" +id = "google/veo-3.1" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "video.google.veo-3.1.image", "operation" = "video.google.veo-3.1.image", "input" = "image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/video.google.veo-3.1.image.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", "interface" = "videos", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.4" }, + ] } }, + { "id" = "video.google.veo-3.1.text", "operation" = "video.google.veo-3.1.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/video.google.veo-3.1.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", "interface" = "videos", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.4" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" diff --git a/models/meta/muse-image-1.0/card.toml b/models/meta/muse-image-1.0/card.toml index 95f1e34..947f96b 100644 --- a/models/meta/muse-image-1.0/card.toml +++ b/models/meta/muse-image-1.0/card.toml @@ -1,3 +1,4 @@ +reference_provider = "meta" id = "meta/muse-image-1.0" section = "image.models" null_keys = ["styles", "sizes", "constraints"] @@ -27,3 +28,27 @@ id = "meta/muse-image/text-to-image" pricing = { type = "per_image_flat", usd = 0.01 } avg_cost_usd = 0.01 url = "https://fal.ai/models/meta/muse-image/text-to-image" + +[providers.meta] +provider = "meta" +id = "muse-image-1.0" +source_url = "https://dev.meta.ai/docs/image-generation" +url = "https://dev.meta.ai/docs/image-generation" +pricing = { "type" = "per_image_flat", "usd" = 0.01, "billing_quantity" = "successfully_generated_returned_images", "source_url" = "https://dev.meta.ai/docs/image-generation" } + + +[providers.openrouter] +provider = "openrouter" +id = "meta/muse-image" +url = "https://openrouter.ai/meta/muse-image" +source_url = "https://openrouter.ai/api/v1/models/meta/muse-image/endpoints" +pricing = { "type" = "per_token", "image_input" = 2.39520958083832, "output" = 2.39520958083832, "source_url" = "https://openrouter.ai/api/v1/models/meta/muse-image/endpoints" } +qualifications = [ + { "source_url" = "https://openrouter.ai/api/v1/images/models/meta/muse-image/endpoints", "notes" = "The model is listed in image discovery, but image-specific endpoint metadata is empty. Published token meters come from general endpoint metadata; image parameter parity is not inferred." }, +] + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/api/v1/models/meta/muse-image/endpoints" } +vercel = { "disposition" = "listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/meta/muse-image/text-to-image" } +meta = { "disposition" = "listed", "source_url" = "https://dev.meta.ai/docs/image-generation" } diff --git a/models/microsoft/trellis-2/card.toml b/models/microsoft/trellis-2/card.toml index e34a219..07f7dea 100644 --- a/models/microsoft/trellis-2/card.toml +++ b/models/microsoft/trellis-2/card.toml @@ -16,6 +16,19 @@ date = "2025-12-16" basis = "model" source_url = "https://huggingface.co/microsoft/TRELLIS.2-4B" +[distribution] +source_url = "https://github.com/microsoft/TRELLIS.2" + +[distribution.code] +repository_url = "https://github.com/microsoft/TRELLIS.2" +license = { name = "MIT", url = "https://github.com/microsoft/TRELLIS.2/blob/main/LICENSE" } + +[[distribution.weights]] +id = "microsoft/TRELLIS.2-4B" +url = "https://huggingface.co/microsoft/TRELLIS.2-4B" +access = "public" +license = { name = "MIT", url = "https://huggingface.co/microsoft/TRELLIS.2-4B" } + [pricing] type = "per_generation_by_resolution" default_resolution = "1024" @@ -57,3 +70,23 @@ source_url = "https://fal.ai/models/fal-ai/trellis-2/api" "uv_unwrap_global_iterations" = { "type" = "integer", "maximum" = 10, "minimum" = 1 } "uv_unwrap_refine_iterations" = { "type" = "integer", "maximum" = 10, "minimum" = 0 } "uv_unwrap_smooth_strength" = { "type" = "number", "maximum" = 10, "minimum" = 0 } + +[provider_coverage] +openrouter = { "disposition" = "not_listed", "source_url" = "https://openrouter.ai/api/v1/models", "reason" = "No matching model/version is listed in the inspected public model catalogue." } +vercel = { "disposition" = "not_listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models", "reason" = "No matching model/version is listed in the inspected public Gateway model catalogue." } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/trellis-2" } +microsoft = { "disposition" = "not_listed", "source_url" = "https://github.com/microsoft/TRELLIS.2", "reason" = "The official release distributes code and weights; it does not document a Microsoft-hosted inference API for this model." } + +[providers.grida] +provider = "grida" +id = "fal-ai/trellis-2" +url = "https://gateway.grida.ai/v1/endpoints" +endpoints = [ + { "id" = "three-d.fal-ai.trellis-2.image", "operation" = "three-d.fal-ai.trellis-2.image", "input" = "image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.fal-ai.trellis-2.image.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", "interface" = "endpoints", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/endpoints", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.05" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/endpoints" diff --git a/models/nightmareai/real-esrgan/card.toml b/models/nightmareai/real-esrgan/card.toml index 92f98fe..ce4a31f 100644 --- a/models/nightmareai/real-esrgan/card.toml +++ b/models/nightmareai/real-esrgan/card.toml @@ -10,3 +10,12 @@ cost_usd = 0.002 date = "2021-07-22" basis = "model" source_url = "https://github.com/xinntao/Real-ESRGAN/releases/tag/v0.1.0" + +[provider_coverage] +openrouter = { "disposition" = "not_listed", "source_url" = "https://openrouter.ai/api/v1/models", "reason" = "No matching model/version is listed in the inspected public model catalogue." } +vercel = { "disposition" = "not_listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models", "reason" = "No matching model/version is listed in the inspected public Gateway model catalogue." } +fal = { "disposition" = "not_listed", "source_url" = "https://fal.ai/models", "reason" = "This card identifies a specific hosted implementation; no identical implementation/version was verified in the public media catalogue." } + +[distribution] +source_url = "https://github.com/xinntao/Real-ESRGAN" +code = { "repository_url" = "https://github.com/xinntao/Real-ESRGAN" } diff --git a/models/openai/gpt-5.5-pro/card.toml b/models/openai/gpt-5.5-pro/card.toml index 4028861..d185690 100644 --- a/models/openai/gpt-5.5-pro/card.toml +++ b/models/openai/gpt-5.5-pro/card.toml @@ -1,6 +1,7 @@ id = "openai/gpt-5.5-pro" section = "text.catalog" vendor = "openai" +reference_provider = "openai" label = "GPT-5.5 Pro" multimodal = true @@ -24,8 +25,9 @@ endpoints = [ ] [providers.vercel.token_pricing] -source_url = "https://ai-gateway.vercel.sh/v1/models" +source_url = "https://vercel.com/ai-gateway/models/gpt-5.5-pro" unit = "usd_per_token" +scope = "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration." input = "0.00003" output = "0.00018" tiers = [ @@ -46,3 +48,103 @@ structured_output = true source_url = "https://ai-gateway.vercel.sh/v1/models" context_tokens = 1000000 max_output_tokens = 128000 + +[providers.openai] +provider = "openai" +id = "gpt-5.5-pro" +url = "https://developers.openai.com/api/docs/models/gpt-5.5-pro" +source_url = "https://developers.openai.com/api/docs/models/gpt-5.5-pro" +endpoints = [ + { id = "gpt-5.5-pro", input = "text", source_url = "https://developers.openai.com/api/docs/models/gpt-5.5-pro" }, +] + +[providers.openai.token_pricing] +source_url = "https://developers.openai.com/api/docs/models/gpt-5.5-pro" +unit = "usd_per_token" +scope = "Standard text rates for prompts up to 272,000 input tokens; cached input has no discount. Longer-context rates are not recorded here." +input = "0.00003" +output = "0.00018" + +[providers.openai.capabilities] +source_url = "https://developers.openai.com/api/docs/models/gpt-5.5-pro" +image_input = true +reasoning = true +tools = true +structured_output = true +streaming = false + +[providers.openai.limits] +source_url = "https://developers.openai.com/api/docs/models/gpt-5.5-pro" +context_tokens = 1050000 +max_output_tokens = 128000 + +[providers.openrouter] +provider = "openrouter" +id = "openai/gpt-5.5-pro" +url = "https://openrouter.ai/openai/gpt-5.5-pro" +source_url = "https://openrouter.ai/openai/gpt-5.5-pro" +endpoints = [ + { id = "openai/gpt-5.5-pro", input = "text", source_url = "https://openrouter.ai/api/v1/models" }, +] + +[providers.openrouter.token_pricing] +source_url = "https://openrouter.ai/openai/gpt-5.5-pro" +unit = "usd_per_token" +scope = "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded." +input = "0.00003" +output = "0.00018" +tiers = [ + { meter = "input", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.00003" }, + { meter = "input", minimum_input_tokens = 272000, usd_per_token = "0.00006" }, + { meter = "output", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.00018" }, + { meter = "output", minimum_input_tokens = 272000, usd_per_token = "0.00027" }, +] + +[providers.openrouter.capabilities] +source_url = "https://openrouter.ai/api/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.openrouter.limits] +source_url = "https://openrouter.ai/api/v1/models" +context_tokens = 1050000 +max_output_tokens = 128000 + +[provider_coverage.openai] +disposition = "listed" +source_url = "https://developers.openai.com/api/docs/models/gpt-5.5-pro" + +[provider_coverage.vercel] +disposition = "listed" +source_url = "https://vercel.com/ai-gateway/models/gpt-5.5-pro" + +[provider_coverage.openrouter] +disposition = "listed" +source_url = "https://openrouter.ai/openai/gpt-5.5-pro" + +[providers.grida] +provider = "grida" +id = "openai/gpt-5.5-pro" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "openai/gpt-5.5-pro", "input" = "text", "source_url" = "https://gateway.grida.ai/v1/models", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "input_tokens.0", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "272000" }, "usd_per_unit" = "0.00003" }, + { "id" = "input_tokens.1", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "272000" }, "usd_per_unit" = "0.00006" }, + { "id" = "cached_input_tokens", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.00003" }, + { "id" = "output_tokens.0", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "272000" }, "usd_per_unit" = "0.00018" }, + { "id" = "output_tokens.1", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "272000" }, "usd_per_unit" = "0.00027" }, + ] } }, +] +capabilities = { "source_url" = "https://gateway.grida.ai/v1/models", "image_input" = true, "tools" = true, "reasoning" = true, "structured_output" = true } +limits = { "source_url" = "https://gateway.grida.ai/v1/models", "context_tokens" = 1000000, "max_output_tokens" = 128000 } + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" + +[provider_coverage.fal] +disposition = "excluded" +source_url = "https://fal.ai/models" +reason = "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." diff --git a/models/openai/gpt-5.5/card.toml b/models/openai/gpt-5.5/card.toml index f14006b..dc8e376 100644 --- a/models/openai/gpt-5.5/card.toml +++ b/models/openai/gpt-5.5/card.toml @@ -1,6 +1,7 @@ id = "openai/gpt-5.5" section = "text.catalog" vendor = "openai" +reference_provider = "openai" label = "GPT-5.5" multimodal = true @@ -33,8 +34,9 @@ endpoints = [ ] [providers.vercel.token_pricing] -source_url = "https://ai-gateway.vercel.sh/v1/models" +source_url = "https://vercel.com/ai-gateway/models/gpt-5.5" unit = "usd_per_token" +scope = "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration." input = "0.000005" output = "0.00003" input_cache_read = "0.0000005" @@ -67,3 +69,116 @@ token_rounding = "ceil" maximum_patch_count = 30000 detail_patch_budgets = { "high" = 2500, "original" = 10000, "auto" = 10000 } detail_maximum_edges = { "low" = 512, "high" = 2048, "original" = 6000, "auto" = 6000 } + +[providers.openai] +provider = "openai" +id = "gpt-5.5" +url = "https://developers.openai.com/api/docs/models/gpt-5.5" +source_url = "https://developers.openai.com/api/docs/models/gpt-5.5" +endpoints = [ + { id = "gpt-5.5", input = "text", source_url = "https://developers.openai.com/api/docs/models/gpt-5.5" }, +] + +[providers.openai.token_pricing] +source_url = "https://developers.openai.com/api/docs/models/gpt-5.5" +unit = "usd_per_token" +scope = "Standard synchronous text token rates; optional tools and other service tiers are excluded." +input = "0.000005" +output = "0.00003" +input_cache_read = "0.0000005" +tiers = [ + { meter = "input", minimum_input_tokens = 0, maximum_input_tokens = 272001, usd_per_token = "0.000005" }, + { meter = "input", minimum_input_tokens = 272001, usd_per_token = "0.000010" }, + { meter = "output", minimum_input_tokens = 0, maximum_input_tokens = 272001, usd_per_token = "0.00003" }, + { meter = "output", minimum_input_tokens = 272001, usd_per_token = "0.000045" }, + { meter = "input_cache_read", minimum_input_tokens = 0, maximum_input_tokens = 272001, usd_per_token = "0.0000005" }, + { meter = "input_cache_read", minimum_input_tokens = 272001, usd_per_token = "0.0000010" }, +] + +[providers.openai.capabilities] +source_url = "https://developers.openai.com/api/docs/models/gpt-5.5" +image_input = true +reasoning = true +tools = true +structured_output = true +streaming = true + +[providers.openai.limits] +source_url = "https://developers.openai.com/api/docs/models/gpt-5.5" +context_tokens = 1050000 +max_output_tokens = 128000 + +[providers.openrouter] +provider = "openrouter" +id = "openai/gpt-5.5" +url = "https://openrouter.ai/openai/gpt-5.5" +source_url = "https://openrouter.ai/openai/gpt-5.5" +endpoints = [ + { id = "openai/gpt-5.5", input = "text", source_url = "https://openrouter.ai/api/v1/models" }, +] + +[providers.openrouter.token_pricing] +source_url = "https://openrouter.ai/openai/gpt-5.5" +unit = "usd_per_token" +scope = "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded." +input = "0.000005" +output = "0.00003" +input_cache_read = "0.0000005" +tiers = [ + { meter = "input", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.000005" }, + { meter = "input", minimum_input_tokens = 272000, usd_per_token = "0.00001" }, + { meter = "output", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.00003" }, + { meter = "output", minimum_input_tokens = 272000, usd_per_token = "0.000045" }, + { meter = "input_cache_read", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.0000005" }, + { meter = "input_cache_read", minimum_input_tokens = 272000, usd_per_token = "0.000001" }, +] + +[providers.openrouter.capabilities] +source_url = "https://openrouter.ai/api/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.openrouter.limits] +source_url = "https://openrouter.ai/api/v1/models" +context_tokens = 1050000 +max_output_tokens = 128000 + +[provider_coverage.openai] +disposition = "listed" +source_url = "https://developers.openai.com/api/docs/models/gpt-5.5" + +[provider_coverage.vercel] +disposition = "listed" +source_url = "https://vercel.com/ai-gateway/models/gpt-5.5" + +[provider_coverage.openrouter] +disposition = "listed" +source_url = "https://openrouter.ai/openai/gpt-5.5" + +[providers.grida] +provider = "grida" +id = "openai/gpt-5.5" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "openai/gpt-5.5", "input" = "text", "source_url" = "https://gateway.grida.ai/v1/models", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "input_tokens.0", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "272000" }, "usd_per_unit" = "0.000005" }, + { "id" = "input_tokens.1", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "272000" }, "usd_per_unit" = "0.00001" }, + { "id" = "cached_input_tokens.0", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "272000" }, "usd_per_unit" = "0.0000005" }, + { "id" = "cached_input_tokens.1", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "272000" }, "usd_per_unit" = "0.000001" }, + { "id" = "output_tokens.0", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "272000" }, "usd_per_unit" = "0.00003" }, + { "id" = "output_tokens.1", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "272000" }, "usd_per_unit" = "0.000045" }, + ] } }, +] +capabilities = { "source_url" = "https://gateway.grida.ai/v1/models", "image_input" = true, "tools" = true, "reasoning" = true, "structured_output" = true } +limits = { "source_url" = "https://gateway.grida.ai/v1/models", "context_tokens" = 1000000, "max_output_tokens" = 128000 } + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" + +[provider_coverage.fal] +disposition = "excluded" +source_url = "https://fal.ai/models" +reason = "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." diff --git a/models/openai/gpt-5.6-luna/card.toml b/models/openai/gpt-5.6-luna/card.toml index b85bf4b..dab28ee 100644 --- a/models/openai/gpt-5.6-luna/card.toml +++ b/models/openai/gpt-5.6-luna/card.toml @@ -1,6 +1,7 @@ id = "openai/gpt-5.6-luna" section = "text.catalog" vendor = "openai" +reference_provider = "openai" label = "GPT-5.6 Luna" multimodal = true @@ -34,8 +35,9 @@ endpoints = [ ] [providers.vercel.token_pricing] -source_url = "https://ai-gateway.vercel.sh/v1/models" +source_url = "https://vercel.com/ai-gateway/models/gpt-5.6-luna" unit = "usd_per_token" +scope = "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration." input = "0.0000002" output = "0.0000012" input_cache_read = "0.00000002" @@ -71,3 +73,122 @@ token_rounding = "ceil" maximum_patch_count = 30000 detail_patch_budgets = { "high" = 2500 } detail_maximum_edges = { "low" = 512, "high" = 2048, "original" = 65535, "auto" = 65535 } + +[providers.openai] +provider = "openai" +id = "gpt-5.6-luna" +url = "https://developers.openai.com/api/docs/models/gpt-5.6-luna" +source_url = "https://developers.openai.com/api/docs/models/gpt-5.6-luna" +endpoints = [ + { id = "gpt-5.6-luna", input = "text", source_url = "https://developers.openai.com/api/docs/models/gpt-5.6-luna" }, +] + +[providers.openai.token_pricing] +source_url = "https://developers.openai.com/api/docs/models/gpt-5.6-luna" +unit = "usd_per_token" +scope = "Standard synchronous text token rates; optional tools and other service tiers are excluded." +input = "0.0000002" +output = "0.0000012" +input_cache_read = "0.00000002" +input_cache_write = "0.00000025" +tiers = [ + { meter = "input", minimum_input_tokens = 0, maximum_input_tokens = 272001, usd_per_token = "0.0000002" }, + { meter = "input", minimum_input_tokens = 272001, usd_per_token = "0.0000004" }, + { meter = "output", minimum_input_tokens = 0, maximum_input_tokens = 272001, usd_per_token = "0.0000012" }, + { meter = "output", minimum_input_tokens = 272001, usd_per_token = "0.00000180" }, + { meter = "input_cache_read", minimum_input_tokens = 0, maximum_input_tokens = 272001, usd_per_token = "0.00000002" }, + { meter = "input_cache_read", minimum_input_tokens = 272001, usd_per_token = "0.00000004" }, + { meter = "input_cache_write", minimum_input_tokens = 0, maximum_input_tokens = 272001, usd_per_token = "0.00000025" }, + { meter = "input_cache_write", minimum_input_tokens = 272001, usd_per_token = "0.00000050" }, +] + +[providers.openai.capabilities] +source_url = "https://developers.openai.com/api/docs/models/gpt-5.6-luna" +image_input = true +reasoning = true +tools = true +structured_output = true +streaming = true + +[providers.openai.limits] +source_url = "https://developers.openai.com/api/docs/models/gpt-5.6-luna" +context_tokens = 1050000 +max_output_tokens = 128000 + +[providers.openrouter] +provider = "openrouter" +id = "openai/gpt-5.6-luna" +url = "https://openrouter.ai/openai/gpt-5.6-luna" +source_url = "https://openrouter.ai/openai/gpt-5.6-luna" +endpoints = [ + { id = "openai/gpt-5.6-luna", input = "text", source_url = "https://openrouter.ai/api/v1/models" }, +] + +[providers.openrouter.token_pricing] +source_url = "https://openrouter.ai/openai/gpt-5.6-luna" +unit = "usd_per_token" +scope = "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded." +input = "0.0000002" +output = "0.0000012" +input_cache_read = "0.00000002" +input_cache_write = "0.00000025" +tiers = [ + { meter = "input", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.0000002" }, + { meter = "input", minimum_input_tokens = 272000, usd_per_token = "0.0000004" }, + { meter = "output", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.0000012" }, + { meter = "output", minimum_input_tokens = 272000, usd_per_token = "0.0000018" }, + { meter = "input_cache_read", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.00000002" }, + { meter = "input_cache_read", minimum_input_tokens = 272000, usd_per_token = "0.00000004" }, + { meter = "input_cache_write", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.00000025" }, + { meter = "input_cache_write", minimum_input_tokens = 272000, usd_per_token = "0.0000005" }, +] + +[providers.openrouter.capabilities] +source_url = "https://openrouter.ai/api/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.openrouter.limits] +source_url = "https://openrouter.ai/api/v1/models" +context_tokens = 1050000 +max_output_tokens = 128000 + +[provider_coverage.openai] +disposition = "listed" +source_url = "https://developers.openai.com/api/docs/models/gpt-5.6-luna" + +[provider_coverage.vercel] +disposition = "listed" +source_url = "https://vercel.com/ai-gateway/models/gpt-5.6-luna" + +[provider_coverage.openrouter] +disposition = "listed" +source_url = "https://openrouter.ai/openai/gpt-5.6-luna" + +[providers.grida] +provider = "grida" +id = "openai/gpt-5.6-luna" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "openai/gpt-5.6-luna", "input" = "text", "source_url" = "https://gateway.grida.ai/v1/models", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "input_tokens.0", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "272000" }, "usd_per_unit" = "0.0000002" }, + { "id" = "input_tokens.1", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "272000" }, "usd_per_unit" = "0.0000004" }, + { "id" = "cached_input_tokens.0", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "272000" }, "usd_per_unit" = "0.00000002" }, + { "id" = "cached_input_tokens.1", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "272000" }, "usd_per_unit" = "0.00000004" }, + { "id" = "output_tokens.0", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "272000" }, "usd_per_unit" = "0.0000012" }, + { "id" = "output_tokens.1", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "272000" }, "usd_per_unit" = "0.0000018" }, + ] } }, +] +capabilities = { "source_url" = "https://gateway.grida.ai/v1/models", "image_input" = true, "tools" = true, "reasoning" = true, "structured_output" = true } +limits = { "source_url" = "https://gateway.grida.ai/v1/models", "context_tokens" = 1050000, "max_output_tokens" = 128000 } + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" + +[provider_coverage.fal] +disposition = "excluded" +source_url = "https://fal.ai/models" +reason = "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." diff --git a/models/openai/gpt-5.6-sol/card.toml b/models/openai/gpt-5.6-sol/card.toml index 79c6176..c3ddb15 100644 --- a/models/openai/gpt-5.6-sol/card.toml +++ b/models/openai/gpt-5.6-sol/card.toml @@ -1,6 +1,7 @@ id = "openai/gpt-5.6-sol" section = "text.catalog" vendor = "openai" +reference_provider = "openai" label = "GPT-5.6 Sol" multimodal = true @@ -14,17 +15,6 @@ date = "2026-07-09" basis = "model" source_url = "https://openai.com/index/gpt-5-6/" -[cost] -input = 4 -output = 20 -cache_read = 0.4 -cache_write = 5 - -[cost.long_context] -input_tokens_above = 272_000 -input_multiplier = 2 -output_multiplier = 1.5 - [providers.vercel] provider = "vercel" id = "openai/gpt-5.6-sol" @@ -34,8 +24,9 @@ endpoints = [ ] [providers.vercel.token_pricing] -source_url = "https://ai-gateway.vercel.sh/v1/models" +source_url = "https://vercel.com/ai-gateway/models/gpt-5.6-sol" unit = "usd_per_token" +scope = "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration." input = "0.000004" output = "0.00002" input_cache_read = "0.0000004" @@ -71,3 +62,104 @@ token_rounding = "ceil" maximum_patch_count = 30000 detail_patch_budgets = { "high" = 2500 } detail_maximum_edges = { "low" = 512, "high" = 2048, "original" = 65535, "auto" = 65535 } + +[providers.openai] +provider = "openai" +id = "gpt-5.6-sol" +url = "https://developers.openai.com/api/docs/models/gpt-5.6-sol" +source_url = "https://developers.openai.com/api/docs/models/gpt-5.6-sol" +endpoints = [ + { id = "gpt-5.6-sol", input = "text", source_url = "https://developers.openai.com/api/docs/models/gpt-5.6-sol" }, +] + +[providers.openai.capabilities] +source_url = "https://developers.openai.com/api/docs/models/gpt-5.6-sol" +image_input = true +reasoning = true +tools = true +structured_output = true +streaming = true + +[providers.openai.limits] +source_url = "https://developers.openai.com/api/docs/models/gpt-5.6-sol" +context_tokens = 1050000 +max_output_tokens = 128000 + +[providers.openrouter] +provider = "openrouter" +id = "openai/gpt-5.6-sol" +url = "https://openrouter.ai/openai/gpt-5.6-sol" +source_url = "https://openrouter.ai/openai/gpt-5.6-sol" +endpoints = [ + { id = "openai/gpt-5.6-sol", input = "text", source_url = "https://openrouter.ai/api/v1/models" }, +] + +[providers.openrouter.token_pricing] +source_url = "https://openrouter.ai/openai/gpt-5.6-sol" +unit = "usd_per_token" +scope = "Regular Standard Azure endpoint token rates, also shown as list input/output/cache-read rates in the model page. Other endpoints and service tiers may differ." +input = "0.000004" +output = "0.00002" +input_cache_read = "0.0000004" +input_cache_write = "0.000005" +tiers = [ + { meter = "input", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.000004" }, + { meter = "input", minimum_input_tokens = 272000, usd_per_token = "0.000008" }, + { meter = "output", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.00002" }, + { meter = "output", minimum_input_tokens = 272000, usd_per_token = "0.00003" }, + { meter = "input_cache_read", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.0000004" }, + { meter = "input_cache_read", minimum_input_tokens = 272000, usd_per_token = "0.0000008" }, + { meter = "input_cache_write", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.000005" }, + { meter = "input_cache_write", minimum_input_tokens = 272000, usd_per_token = "0.00001" }, +] + +[providers.openrouter.capabilities] +source_url = "https://openrouter.ai/api/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.openrouter.limits] +source_url = "https://openrouter.ai/api/v1/models" +context_tokens = 1050000 +max_output_tokens = 128000 + +[provider_coverage.openai] +disposition = "listed" +reason = "Native model availability is verified; its published pricing is promotional, so an unqualified regular native price is not recorded." +source_url = "https://developers.openai.com/api/docs/models/gpt-5.6-sol" + +[provider_coverage.vercel] +disposition = "listed" +source_url = "https://vercel.com/ai-gateway/models/gpt-5.6-sol" + +[provider_coverage.openrouter] +disposition = "listed" +source_url = "https://openrouter.ai/openai/gpt-5.6-sol" + +[providers.grida] +provider = "grida" +id = "openai/gpt-5.6-sol" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "openai/gpt-5.6-sol", "input" = "text", "source_url" = "https://gateway.grida.ai/v1/models", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "input_tokens.0", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "272000" }, "usd_per_unit" = "0.000004" }, + { "id" = "input_tokens.1", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "272000" }, "usd_per_unit" = "0.000008" }, + { "id" = "cached_input_tokens.0", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "272000" }, "usd_per_unit" = "0.0000004" }, + { "id" = "cached_input_tokens.1", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "272000" }, "usd_per_unit" = "0.0000008" }, + { "id" = "output_tokens.0", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "272000" }, "usd_per_unit" = "0.00002" }, + { "id" = "output_tokens.1", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "272000" }, "usd_per_unit" = "0.00003" }, + ] } }, +] +capabilities = { "source_url" = "https://gateway.grida.ai/v1/models", "image_input" = true, "tools" = true, "reasoning" = true, "structured_output" = true } +limits = { "source_url" = "https://gateway.grida.ai/v1/models", "context_tokens" = 1050000, "max_output_tokens" = 128000 } + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" + +[provider_coverage.fal] +disposition = "excluded" +source_url = "https://fal.ai/models" +reason = "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." diff --git a/models/openai/gpt-5.6-terra/card.toml b/models/openai/gpt-5.6-terra/card.toml index 53437ce..bf39619 100644 --- a/models/openai/gpt-5.6-terra/card.toml +++ b/models/openai/gpt-5.6-terra/card.toml @@ -1,6 +1,7 @@ id = "openai/gpt-5.6-terra" section = "text.catalog" vendor = "openai" +reference_provider = "openai" label = "GPT-5.6 Terra" multimodal = true @@ -34,8 +35,9 @@ endpoints = [ ] [providers.vercel.token_pricing] -source_url = "https://ai-gateway.vercel.sh/v1/models" +source_url = "https://vercel.com/ai-gateway/models/gpt-5.6-terra" unit = "usd_per_token" +scope = "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration." input = "0.000002" output = "0.000012" input_cache_read = "0.0000002" @@ -71,3 +73,122 @@ token_rounding = "ceil" maximum_patch_count = 30000 detail_patch_budgets = { "high" = 2500 } detail_maximum_edges = { "low" = 512, "high" = 2048, "original" = 65535, "auto" = 65535 } + +[providers.openai] +provider = "openai" +id = "gpt-5.6-terra" +url = "https://developers.openai.com/api/docs/models/gpt-5.6-terra" +source_url = "https://developers.openai.com/api/docs/models/gpt-5.6-terra" +endpoints = [ + { id = "gpt-5.6-terra", input = "text", source_url = "https://developers.openai.com/api/docs/models/gpt-5.6-terra" }, +] + +[providers.openai.token_pricing] +source_url = "https://developers.openai.com/api/docs/models/gpt-5.6-terra" +unit = "usd_per_token" +scope = "Standard synchronous text token rates; optional tools and other service tiers are excluded." +input = "0.000002" +output = "0.000012" +input_cache_read = "0.0000002" +input_cache_write = "0.0000025" +tiers = [ + { meter = "input", minimum_input_tokens = 0, maximum_input_tokens = 272001, usd_per_token = "0.000002" }, + { meter = "input", minimum_input_tokens = 272001, usd_per_token = "0.000004" }, + { meter = "output", minimum_input_tokens = 0, maximum_input_tokens = 272001, usd_per_token = "0.000012" }, + { meter = "output", minimum_input_tokens = 272001, usd_per_token = "0.0000180" }, + { meter = "input_cache_read", minimum_input_tokens = 0, maximum_input_tokens = 272001, usd_per_token = "0.0000002" }, + { meter = "input_cache_read", minimum_input_tokens = 272001, usd_per_token = "0.0000004" }, + { meter = "input_cache_write", minimum_input_tokens = 0, maximum_input_tokens = 272001, usd_per_token = "0.0000025" }, + { meter = "input_cache_write", minimum_input_tokens = 272001, usd_per_token = "0.0000050" }, +] + +[providers.openai.capabilities] +source_url = "https://developers.openai.com/api/docs/models/gpt-5.6-terra" +image_input = true +reasoning = true +tools = true +structured_output = true +streaming = true + +[providers.openai.limits] +source_url = "https://developers.openai.com/api/docs/models/gpt-5.6-terra" +context_tokens = 1050000 +max_output_tokens = 128000 + +[providers.openrouter] +provider = "openrouter" +id = "openai/gpt-5.6-terra" +url = "https://openrouter.ai/openai/gpt-5.6-terra" +source_url = "https://openrouter.ai/openai/gpt-5.6-terra" +endpoints = [ + { id = "openai/gpt-5.6-terra", input = "text", source_url = "https://openrouter.ai/api/v1/models" }, +] + +[providers.openrouter.token_pricing] +source_url = "https://openrouter.ai/openai/gpt-5.6-terra" +unit = "usd_per_token" +scope = "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded." +input = "0.000002" +output = "0.000012" +input_cache_read = "0.0000002" +input_cache_write = "0.0000025" +tiers = [ + { meter = "input", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.000002" }, + { meter = "input", minimum_input_tokens = 272000, usd_per_token = "0.000004" }, + { meter = "output", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.000012" }, + { meter = "output", minimum_input_tokens = 272000, usd_per_token = "0.000018" }, + { meter = "input_cache_read", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.0000002" }, + { meter = "input_cache_read", minimum_input_tokens = 272000, usd_per_token = "0.0000004" }, + { meter = "input_cache_write", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.0000025" }, + { meter = "input_cache_write", minimum_input_tokens = 272000, usd_per_token = "0.000005" }, +] + +[providers.openrouter.capabilities] +source_url = "https://openrouter.ai/api/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.openrouter.limits] +source_url = "https://openrouter.ai/api/v1/models" +context_tokens = 1050000 +max_output_tokens = 128000 + +[provider_coverage.openai] +disposition = "listed" +source_url = "https://developers.openai.com/api/docs/models/gpt-5.6-terra" + +[provider_coverage.vercel] +disposition = "listed" +source_url = "https://vercel.com/ai-gateway/models/gpt-5.6-terra" + +[provider_coverage.openrouter] +disposition = "listed" +source_url = "https://openrouter.ai/openai/gpt-5.6-terra" + +[providers.grida] +provider = "grida" +id = "openai/gpt-5.6-terra" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "openai/gpt-5.6-terra", "input" = "text", "source_url" = "https://gateway.grida.ai/v1/models", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "input_tokens.0", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "272000" }, "usd_per_unit" = "0.000002" }, + { "id" = "input_tokens.1", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "272000" }, "usd_per_unit" = "0.000004" }, + { "id" = "cached_input_tokens.0", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "272000" }, "usd_per_unit" = "0.0000002" }, + { "id" = "cached_input_tokens.1", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "272000" }, "usd_per_unit" = "0.0000004" }, + { "id" = "output_tokens.0", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "272000" }, "usd_per_unit" = "0.000012" }, + { "id" = "output_tokens.1", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "272000" }, "usd_per_unit" = "0.000018" }, + ] } }, +] +capabilities = { "source_url" = "https://gateway.grida.ai/v1/models", "image_input" = true, "tools" = true, "reasoning" = true, "structured_output" = true } +limits = { "source_url" = "https://gateway.grida.ai/v1/models", "context_tokens" = 1050000, "max_output_tokens" = 128000 } + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" + +[provider_coverage.fal] +disposition = "excluded" +source_url = "https://fal.ai/models" +reason = "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." diff --git a/models/openai/gpt-6-astra/card.toml b/models/openai/gpt-6-astra/card.toml index ce79565..2376cfc 100644 --- a/models/openai/gpt-6-astra/card.toml +++ b/models/openai/gpt-6-astra/card.toml @@ -1,6 +1,7 @@ id = "openai/gpt-6-astra" section = "text.catalog" vendor = "openai" +reference_provider = "openai" label = "GPT-6 Astra" multimodal = true @@ -34,8 +35,9 @@ endpoints = [ ] [providers.vercel.token_pricing] -source_url = "https://ai-gateway.vercel.sh/v1/models" +source_url = "https://vercel.com/ai-gateway/models/gpt-6-astra" unit = "usd_per_token" +scope = "Standard global token rates; alternate service tiers, optional tools and regional premiums are excluded. Cache-write rates, where present, use the default cache duration." input = "0.00001" output = "0.00005" input_cache_read = "0.000001" @@ -71,3 +73,122 @@ token_rounding = "ceil" maximum_patch_count = 30000 detail_patch_budgets = { "high" = 2500 } detail_maximum_edges = { "low" = 512, "high" = 65535, "original" = 65535, "auto" = 65535 } + +[providers.openai] +provider = "openai" +id = "gpt-6-astra" +url = "https://developers.openai.com/api/docs/models/gpt-6-astra" +source_url = "https://developers.openai.com/api/docs/models/gpt-6-astra" +endpoints = [ + { id = "gpt-6-astra", input = "text", source_url = "https://developers.openai.com/api/docs/models/gpt-6-astra" }, +] + +[providers.openai.token_pricing] +source_url = "https://developers.openai.com/api/docs/models/gpt-6-astra" +unit = "usd_per_token" +scope = "Standard synchronous text token rates; optional tools and other service tiers are excluded." +input = "0.00001" +output = "0.00005" +input_cache_read = "0.000001" +input_cache_write = "0.0000125" +tiers = [ + { meter = "input", minimum_input_tokens = 0, maximum_input_tokens = 272001, usd_per_token = "0.00001" }, + { meter = "input", minimum_input_tokens = 272001, usd_per_token = "0.00002" }, + { meter = "output", minimum_input_tokens = 0, maximum_input_tokens = 272001, usd_per_token = "0.00005" }, + { meter = "output", minimum_input_tokens = 272001, usd_per_token = "0.000075" }, + { meter = "input_cache_read", minimum_input_tokens = 0, maximum_input_tokens = 272001, usd_per_token = "0.000001" }, + { meter = "input_cache_read", minimum_input_tokens = 272001, usd_per_token = "0.000002" }, + { meter = "input_cache_write", minimum_input_tokens = 0, maximum_input_tokens = 272001, usd_per_token = "0.0000125" }, + { meter = "input_cache_write", minimum_input_tokens = 272001, usd_per_token = "0.0000250" }, +] + +[providers.openai.capabilities] +source_url = "https://developers.openai.com/api/docs/models/gpt-6-astra" +image_input = true +reasoning = true +tools = true +structured_output = true +streaming = true + +[providers.openai.limits] +source_url = "https://developers.openai.com/api/docs/models/gpt-6-astra" +context_tokens = 1050000 +max_output_tokens = 128000 + +[providers.openrouter] +provider = "openrouter" +id = "openai/gpt-6-astra" +url = "https://openrouter.ai/openai/gpt-6-astra" +source_url = "https://openrouter.ai/openai/gpt-6-astra" +endpoints = [ + { id = "openai/gpt-6-astra", input = "text", source_url = "https://openrouter.ai/api/v1/models" }, +] + +[providers.openrouter.token_pricing] +source_url = "https://openrouter.ai/openai/gpt-6-astra" +unit = "usd_per_token" +scope = "Standard route token rates; optional tools, regional premiums and alternate service tiers are excluded." +input = "0.00001" +output = "0.00005" +input_cache_read = "0.000001" +input_cache_write = "0.0000125" +tiers = [ + { meter = "input", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.00001" }, + { meter = "input", minimum_input_tokens = 272000, usd_per_token = "0.00002" }, + { meter = "output", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.00005" }, + { meter = "output", minimum_input_tokens = 272000, usd_per_token = "0.000075" }, + { meter = "input_cache_read", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.000001" }, + { meter = "input_cache_read", minimum_input_tokens = 272000, usd_per_token = "0.000002" }, + { meter = "input_cache_write", minimum_input_tokens = 0, maximum_input_tokens = 272000, usd_per_token = "0.0000125" }, + { meter = "input_cache_write", minimum_input_tokens = 272000, usd_per_token = "0.000025" }, +] + +[providers.openrouter.capabilities] +source_url = "https://openrouter.ai/api/v1/models" +image_input = true +tools = true +reasoning = true +structured_output = true + +[providers.openrouter.limits] +source_url = "https://openrouter.ai/api/v1/models" +context_tokens = 1050000 +max_output_tokens = 128000 + +[provider_coverage.openai] +disposition = "listed" +source_url = "https://developers.openai.com/api/docs/models/gpt-6-astra" + +[provider_coverage.vercel] +disposition = "listed" +source_url = "https://vercel.com/ai-gateway/models/gpt-6-astra" + +[provider_coverage.openrouter] +disposition = "listed" +source_url = "https://openrouter.ai/openai/gpt-6-astra" + +[providers.grida] +provider = "grida" +id = "openai/gpt-6-astra" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "openai/gpt-6-astra", "input" = "text", "source_url" = "https://gateway.grida.ai/v1/models", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "input_tokens.0", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "272001" }, "usd_per_unit" = "0.00001" }, + { "id" = "input_tokens.1", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "272001" }, "usd_per_unit" = "0.00002" }, + { "id" = "cached_input_tokens.0", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "272001" }, "usd_per_unit" = "0.000001" }, + { "id" = "cached_input_tokens.1", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "272001" }, "usd_per_unit" = "0.000002" }, + { "id" = "output_tokens.0", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "0", "max" = "272001" }, "usd_per_unit" = "0.00005" }, + { "id" = "output_tokens.1", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "quantity_range" = { "meter" = "total_input_tokens", "min" = "272001" }, "usd_per_unit" = "0.000075" }, + ] } }, +] +capabilities = { "source_url" = "https://gateway.grida.ai/v1/models", "image_input" = true, "tools" = true, "reasoning" = true, "structured_output" = true } +limits = { "source_url" = "https://gateway.grida.ai/v1/models", "context_tokens" = 1050000, "max_output_tokens" = 128000 } + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" + +[provider_coverage.fal] +disposition = "excluded" +source_url = "https://fal.ai/models" +reason = "The provider coverage policy includes fal for media models only; no text API compatibility is claimed." diff --git a/models/openai/gpt-image-1-mini/card.toml b/models/openai/gpt-image-1-mini/card.toml index 0a1c940..54ee8f0 100644 --- a/models/openai/gpt-image-1-mini/card.toml +++ b/models/openai/gpt-image-1-mini/card.toml @@ -1,3 +1,4 @@ +reference_provider = "openai" id = "openai/gpt-image-1-mini" section = "image.models" null_keys = ["styles", "constraints"] @@ -41,3 +42,50 @@ cached_input = 0.2 image_input = 2.5 cached_image_input = 0.25 output = 8 + +[providers.openai] +provider = "openai" +id = "gpt-image-1-mini" +source_url = "https://developers.openai.com/api/docs/models/gpt-image-1-mini" +url = "https://developers.openai.com/api/docs/models/gpt-image-1-mini" +pricing = { "input" = 2, "cached_input" = 0.2, "image_input" = 2.5, "cached_image_input" = 0.25, "output" = 8, "type" = "per_token", "source_url" = "https://developers.openai.com/api/docs/models/gpt-image-1-mini" } + +[providers.fal] +provider = "fal" +id = "fal-ai/gpt-image-1-mini" +source_url = "https://fal.ai/models/fal-ai/gpt-image-1-mini" +url = "https://fal.ai/models/fal-ai/gpt-image-1-mini" +pricing = { "type" = "per_image_tiered", "tiers" = { "low/1024x1024" = 0.005, "low/1024x1536" = 0.006, "low/1536x1024" = 0.006, "medium/1024x1024" = 0.011, "medium/1024x1536" = 0.015, "medium/1536x1024" = 0.015, "high/1024x1024" = 0.036, "high/1024x1536" = 0.052, "high/1536x1024" = 0.052 }, "input_text_usd_per_million" = 2, "total_rounding_usd" = 0.01, "source_url" = "https://fal.ai/models/fal-ai/gpt-image-1-mini" } +input = "text" + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-1-mini/endpoints" } +vercel = { "disposition" = "listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/gpt-image-1-mini" } +openai = { "disposition" = "listed", "source_url" = "https://developers.openai.com/api/docs/models/gpt-image-1-mini" } + +[providers.openrouter] +provider = "openrouter" +id = "openai/gpt-image-1-mini" +source_url = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-1-mini/endpoints" +url = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-1-mini/endpoints" +pricing = { "type" = "per_token", "image_input" = 2.5, "input" = 2.0, "output" = 8.0, "source_url" = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-1-mini/endpoints" } +transparent_background = true +references = { "id" = "openai/gpt-image-1-mini", "max" = 16 } +endpoints = [ + { "id" = "openai/gpt-image-1-mini", "source_url" = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-1-mini/endpoints", "parameters" = { "aspect_ratio" = { "enum" = [ + "1:1", + "3:2", + "2:3", + "auto", + ] }, "quality" = { "enum" = [ + "auto", + "low", + "medium", + "high", + ] }, "background" = { "enum" = [ + "auto", + "transparent", + "opaque", + ] }, "n" = { "type" = "integer", "minimum" = 1, "maximum" = 10 }, "input_references" = { "type" = "integer", "minimum" = 0, "maximum" = 16 }, "output_compression" = { "type" = "integer", "minimum" = 0, "maximum" = 100 } }, "input" = "text" }, +] diff --git a/models/openai/gpt-image-1.5/card.toml b/models/openai/gpt-image-1.5/card.toml index 74783b7..6b24ae7 100644 --- a/models/openai/gpt-image-1.5/card.toml +++ b/models/openai/gpt-image-1.5/card.toml @@ -1,3 +1,4 @@ +reference_provider = "openai" id = "openai/gpt-image-1.5" section = "image.models" null_keys = ["styles", "constraints"] @@ -41,3 +42,24 @@ cached_input = 1.25 image_input = 8 cached_image_input = 2 output = 32 + +[providers.openai] +provider = "openai" +id = "gpt-image-1.5" +source_url = "https://developers.openai.com/api/docs/models/gpt-image-1.5" +url = "https://developers.openai.com/api/docs/models/gpt-image-1.5" +pricing = { "input" = 5, "cached_input" = 1.25, "image_input" = 8, "cached_image_input" = 2, "output" = 32, "type" = "per_token", "source_url" = "https://developers.openai.com/api/docs/models/gpt-image-1.5" } + +[providers.fal] +provider = "fal" +id = "fal-ai/gpt-image-1.5" +source_url = "https://fal.ai/models/fal-ai/gpt-image-1.5" +url = "https://fal.ai/models/fal-ai/gpt-image-1.5" +pricing = { "type" = "per_image_tiered", "tiers" = { "low/1024x1024" = 0.009, "low/1024x1536" = 0.013, "low/1536x1024" = 0.013, "medium/1024x1024" = 0.034, "medium/1024x1536" = 0.051, "medium/1536x1024" = 0.05, "high/1024x1024" = 0.133, "high/1024x1536" = 0.2, "high/1536x1024" = 0.199 }, "input_text_usd_per_million" = 5, "text_output_usd_per_million" = 10, "source_url" = "https://fal.ai/models/fal-ai/gpt-image-1.5" } +input = "text" + +[provider_coverage] +openrouter = { "disposition" = "not_listed", "source_url" = "https://openrouter.ai/api/v1/images/models", "reason" = "No matching model/version is listed in the inspected public image model catalogue." } +vercel = { "disposition" = "listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/gpt-image-1.5" } +openai = { "disposition" = "listed", "source_url" = "https://developers.openai.com/api/docs/models/gpt-image-1.5" } diff --git a/models/openai/gpt-image-2.5-flare/card.toml b/models/openai/gpt-image-2.5-flare/card.toml index a487c1b..c7dfbd2 100644 --- a/models/openai/gpt-image-2.5-flare/card.toml +++ b/models/openai/gpt-image-2.5-flare/card.toml @@ -1,3 +1,4 @@ +reference_provider = "openai" id = "openai/gpt-image-2.5-flare" section = "image.models" null_keys = ["styles"] @@ -25,15 +26,6 @@ pricing = { type = "per_token", input = 5, cached_input = 1.25, output = 30 } avg_cost_usd = 0.055 url = "https://vercel.com/ai-gateway/models/gpt-image-2.5-flare" -[providers.openrouter] -provider = "openrouter" -id = "openai/gpt-image-2.5-flare" -pricing = { type = "per_token", input = 5, image_input = 8, output = 30 } -avg_cost_usd = 0.055 -url = "https://openrouter.ai/openai/gpt-image-2.5-flare" -transparent_background = false -references = { id = "openai/gpt-image-2.5-flare", max = 16 } - [providers.fal] endpoints = [ { "id" = "openai/gpt-image-2.5/flare/edit", "input" = "image", "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/edit/api", "parameters" = { "prompt" = { "type" = "string", "min_length" = 1, "max_length" = 32000 }, "num_images" = { "type" = "integer", "minimum" = 1, "maximum" = 10 }, "quality" = { "type" = "string", "enum" = [ @@ -154,3 +146,66 @@ examples = [ { "width" = 2560, "height" = 1440, "quality" = "max", "output_tokens" = 7370, "usd" = 0.2211, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, { "width" = 3840, "height" = 2160, "quality" = "max", "output_tokens" = 13342, "usd" = 0.40026, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" }, ] + +[providers.openai] +provider = "openai" +id = "gpt-image-2.5-flare" +source_url = "https://developers.openai.com/api/docs/models/gpt-image-2.5-flare" +url = "https://developers.openai.com/api/docs/models/gpt-image-2.5-flare" +pricing = { "type" = "per_token", "input" = 5, "cached_input" = 1.25, "output" = 30, "image_input" = 8, "cached_image_input" = 2, "source_url" = "https://developers.openai.com/api/docs/models/gpt-image-2.5-flare" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-flare/endpoints" } +vercel = { "disposition" = "listed", "source_url" = "https://vercel.com/ai-gateway/models/gpt-image-2.5-flare" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/flare/text-to-image" } +openai = { "disposition" = "listed", "source_url" = "https://developers.openai.com/api/docs/models/gpt-image-2.5-flare" } + +[providers.openrouter] +provider = "openrouter" +id = "openai/gpt-image-2.5-flare" +source_url = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-flare/endpoints" +url = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-flare/endpoints" +pricing = { "type" = "per_token", "image_input" = 8.0, "input" = 5.0, "output" = 30.0, "source_url" = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-flare/endpoints" } +transparent_background = true +references = { "id" = "openai/gpt-image-2.5-flare", "max" = 16 } +endpoints = [ + { "id" = "openai/gpt-image-2.5-flare", "source_url" = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-flare/endpoints", "parameters" = { "aspect_ratio" = { "enum" = [ + "1:1", + "3:2", + "2:3", + "4:3", + "3:4", + "16:9", + "9:16", + "21:9", + "auto", + ] }, "quality" = { "enum" = [ + "auto", + "low", + "medium", + "high", + "xhigh", + "max", + ] }, "background" = { "enum" = [ + "auto", + "transparent", + "opaque", + ] }, "n" = { "type" = "integer", "minimum" = 1, "maximum" = 10 }, "input_references" = { "type" = "integer", "minimum" = 0, "maximum" = 16 }, "output_compression" = { "type" = "integer", "minimum" = 0, "maximum" = 100 } }, "input" = "text" }, +] + +[providers.grida] +provider = "grida" +id = "openai/gpt-image-2.5-flare" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "image.openai.gpt-image-2.5-flare.references", "operation" = "image.openai.gpt-image-2.5-flare.references", "input" = "multi_image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.openai.gpt-image-2.5-flare.references.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_10", "interface" = "images.edits", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "1" }, + ] } }, + { "id" = "image.openai.gpt-image-2.5-flare.text", "operation" = "image.openai.gpt-image-2.5-flare.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.openai.gpt-image-2.5-flare.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_10", "interface" = "images.generations", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "1" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" diff --git a/models/openai/gpt-image-2.5-sunburst/card.toml b/models/openai/gpt-image-2.5-sunburst/card.toml index 719b92c..3c264f6 100644 --- a/models/openai/gpt-image-2.5-sunburst/card.toml +++ b/models/openai/gpt-image-2.5-sunburst/card.toml @@ -1,3 +1,4 @@ +reference_provider = "openai" id = "openai/gpt-image-2.5-sunburst" section = "image.models" null_keys = ["styles"] @@ -25,15 +26,6 @@ pricing = { type = "per_token", input = 5, cached_input = 1.25, output = 30 } avg_cost_usd = 0.055 url = "https://vercel.com/ai-gateway/models/gpt-image-2.5-sunburst" -[providers.openrouter] -provider = "openrouter" -id = "openai/gpt-image-2.5-sunburst" -pricing = { type = "per_token", input = 5, image_input = 8, output = 30 } -avg_cost_usd = 0.055 -url = "https://openrouter.ai/openai/gpt-image-2.5-sunburst" -transparent_background = false -references = { id = "openai/gpt-image-2.5-sunburst", max = 16 } - [providers.fal] endpoints = [ { "id" = "openai/gpt-image-2.5/sunburst/edit", "input" = "image", "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/edit/api", "parameters" = { "prompt" = { "type" = "string", "min_length" = 1, "max_length" = 32000 }, "num_images" = { "type" = "integer", "minimum" = 1, "maximum" = 10 }, "quality" = { "type" = "string", "enum" = [ @@ -154,3 +146,66 @@ examples = [ { "width" = 2560, "height" = 1440, "quality" = "max", "output_tokens" = 7370, "usd" = 0.2211, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, { "width" = 3840, "height" = 2160, "quality" = "max", "output_tokens" = 13342, "usd" = 0.40026, "usd_precision" = 5, "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" }, ] + +[providers.openai] +provider = "openai" +id = "gpt-image-2.5-sunburst" +source_url = "https://developers.openai.com/api/docs/models/gpt-image-2.5-sunburst" +url = "https://developers.openai.com/api/docs/models/gpt-image-2.5-sunburst" +pricing = { "type" = "per_token", "input" = 5, "cached_input" = 1.25, "output" = 30, "image_input" = 8, "cached_image_input" = 2, "source_url" = "https://developers.openai.com/api/docs/models/gpt-image-2.5-sunburst" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-sunburst/endpoints" } +vercel = { "disposition" = "listed", "source_url" = "https://vercel.com/ai-gateway/models/gpt-image-2.5-sunburst" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/openai/gpt-image-2.5/sunburst/text-to-image" } +openai = { "disposition" = "listed", "source_url" = "https://developers.openai.com/api/docs/models/gpt-image-2.5-sunburst" } + +[providers.openrouter] +provider = "openrouter" +id = "openai/gpt-image-2.5-sunburst" +source_url = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-sunburst/endpoints" +url = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-sunburst/endpoints" +pricing = { "type" = "per_token", "image_input" = 8.0, "input" = 5.0, "output" = 30.0, "source_url" = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-sunburst/endpoints" } +transparent_background = true +references = { "id" = "openai/gpt-image-2.5-sunburst", "max" = 16 } +endpoints = [ + { "id" = "openai/gpt-image-2.5-sunburst", "source_url" = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-sunburst/endpoints", "parameters" = { "aspect_ratio" = { "enum" = [ + "1:1", + "3:2", + "2:3", + "4:3", + "3:4", + "16:9", + "9:16", + "21:9", + "auto", + ] }, "quality" = { "enum" = [ + "auto", + "low", + "medium", + "high", + "xhigh", + "max", + ] }, "background" = { "enum" = [ + "auto", + "transparent", + "opaque", + ] }, "n" = { "type" = "integer", "minimum" = 1, "maximum" = 10 }, "input_references" = { "type" = "integer", "minimum" = 0, "maximum" = 16 }, "output_compression" = { "type" = "integer", "minimum" = 0, "maximum" = 100 } }, "input" = "text" }, +] + +[providers.grida] +provider = "grida" +id = "openai/gpt-image-2.5-sunburst" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "image.openai.gpt-image-2.5-sunburst.references", "operation" = "image.openai.gpt-image-2.5-sunburst.references", "input" = "multi_image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.openai.gpt-image-2.5-sunburst.references.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_10", "interface" = "images.edits", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "1" }, + ] } }, + { "id" = "image.openai.gpt-image-2.5-sunburst.text", "operation" = "image.openai.gpt-image-2.5-sunburst.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.openai.gpt-image-2.5-sunburst.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_10", "interface" = "images.generations", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "1" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" diff --git a/models/openai/gpt-image-2/card.toml b/models/openai/gpt-image-2/card.toml index 61e2c55..3e16bf3 100644 --- a/models/openai/gpt-image-2/card.toml +++ b/models/openai/gpt-image-2/card.toml @@ -1,3 +1,4 @@ +reference_provider = "openai" id = "openai/gpt-image-2" section = "image.models" null_keys = ["providers.vercel.transparent_background", "styles"] @@ -22,15 +23,6 @@ id = "openai/gpt-image-2" pricing = { type = "per_token", input = 5, output = 30 } avg_cost_usd = 0.053 -[providers.openrouter] -provider = "openrouter" -id = "openai/gpt-image-2" -pricing = { type = "per_token", input = 8, output = 8 } -avg_cost_usd = 0.05 -url = "https://openrouter.ai/openai/gpt-image-2" -transparent_background = false -references = { id = "openai/gpt-image-2", max = 16 } - [providers.fal] endpoints = [ { "id" = "openai/gpt-image-2", "input" = "text", "source_url" = "https://fal.ai/models/openai/gpt-image-2/api", "parameters" = { "prompt" = { "type" = "string", "min_length" = 2, "max_length" = 32000 }, "num_images" = { "type" = "integer", "minimum" = 1, "maximum" = 4 }, "quality" = { "type" = "string", "enum" = [ @@ -141,3 +133,63 @@ examples = [ { "width" = 1024, "height" = 1536, "quality" = "high", "output_tokens" = 5488, "usd" = 0.16464, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, { "width" = 1536, "height" = 1024, "quality" = "high", "output_tokens" = 5488, "usd" = 0.16464, "usd_precision" = 5, "source_url" = "https://developers.openai.com/api/docs/guides/image-generation" }, ] + +[providers.openai] +provider = "openai" +id = "gpt-image-2" +source_url = "https://developers.openai.com/api/docs/models/gpt-image-2" +url = "https://developers.openai.com/api/docs/models/gpt-image-2" +pricing = { "input" = 5, "cached_input" = 1.25, "image_input" = 8, "cached_image_input" = 2, "output" = 30, "type" = "per_token", "source_url" = "https://developers.openai.com/api/docs/models/gpt-image-2" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2/endpoints" } +vercel = { "disposition" = "listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/openai/gpt-image-2" } +openai = { "disposition" = "listed", "source_url" = "https://developers.openai.com/api/docs/models/gpt-image-2" } + +[providers.openrouter] +provider = "openrouter" +id = "openai/gpt-image-2" +source_url = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2/endpoints" +url = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2/endpoints" +pricing = { "type" = "per_token", "image_input" = 8.0, "input" = 5.0, "output" = 30.0, "source_url" = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2/endpoints" } +transparent_background = false +references = { "id" = "openai/gpt-image-2", "max" = 16 } +endpoints = [ + { "id" = "openai/gpt-image-2", "source_url" = "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2/endpoints", "parameters" = { "aspect_ratio" = { "enum" = [ + "1:1", + "3:2", + "2:3", + "4:3", + "3:4", + "16:9", + "9:16", + "21:9", + "auto", + ] }, "quality" = { "enum" = [ + "auto", + "low", + "medium", + "high", + ] }, "background" = { "enum" = [ + "auto", + "opaque", + ] }, "n" = { "type" = "integer", "minimum" = 1, "maximum" = 10 }, "input_references" = { "type" = "integer", "minimum" = 0, "maximum" = 16 }, "output_compression" = { "type" = "integer", "minimum" = 0, "maximum" = 100 } }, "input" = "text" }, +] + +[providers.grida] +provider = "grida" +id = "openai/gpt-image-2" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "image.openai.gpt-image-2.references", "operation" = "image.openai.gpt-image-2.references", "input" = "multi_image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.openai.gpt-image-2.references.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_4", "interface" = "images.edits", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "1" }, + ] } }, + { "id" = "image.openai.gpt-image-2.text", "operation" = "image.openai.gpt-image-2.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.openai.gpt-image-2.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_4", "interface" = "images.generations", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "1" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" diff --git a/models/recraft-ai/recraft-remove-background/card.toml b/models/recraft-ai/recraft-remove-background/card.toml index fded37a..ae78d9b 100644 --- a/models/recraft-ai/recraft-remove-background/card.toml +++ b/models/recraft-ai/recraft-remove-background/card.toml @@ -1,3 +1,4 @@ +reference_provider = "recraft" id = "recraft-ai/recraft-remove-background" section = "image_tools.models" null_keys = ["release.date"] @@ -10,3 +11,17 @@ cost_usd = 0.01 [release] basis = "provider_endpoint" source_url = "https://replicate.com/recraft-ai/recraft-remove-background/versions" + + +[providers.recraft] +provider = "recraft" +id = "/v1/images/removeBackground" +source_url = "https://www.recraft.ai/docs/api-reference/tools/remove-background" +url = "https://www.recraft.ai/docs/api-reference/tools/remove-background" +pricing = { "type" = "per_run_flat", "usd" = 0.01, "source_url" = "https://www.recraft.ai/docs/api-reference/tools/remove-background" } + +[provider_coverage] +openrouter = { "disposition" = "not_listed", "source_url" = "https://openrouter.ai/api/v1/models", "reason" = "No matching model/version is listed in the inspected public model catalogue." } +vercel = { "disposition" = "not_listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models", "reason" = "No matching model/version is listed in the inspected public Gateway model catalogue." } +fal = { "disposition" = "not_listed", "source_url" = "https://fal.ai/models", "reason" = "No matching model/version is listed in the inspected public media catalogue." } +recraft = { "disposition" = "listed", "source_url" = "https://www.recraft.ai/docs/api-reference/tools/remove-background" } diff --git a/models/recraft-ai/recraft-v3/card.toml b/models/recraft-ai/recraft-v3/card.toml index d18c416..13a18d4 100644 --- a/models/recraft-ai/recraft-v3/card.toml +++ b/models/recraft-ai/recraft-v3/card.toml @@ -1,3 +1,4 @@ +reference_provider = "recraft" id = "recraft/recraft-v3" section = "image.models" null_keys = ["styles", "sizes"] @@ -35,3 +36,16 @@ id = "fal-ai/recraft/v3/text-to-image" pricing = { type = "per_image_flat", usd = 0.04 } avg_cost_usd = 0.04 url = "https://fal.ai/models/fal-ai/recraft/v3/text-to-image" + +[providers.recraft] +provider = "recraft" +id = "recraftv3" +source_url = "https://www.recraft.ai/docs/api-reference/pricing" +url = "https://www.recraft.ai/docs/api-reference/pricing" +pricing = { "type" = "per_image_flat", "usd" = 0.04, "source_url" = "https://www.recraft.ai/docs/api-reference/pricing" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/recraft/recraft-v3" } +vercel = { "disposition" = "listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/recraft/v3/text-to-image" } +recraft = { "disposition" = "listed", "source_url" = "https://www.recraft.ai/docs/api-reference/pricing" } diff --git a/models/recraft-ai/recraft-v4.1/card.toml b/models/recraft-ai/recraft-v4.1/card.toml index aca9663..312ff4c 100644 --- a/models/recraft-ai/recraft-v4.1/card.toml +++ b/models/recraft-ai/recraft-v4.1/card.toml @@ -1,3 +1,4 @@ +reference_provider = "recraft" id = "recraft/recraft-v4.1" section = "image.models" null_keys = ["styles", "sizes"] @@ -55,3 +56,30 @@ source_url = "https://fal.ai/models/fal-ai/recraft/v4.1/text-to-image/api" "image_size.height" = { "maximum" = 14142, "type" = "integer", "minimum" = 1 } "image_size.width" = { "maximum" = 14142, "type" = "integer", "minimum" = 1 } "prompt" = { "min_length" = 1, "type" = "string", "max_length" = 10000 } + +[providers.recraft] +provider = "recraft" +id = "recraftv4_1" +source_url = "https://www.recraft.ai/docs/api-reference/pricing" +url = "https://www.recraft.ai/docs/api-reference/pricing" +pricing = { "type" = "per_image_flat", "usd" = 0.035, "source_url" = "https://www.recraft.ai/docs/api-reference/pricing" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/recraft/recraft-v4.1" } +vercel = { "disposition" = "listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/recraft/v4.1/text-to-image" } +recraft = { "disposition" = "listed", "source_url" = "https://www.recraft.ai/docs/api-reference/pricing" } + +[providers.grida] +provider = "grida" +id = "recraft/recraft-v4.1" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "image.recraft.recraft-v4.1.text", "operation" = "image.recraft.recraft-v4.1.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.recraft.recraft-v4.1.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_1", "interface" = "images.generations", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.035" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" diff --git a/models/tencent/hunyuan-3d/v3.1/pro/image-to-3d/card.toml b/models/tencent/hunyuan-3d/v3.1/pro/image-to-3d/card.toml index 8292d19..6321726 100644 --- a/models/tencent/hunyuan-3d/v3.1/pro/image-to-3d/card.toml +++ b/models/tencent/hunyuan-3d/v3.1/pro/image-to-3d/card.toml @@ -1,3 +1,4 @@ +reference_provider = "tencent" id = "fal-ai/hunyuan-3d/v3.1/pro/image-to-3d" section = "three_d.models" @@ -38,3 +39,39 @@ source_url = "https://fal.ai/models/fal-ai/hunyuan-3d/v3.1/pro/image-to-3d/api" "right_front_image_url" = { "type" = "string" } "right_image_url" = { "type" = "string" } "top_image_url" = { "type" = "string" } + +[provider_coverage] +openrouter = { "disposition" = "not_listed", "source_url" = "https://openrouter.ai/api/v1/models", "reason" = "No matching model/version is listed in the inspected public model catalogue." } +vercel = { "disposition" = "not_listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models", "reason" = "No matching model/version is listed in the inspected public Gateway model catalogue." } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/hunyuan-3d/v3.1/pro/image-to-3d" } +tencent = { "disposition" = "listed", "source_url" = "https://www.tencentcloud.com/document/api/1284/75540" } + +[providers.tencent] +provider = "tencent" +id = "SubmitHunyuanTo3DProJob" +source_url = "https://www.tencentcloud.com/document/api/1284/75540" +url = "https://www.tencentcloud.com/document/api/1284/75540" +endpoints = [ + { "id" = "SubmitHunyuanTo3DProJob", "source_url" = "https://www.tencentcloud.com/document/api/1284/75540", "parameters" = { "Model" = { "type" = "string", "enum" = [ + "3.1", + ] }, "Version" = { "type" = "string", "enum" = [ + "2023-09-01", + ] } }, "input" = "image" }, +] +qualifications = [ + { "source_url" = "https://www.tencentcloud.com/document/api/1284/75540", "notes" = "The native API supports version 3.1. Its regular USD price is not established by this API reference; no reseller price is substituted." }, +] + +[providers.grida] +provider = "grida" +id = "fal-ai/hunyuan-3d/v3.1/pro/image-to-3d" +url = "https://gateway.grida.ai/v1/endpoints" +endpoints = [ + { "id" = "three-d.fal-ai.hunyuan-3d.v3.1.pro.image-to-3d.image", "operation" = "three-d.fal-ai.hunyuan-3d.v3.1.pro.image-to-3d.image", "input" = "image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.fal-ai.hunyuan-3d.v3.1.pro.image-to-3d.image.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", "interface" = "endpoints", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/endpoints", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.015" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/endpoints" diff --git a/models/tencent/hunyuan-3d/v3.1/pro/text-to-3d/card.toml b/models/tencent/hunyuan-3d/v3.1/pro/text-to-3d/card.toml index 0821110..a6022b0 100644 --- a/models/tencent/hunyuan-3d/v3.1/pro/text-to-3d/card.toml +++ b/models/tencent/hunyuan-3d/v3.1/pro/text-to-3d/card.toml @@ -1,3 +1,4 @@ +reference_provider = "tencent" id = "fal-ai/hunyuan-3d/v3.1/pro/text-to-3d" section = "three_d.models" @@ -31,3 +32,39 @@ source_url = "https://fal.ai/models/fal-ai/hunyuan-3d/v3.1/pro/text-to-3d/api" "face_count" = { "minimum" = 40000, "type" = "integer", "maximum" = 1500000 } "generate_type" = { "enum" = ["Normal", "Geometry"], "type" = "string" } "prompt" = { "type" = "string", "max_length" = 1024 } + +[provider_coverage] +openrouter = { "disposition" = "not_listed", "source_url" = "https://openrouter.ai/api/v1/models", "reason" = "No matching model/version is listed in the inspected public model catalogue." } +vercel = { "disposition" = "not_listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models", "reason" = "No matching model/version is listed in the inspected public Gateway model catalogue." } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/fal-ai/hunyuan-3d/v3.1/pro/text-to-3d" } +tencent = { "disposition" = "listed", "source_url" = "https://www.tencentcloud.com/document/api/1284/75540" } + +[providers.tencent] +provider = "tencent" +id = "SubmitHunyuanTo3DProJob" +source_url = "https://www.tencentcloud.com/document/api/1284/75540" +url = "https://www.tencentcloud.com/document/api/1284/75540" +endpoints = [ + { "id" = "SubmitHunyuanTo3DProJob", "source_url" = "https://www.tencentcloud.com/document/api/1284/75540", "parameters" = { "Model" = { "type" = "string", "enum" = [ + "3.1", + ] }, "Version" = { "type" = "string", "enum" = [ + "2023-09-01", + ] } }, "input" = "text" }, +] +qualifications = [ + { "source_url" = "https://www.tencentcloud.com/document/api/1284/75540", "notes" = "The native API supports version 3.1. Its regular USD price is not established by this API reference; no reseller price is substituted." }, +] + +[providers.grida] +provider = "grida" +id = "fal-ai/hunyuan-3d/v3.1/pro/text-to-3d" +url = "https://gateway.grida.ai/v1/endpoints" +endpoints = [ + { "id" = "three-d.fal-ai.hunyuan-3d.v3.1.pro.text-to-3d.text", "operation" = "three-d.fal-ai.hunyuan-3d.v3.1.pro.text-to-3d.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.fal-ai.hunyuan-3d.v3.1.pro.text-to-3d.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", "interface" = "endpoints", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/endpoints", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.015" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/endpoints" diff --git a/models/tripo/h3.1/card.toml b/models/tripo/h3.1/card.toml index aaceb9e..d97d910 100644 --- a/models/tripo/h3.1/card.toml +++ b/models/tripo/h3.1/card.toml @@ -1,3 +1,4 @@ +reference_provider = "tripo" id = "tripo/h3.1" section = "three_d.model_generation.models" @@ -113,3 +114,41 @@ source_url = "https://developers.tripo3d.ai/en/docs/generation-multiview-to-mode "v3.0-20250812", "v2.5-20250123", ] } + +[providers.fal] +provider = "fal" +id = "tripo3d/h3.1/text-to-3d" +source_url = "https://fal.ai/models/tripo3d/h3.1/text-to-3d" +url = "https://fal.ai/models/tripo3d/h3.1/text-to-3d" +pricing = { "type" = "per_generation_credits", "usd_per_credit" = 0.01, "base_credits" = { "text" = 10, "image" = 20, "multiview" = 20 }, "texture_credits" = { "standard" = 10, "detailed" = 20 }, "detailed_geometry_credits" = 20, "quad_credits" = 5, "source_url" = "https://fal.ai/models/tripo3d/h3.1/text-to-3d" } +endpoints = [ + { "id" = "tripo3d/h3.1/text-to-3d", "source_url" = "https://fal.ai/models/tripo3d/h3.1/text-to-3d/api", "input" = "text" }, + { "id" = "tripo3d/h3.1/image-to-3d", "source_url" = "https://fal.ai/models/tripo3d/h3.1/image-to-3d/api", "input" = "image" }, + { "id" = "tripo3d/h3.1/multiview-to-3d", "source_url" = "https://fal.ai/models/tripo3d/h3.1/multiview-to-3d/api", "input" = "image" }, +] + +[provider_coverage] +openrouter = { "disposition" = "not_listed", "source_url" = "https://openrouter.ai/api/v1/models", "reason" = "No matching model/version is listed in the inspected public model catalogue." } +vercel = { "disposition" = "not_listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models", "reason" = "No matching model/version is listed in the inspected public Gateway model catalogue." } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/tripo3d/h3.1/text-to-3d" } +tripo = { "disposition" = "listed", "source_url" = "https://developers.tripo3d.ai/en/docs/generation-text-to-model/standard" } + +[providers.grida] +provider = "grida" +id = "tripo/h3.1" +url = "https://gateway.grida.ai/v1/endpoints" +endpoints = [ + { "id" = "three-d.tripo.h3.1.image", "operation" = "three-d.tripo.h3.1.image", "input" = "image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.h3.1.image.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", "interface" = "endpoints", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/endpoints", "currency" = "USD", "components" = [ + { "id" = "provider_credits", "meter" = "provider_credits", "unit" = "provider_credit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.01" }, + ] } }, + { "id" = "three-d.tripo.h3.1.multiview", "operation" = "three-d.tripo.h3.1.multiview", "input" = "multi_image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.h3.1.multiview.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", "interface" = "endpoints", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/endpoints", "currency" = "USD", "components" = [ + { "id" = "provider_credits", "meter" = "provider_credits", "unit" = "provider_credit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.01" }, + ] } }, + { "id" = "three-d.tripo.h3.1.text", "operation" = "three-d.tripo.h3.1.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.h3.1.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", "interface" = "endpoints", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/endpoints", "currency" = "USD", "components" = [ + { "id" = "provider_credits", "meter" = "provider_credits", "unit" = "provider_credit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.01" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/endpoints" diff --git a/models/tripo/p1/card.toml b/models/tripo/p1/card.toml index e707009..8ccf586 100644 --- a/models/tripo/p1/card.toml +++ b/models/tripo/p1/card.toml @@ -1,3 +1,4 @@ +reference_provider = "tripo" id = "tripo/p1" section = "three_d.model_generation.models" @@ -96,3 +97,36 @@ source_url = "https://developers.tripo3d.ai/en/docs/generation-multiview-to-mode "v3.0-20250812", "v2.5-20250123", ] } + +[providers.fal] +provider = "fal" +id = "tripo3d/p1/text-to-3d" +source_url = "https://fal.ai/models/tripo3d/p1/text-to-3d" +url = "https://fal.ai/models/tripo3d/p1/text-to-3d" +pricing = { "type" = "per_generation_credits", "usd_per_credit" = 0.01, "base_credits" = 40, "texture_credits" = 10, "source_url" = "https://fal.ai/models/tripo3d/p1/text-to-3d" } + +[provider_coverage] +openrouter = { "disposition" = "not_listed", "source_url" = "https://openrouter.ai/api/v1/models", "reason" = "No matching model/version is listed in the inspected public model catalogue." } +vercel = { "disposition" = "not_listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models", "reason" = "No matching model/version is listed in the inspected public Gateway model catalogue." } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/tripo3d/p1/text-to-3d" } +tripo = { "disposition" = "listed", "source_url" = "https://developers.tripo3d.ai/en/docs/generation-text-to-model/p" } + +[providers.grida] +provider = "grida" +id = "tripo/p1" +url = "https://gateway.grida.ai/v1/endpoints" +endpoints = [ + { "id" = "three-d.tripo.p1.image", "operation" = "three-d.tripo.p1.image", "input" = "image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.p1.image.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", "interface" = "endpoints", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/endpoints", "currency" = "USD", "components" = [ + { "id" = "provider_credits", "meter" = "provider_credits", "unit" = "provider_credit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.01" }, + ] } }, + { "id" = "three-d.tripo.p1.multiview", "operation" = "three-d.tripo.p1.multiview", "input" = "multi_image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.p1.multiview.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", "interface" = "endpoints", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/endpoints", "currency" = "USD", "components" = [ + { "id" = "provider_credits", "meter" = "provider_credits", "unit" = "provider_credit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.01" }, + ] } }, + { "id" = "three-d.tripo.p1.text", "operation" = "three-d.tripo.p1.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.p1.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", "interface" = "endpoints", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/endpoints", "currency" = "USD", "components" = [ + { "id" = "provider_credits", "meter" = "provider_credits", "unit" = "provider_credit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.01" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/endpoints" diff --git a/models/tripo/p2/card.toml b/models/tripo/p2/card.toml index 2d2983e..4b2ed19 100644 --- a/models/tripo/p2/card.toml +++ b/models/tripo/p2/card.toml @@ -1,3 +1,4 @@ +reference_provider = "tripo" id = "tripo/p2" section = "three_d.model_generation.models" @@ -99,3 +100,42 @@ source_url = "https://developers.tripo3d.ai/en/docs/generation-multiview-to-mode "v3.0-20250812", "v2.5-20250123", ] } + +[providers.fal] +provider = "fal" +id = "tripo3d/p2/text-to-3d" +url = "https://fal.ai/models/tripo3d/p2/text-to-3d" +source_url = "https://fal.ai/models/tripo3d/p2/text-to-3d/api" +qualifications = [ + { "source_url" = "https://fal.ai/models/tripo3d/p2/text-to-3d", "notes" = "The public endpoint documentation verifies P2 submission. No regular USD rate is published on the inspected endpoint page; direct-provider pricing is not substituted." }, +] +endpoints = [ + { "id" = "tripo3d/p2/text-to-3d", "source_url" = "https://fal.ai/models/tripo3d/p2/text-to-3d/api", "input" = "text" }, + { "id" = "tripo3d/p2/image-to-3d", "source_url" = "https://fal.ai/models/tripo3d/p2/image-to-3d/api", "input" = "image" }, +] + +[provider_coverage] +openrouter = { "disposition" = "not_listed", "source_url" = "https://openrouter.ai/api/v1/models", "reason" = "No matching model/version is listed in the inspected public model catalogue." } +vercel = { "disposition" = "not_listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models", "reason" = "No matching model/version is listed in the inspected public Gateway model catalogue." } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/tripo3d/p2/text-to-3d/api" } +tripo = { "disposition" = "listed", "source_url" = "https://developers.tripo3d.ai/en/docs/generation-text-to-model/p" } + +[providers.grida] +provider = "grida" +id = "tripo/p2" +url = "https://gateway.grida.ai/v1/endpoints" +endpoints = [ + { "id" = "three-d.tripo.p2.image", "operation" = "three-d.tripo.p2.image", "input" = "image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.p2.image.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", "interface" = "endpoints", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/endpoints", "currency" = "USD", "components" = [ + { "id" = "provider_credits", "meter" = "provider_credits", "unit" = "provider_credit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.01" }, + ] } }, + { "id" = "three-d.tripo.p2.multiview", "operation" = "three-d.tripo.p2.multiview", "input" = "multi_image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.p2.multiview.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", "interface" = "endpoints", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/endpoints", "currency" = "USD", "components" = [ + { "id" = "provider_credits", "meter" = "provider_credits", "unit" = "provider_credit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.01" }, + ] } }, + { "id" = "three-d.tripo.p2.text", "operation" = "three-d.tripo.p2.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.p2.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", "interface" = "endpoints", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/endpoints", "currency" = "USD", "components" = [ + { "id" = "provider_credits", "meter" = "provider_credits", "unit" = "provider_credit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.01" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/endpoints" diff --git a/models/tripo/rig-check/operation.toml b/models/tripo/rig-check/operation.toml index 0095218..b65e2d5 100644 --- a/models/tripo/rig-check/operation.toml +++ b/models/tripo/rig-check/operation.toml @@ -1,3 +1,4 @@ +reference_provider = "tripo" section = "three_d.rig_check.operation" feature = "rig-check" @@ -28,3 +29,23 @@ source_url = "https://developers.tripo3d.ai/en/docs/animations-rig-check" [endpoints.parameters] "input" = { "type" = "string" } + +[provider_coverage] +tripo = { disposition = "listed", source_url = "https://developers.tripo3d.ai/en/docs/animations-rig-check" } +openrouter = { disposition = "not_listed", source_url = "https://openrouter.ai/api/v1/models", reason = "No rig-check operation is listed in the inspected public model catalogue." } +vercel = { disposition = "not_listed", source_url = "https://ai-gateway.vercel.sh/v1/models", reason = "No rig-check operation is listed in the inspected public Gateway catalogue." } +fal = { disposition = "not_listed", source_url = "https://fal.ai/models", reason = "No matching Tripo rig-check operation is listed in the inspected public media catalogue." } + +[providers.grida] +provider = "grida" +id = "three-d.tripo.rig-check" +url = "https://gateway.grida.ai/v1/endpoints" +endpoints = [ + { "id" = "three-d.tripo.rig-check", "operation" = "three-d.tripo.rig-check", "input" = "asset", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.rig-check.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/rig_check_result", "interface" = "endpoints", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/endpoints", "currency" = "USD", "components" = [ + { "id" = "provider_credits", "meter" = "provider_credits", "unit" = "provider_credit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.01" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/endpoints" diff --git a/models/tripo/rig-v1.0/card.toml b/models/tripo/rig-v1.0/card.toml index 55bab35..e9737b4 100644 --- a/models/tripo/rig-v1.0/card.toml +++ b/models/tripo/rig-v1.0/card.toml @@ -1,3 +1,4 @@ +reference_provider = "tripo" id = "tripo/rig-v1.0" section = "three_d.rigging.models" null_keys = ["release.date"] @@ -35,3 +36,23 @@ source_url = "https://developers.tripo3d.ai/en/docs/animations-rig" "out_format" = { "type" = "string", "enum" = ["glb", "fbx"] } "rig_type" = { "type" = "string", "enum" = ["biped"] } "spec" = { "type" = "string", "enum" = ["tripo", "mixamo"] } + +[provider_coverage] +openrouter = { "disposition" = "not_listed", "source_url" = "https://openrouter.ai/api/v1/models", "reason" = "No matching model/version is listed in the inspected public model catalogue." } +vercel = { "disposition" = "not_listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models", "reason" = "No matching model/version is listed in the inspected public Gateway model catalogue." } +fal = { "disposition" = "not_listed", "source_url" = "https://fal.ai/models", "reason" = "No matching model/version is listed in the inspected public media catalogue." } +tripo = { "disposition" = "listed", "source_url" = "https://developers.tripo3d.ai/en/docs/animations-rig" } + +[providers.grida] +provider = "grida" +id = "tripo/rig-v1.0" +url = "https://gateway.grida.ai/v1/endpoints" +endpoints = [ + { "id" = "three-d.tripo.rig-v1.0.mesh", "operation" = "three-d.tripo.rig-v1.0.mesh", "input" = "asset", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.rig-v1.0.mesh.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", "interface" = "endpoints", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/endpoints", "currency" = "USD", "components" = [ + { "id" = "provider_credits", "meter" = "provider_credits", "unit" = "provider_credit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.01" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/endpoints" diff --git a/models/tripo/rig-v2.5/card.toml b/models/tripo/rig-v2.5/card.toml index c8f6981..cea1b23 100644 --- a/models/tripo/rig-v2.5/card.toml +++ b/models/tripo/rig-v2.5/card.toml @@ -1,3 +1,4 @@ +reference_provider = "tripo" id = "tripo/rig-v2.5" section = "three_d.rigging.models" null_keys = ["release.date"] @@ -42,3 +43,23 @@ source_url = "https://developers.tripo3d.ai/en/docs/animations-rig" "aquatic", ] } "spec" = { "type" = "string", "enum" = ["tripo", "mixamo"] } + +[provider_coverage] +openrouter = { "disposition" = "not_listed", "source_url" = "https://openrouter.ai/api/v1/models", "reason" = "No matching model/version is listed in the inspected public model catalogue." } +vercel = { "disposition" = "not_listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models", "reason" = "No matching model/version is listed in the inspected public Gateway model catalogue." } +fal = { "disposition" = "not_listed", "source_url" = "https://fal.ai/models", "reason" = "No matching model/version is listed in the inspected public media catalogue." } +tripo = { "disposition" = "listed", "source_url" = "https://developers.tripo3d.ai/en/docs/animations-rig" } + +[providers.grida] +provider = "grida" +id = "tripo/rig-v2.5" +url = "https://gateway.grida.ai/v1/endpoints" +endpoints = [ + { "id" = "three-d.tripo.rig-v2.5.mesh", "operation" = "three-d.tripo.rig-v2.5.mesh", "input" = "asset", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/three-d.tripo.rig-v2.5.mesh.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/glb_result", "interface" = "endpoints", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/endpoints", "currency" = "USD", "components" = [ + { "id" = "provider_credits", "meter" = "provider_credits", "unit" = "provider_credit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.01" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/endpoints" diff --git a/models/xai/grok-imagine-image-2.0/card.toml b/models/xai/grok-imagine-image-2.0/card.toml index c811660..5a55bcd 100644 --- a/models/xai/grok-imagine-image-2.0/card.toml +++ b/models/xai/grok-imagine-image-2.0/card.toml @@ -1,3 +1,4 @@ +reference_provider = "xai" id = "xai/grok-imagine-image-2.0" section = "image.models" null_keys = ["styles", "sizes"] @@ -126,3 +127,33 @@ source_url = "https://fal.ai/models/xai/grok-imagine-image/v2.0/text-to-image/ap "prompt" = { "max_length" = 8000, "type" = "string" } "quality" = { "type" = "string", "enum" = ["low", "medium"] } "resolution" = { "type" = "string", "enum" = ["1k", "2k"] } + +[providers.xai] +provider = "xai" +id = "grok-imagine-image-2.0" +source_url = "https://docs.x.ai/developers/models/grok-imagine-image-2.0" +url = "https://docs.x.ai/developers/models/grok-imagine-image-2.0" +pricing = { "type" = "per_image_tiered", "tiers" = { "low/1k" = 0.04, "low/1.5k" = 0.05, "low/2k" = 0.06, "medium/1k" = 0.06, "medium/1.5k" = 0.07, "medium/2k" = 0.08 }, "input_image_usd" = 0.01, "source_url" = "https://docs.x.ai/developers/models/grok-imagine-image-2.0" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/x-ai/grok-imagine-image-2.0" } +vercel = { "disposition" = "listed", "source_url" = "https://ai-gateway.vercel.sh/v1/models" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/xai/grok-imagine-image/v2.0/text-to-image" } +xai = { "disposition" = "listed", "source_url" = "https://docs.x.ai/developers/models/grok-imagine-image-2.0" } + +[providers.grida] +provider = "grida" +id = "xai/grok-imagine-image-2.0" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "image.xai.grok-imagine-image-2.0.references", "operation" = "image.xai.grok-imagine-image-2.0.references", "input" = "multi_image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.xai.grok-imagine-image-2.0.references.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_4", "interface" = "images.edits", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.01" }, + ] } }, + { "id" = "image.xai.grok-imagine-image-2.0.text", "operation" = "image.xai.grok-imagine-image-2.0.text", "input" = "text", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/image.xai.grok-imagine-image-2.0.text.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/ImageResponse_4", "interface" = "images.generations", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.01" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" diff --git a/models/xai/grok-imagine-video-1.5/card.toml b/models/xai/grok-imagine-video-1.5/card.toml index 1b1ffd1..ce57928 100644 --- a/models/xai/grok-imagine-video-1.5/card.toml +++ b/models/xai/grok-imagine-video-1.5/card.toml @@ -1,3 +1,4 @@ +reference_provider = "xai" id = "xai/grok-imagine-video-1.5" section = "video.models" @@ -59,3 +60,68 @@ source_url = "https://fal.ai/models/xai/grok-imagine-video/v1.5/image-to-video/a "image_url" = { "type" = "string" } "prompt" = { "max_length" = 4096, "type" = "string" } "resolution" = { "type" = "string", "enum" = ["480p", "720p", "1080p"] } + +[providers.xai] +provider = "xai" +id = "grok-imagine-video-1.5" +source_url = "https://docs.x.ai/developers/models/grok-imagine-video-1.5" +url = "https://docs.x.ai/developers/models/grok-imagine-video-1.5" +pricing = { "type" = "per_second", "usd_per_second" = { "480p" = 0.08, "720p" = 0.14, "1080p" = 0.25 }, "input_image_usd" = 0.01, "source_url" = "https://docs.x.ai/developers/models/grok-imagine-video-1.5" } + +[provider_coverage] +openrouter = { "disposition" = "listed", "source_url" = "https://openrouter.ai/api/v1/videos/models" } +vercel = { "disposition" = "listed", "source_url" = "https://vercel.com/ai-gateway/models/grok-imagine-video-1.5" } +fal = { "disposition" = "listed", "source_url" = "https://fal.ai/models/xai/grok-imagine-video/v1.5/image-to-video" } +xai = { "disposition" = "listed", "source_url" = "https://docs.x.ai/developers/models/grok-imagine-video-1.5" } + +[providers.openrouter] +provider = "openrouter" +id = "x-ai/grok-imagine-video-1.5" +source_url = "https://openrouter.ai/api/v1/videos/models" +url = "https://openrouter.ai/api/v1/videos/models" +pricing = { "type" = "provider_skus", "skus" = { "cents_per_image_input" = "1", "cents_per_video_output_second_480p" = "8", "cents_per_video_output_second_720p" = "14", "cents_per_video_output_second_1080p" = "25" }, "source_unit_notes" = "duration_seconds: USD/second; video_tokens: USD/token; cents_per: cents per named unit", "source_url" = "https://openrouter.ai/api/v1/videos/models" } +endpoints = [ + { "id" = "x-ai/grok-imagine-video-1.5", "source_url" = "https://openrouter.ai/api/v1/videos/models", "parameters" = { "resolution" = { "enum" = [ + "480p", + "720p", + "1080p", + ] }, "duration" = { "type" = "integer", "enum" = [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + ] }, "aspect_ratio" = { "type" = "string", "enum" = [ + "16:9", + "9:16", + "1:1", + "4:3", + "3:4", + "3:2", + "2:3", + ] } }, "input" = "text" }, +] + +[providers.grida] +provider = "grida" +id = "xai/grok-imagine-video-1.5" +url = "https://gateway.grida.ai/v1/models" +endpoints = [ + { "id" = "video.xai.grok-imagine-video-1.5.image", "operation" = "video.xai.grok-imagine-video-1.5.image", "input" = "image", "source_url" = "https://gateway.grida.ai/schemas/operations.json", "request_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/video.xai.grok-imagine-video-1.5.image.input", "result_schema_url" = "https://gateway.grida.ai/schemas/operations.json#/$defs/single_video_result", "interface" = "videos", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ + { "id" = "fal_output_units", "meter" = "fal_output_units", "unit" = "provider_unit", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.01" }, + ] } }, +] + +[provider_coverage.grida] +disposition = "listed" +source_url = "https://gateway.grida.ai/v1/models" From 66010f14da69538c9571225c0ada6dffe082106c Mon Sep 17 00:00:00 2001 From: Universe Date: Tue, 13 Oct 2026 21:07:00 +0900 Subject: [PATCH 7/8] Validate sourced provider qualifications --- catalogue/README.md | 8 ++++++-- catalogue/schemas/models.schema.json | 20 ++++++++++++++++++++ scripts/check.py | 8 ++++++++ tests/test_provider_coverage.py | 20 ++++++++++++++++++++ 4 files changed, 54 insertions(+), 2 deletions(-) diff --git a/catalogue/README.md b/catalogue/README.md index 867938f..86c8add 100644 --- a/catalogue/README.md +++ b/catalogue/README.md @@ -122,7 +122,9 @@ Every family, including embedding and the rig-check operation, may add a `providers` record without changing its existing ID or direct-provider fields. Each binding has exact `provider` and `id` values, an optional first-party `source_url`, and independently sourced serving facts. A verified binding can -omit an unknown regular price; omission never means free inference. +omit an unknown regular price; omission never means free inference. Optional +`qualifications` records nonempty `{ source_url, notes }` entries for unresolved +pricing or specification facts, without inventing a replacement value. Optional `reference_provider` names a real native API binding, or the existing direct `provider` when that card describes the native API already. Consumers may @@ -135,7 +137,9 @@ a native hosted API. This field records a sourced reference, not a provider regi - `listed` requires a binding or matching direct provider. - `not_listed` records verified absence from that provider's published catalogue. - `excluded` records an incompatible or unverifiable specification, identity or - pricing contract that makes a reliable listing inappropriate. + pricing contract that makes a reliable listing inappropriate, or an explicit + modality scope such as fal media-only coverage. A scope exclusion is not a claim + that the provider has no such model. The last two require a public, source-backed `reason` and cannot coexist with a binding for that provider. Do not use an exclusion for routing preference or diff --git a/catalogue/schemas/models.schema.json b/catalogue/schemas/models.schema.json index 103f7ff..53ec55d 100644 --- a/catalogue/schemas/models.schema.json +++ b/catalogue/schemas/models.schema.json @@ -1081,6 +1081,26 @@ }, "published_pricing": { "$ref": "#/$defs/published_pricing" + }, + "qualifications": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": false, + "required": ["source_url", "notes"], + "properties": { + "source_url": { + "type": "string", + "format": "uri", + "pattern": "^https://[^/]+(?:/|$)" + }, + "notes": { + "type": "string", + "minLength": 1 + } + } + } } } } diff --git a/scripts/check.py b/scripts/check.py index 7805cb9..11f5057 100644 --- a/scripts/check.py +++ b/scripts/check.py @@ -326,6 +326,14 @@ def provider_fact_errors(facts: dict[str, Any]) -> Iterator[str]: yield f"{where}/providers/{name}: binding has no id" if "source_url" in binding: yield from source_url_errors(binding["source_url"], f"{where}/providers/{name}") + qualifications = binding.get("qualifications", []) + if isinstance(qualifications, list): + for index, qualification in enumerate(qualifications): + if isinstance(qualification, dict): + yield from source_url_errors( + qualification.get("source_url"), + f"{where}/providers/{name}/qualifications/{index}", + ) direct = card.get("provider") reference = card.get("reference_provider") if isinstance(reference, str) and reference not in providers and reference != direct: diff --git a/tests/test_provider_coverage.py b/tests/test_provider_coverage.py index b10eb91..6de3e89 100644 --- a/tests/test_provider_coverage.py +++ b/tests/test_provider_coverage.py @@ -232,3 +232,23 @@ def edit(card): @pytest.mark.parametrize("number", [float("nan"), float("inf"), -float("inf")]) def test_price_conditions_are_finite_json(number): assert price_mutation(lambda price: price["components"][0].update(when={"properties": {"quantity": {"maximum": number}}})) + + +@pytest.mark.parametrize("qualification", [ + {"notes": "Regular rate is not established"}, + {"source_url": SOURCE}, + {"source_url": "https://token:secret@example.com", "notes": "Unknown rate"}, + {"source_url": SOURCE, "notes": "Unknown rate", "guessed_price": 1}, +]) +def test_unknown_provider_fact_qualifications_need_a_public_source(qualification): + def edit(card): + add_binding(card) + card["providers"]["example"]["qualifications"] = [qualification] + assert mutate(edit) + + +def test_verified_provider_can_qualify_missing_regular_price(): + def edit(card): + add_binding(card) + card["providers"]["example"]["qualifications"] = [{"source_url": SOURCE, "notes": "The public endpoint is documented but no regular rate is published."}] + assert mutate(edit) == [] From 655b97959d4f884c174b39eb02e6d70b96a14bce Mon Sep 17 00:00:00 2001 From: Universe Date: Tue, 13 Oct 2026 21:41:21 +0900 Subject: [PATCH 8/8] Omit unverified Grida Gemini regular price claims --- catalogue/PROVENANCE.md | 7 +- catalogue/models.json | 90 ++++-------------------- models/google/gemini-3.7-flash/card.toml | 9 ++- models/google/gemini-3.8-flash/card.toml | 9 ++- 4 files changed, 24 insertions(+), 91 deletions(-) diff --git a/catalogue/PROVENANCE.md b/catalogue/PROVENANCE.md index a3105c2..2e76ab4 100644 --- a/catalogue/PROVENANCE.md +++ b/catalogue/PROVENANCE.md @@ -994,8 +994,9 @@ these bindings do not imply another provider's parameter compatibility. `published_pricing` records advertised USD per named quantity, including bands, conditions and rounding. Provider-specific normalized quantities are not raw image counts or guaranteed per-request totals. Source unit identifiers are -preserved. Grida's two Gemini Flash regular-price entries are the proposed next -published schedule; release coordination must precede describing those rates as -already live. Other recorded service rates match the inspected discovery. +preserved. Grida's Gemini 3.7/3.8 Flash bindings omit prices: the inspected +discovery does not independently establish a regular, non-promotional schedule. +Another provider's regular rates are not evidence of Grida's advertised rates. +Other recorded service rates match the inspected discovery. This catalogue describes public service facts without supplier selection or private financial policy. diff --git a/catalogue/models.json b/catalogue/models.json index f6ec138..7a7a32d 100644 --- a/catalogue/models.json +++ b/catalogue/models.json @@ -2295,46 +2295,13 @@ { "id": "google/gemini-3.7-flash", "input": "text", + "source_url": "https://gateway.grida.ai/v1/models" + } + ], + "qualifications": [ + { "source_url": "https://gateway.grida.ai/v1/models", - "published_pricing": { - "source_url": "https://gateway.grida.ai/v1/models", - "currency": "USD", - "components": [ - { - "id": "input_tokens", - "meter": "input_tokens", - "unit": "token", - "per_quantity": "1", - "when": {}, - "quantity_rounding": { - "mode": "none" - }, - "usd_per_unit": "0.0000015" - }, - { - "id": "cached_input_tokens", - "meter": "cached_input_tokens", - "unit": "token", - "per_quantity": "1", - "when": {}, - "quantity_rounding": { - "mode": "none" - }, - "usd_per_unit": "0.00000015" - }, - { - "id": "output_tokens", - "meter": "output_tokens", - "unit": "token", - "per_quantity": "1", - "when": {}, - "quantity_rounding": { - "mode": "none" - }, - "usd_per_unit": "0.0000075" - } - ] - } + "notes": "A regular, non-promotional token schedule has not been independently established from the inspected public discovery; published_pricing is omitted rather than inferred from another provider." } ], "capabilities": { @@ -2520,46 +2487,13 @@ { "id": "google/gemini-3.8-flash", "input": "text", + "source_url": "https://gateway.grida.ai/v1/models" + } + ], + "qualifications": [ + { "source_url": "https://gateway.grida.ai/v1/models", - "published_pricing": { - "source_url": "https://gateway.grida.ai/v1/models", - "currency": "USD", - "components": [ - { - "id": "input_tokens", - "meter": "input_tokens", - "unit": "token", - "per_quantity": "1", - "when": {}, - "quantity_rounding": { - "mode": "none" - }, - "usd_per_unit": "0.0000015" - }, - { - "id": "cached_input_tokens", - "meter": "cached_input_tokens", - "unit": "token", - "per_quantity": "1", - "when": {}, - "quantity_rounding": { - "mode": "none" - }, - "usd_per_unit": "0.00000015" - }, - { - "id": "output_tokens", - "meter": "output_tokens", - "unit": "token", - "per_quantity": "1", - "when": {}, - "quantity_rounding": { - "mode": "none" - }, - "usd_per_unit": "0.0000075" - } - ] - } + "notes": "A regular, non-promotional token schedule has not been independently established from the inspected public discovery; published_pricing is omitted rather than inferred from another provider." } ], "capabilities": { diff --git a/models/google/gemini-3.7-flash/card.toml b/models/google/gemini-3.7-flash/card.toml index 0cdc67c..75f4c3f 100644 --- a/models/google/gemini-3.7-flash/card.toml +++ b/models/google/gemini-3.7-flash/card.toml @@ -126,11 +126,10 @@ provider = "grida" id = "google/gemini-3.7-flash" url = "https://gateway.grida.ai/v1/models" endpoints = [ - { "id" = "google/gemini-3.7-flash", "input" = "text", "source_url" = "https://gateway.grida.ai/v1/models", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ - { "id" = "input_tokens", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.0000015" }, - { "id" = "cached_input_tokens", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.00000015" }, - { "id" = "output_tokens", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.0000075" }, - ] } }, + { id = "google/gemini-3.7-flash", input = "text", source_url = "https://gateway.grida.ai/v1/models" }, +] +qualifications = [ + { source_url = "https://gateway.grida.ai/v1/models", notes = "A regular, non-promotional token schedule has not been independently established from the inspected public discovery; published_pricing is omitted rather than inferred from another provider." }, ] capabilities = { "source_url" = "https://gateway.grida.ai/v1/models", "image_input" = true, "tools" = true, "reasoning" = true, "structured_output" = true } limits = { "source_url" = "https://gateway.grida.ai/v1/models", "context_tokens" = 1000000, "max_output_tokens" = 65535 } diff --git a/models/google/gemini-3.8-flash/card.toml b/models/google/gemini-3.8-flash/card.toml index 89ca70a..5083f63 100644 --- a/models/google/gemini-3.8-flash/card.toml +++ b/models/google/gemini-3.8-flash/card.toml @@ -125,11 +125,10 @@ provider = "grida" id = "google/gemini-3.8-flash" url = "https://gateway.grida.ai/v1/models" endpoints = [ - { "id" = "google/gemini-3.8-flash", "input" = "text", "source_url" = "https://gateway.grida.ai/v1/models", "published_pricing" = { "source_url" = "https://gateway.grida.ai/v1/models", "currency" = "USD", "components" = [ - { "id" = "input_tokens", "meter" = "input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.0000015" }, - { "id" = "cached_input_tokens", "meter" = "cached_input_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.00000015" }, - { "id" = "output_tokens", "meter" = "output_tokens", "unit" = "token", "per_quantity" = "1", "when" = {}, "quantity_rounding" = { "mode" = "none" }, "usd_per_unit" = "0.0000075" }, - ] } }, + { id = "google/gemini-3.8-flash", input = "text", source_url = "https://gateway.grida.ai/v1/models" }, +] +qualifications = [ + { source_url = "https://gateway.grida.ai/v1/models", notes = "A regular, non-promotional token schedule has not been independently established from the inspected public discovery; published_pricing is omitted rather than inferred from another provider." }, ] capabilities = { "source_url" = "https://gateway.grida.ai/v1/models", "image_input" = true, "tools" = true, "reasoning" = true, "structured_output" = true } limits = { "source_url" = "https://gateway.grida.ai/v1/models", "context_tokens" = 1000000, "max_output_tokens" = 65535 }