diff --git a/.github/workflows/ci-fixer.yml b/.github/workflows/ci-fixer.yml index 3f0112d1650..5a94d2a3db2 100644 --- a/.github/workflows/ci-fixer.yml +++ b/.github/workflows/ci-fixer.yml @@ -2,7 +2,7 @@ name: Dev CI Fixer on: workflow_run: - workflows: [Deploy] + workflows: [Deploy, Sync Model Catalogs] types: [completed] workflow_dispatch: @@ -160,7 +160,7 @@ jobs: Failed log excerpt: EOF cat "$LOG_FILE" - } | opencode run --agent ci-fixer -m opencode/grok-4.5 | tee "$RESPONSE_FILE" + } | opencode run --agent ci-fixer -m opencode/muse-spark-1.3 --variant xhigh | tee "$RESPONSE_FILE" - name: Check changed paths if: steps.budget.outputs.run == 'true' && steps.budget-cache.outputs.cache-hit != 'true' diff --git a/.github/workflows/issue-fixer.yml b/.github/workflows/issue-fixer.yml index 17a2ce9a544..4e1f144f164 100644 --- a/.github/workflows/issue-fixer.yml +++ b/.github/workflows/issue-fixer.yml @@ -60,7 +60,7 @@ jobs: + "If it is a feature request, a request to track a new kind of information, a question, or any miscellaneous non-catalog-data request, do not edit files. Respond briefly that it needs maintainer review and no automated fix was opened." ' "$ISSUE_FILE" > "$PROMPT_FILE" - opencode run --agent issue-fixer -m opencode/grok-4.5 --format json < "$PROMPT_FILE" | tee "$EVENTS_FILE" + opencode run --agent issue-fixer -m opencode/muse-spark-1.3 --variant xhigh --format json < "$PROMPT_FILE" | tee "$EVENTS_FILE" if ! jq -ers 'map(select(.type == "text") | .part.text) | last | select(length > 0)' "$EVENTS_FILE" > "$RESPONSE_FILE"; then echo "Issue fixer did not produce a final response." >&2 diff --git a/.github/workflows/opencode.yml b/.github/workflows/opencode.yml index 24c819769a9..2e06c6beccb 100644 --- a/.github/workflows/opencode.yml +++ b/.github/workflows/opencode.yml @@ -27,4 +27,5 @@ jobs: env: OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }} with: - model: opencode/grok-4.5 + model: opencode/muse-spark-1.3 + variant: xhigh diff --git a/.github/workflows/pr-reviewer.yml b/.github/workflows/pr-reviewer.yml index 48a5c853311..fe824e9d48d 100644 --- a/.github/workflows/pr-reviewer.yml +++ b/.github/workflows/pr-reviewer.yml @@ -78,7 +78,7 @@ jobs: export PR_REVIEW_READY_FILE rm -f "$PR_REVIEW_READY_FILE" - opencode run --agent pr-reviewer -m opencode/grok-4.5 --format json <<'EOF' | tee "$EVENTS_FILE" + opencode run --agent pr-reviewer -m opencode/muse-spark-1.3 --variant xhigh --format json <<'EOF' | tee "$EVENTS_FILE" Review this pull request using the trusted reviewer instructions. Start with `.pr-review/pull-request.json`, `.pr-review/diff.patch`, `AGENTS.md`, and the contributing guidance in `README.md`. Read `sync.md`, the reasoning-options audit guide, schema code, and nearby base-revision files when relevant to the changed files. Use only the read, glob, grep, and mark-pr-ready tools. Return only the final review comment in the agent's required output format. Never include progress narration or passed-check summaries. EOF diff --git a/.github/workflows/retry-issue-fixer.yml b/.github/workflows/retry-issue-fixer.yml new file mode 100644 index 00000000000..d10a3206c98 --- /dev/null +++ b/.github/workflows/retry-issue-fixer.yml @@ -0,0 +1,102 @@ +name: Retry stalled issue fixes + +on: + schedule: + - cron: "41 */6 * * *" + workflow_dispatch: + +permissions: + contents: write + issues: read + pull-requests: read + +concurrency: + group: retry-stalled-issue-fixes + cancel-in-progress: false + +jobs: + retry: + if: github.repository == 'anomalyco/models.dev' + runs-on: ubuntu-latest + steps: + - name: Redispatch oldest issues without pull requests + env: + GH_TOKEN: ${{ github.token }} + run: | + set -euo pipefail + + cutoff="$(date -u -d '1 hour ago' '+%Y-%m-%dT%H:%M:%SZ')" + owner="${GITHUB_REPOSITORY%/*}" + repo="${GITHUB_REPOSITORY#*/}" + + issues="$({ + gh issue list \ + --repo "$GITHUB_REPOSITORY" \ + --state open \ + --label automation \ + --label model-sync \ + --label missing-model \ + --limit 1000 \ + --json number,createdAt,labels + } | jq --arg cutoff "$cutoff" ' + map(select(.createdAt <= $cutoff)) | sort_by(.createdAt) + ')" + + dispatched=0 + dispatched_issues=() + while IFS= read -r issue; do + number="$(jq -r '.number' <<< "$issue")" + provider="$(jq -r ' + [.labels[].name | select(startswith("provider:")) | ltrimstr("provider:")] + | first // empty + ' <<< "$issue")" + + if [ -z "$provider" ] || [ "$provider" = "openai" ]; then + continue + fi + + closing_prs="$(gh api graphql \ + -F owner="$owner" \ + -F repo="$repo" \ + -F number="$number" \ + -f query='query($owner: String!, $repo: String!, $number: Int!) { + repository(owner: $owner, name: $repo) { + issue(number: $number) { + closedByPullRequestsReferences(first: 1, includeClosedPrs: true) { + totalCount + } + } + } + }' \ + --jq '.data.repository.issue.closedByPullRequestsReferences.totalCount')" + + if [ "$closing_prs" -gt 0 ]; then + continue + fi + + jq -n \ + --arg provider "$provider" \ + --argjson issue_number "$number" \ + '{ + event_type: "missing-model", + client_payload: { + provider: $provider, + issue_number: $issue_number + } + }' \ + | gh api "repos/$GITHUB_REPOSITORY/dispatches" --method POST --input - + + dispatched=$((dispatched + 1)) + dispatched_issues+=("#$number") + if [ "$dispatched" -eq 3 ]; then + break + fi + done < <(jq -c '.[]' <<< "$issues") + + if [ "$dispatched" -eq 0 ]; then + echo "No stalled automated issues were eligible for retry." | tee -a "$GITHUB_STEP_SUMMARY" + else + printf 'Redispatched %d issue(s): %s\n' \ + "$dispatched" "${dispatched_issues[*]}" \ + | tee -a "$GITHUB_STEP_SUMMARY" + fi diff --git a/.github/workflows/sync-models.yml b/.github/workflows/sync-models.yml index 7edd0324244..3ec03eb942d 100644 --- a/.github/workflows/sync-models.yml +++ b/.github/workflows/sync-models.yml @@ -77,6 +77,7 @@ jobs: DEEPINFRA_API_KEY: ${{ secrets.DEEPINFRA_API_KEY }} DIGITALOCEAN_API_TOKEN: ${{ secrets.DIGITALOCEAN_API_TOKEN }} DIGITALOCEAN_ACCESS_TOKEN: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }} + FIREWORKS_API_KEY: ${{ secrets.FIREWORKS_API_KEY }} HF_TOKEN: ${{ secrets.HF_TOKEN }} OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} @@ -88,6 +89,8 @@ jobs: GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} GOOGLE_GENERATIVE_AI_API_KEY: ${{ secrets.GOOGLE_GENERATIVE_AI_API_KEY }} XAI_API_KEY: ${{ secrets.XAI_API_KEY }} + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_WORKERS_AI_SYNC_API_TOKEN }} + CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_WORKERS_AI_SYNC_ACCOUNT_ID }} CLOUDFLARE_WORKERS_AI_SYNC_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_WORKERS_AI_SYNC_ACCOUNT_ID }} CLOUDFLARE_WORKERS_AI_SYNC_API_TOKEN: ${{ secrets.CLOUDFLARE_WORKERS_AI_SYNC_API_TOKEN }} diff --git a/README.md b/README.md index f26ba19ab83..8a6c27e736a 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,17 @@ You can access this data through an API. curl https://models.dev/api.json ``` +Specialized model types are omitted by default. Filter by one or more +comma-separated model types, or use `all` for the complete catalog: + +```bash +curl "https://models.dev/api.json?type=decision" +curl "https://models.dev/api.json?type=all" +``` + +The currently supported model type is `decision`. The `type` parameter is also +available on `models.json`, `catalog.json`, and `model-schema.json`. + Use the **Model ID** field to do a lookup on any model; it's the identifier used by [AI SDK](https://ai-sdk.dev/). Provider-agnostic model metadata is available separately: @@ -270,6 +281,7 @@ Models must conform to the following schema, as defined in `packages/core/src/sc **Model Schema:** - `name`: String — Display name of the model +- `type` _(optional)_: String — Specialized model behavior; currently supports `decision` - `attachment`: Boolean — Supports file attachments - `reasoning`: Boolean — Supports reasoning / chain-of-thought - `tool_call`: Boolean - Supports tool calling diff --git a/bun.lock b/bun.lock index 2ba689570d3..2e4ee0e36cd 100644 --- a/bun.lock +++ b/bun.lock @@ -24,6 +24,9 @@ }, "packages/function": { "name": "@models.dev/function", + "dependencies": { + "@models.dev/core": "workspace:*", + }, "devDependencies": { "@cloudflare/workers-types": "4.20250522.0", "@tsconfig/bun": "catalog:", diff --git a/labs/vispark/lab.toml b/labs/vispark/lab.toml new file mode 100644 index 00000000000..3aebe3fe5da --- /dev/null +++ b/labs/vispark/lab.toml @@ -0,0 +1 @@ +description = "Vispark builds India-centered foundational multimodal intelligence (Vision) with 1M-token context, served via Vispark Lab's API." diff --git a/labs/vispark/logo.svg b/labs/vispark/logo.svg new file mode 100644 index 00000000000..2348c5a2f7f --- /dev/null +++ b/labs/vispark/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/models/ai21/jamba-large.toml b/models/ai21/jamba-large.toml new file mode 100644 index 00000000000..68bb57edeb9 --- /dev/null +++ b/models/ai21/jamba-large.toml @@ -0,0 +1,24 @@ +name = "Jamba Large" +description = "AI21's hybrid SSM-Transformer long-context model for enterprise agents and grounded generation" +family = "jamba" +release_date = "2025-07-01" +last_updated = "2025-07-01" +attachment = false +reasoning = false +tool_call = true +structured_output = true +temperature = true +knowledge = "2024-08-22" +open_weights = true + +[limit] +context = 256_000 +output = 4_096 + +[modalities] +input = ["text"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/ai21labs/AI21-Jamba-Large-1.6" diff --git a/models/ai21/jamba-mini.toml b/models/ai21/jamba-mini.toml new file mode 100644 index 00000000000..c9c5c7d8fc6 --- /dev/null +++ b/models/ai21/jamba-mini.toml @@ -0,0 +1,24 @@ +name = "Jamba Mini" +description = "AI21's efficient, lightweight hybrid SSM-Transformer model for a wide range of tasks" +family = "jamba" +release_date = "2026-01-01" +last_updated = "2026-01-01" +attachment = false +reasoning = false +tool_call = true +structured_output = true +temperature = true +knowledge = "2024-08-22" +open_weights = true + +[limit] +context = 256_000 +output = 4_096 + +[modalities] +input = ["text"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/ai21labs/AI21-Jamba-Mini-1.6" diff --git a/models/alibaba/qwen3.8-flash-next.toml b/models/alibaba/qwen3.8-flash-next.toml new file mode 100644 index 00000000000..f3158f07769 --- /dev/null +++ b/models/alibaba/qwen3.8-flash-next.toml @@ -0,0 +1,36 @@ +# Sources (accessed 2026-08-28): +# https://huggingface.co/Qwen/Qwen3.8-Flash-Next +# https://huggingface.co/api/models/Qwen/Qwen3.8-Flash-Next +# https://qwen.ai/blog?id=qwen3.8-flash-next +# Hub lastModified 2026-08-27T05:03:36Z is the open-weight drop (Do not use +# Hub createdAt, staged countdown page). +# Experimental preview of the Qwen4 architecture (Qwen4Exp): hybrid +# Gated DeltaNet + Qwen Sparse Attention, 512 experts (10 routed + 1 shared), +# 125B total with 6B active plus 51B n-gram embedding and 4B MTP. +# Thinking always on: reasoning_effort low|medium|xhigh (default xhigh). +# Native context 262K, extensible up to 1M tokens. + +name = "Qwen3.8 Flash Next" +description = "Open-weight experimental preview of the Qwen4 architecture: hybrid-attention MoE (125B total, 6B active) with vision encoder for coding, agent tasks, and image and video understanding" +family = "qwen" +release_date = "2026-08-27" +last_updated = "2026-08-27" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = true +license = "qwen-community-1.0" + +[limit] +context = 262_144 +output = 131_072 + +[modalities] +input = ["text", "image", "video"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/Qwen/Qwen3.8-Flash-Next" diff --git a/models/alibaba/qwen3.8-max-0902.toml b/models/alibaba/qwen3.8-max-0902.toml new file mode 100644 index 00000000000..aeb8160175c --- /dev/null +++ b/models/alibaba/qwen3.8-max-0902.toml @@ -0,0 +1,28 @@ +# Sources (accessed 2026-09-03): +# https://www.qwencloud.com/models/qwen3.8-max-0902 +# https://www.alibabacloud.com/help/en/model-studio/qwen3-8-max +# https://docs.qwencloud.com/developer-guides/text-generation/thinking +# Snapshot of qwen3.8-max (alias qwen3.8-max-2026-09-02). Same limits, +# hybrid thinking, modalities, and tool ecosystem as qwen3.8-max; post-trained +# for stronger coding, collaborative agents, and vision/document understanding. +# PDF input: inherits Completions PDF理解 / document parsing from the Max line +# (same as models/alibaba/qwen3.8-max.toml). + +name = "Qwen3.8 Max 0902" +description = "2026-09-02 upgraded snapshot of Qwen3.8 Max with stronger coding, collaborative agents, and multimodal document understanding" +family = "qwen" +release_date = "2026-09-02" +last_updated = "2026-09-02" +attachment = true +reasoning = true +temperature = true +tool_call = true +open_weights = false + +[limit] +context = 1_000_000 +output = 131_072 + +[modalities] +input = ["text", "image", "video", "pdf"] +output = ["text"] diff --git a/models/alibaba/qwen3.8-omni-flash.toml b/models/alibaba/qwen3.8-omni-flash.toml new file mode 100644 index 00000000000..9308b2b7d6e --- /dev/null +++ b/models/alibaba/qwen3.8-omni-flash.toml @@ -0,0 +1,20 @@ +# Sources (accessed 2026-09-18): +# https://www.alibabacloud.com/help/en/model-studio/qwen3-8-omni-flash +# https://www.alibabacloud.com/help/en/model-studio/qwen-omni +name = "Qwen3.8 Omni Flash" +description = "Qwen omni model for text, vision, audio, and multimodal agent tasks" +family = "qwen" +release_date = "2026-09-17" +last_updated = "2026-09-17" +attachment = true +reasoning = true +tool_call = true +open_weights = false + +[limit] +context = 1_000_000 +output = 131_072 + +[modalities] +input = ["text", "image", "audio", "video"] +output = ["text"] diff --git a/models/amazon/nova-2-lite.toml b/models/amazon/nova-2-lite.toml new file mode 100644 index 00000000000..4995aa70ddf --- /dev/null +++ b/models/amazon/nova-2-lite.toml @@ -0,0 +1,22 @@ +# Sources: https://docs.aws.amazon.com/nova/latest/nova2-userguide/what-is-nova-2.html +# https://docs.aws.amazon.com/bedrock/latest/userguide/model-card-amazon-nova-2-lite.html +# Launch: https://aws.amazon.com/about-aws/whats-new/2025/12/nova-2-foundation-models-amazon-bedrock/ +name = "Nova 2 Lite" +description = "Multimodal reasoning model for visual analysis, planning, and tool use" +family = "nova" +release_date = "2025-12-02" +last_updated = "2025-12-01" +attachment = true +reasoning = true +temperature = true +knowledge = "2025-10" +tool_call = true +open_weights = false + +[limit] +context = 1_000_000 +output = 65_536 + +[modalities] +input = ["text", "image", "video", "pdf"] +output = ["text"] diff --git a/models/amazon/nova-lite.toml b/models/amazon/nova-lite.toml new file mode 100644 index 00000000000..db526061329 --- /dev/null +++ b/models/amazon/nova-lite.toml @@ -0,0 +1,24 @@ +# Sources: https://docs.aws.amazon.com/nova/latest/userguide/what-is-nova.html +# https://docs.aws.amazon.com/bedrock/latest/userguide/model-card-amazon-nova-lite.html +# Launch: https://aws.amazon.com/blogs/aws/introducing-amazon-nova-frontier-intelligence-and-industry-leading-price-performance/ +# PDF document input is supported through Bedrock Converse. +# Output: the Nova V1 guide's 10K is confirmed by US Bedrock Converse boundary checks (2026-09-09). +name = "Nova Lite" +description = "Efficient model for low-latency assistance, extraction, and routine automation" +family = "nova-lite" +release_date = "2024-12-03" +last_updated = "2024-12-03" +attachment = true +reasoning = false +temperature = true +knowledge = "2024-10" +tool_call = true +open_weights = false + +[limit] +context = 300_000 +output = 10_000 + +[modalities] +input = ["text", "image", "video", "pdf"] +output = ["text"] diff --git a/models/amazon/nova-micro.toml b/models/amazon/nova-micro.toml new file mode 100644 index 00000000000..bc353d076ae --- /dev/null +++ b/models/amazon/nova-micro.toml @@ -0,0 +1,23 @@ +# Sources: https://docs.aws.amazon.com/nova/latest/userguide/what-is-nova.html +# https://docs.aws.amazon.com/bedrock/latest/userguide/model-card-amazon-nova-micro.html +# Launch: https://aws.amazon.com/blogs/aws/introducing-amazon-nova-frontier-intelligence-and-industry-leading-price-performance/ +# Output: the Nova V1 guide's 10K is confirmed by US Bedrock Converse boundary checks (2026-09-09). +name = "Nova Micro" +description = "Efficient model for low-latency assistance, extraction, and routine automation" +family = "nova-micro" +release_date = "2024-12-03" +last_updated = "2024-12-03" +attachment = false +reasoning = false +temperature = true +knowledge = "2024-10" +tool_call = true +open_weights = false + +[limit] +context = 128_000 +output = 10_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/models/amazon/nova-premier.toml b/models/amazon/nova-premier.toml new file mode 100644 index 00000000000..15dea69332a --- /dev/null +++ b/models/amazon/nova-premier.toml @@ -0,0 +1,23 @@ +# Launch: https://aws.amazon.com/blogs/aws/amazon-nova-premier-our-most-capable-model-for-complex-tasks-and-teacher-for-model-distillation/ +# Specs (including 10K output): https://docs.aws.amazon.com/nova/latest/userguide/what-is-nova.html +# Prompted CoT, not a native thinking mode: https://docs.aws.amazon.com/nova/latest/userguide/prompting-chain-of-thought.html +# Bedrock's generic Premier card conflicts on launch date, output limit, and reasoning; use the Nova V1 guide and launch announcement. +name = "Nova Premier" +description = "Multimodal model for complex analysis, long-context understanding, tool use, and model distillation" +family = "nova" +release_date = "2025-04-30" +last_updated = "2025-04-30" +attachment = true +reasoning = false +temperature = true +knowledge = "2024-10" +tool_call = true +open_weights = false + +[limit] +context = 1_000_000 +output = 10_000 + +[modalities] +input = ["text", "image", "video", "pdf"] +output = ["text"] diff --git a/models/amazon/nova-pro.toml b/models/amazon/nova-pro.toml new file mode 100644 index 00000000000..5b04d7dfab4 --- /dev/null +++ b/models/amazon/nova-pro.toml @@ -0,0 +1,24 @@ +# Sources: https://docs.aws.amazon.com/nova/latest/userguide/what-is-nova.html +# https://docs.aws.amazon.com/bedrock/latest/userguide/model-card-amazon-nova-pro.html +# Launch: https://aws.amazon.com/blogs/aws/introducing-amazon-nova-frontier-intelligence-and-industry-leading-price-performance/ +# PDF document input is supported through Bedrock Converse. +# Output: the Nova V1 guide's 10K is confirmed by US Bedrock Converse boundary checks (2026-09-09). +name = "Nova Pro" +description = "Flagship model for demanding analysis, coding, and production agent workflows" +family = "nova-pro" +release_date = "2024-12-03" +last_updated = "2024-12-03" +attachment = true +reasoning = false +temperature = true +knowledge = "2024-10" +tool_call = true +open_weights = false + +[limit] +context = 300_000 +output = 10_000 + +[modalities] +input = ["text", "image", "video", "pdf"] +output = ["text"] diff --git a/models/anthropic/claude-fable-5-1.toml b/models/anthropic/claude-fable-5-1.toml new file mode 100644 index 00000000000..7bc4479a33f --- /dev/null +++ b/models/anthropic/claude-fable-5-1.toml @@ -0,0 +1,19 @@ +name = "Claude Fable 5.1" +description = "Claude model for demanding reasoning and long-horizon agentic work" +family = "claude-fable" +release_date = "2026-09-01" +last_updated = "2026-09-01" +attachment = true +reasoning = true +temperature = false +tool_call = true +open_weights = false +knowledge = "2026-06" + +[limit] +context = 1_000_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/models/anthropic/claude-opus-5-5.toml b/models/anthropic/claude-opus-5-5.toml new file mode 100644 index 00000000000..0f1cfeba4ed --- /dev/null +++ b/models/anthropic/claude-opus-5-5.toml @@ -0,0 +1,19 @@ +name = "Claude Opus 5.5" +description = "Claude model for long-running agentic coding and knowledge work" +family = "claude-opus" +release_date = "2026-09-22" +last_updated = "2026-09-22" +attachment = true +reasoning = true +temperature = false +tool_call = true +open_weights = false +knowledge = "2026-06" + +[limit] +context = 1_000_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/models/bytedance-seed/seed-1-6-flash.toml b/models/bytedance-seed/seed-1-6-flash.toml index b8f14e3eb77..ab967994ed4 100644 --- a/models/bytedance-seed/seed-1-6-flash.toml +++ b/models/bytedance-seed/seed-1-6-flash.toml @@ -10,6 +10,7 @@ attachment = true reasoning = false temperature = true tool_call = true +structured_output = true open_weights = false [limit] diff --git a/models/bytedance-seed/seed-1-6-vision.toml b/models/bytedance-seed/seed-1-6-vision.toml index 9ac037c55da..6de1a6c267e 100644 --- a/models/bytedance-seed/seed-1-6-vision.toml +++ b/models/bytedance-seed/seed-1-6-vision.toml @@ -10,6 +10,7 @@ attachment = true reasoning = false temperature = true tool_call = true +structured_output = true open_weights = false [limit] diff --git a/models/bytedance-seed/seed-1-6.toml b/models/bytedance-seed/seed-1-6.toml index daf6eb42abb..898524a8f96 100644 --- a/models/bytedance-seed/seed-1-6.toml +++ b/models/bytedance-seed/seed-1-6.toml @@ -10,6 +10,7 @@ attachment = false reasoning = true temperature = true tool_call = true +structured_output = true open_weights = false [limit] diff --git a/models/bytedance-seed/seed-1-8.toml b/models/bytedance-seed/seed-1-8.toml index 1bb3255e4c3..d9d6f93c6c9 100644 --- a/models/bytedance-seed/seed-1-8.toml +++ b/models/bytedance-seed/seed-1-8.toml @@ -10,6 +10,7 @@ attachment = true reasoning = true temperature = true tool_call = true +structured_output = true open_weights = false [limit] diff --git a/models/bytedance-seed/seed-2.0-lite.toml b/models/bytedance-seed/seed-2.0-lite.toml index 4722fa87e28..871c9e83e4b 100644 --- a/models/bytedance-seed/seed-2.0-lite.toml +++ b/models/bytedance-seed/seed-2.0-lite.toml @@ -10,6 +10,7 @@ attachment = true reasoning = true temperature = true tool_call = true +structured_output = true open_weights = false [limit] diff --git a/models/bytedance-seed/seed-2.0-mini.toml b/models/bytedance-seed/seed-2.0-mini.toml index 9f796068539..5b9190b334b 100644 --- a/models/bytedance-seed/seed-2.0-mini.toml +++ b/models/bytedance-seed/seed-2.0-mini.toml @@ -10,6 +10,7 @@ attachment = true reasoning = true temperature = true tool_call = true +structured_output = true open_weights = false [limit] diff --git a/models/bytedance-seed/seed-2.0-pro.toml b/models/bytedance-seed/seed-2.0-pro.toml index a5fd4573f3a..aaf0107c518 100644 --- a/models/bytedance-seed/seed-2.0-pro.toml +++ b/models/bytedance-seed/seed-2.0-pro.toml @@ -10,6 +10,7 @@ attachment = true reasoning = true temperature = true tool_call = true +structured_output = true open_weights = false [limit] diff --git a/models/bytedance-seed/seed-2.1-pro.toml b/models/bytedance-seed/seed-2.1-pro.toml index 3043a721dd4..0f7dea4d8b9 100644 --- a/models/bytedance-seed/seed-2.1-pro.toml +++ b/models/bytedance-seed/seed-2.1-pro.toml @@ -10,6 +10,7 @@ attachment = true reasoning = true temperature = true tool_call = true +structured_output = true open_weights = false [limit] diff --git a/models/bytedance-seed/seed-2.1-turbo.toml b/models/bytedance-seed/seed-2.1-turbo.toml index 587fb4fa0e5..dc66a62af75 100644 --- a/models/bytedance-seed/seed-2.1-turbo.toml +++ b/models/bytedance-seed/seed-2.1-turbo.toml @@ -10,6 +10,7 @@ attachment = true reasoning = true temperature = true tool_call = true +structured_output = true open_weights = false [limit] diff --git a/models/bytedance-seed/seed-character.toml b/models/bytedance-seed/seed-character.toml index 8b67258fcc4..816d06af8d2 100644 --- a/models/bytedance-seed/seed-character.toml +++ b/models/bytedance-seed/seed-character.toml @@ -10,6 +10,7 @@ attachment = true reasoning = true temperature = true tool_call = true +structured_output = true open_weights = false [limit] diff --git a/models/bytedance-seed/seed-evolving.toml b/models/bytedance-seed/seed-evolving.toml index f824eeab863..f961aea95c0 100644 --- a/models/bytedance-seed/seed-evolving.toml +++ b/models/bytedance-seed/seed-evolving.toml @@ -10,6 +10,7 @@ attachment = true reasoning = true temperature = true tool_call = true +structured_output = true open_weights = false [limit] diff --git a/models/deepreinforce/ornith-1.5-35b-a3b.toml b/models/deepreinforce/ornith-1.5-35b-a3b.toml new file mode 100644 index 00000000000..ff436d1bf5d --- /dev/null +++ b/models/deepreinforce/ornith-1.5-35b-a3b.toml @@ -0,0 +1,28 @@ +name = "Ornith 1.5 35B A3B" +description = "Mixture-of-experts coding-reasoning model for agentic software tasks, tool use, and image understanding" +family = "ornith" +release_date = "2026-08-18" +last_updated = "2026-08-23" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = true +license = "MIT" + +[limit] +context = 262_144 + +[modalities] +input = ["text", "image"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/ornith-ai/Ornith-1.5-35B-A3B" + +[[links]] +label = "Model card" +url = "https://huggingface.co/ornith-ai/Ornith-1.5-35B-A3B" +type = "model_card" diff --git a/models/deepseek/deepseek-v4-flash-0423.toml b/models/deepseek/deepseek-v4-flash-0423.toml new file mode 100644 index 00000000000..0de9cc46fd0 --- /dev/null +++ b/models/deepseek/deepseek-v4-flash-0423.toml @@ -0,0 +1,28 @@ +# Sources: +# https://www.deepseek.com/en/news/v4-preview/ +# https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash +name = "DeepSeek V4 Flash 0423" +description = "Initial DeepSeek V4 Flash snapshot for economical reasoning, coding, and million-token agent workloads" +family = "deepseek-flash" +release_date = "2026-04-23" +last_updated = "2026-04-23" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = true +knowledge = "2025-05" +open_weights = true +license = "MIT" + +[limit] +context = 1_000_000 +output = 384_000 + +[modalities] +input = ["text"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash" diff --git a/models/deepseek/deepseek-v4-flash-vision-exp.toml b/models/deepseek/deepseek-v4-flash-vision-exp.toml index ef5426b119c..18d7744f7c8 100644 --- a/models/deepseek/deepseek-v4-flash-vision-exp.toml +++ b/models/deepseek/deepseek-v4-flash-vision-exp.toml @@ -1,14 +1,16 @@ +# Open weights (MIT): https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp name = "DeepSeek V4 Flash Vision Exp" description = "Experimental multimodal DeepSeek V4 Flash model for image understanding, coding, and agentic work" family = "deepseek-flash" release_date = "2026-08-21" -last_updated = "2026-08-21" +last_updated = "2026-09-01" attachment = true reasoning = true temperature = true tool_call = true structured_output = true -open_weights = false +open_weights = true +license = "MIT" [limit] context = 1_000_000 @@ -17,3 +19,7 @@ output = 384_000 [modalities] input = ["text", "image"] output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp" diff --git a/models/deepseek/deepseek-v4.1-flash.toml b/models/deepseek/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..68b2de09bb4 --- /dev/null +++ b/models/deepseek/deepseek-v4.1-flash.toml @@ -0,0 +1,26 @@ +# Open weights (MIT): https://huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash +name = "DeepSeek V4.1 Flash" +description = "DeepSeek V4.1 Flash model for reasoning and agentic coding" +family = "deepseek-flash" +release_date = "2026-09-10" +last_updated = "2026-09-10" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +knowledge = "2025-05" +open_weights = true +license = "MIT" + +[limit] +context = 1_000_000 +output = 384_000 + +[modalities] +input = ["text", "image"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash" diff --git a/models/google/gemini-3-pro-image-preview.toml b/models/google/gemini-3-pro-image-preview.toml index 664595945fb..f10fda90081 100644 --- a/models/google/gemini-3-pro-image-preview.toml +++ b/models/google/gemini-3-pro-image-preview.toml @@ -1,4 +1,4 @@ -name = "Nano Banana Pro" +name = "Nano Banana Pro Preview" description = "Nano Banana Pro for higher-fidelity image generation and design-heavy edits" family = "gemini-pro" release_date = "2025-11-20" diff --git a/models/google/gemini-3.1-flash-image-preview.toml b/models/google/gemini-3.1-flash-image-preview.toml index 725a26006dd..9e0c07cd3b6 100644 --- a/models/google/gemini-3.1-flash-image-preview.toml +++ b/models/google/gemini-3.1-flash-image-preview.toml @@ -1,4 +1,4 @@ -name = "Nano Banana 2" +name = "Nano Banana 2 Preview" description = "Image model for prompt-driven generation, editing, and visual design workflows" family = "gemini-flash" release_date = "2026-02-26" diff --git a/models/google/gemini-3.8-flash.toml b/models/google/gemini-3.8-flash.toml new file mode 100644 index 00000000000..c568d5402c1 --- /dev/null +++ b/models/google/gemini-3.8-flash.toml @@ -0,0 +1,22 @@ +# Sources: +# - https://ai.google.dev/gemini-api/docs/models/gemini-3.8-flash +# - https://ai.google.dev/gemini-api/docs/latest-model +name = "Gemini 3.8 Flash" +description = "Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows" +family = "gemini-flash" +release_date = "2026-09-02" +last_updated = "2026-09-02" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[limit] +context = 1_048_576 +output = 65_536 + +[modalities] +input = ["text", "image", "video", "audio", "pdf"] +output = ["text"] diff --git a/models/google/gemma-3-12b-it.toml b/models/google/gemma-3-12b-it.toml new file mode 100644 index 00000000000..5ca0388a3db --- /dev/null +++ b/models/google/gemma-3-12b-it.toml @@ -0,0 +1,25 @@ +# https://ai.google.dev/gemma/docs/core/model_card_3 +# https://blog.google/technology/developers/gemma-3/ +name = "Gemma 3 12B IT" +description = "Open multimodal Gemma instruction model for multilingual text generation and image understanding" +family = "gemma" +release_date = "2025-03-12" +last_updated = "2025-03-12" +attachment = true +reasoning = false +temperature = true +tool_call = true +knowledge = "2024-08" +open_weights = true + +[limit] +context = 131_072 +output = 131_072 + +[modalities] +input = ["text", "image"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/google/gemma-3-12b-it" diff --git a/models/google/gemma-3-27b-it.toml b/models/google/gemma-3-27b-it.toml new file mode 100644 index 00000000000..2ef351ba4c1 --- /dev/null +++ b/models/google/gemma-3-27b-it.toml @@ -0,0 +1,25 @@ +# https://ai.google.dev/gemma/docs/core/model_card_3 +# https://blog.google/technology/developers/gemma-3/ +name = "Gemma 3 27B IT" +description = "Largest open Gemma 3 instruction model for multilingual text generation and visual understanding" +family = "gemma" +release_date = "2025-03-12" +last_updated = "2025-03-12" +attachment = true +reasoning = false +temperature = true +tool_call = true +knowledge = "2024-08" +open_weights = true + +[limit] +context = 131_072 +output = 131_072 + +[modalities] +input = ["text", "image"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/google/gemma-3-27b-it" diff --git a/models/google/gemma-3-4b-it.toml b/models/google/gemma-3-4b-it.toml new file mode 100644 index 00000000000..bef57eb4cac --- /dev/null +++ b/models/google/gemma-3-4b-it.toml @@ -0,0 +1,25 @@ +# https://ai.google.dev/gemma/docs/core/model_card_3 +# https://blog.google/technology/developers/gemma-3/ +name = "Gemma 3 4B IT" +description = "Open multimodal Gemma instruction model for efficient text generation and image understanding" +family = "gemma" +release_date = "2025-03-12" +last_updated = "2025-03-12" +attachment = true +reasoning = false +temperature = true +tool_call = true +knowledge = "2024-08" +open_weights = true + +[limit] +context = 131_072 +output = 131_072 + +[modalities] +input = ["text", "image"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/google/gemma-3-4b-it" diff --git a/models/google/gemma-4-12b-it.toml b/models/google/gemma-4-12b-it.toml new file mode 100644 index 00000000000..af2b5f0d680 --- /dev/null +++ b/models/google/gemma-4-12b-it.toml @@ -0,0 +1,23 @@ +name = "Gemma 4 12B IT" +description = "Compact Gemma 4 instruction model for open, self-hosted chat and reasoning" +family = "gemma" +release_date = "2026-06-09" +last_updated = "2026-06-09" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[limit] +context = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/google/gemma-4-12B-it" diff --git a/models/inclusionai/ling-3.0-flash-fin.toml b/models/inclusionai/ling-3.0-flash-fin.toml new file mode 100644 index 00000000000..2e98f3b45d5 --- /dev/null +++ b/models/inclusionai/ling-3.0-flash-fin.toml @@ -0,0 +1,20 @@ +# https://novita.ai/models/model-detail/inclusionai-ling-3.0-flash-fin +# https://openrouter.ai/api/v1/models/inclusionai/ling-3.0-flash-fin:free/endpoints +# https://vercel.com/changelog/ling-3-0-flash-fin-now-available-on-ai-gateway-for-free +name = "Ling 3.0 Flash Fin" +description = "Finance-enhanced model for financial research, multi-step investment workflows, and long-horizon planning and execution" +family = "ling" +release_date = "2026-08-27" +last_updated = "2026-08-27" +attachment = false +reasoning = true +tool_call = true +open_weights = false + +[limit] +context = 262_144 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/models/meta/llama-3.1-70b-instruct.toml b/models/meta/llama-3.1-70b-instruct.toml new file mode 100644 index 00000000000..cc71a1871d4 --- /dev/null +++ b/models/meta/llama-3.1-70b-instruct.toml @@ -0,0 +1,23 @@ +name = "Llama-3.1-70B-Instruct" +description = "Open Llama instruction model for multilingual chat, reasoning, and coding" +family = "llama" +release_date = "2024-07-23" +last_updated = "2024-07-23" +attachment = false +reasoning = false +temperature = true +tool_call = true +knowledge = "2023-12" +open_weights = true + +[limit] +context = 128_000 +output = 4_096 + +[modalities] +input = ["text"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct" diff --git a/models/meta/llama-3.3-70b-instruct.toml b/models/meta/llama-3.3-70b-instruct.toml index 2f48b022bda..246ab54c9ef 100644 --- a/models/meta/llama-3.3-70b-instruct.toml +++ b/models/meta/llama-3.3-70b-instruct.toml @@ -3,7 +3,7 @@ description = "Popular open Llama workhorse for multilingual chat, coding, and s family = "llama" release_date = "2024-12-06" last_updated = "2024-12-06" -attachment = true +attachment = false reasoning = false temperature = true tool_call = true diff --git a/models/meta/llama-4-scout-17b-instruct.toml b/models/meta/llama-4-scout-17b-instruct.toml index e381e973ce9..e129a0ceaac 100644 --- a/models/meta/llama-4-scout-17b-instruct.toml +++ b/models/meta/llama-4-scout-17b-instruct.toml @@ -1,3 +1,4 @@ +# https://github.com/meta-llama/llama-models/blob/main/models/llama4/MODEL_CARD.md name = "Llama 4 Scout 17B Instruct" description = "Open Llama with long-context vision for efficient multimodal agents" family = "llama" @@ -11,7 +12,7 @@ knowledge = "2024-08" open_weights = true [limit] -context = 3_500_000 +context = 10_000_000 output = 16_384 [modalities] diff --git a/models/meta/muse-spark-1.1.toml b/models/meta/muse-spark-1.1.toml index 8ddf89f2815..d9e527e59b0 100644 --- a/models/meta/muse-spark-1.1.toml +++ b/models/meta/muse-spark-1.1.toml @@ -11,8 +11,8 @@ structured_output = true open_weights = false [limit] -context = 1_000_000 -output = 32_000 +context = 1_048_576 +output = 131_072 [modalities] input = ["text", "image", "pdf", "video"] diff --git a/models/meta/muse-spark-1.3.toml b/models/meta/muse-spark-1.3.toml new file mode 100644 index 00000000000..6cb35e84582 --- /dev/null +++ b/models/meta/muse-spark-1.3.toml @@ -0,0 +1,24 @@ +# Sources: +# https://research.meta.ai/blog/introducing-muse-spark-1-3 +# https://dev.meta.ai/docs/models +# https://openrouter.ai/meta/muse-spark-1.3 (OpenRouter Meta-hosted catalog snapshot, 2026-09-02) + +name = "Muse Spark 1.3" +description = "Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It improves long-horizon agent collaboration, instruction following, and coding efficiency relative to Muse Spark 1.2." +family = "muse" +release_date = "2026-09-02" +last_updated = "2026-09-02" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[limit] +context = 1_048_576 +output = 131_072 + +[modalities] +input = ["text", "image", "video", "pdf", "audio"] +output = ["text"] diff --git a/models/mistral/devstral-small-2.toml b/models/mistral/devstral-small-2.toml new file mode 100644 index 00000000000..f8036965c99 --- /dev/null +++ b/models/mistral/devstral-small-2.toml @@ -0,0 +1,27 @@ +# Sources: +# https://mistral.ai/news/devstral-2-vibe-cli/ +# https://huggingface.co/mistralai/Devstral-Small-2-24B-Instruct-2512 +name = "Devstral Small 2" +description = "Compact multimodal coding model for repository exploration, file editing, and software agents" +family = "devstral" +release_date = "2025-12-09" +last_updated = "2025-12-09" +attachment = true +reasoning = false +temperature = true +tool_call = true +knowledge = "2025-12" +open_weights = true +license = "Apache-2.0" + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text", "image"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/mistralai/Devstral-Small-2-24B-Instruct-2512" diff --git a/models/mistral/magistral-small-2509.toml b/models/mistral/magistral-small-2509.toml new file mode 100644 index 00000000000..f4dcc38c9e9 --- /dev/null +++ b/models/mistral/magistral-small-2509.toml @@ -0,0 +1,27 @@ +# https://docs.mistral.ai/models/magistral-small-1-2-25-09 +# https://huggingface.co/mistralai/Magistral-Small-2509 +# https://huggingface.co/mistralai/Magistral-Small-2509/blob/main/generation_config.json +# Native generation config sets max_new_tokens = 131072, matching the model card's max_tokens setting. +name = "Magistral Small 1.2" +description = "Open multimodal reasoning model for transparent analysis of text and images" +family = "magistral" +release_date = "2025-09-18" +last_updated = "2025-09-18" +attachment = true +reasoning = true +temperature = true +tool_call = true +open_weights = true +license = "Apache 2.0" + +[limit] +context = 131_072 +output = 131_072 + +[modalities] +input = ["text", "image"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/mistralai/Magistral-Small-2509" diff --git a/models/mistral/ministral-14b.toml b/models/mistral/ministral-14b.toml new file mode 100644 index 00000000000..28621ad6129 --- /dev/null +++ b/models/mistral/ministral-14b.toml @@ -0,0 +1,26 @@ +# Sources: +# https://mistral.ai/news/mistral-3/ +# https://huggingface.co/mistralai/Ministral-3-14B-Instruct-2512 +name = "Ministral 14B" +description = "Compact multimodal Mistral model for local assistants, edge agents, and efficient tool use" +family = "ministral" +release_date = "2025-12-02" +last_updated = "2025-12-02" +attachment = true +reasoning = false +temperature = true +tool_call = true +open_weights = true +license = "Apache-2.0" + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text", "image"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/mistralai/Ministral-3-14B-Instruct-2512" diff --git a/models/mistral/ministral-3-14b-instruct-2512.toml b/models/mistral/ministral-3-14b-instruct-2512.toml new file mode 100644 index 00000000000..f39bfa4efe3 --- /dev/null +++ b/models/mistral/ministral-3-14b-instruct-2512.toml @@ -0,0 +1,29 @@ +# https://docs.mistral.ai/models/ministral-3-14b-25-12 +# https://huggingface.co/mistralai/Ministral-3-14B-Instruct-2512 +# https://huggingface.co/mistralai/Ministral-3-14B-Instruct-2512/blob/main/generation_config.json +# Native examples request max_tokens = 262144; generation_config.max_length is also 262144. +# This is a shared prompt/generation ceiling, not a host-specific independent output cap. +name = "Ministral 3 14B" +description = "Open vision-language model for efficient local deployment, instruction following, and tool use" +family = "ministral" +release_date = "2025-12-02" +last_updated = "2025-12-02" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true +license = "Apache 2.0" + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text", "image"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/mistralai/Ministral-3-14B-Instruct-2512" diff --git a/models/mistral/ministral-3-3b-instruct-2512.toml b/models/mistral/ministral-3-3b-instruct-2512.toml new file mode 100644 index 00000000000..e3b6fdfeea8 --- /dev/null +++ b/models/mistral/ministral-3-3b-instruct-2512.toml @@ -0,0 +1,29 @@ +# https://mistral.ai/news/mistral-3 +# https://huggingface.co/mistralai/Ministral-3-3B-Instruct-2512 +# https://huggingface.co/mistralai/Ministral-3-3B-Instruct-2512/blob/main/generation_config.json +# Native examples request max_tokens = 262144; generation_config.max_length is also 262144. +# This is a shared prompt/generation ceiling, not a host-specific independent output cap. +name = "Ministral 3 3B" +description = "Compact open vision-language model for edge deployment, instruction following, and tool use" +family = "ministral" +release_date = "2025-12-02" +last_updated = "2025-12-02" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true +license = "Apache 2.0" + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text", "image"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/mistralai/Ministral-3-3B-Instruct-2512" diff --git a/models/mistral/ministral-3-8b-instruct-2512.toml b/models/mistral/ministral-3-8b-instruct-2512.toml new file mode 100644 index 00000000000..493dc85c43c --- /dev/null +++ b/models/mistral/ministral-3-8b-instruct-2512.toml @@ -0,0 +1,29 @@ +# https://mistral.ai/news/mistral-3 +# https://huggingface.co/mistralai/Ministral-3-8B-Instruct-2512 +# https://huggingface.co/mistralai/Ministral-3-8B-Instruct-2512/blob/main/generation_config.json +# Native examples request max_tokens = 262144; generation_config.max_length is also 262144. +# This is a shared prompt/generation ceiling, not a host-specific independent output cap. +name = "Ministral 3 8B" +description = "Compact open vision-language model for edge deployment, instruction following, and tool use" +family = "ministral" +release_date = "2025-12-02" +last_updated = "2025-12-02" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true +license = "Apache 2.0" + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text", "image"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/mistralai/Ministral-3-8B-Instruct-2512" diff --git a/models/mistral/ministral-3b.toml b/models/mistral/ministral-3b.toml new file mode 100644 index 00000000000..ab4a0a28366 --- /dev/null +++ b/models/mistral/ministral-3b.toml @@ -0,0 +1,22 @@ +# Sources: +# https://mistral.ai/news/ministraux/ +# https://ai.azure.com/catalog/models/Ministral-3B +name = "Ministral 3B" +description = "Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads" +family = "ministral" +release_date = "2024-10-16" +last_updated = "2024-10-16" +attachment = false +reasoning = false +temperature = true +tool_call = true +knowledge = "2024-03" +open_weights = true + +[limit] +context = 128_000 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/models/mistral/mistral-large-2512.toml b/models/mistral/mistral-large-2512.toml index 7efdb8119a5..9905e0e1c5b 100644 --- a/models/mistral/mistral-large-2512.toml +++ b/models/mistral/mistral-large-2512.toml @@ -1,7 +1,8 @@ +# https://mistral.ai/news/mistral-3 name = "Mistral Large 3" description = "Mistral's largest general model for enterprise agents, coding, and multilingual reasoning" family = "mistral-large" -release_date = "2024-11-01" +release_date = "2025-12-02" last_updated = "2025-12-02" attachment = true reasoning = false diff --git a/models/mistral/pixtral-large-2502.toml b/models/mistral/pixtral-large-2502.toml new file mode 100644 index 00000000000..28f902e7f32 --- /dev/null +++ b/models/mistral/pixtral-large-2502.toml @@ -0,0 +1,18 @@ +name = "Pixtral Large (25.02)" +description = "Mistral vision-language model for image understanding and multimodal chat" +family = "pixtral" +release_date = "2025-04-08" +last_updated = "2025-04-08" +attachment = true +reasoning = false +temperature = true +tool_call = true +open_weights = false + +[limit] +context = 128_000 +output = 8_192 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/models/mistral/voxtral-mini-3b-2507.toml b/models/mistral/voxtral-mini-3b-2507.toml new file mode 100644 index 00000000000..af016cdd17d --- /dev/null +++ b/models/mistral/voxtral-mini-3b-2507.toml @@ -0,0 +1,29 @@ +# https://mistral.ai/news/voxtral/ +# https://huggingface.co/mistralai/Voxtral-Mini-3B-2507 +# https://huggingface.co/mistralai/Voxtral-Mini-3B-2507/blob/main/params.json +# https://docs.mistral.ai/api/endpoint/chat +# Native params specify 32768 positions, matching the card's 32k context. +# Output is this shared-window ceiling: prompt + max_tokens must fit; no separate native output cap is published. +name = "Voxtral Mini 3B 2507" +description = "Open audio-language model for speech transcription, audio understanding, and voice-driven tool use" +family = "voxtral" +release_date = "2025-07-15" +last_updated = "2025-07-15" +attachment = true +reasoning = false +temperature = true +tool_call = true +open_weights = true +license = "Apache 2.0" + +[limit] +context = 32_768 +output = 32_768 + +[modalities] +input = ["text", "audio"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/mistralai/Voxtral-Mini-3B-2507" diff --git a/models/mistral/voxtral-small-24b-2507.toml b/models/mistral/voxtral-small-24b-2507.toml new file mode 100644 index 00000000000..c42b7c07608 --- /dev/null +++ b/models/mistral/voxtral-small-24b-2507.toml @@ -0,0 +1,29 @@ +# https://mistral.ai/news/voxtral/ +# https://huggingface.co/mistralai/Voxtral-Small-24B-2507 +# https://huggingface.co/mistralai/Voxtral-Small-24B-2507/blob/main/params.json +# https://docs.mistral.ai/api/endpoint/chat +# Native params specify 32768 positions, matching the card's 32k context. +# Output is this shared-window ceiling: prompt + max_tokens must fit; no separate native output cap is published. +name = "Voxtral Small 24B 2507" +description = "Open audio-language model for speech transcription, audio understanding, and voice-driven tool use" +family = "voxtral" +release_date = "2025-07-15" +last_updated = "2025-07-15" +attachment = true +reasoning = false +temperature = true +tool_call = true +open_weights = true +license = "Apache 2.0" + +[limit] +context = 32_768 +output = 32_768 + +[modalities] +input = ["text", "audio"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/mistralai/Voxtral-Small-24B-2507" diff --git a/models/mixedbread/toast-1.toml b/models/mixedbread/toast-1.toml new file mode 100644 index 00000000000..775acb667f6 --- /dev/null +++ b/models/mixedbread/toast-1.toml @@ -0,0 +1,19 @@ +# Sources (accessed 2026-09-19): +# https://www.mixedbread.com/docs/agent/models +# https://www.mixedbread.com/docs/agent/chat-completions +name = "Toast 1" +description = "Specialized search model for knowledge-intensive questions, multi-step retrieval, and evidence synthesis" +release_date = "2026-08-13" +last_updated = "2026-08-13" +attachment = false +reasoning = false +tool_call = true +open_weights = false + +[limit] +context = 131_000 +output = 4_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/models/moonshotai/kimi-k2.8-preview.toml b/models/moonshotai/kimi-k2.8-preview.toml new file mode 100644 index 00000000000..358b443e6d5 --- /dev/null +++ b/models/moonshotai/kimi-k2.8-preview.toml @@ -0,0 +1,18 @@ +# https://www.kimi.com/code/docs/en/kimi-code/models.html +# https://www.kimi.com/code/docs/en/kimi-code/whats-new.html#k2-8-preview-september-11-2026 +name = "Kimi K2.8 Preview" +description = "Kimi coding model with more efficient thinking and up to 1M context, available through Kimi Code" +family = "kimi-k2" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +tool_call = true +open_weights = false + +[limit] +context = 1_048_576 + +[modalities] +input = ["text", "image", "video"] +output = ["text"] diff --git a/models/motif-technologies/motif-3.toml b/models/motif-technologies/motif-3.toml new file mode 100644 index 00000000000..c42517fba3d --- /dev/null +++ b/models/motif-technologies/motif-3.toml @@ -0,0 +1,33 @@ +# Source: https://huggingface.co/Motif-Technologies/Motif-3 (accessed +# 2026-09-14): repo created 2026-08-07, 155 safetensors shards, ungated, +# MIT license. +# tool_call: the model card documents agentic tool use and ships a vLLM +# --tool-call-parser motif; live probe on 2026-09-14 returned a real +# tool_calls response (finish_reason = tool_calls). +# temperature: the card evaluates at sampling temperature 1.0; live probe on +# 2026-09-14 accepted 0.2 and 1.7, with 1.7 visibly changing the output. +name = "Motif 3" +family = "motif" +description = "Motif 3 is a large-scale, decoder-only Mixture-of-Experts (MoE) language model with 314 billion total parameters and 13.2 billion parameters activated per token." +release_date = "2026-08-07" +last_updated = "2026-08-07" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = false +open_weights = true +license = "MIT" + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text"] +output = ["text"] + +[[weights]] +label = "Model weights" +url = "https://huggingface.co/Motif-Technologies/Motif-3" +format = "safetensors" diff --git a/models/nex-agi/nex-n2-pro.toml b/models/nex-agi/nex-n2-pro.toml new file mode 100644 index 00000000000..3b134613e5f --- /dev/null +++ b/models/nex-agi/nex-n2-pro.toml @@ -0,0 +1,23 @@ +# https://huggingface.co/nex-agi/Nex-N2-Pro +name = "Nex-N2-Pro" +description = "Open agentic MoE model (397B total, 17B active) for coding, tool use, and research workflows" +release_date = "2026-06-02" +last_updated = "2026-06-02" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text", "image"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/nex-agi/Nex-N2-Pro" diff --git a/models/openai/gpt-6-astra-fast.toml b/models/openai/gpt-6-astra-fast.toml new file mode 100644 index 00000000000..01b748aaf2f --- /dev/null +++ b/models/openai/gpt-6-astra-fast.toml @@ -0,0 +1,20 @@ +name = "GPT-6 Astra (Fast)" +description = "Fast variant of GPT-6 Astra for low-latency assistance and high-volume workloads." +family = "gpt-astra" +release_date = "2026-09-04" +last_updated = "2026-09-04" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +open_weights = false + +[limit] +context = 1_050_000 +input = 922_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/models/openai/gpt-6-astra.toml b/models/openai/gpt-6-astra.toml new file mode 100644 index 00000000000..ea7015c41e4 --- /dev/null +++ b/models/openai/gpt-6-astra.toml @@ -0,0 +1,166 @@ +name = "GPT-6 Astra" +description = "GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation." +family = "gpt-astra" +release_date = "2026-09-04" +last_updated = "2026-09-04" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +knowledge = "2026-04-30" +open_weights = false + +[limit] +context = 1_050_000 +input = 922_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] + +[[benchmarks]] +name = "Agents' Last Exam" +score = 59.3 +source = "https://openai.com/index/gpt-6-astra/" +date = "2026-09-03" + +[[benchmarks]] +name = "OSWorld" +score = 72.6 +metric = "partial score" +dataset = "V2-Offline (v2026.08.08)" +version = "2.0" +source = "https://openai.com/index/gpt-6-astra/" +date = "2026-09-03" + +[[benchmarks]] +name = "ScreenSpot-Pro" +score = 92.7 +metric = "accuracy" +variant = "no tools" +source = "https://openai.com/index/gpt-6-astra/" +date = "2026-09-03" + +[[benchmarks]] +name = "AutomationBench" +score = 41.4 +metric = "success rate" +source = "https://openai.com/index/gpt-6-astra/" +date = "2026-09-03" + +[[benchmarks]] +name = "BenchCAD" +score = 95.9 +metric = "geometric overlap" +variant = "with tools" +source = "https://openai.com/index/gpt-6-astra/" +date = "2026-09-03" + +[[benchmarks]] +name = "BrowseComp" +score = 91.5 +metric = "accuracy" +source = "https://openai.com/index/gpt-6-astra/" +date = "2026-09-03" + +[[benchmarks]] +name = "Terminal-Bench" +score = 57.9 +metric = "success rate" +version = "4.0" +source = "https://openai.com/index/gpt-6-astra/" +date = "2026-09-03" + +[[benchmarks]] +name = "DeepSWE" +score = 74.1 +metric = "resolve rate" +version = "1.1" +source = "https://openai.com/index/gpt-6-astra/" +date = "2026-09-03" + +[[benchmarks]] +name = "FrontierCode" +score = 64.5 +metric = "score" +dataset = "Extended" +version = "1.1" +source = "https://openai.com/index/gpt-6-astra/" +date = "2026-09-03" + +[[benchmarks]] +name = "Terminal-Bench Science" +score = 64.6 +metric = "success rate" +version = "0.1" +source = "https://openai.com/index/gpt-6-astra/" +date = "2026-09-03" + +[[benchmarks]] +name = "FrontierMath" +score = 97.6 +metric = "accuracy" +dataset = "Tier 4" +version = "v2" +source = "https://openai.com/index/gpt-6-astra/" +date = "2026-09-03" + +[[benchmarks]] +name = "GPQA Diamond" +score = 96.0 +metric = "accuracy" +source = "https://openai.com/index/gpt-6-astra/" +date = "2026-09-03" + +[[benchmarks]] +name = "Humanity's Last Exam" +score = 57.2 +metric = "accuracy" +variant = "with tools" +source = "https://openai.com/index/gpt-6-astra/" +date = "2026-09-03" + +[[benchmarks]] +name = "ExploitBench" +score = 100.0 +metric = "success rate" +variant = "without production safeguards" +source = "https://openai.com/index/gpt-6-astra/" +date = "2026-09-03" + +[[benchmarks]] +name = "SRE-Bench" +score = 88.0 +metric = "success rate" +variant = "single attempt" +source = "https://openai.com/index/gpt-6-astra/" +date = "2026-09-03" + +[[benchmarks]] +name = "ARC-AGI-3" +score = 99.9 +metric = "RHAE" +harness = "Responses API" +source = "https://openai.com/index/gpt-6-astra/" +date = "2026-09-03" + +[[benchmarks]] +name = "Artificial Analysis Intelligence Index" +score = 61 +metric = "index score" +variant = "max" +version = "4.1.1" +source = "https://artificialanalysis.ai/articles/benchmarking-gpt-6-astra" +date = "2026-09-03" + +[[benchmarks]] +name = "Artificial Analysis Coding Agent Index" +score = 67 +metric = "index score" +harness = "Codex" +variant = "max" +version = "1.4" +source = "https://artificialanalysis.ai/articles/benchmarking-gpt-6-astra" +date = "2026-09-03" diff --git a/models/openai/gpt-6-luna.toml b/models/openai/gpt-6-luna.toml new file mode 100644 index 00000000000..0a43442c0a5 --- /dev/null +++ b/models/openai/gpt-6-luna.toml @@ -0,0 +1,21 @@ +name = "GPT-6 Luna" +description = "OpenAI's most efficient model for focused, high-volume tasks" +family = "gpt-luna" +release_date = "2026-09-22" +last_updated = "2026-09-22" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +knowledge = "2026-05-18" +open_weights = false + +[limit] +context = 1_050_000 +input = 922_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/models/openai/gpt-6-sol.toml b/models/openai/gpt-6-sol.toml new file mode 100644 index 00000000000..824b5d86bed --- /dev/null +++ b/models/openai/gpt-6-sol.toml @@ -0,0 +1,21 @@ +name = "GPT-6 Sol" +description = "OpenAI model for complex coding and agentic workflows" +family = "gpt-sol" +release_date = "2026-09-22" +last_updated = "2026-09-22" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +knowledge = "2026-04-20" +open_weights = false + +[limit] +context = 1_050_000 +input = 922_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/models/openai/gpt-image-2.5-flare.toml b/models/openai/gpt-image-2.5-flare.toml new file mode 100644 index 00000000000..e74eb10baa8 --- /dev/null +++ b/models/openai/gpt-image-2.5-flare.toml @@ -0,0 +1,18 @@ +name = "GPT Image 2.5 Flare" +description = "Image model for prompt-driven generation, editing, and visual design workflows" +family = "gpt-image" +release_date = "2026-09-08" +last_updated = "2026-09-08" +attachment = true +reasoning = false +temperature = false +tool_call = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text", "image"] +output = ["image"] diff --git a/models/openai/gpt-image-2.5-sunburst.toml b/models/openai/gpt-image-2.5-sunburst.toml new file mode 100644 index 00000000000..871d743973f --- /dev/null +++ b/models/openai/gpt-image-2.5-sunburst.toml @@ -0,0 +1,18 @@ +name = "GPT Image 2.5 Sunburst" +description = "Image model for prompt-driven generation, editing, and visual design workflows" +family = "gpt-image" +release_date = "2026-09-08" +last_updated = "2026-09-08" +attachment = true +reasoning = false +temperature = false +tool_call = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text", "image"] +output = ["image"] diff --git a/models/openai/gpt-oss-safeguard-20b.toml b/models/openai/gpt-oss-safeguard-20b.toml new file mode 100644 index 00000000000..c4b69735eee --- /dev/null +++ b/models/openai/gpt-oss-safeguard-20b.toml @@ -0,0 +1,32 @@ +# Model and reasoning controls: https://huggingface.co/openai/gpt-oss-safeguard-20b +# Text-only, reasoning and structured outputs: https://openai.com/index/gpt-oss-safeguard-technical-report/ +# Tool-call format: https://huggingface.co/openai/gpt-oss-safeguard-20b/blob/main/chat_template.jinja +# Context: https://huggingface.co/openai/gpt-oss-safeguard-20b/blob/8a11e17b25c973a24099d4016bf2e17dd7ec1574/config.json +# Output is the configured decoder-context ceiling, not a published hosted-API output maximum. +# Prompt, reasoning and final output share the 131,072-token budget; usable output is the remaining context. +# No separate fixed output cap: https://huggingface.co/openai/gpt-oss-safeguard-20b/blob/8a11e17b25c973a24099d4016bf2e17dd7ec1574/generation_config.json +# Reference generation has a caller-supplied token cap (0 = uncapped): https://github.com/openai/gpt-oss/blob/main/gpt_oss/torch/model.py +# Release: https://openai.com/index/introducing-gpt-oss-safeguard/ +name = "GPT OSS Safeguard 20B" +description = "Safety model for policy screening, moderation, and risk-aware routing workflows" +family = "gpt-oss" +release_date = "2025-10-29" +last_updated = "2025-10-29" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[limit] +context = 131_072 +output = 131_072 + +[modalities] +input = ["text"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/openai/gpt-oss-safeguard-20b" diff --git a/models/openbmb/minicpm5-1b.toml b/models/openbmb/minicpm5-1b.toml new file mode 100644 index 00000000000..01f66f89903 --- /dev/null +++ b/models/openbmb/minicpm5-1b.toml @@ -0,0 +1,25 @@ +# Sources (accessed 2026-09-03): +# https://huggingface.co/openbmb/MiniCPM5-1B (model card, config) +# https://github.com/OpenBMB/MiniCPM (release announcement 2026-05-19) +name = "MiniCPM5-1B" +description = "Dense 1B-class open-source model for on-device and resource-constrained use, with native long-context support, Think / No Think chat modes, and tool calling" +release_date = "2026-05-19" +last_updated = "2026-05-19" +attachment = false +reasoning = true +temperature = true +tool_call = true +open_weights = true +license = "apache-2.0" + +[limit] +context = 131_072 +output = 131_072 + +[modalities] +input = ["text"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/openbmb/MiniCPM5-1B" \ No newline at end of file diff --git a/models/openbmb/minicpm5-2b.toml b/models/openbmb/minicpm5-2b.toml new file mode 100644 index 00000000000..584fcc99009 --- /dev/null +++ b/models/openbmb/minicpm5-2b.toml @@ -0,0 +1,26 @@ +# Sources (accessed 2026-09-14): +# https://huggingface.co/openbmb/MiniCPM5-2B (model card, config.json) +# Hub createdAt 2026-09-06, lastModified 2026-09-12; open-weights drop of +# MiniCPM5-2B with BF16 final release (RL + OPD post-training). +name = "MiniCPM5-2B" +description = "Dense 2B-class open-source model for on-device and resource-constrained use, with native long-context support, tool calling, and agentic tasks" +release_date = "2026-09-06" +last_updated = "2026-09-12" +attachment = false +reasoning = true +temperature = true +tool_call = true +open_weights = true +license = "apache-2.0" + +[limit] +context = 131_072 +output = 131_072 + +[modalities] +input = ["text"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/openbmb/MiniCPM5-2B" diff --git a/models/quiverai/arrow-2-telos.toml b/models/quiverai/arrow-2-telos.toml new file mode 100644 index 00000000000..ae0e17b52d6 --- /dev/null +++ b/models/quiverai/arrow-2-telos.toml @@ -0,0 +1,19 @@ +# Sources (accessed 2026-09-19): +# https://docs.quiver.ai/developers/models +# https://docs.quiver.ai/developers/models/arrow-2-telos +name = "Arrow 2 Telos" +description = "High-fidelity SVG generation model for complex vector work and long-context refinement" +release_date = "2026-09-16" +last_updated = "2026-09-16" +attachment = true +reasoning = true +tool_call = true +open_weights = false + +[limit] +context = 1_050_000 +output = 65_536 + +[modalities] +input = ["text", "image"] +output = ["text", "image"] diff --git a/models/quiverai/arrow-2.toml b/models/quiverai/arrow-2.toml new file mode 100644 index 00000000000..5d73a411794 --- /dev/null +++ b/models/quiverai/arrow-2.toml @@ -0,0 +1,19 @@ +# Sources (accessed 2026-09-19): +# https://docs.quiver.ai/developers/models +# https://docs.quiver.ai/developers/models/arrow-2 +name = "Arrow 2" +description = "Fast SVG generation model for creation, vectorization, editing, and animation" +release_date = "2026-09-16" +last_updated = "2026-09-16" +attachment = true +reasoning = true +tool_call = true +open_weights = false + +[limit] +context = 131_072 +output = 65_536 + +[modalities] +input = ["text", "image"] +output = ["text", "image"] diff --git a/models/stepfun/step-5-preview.toml b/models/stepfun/step-5-preview.toml new file mode 100644 index 00000000000..e4718be0938 --- /dev/null +++ b/models/stepfun/step-5-preview.toml @@ -0,0 +1,20 @@ +name = "Step 5 Preview" +description = "StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window" +# release_date is StepFun's API catalog first-appearance timestamp (created=1789564127, +# 2026-09-16 13:08 UTC) — no dated launch announcement was found on the model docs page. +release_date = "2026-09-16" +last_updated = "2026-09-20" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false + +[limit] +context = 1_000_000 +input = 1_000_000 +output = 1_000_000 + +[modalities] +input = ["text", "image", "video"] +output = ["text"] diff --git a/models/tencent/hy3.toml b/models/tencent/hy3.toml index 34f40d92c92..f5d2f84d73e 100644 --- a/models/tencent/hy3.toml +++ b/models/tencent/hy3.toml @@ -1,3 +1,4 @@ +# https://cloud.tencent.com/document/product/1823/130051 name = "Hy3" description = "Tencent Hy reasoning model for coding, instruction following, and agent tasks" family = "Hy" @@ -11,7 +12,8 @@ open_weights = true [limit] context = 256_000 -output = 64_000 +input = 192_000 +output = 128_000 [modalities] input = ["text"] diff --git a/models/tencent/hy4-preview.toml b/models/tencent/hy4-preview.toml new file mode 100644 index 00000000000..50bce9915d3 --- /dev/null +++ b/models/tencent/hy4-preview.toml @@ -0,0 +1,18 @@ +name = "Hy4 preview" +description = "A next-generation productivity model with significantly enhanced Agent and complex task execution capabilities." +family = "Hy" +release_date = "2026-08-28" +last_updated = "2026-08-28" +attachment = false +reasoning = true +temperature = true +tool_call = true +open_weights = true + +[limit] +context = 1_024_000 +output = 64_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/models/typesafe/jev-latest.toml b/models/typesafe/jev-latest.toml new file mode 100644 index 00000000000..6b54d1bd25f --- /dev/null +++ b/models/typesafe/jev-latest.toml @@ -0,0 +1,24 @@ +# Sources: +# - https://docs.typesafe.ai/models.md +# - https://docs.typesafe.ai/api.md +# - https://typesafe.ai/blog/introducing-system-one-models-and-jev +# The 64k context limit covers the state plus all questions in one request. +name = "Jev" +type = "decision" +description = "System One model for fast, typed probabilistic decisions over text or structured state" +release_date = "2026-09-15" +last_updated = "2026-09-15" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = true +open_weights = false + +[limit] +context = 64000 +output = 0 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/models/unbiased/pareto.toml b/models/unbiased/pareto.toml new file mode 100644 index 00000000000..55da1f5151c --- /dev/null +++ b/models/unbiased/pareto.toml @@ -0,0 +1,22 @@ +# Sources: +# - https://unbiased.ai/model-card/ +# - https://developers.cloudflare.com/ai/models/unbiased/pareto/ +# - https://openrouter.ai/api/v1/models/unbiased/pareto/endpoints +name = "Pareto" +description = "Blended multimodal model that runs multiple language models in parallel and returns a synthesized answer" +release_date = "2026-09-17" +last_updated = "2026-09-17" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[limit] +context = 262_144 +output = 131_072 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/models/vispark/vision-large.toml b/models/vispark/vision-large.toml new file mode 100644 index 00000000000..0c850177b0c --- /dev/null +++ b/models/vispark/vision-large.toml @@ -0,0 +1,26 @@ +# Lab metadata for Vispark Vision Large. +# Provider-agnostic facts about the model Vispark built. +# Served first-party by Vispark Lab via OpenAI-compatible API: https://api.lab.vispark.in/v1 +# Model list: GET https://api.lab.vispark.in/v1/models returns vispark/vision-large +# (verified live 2026-09-13; context_length 1000000, max_output_length 65536 per entry). +# Chat: POST https://api.lab.vispark.in/v1/chat/completions. +# Release 2024-05-15: live endpoint returns created = 1715731200 (= 2024-05-15) per model, +# Last updated 2026-09: current lineup as verified live 2026-09-13 (month precision). +name = "Vision Large" +description = "Most capable Vision model for complex reasoning, detailed media analysis, and structured output over a 1M-token context window." +release_date = "2024-05-15" +last_updated = "2026-09" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[limit] +context = 1_000_000 +output = 65_536 + +[modalities] +input = ["text", "image", "audio", "video", "pdf"] +output = ["text"] diff --git a/models/vispark/vision-medium.toml b/models/vispark/vision-medium.toml new file mode 100644 index 00000000000..89b8b000c7f --- /dev/null +++ b/models/vispark/vision-medium.toml @@ -0,0 +1,26 @@ +# Lab metadata for Vispark Vision Medium. +# Provider-agnostic facts about the model Vispark built. +# Served first-party by Vispark Lab via OpenAI-compatible API: https://api.lab.vispark.in/v1 +# Model list: GET https://api.lab.vispark.in/v1/models returns vispark/vision-medium +# (verified live 2026-09-13; context_length 1000000, max_output_length 65536 per entry). +# Chat: POST https://api.lab.vispark.in/v1/chat/completions. +# Release 2024-05-15: live endpoint returns created = 1715731200 (= 2024-05-15) per model, +# Last updated 2026-09: current lineup as verified live 2026-09-13 (month precision). +name = "Vision Medium" +description = "Balanced multimodal model pairing a 1M-token context window with deeper reasoning for analysis, content creation, and tool use across text, image, audio, video, and PDF inputs." +release_date = "2024-05-15" +last_updated = "2026-09" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[limit] +context = 1_000_000 +output = 65_536 + +[modalities] +input = ["text", "image", "audio", "video", "pdf"] +output = ["text"] diff --git a/models/vispark/vision-small.toml b/models/vispark/vision-small.toml new file mode 100644 index 00000000000..2dce89d0c4f --- /dev/null +++ b/models/vispark/vision-small.toml @@ -0,0 +1,26 @@ +# Lab metadata for Vispark Vision Small. +# Provider-agnostic facts about the model Vispark built. +# Served first-party by Vispark Lab via OpenAI-compatible API: https://api.lab.vispark.in/v1 +# Model list: GET https://api.lab.vispark.in/v1/models returns vispark/vision-small +# (verified live 2026-09-13; context_length 1000000, max_output_length 65536 per entry). +# Chat: POST https://api.lab.vispark.in/v1/chat/completions. +# Release 2024-05-15: live endpoint returns created = 1715731200 (= 2024-05-15) per model, +# Last updated 2026-09: current lineup as verified live 2026-09-13 (month precision). +name = "Vision Small" +description = "Fast, low-cost multimodal model for understanding text, images, audio, video, and PDFs, with tool calling and a 1M-token context window." +release_date = "2024-05-15" +last_updated = "2026-09" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[limit] +context = 1_000_000 +output = 65_536 + +[modalities] +input = ["text", "image", "audio", "video", "pdf"] +output = ["text"] diff --git a/models/vivgrid/viv-fast.toml b/models/vivgrid/viv-fast.toml new file mode 100644 index 00000000000..9bed45cd435 --- /dev/null +++ b/models/vivgrid/viv-fast.toml @@ -0,0 +1,26 @@ +# Sources: +# - https://docs.vivgrid.com/models/viv-fast +# - https://docs.vivgrid.com/api/model-api +name = "Viv Fast" +description = "Fast coding model" +release_date = "2026-09-21" +last_updated = "2026-09-21" +reasoning = true +knowledge = "2026-09" +temperature = false +open_weights = false +tool_call = true +structured_output = true +attachment = true + +[limit] +context = 1_000_000 +output = 256_000 + +[modalities] +input = ["text", "image"] +output = ["text"] + +[[links]] +label = "Model docs" +url = "https://docs.vivgrid.com/models/viv-fast" diff --git a/models/writer/palmyra-x4.toml b/models/writer/palmyra-x4.toml new file mode 100644 index 00000000000..2e4fc6728c4 --- /dev/null +++ b/models/writer/palmyra-x4.toml @@ -0,0 +1,20 @@ +# https://writer.com/blog/actions-with-palmyra-x4/ +# https://dev.writer.com/home/models +name = "Palmyra X4" +description = "Enterprise language model for workflow automation, coding, data analysis, and tool use" +family = "palmyra" +release_date = "2024-10-09" +last_updated = "2025-04-28" +attachment = false +reasoning = true +temperature = true +tool_call = true +open_weights = false + +[limit] +context = 128_000 +output = 4_096 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/models/writer/palmyra-x5.toml b/models/writer/palmyra-x5.toml new file mode 100644 index 00000000000..502ff35e2ec --- /dev/null +++ b/models/writer/palmyra-x5.toml @@ -0,0 +1,21 @@ +# https://writer.com/blog/long-context-palmyra-x5/ +# https://dev.writer.com/home/models +# https://dev.writer.com/home/chat-with-images +name = "Palmyra X5" +description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" +family = "palmyra" +release_date = "2025-04-28" +last_updated = "2025-04-28" +attachment = true +reasoning = true +temperature = true +tool_call = true +open_weights = false + +[limit] +context = 1_000_000 +output = 8_192 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/models/xai/grok-4.1-fast-reasoning.toml b/models/xai/grok-4.1-fast-reasoning.toml new file mode 100644 index 00000000000..497dc490856 --- /dev/null +++ b/models/xai/grok-4.1-fast-reasoning.toml @@ -0,0 +1,22 @@ +# Sources: +# - https://x.ai/news/grok-4-1-fast +# - https://docs.cloud.google.com/vertex-ai/generative-ai/docs/partner-models/grok/grok-4-1-fast +name = "Grok 4.1 Fast (Reasoning)" +description = "xAI's fast agentic tool-calling model with a 2M context window and built-in reasoning" +family = "grok" +release_date = "2025-11-19" +last_updated = "2025-11-19" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[limit] +context = 2_000_000 +output = 30_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/models/xai/grok-4.7.toml b/models/xai/grok-4.7.toml new file mode 100644 index 00000000000..7872d4c7219 --- /dev/null +++ b/models/xai/grok-4.7.toml @@ -0,0 +1,21 @@ +# Sources: https://docs.x.ai/developers/models/grok-4.7, https://docs.x.ai/developers/models +name = "Grok 4.7" +description = "xAI's frontier model for long-running agents, coding, knowledge work, and visual projects" +family = "grok" +knowledge = "2026-05" +release_date = "2026-09-21" +last_updated = "2026-09-21" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[limit] +context = 500_000 +output = 500_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/models/xai/grok-imagine-image-quality.toml b/models/xai/grok-imagine-image-quality.toml new file mode 100644 index 00000000000..46eb1539995 --- /dev/null +++ b/models/xai/grok-imagine-image-quality.toml @@ -0,0 +1,26 @@ +# Sources: +# - https://docs.x.ai/docs/models +# - https://docs.x.ai/developers/models/grok-imagine-image-quality +# - https://docs.x.ai/developers/pricing +# - https://docs.x.ai/docs/guides/image-generation +# Pricing: $0.05/image (1K), $0.07/image (2K); image input $0.01/image (not token-based; no [cost] authored) +# Release: dated alias grok-imagine-image-quality-20260403; also aliased as grok-imagine-image-quality-latest, grok-imagine-image-pro + +name = "Grok Imagine Image Quality" +description = "Higher-fidelity Grok Imagine image model for prompt-driven generation, editing, and visual design workflows" +family = "grok" +release_date = "2026-04-03" +last_updated = "2026-04-03" +attachment = true +reasoning = false +temperature = false +tool_call = false +open_weights = false + +[limit] +context = 16_000 +output = 0 + +[modalities] +input = ["text", "image"] +output = ["image"] diff --git a/models/xai/grok-voice-stt-1.0.toml b/models/xai/grok-voice-stt-1.0.toml new file mode 100644 index 00000000000..725c96c69d7 --- /dev/null +++ b/models/xai/grok-voice-stt-1.0.toml @@ -0,0 +1,17 @@ +name = "Grok Voice STT 1.0" +description = "Grok Voice STT 1.0 is xAI's speech-to-text model. It supports transcription with word-level timestamps, optional speaker diarization, and multichannel audio." +release_date = "2026-08-04" +last_updated = "2026-08-04" +attachment = true +reasoning = false +temperature = false +tool_call = false +open_weights = false + +[limit] +context = 15_000 +output = 15_000 + +[modalities] +input = ["audio"] +output = ["text"] diff --git a/models/xai/grok-voice-tts-1.0.toml b/models/xai/grok-voice-tts-1.0.toml new file mode 100644 index 00000000000..b519e016a19 --- /dev/null +++ b/models/xai/grok-voice-tts-1.0.toml @@ -0,0 +1,17 @@ +name = "Grok Voice TTS 1.0" +description = "Convert text into spoken audio with a single API call. The API supports a rich set of expressive voices, inline speech tags for fine-grained delivery control, and output formats from high-fidelity MP3 to telephony-optimized μ-law." +release_date = "2026-07-31" +last_updated = "2026-07-31" +attachment = false +reasoning = false +temperature = false +tool_call = false +open_weights = false + +[limit] +context = 15_000 +output = 15_000 + +[modalities] +input = ["text"] +output = ["audio"] diff --git a/models/xiaomi/mimo-v2.6-flash.toml b/models/xiaomi/mimo-v2.6-flash.toml new file mode 100644 index 00000000000..2ac6276589a --- /dev/null +++ b/models/xiaomi/mimo-v2.6-flash.toml @@ -0,0 +1,22 @@ +name = "MiMo-V2.6-Flash" +description = "MiMo Flash model for multimodal coding agents and long-context automation" +family = "mimo" +release_date = "2026-09-22" +last_updated = "2026-09-22" +attachment = true +reasoning = true +temperature = true +tool_call = true +open_weights = true + +[limit] +context = 1_048_576 +output = 131_072 + +[modalities] +input = ["text", "image", "audio", "video"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/XiaomiMiMo/MiMo-V2.6-Flash-RL" diff --git a/models/xiaomi/mimo-v2.6-pro-ultraspeed.toml b/models/xiaomi/mimo-v2.6-pro-ultraspeed.toml new file mode 100644 index 00000000000..82d134ed28a --- /dev/null +++ b/models/xiaomi/mimo-v2.6-pro-ultraspeed.toml @@ -0,0 +1,22 @@ +name = "MiMo-V2.6-Pro-UltraSpeed" +description = "MiMo pro model for strong multimodal reasoning and agent execution" +family = "mimo" +release_date = "2026-09-21" +last_updated = "2026-09-21" +attachment = true +reasoning = true +temperature = true +tool_call = true +open_weights = true + +[limit] +context = 1_048_576 +output = 131_072 + +[modalities] +input = ["text", "image", "audio", "video"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/XiaomiMiMo/MiMo-V2.6-Pro-RL" diff --git a/models/xiaomi/mimo-v2.6-pro.toml b/models/xiaomi/mimo-v2.6-pro.toml new file mode 100644 index 00000000000..fc53e943157 --- /dev/null +++ b/models/xiaomi/mimo-v2.6-pro.toml @@ -0,0 +1,22 @@ +name = "MiMo-V2.6-Pro" +description = "Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution" +family = "mimo" +release_date = "2026-09-22" +last_updated = "2026-09-22" +attachment = true +reasoning = true +temperature = true +tool_call = true +open_weights = true + +[limit] +context = 1_048_576 +output = 131_072 + +[modalities] +input = ["text", "image", "audio", "video"] +output = ["text"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/XiaomiMiMo/MiMo-V2.6-Pro-RL" diff --git a/models/zhipuai/glm-4.6v-flash.toml b/models/zhipuai/glm-4.6v-flash.toml index c9a3789715b..12d051076bb 100644 --- a/models/zhipuai/glm-4.6v-flash.toml +++ b/models/zhipuai/glm-4.6v-flash.toml @@ -3,7 +3,7 @@ # - https://huggingface.co/zai-org/GLM-4.6V-Flash name = "GLM-4.6V-Flash" description = "Lightweight GLM vision model for visual reasoning, documents, and multimodal agents" -family = "glm" +family = "glm-flash" release_date = "2025-12-08" last_updated = "2025-12-08" attachment = true diff --git a/models/zhipuai/glm-5.3-flash.toml b/models/zhipuai/glm-5.3-flash.toml index d77dee2034f..12091c3b2be 100644 --- a/models/zhipuai/glm-5.3-flash.toml +++ b/models/zhipuai/glm-5.3-flash.toml @@ -1,6 +1,7 @@ +# Open weights: https://huggingface.co/zai-org/GLM-5.3-Flash (MIT, safetensors) name = "GLM-5.3-Flash" description = "Native multimodal GLM model for efficient coding and long-horizon agent tasks" -family = "glm" +family = "glm-flash" release_date = "2026-08-26" last_updated = "2026-08-26" attachment = true @@ -8,7 +9,7 @@ reasoning = true temperature = true tool_call = true structured_output = true -open_weights = false +open_weights = true [limit] context = 1_000_000 diff --git a/models/zhipuai/glm-5.3.toml b/models/zhipuai/glm-5.3.toml index 948bc6a3882..bb71386ebb3 100644 --- a/models/zhipuai/glm-5.3.toml +++ b/models/zhipuai/glm-5.3.toml @@ -8,7 +8,7 @@ reasoning = true temperature = true tool_call = true structured_output = true -open_weights = false +open_weights = true [limit] context = 1_000_000 diff --git a/models/zhipuai/glm-image.toml b/models/zhipuai/glm-image.toml new file mode 100644 index 00000000000..b3f3746cb2e --- /dev/null +++ b/models/zhipuai/glm-image.toml @@ -0,0 +1,22 @@ +name = "GLM-Image" +description = "GLM-Image is an image generation model adopts a hybrid autoregressive + diffusion decoder architecture. In general image generation quality, GLM‑Image aligns with mainstream latent diffusion approaches, but it shows significant advantages in text-rendering and knowledge‑intensive generation scenarios. It performs especially well in tasks requiring precise semantic understanding and complex information expression, while maintaining strong capabilities in high‑fidelity and fine‑grained detail generation. In addition to text‑to‑image generation, GLM‑Image also supports a rich set of image‑to‑image tasks including image editing, style transfer, identity‑preserving generation, and multi‑subject consistency." +release_date = "2026-01-19" +last_updated = "2026-01-19" +attachment = true +reasoning = false +temperature = false +tool_call = false +open_weights = true +license = "MIT" + +[limit] +context = 10_240 +output = 0 + +[modalities] +input = ["text", "image"] +output = ["image"] + +[[weights]] +label = "Hugging Face" +url = "https://huggingface.co/zai-org/GLM-Image" diff --git a/package.json b/package.json index 4a7b90393f7..099cbc05e8b 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,8 @@ "vercel:generate": "bun ./packages/core/script/sync-models.ts vercel", "wandb:generate": "bun ./packages/core/script/sync-models.ts wandb", "digitalocean:sync": "bun ./packages/core/script/sync-models.ts digitalocean", + "aiand:sync": "bun ./packages/core/script/sync-models.ts aiand", + "fireworks:sync": "bun ./packages/core/script/sync-models.ts fireworks-ai", "ambient:sync": "bun ./packages/core/script/sync-models.ts ambient", "models:sync": "bun ./packages/core/script/sync-models.ts", "sync:models": "bun ./packages/core/script/sync-models.ts", diff --git a/packages/core/script/generate-cloudflare-ai-gateway.ts b/packages/core/script/generate-cloudflare-ai-gateway.ts index f44c36e38c9..447e05a4d26 100644 --- a/packages/core/script/generate-cloudflare-ai-gateway.ts +++ b/packages/core/script/generate-cloudflare-ai-gateway.ts @@ -1,417 +1,18 @@ #!/usr/bin/env bun -// -// Regenerate the cloudflare-ai-gateway provider model TOMLs from Cloudflare's own sources, -// with human curation reduced to providers/cloudflare-ai-gateway/curation.toml. -// -// Scope: proxied third-party models only (anthropic, openai, google, xai, alibaba, deepseek, -// moonshotai, …). Cloudflare's own Workers AI (@cf/...) models are a different pathway — hosted -// on Cloudflare, CF-token auth, model agreements — and live in their own provider, -// providers/cloudflare-workers-ai, so they are deliberately not mirrored here. -// -// Source of truth (live): -// - GET /accounts/{id}/ai/catalog/models — canonical dotted model_id, name, description, -// context_length, max_output_tokens, and pricing (flat or context-tiered). -// -// curation.toml holds only what that source cannot express: structured_output (a quality -// judgement — Cloudflare advertises response_format broadly but several models do not honour -// it), reasoning_options (the catalog has no reasoning schema), limit divergences, and a skip -// list for catalog ids with no lab file (or not reachable via unified billing). -// -// Env: CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID -// CF_AIG_FIXTURE_DIR (optional) — read cached catalog* JSON instead of the network. -// -// Usage: -// CLOUDFLARE_API_TOKEN=… CLOUDFLARE_ACCOUNT_ID=… bun run cloudflare-ai-gateway:generate -// bun run cloudflare-ai-gateway:generate --check # fail if the tree would change -import path from "node:path"; -import { readdirSync, readFileSync, statSync, existsSync, rmSync } from "node:fs"; -import { z } from "zod"; -import { formatToml } from "../src/sync/index.ts"; +import { syncProviderByID } from "../src/sync/index.js"; -const PROVIDER_DIR = path.join( - import.meta.dirname, "..", "..", "..", "providers", "cloudflare-ai-gateway", -); -const MODELS_DIR = path.join(PROVIDER_DIR, "models"); -const MODELS_ROOT = path.join(import.meta.dirname, "..", "..", "..", "models"); -const CURATION_PATH = path.join(PROVIDER_DIR, "curation.toml"); +const check = process.argv.includes("--check"); +const result = await syncProviderByID("cloudflare-ai-gateway", { dryRun: check }); -const TEXT_GENERATION = "Text Generation"; - -// Proxied providers that Cloudflare fronts with a *native* passthrough route rather than the -// gateway's generic OpenAI-compatible transform: Anthropic keeps the Messages API, OpenAI keeps -// the Responses API. Advertise each model's native SDK so consumers route to the endpoint that -// serves it best instead of falling back to the provider default (ai-gateway-provider). Other -// third-party providers Cloudflare only exposes over the compat route inherit that default. -// https://developers.cloudflare.com/ai-gateway/usage/providers/anthropic/ -// https://developers.cloudflare.com/ai-gateway/usage/providers/openai/ -const NATIVE_NPM: Record = { - anthropic: "@ai-sdk/anthropic", - openai: "@ai-sdk/openai", -}; -function nativeNpm(id: string): string | undefined { - return NATIVE_NPM[id.split("/")[0]!]; -} - -// --------------------------------------------------------------------------- -// curation.toml schema -// --------------------------------------------------------------------------- -const ReasoningOption = z.record(z.any()); -const CuratedModel = z - .object({ - base_model: z.string().min(1).optional(), - structured_output: z.boolean().optional(), - reasoning_options: z.array(ReasoningOption).optional(), - limit: z.record(z.number()).optional(), - interleaved: z - .union([z.literal(true), z.object({ field: z.enum(["reasoning_content", "reasoning_details"]) }).strict()]) - .optional(), - // Leading `#` comment lines, e.g. a toggle/effort wire-path note (AGENTS.md requires one - // for every `toggle` reasoning option) or a source citation. Rendered verbatim above the - // generated fields so hand-verified host behavior survives every regeneration. - note: z.array(z.string()).optional(), - }) - .strict(); - -const Curation = z - .object({ - skip: z.array(z.string()).default([]), - models: z.record(CuratedModel).default({}), - }) - .strict(); - -// --------------------------------------------------------------------------- -// Fetch (with fixture fallback) -// --------------------------------------------------------------------------- -async function fetchAllPages(url: string, token: string, perPage: number) { - const out: any[] = []; - for (let page = 1; page < 50; page++) { - const res = await fetch(`${url}?page=${page}&per_page=${perPage}`, { - headers: { Authorization: `Bearer ${token}` }, - }); - if (!res.ok) throw new Error(`Fetch failed ${res.status} ${res.statusText} for ${url}`); - const json: any = await res.json(); - out.push(...(json.result ?? [])); - const total = json.result_info?.total_count ?? out.length; - if (out.length >= total || (json.result ?? []).length === 0) break; - } - return out; -} - -// Fetch with retry on 429/5xx. raw.githubusercontent.com rate-limits bursts, so honour -// Retry-After when present and otherwise back off exponentially. Returns the Response; -// callers decide how to treat a final !ok (throw vs. tolerate). -async function fetchWithRetry(url: string, init?: RequestInit, tries = 5): Promise { - let delay = 500; - for (let attempt = 1; ; attempt++) { - const res = await fetch(url, init); - if (res.ok || (res.status !== 429 && res.status < 500) || attempt >= tries) return res; - const retryAfter = Number(res.headers.get("retry-after")); - const wait = Number.isFinite(retryAfter) && retryAfter > 0 ? retryAfter * 1000 : delay; - await new Promise((r) => setTimeout(r, wait)); - delay = Math.min(delay * 2, 8000); - } -} - -// Run async tasks with bounded concurrency to avoid tripping rate limits. -async function mapLimit(items: T[], limit: number, fn: (item: T) => Promise): Promise { - const results = new Array(items.length); - let next = 0; - const workers = Array.from({ length: Math.min(limit, items.length) }, async () => { - while (true) { - const i = next++; - if (i >= items.length) break; - results[i] = await fn(items[i]!); - } - }); - await Promise.all(workers); - return results; -} - -// Load rows from every fixture file whose name starts with prefix, de-duplicated by their -// catalog model_id. Dedup guards against overlapping snapshot files inflating the model set. -function loadFixtureRows(dir: string, prefix: string): any[] { - const byId = new Map(); - for (const f of readdirSync(dir).filter((f) => f.startsWith(prefix) && f.endsWith(".json"))) { - for (const row of JSON.parse(readFileSync(path.join(dir, f), "utf8")).result ?? []) { - const key = row.model_id ?? row.name ?? JSON.stringify(row); - byId.set(key, row); - } - } - return [...byId.values()]; -} - -async function loadProxied() { - const fixtureDir = process.env.CF_AIG_FIXTURE_DIR; - if (fixtureDir) return loadFixtureRows(fixtureDir, "catalog"); - const token = process.env.CLOUDFLARE_API_TOKEN; - const account = process.env.CLOUDFLARE_ACCOUNT_ID; - if (!token || !account) { - throw new Error( - "Set CLOUDFLARE_API_TOKEN + CLOUDFLARE_ACCOUNT_ID (or CF_AIG_FIXTURE_DIR for offline runs).", - ); - } - const base = `https://api.cloudflare.com/client/v4/accounts/${account}/ai`; - return fetchAllPages(`${base}/catalog/models`, token, 50); -} - -// Load the per-model catalog schema for a proxied model. The list endpoint omits `schema`; -// the single-model schema endpoint returns schema.input, from which reasoning_options are -// derivable for OpenAI-compatible providers (xai, alibaba, openai). Providers whose schema -// is their native shape (google, anthropic, deepseek, moonshotai) return no reasoning -// property — those fall back to curation.toml. Returns schema.input or undefined. -async function loadCatalogSchemaInput(id: string): Promise { - const fixtureDir = process.env.CF_AIG_FIXTURE_DIR; - if (fixtureDir) { - const p = path.join(fixtureDir, "schema", `${id.replace(/\//g, "_")}.json`); - if (!existsSync(p)) return undefined; // schema is optional per-model - return JSON.parse(readFileSync(p, "utf8")).result?.schema?.input; - } - const token = process.env.CLOUDFLARE_API_TOKEN!; - const account = process.env.CLOUDFLARE_ACCOUNT_ID!; - const res = await fetchWithRetry( - `https://api.cloudflare.com/client/v4/accounts/${account}/ai/catalog/models/${id}/schema`, - { headers: { Authorization: `Bearer ${token}` } }, - ); - if (!res.ok) return undefined; // treat missing schema as "not derivable" - return ((await res.json()) as any).result?.schema?.input; -} - -// Read the `reasoning` flag from a base lab file (models/.toml). A base model that -// declares reasoning=true MUST carry reasoning_options in the provider file (schema validates -// this), so we hard-fail when neither the catalog schema nor curation can supply them. -function baseReasoning(base: string): boolean { - const p = path.join(MODELS_ROOT, `${base}.toml`); - if (!existsSync(p)) return false; - return (Bun.TOML.parse(readFileSync(p, "utf8")) as any).reasoning === true; -} - -// --------------------------------------------------------------------------- -// Pricing → cost -// --------------------------------------------------------------------------- -const FLAT_KEYS: Record = { - "Input tokens (per 1M)": "input", - "Output tokens (per 1M)": "output", - "Cached input tokens (per 1M)": "cache_read", - "Cache creation tokens (per 1M)": "cache_write", -}; -const TIER_RE = /^(Input|Output|Cached input)\s*(<=?|>=?)\s*(\d+)k\s*\(per 1M\)$/; -const TIER_FIELD: Record = { - Input: "input", - Output: "output", - "Cached input": "cache_read", -}; - -function proxiedCost(pricing: Record, id: string, warnings: string[]) { - const base: Record = {}; - for (const [key, value] of Object.entries(pricing)) { - if (FLAT_KEYS[key]) { - base[FLAT_KEYS[key]] = value; - continue; - } - const m = key.match(TIER_RE); - if (m) { - const [, label, op] = m; - const field = TIER_FIELD[label!]!; - // Cloudflare AI Gateway entries don't carry tiered pricing (unsupported here). Fold the - // lower/default-context band (op "<") into the flat rate and drop the higher-context bands. - if (op!.startsWith("<")) base[field] = value; - continue; - } - warnings.push(`${id}: unmapped pricing key "${key}"`); - } - return { ...base }; -} - -// Derive reasoning_options from a docs schema.input by walking every named property. -function deriveReasoningOptions(schemaInput: unknown): Array> { - let hasToggle = false; - let effortValues: string[] | undefined; - - const visit = (node: unknown) => { - if (Array.isArray(node)) { - node.forEach(visit); - return; - } - if (!node || typeof node !== "object") return; - for (const [key, value] of Object.entries(node as Record)) { - if (key === "properties" && value && typeof value === "object") { - for (const [propName, propSchema] of Object.entries(value as Record)) { - if (propName === "enable_thinking" || propName === "thinking") hasToggle = true; - if (propName === "effort" || propName === "reasoning_effort") { - let enumVals: string[] | undefined = propSchema?.enum; - if (!enumVals) { - for (const branch of [...(propSchema?.anyOf ?? []), ...(propSchema?.oneOf ?? [])]) { - if (Array.isArray(branch?.enum)) enumVals = branch.enum; - } - } - if (enumVals) effortValues = enumVals; - } - visit(propSchema); - } - } else { - visit(value); - } - } - }; - visit(schemaInput); - - const opts: Array> = []; - if (hasToggle) opts.push({ type: "toggle" }); - if (effortValues) opts.push({ type: "effort", values: effortValues }); - return opts; -} - -// Prepend curated leading `#` comment lines (a toggle/effort wire-path note, a source -// citation, etc.) above the generated content. AGENTS.md requires one for every `toggle` -// reasoning option since sync strips mid-file comments on every regeneration. -function withNote(note: string[] | undefined, content: string): string { - if (!note || note.length === 0) return content; - return `${note.map((line) => `# ${line}`).join("\n")}\n\n${content}`; -} - -// --------------------------------------------------------------------------- -// base_model resolution -// --------------------------------------------------------------------------- -function labFileExists(id: string): boolean { - return existsSync(path.join(MODELS_ROOT, `${id}.toml`)); -} -function autoResolveBase(catalogId: string): string | null { - if (labFileExists(catalogId)) return catalogId; - const dashed = catalogId.replace(/\./g, "-"); - if (labFileExists(dashed)) return dashed; - return null; -} - -// --------------------------------------------------------------------------- -// Main -// --------------------------------------------------------------------------- -function walkToml(dir: string): string[] { - if (!existsSync(dir)) return []; - return readdirSync(dir).flatMap((e) => { - const p = path.join(dir, e); - return statSync(p).isDirectory() ? walkToml(p) : p.endsWith(".toml") ? [p] : []; - }); -} - -async function main() { - const check = process.argv.includes("--check"); - - const parsed = Curation.safeParse(Bun.TOML.parse(readFileSync(CURATION_PATH, "utf8"))); - if (!parsed.success) { - console.error("Invalid curation.toml:", parsed.error.issues); +if (check) { + if (result.notices.length > 0) { + console.error(`--check: ${result.notices.join("\n")}`); process.exit(1); } - const curation = parsed.data; - const skip = new Set(curation.skip); - const errors: string[] = []; - const warnings: string[] = []; - - const proxied = await loadProxied(); - const proxiedTextGen = proxied.filter((m) => m.task === TEXT_GENERATION); - - const wanted = new Map(); // absolute path -> content - - // Fetch per-model schemas up front for the proxied models we'll actually emit, with bounded - // concurrency so the catalog/docs endpoints don't rate-limit us. - const proxiedEmit = proxiedTextGen.filter((m) => !skip.has(m.model_id)); - const schemaInputs = new Map(); - await mapLimit(proxiedEmit, 6, async (m) => { - schemaInputs.set(m.model_id, await loadCatalogSchemaInput(m.model_id)); - }); - - // --- proxied models --- - for (const m of proxiedTextGen) { - const id: string = m.model_id; - if (skip.has(id)) continue; - const cur = curation.models[id] ?? {}; - const base = cur.base_model ?? autoResolveBase(id); - if (!base) { - errors.push(`proxied ${id}: no lab file and no curation base_model (add to skip or map it)`); - continue; - } - // name/description are inherited from base_model (models.dev's canonical copy); - // the catalog only carries Cloudflare's own casing/marketing variants. - const model: Record = { base_model: base }; - if (cur.structured_output !== undefined) model.structured_output = cur.structured_output; - if (cur.interleaved !== undefined) model.interleaved = cur.interleaved; - - // reasoning_options: only meaningful when the base actually reasons. The catalog schema - // advertises reasoning_effort for some non-reasoning models (gpt-4.1, gpt-4o) — schema - // acceptance is not capability, so gate on the base's reasoning flag. When the base does - // reason, prefer the per-model catalog schema, then curation, and fail loudly if neither - // supplies a shape (the schema requires reasoning_options whenever reasoning=true). - if (baseReasoning(base)) { - const derivedRo = deriveReasoningOptions(schemaInputs.get(id)); - if (cur.reasoning_options !== undefined) model.reasoning_options = cur.reasoning_options; - else if (derivedRo.length > 0) model.reasoning_options = derivedRo; - else { - errors.push( - `proxied ${id}: base ${base} has reasoning=true but no reasoning_options ` + - `(catalog schema exposes none; add reasoning_options to curation.toml)`, - ); - continue; - } - } - - const cost = proxiedCost(m.pricing ?? {}, id, warnings); - if (Object.keys(cost).length === 0) errors.push(`proxied ${id}: catalog pricing empty`); - model.cost = cost; - - // limit.output: the catalog's max_output_tokens is not a reliable ceiling — verified wrong - // against lab/first-party for gpt-5, gpt-5.5, and claude-haiku-4.5 (all understated by - // 4-8x). Only context_length has checked out, so that's all we auto-derive; output is - // either curated explicitly or left to inherit from base_model. - const limit: Record = {}; - if (m.context_length != null) limit.context = m.context_length; - if (cur.limit) Object.assign(limit, cur.limit); // curation overrides/adds (e.g. served output) - if (Object.keys(limit).length) model.limit = limit; - - const npm = nativeNpm(id); - if (npm) model.provider = { npm }; - - wanted.set(path.join(MODELS_DIR, `${id}.toml`), withNote(cur.note, formatToml(model as any))); - } - - // Guards: a curation model id that no longer appears in the live feed (warn only). - const liveIds = new Set(proxiedTextGen.map((m) => m.model_id)); - for (const id of Object.keys(curation.models)) { - if (!liveIds.has(id)) warnings.push(`curation id not in live feed: ${id}`); - } - - if (errors.length > 0) { - console.error("Errors:\n" + errors.map((e) => ` - ${e}`).join("\n")); + if (result.files.length > 0) { + console.error(`--check: ${result.files.length} file(s) out of date`); process.exit(1); } - for (const w of warnings) console.warn(`warning: ${w}`); - - const existing = new Set(walkToml(MODELS_DIR)); - const wantedPaths = new Set(wanted.keys()); - const toRemove = [...existing].filter((p) => !wantedPaths.has(p)); - - if (check) { - let changed = 0; - for (const [p, content] of wanted) { - const cur = existing.has(p) ? readFileSync(p, "utf8") : undefined; - if (cur !== content) { console.error(`would change: ${path.relative(MODELS_DIR, p)}`); changed++; } - } - for (const p of toRemove) { console.error(`would remove: ${path.relative(MODELS_DIR, p)}`); changed++; } - if (changed > 0) { console.error(`--check: ${changed} file(s) out of date`); process.exit(1); } - console.log("--check: up to date"); - return; - } - - let changed = 0; - for (const [p, content] of wanted) { - const cur = existing.has(p) ? readFileSync(p, "utf8") : undefined; - if (cur !== content) { await Bun.write(p, content); changed++; } - } - for (const p of toRemove) { rmSync(p); changed++; } - - console.log( - `cloudflare-ai-gateway: ${wanted.size} proxied model(s) ` + - `(${changed} written/removed, ${skip.size} skipped, ${warnings.length} warning(s)).`, - ); + console.log("--check: up to date"); } - -await main(); diff --git a/packages/core/script/generate-friendli.ts b/packages/core/script/generate-friendli.ts deleted file mode 100644 index d048f3d8369..00000000000 --- a/packages/core/script/generate-friendli.ts +++ /dev/null @@ -1,505 +0,0 @@ -#!/usr/bin/env bun - -import { mkdir } from "node:fs/promises"; -import path from "node:path"; -import { z } from "zod"; - -import { inferKimiFamily } from "../src/family.js"; - -// Friendli API endpoint -const API_ENDPOINT = "https://api.friendli.ai/serverless/v1/models"; - -// Zod schemas for API response validation -const Functionality = z.object({ - tool_call: z.boolean(), - parallel_tool_call: z.boolean(), - structured_output: z.boolean(), -}); - -const Pricing = z.object({ - input: z.number(), - output: z.number(), - response_time: z.number(), - unit_type: z.enum(["TOKEN", "SECOND"]), -}); - -const FriendliModel = z - .object({ - id: z.string(), - name: z.string(), - max_completion_tokens: z.number(), - context_length: z.number(), - functionality: Functionality, - pricing: Pricing, - hugging_face_url: z.string().optional(), - description: z.string().optional(), - license: z.string().optional(), - policy: z.string().optional().nullable(), - created: z.number(), // Unix timestamp - }) - .passthrough(); - -const FriendliResponse = z.object({ - data: z.array(FriendliModel), -}); - -// Family inference patterns -const familyPatterns: [RegExp, string][] = [ - [/qwen3/i, "qwen3"], - [/deepseek-r1/i, "deepseek-r1"], - [/glm-4/i, "glm-4"], - [/glm-5/i, "glm"], -]; - -function inferFamily(modelId: string, modelName: string): string | undefined { - const kimiFamily = inferKimiFamily(modelId, modelName); - if (kimiFamily !== undefined) return kimiFamily; - - for (const [pattern, family] of familyPatterns) { - if (pattern.test(modelId) || pattern.test(modelName)) { - return family; - } - } - return undefined; -} - -function extractModelName(fullName: string): string { - // "meta-llama/Llama-3.3-70B-Instruct" -> "Llama 3.3 70B Instruct" - const parts = fullName.split("/"); - const modelName = parts.at(-1) ?? fullName; - return modelName - .replace(/-/g, " ") - .replace(/\b\w/g, (l) => l.toUpperCase()); -} - -// TODO: Replace with functionality.parse_reasoning from API when available -function isReasoningModel(modelId: string): boolean { - const nonReasoningPatterns = [ - /qwen3.*instruct/i, - ]; - - for (const pattern of nonReasoningPatterns) { - if (pattern.test(modelId)) { - return false; - } - } - - // Everything else is reasoning or hybrid reasoning - return true; -} - -function formatNumber(n: number): string { - if (n >= 1000) { - // Format with underscores for readability (e.g., 131_072) - return n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, "_"); - } - return n.toString(); -} - -function timestampToDate(timestamp: number): string { - const date = new Date(timestamp * 1000); - return date.toISOString().slice(0, 10); -} - -function getTodayDate(): string { - return new Date().toISOString().slice(0, 10); -} - -interface ExistingModel { - name?: string; - family?: string; - attachment?: boolean; - reasoning?: boolean; - tool_call?: boolean; - structured_output?: boolean; - temperature?: boolean; - knowledge?: string; - release_date?: string; - last_updated?: string; - open_weights?: boolean; - interleaved?: boolean | { field: string }; - status?: string; - cost?: { - input?: number; - output?: number; - reasoning?: number; - cache_read?: number; - cache_write?: number; - }; - limit?: { - context?: number; - input?: number; - output?: number; - }; - modalities?: { - input?: string[]; - output?: string[]; - }; - provider?: { - npm?: string; - api?: string; - }; -} - -async function loadExistingModel( - filePath: string, -): Promise { - try { - const file = Bun.file(filePath); - if (!(await file.exists())) { - return null; - } - const toml = await import(filePath, { with: { type: "toml" } }).then( - (mod) => mod.default, - ); - return toml as ExistingModel; - } catch (e) { - console.warn(`Warning: Failed to parse existing file ${filePath}:`, e); - return null; - } -} - -interface MergedModel { - name: string; - family?: string; - attachment: boolean; - reasoning: boolean; - tool_call: boolean; - structured_output?: boolean; - temperature: boolean; - knowledge?: string; - release_date: string; - last_updated: string; - open_weights: boolean; - interleaved?: boolean | { field: string }; - status?: string; - cost?: { - input: number; - output: number; - }; - limit: { - context: number; - output: number; - }; - modalities: { - input: string[]; - output: string[]; - }; -} - -function mergeModel( - apiModel: z.infer, - existing: ExistingModel | null, -): MergedModel { - const contextTokens = apiModel.context_length; - const outputTokens = apiModel.max_completion_tokens; - - const openWeights = Boolean(apiModel.hugging_face_url); - - const merged: MergedModel = { - // Always from API - name: extractModelName(apiModel.name), - attachment: false, // All Friendli models are text-only currently - reasoning: isReasoningModel(apiModel.id), - tool_call: apiModel.functionality.tool_call, - temperature: true, - release_date: timestampToDate(apiModel.created), - last_updated: getTodayDate(), - open_weights: openWeights, - limit: { - context: contextTokens, - output: outputTokens, - }, - modalities: { - input: ["text"], - output: ["text"], - }, - }; - - // structured_output only if true - if (apiModel.functionality.structured_output === true) { - merged.structured_output = true; - } - - // Cost from API - ONLY include if unit_type is TOKEN - if (apiModel.pricing.unit_type === "TOKEN") { - merged.cost = { - input: apiModel.pricing.input, - output: apiModel.pricing.output, - }; - } else { - console.log( - ` Note: ${apiModel.id} uses ${apiModel.pricing.unit_type} pricing - cost section omitted`, - ); - } - - // Preserve from existing OR infer - if (existing?.family) { - merged.family = existing.family; - } else { - const inferred = inferFamily(apiModel.id, apiModel.name); - if (inferred) { - merged.family = inferred; - } - } - - // Preserve manual fields from existing - if (existing?.knowledge) { - merged.knowledge = existing.knowledge; - } - if (existing?.interleaved !== undefined) { - merged.interleaved = existing.interleaved; - } - if (existing?.status !== undefined) { - merged.status = existing.status; - } - - return merged; -} - -function formatToml(model: MergedModel): string { - const lines: string[] = []; - - // Basic fields - lines.push(`name = "${model.name.replace(/"/g, '\\"')}"`); - if (model.family) { - lines.push(`family = "${model.family}"`); - } - lines.push(`attachment = ${model.attachment}`); - lines.push(`reasoning = ${model.reasoning}`); - lines.push(`tool_call = ${model.tool_call}`); - if (model.structured_output !== undefined) { - lines.push(`structured_output = ${model.structured_output}`); - } - lines.push(`temperature = ${model.temperature}`); - if (model.knowledge) { - lines.push(`knowledge = "${model.knowledge}"`); - } - lines.push(`release_date = "${model.release_date}"`); - lines.push(`last_updated = "${model.last_updated}"`); - lines.push(`open_weights = ${model.open_weights}`); - if (model.status) { - lines.push(`status = "${model.status}"`); - } - - // Interleaved section (if present) - if (model.interleaved !== undefined) { - lines.push(""); - if (model.interleaved === true) { - lines.push(`interleaved = true`); - } else if (typeof model.interleaved === "object") { - lines.push(`[interleaved]`); - lines.push(`field = "${model.interleaved.field}"`); - } - } - - // Cost section (only if present) - if (model.cost) { - lines.push(""); - lines.push(`[cost]`); - lines.push(`input = ${model.cost.input}`); - lines.push(`output = ${model.cost.output}`); - } - - // Limit section - lines.push(""); - lines.push(`[limit]`); - lines.push(`context = ${formatNumber(model.limit.context)}`); - lines.push(`output = ${formatNumber(model.limit.output)}`); - - // Modalities section - lines.push(""); - lines.push(`[modalities]`); - lines.push( - `input = [${model.modalities.input.map((m) => `"${m}"`).join(", ")}]`, - ); - lines.push( - `output = [${model.modalities.output.map((m) => `"${m}"`).join(", ")}]`, - ); - - return lines.join("\n") + "\n"; -} - -interface Changes { - field: string; - oldValue: string; - newValue: string; -} - -function detectChanges( - existing: ExistingModel | null, - merged: MergedModel, -): Changes[] { - if (!existing) return []; - - const changes: Changes[] = []; - - const compare = (field: string, oldVal: unknown, newVal: unknown) => { - const oldStr = JSON.stringify(oldVal); - const newStr = JSON.stringify(newVal); - if (oldStr !== newStr) { - changes.push({ - field, - oldValue: formatValue(oldVal), - newValue: formatValue(newVal), - }); - } - }; - - const formatValue = (val: unknown): string => { - if (typeof val === "number") return formatNumber(val); - if (Array.isArray(val)) return `[${val.join(", ")}]`; - if (val === undefined) return "(none)"; - return String(val); - }; - - compare("name", existing.name, merged.name); - compare("family", existing.family, merged.family); - compare("attachment", existing.attachment, merged.attachment); - compare("reasoning", existing.reasoning, merged.reasoning); - compare("tool_call", existing.tool_call, merged.tool_call); - compare( - "structured_output", - existing.structured_output, - merged.structured_output, - ); - compare("open_weights", existing.open_weights, merged.open_weights); - compare("release_date", existing.release_date, merged.release_date); - compare("cost.input", existing.cost?.input, merged.cost?.input); - compare("cost.output", existing.cost?.output, merged.cost?.output); - compare("limit.context", existing.limit?.context, merged.limit.context); - compare("limit.output", existing.limit?.output, merged.limit.output); - compare("modalities.input", existing.modalities?.input, merged.modalities.input); - - return changes; -} - -async function main() { - const args = process.argv.slice(2); - const dryRun = args.includes("--dry-run"); - - const modelsDir = path.join( - import.meta.dirname, - "..", - "..", - "..", - "providers", - "friendli", - "models", - ); - - if (dryRun) { - console.log(`[DRY RUN] Fetching Friendli models from API...`); - } else { - console.log(`Fetching Friendli models from API...`); - } - - // Fetch API data - const res = await fetch(API_ENDPOINT); - if (!res.ok) { - console.error(`Failed to fetch API: ${res.status} ${res.statusText}`); - process.exit(1); - } - - const json = await res.json(); - const parsed = FriendliResponse.safeParse(json); - if (!parsed.success) { - console.error("Invalid API response:", parsed.error.errors); - process.exit(1); - } - - const apiModels = parsed.data.data; - - // Get existing files (recursively) - const existingFiles = new Set(); - try { - for await (const file of new Bun.Glob("**/*.toml").scan({ - cwd: modelsDir, - absolute: false, - })) { - existingFiles.add(file); - } - } catch { - // Directory might not exist yet - } - - console.log( - `Found ${apiModels.length} models in API, ${existingFiles.size} existing files\n`, - ); - - // Track API model IDs for orphan detection - const apiModelIds = new Set(); - - let created = 0; - let updated = 0; - let unchanged = 0; - - for (const apiModel of apiModels) { - const relativePath = `${apiModel.id}.toml`; - const filePath = path.join(modelsDir, relativePath); - const dirPath = path.dirname(filePath); - - apiModelIds.add(relativePath); - - const existing = await loadExistingModel(filePath); - const merged = mergeModel(apiModel, existing); - const tomlContent = formatToml(merged); - - if (existing === null) { - created++; - if (dryRun) { - console.log(`[DRY RUN] Would create: ${relativePath}`); - console.log(` name = "${merged.name}"`); - if (merged.family) { - console.log(` family = "${merged.family}" (inferred)`); - } - console.log(""); - } else { - await mkdir(dirPath, { recursive: true }); - await Bun.write(filePath, tomlContent); - console.log(`Created: ${relativePath}`); - } - } else { - const changes = detectChanges(existing, merged); - - if (changes.length > 0) { - updated++; - if (dryRun) { - console.log(`[DRY RUN] Would update: ${relativePath}`); - } else { - await Bun.write(filePath, tomlContent); - console.log(`Updated: ${relativePath}`); - } - for (const change of changes) { - console.log(` ${change.field}: ${change.oldValue} → ${change.newValue}`); - } - console.log(""); - } else { - unchanged++; - } - } - } - - // Check for orphaned files - const orphaned: string[] = []; - for (const file of existingFiles) { - if (!apiModelIds.has(file)) { - orphaned.push(file); - console.log(`Warning: Orphaned file (not in API): ${file}`); - } - } - - // Summary - console.log(""); - if (dryRun) { - console.log( - `Summary: ${created} would be created, ${updated} would be updated, ${unchanged} unchanged, ${orphaned.length} orphaned`, - ); - } else { - console.log( - `Summary: ${created} created, ${updated} updated, ${unchanged} unchanged, ${orphaned.length} orphaned`, - ); - } -} - -await main(); diff --git a/packages/core/src/family.ts b/packages/core/src/family.ts index 789433fafd8..c7f641fe8ca 100644 --- a/packages/core/src/family.ts +++ b/packages/core/src/family.ts @@ -16,6 +16,7 @@ export const ModelFamilyValues = [ "gpt-sol", "gpt-terra", "gpt-luna", + "gpt-astra", "gpt-oss", "gpt-image", @@ -83,6 +84,9 @@ export const ModelFamilyValues = [ "kimi-free", "kimi-thinking", + // Motif Technologies + "motif", + // Poolside Laguna "laguna", "laguna-s", diff --git a/packages/core/src/filter.ts b/packages/core/src/filter.ts new file mode 100644 index 00000000000..3cba07d6cae --- /dev/null +++ b/packages/core/src/filter.ts @@ -0,0 +1,83 @@ +export const MODEL_TYPES = ["decision"] as const; + +export type ModelTypeValue = (typeof MODEL_TYPES)[number]; +export type ModelTypeFilter = "default" | "all" | ModelTypeValue[]; + +interface TypedModel { + type?: ModelTypeValue; +} + +interface TypedProvider { + models: Record; +} + +export class InvalidModelTypeError extends Error { + constructor(value: string) { + super(`Invalid type value: ${value}`); + this.name = "InvalidModelTypeError"; + } +} + +export function parseModelTypes(value: string | null): ModelTypeFilter { + if (value === null || value === "") return "default"; + if (value === "all") return "all"; + + const types = value.split(","); + if ( + types.length === 0 || + types.includes("all") || + types.some((type) => !MODEL_TYPES.includes(type as ModelTypeValue)) + ) { + throw new InvalidModelTypeError(value); + } + + return [...new Set(types)] as ModelTypeValue[]; +} + +function includesModel(model: TypedModel, filter: ModelTypeFilter) { + if (filter === "all") return true; + if (filter === "default") return model.type === undefined; + return model.type !== undefined && filter.includes(model.type); +} + +export function filterProvidersByModelType< + T extends Record, +>(providers: T, filter: ModelTypeFilter): T { + if (filter === "all") return providers; + + return Object.fromEntries( + Object.entries(providers).flatMap(([providerID, provider]) => { + const models = Object.fromEntries( + Object.entries(provider.models).filter(([, model]) => + includesModel(model, filter), + ), + ); + return Object.keys(models).length === 0 + ? [] + : [[providerID, { ...provider, models }]]; + }), + ) as T; +} + +export function filterModelsByModelType>( + models: T, + filter: ModelTypeFilter, +): T { + if (filter === "all") return models; + return Object.fromEntries( + Object.entries(models).filter(([, model]) => includesModel(model, filter)), + ) as T; +} + +export function filterCatalogByModelType< + TProviders extends Record, + TModels extends Record, +>( + catalog: { providers: TProviders; models: TModels }, + filter: ModelTypeFilter, +): { providers: TProviders; models: TModels } { + return { + providers: filterProvidersByModelType(catalog.providers, filter), + models: filterModelsByModelType(catalog.models, filter), + }; +} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 69f4e893dcb..b8be1ed0f80 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -2,3 +2,4 @@ export * from "./schema.js"; export * from "./generate.js"; export * from "./describe.js"; export * from "./family.js"; +export * from "./filter.js"; diff --git a/packages/core/src/schema.ts b/packages/core/src/schema.ts index c6c8b8f38b2..5c2d7b06681 100644 --- a/packages/core/src/schema.ts +++ b/packages/core/src/schema.ts @@ -1,6 +1,7 @@ import { z } from "zod"; import { ModelFamily } from "./family"; +import { MODEL_TYPES } from "./filter"; type JsonValue = | string @@ -148,6 +149,8 @@ const DateString = z const Modality = z.enum(["text", "audio", "image", "video", "pdf"]); +export const ModelType = z.enum(MODEL_TYPES); + const Modalities = z .object({ input: z.array(Modality), @@ -219,6 +222,7 @@ export const BenchmarkResult = z const ModelMetadataBase = z.object({ id: z.string(), + type: ModelType.optional(), name: z.string().min(1, "Model name cannot be empty"), description: z.string().min(1, "Model description cannot be empty"), family: ModelFamily.optional(), @@ -245,6 +249,7 @@ export type ModelMetadata = z.infer; const ModelBase = z.object({ id: z.string(), + type: ModelType.optional(), name: z.string().min(1, "Model name cannot be empty"), description: z.string().min(1, "Model description cannot be empty"), family: ModelFamily.optional(), diff --git a/packages/core/src/sync/auto-merge.ts b/packages/core/src/sync/auto-merge.ts index 5fb1934d6d3..12629b95c9e 100644 --- a/packages/core/src/sync/auto-merge.ts +++ b/packages/core/src/sync/auto-merge.ts @@ -5,6 +5,7 @@ export const MAX_CREATED_MODELS = 10; export const MAX_DELETED_MODELS = 10; export const MAX_MODEL_CHURN = 15; const REVIEWED_REASONING_PROVIDERS = new Set([ + "aiand", "crossmodel", "edenai", "empiriolabs", @@ -55,6 +56,14 @@ export async function classifyAutoMerge( if (created + deleted > MAX_MODEL_CHURN) { reasons.push(`${created + deleted} models created or deleted (limit ${MAX_MODEL_CHURN})`); } + if ( + models.some((change) => + change.status === "deleted" + && change.path.startsWith("providers/cloudflare-ai-gateway/models/") + ) + ) { + reasons.push("Cloudflare AI Gateway model deletions require manual review"); + } const reasoningMetadata = async (path: string, loader: typeof load) => { const model = Bun.TOML.parse(await loader(path)) as Record; diff --git a/packages/core/src/sync/index.ts b/packages/core/src/sync/index.ts index 3363cc1ead7..009d04b0ca1 100644 --- a/packages/core/src/sync/index.ts +++ b/packages/core/src/sync/index.ts @@ -5,10 +5,13 @@ import { z } from "zod"; import { AuthoredModel, AuthoredModelShape, ModelMetadata } from "../schema.js"; import { openMissingModelIssues } from "./missing-issues.js"; +import { MissingReasoningOptionsError } from "./missing-reasoning-options.js"; +import { aiand } from "./providers/aiand.js"; import { ambient } from "./providers/ambient.js"; import { anthropic } from "./providers/anthropic.js"; import { baseten } from "./providers/baseten.js"; import { chutes } from "./providers/chutes.js"; +import { cloudflareAiGateway } from "./providers/cloudflare-ai-gateway.js"; import { cloudflareWorkersAi } from "./providers/cloudflare-workers-ai.js"; import { cortecs } from "./providers/cortecs.js"; import { crossmodel } from "./providers/crossmodel.js"; @@ -16,6 +19,9 @@ import { deepinfra } from "./providers/deepinfra.js"; import { digitalocean } from "./providers/digitalocean.js"; import { edenai } from "./providers/edenai.js"; import { empiriolabs } from "./providers/empiriolabs.js"; +import { fireworksAi } from "./providers/fireworks-ai.js"; +import { friendli } from "./providers/friendli.js"; +import { githubCopilot } from "./providers/github-copilot.js"; import { google } from "./providers/google.js"; import { hyper } from "./providers/hyper.js"; import { huggingface } from "./providers/huggingface.js"; @@ -23,7 +29,9 @@ import { inceptron } from "./providers/inceptron.js"; import { kilo } from "./providers/kilo.js"; import { llmgateway, llmgatewayProviders } from "./providers/llmgateway.js"; import { mergeGateway } from "./providers/merge-gateway.js"; +import { meta } from "./providers/meta.js"; import { nanoGpt } from "./providers/nano-gpt.js"; +import { ollamaCloud } from "./providers/ollama-cloud.js"; import { openai } from "./providers/openai.js"; import { ofox } from "./providers/ofox.js"; import { openrouter } from "./providers/openrouter.js"; @@ -82,6 +90,8 @@ export interface SyncProvider { preserveSymlinks?: boolean; preserveBaseModels?: boolean; preserveDescriptions?: boolean; + /** Replace existing leading comments with translateModel.header. */ + authoritativeHeaders?: boolean; sameModel?(current: ExistingModel, desired: SyncedModel): boolean; /** Refresh provider-owned comments while preserving unrelated authored notes. */ updateHeader?(current: string, generated: string): string; @@ -91,6 +101,12 @@ export interface SyncProvider { * undefined to skip silently (no notice, no missing-model issue). */ sourceID?(model: SourceModel): string | undefined; + /** + * Return the ID when a source model skipped by translateModel needs a + * missing-model issue. Existing local metadata for that ID is preserved. + * Return undefined for intentional skips. + */ + missingModelID?(model: SourceModel): string | undefined; skippedNotice?(ids: string[]): string[]; fetchModels(): Promise; parseModels(raw: unknown): SourceModel[]; @@ -105,9 +121,9 @@ export interface SyncProvider { model: SyncedModel; metadata?: { id: string; model: SyncedMetadata }; /** - * Leading comment block for the written file when it has none of its own - * (e.g. the wire-path header every toggle reasoning control requires). A - * header already present on the existing file always wins. + * Leading comment block for the written file (e.g. the wire-path header + * every toggle reasoning control requires). Existing headers win unless + * authoritativeHeaders is enabled. */ header?: string; } | undefined; @@ -126,10 +142,12 @@ export interface SyncResult { } export const providers: { + aiand: SyncProvider; ambient: SyncProvider; anthropic: SyncProvider; baseten: SyncProvider; chutes: SyncProvider; + "cloudflare-ai-gateway": SyncProvider; "cloudflare-workers-ai": SyncProvider; cortecs: SyncProvider; crossmodel: SyncProvider; @@ -137,6 +155,9 @@ export const providers: { digitalocean: SyncProvider; edenai: SyncProvider; empiriolabs: SyncProvider; + "fireworks-ai": SyncProvider; + friendli: SyncProvider; + "github-copilot": SyncProvider; google: SyncProvider; hyper: SyncProvider; huggingface: SyncProvider; @@ -145,8 +166,10 @@ export const providers: { llmgateway: SyncProvider; "llmgateway-providers": SyncProvider; "merge-gateway": SyncProvider; + meta: SyncProvider; "nano-gpt": SyncProvider; ofox: SyncProvider; + "ollama-cloud": SyncProvider; openai: SyncProvider; openrouter: SyncProvider; ovhcloud: SyncProvider; @@ -158,10 +181,12 @@ export const providers: { wandb: SyncProvider; xai: SyncProvider; } = { + aiand, ambient, anthropic, baseten, chutes, + "cloudflare-ai-gateway": cloudflareAiGateway, "cloudflare-workers-ai": cloudflareWorkersAi, cortecs, crossmodel, @@ -169,6 +194,9 @@ export const providers: { digitalocean, edenai, empiriolabs, + "fireworks-ai": fireworksAi, + friendli, + "github-copilot": githubCopilot, google, hyper, huggingface, @@ -177,8 +205,10 @@ export const providers: { llmgateway, "llmgateway-providers": llmgatewayProviders, "merge-gateway": mergeGateway, + meta, "nano-gpt": nanoGpt, ofox, + "ollama-cloud": ollamaCloud, openai, openrouter, ovhcloud, @@ -208,8 +238,8 @@ export const groups = { "openrouter", "vercel", ], - cloudflare: ["cloudflare-workers-ai"], - direct: ["ambient", "anthropic", "baseten", "chutes", "cortecs", "deepinfra", "digitalocean", "google", "hyper", "openai", "ovhcloud", "pioneer", "tinfoil", "venice", "wandb", "xai"], + cloudflare: ["cloudflare-ai-gateway", "cloudflare-workers-ai"], + direct: ["aiand", "ambient", "anthropic", "baseten", "chutes", "cortecs", "deepinfra", "digitalocean", "fireworks-ai", "friendli", "github-copilot", "google", "hyper", "meta", "ollama-cloud", "openai", "ovhcloud", "pioneer", "tinfoil", "venice", "wandb", "xai"], } as const; type ProviderID = keyof typeof providers; @@ -234,22 +264,39 @@ export async function syncProvider( const { models: existing, brokenSymlinks } = existingState; let { modelMetadata } = existingState; const sourceModels = provider.parseModels(await provider.fetchModels()); - const desired = new Map; content: string }>(); + const desired = new Map; + content: string; + header: string; + }>(); + const caseNormalizedDesiredPaths = new Map(); const desiredMetadata = new Map; content: string }>(); const skippedRemote: string[] = []; + const missingRemote = new Set(); + const missingReasoning = new Map(); for (const sourceModel of sourceModels) { - const translated = provider.translateModel(sourceModel, { - existing(id) { - return existing.get(`${id}.toml`)?.toml; - }, - authored(id) { - return existing.get(`${id}.toml`)?.authored; - }, - }); + let translated: ReturnType; + try { + translated = provider.translateModel(sourceModel, { + existing(id) { + return existing.get(`${id}.toml`)?.toml; + }, + authored(id) { + return existing.get(`${id}.toml`)?.authored; + }, + }); + } catch (error) { + if (!(error instanceof MissingReasoningOptionsError)) throw error; + missingReasoning.set(error.modelId, error.message); + console.warn(error.message); + continue; + } if (translated === undefined) { const skippedID = provider.sourceID?.(sourceModel); if (skippedID !== undefined) skippedRemote.push(skippedID); + const missingID = provider.missingModelID?.(sourceModel); + if (missingID !== undefined) missingRemote.add(missingID); continue; } @@ -259,9 +306,15 @@ export async function syncProvider( continue; } - if (desired.has(relativePath)) { - throw new Error(`Duplicate synced model path: ${provider.id}/${relativePath}`); + const collidingPath = caseNormalizedDesiredPaths.get(relativePath.toLowerCase()); + if (collidingPath !== undefined) { + throw new Error( + collidingPath === relativePath + ? `Duplicate synced model path: ${provider.id}/${relativePath}` + : `Synced model paths differ only in case: ${provider.id}/${collidingPath} and ${provider.id}/${relativePath}`, + ); } + caseNormalizedDesiredPaths.set(relativePath.toLowerCase(), relativePath); if (translated.metadata !== undefined) { const parsedMetadata = ModelMetadata.safeParse({ @@ -318,12 +371,18 @@ export async function syncProvider( } const currentHeader = existing.get(relativePath)?.header ?? ""; - const header = translated.header && provider.updateHeader - ? provider.updateHeader(currentHeader, translated.header) - : currentHeader || translated.header || ""; + const translatedHeader = translated.header === undefined + ? undefined + : leadingComments(translated.header); + const header = translatedHeader !== undefined && provider.updateHeader !== undefined + ? provider.updateHeader(currentHeader, translatedHeader) + : provider.authoritativeHeaders + ? translatedHeader ?? "" + : currentHeader || translatedHeader || ""; desired.set(relativePath, { model: parsed.data, content: header + formatToml(parsed.data), + header, }); } @@ -332,7 +391,7 @@ export async function syncProvider( const metadataDir = modelMetadataDir(provider.modelsDir); for (const [relativePath, file] of desiredMetadata) { - const filePath = path.join(metadataDir, relativePath); + const filePath = await safeWritePath(metadataDir, relativePath); const currentFile = Bun.file(filePath); const currentText = await currentFile.exists() ? await currentFile.text() : undefined; const current = currentText !== undefined @@ -363,7 +422,7 @@ export async function syncProvider( console.log(`Skipping metadata removal in new-only mode: ${relativePath}`); continue; } - const filePath = path.join(metadataDir, relativePath); + const filePath = await safeWritePath(metadataDir, relativePath); files.push({ status: "deleted", path: filePath }); if (options.dryRun) { console.log(`Would remove metadata ${relativePath}`); @@ -374,7 +433,7 @@ export async function syncProvider( } for (const [relativePath, file] of desired) { - const filePath = path.join(provider.modelsDir, relativePath); + const filePath = await safeWritePath(provider.modelsDir, relativePath, true); const current = existing.get(relativePath); if (current === undefined) { @@ -394,8 +453,13 @@ export async function syncProvider( continue; } - if ((provider.updateHeader && current.header !== leadingComments(file.content)) || - !(provider.sameModel?.(current.authored, file.model) ?? sameModel(relativePath, current.authored, file.model))) { + const headerChanged = (provider.authoritativeHeaders || provider.updateHeader !== undefined) + && current.header !== file.header; + if ( + headerChanged + || !(provider.sameModel?.(current.authored, file.model) + ?? sameModel(relativePath, current.authored, file.model)) + ) { if (options.newOnly) { unchanged++; continue; @@ -416,6 +480,14 @@ export async function syncProvider( const missingLocal: string[] = []; for (const relativePath of new Set([...existing.keys(), ...brokenSymlinks])) { if (desired.has(relativePath)) continue; + if (missingRemote.has(relativePath.slice(0, -5))) { + unchanged++; + continue; + } + if (missingReasoning.has(relativePath.slice(0, -5))) { + unchanged++; + continue; + } if (provider.deleteMissing === false) { missingLocal.push(relativePath); console.log(`Retaining model missing from source: ${relativePath}`); @@ -428,7 +500,7 @@ export async function syncProvider( continue; } - const filePath = path.join(provider.modelsDir, relativePath); + const filePath = await safeWritePath(provider.modelsDir, relativePath, true); files.push({ status: "deleted", path: filePath }); if (options.dryRun) { console.log(`Would remove ${relativePath}`); @@ -438,22 +510,27 @@ export async function syncProvider( } const notices = [ + ...missingReasoning.values(), ...provider.skippedNotice?.(skippedRemote) ?? [], ...provider.missingNotice?.(missingLocal) ?? [], ]; + const issueModels = [...new Set([ + ...missingRemote.values(), + ...(provider.skipCreates === true ? skippedRemote : []), + ...missingReasoning.keys(), + ])]; if ( - provider.skipCreates === true - && provider.trackMissingModels !== false - && skippedRemote.length > 0 + provider.trackMissingModels !== false + && issueModels.length > 0 && options.openIssues === true ) { try { notices.push( ...await openMissingModelIssues( { id: provider.id, name: provider.name, modelsDir: provider.modelsDir }, - skippedRemote, - { dryRun: options.dryRun }, + issueModels, + { dryRun: options.dryRun, reasons: Object.fromEntries(missingReasoning) }, ), ); } catch (error) { @@ -599,6 +676,31 @@ async function isSymlink(filePath: string) { } } +async function safeWritePath(root: string, relativePath: string, allowLeafSymlink = false) { + const resolvedRoot = path.resolve(root); + const target = path.resolve(resolvedRoot, relativePath); + const relative = path.relative(resolvedRoot, target); + if (relative === "" || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) { + throw new Error(`Refusing to sync path outside ${root}: ${relativePath}`); + } + if (await isSymlink(resolvedRoot)) { + throw new Error(`Refusing to sync through symlink: ${resolvedRoot}`); + } + + let current = resolvedRoot; + for (const segment of path.relative(resolvedRoot, path.dirname(target)).split(path.sep)) { + if (segment === "") continue; + current = path.join(current, segment); + if (await isSymlink(current)) { + throw new Error(`Refusing to sync through symlink: ${current}`); + } + } + if (!allowLeafSymlink && await isSymlink(target)) { + throw new Error(`Refusing to sync through symlink: ${target}`); + } + return target; +} + async function readModelMetadata(modelsDir: string) { const metadataDir = modelMetadataDir(modelsDir); const result: Record> = {}; @@ -826,7 +928,7 @@ async function writeReport(target: string, results: SyncResult[]) { } } - lines.push("", "This PR was created automatically by the daily model sync workflow."); + lines.push("", "This PR was created automatically by the model sync workflow."); await Bun.write(".sync/model-sync-report.md", `${lines.join("\n")}\n`); } @@ -915,6 +1017,7 @@ export function formatToml(model: z.infer) { if ("base_model_omit" in model && model.base_model_omit !== undefined) { lines.push(`base_model_omit = [${model.base_model_omit.map(quote).join(", ")}]`); } + if (model.type !== undefined) lines.push(`type = ${quote(model.type)}`); if (model.name !== undefined) lines.push(`name = ${quote(model.name)}`); if (model.description !== undefined) lines.push(`description = ${quote(model.description)}`); if (model.family !== undefined) lines.push(`family = ${quote(model.family)}`); diff --git a/packages/core/src/sync/missing-issues.ts b/packages/core/src/sync/missing-issues.ts index fe008b074b9..3e841f4aec0 100644 --- a/packages/core/src/sync/missing-issues.ts +++ b/packages/core/src/sync/missing-issues.ts @@ -6,15 +6,18 @@ export interface MissingModelIssueTarget { export interface OpenMissingModelIssuesOptions { dryRun?: boolean; + reasons?: Record; } function issueTitle(providerId: string, modelId: string) { return `[missing-model] ${providerId}: ${modelId}`; } -function issueBody(provider: MissingModelIssueTarget, modelId: string) { +function issueBody(provider: MissingModelIssueTarget, modelId: string, reason?: string) { return [ - `The **${provider.name}** catalog sync found remote model \`${modelId}\` that is not in the local catalog.`, + reason === undefined + ? `The **${provider.name}** catalog sync found remote model \`${modelId}\` that is not in the local catalog.` + : `The **${provider.name}** catalog sync is missing reasoning options for remote model \`${modelId}\`. Any existing local entry was left unchanged.`, "", `| Field | Value |`, `| --- | --- |`, @@ -22,8 +25,13 @@ function issueBody(provider: MissingModelIssueTarget, modelId: string) { `| Model ID | \`${modelId}\` |`, `| Expected path | \`${provider.modelsDir}/${modelId}.toml\` |`, "", - "This provider uses `skipCreates` because the remote source is not enough to auto-author a full TOML.", + reason === undefined + ? "Automatic creation was skipped because the remote source is not enough to auto-author a complete catalog entry." + : `Sync diagnostic: ${reason}`, "Add the model manually (prefer `base_model` when matching `models/` metadata exists).", + ...(reason === undefined ? [] : [ + `Research the provider's reasoning controls; do not use an empty placeholder. Update \`providers/${provider.id}/curation.toml\` if present, including source URLs and wire paths in its \`note\` array, so the next sync retains the fix.`, + ]), "", ].join("\n"); } @@ -80,7 +88,7 @@ export async function openMissingModelIssues( } try { - const number = await createIssue(title, issueBody(provider, modelId), labels); + const number = await createIssue(title, issueBody(provider, modelId, options.reasons?.[modelId]), labels); existingByTitle.set(title, number); await dispatchIssueFixer(provider.id, number); const notice = `Opened GitHub issue #${number} and dispatched the issue fixer for missing model \`${modelId}\``; diff --git a/packages/core/src/sync/missing-reasoning-options.ts b/packages/core/src/sync/missing-reasoning-options.ts new file mode 100644 index 00000000000..756557ed86d --- /dev/null +++ b/packages/core/src/sync/missing-reasoning-options.ts @@ -0,0 +1,7 @@ +/** A reasoning model needs researched provider-specific controls. */ +export class MissingReasoningOptionsError extends Error { + constructor(readonly modelId: string, reason: string) { + super(`${modelId}: ${reason}`); + this.name = "MissingReasoningOptionsError"; + } +} diff --git a/packages/core/src/sync/providers/aiand.ts b/packages/core/src/sync/providers/aiand.ts new file mode 100644 index 00000000000..860bbc50944 --- /dev/null +++ b/packages/core/src/sync/providers/aiand.ts @@ -0,0 +1,419 @@ +import { readdirSync } from "node:fs"; +import path from "node:path"; +import { z } from "zod"; + +import { ModelFamily } from "../../family.js"; +import { ReasoningOption as CatalogReasoningOption } from "../../schema.js"; +import type { ExistingModel, SyncProvider, SyncedFullModel, SyncedModel } from "../index.js"; +import { MissingReasoningOptionsError } from "../missing-reasoning-options.js"; +import { factorBaseModel } from "./openrouter.js"; + +const MODELS_DIR = path.join(import.meta.dirname, "..", "..", "..", "..", "..", "models"); + +// ai&'s /v1/api.json publishes this repo's shape directly; the `aiand` key is +// the attributable provider entry and lists only schema-complete models, so +// translation is near-identity. Reference: +// https://api.aiand.com/v1/api.json +const API_ENDPOINT = process.env.AIAND_API_URL ?? "https://api.aiand.com/v1/api.json"; + +const MODALITIES = ["text", "audio", "image", "video", "pdf"] as const; + +const GATEWAY_INTERLEAVED = { field: "reasoning_content" } as const; +const INTERLEAVED_FIELDS = ["reasoning_content", "reasoning_details"] as const; +type Modality = (typeof MODALITIES)[number]; + +// The feed publishes the catalog's reasoning_options shape. Effort values are +// parsed leniently (any string) so a vocabulary the schema doesn't know yet +// is filtered per value instead of aborting the whole feed parse; toggle and +// budget_tokens controls take the shared catalog schema as-is. +const FeedReasoningOption = z.union([ + z.object({ type: z.literal("effort"), values: z.array(z.string()) }).passthrough(), + CatalogReasoningOption, +]); + +const PRICE = z.number().nonnegative(); +const FeedCostFields = { + input: PRICE, + output: PRICE, + reasoning: PRICE.optional(), + cache_read: PRICE.optional(), + cache_write: PRICE.optional(), + input_audio: PRICE.optional(), + output_audio: PRICE.optional(), +}; +const FeedCostTier = z + .object({ + ...FeedCostFields, + tier: z + .object({ + type: z.literal("context").default("context"), + size: z.number().int().nonnegative(), + }) + .passthrough(), + }) + .passthrough(); + +export const AiandModel = z + .object({ + id: z.string().min(1), + name: z.string().min(1), + description: z.string().min(1).optional(), + family: z.string().optional(), + release_date: z.string(), + last_updated: z.string().optional(), + attachment: z.boolean(), + reasoning: z.boolean(), + reasoning_options: z.array(FeedReasoningOption).optional(), + temperature: z.boolean(), + tool_call: z.boolean(), + structured_output: z.boolean().optional(), + cost: z.object({ ...FeedCostFields, tiers: z.array(FeedCostTier).optional() }).passthrough(), + limit: z + .object({ + context: z.number().int().positive(), + output: z.number().int().positive(), + }) + .passthrough(), + modalities: z + .object({ + input: z.array(z.string()), + output: z.array(z.string()), + }) + .passthrough(), + open_weights: z.boolean().optional(), + status: z.enum(["alpha", "beta", "deprecated"]).optional(), + interleaved: z.union([z.boolean(), z.object({ field: z.string() }).passthrough()]).optional(), + }) + .passthrough(); + +export const AiandResponse = z + .object({ + aiand: z.object({ models: z.record(AiandModel) }).passthrough(), + }) + .passthrough(); + +export type AiandModel = z.infer; + +export const aiand = { + id: "aiand", + name: "ai&", + modelsDir: "providers/aiand/models", + // Factoring is explicit (factorBaseModel) so files stay override-only; the + // runner's default preservation keeps the base_model reference but does not + // drop fields identical to the base. + preserveBaseModels: false, + // The runner would otherwise re-inject the pre-factor authored description + // whenever the translator leaves it unset — recreating a lab-identical + // override on every full-inline → factored transition. + preserveDescriptions: false, + async fetchModels() { + const response = await fetch(API_ENDPOINT); + if (!response.ok) { + throw new Error(`ai& catalog request failed: ${response.status} ${response.statusText}`); + } + return response.json(); + }, + parseModels(raw) { + const models = Object.values(AiandResponse.parse(raw).aiand.models); + // deleteMissing runs at the runner default: an empty or truncated feed + // must fail loudly here rather than read as "delete the local catalog". + if (models.length === 0) { + throw new Error("ai& catalog returned no models; refusing an empty feed as authoritative"); + } + return models; + }, + translateModel(model, context) { + // `authored` is the raw TOML — the only thing that can carry a genuine + // override. `existing` is the base-resolved merge and would make inherited + // lab values look hand-written. + const authored = context.authored(model.id); + const baseModel = authored?.base_model ?? resolveAiandBaseModel(model.id, model.name); + // A new feed model with no resolvable lab entry must never be written as + // an unfactored full definition; it goes to the missing-model issue flow + // instead. An existing local file is always translated — skipping one + // would delete it. + if (authored === undefined && baseModel === undefined) return undefined; + const built = buildAiandModel(model, authored, baseModel); + // Existing headers win; this only seeds a create, and a toggle control + // must never be written without its wire path. + return { id: model.id, model: built, header: reasoningHeader(built) }; + }, + sourceID(model) { + return model.id; + }, + // The only skip is "no lab base yet", never an intentional removal, so every + // skip enters the missing-model issue flow: the runner keeps any existing + // local entry and opens one deduped issue for the lab metadata. + missingModelID(model) { + return model.id; + }, + skippedNotice(ids) { + if (ids.length === 0) return []; + return [ + `Skipped ${ids.length} feed model(s) with no resolvable base model (missing-model issue flow): ${ids.join(", ")}`, + ]; + }, +} satisfies SyncProvider; + +type HostFields = Omit< + SyncedFullModel, + "name" | "description" | "family" | "release_date" | "last_updated" | "knowledge" | "open_weights" +>; + +/** + * `authored` is the provider TOML as written (not base-resolved). Host facts — + * pricing, limits, controls, capability flags, modalities, status, the side + * channel — are feed-authoritative. Lab-owned facts are never asserted from + * the gateway on a factored file: they appear only as deltas the authored + * file already carried on top of its base_model, so a full-inline file being + * factored for the first time (or a brand-new file) inherits the lab entry + * outright instead of re-emitting the lab's values as overrides. + */ +export function buildAiandModel( + model: AiandModel, + authored: ExistingModel | undefined, + baseModel: string | null | undefined = authored?.base_model ?? resolveAiandBaseModel(model.id, model.name), + today = new Date().toISOString().slice(0, 10), +): SyncedModel { + const limit = { + context: model.limit.context, + input: authored?.limit?.input, + output: model.limit.output, + }; + const host: HostFields = { + attachment: model.attachment, + reasoning: model.reasoning, + // The schema refuses reasoning_options on a non-reasoner; a non-reasoning + // feed model must not stall the sync on that refine. + reasoning_options: model.reasoning ? requireReasoningOptions(model, authored) : undefined, + tool_call: model.tool_call, + structured_output: model.structured_output, + temperature: model.temperature, + // Canonical order so a feed-side reordering never churns a TOML. + modalities: { + input: sortModalities(model.modalities.input.filter(isModality)), + output: sortModalities(model.modalities.output.filter(isModality)), + }, + limit, + cost: { + input: model.cost.input, + output: model.cost.output, + reasoning: model.cost.reasoning ?? authored?.cost?.reasoning, + cache_read: model.cost.cache_read ?? authored?.cost?.cache_read, + cache_write: model.cost.cache_write ?? authored?.cost?.cache_write, + input_audio: model.cost.input_audio ?? authored?.cost?.input_audio, + output_audio: model.cost.output_audio ?? authored?.cost?.output_audio, + // Unlike auxiliary prices, tiers are a complete source assertion: an + // omitted list means flat pricing and clears stale authored tiers. + tiers: model.cost.tiers, + }, + // Absence means active on the feed, and the feed owns deprecation: a + // curated alpha/beta survives omission, a curated deprecated does not, + // or a route the gateway reactivated would stay marked retired forever. + status: model.status ?? (authored?.status === "deprecated" ? undefined : authored?.status), + // Every ai& reasoner streams its thinking in message.reasoning_content — + // a gateway-wide side channel — so a brand-new reasoner gets it even + // before the feed publishes `interleaved` itself. + interleaved: model.reasoning + ? (normalizeInterleaved(model.interleaved) ?? authored?.interleaved ?? GATEWAY_INTERLEAVED) + : undefined, + }; + + if (baseModel != null) { + // Only a file that already sat on this base can carry genuine lab-field + // deltas; anything else inherits the lab entry. + const deltas = authored?.base_model === baseModel ? authored : undefined; + return factorBaseModel( + baseModel, + { + ...host, + name: deltas?.name, + description: deltas?.description, + release_date: deltas?.release_date, + last_updated: deltas?.last_updated, + knowledge: deltas?.knowledge, + open_weights: deltas?.open_weights, + }, + limit, + deltas?.base_model_omit, + ); + } + + // Standalone (no lab entry anywhere): curated values win for lab-owned + // fields, the feed fills the rest. Unknown families degrade to the curated + // value rather than fail validation. + const family = ModelFamily.safeParse(model.family); + return { + ...host, + name: authored?.name ?? model.name, + description: authored?.description ?? model.description ?? model.name, + family: family.success ? family.data : authored?.family, + // Release dates are lab metadata the gateway is not authoritative for. + release_date: authored?.release_date ?? model.release_date, + // The feed's last_updated tracks catalog-row edits, not model revisions. + last_updated: authored?.last_updated ?? model.last_updated ?? today, + knowledge: authored?.knowledge, + open_weights: model.open_weights ?? authored?.open_weights ?? false, + }; +} + +const DOCS_URL = "https://docs.aiand.com/models/catalog/"; + +/** + * Leading comment block for a created file. ai& exposes one reasoning control + * — `reasoning_effort` on /v1/chat/completions and `reasoning.effort` on + * /v1/responses, enforced per model, with "none" as off — so the header names + * that path and states that no separate toggle or token budget exists. + */ +function reasoningHeader(model: SyncedModel): string | undefined { + const options = model.reasoning_options; + if (options === undefined || options.length === 0) return undefined; + const lines = [ + `# Pricing: GET https://api.aiand.com/v1/api.json (synced hourly by the aiand module)`, + `# Docs: ${DOCS_URL}`, + ]; + for (const option of options) { + if (option.type === "effort" && option.values.length > 0) { + lines.push(`# Effort: reasoning_effort = ${option.values.map((value) => `"${value}"`).join(" | ")}`); + } + } + lines.push( + "# Controls: reasoning_effort only (`reasoning_effort` on /v1/chat/completions, `reasoning.effort` on /v1/responses; \"none\" = off) — no separate toggle or token-budget field on this host.", + ); + lines.push("# Reasoning side channel: message.reasoning_content"); + return `${lines.join("\n")}\n`; +} + +interface MetadataEntry { + id: string; + normalizedFull: string; + normalizedFilename: string; +} + +let metadataEntries: MetadataEntry[] | undefined; + +/** + * ai& publishes lab-prefixed ids ("deepseek-ai/deepseek-v4-flash") whose lab + * segment can differ from the models/ directory ("deepseek/…"), so new ids + * resolve like Venice's: a unique normalized match on the full id first, then + * on the filename alone. + */ +export function resolveAiandBaseModel(id: string, name: string): string | undefined { + const entries = getMetadataEntries(); + for (const candidate of [...new Set([id, name])]) { + const normalizedFull = normalize(candidate); + const normalizedFilename = normalize(candidate.split("/").pop() ?? candidate); + const ranked = [ + entries.filter((entry) => entry.normalizedFull === normalizedFull), + entries.filter((entry) => entry.normalizedFilename === normalizedFilename), + ]; + const match = ranked.find((matches) => matches.length === 1)?.[0]?.id; + if (match !== undefined) return match; + } + return undefined; +} + +function getMetadataEntries() { + if (metadataEntries !== undefined) return metadataEntries; + metadataEntries = []; + for (const provider of readdirSync(MODELS_DIR, { withFileTypes: true })) { + if (!provider.isDirectory()) continue; + for (const file of readdirSync(path.join(MODELS_DIR, provider.name), { withFileTypes: true })) { + if (!file.isFile() || !file.name.endsWith(".toml")) continue; + const filename = file.name.slice(0, -5); + metadataEntries.push({ + id: `${provider.name}/${filename}`, + normalizedFull: normalize(`${provider.name}/${filename}`), + normalizedFilename: normalize(filename), + }); + } + } + return metadataEntries; +} + +function normalize(value: string) { + return value.toLowerCase().replaceAll(/[^a-z0-9]/g, ""); +} + +type ReasoningEffortValue = Extract< + Extract, { type: "effort" }>["values"][number], + string +>; + +function isReasoningEffort(value: string): value is ReasoningEffortValue { + return CatalogReasoningOption.safeParse({ type: "effort", values: [value] }).success; +} + +/** + * A reasoner must never be written with an invented empty control set: `[]` + * means "no caller control", not uncertainty (AGENTS.md → Reasoning options). + * When the feed yields no schema-valid controls and nothing authored can be + * kept, the model fails sync for manual review — the runner preserves the + * local file and routes the id to the missing-model issue flow. + */ +function requireReasoningOptions( + model: AiandModel, + authored: ExistingModel | undefined, +): SyncedFullModel["reasoning_options"] { + const options = resolveReasoningOptions(model, authored); + if (options !== undefined) return options; + throw new MissingReasoningOptionsError( + model.id, + "feed publishes reasoning = true without a schema-valid reasoning_options set and no authored controls exist to keep; research the ai& effort set before listing", + ); +} + +/** + * Omit, empty, and vocabulary-miss are three different assertions: an omitted + * feed list asserts nothing (authored options stay), an explicit [] asserts + * "no caller controls", and a non-empty list whose values the schema doesn't + * know yet keeps the authored options rather than inventing "no control" and + * auto-merging it. + */ +function resolveReasoningOptions( + model: AiandModel, + authored: ExistingModel | undefined, +): SyncedFullModel["reasoning_options"] { + if (model.reasoning_options === undefined) return authoredReasoningOptions(authored); + if (model.reasoning_options.length === 0) return []; + const feed = model.reasoning_options.flatMap((option) => { + // ai& has exactly one reasoning control — `reasoning_effort`, enforced per + // model, where "off" is the "none" level. A toggle or token budget cannot + // be true of this host, so neither is ever written; parsing them keeps a + // feed that publishes one from aborting the run. + if (option.type !== "effort") return []; + const values = option.values.filter( + (value): value is ReasoningEffortValue => typeof value === "string" && isReasoningEffort(value), + ); + return values.length > 0 ? [{ type: "effort" as const, values }] : []; + }); + return feed.length > 0 ? feed : authoredReasoningOptions(authored); +} + +function authoredReasoningOptions( + authored: ExistingModel | undefined, +): SyncedFullModel["reasoning_options"] { + const options = (authored?.reasoning_options ?? []) + .map((option) => CatalogReasoningOption.safeParse(option)) + .flatMap((result) => (result.success && result.data.type === "effort" ? [result.data] : [])); + return options.length > 0 ? options : undefined; +} + +function isModality(value: string): value is Modality { + return (MODALITIES as readonly string[]).includes(value); +} + +function normalizeInterleaved( + value: AiandModel["interleaved"], +): SyncedFullModel["interleaved"] | undefined { + if (value === true) return true; + if (value === undefined || value === false) return undefined; + const field = value.field; + return (INTERLEAVED_FIELDS as readonly string[]).includes(field) + ? { field: field as (typeof INTERLEAVED_FIELDS)[number] } + : undefined; +} + +function sortModalities(values: Modality[]): Modality[] { + return [...new Set(values)].sort((a, b) => MODALITIES.indexOf(a) - MODALITIES.indexOf(b)); +} diff --git a/packages/core/src/sync/providers/anthropic.ts b/packages/core/src/sync/providers/anthropic.ts index fda7baf8de6..af568337ce0 100644 --- a/packages/core/src/sync/providers/anthropic.ts +++ b/packages/core/src/sync/providers/anthropic.ts @@ -210,15 +210,15 @@ export function parseAnthropicPricing(markdown: string, now = new Date()) { const table = section.split("\n").filter((line) => line.trimStart().startsWith("|")); const rows = table.map((line) => line.split("|").slice(1, -1).map((cell) => cell.trim())); - const header = rows[0]?.map(markdownText); + const header = rows[0]?.map((cell) => markdownText(cell).toLowerCase().replaceAll("&", "and")); if (header === undefined) throw new Error("Anthropic pricing page is missing the model pricing table"); const indexes = { - model: header.indexOf("Model"), - input: header.indexOf("Base Input Tokens"), - cacheWrite: header.indexOf("5m Cache Writes"), - cacheRead: header.indexOf("Cache Hits & Refreshes"), - output: header.indexOf("Output Tokens"), + model: header.indexOf("model"), + input: header.indexOf("base input tokens"), + cacheWrite: header.indexOf("5m cache writes"), + cacheRead: header.indexOf("cache hits and refreshes"), + output: header.indexOf("output tokens"), }; if (Object.values(indexes).some((index) => index < 0)) { throw new Error("Anthropic model pricing table has unexpected columns"); diff --git a/packages/core/src/sync/providers/cloudflare-ai-gateway.ts b/packages/core/src/sync/providers/cloudflare-ai-gateway.ts new file mode 100644 index 00000000000..5e36c029612 --- /dev/null +++ b/packages/core/src/sync/providers/cloudflare-ai-gateway.ts @@ -0,0 +1,601 @@ +import { existsSync, readFileSync, readdirSync } from "node:fs"; +import path from "node:path"; +import { z } from "zod"; + +import { ReasoningOption } from "../../schema.js"; +import type { ExistingModel, SyncProvider, SyncedBaseModel } from "../index.js"; +import { MissingReasoningOptionsError } from "../missing-reasoning-options.js"; + +const API_BASE = "https://api.cloudflare.com/client/v4/accounts"; +const PROVIDER_DIR = path.join( + import.meta.dirname, + "..", + "..", + "..", + "..", + "..", + "providers", + "cloudflare-ai-gateway", +); +const MODELS_ROOT = path.join(import.meta.dirname, "..", "..", "..", "..", "..", "models"); +const CURATION_PATH = path.join(PROVIDER_DIR, "curation.toml"); +const TEXT_GENERATION = "Text Generation"; +const REQUEST_TIMEOUT_MS = 30_000; +const MAX_CATALOG_PAGES = 1_000; +const MAX_BACKOFF_DELAY_MS = 8_000; +const MAX_RETRY_DELAY_MS = 60_000; + +const NATIVE_NPM: Record = { + anthropic: "@ai-sdk/anthropic", + openai: "@ai-sdk/openai", +}; + +const Price = z.number().nonnegative(); +const ProviderDetail = z.object({ + id: z.string().min(1), + pricing: z.record(Price), +}).passthrough(); + +const CatalogEntry = z.object({ + model_id: z.string().refine(isSafeModelID, "model_id must be a safe relative provider/model path"), + task: z.string(), + context_length: z.number().int().positive().nullish(), + provider_details: z.array(ProviderDetail).nullish(), +}).passthrough(); +const CatalogModel = CatalogEntry.extend({ + task: z.literal(TEXT_GENERATION), + context_length: z.number().int().positive().nullish(), + provider_details: z.array(ProviderDetail).length(1), +}); + +const FlatPricing = z.object({ + input_tokens: Price, + output_tokens: Price, + input_cached_tokens: Price.optional(), + input_cache_creation_tokens: Price.optional(), +}).strict(); + +const ContextPricing = z.object({ + long_context_threshold_tokens: Price.int().positive(), + short_context_input_tokens: Price, + short_context_output_tokens: Price, + short_context_input_cached_tokens: Price.optional(), + short_context_input_cache_creation_tokens: Price.optional(), + long_context_input_tokens: Price, + long_context_output_tokens: Price, + long_context_input_cached_tokens: Price.optional(), + long_context_input_cache_creation_tokens: Price.optional(), +}).strict(); + +const Tier200kPricing = z.object({ + under_200k_per_1m_input_tokens: Price, + under_200k_per_1m_output_tokens: Price, + under_200k_per_1m_input_cached_tokens: Price.optional(), + over_200k_per_1m_input_tokens: Price, + over_200k_per_1m_output_tokens: Price, + over_200k_per_1m_input_cached_tokens: Price.optional(), +}).strict(); + +const Tier512kPricing = z.object({ + under_512k_per_1m_input_tokens: Price, + under_512k_per_1m_output_tokens: Price, + under_512k_per_1m_input_cached_tokens: Price.optional(), + over_512k_per_1m_input_tokens: Price, + over_512k_per_1m_output_tokens: Price, + over_512k_per_1m_input_cached_tokens: Price.optional(), +}).strict(); + +const CloudflareResponse = z.object({ + success: z.literal(true), + result: z.array(CatalogEntry), + result_info: z.object({ + page: z.number().int().positive(), + per_page: z.number().int().positive(), + total_count: z.number().int().nonnegative(), + total_pages: z.number().int().positive().optional(), + count: z.number().int().nonnegative().optional(), + }).passthrough(), +}).passthrough(); + +const SourceModel = z.object({ + catalog: CatalogModel, + schemaInput: z.unknown().optional(), +}); + +const CuratedModel = z.object({ + base_model: z.string().refine(isSafeModelID, "base_model must be a safe relative provider/model path").optional(), + structured_output: z.boolean().optional(), + reasoning_options: z.array(ReasoningOption).optional(), + limit: z.object({ + context: z.number().optional(), + input: z.number().optional(), + output: z.number().optional(), + }).strict().optional(), + interleaved: z.union([ + z.literal(true), + z.object({ field: z.enum(["reasoning_content", "reasoning_details"]) }).strict(), + ]).optional(), + note: z.array(z.string().refine((value) => !/[\r\n]/.test(value))).optional(), +}).strict(); + +const Curation = z.object({ + skip: z.array(z.string()).default([]), + models: z.record(CuratedModel).default({}), +}).strict(); + +type CatalogModel = z.infer; +type CatalogEntry = z.infer; +type SourceModel = z.infer; +type CuratedModel = z.infer; + +const curation = Curation.parse(Bun.TOML.parse(readFileSync(CURATION_PATH, "utf8"))); +const skippedModels = new Set(curation.skip); + +export const cloudflareAiGateway = { + id: "cloudflare-ai-gateway", + name: "Cloudflare AI Gateway", + modelsDir: "providers/cloudflare-ai-gateway/models", + preserveDescriptions: false, + authoritativeHeaders: true, + async fetchModels() { + const catalog = CatalogEntry.array().parse(await loadCatalog()); + const catalogIDs = new Set(catalog.map((model) => model.model_id)); + if (catalogIDs.size !== catalog.length) { + throw new Error("Cloudflare AI Gateway catalog returned duplicate model IDs"); + } + const textModels = catalog.filter((model) => model.task === TEXT_GENERATION); + if (textModels.length === 0) { + throw new Error("Cloudflare AI Gateway catalog returned no Text Generation models"); + } + + const emittedModels = textModels.filter( + (model) => !model.model_id.startsWith("@cf/") && !skippedModels.has(model.model_id), + ).map((model) => CatalogModel.parse(model)); + if (emittedModels.length === 0) { + throw new Error("Cloudflare AI Gateway catalog returned no eligible proxied models"); + } + const sources = await mapLimit(emittedModels, 6, async (model) => ({ + catalog: model, + schemaInput: await loadCatalogSchemaInput(model.model_id), + })); + + const liveIDs = new Set(textModels.map((model) => model.model_id)); + for (const id of Object.keys(curation.models)) { + if (!liveIDs.has(id)) console.warn(`warning: curation id not in live feed: ${id}`); + } + + return sources; + }, + parseModels(raw) { + return SourceModel.array().parse(raw); + }, + translateModel(source, context) { + const id = source.catalog.model_id; + const curated = curation.models[id] ?? {}; + return { + id, + model: buildCloudflareAiGatewayModel( + source.catalog, + source.schemaInput, + curated, + context.authored(id), + ), + header: noteHeader(curated.note), + }; + }, +} satisfies SyncProvider; + +export function buildCloudflareAiGatewayModel( + catalog: CatalogModel, + schemaInput: unknown, + curated: CuratedModel = {}, + existing?: ExistingModel, +): SyncedBaseModel { + const id = catalog.model_id; + // Pricing failures must not be hidden by missing reasoning controls. + const cost = proxiedCost(catalog.provider_details[0]!.pricing, id); + const baseModel = curated.base_model ?? resolveBaseModel(id); + if (baseModel === undefined) { + throw new Error(`${id}: no lab file and no curated base_model; add it to skip or map it`); + } + + const model: SyncedBaseModel = { base_model: baseModel }; + if (curated.structured_output !== undefined) { + model.structured_output = curated.structured_output; + } + if (curated.interleaved !== undefined) model.interleaved = curated.interleaved; + + if (baseReasoning(baseModel)) { + const derived = deriveReasoningOptions(schemaInput); + const reasoningOptions = curated.reasoning_options ?? (derived.length > 0 ? derived : undefined); + if (reasoningOptions === undefined) { + throw new MissingReasoningOptionsError( + id, + `base ${baseModel} reasons but the catalog schema and curation provide no reasoning_options`, + ); + } + model.reasoning_options = reasoningOptions; + } + + model.cost = cost; + + const limit = { + ...(catalog.context_length == null && existing?.limit?.context === undefined + ? {} + : { context: catalog.context_length ?? existing?.limit?.context }), + ...curated.limit, + }; + if (Object.keys(limit).length > 0) model.limit = limit; + + const npm = NATIVE_NPM[id.split("/")[0]!]; + if (npm !== undefined) model.provider = { npm }; + return model; +} + +export function deriveReasoningOptions( + schemaInput: unknown, +): NonNullable { + let hasToggle = false; + let effortValues: Array<"none" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max" | "default"> + | undefined; + + const EffortValues = z.array(z.enum([ + "none", + "minimal", + "low", + "medium", + "high", + "xhigh", + "max", + "default", + ])); + + const visit = (node: unknown) => { + if (Array.isArray(node)) { + node.forEach(visit); + return; + } + if (node === null || typeof node !== "object") return; + + for (const [key, value] of Object.entries(node)) { + if (key !== "properties" || value === null || typeof value !== "object") { + visit(value); + continue; + } + + for (const [property, rawSchema] of Object.entries(value)) { + const propertySchema = rawSchema as Record; + if (property === "enable_thinking" || property === "thinking") hasToggle = true; + if (property === "effort" || property === "reasoning_effort") { + const candidates = [propertySchema, ...arrayValue(propertySchema.anyOf), ...arrayValue(propertySchema.oneOf)]; + for (const candidate of candidates) { + const parsed = EffortValues.safeParse(candidate.enum); + if (parsed.success) effortValues = parsed.data; + } + } + visit(rawSchema); + } + } + }; + visit(schemaInput); + + const options: NonNullable = []; + if (hasToggle) options.push({ type: "toggle" }); + if (effortValues !== undefined) options.push({ type: "effort", values: effortValues }); + return options; +} + +function arrayValue(value: unknown): Array> { + return Array.isArray(value) + ? value.filter((item): item is Record => item !== null && typeof item === "object") + : []; +} + +async function loadCatalog() { + const fixtureDir = process.env.CF_AIG_FIXTURE_DIR; + if (fixtureDir !== undefined) return loadFixtureRows(fixtureDir, "catalog"); + + const { accountID, token } = credentials(); + const pages: Array> = []; + for (let page = 1; page <= MAX_CATALOG_PAGES; page++) { + const url = new URL(`${API_BASE}/${accountID}/ai/catalog/models`); + url.searchParams.set("page", String(page)); + url.searchParams.set("per_page", "50"); + const { response, json } = await fetchJsonWithRetry(url, { headers: { Authorization: `Bearer ${token}` } }); + if (!response.ok) { + throw new Error(`Cloudflare AI Gateway catalog request failed: ${response.status} ${response.statusText}`); + } + const body = CloudflareResponse.parse(json); + pages.push(body); + const expectedPages = catalogPageCount(pages[0]!); + if (expectedPages > MAX_CATALOG_PAGES) throw new Error(`Invalid Cloudflare AI Gateway catalog page count: ${expectedPages}`); + if (page === expectedPages) return validateCatalogPages(pages, "Cloudflare AI Gateway catalog"); + } + throw new Error("Cloudflare AI Gateway catalog exceeded the pagination safety limit"); +} + +async function loadCatalogSchemaInput(id: string): Promise { + const fixtureDir = process.env.CF_AIG_FIXTURE_DIR; + if (fixtureDir !== undefined) { + const file = path.join(fixtureDir, "schema", `${id.replaceAll("/", "_")}.json`); + if (!existsSync(file)) return undefined; + return z.object({ + success: z.literal(true), + result: z.object({ schema: z.object({ input: z.unknown().optional() }).passthrough() }).passthrough(), + }).passthrough().parse(JSON.parse(readFileSync(file, "utf8"))).result.schema.input; + } + + const { accountID, token } = credentials(); + const { response, json } = await fetchJsonWithRetry( + `${API_BASE}/${accountID}/ai/catalog/models/${id.split("/").map(encodeURIComponent).join("/")}/schema`, + { headers: { Authorization: `Bearer ${token}` } }, + ); + if (response.status === 404) return undefined; + if (!response.ok) { + throw new Error(`Cloudflare AI Gateway schema request failed for ${id}: ${response.status} ${response.statusText}`); + } + return z.object({ + success: z.literal(true), + result: z.object({ schema: z.object({ input: z.unknown().optional() }).passthrough() }).passthrough(), + }).passthrough().parse(json).result.schema.input; +} + +function credentials() { + const token = process.env.CLOUDFLARE_API_TOKEN + ?? process.env.CLOUDFLARE_PRODUCTION_API_TOKEN; + const accountID = process.env.CLOUDFLARE_ACCOUNT_ID + ?? process.env.CLOUDFLARE_PRODUCTION_ACCOUNT_ID_AI_GATEWAY_SANDBOX; + if (!token || !accountID) { + throw new Error( + "Cloudflare AI Gateway sync requires Cloudflare API token and account ID credentials", + ); + } + return { accountID, token }; +} + +function loadFixtureRows(directory: string, prefix: string): unknown[] { + const pages = readdirSync(directory) + .filter((name) => name.startsWith(prefix) && name.endsWith(".json")) + .sort() + .map((file) => CloudflareResponse.parse(JSON.parse(readFileSync(path.join(directory, file), "utf8")))) + .sort((a, b) => a.result_info.page - b.result_info.page); + return validateCatalogPages(pages, `Cloudflare AI Gateway fixtures in ${directory}`); +} + +function catalogPageCount(page: z.infer) { + const calculated = Math.max(1, Math.ceil(page.result_info.total_count / page.result_info.per_page)); + if (page.result_info.total_pages !== undefined && page.result_info.total_pages !== calculated) { + throw new Error("Invalid Cloudflare AI Gateway catalog pagination: total_pages does not match total_count"); + } + return page.result_info.total_pages ?? calculated; +} + +function validateCatalogPages(pages: Array>, source: string) { + const first = pages[0]; + if (first === undefined) throw new Error(`${source} contained no pages`); + const expectedPages = catalogPageCount(first); + if (pages.length !== expectedPages) { + throw new Error(`${source} contains ${pages.length}/${expectedPages} pages`); + } + + const models: CatalogEntry[] = []; + const ids = new Set(); + for (const [index, page] of pages.entries()) { + if (page.result_info.page !== index + 1) { + throw new Error(`${source} expected page ${index + 1}, got ${page.result_info.page}`); + } + if ( + page.result_info.total_count !== first.result_info.total_count + || page.result_info.per_page !== first.result_info.per_page + || catalogPageCount(page) !== expectedPages + ) { + throw new Error(`${source} pagination changed while reading pages`); + } + if (page.result_info.count !== undefined && page.result_info.count !== page.result.length) { + throw new Error(`${source} result count mismatch on page ${page.result_info.page}`); + } + if (page.result.length > page.result_info.per_page) { + throw new Error(`${source} page ${page.result_info.page} exceeds per_page`); + } + for (const model of page.result) { + if (ids.has(model.model_id)) throw new Error(`${source} returned duplicate model ID ${model.model_id}`); + ids.add(model.model_id); + models.push(model); + } + } + if (models.length !== first.result_info.total_count) { + throw new Error(`${source} pagination ended at ${models.length}/${first.result_info.total_count}`); + } + return models; +} + +async function fetchJsonWithRetry( + url: string | URL, + init: RequestInit, + attempts = 5, +): Promise<{ response: Response; json?: unknown }> { + let delay = 500; + for (let attempt = 1; attempt <= attempts; attempt++) { + try { + const timeout = AbortSignal.timeout(REQUEST_TIMEOUT_MS); + const response = await fetch(url, { + ...init, + signal: init.signal ? AbortSignal.any([init.signal, timeout]) : timeout, + }); + if (!response.ok) { + if ((response.status === 429 || response.status >= 500) && attempt < attempts) { + await response.body?.cancel(); + await waitForRetry(retryDelay(response, delay), init.signal); + delay = Math.min(delay * 2, MAX_BACKOFF_DELAY_MS); + continue; + } + await response.body?.cancel(); + return { response }; + } + try { + return { response, json: await response.json() }; + } catch (error) { + if (attempt === attempts) throw error; + } + } catch (error) { + if (init.signal?.aborted || attempt === attempts) throw error; + } + await waitForRetry(delay, init.signal); + delay = Math.min(delay * 2, MAX_BACKOFF_DELAY_MS); + } + throw new Error("Cloudflare AI Gateway request exhausted retries"); +} + +function retryDelay(response: Response, fallback: number) { + const value = response.headers.get("retry-after"); + if (value === null) return fallback; + const seconds = Number(value); + if (Number.isFinite(seconds) && seconds >= 0) return Math.min(seconds * 1_000, MAX_RETRY_DELAY_MS); + const timestamp = Date.parse(value); + return Number.isFinite(timestamp) + ? Math.min(Math.max(timestamp - Date.now(), 0), MAX_RETRY_DELAY_MS) + : fallback; +} + +function waitForRetry(delay: number, signal: AbortSignal | null | undefined) { + return new Promise((resolve, reject) => { + if (signal?.aborted) return reject(signal.reason); + const onAbort = () => { + clearTimeout(timer); + reject(signal.reason); + }; + const timer = setTimeout(() => { + signal?.removeEventListener("abort", onAbort); + resolve(); + }, delay); + signal?.addEventListener("abort", onAbort, { once: true }); + }); +} + +async function mapLimit(items: T[], limit: number, transform: (item: T) => Promise) { + const results = new Array(items.length); + let next = 0; + await Promise.all(Array.from({ length: Math.min(limit, items.length) }, async () => { + while (next < items.length) { + const index = next++; + results[index] = await transform(items[index]!); + } + })); + return results; +} + +function proxiedCost(pricing: Record, id: string): NonNullable { + try { + if ("long_context_threshold_tokens" in pricing) { + const value = ContextPricing.parse(pricing); + return contextCost( + value.long_context_threshold_tokens, + tokenCost( + value.short_context_input_tokens, + value.short_context_output_tokens, + value.short_context_input_cached_tokens, + value.short_context_input_cache_creation_tokens, + ), + tokenCost( + value.long_context_input_tokens, + value.long_context_output_tokens, + value.long_context_input_cached_tokens, + value.long_context_input_cache_creation_tokens, + ), + ); + } + if ("under_200k_per_1m_input_tokens" in pricing) { + const value = Tier200kPricing.parse(pricing); + return contextCost( + 200_000, + tokenCost( + value.under_200k_per_1m_input_tokens, + value.under_200k_per_1m_output_tokens, + value.under_200k_per_1m_input_cached_tokens, + ), + tokenCost( + value.over_200k_per_1m_input_tokens, + value.over_200k_per_1m_output_tokens, + value.over_200k_per_1m_input_cached_tokens, + ), + ); + } + if ("under_512k_per_1m_input_tokens" in pricing) { + const value = Tier512kPricing.parse(pricing); + return contextCost( + 512_000, + tokenCost( + value.under_512k_per_1m_input_tokens, + value.under_512k_per_1m_output_tokens, + value.under_512k_per_1m_input_cached_tokens, + ), + tokenCost( + value.over_512k_per_1m_input_tokens, + value.over_512k_per_1m_output_tokens, + value.over_512k_per_1m_input_cached_tokens, + ), + ); + } + const value = FlatPricing.parse(pricing); + return tokenCost( + value.input_tokens, + value.output_tokens, + value.input_cached_tokens, + value.input_cache_creation_tokens, + ); + } catch (error) { + if (error instanceof z.ZodError) { + throw new Error(`${id}: unsupported structured pricing: ${error.message}`); + } + throw error; + } +} + +function tokenCost(input: number, output: number, cacheRead?: number, cacheWrite?: number) { + return { + input, + output, + ...(cacheRead === undefined ? {} : { cache_read: cacheRead }), + ...(cacheWrite === undefined ? {} : { cache_write: cacheWrite }), + }; +} + +function contextCost( + size: number, + short: ReturnType, + long: ReturnType, +): NonNullable { + return { + ...short, + tiers: [{ ...long, tier: { type: "context", size } }], + }; +} + +function isSafeModelID(id: string) { + if (path.isAbsolute(id) || id.includes("\\")) return false; + const segments = id.split("/"); + return segments.length >= 2 + && segments.every((segment) => /^[A-Za-z0-9@._-]+$/.test(segment) && segment !== "." && segment !== ".."); +} + +function resolveBaseModel(id: string) { + if (labFileExists(id)) return id; + const dashed = id.replaceAll(".", "-"); + return labFileExists(dashed) ? dashed : undefined; +} + +function labFileExists(id: string) { + return existsSync(path.join(MODELS_ROOT, `${id}.toml`)); +} + +function baseReasoning(id: string) { + const file = path.join(MODELS_ROOT, `${id}.toml`); + return existsSync(file) && z.object({ reasoning: z.boolean().optional() }).passthrough() + .parse(Bun.TOML.parse(readFileSync(file, "utf8"))).reasoning === true; +} + +function noteHeader(note: string[] | undefined) { + return note === undefined || note.length === 0 + ? undefined + : `${note.map((line) => `# ${line}`).join("\n")}\n`; +} diff --git a/packages/core/src/sync/providers/cloudflare-workers-ai.ts b/packages/core/src/sync/providers/cloudflare-workers-ai.ts index 212a1c7c492..7b7fc7a5b69 100644 --- a/packages/core/src/sync/providers/cloudflare-workers-ai.ts +++ b/packages/core/src/sync/providers/cloudflare-workers-ai.ts @@ -3,15 +3,24 @@ import { readdirSync } from "node:fs"; import path from "node:path"; import { ReasoningOption } from "../../schema.js"; -import type { ExistingModel, SyncedModel, SyncProvider } from "../index.js"; -import { - buildOpenRouterModel, - OpenRouterModel, - OpenRouterResponse, -} from "./openrouter.js"; +import type { ExistingModel, SyncedFullModel, SyncedModel, SyncProvider } from "../index.js"; +import { MissingReasoningOptionsError } from "../missing-reasoning-options.js"; +import { buildOpenRouterModel, OpenRouterModel } from "./openrouter.js"; const API_BASE = "https://api.cloudflare.com/client/v4/accounts"; -const MODELS_DIR = path.join(import.meta.dirname, "..", "..", "..", "..", "..", "models"); +const TOGGLE_HEADER = "# Toggle: chat_template_kwargs.enable_thinking = true|false\n"; +// Models with a verified enable_thinking control. DeepSeek/Kimi use other wire paths; +// their authored comments are preserved below, never inferred from generic schemas. +// These are exact model IDs, not a default for future models or whole publishers. +const ENABLE_THINKING_MODELS = new Set([ + "@cf/google/gemma-4-26b-a4b-it", + "@cf/nvidia/nemotron-3-120b-a12b", + "@cf/qwen/qwen3.8-27b", + "@cf/zai-org/glm-4.7-flash", + "@cf/zai-org/glm-5.2", +]); +const ROOT_DIR = path.join(import.meta.dirname, "..", "..", "..", "..", ".."); +const MODELS_DIR = path.join(ROOT_DIR, "models"); const metadataFilesByPublisher = new Map(); const METADATA_PUBLISHERS: Record = { "deepseek-ai": "deepseek", @@ -25,39 +34,54 @@ const METADATA_PUBLISHERS: Record = { "zai-org": "zhipuai", }; -const CloudflareOpenRouterResponse = z.object({ - result: z.union([OpenRouterResponse, z.array(OpenRouterModel)]).optional(), - result_info: z.object({ - page: z.number().optional(), - total_pages: z.number().optional(), - }).passthrough().optional(), -}).passthrough(); +const WorkersAiReasoning = OpenRouterModel.shape.reasoning.unwrap().partial({ mandatory: true }); +const WorkersAiModel = OpenRouterModel.extend({ + reasoning: WorkersAiReasoning.optional(), + input_schema: z.record(z.unknown()).optional(), +}); +type WorkersAiModel = z.infer; const CloudflareModel = z.object({ - id: z.string(), - name: z.string(), - created: z.number(), + id: z.string().trim().min(1), + name: z.string().trim().min(1), + created: z.number().int().nonnegative(), hugging_face_id: z.string().nullable().optional(), - context_length: z.number(), - max_output_length: z.number().nullable().optional(), - input_modalities: z.array(z.string()).optional(), - output_modalities: z.array(z.string()).optional(), - pricing: z.object({ - prompt: z.string(), - completion: z.string(), - internal_reasoning: z.string().optional(), - input_cache_read: z.string().optional(), - input_cache_write: z.string().optional(), + context_length: z.number().int().positive(), + max_output_length: z.number().int().positive().nullable().optional(), + input_modalities: z.array(z.string().min(1)).min(1).optional(), + output_modalities: z.array(z.string().min(1)).min(1).optional(), + pricing: OpenRouterModel.shape.pricing.extend({ + prompt: z.string().refine(validPrice), + completion: z.string().refine(validPrice), }), supported_features: z.array(z.string()).optional(), supported_sampling_parameters: z.array(z.string()).optional(), - reasoning: OpenRouterModel.shape.reasoning.catch(undefined), + // Validate reasoning separately so malformed controls do not discard the model. + reasoning: z.unknown().optional(), input_schema: z.record(z.unknown()).optional(), }).passthrough(); const CloudflareResponse = z.object({ - data: z.array(CloudflareModel), -}).passthrough(); + data: z.array(z.unknown()).optional(), + result: z.union([ + z.array(z.unknown()), + z.object({ data: z.array(z.unknown()) }), + ]).optional(), + success: z.literal(true).optional(), + result_info: z.object({ + total_pages: z.number().int().positive().optional(), + }).optional(), +}).refine((response) => response.data !== undefined || response.result !== undefined, { + message: "Cloudflare Workers AI response did not include model data", +}); + +function modelRows(response: z.infer) { + return response.data ?? (Array.isArray(response.result) ? response.result : response.result!.data); +} + +function validPrice(value: string) { + return value.trim() !== "" && Number.isFinite(Number(value)) && Number(value) >= 0; +} type CloudflareModel = z.infer; @@ -65,9 +89,13 @@ export const cloudflareWorkersAi = { id: "cloudflare-workers-ai", name: "Cloudflare Workers AI", modelsDir: "providers/cloudflare-workers-ai/models", + deleteMissing: false, updateHeader(current, generated) { - const notes = current.split("\n").filter((line) => line.trim() && - (/https?:\/\//.test(line) || !/reasoning|thinking|effort|toggle|budget/i.test(line))); + const notes = current.split("\n").filter((line) => { + const trimmed = line.trim(); + return trimmed !== "" + && !/^# (?:Reasoning controls declared by Cloudflare's model input schema\.|Toggle:|Effort:|Budget:)/.test(trimmed); + }); return [...new Set([...generated.trim().split("\n"), ...notes])].join("\n") + "\n"; }, async fetchModels() { @@ -80,15 +108,15 @@ export const cloudflareWorkersAi = { } const first = await fetchPage(accountID, token, 1); - const models = parseCloudflareModels(first); - const pageInfo = CloudflareOpenRouterResponse.safeParse(first).success - ? CloudflareOpenRouterResponse.parse(first).result_info - : undefined; - - for (let page = 2; page <= (pageInfo?.total_pages ?? 1); page++) { - models.push(...parseCloudflareModels(await fetchPage(accountID, token, page))); + if (first === undefined) throw new Error("Cloudflare Workers AI search returned no usable models"); + const rows = modelRows(first); + for (let page = 2; page <= (first.result_info?.total_pages ?? 1); page++) { + const response = await fetchPage(accountID, token, page); + // Keep successful pages; deleteMissing: false retains models on failed pages. + if (response !== undefined) rows.push(...modelRows(response)); } + const models = parseCloudflareModels({ data: rows }); for (let i = 0; i < models.length; i += 4) { await Promise.all(models.slice(i, i + 4).map(async (model) => { model.input_schema = await fetchSchema(accountID, token, model.id.replace(/^workers-ai\//, "")); @@ -98,24 +126,62 @@ export const cloudflareWorkersAi = { return { data: models }; }, parseModels(raw) { - return parseCloudflareModels(raw); + const models = parseCloudflareModels(raw); + if (models.length === 0) throw new Error("Cloudflare Workers AI search returned no usable models"); + return models; }, translateModel(model, context) { - const normalized = normalizeModel(model); - const id = normalized.id.replace(/^workers-ai\//, ""); - const controls = normalized.supported_parameters.some((value) => value === "reasoning" || value === "include_reasoning") - ? schemaReasoningOptions(model.input_schema) - : undefined; + const id = model.id; + const existing = context.existing(id); + const apiControls = workersAiReasoningOptions(model); + const controls = apiControls === undefined + && model.supported_parameters.some((value) => value === "reasoning" || value === "include_reasoning") + ? schemaReasoningOptions(model.input_schema) + : undefined; + if ( + existing === undefined + && model.input_schema !== undefined + && hasReasoning(model) + && controls === undefined + && apiControls === undefined + ) { + throw new MissingReasoningOptionsError(id, "Workers AI Search does not specify concrete reasoning controls; manual authoring is needed"); + } + const translated = { + ...buildWorkersAiModel(model, existing), + ...(controls && { reasoning_options: controls.options }), + }; + if (controls !== undefined) return { id, model: translated, header: controls.header }; + + const toggleHeader = ENABLE_THINKING_MODELS.has(id) ? TOGGLE_HEADER : ""; + if ( + translated.reasoning_options?.some((option) => option.type === "toggle") + && model.input_schema !== undefined + && !toggleHeader + ) { + if (existing === undefined) throw new MissingReasoningOptionsError(id, "Workers AI toggle wire path needs manual verification"); + console.warn(`Keeping catalogue reasoning for ${id}: Workers AI toggle wire path is unknown`); + // Keep the reasoning boundary small: other usable properties still update. + return { + id, + model: buildWorkersAiModel({ ...model, reasoning: undefined }, existing), + }; + } return { id, - model: { - ...buildWorkersAiModel(normalized, context.existing(id)), - ...(controls && { reasoning_options: controls.options }), - }, - header: controls?.header, + model: translated, + header: translated.reasoning_options?.some((option) => option.type === "toggle") + ? toggleHeader || undefined + : undefined, }; }, -} satisfies SyncProvider; +} satisfies SyncProvider; + +function hasReasoning(model: WorkersAiModel) { + return model.supported_parameters.includes("reasoning") || model.supported_parameters.includes("include_reasoning") + || model.reasoning?.mandatory !== undefined || model.reasoning?.supported_efforts !== undefined + || model.reasoning?.supports_max_tokens === true; +} const SchemaNode = z.object({ type: z.string().optional(), @@ -178,25 +244,33 @@ async function fetchSchema(accountID: string, token: string, model: string) { } export function buildWorkersAiModel( - model: z.infer, + model: WorkersAiModel, existing: ExistingModel | undefined, ): SyncedModel { + const reasoningOptions = workersAiReasoningOptions(model); + const reasoning = reasoningOptions !== undefined + ? true + : existing?.reasoning ?? hasReasoning(model); const source = { ...model, - // Cloudflare has no verified "null means every effort" contract. - reasoning: model.reasoning === undefined ? undefined : { - ...model.reasoning, - supported_efforts: model.reasoning.supported_efforts ?? undefined, - }, + reasoning: undefined, + supported_parameters: [ + ...model.supported_parameters.filter((parameter) => !["reasoning", "include_reasoning"].includes(parameter)), + ...(reasoning ? ["reasoning"] : []), + ], name: existing?.name ?? model.name, top_provider: { ...model.top_provider, max_completion_tokens: existing?.limit?.output ?? model.top_provider.max_completion_tokens, }, }; + // The shared builder uses these options when source.reasoning is omitted. + const existingWithReasoningOptions = reasoningOptions === undefined + ? existing + : { ...existing, reasoning_options: reasoningOptions }; const synced = buildOpenRouterModel( source, - existing, + existingWithReasoningOptions, existing?.base_model ?? resolveCloudflareBaseModel(model), ); if ("base_model" in synced) return synced; @@ -212,7 +286,50 @@ export function buildWorkersAiModel( }; } -export function resolveCloudflareBaseModel(model: z.infer) { +function workersAiReasoningOptions({ id, reasoning }: WorkersAiModel): SyncedFullModel["reasoning_options"] { + // A null gateway allowlist does not identify concrete model controls. + // Preserve the catalogue instead of expanding it to every effort in the schema. + if (reasoning === undefined || reasoning.supported_efforts === null) return undefined; + + const options: NonNullable = []; + const efforts = reasoning.supported_efforts; + if (efforts?.length === 0) return undefined; + if (efforts === undefined && reasoning.supports_max_tokens !== true) { + // GLM-4.7-Flash's verified ConfigAPI/Search shape is { mandatory: false, + // default_enabled: true }; its only control is enable_thinking. The generic + // input schema's low/medium/high enum is not a model capability. + // Creator: https://huggingface.co/zai-org/GLM-4.7-Flash/blob/main/chat_template.jinja + // Require the explicit off-capability flag; absence of efforts alone says nothing. + return id === "@cf/zai-org/glm-4.7-flash" && reasoning.mandatory === false + ? [{ type: "toggle" }] + : undefined; + } + // Without either an explicit mandatory flag or a named off setting, a partial + // effort list cannot tell us whether replacing the catalogue would lose a toggle. + if (reasoning.mandatory === undefined && !efforts?.includes("none")) return undefined; + + if (reasoning.mandatory === false && !efforts?.includes("none")) { + options.push({ type: "toggle" }); + } + + const values = reasoning.mandatory ? efforts?.filter((value) => value !== "none") : efforts; + // One mandatory effective effort offers no caller choice. Unlike missing or + // empty metadata, a concrete singleton establishes this explicitly. + const fixedEffort = reasoning.mandatory === true && values?.length === 1; + if (values?.length && !fixedEffort) { + options.push({ type: "effort", values: [...values] }); + } + + if (reasoning.supports_max_tokens === true) { + // Explicit reasoning.max_tokens support, never inferred from output limits. + options.push({ type: "budget_tokens" }); + } + + // Empty control metadata never clears authored controls; a known fixed effort can. + return options.length > 0 || fixedEffort ? options : undefined; +} + +export function resolveCloudflareBaseModel(model: WorkersAiModel) { const [, publisher] = model.id.replace(/^workers-ai\//, "").split("/"); if (publisher === undefined) return undefined; @@ -246,39 +363,61 @@ async function fetchPage(accountID: string, token: string, page: number) { url.searchParams.set("per_page", "1000"); url.searchParams.set("page", String(page)); - const response = await fetch(url, { - headers: { Authorization: `Bearer ${token}` }, - }); - if (!response.ok) { - throw new Error( - `Cloudflare Workers AI models request failed: ${response.status} ${response.statusText}${await responseDetails(response)}`, - ); + for (let attempt = 1; attempt <= 4; attempt++) { + try { + const response = await fetch(url, { + headers: { Authorization: `Bearer ${token}` }, + signal: AbortSignal.timeout(30_000), + }); + if (!response.ok) { + throw new Error(`${response.status} ${response.statusText}${await responseDetails(response)}`); + } + return CloudflareResponse.parse(await response.json()); + } catch (error) { + console.warn( + `Workers AI search page ${page}, attempt ${attempt}/4 failed: ${error instanceof Error ? error.message : String(error)}`, + ); + if (attempt < 4) await Bun.sleep(30_000); + } } - return response.json(); } -function parseCloudflareModels(raw: unknown): CloudflareModel[] { - const cloudflare = CloudflareResponse.safeParse(raw); - if (cloudflare.success) return cloudflare.data.data; - - const direct = OpenRouterResponse.safeParse(raw); - if (direct.success) return direct.data.data.map((model) => CloudflareModel.parse(model)); - - const wrapped = CloudflareOpenRouterResponse.parse(raw); - if (wrapped.result === undefined) { - throw new Error("Cloudflare Workers AI response did not include model data"); - } - const models = Array.isArray(wrapped.result) ? wrapped.result : wrapped.result.data; - return models.map((model) => CloudflareModel.parse(model)); +function parseCloudflareModels(raw: unknown): WorkersAiModel[] { + const response = CloudflareResponse.parse(raw); + return modelRows(response).flatMap((row) => { + const parsed = CloudflareModel.safeParse(row); + if (!parsed.success) { + console.warn(`Skipping invalid Workers AI model: ${parsed.error.message}`); + return []; + } + try { + return [normalizeModel(parsed.data)]; + } catch (error) { + console.warn(`Skipping invalid Workers AI model ${parsed.data.id}: ${error instanceof Error ? error.message : String(error)}`); + return []; + } + }); } function normalizeModel(model: CloudflareModel) { - if ("architecture" in model && "top_provider" in model && "supported_parameters" in model) { - return OpenRouterModel.parse(model); + const parsed = WorkersAiReasoning.safeParse(model.reasoning); + const reasoning = parsed.success ? parsed.data : undefined; + if (!parsed.success && model.reasoning != null) { + console.warn(`Ignoring invalid Workers AI reasoning for ${model.id}: ${parsed.error.message}`); + } + const id = model.id.replace(/^workers-ai\//, ""); + const normalizedID = id.startsWith("@cf/") ? id : `@cf/${id}`; + if ("architecture" in model || "top_provider" in model || "supported_parameters" in model) { + const normalized = WorkersAiModel.parse({ ...model, id: normalizedID, reasoning }); + z.number().int().positive().nullable().parse(normalized.top_provider.max_completion_tokens); + if (normalized.architecture.input_modalities.length === 0 || normalized.architecture.output_modalities.length === 0) { + throw new Error("Model modalities must not be empty"); + } + return normalized; } - return OpenRouterModel.parse({ - id: model.id.startsWith("@cf/") ? model.id : `@cf/${model.id.replace(/^@cf\//, "")}`, + return WorkersAiModel.parse({ + id: normalizedID, name: model.name, created: model.created, hugging_face_id: model.hugging_face_id ?? null, @@ -297,7 +436,7 @@ function normalizeModel(model: CloudflareModel) { ...model.supported_sampling_parameters ?? [], ...model.supported_features ?? [], ], - reasoning: model.reasoning, + reasoning, }); } diff --git a/packages/core/src/sync/providers/cortecs.ts b/packages/core/src/sync/providers/cortecs.ts index 548bcf10124..78403b3c085 100644 --- a/packages/core/src/sync/providers/cortecs.ts +++ b/packages/core/src/sync/providers/cortecs.ts @@ -36,6 +36,7 @@ export const CortecsModel = z.object({ cache_write_cost: z.number().nonnegative().optional(), }).passthrough(), context_size: z.number().int().positive(), + max_output_tokens: z.number().int().positive().optional(), input_modalities: z.array(z.string()).transform(modalities).default(["text"]), output_modalities: z.array(z.string()).transform(modalities).default(["text"]), supported_features: z.array(z.string()).default([]), @@ -97,7 +98,7 @@ export function buildCortecsModel( const limit = { context: model.context_size, input: existing?.limit?.input, - output: authored?.limit?.output ?? model.context_size, + output: model.max_output_tokens ?? authored?.limit?.output ?? model.context_size, }; const cost = { input: usd(model.pricing.input_token), diff --git a/packages/core/src/sync/providers/crossmodel.ts b/packages/core/src/sync/providers/crossmodel.ts index 576cca122ea..0a1f3d067fe 100644 --- a/packages/core/src/sync/providers/crossmodel.ts +++ b/packages/core/src/sync/providers/crossmodel.ts @@ -180,6 +180,9 @@ function reasoningOptions(model: CrossModelModel): SyncedModel["reasoning_option if (reasoning.budget_tokens.max !== undefined) budget.max = reasoning.budget_tokens.max; options.push(budget); } + if (options.some((option) => option.type === "effort" && option.values.includes("none"))) { + return options.filter((option) => option.type !== "toggle"); + } return options; } @@ -190,8 +193,9 @@ export function buildCrossModel( // CrossModel serves threshold-tiered pricing. The lowest-threshold tier is the // headline [cost]; every higher tier maps to a [[cost.tiers]] context band // (threshold -> tier size), so tier pricing stays fresh on each sync instead of - // being frozen at hand-authored values. Fall back to the existing tiers only - // when the API reports none. + // being frozen at hand-authored values. When the API reports usable pricing, + // its tier list is authoritative; fall back to the existing cost only when the + // source pricing is absent or unusable. const tiers = [...(model.pricing?.tiers ?? [])].sort( (a, b) => (a.threshold ?? 0) - (b.threshold ?? 0), ); @@ -207,7 +211,7 @@ export function buildCrossModel( .filter((entry): entry is NonNullable => entry !== undefined); const cost = base !== undefined - ? { ...base, tiers: contextTiers.length > 0 ? contextTiers : existing?.cost?.tiers } + ? { ...base, tiers: contextTiers.length > 0 ? contextTiers : undefined } : existing?.cost; // Every served model reports a context window; without one (and no existing diff --git a/packages/core/src/sync/providers/digitalocean.ts b/packages/core/src/sync/providers/digitalocean.ts index e200fb6af2b..f3942fcddf9 100644 --- a/packages/core/src/sync/providers/digitalocean.ts +++ b/packages/core/src/sync/providers/digitalocean.ts @@ -575,13 +575,13 @@ export function resolveDigitalOceanBaseModel(id: string) { if (id.startsWith("gemma")) candidates.push(`google/${id}`); // anthropic-claude-5-sonnet → anthropic/claude-sonnet-5 - const anthropicSwapped = id.match(/^anthropic-claude-(\d+(?:\.\d+)?)-(opus|sonnet|haiku)$/); + const anthropicSwapped = id.match(/^anthropic-claude-(\d+(?:\.\d+)?)-([a-z]+)$/); if (anthropicSwapped !== null) { candidates.push(`anthropic/claude-${anthropicSwapped[2]}-${anthropicSwapped[1]}`); } // anthropic-claude-opus-5 → anthropic/claude-opus-5 // also normalize dotted versions: anthropic-claude-opus-4.6 → anthropic/claude-opus-4-6 - const anthropicFamily = id.match(/^anthropic-claude-(opus|sonnet|haiku)-(\d+(?:\.\d+)?)$/); + const anthropicFamily = id.match(/^anthropic-claude-([a-z]+)-(\d+(?:\.\d+)?)$/); if (anthropicFamily !== null) { const version = anthropicFamily[2].replaceAll(".", "-"); candidates.push(`anthropic/claude-${anthropicFamily[1]}-${anthropicFamily[2]}`); diff --git a/packages/core/src/sync/providers/edenai.ts b/packages/core/src/sync/providers/edenai.ts index f3aa1566cf2..dff562fbdf4 100644 --- a/packages/core/src/sync/providers/edenai.ts +++ b/packages/core/src/sync/providers/edenai.ts @@ -3,7 +3,7 @@ import path from "node:path"; import { z } from "zod"; -import type { SyncProvider, SyncedFullModel, SyncedModel } from "../index.js"; +import type { ExistingModel, SyncProvider, SyncedFullModel, SyncedModel } from "../index.js"; import { factorBaseModel, modelMetadata, @@ -59,6 +59,8 @@ const MODALITY_BY_EDENAI: Record< }; // Upstreams that are the lab's own API for models under that namespace. +// The first entry is the unsuffixed display route when several first-party +// hosts exist (Google AI Studio vs Vertex AI). const LAB_UPSTREAMS: Record = { alibaba: ["qwen"], amazon: ["amazon"], @@ -76,6 +78,29 @@ const LAB_UPSTREAMS: Record = { zhipuai: ["zai"], }; +const ROUTE_LABELS: Record = { + amazon: "Amazon Bedrock", + azure: "Azure", + cerebras: "Cerebras", + cloudflare: "Cloudflare", + compactifai: "CompactifAI", + databricks: "Databricks", + deepinfra: "Deep Infra", + fireworks_ai: "Fireworks AI", + flexai: "FlexAI", + groq: "Groq", + infomaniak: "Infomaniak", + ionos: "IONOS", + lilac: "Lilac", + nebius: "Nebius", + ovhcloud: "OVHcloud", + qwen: "Alibaba", + scaleway: "Scaleway", + tensorx: "TensorX", + together_ai: "Together AI", + vertex: "Vertex AI", +}; + type ReasoningOption = NonNullable< SyncedFullModel["reasoning_options"] >[number]; @@ -217,23 +242,62 @@ function hasOutputLimit(baseModel: string) { ); } -function regionVariantName(model: EdenAIModel, baseModel: string) { +function titleCaseSlug(slug: string) { + return slug + .split(/[-_]/) + .filter((word) => word.length > 0) + .map((word) => + word.toLowerCase() === "gpt" + ? "GPT" + : word[0]!.toUpperCase() + word.slice(1).toLowerCase(), + ) + .join(" "); +} + +function isLatestAlias(model: EdenAIModel) { + if (model.alias_of == null) return false; + const id = model.id.replace(REGION_SUFFIX, ""); + const target = model.alias_of.replace(REGION_SUFFIX, ""); + if (id.toLowerCase() === target.toLowerCase()) return false; + const slug = id.split("/").at(-1) ?? id; + return /(?:^|-)latest$/i.test(slug); +} + +function routeLabel(model: EdenAIModel, baseModel: string) { + const lab = baseModel.split("/")[0] ?? ""; + const primary = LAB_UPSTREAMS[lab]?.[0]; + if (model.owned_by === primary) return undefined; + return ROUTE_LABELS[model.owned_by] ?? titleCaseSlug(model.owned_by); +} + +function displayName(model: EdenAIModel, baseModel: string) { const region = REGION_SUFFIX.exec(model.id)?.[0].slice(1); - if (region === undefined) return undefined; + const latest = isLatestAlias(model); + const route = routeLabel(model, baseModel); + if (region === undefined && !latest && route === undefined) return undefined; const canonical = canonicalModelName(baseModel); if (canonical === undefined) return undefined; - return `${canonical} (${region.toUpperCase()})`; + + const head = latest + ? titleCaseSlug(model.id.replace(REGION_SUFFIX, "").split("/").at(-1) ?? "") + : canonical; + const details = [ + ...(latest ? [canonical] : []), + ...(route !== undefined ? [route] : []), + ...(region !== undefined ? [region.toUpperCase()] : []), + ]; + return `${head} (${details.join(", ")})`; } // ======================================== // Reasoning options // ======================================== -// Eden AI's only reasoning control is `reasoning_effort`, so a model is -// published with the effort list its lab entry (or an established relay peer) -// already documents. Peers exposing only `toggle` / `budget_tokens` have no -// equivalent here, and those models are skipped rather than given a guess. +// This sync currently maps only `reasoning_effort`, using the effort list the +// lab entry (or an established relay peer) documents. Toggle / budget controls +// need route-specific mappings. Preserve authored controls when unresolved; +// skip new models rather than inventing an empty control set. function effortValues(options: unknown): string[] | "always-on" | undefined { if (!Array.isArray(options)) return undefined; if (options.length === 0) return "always-on"; @@ -425,6 +489,7 @@ function mapModalities(values: readonly string[] | null | undefined) { export function buildEdenAIModel( model: EdenAIModel, + existing?: ExistingModel, firstParty: ReadonlySet = firstPartyBaseModels, ): SyncedModel | undefined { const baseModel = resolveEdenAIBaseModel(model); @@ -449,7 +514,7 @@ export function buildEdenAIModel( // the lab entry owns it and only the effort controls are authored here. const reasoning = modelMetadata(baseModel).reasoning === true; const reasoningOptions = reasoning - ? reasoningOptionsFor(baseModel) + ? reasoningOptionsFor(baseModel) ?? existing?.reasoning_options : undefined; if (reasoning && reasoningOptions === undefined) return undefined; @@ -461,7 +526,7 @@ export function buildEdenAIModel( return factorBaseModel( baseModel, { - name: regionVariantName(model, baseModel), + name: displayName(model, baseModel), modalities, attachment: input?.some((value) => value !== "text"), reasoning_options: reasoningOptions, @@ -510,8 +575,8 @@ export const edenai = { firstPartyBaseModels = collectFirstPartyBaseModels(models); return models; }, - translateModel(model) { - const built = buildEdenAIModel(model); + translateModel(model, context) { + const built = buildEdenAIModel(model, context.existing(model.id)); if (built === undefined) return undefined; return { id: model.id, model: built }; }, diff --git a/packages/core/src/sync/providers/empiriolabs.ts b/packages/core/src/sync/providers/empiriolabs.ts index 992d1edd90c..3667cff64e6 100644 --- a/packages/core/src/sync/providers/empiriolabs.ts +++ b/packages/core/src/sync/providers/empiriolabs.ts @@ -191,6 +191,9 @@ function reasoningOptions(model: EmpiriolabsModel): SyncedModel["reasoning_optio if (budget.max !== undefined) option.max = budget.max; options.push(option); } + if (options.some((option) => option.type === "effort" && option.values.includes("none"))) { + return options.filter((option) => option.type !== "toggle"); + } return options; } diff --git a/packages/core/src/sync/providers/fireworks-ai.ts b/packages/core/src/sync/providers/fireworks-ai.ts new file mode 100644 index 00000000000..96e28194d97 --- /dev/null +++ b/packages/core/src/sync/providers/fireworks-ai.ts @@ -0,0 +1,354 @@ +import { z } from "zod"; + +import type { ExistingModel, SyncProvider, SyncedFullModel, SyncedModel } from "../index.js"; +import { factorBaseModel } from "./openrouter.js"; + +const API_ENDPOINT = "https://api.fireworks.ai/v1/serverless/models"; +const INVENTORY_ENDPOINT = "https://api.fireworks.ai/v1/accounts/fireworks/models"; + +const FireworksPrice = z.object({ + sku: z.string().min(1), + amount: z.string().regex(/^\d+(?:\.\d+)?$/), + unit: z.literal("1M tokens"), +}).passthrough(); + +export const FireworksModel = z.object({ + id: z.string().min(1), + object: z.literal("model"), + serverless_mode: z.string().min(1), + service_tier: z.string().min(1).optional(), + usage_identifier: z.string().min(1).optional(), + aliases: z.array(z.string().min(1)).optional(), + pricing: z.array(FireworksPrice), + display_name: z.string().min(1), + description: z.string(), + context_length: z.number().int().positive().optional(), + use_cases: z.array(z.string()).optional(), + input_modalities: z.array(z.string()), + output_modalities: z.array(z.string()), + created: z.number().int().nonnegative(), +}).passthrough(); + +export const FireworksResponse = z.object({ + object: z.literal("list"), + data: z.array(FireworksModel), +}).passthrough(); + +export const FireworksInventoryModel = z.object({ + name: z.string().min(1), + kind: z.string().min(1), + supportsServerless: z.boolean(), +}).passthrough(); + +export const FireworksInventoryResponse = z.object({ + models: z.array(FireworksInventoryModel), + nextPageToken: z.string().optional(), +}).passthrough(); + +const FireworksSyncResponse = z.object({ + serverless: FireworksResponse, + inventory: z.array(FireworksInventoryModel), +}); + +export type FireworksModel = z.infer; +export type FireworksInventoryModel = z.infer; +export type FireworksCatalogModel = FireworksModel & { + catalogId: string; + flagModes: FireworksModel[]; +}; +export type FireworksInventoryCatalogModel = { + catalogId: string; + inventoryOnly: true; +}; + +type FireworksSourceModel = FireworksCatalogModel | FireworksInventoryCatalogModel; + +export const fireworksAi = { + id: "fireworks-ai", + name: "Fireworks AI", + modelsDir: "providers/fireworks-ai/models", + skipCreates: true, + // The pricing feed supplies invocation IDs and serving modes, while List + // Models fills inventory gaps. A model absent from both is not serverless. + deleteMissing: true, + sourceID(model) { + return supportsCatalogModel(model) ? model.catalogId : undefined; + }, + skippedNotice(ids) { + if (ids.length === 0) return []; + return [ + `${ids.length} Fireworks serverless text/vision IDs were not created because the sources do not yet provide enough output limits, reasoning controls, tool support, or open-weight status. Existing models are still updated from API-authoritative fields.`, + `Skipped remote IDs: ${ids.map((id) => `\`${id}\``).join(", ")}`, + ]; + }, + async fetchModels() { + const key = process.env.FIREWORKS_API_KEY; + if (key === undefined) throw new Error("Fireworks AI sync requires FIREWORKS_API_KEY"); + const [serverless, inventory] = await Promise.all([ + fetchFireworksModels(key), + fetchFireworksInventory(key), + ]); + return { serverless, inventory }; + }, + parseModels(raw) { + const parsed = FireworksSyncResponse.parse(raw); + return mergeFireworksModels(parsed.serverless.data, parsed.inventory); + }, + translateModel(model, context) { + if (!supportsCatalogModel(model)) return undefined; + const existing = context.existing(model.catalogId); + if (existing === undefined) return undefined; + const authored = context.authored(model.catalogId); + if ("inventoryOnly" in model && authored === undefined) { + throw new Error(`Fireworks AI model ${model.catalogId} has no local TOML to preserve`); + } + if ("inventoryOnly" in model) { + // The shared runner validates translated models before writing them. + return { id: model.catalogId, model: authored as SyncedModel }; + } + return { + id: model.catalogId, + model: buildFireworksModel(model, existing), + }; + }, +} satisfies SyncProvider; + +export async function fetchFireworksModels( + key: string, + fetcher: typeof fetch = fetch, +) { + const response = await fetcher(API_ENDPOINT, { + headers: { Authorization: `Bearer ${key}` }, + }); + if (!response.ok) { + throw new Error(`Fireworks AI models request failed: ${response.status} ${response.statusText}`); + } + return FireworksResponse.parse(await response.json()); +} + +export async function fetchFireworksInventory( + key: string, + fetcher: typeof fetch = fetch, + pageToken?: string, +): Promise { + const url = new URL(INVENTORY_ENDPOINT); + url.searchParams.set("filter", "supports_serverless=true"); + url.searchParams.set("pageSize", "200"); + if (pageToken !== undefined) url.searchParams.set("pageToken", pageToken); + const response = await fetcher(url, { + headers: { Authorization: `Bearer ${key}` }, + }); + if (!response.ok) { + throw new Error(`Fireworks AI inventory request failed: ${response.status} ${response.statusText}`); + } + const page = FireworksInventoryResponse.parse(await response.json()); + if (page.nextPageToken === undefined || page.nextPageToken.length === 0) return page.models; + return [...page.models, ...await fetchFireworksInventory(key, fetcher, page.nextPageToken)]; +} + +export function mergeFireworksModels( + serverless: FireworksModel[], + inventory: FireworksInventoryModel[], +): FireworksSourceModel[] { + if (serverless.length === 0 || inventory.length === 0) { + throw new Error("Fireworks AI returned an empty serverless source; refusing destructive sync"); + } + const expanded = expandFireworksModels(serverless); + const ids = new Set(expanded.map((model) => model.catalogId)); + return [ + ...expanded, + ...inventory + .filter((model) => + model.kind === "HF_BASE_MODEL" + && model.supportsServerless + && !ids.has(model.name) + ) + .map((model): FireworksInventoryCatalogModel => ({ + catalogId: model.name, + inventoryOnly: true, + })), + ]; +} + +export function expandFireworksModels(models: FireworksModel[]): FireworksCatalogModel[] { + const expanded = new Map(); + const grouped = Map.groupBy(models, (model) => model.id); + for (const rows of grouped.values()) { + const defaultRow = rows.find((model) => + model.usage_identifier === undefined && model.service_tier === undefined + ); + const flagModes = rows.filter((model) => model.service_tier !== undefined); + + // A default row owns the base model ID and exposes flag-based paths such as + // Priority as experimental modes. A priority-only model still needs to be + // discoverable, so its service-tier recipe becomes the base invocation. + const baseRow = defaultRow ?? flagModes[0]; + if (baseRow !== undefined) add(baseRow.id, baseRow, defaultRow === undefined ? [] : flagModes); + + for (const model of rows) { + if (model.usage_identifier !== undefined) add(model.usage_identifier, model, []); + for (const alias of model.aliases ?? []) { + add(alias, model, model === defaultRow ? flagModes : []); + } + } + } + return [...expanded.values()]; + + function add(catalogId: string, model: FireworksModel, flagModes: FireworksModel[]) { + if (!expanded.has(catalogId)) expanded.set(catalogId, { ...model, catalogId, flagModes }); + } +} + +function supportsCatalogModel(model: FireworksSourceModel) { + return "inventoryOnly" in model || model.output_modalities.includes("text"); +} + +type Modality = SyncedFullModel["modalities"]["input"][number]; + +const MODALITIES = new Set(["text", "audio", "image", "video", "pdf"]); + +function catalogModalities(values: string[], fallback: Modality[]): Modality[] { + const modalities = values.filter((value): value is Modality => MODALITIES.has(value as Modality)); + return modalities.length === 0 ? fallback : modalities; +} + +function pricing( + model: Pick, + existing?: NonNullable, +): NonNullable { + const bySku = new Map(model.pricing.map((price) => [price.sku, Number(price.amount)])); + const input = bySku.get("LLM input tokens (uncached)") ?? existing?.input; + const output = bySku.get("LLM output tokens") ?? existing?.output; + if (input === undefined || output === undefined) { + throw new Error( + `Fireworks AI model ${model.id} ${model.serverless_mode} mode has incomplete token pricing`, + ); + } + return { + ...existing, + input, + cache_read: bySku.get("LLM input tokens (cached)") ?? existing?.cache_read, + output, + }; +} + +function provider( + model: FireworksCatalogModel, + existing: ExistingModel["provider"], +): ExistingModel["provider"] { + if (model.service_tier !== undefined) { + return { + ...existing, + body: { + ...existing?.body, + service_tier: model.service_tier, + }, + }; + } + if (existing === undefined) return undefined; + + const body = { ...existing.body }; + delete body.service_tier; + const result = { ...existing }; + if (Object.keys(body).length === 0) delete result.body; + else result.body = body; + return Object.keys(result).length === 0 ? undefined : result; +} + +function experimental( + model: FireworksCatalogModel, + cost: NonNullable, + existing: ExistingModel["experimental"], +): ExistingModel["experimental"] { + const modes = { ...existing?.modes }; + // Priority is currently the only Fireworks flag-based serverless mode. The + // endpoint is authoritative for its availability as well as its pricing. + delete modes.priority; + for (const mode of model.flagModes) { + modes[mode.serverless_mode] = { + cost: pricing(mode, cost), + provider: { body: { service_tier: mode.service_tier! } }, + }; + } + if (Object.keys(modes).length === 0) return undefined; + return { + ...existing, + modes, + }; +} + +export function buildFireworksModel( + model: FireworksCatalogModel, + existing: ExistingModel, +): SyncedModel { + const name = existing.name; + const description = existing.description; + const releaseDate = existing.release_date; + const lastUpdated = existing.last_updated; + const reasoning = existing.reasoning; + const toolCall = existing.tool_call; + const openWeights = existing.open_weights; + const limit = existing.limit; + const modalities = existing.modalities; + const cost = existing.cost; + + if ( + name === undefined + || description === undefined + || releaseDate === undefined + || lastUpdated === undefined + || reasoning === undefined + || toolCall === undefined + || openWeights === undefined + || limit === undefined + || limit.context === undefined + || limit.output === undefined + || modalities === undefined + ) { + throw new Error(`Fireworks AI model ${model.catalogId} has incomplete local TOML metadata required for sync`); + } + + const modelCost = pricing(model, cost); + const input = catalogModalities(model.input_modalities, modalities.input); + const outputModalities = catalogModalities(model.output_modalities, modalities.output); + // Fireworks reports the advertised context window, while some deployments + // reserve a few prompt tokens. Preserve a smaller verified local cap, but + // immediately follow any lower ceiling reported by the API. + const context = model.context_length === undefined + ? limit.context + : Math.min(limit.context, model.context_length); + const output = Math.min(limit.output, context); + const values = { + name, + description, + family: existing.family, + release_date: releaseDate, + last_updated: lastUpdated, + attachment: input.some((modality) => modality !== "text"), + reasoning, + reasoning_options: existing.reasoning_options, + temperature: existing.temperature, + tool_call: toolCall, + structured_output: existing.structured_output, + knowledge: existing.knowledge, + open_weights: openWeights, + status: existing.status, + interleaved: existing.interleaved, + cost: modelCost, + limit: { + context, + input: limit.input, + output, + }, + modalities: { + input, + output: outputModalities, + }, + provider: provider(model, existing.provider), + experimental: experimental(model, modelCost, existing.experimental), + } satisfies SyncedFullModel; + + return existing.base_model === undefined + ? values + : factorBaseModel(existing.base_model, values, values.limit, existing.base_model_omit); +} diff --git a/packages/core/src/sync/providers/friendli.ts b/packages/core/src/sync/providers/friendli.ts new file mode 100644 index 00000000000..d021f8ed484 --- /dev/null +++ b/packages/core/src/sync/providers/friendli.ts @@ -0,0 +1,560 @@ +import path from "node:path"; +import { readdirSync } from "node:fs"; +import { z } from "zod"; + +import { describeModel } from "../../describe.js"; +import { inferKimiFamily, ModelFamilyValues } from "../../family.js"; +import type { ExistingModel, SyncProvider, SyncedFullModel, SyncedModel } from "../index.js"; +import { factorBaseModel } from "./openrouter.js"; + +const API_ENDPOINT = "https://api.friendli.ai/serverless/v1/models"; +const MODELS_DIR = path.join(import.meta.dirname, "..", "..", "..", "..", "..", "models"); + +// Friendli catalog pricing is USD per-token; catalog cost is USD per-million. +const PER_TOKEN_TO_PER_MILLION = 1_000_000; + +const InterleavedField = z.enum(["reasoning_content", "reasoning_details"]); + +// Friendli's /v1/models `interleaved` flag is unreliable for some models: it +// reports `false` for deepseek-ai/DeepSeek-V3.2 even though a live +// POST /chat/completions request (chat_template_kwargs.enable_thinking=true) +// returns both `reasoning` and `reasoning_content` in the response. Relying on +// `existing?.interleaved` to carry this forward is fragile — if the on-disk +// file ever loses the field for any reason, the live verification is silently +// forgotten on the next sync with no trace. This map is the durable source of +// truth for models where a live request has verified a real field the +// catalog API misreports; translateInterleaved consults it before falling +// back to the existing on-disk value. +const VERIFIED_INTERLEAVED_OVERRIDES: Record = { + "deepseek-ai/DeepSeek-V3.2": { field: "reasoning_content" }, +}; + +// Raw API reasoning_options shape, including budget_tokens (a real +// reasoning-budget control on Friendli: min = -1 means unlimited, max +// corresponds to max_completion_tokens). Confirmed via the live /v1/models +// response and https://friendli.ai/docs/openapi/model-apis/chat-completions +// (reasoning_budget is a documented request field). The catalog's min/max +// are not safe published bounds (see translateReasoningOptions below), so +// they are parsed but never carried into the synced model. +const FriendliReasoningOption = z + .discriminatedUnion("type", [ + z.object({ type: z.literal("toggle") }).passthrough(), + z + .object({ type: z.literal("effort"), values: z.array(z.string()) }) + .passthrough(), + z + .object({ + type: z.literal("budget_tokens"), + min: z.number().optional(), + max: z.number().optional(), + }) + .passthrough(), + ]) + .optional(); + +export const FriendliModel = z + .object({ + id: z.string(), + hugging_face_id: z.string().optional(), + name: z.string(), + created: z.number(), + context_length: z.number(), + max_completion_tokens: z.number(), + functionality: z + .object({ + tool_call: z.boolean(), + parallel_tool_call: z.boolean().optional(), + structured_output: z.boolean(), + tool_choice: z.boolean().optional(), + system_messages: z.boolean().optional(), + }) + .passthrough(), + pricing: z + .object({ + input: z.union([z.string(), z.number()]), + output: z.union([z.string(), z.number()]), + prompt: z.union([z.string(), z.number()]).optional(), + completion: z.union([z.string(), z.number()]).optional(), + input_cache_read: z.union([z.string(), z.number()]).optional(), + input_cache_write: z.union([z.string(), z.number()]).optional(), + // The pre-SyncProvider generator validated this field and authored + // cost only for TOKEN pricing. The current catalog always omits it + // for the 7 live models, but Friendli has served SECOND-priced + // entries before — passthrough would silently x1,000,000 a + // per-second rate into the catalog's USD/MTok cost. + unit_type: z.enum(["TOKEN", "SECOND"]).optional(), + }) + .passthrough(), + description: z.string().optional(), + hugging_face_url: z.string().optional(), + license: z.string().optional(), + policy: z.string().nullable().optional(), + deprecation_date: z.string().nullable().optional(), + reasoning: z.boolean().optional(), + reasoning_options: z.array(FriendliReasoningOption).optional(), + interleaved: z.union([InterleavedField, z.boolean()]).optional(), + input_modalities: z.array(z.string()).optional(), + output_modalities: z.array(z.string()).optional(), + base_model: z.string().optional(), + mode: z.string().optional(), + }) + .passthrough(); + +export const FriendliResponse = z + .object({ + data: z.array(FriendliModel), + }) + .passthrough(); + +export type FriendliModel = z.infer; + +// HuggingFace-style API orgs that are not catalog lab ids. Map them onto the +// catalog metadata tree so self-referential or HF-style base_model values +// resolve to the right lab directory. +const LAB_PREFIX_MAP: Record = { + "zai-org": "zhipuai", + "deepseek-ai": "deepseek", + "LGAI-EXAONE": "lgai-exaone", + "MiniMaxAI": "minimax", + "meta-llama": "meta", + "mistralai": "mistral", + "Qwen": "alibaba", +}; + +// Resolve an API `base_model` id to the on-disk `models//.toml` id. +// Friendli declares a base_model for most entries, but only models with an +// existing lab metadata file can be factored (override-only). Self-referential +// base_model values (==id) resolve to the model's own lab id when a metadata +// file exists under the mapped lab prefix. +// +// Case-insensitive lookup: the API lowercases some ids (e.g. +// "minimax/minimax-m2.5") that exist on disk as mixed-case +// ("minimax/MiniMax-M2.5.toml"), so we never trust a raw API id and always +// read the directory. +const baseModelCache = new Map(); + +function resolveBaseModelID(baseModel: string | undefined): string | undefined { + if (baseModel === undefined || baseModel.length === 0) return undefined; + const cached = baseModelCache.get(baseModel); + if (cached !== undefined) return cached ?? undefined; + + let resolved = lookupLabFile(baseModel); + if (resolved === undefined) { + const [org, ...parts] = baseModel.split("/"); + const mapped = org !== undefined ? LAB_PREFIX_MAP[org] : undefined; + if (mapped !== undefined && parts.length > 0) { + resolved = lookupLabFile(`${mapped}/${parts.join("/")}`); + } + } + + baseModelCache.set(baseModel, resolved ?? null); + return resolved; +} + +// Resolve a Friendli entry to its catalog lab metadata id. +// 1) API-declared base_model (handles HF id → catalog slug mismatches) +// 2) self-referential fallback: some entries (e.g. deepseek-ai/DeepSeek-V3.2) +// omit base_model entirely even though a matching lab metadata file +// exists under the mapped lab prefix — resolve against the model's own id. +function resolveLabModelSync(model: FriendliModel): string | undefined { + return resolveBaseModelID(model.base_model) ?? resolveBaseModelID(model.id); +} + +function lookupLabFile(baseModel: string): string | undefined { + const [lab, ...modelParts] = baseModel.split("/"); + const modelSlug = modelParts.join("/"); + if (lab === undefined || modelSlug.length === 0) return undefined; + + let labDir: string | undefined; + try { + const dirs = readdirSync(MODELS_DIR, { withFileTypes: true }) + .filter((entry) => entry.isDirectory()) + .map((entry) => entry.name); + labDir = dirs.find((dir) => dir.toLowerCase() === lab.toLowerCase()); + } catch { + return undefined; + } + if (labDir === undefined) return undefined; + + const expected = `${modelSlug}.toml`.toLowerCase(); + let fileMatch: string | undefined; + try { + fileMatch = readdirSync(path.join(MODELS_DIR, labDir)) + .filter((file) => file.endsWith(".toml")) + .find((file) => file.toLowerCase() === expected); + } catch { + // fall through + } + if (fileMatch === undefined) return undefined; + + return `${labDir}/${fileMatch.slice(0, -".toml".length)}`; +} + +export const friendli = { + id: "friendli", + name: "Friendli", + modelsDir: "providers/friendli/models", + // Friendli's /v1/models is authoritative for what this host serves: a model + // absent from the catalog (or past its deprecation_date) must not stay in + // the catalog as a live-looking route, so missing files are deleted rather + // than retained. Deprecation marking below only applies while the model is + // still listed; once it disappears, the file goes with it. + deleteMissing: true, + // Friendli's catalog describes real reasoning controls and limits directly; + // do not carry over a stale base_model when a model switches lab → full inline. + preserveBaseModels: false, + // The runner's default preserveDescription re-injects the resolved base + // description when the translator omits it, recreating an identical + // override. Friendli descriptions come from the API verbatim and match the + // lab's, so drop the re-injection. + preserveDescriptions: false, + // Leading wire-path comments (Toggle/Effort/Budget + doc URLs) always + // refresh from reasoningHeader() below instead of freezing whatever + // comment happened to be on disk the first time a file was created. + authoritativeHeaders: true, + async fetchModels() { + const response = await fetch(API_ENDPOINT); + if (!response.ok) { + throw new Error( + `Friendli request failed: ${response.status} ${response.statusText}`, + ); + } + return response.json(); + }, + parseModels(raw: unknown) { + const models = FriendliResponse.parse(raw).data; + if (models.length === 0) { + throw new Error("Friendli returned an empty model catalog; refusing destructive sync"); + } + return models; + }, + translateModel(model: FriendliModel, context) { + const existing = context.existing(model.id); + const authored = context.authored(model.id); + // A model past its deprecation_date is skipped outright (tracked or not): + // with deleteMissing enabled, skipping removes an already-tracked file on + // the next sync, so the catalog never keeps serving a dead route as a + // live-looking entry. Source-of-truth policy: a deprecation_date in the + // catalog means the same thing as the model disappearing from it. + if (isDeprecated(model)) return undefined; + const factorBase = resolveLabModelSync(model); + // Friendli is a multi-lab relay, so models that need a canonical lab entry + // are handled by the missing-model issue flow. If an existing factored + // entry becomes temporarily unresolvable, skip it as well: the runner + // preserves its TOML rather than expanding or deleting it. Existing true + // host-unique full-inline entries can still update normally. + if ( + factorBase === undefined + && (existing === undefined || authored?.base_model !== undefined) + ) return undefined; + const built = buildFriendliModel( + model, + existing, + factorBase, + ); + return { + id: model.id, + model: built, + header: reasoningHeader(built), + }; + }, + sourceID(model: FriendliModel) { + return model.id; + }, + missingModelID(model: FriendliModel) { + // Active models only reach the skip path when their provider-agnostic lab + // metadata is missing. Deprecated models are intentional removals. + return isDeprecated(model) ? undefined : model.id; + }, + skippedNotice(ids: string[]) { + if (ids.length === 0) return []; + return [ + `${ids.length} remote model(s) skipped: no provider-agnostic lab metadata to factor onto (full-inline creates are not authored for a multi-lab relay — add models//.toml, then re-sync) or deprecation_date passed: ${ids.join(", ")}`, + ]; + }, + missingNotice(paths: string[]) { + if (paths.length === 0) return []; + return [ + `${paths.length} local model(s) deleted after being removed from the Friendli API (or past their deprecation_date): ${paths.join(", ")}`, + ]; + }, +} satisfies SyncProvider; + +// Leading wire-path comments for every reasoning control type this host +// authors on a file, matching the wire paths documented in +// providers/friendli/provider.toml. With authoritativeHeaders enabled, this +// header always replaces whatever was on disk, so it never goes stale. +const REASONING_GUIDE_URL = "https://friendli.ai/docs/guides/reasoning"; +const EFFORT_DOC_URL = + "https://friendli.ai/docs/openapi/model-apis/chat-completions#body-reasoning-effort-one-of-0"; +const BUDGET_DOC_URL = + "https://friendli.ai/docs/openapi/model-apis/chat-completions#body-reasoning-budget-one-of-0"; + +function reasoningHeader(model: SyncedModel): string | undefined { + const options = model.reasoning_options; + if (options === undefined || options.length === 0) return undefined; + const lines: string[] = []; + for (const option of options) { + if (option.type === "toggle") { + lines.push("# Toggle: chat_template_kwargs.enable_thinking = true | false"); + lines.push(`# ${REASONING_GUIDE_URL}`); + } + if (option.type === "effort") { + if (option.values.length > 0) { + const values = option.values.map((value) => `"${value}"`).join(" | "); + lines.push(`# Effort: reasoning_effort = ${values}`); + } else { + lines.push("# Effort: reasoning_effort (model-specific accepted values)"); + } + lines.push(`# ${EFFORT_DOC_URL}`); + } + if (option.type === "budget_tokens") { + lines.push( + "# Budget: reasoning_budget = positive integer reasoning-token cap (-1 = unlimited)", + ); + lines.push(`# ${BUDGET_DOC_URL}`); + } + } + return lines.length > 0 ? `${lines.join("\n")}\n` : undefined; +} + +type Modality = "text" | "audio" | "image" | "video" | "pdf"; + +const ALLOWED_MODALITIES: Record = { + text: true, + audio: true, + image: true, + video: true, + pdf: true, +}; + +function translateModalities(values: string[] | undefined): Modality[] { + const result = [...new Set( + (values ?? ["text"]) + .map((value) => value.toLowerCase()) + .filter((value): value is Modality => ALLOWED_MODALITIES[value] === true), + )]; + return result.length > 0 ? result : ["text"]; +} + +// Skip models whose deprecation_date has passed. Friendli returns an ISO +// timestamp (e.g. "2026-08-20T00:00:00Z"); we compare against now at sync time. +function isDeprecated(model: FriendliModel): boolean { + if (model.deprecation_date === undefined || model.deprecation_date === null) return false; + const dep = Date.parse(model.deprecation_date); + return Number.isFinite(dep) && dep <= Date.now(); +} + +function perMillion(value: string | number | undefined): number | undefined { + if (value === undefined) return undefined; + const number = Number(value); + if (!Number.isFinite(number) || number < 0) return undefined; + const perM = number * PER_TOKEN_TO_PER_MILLION; + return Math.round(perM * 1_000_000) / 1_000_000; +} + +function buildCost( + model: FriendliModel, + existing: ExistingModel["cost"] | undefined, +): NonNullable | undefined { + // TOKEN-priced per-token USD rates are converted to USD/MTok. Any other + // unit (e.g. SECOND) is not a token rate: do not author a cost section for + // it instead of publishing an invented per-million price. + if (model.pricing.unit_type !== undefined && model.pricing.unit_type !== "TOKEN") { + return existing; + } + const input = perMillion(model.pricing.input); + const output = perMillion(model.pricing.output); + if (input === undefined || output === undefined) return existing; + return { + input, + output, + cache_read: perMillion(model.pricing.input_cache_read) ?? existing?.cache_read, + cache_write: perMillion(model.pricing.input_cache_write) ?? existing?.cache_write, + }; +} + +// Translate API reasoning_options into host-accurate catalog options. +// budget_tokens is kept as an unbounded `{ type = "budget_tokens" }`: +// reasoning_budget is a real, independently enforced Friendli control +// (live-verified on GLM-5.3, gemma-4-31B-it, DeepSeek-V3.2, and +// MiniMax-M2.5 — small budgets truncate reasoning_content mid-sentence while +// completion continues), and peers such as OpenRouter/Requesty publish it +// when the host supports it. The catalog's min/max values are not safe +// published range constraints — GLM-5.3 accepted reasoning_budget=1_048_577 +// despite reporting max=1_048_576 — so the capability is preserved without +// authoring bounds. A budget-only reasoner (MiniMax-M2.5) therefore publishes +// `[{ type = "budget_tokens" }]`, not []: [] would falsely claim no caller +// control on a host that documents reasoning_budget. +function translateReasoningOptions( + api: FriendliModel["reasoning_options"], +): SyncedFullModel["reasoning_options"] { + if (api === undefined) return undefined; + const options: NonNullable = []; + for (const option of api) { + if (option === undefined) continue; + if (option.type === "budget_tokens") { + options.push({ type: "budget_tokens" }); + continue; + } + options.push(option as NonNullable[number]); + } + return options.length > 0 ? options : []; +} + +function translateInterleaved( + modelID: string, + value: FriendliModel["interleaved"], + existing: SyncedFullModel["interleaved"] | undefined, +): SyncedFullModel["interleaved"] { + const verified = VERIFIED_INTERLEAVED_OVERRIDES[modelID]; + if (verified !== undefined) return verified; + if (value === undefined) return existing; + // The models endpoint can be stale/wrong for this field (verified live + // against deepseek-ai/DeepSeek-V3.2, see VERIFIED_INTERLEAVED_OVERRIDES) — + // trust an existing authored value over an API false rather than clearing it. + if (value === false) return existing; + if (value === true) return true; + return { field: value }; +} + +function inferFamily(modelID: string, name: string): SyncedFullModel["family"] { + const kimiFamily = inferKimiFamily(modelID, name); + if (kimiFamily !== undefined) return kimiFamily; + const target = `${modelID} ${name}`.toLowerCase(); + return [...ModelFamilyValues] + .sort((a, b) => b.length - a.length) + .find((family) => { + const escaped = family.toLowerCase().replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); + if (family === "o") { + return new RegExp(`(^|[^a-z0-9])${escaped}(?=\\d|$|[^a-z0-9])`).test(target); + } + return new RegExp(`(^|[^a-z0-9])${escaped}(?=$|[^a-z0-9])`).test(target); + }); +} + +function buildFriendliModel( + model: FriendliModel, + existing: ExistingModel | undefined, + factorBase: string | undefined, +): SyncedModel { + // translateModel already skips models past their deprecation_date, so every + // model reaching this point is live. Carry hand-authored lifecycle statuses + // (e.g. beta) through unchanged. + const status = existing?.status; + + // Only override modalities when the API explicitly provides them; otherwise + // omit the override so lab metadata (e.g. gemma vision) is inherited. + const apiInput = model.input_modalities !== undefined ? translateModalities(model.input_modalities) : undefined; + const apiOutput = model.output_modalities !== undefined ? translateModalities(model.output_modalities) : undefined; + // For a factored provider entry, only write the modality sides Friendli + // actually supplied. Plain-object inheritance deep-merges, so an omitted + // side must remain omitted to preserve the lab's canonical modality list + // rather than replacing it with an empty array. + const modalities = apiInput !== undefined || apiOutput !== undefined + ? { + ...(apiInput !== undefined ? { input: apiInput } : {}), + ...(apiOutput !== undefined ? { output: apiOutput } : {}), + } + : undefined; + // undefined when the API omits input_modalities so factorBaseModel + // inherits the lab attachment; only override when explicitly provided. + const attachment = apiInput !== undefined ? apiInput.some((value) => value !== "text") : undefined; + // Completion-length cap: when a base_model exists, defer to the lab's own + // limit.output instead of forcing Friendli's max_completion_tokens onto it. + // Friendli's max_completion_tokens equals context_length for every one of + // the 7 live models, and blindly asserting that as the completion cap would + // overwrite lab-verified, genuinely tighter completion limits (e.g. + // DeepSeek-V3.2's lab file documents output=64_000 out of a 128_000 + // context, not "same as context"). Only fall back to Friendli's own + // reported value when there is no base_model to inherit a real + // completion-cap policy from (full-inline entries). + const limit = { + context: model.context_length, + input: existing?.limit?.input, + output: factorBase !== undefined ? undefined : model.max_completion_tokens, + }; + // Reasoning is tri-state: Friendli omits the flag for some reasoners, and + // treating "absent" as `false` would publish an explicit reasoning=false + // override on factored entries and strip their reasoning_options. Only + // override when the API is authoritative; otherwise the lab wins. + const reasoning = model.reasoning === true ? true : model.reasoning === false ? false : undefined; + const reasoningOptions = reasoning === false ? undefined : translateReasoningOptions(model.reasoning_options); + const interleaved = translateInterleaved(model.id, model.interleaved, existing?.interleaved); + const structuredOutput = model.functionality.structured_output; + const cost = buildCost(model, existing?.cost); + const releaseDate = existing?.release_date ?? new Date(model.created * 1000).toISOString().slice(0, 10); + const today = new Date().toISOString().slice(0, 10); + const lastUpdated = existing?.last_updated ?? today; + + if (factorBase !== undefined) { + return factorBaseModel( + factorBase, + { + attachment, + reasoning, + reasoning_options: reasoningOptions, + interleaved, + // Friendli is authoritative for this host's tool-call surface; a + // real delta vs the lab (either direction) must be published. + tool_call: model.functionality.tool_call, + structured_output: structuredOutput, + // A factored entry inherits the lab description. Friendli's catalog + // description is host metadata, not a new model identity, and its + // generic text can be weaker than the lab's canonical description. + // Keep it only for full-inline entries below. + description: undefined, + limit, + modalities, + cost, + status, + }, + limit, + existing?.base_model === factorBase ? existing.base_model_omit : undefined, + ); + } + + const name = existing?.name ?? (model.name.split("/").at(-1) ?? model.name); + // Full-inline has no lab to inherit from: a reasoning flag the API omits + // defaults to false here (describeModel needs a boolean), while factored + // entries above leave it unset so the lab's value stands. + const inlineReasoning = reasoning ?? false; + return { + name, + description: + existing?.description ?? + model.description ?? + describeModel({ + id: model.id, + providerId: "friendli", + name, + family: existing?.family, + reasoning: inlineReasoning, + tool_call: model.functionality.tool_call, + structured_output: structuredOutput, + open_weights: Boolean(model.hugging_face_url), + // Full-inline entries have no lab modalities to inherit. Default only + // sides omitted by the API to text rather than constructing empty + // arrays, which would advertise an impossible no-output/no-input model. + modalities: { input: apiInput ?? ["text"], output: apiOutput ?? ["text"] }, + }), + family: existing?.family ?? inferFamily(model.id, name), + // Full-inline has no lab to inherit from; default text-only when the API + // omits modalities. Earlier `attachment` is undefined in that case. + attachment: attachment ?? false, + reasoning: inlineReasoning, + reasoning_options: reasoningOptions, + tool_call: model.functionality.tool_call, + structured_output: structuredOutput, + temperature: existing?.temperature ?? true, + release_date: releaseDate, + last_updated: lastUpdated, + open_weights: Boolean(model.hugging_face_url), + interleaved, + knowledge: existing?.knowledge, + cost, + limit: { context: model.context_length, output: model.max_completion_tokens }, + modalities: { input: apiInput ?? ["text"], output: apiOutput ?? ["text"] }, + status, + }; +} diff --git a/packages/core/src/sync/providers/github-copilot.ts b/packages/core/src/sync/providers/github-copilot.ts new file mode 100644 index 00000000000..a75abd33d3a --- /dev/null +++ b/packages/core/src/sync/providers/github-copilot.ts @@ -0,0 +1,173 @@ +import { z } from "zod"; + +import type { ExistingModel, SyncProvider, SyncedModel } from "../index.js"; + +const PRICING_ENDPOINT = "https://raw.githubusercontent.com/github/docs/main/data/tables/copilot/models-and-pricing.yml"; + +const NOT_APPLICABLE = "Not applicable"; + +const Price = z.string().regex(/^\$\d+(?:\.\d+)?$/u); + +export const GitHubCopilotPricingRow = z.object({ + model: z.string().min(1), + provider: z.string().min(1), + release_status: z.string().min(1), + category: z.string().min(1), + threshold: z.string().optional(), + tier: z.string().optional(), + input: Price, + cached_input: Price, + output: Price, + cache_write: z.union([Price, z.literal(NOT_APPLICABLE)]).optional(), + notes: z.string().optional(), +}).passthrough(); + +export type GitHubCopilotPricingRow = z.infer; + +export interface GitHubCopilotPricingModel { + slug: string; + releaseStatus: string; + rows: GitHubCopilotPricingRow[]; +} + +// Map names in pricing YAML to actual filenames in repo +const FILE_ALIASES: Record = { + "mai-code-1-flash": "mai-code-1-flash-picker", +}; + +const IGNORED_ROWS = new Set([ + // Goes in [experimental.modes.fast] under claude-opus-4.8 + "claude-opus-4.8-fast-mode-preview", + // Retired models can remain in the pricing table; do not rediscover them. + // https://docs.github.com/en/copilot/reference/ai-models/supported-models#model-retirement-history + // Sonnet 4.6 is still available to annual-plan subscribers and stays eligible. + "claude-sonnet-4", + "claude-sonnet-4.5", + "claude-opus-4.5", + "claude-opus-4.6", + "gemini-3.1-pro", + "gpt-4.1", + "gpt-5.2", + "gpt-5.2-codex", + "raptor-mini", +]); + +export function githubCopilotModelSlug(name: string) { + return name + .replace(/\[\^[^\]]*\]/gu, "") + .toLowerCase() + .replace(/[^a-z0-9.]+/gu, "-") + .replace(/^-+|-+$/gu, ""); +} + +function price(value: string) { + return value === NOT_APPLICABLE ? undefined : Number(value.slice(1)); +} + +function rowCost(row: GitHubCopilotPricingRow) { + return { + input: price(row.input), + output: price(row.output), + cache_read: price(row.cached_input), + cache_write: row.cache_write === undefined ? undefined : price(row.cache_write), + }; +} + +function longContextThresholdSize(threshold: string | undefined, slug: string) { + const match = threshold?.match(/^>\s*(\d+(?:\.\d+)?)\s*([KM])$/u); + if (!match) throw new Error(`Unparseable long-context threshold for ${slug}: ${threshold}`); + return Number(match[1]) * (match[2] === "K" ? 1_000 : 1_000_000); +} + +export function buildGitHubCopilotCost(model: GitHubCopilotPricingModel) { + const defaults: GitHubCopilotPricingRow[] = []; + const longContext: GitHubCopilotPricingRow[] = []; + for (const row of model.rows) { + const tier = row.tier ?? "Default"; + if (tier === "Default") defaults.push(row); + else if (tier === "Long context") longContext.push(row); + else throw new Error(`Unknown pricing tier for ${model.slug}: ${row.tier}`); + } + const base = defaults[0]; + if (base === undefined || defaults.length > 1) { + throw new Error(`Expected exactly one default pricing row for ${model.slug}, found ${defaults.length}`); + } + + const tiers = longContext + .map((row) => ({ + tier: { type: "context" as const, size: longContextThresholdSize(row.threshold, model.slug) }, + ...rowCost(row), + })) + .sort((a, b) => a.tier.size - b.tier.size); + + return { ...rowCost(base), tiers: tiers.length > 0 ? tiers : undefined }; +} + +export function parseGitHubCopilotPricing(raw: unknown) { + const rows = z.array(GitHubCopilotPricingRow).parse(raw); + const models = new Map(); + for (const row of rows) { + const slug = githubCopilotModelSlug(row.model); + const model = models.get(slug) ?? { slug, releaseStatus: row.release_status, rows: [] }; + model.rows.push(row); + models.set(slug, model); + } + return [...models.values()]; +} + +export function buildGitHubCopilotModel( + model: GitHubCopilotPricingModel, + authored: ExistingModel, +): SyncedModel { + // Only update token rates, leaving audio/reasoning rates and all other + // fields untouched. + const cost = { ...authored.cost, ...buildGitHubCopilotCost(model) }; + return { ...authored, cost } as SyncedModel; +} + +export const githubCopilot = { + id: "github-copilot", + name: "GitHub Copilot", + modelsDir: "providers/github-copilot/models", + skipCreates: true, + deleteMissing: false, + sourceID(model) { + return IGNORED_ROWS.has(model.slug) ? undefined : model.slug; + }, + skippedNotice(ids) { + if (ids.length === 0) return []; + return [ + `${ids.length} Copilot pricing table models have no local catalog file: ${ids.map((id) => `\`${id}\``).join(", ")}`, + ]; + }, + missingNotice(paths) { + if (paths.length === 0) return []; + return [ + `${paths.length} local Copilot models are missing from the docs pricing table and were retained: ${paths.map((path) => `\`${path}\``).join(", ")}`, + ]; + }, + async fetchModels() { + const response = await fetch(PRICING_ENDPOINT); + if (!response.ok) { + throw new Error(`Copilot pricing request failed: ${response.status} ${response.statusText}`); + } + return Bun.YAML.parse(await response.text()); + }, + parseModels: parseGitHubCopilotPricing, + translateModel(model, context) { + if (IGNORED_ROWS.has(model.slug)) return undefined; + const candidates = [ + model.slug, + FILE_ALIASES[model.slug], + model.releaseStatus === "Public preview" ? `${model.slug}-preview` : undefined, + ].filter((candidate) => candidate !== undefined); + const id = candidates.find((candidate) => context.authored(candidate) !== undefined); + const authored = id === undefined ? undefined : context.authored(id); + if (id === undefined || authored === undefined) return undefined; + return { + id, + model: buildGitHubCopilotModel(model, authored), + header: "# Pricing: https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing\n", + }; + }, +} satisfies SyncProvider; diff --git a/packages/core/src/sync/providers/llmgateway.ts b/packages/core/src/sync/providers/llmgateway.ts index a6ea0b7ca57..3a379eac472 100644 --- a/packages/core/src/sync/providers/llmgateway.ts +++ b/packages/core/src/sync/providers/llmgateway.ts @@ -113,7 +113,9 @@ export const llmgateway = { if (data.length === 0) { throw new Error("LLM Gateway returned no text models"); } - return data; + // Case-insensitive ID conflicts use the last entry, including its original + // casing and complete record; never mix metadata from different routes. + return [...new Map(data.map((model) => [model.id.toLowerCase(), model])).values()]; }, translateModel(model, context) { const translated = buildLLMGatewayModel(model, context.existing(model.id)); diff --git a/packages/core/src/sync/providers/merge-gateway.ts b/packages/core/src/sync/providers/merge-gateway.ts index 21fbfe5fcfd..1a589afaecb 100644 --- a/packages/core/src/sync/providers/merge-gateway.ts +++ b/packages/core/src/sync/providers/merge-gateway.ts @@ -158,7 +158,14 @@ export const mergeGateway = { translateModel(model, context) { const existing = context.existing(model.model); const translated = buildMergeGatewayModel(model, existing, context.authored(model.model)); - return translated === undefined ? undefined : { id: model.model, model: translated }; + return translated === undefined ? undefined : { + id: model.model, + model: translated, + header: translated.reasoning_options?.some((option) => option.type === "toggle") + && translated.reasoning_options.some((option) => option.type === "budget_tokens") + ? '# Toggle: thinking.type = "enabled"|"disabled"; enabled requires thinking.budget_tokens.\n# https://docs.merge.dev/merge-gateway/features/reasoning\n' + : undefined, + }; }, } satisfies SyncProvider; @@ -181,6 +188,10 @@ export function mergeGatewayReasoningOptions( options.push({ type: "effort" as const, values: [...effortValues] }); } + if (controls.includes("thinking.budget_tokens")) { + options.push({ type: "budget_tokens" }); + } + return options; } diff --git a/packages/core/src/sync/providers/meta.ts b/packages/core/src/sync/providers/meta.ts new file mode 100644 index 00000000000..3785e620010 --- /dev/null +++ b/packages/core/src/sync/providers/meta.ts @@ -0,0 +1,132 @@ +import { z } from "zod"; + +import type { SyncProvider, SyncedModel } from "../index.js"; + +const MODELS_ENDPOINT = "https://dev.meta.ai/docs/models.md"; +const PRICING_ENDPOINT = "https://dev.meta.ai/docs/pricing-rate-limits.md"; + +const MetaResponse = z.object({ models: z.string(), pricing: z.string() }); +const MetaModel = z.object({ + id: z.string().regex(/^[a-z0-9][a-z0-9.-]*$/), + context: z.number().int().positive().safe(), + cost: z.object({ + input: z.number().finite().nonnegative(), + output: z.number().finite().nonnegative(), + cache_read: z.number().finite().nonnegative(), + }), +}); + +export type MetaModel = z.infer; + +function cells(line: string) { + return line.trim().split("|").slice(1, -1).map((cell) => cell.trim()); +} + +function table(markdown: string, header: string[]) { + const lines = markdown.split("\n"); + const start = lines.findIndex((line) => JSON.stringify(cells(line)) === JSON.stringify(header)); + if (start < 0) throw new Error(`Meta docs are missing the ${header.join(" / ")} table`); + const separator = cells(lines[start + 1] ?? ""); + if (separator.length !== header.length || separator.some((cell) => !/^:?-+:?$/.test(cell))) { + throw new Error("Meta docs have an invalid table separator"); + } + const rows: string[][] = []; + for (const line of lines.slice(start + 2)) { + if (!line.trim().startsWith("|")) break; + const row = cells(line); + if (row.length !== header.length) throw new Error("Meta docs have an invalid table row"); + rows.push(row); + } + if (rows.length === 0) throw new Error("Meta docs table is empty"); + return rows; +} + +function tierCost(markdown: string, tier: string) { + const sections = markdown.split(/^### /m).filter((section) => sectionID(section) === tier); + if (sections.length !== 1) throw new Error(`Meta docs need exactly one pricing section for ${tier}`); + const prices = new Map(); + for (const [usage, price] of table(sections[0]!, ["Usage", "Price per 1M tokens"])) { + if (!/^\$\d+(?:\.\d+)?$/.test(price!) || prices.has(usage!)) { + throw new Error(`Meta docs have invalid or duplicate ${tier} pricing`); + } + prices.set(usage!, Number(price!.slice(1))); + } + return { + input: prices.get("Input"), + output: prices.get("Output"), + cache_read: prices.get("Cached input"), + }; +} + +function sectionID(section: string) { + const heading = section.split("\n")[0]?.trim() ?? ""; + const explicit = heading.match(/\{#([a-z0-9-]+)\}$/)?.[1]; + if (explicit !== undefined) return explicit; + return heading.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, ""); +} + +export function parseMetaModels(raw: unknown): MetaModel[] { + const response = MetaResponse.parse(raw); + const rows = table(response.models, ["Model ID", "Tier", "Input modalities", "Output modalities", "Context window"]); + const ids = new Set(); + return rows.map(([model, tierLink, _input, output, window]) => { + const id = model?.match(/^`([^`]+)`$/)?.[1]; + const tier = tierLink?.match(/^\[[^\]]+\]\([^)]*#([a-z-]+)\)$/)?.[1]; + const tokens = window?.match(/^(\d+|\d{1,3}(?:,\d{3})+) tokens$/)?.[1]; + if (id === undefined || tier === undefined || tokens === undefined || output !== "Text") { + throw new Error("Meta docs have an unsupported token-priced model row"); + } + if (ids.has(id)) throw new Error(`Meta docs have a duplicate model: ${id}`); + ids.add(id); + const parsed = MetaModel.safeParse({ + id, + context: Number(tokens.replaceAll(",", "")), + cost: tierCost(response.pricing, tier), + }); + if (!parsed.success) { + parsed.error.cause = { provider: "meta", model: id }; + throw parsed.error; + } + return parsed.data; + }); +} + +export async function fetchMetaModels(fetcher: typeof fetch = fetch) { + const [models, pricing] = await Promise.all([MODELS_ENDPOINT, PRICING_ENDPOINT].map(async (url) => { + const response = await fetcher(url); + if (!response.ok) throw new Error(`Meta docs request failed: ${response.status} ${response.statusText}`); + return response.text(); + })); + return { models, pricing }; +} + +export const meta = { + id: "meta", + name: "Meta", + modelsDir: "providers/meta/models", + skipCreates: true, + deleteMissing: false, + sourceID(model) { + return model.id; + }, + skippedNotice(ids) { + return ids.length === 0 ? [] : [ + `Meta's public docs list models requiring hand-authored metadata: ${ids.map((id) => `\`${id}\``).join(", ")}`, + ]; + }, + fetchModels: fetchMetaModels, + parseModels: parseMetaModels, + translateModel(model, context) { + const authored = context.authored(model.id); + if (authored === undefined) return undefined; + // Only the documented token rates and context window are authoritative. + // Keep output limits, modalities, reasoning controls, dates, and base_model. + const limit = context.existing(model.id)?.limit?.context === model.context + ? authored.limit + : { ...authored.limit, context: model.context }; + return { + id: model.id, + model: { ...authored, limit, cost: { ...authored.cost, ...model.cost } } as SyncedModel, + }; + }, +} satisfies SyncProvider; diff --git a/packages/core/src/sync/providers/ollama-cloud.ts b/packages/core/src/sync/providers/ollama-cloud.ts new file mode 100644 index 00000000000..5eb499b534f --- /dev/null +++ b/packages/core/src/sync/providers/ollama-cloud.ts @@ -0,0 +1,72 @@ +import { z } from "zod"; + +import { AuthoredModel } from "../../schema.js"; +import type { ExistingModel, SyncProvider, SyncedBaseModel, SyncedModel } from "../index.js"; + +const API_ENDPOINT = "https://ollama.com/v1/models"; + +export const OllamaCloudModel = z.object({ + id: z.string().min(1), + object: z.literal("model"), + created: z.number().int().nonnegative(), + owned_by: z.string(), +}).passthrough(); + +const OllamaCloudResponse = z.object({ + object: z.literal("list"), + data: z.array(OllamaCloudModel), +}).passthrough(); + +export type OllamaCloudModel = z.infer; + +export function parseOllamaCloudModels(raw: unknown) { + return OllamaCloudResponse.parse(raw).data; +} + +function preserveAuthoredModel(id: string, authored: ExistingModel): SyncedModel { + if (authored.base_model !== undefined) return authored as SyncedBaseModel; + + const parsed = AuthoredModel.safeParse({ id, ...authored }); + if (!parsed.success) { + parsed.error.cause = { provider: "ollama-cloud", model: id }; + throw parsed.error; + } + const { id: _id, ...model } = parsed.data; + return model; +} + +export async function fetchOllamaCloudModels(fetcher: typeof fetch = fetch) { + const response = await fetcher(API_ENDPOINT); + if (!response.ok) { + throw new Error(`Ollama Cloud models request failed: ${response.status} ${response.statusText}`); + } + return response.json(); +} + +export const ollamaCloud = { + id: "ollama-cloud", + name: "Ollama Cloud", + modelsDir: "providers/ollama-cloud/models", + skipCreates: true, + trackMissingModels: true, + deleteMissing: false, + sourceID(model) { + return model.id; + }, + skippedNotice(ids) { + if (ids.length === 0) return []; + return [ + `${ids.length} Ollama Cloud models returned by the API are missing from the local catalog and require hand-authored metadata.`, + `Missing remote IDs: ${ids.map((id) => `\`${id}\``).join(", ")}`, + ]; + }, + async fetchModels() { + return fetchOllamaCloudModels(); + }, + parseModels: parseOllamaCloudModels, + translateModel(model, context) { + const authored = context.authored(model.id); + if (authored === undefined) return undefined; + return { id: model.id, model: preserveAuthoredModel(model.id, authored) }; + }, +} satisfies SyncProvider; diff --git a/packages/core/src/sync/providers/openrouter.ts b/packages/core/src/sync/providers/openrouter.ts index c9ea734d4d1..77164f7caa6 100644 --- a/packages/core/src/sync/providers/openrouter.ts +++ b/packages/core/src/sync/providers/openrouter.ts @@ -44,6 +44,7 @@ const CANONICAL_PROVIDER_PREFIXES = { thinkingmachines: { provider: "thinkingmachines", metadata: "thinkingmachines" }, "x-ai": { provider: "xai", metadata: "xai" }, xai: { provider: "xai", metadata: "xai" }, + spacexai: { provider: "xai", metadata: "xai" }, xiaomi: { provider: "xiaomi", metadata: "xiaomi" }, zai: { provider: "zai", metadata: "zhipuai" }, "z-ai": { provider: "zai", metadata: "zhipuai" }, @@ -127,9 +128,13 @@ export const openrouter = { const authored = context.authored(model.id); return authored === undefined ? undefined : { id: model.id, model: authored as SyncedModel }; } + const translated = buildOpenRouterModel(model, context.existing(model.id)); return { id: model.id, - model: buildOpenRouterModel(model, context.existing(model.id)), + model: translated, + header: translated.reasoning_options?.some((option) => option.type === "toggle") + ? "# Toggle: reasoning.enabled = true|false\n# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens\n" + : undefined, }; }, } satisfies SyncProvider; @@ -214,8 +219,9 @@ export function buildOpenRouterModel( // Prefer OpenRouter's live reasoning metadata over authored options so aliases // and rotated models pick up new efforts/budget support. Fall back to authored // only when the API omits a reasoning object. - const reasoning_options = openRouterReasoningOptions(model.reasoning) - ?? (reasoning ? existing?.reasoning_options : undefined); + const reasoning_options = reasoning + ? openRouterReasoningOptions(model.reasoning) ?? existing?.reasoning_options + : undefined; const context = model.context_length; const family = inferFamily(model, name); const releaseDate = dateFromTimestamp(model.created); @@ -320,10 +326,11 @@ function openRouterReasoningOptions(reasoning: OpenRouterModel["reasoning"]): Sy ? ["max", "xhigh", "high", "medium", "low", "minimal", "none"] as const : reasoning.supported_efforts; + if (!reasoning.mandatory && !efforts?.includes("none")) { + options.push({ type: "toggle" }); + } + if (efforts !== undefined) { - if (!reasoning.mandatory && !efforts.includes("none")) { - options.push({ type: "toggle" }); - } options.push({ type: "effort", values: reasoning.mandatory ? efforts.filter((value) => value !== "none") : [...efforts], @@ -562,7 +569,7 @@ function canonicalCandidates(provider: string, modelID: string) { if (provider === "anthropic") { for (const candidate of [...candidates]) { - candidates.push(candidate.replace(/(claude-(?:opus|sonnet|haiku)-\d+)\.(\d+)/, "$1-$2")); + candidates.push(candidate.replace(/(claude-[a-z]+-\d+)\.(\d+)/, "$1-$2")); candidates.push(candidate.replace(/^claude-3\.5-/, "claude-3-5-")); } } diff --git a/packages/core/src/sync/providers/ovhcloud.ts b/packages/core/src/sync/providers/ovhcloud.ts index a7ff6eee316..60b1446e65e 100644 --- a/packages/core/src/sync/providers/ovhcloud.ts +++ b/packages/core/src/sync/providers/ovhcloud.ts @@ -103,15 +103,12 @@ export function buildOvhcloudModel( const outputCost = price(model.pricing?.completion); const cacheRead = price(model.pricing?.input_cache_reads); const cacheWrite = price(model.pricing?.input_cache_writes); - const cost = - (inputCost ?? 0) > 0 || (outputCost ?? 0) > 0 - ? { - input: inputCost ?? 0, - output: outputCost ?? 0, - cache_read: cacheRead !== undefined && cacheRead > 0 ? cacheRead : undefined, - cache_write: cacheWrite !== undefined && cacheWrite > 0 ? cacheWrite : undefined, - } - : undefined; + const cost = { + input: inputCost ?? 0, + output: outputCost ?? 0, + cache_read: cacheRead !== undefined && cacheRead > 0 ? cacheRead : undefined, + cache_write: cacheWrite !== undefined && cacheWrite > 0 ? cacheWrite : undefined, + }; return { base_model: existing?.base_model, diff --git a/packages/core/src/sync/providers/requesty.ts b/packages/core/src/sync/providers/requesty.ts index 7022e530406..d8b0bdf4de5 100644 --- a/packages/core/src/sync/providers/requesty.ts +++ b/packages/core/src/sync/providers/requesty.ts @@ -133,6 +133,9 @@ export function resolveRequestyBaseModel(id: string) { const bare = id.replace(REGION_SUFFIX, ""); return ( resolveModelMetadataBaseModel(bare) ?? + (bare.startsWith("claude-") + ? resolveModelMetadataBaseModel(`anthropic/${bare}`) + : undefined) ?? (ANTHROPIC_DOT_ZERO.test(bare) ? resolveModelMetadataBaseModel(`${bare}-0`) : undefined) @@ -181,8 +184,9 @@ function reasoningOptions( } function buildCost(model: RequestyModel): SyncedFullModel["cost"] { - const input = model.input_price; - const output = model.output_price; + const base = model.pricing?.[0] ?? model; + const input = base.input_price; + const output = base.output_price; if (input == null || output == null) return undefined; const tiers = (model.pricing ?? []).slice(1).map((band) => ({ @@ -195,8 +199,8 @@ function buildCost(model: RequestyModel): SyncedFullModel["cost"] { return { input: pricePerMillion(input), output: pricePerMillion(output), - cache_read: chargedPricePerMillion(model.cached_price), - cache_write: chargedPricePerMillion(model.caching_price), + cache_read: chargedPricePerMillion(base.cached_price), + cache_write: chargedPricePerMillion(base.caching_price), tiers: tiers.length > 0 ? tiers : undefined, }; } diff --git a/packages/core/src/sync/providers/tinfoil.ts b/packages/core/src/sync/providers/tinfoil.ts index 90dcd6fd9c3..9e49d184f7c 100644 --- a/packages/core/src/sync/providers/tinfoil.ts +++ b/packages/core/src/sync/providers/tinfoil.ts @@ -88,6 +88,9 @@ export function buildTinfoilModel( if (existing.cost === undefined || existing.limit?.context === undefined) { throw new Error(`Tinfoil model ${model.id} has incomplete local pricing or limits required for sync`); } + if (model.reasoning && existing.reasoning_options === undefined) { + throw new Error(`Tinfoil model ${model.id} requires hand-authored reasoning_options; the catalog exposes no reasoning controls`); + } const { base_model: baseModel, base_model_omit: baseModelOmit, ...current } = existing; const cost = { @@ -102,6 +105,8 @@ export function buildTinfoilModel( }; const values = { ...current, + reasoning: model.reasoning, + reasoning_options: model.reasoning ? existing.reasoning_options : undefined, cost, limit, } as SyncedFullModel; diff --git a/packages/core/src/sync/providers/vercel.ts b/packages/core/src/sync/providers/vercel.ts index 621b9ca3b01..e7800f77e32 100644 --- a/packages/core/src/sync/providers/vercel.ts +++ b/packages/core/src/sync/providers/vercel.ts @@ -7,7 +7,7 @@ import { factorBaseModel, resolveCanonicalBaseModel } from "./openrouter.js"; const API_ENDPOINT = "https://ai-gateway.vercel.sh/v1/models"; -const ModelType = z.enum([ +const KnownModelType = z.enum([ "language", "embedding", "image", @@ -16,6 +16,7 @@ const ModelType = z.enum([ "transcription", "speech", "realtime", + "evaluation", ]); const PricingTier = z.object({ @@ -42,7 +43,11 @@ export const VercelModel = z.object({ released: z.number().optional(), context_window: z.number().optional().default(0), max_tokens: z.number().optional().default(0), - type: ModelType, + // Vercel adds new model types without notice ("evaluation" appeared Sep 2026 + // and broke the sync with a ZodError). The trailing z.string() keeps the + // schema forward-compatible so future types fall through to the default + // text/text handling in buildVercelModel instead of failing the whole sync. + type: KnownModelType.or(z.string()), tags: z.array(z.string()).optional().default([]), pricing: Pricing.optional(), }).passthrough(); @@ -107,12 +112,19 @@ export function buildVercelModel( : undefined; const cost = buildCost(model.pricing, existing?.cost); + // Self-heal bogus `family = "o"` stamps left by the old substring matcher + // (e.g. cohere rerank, fish-audio, alibaba wan). Same precedent as OpenRouter. + const inferredFamily = inferFamily(model.id, model.name); + const family = existing?.family === "o" && inferredFamily !== "o" + ? inferredFamily + : (existing?.family ?? inferredFamily); + const synced: SyncedFullModel = { name: existing?.name ?? model.name, description: existing?.description ?? describeModel({ id: model.id, name: existing?.name ?? model.name, - family: existing?.family ?? inferFamily(model.id, model.name), + family, reasoning: existing?.reasoning ?? tags.has("reasoning"), tool_call: model.type === "language" ? existing?.tool_call ?? tags.has("tool-use") @@ -140,12 +152,14 @@ export function buildVercelModel( : ["text"], }, }), - family: existing?.family ?? inferFamily(model.id, model.name), + family, release_date: releaseDate, last_updated: existing?.last_updated ?? releaseDate, attachment: existing?.attachment ?? (tags.has("vision") || tags.has("file-input")), reasoning: existing?.reasoning ?? tags.has("reasoning"), - reasoning_options: existing?.reasoning_options ?? base?.reasoning_options, + reasoning_options: existing?.reasoning_options?.length + ? existing.reasoning_options + : base?.reasoning_options, temperature: existing?.temperature, tool_call: model.type === "language" ? existing?.tool_call ?? tags.has("tool-use") @@ -223,17 +237,75 @@ function price(value: string | undefined) { : undefined; } +function tieredPrice(value: string | undefined, tiers: z.infer[] | undefined) { + const base = price(value); + const normalized = (tiers ?? []) + .map((tier, index, values) => ({ + start: tier.min ?? (index === 0 ? 0 : values[index - 1]?.max ?? 0), + cost: price(tier.cost), + })) + .filter((tier): tier is { start: number; cost: number } => tier.cost !== undefined) + .sort((a, b) => a.start - b.start); + + return { + base: normalized[0]?.cost ?? base, + thresholds: normalized.map((tier) => tier.start).filter((start) => start > 0), + at(threshold: number) { + return normalized.findLast((tier) => tier.start <= threshold)?.cost ?? base; + }, + }; +} + function buildCost(pricing: VercelModel["pricing"], existing?: ExistingModel["cost"]) { - const input = price(pricing?.input_tiers?.[0]?.cost ?? pricing?.input); - const output = price(pricing?.output_tiers?.[0]?.cost ?? pricing?.output); + const hasPricingTiers = [ + pricing?.input_tiers, + pricing?.output_tiers, + pricing?.input_cache_read_tiers, + pricing?.input_cache_write_tiers, + ].some((tiers) => (tiers?.length ?? 0) > 0); + const inputPrice = tieredPrice(pricing?.input, pricing?.input_tiers); + const outputPrice = tieredPrice(pricing?.output, pricing?.output_tiers); + const cacheReadPrice = tieredPrice(pricing?.input_cache_read, pricing?.input_cache_read_tiers); + const cacheWritePrice = tieredPrice(pricing?.input_cache_write, pricing?.input_cache_write_tiers); + const input = inputPrice.base; + const output = outputPrice.base; if (input === undefined || output === undefined) return undefined; + + const thresholds = new Set([ + ...inputPrice.thresholds, + ...outputPrice.thresholds, + ...cacheReadPrice.thresholds, + ...cacheWritePrice.thresholds, + ]); + const tiers: NonNullable["tiers"]> = []; + let previous = { + input, + output, + cache_read: cacheReadPrice.base, + cache_write: cacheWritePrice.base, + }; + for (const size of [...thresholds].sort((a, b) => a - b)) { + const tierInput = inputPrice.at(size); + const tierOutput = outputPrice.at(size); + if (tierInput === undefined || tierOutput === undefined) continue; + const current = { + input: tierInput, + output: tierOutput, + cache_read: cacheReadPrice.at(size), + cache_write: cacheWritePrice.at(size), + }; + if (JSON.stringify(current) === JSON.stringify(previous)) continue; + tiers.push({ tier: { type: "context", size }, ...current }); + previous = current; + } + return { input, output, reasoning: existing?.reasoning, - cache_read: price(pricing?.input_cache_read_tiers?.[0]?.cost ?? pricing?.input_cache_read), - cache_write: price(pricing?.input_cache_write_tiers?.[0]?.cost ?? pricing?.input_cache_write), - tiers: existing?.tiers, + cache_read: cacheReadPrice.base, + cache_write: cacheWritePrice.base, + tiers: hasPricingTiers ? (tiers.length > 0 ? tiers : undefined) : existing?.tiers, }; } @@ -241,18 +313,21 @@ function inferFamily(modelID: string, name: string) { const kimiFamily = inferKimiFamily(modelID, name); if (kimiFamily !== undefined) return kimiFamily; - const targets = [modelID, name].map((value) => value.toLowerCase()); - const families = [...ModelFamilyValues].sort((a, b) => b.length - a.length); - return families.find((family) => targets.some((target) => target.includes(family.toLowerCase()))) - ?? families.find((family) => targets.some((target) => isSubsequence(target, family.toLowerCase()))); -} - -function isSubsequence(target: string, value: string) { - let index = 0; - for (const character of target) { - if (character === value[index]) index++; - } - return index === value.length; + // Word-boundary matching like the other gateway syncs. Deliberately no + // fuzzy/subsequence fallback: matching a family by scattered letters + // produces false positives (e.g. "typesafe-ai/jev" -> "yi"), and plain + // substring matching lets single-letter families like "o" match anything + // containing that letter (e.g. cohere rerank, fish-audio, alibaba wan). + const target = `${modelID} ${name}`.toLowerCase(); + return [...ModelFamilyValues] + .sort((a, b) => b.length - a.length) + .find((family) => { + const value = family.toLowerCase().replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); + if (family === "o") { + return new RegExp(`(^|[^a-z0-9])${value}(?=\\d|$|[^a-z0-9])`).test(target); + } + return new RegExp(`(^|[^a-z0-9])${value}(?=$|[^a-z0-9])`).test(target); + }); } function sameVercelModel(current: ExistingModel, desired: SyncedModel) { @@ -274,6 +349,7 @@ function sameVercelModel(current: ExistingModel, desired: SyncedModel) { [current.cost?.output, desiredModel.cost?.output, true], [current.cost?.cache_read, desiredModel.cost?.cache_read, true], [current.cost?.cache_write, desiredModel.cost?.cache_write, true], + [current.cost?.tiers, desiredModel.cost?.tiers], [current.limit?.context, desiredModel.limit?.context], [current.limit?.input, desiredModel.limit?.input], [current.limit?.output, desiredModel.limit?.output], diff --git a/packages/core/src/sync/providers/wandb.ts b/packages/core/src/sync/providers/wandb.ts index a63bff674e0..0adb6b2fe65 100644 --- a/packages/core/src/sync/providers/wandb.ts +++ b/packages/core/src/sync/providers/wandb.ts @@ -102,7 +102,7 @@ const modalityMap: Record = { export const wandb = { id: "wandb", - name: "Weights & Biases", + name: "CoreWeave", modelsDir: "providers/wandb/models", deleteMissing: true, sourceID(model) { @@ -111,7 +111,7 @@ export const wandb = { async fetchModels() { const response = await fetch(API_ENDPOINT); if (!response.ok) { - throw new Error(`W&B Inference request failed: ${response.status} ${response.statusText}`); + throw new Error(`CoreWeave Inference request failed: ${response.status} ${response.statusText}`); } return response.json(); }, diff --git a/packages/core/test/aiand.test.ts b/packages/core/test/aiand.test.ts new file mode 100644 index 00000000000..9e531806203 --- /dev/null +++ b/packages/core/test/aiand.test.ts @@ -0,0 +1,485 @@ +import { expect, test } from "bun:test"; +import { copyFile, mkdir, mkdtemp, readFile } from "node:fs/promises"; +import { tmpdir } from "node:os"; +import path from "node:path"; + +import { syncProvider } from "../src/sync/index.js"; +import { MissingReasoningOptionsError } from "../src/sync/missing-reasoning-options.js"; + +import { + aiand, + AiandModel, + AiandResponse, + buildAiandModel, + resolveAiandBaseModel, +} from "../src/sync/providers/aiand.js"; + +function aiandModel(overrides: Partial = {}): AiandModel { + return { + id: "deepseek-ai/deepseek-v4-flash", + name: "deepseek-ai/DeepSeek-V4-Flash", + description: "Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work", + family: "deepseek", + release_date: "2026-04-24", + last_updated: "2026-09-14", + attachment: false, + reasoning: true, + reasoning_options: [{ type: "effort", values: ["none", "high", "max"] }], + temperature: true, + tool_call: true, + structured_output: true, + cost: { input: 0.15, output: 0.25, cache_read: 0.08 }, + limit: { context: 1_048_576, output: 384_000 }, + modalities: { input: ["text"], output: ["text"] }, + open_weights: true, + ...overrides, + }; +} + +test("translates a feed model near-identity when nothing is authored", () => { + const built = buildAiandModel(aiandModel(), undefined, null); + expect(built).toMatchObject({ + name: "deepseek-ai/DeepSeek-V4-Flash", + family: "deepseek", + release_date: "2026-04-24", + reasoning: true, + reasoning_options: [{ type: "effort", values: ["none", "high", "max"] }], + structured_output: true, + cost: { input: 0.15, output: 0.25, cache_read: 0.08 }, + limit: { context: 1_048_576, output: 384_000 }, + open_weights: true, + }); +}); + +test("curated name, knowledge, and last_updated win over the feed", () => { + const built = buildAiandModel( + aiandModel(), + { name: "DeepSeek V4 Flash", knowledge: "2025-05", last_updated: "2026-07-31" }, + null, + ); + expect(built.name).toBe("DeepSeek V4 Flash"); + expect(built.knowledge).toBe("2025-05"); + expect(built.last_updated).toBe("2026-07-31"); +}); + +test("the feed's last_updated is row-edit noise: today only fills a blank", () => { + const built = buildAiandModel(aiandModel({ last_updated: undefined }), undefined, null, "2026-09-14"); + expect(built.last_updated).toBe("2026-09-14"); +}); + +test("a curated release_date wins over the feed's", () => { + const built = buildAiandModel( + aiandModel({ release_date: "2026-05-01" }), + { release_date: "2026-04-24" }, + null, + ); + expect(built.release_date).toBe("2026-04-24"); +}); + +test("a vocabulary miss preserves authored reasoning options instead of publishing none", () => { + const built = buildAiandModel( + aiandModel({ reasoning_options: [{ type: "effort", values: ["turbo"] }] }), + { reasoning_options: [{ type: "effort", values: ["high"] }] }, + null, + ); + expect(built.reasoning_options).toEqual([{ type: "effort", values: ["high"] }]); +}); + +test("a family the enum does not know falls back to the curated value", () => { + const unknown = buildAiandModel(aiandModel({ family: "not-a-family" }), undefined, null); + expect(unknown.family).toBeUndefined(); + const curated = buildAiandModel(aiandModel({ family: "not-a-family" }), { family: "deepseek" }, null); + expect(curated.family).toBe("deepseek"); +}); + +test("unknown modalities are dropped", () => { + const built = buildAiandModel( + aiandModel({ modalities: { input: ["text", "smell"], output: ["text"] } }), + undefined, + null, + ); + expect(built.modalities?.input).toEqual(["text"]); +}); + +test("a reasoner with no schema-valid controls and nothing authored fails instead of writing []", () => { + const vocabularyMiss = aiandModel({ reasoning_options: [{ type: "effort", values: ["turbo"] }] }); + expect(() => buildAiandModel(vocabularyMiss, undefined, null)).toThrow(MissingReasoningOptionsError); + const omitted = aiandModel({ reasoning_options: undefined }); + expect(() => buildAiandModel(omitted, undefined, null)).toThrow(MissingReasoningOptionsError); + // Authored controls are the escape hatch, and an explicit [] is the feed's own assertion. + expect(buildAiandModel(omitted, { reasoning_options: [{ type: "effort", values: ["high"] }] }, null).reasoning_options) + .toEqual([{ type: "effort", values: ["high"] }]); + expect(buildAiandModel(aiandModel({ reasoning_options: [] }), undefined, null).reasoning_options).toEqual([]); +}); + +test("omitted reasoning_options assert nothing: authored options stay", () => { + const built = buildAiandModel(aiandModel({ reasoning_options: undefined }), { + reasoning_options: [{ type: "effort", values: ["high"] }], + }); + expect(built.reasoning_options).toEqual([{ type: "effort", values: ["high"] }]); +}); + +test("an explicit empty list asserts no caller controls and is written as-is", () => { + const built = buildAiandModel( + aiandModel({ reasoning_options: [] }), + { reasoning_options: [{ type: "effort", values: ["high"] }] }, + null, + ); + expect(built.reasoning_options).toEqual([]); +}); + +test("parseModels refuses an empty feed instead of authorizing catalog deletion", () => { + expect(() => aiand.parseModels({ aiand: { models: {} } })).toThrow(/refusing an empty feed/); +}); + +test("modalities keep canonical order regardless of feed order", () => { + const built = buildAiandModel( + aiandModel({ modalities: { input: ["video", "text", "pdf", "image"], output: ["text"] } }), + undefined, + null, + ); + expect(built.modalities?.input).toEqual(["text", "image", "video", "pdf"]); +}); + +test("factors against an authored base_model and never overrides family", () => { + const built = buildAiandModel(aiandModel(), { + base_model: "deepseek/deepseek-v4-flash", + base_model_omit: ["limit.input"], + }); + expect(built).toMatchObject({ + base_model: "deepseek/deepseek-v4-flash", + base_model_omit: ["limit.input"], + }); + expect("family" in built ? built.family : undefined).toBeUndefined(); +}); + +test("a curated alpha/beta survives a feed that omits status; a feed status wins", () => { + const kept = buildAiandModel(aiandModel(), { status: "beta" }, null); + expect(kept.status).toBe("beta"); + const overridden = buildAiandModel(aiandModel({ status: "deprecated" }), { status: "beta" }, null); + expect(overridden.status).toBe("deprecated"); +}); + +test("the feed owns deprecation: an omitted status clears a curated deprecated", () => { + const reactivated = buildAiandModel(aiandModel(), { status: "deprecated" }, null); + expect(reactivated.status).toBeUndefined(); +}); + +test("skippedNotice stays silent on a clean sync", () => { + expect(aiand.skippedNotice([])).toEqual([]); + expect(aiand.skippedNotice(["unknown-lab/mystery-9"])).toHaveLength(1); +}); + +test("authored-only cost fields ride along; feed prices are authoritative", () => { + const built = buildAiandModel( + aiandModel(), + { + cost: { input: 9, output: 9, reasoning: 0.75, cache_write: 0.5, input_audio: 1.25 }, + limit: { context: 1, input: 128_000, output: 1 }, + }, + null, + ); + expect(built.cost).toMatchObject({ + input: 0.15, + output: 0.25, + reasoning: 0.75, + cache_read: 0.08, + cache_write: 0.5, + input_audio: 1.25, + }); + expect(built.limit).toEqual({ context: 1_048_576, input: 128_000, output: 384_000 }); +}); + +test("feed cost tiers and auxiliary prices replace authored values", () => { + const tiers = [{ + tier: { type: "context" as const, size: 200_000 }, + input: 0.3, + output: 0.5, + cache_read: 0.16, + }]; + const model = AiandModel.parse({ + ...aiandModel(), + cost: { + ...aiandModel().cost, + reasoning: 0.4, + cache_write: 0.12, + output_audio: 2, + tiers, + }, + }); + const built = buildAiandModel(model, { + cost: { + input: 9, + output: 9, + reasoning: 9, + cache_write: 9, + output_audio: 9, + tiers: [{ tier: { type: "context", size: 100_000 }, input: 9, output: 9 }], + }, + }, null); + + expect(built.cost).toMatchObject({ reasoning: 0.4, cache_write: 0.12, output_audio: 2 }); + expect(built.cost?.tiers).toEqual(tiers); +}); + +test("omitted feed cost tiers clear authored tiers", () => { + const built = buildAiandModel(aiandModel(), { + cost: { + input: 9, + output: 9, + tiers: [{ tier: { type: "context", size: 200_000 }, input: 9, output: 9 }], + }, + }, null); + + expect(built.cost?.tiers).toBeUndefined(); +}); + +test("a non-reasoning feed model omits reasoning_options entirely", () => { + const built = buildAiandModel( + aiandModel({ reasoning: false, reasoning_options: undefined }), + undefined, + null, + ); + expect(built.reasoning).toBe(false); + expect(built.reasoning_options).toBeUndefined(); +}); + +test("a new feed id resolves its lab base model despite a different lab prefix", () => { + expect(resolveAiandBaseModel("deepseek-ai/deepseek-v4-flash", "DeepSeek V4 Flash")).toBe( + "deepseek/deepseek-v4-flash", + ); + expect(resolveAiandBaseModel("openai/gpt-oss-120b", "GPT OSS 120B")).toBe("openai/gpt-oss-120b"); + expect(resolveAiandBaseModel("unknown-lab/mystery-9", "Mystery 9")).toBeUndefined(); +}); + +test("translateModel skips a new id with no resolvable base instead of writing a full definition", () => { + const context = { existing: () => undefined, authored: () => undefined }; + const skipped = aiand.translateModel( + aiandModel({ id: "unknown-lab/mystery-9", name: "Mystery 9" }), + context, + ); + expect(skipped).toBeUndefined(); + + const resolved = aiand.translateModel(aiandModel(), context); + expect(resolved?.model).toMatchObject({ base_model: "deepseek/deepseek-v4-flash" }); +}); + +test("a new factored file inherits every lab-owned field instead of asserting the feed's", () => { + const context = { existing: () => undefined, authored: () => undefined }; + const created = aiand.translateModel( + aiandModel({ description: "gateway blurb", release_date: "2099-01-01", open_weights: false }), + context, + ); + expect(created?.model).toMatchObject({ base_model: "deepseek/deepseek-v4-flash" }); + for (const field of ["name", "description", "family", "release_date", "last_updated", "open_weights"]) { + expect(created?.model).not.toHaveProperty(field); + } +}); + +test("a curated description wins over the feed's on a standalone file", () => { + const built = buildAiandModel(aiandModel(), { description: "curated" }, null); + expect(built.description).toBe("curated"); +}); + +test("non-effort controls parse but are never written: ai& has no toggle or budget wire path", () => { + const model = AiandModel.parse({ + ...aiandModel(), + reasoning_options: [{ type: "toggle" }, { type: "budget_tokens", min: 1024, max: 32_768 }, { type: "effort", values: ["high"] }], + }); + expect(buildAiandModel(model, undefined, null).reasoning_options).toEqual([{ type: "effort", values: ["high"] }]); + + // Dropping them can't leave an invented [] behind: with nothing authored the model fails for review. + const toggleOnly = AiandModel.parse({ ...aiandModel(), reasoning_options: [{ type: "toggle" }] }); + expect(() => buildAiandModel(toggleOnly, undefined, null)).toThrow(MissingReasoningOptionsError); + + // A stale authored toggle is not carried forward on update either. + const authoredStale = { reasoning_options: [{ type: "toggle" as const }, { type: "effort" as const, values: ["high" as const] }] }; + expect(buildAiandModel(aiandModel({ reasoning_options: undefined }), authoredStale, null).reasoning_options) + .toEqual([{ type: "effort", values: ["high"] }]); +}); + +test("a new reasoner gets the gateway's reasoning_content side channel; feed and authored values win over it", () => { + const created = buildAiandModel(aiandModel(), undefined, null); + expect(created.interleaved).toEqual({ field: "reasoning_content" }); + const authored = buildAiandModel(aiandModel(), { interleaved: true }, null); + expect(authored.interleaved).toBe(true); + const fromFeed = buildAiandModel( + AiandModel.parse({ ...aiandModel(), interleaved: { field: "reasoning_details" } }), + { interleaved: true }, + null, + ); + expect(fromFeed.interleaved).toEqual({ field: "reasoning_details" }); + const nonReasoner = buildAiandModel( + aiandModel({ reasoning: false, reasoning_options: undefined }), + { interleaved: true }, + null, + ); + expect(nonReasoner.interleaved).toBeUndefined(); +}); + +test("an unresolvable new id enters the missing-model issue flow", () => { + expect(aiand.missingModelID(aiandModel({ id: "unknown-lab/mystery-9" }))).toBe("unknown-lab/mystery-9"); +}); + +test("first factor of a full-inline file inherits the lab entry instead of re-emitting its stale lab fields", () => { + const fullInline = { + name: "Motif 3", + description: "old inline description", + release_date: "2026-08-12", + last_updated: "2026-09-11", + attachment: false, + reasoning: true, + temperature: false, + tool_call: false, + structured_output: false, + open_weights: false, + reasoning_options: [], + interleaved: { field: "reasoning_content" as const }, + cost: { input: 0.5, output: 2 }, + limit: { context: 262_144, output: 262_144 }, + modalities: { input: ["text" as const], output: ["text" as const] }, + }; + const built = buildAiandModel( + aiandModel({ + id: "motif-technologies/motif-3", + name: "Motif-Technologies/Motif-3", + reasoning_options: [{ type: "effort", values: ["none", "high"] }], + structured_output: false, + cost: { input: 0.5, output: 2, cache_read: 0.2 }, + limit: { context: 262_144, output: 262_144 }, + }), + fullInline, + "motif-technologies/motif-3", + ); + expect(built).toMatchObject({ base_model: "motif-technologies/motif-3" }); + for (const field of ["name", "description", "release_date", "last_updated", "open_weights", "family", "temperature", "tool_call"]) { + expect(built).not.toHaveProperty(field); + } + expect(built).toMatchObject({ cost: { cache_read: 0.2 }, interleaved: { field: "reasoning_content" } }); +}); + +test("an already-factored file keeps its authored lab-field deltas and omit list", () => { + const built = buildAiandModel(aiandModel(), { + base_model: "deepseek/deepseek-v4-flash", + base_model_omit: ["limit.input"], + name: "DeepSeek V4 Flash (ai& lane)", + knowledge: "2025-06", + }); + // Deltas that differ from the lab entry survive; identical values would be + // dropped by factoring as redundant, which is the point. + expect(built).toMatchObject({ + base_model: "deepseek/deepseek-v4-flash", + base_model_omit: ["limit.input"], + name: "DeepSeek V4 Flash (ai& lane)", + knowledge: "2025-06", + }); +}); + +test("a created reasoner gets a leading header naming the single effort wire path and no other control", () => { + const context = { existing: () => undefined, authored: () => undefined }; + const created = aiand.translateModel( + AiandModel.parse({ ...aiandModel(), reasoning_options: [{ type: "toggle" }, { type: "effort", values: ["high", "max"] }] }), + context, + ); + expect(created?.header).toContain('# Effort: reasoning_effort = "high" | "max"'); + expect(created?.header).toContain("no separate toggle or token-budget field"); + expect(created?.header).not.toContain("# Toggle:"); + expect(created?.header).not.toContain("# Budget:"); + expect(created?.header?.endsWith("\n")).toBe(true); +}); + +test("runner-level: a full-inline file factored for the first time is written without a lab-identical description", async () => { + const root = await mkdtemp(path.join(tmpdir(), "models-dev-aiand-")); + const modelsDir = path.join(root, "providers", "aiand", "models"); + const labSource = path.join(import.meta.dirname, "..", "..", "..", "models", "motif-technologies", "motif-3.toml"); + const labDest = path.join(root, "models", "motif-technologies", "motif-3.toml"); + await mkdir(path.dirname(labDest), { recursive: true }); + await copyFile(labSource, labDest); + const providerFile = path.join(modelsDir, "motif-technologies", "motif-3.toml"); + await mkdir(path.dirname(providerFile), { recursive: true }); + await Bun.write(providerFile, [ + "# First-party Motif host entry (no shared lab base_model in catalog yet).", + 'name = "Motif 3"', + 'description = "Motif 3 is a large-scale, decoder-only Mixture-of-Experts (MoE) language model with 314 billion total parameters and 13.2 billion parameters activated per token."', + 'release_date = "2026-08-12"', + 'last_updated = "2026-09-11"', + "attachment = false", + "reasoning = true", + "temperature = false", + "tool_call = false", + "structured_output = false", + "open_weights = false", + "", + "[[reasoning_options]]", + 'type = "effort"', + 'values = ["none", "high"]', + "", + "[interleaved]", + 'field = "reasoning_content"', + "", + "[cost]", + "input = 0.5", + "output = 2", + "", + "[limit]", + "context = 262_144", + "output = 262_144", + "", + "[modalities]", + 'input = ["text"]', + 'output = ["text"]', + "", + ].join("\n")); + + const feed = aiandModel({ + id: "motif-technologies/motif-3", + name: "Motif-Technologies/Motif-3", + reasoning_options: [{ type: "effort", values: ["none", "high"] }], + structured_output: false, + cost: { input: 0.5, output: 2, cache_read: 0.2 }, + limit: { context: 262_144, output: 262_144 }, + }); + await syncProvider( + { ...aiand, modelsDir, fetchModels: async () => ({ aiand: { models: { [feed.id]: feed } } }) }, + { openIssues: false }, + ); + + const written = await readFile(providerFile, "utf8"); + expect(written).toContain('base_model = "motif-technologies/motif-3"'); + expect(written).not.toMatch(/^description = /m); + expect(written).not.toMatch(/^open_weights = /m); + expect(written).not.toMatch(/^release_date = /m); + expect(written).toContain("cache_read = 0.2"); + expect(written).toContain('field = "reasoning_content"'); + expect(written.startsWith("# First-party Motif host entry")).toBe(true); +}); + +test("runner-level: a reasoner the feed leaves without controls is reported and its local file is left untouched", async () => { + const root = await mkdtemp(path.join(tmpdir(), "models-dev-aiand-missing-")); + const modelsDir = path.join(root, "providers", "aiand", "models"); + const labDest = path.join(root, "models", "motif-technologies", "motif-3.toml"); + await mkdir(path.dirname(labDest), { recursive: true }); + await copyFile(path.join(import.meta.dirname, "..", "..", "..", "models", "motif-technologies", "motif-3.toml"), labDest); + const providerFile = path.join(modelsDir, "motif-technologies", "motif-3.toml"); + await mkdir(path.dirname(providerFile), { recursive: true }); + const original = ['base_model = "motif-technologies/motif-3"', "", "[cost]", "input = 0.5", "output = 2", ""].join("\n"); + await Bun.write(providerFile, original); + + const feed = aiandModel({ id: "motif-technologies/motif-3", name: "Motif-Technologies/Motif-3", reasoning_options: undefined }); + const result = await syncProvider( + { ...aiand, modelsDir, fetchModels: async () => ({ aiand: { models: { [feed.id]: feed } } }) }, + { openIssues: false }, + ); + + expect(await readFile(providerFile, "utf8")).toBe(original); + expect(result.notices.join(" ")).toContain("motif-technologies/motif-3"); + expect(result.notices.join(" ")).toContain("no authored controls"); +}); + +test("parses the provider entry from the full api.json document", () => { + const parsed = AiandResponse.parse({ + opencode: { models: {} }, + aiand: { models: { "deepseek-ai/deepseek-v4-flash": aiandModel() } }, + }); + expect(Object.keys(parsed.aiand.models)).toEqual(["deepseek-ai/deepseek-v4-flash"]); +}); diff --git a/packages/core/test/auto-merge.test.ts b/packages/core/test/auto-merge.test.ts index aee07e799ff..51eb633de48 100644 --- a/packages/core/test/auto-merge.test.ts +++ b/packages/core/test/auto-merge.test.ts @@ -31,6 +31,18 @@ test("requires manual review for bulk additions", async () => { expect(decision.reasons).toContain("11 models created (limit 10)"); }); +test("requires manual review for Cloudflare AI Gateway deletions", async () => { + const decision = await classifyAutoMerge([ + { + status: "deleted", + path: "providers/cloudflare-ai-gateway/models/openai/gpt-4.1.toml", + }, + ]); + + expect(decision.safe).toBe(false); + expect(decision.reasons).toContain("Cloudflare AI Gateway model deletions require manual review"); +}); + test("requires manual review for added reasoning provider models", async () => { const withoutOptions = await classifyAutoMerge( [{ status: "created", path: "providers/test/models/reasoner.toml" }], @@ -82,7 +94,7 @@ test("does not inspect deleted models", async () => { }); test("allows reviewed providers with explicit reasoning options", async () => { - for (const provider of ["crossmodel", "edenai", "empiriolabs", "hyper", "kilo", "llmgateway", "llmgateway-providers", "merge-gateway", "nano-gpt", "openrouter", "venice"]) { + for (const provider of ["aiand", "crossmodel", "edenai", "empiriolabs", "hyper", "kilo", "llmgateway", "llmgateway-providers", "merge-gateway", "nano-gpt", "openrouter", "venice"]) { const decision = await classifyAutoMerge( [{ status: "updated", path: `providers/${provider}/models/reasoner.toml` }], async () => fullModel(true, 'reasoning_options = [{ type = "toggle" }]'), diff --git a/packages/core/test/cloudflare-ai-gateway.test.ts b/packages/core/test/cloudflare-ai-gateway.test.ts new file mode 100644 index 00000000000..3bfdbc566de --- /dev/null +++ b/packages/core/test/cloudflare-ai-gateway.test.ts @@ -0,0 +1,579 @@ +import { expect, spyOn, test } from "bun:test"; +import { mkdir, mkdtemp, readFile, rm, symlink, writeFile } from "node:fs/promises"; +import path from "node:path"; + +import { syncProvider } from "../src/sync/index.js"; +import * as missingIssues from "../src/sync/missing-issues.js"; +import { + buildCloudflareAiGatewayModel, + cloudflareAiGateway, + deriveReasoningOptions, +} from "../src/sync/providers/cloudflare-ai-gateway.js"; + +test("missing reasoning controls open issues without deleting existing models or blocking valid ones", async () => { + const dir = await mkdtemp(path.join(import.meta.dirname, "../../../providers/.reasoning-sync-")); + const modelsDir = path.join(dir, "models"); + const ids = ["deepreinforce/ornith-1.0-9b", "deepreinforce/ornith-1.0-31b"]; + const file = path.join(modelsDir, `${ids[0]}.toml`); + const content = '# Keep authored controls\nbase_model = "deepreinforce/ornith-1.0-9b"\nreasoning_options = [{ type = "effort", values = ["high"] }]\n'; + await mkdir(path.dirname(file), { recursive: true }); + await writeFile(file, content); + const issues = spyOn(missingIssues, "openMissingModelIssues").mockResolvedValue([]); + const provider = { + ...cloudflareAiGateway, modelsDir, + async fetchModels() { + return [...ids, "openai/gpt-4.1"].map((model_id) => ({ + catalog: { + model_id, + task: "Text Generation", + provider_details: providerDetails({ input_tokens: 1, output_tokens: 2 }), + }, + })); + }, + }; + try { + const result = await syncProvider(provider, { openIssues: true }); + expect(result).toMatchObject({ created: 1, updated: 0, deleted: 0, unchanged: 1 }); + expect(await readFile(file, "utf8")).toBe(content); + expect(await Bun.file(path.join(modelsDir, `${ids[1]}.toml`)).exists()).toBe(false); + expect(issues.mock.calls[0]?.[1]).toEqual(ids); + expect(issues.mock.calls[0]?.[2]?.reasons?.[ids[0]!]).toContain("reasoning_options"); + await expect(syncProvider({ ...provider, async fetchModels() { throw new Error("fetch failed"); } })).rejects.toThrow("fetch failed"); + expect(issues).toHaveBeenCalledTimes(1); + } finally { + issues.mockRestore(); + await rm(dir, { recursive: true, force: true }); + } +}); + +test("builds Cloudflare AI Gateway overrides from catalog metadata", () => { + const model = buildCloudflareAiGatewayModel( + { + model_id: "openai/gpt-5.4", + task: "Text Generation", + context_length: 1_050_000, + provider_details: providerDetails({ + under_200k_per_1m_input_tokens: 2.5, + under_200k_per_1m_output_tokens: 15, + under_200k_per_1m_input_cached_tokens: 0.25, + over_200k_per_1m_input_tokens: 5, + over_200k_per_1m_output_tokens: 22.5, + over_200k_per_1m_input_cached_tokens: 0.5, + }), + }, + undefined, + { + reasoning_options: [{ type: "effort", values: ["none", "low", "medium", "high", "xhigh"] }], + }, + ); + + expect(model).toEqual({ + base_model: "openai/gpt-5.4", + reasoning_options: [{ type: "effort", values: ["none", "low", "medium", "high", "xhigh"] }], + cost: { + input: 2.5, + output: 15, + cache_read: 0.25, + tiers: [{ + tier: { type: "context", size: 200_000 }, + input: 5, + output: 22.5, + cache_read: 0.5, + }], + }, + limit: { context: 1_050_000 }, + provider: { npm: "@ai-sdk/openai" }, + }); +}); + +test("maps structured provider pricing instead of display labels", () => { + const model = buildCloudflareAiGatewayModel( + { + model_id: "openai/gpt-6-astra", + task: "Text Generation", + context_length: 1_050_000, + pricing: { "Display label that may change": 999 }, + provider_details: providerDetails({ + long_context_threshold_tokens: 272_000, + short_context_input_tokens: 10, + short_context_input_cached_tokens: 1, + short_context_input_cache_creation_tokens: 12, + short_context_output_tokens: 50, + long_context_input_tokens: 20, + long_context_input_cached_tokens: 2, + long_context_input_cache_creation_tokens: 25, + long_context_output_tokens: 75, + }), + }, + undefined, + { + reasoning_options: [{ type: "effort", values: ["low", "medium", "high"] }], + }, + ); + + expect(model.cost).toEqual({ + input: 10, + output: 50, + cache_read: 1, + cache_write: 12, + tiers: [{ + tier: { type: "context", size: 272_000 }, + input: 20, + output: 75, + cache_read: 2, + cache_write: 25, + }], + }); +}); + +test("derives nested Cloudflare reasoning controls", () => { + expect(deriveReasoningOptions({ + properties: { + thinking: { type: "boolean" }, + reasoning: { + properties: { + effort: { + anyOf: [{ enum: ["low", "medium", "high"] }], + }, + }, + }, + }, + })).toEqual([ + { type: "toggle" }, + { type: "effort", values: ["low", "medium", "high"] }, + ]); +}); + +test("ignores advertised reasoning controls for non-reasoning base models", () => { + const model = buildCloudflareAiGatewayModel( + { + model_id: "openai/gpt-4.1", + task: "Text Generation", + context_length: 1_047_576, + provider_details: providerDetails({ input_tokens: 2, output_tokens: 8 }), + }, + { + properties: { + reasoning_effort: { enum: ["low", "medium", "high"] }, + }, + }, + ); + + expect(model.reasoning_options).toBeUndefined(); +}); + +test("fails closed on unknown pricing fields", () => { + expect(() => buildCloudflareAiGatewayModel({ + model_id: "openai/gpt-4.1", + task: "Text Generation", + context_length: 1_047_576, + provider_details: providerDetails({ + input_tokens: 2, + output_tokens: 8, + new_billing_unit: 1, + }), + }, undefined)).toThrow("unsupported structured pricing"); +}); + +test("fails closed when Cloudflare pagination is incomplete", async () => { + const originalFetch = globalThis.fetch; + const originalToken = process.env.CLOUDFLARE_API_TOKEN; + const originalAccount = process.env.CLOUDFLARE_ACCOUNT_ID; + process.env.CLOUDFLARE_API_TOKEN = "test"; + process.env.CLOUDFLARE_ACCOUNT_ID = "test"; + let page = 0; + globalThis.fetch = async () => new Response(JSON.stringify(catalogPage( + page++ === 0 + ? [{ + model_id: "openai/gpt-4.1", + task: "Text Generation", + context_length: 1_047_576, + pricing: { + "Input tokens (per 1M)": 2, + "Output tokens (per 1M)": 8, + }, + }] + : [], + { page, total_count: 2 }, + ))); + + try { + await expect(cloudflareAiGateway.fetchModels()).rejects.toThrow("pagination ended at 1/2"); + } finally { + globalThis.fetch = originalFetch; + restoreEnv("CLOUDFLARE_API_TOKEN", originalToken); + restoreEnv("CLOUDFLARE_ACCOUNT_ID", originalAccount); + } +}); + +test("rejects unsafe catalog model paths", async () => { + const originalFetch = globalThis.fetch; + const originalToken = process.env.CLOUDFLARE_API_TOKEN; + const originalAccount = process.env.CLOUDFLARE_ACCOUNT_ID; + process.env.CLOUDFLARE_API_TOKEN = "test"; + process.env.CLOUDFLARE_ACCOUNT_ID = "test"; + globalThis.fetch = async () => new Response(JSON.stringify(catalogPage([{ + model_id: "../providers/openai/models/gpt-4.1", + task: "Text Generation", + context_length: 1_047_576, + pricing: { + "Input tokens (per 1M)": 2, + "Output tokens (per 1M)": 8, + }, + }]))); + + try { + await expect(cloudflareAiGateway.fetchModels()).rejects.toThrow("safe relative provider/model path"); + } finally { + globalThis.fetch = originalFetch; + restoreEnv("CLOUDFLARE_API_TOKEN", originalToken); + restoreEnv("CLOUDFLARE_ACCOUNT_ID", originalAccount); + } +}); + +test("rejects a catalog with no eligible proxied models", async () => { + const originalFetch = globalThis.fetch; + const originalToken = process.env.CLOUDFLARE_API_TOKEN; + const originalAccount = process.env.CLOUDFLARE_ACCOUNT_ID; + process.env.CLOUDFLARE_API_TOKEN = "test"; + process.env.CLOUDFLARE_ACCOUNT_ID = "test"; + globalThis.fetch = async () => new Response(JSON.stringify(catalogPage([{ + model_id: "@cf/meta/llama-3.1-8b-instruct", + task: "Text Generation", + }]))); + + try { + await expect(cloudflareAiGateway.fetchModels()).rejects.toThrow("no eligible proxied models"); + } finally { + globalThis.fetch = originalFetch; + restoreEnv("CLOUDFLARE_API_TOKEN", originalToken); + restoreEnv("CLOUDFLARE_ACCOUNT_ID", originalAccount); + } +}); + +test("syncs Jev through shared TypeSafe metadata without inventing tool support", async () => { + const originalFetch = globalThis.fetch; + const originalToken = process.env.CLOUDFLARE_API_TOKEN; + const originalAccount = process.env.CLOUDFLARE_ACCOUNT_ID; + process.env.CLOUDFLARE_API_TOKEN = "test"; + process.env.CLOUDFLARE_ACCOUNT_ID = "test"; + globalThis.fetch = async (input) => { + if (String(input).endsWith("/schema")) return new Response(null, { status: 404 }); + return new Response(JSON.stringify(catalogPage([ + { + model_id: "typesafe/jev", + task: "Text Generation", + context_length: 32_000, + provider_details: providerDetails({ input_tokens: 0.042, output_tokens: 0 }), + }, + { + model_id: "openai/gpt-4.1", + task: "Text Generation", + context_length: 1_047_576, + provider_details: providerDetails({ input_tokens: 2, output_tokens: 8 }), + }, + ]))); + }; + + try { + const models = await cloudflareAiGateway.fetchModels(); + expect(models.map((model) => model.catalog.model_id)).toEqual(["typesafe/jev", "openai/gpt-4.1"]); + expect(cloudflareAiGateway.translateModel(models[0]!, { + existing: () => undefined, + authored: () => undefined, + }).model).toEqual({ + base_model: "typesafe/jev-latest", + cost: { input: 0.042, output: 0 }, + limit: { context: 32_000 }, + }); + } finally { + globalThis.fetch = originalFetch; + restoreEnv("CLOUDFLARE_API_TOKEN", originalToken); + restoreEnv("CLOUDFLARE_ACCOUNT_ID", originalAccount); + } +}); + +test("syncs Pareto through shared Unbiased metadata", () => { + expect(buildCloudflareAiGatewayModel({ + model_id: "unbiased/pareto", + task: "Text Generation", + context_length: 262_144, + provider_details: providerDetails({ + input_tokens: 2.5, + output_tokens: 7.5, + input_cached_tokens: 0.25, + }), + }, undefined)).toEqual({ + base_model: "unbiased/pareto", + cost: { input: 2.5, output: 7.5, cache_read: 0.25 }, + limit: { context: 262_144 }, + }); +}); + +test("validates Cloudflare page metadata", async () => { + const originalFetch = globalThis.fetch; + const originalToken = process.env.CLOUDFLARE_API_TOKEN; + const originalAccount = process.env.CLOUDFLARE_ACCOUNT_ID; + process.env.CLOUDFLARE_API_TOKEN = "test"; + process.env.CLOUDFLARE_ACCOUNT_ID = "test"; + globalThis.fetch = async () => new Response(JSON.stringify(catalogPage([], { page: 2, total_count: 0 }))); + + try { + await expect(cloudflareAiGateway.fetchModels()).rejects.toThrow("expected page 1, got 2"); + } finally { + globalThis.fetch = originalFetch; + restoreEnv("CLOUDFLARE_API_TOKEN", originalToken); + restoreEnv("CLOUDFLARE_ACCOUNT_ID", originalAccount); + } +}); + +test("retries transient Cloudflare responses", async () => { + const originalFetch = globalThis.fetch; + const originalToken = process.env.CLOUDFLARE_API_TOKEN; + const originalAccount = process.env.CLOUDFLARE_ACCOUNT_ID; + process.env.CLOUDFLARE_API_TOKEN = "test"; + process.env.CLOUDFLARE_ACCOUNT_ID = "test"; + let catalogRequests = 0; + globalThis.fetch = async (input) => { + if (String(input).endsWith("/schema")) return new Response(null, { status: 404 }); + catalogRequests++; + if (catalogRequests === 1) return new Response(null, { status: 503, headers: { "retry-after": "0" } }); + return new Response(JSON.stringify(catalogPage([{ + model_id: "openai/gpt-4.1", + task: "Text Generation", + context_length: 1_047_576, + provider_details: providerDetails({ input_tokens: 2, output_tokens: 8 }), + }]))); + }; + + try { + expect(await cloudflareAiGateway.fetchModels()).toHaveLength(1); + expect(catalogRequests).toBe(2); + } finally { + globalThis.fetch = originalFetch; + restoreEnv("CLOUDFLARE_API_TOKEN", originalToken); + restoreEnv("CLOUDFLARE_ACCOUNT_ID", originalAccount); + } +}); + +test("replaces a stale generated base-model mapping", async () => { + const providersDir = path.join(import.meta.dirname, "..", "..", "..", "providers"); + const providerDir = await mkdtemp(path.join(providersDir, ".base-model-sync-")); + const modelsDir = path.join(providerDir, "models"); + await mkdir(modelsDir); + const file = path.join(modelsDir, "model.toml"); + await writeFile(file, 'base_model = "anthropic/claude-opus-4-6"\n'); + + try { + const provider = { + id: "base-model-test", + name: "Base-model test", + modelsDir, + async fetchModels() { + return [{ id: "model" }]; + }, + parseModels(raw: unknown) { + return raw as Array<{ id: string }>; + }, + translateModel(model: { id: string }) { + return { id: model.id, model: { base_model: "openai/gpt-4.1" } }; + }, + }; + await syncProvider(provider); + expect(await readFile(file, "utf8")).toContain('base_model = "openai/gpt-4.1"'); + } finally { + await rm(providerDir, { recursive: true, force: true }); + } +}); + +test("reconciles authoritative generated headers", async () => { + const providersDir = path.join(import.meta.dirname, "..", "..", "..", "providers"); + const providerDir = await mkdtemp(path.join(providersDir, ".cloudflare-ai-gateway-sync-")); + const modelsDir = path.join(providerDir, "models"); + await mkdir(modelsDir); + const file = path.join(modelsDir, "gpt-4.1.toml"); + await writeFile(file, "# Old note\n\nbase_model = \"openai/gpt-4.1\"\n"); + + try { + const provider = { + id: "cloudflare-ai-gateway-test", + name: "Cloudflare AI Gateway test", + modelsDir, + authoritativeHeaders: true, + async fetchModels() { + return [{ id: "gpt-4.1" }]; + }, + parseModels() { + return [{ id: "gpt-4.1" }]; + }, + translateModel(model) { + return { + id: model.id, + model: { base_model: "openai/gpt-4.1" }, + header: "# New note\n\n", + }; + }, + }; + const result = await syncProvider(provider); + + expect(result.updated).toBe(1); + expect(await readFile(file, "utf8")).toStartWith("# New note\nbase_model"); + expect((await syncProvider(provider)).updated).toBe(0); + } finally { + await rm(providerDir, { recursive: true, force: true }); + } +}); + +test("refuses to write through a symlinked model directory", async () => { + const providersDir = path.join(import.meta.dirname, "..", "..", "..", "providers"); + const providerDir = await mkdtemp(path.join(providersDir, ".sync-symlink-")); + const outsideDir = await mkdtemp(path.join(providersDir, ".sync-outside-")); + const modelsDir = path.join(providerDir, "models"); + await mkdir(modelsDir); + await symlink(outsideDir, path.join(modelsDir, "linked")); + + try { + const provider = { + id: "symlink-test", + name: "Symlink test", + modelsDir, + async fetchModels() { + return [{ id: "linked/model" }]; + }, + parseModels(raw: unknown) { + return raw as Array<{ id: string }>; + }, + translateModel(model: { id: string }) { + return { id: model.id, model: { base_model: "openai/gpt-4.1" } }; + }, + }; + await expect(syncProvider(provider)).rejects.toThrow("Refusing to sync through symlink"); + expect(await Bun.file(path.join(outsideDir, "model.toml")).exists()).toBe(false); + } finally { + await rm(providerDir, { recursive: true, force: true }); + await rm(outsideDir, { recursive: true, force: true }); + } +}); + +test("refuses a symlinked models root", async () => { + const providersDir = path.join(import.meta.dirname, "..", "..", "..", "providers"); + const providerDir = await mkdtemp(path.join(providersDir, ".sync-root-")); + const outsideDir = await mkdtemp(path.join(providersDir, ".sync-root-outside-")); + const modelsDir = path.join(providerDir, "models"); + await symlink(outsideDir, modelsDir); + + try { + const provider = testSyncProvider(modelsDir, "model"); + await expect(syncProvider(provider)).rejects.toThrow("Refusing to sync through symlink"); + expect(await Bun.file(path.join(outsideDir, "model.toml")).exists()).toBe(false); + } finally { + await rm(providerDir, { recursive: true, force: true }); + await rm(outsideDir, { recursive: true, force: true }); + } +}); + +test("refuses a symlinked metadata file", async () => { + const providersDir = path.join(import.meta.dirname, "..", "..", "..", "providers"); + const providerDir = await mkdtemp(path.join(providersDir, ".sync-metadata-")); + const outsideDir = await mkdtemp(path.join(providersDir, ".sync-metadata-outside-")); + const modelsDir = path.join(providerDir, "models"); + const namespace = `sync-symlink-${path.basename(providerDir).replaceAll(/[^a-z0-9-]/g, "")}`; + const metadataDir = path.join(providersDir, "..", "models", namespace); + const outsideFile = path.join(outsideDir, "model.toml"); + await mkdir(modelsDir); + await mkdir(metadataDir); + await writeFile(outsideFile, "sentinel\n"); + await symlink(outsideFile, path.join(metadataDir, "model.toml")); + + try { + const provider = { + ...testSyncProvider(modelsDir, "provider-model"), + metadataNamespace: namespace, + translateModel(model: { id: string }) { + return { + id: model.id, + model: { + name: "Provider symlink test", + description: "Provider model used to test safe sync paths", + release_date: "2026-01-01", + last_updated: "2026-01-01", + attachment: false, + reasoning: false, + tool_call: false, + open_weights: false, + modalities: { input: ["text"], output: ["text"] }, + limit: { context: 1_000, output: 100 }, + cost: { input: 1, output: 2 }, + }, + metadata: { + id: `${namespace}/model`, + model: { + name: "Symlink test", + description: "Metadata used to test safe sync paths", + release_date: "2026-01-01", + last_updated: "2026-01-01", + attachment: false, + reasoning: false, + tool_call: false, + open_weights: false, + modalities: { input: ["text"], output: ["text"] }, + limit: { context: 1_000, output: 100 }, + }, + }, + }; + }, + }; + await expect(syncProvider(provider)).rejects.toThrow("Refusing to sync through symlink"); + expect(await readFile(outsideFile, "utf8")).toBe("sentinel\n"); + } finally { + await rm(providerDir, { recursive: true, force: true }); + await rm(outsideDir, { recursive: true, force: true }); + await rm(metadataDir, { recursive: true, force: true }); + } +}); + +function testSyncProvider(modelsDir: string, id: string) { + return { + id: "symlink-test", + name: "Symlink test", + modelsDir, + async fetchModels() { + return [{ id }]; + }, + parseModels(raw: unknown) { + return raw as Array<{ id: string }>; + }, + translateModel(model: { id: string }) { + return { id: model.id, model: { base_model: "openai/gpt-4.1" } }; + }, + }; +} + +function catalogPage( + result: Array>, + resultInfo: Partial<{ page: number; per_page: number; total_count: number; total_pages: number }> = {}, +) { + const page = resultInfo.page ?? 1; + const perPage = resultInfo.per_page ?? 50; + const totalCount = resultInfo.total_count ?? result.length; + return { + success: true, + result, + result_info: { + page, + per_page: perPage, + count: result.length, + total_count: totalCount, + total_pages: resultInfo.total_pages ?? Math.max(1, Math.ceil(totalCount / perPage)), + }, + }; +} + +function providerDetails(pricing: Record) { + return [{ id: "test-provider", pricing }]; +} + +function restoreEnv(name: string, value: string | undefined) { + if (value === undefined) delete process.env[name]; + else process.env[name] = value; +} diff --git a/packages/core/test/cloudflare-workers-ai-sync.test.ts b/packages/core/test/cloudflare-workers-ai-sync.test.ts index c4adb0d2c2a..5622e4176bc 100644 --- a/packages/core/test/cloudflare-workers-ai-sync.test.ts +++ b/packages/core/test/cloudflare-workers-ai-sync.test.ts @@ -64,17 +64,17 @@ test("reads nested Responses API effort enums without inventing a toggle", () => expect(synced.reasoning_options).toEqual([{ type: "effort", values: ["low", "high"] }]); }); -test("refreshes serialized control comments without losing unrelated notes or resyncing forever", async () => { +test("refreshes serialized control comments without losing authored notes or resyncing forever", async () => { const directory = await mkdtemp("/tmp/opencode/workers-schema-"); const raw = { data: [{ ...model, input_schema: inputSchema }] }; const file = `${directory}/${model.id}.toml`; try { await mkdir(`${directory}/@cf/example`, { recursive: true }); - await Bun.write(file, "# Context limit verified separately.\n# Toggle: thinking.type = enabled|disabled\n# Effort: reasoning_effort = high|max\n" + formatToml({ id: model.id, ...translate(raw) })); + await Bun.write(file, "# Context limit and reasoning behavior verified separately.\n# Toggle: thinking.type = enabled|disabled\n# Effort: reasoning_effort = high|max\n" + formatToml({ id: model.id, ...translate(raw) })); const provider = { ...cloudflareWorkersAi, modelsDir: directory, fetchModels: async () => raw }; expect((await syncProvider(provider)).updated).toBe(1); const written = await Bun.file(file).text(); - expect(written).toContain("# Context limit verified separately."); + expect(written).toContain("# Context limit and reasoning behavior verified separately."); expect(written).toContain("# Toggle: chat_template_kwargs.enable_thinking = true|false"); expect(written).toContain("# Effort: reasoning_effort = low|medium|high"); expect(written).not.toContain("thinking.type"); @@ -93,6 +93,32 @@ test("schema effort none replaces a separate toggle", () => { expect(synced.reasoning_options).toEqual([{ type: "effort", values: ["none", "low", "high"] }]); }); +test("does not emit a separate toggle header when effort includes none", () => { + const [parsed] = cloudflareWorkersAi.parseModels({ data: [{ + ...model, + id: "@cf/google/gemma-4-26b-a4b-it", + input_schema: {}, + reasoning: { mandatory: false, supported_efforts: ["none", "high"] }, + }] }); + const translated = cloudflareWorkersAi.translateModel(parsed!, { + existing: () => undefined, + authored: () => undefined, + }); + + expect(translated.header).toBeUndefined(); + expect(translated.model.reasoning_options).toEqual([{ type: "effort", values: ["none", "high"] }]); +}); + +test("prefers model-specific reasoning metadata over generic schema controls", () => { + const synced = translate({ data: [{ + ...model, + input_schema: inputSchema, + reasoning: { mandatory: false, supported_efforts: ["none", "high"] }, + }] }); + + expect(synced.reasoning_options).toEqual([{ type: "effort", values: ["none", "high"] }]); +}); + test.each([ {}, { properties: { reasoning_effort: { type: "string" }, max_tokens: { type: "integer", maximum: 1000 } } }, diff --git a/packages/core/test/cloudflare-workers-ai.test.ts b/packages/core/test/cloudflare-workers-ai.test.ts new file mode 100644 index 00000000000..e15416cb7ec --- /dev/null +++ b/packages/core/test/cloudflare-workers-ai.test.ts @@ -0,0 +1,56 @@ +import { expect, test } from "bun:test"; + +import { cloudflareWorkersAi } from "../src/sync/providers/cloudflare-workers-ai.js"; + +test("preserves OpenRouter pricing overrides as context tiers", () => { + const [source] = cloudflareWorkersAi.parseModels({ + result: { + data: [{ + id: "workers-ai/@cf/test/context-priced", + name: "Context Priced", + created: 1_782_777_600, + hugging_face_id: null, + knowledge_cutoff: null, + context_length: 256_000, + architecture: { + input_modalities: ["text"], + output_modalities: ["text"], + }, + pricing: { + prompt: "0.000001", + completion: "0.000002", + overrides: [{ + min_prompt_tokens: 128_000, + prompt: "0.000003", + completion: "0.000004", + }], + }, + top_provider: { + context_length: 256_000, + max_completion_tokens: 8_192, + }, + supported_parameters: [], + }], + }, + }); + + expect(source?.pricing.overrides).toEqual([{ + min_prompt_tokens: 128_000, + prompt: "0.000003", + completion: "0.000004", + }]); + + const translated = cloudflareWorkersAi.translateModel(source!, { + existing: () => undefined, + authored: () => undefined, + }); + expect(translated.model.cost).toEqual({ + input: 1, + output: 2, + tiers: [{ + tier: { type: "context", size: 128_000 }, + input: 3, + output: 4, + }], + }); +}); diff --git a/packages/core/test/empiriolabs.test.ts b/packages/core/test/empiriolabs.test.ts index e2c6aefa0b0..2bb17ad4130 100644 --- a/packages/core/test/empiriolabs.test.ts +++ b/packages/core/test/empiriolabs.test.ts @@ -1,6 +1,51 @@ import { expect, test } from "bun:test"; -import { resolveEmpiriolabsBaseModel } from "../src/sync/providers/empiriolabs.js"; +import { buildEmpiriolabsModel, resolveEmpiriolabsBaseModel } from "../src/sync/providers/empiriolabs.js"; + +test.each([ + { + name: "toggle-only", + parameters: [{ name: "enable_thinking" }], + expected: [{ type: "toggle" }], + }, + { + name: "toggle and effort without none", + parameters: [ + { name: "enable_thinking" }, + { name: "reasoning_effort", options: ["low", "high"] }, + ], + expected: [{ type: "toggle" }, { type: "effort", values: ["low", "high"] }], + }, + { + name: "effort with none instead of a redundant toggle", + parameters: [ + { name: "enable_thinking" }, + { name: "reasoning_effort", options: ["none", "low", "high"] }, + ], + expected: [{ type: "effort", values: ["none", "low", "high"] }], + }, + { + name: "effort with none preserves the reasoning budget", + parameters: [ + { name: "enable_thinking" }, + { name: "reasoning_effort", options: ["none", "low", "high"] }, + { name: "thinking_budget", min: 1_024, max: 32_768 }, + ], + expected: [ + { type: "effort", values: ["none", "low", "high"] }, + { type: "budget_tokens", min: 1_024, max: 32_768 }, + ], + }, +])("syncs EmpirioLabs reasoning controls: $name", ({ parameters, expected }) => { + const model = buildEmpiriolabsModel({ + id: "qwen3-5-9b", + context_length: 262_144, + capabilities: { reasoning: true }, + supported_parameters: parameters, + }, undefined); + + expect(model?.reasoning_options).toEqual(expected); +}); test("resolves existing lab metadata without a hardcoded map", () => { expect(resolveEmpiriolabsBaseModel("muse-glimmer-30b")).toBe("meta/muse-glimmer-30b"); diff --git a/packages/core/test/filter.test.ts b/packages/core/test/filter.test.ts new file mode 100644 index 00000000000..ea14f1588fb --- /dev/null +++ b/packages/core/test/filter.test.ts @@ -0,0 +1,103 @@ +import { describe, expect, test } from "bun:test"; + +import { + filterCatalogByModelType, + generateCatalog, + InvalidModelTypeError, + parseModelTypes, +} from "../src/index.js"; +import type { ModelMetadata, Provider } from "../src/index.js"; +import path from "node:path"; + +describe("model type filtering", () => { + test("defaults to untyped models and supports specific types and all", () => { + expect(parseModelTypes(null)).toBe("default"); + expect(parseModelTypes("")).toBe("default"); + expect(parseModelTypes("decision")).toEqual(["decision"]); + expect(parseModelTypes("all")).toBe("all"); + }); + + test("rejects unknown types and combining all with a type", () => { + expect(() => parseModelTypes("unknown")).toThrow(InvalidModelTypeError); + expect(() => parseModelTypes("all,decision")).toThrow( + InvalidModelTypeError, + ); + }); + + test("omits typed models by default", () => { + const catalog = fixture(); + const filtered = filterCatalogByModelType(catalog, "default"); + + expect(Object.keys(filtered.models)).toEqual(["standard"]); + expect(Object.keys(filtered.providers.example!.models)).toEqual([ + "standard", + ]); + expect(filtered.providers.decisionOnly).toBeUndefined(); + }); + + test("filters canonical and provider models by requested type", () => { + const catalog = fixture(); + const filtered = filterCatalogByModelType(catalog, ["decision"]); + + expect(Object.keys(filtered.models)).toEqual(["decision"]); + expect(Object.keys(filtered.providers.example!.models)).toEqual([ + "decision", + ]); + expect(Object.keys(filtered.providers.decisionOnly!.models)).toEqual([ + "decision", + ]); + expect(filterCatalogByModelType(catalog, "all")).toEqual(catalog); + }); + + test("every repository Jev model inherits decision and is omitted by default", async () => { + const root = path.join(import.meta.dir, "..", "..", ".."); + const catalog = await generateCatalog(root); + const jevModels = Object.values(catalog.providers).flatMap((provider) => + Object.values(provider.models).filter((model) => + model.id.toLowerCase().includes("jev"), + ), + ); + + expect(jevModels.length).toBeGreaterThan(0); + expect(jevModels.every((model) => model.type === "decision")).toBe(true); + + const defaults = filterCatalogByModelType(catalog, "default"); + expect( + Object.values(defaults.providers).some((provider) => + Object.values(provider.models).some((model) => model.type !== undefined), + ), + ).toBe(false); + expect(defaults.models["typesafe/jev-latest"]).toBeUndefined(); + expect(defaults.providers.vivgrid?.models.jev).toBeUndefined(); + + const decisions = filterCatalogByModelType(catalog, ["decision"]); + expect(decisions.models["typesafe/jev-latest"]?.type).toBe("decision"); + expect( + Object.values(decisions.providers).flatMap((provider) => + Object.values(provider.models), + ).length, + ).toBe(jevModels.length); + }); +}); + +function fixture() { + const standard = model("standard-model"); + const decision = model("decision-model", "decision"); + return { + models: { standard, decision }, + providers: { + example: { + id: "example", + models: { standard, decision }, + } as unknown as Provider, + decisionOnly: { + id: "decision-only", + models: { decision }, + } as unknown as Provider, + }, + }; +} + +function model(id: string, type?: "decision") { + return { id, type } as unknown as ModelMetadata; +} diff --git a/packages/core/test/fireworks-ai-sync.test.ts b/packages/core/test/fireworks-ai-sync.test.ts new file mode 100644 index 00000000000..57b95a2c9f6 --- /dev/null +++ b/packages/core/test/fireworks-ai-sync.test.ts @@ -0,0 +1,325 @@ +import { expect, test } from "bun:test"; + +import type { ExistingModel } from "../src/sync/index.js"; +import { + buildFireworksModel, + expandFireworksModels, + fetchFireworksInventory, + fetchFireworksModels, + type FireworksInventoryModel, + FireworksResponse, + fireworksAi, + mergeFireworksModels, + type FireworksCatalogModel, + type FireworksModel, +} from "../src/sync/providers/fireworks-ai.js"; + +test("fetches the Fireworks serverless catalog with bearer auth", async () => { + let request: Request | undefined; + const fetcher = (async (input: string | URL | Request, init?: RequestInit) => { + request = input instanceof Request + ? new Request(input, init) + : new Request(input.toString(), init); + return Response.json({ object: "list", data: [fireworksModel()] }); + }) as unknown as typeof fetch; + + await fetchFireworksModels("test-key", fetcher); + + expect(request?.url).toBe("https://api.fireworks.ai/v1/serverless/models"); + expect(request?.headers.get("authorization")).toBe("Bearer test-key"); +}); + +test("parses the Fireworks serverless model list", () => { + const parsed = FireworksResponse.parse({ + object: "list", + data: [fireworksModel()], + }); + + expect(parsed.data[0]).toMatchObject({ + id: "accounts/fireworks/models/example", + serverless_mode: "standard", + context_length: 1_048_576, + input_modalities: ["text", "image"], + }); +}); + +test("fetches Fireworks serverless inventory with the documented filter", async () => { + let request: Request | undefined; + const fetcher = (async (input: string | URL | Request, init?: RequestInit) => { + request = input instanceof Request + ? new Request(input, init) + : new Request(input.toString(), init); + return Response.json({ models: [inventoryModel()] }); + }) as unknown as typeof fetch; + + await fetchFireworksInventory("test-key", fetcher); + + expect(request?.url).toStartWith("https://api.fireworks.ai/v1/accounts/fireworks/models?"); + expect(new URL(request!.url).searchParams.get("filter")).toBe("supports_serverless=true"); + expect(new URL(request!.url).searchParams.get("pageSize")).toBe("200"); + expect(request?.headers.get("authorization")).toBe("Bearer test-key"); +}); + +test("fetches every Fireworks serverless inventory page", async () => { + const requests: Request[] = []; + const fetcher = (async (input: string | URL | Request, init?: RequestInit) => { + const request = input instanceof Request + ? new Request(input, init) + : new Request(input.toString(), init); + requests.push(request); + return Response.json( + request.url.includes("pageToken=next") + ? { models: [inventoryModel({ name: "accounts/fireworks/models/two" })] } + : { + models: [inventoryModel({ name: "accounts/fireworks/models/one" })], + nextPageToken: "next", + }, + ); + }) as unknown as typeof fetch; + + const models = await fetchFireworksInventory("test-key", fetcher); + + expect(models.map((model) => model.name)).toEqual([ + "accounts/fireworks/models/one", + "accounts/fireworks/models/two", + ]); + expect(new URL(requests[1]!.url).searchParams.get("pageToken")).toBe("next"); +}); + +test("unions pricing IDs with generation models from serverless inventory", () => { + const models = mergeFireworksModels( + [fireworksModel()], + [ + inventoryModel({ name: "accounts/fireworks/models/example" }), + inventoryModel({ name: "accounts/fireworks/models/inventory-only" }), + inventoryModel({ name: "accounts/fireworks/models/embedding", kind: "EMBEDDING_MODEL" }), + inventoryModel({ name: "accounts/fireworks/models/on-demand", supportsServerless: false }), + ], + ); + + expect(models.map((model) => model.catalogId)).toEqual([ + "accounts/fireworks/models/example", + "accounts/fireworks/models/inventory-only", + ]); + expect(models[1]).toEqual({ + catalogId: "accounts/fireworks/models/inventory-only", + inventoryOnly: true, + }); +}); + +test("refuses destructive sync when either Fireworks source is empty", () => { + expect(() => mergeFireworksModels([], [inventoryModel()])).toThrow("empty serverless source"); + expect(() => mergeFireworksModels([fireworksModel()], [])).toThrow("empty serverless source"); +}); + +test("preserves inventory-only models while enabling deletion for models absent from both sources", () => { + const authored = { + base_model: "example/example", + cost: { input: 1, output: 2 }, + }; + const translated = fireworksAi.translateModel({ + catalogId: "accounts/fireworks/models/example", + inventoryOnly: true, + }, { + existing: () => existingModel(), + authored: () => authored, + }); + + expect(fireworksAi.deleteMissing).toBe(true); + expect(translated?.model).toEqual(authored); +}); + +test("expands usage identifiers and aliases and attaches flag-only modes", () => { + const models = expandFireworksModels([ + fireworksModel({ aliases: ["accounts/fireworks/routers/example-latest"] }), + fireworksModel({ + serverless_mode: "fast", + usage_identifier: "accounts/fireworks/routers/example-fast", + aliases: ["accounts/fireworks/routers/example-fast-latest"], + }), + fireworksModel({ serverless_mode: "priority", service_tier: "priority" }), + ]); + + expect(models.map((model) => model.catalogId)).toEqual([ + "accounts/fireworks/models/example", + "accounts/fireworks/routers/example-latest", + "accounts/fireworks/routers/example-fast", + "accounts/fireworks/routers/example-fast-latest", + ]); + expect(models[0]?.flagModes).toHaveLength(1); + expect(models[0]?.flagModes[0]).toMatchObject({ + serverless_mode: "priority", + service_tier: "priority", + }); + expect(models[1]?.flagModes).toHaveLength(1); +}); + +test("updates Fireworks pricing and modalities while preserving authored facts", () => { + const model = buildFireworksModel( + catalogModel(), + existingModel(), + ); + + expect(model).toMatchObject({ + attachment: true, + tool_call: true, + cost: { input: 1.4, output: 4.4, cache_read: 0.14 }, + limit: { context: 1_048_573, output: 262_144 }, + modalities: { input: ["text", "image"], output: ["text"] }, + reasoning_options: [{ type: "effort", values: ["low", "high"] }], + experimental: { + modes: { + priority: { + cost: { input: 1.75, output: 5.5, cache_read: 0.175 }, + provider: { body: { service_tier: "priority" } }, + }, + }, + }, + }); +}); + +test("derives cost from Fireworks when the local model has no cost", () => { + const { cost: _, ...existing } = existingModel(); + const model = buildFireworksModel(catalogModel(), existing); + + expect(model.cost).toEqual({ input: 1.4, output: 4.4, cache_read: 0.14 }); +}); + +test("uses the service-tier recipe for a priority-only model", () => { + const priority = fireworksModel({ serverless_mode: "priority", service_tier: "priority" }); + const [model] = expandFireworksModels([priority]); + + expect(buildFireworksModel(model!, existingModel())).toMatchObject({ + provider: { body: { service_tier: "priority" } }, + }); +}); + +test("clears a stale base service tier when the model returns to standard", () => { + const model = buildFireworksModel( + catalogModel({ service_tier: undefined }), + { + ...existingModel(), + provider: { body: { service_tier: "priority" } }, + }, + ); + + expect(model.provider).toBeUndefined(); +}); + +test("removes a stale priority mode when Fireworks no longer lists it", () => { + const model = buildFireworksModel( + catalogModel({ flagModes: [] }), + { + ...existingModel(), + experimental: { + modes: { + priority: { + cost: { input: 2, output: 4 }, + provider: { body: { service_tier: "priority" } }, + }, + }, + }, + }, + ); + + expect(model.experimental).toBeUndefined(); +}); + +test("uses serverless modalities as authoritative", () => { + const model = buildFireworksModel( + catalogModel({ input_modalities: ["text"] }), + { + ...existingModel(), + attachment: true, + modalities: { input: ["text", "image", "video"], output: ["text"] }, + }, + ); + + expect(model.modalities?.input).toEqual(["text"]); + expect(model.attachment).toBe(false); +}); + +test("uses Fireworks context length only as an upper bound", () => { + const model = buildFireworksModel( + catalogModel({ context_length: 131_072 }), + existingModel(), + ); + + expect(model.limit?.context).toBe(131_072); + expect(model.limit?.output).toBe(131_072); +}); + +test("does not report Fireworks embedding rows as missing generation models", () => { + const embedding = catalogModel({ output_modalities: ["embeddings"] }); + + expect(fireworksAi.sourceID(embedding)).toBeUndefined(); + expect(fireworksAi.translateModel(embedding, { + existing: () => existingModel(), + authored: () => existingModel(), + })).toBeUndefined(); +}); + +function fireworksModel(overrides: Partial = {}): FireworksModel { + return { + id: "accounts/fireworks/models/example", + object: "model", + serverless_mode: "standard", + pricing: [ + { sku: "LLM input tokens (cached)", amount: "0.14", unit: "1M tokens" }, + { sku: "LLM input tokens (uncached)", amount: "1.4", unit: "1M tokens" }, + { sku: "LLM output tokens", amount: "4.4", unit: "1M tokens" }, + ], + display_name: "Example", + description: "Example reasoning model", + context_length: 1_048_576, + input_modalities: ["text", "image"], + output_modalities: ["text"], + created: 1_788_566_400, + ...overrides, + }; +} + +function inventoryModel(overrides: Partial = {}): FireworksInventoryModel { + return { + name: "accounts/fireworks/models/example", + kind: "HF_BASE_MODEL", + supportsServerless: true, + ...overrides, + }; +} + +function catalogModel(overrides: Partial = {}): FireworksCatalogModel { + const model = fireworksModel(overrides); + return { + ...model, + catalogId: overrides.catalogId ?? model.usage_identifier ?? model.id, + flagModes: overrides.flagModes ?? [fireworksModel({ + serverless_mode: "priority", + service_tier: "priority", + pricing: [ + { sku: "LLM input tokens (cached)", amount: "0.175", unit: "1M tokens" }, + { sku: "LLM input tokens (uncached)", amount: "1.75", unit: "1M tokens" }, + { sku: "LLM output tokens", amount: "5.5", unit: "1M tokens" }, + ], + })], + }; +} + +function existingModel(): ExistingModel { + return { + name: "Example", + description: "Example reasoning model", + release_date: "2026-09-01", + last_updated: "2026-09-01", + attachment: false, + reasoning: true, + reasoning_options: [{ type: "effort", values: ["low", "high"] }], + temperature: true, + tool_call: true, + structured_output: true, + open_weights: true, + cost: { input: 1, output: 2 }, + limit: { context: 1_048_573, output: 262_144 }, + modalities: { input: ["text"], output: ["text"] }, + }; +} diff --git a/packages/core/test/friendli.test.ts b/packages/core/test/friendli.test.ts new file mode 100644 index 00000000000..7c6afa49a91 --- /dev/null +++ b/packages/core/test/friendli.test.ts @@ -0,0 +1,41 @@ +import { expect, test } from "bun:test"; + +import { friendli, FriendliModel } from "../src/sync/providers/friendli.js"; + +const model = FriendliModel.parse({ + id: "example/model", + name: "Example Model", + created: 1_775_088_000, + context_length: 128_000, + max_completion_tokens: 128_000, + functionality: { + tool_call: true, + structured_output: true, + }, + pricing: { + input: "0.000001", + output: "0.000002", + }, +}); + +test("tracks active Friendli models missing lab metadata", () => { + expect(friendli.missingModelID(model)).toBe(model.id); +}); + +test("rejects an empty Friendli catalog", () => { + expect(() => friendli.parseModels({ data: [] })).toThrow("empty model catalog"); +}); + +test("skips a factored model when its lab metadata cannot be resolved", () => { + expect(friendli.translateModel(model, { + existing: () => ({ base_model: "example/missing" }), + authored: () => ({ base_model: "example/missing" }), + })).toBeUndefined(); +}); + +test("does not track deprecated Friendli models as missing", () => { + expect(friendli.missingModelID({ + ...model, + deprecation_date: "2000-01-01T00:00:00Z", + })).toBeUndefined(); +}); diff --git a/packages/core/test/github-copilot.test.ts b/packages/core/test/github-copilot.test.ts new file mode 100644 index 00000000000..8111238e234 --- /dev/null +++ b/packages/core/test/github-copilot.test.ts @@ -0,0 +1,258 @@ +import { expect, test } from "bun:test"; + +import { + buildGitHubCopilotCost, + githubCopilotModelSlug, + githubCopilot, + parseGitHubCopilotPricing, + type GitHubCopilotPricingRow, +} from "../src/sync/providers/github-copilot.js"; +import type { ExistingModel } from "../src/sync/index.js"; + +function row(overrides: Partial): GitHubCopilotPricingRow { + return { + model: "GPT-5.6 Terra", + provider: "openai", + release_status: "GA", + category: "Versatile", + input: "$2.00", + cached_input: "$0.20", + output: "$12.00", + ...overrides, + }; +} + +test("slugifies display names into catalog filenames", () => { + expect(githubCopilotModelSlug("GPT-5.6 Sol[^gpt-56-sol-promo]")).toBe("gpt-5.6-sol"); + expect(githubCopilotModelSlug("GPT-5 mini")).toBe("gpt-5-mini"); + expect(githubCopilotModelSlug("GPT-5.3-Codex")).toBe("gpt-5.3-codex"); + expect(githubCopilotModelSlug("Claude Opus 4.8 (fast mode) (preview)")).toBe("claude-opus-4.8-fast-mode-preview"); + expect(githubCopilotModelSlug("MAI-Code-1.1-Flash")).toBe("mai-code-1.1-flash"); + expect(githubCopilotModelSlug("Kimi K2.7 Code")).toBe("kimi-k2.7-code"); +}); + +test("groups tier rows under one model", () => { + const models = parseGitHubCopilotPricing([ + row({ threshold: "≤ 272K", tier: "Default" }), + row({ threshold: "> 272K", tier: "Long context", input: "$4.00", cached_input: "$0.40", output: "$18.00" }), + row({ model: "Claude Sonnet 5", provider: "anthropic", input: "$2.00", output: "$10.00", cache_write: "$2.50" }), + ]); + expect(models.map((model) => model.slug)).toEqual(["gpt-5.6-terra", "claude-sonnet-5"]); + expect(models[0]?.rows).toHaveLength(2); +}); + +test("builds flat cost with cache_write and Not applicable handling", () => { + const [model] = parseGitHubCopilotPricing([ + row({ model: "GPT-5.4 mini", input: "$0.75", cached_input: "$0.075", output: "$4.50", cache_write: "Not applicable" }), + ]); + expect(buildGitHubCopilotCost(model!)).toEqual({ + input: 0.75, + output: 4.5, + cache_read: 0.075, + cache_write: undefined, + tiers: undefined, + }); +}); + +test("builds long-context tiers from threshold rows", () => { + const [model] = parseGitHubCopilotPricing([ + row({ threshold: "≤ 272K", tier: "Default", cache_write: "$2.50" }), + row({ threshold: "> 272K", tier: "Long context", input: "$4.00", cached_input: "$0.40", output: "$18.00", cache_write: "$5.00" }), + ]); + expect(buildGitHubCopilotCost(model!)).toEqual({ + input: 2, + output: 12, + cache_read: 0.2, + cache_write: 2.5, + tiers: [{ + tier: { type: "context", size: 272_000 }, + input: 4, + output: 18, + cache_read: 0.4, + cache_write: 5, + }], + }); +}); + +test("rejects malformed tables instead of writing garbage", () => { + const build = (rows: GitHubCopilotPricingRow[]) => { + const models = parseGitHubCopilotPricing(rows); + return models.map((model) => buildGitHubCopilotCost(model)); + }; + // Unknown tier label. + expect(() => build([row({ tier: "Standard" })])).toThrow(/Unknown pricing tier/u); + // Two default rows for one model. + expect(() => build([row({}), row({})])).toThrow(/exactly one default pricing row/u); + // Long-context row without a parseable threshold. + expect(() => build([ + row({ threshold: "≤ 272K", tier: "Default" }), + row({ threshold: "272K+", tier: "Long context" }), + ])).toThrow(/Unparseable long-context threshold/u); + // Price strings are schema-validated before translation. + expect(() => build([row({ input: "$1,000.00" })])).toThrow(); + expect(() => build([row({ input: "Included" })])).toThrow(); +}); + +function translationContext(files: Record) { + return { + existing: (id: string) => files[id], + authored: (id: string) => files[id], + }; +} + +const authoredTerra: ExistingModel = { + base_model: "openai/gpt-5.6-terra", + cost: { input: 1, output: 1, cache_read: 1 }, +}; + +test("updates cost on the authored file and preserves audio rates", () => { + const [model] = parseGitHubCopilotPricing([row({ cache_write: "$2.50" })]); + const translated = githubCopilot.translateModel(model!, translationContext({ + "gpt-5.6-terra": { + ...authoredTerra, + cost: { input: 1, output: 1, reasoning: 3, cache_read: 1, input_audio: 1.5, output_audio: 6 }, + }, + })); + expect(translated?.id).toBe("gpt-5.6-terra"); + expect(translated?.model.cost).toMatchObject({ + input: 2, + output: 12, + reasoning: 3, + cache_read: 0.2, + cache_write: 2.5, + input_audio: 1.5, + output_audio: 6, + }); + expect((translated?.model as ExistingModel).base_model).toBe("openai/gpt-5.6-terra"); +}); + +test("clears authored tiers and cache_write the table no longer lists", () => { + const [model] = parseGitHubCopilotPricing([row({ cache_write: "Not applicable" })]); + const translated = githubCopilot.translateModel(model!, translationContext({ + "gpt-5.6-terra": { + ...authoredTerra, + cost: { + input: 1, + output: 1, + cache_read: 1, + cache_write: 9, + tiers: [{ tier: { type: "context", size: 272_000 }, input: 9, output: 9 }], + }, + }, + })); + const cost = translated?.model.cost; + expect(cost?.input).toBe(2); + // Stale authored values must not survive the spread; the runner strips the + // explicit undefineds before writing. + expect(cost?.cache_write).toBeUndefined(); + expect(cost?.tiers).toBeUndefined(); +}); + +test("resolves preview and alias filenames", () => { + const preview = parseGitHubCopilotPricing([ + row({ model: "Example Model", release_status: "Public preview" }), + ]); + expect(githubCopilot.translateModel(preview[0]!, translationContext({ + "example-model-preview": authoredTerra, + }))?.id).toBe("example-model-preview"); + + const alias = parseGitHubCopilotPricing([row({ model: "MAI-Code-1-Flash", provider: "microsoft" })]); + expect(githubCopilot.translateModel(alias[0]!, translationContext({ + "mai-code-1-flash-picker": authoredTerra, + }))?.id).toBe("mai-code-1-flash-picker"); + + // An exact slug match wins over both fallbacks. + expect(githubCopilot.translateModel(preview[0]!, translationContext({ + "example-model": authoredTerra, + "example-model-preview": authoredTerra, + }))?.id).toBe("example-model"); + expect(githubCopilot.translateModel(alias[0]!, translationContext({ + "mai-code-1-flash": authoredTerra, + "mai-code-1-flash-picker": authoredTerra, + }))?.id).toBe("mai-code-1-flash"); +}); + +test("skips ignored rows silently and unmatched rows with an ID", () => { + const [fastMode] = parseGitHubCopilotPricing([ + row({ model: "Claude Opus 4.8 (fast mode) (preview)", provider: "anthropic" }), + ]); + expect(githubCopilot.translateModel(fastMode!, translationContext({}))).toBeUndefined(); + expect(githubCopilot.sourceID(fastMode!)).toBeUndefined(); + + const [unmatched] = parseGitHubCopilotPricing([row({ model: "Brand New Model" })]); + expect(githubCopilot.translateModel(unmatched!, translationContext({}))).toBeUndefined(); + expect(githubCopilot.sourceID(unmatched!)).toBe("brand-new-model"); +}); + +test.each([ + "Claude Sonnet 4", + "Claude Sonnet 4.5", + "Claude Opus 4.5", + "Claude Opus 4.6", + "Gemini 3.1 Pro", + "GPT-4.1", + "GPT-5.2", + "GPT-5.2-Codex", + "Raptor mini", +])("ignores retired %s for translation and missing-model discovery", (name) => { + const [model] = parseGitHubCopilotPricing([row({ model: name, release_status: "Public preview" })]); + expect(githubCopilot.sourceID(model!)).toBeUndefined(); + expect(githubCopilot.translateModel(model!, translationContext({}))).toBeUndefined(); + expect(githubCopilot.translateModel(model!, translationContext({ + [model!.slug]: authoredTerra, + }))).toBeUndefined(); + expect(githubCopilot.translateModel(model!, translationContext({ + [`${model!.slug}-preview`]: authoredTerra, + }))).toBeUndefined(); +}); + +test("keeps Sonnet 4.6 eligible for annual-plan subscribers", () => { + const [model] = parseGitHubCopilotPricing([row({ model: "Claude Sonnet 4.6", provider: "anthropic" })]); + expect(githubCopilot.sourceID(model!)).toBe("claude-sonnet-4.6"); + expect(githubCopilot.translateModel(model!, translationContext({ + "claude-sonnet-4.6": authoredTerra, + }))?.id).toBe("claude-sonnet-4.6"); +}); + +const pricingYaml = ` +- model: 'GPT-5.6 Sol[^gpt-56-sol-promo]' + provider: openai + release_status: GA + category: Powerful + threshold: '≤ 272K' + tier: Default + input: $2.00 + cached_input: $0.20 + output: $10.00 + cache_write: $2.50 + +- model: 'GPT-5.6 Sol[^gpt-56-sol-promo]' + provider: openai + release_status: GA + category: Powerful + threshold: '> 272K' + tier: 'Long context' + input: $4.00 + cached_input: $0.40 + output: $15.00 + cache_write: $5.00 +`; + +test("parses rows straight from the docs YAML format", () => { + const models = parseGitHubCopilotPricing(Bun.YAML.parse(pricingYaml)); + expect(models).toHaveLength(1); + expect(models[0]?.slug).toBe("gpt-5.6-sol"); + expect(buildGitHubCopilotCost(models[0]!)).toEqual({ + input: 2, + output: 10, + cache_read: 0.2, + cache_write: 2.5, + tiers: [{ + tier: { type: "context", size: 272_000 }, + input: 4, + output: 15, + cache_read: 0.4, + cache_write: 5, + }], + }); +}); diff --git a/packages/core/test/meta.test.ts b/packages/core/test/meta.test.ts new file mode 100644 index 00000000000..dd91aa1345b --- /dev/null +++ b/packages/core/test/meta.test.ts @@ -0,0 +1,197 @@ +import { expect, test } from "bun:test"; +import { mkdtemp, rm } from "node:fs/promises"; +import { tmpdir } from "node:os"; +import path from "node:path"; + +import { groups, providers, syncProvider, type ExistingModel } from "../src/sync/index.js"; +import { fetchMetaModels, meta, parseMetaModels } from "../src/sync/providers/meta.js"; + +// Public docs format; intentionally exclude account-scoped API responses. +const models = ` +## Muse Spark {#muse-spark} + +| Model ID | Tier | Input modalities | Output modalities | Context window | +| :---- | :---- | :---- | :---- | :---- | +| \`muse-spark-1.2\` | [Standard](/docs/pricing-rate-limits#standard-tier) | Text, image, video, audio, PDF | Text | 1,048,576 tokens | +| \`muse-spark-1.2-contributor\` | [Contributor](/docs/pricing-rate-limits#contributor-tier) | Text, image, video, audio, PDF | Text | 1,048,576 tokens | + +## Muse Image + +| Model ID | Family | Input | Output | +| :---- | :---- | :---- | :---- | +| \`muse-image-1.0\` | Muse Image | Text, image | Image | +`; + +const pricing = ` +### Standard tier + +| Usage | Price per 1M tokens | +| :---- | :---- | +| Cached input | $0.15 | +| Input | $1.25 | +| Output | $4.25 | + +### Contributor tier + +| Usage | Price per 1M tokens | +| :---- | :---- | +| Cached input | $0.002 | +| Input | $0.10 | +| Output | $0.20 | + +### Image generation + +Muse Image costs $0.01 per image, not per token. +`; + +const source = { models, pricing }; + +test("Meta sync is registered for direct and hourly runs", () => { + expect(providers.meta).toBe(meta); + expect(groups.direct).toContain("meta"); + expect(meta.skipCreates).toBe(true); + expect(meta.deleteMissing).toBe(false); +}); + +test("parses public text models, tier prices in USD/MTok, and context windows", () => { + expect(parseMetaModels(source)).toEqual([ + { id: "muse-spark-1.2", context: 1_048_576, cost: { input: 1.25, output: 4.25, cache_read: 0.15 } }, + { id: "muse-spark-1.2-contributor", context: 1_048_576, cost: { input: 0.1, output: 0.2, cache_read: 0.002 } }, + ]); + expect(parseMetaModels({ ...source, pricing: pricing.replace("$0.002", "$0") })[1]?.cost.cache_read).toBe(0); + expect(parseMetaModels({ ...source, models: models.replaceAll("1,048,576", "1048576") })[0]?.context).toBe(1_048_576); + expect(parseMetaModels({ + ...source, + pricing: pricing + .replace("### Standard tier", "### Standard tier {#standard-tier}") + .replace("### Contributor tier", "### Contributor tier {#contributor-tier}"), + })).toHaveLength(2); +}); + +test("rejects incomplete or changed docs rather than guessing prices or limits", () => { + for (const bad of [ + { ...source, models: "Unavailable" }, + { ...source, pricing: "" }, + { ...source, models: models.replace("1,048,576 tokens", "Unknown") }, + { ...source, models: models.replace("1,048,576 tokens", "0 tokens") }, + { ...source, models: models.replace("1,048,576 tokens", "1,04,8576 tokens") }, + { ...source, models: models.replace("#standard-tier)", "#unknown-tier)") }, + { ...source, models: models.replace("`muse-spark-1.2`", "`../private`") }, + { ...source, pricing: pricing.replace("$1.25", "€1.25") }, + { ...source, pricing: pricing.replace("$1.25", "$-1") }, + { ...source, pricing: pricing.replace("Price per 1M tokens", "Price per 1K tokens") }, + { ...source, pricing: pricing.replace("| Output | $4.25 |", "") }, + { ...source, pricing: pricing.replace("| Output | $4.25 |", "| Output | $4.25 |\n| Input | $2 |") }, + { ...source, models: models.replace("muse-spark-1.2-contributor", "muse-spark-1.2") }, + { ...source, models: models.replace("| :---- | :---- | :---- | :---- | :---- |", "| broken |") }, + ]) { + expect(() => parseMetaModels(bad)).toThrow(); + } +}); + +test("updates only authoritative fields without expanding inherited metadata", () => { + const authored: ExistingModel = { + base_model: "meta/muse-spark-1.2", + base_model_omit: ["limit.input"], + reasoning_options: [{ type: "effort", values: ["minimal", "low", "medium", "high", "xhigh"] }], + cost: { input: 9, output: 9, cache_read: 9, input_audio: 2, reasoning: 3 }, + status: "beta", + }; + const existing: ExistingModel = { + ...authored, + name: "Muse Spark 1.2", + reasoning: true, + limit: { context: 1_048_576, output: 131_072 }, + modalities: { input: ["text", "image", "pdf", "video"], output: ["text"] }, + }; + const model = parseMetaModels(source)[0]!; + const context = { authored: () => authored, existing: () => existing }; + const translated = meta.translateModel(model, context)!; + expect(translated.model).toEqual({ + ...authored, + limit: undefined, + cost: { input: 1.25, output: 4.25, cache_read: 0.15, input_audio: 2, reasoning: 3 }, + }); + expect(meta.translateModel({ ...model, context: 2_000_000 }, context)?.model.limit).toEqual({ context: 2_000_000 }); + expect(authored.cost?.input).toBe(9); +}); + +test("unknown documented models are reported, never synthesized", () => { + const model = parseMetaModels(source)[0]!; + expect(meta.translateModel(model, { authored: () => undefined, existing: () => undefined })).toBeUndefined(); + expect(meta.sourceID(model)).toBe(model.id); + expect(meta.skippedNotice([model.id]).join(" ")).toContain(model.id); +}); + +test("fetches only public docs without credentials and rejects HTTP failures", async () => { + const urls: string[] = []; + const fetcher = (async (url: string, init?: RequestInit) => { + urls.push(url); + expect(init).toBeUndefined(); + return new Response(url.endsWith("/models.md") ? models : pricing); + }) as typeof fetch; + expect(await fetchMetaModels(fetcher)).toEqual(source); + expect(urls).toEqual(["https://dev.meta.ai/docs/models.md", "https://dev.meta.ai/docs/pricing-rate-limits.md"]); + const failing = (async () => new Response("Unavailable", { status: 503 })) as typeof fetch; + await expect(fetchMetaModels(failing)).rejects.toThrow("Meta docs request failed: 503"); +}); + +test("runner preserves inherited controls, retains absent models, and is idempotent", async () => { + const root = await mkdtemp(path.join(tmpdir(), "models-dev-meta-")); + const modelsDir = path.join(root, "providers", "meta", "models"); + const filename = path.join(modelsDir, "muse-spark-1.2.toml"); + const original = `# Keep this authored source comment. +base_model = "meta/muse-spark-1.2" +base_model_omit = ["limit.input"] +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high", "xhigh"] }] +[cost] +input = 9 +output = 9 +cache_read = 9 +`; + const absent = path.join(modelsDir, "muse-spark-1.1.toml"); + try { + await Bun.write(path.join(root, "models", "meta", "muse-spark-1.2.toml"), ` +name = "Muse Spark 1.2" +description = "Test fixture" +release_date = "2026-01-01" +last_updated = "2026-01-01" +attachment = true +reasoning = true +tool_call = true +open_weights = false +[limit] +context = 1048576 +input = 1048576 +output = 131072 +[modalities] +input = ["text", "image", "pdf", "video"] +output = ["text"] +`); + await Bun.write(filename, original); + await Bun.write(absent, original); + const provider = { ...meta, modelsDir, fetchModels: async () => source }; + const dry = await syncProvider(provider, { dryRun: true, openIssues: false }); + expect(dry.updated).toBe(1); + expect(await Bun.file(filename).text()).toBe(original); + const first = await syncProvider(provider, { openIssues: false }); + expect(first).toMatchObject({ created: 0, updated: 1, deleted: 0, unchanged: 1 }); + expect(first.notices.join(" ")).toContain("muse-spark-1.2-contributor"); + expect(await Bun.file(absent).text()).toBe(original); + const text = await Bun.file(filename).text(); + expect(text).toStartWith("# Keep this authored source comment."); + const result = Bun.TOML.parse(text); + expect(result.base_model).toBe("meta/muse-spark-1.2"); + expect(result.base_model_omit).toEqual(["limit.input"]); + expect(result.reasoning_options).toEqual(Bun.TOML.parse(original).reasoning_options); + expect(result.limit).toBeUndefined(); + expect(result.cost).toEqual({ input: 1.25, output: 4.25, cache_read: 0.15 }); + const second = await syncProvider(provider, { openIssues: false }); + expect(second).toMatchObject({ created: 0, updated: 0, deleted: 0, unchanged: 2 }); + expect(await Bun.file(filename).text()).toBe(text); + await expect(syncProvider({ ...provider, fetchModels: async () => ({ ...source, pricing: "" }) })).rejects.toThrow(); + expect(await Bun.file(filename).text()).toBe(text); + } finally { + await rm(root, { recursive: true, force: true }); + } +}); diff --git a/packages/core/test/missing-skips.test.ts b/packages/core/test/missing-skips.test.ts new file mode 100644 index 00000000000..ddb3351186f --- /dev/null +++ b/packages/core/test/missing-skips.test.ts @@ -0,0 +1,50 @@ +import { expect, spyOn, test } from "bun:test"; +import { mkdir, mkdtemp, rm } from "node:fs/promises"; +import { tmpdir } from "node:os"; +import path from "node:path"; + +import { syncProvider, type SyncProvider } from "../src/sync/index.js"; +import * as missingIssues from "../src/sync/missing-issues.js"; + +test("opens issues for selectively skipped missing models", async () => { + const dir = await mkdtemp(path.join(tmpdir(), "sync-missing-model-")); + const modelsDir = path.join(dir, "providers", "example", "models"); + await mkdir(modelsDir, { recursive: true }); + const existingPath = path.join(modelsDir, "needs-metadata.toml"); + await Bun.write(existingPath, 'name = "Keep me"\n'); + const issues = spyOn(missingIssues, "openMissingModelIssues").mockResolvedValue([]); + const provider: SyncProvider<{ id: string; missing: boolean }> = { + id: "example", + name: "Example", + modelsDir, + async fetchModels() { + return [ + { id: "needs-metadata", missing: true }, + { id: "intentional-skip", missing: false }, + ]; + }, + parseModels(raw) { + return raw as { id: string; missing: boolean }[]; + }, + translateModel() { + return undefined; + }, + sourceID(model) { + return model.id; + }, + missingModelID(model) { + return model.missing ? model.id : undefined; + }, + }; + + try { + const result = await syncProvider(provider, { openIssues: true }); + expect(result).toMatchObject({ deleted: 0, unchanged: 1 }); + expect(await Bun.file(existingPath).text()).toBe('name = "Keep me"\n'); + expect(issues).toHaveBeenCalledTimes(1); + expect(issues.mock.calls[0]?.[1]).toEqual(["needs-metadata"]); + } finally { + issues.mockRestore(); + await rm(dir, { recursive: true, force: true }); + } +}); diff --git a/packages/core/test/ollama-cloud.test.ts b/packages/core/test/ollama-cloud.test.ts new file mode 100644 index 00000000000..46a0a81057b --- /dev/null +++ b/packages/core/test/ollama-cloud.test.ts @@ -0,0 +1,66 @@ +import { expect, test } from "bun:test"; + +import { + fetchOllamaCloudModels, + ollamaCloud, + parseOllamaCloudModels, + type OllamaCloudModel, +} from "../src/sync/providers/ollama-cloud.js"; + +function model(overrides: Partial = {}): OllamaCloudModel { + return { + id: "deepseek-v4-pro:0813", + object: "model", + created: 1_786_633_200, + owned_by: "ollama", + ...overrides, + }; +} + +test("parses the public Ollama Cloud model inventory", () => { + expect(parseOllamaCloudModels({ + object: "list", + data: [model()], + })).toEqual([model()]); +}); + +test("fetches the public Ollama Cloud model endpoint without authentication", async () => { + let request: RequestInfo | URL | undefined; + const fetcher: typeof fetch = async (input) => { + request = input; + return Response.json({ object: "list", data: [model()] }); + }; + + await expect(fetchOllamaCloudModels(fetcher)).resolves.toEqual({ + object: "list", + data: [model()], + }); + expect(String(request)).toBe("https://ollama.com/v1/models"); +}); + +test("tracks remote-only Ollama Cloud models without creating or deleting TOMLs", () => { + expect(ollamaCloud.skipCreates).toBe(true); + expect(ollamaCloud.trackMissingModels).toBe(true); + expect(ollamaCloud.deleteMissing).toBe(false); + expect(ollamaCloud.sourceID(model())).toBe("deepseek-v4-pro:0813"); +}); + +test("preserves existing Ollama Cloud provider overrides", () => { + const authored = { + base_model: "deepseek/deepseek-v4-pro-0813", + reasoning_options: [ + { type: "toggle" as const }, + { type: "effort" as const, values: ["high", "max"] }, + ], + limit: { context: 1_048_576, output: 1_048_576 }, + }; + + expect(ollamaCloud.translateModel(model(), { + existing: () => undefined, + authored: () => authored, + })).toEqual({ id: "deepseek-v4-pro:0813", model: authored }); + expect(ollamaCloud.translateModel(model({ id: "new-model" }), { + existing: () => undefined, + authored: () => undefined, + })).toBeUndefined(); +}); diff --git a/packages/core/test/ovhcloud.test.ts b/packages/core/test/ovhcloud.test.ts new file mode 100644 index 00000000000..f12cc932898 --- /dev/null +++ b/packages/core/test/ovhcloud.test.ts @@ -0,0 +1,55 @@ +import { expect, test } from "bun:test"; + +import { formatToml } from "../src/sync/index.js"; +import { buildOvhcloudModel, type OvhcloudModel } from "../src/sync/providers/ovhcloud.js"; + +function model(pricing?: OvhcloudModel["pricing"]): OvhcloudModel { + return { + id: "example-model", + name: "Example Model", + created: Date.parse("2026-09-02T00:00:00Z") / 1_000, + context_length: 262_144, + pricing, + }; +} + +test.each([ + { label: "absent pricing", pricing: undefined }, + { label: "empty pricing", pricing: {} }, + { label: "blank rates", pricing: { prompt: "", completion: "" } }, + { label: "whitespace rates", pricing: { prompt: " ", completion: "\t" } }, + { label: "explicit zero rates", pricing: { prompt: "0", completion: "0" } }, +])("OVHcloud serializes zero costs for $label", ({ pricing }) => { + const result = buildOvhcloudModel(model(pricing), undefined); + const content = formatToml({ id: "example-model", ...result }); + + expect(Bun.TOML.parse(content).cost).toEqual({ input: 0, output: 0 }); +}); + +test("OVHcloud converts paid and cache rates to per-million costs", () => { + const result = buildOvhcloudModel(model({ + prompt: "0.00000047", + completion: "0.00000319", + input_cache_reads: "0.00000009", + input_cache_writes: "0.00000012", + }), undefined); + + expect(result.cost).toEqual({ input: 0.47, output: 3.19, cache_read: 0.09, cache_write: 0.12 }); +}); + +test.each([ + { pricing: { prompt: "0.00000047" }, expected: { input: 0.47, output: 0 } }, + { pricing: { completion: "0.00000319" }, expected: { input: 0, output: 3.19 } }, +])("OVHcloud preserves a supplied rate when the other is missing: %j", ({ pricing, expected }) => { + const result = buildOvhcloudModel(model(pricing), undefined); + const content = formatToml({ id: "example-model", ...result }); + + expect(Bun.TOML.parse(content).cost).toEqual(expected); +}); + +test("OVHcloud replaces prior costs with zeros when pricing is absent", () => { + const result = buildOvhcloudModel(model(), { cost: { input: 0.47, output: 3.19 } }); + const content = formatToml({ id: "example-model", ...result }); + + expect(Bun.TOML.parse(content).cost).toEqual({ input: 0, output: 0 }); +}); diff --git a/packages/core/test/requesty.test.ts b/packages/core/test/requesty.test.ts new file mode 100644 index 00000000000..52eaec2ccde --- /dev/null +++ b/packages/core/test/requesty.test.ts @@ -0,0 +1,129 @@ +import { expect, test } from "bun:test"; + +import { buildRequestyModel, RequestyModel, resolveRequestyBaseModel } from "../src/sync/providers/requesty.js"; + +test.each([ + ["claude-fable-5.1", "anthropic/claude-fable-5-1"], + ["claude-fable-5.1@eu", "anthropic/claude-fable-5-1"], + ["claude-sonnet-4.6", "anthropic/claude-sonnet-4-6"], + ["claude-sonnet-4", "anthropic/claude-sonnet-4-0"], + ["claude-opus-4-7", "anthropic/claude-opus-4-7"], + ["gemini-3.8-flash@eu", "google/gemini-3.8-flash"], + ["qwen3.8-2.4T-A95B@eu", "alibaba/qwen3.8-2.4t-a95b"], +])("resolves Requesty %s to %s", (id, expected) => { + expect(resolveRequestyBaseModel(id)).toBe(expected); +}); + +test("does not invent a base model for unknown Claude releases", () => { + expect(resolveRequestyBaseModel("claude-fable-999.1@eu")).toBeUndefined(); +}); + +test.each(["claude-fable-5.1", "claude-fable-5.1@eu"])( + "keeps %s override-only", + (id) => { + const model = buildRequestyModel(RequestyModel.parse({ + id, + created: Date.parse("2026-09-01") / 1_000, + description: "Requesty description", + context_window: 1_000_000, + max_output_tokens: 128_000, + supports_vision: true, + supports_reasoning: true, + supports_tool_calling: true, + supports_output_json_schema: true, + input_price: 0.00001, + output_price: 0.00005, + cached_price: 0.00000025, + caching_price: 0.0000125, + })); + + expect(JSON.parse(JSON.stringify(model))).toEqual({ + base_model: "anthropic/claude-fable-5-1", + ...(id.endsWith("@eu") ? { name: "Claude Fable 5.1 (EU)" } : {}), + structured_output: true, + reasoning_options: [ + { type: "effort", values: ["none", "low", "medium", "high", "max"] }, + { type: "budget_tokens" }, + ], + cost: { input: 10, output: 50, cache_read: 0.25, cache_write: 12.5 }, + }); + }, +); + +test("uses the first Requesty pricing band as the base cost", () => { + const model = buildRequestyModel(RequestyModel.parse({ + id: "requesty-priced-model", + created: Date.parse("2026-09-01") / 1_000, + description: "Requesty description", + context_window: 1_000_000, + max_output_tokens: 128_000, + input_price: 0.000001, + output_price: 0.000002, + cached_price: 0.000003, + caching_price: 0.000004, + pricing: [ + { + prompt_tokens_threshold: 0, + input_price: 0.00001, + output_price: 0.00005, + cached_price: 0.00000025, + caching_price: 0.0000125, + }, + { + prompt_tokens_threshold: 200_000, + input_price: 0.00002, + output_price: 0.000075, + cached_price: 0.0000005, + caching_price: 0.000025, + }, + ], + })); + + expect(model.cost).toEqual({ + input: 10, + output: 50, + cache_read: 0.25, + cache_write: 12.5, + tiers: [{ + tier: { type: "context", size: 200_000 }, + input: 20, + output: 75, + cache_read: 0.5, + cache_write: 25, + }], + }); +}); + +test("uses Requesty pricing bands when top-level prices are null", () => { + const model = buildRequestyModel(RequestyModel.parse({ + id: "requesty-priced-model", + created: Date.parse("2026-09-01") / 1_000, + description: "Requesty description", + context_window: 1_000_000, + max_output_tokens: 128_000, + input_price: null, + output_price: null, + pricing: [ + { + prompt_tokens_threshold: 0, + input_price: 0.00001, + output_price: 0.00005, + }, + { + prompt_tokens_threshold: 200_000, + input_price: null, + output_price: null, + }, + ], + })); + + expect(model.cost).toEqual({ + input: 10, + output: 50, + tiers: [{ + tier: { type: "context", size: 200_000 }, + input: 10, + output: 50, + }], + }); +}); diff --git a/packages/core/test/schema.test.ts b/packages/core/test/schema.test.ts index f343c50b615..97a6d602032 100644 --- a/packages/core/test/schema.test.ts +++ b/packages/core/test/schema.test.ts @@ -70,6 +70,12 @@ describe("model schema", () => { expect(AuthoredModel.safeParse(model).success).toBe(false); }); + test("accepts decision model types", () => { + const model = baseModel({ type: "decision" }); + + expect(AuthoredModel.safeParse(model).success).toBe(true); + }); + test("accepts calendar-valid model dates", () => { for (const field of dateFields) { for (const value of [ diff --git a/packages/core/test/sync.test.ts b/packages/core/test/sync.test.ts index 54b77036934..3da3fe65f8f 100644 --- a/packages/core/test/sync.test.ts +++ b/packages/core/test/sync.test.ts @@ -449,6 +449,38 @@ test("syncs CrossModel's structured-output capability", () => { }); }); +test("clears stale CrossModel context tiers only when source pricing is usable", () => { + const existing: ExistingModel = { + base_model: "alibaba/qwen3.8-max", + cost: { + input: 9, + output: 27, + tiers: [ + { + tier: { type: "context", size: 200_000 }, + input: 18, + output: 54, + }, + ], + }, + }; + + const authoritative = buildCrossModel(crossModelModel(), existing); + const absent = buildCrossModel(crossModelModel({ pricing: undefined }), existing); + const unusable = buildCrossModel( + crossModelModel({ + pricing: { + tiers: [{ threshold: 0, input_micro_per_1m: 1_880_000 }], + }, + }), + existing, + ); + + expect(authoritative?.cost).toEqual({ input: 1.88, output: 5.63 }); + expect(absent?.cost).toEqual(existing.cost); + expect(unusable?.cost).toEqual(existing.cost); +}); + test("parses CrossModel's nullable reasoning controls", () => { const parsed = CrossModelResponse.parse({ data: [ @@ -474,7 +506,13 @@ test("parses CrossModel's nullable reasoning controls", () => { }); }); -test("syncs CrossModel's explicit reasoning controls", () => { +test("preserves CrossModel's toggle-only reasoning control", () => { + const model = buildCrossModel(crossModelModel(), undefined); + expect(model?.reasoning_options).toEqual([{ type: "toggle" }]); +}); + +test.each([{ off: false }, { off: true }])("syncs CrossModel's reasoning controls (effort includes none: $off)", ({ off }) => { + const effort = off ? ["none", "low", "high", "max"] as const : ["low", "high", "max"] as const; const model = buildCrossModel( crossModelModel({ capabilities: { @@ -482,7 +520,7 @@ test("syncs CrossModel's explicit reasoning controls", () => { reasoning: { supported: true, toggle: true, - effort: ["low", "high", "max"], + effort: [...effort], budget_tokens: { min: 1_024, max: 32_000 }, }, }, @@ -492,8 +530,8 @@ test("syncs CrossModel's explicit reasoning controls", () => { expect(model).toMatchObject({ reasoning_options: [ - { type: "toggle" }, - { type: "effort", values: ["low", "high", "max"] }, + ...off ? [] : [{ type: "toggle" }], + { type: "effort", values: effort }, { type: "budget_tokens", min: 1_024, max: 32_000 }, ], }); @@ -917,6 +955,36 @@ test("parses current and future Anthropic pricing rows", () => { expect(standard.get("claude sonnet 5")).toMatchObject({ input: 3, output: 15 }); }); +test.each([ + "| Model | Base input tokens | 5m cache writes | 1h cache writes | Cache hits and refreshes | Output tokens |", + "| Model | Base input tokens | 5m cache writes | 1h cache writes | Cache hits & refreshes | Output tokens |", + "| Model | Base Input Tokens | 5m Cache Writes | 1h Cache Writes | Cache Hits and Refreshes | Output Tokens |", +])("parses Anthropic pricing with header %s", (header) => { + const markdown = anthropicPricingMarkdown.replace(/^\| Model \|.*$/m, header); + const pricing = parseAnthropicPricing(markdown, new Date("2026-09-03T00:00:00Z")); + + expect(pricing.size).toBe(5); + expect(pricing.get("claude opus 4.8")).toEqual({ + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + deprecated: false, + }); +}); + +test.each([ + "Model", + "Base Input Tokens", + "5m Cache Writes", + "Cache Hits & Refreshes", + "Output Tokens", +])("rejects Anthropic pricing without the %s column", (column) => { + const markdown = anthropicPricingMarkdown.replace(`| ${column} |`, "| Unknown |"); + + expect(() => parseAnthropicPricing(markdown)).toThrow("Anthropic model pricing table has unexpected columns"); +}); + test("syncs Anthropic capabilities and exact effort levels", () => { const model = buildAnthropicModel(anthropicModel(), { name: "Claude Sonnet 5", @@ -1224,6 +1292,31 @@ test("syncs Tinfoil cached-input pricing from the public model catalog", () => { }); }); +test.each([undefined, "zhipuai/glm-5.2"])("syncs Tinfoil reasoning with base model %s", (base_model) => { + const existing = { ...existingTinfoilGLM, base_model }; + const enabled = buildTinfoilModel(tinfoilModel(), { ...existing, reasoning: false }); + expect(enabled.reasoning_options).toEqual(existing.reasoning_options); + // Factored models inherit true from the lab; standalone models must author it. + expect(enabled.reasoning).toBe(base_model === undefined ? true : undefined); + + const disabled = buildTinfoilModel(tinfoilModel({ reasoning: false }), existing); + expect(disabled.reasoning).toBe(false); + expect(disabled.reasoning_options).toBeUndefined(); +}); + +test("requires authored Tinfoil controls instead of inventing an empty set", () => { + expect(() => buildTinfoilModel(tinfoilModel(), { + ...existingTinfoilGLM, + reasoning_options: undefined, + })).toThrow("requires hand-authored reasoning_options"); + + const model = buildTinfoilModel(tinfoilModel(), { + ...existingTinfoilGLM, + reasoning_options: [], + }); + expect(model.reasoning_options).toEqual([]); +}); + test("removes stale Tinfoil cache pricing when the public catalog omits it", () => { const model = buildTinfoilModel(tinfoilModel({ pricing: { @@ -1799,9 +1892,38 @@ test("resolves DigitalOcean IDs to canonical model metadata", () => { expect(resolveDigitalOceanBaseModel("mimo-v2.5-pro")).toBe("xiaomi/mimo-v2.5-pro"); expect(resolveDigitalOceanBaseModel("anthropic-claude-5-sonnet")).toBe("anthropic/claude-sonnet-5"); expect(resolveDigitalOceanBaseModel("anthropic-claude-opus-5")).toBe("anthropic/claude-opus-5"); + expect(resolveDigitalOceanBaseModel("anthropic-claude-fable-5.1")).toBe("anthropic/claude-fable-5-1"); + expect(resolveDigitalOceanBaseModel("anthropic-claude-5.1-fable")).toBe("anthropic/claude-fable-5-1"); + expect(resolveDigitalOceanBaseModel("anthropic-claude-unknown-99.1")).toBeUndefined(); expect(resolveDigitalOceanBaseModel("openai-gpt-5.6-luna")).toBe("openai/gpt-5.6-luna"); }); +test("new DigitalOcean Fable models emit only base metadata overrides", () => { + const translated = digitalocean.translateModel( + digitalOceanModel({ + id: "anthropic-claude-fable-5.1", + name: "Anthropic Claude Fable 5.1", + reasoning_efforts: ["low", "medium", "high", "xhigh", "max"], + modalities: { input: ["text", "image"], output: ["text"] }, + max_output_tokens: 128_000, + created_at: "2026-09-01T00:00:00Z", + pricing: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, + }), + { existing: () => undefined, authored: () => undefined }, + ); + + expect(translated).toEqual({ + id: "anthropic-claude-fable-5.1", + model: { + base_model: "anthropic/claude-fable-5-1", + name: "Anthropic Claude Fable 5.1", + reasoning_options: [{ type: "effort", values: ["low", "medium", "high", "xhigh", "max"] }], + cost: { input: 10, output: 50, cache_read: 0.25, cache_write: 12.5 }, + modalities: { input: ["text", "image"] }, + }, + }); +}); + test("new DigitalOcean base models inherit intrinsic capabilities", () => { const model = buildDigitalOceanModel( digitalOceanModel({ @@ -2336,7 +2458,7 @@ test("deduplicates Eden AI case-only IDs without losing context metadata", () => for (const data of [[lowercase, uppercase], [uppercase, lowercase]]) { const models = edenai.parseModels({ object: "list", data }); expect(models).toEqual([{ ...lowercase, context_length: 786_432 }]); - expect(edenai.translateModel(models[0]!)).toMatchObject({ + expect(edenai.translateModel(models[0]!, { existing: () => undefined, authored: () => undefined })).toMatchObject({ id: lowercase.id, model: { base_model: "deepseek/deepseek-v4-flash-0731", limit: { context: 786_432 } }, }); @@ -2377,9 +2499,8 @@ test("takes Eden AI reasoning options from the model's own lab entry", () => { ]); }); -test("skips Eden AI models whose reasoning control has no effort equivalent", () => { - // Lab and OpenRouter both expose these through budget_tokens, which Eden AI - // has no request field for. +test("skips new Eden AI models whose reasoning control has no effort equivalent", () => { + // The sync does not yet map this route's budget control to Eden AI's API. expect(reasoningOptionsFor("google/gemini-2.5-pro")).toBeUndefined(); expect( buildEdenAIModel( @@ -2392,6 +2513,102 @@ test("skips Eden AI models whose reasoning control has no effort equivalent", () ).toBeUndefined(); }); +test("Eden AI preserves authored controls when reasoning mapping is unresolved", () => { + const authored: NonNullable[] = [ + [], + [{ type: "toggle" }], + [{ type: "effort", values: ["high"] }], + [{ type: "toggle" }, { type: "budget_tokens" }], + ]; + for (const [id, base] of [ + ["zai/glm-5", "zhipuai/glm-5"], + ["moonshot/kimi-k2.6", "moonshotai/kimi-k2.6"], + ["minimax/MiniMax-M3", "minimax/MiniMax-M3"], + ["deepinfra/nvidia/Nemotron-3-Nano-30B-A3B", "nvidia/nemotron-3-nano-30b-a3b"], + ["google/gemini-2.5-pro", "google/gemini-2.5-pro"], + ] as const) { + const model = edenAIModel({ + id, + owned_by: id.slice(0, id.indexOf("/")), + model_name: id.slice(id.indexOf("/") + 1), + }); + expect(buildEdenAIModel(model)).toBeUndefined(); + for (const reasoning_options of authored) { + expect(buildEdenAIModel(model, { base_model: base, reasoning_options })).toMatchObject({ + base_model: base, + reasoning_options, + }); + } + } +}); + +test("Eden AI sync keeps listed models with unresolved reasoning controls", async () => { + const root = await mkdtemp(path.join(tmpdir(), "sync-edenai-")); + const modelsDir = path.join(root, "providers", "edenai", "models"); + const repo = path.join(import.meta.dirname, "..", "..", ".."); + const files = [ + ["openai/gpt-4o-mini", "openai/gpt-4o-mini"], + ["zai/glm-5", "zhipuai/glm-5"], + ["retired/model", "openai/gpt-4o-mini"], + ] as const; + + try { + for (const [id, base] of files) { + const destination = path.join(modelsDir, `${id}.toml`); + const metadata = path.join(root, "models", `${base}.toml`); + await mkdir(path.dirname(destination), { recursive: true }); + await mkdir(path.dirname(metadata), { recursive: true }); + await copyFile(path.join(repo, "models", `${base}.toml`), metadata); + await copyFile( + path.join(repo, "providers", "edenai", "models", `${id === "retired/model" ? "openai/gpt-4o-mini" : id}.toml`), + destination, + ); + } + const glmPath = path.join(modelsDir, "zai/glm-5.toml"); + const authored = (await readFile(glmPath, "utf8")).replace( + "reasoning_options = []", + 'reasoning_options = [{ type = "toggle" }]', + ); + const header = "# Toggle: extra_body.thinking.type = enabled|disabled\n"; + await Bun.write(glmPath, header + authored); + const supported = edenAIModel({ + id: "openai/gpt-4o-mini", + model_name: "gpt-4o-mini", + owned_by: "openai", + list_pricing: { input_cost_per_token: 0.000123, output_cost_per_token: 0.000456 }, + }); + const unresolved = edenAIModel({ id: "zai/glm-5", model_name: "glm-5", owned_by: "zai" }); + const provider = { + ...edenai, + modelsDir, + async fetchModels() { + return { object: "list", data: [ + supported, + { ...supported, id: "openai/gpt-4o-mini@us" }, + unresolved, + { ...unresolved, id: "zai/glm-5@us" }, + ] }; + }, + }; + + const result = await syncProvider(provider); + expect(result).toMatchObject({ created: 1, deleted: 1 }); + expect(result.files.filter((file) => file.status === "deleted").map((file) => file.path)).toEqual([ + path.join(modelsDir, "retired/model.toml"), + ]); + const content = await readFile(glmPath, "utf8"); + expect(content).toStartWith(header); + expect(Bun.TOML.parse(content)).toMatchObject({ + base_model: "zhipuai/glm-5", + reasoning_options: [{ type: "toggle" }], + }); + expect(await Bun.file(path.join(modelsDir, "zai/glm-5@us.toml")).exists()).toBe(false); + expect(await Bun.file(path.join(modelsDir, "openai/gpt-4o-mini@us.toml")).exists()).toBe(true); + } finally { + await rm(root, { recursive: true, force: true }); + } +}); + test("omits Eden AI reasoning options for non-reasoning models", () => { const model = edenAIModel({ id: "openai/gpt-4o-mini", @@ -2428,7 +2645,112 @@ test("names Eden AI regional deployments after the canonical model", () => { ), ).toMatchObject({ base_model: "anthropic/claude-opus-5", - name: "Claude Opus 5 (EU)", + name: "Claude Opus 5 (Amazon Bedrock, EU)", + }); +}); + +test("names Eden AI latest aliases as Latest plus the current target", () => { + expect( + buildEdenAIModel( + edenAIModel({ + id: "anthropic/claude-fable-latest", + model_name: "claude-fable-5-1", + owned_by: "anthropic", + alias_of: "anthropic/claude-fable-5-1", + }), + ), + ).toMatchObject({ + base_model: "anthropic/claude-fable-5-1", + name: "Claude Fable Latest (Claude Fable 5.1)", + }); + expect( + buildEdenAIModel( + edenAIModel({ + id: "openai/gpt-latest", + model_name: "gpt-6-astra", + owned_by: "openai", + alias_of: "openai/gpt-6-astra", + }), + ), + ).toMatchObject({ + base_model: "openai/gpt-6-astra", + name: "GPT Latest (GPT-6 Astra)", + }); + expect( + buildEdenAIModel( + edenAIModel({ + id: "vertex/gemini-flash-latest@us", + model_name: "gemini-3.8-flash", + owned_by: "vertex", + alias_of: "vertex/gemini-3.8-flash", + }), + ), + ).toMatchObject({ + base_model: "google/gemini-3.8-flash", + name: "Gemini Flash Latest (Gemini 3.8 Flash, Vertex AI, US)", + }); +}); + +test("names Eden AI non-primary hosts distinctly from the lab route", () => { + expect( + buildEdenAIModel( + edenAIModel({ + id: "google/gemini-3.8-flash", + model_name: "gemini-3.8-flash", + owned_by: "google", + }), + ), + ).not.toHaveProperty("name"); + expect( + buildEdenAIModel( + edenAIModel({ + id: "vertex/gemini-3.8-flash", + model_name: "gemini-3.8-flash", + owned_by: "vertex", + }), + ), + ).toMatchObject({ + base_model: "google/gemini-3.8-flash", + name: "Gemini 3.8 Flash (Vertex AI)", + }); + expect( + buildEdenAIModel( + edenAIModel({ + id: "vertex/gemini-3.8-flash@us", + model_name: "gemini-3.8-flash", + owned_by: "vertex", + }), + ), + ).toMatchObject({ + base_model: "google/gemini-3.8-flash", + name: "Gemini 3.8 Flash (Vertex AI, US)", + }); + expect( + buildEdenAIModel( + edenAIModel({ + id: "deepinfra/openai/gpt-oss-120b", + model_name: "openai/gpt-oss-120b", + owned_by: "deepinfra", + }), + ), + ).toMatchObject({ + base_model: "openai/gpt-oss-120b", + name: "GPT OSS 120B (Deep Infra)", + }); +}); + +test("does not treat Eden AI case-only aliases as latest pointers", () => { + const built = buildEdenAIModel( + edenAIModel({ + id: "flexai/deepseek-v4-flash-0731", + model_name: "DeepSeek-V4-Flash-0731", + owned_by: "flexai", + alias_of: "flexai/DeepSeek-V4-Flash-0731", + }), + ); + expect(built).toMatchObject({ + base_model: "deepseek/deepseek-v4-flash-0731", + name: "DeepSeek V4 Flash 0731 (FlexAI)", }); }); @@ -2473,8 +2795,8 @@ test("keeps only the first-party Eden AI route when the lab's own API is relayed const firstParty = collectFirstPartyBaseModels([bedrock, direct]); expect(firstParty).toEqual(new Set(["anthropic/claude-opus-5"])); - expect(buildEdenAIModel(bedrock, firstParty)).toBeUndefined(); - expect(buildEdenAIModel(direct, firstParty)).toMatchObject({ + expect(buildEdenAIModel(bedrock, undefined, firstParty)).toBeUndefined(); + expect(buildEdenAIModel(direct, undefined, firstParty)).toMatchObject({ base_model: "anthropic/claude-opus-5", }); }); @@ -2490,9 +2812,15 @@ test("keeps every Eden AI route for models with no first-party relay", () => { const firstParty = collectFirstPartyBaseModels(models); expect(firstParty.size).toBe(0); + const names = { + deepinfra: "GPT OSS 120B (Deep Infra)", + groq: "GPT OSS 120B (Groq)", + cerebras: "GPT OSS 120B (Cerebras)", + }; for (const model of models) { - expect(buildEdenAIModel(model, firstParty)).toMatchObject({ + expect(buildEdenAIModel(model, undefined, firstParty)).toMatchObject({ base_model: "openai/gpt-oss-120b", + name: names[model.owned_by as keyof typeof names], }); } }); @@ -2510,6 +2838,28 @@ test("resolves Eden AI aliases to the model they point at", () => { ).toBe("anthropic/claude-opus-5"); }); +test("preserves model type when formatting synced TOML", () => { + const content = formatToml({ + id: "typesafe/jev-latest", + type: "decision", + name: "Jev", + description: "System One model for typed decisions", + release_date: "2026-09-15", + last_updated: "2026-09-15", + attachment: false, + reasoning: false, + tool_call: false, + open_weights: false, + limit: { context: 64_000, output: 0 }, + modalities: { input: ["text"], output: ["text"] }, + }); + + expect(Bun.TOML.parse(content)).toMatchObject({ + type: "decision", + name: "Jev", + }); +}); + test("formats interleaved as a root field before reasoning option tables", () => { const content = formatToml({ id: "example/model", @@ -2790,6 +3140,45 @@ test("syncs OpenRouter reasoning efforts from model metadata", () => { }); }); +test("syncs OpenRouter toggles without an effort selector", () => { + for (const supports_max_tokens of [undefined, true]) { + const source = openRouterModel({ + reasoning: { mandatory: false, supports_max_tokens }, + }); + const translated = openrouter.translateModel(source, { + existing: () => undefined, + authored: () => undefined, + }); + expect(translated?.model.reasoning_options).toEqual([ + { type: "toggle" }, + ...(supports_max_tokens ? [{ type: "budget_tokens" }] : []), + ]); + expect(translated?.header).toStartWith("# Toggle: reasoning.enabled = true|false\n"); + } +}); + +test("does not derive OpenRouter controls for non-reasoning models", () => { + const model = buildOpenRouterModel(openRouterModel({ + supported_parameters: ["temperature"], + reasoning: { mandatory: false, supports_max_tokens: true }, + }), { reasoning_options: [{ type: "toggle" }] }); + expect(model.reasoning).toBe(false); + expect(model.reasoning_options).toBeUndefined(); +}); + +test("does not add OpenRouter toggles to mandatory or effort-none models", () => { + for (const reasoning of [ + { mandatory: true, supports_max_tokens: true }, + { mandatory: true, supported_efforts: ["none", "high"] as const }, + { mandatory: false, supported_efforts: ["none", "high"] as const }, + { mandatory: false, supported_efforts: null }, + ]) { + const [source] = openrouter.parseModels({ data: [{ ...openRouterModel(), reasoning }] }); + const model = buildOpenRouterModel(source!, undefined); + expect(model.reasoning_options?.some((option) => option.type === "toggle")).toBe(false); + } +}); + test("uses OpenRouter model context when top provider reports a shorter context", () => { const model = buildOpenRouterModel(openRouterModel({ context_length: 1_048_576, @@ -2840,6 +3229,18 @@ test("factors OpenRouter Pro routes against canonical OpenAI metadata", () => { expect("release_date" in model).toBe(false); }); +test("resolves dotted Claude versions without a family allowlist", () => { + expect(resolveCanonicalBaseModel("anthropic/claude-fable-5.1")).toBe("anthropic/claude-fable-5-1"); + expect(resolveCanonicalBaseModel("anthropic/claude-fable-5.1-fast")).toBe("anthropic/claude-fable-5-1"); + expect(resolveCanonicalBaseModel("anthropic/claude-opus-4.6")).toBe("anthropic/claude-opus-4-6"); + expect(resolveCanonicalBaseModel("anthropic/claude-3.5-sonnet-20241022")).toBe("anthropic/claude-3-5-sonnet-20241022"); + expect(resolveCanonicalBaseModel("anthropic/claude-unknown-99.1")).toBeUndefined(); +}); + +test("resolves SpaceXAI provider IDs to canonical xAI metadata", () => { + expect(resolveCanonicalBaseModel("spacexai/grok-4.5")).toBe("xai/grok-4.5"); +}); + // Ensures Merge Gateway namespaces reuse the matching canonical model metadata. test("resolves Merge Gateway provider aliases to canonical metadata", () => { expect([ @@ -3400,6 +3801,56 @@ test("strips image input when the deployment has no vision", () => { }); }); +test("keeps the last LLM Gateway entry for case-insensitive duplicate IDs", () => { + const first = llmGatewayModel({ id: "qwen3.8-27b", family: "alibaba" }); + const other = llmGatewayModel(); + for (const id of [first.id, "Qwen3.8-27B"]) { + const last = llmGatewayModel({ + id, + family: "consensusprotocol", + context_length: 32_768, + pricing: { prompt: "0.41e-6", completion: "2.5e-6" }, + }); + expect(llmgateway.parseModels({ data: [first, other, last] })).toEqual([last, other]); + expect(llmgateway.parseModels({ data: [last, other, first] })).toEqual([first, other]); + } + const nonText = llmGatewayModel({ + id: first.id, + architecture: { input_modalities: ["text"], output_modalities: ["image"] }, + }); + expect(llmgateway.parseModels({ data: [first, nonText] })).toEqual([first]); +}); + +test("syncs the last LLM Gateway case variant without mixing source records", async () => { + const root = await mkdtemp(path.join(tmpdir(), "models-dev-llmgateway-case-")); + const modelsDir = path.join(root, "providers", "llmgateway", "models"); + await mkdir(modelsDir, { recursive: true }); + const first = llmGatewayModel({ id: "qwen3.8-27b", family: undefined }); + const last = llmGatewayModel({ + id: "Qwen3.8-27B", + family: undefined, + context_length: 32_768, + pricing: { prompt: "0.41e-6", completion: "2.5e-6" }, + }); + const provider = { ...llmgateway, modelsDir, fetchModels: async () => ({ data: [first, last] }) }; + + try { + await syncProvider({ ...provider, fetchModels: async () => ({ data: [first] }) }); + const result = await syncProvider(provider); + expect(result).toMatchObject({ created: 1, updated: 0, deleted: 1 }); + expect(await Bun.file(path.join(modelsDir, `${first.id}.toml`)).exists()).toBe(false); + const written = Bun.TOML.parse(await readFile(path.join(modelsDir, `${last.id}.toml`), "utf8")); + expect(written).toMatchObject({ + cost: { input: 0.41, output: 2.5 }, + limit: { context: 32_768 }, + }); + expect(written.cost).not.toHaveProperty("cache_write"); + expect(await syncProvider(provider)).toMatchObject({ created: 0, updated: 0, deleted: 0, unchanged: 1 }); + } finally { + await rm(root, { recursive: true, force: true }); + } +}); + test("refuses empty responses in both LLM Gateway syncs", () => { expect(() => llmgateway.parseModels({ data: [] })).toThrow("no text models"); expect(() => llmgatewayProviders.parseModels({ data: [] })).toThrow("mapped view unavailable"); @@ -3678,6 +4129,56 @@ test("derives a Merge Gateway reasoning toggle when the selected route supports expect(model).toMatchObject({ reasoning_options: [{ type: "toggle" }] }); }); +test("syncs Merge Gateway explicitly advertised thinking budgets", () => { + const selected = mergeGatewayVendor(); + selected.capabilities.supports_reasoning = true; + selected.capabilities.reasoning = { + configurable: true, + disable_supported: true, + default_enabled: false, + controls: ["thinking.budget_tokens"], + output_style: "reasoning_content", + }; + const source = mergeGatewayModel({ vendors: { openai: selected } }); + const translated = mergeGateway.translateModel(source, { + existing: () => ({ reasoning: true, reasoning_options: [] }), + authored: () => undefined, + }); + expect(translated?.model.reasoning_options).toEqual([ + { type: "toggle" }, + { type: "budget_tokens" }, + ]); + expect(translated?.header).toStartWith('# Toggle: thinking.type = "enabled"|"disabled"'); + + selected.capabilities.reasoning.disable_supported = false; + expect(buildMergeGatewayModel(source, { reasoning: true })?.reasoning_options).toEqual([ + { type: "budget_tokens" }, + ]); +}); + +test("does not infer Merge Gateway budgets from other controls or output limits", () => { + for (const controls of [undefined, [], ["thinking"], ["max_tokens"], ["reasoning.effort"]]) { + const selected = mergeGatewayVendor(); + selected.capabilities.reasoning = { configurable: true, controls }; + const model = buildMergeGatewayModel(mergeGatewayModel({ vendors: { openai: selected } }), { + reasoning: true, + reasoning_options: [], + }); + expect(model?.reasoning_options).toEqual([]); + } +}); + +test("preserves curated Merge Gateway controls when a budget is advertised", () => { + const selected = mergeGatewayVendor(); + selected.capabilities.reasoning = { controls: ["thinking.budget_tokens"] }; + const reasoning_options = [{ type: "effort" as const, values: ["high"] }]; + const model = buildMergeGatewayModel(mergeGatewayModel({ vendors: { openai: selected } }), { + reasoning: true, + reasoning_options, + }); + expect(model?.reasoning_options).toEqual(reasoning_options); +}); + // Effort control yields toggle + effort, not a bare toggle (claude-opus-5 regression). test("derives Merge Gateway toggle + effort from an effort control", () => { const selected = mergeGatewayVendor({ @@ -3954,7 +4455,7 @@ test("retains Merge Gateway models missing from an API-key-scoped response", () expect(mergeGateway.deleteMissing).toBe(false); }); -test("parses Vercel pricing tiers with an implicit zero minimum", () => { +test("translates Vercel pricing tiers with an implicit zero minimum", () => { const [model] = vercel.parseModels({ data: [{ id: "openai/gpt-5.6-luna", @@ -3971,14 +4472,36 @@ test("parses Vercel pricing tiers with an implicit zero minimum", () => { { cost: "0.0000001", max: 272_000 }, { cost: "0.0000002", min: 272_000 }, ], + input_tiers: [ + { cost: "0.000001", max: 272_000 }, + { cost: "0.000002", min: 272_000 }, + ], + output_tiers: [ + { cost: "0.000006", max: 272_000 }, + { cost: "0.000009", min: 272_000 }, + ], }, }], }); expect(model).toBeDefined(); - expect(buildVercelModel(model!, undefined)).toMatchObject({ - cost: { input: 1, output: 6, cache_read: 0.1 }, + const synced = buildVercelModel(model!, undefined); + expect(synced).toMatchObject({ + cost: { + input: 1, + output: 6, + cache_read: 0.1, + tiers: [{ + tier: { type: "context", size: 272_000 }, + input: 2, + output: 9, + cache_read: 0.2, + }], + }, }); + expect(vercel.sameModel?.({ + cost: { input: 1, output: 6, cache_read: 0.1 }, + }, synced)).toBe(false); }); test("Vercel factored models inherit temperature from base metadata", () => { @@ -4093,6 +4616,149 @@ test("Vercel Claude Opus fast variants factor onto base opus metadata", () => { expect(synced).not.toHaveProperty("family"); }); +test("Vercel sync accepts evaluation and unknown future model types", () => { + const [evaluation, future] = vercel.parseModels({ + data: [ + { + id: "typesafe-ai/jev", + name: "Jev", + created: 1_755_815_280, + released: 1_789_430_400, + context_window: 0, + max_tokens: 0, + type: "evaluation", + pricing: { input: "0.000000042", output: "0" }, + }, + { + id: "example/future-model", + name: "Future Model", + created: 1_755_815_280, + context_window: 8_000, + max_tokens: 4_000, + type: "something-new", + }, + ], + }); + + expect(evaluation).toBeDefined(); + expect(future).toBeDefined(); + expect(buildVercelModel(evaluation!, undefined)).toMatchObject({ + cost: { input: 0.042, output: 0 }, + limit: { context: 0, output: 0 }, + modalities: { input: ["text"], output: ["text"] }, + }); + expect(buildVercelModel(future!, undefined)).toMatchObject({ + limit: { context: 8_000, output: 4_000 }, + modalities: { input: ["text"], output: ["text"] }, + }); +}); + +test("Vercel family inference requires word boundaries", () => { + const [jev, rerank, o3] = vercel.parseModels({ + data: [ + { + id: "typesafe-ai/jev", + name: "Jev", + created: 1_755_815_280, + context_window: 0, + max_tokens: 0, + type: "evaluation", + }, + { + id: "cohere/rerank-v3.5", + name: "Cohere Rerank 3.5", + created: 1_733_000_000, + context_window: 4_096, + max_tokens: 4_096, + type: "reranking", + }, + { + id: "example/o3", + name: "o3", + created: 1_745_000_000, + context_window: 200_000, + max_tokens: 100_000, + type: "language", + }, + ], + }); + + // No fuzzy subsequence matches ("yi") or single-letter substring matches ("o"). + expect(buildVercelModel(jev!, undefined).family).toBeUndefined(); + expect(buildVercelModel(rerank!, undefined).family).toBeUndefined(); + // Genuine o-series IDs still match, and keep their stamp when re-synced. + expect(buildVercelModel(o3!, undefined).family).toBe("o"); + expect(buildVercelModel(o3!, { family: "o" }).family).toBe("o"); + // Existing bogus "o" stamps self-heal on the next sync. + expect(buildVercelModel(rerank!, { family: "o" }).family).toBeUndefined(); +}); + +test("Vercel empty existing reasoning_options falls back to the route base menu", () => { + const [model] = vercel.parseModels({ + data: [{ + id: "minimax/minimax-m2.7-free", + name: "MiniMax M2.7 (Free)", + created: 1_784_160_000, + context_window: 200_000, + max_tokens: 128_000, + type: "language", + tags: ["reasoning", "tool-use"], + pricing: { input: "0", output: "0" }, + }], + }); + + const translated = vercel.translateModel(model!, { + existing(id) { + if (id === "minimax/minimax-m2.7-free") return { reasoning_options: [] }; + if (id === "minimax/minimax-m2.7") { + return { reasoning_options: [{ type: "effort", values: ["low", "high"] }] }; + } + return undefined; + }, + authored() { + return undefined; + }, + }); + + expect(translated?.model).toMatchObject({ + reasoning_options: [{ type: "effort", values: ["low", "high"] }], + }); +}); + +test("Vercel preserves a non-empty existing reasoning_options over the base menu", () => { + const [model] = vercel.parseModels({ + data: [{ + id: "minimax/minimax-m2.7-free", + name: "MiniMax M2.7 (Free)", + created: 1_784_160_000, + context_window: 200_000, + max_tokens: 128_000, + type: "language", + tags: ["reasoning", "tool-use"], + pricing: { input: "0", output: "0" }, + }], + }); + + const translated = vercel.translateModel(model!, { + existing(id) { + if (id === "minimax/minimax-m2.7-free") { + return { reasoning_options: [{ type: "toggle" }] }; + } + if (id === "minimax/minimax-m2.7") { + return { reasoning_options: [{ type: "effort", values: ["low", "high"] }] }; + } + return undefined; + }, + authored() { + return undefined; + }, + }); + + expect(translated?.model).toMatchObject({ + reasoning_options: [{ type: "toggle" }], + }); +}); + test("OpenRouter Claude Opus fast variants factor onto base opus metadata", () => { const model = buildOpenRouterModel(openRouterModel({ id: "anthropic/claude-opus-5-fast", @@ -4268,7 +4934,6 @@ test("syncs EmpirioLabs pricing tiers and reasoning controls", () => { base_model: "minimax/MiniMax-M3", structured_output: true, reasoning_options: [ - { type: "toggle" }, { type: "effort", values: ["none", "low", "medium", "high", "max"] }, { type: "budget_tokens", min: 1_024, max: 32_768 }, ], @@ -4447,3 +5112,58 @@ function openRouterModel(overrides: Partial = {}): OpenRouterMo ...overrides, }; } + +function caseFoldProvider(modelsDir: string, ids: string[]): SyncProvider { + return { + id: "case-fold-test", + name: "Case fold test", + modelsDir, + async fetchModels() { + return ids; + }, + parseModels(raw) { + return raw as string[]; + }, + translateModel(id) { + return { + id, + model: { + name: id, + description: "Case-fold guard test model.", + release_date: "2026-08-14", + last_updated: "2026-08-14", + attachment: false, + reasoning: false, + tool_call: false, + open_weights: false, + cost: { input: 1, output: 2 }, + limit: { context: 8_192, output: 4_096 }, + modalities: { input: ["text"], output: ["text"] }, + }, + }; + }, + }; +} + +test("rejects synced model paths that differ only in case", async () => { + const root = await mkdtemp(path.join(tmpdir(), "models-dev-case-fold-")); + const modelsDir = path.join(root, "providers", "case-fold-test", "models"); + await mkdir(modelsDir, { recursive: true }); + + try { + await expect( + syncProvider(caseFoldProvider(modelsDir, ["Alpha", "alpha"])), + ).rejects.toThrow(/differ only in case/u); + + await expect( + syncProvider(caseFoldProvider(modelsDir, ["beta", "beta"])), + ).rejects.toThrow(/Duplicate synced model path/u); + + const clean = await syncProvider( + caseFoldProvider(modelsDir, ["Gamma", "delta"]), + ); + expect(clean).toMatchObject({ created: 2, updated: 0, deleted: 0 }); + } finally { + await rm(root, { recursive: true, force: true }); + } +}); diff --git a/packages/function/package.json b/packages/function/package.json index 1d1c7c9f5c1..e1fd3d8260a 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -3,6 +3,9 @@ "name": "@models.dev/function", "private": true, "type": "module", + "dependencies": { + "@models.dev/core": "workspace:*" + }, "devDependencies": { "@cloudflare/workers-types": "4.20250522.0", "@tsconfig/bun": "catalog:" diff --git a/packages/function/src/worker.ts b/packages/function/src/worker.ts index 9ccccdd42e4..d616805d8f9 100644 --- a/packages/function/src/worker.ts +++ b/packages/function/src/worker.ts @@ -1,3 +1,13 @@ +import { + filterCatalogByModelType, + filterModelsByModelType, + filterProvidersByModelType, + InvalidModelTypeError, + MODEL_TYPES, + parseModelTypes, +} from "@models.dev/core/src/filter.js"; +import type { ModelTypeValue } from "@models.dev/core/src/filter.js"; + export interface Env { ASSETS: any; PosthogToken: string; @@ -64,11 +74,8 @@ export default { } if (url.pathname === "/model-schema.json") { - const apiUrl = new URL(url); - apiUrl.pathname = "/_api.json"; - const apiResponse = await env.ASSETS.fetch( - new Request(apiUrl.toString(), request), - ); + const apiResponse = await catalogResponse(url, request, env, "api"); + if (!apiResponse.ok) return apiResponse; const providers = (await apiResponse.json()) as Record< string, { models: Record } @@ -102,11 +109,11 @@ export default { } if (url.pathname === "/api.json") { - url.pathname = "/_api.json"; + return catalogResponse(url, request, env, "api"); } else if (url.pathname === "/models.json") { - url.pathname = "/_models.json"; + return catalogResponse(url, request, env, "models"); } else if (url.pathname === "/catalog.json") { - url.pathname = "/_catalog.json"; + return catalogResponse(url, request, env, "catalog"); } else if ( url.pathname === "/" || url.pathname === "/index.html" || @@ -143,6 +150,81 @@ export default { }, }; +type CatalogEndpoint = "api" | "models" | "catalog"; + +async function catalogResponse( + url: URL, + request: Request, + env: Env, + endpoint: CatalogEndpoint, +) { + let filter; + try { + filter = parseModelTypes(url.searchParams.get("type")); + } catch (error) { + if (!(error instanceof InvalidModelTypeError)) throw error; + return Response.json( + { + error: error.message, + allowed: [...MODEL_TYPES, "all"], + }, + { + status: 400, + headers: { "Access-Control-Allow-Origin": "*" }, + }, + ); + } + + const assetUrl = new URL(url); + const suffix = filter === "default" + ? "" + : filter === "all" + ? "-all" + : filter.length === 1 + ? `-${filter[0]}` + : undefined; + assetUrl.pathname = `/_${endpoint}${suffix ?? "-all"}.json`; + assetUrl.search = ""; + const assetResponse = await env.ASSETS.fetch( + new Request(assetUrl.toString(), request), + ); + if (!assetResponse.ok || suffix !== undefined) return assetResponse; + + const value = await assetResponse.json(); + const filtered = endpoint === "api" + ? filterProvidersByModelType( + value as Record, + filter, + ) + : endpoint === "models" + ? filterModelsByModelType( + value as Record, + filter, + ) + : filterCatalogByModelType( + value as { + providers: Record; + models: Record; + }, + filter, + ); + + const headers = new Headers(assetResponse.headers); + headers.delete("Content-Length"); + headers.delete("ETag"); + headers.set("Content-Type", "application/json"); + headers.set("Cache-Control", "public, max-age=3600"); + return new Response(JSON.stringify(filtered), { headers }); +} + +interface CatalogModel { + type?: ModelTypeValue; +} + +interface CatalogProvider { + models: Record; +} + function isHtmlRoute(pathname: string) { return ( pathname === "/models" || diff --git a/packages/function/test/worker.test.ts b/packages/function/test/worker.test.ts new file mode 100644 index 00000000000..26d9e0fb04a --- /dev/null +++ b/packages/function/test/worker.test.ts @@ -0,0 +1,138 @@ +import { describe, expect, test } from "bun:test"; + +import worker, { type Env } from "../src/worker.js"; + +const textModel = { + id: "text-model", + modalities: { input: ["text"], output: ["text"] }, +}; +const decisionModel = { + id: "decision-model", + type: "decision", + modalities: { input: ["text"], output: ["text"] }, +}; +const providers = { + example: { + id: "example", + models: { text: textModel, decision: decisionModel }, + }, +}; +const models = { text: textModel, decision: decisionModel }; + +describe("catalog API model type filtering", () => { + test("omits typed models from api.json by default", async () => { + const response = await request("/api.json"); + const body = await response.json(); + + expect(Object.keys(body.example.models)).toEqual(["text"]); + }); + + test("omits typed models from models.json by default", async () => { + const response = await request("/models.json"); + const body = await response.json(); + + expect(Object.keys(body)).toEqual(["text"]); + }); + + test("omits typed models from catalog.json by default", async () => { + const response = await request("/catalog.json"); + const body = await response.json(); + + expect(Object.keys(body.models)).toEqual(["text"]); + expect(Object.keys(body.providers.example.models)).toEqual(["text"]); + }); + + test("returns explicitly requested decision models", async () => { + const response = await request("/catalog.json?type=decision"); + const body = await response.json(); + + expect(Object.keys(body.models)).toEqual(["decision"]); + expect(Object.keys(body.providers.example.models)).toEqual(["decision"]); + }); + + test("returns the complete static catalog for all", async () => { + const response = await request("/models.json?type=all"); + const body = await response.json(); + + expect(Object.keys(body)).toEqual(["text", "decision"]); + }); + + test("omits typed models from model-schema.json by default", async () => { + const response = await request("/model-schema.json"); + const body = await response.json(); + + expect(body.$defs.Model.enum).toEqual(["example/text"]); + }); + + test("includes typed models in model-schema.json when requested", async () => { + const response = await request("/model-schema.json?type=all"); + const body = await response.json(); + + expect(body.$defs.Model.enum).toEqual([ + "example/decision", + "example/text", + ]); + }); + + test("rejects unknown model types", async () => { + const response = await request("/api.json?type=unknown"); + + expect(response.status).toBe(400); + }); +}); + +async function request(path: string) { + const env = { + ASSETS: { + fetch(input: Request) { + const pathname = new URL(input.url).pathname; + if (pathname === "/_api.json") { + return Response.json({ + example: { ...providers.example, models: { text: textModel } }, + }); + } + if (pathname === "/_api-all.json") return Response.json(providers); + if (pathname === "/_api-decision.json") { + return Response.json({ + example: { ...providers.example, models: { decision: decisionModel } }, + }); + } + if (pathname === "/_models.json") { + return Response.json({ text: textModel }); + } + if (pathname === "/_models-all.json") return Response.json(models); + if (pathname === "/_models-decision.json") { + return Response.json({ decision: decisionModel }); + } + if (pathname === "/_catalog.json") { + return Response.json({ + providers: { + example: { ...providers.example, models: { text: textModel } }, + }, + models: { text: textModel }, + }); + } + if (pathname === "/_catalog-all.json") { + return Response.json({ providers, models }); + } + if (pathname === "/_catalog-decision.json") { + return Response.json({ + providers: { + example: { ...providers.example, models: { decision: decisionModel } }, + }, + models: { decision: decisionModel }, + }); + } + return new Response(null, { status: 404 }); + }, + }, + } as unknown as Env; + + return worker.fetch( + new Request(`https://models.dev${path}`, { + headers: { "user-agent": "test" }, + }), + env, + { waitUntil() {} } as unknown as ExecutionContext, + ); +} diff --git a/packages/sdk/src/client.ts b/packages/sdk/src/client.ts index f63aa5c3660..ee3848e4e3f 100644 --- a/packages/sdk/src/client.ts +++ b/packages/sdk/src/client.ts @@ -1,5 +1,5 @@ import { ModelsDevError } from "./error.js" -import type { Catalog, ModelMetadataMap, ProviderMap } from "./types.js" +import type { Catalog, ModelMetadataMap, ModelType, ProviderMap } from "./types.js" /** Accepted anywhere headers can be passed. Same shapes as the standard `HeadersInit`. */ export type HeadersInput = Headers | Record | Array<[string, string]> @@ -21,6 +21,8 @@ export interface RequestOptions { readonly signal?: AbortSignal /** Extra headers for this request. Overrides client-level headers. */ readonly headers?: HeadersInput + /** Specialized model types to include. Omit for standard models; use `"all"` for the complete catalog. */ + readonly modelTypes?: "all" | readonly ModelType[] } /** @@ -41,7 +43,15 @@ export function make(options: ClientOptions = {}) { let response: Response try { - response = await fetch(new URL(path, base), { + const url = new URL(path, base) + const modelTypes = requestOptions?.modelTypes + if (modelTypes === "all") { + url.searchParams.set("type", "all") + } else if (modelTypes && modelTypes.length > 0) { + url.searchParams.set("type", modelTypes.join(",")) + } + + response = await fetch(url, { method: "GET", headers, signal: requestOptions?.signal, diff --git a/packages/sdk/src/effect.ts b/packages/sdk/src/effect.ts index cd1780d182e..24827173e48 100644 --- a/packages/sdk/src/effect.ts +++ b/packages/sdk/src/effect.ts @@ -1,4 +1,4 @@ // Effect-native client. Requires the optional peer dependency `effect`. export * as Models from "./effect/client.js" -export { ModelsDevError, type ClientOptions, type ModelsClient } from "./effect/client.js" +export { ModelsDevError, type ClientOptions, type ModelsClient, type RequestOptions } from "./effect/client.js" export type * from "./types.js" diff --git a/packages/sdk/src/effect/client.ts b/packages/sdk/src/effect/client.ts index 0eb98835d55..ea005cf8f82 100644 --- a/packages/sdk/src/effect/client.ts +++ b/packages/sdk/src/effect/client.ts @@ -1,6 +1,6 @@ import { Context, Effect, Layer, Schema } from "effect" import { HttpClient, HttpClientResponse } from "effect/unstable/http" -import type { Catalog, ModelMetadataMap, ProviderMap } from "../types.js" +import type { Catalog, ModelMetadataMap, ModelType, ProviderMap } from "../types.js" /** The only error in the failure channel of client methods. Wraps the underlying `HttpClientError` as `cause`. */ export class ModelsDevError extends Schema.TaggedErrorClass()("ModelsDevError", { @@ -14,6 +14,11 @@ export interface ClientOptions { readonly headers?: Record } +export interface RequestOptions { + /** Specialized model types to include. Omit for standard models; use `"all"` for the complete catalog. */ + readonly modelTypes?: "all" | readonly ModelType[] +} + /** * Creates a stateless models.dev client on top of the `HttpClient` service * from the environment (`FetchHttpClient.layer`, `NodeHttpClient.layer`, or a @@ -26,9 +31,17 @@ export const make = (options?: ClientOptions) => const baseUrl = options?.baseUrl ?? "https://models.dev" const base = baseUrl.endsWith("/") ? baseUrl : baseUrl + "/" - const get = (path: string): Effect.Effect => - http - .get(new URL(path, base), { + const get = (path: string, requestOptions?: RequestOptions): Effect.Effect => { + const url = new URL(path, base) + const modelTypes = requestOptions?.modelTypes + if (modelTypes === "all") { + url.searchParams.set("type", "all") + } else if (modelTypes && modelTypes.length > 0) { + url.searchParams.set("type", modelTypes.join(",")) + } + + return http + .get(url, { headers: options?.headers, }) .pipe( @@ -37,14 +50,15 @@ export const make = (options?: ClientOptions) => Effect.map((data) => data as A), Effect.mapError((cause) => new ModelsDevError({ cause })), ) + } return { /** All providers with their models, pricing, and limits (`/api.json`). */ - providers: () => get("api.json"), + providers: (options?: RequestOptions) => get("api.json", options), /** Provider-agnostic model metadata (`/models.json`). */ - models: () => get("models.json"), + models: (options?: RequestOptions) => get("models.json", options), /** Providers and model metadata in a single request (`/catalog.json`). */ - catalog: () => get("catalog.json"), + catalog: (options?: RequestOptions) => get("catalog.json", options), } }) diff --git a/packages/sdk/src/types.ts b/packages/sdk/src/types.ts index 92999e2dea7..250551d5e7a 100644 --- a/packages/sdk/src/types.ts +++ b/packages/sdk/src/types.ts @@ -80,6 +80,9 @@ export interface ModelCost extends Cost { /** Input/output data types a model supports. */ export type Modality = "text" | "audio" | "image" | "video" | "pdf" +/** A model's specialized behavioral contract. Omitted for standard generative models. */ +export type ModelType = "decision" + export interface Modalities { input: Modality[] output: Modality[] @@ -143,6 +146,7 @@ export interface BenchmarkResult { export interface ModelMetadata { /** Canonical model ID, e.g. "anthropic/claude-opus-4-6". */ id: string + type?: ModelType name: string description: string family?: ModelFamily @@ -208,6 +212,7 @@ export interface ModelProviderConfig { export interface Model { /** Provider-scoped model ID, e.g. "claude-opus-4-6". */ id: string + type?: ModelType name: string description: string family?: ModelFamily diff --git a/packages/sdk/test/client.test.ts b/packages/sdk/test/client.test.ts index 3f898ef9157..61bc8fda104 100644 --- a/packages/sdk/test/client.test.ts +++ b/packages/sdk/test/client.test.ts @@ -40,6 +40,17 @@ test("models() and catalog() hit their endpoints", async () => { expect(calls.map((call) => call.url.href)).toEqual(["https://models.dev/models.json", "https://models.dev/catalog.json"]) }) +test("catalog endpoints encode model type filters", async () => { + const { calls, fetch } = stub({}) + const client = Models.make({ fetch }) + await client.providers({ modelTypes: ["decision"] }) + await client.models({ modelTypes: "all" }) + expect(calls.map((call) => call.url.href)).toEqual([ + "https://models.dev/api.json?type=decision", + "https://models.dev/models.json?type=all", + ]) +}) + test("baseUrl with subpath is preserved, with or without trailing slash", async () => { const { calls, fetch } = stub({}) await Models.make({ fetch, baseUrl: "https://example.com/mirror" }).providers() diff --git a/packages/sdk/test/effect.test.ts b/packages/sdk/test/effect.test.ts index 943acedbeb7..025e4a190e3 100644 --- a/packages/sdk/test/effect.test.ts +++ b/packages/sdk/test/effect.test.ts @@ -42,6 +42,20 @@ test("models() and catalog() hit their endpoints, baseUrl subpath preserved", as ]) }) +test("catalog endpoints encode model type filters", async () => { + const { requests, layer } = stub({}) + const program = Effect.gen(function* () { + const client = yield* Models.make() + yield* client.providers({ modelTypes: ["decision"] }) + yield* client.catalog({ modelTypes: "all" }) + }) + await program.pipe(Effect.provide(layer), Effect.runPromise) + expect(requests.map((request) => request.url)).toEqual([ + "https://models.dev/api.json?type=decision", + "https://models.dev/catalog.json?type=all", + ]) +}) + test("custom headers are sent", async () => { const { requests, layer } = stub({}) const program = Effect.gen(function* () { diff --git a/packages/web/script/build.ts b/packages/web/script/build.ts index f387bccd848..8866aa8e435 100755 --- a/packages/web/script/build.ts +++ b/packages/web/script/build.ts @@ -1,6 +1,11 @@ #!/usr/bin/env bun import { RenderedPages, Providers, Models, renderDocument } from "../src/render"; +import { + filterCatalogByModelType, + MODEL_TYPES, + type ModelTypeFilter, +} from "@models.dev/core"; import fs from "fs/promises"; import path from "path"; @@ -74,15 +79,18 @@ for (const [route, rendered] of RenderedPages) { await Bun.write(filePath, renderDocument(template, rendered)); } -await Bun.write("./dist/api.json", JSON.stringify(Providers)); -await Bun.write( - "./dist/catalog.json", - JSON.stringify({ models: Models, providers: Providers }), -); -await Bun.write("./dist/models.json", JSON.stringify(Models)); - -await fs.rename("./dist/api.json", "./dist/_api.json"); -await fs.rename("./dist/catalog.json", "./dist/_catalog.json"); -await fs.rename("./dist/models.json", "./dist/_models.json"); +const catalog = { models: Models, providers: Providers }; +const variants: Array<[suffix: string, filter: ModelTypeFilter]> = [ + ["", "default"], + ["-all", "all"], + ...MODEL_TYPES.map((type) => [`-${type}`, [type]] as const), +]; + +for (const [suffix, filter] of variants) { + const filtered = filterCatalogByModelType(catalog, filter); + await Bun.write(`./dist/_api${suffix}.json`, JSON.stringify(filtered.providers)); + await Bun.write(`./dist/_models${suffix}.json`, JSON.stringify(filtered.models)); + await Bun.write(`./dist/_catalog${suffix}.json`, JSON.stringify(filtered)); +} await fs.rm("./dist/index.html", { force: true }); diff --git a/packages/web/src/render.tsx b/packages/web/src/render.tsx index 93c73c6e66e..34632f57b1b 100644 --- a/packages/web/src/render.tsx +++ b/packages/web/src/render.tsx @@ -1497,21 +1497,22 @@ function HelpDialog() {

API

You can access provider data, provider-agnostic model metadata, or the - combined catalog through JSON endpoints. + combined catalog through JSON endpoints. Specialized model types are + omitted by default; the site includes all model types.

Logos

diff --git a/packages/web/src/server.ts b/packages/web/src/server.ts index 5adb9e9fc60..f43e6ce830a 100644 --- a/packages/web/src/server.ts +++ b/packages/web/src/server.ts @@ -1,5 +1,12 @@ import Index from "../index.html"; import { getRenderedPage, Models, Providers, renderDocument } from "./render"; +import { + filterCatalogByModelType, + filterModelsByModelType, + filterProvidersByModelType, + InvalidModelTypeError, + parseModelTypes, +} from "@models.dev/core"; import path from "path"; const assetPort = Number(Bun.env.ASSET_PORT ?? 16000); @@ -99,30 +106,37 @@ Bun.serve({ }, }); }, - "/api.json": () => - Response.json(Providers, { - headers: { - "Cache-Control": "public, max-age=3600", - }, - }), - "/models.json": () => - Response.json(Models, { - headers: { - "Cache-Control": "public, max-age=3600", - }, - }), - "/catalog.json": () => - Response.json( - { models: Models, providers: Providers }, - { - headers: { - "Cache-Control": "public, max-age=3600", - }, - }, - ), + "/api.json": (req) => catalogResponse(req, "api"), + "/models.json": (req) => catalogResponse(req, "models"), + "/catalog.json": (req) => catalogResponse(req, "catalog"), }, }); +function catalogResponse(req: Request, endpoint: "api" | "models" | "catalog") { + let filter; + try { + filter = parseModelTypes(new URL(req.url).searchParams.get("type")); + } catch (error) { + if (!(error instanceof InvalidModelTypeError)) throw error; + return Response.json({ error: error.message }, { status: 400 }); + } + + const value = endpoint === "api" + ? filterProvidersByModelType(Providers, filter) + : endpoint === "models" + ? filterModelsByModelType(Models, filter) + : filterCatalogByModelType( + { models: Models, providers: Providers }, + filter, + ); + + return Response.json(value, { + headers: { + "Cache-Control": "public, max-age=3600", + }, + }); +} + const server = Bun.serve({ development: true, hostname: "0.0.0.0", diff --git a/providers/302ai/models/MiniMax-M2.1.toml b/providers/302ai/models/MiniMax-M2.1.toml index 3c1fe4d34b9..bce1128bdc8 100644 --- a/providers/302ai/models/MiniMax-M2.1.toml +++ b/providers/302ai/models/MiniMax-M2.1.toml @@ -1,21 +1,7 @@ -name = "MiniMax-M2.1" -description = "MiniMax model for chat, coding, office work, and agentic tasks" -release_date = "2025-12-19" -last_updated = "2025-12-19" -attachment = false -reasoning = false -temperature = true -tool_call = true -open_weights = false +# 302.AI API reports context_length = 204,800 for MiniMax-M2.1 (reconciled from prior 1M override) +base_model = "minimax/MiniMax-M2.1" +reasoning_options = [] [cost] -input = 0.300 -output = 1.200 - -[limit] -context = 1_000_000 -output = 131_072 - -[modalities] -input = ["text"] -output = ["text"] +input = 0.3 +output = 1.2 diff --git a/providers/302ai/models/MiniMax-M2.5.toml b/providers/302ai/models/MiniMax-M2.5.toml new file mode 100644 index 00000000000..67b638180ff --- /dev/null +++ b/providers/302ai/models/MiniMax-M2.5.toml @@ -0,0 +1,6 @@ +base_model = "minimax/MiniMax-M2.5" +reasoning_options = [] + +[cost] +input = 0.3 +output = 1.2 diff --git a/providers/302ai/models/MiniMax-M2.7-highspeed.toml b/providers/302ai/models/MiniMax-M2.7-highspeed.toml deleted file mode 100644 index 80b702b6ad6..00000000000 --- a/providers/302ai/models/MiniMax-M2.7-highspeed.toml +++ /dev/null @@ -1,21 +0,0 @@ -name = "MiniMax-M2.7-highspeed" -description = "High-speed MiniMax model for low-latency coding and agent workflows" -release_date = "2026-03-19" -last_updated = "2026-03-19" -attachment = false -reasoning = false -temperature = true -tool_call = true -open_weights = false - -[cost] -input = 0.600 -output = 4.800 - -[limit] -context = 204_800 -output = 131_072 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/302ai/models/MiniMax-M2.7.toml b/providers/302ai/models/MiniMax-M2.7.toml index 3a53aaa154e..81563bf573e 100644 --- a/providers/302ai/models/MiniMax-M2.7.toml +++ b/providers/302ai/models/MiniMax-M2.7.toml @@ -1,21 +1,6 @@ -name = "MiniMax-M2.7" -description = "MiniMax model for chat, coding, office work, and agentic tasks" -release_date = "2026-03-19" -last_updated = "2026-03-19" -attachment = false -reasoning = false -temperature = true -tool_call = true -open_weights = false +base_model = "minimax/MiniMax-M2.7" +reasoning_options = [] [cost] -input = 0.300 -output = 1.200 - -[limit] -context = 204_800 -output = 131_072 - -[modalities] -input = ["text"] -output = ["text"] +input = 0.3 +output = 1.2 diff --git a/providers/302ai/models/MiniMax-M3.toml b/providers/302ai/models/MiniMax-M3.toml new file mode 100644 index 00000000000..be4210ae4ac --- /dev/null +++ b/providers/302ai/models/MiniMax-M3.toml @@ -0,0 +1,7 @@ +# Toggle: thinking.type = enabled|disabled +base_model = "minimax/MiniMax-M3" +reasoning_options = [{ type = "toggle" }] + +[cost] +input = 0.72 +output = 2.88 diff --git a/providers/302ai/models/chatgpt-4o-latest.toml b/providers/302ai/models/chatgpt-4o-latest.toml deleted file mode 100644 index e1ed768d611..00000000000 --- a/providers/302ai/models/chatgpt-4o-latest.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "chatgpt-4o-latest" -description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" -family = "gpt" -release_date = "2024-08-08" -last_updated = "2024-08-08" -attachment = true -reasoning = false -temperature = true -tool_call = false -open_weights = false -knowledge = "2023-09" - -[cost] -input = 5.000 -output = 15.000 - -[limit] -context = 128_000 -output = 16_384 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/302ai/models/claude-3-5-haiku-20241022.toml b/providers/302ai/models/claude-3-5-haiku-20241022.toml deleted file mode 100644 index 4187b860dda..00000000000 --- a/providers/302ai/models/claude-3-5-haiku-20241022.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "claude-3-5-haiku-20241022" -description = "Fast Claude model for responsive assistance, classification, and lightweight agents" -family = "claude-haiku" -release_date = "2024-10-22" -last_updated = "2024-10-22" -attachment = true -reasoning = false -temperature = true -tool_call = true -open_weights = false -knowledge = "2024-07-31" - -[cost] -input = 0.800 -output = 4.000 - -[limit] -context = 200_000 -output = 8_192 - -[modalities] -input = ["text", "image", "pdf"] -output = ["text"] diff --git a/providers/302ai/models/claude-3-5-haiku-latest.toml b/providers/302ai/models/claude-3-5-haiku-latest.toml deleted file mode 100644 index 38e55c29625..00000000000 --- a/providers/302ai/models/claude-3-5-haiku-latest.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "claude-3-5-haiku-latest" -description = "Fast Claude model for responsive assistance, classification, and lightweight agents" -family = "claude-haiku" -release_date = "2024-10-22" -last_updated = "2024-10-22" -attachment = true -reasoning = false -temperature = true -tool_call = true -open_weights = false -knowledge = "2024-07-31" - -[cost] -input = 0.800 -output = 4.000 - -[limit] -context = 200_000 -output = 8_192 - -[modalities] -input = ["text", "image", "pdf"] -output = ["text"] diff --git a/providers/302ai/models/claude-fable-5-1.toml b/providers/302ai/models/claude-fable-5-1.toml new file mode 100644 index 00000000000..8484f21020a --- /dev/null +++ b/providers/302ai/models/claude-fable-5-1.toml @@ -0,0 +1,6 @@ +base_model = "anthropic/claude-fable-5-1" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 10.0 +output = 50.0 diff --git a/providers/302ai/models/claude-fable-5.toml b/providers/302ai/models/claude-fable-5.toml new file mode 100644 index 00000000000..01a493e716f --- /dev/null +++ b/providers/302ai/models/claude-fable-5.toml @@ -0,0 +1,6 @@ +base_model = "anthropic/claude-fable-5" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 10.0 +output = 50.0 diff --git a/providers/302ai/models/claude-opus-4-20250514.toml b/providers/302ai/models/claude-opus-4-20250514.toml deleted file mode 100644 index 8a972a7f74a..00000000000 --- a/providers/302ai/models/claude-opus-4-20250514.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "claude-opus-4-20250514" -description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents" -family = "claude-opus" -release_date = "2025-05-22" -last_updated = "2025-05-22" -attachment = true -reasoning = true -reasoning_options = [{ type = "toggle" }, { type = "budget_tokens", min = 1024, max = 31999 }] -temperature = true -tool_call = true -open_weights = false -knowledge = "2025-03-31" - -[cost] -input = 15.000 -output = 75.000 - -[limit] -context = 200_000 -output = 32_000 - -[modalities] -input = ["text", "image", "pdf"] -output = ["text"] diff --git a/providers/302ai/models/claude-opus-4-5-20251101-thinking.toml b/providers/302ai/models/claude-opus-4-5-20251101-thinking.toml deleted file mode 100644 index 53ab746245c..00000000000 --- a/providers/302ai/models/claude-opus-4-5-20251101-thinking.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "claude-opus-4-5-20251101-thinking" -description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents" -release_date = "2025-11-25" -last_updated = "2025-11-25" -attachment = true -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -open_weights = false -knowledge = "2025-03" - -[cost] -input = 5.000 -output = 25.000 - -[limit] -context = 200_000 -output = 64_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/302ai/models/claude-opus-4-5.toml b/providers/302ai/models/claude-opus-4-5.toml deleted file mode 100644 index 70bdeac12a1..00000000000 --- a/providers/302ai/models/claude-opus-4-5.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "claude-opus-4-5" -description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents" -family = "claude-opus" -release_date = "2025-11-25" -last_updated = "2025-11-25" -attachment = true -reasoning = true -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high"] }, { type = "budget_tokens", min = 1024, max = 63999 }] -temperature = true -tool_call = true -open_weights = false -knowledge = "2025-03-31" - -[cost] -input = 5.000 -output = 25.000 - -[limit] -context = 200_000 -output = 64_000 - -[modalities] -input = ["text", "image", "pdf"] -output = ["text"] diff --git a/providers/302ai/models/claude-opus-4-6-thinking.toml b/providers/302ai/models/claude-opus-4-6-thinking.toml deleted file mode 100644 index 15d674f84b3..00000000000 --- a/providers/302ai/models/claude-opus-4-6-thinking.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "claude-opus-4-6-thinking" -description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents" -release_date = "2026-02-06" -last_updated = "2026-03-13" -attachment = true -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -open_weights = false -knowledge = "2025-05" - -[cost] -input = 5.000 -output = 25.000 - -[limit] -context = 1_000_000 -output = 128_000 - -[modalities] -input = ["text", "image", "pdf"] -output = ["text"] diff --git a/providers/302ai/models/claude-opus-4-6.toml b/providers/302ai/models/claude-opus-4-6.toml deleted file mode 100644 index cb04746dff2..00000000000 --- a/providers/302ai/models/claude-opus-4-6.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "claude-opus-4-6" -description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents" -family = "claude-opus" -release_date = "2026-02-06" -last_updated = "2026-03-13" -attachment = true -reasoning = true -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high", "max"] }, { type = "budget_tokens", min = 1024, max = 127999 }] -temperature = true -tool_call = true -open_weights = false -knowledge = "2025-05-31" - -[cost] -input = 5.000 -output = 25.000 - -[limit] -context = 1_000_000 -output = 128_000 - -[modalities] -input = ["text", "image", "pdf"] -output = ["text"] diff --git a/providers/302ai/models/claude-opus-4-7-thinking.toml b/providers/302ai/models/claude-opus-4-7-thinking.toml new file mode 100644 index 00000000000..c8490e371a8 --- /dev/null +++ b/providers/302ai/models/claude-opus-4-7-thinking.toml @@ -0,0 +1,7 @@ +base_model = "anthropic/claude-opus-4-7" +name = "claude-opus-4-7-thinking" +reasoning_options = [] + +[cost] +input = 5.0 +output = 25.0 diff --git a/providers/302ai/models/claude-opus-4-8.toml b/providers/302ai/models/claude-opus-4-8.toml new file mode 100644 index 00000000000..aafe7fb3d26 --- /dev/null +++ b/providers/302ai/models/claude-opus-4-8.toml @@ -0,0 +1,6 @@ +base_model = "anthropic/claude-opus-4-8" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 5.0 +output = 25.0 diff --git a/providers/302ai/models/claude-opus-5-thinking.toml b/providers/302ai/models/claude-opus-5-thinking.toml new file mode 100644 index 00000000000..f1155ed03eb --- /dev/null +++ b/providers/302ai/models/claude-opus-5-thinking.toml @@ -0,0 +1,7 @@ +base_model = "anthropic/claude-opus-5" +name = "claude-opus-5-thinking" +reasoning_options = [] + +[cost] +input = 5.0 +output = 25.0 diff --git a/providers/302ai/models/claude-opus-5.toml b/providers/302ai/models/claude-opus-5.toml new file mode 100644 index 00000000000..31cd0633b58 --- /dev/null +++ b/providers/302ai/models/claude-opus-5.toml @@ -0,0 +1,6 @@ +base_model = "anthropic/claude-opus-5" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 5.0 +output = 25.0 diff --git a/providers/302ai/models/claude-sonnet-4-20250514.toml b/providers/302ai/models/claude-sonnet-4-20250514.toml deleted file mode 100644 index 0e53f6ef461..00000000000 --- a/providers/302ai/models/claude-sonnet-4-20250514.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "claude-sonnet-4-20250514" -description = "Balanced Claude model for coding, analysis, agent workflows, and cost control" -family = "claude-sonnet" -release_date = "2025-05-22" -last_updated = "2025-05-22" -attachment = true -reasoning = true -reasoning_options = [{ type = "toggle" }, { type = "budget_tokens", min = 1024, max = 63999 }] -temperature = true -tool_call = true -open_weights = false -knowledge = "2025-03-31" - -[cost] -input = 3.000 -output = 15.000 - -[limit] -context = 200_000 -output = 64_000 - -[modalities] -input = ["text", "image", "pdf"] -output = ["text"] diff --git a/providers/302ai/models/claude-sonnet-4-5.toml b/providers/302ai/models/claude-sonnet-4-5.toml deleted file mode 100644 index 9c5655b9568..00000000000 --- a/providers/302ai/models/claude-sonnet-4-5.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "claude-sonnet-4-5" -description = "Balanced Claude model for coding, analysis, agent workflows, and cost control" -family = "claude-sonnet" -release_date = "2025-09-30" -last_updated = "2025-09-30" -attachment = true -reasoning = true -reasoning_options = [{ type = "toggle" }, { type = "budget_tokens", min = 1024, max = 63999 }] -temperature = true -tool_call = true -open_weights = false -knowledge = "2025-07-31" - -[cost] -input = 3.000 -output = 15.000 - -[limit] -context = 200_000 -output = 64_000 - -[modalities] -input = ["text", "image", "pdf"] -output = ["text"] diff --git a/providers/302ai/models/claude-sonnet-5.toml b/providers/302ai/models/claude-sonnet-5.toml new file mode 100644 index 00000000000..7834d37a87f --- /dev/null +++ b/providers/302ai/models/claude-sonnet-5.toml @@ -0,0 +1,8 @@ +# Toggle: thinking.type = enabled|disabled +# Effort: output_config.effort = low|medium|high|xhigh|max +base_model = "anthropic/claude-sonnet-5" +reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 2.0 +output = 10.0 diff --git a/providers/302ai/models/deepseek-chat.toml b/providers/302ai/models/deepseek-chat.toml deleted file mode 100644 index 2b55c7e43a7..00000000000 --- a/providers/302ai/models/deepseek-chat.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Deepseek-Chat" -description = "DeepSeek chat model for instruction following, coding, and analysis" -family = "deepseek" -release_date = "2024-11-29" -last_updated = "2024-11-29" -attachment = false -reasoning = false -temperature = true -tool_call = true -open_weights = false -knowledge = "2024-07" - -[cost] -input = 0.290 -output = 0.430 - -[limit] -context = 128_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/302ai/models/deepseek-flash.toml b/providers/302ai/models/deepseek-flash.toml new file mode 100644 index 00000000000..0e607680e15 --- /dev/null +++ b/providers/302ai/models/deepseek-flash.toml @@ -0,0 +1,19 @@ +# DeepSeek-V4.1-Flash on 302.AI, served as `deepseek-flash` (catalog SKU created 2026-09-08). +# Cost: 302.AI catalog, $0.150 / $0.600 per MTok with $0.003 cache-read, https://api.302.ai/v1/models (retrieved 2026-09-14). +# Toggle and `reasoning_content` side channel verified live against POST https://api.302.ai/v1/chat/completions (2026-09-14): +# `thinking.type = disabled` suppresses reasoning output; invalid `reasoning_effort` values are rejected (-10003). +# Toggle: thinking.type = enabled|disabled +# Effort: reasoning_effort = low|high|max +base_model = "deepseek/deepseek-v4.1-flash" +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["low", "high", "max"] }, +] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.15 +output = 0.6 +cache_read = 0.003 diff --git a/providers/302ai/models/deepseek-reasoner.toml b/providers/302ai/models/deepseek-reasoner.toml deleted file mode 100644 index 448bf2bd4b7..00000000000 --- a/providers/302ai/models/deepseek-reasoner.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Deepseek-Reasoner" -description = "DeepSeek reasoning model for multi-step analysis, math, coding, and tools" -family = "deepseek-thinking" -release_date = "2025-01-20" -last_updated = "2025-01-20" -attachment = false -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -open_weights = false -knowledge = "2024-07" - -[cost] -input = 0.290 -output = 0.430 - -[limit] -context = 128_000 -output = 128_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/302ai/models/doubao-seed-code-preview-251028.toml b/providers/302ai/models/doubao-seed-code-preview-251028.toml deleted file mode 100644 index 0d2128ff32c..00000000000 --- a/providers/302ai/models/doubao-seed-code-preview-251028.toml +++ /dev/null @@ -1,21 +0,0 @@ -name = "doubao-seed-code-preview-251028" -description = "Coding model for repository understanding, refactors, and agentic engineering tasks" -release_date = "2025-11-11" -last_updated = "2025-11-11" -attachment = true -reasoning = false -temperature = true -tool_call = true -open_weights = false - -[cost] -input = 0.170 -output = 1.140 - -[limit] -context = 256_000 -output = 32_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/302ai/models/gemini-3.1-flash-lite-preview.toml b/providers/302ai/models/gemini-3.1-flash-lite-preview.toml new file mode 100644 index 00000000000..f96a23289ae --- /dev/null +++ b/providers/302ai/models/gemini-3.1-flash-lite-preview.toml @@ -0,0 +1,6 @@ +base_model = "google/gemini-3.1-flash-lite-preview" +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }] + +[cost] +input = 0.25 +output = 1.5 diff --git a/providers/302ai/models/gemini-3.1-flash-lite.toml b/providers/302ai/models/gemini-3.1-flash-lite.toml new file mode 100644 index 00000000000..67ee9bbcaab --- /dev/null +++ b/providers/302ai/models/gemini-3.1-flash-lite.toml @@ -0,0 +1,6 @@ +base_model = "google/gemini-3.1-flash-lite" +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }] + +[cost] +input = 0.25 +output = 1.5 diff --git a/providers/302ai/models/gemini-3.1-pro-preview.toml b/providers/302ai/models/gemini-3.1-pro-preview.toml new file mode 100644 index 00000000000..24eca3818c9 --- /dev/null +++ b/providers/302ai/models/gemini-3.1-pro-preview.toml @@ -0,0 +1,6 @@ +base_model = "google/gemini-3.1-pro-preview" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[cost] +input = 2.0 +output = 12.0 diff --git a/providers/302ai/models/gemini-3.5-flash-lite.toml b/providers/302ai/models/gemini-3.5-flash-lite.toml new file mode 100644 index 00000000000..43a2449ec76 --- /dev/null +++ b/providers/302ai/models/gemini-3.5-flash-lite.toml @@ -0,0 +1,6 @@ +base_model = "google/gemini-3.5-flash-lite" +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }] + +[cost] +input = 0.3 +output = 2.5 diff --git a/providers/302ai/models/gemini-3.5-flash-thinking.toml b/providers/302ai/models/gemini-3.5-flash-thinking.toml new file mode 100644 index 00000000000..4a42abeb130 --- /dev/null +++ b/providers/302ai/models/gemini-3.5-flash-thinking.toml @@ -0,0 +1,7 @@ +base_model = "google/gemini-3.5-flash" +name = "gemini-3.5-flash-thinking" +reasoning_options = [] + +[cost] +input = 1.5 +output = 9.0 diff --git a/providers/302ai/models/gemini-3.5-flash.toml b/providers/302ai/models/gemini-3.5-flash.toml new file mode 100644 index 00000000000..dd0bb8ad627 --- /dev/null +++ b/providers/302ai/models/gemini-3.5-flash.toml @@ -0,0 +1,6 @@ +base_model = "google/gemini-3.5-flash" +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }] + +[cost] +input = 1.5 +output = 9.0 diff --git a/providers/302ai/models/gemini-3.6-flash.toml b/providers/302ai/models/gemini-3.6-flash.toml new file mode 100644 index 00000000000..aa263aba2e2 --- /dev/null +++ b/providers/302ai/models/gemini-3.6-flash.toml @@ -0,0 +1,7 @@ +# Cost: 302.AI listed price, https://doc.302.ai/ (retrieved 2026-09-08) +base_model = "google/gemini-3.6-flash" +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }] + +[cost] +input = 1.5 +output = 7.5 diff --git a/providers/302ai/models/gemini-3.7-flash.toml b/providers/302ai/models/gemini-3.7-flash.toml new file mode 100644 index 00000000000..0db1eb9f1de --- /dev/null +++ b/providers/302ai/models/gemini-3.7-flash.toml @@ -0,0 +1,6 @@ +base_model = "google/gemini-3.7-flash" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[cost] +input = 0.75 +output = 3.75 diff --git a/providers/302ai/models/gemini-3.8-flash.toml b/providers/302ai/models/gemini-3.8-flash.toml new file mode 100644 index 00000000000..256bd86ef41 --- /dev/null +++ b/providers/302ai/models/gemini-3.8-flash.toml @@ -0,0 +1,6 @@ +base_model = "google/gemini-3.8-flash" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[cost] +input = 0.75 +output = 3.75 diff --git a/providers/302ai/models/glm-4.5-air.toml b/providers/302ai/models/glm-4.5-air.toml deleted file mode 100644 index de558b88636..00000000000 --- a/providers/302ai/models/glm-4.5-air.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "glm-4.5-air" -description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -family = "glm-air" -release_date = "2025-07-29" -last_updated = "2025-07-29" -attachment = false -reasoning = true -reasoning_options = [{ type = "toggle" }] -temperature = true -tool_call = true -open_weights = true -knowledge = "2025-04" - -[cost] -input = 0.1143 -output = 0.286 - -[limit] -context = 131_072 -output = 98_304 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/302ai/models/glm-4.5-airx.toml b/providers/302ai/models/glm-4.5-airx.toml deleted file mode 100644 index f547de2fa79..00000000000 --- a/providers/302ai/models/glm-4.5-airx.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "glm-4.5-airx" -description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -family = "glm" -release_date = "2025-07-29" -last_updated = "2025-07-29" -attachment = false -reasoning = false -temperature = true -tool_call = true -open_weights = false -knowledge = "2025-04" - -[cost] -input = 0.572 -output = 1.714 - -[limit] -context = 128_000 -output = 16_384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/302ai/models/glm-4.5-x.toml b/providers/302ai/models/glm-4.5-x.toml deleted file mode 100644 index 2564e3d0fe6..00000000000 --- a/providers/302ai/models/glm-4.5-x.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "glm-4.5-x" -description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -family = "glm" -release_date = "2025-07-29" -last_updated = "2025-07-29" -attachment = false -reasoning = false -temperature = true -tool_call = true -open_weights = false -knowledge = "2025-04" - -[cost] -input = 1.143 -output = 2.290 - -[limit] -context = 128_000 -output = 16_384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/302ai/models/glm-4.7-flashx.toml b/providers/302ai/models/glm-4.7-flashx.toml deleted file mode 100644 index 3218c5862b3..00000000000 --- a/providers/302ai/models/glm-4.7-flashx.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "glm-4.7-flashx" -description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -family = "glm-flash" -release_date = "2026-01-20" -last_updated = "2026-01-20" -attachment = false -reasoning = true -reasoning_options = [{ type = "toggle" }] -temperature = true -tool_call = true -open_weights = true -knowledge = "2025-04" - -[cost] -input = 0.0715 -output = 0.429 - -[limit] -context = 200_000 -output = 131_072 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/302ai/models/glm-5.1.toml b/providers/302ai/models/glm-5.1.toml index e5de89fd2a8..d9abb545ec2 100644 --- a/providers/302ai/models/glm-5.1.toml +++ b/providers/302ai/models/glm-5.1.toml @@ -1,27 +1,10 @@ -name = "glm-5.1" -description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -family = "glm" -release_date = "2026-04-10" -last_updated = "2026-04-10" -attachment = false -reasoning = true +# Toggle: thinking.type = enabled|disabled +base_model = "zhipuai/glm-5.1" reasoning_options = [{ type = "toggle" }] -temperature = true -tool_call = true -structured_output = true -open_weights = false [interleaved] field = "reasoning_content" [cost] -input = 0.860 -output = 3.500 - -[limit] -context = 200_000 -output = 131_072 - -[modalities] -input = ["text"] -output = ["text"] +input = 1.4 +output = 4.4 diff --git a/providers/302ai/models/glm-5.2.toml b/providers/302ai/models/glm-5.2.toml new file mode 100644 index 00000000000..1bc0f7d91c8 --- /dev/null +++ b/providers/302ai/models/glm-5.2.toml @@ -0,0 +1,10 @@ +# Effort: reasoning_effort = high|max +base_model = "zhipuai/glm-5.2" +reasoning_options = [{ type = "effort", values = ["high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1.4 +output = 4.4 diff --git a/providers/302ai/models/glm-5.3-flash.toml b/providers/302ai/models/glm-5.3-flash.toml new file mode 100644 index 00000000000..ae7be522962 --- /dev/null +++ b/providers/302ai/models/glm-5.3-flash.toml @@ -0,0 +1,10 @@ +# Effort: reasoning_effort = low|high|max +base_model = "zhipuai/glm-5.3-flash" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.075 +output = 0.25 diff --git a/providers/302ai/models/glm-5.3.toml b/providers/302ai/models/glm-5.3.toml new file mode 100644 index 00000000000..d8ee5e7385a --- /dev/null +++ b/providers/302ai/models/glm-5.3.toml @@ -0,0 +1,10 @@ +# Effort: reasoning_effort = low|high|max +base_model = "zhipuai/glm-5.3" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1.4 +output = 4.4 diff --git a/providers/302ai/models/glm-for-coding.toml b/providers/302ai/models/glm-for-coding.toml deleted file mode 100644 index 7ba4c169e01..00000000000 --- a/providers/302ai/models/glm-for-coding.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "glm-for-coding" -description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -family = "glm" -release_date = "2025-09-30" -last_updated = "2025-09-30" -attachment = false -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -open_weights = false - -[cost] -input = 0.086 -output = 0.343 - -[limit] -context = 200_000 -output = 131_072 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/302ai/models/gpt-5.3-chat-latest.toml b/providers/302ai/models/gpt-5.3-chat-latest.toml new file mode 100644 index 00000000000..c83996b77a9 --- /dev/null +++ b/providers/302ai/models/gpt-5.3-chat-latest.toml @@ -0,0 +1,5 @@ +base_model = "openai/gpt-5.3-chat-latest" + +[cost] +input = 1.75 +output = 14.0 diff --git a/providers/302ai/models/gpt-5.4-mini-2026-03-17.toml b/providers/302ai/models/gpt-5.4-mini-2026-03-17.toml deleted file mode 100644 index e45a9c5a5e3..00000000000 --- a/providers/302ai/models/gpt-5.4-mini-2026-03-17.toml +++ /dev/null @@ -1,26 +0,0 @@ -name = "gpt-5.4-mini-2026-03-17" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "gpt-mini" -release_date = "2026-03-19" -last_updated = "2026-03-19" -attachment = true -reasoning = true -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] -temperature = false -tool_call = true -structured_output = true -open_weights = false -knowledge = "2025-08-31" - -[cost] -input = 0.750 -output = 4.500 - -[limit] -context = 400_000 -input = 272_000 -output = 128_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/302ai/models/gpt-5.4-nano-2026-03-17.toml b/providers/302ai/models/gpt-5.4-nano-2026-03-17.toml deleted file mode 100644 index eada76b28a2..00000000000 --- a/providers/302ai/models/gpt-5.4-nano-2026-03-17.toml +++ /dev/null @@ -1,26 +0,0 @@ -name = "gpt-5.4-nano-2026-03-17" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "gpt-nano" -release_date = "2026-03-19" -last_updated = "2026-03-19" -attachment = true -reasoning = true -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] -temperature = false -tool_call = true -structured_output = true -open_weights = false -knowledge = "2025-08-31" - -[cost] -input = 0.200 -output = 1.250 - -[limit] -context = 400_000 -input = 272_000 -output = 128_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/302ai/models/gpt-5.4-pro.toml b/providers/302ai/models/gpt-5.4-pro.toml deleted file mode 100644 index 4cd3385ee29..00000000000 --- a/providers/302ai/models/gpt-5.4-pro.toml +++ /dev/null @@ -1,33 +0,0 @@ -name = "gpt-5.4-pro" -description = "Frontier GPT model for professional reasoning, coding, and multimodal work" -family = "gpt-pro" -release_date = "2026-03-05" -last_updated = "2026-03-05" -attachment = true -reasoning = true -reasoning_options = [{ type = "effort", values = ["medium", "high", "xhigh"] }] -temperature = false -tool_call = true -structured_output = false -open_weights = false -knowledge = "2025-08-31" - -[cost] -input = 30.000 -output = 180.000 -cache_read = 0 -cache_write = 0 - -[[cost.tiers]] -tier = { size = 272_000 } -input = 60.000 -output = 270.000 - -[limit] -context = 1_050_000 -input = 922_000 -output = 128_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/302ai/models/gpt-5.5.toml b/providers/302ai/models/gpt-5.5.toml new file mode 100644 index 00000000000..b4c4f7e0f22 --- /dev/null +++ b/providers/302ai/models/gpt-5.5.toml @@ -0,0 +1,6 @@ +base_model = "openai/gpt-5.5" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] + +[cost] +input = 5.0 +output = 30.0 diff --git a/providers/302ai/models/gpt-5.6-luna-pro.toml b/providers/302ai/models/gpt-5.6-luna-pro.toml new file mode 100644 index 00000000000..0ab31b46ca9 --- /dev/null +++ b/providers/302ai/models/gpt-5.6-luna-pro.toml @@ -0,0 +1,8 @@ +# 302.AI model SKU routing to GPT-5.6 Pro reasoning tier (published at same token pricing in 302.AI API catalog) +base_model = "openai/gpt-5.6-luna" +name = "gpt-5.6-luna-pro" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 0.2 +output = 1.2 diff --git a/providers/302ai/models/gpt-5.6-luna.toml b/providers/302ai/models/gpt-5.6-luna.toml new file mode 100644 index 00000000000..578fd4f5146 --- /dev/null +++ b/providers/302ai/models/gpt-5.6-luna.toml @@ -0,0 +1,6 @@ +base_model = "openai/gpt-5.6-luna" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 0.2 +output = 1.2 diff --git a/providers/302ai/models/gpt-5.6-sol-pro.toml b/providers/302ai/models/gpt-5.6-sol-pro.toml new file mode 100644 index 00000000000..545e5b69ac5 --- /dev/null +++ b/providers/302ai/models/gpt-5.6-sol-pro.toml @@ -0,0 +1,9 @@ +# Cost: 302.AI bills Sol Pro at GPT-5.5 rates ($5.000/$30.000 per MTok), per live catalog https://api.302.ai/v1/models (retrieved 2026-09-08) +# 302.AI model SKU routing to GPT-5.6 Pro reasoning tier (published at same token pricing in 302.AI API catalog) +base_model = "openai/gpt-5.6-sol" +name = "gpt-5.6-sol-pro" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 5.0 +output = 30.0 diff --git a/providers/302ai/models/gpt-5.6-sol.toml b/providers/302ai/models/gpt-5.6-sol.toml new file mode 100644 index 00000000000..20133f6c2f9 --- /dev/null +++ b/providers/302ai/models/gpt-5.6-sol.toml @@ -0,0 +1,7 @@ +# Cost: 302.AI bills Sol at GPT-5.5 rates ($5.000/$30.000 per MTok, intentionally above OpenAI list $4/$20), per live catalog https://api.302.ai/v1/models (retrieved 2026-09-08) +base_model = "openai/gpt-5.6-sol" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 5.0 +output = 30.0 diff --git a/providers/302ai/models/gpt-5.6-terra-pro.toml b/providers/302ai/models/gpt-5.6-terra-pro.toml new file mode 100644 index 00000000000..2a80d5735cd --- /dev/null +++ b/providers/302ai/models/gpt-5.6-terra-pro.toml @@ -0,0 +1,8 @@ +# 302.AI model SKU routing to GPT-5.6 Pro reasoning tier (published at same token pricing in 302.AI API catalog) +base_model = "openai/gpt-5.6-terra" +name = "gpt-5.6-terra-pro" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 2.0 +output = 12.0 diff --git a/providers/302ai/models/gpt-5.6-terra.toml b/providers/302ai/models/gpt-5.6-terra.toml new file mode 100644 index 00000000000..7732618c97c --- /dev/null +++ b/providers/302ai/models/gpt-5.6-terra.toml @@ -0,0 +1,6 @@ +base_model = "openai/gpt-5.6-terra" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 2.0 +output = 12.0 diff --git a/providers/302ai/models/gpt-6-astra.toml b/providers/302ai/models/gpt-6-astra.toml new file mode 100644 index 00000000000..015f6c3436f --- /dev/null +++ b/providers/302ai/models/gpt-6-astra.toml @@ -0,0 +1,6 @@ +base_model = "openai/gpt-6-astra" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 10.0 +output = 50.0 diff --git a/providers/302ai/models/grok-4-1-fast-non-reasoning.toml b/providers/302ai/models/grok-4-1-fast-non-reasoning.toml deleted file mode 100644 index cf2d24ec30b..00000000000 --- a/providers/302ai/models/grok-4-1-fast-non-reasoning.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "grok-4-1-fast-non-reasoning" -description = "Fast Grok model for responsive chat, reasoning, and tool-assisted work" -release_date = "2025-11-20" -last_updated = "2025-11-20" -attachment = true -reasoning = false -temperature = true -tool_call = true -open_weights = false -knowledge = "2025-06" - -[cost] -input = 0.200 -output = 0.500 - -[limit] -context = 2_000_000 -output = 30_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/302ai/models/grok-4.20-beta-0309-non-reasoning.toml b/providers/302ai/models/grok-4.20-beta-0309-non-reasoning.toml deleted file mode 100644 index eb5149eb845..00000000000 --- a/providers/302ai/models/grok-4.20-beta-0309-non-reasoning.toml +++ /dev/null @@ -1,21 +0,0 @@ -name = "grok-4.20-beta-0309-non-reasoning" -description = "Grok model for agentic tool use, reasoning, coding, and live assistance" -release_date = "2026-03-16" -last_updated = "2026-03-16" -attachment = true -reasoning = false -temperature = true -tool_call = true -open_weights = false - -[cost] -input = 2.000 -output = 6.000 - -[limit] -context = 2_000_000 -output = 30_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/302ai/models/grok-4.20-multi-agent-beta-0309.toml b/providers/302ai/models/grok-4.20-multi-agent-beta-0309.toml deleted file mode 100644 index f70f1911f2e..00000000000 --- a/providers/302ai/models/grok-4.20-multi-agent-beta-0309.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "grok-4.20-multi-agent-beta-0309" -description = "Grok model for agentic tool use, reasoning, coding, and live assistance" -release_date = "2026-03-16" -last_updated = "2026-03-16" -attachment = true -reasoning = true -reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh"] }] -temperature = true -tool_call = true -open_weights = false - -[cost] -input = 2.000 -output = 6.000 - -[limit] -context = 2_000_000 -output = 30_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/302ai/models/grok-4.3.toml b/providers/302ai/models/grok-4.3.toml new file mode 100644 index 00000000000..70000f8b6e7 --- /dev/null +++ b/providers/302ai/models/grok-4.3.toml @@ -0,0 +1,6 @@ +base_model = "xai/grok-4.3" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] + +[cost] +input = 1.25 +output = 2.5 diff --git a/providers/302ai/models/grok-4.5.toml b/providers/302ai/models/grok-4.5.toml new file mode 100644 index 00000000000..bb8d4854b50 --- /dev/null +++ b/providers/302ai/models/grok-4.5.toml @@ -0,0 +1,6 @@ +base_model = "xai/grok-4.5" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[cost] +input = 2.0 +output = 6.0 diff --git a/providers/302ai/models/grok-4.6.toml b/providers/302ai/models/grok-4.6.toml new file mode 100644 index 00000000000..1189356448a --- /dev/null +++ b/providers/302ai/models/grok-4.6.toml @@ -0,0 +1,6 @@ +base_model = "xai/grok-4.6" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh"] }] + +[cost] +input = 2.0 +output = 6.0 diff --git a/providers/302ai/models/kimi-k2-thinking-turbo.toml b/providers/302ai/models/kimi-k2-thinking-turbo.toml deleted file mode 100644 index 77bf3b84325..00000000000 --- a/providers/302ai/models/kimi-k2-thinking-turbo.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "kimi-k2-thinking-turbo" -description = "Kimi reasoning model for long-horizon research, planning, and tool use" -release_date = "2025-09-05" -last_updated = "2025-09-05" -attachment = false -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -open_weights = false -knowledge = "2025-06" - -[cost] -input = 1.265 -output = 9.119 - -[limit] -context = 262_144 -output = 262_144 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/302ai/models/kimi-k2.5.toml b/providers/302ai/models/kimi-k2.5.toml new file mode 100644 index 00000000000..c482a507010 --- /dev/null +++ b/providers/302ai/models/kimi-k2.5.toml @@ -0,0 +1,10 @@ +# Toggle: thinking.type = enabled|disabled +base_model = "moonshotai/kimi-k2.5" +reasoning_options = [{ type = "toggle" }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.66 +output = 3.3 diff --git a/providers/302ai/models/kimi-k2.6.toml b/providers/302ai/models/kimi-k2.6.toml new file mode 100644 index 00000000000..b528d6ec1ac --- /dev/null +++ b/providers/302ai/models/kimi-k2.6.toml @@ -0,0 +1,10 @@ +# Toggle: thinking.type = enabled|disabled +base_model = "moonshotai/kimi-k2.6" +reasoning_options = [{ type = "toggle" }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.95 +output = 4.0 diff --git a/providers/302ai/models/kimi-k2.7-code.toml b/providers/302ai/models/kimi-k2.7-code.toml new file mode 100644 index 00000000000..10e5c19b665 --- /dev/null +++ b/providers/302ai/models/kimi-k2.7-code.toml @@ -0,0 +1,9 @@ +base_model = "moonshotai/kimi-k2.7-code" +reasoning_options = [] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.95 +output = 4.0 diff --git a/providers/302ai/models/kimi-k3.toml b/providers/302ai/models/kimi-k3.toml new file mode 100644 index 00000000000..58faa62ebbd --- /dev/null +++ b/providers/302ai/models/kimi-k3.toml @@ -0,0 +1,11 @@ +# Toggle: thinking.type = enabled|disabled +# Effort: output_config.effort = low|high|max +base_model = "moonshotai/kimi-k3" +reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 3.0 +output = 15.0 diff --git a/providers/302ai/models/o3.toml b/providers/302ai/models/o3.toml new file mode 100644 index 00000000000..9293fda41fe --- /dev/null +++ b/providers/302ai/models/o3.toml @@ -0,0 +1,6 @@ +base_model = "openai/o3" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[cost] +input = 2.0 +output = 8.0 diff --git a/providers/302ai/models/qwen-flash.toml b/providers/302ai/models/qwen-flash.toml deleted file mode 100644 index fc1229a8733..00000000000 --- a/providers/302ai/models/qwen-flash.toml +++ /dev/null @@ -1,21 +0,0 @@ -name = "Qwen-Flash" -description = "Efficient Qwen model for fast chat, extraction, and high-volume workloads" -release_date = "2025-07-28" -last_updated = "2025-07-28" -attachment = false -reasoning = false -temperature = true -tool_call = true -open_weights = false - -[cost] -input = 0.022 -output = 0.220 - -[limit] -context = 1_000_000 -output = 32_768 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/302ai/models/qwen-max-latest.toml b/providers/302ai/models/qwen-max-latest.toml deleted file mode 100644 index 24b7786be31..00000000000 --- a/providers/302ai/models/qwen-max-latest.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Qwen-Max-Latest" -description = "Flagship Qwen model for complex reasoning, coding, and agentic workflows" -family = "qwen" -release_date = "2024-04-03" -last_updated = "2025-01-25" -attachment = false -reasoning = false -temperature = true -tool_call = true -open_weights = false -knowledge = "2024-11" - -[cost] -input = 0.343 -output = 1.372 - -[limit] -context = 131_072 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/302ai/models/qwen-plus.toml b/providers/302ai/models/qwen-plus.toml deleted file mode 100644 index dd7d49fcc52..00000000000 --- a/providers/302ai/models/qwen-plus.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Qwen-Plus" -description = "Qwen instruction model for multilingual chat, reasoning, and tool use" -family = "qwen" -release_date = "2024-07-23" -last_updated = "2024-07-23" -attachment = false -reasoning = false -temperature = true -tool_call = true -open_weights = false -knowledge = "2024-10" - -[cost] -input = 0.120 -output = 1.200 - -[limit] -context = 1_000_000 -output = 32_768 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/302ai/models/qwen3.5-35b-a3b.toml b/providers/302ai/models/qwen3.5-35b-a3b.toml new file mode 100644 index 00000000000..1b1a4828188 --- /dev/null +++ b/providers/302ai/models/qwen3.5-35b-a3b.toml @@ -0,0 +1,8 @@ +# Toggle: enable_thinking true|false +# Budget: thinking_budget (integer reasoning tokens) +base_model = "alibaba/qwen3.5-35b-a3b" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 0.06 +output = 0.46 diff --git a/providers/302ai/models/qwen3.5-plus.toml b/providers/302ai/models/qwen3.5-plus.toml new file mode 100644 index 00000000000..c1ad4c7c8b2 --- /dev/null +++ b/providers/302ai/models/qwen3.5-plus.toml @@ -0,0 +1,8 @@ +# Toggle: enable_thinking true|false +# Budget: thinking_budget (integer reasoning tokens) +base_model = "alibaba/qwen3.5-plus" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 0.12 +output = 0.69 diff --git a/providers/302ai/models/qwen3.6-35b-a3b.toml b/providers/302ai/models/qwen3.6-35b-a3b.toml new file mode 100644 index 00000000000..6c5d231a6d8 --- /dev/null +++ b/providers/302ai/models/qwen3.6-35b-a3b.toml @@ -0,0 +1,8 @@ +# Toggle: enable_thinking true|false +# Budget: thinking_budget (integer reasoning tokens) +base_model = "alibaba/qwen3.6-35b-a3b" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 0.283 +output = 1.705 diff --git a/providers/302ai/models/qwen3.6-flash.toml b/providers/302ai/models/qwen3.6-flash.toml new file mode 100644 index 00000000000..dd520724603 --- /dev/null +++ b/providers/302ai/models/qwen3.6-flash.toml @@ -0,0 +1,8 @@ +# Toggle: enable_thinking true|false +# Budget: thinking_budget (integer reasoning tokens) +base_model = "alibaba/qwen3.6-flash" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 0.188 +output = 1.133 diff --git a/providers/302ai/models/qwen3.6-plus.toml b/providers/302ai/models/qwen3.6-plus.toml new file mode 100644 index 00000000000..04cfea256f5 --- /dev/null +++ b/providers/302ai/models/qwen3.6-plus.toml @@ -0,0 +1,8 @@ +# Toggle: enable_thinking true|false +# Budget: thinking_budget (integer reasoning tokens) +base_model = "alibaba/qwen3.6-plus" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 0.3 +output = 1.8 diff --git a/providers/302ai/models/qwen3.7-max-2026-06-08.toml b/providers/302ai/models/qwen3.7-max-2026-06-08.toml new file mode 100644 index 00000000000..2c84633b1c2 --- /dev/null +++ b/providers/302ai/models/qwen3.7-max-2026-06-08.toml @@ -0,0 +1,9 @@ +# Toggle: enable_thinking true|false +# Budget: thinking_budget (integer reasoning tokens) +base_model = "alibaba/qwen3.7-max" +name = "qwen3.7-max-2026-06-08" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 1.8 +output = 5.3 diff --git a/providers/302ai/models/qwen3.7-max.toml b/providers/302ai/models/qwen3.7-max.toml new file mode 100644 index 00000000000..799e725392d --- /dev/null +++ b/providers/302ai/models/qwen3.7-max.toml @@ -0,0 +1,8 @@ +# Toggle: enable_thinking true|false +# Budget: thinking_budget (integer reasoning tokens) +base_model = "alibaba/qwen3.7-max" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 1.8 +output = 5.3 diff --git a/providers/302ai/models/qwen3.7-plus.toml b/providers/302ai/models/qwen3.7-plus.toml new file mode 100644 index 00000000000..a2e6f1b47b2 --- /dev/null +++ b/providers/302ai/models/qwen3.7-plus.toml @@ -0,0 +1,8 @@ +# Toggle: enable_thinking true|false +# Budget: thinking_budget (integer reasoning tokens) +base_model = "alibaba/qwen3.7-plus" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 0.285 +output = 1.15 diff --git a/providers/302ai/models/qwen3.8-flash.toml b/providers/302ai/models/qwen3.8-flash.toml new file mode 100644 index 00000000000..490e46b5d0d --- /dev/null +++ b/providers/302ai/models/qwen3.8-flash.toml @@ -0,0 +1,16 @@ +# Toggle: enable_thinking true|false +# Effort: reasoning_effort = low|medium|xhigh +# Budget: thinking_budget (integer reasoning tokens) +base_model = "alibaba/qwen3.8-flash" +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["low", "medium", "xhigh"] }, + { type = "budget_tokens" }, +] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.18 +output = 0.564 diff --git a/providers/302ai/models/qwen3.8-max.toml b/providers/302ai/models/qwen3.8-max.toml new file mode 100644 index 00000000000..bbc2ee40100 --- /dev/null +++ b/providers/302ai/models/qwen3.8-max.toml @@ -0,0 +1,16 @@ +# Toggle: enable_thinking true|false +# Effort: reasoning_effort = low|medium|xhigh +# Budget: thinking_budget (integer reasoning tokens) +base_model = "alibaba/qwen3.8-max" +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["low", "medium", "xhigh"] }, + { type = "budget_tokens" }, +] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 2.16 +output = 6.36 diff --git a/providers/302ai/provider.toml b/providers/302ai/provider.toml index aa9acd503e1..9dc6df7b22f 100644 --- a/providers/302ai/provider.toml +++ b/providers/302ai/provider.toml @@ -1,11 +1,16 @@ name = "302.AI" env = ["302AI_API_KEY"] npm = "@ai-sdk/openai-compatible" -# Reasoning HTTP format (accessed 2026-06-25): -# Audited POST https://api.302.ai/v1/chat/completions. The provider's API guide -# documents model/messages only; no reasoning toggle, effort, or numeric budget -# request field is documented. Do not infer passthrough from upstream APIs. -# Sources: -# https://doc.302.ai/ +# Relay provider: 302.AI proxies multi-model lab endpoints (OpenAI, Anthropic, Google, GLM, Qwen, xAI, Moonshot, Xiaomi, MiniMax, etc.). +# Reasoning controls verified live against POST https://api.302.ai/v1/chat/completions (2026-09-08): +# - OpenAI / GPT: `reasoning_effort` (parsed upstream; invalid values rejected with 400) +# - Qwen / Alibaba: `enable_thinking` true|false, `reasoning_effort`, `thinking_budget` (probed; `reasoning_content` returned) +# - Moonshot / Kimi: `thinking.type = enabled|disabled` (probed; `reasoning_content` returned) +# - GLM / Zhipu: `thinking.type = enabled|disabled` (same field as verified Kimi pattern) +# - Anthropic / Claude: `output_config.effort` and optional `thinking.type` (lab-mapped, not probed) +# - Google / Gemini, xAI / Grok: `reasoning_effort` (lab-mapped) +# - MiniMax: `thinking.type = enabled|disabled` (M3, lab-mapped) +# - Xiaomi / MiMo: entries removed 2026-09-08; IDs rejected even plain chat completions (-10003) +# - Dedicated thinking IDs (e.g. *-thinking, MiniMax M2.x): [] doc = "https://doc.302.ai" api = "https://api.302.ai/v1" diff --git a/providers/abliteration-ai/models/abliterated-model-large-v2.toml b/providers/abliteration-ai/models/abliterated-model-large-v2.toml new file mode 100644 index 00000000000..9d7d47eb436 --- /dev/null +++ b/providers/abliteration-ai/models/abliterated-model-large-v2.toml @@ -0,0 +1,42 @@ +# Sources (accessed 2026-08-31): +# - Model card, limits (1M context, 999,990 max output), capabilities, GLM-5.3 base: +# https://docs.abliteration.ai/models +# - Reasoning modes and per-endpoint request fields: +# https://docs.abliteration.ai/capabilities/thinking +# - Pricing ($5 per 1M tokens input/output, $0.50 per 1M cached input): +# https://docs.abliteration.ai/pricing +# https://abliteration.ai/pricing +# - Launch announcement (GLM-5.3 base, FP8 hosting, benchmarks): +# https://abliteration.ai/blog/introducing-abliterated-model-large-v2 +name = "Abliterated Model Large V2" +description = "GLM-5.3 model abliterated and finetuned for cyber, ML red teaming, and agent testing" +release_date = "2026-08-29" +last_updated = "2026-08-31" +attachment = false +reasoning = true +tool_call = true +structured_output = true +temperature = true +open_weights = false + +# Three distinct reasoning depths: low, high, max (default: max). +# Reasoning cannot be disabled on this model: "none" and {"thinking": false} +# map to low and hide the trace, so there is no toggle option. Other ladder +# values are accepted aliases: minimal -> low, medium -> high, xhigh -> max. +[[reasoning_options]] +type = "effort" # API: {"reasoning_effort": ""} on /v1/chat/completions +values = ["low", "high", "max"] + +[cost] +input = 5.00 +output = 5.00 +cache_read = 0.50 + +[limit] +context = 1_000_000 +input = 1_000_000 +output = 999_990 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/above/logo.svg b/providers/above/logo.svg new file mode 100644 index 00000000000..00d80ac6381 --- /dev/null +++ b/providers/above/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/providers/above/models/deepseek-v4-flash-vision-exp.toml b/providers/above/models/deepseek-v4-flash-vision-exp.toml new file mode 100644 index 00000000000..76b0d5df561 --- /dev/null +++ b/providers/above/models/deepseek-v4-flash-vision-exp.toml @@ -0,0 +1,28 @@ +# Passthrough to the official DeepSeek API. +# Toggle: `thinking.type = enabled|disabled`; effort: `reasoning_effort = low|high|max` +# (Flash maps requested low→low). https://api-docs.deepseek.com/guides/thinking_mode/ +# Off-peak rate from the CURRENT DeepSeek price sheet effective 2026-08-16 +# (flash $0.22/$0.007/$0.66, pro $0.66/$0.022/$1.98 off-peak) plus a flat 10%; +# peak (weekdays 01:00-04:00 and 06:00-10:00 UTC, Beijing-time weekends +# off-peak) is 2x. https://api-docs.deepseek.com/quick_start/pricing/ +# (accessed 2026-08-29; note first-party catalog entries predate 2026-08-16). +# Toggle verified end-to-end on this host 2026-08-29. +# Reasoning tokens billed at the output rate. +base_model = "deepseek/deepseek-v4-flash-vision-exp" +name = "DeepSeek V4 Flash Vision (Exp)" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.242 +output = 0.726 +reasoning = 0.726 +cache_read = 0.0077 diff --git a/providers/above/models/deepseek-v4-flash.toml b/providers/above/models/deepseek-v4-flash.toml new file mode 100644 index 00000000000..9b61b977bf8 --- /dev/null +++ b/providers/above/models/deepseek-v4-flash.toml @@ -0,0 +1,32 @@ +# Passthrough to the official DeepSeek API. Since 2026-09-10 04:00 UTC the +# `deepseek-v4-flash` id is served by DeepSeek-V4.1-Flash and billed at the +# Flash price, so the base is the V4.1 lab entry. Image input verified +# end-to-end through above.dev on 2026-09-11. +# Sources: +# https://api-docs.deepseek.com/quick_start/pricing (upstream Flash rate: +# $0.15 in / $0.003 cache-hit / $0.60 out per MTok, off-peak; peak is 2x on +# weekdays 01:00-04:00 and 06:00-10:00 UTC; Beijing-time weekends off-peak) +# https://api-docs.deepseek.com/guides/thinking_mode/ (toggle +# `thinking.type = enabled|disabled`, effort `reasoning_effort = low|high|max`) +# https://above.dev/docs (above resells every upstream rate at a flat x1.10, +# listed here at the off-peak rate; cost headers on each response) +# V4 Pro is deliberately unchanged: DeepSeek cancelled its retirement on +# 2026-09-11 "in response to user demand". Reasoning billed at the output rate. +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4 Flash" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.165 +output = 0.66 +reasoning = 0.66 +cache_read = 0.0033 diff --git a/providers/above/models/deepseek-v4-pro.toml b/providers/above/models/deepseek-v4-pro.toml new file mode 100644 index 00000000000..f0d6b4759e9 --- /dev/null +++ b/providers/above/models/deepseek-v4-pro.toml @@ -0,0 +1,29 @@ +# Passthrough to the official DeepSeek API. +# Toggle: `thinking.type = enabled|disabled`; effort: `reasoning_effort = high|max` +# (Pro maps requested low→high, so low is not a real level). +# https://api-docs.deepseek.com/guides/thinking_mode/ +# Off-peak rate from the CURRENT DeepSeek price sheet effective 2026-08-16 +# (flash $0.22/$0.007/$0.66, pro $0.66/$0.022/$1.98 off-peak) plus a flat 10%; +# peak (weekdays 01:00-04:00 and 06:00-10:00 UTC, Beijing-time weekends +# off-peak) is 2x. https://api-docs.deepseek.com/quick_start/pricing/ +# (accessed 2026-08-29; note first-party catalog entries predate 2026-08-16). +# Toggle verified end-to-end on this host 2026-08-29. +# Reasoning tokens billed at the output rate. +base_model = "deepseek/deepseek-v4-pro-0813" +name = "DeepSeek V4 Pro" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.726 +output = 2.178 +reasoning = 2.178 +cache_read = 0.0242 diff --git a/providers/above/models/glm-5.2-fast.toml b/providers/above/models/glm-5.2-fast.toml new file mode 100644 index 00000000000..aa8d211a43b --- /dev/null +++ b/providers/above/models/glm-5.2-fast.toml @@ -0,0 +1,18 @@ +# Passthrough to the Fireworks fast router (~2x standard throughput). +# Effort: `reasoning_effort = none|high|max`; "none" disables thinking +# (`chat_template_kwargs = {"thinking": false}` also works as an alternate). +# Verified end-to-end on this host 2026-08-29. +base_model = "zhipuai/glm-5.2" +name = "GLM 5.2 Fast" + +[[reasoning_options]] +type = "effort" +values = ["none", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 2.31 +output = 7.26 +cache_read = 0.231 diff --git a/providers/above/models/glm-5.2.toml b/providers/above/models/glm-5.2.toml new file mode 100644 index 00000000000..75a9b2317be --- /dev/null +++ b/providers/above/models/glm-5.2.toml @@ -0,0 +1,18 @@ +# Passthrough to Fireworks serverless. +# Effort: `reasoning_effort = none|high|max`; "none" disables thinking +# (`chat_template_kwargs = {"thinking": false}` also works as an alternate). +# Verified end-to-end on this host 2026-08-29. +base_model = "zhipuai/glm-5.2" +name = "GLM 5.2" + +[[reasoning_options]] +type = "effort" +values = ["none", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1.54 +output = 4.84 +cache_read = 0.154 diff --git a/providers/above/models/glm-5.3-flash.toml b/providers/above/models/glm-5.3-flash.toml new file mode 100644 index 00000000000..13710139108 --- /dev/null +++ b/providers/above/models/glm-5.3-flash.toml @@ -0,0 +1,24 @@ +# Passthrough to Fireworks serverless (accounts/fireworks/models/glm-5p3-flash). +# Thinking-only model: reasoning cannot be disabled. Same surface as the +# Fireworks peer entry: effort high|max (Fireworks collapses requested +# low/medium to high; the wire accepts them but they select no distinct tier, +# and "none" is rejected with a 400 — verified live 2026-08-30). Image input +# verified; video/pdf are not supported on this host. Costs are the Fireworks +# rate ($0.15/$0.029/$0.50) plus a flat 10%. +base_model = "zhipuai/glm-5.3-flash" +name = "GLM 5.3 Flash" + +[[reasoning_options]] +type = "effort" +values = ["high", "max"] + +[modalities] +input = ["text", "image"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.165 +output = 0.55 +cache_read = 0.0319 diff --git a/providers/above/models/mimo-v2.5-pro.toml b/providers/above/models/mimo-v2.5-pro.toml new file mode 100644 index 00000000000..682e84d3866 --- /dev/null +++ b/providers/above/models/mimo-v2.5-pro.toml @@ -0,0 +1,19 @@ +# Passthrough to the official MiMo API (api.xiaomimimo.com). +# Toggle: `thinking.type = enabled|disabled`, as providers/xiaomi; verified +# end-to-end on this host 2026-08-29. +# RMB upstream (CNY 3/0.025/6 per MTok) +# converted at 6.5 CNY/USD (operator rate set 2026-07, spot ~6.79; buffer +# covers FX drift), then a flat 10% markup; rounded to 4dp. Checked 2026-08-29. +base_model = "xiaomi/mimo-v2.5-pro" +name = "MiMo V2.5 Pro" + +[[reasoning_options]] +type = "toggle" + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.5077 +output = 1.0154 +cache_read = 0.0042 diff --git a/providers/above/models/qwen3.8-max.toml b/providers/above/models/qwen3.8-max.toml new file mode 100644 index 00000000000..40b109783ce --- /dev/null +++ b/providers/above/models/qwen3.8-max.toml @@ -0,0 +1,27 @@ +# Passthrough to Fireworks serverless. +# Toggle: `reasoning_effort = "none"` disables thinking (also accepts +# `chat_template_kwargs = {"thinking": false}`); verified end-to-end on this +# host 2026-08-29. The Alibaba first-party effort levels and budget_tokens are +# not exposed by this host. +# Host deltas vs the lab base: image input verified end-to-end 2026-08-23 +# (video/pdf not supported on this host); output capped at 32,768. +base_model = "alibaba/qwen3.8-max" +name = "Qwen 3.8 Max" +attachment = false + +[[reasoning_options]] +type = "toggle" + +[interleaved] +field = "reasoning_content" + +[modalities] +input = ["text", "image"] + +[limit] +output = 32_768 + +[cost] +input = 2.2 +output = 6.6 +cache_read = 0.275 diff --git a/providers/above/provider.toml b/providers/above/provider.toml new file mode 100644 index 00000000000..8b921569ed2 --- /dev/null +++ b/providers/above/provider.toml @@ -0,0 +1,11 @@ +name = "above.dev" +env = ["ABOVE_API_KEY"] +npm = "@ai-sdk/openai-compatible" +# OpenAI-compatible gateway selling upstream cost plus a flat 10% on every +# token class, with the full upstream cache-hit discount passed through. +# DeepSeek models use time-of-day pricing (peak = 2x, weekdays 01:00-04:00 and +# 06:00-10:00 UTC; weekends off-peak); costs below are the off-peak rate. +# Every response reports its exact cost in the `x-cost-usd` header. +# https://above.dev/llms.txt +api = "https://api.above.dev/v1" +doc = "https://above.dev/docs" diff --git a/providers/agentrouter/models/deepseek-v4-flash.toml b/providers/agentrouter/models/deepseek-v4-flash.toml new file mode 100644 index 00000000000..53933a438bb --- /dev/null +++ b/providers/agentrouter/models/deepseek-v4-flash.toml @@ -0,0 +1,6 @@ +# Catalog and endpoint support: https://agentrouter.org/api/pricing +# AgentRouter publishes relative token ratios, not USD prices, so cost is intentionally omitted. +# Toggle: thinking.type = enabled|disabled +# Effort: reasoning_effort = low|high|max +base_model = "deepseek/deepseek-v4-flash" +reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "high", "max"] }] diff --git a/providers/agentrouter/models/glm-5.3.toml b/providers/agentrouter/models/glm-5.3.toml new file mode 100644 index 00000000000..83ef4f53d00 --- /dev/null +++ b/providers/agentrouter/models/glm-5.3.toml @@ -0,0 +1,5 @@ +# Catalog and endpoint support: https://agentrouter.org/api/pricing +# AgentRouter publishes relative token ratios, not USD prices, so cost is intentionally omitted. +# GLM-5.3 always reasons (thinking cannot be disabled); effort levels low|high|max, default max. +base_model = "zhipuai/glm-5.3" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] diff --git a/providers/ai21/logo.svg b/providers/ai21/logo.svg new file mode 100644 index 00000000000..b929375b0d2 --- /dev/null +++ b/providers/ai21/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/providers/ai21/models/jamba-large.toml b/providers/ai21/models/jamba-large.toml new file mode 100644 index 00000000000..dfa0edbeab9 --- /dev/null +++ b/providers/ai21/models/jamba-large.toml @@ -0,0 +1,5 @@ +base_model = "ai21/jamba-large" + +[cost] +input = 2.00 +output = 8.00 diff --git a/providers/ai21/models/jamba-mini.toml b/providers/ai21/models/jamba-mini.toml new file mode 100644 index 00000000000..164715bac23 --- /dev/null +++ b/providers/ai21/models/jamba-mini.toml @@ -0,0 +1,5 @@ +base_model = "ai21/jamba-mini" + +[cost] +input = 0.20 +output = 0.40 diff --git a/providers/ai21/provider.toml b/providers/ai21/provider.toml new file mode 100644 index 00000000000..3dd6911976e --- /dev/null +++ b/providers/ai21/provider.toml @@ -0,0 +1,5 @@ +name = "AI21 Labs" +env = ["AI21_API_KEY"] +npm = "@ai-sdk/openai-compatible" +api = "https://api.ai21.com/studio/v1" +doc = "https://docs.ai21.com/docs/jamba-foundation-models" diff --git a/providers/aiand/logo.svg b/providers/aiand/logo.svg index 0a0726cda82..e36f046a233 100644 --- a/providers/aiand/logo.svg +++ b/providers/aiand/logo.svg @@ -1,5 +1,4 @@ - - - - + + + diff --git a/providers/aiand/models/deepseek-ai/deepseek-v4-flash.toml b/providers/aiand/models/deepseek-ai/deepseek-v4-flash.toml index 97421518a57..50018b3d802 100644 --- a/providers/aiand/models/deepseek-ai/deepseek-v4-flash.toml +++ b/providers/aiand/models/deepseek-ai/deepseek-v4-flash.toml @@ -1,19 +1,22 @@ -# Source: https://docs.aiand.com/models/catalog/ (USD list prices; accessed -# 2026-07-24). GET /v1/models reports context_window = 1048576 (the catalog -# rounds this to "1M" and the shared base model to 1_000_000), so the exact -# figure is overridden here. -# reasoning_effort verified by live probe on 2026-07-24: all six documented -# values accepted ("none" produces no reasoning content, "high" does); -# invalid values rejected with 400 (negative control). +# Effort: reasoning_effort = none|high|max +# Pricing: GET https://api.aiand.com/v1/api.json (accessed 2026-09-14); synced hourly by the aiand module. +# Docs: https://docs.aiand.com/models/catalog/ +# Live probe 2026-09-14: none|high|max → 200; minimal|low|medium|xhigh → 400. +# context_window = 1048576 on this host overrides the lab's 1_000_000. +# Reasoning side channel: message.reasoning_content base_model = "deepseek/deepseek-v4-flash" [[reasoning_options]] type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh"] +values = ["none", "high", "max"] + +[interleaved] +field = "reasoning_content" [cost] input = 0.15 output = 0.25 +cache_read = 0.08 [limit] context = 1_048_576 diff --git a/providers/aiand/models/deepseek-ai/deepseek-v4-pro.toml b/providers/aiand/models/deepseek-ai/deepseek-v4-pro.toml index 8a8cff1112e..4beec143d13 100644 --- a/providers/aiand/models/deepseek-ai/deepseek-v4-pro.toml +++ b/providers/aiand/models/deepseek-ai/deepseek-v4-pro.toml @@ -1,18 +1,22 @@ -# Source: https://docs.aiand.com/models/catalog/ (USD list prices; accessed -# 2026-07-24). GET /v1/models reports context_window = 1048576 (the catalog -# rounds this to "1M" and the shared base model to 1_000_000), so the exact -# figure is overridden here. -# reasoning_effort verified by live probe on 2026-07-24: all six documented -# values accepted; invalid values rejected with 400 (negative control). +# Effort: reasoning_effort = none|high|max +# Pricing: GET https://api.aiand.com/v1/api.json (accessed 2026-09-14); synced hourly by the aiand module. +# Docs: https://docs.aiand.com/models/catalog/ +# Live probe 2026-09-14: none|high|max → 200; minimal|low|medium|xhigh → 400. +# context_window = 1048576 on this host overrides the lab's 1_000_000. +# Reasoning side channel: message.reasoning_content base_model = "deepseek/deepseek-v4-pro" [[reasoning_options]] type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh"] +values = ["none", "high", "max"] + +[interleaved] +field = "reasoning_content" [cost] input = 1 output = 2.5 +cache_read = 0.25 [limit] context = 1_048_576 diff --git a/providers/aiand/models/google/gemma-4-31b-it.toml b/providers/aiand/models/google/gemma-4-31b-it.toml index b006191cefe..834d710d9db 100644 --- a/providers/aiand/models/google/gemma-4-31b-it.toml +++ b/providers/aiand/models/google/gemma-4-31b-it.toml @@ -1,21 +1,22 @@ -# Source: https://docs.aiand.com/models/catalog/ (USD list prices; accessed -# 2026-07-24) and live probes against api.aiand.com on the same date. -# Verified by direct test: image (data URL), video (video_url), and PDF -# (Files API purpose="document", referenced by file_id) inputs all accepted. -# ai& converts PDFs to per-page images at upload, so "pdf" is a provider -# input modality here even though the base model itself is not PDF-native. -# reasoning_effort verified by live probe on 2026-07-24: all six documented -# values accepted ("none" produces no reasoning content, "high" does); -# invalid values rejected with 400 (negative control). +# Effort: reasoning_effort = none|high +# Pricing: GET https://api.aiand.com/v1/api.json (accessed 2026-09-14); synced hourly by the aiand module. +# Docs: https://docs.aiand.com/models/catalog/ +# Live probe 2026-09-14: none|high → 200; minimal|low|medium|xhigh|max → 400. +# Modalities: image, video, and PDF accepted on this host (2026-07-24 probes). +# Reasoning side channel: message.reasoning_content base_model = "google/gemma-4-31b-it" [[reasoning_options]] type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh"] +values = ["none", "high"] + +[interleaved] +field = "reasoning_content" [cost] input = 0.2 output = 0.5 +cache_read = 0.05 [modalities] input = ["text", "image", "video", "pdf"] diff --git a/providers/aiand/models/moonshotai/kimi-k2.7-code.toml b/providers/aiand/models/moonshotai/kimi-k2.7-code.toml index 2e553c932ff..de7ff0f4876 100644 --- a/providers/aiand/models/moonshotai/kimi-k2.7-code.toml +++ b/providers/aiand/models/moonshotai/kimi-k2.7-code.toml @@ -1,19 +1,24 @@ -# Source: https://docs.aiand.com/models/catalog/ (USD list prices; accessed -# 2026-07-24) and live probes against api.aiand.com on the same date. -# Verified by direct test: image and PDF (Files API, file_id) inputs are -# accepted; video is rejected ("does not support video input"), so modalities -# are overridden from the shared base model's text+image+video. -# reasoning_effort verified by live probe on 2026-07-24: all six documented -# values accepted; invalid values rejected with 400 (negative control). +# Effort: reasoning_effort = high (always-on) +# Pricing: GET https://api.aiand.com/v1/api.json (accessed 2026-09-14); synced hourly by the aiand module. +# Docs: https://docs.aiand.com/models/catalog/ +# Live probe 2026-09-14: high → 200; none|minimal|low|medium|xhigh|max → 400. +# Modalities: image + PDF accepted; video rejected (2026-07-24 probes). +# temperature = true: the host accepts the parameter (live probe 2026-09-14: 200 at 0.0 and 1.8); the lab file records Moonshot's own API as false. +# Reasoning side channel: message.reasoning_content base_model = "moonshotai/kimi-k2.7-code" +temperature = true + +[interleaved] +field = "reasoning_content" [[reasoning_options]] type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh"] +values = ["high"] [cost] input = 0.75 output = 3.5 +cache_read = 0.2 [modalities] input = ["text", "image", "pdf"] diff --git a/providers/aiand/models/moonshotai/kimi-k3.toml b/providers/aiand/models/moonshotai/kimi-k3.toml index 4e7d75f2c83..0a249611cd8 100644 --- a/providers/aiand/models/moonshotai/kimi-k3.toml +++ b/providers/aiand/models/moonshotai/kimi-k3.toml @@ -1,17 +1,15 @@ -# Source: GET https://api.aiand.com/v1/models (USD list prices; accessed -# 2026-07-28). Pricing is aiand-specific: $3.00 input, $0.50 cache_read, -# $12.50 output (differs from Moonshot official rates). -# Modalities: text + image + pdf accepted per GET /v1/models; video rejected -# ("does not support video input") — overridden from shared base -# text+image+video. PDF kept: sibling aiand Moonshot entries (kimi-k2.6, -# kimi-k2.7-code) include pdf after catalog/probe evidence; aiand treats -# PDF as a provider-level Files API modality. -# reasoning_effort: K3 backend accepts only low/high/max per official docs -# (https://platform.kimi.ai/docs/guide/kimi-k3-quickstart). The aiand gateway -# schema lists none/minimal/low/medium/high/xhigh/max but K3 rejects -# none/minimal/medium/xhigh with 400. aiand does not expose a separate off -# toggle; K3 always reasons. +# Effort: reasoning_effort = low|high|max (always-on; no none) +# Pricing: GET https://api.aiand.com/v1/api.json (accessed 2026-09-14); synced hourly by the aiand module. +# Docs: https://docs.aiand.com/models/catalog/ +# Live probe 2026-09-14: low|high|max → 200; none|minimal|medium|xhigh → 400. +# Modalities: text + image + PDF; video rejected on this host. +# temperature = true: the host accepts the parameter (live probe 2026-09-14: 200 at 0.0 and 1.8); the lab file records Moonshot's own API as false. +# Reasoning side channel: message.reasoning_content base_model = "moonshotai/kimi-k3" +temperature = true + +[interleaved] +field = "reasoning_content" [[reasoning_options]] type = "effort" diff --git a/providers/aiand/models/motif-technologies/motif-3.toml b/providers/aiand/models/motif-technologies/motif-3.toml index b2a69ab0fc4..e8b372d3399 100644 --- a/providers/aiand/models/motif-technologies/motif-3.toml +++ b/providers/aiand/models/motif-technologies/motif-3.toml @@ -1,23 +1,21 @@ -name = "Motif 3" -description = "Motif 3 is a large-scale, decoder-only Mixture-of-Experts (MoE) language model with 314 billion total parameters and 13.2 billion parameters activated per token." -release_date = "2026-08-12" -last_updated = "2026-08-12" -attachment = false -reasoning = true -temperature = false -tool_call = false -structured_output = false -open_weights = false -reasoning_options = [] +# Effort: reasoning_effort = none|high +# Pricing: GET https://api.aiand.com/v1/api.json (accessed 2026-09-14); synced hourly by the aiand module. +# Docs: https://docs.aiand.com/models/catalog/ +# Live probe 2026-09-14: none|high → 200; minimal|low|medium|xhigh|max → 400. +# Lab facts (release date, open weights, tool calling, temperature) live in +# models/motif-technologies/motif-3.toml. structured_output stays false: live +# probe 2026-09-14 — response_format json_schema is ignored (prose reply). +# Reasoning side channel: message.reasoning_content +base_model = "motif-technologies/motif-3" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] [cost] input = 0.5 output = 2 - -[limit] -context = 262_144 -output = 262_144 - -[modalities] -input = ["text"] -output = ["text"] +cache_read = 0.2 diff --git a/providers/aiand/models/openai/gpt-oss-120b.toml b/providers/aiand/models/openai/gpt-oss-120b.toml index d7bfcb30588..c36d59ddb11 100644 --- a/providers/aiand/models/openai/gpt-oss-120b.toml +++ b/providers/aiand/models/openai/gpt-oss-120b.toml @@ -1,14 +1,18 @@ -# Source: https://docs.aiand.com/models/catalog/ (accessed 2026-07-18) -# reasoning_effort verified by live probe on 2026-07-24: the backend rejects -# "none", "minimal", and "xhigh" with 400 ("Supported values are: high, -# medium, low"), so the array is narrowed from the gateway-wide documented -# set. Invalid values also rejected with 400 (negative control). +# Effort: reasoning_effort = low|medium|high +# Pricing: GET https://api.aiand.com/v1/api.json (accessed 2026-09-14); synced hourly by the aiand module. +# Docs: https://docs.aiand.com/models/catalog/ +# Live probe 2026-09-14: low|medium|high → 200; none|minimal|xhigh|max → 400. +# Reasoning side channel: message.reasoning_content base_model = "openai/gpt-oss-120b" [[reasoning_options]] type = "effort" values = ["low", "medium", "high"] +[interleaved] +field = "reasoning_content" + [cost] input = 0.15 output = 0.60 +cache_read = 0.08 diff --git a/providers/aiand/models/qwen/qwen3.6-27b.toml b/providers/aiand/models/qwen/qwen3.6-27b.toml index 4859ce77a0b..114703224f2 100644 --- a/providers/aiand/models/qwen/qwen3.6-27b.toml +++ b/providers/aiand/models/qwen/qwen3.6-27b.toml @@ -1,22 +1,22 @@ -# Source: GET https://api.aiand.com/v1/models (USD list prices; accessed -# 2026-07-28). The catalog Quick-picks section still lists this model as free, -# but the live endpoint reports input = $0.32 / output = $3.20 per 1M tokens, -# so pricing is taken from the API. -# ai&'s deployment rejects image input ("does not support image input") and -# the catalog lists no vision/video/audio capability, so modalities are -# overridden from the shared base model's text+image+video+audio to text-only, -# and attachment is set to false to match. -# reasoning_effort verified by live probe on 2026-07-24: all six documented -# values accepted; invalid values rejected with 400 (negative control). +# Effort: reasoning_effort = none|high +# Pricing: GET https://api.aiand.com/v1/api.json (accessed 2026-09-14); synced hourly by the aiand module. +# Docs: https://docs.aiand.com/models/catalog/ +# Live probe 2026-09-14: none|high → 200; minimal|low|medium|xhigh|max → 400. +# Modalities: image, video, and PDF accepted on this host (catalog vision|video|document). +# Reasoning side channel: message.reasoning_content base_model = "alibaba/qwen3.6-27b" [[reasoning_options]] type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh"] +values = ["none", "high"] + +[interleaved] +field = "reasoning_content" [cost] input = 0.32 output = 3.2 +cache_read = 0.2 [modalities] input = ["text", "image", "video", "pdf"] diff --git a/providers/aiand/models/qwen/qwen3.8-27b.toml b/providers/aiand/models/qwen/qwen3.8-27b.toml new file mode 100644 index 00000000000..cdb5d7d084c --- /dev/null +++ b/providers/aiand/models/qwen/qwen3.8-27b.toml @@ -0,0 +1,24 @@ +# Effort: reasoning_effort = none|low|medium|xhigh +# Pricing: GET https://api.aiand.com/v1/api.json (accessed 2026-09-14); synced hourly by the aiand module. +# Docs: https://docs.aiand.com/models/catalog/ +# Live probe 2026-09-14: none|low|medium|xhigh → 200; minimal|max → 400. high also +# returns 200 via ai&'s announced substitution (X-Reasoning-Effort: xhigh) and is +# deliberately not listed. +# Modalities: image, video, and PDF accepted on this host (catalog vision|video|document). +# Reasoning side channel: message.reasoning_content +base_model = "alibaba/qwen3.8-27b" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "xhigh"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.4 +output = 3 +cache_read = 0.2 + +[modalities] +input = ["text", "image", "video", "pdf"] diff --git a/providers/aiand/models/zai-org/glm-5.2.toml b/providers/aiand/models/zai-org/glm-5.2.toml index 2464bc134c0..3c8e485f19d 100644 --- a/providers/aiand/models/zai-org/glm-5.2.toml +++ b/providers/aiand/models/zai-org/glm-5.2.toml @@ -1,18 +1,22 @@ -# Source: https://docs.aiand.com/models/catalog/ (USD list prices; accessed -# 2026-07-24). GET /v1/models reports context_window = 1048576 (the catalog -# rounds this to "1M" and the shared base model to 1_000_000), so the exact -# figure is overridden here. -# reasoning_effort verified by live probe on 2026-07-24: all six documented -# values accepted; invalid values rejected with 400 (negative control). +# Effort: reasoning_effort = none|high|max +# Pricing: GET https://api.aiand.com/v1/api.json (accessed 2026-09-14); synced hourly by the aiand module. +# Docs: https://docs.aiand.com/models/catalog/ +# Live probe 2026-09-14: none|high|max → 200; minimal|low|medium|xhigh → 400. +# context_window = 1048576 on this host overrides the lab's 1_000_000. +# Reasoning side channel: message.reasoning_content base_model = "zhipuai/glm-5.2" [[reasoning_options]] type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh"] +values = ["none", "high", "max"] + +[interleaved] +field = "reasoning_content" [cost] input = 1 output = 4 +cache_read = 0.3 [limit] context = 1_048_576 diff --git a/providers/aiand/models/zai-org/glm-5.3.toml b/providers/aiand/models/zai-org/glm-5.3.toml new file mode 100644 index 00000000000..29850bab7b8 --- /dev/null +++ b/providers/aiand/models/zai-org/glm-5.3.toml @@ -0,0 +1,22 @@ +# Effort: reasoning_effort = low|high|max (always-on; no none) +# Pricing: GET https://api.aiand.com/v1/api.json (accessed 2026-09-14); synced hourly by the aiand module. +# Docs: https://docs.aiand.com/models/catalog/ +# Live probe 2026-09-14: low|high|max → 200; none|minimal|medium|xhigh → 400. +# context_window = 1048576 on this host overrides the lab's 1_000_000. +# Reasoning side channel: message.reasoning_content +base_model = "zhipuai/glm-5.3" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1 +output = 4 +cache_read = 0.3 + +[limit] +context = 1_048_576 diff --git a/providers/aihubmix/models/claude-fable-5-1.toml b/providers/aihubmix/models/claude-fable-5-1.toml new file mode 100644 index 00000000000..b29ef102523 --- /dev/null +++ b/providers/aihubmix/models/claude-fable-5-1.toml @@ -0,0 +1,18 @@ +# Toggle: $.thinking.type = "enabled"|"disabled"|"adaptive" on the Anthropic-compatible +# /v1/messages path; $.enable_thinking = true|false on /v1/chat/completions. +# Effort: $.output_config.effort on /v1/messages; $.reasoning_effort on /v1/chat/completions. +# https://docs.aihubmix.com/cn/api-reference/anthropic-compatible/create-a-message +# Pricing, context window, max output and the effort levels come from +# https://aihubmix.com/api/v1/models?type=llm (accessed 2026-09-18), which lists this +# model on both faces. Cache read is a quarter of Claude Fable 5's rate; input, output +# and cache write are unchanged from it, matching the sibling entry in this directory. +base_model = "anthropic/claude-fable-5-1" +structured_output = true +reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] +interleaved = true + +[cost] +input = 11 +output = 55 +cache_read = 0.275 +cache_write = 13.75 diff --git a/providers/aihubmix/models/deepseek-v4-flash-0731-fast.toml b/providers/aihubmix/models/deepseek-v4-flash-0731-fast.toml new file mode 100644 index 00000000000..db3b1b7c1e9 --- /dev/null +++ b/providers/aihubmix/models/deepseek-v4-flash-0731-fast.toml @@ -0,0 +1,24 @@ +# Toggle: +# $.enable_thinking = true|false on the OpenAI-compatible /v1/chat/completions path (verified live 2026-09-11); +# $.thinking.type = "enabled"|"disabled"|"adaptive" on /v1/messages; $.generationConfig.thinkingConfig on the Gemini path. +# Effort: low|high|max +# $.reasoning_effort on /v1/chat/completions (alias $.reasoning.effort, which is also the Responses field); +# $.output_config.effort on /v1/messages, subject to model support. +# https://docs.aihubmix.com/cn/api/unified-inference +base_model = "deepseek/deepseek-v4-flash-0731" +name = "DeepSeek V4 Flash 0731 Fast" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.28 +output = 1.4 +cache_read = 0.07 diff --git a/providers/aihubmix/models/deepseek-v4-flash-0731.toml b/providers/aihubmix/models/deepseek-v4-flash-0731.toml new file mode 100644 index 00000000000..2659d18ff9a --- /dev/null +++ b/providers/aihubmix/models/deepseek-v4-flash-0731.toml @@ -0,0 +1,13 @@ +# Toggle: enable_thinking = true|false +# Effort: reasoning_effort = low|high|max +# AIHubMix effort levels returned HTTP 200 (validated 2026-08-31T04:17:24Z). +base_model = "deepseek/deepseek-v4-flash-0731" +reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.142 +output = 0.284 +cache_read = 0.0284 diff --git a/providers/aihubmix/models/deepseek-v4-flash-vision-exp.toml b/providers/aihubmix/models/deepseek-v4-flash-vision-exp.toml new file mode 100644 index 00000000000..3cd40d48314 --- /dev/null +++ b/providers/aihubmix/models/deepseek-v4-flash-vision-exp.toml @@ -0,0 +1,23 @@ +# Toggle: +# $.enable_thinking = true|false on the OpenAI-compatible /v1/chat/completions path (verified live 2026-09-11); +# $.thinking.type = "enabled"|"disabled"|"adaptive" on /v1/messages; $.generationConfig.thinkingConfig on the Gemini path. +# Effort: low|high|max +# $.reasoning_effort on /v1/chat/completions (alias $.reasoning.effort, which is also the Responses field); +# $.output_config.effort on /v1/messages, subject to model support. +# https://docs.aihubmix.com/cn/api/unified-inference +base_model = "deepseek/deepseek-v4-flash-vision-exp" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.155 +output = 0.62 +cache_read = 0.0031 diff --git a/providers/aihubmix/models/deepseek-v4-pro-0813.toml b/providers/aihubmix/models/deepseek-v4-pro-0813.toml new file mode 100644 index 00000000000..fbe29803f4c --- /dev/null +++ b/providers/aihubmix/models/deepseek-v4-pro-0813.toml @@ -0,0 +1,13 @@ +# Toggle: enable_thinking = true|false +# Effort: reasoning_effort = high|max +# AIHubMix effort levels returned HTTP 200 (validated 2026-08-31T04:17:24Z). +base_model = "deepseek/deepseek-v4-pro-0813" +reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.6918 +output = 2.0754 +cache_read = 0.023058 diff --git a/providers/aihubmix/models/deepseek-v4.1-flash.toml b/providers/aihubmix/models/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..026ceb4058b --- /dev/null +++ b/providers/aihubmix/models/deepseek-v4.1-flash.toml @@ -0,0 +1,16 @@ +# AIHubMix pricing per https://aihubmix.com/model/deepseek-v4.1-flash (accessed 2026-09-11). +# Base/off-peak rate: input $0.155, output $0.62, cache $0.0031 per 1M tokens. +# Peak rate (01:00-04:00, 06:00-10:00 UTC) is 2x: input $0.3098, output $1.2392, cache $0.0062. +# Toggle: enable_thinking = true|false +# Effort: reasoning_effort = low|high|max +# AIHubMix effort levels returned HTTP 200 (validated 2026-08-31T04:17:24Z). +base_model = "deepseek/deepseek-v4.1-flash" +reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.155 +output = 0.62 +cache_read = 0.0031 \ No newline at end of file diff --git a/providers/aihubmix/models/gemini-3.1-flash-image.toml b/providers/aihubmix/models/gemini-3.1-flash-image.toml new file mode 100644 index 00000000000..1c51818cb89 --- /dev/null +++ b/providers/aihubmix/models/gemini-3.1-flash-image.toml @@ -0,0 +1,17 @@ +# Sources (accessed 2026-09-20): +# https://aihubmix.com/api/v1/models?type=llm (USD per million tokens) +# https://ai.google.dev/gemini-api/docs/models/gemini-3.1-flash-image +# Effort: reasoning_effort = minimal|high on /v1/chat/completions. +# Gemini native: generationConfig.thinkingConfig.thinkingLevel uses the corresponding uppercase levels. +# https://docs.aihubmix.com/cn/api/unified-inference +base_model = "google/gemini-3.1-flash-image" + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["minimal", "high"] + +[cost] +input = 0.5 +output = 3 diff --git a/providers/aihubmix/models/gemini-3.1-flash-lite-image.toml b/providers/aihubmix/models/gemini-3.1-flash-lite-image.toml new file mode 100644 index 00000000000..14141e81cc6 --- /dev/null +++ b/providers/aihubmix/models/gemini-3.1-flash-lite-image.toml @@ -0,0 +1,18 @@ +# Sources (accessed 2026-09-20): +# https://aihubmix.com/api/v1/models?type=llm (USD per million tokens) +# https://ai.google.dev/gemini-api/docs/models/gemini-3.1-flash-lite-image +# Effort: reasoning_effort = minimal|high on /v1/chat/completions. +# Gemini native: generationConfig.thinkingConfig.thinkingLevel uses the corresponding uppercase levels. +# https://docs.aihubmix.com/cn/api/unified-inference +base_model = "google/gemini-3.1-flash-lite-image" + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["minimal", "high"] + +[cost] +input = 0.25 +output = 1.5 +cache_read = 0.025 diff --git a/providers/aihubmix/models/gemini-3.5-flash-lite.toml b/providers/aihubmix/models/gemini-3.5-flash-lite.toml new file mode 100644 index 00000000000..19c43bfae2f --- /dev/null +++ b/providers/aihubmix/models/gemini-3.5-flash-lite.toml @@ -0,0 +1,19 @@ +# Sources (accessed 2026-09-20): +# AIHubMix catalog row model_id=gemini-3.5-flash-lite publishes +# pricing={"input":0.3,"output":2.499999,"cache_read":0.03}. +# Preserve the host's exact published price; Google's 2.50 is a different host. +# https://aihubmix.com/api/v1/models?type=llm (USD per million tokens) +# https://ai.google.dev/gemini-api/docs/thinking +# Effort: reasoning_effort = minimal|low|medium|high on /v1/chat/completions. +# Gemini native: generationConfig.thinkingConfig.thinkingLevel uses the corresponding uppercase levels. +# https://docs.aihubmix.com/cn/api/unified-inference +base_model = "google/gemini-3.5-flash-lite" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high"] + +[cost] +input = 0.3 +output = 2.499999 +cache_read = 0.03 diff --git a/providers/aihubmix/models/gemini-3.6-flash.toml b/providers/aihubmix/models/gemini-3.6-flash.toml new file mode 100644 index 00000000000..d9c9722442d --- /dev/null +++ b/providers/aihubmix/models/gemini-3.6-flash.toml @@ -0,0 +1,14 @@ +# Effort: minimal|low|medium|high +# $.reasoning_effort on /v1/chat/completions (alias $.reasoning.effort, which is also the Responses field); +# $.output_config.effort on /v1/messages, subject to model support. +# https://docs.aihubmix.com/cn/api/unified-inference +base_model = "google/gemini-3.6-flash" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high"] + +[cost] +input = 1.5 +output = 7.5 +cache_read = 0.15 diff --git a/providers/aihubmix/models/gemini-3.8-flash.toml b/providers/aihubmix/models/gemini-3.8-flash.toml new file mode 100644 index 00000000000..9657ff10785 --- /dev/null +++ b/providers/aihubmix/models/gemini-3.8-flash.toml @@ -0,0 +1,14 @@ +# Effort: low|medium|high +# $.reasoning_effort on /v1/chat/completions (alias $.reasoning.effort, which is also the Responses field); +# $.output_config.effort on /v1/messages, subject to model support. +# https://docs.aihubmix.com/cn/api/unified-inference +base_model = "google/gemini-3.8-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.75 +output = 3.75 +cache_read = 0.075 diff --git a/providers/aihubmix/models/glm-5.3-flash.toml b/providers/aihubmix/models/glm-5.3-flash.toml new file mode 100644 index 00000000000..58250ec9ab4 --- /dev/null +++ b/providers/aihubmix/models/glm-5.3-flash.toml @@ -0,0 +1,17 @@ +base_model = "zhipuai/glm-5.3-flash" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.11268 +output = 0.39438 +cache_read = 0.02817 + +[limit] +output = 128_000 + +[modalities] +input = ["text", "image", "video"] +output = ["text"] diff --git a/providers/aihubmix/models/glm-5.3.toml b/providers/aihubmix/models/glm-5.3.toml new file mode 100644 index 00000000000..f9de29a855e --- /dev/null +++ b/providers/aihubmix/models/glm-5.3.toml @@ -0,0 +1,13 @@ +base_model = "zhipuai/glm-5.3" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1.1268 +output = 3.9438 +cache_read = 0.2817 + +[limit] +output = 128_000 diff --git a/providers/aihubmix/models/gpt-6-astra.toml b/providers/aihubmix/models/gpt-6-astra.toml new file mode 100644 index 00000000000..b005bff58b8 --- /dev/null +++ b/providers/aihubmix/models/gpt-6-astra.toml @@ -0,0 +1,22 @@ +# Effort: low|medium|high|xhigh|max +# $.reasoning_effort on /v1/chat/completions (alias $.reasoning.effort, which is also the Responses field); +# $.output_config.effort on /v1/messages, subject to model support. +# https://docs.aihubmix.com/cn/api/unified-inference +base_model = "openai/gpt-6-astra" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 20 +output = 75 +cache_read = 2 +cache_write = 25 diff --git a/providers/aihubmix/models/grok-4.6.toml b/providers/aihubmix/models/grok-4.6.toml new file mode 100644 index 00000000000..5264268a96f --- /dev/null +++ b/providers/aihubmix/models/grok-4.6.toml @@ -0,0 +1,7 @@ +base_model = "xai/grok-4.6" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh"] }] + +[cost] +input = 2 +output = 6 +cache_read = 0.5 diff --git a/providers/aihubmix/models/hy3.toml b/providers/aihubmix/models/hy3.toml new file mode 100644 index 00000000000..a5f55cbba88 --- /dev/null +++ b/providers/aihubmix/models/hy3.toml @@ -0,0 +1,20 @@ +# Sources (accessed 2026-09-20): +# https://aihubmix.com/api/v1/models?type=llm (USD per million tokens) +# https://huggingface.co/tencent/Hy3 +# Effort: reasoning_effort = none|low|high on /v1/chat/completions. +# Off is effort=none; AIHubMix no_think is normalized to none, so no separate toggle. +# https://docs.aihubmix.com/cn/api/unified-inference +base_model = "tencent/hy3" +structured_output = true + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high"] + +[cost] +input = 0.1562 +output = 0.6248 +cache_read = 0.03905 diff --git a/providers/aihubmix/models/hy4-preview.toml b/providers/aihubmix/models/hy4-preview.toml new file mode 100644 index 00000000000..dc0f2ad6ac7 --- /dev/null +++ b/providers/aihubmix/models/hy4-preview.toml @@ -0,0 +1,28 @@ +# Off is effort=none; graded levels — no toggle. The same off elsewhere: +# $.enable_thinking = true|false on the OpenAI-compatible /v1/chat/completions path (verified live 2026-09-11); +# $.thinking.type = "enabled"|"disabled"|"adaptive" on /v1/messages; $.generationConfig.thinkingConfig on the Gemini path. +# Effort: none|high +# $.reasoning_effort on /v1/chat/completions (alias $.reasoning.effort, which is also the Responses field); +# $.output_config.effort on /v1/messages, subject to model support. +# Budget: +# integer $.reasoning.max_tokens on /v1/chat/completions; $.thinking.budget_tokens >= 1024 on /v1/messages; +# integer $.generationConfig.thinkingConfig.thinkingBudget on the Gemini path (-1 dynamic, 0 off where supported); +# the Responses path carries effort but has no reasoning-token budget field. +# https://docs.aihubmix.com/cn/api/unified-inference +base_model = "tencent/hy4-preview" +structured_output = true + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.845 +output = 2.535 +cache_read = 0.04225 diff --git a/providers/aihubmix/models/longcat-2.0.toml b/providers/aihubmix/models/longcat-2.0.toml new file mode 100644 index 00000000000..4f0b9ae311d --- /dev/null +++ b/providers/aihubmix/models/longcat-2.0.toml @@ -0,0 +1,17 @@ +# Sources (accessed 2026-09-20): +# https://aihubmix.com/api/v1/models?type=llm (USD per million tokens) +# https://github.com/meituan-longcat/LongCat-2.0 +# Toggle: enable_thinking = true|false on /v1/chat/completions. +# https://docs.aihubmix.com/cn/api/unified-inference +base_model = "meituan/longcat-2.0" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.7746 +output = 3.0984 +cache_read = 0.015492 diff --git a/providers/aihubmix/models/minimax-m3.toml b/providers/aihubmix/models/minimax-m3.toml new file mode 100644 index 00000000000..2103f7586f0 --- /dev/null +++ b/providers/aihubmix/models/minimax-m3.toml @@ -0,0 +1,17 @@ +# Sources (accessed 2026-09-20): +# https://aihubmix.com/api/v1/models?type=llm (USD per million tokens) +# https://platform.minimaxi.com/docs/api-reference/text-chat-openai.md +# Toggle: enable_thinking = true|false on /v1/chat/completions. +# https://docs.aihubmix.com/cn/api/unified-inference +base_model = "minimax/MiniMax-M3" +structured_output = true + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.288 +output = 1.152 diff --git a/providers/aihubmix/models/muse-spark-1.1.toml b/providers/aihubmix/models/muse-spark-1.1.toml new file mode 100644 index 00000000000..f0c00f709bf --- /dev/null +++ b/providers/aihubmix/models/muse-spark-1.1.toml @@ -0,0 +1,20 @@ +# Sources (accessed 2026-09-20): +# AIHubMix catalog row model_id=muse-spark-1.1 declares +# input_modalities="text,image,video,audio,pdf". Audio is a host-catalog override +# relative to the lab entry; this is a catalog declaration, not an inference test. +# https://aihubmix.com/api/v1/models?type=llm (USD per million tokens) +# https://dev.meta.ai/docs/models/ +# Effort: reasoning_effort = minimal|low|medium|high|xhigh on /v1/chat/completions. +# https://docs.aihubmix.com/cn/api/unified-inference +base_model = "meta/muse-spark-1.1" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 1.375 +output = 4.675 + +[modalities] +input = ["text", "image", "video", "audio", "pdf"] diff --git a/providers/aihubmix/models/muse-spark-1.2.toml b/providers/aihubmix/models/muse-spark-1.2.toml new file mode 100644 index 00000000000..01d1fa8c78a --- /dev/null +++ b/providers/aihubmix/models/muse-spark-1.2.toml @@ -0,0 +1,14 @@ +# Sources (accessed 2026-09-20): +# https://aihubmix.com/api/v1/models?type=llm (USD per million tokens) +# https://dev.meta.ai/docs/overview/ +# Effort: reasoning_effort = minimal|low|medium|high|xhigh on /v1/chat/completions. +# https://docs.aihubmix.com/cn/api/unified-inference +base_model = "meta/muse-spark-1.2" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 1.375 +output = 4.675 diff --git a/providers/aihubmix/models/muse-spark-1.3.toml b/providers/aihubmix/models/muse-spark-1.3.toml new file mode 100644 index 00000000000..21edfd6c678 --- /dev/null +++ b/providers/aihubmix/models/muse-spark-1.3.toml @@ -0,0 +1,14 @@ +# Effort: minimal|low|medium|high|xhigh +# $.reasoning_effort on /v1/chat/completions (alias $.reasoning.effort, which is also the Responses field); +# $.output_config.effort on /v1/messages, subject to model support. +# https://docs.aihubmix.com/cn/api/unified-inference +base_model = "meta/muse-spark-1.3" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 1.375 +output = 4.675 +cache_read = 0.165 diff --git a/providers/aihubmix/models/ox-alpha.toml b/providers/aihubmix/models/ox-alpha.toml new file mode 100644 index 00000000000..800e20046f6 --- /dev/null +++ b/providers/aihubmix/models/ox-alpha.toml @@ -0,0 +1,23 @@ +# Toggle: +# $.enable_thinking = true|false on the OpenAI-compatible /v1/chat/completions path (verified live 2026-09-11); +# $.thinking.type = "enabled"|"disabled"|"adaptive" on /v1/messages; $.generationConfig.thinkingConfig on the Gemini path. +# Effort: low|high|max +# $.reasoning_effort on /v1/chat/completions (alias $.reasoning.effort, which is also the Responses field); +# $.output_config.effort on /v1/messages, subject to model support. +# https://docs.aihubmix.com/cn/api/unified-inference +base_model = "zhipuai/glm-5.3-flash" +name = "Ox Alpha" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0 +output = 0 diff --git a/providers/aihubmix/models/qwen3.7-flash.toml b/providers/aihubmix/models/qwen3.7-flash.toml new file mode 100644 index 00000000000..3f34f7fd74f --- /dev/null +++ b/providers/aihubmix/models/qwen3.7-flash.toml @@ -0,0 +1,22 @@ +# Toggle: enable_thinking = true|false +# Budget: thinking_budget = integer reasoning tokens +base_model = "alibaba/qwen3.7-flash" +attachment = false +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens", max = 262_144 }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.0282 +output = 0.1128 +cache_read = 0.00564 +cache_write = 0.03525 + +[limit] +context = 991_000 +output = 64_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/aihubmix/models/qwen3.8-2.4t-a95b.toml b/providers/aihubmix/models/qwen3.8-2.4t-a95b.toml new file mode 100644 index 00000000000..717b12b3b19 --- /dev/null +++ b/providers/aihubmix/models/qwen3.8-2.4t-a95b.toml @@ -0,0 +1,21 @@ +# AIHubMix Models API reports text,image input (queried 2026-08-31T04:06:29Z). +# OpenAI-compatible HTTPS image input returned HTTP 200 (validated 2026-08-31T04:08:19Z). +base_model = "alibaba/qwen3.8-2.4t-a95b" +attachment = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "xhigh"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 2 +output = 6 +cache_read = 0.5 + +[limit] +context = 262_000 +output = 262_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/aihubmix/models/qwen3.8-flash.toml b/providers/aihubmix/models/qwen3.8-flash.toml new file mode 100644 index 00000000000..69e8766006b --- /dev/null +++ b/providers/aihubmix/models/qwen3.8-flash.toml @@ -0,0 +1,31 @@ +# Toggle: +# $.enable_thinking = true|false on the OpenAI-compatible /v1/chat/completions path (verified live 2026-09-11); +# $.thinking.type = "enabled"|"disabled"|"adaptive" on /v1/messages; $.generationConfig.thinkingConfig on the Gemini path. +# Effort: low|medium|xhigh +# $.reasoning_effort on /v1/chat/completions (alias $.reasoning.effort, which is also the Responses field); +# $.output_config.effort on /v1/messages, subject to model support. +# Budget: +# integer $.reasoning.max_tokens on /v1/chat/completions; $.thinking.budget_tokens >= 1024 on /v1/messages; +# integer $.generationConfig.thinkingConfig.thinkingBudget on the Gemini path (-1 dynamic, 0 off where supported); +# the Responses path carries effort but has no reasoning-token budget field. +# https://docs.aihubmix.com/cn/api/unified-inference +base_model = "alibaba/qwen3.8-flash" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.1126 +output = 0.380025 +cache_read = 0.014075 +cache_write = 0.175937 diff --git a/providers/aihubmix/models/qwen3.8-omni-flash.toml b/providers/aihubmix/models/qwen3.8-omni-flash.toml new file mode 100644 index 00000000000..8dea0f811e5 --- /dev/null +++ b/providers/aihubmix/models/qwen3.8-omni-flash.toml @@ -0,0 +1,23 @@ +# Sources (accessed 2026-09-20): +# https://aihubmix.com/api/v1/models?type=llm (USD per million tokens) +# https://www.alibabacloud.com/help/en/model-studio/qwen-omni +# Toggle: enable_thinking = true|false on /v1/chat/completions. +# Effort: reasoning_effort = low|medium|xhigh on /v1/chat/completions. +# https://docs.aihubmix.com/cn/api/unified-inference +base_model = "alibaba/qwen3.8-omni-flash" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] + +[cost] +input = 0.1126 +output = 0.380025 +cache_read = 0.014075 +cache_write = 0.175937 diff --git a/providers/aihubmix/models/step-3.7-flash.toml b/providers/aihubmix/models/step-3.7-flash.toml new file mode 100644 index 00000000000..d6dcca8c632 --- /dev/null +++ b/providers/aihubmix/models/step-3.7-flash.toml @@ -0,0 +1,18 @@ +# Sources (accessed 2026-09-20): +# https://aihubmix.com/api/v1/models?type=llm (USD per million tokens) +# https://platform.stepfun.com/docs/zh/guides/models/step-3.7-flash +# Effort: reasoning_effort = low|medium|high on /v1/chat/completions. +# https://docs.aihubmix.com/cn/api/unified-inference +base_model = "stepfun/step-3.7-flash" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.22 +output = 1.32 +cache_read = 0.044 diff --git a/providers/ainetcafe/logo.svg b/providers/ainetcafe/logo.svg new file mode 100644 index 00000000000..06147492c10 --- /dev/null +++ b/providers/ainetcafe/logo.svg @@ -0,0 +1 @@ + diff --git a/providers/ainetcafe/models/Kimi-K3.toml b/providers/ainetcafe/models/Kimi-K3.toml new file mode 100644 index 00000000000..1e5d11c4350 --- /dev/null +++ b/providers/ainetcafe/models/Kimi-K3.toml @@ -0,0 +1,24 @@ +# Effort: reasoning_effort = low|high|max (top-level OpenAI Chat field, passed through as-is). +# No toggle: thinking is always on at this gateway; thinking.type = "disabled" is accepted but ignored. +# model = "Kimi-K3" (case-sensitive at this gateway). +# Default context 256K; 1M is enabled per account on request, so the limit here is the default. +# Max output 32K per the host guides (https://ainetcafe.com/k3/guides/kilo-code.html, cline.html, openhands.html). +# Pricing: https://ainetcafe.com/k3/compare.html +base_model = "moonshotai/kimi-k3" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 2.10 +output = 10.50 +cache_read = 0.30 + +[limit] +context = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/ainetcafe/provider.toml b/providers/ainetcafe/provider.toml new file mode 100644 index 00000000000..dcce1fc1cae --- /dev/null +++ b/providers/ainetcafe/provider.toml @@ -0,0 +1,11 @@ +# ainetcafe serves Kimi K3 from its own cluster (native MXFP4 weights). +# OpenAI Chat: POST https://microquickjs.com/v1/chat/completions +# Anthropic Messages: POST https://microquickjs.com/v1/messages +# Reasoning is always on for Kimi-K3 (reasoning_content is returned; thinking.type = "disabled" +# is accepted but ignored). Depth is set with top-level reasoning_effort = low|high|max. +# Docs: https://ainetcafe.com/k3/guides/ +name = "ainetcafe" +env = ["AINETCAFE_API_KEY"] +npm = "@ai-sdk/openai-compatible" +api = "https://microquickjs.com/v1" +doc = "https://ainetcafe.com/k3/guides/" diff --git a/providers/aki-io/models/glm5.3-754b.toml b/providers/aki-io/models/glm5.3-754b.toml new file mode 100644 index 00000000000..fc20d83dccf --- /dev/null +++ b/providers/aki-io/models/glm5.3-754b.toml @@ -0,0 +1,13 @@ +base_model = "zhipuai/glm-5.3" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +# cost as described on the AKI.IO pricing page at https://aki.io/#pricing +[cost] +input = 1.00 +output = 3.50 +cache_read = 0.25 + +[limit] +context = 524_288 +output = 81_920 + diff --git a/providers/aki-io/models/kimi-k2.7-code-1100b.toml b/providers/aki-io/models/kimi-k2.7-code-1100b.toml deleted file mode 100644 index a814eda61af..00000000000 --- a/providers/aki-io/models/kimi-k2.7-code-1100b.toml +++ /dev/null @@ -1,18 +0,0 @@ -# attachment are not supported on AKI.IO for security reasons and therefore are disabled -# AKI.IO supports a reduced set of input modalities, thats why the description of the base model are overridden -base_model = "moonshotai/kimi-k2.7-code" -attachment = false -reasoning_options = [] - -# cost as described on the AKI.IO pricing page at https://aki.io/#pricing -[cost] -input = 0.86 -output = 3.00 -cache_read = 0.18 - -[limit] -context = 262_144 -output = 81_920 - -[modalities] -input = ["text", "image"] diff --git a/providers/alibaba-cn/models/deepseek-v4.1-flash.toml b/providers/alibaba-cn/models/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..6fe0ab81592 --- /dev/null +++ b/providers/alibaba-cn/models/deepseek-v4.1-flash.toml @@ -0,0 +1,27 @@ +# CNY→USD rate: 6.721845, 2026-09-18, source: https://open.er-api.com/v6/latest/USD +# Sources (accessed 2026-09-18): +# https://bailian.console.aliyun.com/cn-beijing?tab=model#/model-market/detail/deepseek-v4.1-flash?serviceSite=asia-pacific-china +# https://help.aliyun.com/zh/model-studio/deepseek-api — capability table, +# reasoning_effort ladder, max_tokens default (393_216, shared with thinking) +# https://help.aliyun.com/zh/model-studio/billing-for-model-studio — Beijing +# peak/off-peak pricing: CNY 2/1 input, 8/4 output per 1M tokens with context +# cache discount; peak price converted to USD using the rate above (off-peak +# is half). +# Hybrid reasoning: enable_thinking = true|false toggles thinking; +# reasoning_effort = low|high|max (default high) — low is only supported on +# v4.1-flash / v4-flash-0731 / v4-pro-0813, and v4.1-flash is the current +# low-tier bearer. reasoning_content streams in deltas. Responses API +# supported (Beijing and Singapore only). Limits and modalities are identical +# to the deepseek lab entry (1M context, 384_000 output, text+image input), +# so they are inherited and not restated. +base_model = "deepseek/deepseek-v4.1-flash" + +reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.29754 +output = 1.19015 +cache_read = 0.01488 diff --git a/providers/alibaba-cn/models/glm-5.1.toml b/providers/alibaba-cn/models/glm-5.1.toml index 90cb5b7dff2..e19b35f1e84 100644 --- a/providers/alibaba-cn/models/glm-5.1.toml +++ b/providers/alibaba-cn/models/glm-5.1.toml @@ -1,3 +1,9 @@ +# Chinese mainland deployment is tiered on input tokens per request; every +# token in a request bills at its tier's unit price. The 0.87/3.48 previously +# published here matches neither band; both bands below are taken from the +# vendor page. No cache-read price is published for either band, so the +# existing curated cache_read is retained on the base and not restated. +# https://www.alibabacloud.com/help/en/model-studio/model-pricing (accessed 2026-08-26) name = "GLM-5.1" description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" family = "glm" @@ -21,10 +27,15 @@ max = 131_072 field = "reasoning_content" [cost] -input = 0.87 -output = 3.48 +input = 0.825 +output = 3.301 cache_read = 0.17 +[[cost.tiers]] +tier = { type = "context", size = 32_000 } +input = 1.1 +output = 3.851 + [limit] context = 202_752 output = 128_000 diff --git a/providers/alibaba-cn/models/glm-5.3.toml b/providers/alibaba-cn/models/glm-5.3.toml new file mode 100644 index 00000000000..f6d0f6e67e3 --- /dev/null +++ b/providers/alibaba-cn/models/glm-5.3.toml @@ -0,0 +1,25 @@ +# GLM-5.3 on Alibaba Bailian (Model Studio, Beijing): always-on thinking with +# reasoning_effort low|high|max (default max). Thinking cannot be turned off +# (enable_thinking only accepts true; passing false errors) and there is no +# thinking_budget — so a single effort option, no toggle, no budget. +# reasoning_content is streamed in deltas. +# Pricing: Beijing CNY 8 / 28 / 2 (cache hit) per 1M tokens, same list price +# as glm-5.2 on the same host (see providers/alibaba-cn/models/glm-5.2.toml). +# Limits and modalities are identical to the zhipuai lab entry +# (1M context, 131_072 output, text-only), so they are inherited and not restated. +# https://bailian.console.aliyun.com/cn-beijing?tab=model#/model-market/detail/glm-5.3?serviceSite=asia-pacific-china +# https://docs.bigmodel.cn/cn/guide/models/text/glm-5.3 +base_model = "zhipuai/glm-5.3" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1.1 +output = 3.851 +cache_read = 0.275 +cache_write = 0 diff --git a/providers/alibaba-cn/models/glm-5.toml b/providers/alibaba-cn/models/glm-5.toml index c2c6aa7f5aa..5d48f4a4ce4 100644 --- a/providers/alibaba-cn/models/glm-5.toml +++ b/providers/alibaba-cn/models/glm-5.toml @@ -1,3 +1,7 @@ +# Chinese mainland deployment is tiered on input tokens per request; every +# token in a request bills at its tier's unit price. The 0.86/3.15 previously +# published here is the 32K200k context tier. +base_model = "xai/grok-4.6" +status = "beta" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh"] + +[limit] +context = 200_000 +output = 128_000 diff --git a/providers/baseten/models/deepseek-ai/DeepSeek-V4.1-Flash.toml b/providers/baseten/models/deepseek-ai/DeepSeek-V4.1-Flash.toml new file mode 100644 index 00000000000..5ec2411504b --- /dev/null +++ b/providers/baseten/models/deepseek-ai/DeepSeek-V4.1-Flash.toml @@ -0,0 +1,25 @@ +# Baseten documents top-level reasoning_effort for DeepSeek V4.1 Flash with +# values none | low | high (default) | max. Reasoning is enabled by default; +# reasoning_effort: "none" disables it. Reasoning output is returned in +# reasoning_content. +# Baseten serves at most 32k output tokens for this model on Model APIs. +# https://www.baseten.co/library/deepseek-v41-flash/ +# https://docs.baseten.co/inference/model-apis/overview +# https://docs.baseten.co/inference/model-apis/reasoning +base_model = "deepseek/deepseek-v4.1-flash" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.03 + +[limit] +context = 1_048_576 +output = 32_768 diff --git a/providers/baseten/models/zai-org/GLM-5.3-Fast.toml b/providers/baseten/models/zai-org/GLM-5.3-Fast.toml new file mode 100644 index 00000000000..bbee46d8d36 --- /dev/null +++ b/providers/baseten/models/zai-org/GLM-5.3-Fast.toml @@ -0,0 +1,20 @@ +# Effort: top-level reasoning_effort = none|low|high|max (default high). +# none requests a direct answer but may still return short reasoning_content; +# chat_template_args.enable_thinking=false is rejected, so no separate toggle. +# https://docs.baseten.co/inference/model-apis/reasoning +base_model = "zhipuai/glm-5.3" +name = "GLM 5.3 Fast" +description = "GLM vision model for visual reasoning, documents, and multimodal agents" +attachment = true +reasoning_options = [{ type = "effort", values = ["none", "low", "high", "max"] }] + +[cost] +input = 2.1 +output = 6.6 + +[limit] +context = 1_048_576 +output = 262_144 + +[modalities] +input = ["text", "image"] diff --git a/providers/baseten/models/zai-org/GLM-5.3-Flash.toml b/providers/baseten/models/zai-org/GLM-5.3-Flash.toml new file mode 100644 index 00000000000..55e13e50ab6 --- /dev/null +++ b/providers/baseten/models/zai-org/GLM-5.3-Flash.toml @@ -0,0 +1,22 @@ +# Effort: reasoning_effort = low|high|max; reasoning cannot be disabled. +# https://docs.baseten.co/inference/model-apis/reasoning +base_model = "zhipuai/glm-5.3-flash" +name = "GLM 5.3 Flash" +description = "GLM vision model for visual reasoning, documents, and multimodal agents" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.15 +output = 0.5 + +[limit] +context = 1_048_576 + +[modalities] +input = ["text", "image"] diff --git a/providers/baseten/models/zai-org/GLM-5.3.toml b/providers/baseten/models/zai-org/GLM-5.3.toml new file mode 100644 index 00000000000..3a5a5ce1e12 --- /dev/null +++ b/providers/baseten/models/zai-org/GLM-5.3.toml @@ -0,0 +1,26 @@ +# Effort: reasoning_effort = low|high|max; reasoning cannot be disabled. +# https://docs.baseten.co/inference/model-apis/reasoning +# Pricing: https://www.baseten.co/pricing +base_model = "zhipuai/glm-5.3" +name = "GLM 5.3" +description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" +attachment = true + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.14 + +[limit] +context = 1_048_576 +output = 262_144 + +[modalities] +input = ["text", "image"] diff --git a/providers/berget/models/Qwen/Qwen3.8-27B-FP8.toml b/providers/berget/models/Qwen/Qwen3.8-27B-FP8.toml new file mode 100644 index 00000000000..4fcaf5e45d7 --- /dev/null +++ b/providers/berget/models/Qwen/Qwen3.8-27B-FP8.toml @@ -0,0 +1,28 @@ +# Qwen3.8 27B FP8 served on Berget AI's Swedish infrastructure. +# Multimodal (text + image), reasoning on by default with effort levels +# none|low|medium|xhigh (matched against the live API 2026-09-01). +# https://api.berget.ai/openapi.json +# +# Berget bills in EUR: 0.4 EUR/M input, 3 EUR/M output. +# Converted to USD at 1.1596 (ECB rate, 2026-08-31): +# 0.4 EUR/M -> 0.46 USD/M input +# 3 EUR/M -> 3.48 USD/M output +base_model = "alibaba/qwen3.8-27b" +last_updated = "2026-09-01" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "xhigh"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.46 +output = 3.48 + +[limit] +output = 65_536 + +[modalities] +input = ["text", "image"] diff --git a/providers/berget/models/meta-llama/Llama-3.3-70B-Instruct.toml b/providers/berget/models/meta-llama/Llama-3.3-70B-Instruct.toml deleted file mode 100644 index 791ddd2eb47..00000000000 --- a/providers/berget/models/meta-llama/Llama-3.3-70B-Instruct.toml +++ /dev/null @@ -1,27 +0,0 @@ -name = "Llama 3.3 70B Instruct" -description = "Open Llama instruction model for multilingual chat, reasoning, and coding" -family = "llama" -release_date = "2025-04-27" -last_updated = "2025-04-27" -attachment = false -reasoning = true -# Berget documents no meaningful toggle, effort subset, or budget for this model. -# https://api.berget.ai/openapi.json -reasoning_options = [] -temperature = true -knowledge = "2023-12" -tool_call = true -structured_output = true -open_weights = true - -[cost] -input = 0.99 -output = 0.99 - -[limit] -context = 128_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/berget/models/mistralai/Mistral-Medium-3.5-128B.toml b/providers/berget/models/mistralai/Mistral-Medium-3.5-128B.toml deleted file mode 100644 index 4185041f1cd..00000000000 --- a/providers/berget/models/mistralai/Mistral-Medium-3.5-128B.toml +++ /dev/null @@ -1,28 +0,0 @@ -name = "Mistral Medium 3.5 128B" -description = "Mistral model for multilingual chat, reasoning, and tool-assisted workflows" -family = "mistral-medium" -release_date = "2026-04-29" -last_updated = "2026-04-29" -attachment = true -reasoning = true -# Berget's schema accepts none/low/medium/high, but documents no Mistral-specific -# mapping; schema acceptance alone does not establish meaningful support. -# https://api.berget.ai/openapi.json -reasoning_options = [{ type = "effort", values = ["none", "high"] }] -temperature = true -knowledge = "2026-04" -tool_call = true -structured_output = true -open_weights = true - -[cost] -input = 1.65 -output = 5.5 - -[limit] -context = 262_144 -output = 131_072 - -[modalities] -input = ["image", "text"] -output = ["text"] diff --git a/providers/berget/models/moonshotai/Kimi-K2.6.toml b/providers/berget/models/moonshotai/Kimi-K2.6.toml deleted file mode 100644 index 6d5e7455434..00000000000 --- a/providers/berget/models/moonshotai/Kimi-K2.6.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "moonshotai/kimi-k2.6" -# Kimi K2.6 can disable reasoning with reasoning_effort="none" or -# thinking.type="disabled"; enabled/adaptive are also schema-accepted. -# https://api.berget.ai/openapi.json -reasoning_options = [{ type = "toggle" }] -release_date = "2026-05-07" -last_updated = "2026-05-07" - -[interleaved] -field = "reasoning_content" - -[cost] -input = 0.83 -output = 3.85 -cache_read = 0.16 diff --git a/providers/berget/models/openai/gpt-oss-120b.toml b/providers/berget/models/openai/gpt-oss-120b.toml deleted file mode 100644 index d9c3aec2f59..00000000000 --- a/providers/berget/models/openai/gpt-oss-120b.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "openai/gpt-oss-120b" -name = "GPT-OSS-120B" -knowledge = "2025-08" -# The request schema accepts reasoning_effort low/medium/high, but publishes no -# GPT OSS-specific behavioral mapping or reasoning-token budget. -# https://api.berget.ai/openapi.json -reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] - -[cost] -input = 0.22 -output = 0.83 - -[limit] -context = 128_000 -output = 8_192 diff --git a/providers/berget/models/zai-org/GLM-4.7.toml b/providers/berget/models/zai-org/GLM-4.7.toml deleted file mode 100644 index 0e7421a344b..00000000000 --- a/providers/berget/models/zai-org/GLM-4.7.toml +++ /dev/null @@ -1,27 +0,0 @@ -name = "GLM 4.7" -description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -family = "glm" -release_date = "2026-01-19" -last_updated = "2026-01-19" -attachment = false -reasoning = true -# Berget documents no meaningful toggle, effort subset, or budget for this model. -# https://api.berget.ai/openapi.json -reasoning_options = [] -temperature = true -knowledge = "2025-12" -tool_call = true -structured_output = true -open_weights = true - -[cost] -input = 0.77 -output = 2.75 - -[limit] -context = 128_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/berget/models/zai-org/GLM-5.3-Flash.toml b/providers/berget/models/zai-org/GLM-5.3-Flash.toml new file mode 100644 index 00000000000..62405e7d432 --- /dev/null +++ b/providers/berget/models/zai-org/GLM-5.3-Flash.toml @@ -0,0 +1,33 @@ +# GLM-5.3-Flash served on Berget AI's Swedish infrastructure (NVIDIA B300, +# SGLang TP4). Multimodal (text + image), reasoning on by default with effort +# levels low/high/max. Needle-validated to 512K context. +# https://api.berget.ai/openapi.json +# +# Berget bills in EUR: 0.25 EUR/M input, 0.5 EUR/M output. +# Converted to USD at 1.1643 (ECB rate, 2026-08-28): +# 0.25 EUR/M -> 0.29 USD/M input +# 0.5 EUR/M -> 0.58 USD/M output +base_model = "zhipuai/glm-5.3-flash" +last_updated = "2026-09-01" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.29 +output = 0.58 + +[limit] +context = 524_288 +output = 16_384 + +# The lab model accepts text/image/video/pdf; the Berget SGLang deployment +# serves text + image + video (video verified against the live endpoint +# 2026-08-29). PDF input is NOT supported by the serving stack. +[modalities] +input = ["text", "image", "video"] +output = ["text"] diff --git a/providers/bothub/logo.svg b/providers/bothub/logo.svg new file mode 100644 index 00000000000..01c3f46c1de --- /dev/null +++ b/providers/bothub/logo.svg @@ -0,0 +1,33 @@ + + + + + + \ No newline at end of file diff --git a/providers/bothub/models/deepseek-v4-flash-0731.toml b/providers/bothub/models/deepseek-v4-flash-0731.toml new file mode 100644 index 00000000000..24886981b87 --- /dev/null +++ b/providers/bothub/models/deepseek-v4-flash-0731.toml @@ -0,0 +1,17 @@ +# Pricing: https://bothub.ru/models (accessed 2026-09-10). +# RUB converted to USD at the CBR rate 85.4594 RUB/USD (2026-09-10). +# Controls: bothub exposes a single reasoning_effort parameter on +# POST /v1/chat/completions (see providers/bothub/provider.toml); no +# thinking.type toggle is documented for this host. Levels verified +# against the bothub model page; "none" disables reasoning. +base_model = "deepseek/deepseek-v4-flash-0731" + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 0.1 +output = 0.28 diff --git a/providers/bothub/models/deepseek-v4-pro-0813.toml b/providers/bothub/models/deepseek-v4-pro-0813.toml new file mode 100644 index 00000000000..f1dda9cf1a9 --- /dev/null +++ b/providers/bothub/models/deepseek-v4-pro-0813.toml @@ -0,0 +1,17 @@ +# Pricing: https://bothub.ru/models (accessed 2026-09-10). +# RUB converted to USD at the CBR rate 85.4594 RUB/USD (2026-09-10). +# Controls: bothub exposes a single reasoning_effort parameter on +# POST /v1/chat/completions (see providers/bothub/provider.toml); no +# thinking.type toggle is documented for this host. Levels verified +# against the bothub model page; "none" disables reasoning. +base_model = "deepseek/deepseek-v4-pro-0813" + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high", "max"] + +[cost] +input = 1.61 +output = 4.84 diff --git a/providers/bothub/models/gemma-4-31b-it:free.toml b/providers/bothub/models/gemma-4-31b-it:free.toml new file mode 100644 index 00000000000..627a8338b29 --- /dev/null +++ b/providers/bothub/models/gemma-4-31b-it:free.toml @@ -0,0 +1,14 @@ +# Bothub wire: reasoning arrives in message.reasoning (mirrored in message.reasoning_details as reasoning.text). +# Toggle: POST /v1/chat/completions request field reasoning_effort = "low" (on) | "none" (off); +# live-verified 2026-08-29: any non-none value enables thinking, "none" disables it (no graded effect between on-values). +base_model = "google/gemma-4-31b-it" +name = "Gemma 4 31B IT (free)" + +interleaved = true + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0 +output = 0 \ No newline at end of file diff --git a/providers/bothub/models/glm-5.3-flash.toml b/providers/bothub/models/glm-5.3-flash.toml new file mode 100644 index 00000000000..1a2c037bfb1 --- /dev/null +++ b/providers/bothub/models/glm-5.3-flash.toml @@ -0,0 +1,16 @@ +# Pricing: https://bothub.ru/models (accessed 2026-09-10) — includes the +# site's current -20% promo (list 13.15/47.33 RUB per 1M tokens). +# RUB converted to USD at the CBR rate 85.4594 RUB/USD (2026-09-10). +# Controls mirrored from the lab entry: GLM-5.3-Flash always reasons; +# effort low|high|max with default max, no toggle. +base_model = "zhipuai/glm-5.3-flash" + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.12 +output = 0.44 diff --git a/providers/bothub/models/glm-5.3.toml b/providers/bothub/models/glm-5.3.toml new file mode 100644 index 00000000000..11332821aeb --- /dev/null +++ b/providers/bothub/models/glm-5.3.toml @@ -0,0 +1,16 @@ +# Pricing: https://bothub.ru/models (accessed 2026-09-10) — includes the +# site's current -20% promo (list 184.04/578.41 RUB per 1M tokens). +# RUB converted to USD at the CBR rate 85.4594 RUB/USD (2026-09-10). +# Controls mirrored from the lab entry: GLM-5.3 always reasons; effort +# low|high|max with default max, no toggle. +base_model = "zhipuai/glm-5.3" + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.72 +output = 5.41 diff --git a/providers/bothub/models/gpt-5.6-luna.toml b/providers/bothub/models/gpt-5.6-luna.toml new file mode 100644 index 00000000000..4b59060abd2 --- /dev/null +++ b/providers/bothub/models/gpt-5.6-luna.toml @@ -0,0 +1,16 @@ +# Pricing: https://bothub.ru/models (accessed 2026-09-10) — includes the +# site's current -80% promo (list 26.30/157.75 RUB per 1M tokens). +# RUB converted to USD at the CBR rate 85.4594 RUB/USD (2026-09-10). +# Controls mirrored from the lab entry: off is effort=none; graded +# levels — no toggle. +base_model = "openai/gpt-5.6-luna" + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.06 +output = 0.37 diff --git a/providers/bothub/models/muse-spark-1.3-contributor.toml b/providers/bothub/models/muse-spark-1.3-contributor.toml new file mode 100644 index 00000000000..8875137a496 --- /dev/null +++ b/providers/bothub/models/muse-spark-1.3-contributor.toml @@ -0,0 +1,25 @@ +# Pricing live-verified 2026-09-11 via a chat completion usage.cost +# (11 prompt + 200 completion tokens => exactly $0.10/$0.20 per 1M). +# Listed on https://bothub.ru/muse-spark-1.3-contributor as 11,79/23,57 RUB per 1M. +# Effort live-verified 2026-09-11: reasoning_effort accepts +# [minimal, low, medium, high, xhigh]; "max" is rejected upstream +# (Meta holds max back pending safety testing: +# https://research.meta.ai/blog/introducing-muse-spark-1-3). +# Wire: reasoning in message.reasoning, mirrored in reasoning_details (encrypted). +# Output override: live test 2026-09-11 accepted >131k completion tokens on +# bothub (lab file's 131_072 is stale); 943 718 per OpenRouter/llm-stats. +base_model = "meta/muse-spark-1.3" +name = "Muse Spark 1.3 Contributor" + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 0.1 +output = 0.2 + +[limit] +output = 943_718 diff --git a/providers/bothub/models/nemotron-3-ultra-550b-a55b:free.toml b/providers/bothub/models/nemotron-3-ultra-550b-a55b:free.toml new file mode 100644 index 00000000000..63ca995b51c --- /dev/null +++ b/providers/bothub/models/nemotron-3-ultra-550b-a55b:free.toml @@ -0,0 +1,13 @@ +# Bothub wire: reasoning in message.reasoning (also mirrored in message.reasoning_details as reasoning.text) +base_model = "nvidia/nemotron-3-ultra-550b-a55b" +name = "Nemotron 3 Ultra (free)" + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "medium", "high"] + +[cost] +input = 0 +output = 0 \ No newline at end of file diff --git a/providers/bothub/provider.toml b/providers/bothub/provider.toml new file mode 100644 index 00000000000..80c4ff82069 --- /dev/null +++ b/providers/bothub/provider.toml @@ -0,0 +1,13 @@ +name = "Bothub" +env = ["BOTHUB_API_KEY"] +npm = "@ai-sdk/openai-compatible" +# Raw HTTP reasoning controls (live-verified 2026-08-29): +# Chat POST `/v1/chat/completions` takes `reasoning_effort`; upstream +# reasoning returns in the message side channel (`reasoning`, mirrored +# in `reasoning_details`). Per-model request controls differ: +# - nemotron-3-ultra-550b-a55b:free: effort none|medium|high +# - gemma-4-31b-it:free: binary toggle (any non-none value enables +# thinking, `none` disables it) +# https://bothub.ru +api = "https://openai.bothub.ru/v1" +doc = "https://bothub.ru/models" \ No newline at end of file diff --git a/providers/cerebras/models/gemma-4-31b.toml b/providers/cerebras/models/gemma-4-31b.toml deleted file mode 100644 index 177b9021fe6..00000000000 --- a/providers/cerebras/models/gemma-4-31b.toml +++ /dev/null @@ -1,17 +0,0 @@ -base_model = "google/gemma-4-31b-it" -last_updated = "2026-07-01" -status = "beta" -# Model-specific reasoning HTTP values (accessed 2026-07-01): -# reasoning_effort = "none" (default) | "low"|"medium"|"high" (enable reasoning). -# Sources: -# https://inference-docs.cerebras.ai/capabilities/reasoning#gemma-4-31b-reasoning_effort -# https://inference-docs.cerebras.ai/models/gemma-4-31b -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] - -[cost] -input = 0.99 -output = 1.49 - -[limit] -context = 131_072 -output = 40_960 diff --git a/providers/cerebras/models/qwen-3.8-27b.toml b/providers/cerebras/models/qwen-3.8-27b.toml new file mode 100644 index 00000000000..17a36db9d02 --- /dev/null +++ b/providers/cerebras/models/qwen-3.8-27b.toml @@ -0,0 +1,17 @@ +base_model = "alibaba/qwen3.8-27b" +last_updated = "2026-09-03" +# Model-specific reasoning HTTP values from the Cerebras launch contract: +# reasoning_effort = "none" | "low" | "medium" | "high"; default is "high". +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] + +[cost] +input = 0.99 +output = 1.49 + +[limit] +context = 65_536 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/chutes/models/Qwen/Qwen3.8-27B-TEE.toml b/providers/chutes/models/Qwen/Qwen3.8-27B-TEE.toml index 989e3743ff1..f44b33e43ce 100644 --- a/providers/chutes/models/Qwen/Qwen3.8-27B-TEE.toml +++ b/providers/chutes/models/Qwen/Qwen3.8-27B-TEE.toml @@ -6,9 +6,9 @@ last_updated = "2026-08-16" reasoning_options = [] [cost] -input = 0.35 -output = 2.75 -cache_read = 0.03499999999999999 +input = 0.24 +output = 2.2 +cache_read = 0.023999999999999994 [limit] output = 65_536 diff --git a/providers/chutes/models/moonshotai/Kimi-K2.6-TEE.toml b/providers/chutes/models/moonshotai/Kimi-K2.6-TEE.toml index 5ed8b82d4a2..5ffbf637959 100644 --- a/providers/chutes/models/moonshotai/Kimi-K2.6-TEE.toml +++ b/providers/chutes/models/moonshotai/Kimi-K2.6-TEE.toml @@ -12,9 +12,9 @@ field = "reasoning_content" type = "toggle" [cost] -input = 0.58 -output = 3.4 -cache_read = 0.05799999999999998 +input = 0.5 +output = 2.85 +cache_read = 0.04999999999999999 [limit] output = 65_535 diff --git a/providers/clarifai/logo.svg b/providers/clarifai/logo.svg new file mode 100644 index 00000000000..d15444310f2 --- /dev/null +++ b/providers/clarifai/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/providers/cline-pass/models/cline-pass/deepseek-v4-flash.toml b/providers/cline-pass/models/cline-pass/deepseek-v4-flash.toml index a402b4d533b..044e118d9af 100644 --- a/providers/cline-pass/models/cline-pass/deepseek-v4-flash.toml +++ b/providers/cline-pass/models/cline-pass/deepseek-v4-flash.toml @@ -1,5 +1,9 @@ +# https://docs.cline.bot/getting-started/clinepass +# https://api-docs.deepseek.com/guides/thinking_mode/ (OpenAI: thinking.type + reasoning_effort low|high|max) +# Effort: reasoning_effort = none|low|high|max (none disables thinking; DeepSeek Flash graded set) +# Legacy Flash slug; lab serves V4.1-Flash. Same reasoning surface as deepseek-v4.1-flash. base_model = "deepseek/deepseek-v4-flash" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] +reasoning_options = [{ type = "effort", values = ["none", "low", "high", "max"] }] [cost] input = 0.14 diff --git a/providers/cline-pass/models/cline-pass/deepseek-v4-pro.toml b/providers/cline-pass/models/cline-pass/deepseek-v4-pro.toml index 3fb0bd31762..191909977a6 100644 --- a/providers/cline-pass/models/cline-pass/deepseek-v4-pro.toml +++ b/providers/cline-pass/models/cline-pass/deepseek-v4-pro.toml @@ -1,5 +1,9 @@ +# https://docs.cline.bot/getting-started/clinepass +# https://api-docs.deepseek.com/guides/thinking_mode/ (OpenAI: thinking.type + reasoning_effort) +# First-party DeepSeek Pro: effort high|max (lab providers/deepseek/models/deepseek-v4-pro.toml) +# Effort: reasoning_effort = none|high|max (none disables thinking) base_model = "deepseek/deepseek-v4-pro" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] +reasoning_options = [{ type = "effort", values = ["none", "high", "max"] }] [cost] input = 1.74 diff --git a/providers/cline-pass/models/cline-pass/deepseek-v4.1-flash.toml b/providers/cline-pass/models/cline-pass/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..453a58da360 --- /dev/null +++ b/providers/cline-pass/models/cline-pass/deepseek-v4.1-flash.toml @@ -0,0 +1,13 @@ +# https://api.cline.bot/api/v1/ai/cline/recommended-models (clinePass id cline-pass/deepseek-v4.1-flash, accessed 2026-09-11) +# https://docs.cline.bot/getting-started/clinepass (ClinePass reference pricing cites DeepSeek API pricing for Flash quota) +# https://api-docs.deepseek.com/quick_start/pricing (DeepSeek-V4.1-Flash off-peak USD/MTok; ClinePass docs table still lists deepseek-v4-flash only) +# https://api-docs.deepseek.com/guides/thinking_mode/ (OpenAI: thinking.type + reasoning_effort low|high|max; medium/xhigh map to high) +# Effort: reasoning_effort = none|low|high|max (none disables thinking; matches DeepSeek Flash graded set + off) +# ClinePass is an OpenAI-compatible relay; do not advertise GPT-style medium/xhigh. +base_model = "deepseek/deepseek-v4.1-flash" +reasoning_options = [{ type = "effort", values = ["none", "low", "high", "max"] }] + +[cost] +input = 0.15 +output = 0.6 +cache_read = 0.003 diff --git a/providers/cline-pass/models/cline-pass/glm-5.2.toml b/providers/cline-pass/models/cline-pass/glm-5.2.toml index b3cac6301a6..7458eed5caa 100644 --- a/providers/cline-pass/models/cline-pass/glm-5.2.toml +++ b/providers/cline-pass/models/cline-pass/glm-5.2.toml @@ -1,5 +1,9 @@ +# https://docs.cline.bot/getting-started/clinepass +# Lab Zhipu GLM-5.2: effective effort high|max; none|minimal skip thinking +# (providers/zhipuai/models/glm-5.2.toml; https://docs.bigmodel.cn/cn/guide/capabilities/thinking) +# Effort: reasoning_effort = none|high|max base_model = "zhipuai/glm-5.2" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] +reasoning_options = [{ type = "effort", values = ["none", "high", "max"] }] [cost] input = 1.4 diff --git a/providers/cline-pass/models/cline-pass/glm-5.3-flash.toml b/providers/cline-pass/models/cline-pass/glm-5.3-flash.toml new file mode 100644 index 00000000000..3c24c9833c2 --- /dev/null +++ b/providers/cline-pass/models/cline-pass/glm-5.3-flash.toml @@ -0,0 +1,36 @@ +# https://docs.cline.bot/getting-started/clinepass (accessed 2026-09-02) +# Model ID cline-pass/glm-5.3-flash; reference pricing $0.15 / $0.50 / $0.03 per 1M tokens (input/output/cache read). +# Name/description from the ClinePass model catalog. ClinePass does not declare an +# upstream lab mapping for this entry; specs (limits, modalities, reasoning) match +# Z.ai's GLM-5.3-Flash (https://docs.bigmodel.cn/cn/guide/models/vlm/glm-5.3-flash). +name = "cline-pass/glm-5.3-flash" +description = "Latest natively multimodal model in the GLM-5 series" +family = "glm-flash" +release_date = "2026-08-26" +last_updated = "2026-08-26" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[limit] +context = 1_000_000 +output = 131_072 + +[modalities] +input = ["text", "image", "video", "pdf"] +output = ["text"] + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.03 diff --git a/providers/cline-pass/models/cline-pass/kimi-k2.6.toml b/providers/cline-pass/models/cline-pass/kimi-k2.6.toml index 373fb552c69..fc3fb04b0db 100644 --- a/providers/cline-pass/models/cline-pass/kimi-k2.6.toml +++ b/providers/cline-pass/models/cline-pass/kimi-k2.6.toml @@ -1,5 +1,8 @@ +# https://docs.cline.bot/getting-started/clinepass +# Lab Moonshot K2.6: thinking on/off only (providers/moonshotai/models/kimi-k2.6.toml) +# Toggle: thinking / reasoning enabled|disabled (OpenAI-compatible relay; no graded effort on lab) base_model = "moonshotai/kimi-k2.6" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] +reasoning_options = [{ type = "toggle" }] [cost] input = 0.95 diff --git a/providers/cline-pass/models/cline-pass/kimi-k2.7-code.toml b/providers/cline-pass/models/cline-pass/kimi-k2.7-code.toml index 7340bf79c7a..9fc9a2f9a5a 100644 --- a/providers/cline-pass/models/cline-pass/kimi-k2.7-code.toml +++ b/providers/cline-pass/models/cline-pass/kimi-k2.7-code.toml @@ -1,5 +1,8 @@ +# https://docs.cline.bot/getting-started/clinepass +# Lab Moonshot K2.7 Code: always-on reasoning, no caller control +# (providers/moonshotai/models/kimi-k2.7-code.toml; openrouter peer also []) base_model = "moonshotai/kimi-k2.7-code" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] +reasoning_options = [] [cost] input = 0.95 diff --git a/providers/cline-pass/models/cline-pass/kimi-k3.toml b/providers/cline-pass/models/cline-pass/kimi-k3.toml index 856a9963ae3..2b9dee1d87c 100644 --- a/providers/cline-pass/models/cline-pass/kimi-k3.toml +++ b/providers/cline-pass/models/cline-pass/kimi-k3.toml @@ -1,7 +1,9 @@ # https://docs.cline.bot/getting-started/clinepass (accessed 2026-07-22) # Model ID cline-pass/kimi-k3; reference pricing $3 / $15 / $0.30 per 1M tokens (input/output/cache read). +# Lab Moonshot K3: thinking.type + output_config.effort low|high|max (providers/moonshotai/models/kimi-k3.toml) +# Effort: reasoning_effort = none|low|high|max (none disables; no medium/xhigh) base_model = "moonshotai/kimi-k3" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] +reasoning_options = [{ type = "effort", values = ["none", "low", "high", "max"] }] [cost] input = 3 diff --git a/providers/cline-pass/models/cline-pass/mimo-v2.5-pro.toml b/providers/cline-pass/models/cline-pass/mimo-v2.5-pro.toml index 4b15e595d0b..8ff3d62b6dc 100644 --- a/providers/cline-pass/models/cline-pass/mimo-v2.5-pro.toml +++ b/providers/cline-pass/models/cline-pass/mimo-v2.5-pro.toml @@ -1,5 +1,8 @@ +# https://docs.cline.bot/getting-started/clinepass +# Lab Xiaomi MiMo-V2.5-Pro: thinking on/off only (providers/xiaomi/models/mimo-v2.5-pro.toml) +# Toggle: thinking / reasoning enabled|disabled (no graded effort on lab) base_model = "xiaomi/mimo-v2.5-pro" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] +reasoning_options = [{ type = "toggle" }] [cost] input = 1.74 diff --git a/providers/cline-pass/models/cline-pass/mimo-v2.5.toml b/providers/cline-pass/models/cline-pass/mimo-v2.5.toml index a05c72ca039..3a9f90ed0bc 100644 --- a/providers/cline-pass/models/cline-pass/mimo-v2.5.toml +++ b/providers/cline-pass/models/cline-pass/mimo-v2.5.toml @@ -1,5 +1,8 @@ +# https://docs.cline.bot/getting-started/clinepass +# Lab Xiaomi MiMo-V2.5: thinking on/off only (providers/xiaomi/models/mimo-v2.5.toml) +# Toggle: thinking / reasoning enabled|disabled (no graded effort on lab) base_model = "xiaomi/mimo-v2.5" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] +reasoning_options = [{ type = "toggle" }] [cost] input = 0.14 diff --git a/providers/cline-pass/models/cline-pass/mimo-v2.6-flash.toml b/providers/cline-pass/models/cline-pass/mimo-v2.6-flash.toml new file mode 100644 index 00000000000..612d086a7f4 --- /dev/null +++ b/providers/cline-pass/models/cline-pass/mimo-v2.6-flash.toml @@ -0,0 +1,16 @@ +# Model ID cline-pass/mimo-v2.6-flash; reference pricing from the Cline model +# catalog https://api.cline.bot/api/v1/ai/cline/models (accessed 2026-09-22): +# $0.14 / $0.28 / $0.0028 per 1M tokens (input/output/cache read). +# Wire evidence (2026-09-22): POST /api/v1/chat/completions accepts +# reasoning_effort = none|low|medium|high|xhigh|minimal|max (HTTP 200) and +# rejects unknown levels (HTTP 500). An effect probe (3 trials per level, +# reasoning_tokens per response) shows no measurable difference for +# minimal/max, so this file declares the established same-host peer set +# used by cline-pass/mimo-v2.5* (none, low, medium, high, xhigh). +base_model = "xiaomi/mimo-v2.6-flash" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] + +[cost] +input = 0.14 +output = 0.28 +cache_read = 0.0028 diff --git a/providers/cline-pass/models/cline-pass/mimo-v2.6-pro.toml b/providers/cline-pass/models/cline-pass/mimo-v2.6-pro.toml new file mode 100644 index 00000000000..d42aa0606d7 --- /dev/null +++ b/providers/cline-pass/models/cline-pass/mimo-v2.6-pro.toml @@ -0,0 +1,16 @@ +# Model ID cline-pass/mimo-v2.6-pro; reference pricing from the Cline model +# catalog https://api.cline.bot/api/v1/ai/cline/models (accessed 2026-09-22): +# $0.435 / $0.87 / $0.0036 per 1M tokens (input/output/cache read). +# Wire evidence (2026-09-22): POST /api/v1/chat/completions accepts +# reasoning_effort = none|low|medium|high|xhigh|minimal|max (HTTP 200) and +# rejects unknown levels (HTTP 500). An effect probe (reasoning_tokens per +# response) shows no measurable difference for minimal/max, so this file +# declares the established same-host peer set used by cline-pass/mimo-v2.5-pro +# (none, low, medium, high, xhigh). +base_model = "xiaomi/mimo-v2.6-pro" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] + +[cost] +input = 0.435 +output = 0.87 +cache_read = 0.0036 diff --git a/providers/cline-pass/models/cline-pass/minimax-m3.toml b/providers/cline-pass/models/cline-pass/minimax-m3.toml index 1367e07bc0e..599f9fc9ec1 100644 --- a/providers/cline-pass/models/cline-pass/minimax-m3.toml +++ b/providers/cline-pass/models/cline-pass/minimax-m3.toml @@ -1,5 +1,8 @@ +# https://docs.cline.bot/getting-started/clinepass +# Lab MiniMax-M3: thinking on/off only (providers/minimax/models/MiniMax-M3.toml) +# Toggle: thinking / reasoning enabled|disabled (no graded effort on lab) base_model = "minimax/MiniMax-M3" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] +reasoning_options = [{ type = "toggle" }] [cost] input = 0.3 diff --git a/providers/cline-pass/models/cline-pass/muse-spark-1.3-contributor.toml b/providers/cline-pass/models/cline-pass/muse-spark-1.3-contributor.toml new file mode 100644 index 00000000000..a5f354380fd --- /dev/null +++ b/providers/cline-pass/models/cline-pass/muse-spark-1.3-contributor.toml @@ -0,0 +1,8 @@ +# Model ID cline-pass/muse-spark-1.3-contributor. Cline publishes no +# ClinePass reference rate for this model: docs.cline.bot/getting-started/ +# clinepass has no row for it (accessed 2026-09-22) and the model is absent +# from api.cline.bot/api/v1/ai/cline/models, so no [cost] block is declared. +base_model = "meta/muse-spark-1.3" +name = "Muse Spark 1.3 Contributor" + +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high", "xhigh"] }] diff --git a/providers/cline-pass/models/cline-pass/qwen3.7-max.toml b/providers/cline-pass/models/cline-pass/qwen3.7-max.toml index 7ec1495bb20..302e667ede8 100644 --- a/providers/cline-pass/models/cline-pass/qwen3.7-max.toml +++ b/providers/cline-pass/models/cline-pass/qwen3.7-max.toml @@ -1,5 +1,9 @@ +# https://docs.cline.bot/getting-started/clinepass +# Lab Alibaba Qwen3.7 Max: enable_thinking + thinking_budget (providers/alibaba/models/qwen3.7-max.toml) +# ClinePass OpenAI-compatible Chat Completions path: peers (OpenRouter) expose on/off only, not budget_tokens. +# Toggle: enable_thinking / reasoning enabled|disabled base_model = "alibaba/qwen3.7-max" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] +reasoning_options = [{ type = "toggle" }] [cost] input = 2.5 diff --git a/providers/cline-pass/models/cline-pass/qwen3.7-plus.toml b/providers/cline-pass/models/cline-pass/qwen3.7-plus.toml index 55e28b335eb..4c0d4b2c041 100644 --- a/providers/cline-pass/models/cline-pass/qwen3.7-plus.toml +++ b/providers/cline-pass/models/cline-pass/qwen3.7-plus.toml @@ -1,5 +1,9 @@ +# https://docs.cline.bot/getting-started/clinepass +# Lab Alibaba Qwen3.7 Plus: enable_thinking + thinking_budget (providers/alibaba/models/qwen3.7-plus.toml) +# ClinePass OpenAI-compatible Chat Completions path: peers (OpenRouter) expose on/off only, not budget_tokens. +# Toggle: enable_thinking / reasoning enabled|disabled base_model = "alibaba/qwen3.7-plus" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] +reasoning_options = [{ type = "toggle" }] [cost] input = 0.4 diff --git a/providers/cline-pass/models/cline-pass/qwen3.8-max.toml b/providers/cline-pass/models/cline-pass/qwen3.8-max.toml index a72991d846b..6a9d910be85 100644 --- a/providers/cline-pass/models/cline-pass/qwen3.8-max.toml +++ b/providers/cline-pass/models/cline-pass/qwen3.8-max.toml @@ -1,11 +1,11 @@ # https://docs.cline.bot/getting-started/clinepass (accessed 2026-08-24) # Model ID cline-pass/qwen3.8-max; reference pricing $2 / $6 / $0.25 per 1M tokens (input/output/cache read), cache write $2.5. +# Lab Alibaba Qwen3.8 Max: enable_thinking + reasoning_effort low|medium|xhigh +# (providers/alibaba/models/qwen3.8-max.toml; https://docs.qwencloud.com/developer-guides/text-generation/thinking) +# Effort includes none for off (hybrid model); no high (lab maps high→xhigh; native graded set is low|medium|xhigh) base_model = "alibaba/qwen3.8-max" structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["minimal", "low", "medium", "high", "xhigh"] +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "xhigh"] }] [cost] input = 2 diff --git a/providers/cloudflare-ai-gateway/README.md b/providers/cloudflare-ai-gateway/README.md index c12b859de6a..9abd759714c 100644 --- a/providers/cloudflare-ai-gateway/README.md +++ b/providers/cloudflare-ai-gateway/README.md @@ -18,10 +18,13 @@ One command regenerates every model TOML: CLOUDFLARE_API_TOKEN=xxx CLOUDFLARE_ACCOUNT_ID=xxx bun run cloudflare-ai-gateway:generate ``` +The sync also accepts `CLOUDFLARE_PRODUCTION_API_TOKEN` and +`CLOUDFLARE_PRODUCTION_ACCOUNT_ID_AI_GATEWAY_SANDBOX` directly. + It reads two live Cloudflare sources plus one local curation file: - **Proxied catalog** — `GET /accounts/{id}/ai/catalog/models`. The source of truth: one - canonical (dotted) `model_id` per model, description, context/output limits, and pricing. + canonical (dotted) `model_id` per model, description, context limits, and pricing. This is why ids look like `anthropic/claude-haiku-4.5`, not `claude-haiku-4-5`. - **Per-model catalog schema** — `GET /accounts/{id}/ai/catalog/models/{id}/schema`. Used to derive `reasoning_options` for providers whose schema is OpenAI-compatible (xAI, Alibaba, @@ -44,7 +47,7 @@ bun run cloudflare-ai-gateway:generate --check ``` Exits non-zero if the committed TOMLs are out of date with the live catalog + curation. -Used in CI. +The same shared provider runs hourly; use `--check` for local drift checks. ### Offline / fixtures diff --git a/providers/cloudflare-ai-gateway/curation.toml b/providers/cloudflare-ai-gateway/curation.toml index 8772ea87336..b49e5a8d3dd 100644 --- a/providers/cloudflare-ai-gateway/curation.toml +++ b/providers/cloudflare-ai-gateway/curation.toml @@ -33,12 +33,31 @@ skip = [ "google/gemini-3.5-flash", "google/gemini-3.6-flash", "google/gemini-3.7-flash", + "google/gemini-3.8-flash", + "stealth/union-alpha", ] +# Cloudflare exposes TypeSafe's evaluation-only Jev alias over /ai/run. The shared +# metadata marks its structured output support and lack of tool calling. +[models."typesafe/jev"] +base_model = "typesafe/jev-latest" + [models."anthropic/claude-fable-5"] structured_output = true reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] +# Claude Fable 5.1: adaptive thinking always on; caller control is effort only (no thinking toggle). +# Wire: output_config.effort = low|medium|high|xhigh|max on the Anthropic Messages path. +# https://platform.claude.com/docs/en/build-with-claude/effort +# https://platform.claude.com/docs/en/about-claude/pricing +[models."anthropic/claude-fable-5.1"] +structured_output = true +note = [ + "Effort: output_config.effort = low|medium|high|xhigh|max (Anthropic Messages API; adaptive thinking always on).", + "Sources: https://platform.claude.com/docs/en/build-with-claude/effort ; https://platform.claude.com/docs/en/about-claude/pricing", +] +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + [models."anthropic/claude-haiku-4.5"] structured_output = true reasoning_options = [{ type = "budget_tokens", min = 1024 }] @@ -117,6 +136,14 @@ reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high [models."openai/gpt-5.6-terra"] reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] +# GPT-6 Astra has conflicting validation layers on Cloudflare's Responses route. The catalog +# schema advertises none|low|medium|high, but `none` reaches OpenAI and is rejected upstream; +# xhigh|max are rejected by Cloudflare before forwarding. POST /ai/v1/responses verified +# low end-to-end and those three rejection paths on 2026-09-17. +[models."openai/gpt-6-astra"] +note = ["Effort: reasoning.effort = low|medium|high; Cloudflare rejects xhigh|max, and OpenAI rejects none after forwarding (live verified 2026-09-17)."] +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + [models."openai/o3"] reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] diff --git a/providers/cloudflare-ai-gateway/models/anthropic/claude-fable-5.1.toml b/providers/cloudflare-ai-gateway/models/anthropic/claude-fable-5.1.toml new file mode 100644 index 00000000000..4ff3a9fffa1 --- /dev/null +++ b/providers/cloudflare-ai-gateway/models/anthropic/claude-fable-5.1.toml @@ -0,0 +1,20 @@ +# Effort: output_config.effort = low|medium|high|xhigh|max (Anthropic Messages API; adaptive thinking always on). +# Sources: https://platform.claude.com/docs/en/build-with-claude/effort ; https://platform.claude.com/docs/en/about-claude/pricing +base_model = "anthropic/claude-fable-5-1" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 + +[limit] +context = 1_000_000 + +[provider] +npm = "@ai-sdk/anthropic" diff --git a/providers/cloudflare-ai-gateway/models/openai/gpt-6-astra.toml b/providers/cloudflare-ai-gateway/models/openai/gpt-6-astra.toml new file mode 100644 index 00000000000..5201b391355 --- /dev/null +++ b/providers/cloudflare-ai-gateway/models/openai/gpt-6-astra.toml @@ -0,0 +1,25 @@ +# Effort: reasoning.effort = low|medium|high; Cloudflare rejects xhigh|max, and OpenAI rejects none after forwarding (live verified 2026-09-17). +base_model = "openai/gpt-6-astra" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 20 +output = 75 +cache_read = 2 +cache_write = 25 + +[limit] +context = 1_050_000 + +[provider] +npm = "@ai-sdk/openai" diff --git a/providers/cloudflare-ai-gateway/models/typesafe/jev.toml b/providers/cloudflare-ai-gateway/models/typesafe/jev.toml new file mode 100644 index 00000000000..1e5da088ecd --- /dev/null +++ b/providers/cloudflare-ai-gateway/models/typesafe/jev.toml @@ -0,0 +1,9 @@ +base_model = "typesafe/jev-latest" + +[cost] +input = 0.042 +output = 0 +cache_read = 0 + +[limit] +context = 32_000 diff --git a/providers/cloudflare-ai-gateway/models/unbiased/pareto.toml b/providers/cloudflare-ai-gateway/models/unbiased/pareto.toml new file mode 100644 index 00000000000..20ce41c237d --- /dev/null +++ b/providers/cloudflare-ai-gateway/models/unbiased/pareto.toml @@ -0,0 +1,9 @@ +base_model = "unbiased/pareto" + +[cost] +input = 2.5 +output = 7.5 +cache_read = 0.25 + +[limit] +context = 262_144 diff --git a/providers/cloudflare-ai-gateway/models/xai/grok-4.5.toml b/providers/cloudflare-ai-gateway/models/xai/grok-4.5.toml index cc4f3e39b59..94f9069dcc6 100644 --- a/providers/cloudflare-ai-gateway/models/xai/grok-4.5.toml +++ b/providers/cloudflare-ai-gateway/models/xai/grok-4.5.toml @@ -9,5 +9,11 @@ input = 2 output = 6 cache_read = 0.3 +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 4 +output = 12 +cache_read = 0.6 + [limit] context = 500_000 diff --git a/providers/cloudflare-ai-gateway/models/xai/grok-4.6.toml b/providers/cloudflare-ai-gateway/models/xai/grok-4.6.toml index bd56d89c029..f5e6683671a 100644 --- a/providers/cloudflare-ai-gateway/models/xai/grok-4.6.toml +++ b/providers/cloudflare-ai-gateway/models/xai/grok-4.6.toml @@ -9,5 +9,11 @@ input = 2 output = 6 cache_read = 0.5 +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 4 +output = 12 +cache_read = 1 + [limit] context = 500_000 diff --git a/providers/cloudflare-ai-gateway/models/xai/grok-4.7.toml b/providers/cloudflare-ai-gateway/models/xai/grok-4.7.toml new file mode 100644 index 00000000000..48df4f8248b --- /dev/null +++ b/providers/cloudflare-ai-gateway/models/xai/grok-4.7.toml @@ -0,0 +1,19 @@ +base_model = "xai/grok-4.7" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh"] + +[cost] +input = 2 +output = 6 +cache_read = 0.5 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 4 +output = 12 +cache_read = 1 + +[limit] +context = 500_000 diff --git a/providers/cloudflare-workers-ai/models/@cf/aisingapore/gemma-sea-lion-v4-27b-it.toml b/providers/cloudflare-workers-ai/models/@cf/aisingapore/gemma-sea-lion-v4-27b-it.toml index 8976b92b55a..3fe191a4d99 100644 --- a/providers/cloudflare-workers-ai/models/@cf/aisingapore/gemma-sea-lion-v4-27b-it.toml +++ b/providers/cloudflare-workers-ai/models/@cf/aisingapore/gemma-sea-lion-v4-27b-it.toml @@ -1,23 +1,7 @@ +base_model = "aisingapore/gemma-sea-lion-v4-27b-it" name = "Gemma Sea Lion V4 27B It" -description = "Open Gemma instruction model for efficient chat and self-hosted deployments" -family = "gemma" -release_date = "2025-09-23" -last_updated = "2025-09-23" -attachment = false -reasoning = false -temperature = true -tool_call = false structured_output = false -open_weights = true [cost] input = 0.351 output = 0.555 - -[limit] -context = 128_000 -output = 128_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/deepseek-ai/deepseek-v4-flash-0731.toml b/providers/cloudflare-workers-ai/models/@cf/deepseek-ai/deepseek-v4-flash-0731.toml index b72f1489e71..48cdf638dfe 100644 --- a/providers/cloudflare-workers-ai/models/@cf/deepseek-ai/deepseek-v4-flash-0731.toml +++ b/providers/cloudflare-workers-ai/models/@cf/deepseek-ai/deepseek-v4-flash-0731.toml @@ -1,13 +1,14 @@ -# Toggle: thinking.type = enabled|disabled. -# Effort: reasoning_effort = high|max. +# Effort: reasoning_effort = none|low|high|max; none disables thinking. +# Source: Workers AI /ai/models/search?format=openrouter (2026-09-18). +# Context/output capped to Cloudflare Workers AI context window (1,048,576). +# Search reports 1,310,720, exceeding AI Gateway max_completion_tokens. +# This dated release adds a distinct low effort; the older preview does not. +# Creator: https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-0731#chat-template base_model = "deepseek/deepseek-v4-flash-0731" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" -values = ["high", "max"] +values = ["none", "low", "high", "max"] [cost] input = 0.44 diff --git a/providers/cloudflare-workers-ai/models/@cf/deepseek-ai/deepseek-v4-pro-0813.toml b/providers/cloudflare-workers-ai/models/@cf/deepseek-ai/deepseek-v4-pro-0813.toml index b28c06ffbe1..32c7c6708b0 100644 --- a/providers/cloudflare-workers-ai/models/@cf/deepseek-ai/deepseek-v4-pro-0813.toml +++ b/providers/cloudflare-workers-ai/models/@cf/deepseek-ai/deepseek-v4-pro-0813.toml @@ -1,8 +1,12 @@ -# Toggle: thinking.type = enabled|disabled. -# Effort: reasoning_effort = high|max. +# Effort: reasoning_effort = none|low|high|max; none disables thinking. +# Source: Workers AI /ai/models/search?format=openrouter (2026-09-18). +# This dated release adds a distinct low effort; the older preview does not. +# Creator: https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro-0813#chat-template base_model = "deepseek/deepseek-v4-pro-0813" -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["high", "max"] }] +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] [cost] input = 1.32 diff --git a/providers/cloudflare-workers-ai/models/@cf/google/gemma-4-26b-a4b-it.toml b/providers/cloudflare-workers-ai/models/@cf/google/gemma-4-26b-a4b-it.toml index 817334b2cee..2c6a8e4386f 100644 --- a/providers/cloudflare-workers-ai/models/@cf/google/gemma-4-26b-a4b-it.toml +++ b/providers/cloudflare-workers-ai/models/@cf/google/gemma-4-26b-a4b-it.toml @@ -1,11 +1,15 @@ -# Native `/ai/run` accepts `reasoning_effort = low|medium|high` and -# `chat_template_kwargs.enable_thinking = true|false`; no budget is documented. -# https://developers.cloudflare.com/workers-ai/models/gemma-4-26b-a4b-it/sync-input.json (accessed 2026-06-25) +# Effort: reasoning_effort = none|high; none disables thinking. +# Source: Workers AI /ai/models/search?format=openrouter (2026-09-18). +# Per-model Search config normalizes low/medium to high; these are aliases, +# not distinct levels despite the generic sync-input.json effort enum. base_model = "google/gemma-4-26b-a4b-it" -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high"] }] interleaved = true +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + [cost] input = 0.1 output = 0.3 diff --git a/providers/cloudflare-workers-ai/models/@cf/ibm-granite/granite-4.0-h-micro.toml b/providers/cloudflare-workers-ai/models/@cf/ibm-granite/granite-4.0-h-micro.toml index a43a661e427..1aa972501cf 100644 --- a/providers/cloudflare-workers-ai/models/@cf/ibm-granite/granite-4.0-h-micro.toml +++ b/providers/cloudflare-workers-ai/models/@cf/ibm-granite/granite-4.0-h-micro.toml @@ -1,14 +1,7 @@ +base_model = "ibm/granite-4-h-micro" name = "Granite 4.0 H Micro" description = "Efficient model for low-latency assistance, extraction, and routine automation" -family = "granite" -release_date = "2025-10-07" -last_updated = "2025-10-07" -attachment = false -reasoning = false -temperature = true -tool_call = true structured_output = false -open_weights = true [cost] input = 0.017 @@ -17,7 +10,3 @@ output = 0.112 [limit] context = 131_000 output = 131_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/meta/llama-3.3-70b-instruct-fp8-fast.toml b/providers/cloudflare-workers-ai/models/@cf/meta/llama-3.3-70b-instruct-fp8-fast.toml index d12dc71b7f6..74c200b2614 100644 --- a/providers/cloudflare-workers-ai/models/@cf/meta/llama-3.3-70b-instruct-fp8-fast.toml +++ b/providers/cloudflare-workers-ai/models/@cf/meta/llama-3.3-70b-instruct-fp8-fast.toml @@ -1,6 +1,5 @@ base_model = "meta/llama-3.3-70b-instruct" name = "Llama 3.3 70B Instruct fp8 Fast" -attachment = false structured_output = false [cost] diff --git a/providers/cloudflare-workers-ai/models/@cf/mistralai/mistral-small-3.1-24b-instruct.toml b/providers/cloudflare-workers-ai/models/@cf/mistralai/mistral-small-3.1-24b-instruct.toml index e456a0e8625..7ed149c081e 100644 --- a/providers/cloudflare-workers-ai/models/@cf/mistralai/mistral-small-3.1-24b-instruct.toml +++ b/providers/cloudflare-workers-ai/models/@cf/mistralai/mistral-small-3.1-24b-instruct.toml @@ -1,23 +1,15 @@ +base_model = "mistral/mistral-small-3-1-24b-instruct-2503" name = "Mistral Small 3.1 24B Instruct" description = "Efficient Mistral model for fast chat, extraction, and production assistants" -family = "mistral-small" -release_date = "2025-03-18" -last_updated = "2025-03-18" attachment = false -reasoning = false -temperature = true -tool_call = true structured_output = false -open_weights = true [cost] input = 0.351 output = 0.555 [limit] -context = 128_000 output = 128_000 [modalities] input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/moonshotai/kimi-k2.6.toml b/providers/cloudflare-workers-ai/models/@cf/moonshotai/kimi-k2.6.toml index 3c4c22a8305..6148d7218ca 100644 --- a/providers/cloudflare-workers-ai/models/@cf/moonshotai/kimi-k2.6.toml +++ b/providers/cloudflare-workers-ai/models/@cf/moonshotai/kimi-k2.6.toml @@ -1,9 +1,13 @@ -# Native `/ai/run` accepts `reasoning_effort = low|medium|high` and -# `chat_template_kwargs.thinking = true|false`; no budget is documented. -# https://developers.cloudflare.com/workers-ai/models/kimi-k2.6/sync-input.json (accessed 2026-06-25) +# Effort: reasoning_effort = none|high; none selects instant mode. +# Source: Workers AI /ai/models/search?format=openrouter (2026-09-18). +# Per-model Search config normalizes low/medium to high; these are aliases, +# not distinct levels despite the generic sync-input.json effort enum. base_model = "moonshotai/kimi-k2.6" -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high"] }] + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] [interleaved] field = "reasoning_content" diff --git a/providers/cloudflare-workers-ai/models/@cf/moonshotai/kimi-k2.7-code.toml b/providers/cloudflare-workers-ai/models/@cf/moonshotai/kimi-k2.7-code.toml index a06c8bc9a29..43a8509e3a6 100644 --- a/providers/cloudflare-workers-ai/models/@cf/moonshotai/kimi-k2.7-code.toml +++ b/providers/cloudflare-workers-ai/models/@cf/moonshotai/kimi-k2.7-code.toml @@ -1,6 +1,8 @@ +# Thinking is mandatory; high is the only effective effort, so aliases add no caller control. +# Source: Workers AI /ai/models/search?format=openrouter (2026-09-18). base_model = "moonshotai/kimi-k2.7-code" -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high"] }] temperature = true +reasoning_options = [] [cost] input = 0.95 diff --git a/providers/cloudflare-workers-ai/models/@cf/nvidia/nemotron-3-120b-a12b.toml b/providers/cloudflare-workers-ai/models/@cf/nvidia/nemotron-3-120b-a12b.toml index 554decfc2e3..a75a99e22b1 100644 --- a/providers/cloudflare-workers-ai/models/@cf/nvidia/nemotron-3-120b-a12b.toml +++ b/providers/cloudflare-workers-ai/models/@cf/nvidia/nemotron-3-120b-a12b.toml @@ -5,9 +5,15 @@ base_model = "nvidia/nemotron-3-super-120b-a12b" name = "Nemotron 3 Super 120B" structured_output = true -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high"] }] interleaved = true +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + [cost] input = 0.5 output = 1.5 diff --git a/providers/cloudflare-workers-ai/models/@cf/openai/gpt-oss-20b.toml b/providers/cloudflare-workers-ai/models/@cf/openai/gpt-oss-20b.toml index fc4739a9fbe..0dcc22de116 100644 --- a/providers/cloudflare-workers-ai/models/@cf/openai/gpt-oss-20b.toml +++ b/providers/cloudflare-workers-ai/models/@cf/openai/gpt-oss-20b.toml @@ -3,7 +3,10 @@ # https://developers.cloudflare.com/workers-ai/models/gpt-oss-20b/sync-input.json (accessed 2026-06-25) base_model = "openai/gpt-oss-20b" description = "Open-weight GPT model for self-hosted reasoning and instruction-following workloads" -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] [cost] input = 0.2 diff --git a/providers/cloudflare-workers-ai/models/@cf/qwen/qwen3.8-27b.toml b/providers/cloudflare-workers-ai/models/@cf/qwen/qwen3.8-27b.toml index 307aa38fb79..f491dd473a3 100644 --- a/providers/cloudflare-workers-ai/models/@cf/qwen/qwen3.8-27b.toml +++ b/providers/cloudflare-workers-ai/models/@cf/qwen/qwen3.8-27b.toml @@ -5,7 +5,13 @@ base_model = "alibaba/qwen3.8-27b" description = "Qwen vision-language model for visual reasoning, documents, and agent tasks" -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "xhigh"] }] + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] [cost] input = 0.45 diff --git a/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-4.7-flash.toml b/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-4.7-flash.toml index 197fa7c94b5..37f0d8a203e 100644 --- a/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-4.7-flash.toml +++ b/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-4.7-flash.toml @@ -1,32 +1,21 @@ -# Native `/ai/run` accepts `reasoning_effort = low|medium|high` and -# `chat_template_kwargs.enable_thinking = true|false`; no budget is documented. -# https://developers.cloudflare.com/workers-ai/models/glm-4.7-flash/sync-input.json (accessed 2026-06-25) - -name = "GLM-4.7-Flash" +# Toggle: chat_template_kwargs.enable_thinking = true|false (default: true). +# Source: Workers AI /ai/models/search?format=openrouter (2026-09-18). +# Workers AI's per-model config exposes only the binary thinking toggle; +# the generic sync-input.json low/medium/high enum is not an effort selector here. +# Creator template: https://huggingface.co/zai-org/GLM-4.7-Flash/blob/main/chat_template.jinja +base_model = "zhipuai/glm-4.7-flash" description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -family = "glm-flash" -release_date = "2026-01-19" -last_updated = "2026-01-19" -attachment = false -reasoning = true -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high"] }] -temperature = true -tool_call = true structured_output = true -knowledge = "2025-04" -open_weights = true [interleaved] field = "reasoning_content" +[[reasoning_options]] +type = "toggle" + [cost] input = 0.0605 output = 0.4 [limit] context = 131_072 -output = 131_072 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-5.2.toml b/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-5.2.toml index 5642ab6e4ea..48337ad55f9 100644 --- a/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-5.2.toml +++ b/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-5.2.toml @@ -1,14 +1,13 @@ +# Effort: reasoning_effort = none|high|max; none disables thinking. +# Source: Workers AI /ai/models/search?format=openrouter (2026-09-18). # Context and output limits verified against Cloudflare Workers AI's OpenAI-compatible endpoint. # https://developers.cloudflare.com/workers-ai/models/glm-5.2/ base_model = "zhipuai/glm-5.2" name = "Glm 5.2" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" -values = ["low", "medium", "high"] +values = ["none", "high", "max"] [cost] input = 1.4 diff --git a/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-5.3-flash.toml b/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-5.3-flash.toml new file mode 100644 index 00000000000..13c5aacae4c --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-5.3-flash.toml @@ -0,0 +1,23 @@ +# Effort: reasoning_effort = low|high|max; thinking is mandatory. +# Source: Workers AI /ai/models/search?format=openrouter (2026-09-18). +# Context/output capped to Cloudflare Workers AI context window (1,048,576). +# Search reports 1,310,720, exceeding AI Gateway max_completion_tokens. +base_model = "zhipuai/glm-5.3-flash" +name = "Glm 5.3 Flash" +description = "GLM vision model for visual reasoning, documents, and multimodal agents" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.03 + +[limit] +context = 1_310_720 +output = 1_048_576 + +[modalities] +input = ["text", "image"] diff --git a/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-5.3.toml b/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-5.3.toml new file mode 100644 index 00000000000..456f1fb0549 --- /dev/null +++ b/providers/cloudflare-workers-ai/models/@cf/zai-org/glm-5.3.toml @@ -0,0 +1,20 @@ +# Effort: reasoning_effort = low|high|max; thinking is mandatory. +# Source: Workers AI /ai/models/search?format=openrouter (2026-09-18). +# Context/output capped to Cloudflare Workers AI context window (1,048,576). +# Search reports 1,310,720, exceeding AI Gateway max_completion_tokens. +base_model = "zhipuai/glm-5.3" +name = "Glm 5.3" +description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.26 + +[limit] +context = 1_310_720 +output = 1_048_576 diff --git a/providers/coralbricks/models/deepseek-v4.1-flash-fast-fp4.toml b/providers/coralbricks/models/deepseek-v4.1-flash-fast-fp4.toml new file mode 100644 index 00000000000..9c63cb4a2db --- /dev/null +++ b/providers/coralbricks/models/deepseek-v4.1-flash-fast-fp4.toml @@ -0,0 +1,25 @@ +# CoralBricks pricing per https://www.coralbricks.ai/pricing and https://www.coralbricks.ai/api/public/models (accessed 2026-09-21): +# input $0.30, output $1.20, cache write $0.09 per 1M tokens; cached input is free. +# Effort: reasoning_effort = none|low|high|max. Reasoning is opt-in: with no reasoning_effort, or none, the model +# answers without reasoning. thinking.type is ignored by this endpoint. +# Verified live against POST https://inference.coralbricks.ai/v1/chat/completions (2026-09-21): low, high and max +# return HTTP 200 with reasoning_content; none and no field return 0 reasoning tokens. +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash FP4" +reasoning_options = [{ type = "effort", values = ["none", "low", "high", "max"] }] +interleaved = true +attachment = false + +[limit] +context = 1_048_576 +output = 131_072 + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0 +cache_write = 0.09 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/coralbricks/models/glm-5.2-fp4.toml b/providers/coralbricks/models/glm-5.2-fp4.toml deleted file mode 100644 index 575d37719c6..00000000000 --- a/providers/coralbricks/models/glm-5.2-fp4.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "zhipuai/glm-5.2" -name = "GLM 5.2 FP4" - -reasoning = true -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["minimal", "low", "medium", "high"] }] -interleaved = true - -[limit] -context = 1_048_576 -output = 131_072 - -[cost] -input = 1.12 -output = 4.4 -cache_read = 0 diff --git a/providers/coralbricks/models/glm-5.3-flash-fp4.toml b/providers/coralbricks/models/glm-5.3-flash-fp4.toml new file mode 100644 index 00000000000..2c52bfdcb00 --- /dev/null +++ b/providers/coralbricks/models/glm-5.3-flash-fp4.toml @@ -0,0 +1,19 @@ +base_model = "zhipuai/glm-5.3-flash" +name = "GLM 5.3 Flash FP4" + +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] +interleaved = true + +[limit] +context = 1_048_576 +output = 131_072 + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0 +cache_write = 0.23 + +[modalities] +input = ["text", "image", "video"] +output = ["text"] diff --git a/providers/coralbricks/models/glm-5.3-fp4.toml b/providers/coralbricks/models/glm-5.3-fp4.toml new file mode 100644 index 00000000000..90e669e9d54 --- /dev/null +++ b/providers/coralbricks/models/glm-5.3-fp4.toml @@ -0,0 +1,15 @@ +base_model = "zhipuai/glm-5.3" +name = "GLM 5.3 FP4" + +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] +interleaved = true + +[limit] +context = 1_048_576 +output = 131_072 + +[cost] +input = 1.12 +output = 4.4 +cache_read = 0 +cache_write = 1.68 diff --git a/providers/coralbricks/models/gpt-oss-120b.toml b/providers/coralbricks/models/gpt-oss-120b.toml index 8fd3f30e11e..80b28acc1b5 100644 --- a/providers/coralbricks/models/gpt-oss-120b.toml +++ b/providers/coralbricks/models/gpt-oss-120b.toml @@ -8,3 +8,4 @@ interleaved = true input = 0.12 output = 0.6 cache_read = 0 +cache_write = 0.18 diff --git a/providers/coralbricks/models/kimi-k3.toml b/providers/coralbricks/models/kimi-k3.toml deleted file mode 100644 index 77c2aabdc7b..00000000000 --- a/providers/coralbricks/models/kimi-k3.toml +++ /dev/null @@ -1,10 +0,0 @@ -base_model = "moonshotai/kimi-k3" - -reasoning = true -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["minimal", "low", "medium", "high"] }] -interleaved = true - -[cost] -input = 3.0 -output = 15.0 -cache_read = 0 diff --git a/providers/cortecs/models/apertus-70b.toml b/providers/cortecs/models/apertus-70b.toml index 783b1649332..8426b58bca8 100644 --- a/providers/cortecs/models/apertus-70b.toml +++ b/providers/cortecs/models/apertus-70b.toml @@ -10,4 +10,4 @@ input = 1.393 output = 2.228 [limit] -output = 65_536 +output = 16_384 diff --git a/providers/cortecs/models/claude-4-5-sonnet.toml b/providers/cortecs/models/claude-4-5-sonnet.toml index 5475848656a..69fc1faeab7 100644 --- a/providers/cortecs/models/claude-4-5-sonnet.toml +++ b/providers/cortecs/models/claude-4-5-sonnet.toml @@ -15,6 +15,3 @@ input = 2.989 output = 14.945 cache_read = 0.326 cache_write = 4.078 - -[limit] -output = 200_000 diff --git a/providers/cortecs/models/claude-4-6-sonnet.toml b/providers/cortecs/models/claude-4-6-sonnet.toml index e2d65163b1a..a5f3b417307 100644 --- a/providers/cortecs/models/claude-4-6-sonnet.toml +++ b/providers/cortecs/models/claude-4-6-sonnet.toml @@ -17,4 +17,4 @@ cache_read = 0.32 cache_write = 3.999 [limit] -output = 1_000_000 +output = 128_000 diff --git a/providers/cortecs/models/claude-haiku-4-5.toml b/providers/cortecs/models/claude-haiku-4-5.toml index 942a91e1fdc..c485e9f43de 100644 --- a/providers/cortecs/models/claude-haiku-4-5.toml +++ b/providers/cortecs/models/claude-haiku-4-5.toml @@ -15,6 +15,3 @@ input = 0.996 output = 4.982 cache_read = 0.099 cache_write = 1.186 - -[limit] -output = 200_000 diff --git a/providers/cortecs/models/claude-opus-5.toml b/providers/cortecs/models/claude-opus-5.toml index 8ae10b28450..426c2b22cd4 100644 --- a/providers/cortecs/models/claude-opus-5.toml +++ b/providers/cortecs/models/claude-opus-5.toml @@ -14,6 +14,3 @@ input = 5.5 output = 27.498 cache_read = 0.55 cache_write = 6.874 - -[limit] -output = 1_000_000 diff --git a/providers/cortecs/models/claude-opus4-5.toml b/providers/cortecs/models/claude-opus4-5.toml index 527ff4a8047..fde13af0f52 100644 --- a/providers/cortecs/models/claude-opus4-5.toml +++ b/providers/cortecs/models/claude-opus4-5.toml @@ -15,6 +15,3 @@ input = 5.313 output = 26.568 cache_read = 0.531 cache_write = 6.645 - -[limit] -output = 200_000 diff --git a/providers/cortecs/models/claude-opus4-6.toml b/providers/cortecs/models/claude-opus4-6.toml index f2ca3eb90e8..4b81fbe2029 100644 --- a/providers/cortecs/models/claude-opus4-6.toml +++ b/providers/cortecs/models/claude-opus4-6.toml @@ -15,6 +15,3 @@ input = 5.313 output = 26.561 cache_read = 0.531 cache_write = 6.645 - -[limit] -output = 1_000_000 diff --git a/providers/cortecs/models/claude-opus4-7.toml b/providers/cortecs/models/claude-opus4-7.toml index 60d9dca5c81..3e358b82ab6 100644 --- a/providers/cortecs/models/claude-opus4-7.toml +++ b/providers/cortecs/models/claude-opus4-7.toml @@ -15,6 +15,3 @@ input = 5.437 output = 27.186 cache_read = 0.544 cache_write = 6.797 - -[limit] -output = 1_000_000 diff --git a/providers/cortecs/models/claude-opus4-8.toml b/providers/cortecs/models/claude-opus4-8.toml index 532ea5fb652..02700fd1d57 100644 --- a/providers/cortecs/models/claude-opus4-8.toml +++ b/providers/cortecs/models/claude-opus4-8.toml @@ -14,6 +14,3 @@ input = 5.437 output = 27.186 cache_read = 0.544 cache_write = 6.797 - -[limit] -output = 1_000_000 diff --git a/providers/cortecs/models/claude-sonnet-4.toml b/providers/cortecs/models/claude-sonnet-4.toml index 1d96a667821..5661a430c8e 100644 --- a/providers/cortecs/models/claude-sonnet-4.toml +++ b/providers/cortecs/models/claude-sonnet-4.toml @@ -17,4 +17,4 @@ cache_read = 0.29 cache_write = 3.624 [limit] -output = 200_000 +output = 65_000 diff --git a/providers/cortecs/models/claude-sonnet-5.toml b/providers/cortecs/models/claude-sonnet-5.toml index a682c995740..9e2f3de9663 100644 --- a/providers/cortecs/models/claude-sonnet-5.toml +++ b/providers/cortecs/models/claude-sonnet-5.toml @@ -14,6 +14,3 @@ input = 2.2 output = 11 cache_read = 0.219 cache_write = 2.749 - -[limit] -output = 1_000_000 diff --git a/providers/cortecs/models/codestral-2508.toml b/providers/cortecs/models/codestral-2508.toml index f9547b3dd4e..844a12bf1a9 100644 --- a/providers/cortecs/models/codestral-2508.toml +++ b/providers/cortecs/models/codestral-2508.toml @@ -12,9 +12,9 @@ knowledge = "2025-03" open_weights = true [cost] -input = 0.334 -output = 1.003 -cache_read = 0.033 +input = 0.368 +output = 1.103 +cache_read = 0.037 [limit] context = 256_000 diff --git a/providers/cortecs/models/cosmos3-super-reasoner.toml b/providers/cortecs/models/cosmos3-super-reasoner.toml deleted file mode 100644 index 61bc01e31da..00000000000 --- a/providers/cortecs/models/cosmos3-super-reasoner.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "cosmos3-super-reasoner" -description = "Cosmos3 Super Reasoner is a high-capacity reasoning model designed for complex multi-agent tasks and advanced physical AI understanding." -release_date = "2026-06-02" -last_updated = "2026-06-02" -attachment = false -reasoning = true -temperature = false -tool_call = true -structured_output = true -open_weights = false -reasoning_options = [] - -[cost] -input = 0.099 -output = 0.296 - -[limit] -context = 256_000 -output = 256_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cortecs/models/deepseek-v4-flash-0731.toml b/providers/cortecs/models/deepseek-v4-flash-0731.toml index cbbf634182a..c6b4f299c71 100644 --- a/providers/cortecs/models/deepseek-v4-flash-0731.toml +++ b/providers/cortecs/models/deepseek-v4-flash-0731.toml @@ -12,9 +12,9 @@ type = "effort" values = ["low", "medium", "high"] [cost] -input = 0.13 -output = 0.28 -cache_read = 0.03 +input = 0.055 +output = 0.174 +cache_read = 0.009 [limit] context = 1_048_576 diff --git a/providers/cortecs/models/deepseek-v4-pro-0813.toml b/providers/cortecs/models/deepseek-v4-pro-0813.toml new file mode 100644 index 00000000000..70e5bf74363 --- /dev/null +++ b/providers/cortecs/models/deepseek-v4-pro-0813.toml @@ -0,0 +1,14 @@ +base_model = "deepseek/deepseek-v4-pro-0813" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 2 +output = 3.999 +cache_read = 0.5 + +[limit] +context = 1_048_576 +output = 64_000 diff --git a/providers/cortecs/models/deepseek-v4.1-flash.toml b/providers/cortecs/models/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..1a21e3f6a14 --- /dev/null +++ b/providers/cortecs/models/deepseek-v4.1-flash.toml @@ -0,0 +1,13 @@ +# Effort: reasoning_effort = low|medium|high +# https://docs.cortecs.ai/routing/reasoning +base_model = "deepseek/deepseek-v4.1-flash" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[cost] +input = 0.5 +output = 1.499 +cache_read = 0.13 + +[limit] +context = 1_048_576 +output = 64_000 diff --git a/providers/cortecs/models/devstral-2512.toml b/providers/cortecs/models/devstral-2512.toml index 833006d927b..4154947ed95 100644 --- a/providers/cortecs/models/devstral-2512.toml +++ b/providers/cortecs/models/devstral-2512.toml @@ -3,10 +3,10 @@ description = "Mistral coding agent model for repository tasks and software engi structured_output = true [cost] -input = 0.446 -output = 2.228 +input = 0.478 +output = 2.392 cache_read = 0.045 [limit] -context = 262_000 -output = 262_000 +context = 256_000 +output = 256_000 diff --git a/providers/cortecs/models/gemini-2.5-flash.toml b/providers/cortecs/models/gemini-2.5-flash.toml index 4d841841ee5..f00fc4a0d8e 100644 --- a/providers/cortecs/models/gemini-2.5-flash.toml +++ b/providers/cortecs/models/gemini-2.5-flash.toml @@ -8,7 +8,7 @@ cache_read = 0.029 cache_write = 0.097 [limit] -output = 1_048_576 +output = 65_535 [modalities] input = ["text", "image", "audio", "pdf"] diff --git a/providers/cortecs/models/gemini-3.1-flash-lite.toml b/providers/cortecs/models/gemini-3.1-flash-lite.toml index cad8b92430e..db91e44dc3f 100644 --- a/providers/cortecs/models/gemini-3.1-flash-lite.toml +++ b/providers/cortecs/models/gemini-3.1-flash-lite.toml @@ -8,7 +8,7 @@ cache_read = 0.025 cache_write = 0.082 [limit] -output = 1_048_576 +output = 65_535 [modalities] input = ["text", "image", "audio", "pdf"] diff --git a/providers/cortecs/models/gemini-3.5-flash-lite.toml b/providers/cortecs/models/gemini-3.5-flash-lite.toml index b10a0dd42aa..a4f70fb7fb1 100644 --- a/providers/cortecs/models/gemini-3.5-flash-lite.toml +++ b/providers/cortecs/models/gemini-3.5-flash-lite.toml @@ -10,7 +10,7 @@ output = 2.749 cache_read = 0.033 [limit] -output = 1_048_576 +output = 65_535 [modalities] input = ["text", "image", "audio", "pdf"] diff --git a/providers/cortecs/models/gemini-3.5-flash.toml b/providers/cortecs/models/gemini-3.5-flash.toml index a9041ead902..d56b015c984 100644 --- a/providers/cortecs/models/gemini-3.5-flash.toml +++ b/providers/cortecs/models/gemini-3.5-flash.toml @@ -1,5 +1,8 @@ base_model = "google/gemini-3.5-flash" -reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] [cost] input = 1.649 @@ -8,7 +11,7 @@ cache_read = 0.165 cache_write = 1 [limit] -output = 1_048_576 +output = 65_535 [modalities] input = ["text", "image", "audio"] diff --git a/providers/cortecs/models/gemini-3.6-flash.toml b/providers/cortecs/models/gemini-3.6-flash.toml index d575827d8c3..23c47e0f96c 100644 --- a/providers/cortecs/models/gemini-3.6-flash.toml +++ b/providers/cortecs/models/gemini-3.6-flash.toml @@ -1,5 +1,8 @@ base_model = "google/gemini-3.6-flash" -reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] [cost] input = 0.75 @@ -8,7 +11,7 @@ cache_read = 0.075 cache_write = 0.038 [limit] -output = 1_048_576 +output = 65_535 [modalities] input = ["text", "image", "audio"] diff --git a/providers/cortecs/models/gemini-3.7-flash.toml b/providers/cortecs/models/gemini-3.7-flash.toml index fac48db17e5..e323f03e232 100644 --- a/providers/cortecs/models/gemini-3.7-flash.toml +++ b/providers/cortecs/models/gemini-3.7-flash.toml @@ -11,7 +11,7 @@ cache_read = 0.075 cache_write = 0.038 [limit] -output = 1_048_576 +output = 65_535 [modalities] input = ["text", "image", "audio", "pdf"] diff --git a/providers/cortecs/models/gemini-3.8-flash.toml b/providers/cortecs/models/gemini-3.8-flash.toml new file mode 100644 index 00000000000..c3b7bf92671 --- /dev/null +++ b/providers/cortecs/models/gemini-3.8-flash.toml @@ -0,0 +1,16 @@ +# Effort: reasoning_effort = low|medium|high +# Source: https://docs.cortecs.ai/examples/reasoning +base_model = "google/gemini-3.8-flash" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[cost] +input = 0.825 +output = 4.125 +cache_read = 0.082 +cache_write = 0.084 + +[limit] +output = 65_535 + +[modalities] +input = ["text", "image", "audio", "pdf"] diff --git a/providers/cortecs/models/gemma-3-27b-it.toml b/providers/cortecs/models/gemma-3-27b-it.toml index 29c974f0a53..b205d78270c 100644 --- a/providers/cortecs/models/gemma-3-27b-it.toml +++ b/providers/cortecs/models/gemma-3-27b-it.toml @@ -1,13 +1,9 @@ -name = "gemma-3-27b-it" +base_model = "google/gemma-3-27b-it" description = "Gemma 3 is a family of lightweight, multimodal models from Google, supporting text and image inputs, multilingual capabilities, and a 131K context window." -release_date = "2025-03-12" -last_updated = "2025-03-12" -attachment = true reasoning = true temperature = false tool_call = false structured_output = true -open_weights = false reasoning_options = [] [cost] @@ -16,8 +12,4 @@ output = 0.299 [limit] context = 131_000 -output = 131_000 - -[modalities] -input = ["text", "image"] -output = ["text"] +output = 110_000 diff --git a/providers/cortecs/models/gemma-4-26b-a4b-it.toml b/providers/cortecs/models/gemma-4-26b-a4b-it.toml index dd9940d78d3..8b2a7a279a8 100644 --- a/providers/cortecs/models/gemma-4-26b-a4b-it.toml +++ b/providers/cortecs/models/gemma-4-26b-a4b-it.toml @@ -7,4 +7,4 @@ output = 0.557 [limit] context = 262_000 -output = 262_000 +output = 81_920 diff --git a/providers/cortecs/models/glm-4.7.toml b/providers/cortecs/models/glm-4.7.toml deleted file mode 100644 index 18cd487e492..00000000000 --- a/providers/cortecs/models/glm-4.7.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "zhipuai/glm-4.7" -description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -structured_output = true -reasoning_options = [] - -[interleaved] -field = "reasoning_content" - -[cost] -input = 0.78 -output = 2.785 - -[limit] -context = 202_752 -output = 198_000 diff --git a/providers/cortecs/models/glm-5.2.toml b/providers/cortecs/models/glm-5.2.toml index 48706497a1b..c18a497ae1e 100644 --- a/providers/cortecs/models/glm-5.2.toml +++ b/providers/cortecs/models/glm-5.2.toml @@ -8,10 +8,10 @@ type = "effort" values = ["high", "max"] [cost] -input = 1.2 -output = 4.2 -cache_read = 0.26 +input = 1.1 +output = 2.99 +cache_read = 0.18 [limit] context = 1_048_576 -output = 1_048_576 +output = 1_000_000 diff --git a/providers/cortecs/models/glm-5.3-flash.toml b/providers/cortecs/models/glm-5.3-flash.toml new file mode 100644 index 00000000000..7a151f91d7a --- /dev/null +++ b/providers/cortecs/models/glm-5.3-flash.toml @@ -0,0 +1,23 @@ +# Sources (accessed 2026-08-28): +# https://docs.bigmodel.cn/cn/guide/models/vlm/glm-5.3-flash +# https://docs.cortecs.ai/usage/reasoning +# Effort: reasoning_effort = low|high|max, matching the lab and relay peers. +# Thinking is always enabled; no toggle or reasoning-token budget. +# Output limit: https://api.cortecs.ai/v1/models (max_output_tokens, not context_size). +base_model = "zhipuai/glm-5.3-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.1 +output = 0.35 +cache_read = 0.018 + +[limit] +context = 1_048_576 +output = 1_048_576 + +[modalities] +input = ["text", "image"] diff --git a/providers/cortecs/models/glm-5.3.toml b/providers/cortecs/models/glm-5.3.toml new file mode 100644 index 00000000000..d6f49c7e113 --- /dev/null +++ b/providers/cortecs/models/glm-5.3.toml @@ -0,0 +1,18 @@ +# Effort: reasoning_effort = low|high|max, matching the lab and relay peers. +# Cortecs maps reasoning_effort to backend controls; GLM-5.3 always reasons. +# https://docs.z.ai/guides/llm/glm-5.3 +# https://docs.cortecs.ai/examples/reasoning +base_model = "zhipuai/glm-5.3" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.114 +output = 3.899 +cache_read = 0.279 + +[limit] +context = 1_048_576 +output = 1_048_576 diff --git a/providers/cortecs/models/gpt-4.1-mini.toml b/providers/cortecs/models/gpt-4.1-mini.toml index 3d2310d557d..5268c76faa2 100644 --- a/providers/cortecs/models/gpt-4.1-mini.toml +++ b/providers/cortecs/models/gpt-4.1-mini.toml @@ -5,6 +5,3 @@ structured_output = false input = 0.434 output = 1.704 cache_read = 0.134 - -[limit] -output = 1_047_576 diff --git a/providers/cortecs/models/gpt-4.1-nano.toml b/providers/cortecs/models/gpt-4.1-nano.toml index 0c6a4e99e56..b6cb72a1908 100644 --- a/providers/cortecs/models/gpt-4.1-nano.toml +++ b/providers/cortecs/models/gpt-4.1-nano.toml @@ -6,8 +6,5 @@ input = 0.111 output = 0.434 cache_read = 0.056 -[limit] -output = 1_047_576 - [modalities] input = ["text", "image", "pdf"] diff --git a/providers/cortecs/models/gpt-4.1.toml b/providers/cortecs/models/gpt-4.1.toml index d8c2e921d2d..31f3538c837 100644 --- a/providers/cortecs/models/gpt-4.1.toml +++ b/providers/cortecs/models/gpt-4.1.toml @@ -6,6 +6,3 @@ structured_output = false input = 2.192 output = 8.769 cache_read = 0.546 - -[limit] -output = 1_047_576 diff --git a/providers/cortecs/models/gpt-4o-mini.toml b/providers/cortecs/models/gpt-4o-mini.toml index d8ac084b883..99352a76f62 100644 --- a/providers/cortecs/models/gpt-4o-mini.toml +++ b/providers/cortecs/models/gpt-4o-mini.toml @@ -7,4 +7,4 @@ output = 0.638 cache_read = 0.081 [limit] -output = 128_000 +output = 16_000 diff --git a/providers/cortecs/models/gpt-4o.toml b/providers/cortecs/models/gpt-4o.toml index d75037a4936..83c6e434966 100644 --- a/providers/cortecs/models/gpt-4o.toml +++ b/providers/cortecs/models/gpt-4o.toml @@ -7,4 +7,4 @@ output = 10.635 cache_read = 1.33 [limit] -output = 128_000 +output = 16_000 diff --git a/providers/cortecs/models/gpt-5-mini.toml b/providers/cortecs/models/gpt-5-mini.toml index e23c43c9146..70417f62649 100644 --- a/providers/cortecs/models/gpt-5-mini.toml +++ b/providers/cortecs/models/gpt-5-mini.toml @@ -9,6 +9,3 @@ values = ["low", "medium", "high"] input = 0.279 output = 2.192 cache_read = 0.056 - -[limit] -output = 400_000 diff --git a/providers/cortecs/models/gpt-5-nano.toml b/providers/cortecs/models/gpt-5-nano.toml index b2d796c6046..ab55c508d23 100644 --- a/providers/cortecs/models/gpt-5-nano.toml +++ b/providers/cortecs/models/gpt-5-nano.toml @@ -9,6 +9,3 @@ values = ["low", "medium", "high"] input = 0.06 output = 0.439 cache_read = 0.019 - -[limit] -output = 400_000 diff --git a/providers/cortecs/models/gpt-5.1.toml b/providers/cortecs/models/gpt-5.1.toml index be114ef4418..9f429a64d6b 100644 --- a/providers/cortecs/models/gpt-5.1.toml +++ b/providers/cortecs/models/gpt-5.1.toml @@ -10,8 +10,5 @@ input = 1.375 output = 10.96 cache_read = 0.156 -[limit] -output = 400_000 - [modalities] input = ["text", "image", "pdf"] diff --git a/providers/cortecs/models/gpt-5.4.toml b/providers/cortecs/models/gpt-5.4.toml index f5bac51cadd..5c151e3cf46 100644 --- a/providers/cortecs/models/gpt-5.4.toml +++ b/providers/cortecs/models/gpt-5.4.toml @@ -9,6 +9,3 @@ values = ["low", "medium", "high"] input = 2.898 output = 15.453 cache_read = 0.242 - -[limit] -output = 1_050_000 diff --git a/providers/cortecs/models/gpt-5.6-luna.toml b/providers/cortecs/models/gpt-5.6-luna.toml index dacd7a3259d..622fb066769 100644 --- a/providers/cortecs/models/gpt-5.6-luna.toml +++ b/providers/cortecs/models/gpt-5.6-luna.toml @@ -9,6 +9,3 @@ input = 0.219 output = 1.32 cache_read = 0.022 cache_write = 0.275 - -[limit] -output = 1_050_000 diff --git a/providers/cortecs/models/gpt-5.6-sol.toml b/providers/cortecs/models/gpt-5.6-sol.toml index 9fc74af0fe1..753a0ca5ff5 100644 --- a/providers/cortecs/models/gpt-5.6-sol.toml +++ b/providers/cortecs/models/gpt-5.6-sol.toml @@ -9,6 +9,3 @@ input = 5.5 output = 32.998 cache_read = 0.55 cache_write = 6.879 - -[limit] -output = 1_050_000 diff --git a/providers/cortecs/models/gpt-5.6-terra.toml b/providers/cortecs/models/gpt-5.6-terra.toml index d3006e80082..4839da3c8eb 100644 --- a/providers/cortecs/models/gpt-5.6-terra.toml +++ b/providers/cortecs/models/gpt-5.6-terra.toml @@ -9,6 +9,3 @@ input = 2.2 output = 13.199 cache_read = 0.219 cache_write = 2.749 - -[limit] -output = 1_050_000 diff --git a/providers/cortecs/models/gpt-5.toml b/providers/cortecs/models/gpt-5.toml index 32fd3f83daa..5073da5f49a 100644 --- a/providers/cortecs/models/gpt-5.toml +++ b/providers/cortecs/models/gpt-5.toml @@ -9,6 +9,3 @@ values = ["low", "medium", "high"] input = 1.375 output = 10.96 cache_read = 0.156 - -[limit] -output = 400_000 diff --git a/providers/cortecs/models/gpt-oss-120b.toml b/providers/cortecs/models/gpt-oss-120b.toml index 7391e05e7e9..9abc1327a5e 100644 --- a/providers/cortecs/models/gpt-oss-120b.toml +++ b/providers/cortecs/models/gpt-oss-120b.toml @@ -12,4 +12,4 @@ cache_read = 0.01 [limit] context = 131_000 -output = 128_000 +output = 131_000 diff --git a/providers/cortecs/models/hermes-4-70b.toml b/providers/cortecs/models/hermes-4-70b.toml deleted file mode 100644 index e640f0f67d5..00000000000 --- a/providers/cortecs/models/hermes-4-70b.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Hermes 4 70B" -description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" -release_date = "2025-08-26" -last_updated = "2025-08-26" -attachment = false -reasoning = false -temperature = true -tool_call = true -structured_output = true -knowledge = "2023-12" -open_weights = true - -[cost] -input = 0.129 -output = 0.399 - -[limit] -context = 128_000 -output = 128_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cortecs/models/kimi-k2.5.toml b/providers/cortecs/models/kimi-k2.5.toml index 6e9672dcb6f..1440935f803 100644 --- a/providers/cortecs/models/kimi-k2.5.toml +++ b/providers/cortecs/models/kimi-k2.5.toml @@ -13,8 +13,5 @@ input = 0.495 output = 2.768 cache_read = 0.124 -[limit] -output = 256_000 - [modalities] input = ["text", "image"] diff --git a/providers/cortecs/models/kimi-k2.6.toml b/providers/cortecs/models/kimi-k2.6.toml index f8d00fc7213..559856afd3a 100644 --- a/providers/cortecs/models/kimi-k2.6.toml +++ b/providers/cortecs/models/kimi-k2.6.toml @@ -8,12 +8,9 @@ field = "reasoning_content" type = "toggle" [cost] -input = 0.773 -output = 3.38 -cache_read = 0.193 - -[limit] -output = 256_000 +input = 0.516 +output = 2.869 +cache_read = 0.115 [modalities] input = ["text", "image", "pdf"] diff --git a/providers/cortecs/models/kimi-k2.7-code.toml b/providers/cortecs/models/kimi-k2.7-code.toml index 30590475cd6..7d104ad2503 100644 --- a/providers/cortecs/models/kimi-k2.7-code.toml +++ b/providers/cortecs/models/kimi-k2.7-code.toml @@ -5,9 +5,9 @@ reasoning_options = [] field = "reasoning_content" [cost] -input = 0.75 -output = 3.5 -cache_read = 0.201 +input = 0.706 +output = 3.208 +cache_read = 0.18 [modalities] input = ["text", "image", "pdf"] diff --git a/providers/cortecs/models/kimi-k3.toml b/providers/cortecs/models/kimi-k3.toml index 002c2338efb..c8d1f2dc939 100644 --- a/providers/cortecs/models/kimi-k3.toml +++ b/providers/cortecs/models/kimi-k3.toml @@ -1,8 +1,8 @@ -# Cortecs lists EUR 2.693 input and EUR 13.464 output per million tokens. -# Converted at 1 EUR = 1.114 USD and rounded to the provider's displayed USD rates. -# https://api.cortecs.ai/v1/models (accessed 2026-07-29) base_model = "moonshotai/kimi-k3" -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] [interleaved] field = "reasoning_content" diff --git a/providers/cortecs/models/llama-3.1-405b-instruct.toml b/providers/cortecs/models/llama-3.1-405b-instruct.toml deleted file mode 100644 index cc85efa5deb..00000000000 --- a/providers/cortecs/models/llama-3.1-405b-instruct.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Llama 3.1 405B Instruct" -description = "Open Llama instruction model for multilingual chat, reasoning, and coding" -family = "llama" -release_date = "2024-07-23" -last_updated = "2024-07-23" -attachment = false -reasoning = true -temperature = true -tool_call = true -structured_output = true -knowledge = "2023-12" -open_weights = true -reasoning_options = [] - -[cost] -input = 1.95 -output = 1.95 - -[limit] -context = 128_000 -output = 128_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cortecs/models/llama-3.1-nemotron-ultra-253b-v1.toml b/providers/cortecs/models/llama-3.1-nemotron-ultra-253b-v1.toml deleted file mode 100644 index 7b81f53f5b3..00000000000 --- a/providers/cortecs/models/llama-3.1-nemotron-ultra-253b-v1.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "llama-3.1-nemotron-ultra-253b-v1" -description = "A reasoning-optimized LLM based on Llama 3.1, Nemotron Ultra 253B delivers strong performance in tasks like RAG and tool use, with high efficiency and reduced latency." -release_date = "2025-04-07" -last_updated = "2025-04-07" -attachment = false -reasoning = true -temperature = false -tool_call = true -structured_output = true -open_weights = false -reasoning_options = [] - -[cost] -input = 0.598 -output = 1.794 - -[limit] -context = 128_000 -output = 128_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cortecs/models/llama-3.3-70b-instruct.toml b/providers/cortecs/models/llama-3.3-70b-instruct.toml index cb054b806d6..204e0ed29b9 100644 --- a/providers/cortecs/models/llama-3.3-70b-instruct.toml +++ b/providers/cortecs/models/llama-3.3-70b-instruct.toml @@ -1,10 +1,9 @@ base_model = "meta/llama-3.3-70b-instruct" -attachment = false structured_output = true [cost] -input = 0.129 -output = 0.399 +input = 0.724 +output = 0.724 [limit] context = 131_000 diff --git a/providers/cortecs/models/minimax-m2.5.toml b/providers/cortecs/models/minimax-m2.5.toml index 218e96ae663..af074e5dfe9 100644 --- a/providers/cortecs/models/minimax-m2.5.toml +++ b/providers/cortecs/models/minimax-m2.5.toml @@ -12,5 +12,5 @@ output = 1.186 cache_read = 0.075 [limit] -context = 196_680 -output = 196_608 +context = 196_000 +output = 196_000 diff --git a/providers/cortecs/models/minimax-m2.7.toml b/providers/cortecs/models/minimax-m2.7.toml index de169793535..ed8a05934b6 100644 --- a/providers/cortecs/models/minimax-m2.7.toml +++ b/providers/cortecs/models/minimax-m2.7.toml @@ -9,4 +9,4 @@ output = 2.674 [limit] context = 196_608 -output = 196_072 +output = 196_608 diff --git a/providers/cortecs/models/minimax-m2.toml b/providers/cortecs/models/minimax-m2.toml index 6e428e287e3..eecd36f3753 100644 --- a/providers/cortecs/models/minimax-m2.toml +++ b/providers/cortecs/models/minimax-m2.toml @@ -12,4 +12,4 @@ output = 1.405 [limit] context = 400_000 -output = 400_000 +output = 196_000 diff --git a/providers/cortecs/models/ministral-14b-2512.toml b/providers/cortecs/models/ministral-14b-2512.toml index e57017e1d77..6b79c2b3c20 100644 --- a/providers/cortecs/models/ministral-14b-2512.toml +++ b/providers/cortecs/models/ministral-14b-2512.toml @@ -10,8 +10,8 @@ structured_output = true open_weights = false [cost] -input = 0.223 -output = 0.223 +input = 0.24 +output = 0.24 cache_read = 0.022 [limit] diff --git a/providers/cortecs/models/ministral-3b-2512.toml b/providers/cortecs/models/ministral-3b-2512.toml index 4e686e35de2..036dc387677 100644 --- a/providers/cortecs/models/ministral-3b-2512.toml +++ b/providers/cortecs/models/ministral-3b-2512.toml @@ -10,9 +10,9 @@ structured_output = true open_weights = false [cost] -input = 0.111 -output = 0.111 -cache_read = 0.011 +input = 0.123 +output = 0.123 +cache_read = 0.012 [limit] context = 256_000 diff --git a/providers/cortecs/models/ministral-8b-2512.toml b/providers/cortecs/models/ministral-8b-2512.toml index ddbd9624484..429f3dd2215 100644 --- a/providers/cortecs/models/ministral-8b-2512.toml +++ b/providers/cortecs/models/ministral-8b-2512.toml @@ -10,8 +10,8 @@ structured_output = true open_weights = false [cost] -input = 0.167 -output = 0.167 +input = 0.179 +output = 0.179 cache_read = 0.017 [limit] diff --git a/providers/cortecs/models/mistral-7b-instruct-v0.2.toml b/providers/cortecs/models/mistral-7b-instruct-v0.2.toml index ce87e65b9bf..a601fdfa2c7 100644 --- a/providers/cortecs/models/mistral-7b-instruct-v0.2.toml +++ b/providers/cortecs/models/mistral-7b-instruct-v0.2.toml @@ -15,7 +15,7 @@ output = 0.219 [limit] context = 32_000 -output = 32_000 +output = 8_192 [modalities] input = ["text", "pdf"] diff --git a/providers/cortecs/models/mistral-large-2402.toml b/providers/cortecs/models/mistral-large-2402.toml index 0c7134b9313..af6a48d7bbd 100644 --- a/providers/cortecs/models/mistral-large-2402.toml +++ b/providers/cortecs/models/mistral-large-2402.toml @@ -16,7 +16,7 @@ output = 12.952 [limit] context = 32_000 -output = 32_000 +output = 8_192 [modalities] input = ["text", "pdf"] diff --git a/providers/cortecs/models/mistral-large-2512.toml b/providers/cortecs/models/mistral-large-2512.toml index 52b4e581a25..cbca6a6506d 100644 --- a/providers/cortecs/models/mistral-large-2512.toml +++ b/providers/cortecs/models/mistral-large-2512.toml @@ -2,9 +2,9 @@ base_model = "mistral/mistral-large-2512" structured_output = true [cost] -input = 0.557 -output = 1.671 -cache_read = 0.056 +input = 0.613 +output = 1.838 +cache_read = 0.061 [limit] context = 256_000 diff --git a/providers/cortecs/models/mistral-medium-2508.toml b/providers/cortecs/models/mistral-medium-2508.toml deleted file mode 100644 index e81a6c42e6e..00000000000 --- a/providers/cortecs/models/mistral-medium-2508.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "mistral-medium-2508" -description = "Mistral Medium 2508 is a frontier-class multimodal LLM with a 128,000 token context window, optimized for reasoning, coding, and multimodal tasks." -release_date = "2024-08-07" -last_updated = "2024-08-07" -attachment = true -reasoning = true -temperature = false -tool_call = true -structured_output = true -open_weights = false -reasoning_options = [] - -[cost] -input = 0.446 -output = 2.228 -cache_read = 0.045 - -[limit] -context = 128_000 -output = 128_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/cortecs/models/mistral-medium-3.5.toml b/providers/cortecs/models/mistral-medium-3.5.toml index e814aa7640a..7c463c40224 100644 --- a/providers/cortecs/models/mistral-medium-3.5.toml +++ b/providers/cortecs/models/mistral-medium-3.5.toml @@ -11,9 +11,9 @@ open_weights = false reasoning_options = [] [cost] -input = 1.393 -output = 7.13 -cache_read = 0.139 +input = 1.532 +output = 7.843 +cache_read = 0.154 [limit] context = 256_000 diff --git a/providers/cortecs/models/mistral-nemo-instruct-2407.toml b/providers/cortecs/models/mistral-nemo-instruct-2407.toml index 6b38bfabf38..fc3b22b762a 100644 --- a/providers/cortecs/models/mistral-nemo-instruct-2407.toml +++ b/providers/cortecs/models/mistral-nemo-instruct-2407.toml @@ -16,7 +16,7 @@ cache_read = 0.014 [limit] context = 128_000 -output = 131_072 +output = 128_000 [modalities] input = ["text"] diff --git a/providers/cortecs/models/mistral-small-2603.toml b/providers/cortecs/models/mistral-small-2603.toml index 4ec49734866..050ea77050d 100644 --- a/providers/cortecs/models/mistral-small-2603.toml +++ b/providers/cortecs/models/mistral-small-2603.toml @@ -3,10 +3,9 @@ structured_output = true reasoning_options = [] [cost] -input = 0.143 -output = 0.568 -cache_read = 0.014 +input = 0.156 +output = 0.625 +cache_read = 0.016 [limit] context = 262_144 -output = 262_144 diff --git a/providers/cortecs/models/mixtral-8x7B-instruct-v0.1.toml b/providers/cortecs/models/mixtral-8x7B-instruct-v0.1.toml index 2551797c97f..08b5b8de12b 100644 --- a/providers/cortecs/models/mixtral-8x7B-instruct-v0.1.toml +++ b/providers/cortecs/models/mixtral-8x7B-instruct-v0.1.toml @@ -17,7 +17,7 @@ output = 0.758 [limit] context = 32_000 -output = 32_000 +output = 4_096 [modalities] input = ["text", "pdf"] diff --git a/providers/cortecs/models/nova-2-lite.toml b/providers/cortecs/models/nova-2-lite.toml index 2b4e1653e2d..85af7e41e26 100644 --- a/providers/cortecs/models/nova-2-lite.toml +++ b/providers/cortecs/models/nova-2-lite.toml @@ -1,13 +1,7 @@ -name = "nova-2-lite" +base_model = "amazon/nova-2-lite" description = "Nova 2 Lite is an advanced multimodal reasoning model that combines efficiency and performance, delivering reliable AI for agentic workflows and enterprise applications." -release_date = "2025-12-04" -last_updated = "2025-12-04" -attachment = true -reasoning = true temperature = false -tool_call = true structured_output = true -open_weights = false reasoning_options = [] [cost] @@ -15,9 +9,7 @@ input = 0.373 output = 3.144 [limit] -context = 1_000_000 -output = 1_000_000 +output = 65_535 [modalities] input = ["text", "image", "pdf"] -output = ["text"] diff --git a/providers/cortecs/models/nova-lite-v1.toml b/providers/cortecs/models/nova-lite-v1.toml index c3f62b107d4..54c1e1a2dbd 100644 --- a/providers/cortecs/models/nova-lite-v1.toml +++ b/providers/cortecs/models/nova-lite-v1.toml @@ -16,7 +16,7 @@ output = 0.275 [limit] context = 300_000 -output = 300_000 +output = 10_000 [modalities] input = ["text", "image", "pdf"] diff --git a/providers/cortecs/models/nova-micro-v1.toml b/providers/cortecs/models/nova-micro-v1.toml index ce8595fb24c..da65b2b4568 100644 --- a/providers/cortecs/models/nova-micro-v1.toml +++ b/providers/cortecs/models/nova-micro-v1.toml @@ -16,7 +16,7 @@ output = 0.159 [limit] context = 128_000 -output = 128_000 +output = 10_000 [modalities] input = ["text", "image"] diff --git a/providers/cortecs/models/nova-pro-v1.toml b/providers/cortecs/models/nova-pro-v1.toml index 262b70c0844..bc55aace80b 100644 --- a/providers/cortecs/models/nova-pro-v1.toml +++ b/providers/cortecs/models/nova-pro-v1.toml @@ -18,7 +18,7 @@ output = 3.671 [limit] context = 300_000 -output = 5_000 +output = 10_000 [modalities] input = ["text", "image", "pdf"] diff --git a/providers/cortecs/models/nvidia-nemotron-3-nano-omni.toml b/providers/cortecs/models/nvidia-nemotron-3-nano-omni.toml deleted file mode 100644 index 4b8a70d55a5..00000000000 --- a/providers/cortecs/models/nvidia-nemotron-3-nano-omni.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "nvidia-nemotron-3-nano-omni" -description = "Nemotron-3-Nano-Omni is an open, efficient omni-modal reasoning model that unifies text, image, audio, and video for agentic AI workflows." -release_date = "2026-04-29" -last_updated = "2026-04-29" -attachment = false -reasoning = true -temperature = false -tool_call = true -structured_output = true -open_weights = false -reasoning_options = [] - -[cost] -input = 0.059 -output = 0.237 - -[limit] -context = 300_000 -output = 300_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/cortecs/models/pixtral-12b-2409.toml b/providers/cortecs/models/pixtral-12b-2409.toml index 62a978e522d..cbcac29c708 100644 --- a/providers/cortecs/models/pixtral-12b-2409.toml +++ b/providers/cortecs/models/pixtral-12b-2409.toml @@ -16,7 +16,7 @@ output = 0.223 [limit] context = 128_000 -output = 128_000 +output = 4_096 [modalities] input = ["text", "image"] diff --git a/providers/cortecs/models/pixtral-large-2502.toml b/providers/cortecs/models/pixtral-large-2502.toml index 732f24f7613..8ee501e9620 100644 --- a/providers/cortecs/models/pixtral-large-2502.toml +++ b/providers/cortecs/models/pixtral-large-2502.toml @@ -1,13 +1,8 @@ -name = "pixtral-large-2502" +base_model = "mistral/pixtral-large-2502" description = "Pixtral Large (25.02) is a 124B open-weight multimodal model built on Mistral Large 2, offering advanced image understanding and strong performance across text and code tasks." -release_date = "2025-05-26" -last_updated = "2025-05-26" -attachment = true reasoning = true temperature = false -tool_call = true structured_output = true -open_weights = false reasoning_options = [] [cost] @@ -15,9 +10,7 @@ input = 1.993 output = 5.978 [limit] -context = 128_000 output = 128_000 [modalities] input = ["text", "image", "pdf"] -output = ["text"] diff --git a/providers/cortecs/models/qwen2.5-vl-72b-instruct.toml b/providers/cortecs/models/qwen2.5-vl-72b-instruct.toml index 463981d6339..cff4ec1dda9 100644 --- a/providers/cortecs/models/qwen2.5-vl-72b-instruct.toml +++ b/providers/cortecs/models/qwen2.5-vl-72b-instruct.toml @@ -11,8 +11,8 @@ open_weights = false reasoning_options = [] [cost] -input = 0.25 -output = 0.747 +input = 1.014 +output = 1.014 [limit] context = 32_000 diff --git a/providers/cortecs/models/qwen3-235b-a22b-instruct-2507.toml b/providers/cortecs/models/qwen3-235b-a22b-instruct-2507.toml index c2159b2636b..1d3bf693a61 100644 --- a/providers/cortecs/models/qwen3-235b-a22b-instruct-2507.toml +++ b/providers/cortecs/models/qwen3-235b-a22b-instruct-2507.toml @@ -9,4 +9,4 @@ cache_read = 0.018 [limit] context = 262_000 -output = 131_000 +output = 262_000 diff --git a/providers/cortecs/models/qwen3-32b.toml b/providers/cortecs/models/qwen3-32b.toml index 23c4b00ad58..32225e598f0 100644 --- a/providers/cortecs/models/qwen3-32b.toml +++ b/providers/cortecs/models/qwen3-32b.toml @@ -4,9 +4,8 @@ structured_output = true reasoning_options = [] [cost] -input = 0.099 -output = 0.299 +input = 0.179 +output = 0.697 [limit] -context = 40_000 -output = 40_000 +context = 16_384 diff --git a/providers/cortecs/models/qwen3-coder-30b-a3b-instruct.toml b/providers/cortecs/models/qwen3-coder-30b-a3b-instruct.toml index 09bb3833a2a..12e76ebfac8 100644 --- a/providers/cortecs/models/qwen3-coder-30b-a3b-instruct.toml +++ b/providers/cortecs/models/qwen3-coder-30b-a3b-instruct.toml @@ -7,4 +7,4 @@ output = 0.245 cache_read = 0.014 [limit] -output = 262_000 +output = 262_144 diff --git a/providers/cortecs/models/qwen3-next-80b-a3b-thinking.toml b/providers/cortecs/models/qwen3-next-80b-a3b-thinking.toml deleted file mode 100644 index d0add520f99..00000000000 --- a/providers/cortecs/models/qwen3-next-80b-a3b-thinking.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "alibaba/qwen3-next-80b-a3b-thinking" -description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" -structured_output = true -reasoning_options = [] - -[cost] -input = 0.149 -output = 1.195 - -[limit] -context = 128_000 -output = 128_000 diff --git a/providers/cortecs/models/qwen3.5-397b-a17b.toml b/providers/cortecs/models/qwen3.5-397b-a17b.toml index a2ce4e256da..9a484c4ea40 100644 --- a/providers/cortecs/models/qwen3.5-397b-a17b.toml +++ b/providers/cortecs/models/qwen3.5-397b-a17b.toml @@ -9,7 +9,7 @@ output = 4.01 [limit] context = 262_000 -output = 250_000 +output = 262_000 [modalities] input = ["text"] diff --git a/providers/cortecs/models/qwen3.6-35b-a3b.toml b/providers/cortecs/models/qwen3.6-35b-a3b.toml index 2c3a0bd4707..247086bb784 100644 --- a/providers/cortecs/models/qwen3.6-35b-a3b.toml +++ b/providers/cortecs/models/qwen3.6-35b-a3b.toml @@ -7,7 +7,7 @@ output = 0.557 [limit] context = 262_000 -output = 262_000 +output = 32_768 [modalities] input = ["text", "image"] diff --git a/providers/cortecs/models/qwen3.8-27b.toml b/providers/cortecs/models/qwen3.8-27b.toml index c1b61cfe923..49807837ad1 100644 --- a/providers/cortecs/models/qwen3.8-27b.toml +++ b/providers/cortecs/models/qwen3.8-27b.toml @@ -8,9 +8,9 @@ type = "effort" values = ["low", "medium", "xhigh"] [cost] -input = 0.334 -output = 2.451 -cache_read = 0.111 +input = 0.1 +output = 0.4 +cache_read = 0.04 [limit] output = 262_144 diff --git a/providers/cortecs/models/qwen3.8-flash-next.toml b/providers/cortecs/models/qwen3.8-flash-next.toml new file mode 100644 index 00000000000..37bebcf4aa6 --- /dev/null +++ b/providers/cortecs/models/qwen3.8-flash-next.toml @@ -0,0 +1,22 @@ +# Sources (accessed 2026-08-28): +# https://huggingface.co/Qwen/Qwen3.8-Flash-Next +# https://docs.cortecs.ai/usage/reasoning +# Effort: reasoning_effort = low|medium|xhigh, matching the lab and Cortecs Qwen3.8 peers. +# No lab-only toggle or thinking budget claimed for this relay route. +# Output limit: https://api.cortecs.ai/v1/models (max_output_tokens, not context_size). +base_model = "alibaba/qwen3.8-flash-next" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] + +[cost] +input = 0.201 +output = 0.5 +cache_read = 0.05 + +[limit] +output = 64_000 + +[modalities] +input = ["text", "image"] diff --git a/providers/cortecs/models/voxtral-small-2507.toml b/providers/cortecs/models/voxtral-small-2507.toml index f8ce5732ff8..040a8cd7951 100644 --- a/providers/cortecs/models/voxtral-small-2507.toml +++ b/providers/cortecs/models/voxtral-small-2507.toml @@ -10,9 +10,9 @@ structured_output = true open_weights = false [cost] -input = 0.111 -output = 0.334 -cache_read = 0.011 +input = 0.123 +output = 0.368 +cache_read = 0.012 [limit] context = 32_000 diff --git a/providers/crof/models/deepseek-v4-flash-0731.toml b/providers/crof/models/deepseek-v4-flash-0731.toml index 7fedc21cbff..84aaa9ea9f7 100644 --- a/providers/crof/models/deepseek-v4-flash-0731.toml +++ b/providers/crof/models/deepseek-v4-flash-0731.toml @@ -6,8 +6,8 @@ reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high field = "reasoning_content" [cost] -input = 0.12 -output = 0.21 +input = 0.08 +output = 0.1 cache_read = 0.003 [limit] diff --git a/providers/crof/models/deepseek-v4-flash-vision-exp.toml b/providers/crof/models/deepseek-v4-flash-vision-exp.toml new file mode 100644 index 00000000000..c9af088f346 --- /dev/null +++ b/providers/crof/models/deepseek-v4-flash-vision-exp.toml @@ -0,0 +1,16 @@ +base_model = "deepseek/deepseek-v4-flash-vision-exp" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.08 +output = 0.2 +cache_read = 0.007 + +[limit] +output = 131_072 + +[provider] +npm = "@ai-sdk/openai-compatible" \ No newline at end of file diff --git a/providers/crof/models/deepseek-v4-pro-0813.toml b/providers/crof/models/deepseek-v4-pro-0813.toml new file mode 100644 index 00000000000..e29edc7fa84 --- /dev/null +++ b/providers/crof/models/deepseek-v4-pro-0813.toml @@ -0,0 +1,20 @@ +base_model = "deepseek/deepseek-v4-pro-0813" +name = "DeepSeek V4 Pro (0813)" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + +[cost] +input = 0.35 +output = 0.8 +cache_read = 0.01 + +[limit] +output = 131_072 + +[provider] +npm = "@ai-sdk/openai-compatible" diff --git a/providers/crof/models/deepseek-v4-pro-lightning.toml b/providers/crof/models/deepseek-v4-pro-lightning.toml deleted file mode 100644 index 9e76144e88c..00000000000 --- a/providers/crof/models/deepseek-v4-pro-lightning.toml +++ /dev/null @@ -1,17 +0,0 @@ -base_model = "deepseek/deepseek-v4-pro" -name = "DeepSeek V4 Pro Lightning" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] - -[interleaved] -field = "reasoning_content" - -[cost] -input = 0.8 -output = 1.6 -cache_read = 0.02 - -[limit] -output = 131_072 - -[provider] -npm = "@ai-sdk/openai-compatible" diff --git a/providers/crof/models/glm-5.3-flash.toml b/providers/crof/models/glm-5.3-flash.toml new file mode 100644 index 00000000000..21b559518dc --- /dev/null +++ b/providers/crof/models/glm-5.3-flash.toml @@ -0,0 +1,17 @@ +base_model = "zhipuai/glm-5.3-flash" +name = "GLM 5.3-Flash" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + +[cost] +input = 0.07 +output = 0.22 +cache_read = 0.01 + +[provider] +npm = "@ai-sdk/openai-compatible" diff --git a/providers/crof/models/glm-5.3.toml b/providers/crof/models/glm-5.3.toml new file mode 100644 index 00000000000..776c386dbf1 --- /dev/null +++ b/providers/crof/models/glm-5.3.toml @@ -0,0 +1,16 @@ +base_model = "zhipuai/glm-5.3" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.40 +output = 1.40 +cache_read = 0.06 + +[limit] +output = 131_072 + +[provider] +npm = "@ai-sdk/openai-compatible" \ No newline at end of file diff --git a/providers/crof/models/qwen3.8-27b.toml b/providers/crof/models/qwen3.8-27b.toml index c2633fa54b0..4c6a544d27c 100644 --- a/providers/crof/models/qwen3.8-27b.toml +++ b/providers/crof/models/qwen3.8-27b.toml @@ -2,9 +2,9 @@ base_model = "alibaba/qwen3.8-27b" reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] [cost] -input = 0.25 -output = 2.1 -cache_read = 0.06 +input = 0.2 +output = 1.5 +cache_read = 0.03 [limit] output = 262_144 diff --git a/providers/crossmodel/models/anthropic/claude-fable-5-1.toml b/providers/crossmodel/models/anthropic/claude-fable-5-1.toml new file mode 100644 index 00000000000..ca327804184 --- /dev/null +++ b/providers/crossmodel/models/anthropic/claude-fable-5-1.toml @@ -0,0 +1,14 @@ +base_model = "anthropic/claude-fable-5-1" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 + +[modalities] +input = ["text", "image"] diff --git a/providers/crossmodel/models/anthropic/claude-opus-5-5.toml b/providers/crossmodel/models/anthropic/claude-opus-5-5.toml new file mode 100644 index 00000000000..d9abb20946e --- /dev/null +++ b/providers/crossmodel/models/anthropic/claude-opus-5-5.toml @@ -0,0 +1,14 @@ +base_model = "anthropic/claude-opus-5-5" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 4 +output = 20 +cache_read = 0.2 +cache_write = 5 + +[modalities] +input = ["text", "image"] diff --git a/providers/crossmodel/models/deepseek/deepseek-v4-flash-vision-exp.toml b/providers/crossmodel/models/deepseek/deepseek-v4-flash-vision-exp.toml index df9e322eaf6..cae79ce1a08 100644 --- a/providers/crossmodel/models/deepseek/deepseek-v4-flash-vision-exp.toml +++ b/providers/crossmodel/models/deepseek/deepseek-v4-flash-vision-exp.toml @@ -8,7 +8,7 @@ type = "effort" values = ["low", "medium", "high", "xhigh", "max"] [cost] -input = 0.405 -output = 1.215 -cache_read = 0.0135 -cache_write = 0.405 +input = 0.27 +output = 1.08 +cache_read = 0.0054 +cache_write = 0.27 diff --git a/providers/crossmodel/models/deepseek/deepseek-v4-flash.toml b/providers/crossmodel/models/deepseek/deepseek-v4-flash.toml index a87de3eec1d..85e579d997c 100644 --- a/providers/crossmodel/models/deepseek/deepseek-v4-flash.toml +++ b/providers/crossmodel/models/deepseek/deepseek-v4-flash.toml @@ -8,7 +8,7 @@ type = "effort" values = ["low", "medium", "high", "xhigh", "max"] [cost] -input = 0.405 -output = 1.215 -cache_read = 0.0135 -cache_write = 0.405 +input = 0.27 +output = 1.08 +cache_read = 0.0054 +cache_write = 0.27 diff --git a/providers/crossmodel/models/deepseek/deepseek-v4.1-flash.toml b/providers/crossmodel/models/deepseek/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..32428719c16 --- /dev/null +++ b/providers/crossmodel/models/deepseek/deepseek-v4.1-flash.toml @@ -0,0 +1,14 @@ +base_model = "deepseek/deepseek-v4.1-flash" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.27 +output = 1.08 +cache_read = 0.0054 +cache_write = 0.27 diff --git a/providers/crossmodel/models/gemini/gemini-2.5-flash-lite.toml b/providers/crossmodel/models/gemini/gemini-2.5-flash-lite.toml index 104e3400b16..4352596bb4e 100644 --- a/providers/crossmodel/models/gemini/gemini-2.5-flash-lite.toml +++ b/providers/crossmodel/models/gemini/gemini-2.5-flash-lite.toml @@ -1,8 +1,5 @@ base_model = "google/gemini-2.5-flash-lite" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "minimal", "low", "medium", "high"] diff --git a/providers/crossmodel/models/gemini/gemini-2.5-flash.toml b/providers/crossmodel/models/gemini/gemini-2.5-flash.toml index 95d431f646c..bfcddbf5a98 100644 --- a/providers/crossmodel/models/gemini/gemini-2.5-flash.toml +++ b/providers/crossmodel/models/gemini/gemini-2.5-flash.toml @@ -1,8 +1,5 @@ base_model = "google/gemini-2.5-flash" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "minimal", "low", "medium", "high"] diff --git a/providers/crossmodel/models/gemini/gemini-3.6-flash.toml b/providers/crossmodel/models/gemini/gemini-3.6-flash.toml index 94454c82587..4a8ddc3475d 100644 --- a/providers/crossmodel/models/gemini/gemini-3.6-flash.toml +++ b/providers/crossmodel/models/gemini/gemini-3.6-flash.toml @@ -8,10 +8,10 @@ type = "effort" values = ["minimal", "low", "medium", "high"] [cost] -input = 1.5 -output = 7.5 -cache_read = 0.15 -cache_write = 1.5 +input = 0.75 +output = 3.75 +cache_read = 0.075 +cache_write = 0.75 [modalities] input = ["text", "image", "audio", "video"] diff --git a/providers/crossmodel/models/gemini/gemini-3.8-flash.toml b/providers/crossmodel/models/gemini/gemini-3.8-flash.toml new file mode 100644 index 00000000000..88a1cb041bf --- /dev/null +++ b/providers/crossmodel/models/gemini/gemini-3.8-flash.toml @@ -0,0 +1,14 @@ +base_model = "google/gemini-3.8-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.75 +output = 3.75 +cache_read = 0.075 +cache_write = 0.75 + +[modalities] +input = ["text", "image", "audio", "video"] diff --git a/providers/crossmodel/models/moonshot/kimi-k2.5.toml b/providers/crossmodel/models/moonshot/kimi-k2.5.toml deleted file mode 100644 index 43dd71f19b9..00000000000 --- a/providers/crossmodel/models/moonshot/kimi-k2.5.toml +++ /dev/null @@ -1,14 +0,0 @@ -base_model = "moonshotai/kimi-k2.5" - -[[reasoning_options]] -type = "toggle" - -[cost] -input = 0.62 -output = 3.3 -cache_read = 0.11 -cache_write = 0.62 - -[limit] -context = 262_000 -output = 262_000 diff --git a/providers/crossmodel/models/openai/gpt-5.6-sol.toml b/providers/crossmodel/models/openai/gpt-5.6-sol.toml index f7399bf4b2f..ceb6dc11d8c 100644 --- a/providers/crossmodel/models/openai/gpt-5.6-sol.toml +++ b/providers/crossmodel/models/openai/gpt-5.6-sol.toml @@ -5,17 +5,17 @@ type = "effort" values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 5 -output = 30 -cache_read = 0.5 -cache_write = 6.25 +input = 4 +output = 20 +cache_read = 0.4 +cache_write = 5 [[cost.tiers]] tier = { type = "context", size = 272_000 } -input = 10 -output = 45 -cache_read = 1 -cache_write = 12.5 +input = 8 +output = 30 +cache_read = 0.8 +cache_write = 10 [modalities] input = ["text", "image"] diff --git a/providers/crossmodel/models/openai/gpt-6-astra.toml b/providers/crossmodel/models/openai/gpt-6-astra.toml new file mode 100644 index 00000000000..3f1fcc6d753 --- /dev/null +++ b/providers/crossmodel/models/openai/gpt-6-astra.toml @@ -0,0 +1,21 @@ +base_model = "openai/gpt-6-astra" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 20 +output = 75 +cache_read = 2 +cache_write = 25 + +[modalities] +input = ["text", "image"] diff --git a/providers/crossmodel/models/openai/gpt-6-luna.toml b/providers/crossmodel/models/openai/gpt-6-luna.toml new file mode 100644 index 00000000000..e91e64b7330 --- /dev/null +++ b/providers/crossmodel/models/openai/gpt-6-luna.toml @@ -0,0 +1,21 @@ +base_model = "openai/gpt-6-luna" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.1 +output = 0.5 +cache_read = 0.01 +cache_write = 0.125 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 0.2 +output = 0.75 +cache_read = 0.02 +cache_write = 0.25 + +[modalities] +input = ["text", "image"] diff --git a/providers/crossmodel/models/openai/gpt-6-sol.toml b/providers/crossmodel/models/openai/gpt-6-sol.toml new file mode 100644 index 00000000000..56437cf29c3 --- /dev/null +++ b/providers/crossmodel/models/openai/gpt-6-sol.toml @@ -0,0 +1,21 @@ +base_model = "openai/gpt-6-sol" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 4 +output = 15 +cache_read = 0.4 +cache_write = 5 + +[modalities] +input = ["text", "image"] diff --git a/providers/crossmodel/models/qwen/qwen3.7-max.toml b/providers/crossmodel/models/qwen/qwen3.7-max.toml index 1f610e24e7e..66e5926e909 100644 --- a/providers/crossmodel/models/qwen/qwen3.7-max.toml +++ b/providers/crossmodel/models/qwen/qwen3.7-max.toml @@ -5,7 +5,7 @@ structured_output = true type = "toggle" [cost] -input = 1.504 -output = 4.504 -cache_read = 0.3 -cache_write = 1.88 +input = 1.88 +output = 5.63 +cache_read = 0.375 +cache_write = 2.35 diff --git a/providers/crossmodel/models/qwen/qwen3.7-plus.toml b/providers/crossmodel/models/qwen/qwen3.7-plus.toml index 749ed99d2c4..2c9e669358a 100644 --- a/providers/crossmodel/models/qwen/qwen3.7-plus.toml +++ b/providers/crossmodel/models/qwen/qwen3.7-plus.toml @@ -5,14 +5,14 @@ structured_output = true type = "toggle" [cost] -input = 0.288 -output = 1.125 -cache_read = 0.0288 -cache_write = 0.36 +input = 0.32 +output = 1.25 +cache_read = 0.032 +cache_write = 0.4 [[cost.tiers]] tier = { type = "context", size = 256_000 } -input = 0.864 -output = 3.375 -cache_read = 0.0864 -cache_write = 1.08 +input = 0.96 +output = 3.75 +cache_read = 0.096 +cache_write = 1.2 diff --git a/providers/crossmodel/models/qwen/qwen3.8-flash.toml b/providers/crossmodel/models/qwen/qwen3.8-flash.toml new file mode 100644 index 00000000000..96512c56fd5 --- /dev/null +++ b/providers/crossmodel/models/qwen/qwen3.8-flash.toml @@ -0,0 +1,14 @@ +base_model = "alibaba/qwen3.8-flash" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] + +[cost] +input = 0.13 +output = 0.43 +cache_read = 0.016 +cache_write = 0.2 diff --git a/providers/crossmodel/models/qwen/qwen3.8-omni-flash.toml b/providers/crossmodel/models/qwen/qwen3.8-omni-flash.toml new file mode 100644 index 00000000000..b70235cd8f0 --- /dev/null +++ b/providers/crossmodel/models/qwen/qwen3.8-omni-flash.toml @@ -0,0 +1,17 @@ +base_model = "alibaba/qwen3.8-omni-flash" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.13 +output = 0.43 +cache_read = 0.016 +cache_write = 0.13 diff --git a/providers/crossmodel/models/tencent/hy3.toml b/providers/crossmodel/models/tencent/hy3.toml index 7154c364956..dba2194c99c 100644 --- a/providers/crossmodel/models/tencent/hy3.toml +++ b/providers/crossmodel/models/tencent/hy3.toml @@ -1,9 +1,6 @@ base_model = "tencent/hy3" structured_output = true -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "high"] @@ -16,4 +13,4 @@ cache_write = 0.16 [limit] context = 262_144 -output = 262_144 +output = 131_072 diff --git a/providers/crossmodel/models/tencent/hy4-preview.toml b/providers/crossmodel/models/tencent/hy4-preview.toml new file mode 100644 index 00000000000..3fbba5da035 --- /dev/null +++ b/providers/crossmodel/models/tencent/hy4-preview.toml @@ -0,0 +1,15 @@ +base_model = "tencent/hy4-preview" + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.96 +output = 2.88 +cache_read = 0.048 +cache_write = 0.96 + +[limit] +context = 1_048_576 +output = 65_536 diff --git a/providers/crossmodel/models/x-ai/grok-4.3.toml b/providers/crossmodel/models/x-ai/grok-4.3.toml index 751982e3814..3a82998f376 100644 --- a/providers/crossmodel/models/x-ai/grok-4.3.toml +++ b/providers/crossmodel/models/x-ai/grok-4.3.toml @@ -1,8 +1,5 @@ base_model = "xai/grok-4.3" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high"] diff --git a/providers/crossmodel/models/x-ai/grok-4.7.toml b/providers/crossmodel/models/x-ai/grok-4.7.toml new file mode 100644 index 00000000000..99495b45cae --- /dev/null +++ b/providers/crossmodel/models/x-ai/grok-4.7.toml @@ -0,0 +1,21 @@ +base_model = "xai/grok-4.7" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh"] + +[cost] +input = 2 +output = 6 +cache_read = 0.5 +cache_write = 2 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 4 +output = 12 +cache_read = 1 +cache_write = 4 + +[modalities] +input = ["text", "image"] diff --git a/providers/crossmodel/models/xiaomi/mimo-v2.5-pro.toml b/providers/crossmodel/models/xiaomi/mimo-v2.5-pro.toml index f969d5cc0f1..3d46f73b352 100644 --- a/providers/crossmodel/models/xiaomi/mimo-v2.5-pro.toml +++ b/providers/crossmodel/models/xiaomi/mimo-v2.5-pro.toml @@ -1,9 +1,6 @@ base_model = "xiaomi/mimo-v2.5-pro" structured_output = true -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high"] diff --git a/providers/crossmodel/models/xiaomi/mimo-v2.5.toml b/providers/crossmodel/models/xiaomi/mimo-v2.5.toml index f609d4e60ba..2c31756f08a 100644 --- a/providers/crossmodel/models/xiaomi/mimo-v2.5.toml +++ b/providers/crossmodel/models/xiaomi/mimo-v2.5.toml @@ -1,9 +1,6 @@ base_model = "xiaomi/mimo-v2.5" structured_output = true -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high"] diff --git a/providers/crossmodel/models/xiaomi/mimo-v2.6-flash.toml b/providers/crossmodel/models/xiaomi/mimo-v2.6-flash.toml new file mode 100644 index 00000000000..5fdd8d29025 --- /dev/null +++ b/providers/crossmodel/models/xiaomi/mimo-v2.6-flash.toml @@ -0,0 +1,11 @@ +base_model = "xiaomi/mimo-v2.6-flash" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + +[cost] +input = 0.16 +output = 0.32 +cache_read = 0.004 +cache_write = 0.16 diff --git a/providers/crossmodel/models/xiaomi/mimo-v2.6-pro.toml b/providers/crossmodel/models/xiaomi/mimo-v2.6-pro.toml new file mode 100644 index 00000000000..1dbc817d0fa --- /dev/null +++ b/providers/crossmodel/models/xiaomi/mimo-v2.6-pro.toml @@ -0,0 +1,11 @@ +base_model = "xiaomi/mimo-v2.6-pro" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + +[cost] +input = 0.47 +output = 0.94 +cache_read = 0.005 +cache_write = 0.47 diff --git a/providers/crossmodel/models/z-ai/glm-5.3-flash.toml b/providers/crossmodel/models/z-ai/glm-5.3-flash.toml new file mode 100644 index 00000000000..6a3e9e0d3b9 --- /dev/null +++ b/providers/crossmodel/models/z-ai/glm-5.3-flash.toml @@ -0,0 +1,17 @@ +base_model = "zhipuai/glm-5.3-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.03 +cache_write = 0.15 + +[limit] +output = 128_000 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/crusoe/models/Qwen/Qwen3-235B-A22B-Instruct-2507.toml b/providers/crusoe/models/Qwen/Qwen3-235B-A22B-Instruct-2507.toml new file mode 100644 index 00000000000..c92a72b8f0e --- /dev/null +++ b/providers/crusoe/models/Qwen/Qwen3-235B-A22B-Instruct-2507.toml @@ -0,0 +1,7 @@ +base_model = "alibaba/qwen3-235b-a22b-instruct-2507" + +# Pricing: https://www.crusoe.ai/cloud/pricing (accessed 2026-09-04) +[cost] +input = 0.22 +output = 0.80 +cache_read = 0.11 diff --git a/providers/crusoe/models/nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B.toml b/providers/crusoe/models/nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B.toml new file mode 100644 index 00000000000..5174564f492 --- /dev/null +++ b/providers/crusoe/models/nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B.toml @@ -0,0 +1,14 @@ +# Not yet live-probed on this endpoint (unlike the entries from #3769 — +# no API access at submission time). NVIDIA Nemotron 3 models are +# hybrid-reasoning with an on/off toggle, and the probed sibling on this +# endpoint (Nemotron-3-Nano-Omni-Reasoning-30B-A3B) behaves as a toggle +# with inert low/medium/high values, so this is encoded the same way. +# No interleaved claim is made. +base_model = "nvidia/nemotron-3-nano-30b-a3b" +reasoning_options = [{ type = "toggle" }] + +# Pricing: https://www.crusoe.ai/cloud/pricing (accessed 2026-09-04) +[cost] +input = 0.05 +output = 0.20 +cache_read = 0.03 diff --git a/providers/crusoe/models/nvidia/NVIDIA-Nemotron-3-Super-120B-A12B.toml b/providers/crusoe/models/nvidia/NVIDIA-Nemotron-3-Super-120B-A12B.toml new file mode 100644 index 00000000000..c5b8212623f --- /dev/null +++ b/providers/crusoe/models/nvidia/NVIDIA-Nemotron-3-Super-120B-A12B.toml @@ -0,0 +1,14 @@ +# Not yet live-probed on this endpoint (unlike the entries from #3769 — +# no API access at submission time). NVIDIA Nemotron 3 models are +# hybrid-reasoning with an on/off toggle, and the probed sibling on this +# endpoint (Nemotron-3-Nano-Omni-Reasoning-30B-A3B) behaves as a toggle +# with inert low/medium/high values, so this is encoded the same way. +# No interleaved claim is made. +base_model = "nvidia/nemotron-3-super-120b-a12b" +reasoning_options = [{ type = "toggle" }] + +# Pricing: https://www.crusoe.ai/cloud/pricing (accessed 2026-09-04) +[cost] +input = 0.30 +output = 2.40 +cache_read = 0.15 diff --git a/providers/databricks/logo.svg b/providers/databricks/logo.svg new file mode 100644 index 00000000000..2dce2836297 --- /dev/null +++ b/providers/databricks/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/providers/deepinfra/models/ByteDance/Seed-2.0-mini.toml b/providers/deepinfra/models/ByteDance/Seed-2.0-mini.toml index e148079c5f4..c857f3ae913 100644 --- a/providers/deepinfra/models/ByteDance/Seed-2.0-mini.toml +++ b/providers/deepinfra/models/ByteDance/Seed-2.0-mini.toml @@ -1,5 +1,4 @@ base_model = "bytedance-seed/seed-2.0-mini" -structured_output = true reasoning_options = [] [cost] diff --git a/providers/deepinfra/models/ByteDance/Seed-2.0-pro.toml b/providers/deepinfra/models/ByteDance/Seed-2.0-pro.toml index be94b676a00..c807fd75189 100644 --- a/providers/deepinfra/models/ByteDance/Seed-2.0-pro.toml +++ b/providers/deepinfra/models/ByteDance/Seed-2.0-pro.toml @@ -1,5 +1,4 @@ base_model = "bytedance-seed/seed-2.0-pro" -structured_output = true reasoning_options = [] [cost] diff --git a/providers/deepinfra/models/MiniMaxAI/MiniMax-M2.7.toml b/providers/deepinfra/models/MiniMaxAI/MiniMax-M2.7.toml index 6bd61f181c5..7e2b1f39898 100644 --- a/providers/deepinfra/models/MiniMaxAI/MiniMax-M2.7.toml +++ b/providers/deepinfra/models/MiniMaxAI/MiniMax-M2.7.toml @@ -1,4 +1,5 @@ base_model = "minimax/MiniMax-M2.7" +status = "deprecated" reasoning_options = [] [cost] diff --git a/providers/deepinfra/models/Qwen/Qwen3.8-27B.toml b/providers/deepinfra/models/Qwen/Qwen3.8-27B.toml index 75f14120f8d..fd86f3b9a1a 100644 --- a/providers/deepinfra/models/Qwen/Qwen3.8-27B.toml +++ b/providers/deepinfra/models/Qwen/Qwen3.8-27B.toml @@ -8,9 +8,6 @@ type = "effort" values = ["low", "medium", "xhigh"] [cost] -input = 0.4 -output = 3 -cache_read = 0.04 - -[modalities] -input = ["text", "image"] +input = 0.2 +output = 2.5 +cache_read = 0.05 diff --git a/providers/deepinfra/models/Qwen/Qwen3.8-Flash.toml b/providers/deepinfra/models/Qwen/Qwen3.8-Flash.toml new file mode 100644 index 00000000000..914a0e258fb --- /dev/null +++ b/providers/deepinfra/models/Qwen/Qwen3.8-Flash.toml @@ -0,0 +1,7 @@ +base_model = "alibaba/qwen3.8-flash" +reasoning = false + +[cost] +input = 0.113 +output = 0.382 +cache_read = 0.0141 diff --git a/providers/deepinfra/models/XiaomiMiMo/MiMo-V2.5.toml b/providers/deepinfra/models/XiaomiMiMo/MiMo-V2.5.toml index 0d7f8576c32..83d3a4c6ca2 100644 --- a/providers/deepinfra/models/XiaomiMiMo/MiMo-V2.5.toml +++ b/providers/deepinfra/models/XiaomiMiMo/MiMo-V2.5.toml @@ -8,9 +8,9 @@ field = "reasoning_content" type = "toggle" [cost] -input = 0.4 -output = 2 -cache_read = 0.08 +input = 0.14 +output = 0.28 +cache_read = 0.0028 [limit] context = 262_144 diff --git a/providers/deepinfra/models/deepseek-ai/DeepSeek-V4-Flash-0731.toml b/providers/deepinfra/models/deepseek-ai/DeepSeek-V4-Flash-0731.toml index 8ec374899bd..1e6d2eb6400 100644 --- a/providers/deepinfra/models/deepseek-ai/DeepSeek-V4-Flash-0731.toml +++ b/providers/deepinfra/models/deepseek-ai/DeepSeek-V4-Flash-0731.toml @@ -4,9 +4,9 @@ base_model = "deepseek/deepseek-v4-flash-0731" type = "toggle" [cost] -input = 0.08 +input = 0.06 output = 0.18 -cache_read = 0.016 +cache_read = 0.015 [limit] context = 1_048_576 diff --git a/providers/deepinfra/models/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp.toml b/providers/deepinfra/models/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp.toml new file mode 100644 index 00000000000..46c971a8379 --- /dev/null +++ b/providers/deepinfra/models/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp.toml @@ -0,0 +1,18 @@ +# Effort: reasoning_effort = none|low|high|max; none disables reasoning. +# Graded levels match native DeepSeek; reasoning.enabled = false is equivalent to none. +# https://docs.deepinfra.com/chat/reasoning +# https://api.deepinfra.com/models/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp/schema/openai-chat-completions +# https://api-docs.deepseek.com/guides/thinking_mode +base_model = "deepseek/deepseek-v4-flash-vision-exp" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 0.44 +output = 1.32 +cache_read = 0.014 + +[limit] +context = 1_048_576 diff --git a/providers/deepinfra/models/deepseek-ai/DeepSeek-V4.1-Flash.toml b/providers/deepinfra/models/deepseek-ai/DeepSeek-V4.1-Flash.toml new file mode 100644 index 00000000000..3c4cd385308 --- /dev/null +++ b/providers/deepinfra/models/deepseek-ai/DeepSeek-V4.1-Flash.toml @@ -0,0 +1,16 @@ +# Effort: reasoning_effort = none|low|high|xhigh|max; none disables thinking. +# https://api.deepinfra.com/models/deepseek-ai/DeepSeek-V4.1-Flash/schema/openai-chat-completions +# https://recipes.vllm.ai/deepseek-ai/DeepSeek-V4.1-Flash (accessed 2026-09-10) +base_model = "deepseek/deepseek-v4.1-flash" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "xhigh", "max"] + +[cost] +input = 0.2 +output = 0.6 +cache_read = 0.006 + +[limit] +context = 1_048_576 diff --git a/providers/deepinfra/models/google/gemma-3-12b-it.toml b/providers/deepinfra/models/google/gemma-3-12b-it.toml new file mode 100644 index 00000000000..0393878e0d8 --- /dev/null +++ b/providers/deepinfra/models/google/gemma-3-12b-it.toml @@ -0,0 +1,6 @@ +base_model = "google/gemma-3-12b-it" +structured_output = true + +[cost] +input = 0.05 +output = 0.15 diff --git a/providers/deepinfra/models/google/gemma-3-27b-it.toml b/providers/deepinfra/models/google/gemma-3-27b-it.toml new file mode 100644 index 00000000000..5ba5b627ac4 --- /dev/null +++ b/providers/deepinfra/models/google/gemma-3-27b-it.toml @@ -0,0 +1,6 @@ +base_model = "google/gemma-3-27b-it" +structured_output = true + +[cost] +input = 0.08 +output = 0.16 diff --git a/providers/deepinfra/models/google/gemma-3-4b-it.toml b/providers/deepinfra/models/google/gemma-3-4b-it.toml new file mode 100644 index 00000000000..b572440d1f7 --- /dev/null +++ b/providers/deepinfra/models/google/gemma-3-4b-it.toml @@ -0,0 +1,6 @@ +base_model = "google/gemma-3-4b-it" +structured_output = true + +[cost] +input = 0.05 +output = 0.1 diff --git a/providers/deepinfra/models/moonshotai/Kimi-K2.5.toml b/providers/deepinfra/models/moonshotai/Kimi-K2.5.toml index 597479e9f1e..83e9e8835d0 100644 --- a/providers/deepinfra/models/moonshotai/Kimi-K2.5.toml +++ b/providers/deepinfra/models/moonshotai/Kimi-K2.5.toml @@ -5,12 +5,18 @@ release_date = "2026-01-27" last_updated = "2026-01-27" attachment = true reasoning = true -reasoning_options = [{ type = "toggle" }] -structured_output = true temperature = true tool_call = true +structured_output = true knowledge = "2025-01" open_weights = true +status = "deprecated" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "toggle" [cost] input = 0.45 @@ -24,6 +30,3 @@ output = 32_768 [modalities] input = ["text", "image", "video"] output = ["text"] - -[interleaved] -field = "reasoning_content" diff --git a/providers/deepinfra/models/tencent/Hy3.toml b/providers/deepinfra/models/tencent/Hy3.toml index 141b04fc694..743a6959ec1 100644 --- a/providers/deepinfra/models/tencent/Hy3.toml +++ b/providers/deepinfra/models/tencent/Hy3.toml @@ -3,9 +3,9 @@ structured_output = true reasoning_options = [] [cost] -input = 0.14 -output = 0.58 -cache_read = 0.035 +input = 0.13 +output = 0.53 +cache_read = 0.033 [limit] context = 262_144 diff --git a/providers/deepinfra/models/zai-org/GLM-4.7-Flash.toml b/providers/deepinfra/models/zai-org/GLM-4.7-Flash.toml index 42f815d17d3..fcd0b9ff7de 100644 --- a/providers/deepinfra/models/zai-org/GLM-4.7-Flash.toml +++ b/providers/deepinfra/models/zai-org/GLM-4.7-Flash.toml @@ -10,6 +10,7 @@ tool_call = true structured_output = true knowledge = "2025-04" open_weights = true +status = "deprecated" reasoning_options = [] [interleaved] diff --git a/providers/deepinfra/models/zai-org/GLM-5.3-Flash.toml b/providers/deepinfra/models/zai-org/GLM-5.3-Flash.toml new file mode 100644 index 00000000000..60adafc59ec --- /dev/null +++ b/providers/deepinfra/models/zai-org/GLM-5.3-Flash.toml @@ -0,0 +1,13 @@ +# Effort: reasoning_effort = low|high|max; thinking cannot be disabled. +# https://docs.z.ai/guides/llm/glm-5.3-flash +# https://docs.deepinfra.com/api-reference/chat-completions/openai-chat-completions +base_model = "zhipuai/glm-5.3-flash" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.03 + +[limit] +context = 1_048_576 diff --git a/providers/deepinfra/models/zai-org/GLM-5.3.toml b/providers/deepinfra/models/zai-org/GLM-5.3.toml new file mode 100644 index 00000000000..f038885dbc0 --- /dev/null +++ b/providers/deepinfra/models/zai-org/GLM-5.3.toml @@ -0,0 +1,18 @@ +# Sources (accessed 2026-08-28): +# https://docs.z.ai/guides/llm/glm-5.3 +# https://api.deepinfra.com/models/zai-org/GLM-5.3/schema/openai-chat-completions +# Effort: reasoning_effort = low|high|max, matching the lab and relay peers. +# GLM-5.3 always reasons; no toggle or reasoning-token budget. +base_model = "zhipuai/glm-5.3" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.2 +output = 4 +cache_read = 0.2 + +[limit] +context = 1_048_576 diff --git a/providers/deepinfra/models/zai-org/GLM-5.toml b/providers/deepinfra/models/zai-org/GLM-5.toml index e55f3cd2a3d..3d97a980667 100644 --- a/providers/deepinfra/models/zai-org/GLM-5.toml +++ b/providers/deepinfra/models/zai-org/GLM-5.toml @@ -10,6 +10,7 @@ tool_call = true structured_output = true knowledge = "2025-12" open_weights = true +status = "deprecated" [interleaved] field = "reasoning_content" diff --git a/providers/deepseek/models/deepseek-flash.toml b/providers/deepseek/models/deepseek-flash.toml new file mode 100644 index 00000000000..cb294223344 --- /dev/null +++ b/providers/deepseek/models/deepseek-flash.toml @@ -0,0 +1,28 @@ +# DeepSeek-V4.1-Flash, served as `deepseek-flash`. +# The legacy names `deepseek-v4-flash` and `deepseek-v4-flash-vision-exp` are +# still accepted, but those models are retired and requests are served by +# DeepSeek-V4.1-Flash at the Flash price. +# Reasoning tokens are billed at the output rate (no separate CoT price). +# Off-peak rates are half of peak; models.dev records the off-peak rate. +# OpenAI: `thinking.type = enabled|disabled`, `reasoning_effort = low|high|max`. +# Anthropic: `thinking.type`, `output_config.effort = low|high|max`; budget ignored. +# Flash maps requested low -> low (unlike Pro). xhigh -> high. +# https://api-docs.deepseek.com/quick_start/pricing (accessed 2026-09-10) +# https://api-docs.deepseek.com/guides/thinking_mode/ (accessed 2026-09-10) +base_model = "deepseek/deepseek-v4.1-flash" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.15 +output = 0.6 +reasoning = 0.6 +cache_read = 0.003 diff --git a/providers/deepseek/models/deepseek-v4-flash-vision-exp.toml b/providers/deepseek/models/deepseek-v4-flash-vision-exp.toml index ec428639dc9..aa1da80696b 100644 --- a/providers/deepseek/models/deepseek-v4-flash-vision-exp.toml +++ b/providers/deepseek/models/deepseek-v4-flash-vision-exp.toml @@ -1,11 +1,12 @@ -# DeepSeek-V4-Flash-Vision-Exp is priced the same as DeepSeek V4 Flash. -# https://api-docs.deepseek.com/quick_start/pricing/ (accessed 2026-08-22) -# https://api-docs.deepseek.com/guides/vision (accessed 2026-08-22) -# OpenAI: `thinking.type = enabled|disabled`, `reasoning_effort = low|high|max`. -# Anthropic: `thinking.type`, `output_config.effort = low|high|max`; budget ignored. -base_model = "deepseek/deepseek-v4-flash-vision-exp" -status = "beta" - +# Legacy alias. DeepSeek-V4-Flash-Vision-Exp is retired; requests to +# `deepseek-v4-flash-vision-exp` are still accepted but served by +# DeepSeek-V4.1-Flash and billed at the Flash price. +# Toggle: thinking.type = enabled|disabled +# Effort: reasoning_effort = low|high|max +# https://api-docs.deepseek.com/quick_start/pricing (accessed 2026-09-10) +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4 Flash Vision Exp" +status = "deprecated" [[reasoning_options]] type = "toggle" @@ -17,7 +18,7 @@ values = ["low", "high", "max"] field = "reasoning_content" [cost] -input = 0.14 -output = 0.28 -reasoning = 0.28 -cache_read = 0.0028 +input = 0.15 +output = 0.6 +reasoning = 0.6 +cache_read = 0.003 diff --git a/providers/deepseek/models/deepseek-v4-flash.toml b/providers/deepseek/models/deepseek-v4-flash.toml index 9dca906c5c6..3ebe57414da 100644 --- a/providers/deepseek/models/deepseek-v4-flash.toml +++ b/providers/deepseek/models/deepseek-v4-flash.toml @@ -1,12 +1,12 @@ -# Reasoning tokens are billed at the output rate (no separate CoT price). -# `completion_tokens_details.reasoning_tokens` is a subset of completion_tokens. -# https://api-docs.deepseek.com/quick_start/pricing/ (accessed 2026-07-31) -# OpenAI: `thinking.type = enabled|disabled`, `reasoning_effort = low|high|max`. -# Anthropic: `thinking.type`, `output_config.effort = low|high|max`; budget ignored. -# Flash maps requested low→low (unlike Pro, which maps low→high). xhigh→high. -# https://api-docs.deepseek.com/guides/thinking_mode/ (accessed 2026-08-02) -base_model = "deepseek/deepseek-v4-flash-0731" +# Legacy alias. The DeepSeek-V4-Flash model is retired; requests to +# `deepseek-v4-flash` are still accepted but served by DeepSeek-V4.1-Flash and +# billed at the Flash price. +# Toggle: thinking.type = enabled|disabled +# Effort: reasoning_effort = low|high|max +# https://api-docs.deepseek.com/quick_start/pricing (accessed 2026-09-10) +base_model = "deepseek/deepseek-v4.1-flash" name = "DeepSeek V4 Flash" +status = "deprecated" [[reasoning_options]] type = "toggle" @@ -19,7 +19,7 @@ values = ["low", "high", "max"] field = "reasoning_content" [cost] -input = 0.14 -output = 0.28 -reasoning = 0.28 -cache_read = 0.0028 +input = 0.15 +output = 0.6 +reasoning = 0.6 +cache_read = 0.003 diff --git a/providers/deepseek/models/deepseek-v4-pro.toml b/providers/deepseek/models/deepseek-v4-pro.toml index 4d5aff0281b..6a81c8584d2 100644 --- a/providers/deepseek/models/deepseek-v4-pro.toml +++ b/providers/deepseek/models/deepseek-v4-pro.toml @@ -1,18 +1,23 @@ +# Toggle: thinking.type = enabled|disabled on /chat/completions. +# Effort: reasoning_effort = low|high|max; default high. +# Anthropic: output_config.effort = low|high|max; budget ignored. +# The 2026-08-13 V4-Pro GA announcement explicitly introduces all three levels; +# the pricing page maps API model deepseek-v4-pro to DeepSeek-V4-Pro-0813. +# https://api-docs.deepseek.com/news/news260813/ (accessed 2026-09-20) +# https://api-docs.deepseek.com/guides/thinking_mode/ (accessed 2026-09-20) +# https://api-docs.deepseek.com/quick_start/pricing/ (accessed 2026-09-20) # Reasoning tokens are billed at the output rate (no separate CoT price). # `completion_tokens_details.reasoning_tokens` is a subset of completion_tokens. # https://api-docs.deepseek.com/quick_start/pricing/ (accessed 2026-08-12) base_model = "deepseek/deepseek-v4-pro-0813" name = "DeepSeek V4 Pro" -# OpenAI: `thinking.type = enabled|disabled`, `reasoning_effort = high|max`. -# Anthropic: `thinking.type`, `output_config.effort = high|max`; budget ignored. -# https://api-docs.deepseek.com/api/create-chat-completion (accessed 2026-06-25) [[reasoning_options]] type = "toggle" [[reasoning_options]] type = "effort" -values = ["high", "max"] +values = ["low", "high", "max"] [interleaved] field = "reasoning_content" diff --git a/providers/deepseek/provider.toml b/providers/deepseek/provider.toml index 11731946bfd..76274ae9de4 100644 --- a/providers/deepseek/provider.toml +++ b/providers/deepseek/provider.toml @@ -2,11 +2,11 @@ name = "DeepSeek" env = ["DEEPSEEK_API_KEY"] npm = "@ai-sdk/openai-compatible" # OpenAI Chat is POST `/chat/completions`: `thinking.type = enabled|disabled` -# and `reasoning_effort = low|high|max`. Flash maps low→low; Pro maps low→high; -# xhigh maps to high (flash) or max (pro). +# and `reasoning_effort = low|high|max`. Both current models map minimal→low, +# medium/xhigh→high, and ultra→max; low/high/max remain distinct native levels. # Anthropic Messages is POST `/anthropic/v1/messages`: `thinking.type` and # `output_config.effort = low|high|max`; `thinking.budget_tokens` is ignored. -# https://api-docs.deepseek.com/guides/thinking_mode/ (accessed 2026-08-02) +# https://api-docs.deepseek.com/guides/thinking_mode/ (accessed 2026-09-20) # https://api-docs.deepseek.com/guides/anthropic_api (accessed 2026-06-25) doc = "https://api-docs.deepseek.com/quick_start/pricing" api = "https://api.deepseek.com" diff --git a/providers/digitalocean/models/anthropic-claude-fable-5.1.toml b/providers/digitalocean/models/anthropic-claude-fable-5.1.toml new file mode 100644 index 00000000000..1c259df3835 --- /dev/null +++ b/providers/digitalocean/models/anthropic-claude-fable-5.1.toml @@ -0,0 +1,15 @@ +base_model = "anthropic/claude-fable-5-1" +name = "Anthropic Claude Fable 5.1" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 + +[modalities] +input = ["text", "image"] diff --git a/providers/digitalocean/models/anthropic-claude-opus-5.5.toml b/providers/digitalocean/models/anthropic-claude-opus-5.5.toml new file mode 100644 index 00000000000..23c000bcf3d --- /dev/null +++ b/providers/digitalocean/models/anthropic-claude-opus-5.5.toml @@ -0,0 +1,22 @@ +base_model = "anthropic/claude-opus-5-5" +name = "Anthropic Claude Opus 5.5" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 4 +output = 20 +cache_read = 0.2 +cache_write = 5 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 8 +output = 30 +cache_read = 0.4 +cache_write = 10 + +[modalities] +input = ["text", "image"] diff --git a/providers/digitalocean/models/deepseek-3.2.toml b/providers/digitalocean/models/deepseek-3.2.toml index 86a0601e001..d8d92fa42fa 100644 --- a/providers/digitalocean/models/deepseek-3.2.toml +++ b/providers/digitalocean/models/deepseek-3.2.toml @@ -18,9 +18,9 @@ type = "effort" values = ["none", "low", "medium", "high"] [cost] -input = 0.25 -output = 0.8 -cache_read = 0.075 +input = 0.5 +output = 1.6 +cache_read = 0.15 [limit] context = 163_840 diff --git a/providers/digitalocean/models/deepseek-4-flash.toml b/providers/digitalocean/models/deepseek-4-flash.toml index 2e033308f91..143346a359b 100644 --- a/providers/digitalocean/models/deepseek-4-flash.toml +++ b/providers/digitalocean/models/deepseek-4-flash.toml @@ -10,9 +10,9 @@ tool_call = true open_weights = false [cost] -input = 0.0679 -output = 0.168 -cache_read = 0.0168 +input = 0.14 +output = 0.28 +cache_read = 0.028 [limit] context = 1_048_576 diff --git a/providers/digitalocean/models/deepseek-v4-flash-0731.toml b/providers/digitalocean/models/deepseek-v4-flash-0731.toml index 74ce3b0ae91..2e9e64c5632 100644 --- a/providers/digitalocean/models/deepseek-v4-flash-0731.toml +++ b/providers/digitalocean/models/deepseek-v4-flash-0731.toml @@ -5,9 +5,9 @@ type = "effort" values = ["low", "medium", "high"] [cost] -input = 0.08 -output = 0.252 -cache_read = 0.0252 +input = 0.14 +output = 0.28 +cache_read = 0.028 [limit] context = 1_048_576 diff --git a/providers/digitalocean/models/deepseek-v4-pro.toml b/providers/digitalocean/models/deepseek-v4-pro.toml index 8a4edb98729..b4ebe0207c1 100644 --- a/providers/digitalocean/models/deepseek-v4-pro.toml +++ b/providers/digitalocean/models/deepseek-v4-pro.toml @@ -19,9 +19,9 @@ type = "effort" values = ["low", "medium", "high", "xhigh"] [cost] -input = 0.87 -output = 1.74 -cache_read = 0.174 +input = 1.74 +output = 3.48 +cache_read = 0.348 [limit] context = 1_048_576 diff --git a/providers/digitalocean/models/deepseek-v4.1-flash.toml b/providers/digitalocean/models/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..31780863b57 --- /dev/null +++ b/providers/digitalocean/models/deepseek-v4.1-flash.toml @@ -0,0 +1,14 @@ +base_model = "deepseek/deepseek-v4.1-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "xhigh", "max"] + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.006 + +[limit] +context = 1_048_576 +output = 1_048_576 diff --git a/providers/digitalocean/models/glm-5.2.toml b/providers/digitalocean/models/glm-5.2.toml index 3f01602c179..eb3b3d1b78d 100644 --- a/providers/digitalocean/models/glm-5.2.toml +++ b/providers/digitalocean/models/glm-5.2.toml @@ -8,9 +8,9 @@ type = "effort" values = ["medium", "high", "xhigh"] [cost] -input = 0.7 -output = 2.2 -cache_read = 0.105 +input = 1.4 +output = 4.4 +cache_read = 0.21 [limit] context = 262_144 diff --git a/providers/digitalocean/models/glm-5.3-flash.toml b/providers/digitalocean/models/glm-5.3-flash.toml new file mode 100644 index 00000000000..ce40eb73fd2 --- /dev/null +++ b/providers/digitalocean/models/glm-5.3-flash.toml @@ -0,0 +1,18 @@ +base_model = "zhipuai/glm-5.3-flash" +name = "GLM5.3 Flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.03 + +[limit] +context = 1_048_576 +output = 1_048_576 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/digitalocean/models/glm-5.3.toml b/providers/digitalocean/models/glm-5.3.toml new file mode 100644 index 00000000000..6172a61a5ab --- /dev/null +++ b/providers/digitalocean/models/glm-5.3.toml @@ -0,0 +1,15 @@ +base_model = "zhipuai/glm-5.3" +name = "GLM5.3" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.26 + +[limit] +context = 1_048_576 +output = 128_000 diff --git a/providers/digitalocean/models/kimi-k3.toml b/providers/digitalocean/models/kimi-k3.toml index b71a3e29e2e..62d0f7b7404 100644 --- a/providers/digitalocean/models/kimi-k3.toml +++ b/providers/digitalocean/models/kimi-k3.toml @@ -11,9 +11,9 @@ type = "effort" values = ["low", "high", "max"] [cost] -input = 2.85 -output = 14.25 -cache_read = 0.285 +input = 3 +output = 15 +cache_read = 0.3 [modalities] input = ["text", "image"] diff --git a/providers/digitalocean/models/llama-4-maverick.toml b/providers/digitalocean/models/llama-4-maverick.toml index a72af75a264..095b2da6674 100644 --- a/providers/digitalocean/models/llama-4-maverick.toml +++ b/providers/digitalocean/models/llama-4-maverick.toml @@ -12,8 +12,8 @@ knowledge = "2024-08" open_weights = true [cost] -input = 0.2 -output = 0.696 +input = 0.25 +output = 0.87 [limit] context = 128_000 diff --git a/providers/digitalocean/models/mimo-v2.5-pro.toml b/providers/digitalocean/models/mimo-v2.5-pro.toml index 20f6f6db3ea..365235fb39f 100644 --- a/providers/digitalocean/models/mimo-v2.5-pro.toml +++ b/providers/digitalocean/models/mimo-v2.5-pro.toml @@ -9,9 +9,9 @@ type = "effort" values = ["none", "high"] [cost] -input = 0.4 -output = 1.5 -cache_read = 0.08 +input = 0.8 +output = 3 +cache_read = 0.16 [limit] context = 262_144 diff --git a/providers/digitalocean/models/openai-gpt-5.6-sol.toml b/providers/digitalocean/models/openai-gpt-5.6-sol.toml index 3c9af7df850..e14ff09a4ee 100644 --- a/providers/digitalocean/models/openai-gpt-5.6-sol.toml +++ b/providers/digitalocean/models/openai-gpt-5.6-sol.toml @@ -6,15 +6,15 @@ type = "effort" values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 5 -output = 30 -cache_read = 0.5 +input = 4 +output = 20 +cache_read = 0.4 [[cost.tiers]] tier = { type = "context", size = 272_000 } -input = 10 -output = 45 -cache_read = 1 +input = 8 +output = 30 +cache_read = 0.8 [modalities] input = ["text", "image"] diff --git a/providers/digitalocean/models/openai-gpt-6-astra.toml b/providers/digitalocean/models/openai-gpt-6-astra.toml new file mode 100644 index 00000000000..ef287793c30 --- /dev/null +++ b/providers/digitalocean/models/openai-gpt-6-astra.toml @@ -0,0 +1,20 @@ +base_model = "openai/gpt-6-astra" +name = "OpenAI GPT-6 Astra" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 20 +output = 75 +cache_read = 2 + +[modalities] +input = ["text", "image"] diff --git a/providers/digitalocean/models/openai-gpt-6-luna.toml b/providers/digitalocean/models/openai-gpt-6-luna.toml new file mode 100644 index 00000000000..27a362b9081 --- /dev/null +++ b/providers/digitalocean/models/openai-gpt-6-luna.toml @@ -0,0 +1,20 @@ +base_model = "openai/gpt-6-luna" +name = "OpenAI GPT-6 Luna" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh"] + +[cost] +input = 0.1 +output = 0.5 +cache_read = 0.01 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 0.2 +output = 0.75 +cache_read = 0.02 + +[modalities] +input = ["text", "image"] diff --git a/providers/digitalocean/models/openai-gpt-6-sol.toml b/providers/digitalocean/models/openai-gpt-6-sol.toml new file mode 100644 index 00000000000..8c434d8b143 --- /dev/null +++ b/providers/digitalocean/models/openai-gpt-6-sol.toml @@ -0,0 +1,20 @@ +base_model = "openai/gpt-6-sol" +name = "OpenAI GPT-6 Sol" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh"] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 4 +output = 15 +cache_read = 0.4 + +[modalities] +input = ["text", "image"] diff --git a/providers/digitalocean/models/openai-gpt-oss-120b.toml b/providers/digitalocean/models/openai-gpt-oss-120b.toml index fc45d3aac8b..4af4fef37ad 100644 --- a/providers/digitalocean/models/openai-gpt-oss-120b.toml +++ b/providers/digitalocean/models/openai-gpt-oss-120b.toml @@ -19,8 +19,8 @@ type = "effort" values = ["low", "medium", "high"] [cost] -input = 0.055 -output = 0.385 +input = 0.1 +output = 0.7 cache_read = 0.02 [limit] diff --git a/providers/edenai/models/amazon/amazon.nova-lite-v1:0.toml b/providers/edenai/models/amazon/amazon.nova-lite-v1:0.toml new file mode 100644 index 00000000000..f7657f661d2 --- /dev/null +++ b/providers/edenai/models/amazon/amazon.nova-lite-v1:0.toml @@ -0,0 +1,10 @@ +base_model = "amazon/nova-lite" +structured_output = true + +[cost] +input = 0.06 +output = 0.24 +cache_read = 0.015 + +[modalities] +input = ["text", "image", "pdf"] diff --git a/providers/edenai/models/amazon/amazon.nova-lite-v1:0@us.toml b/providers/edenai/models/amazon/amazon.nova-lite-v1:0@us.toml new file mode 100644 index 00000000000..61fa496d779 --- /dev/null +++ b/providers/edenai/models/amazon/amazon.nova-lite-v1:0@us.toml @@ -0,0 +1,11 @@ +base_model = "amazon/nova-lite" +name = "Nova Lite (US)" +structured_output = true + +[cost] +input = 0.06 +output = 0.24 +cache_read = 0.015 + +[modalities] +input = ["text", "image", "pdf"] diff --git a/providers/edenai/models/amazon/amazon.nova-micro-v1:0.toml b/providers/edenai/models/amazon/amazon.nova-micro-v1:0.toml new file mode 100644 index 00000000000..0b42211b2af --- /dev/null +++ b/providers/edenai/models/amazon/amazon.nova-micro-v1:0.toml @@ -0,0 +1,7 @@ +base_model = "amazon/nova-micro" +structured_output = true + +[cost] +input = 0.035 +output = 0.14 +cache_read = 0.00875 diff --git a/providers/edenai/models/amazon/amazon.nova-micro-v1:0@us.toml b/providers/edenai/models/amazon/amazon.nova-micro-v1:0@us.toml new file mode 100644 index 00000000000..307e8239aee --- /dev/null +++ b/providers/edenai/models/amazon/amazon.nova-micro-v1:0@us.toml @@ -0,0 +1,8 @@ +base_model = "amazon/nova-micro" +name = "Nova Micro (US)" +structured_output = true + +[cost] +input = 0.035 +output = 0.14 +cache_read = 0.00875 diff --git a/providers/edenai/models/amazon/amazon.nova-pro-v1:0.toml b/providers/edenai/models/amazon/amazon.nova-pro-v1:0.toml new file mode 100644 index 00000000000..5dda1e65f8b --- /dev/null +++ b/providers/edenai/models/amazon/amazon.nova-pro-v1:0.toml @@ -0,0 +1,10 @@ +base_model = "amazon/nova-pro" +structured_output = true + +[cost] +input = 0.8 +output = 3.2 +cache_read = 0.2 + +[modalities] +input = ["text", "image", "pdf"] diff --git a/providers/edenai/models/amazon/amazon.nova-pro-v1:0@us.toml b/providers/edenai/models/amazon/amazon.nova-pro-v1:0@us.toml new file mode 100644 index 00000000000..5185388f1ca --- /dev/null +++ b/providers/edenai/models/amazon/amazon.nova-pro-v1:0@us.toml @@ -0,0 +1,11 @@ +base_model = "amazon/nova-pro" +name = "Nova Pro (US)" +structured_output = true + +[cost] +input = 0.8 +output = 3.2 +cache_read = 0.2 + +[modalities] +input = ["text", "image", "pdf"] diff --git a/providers/edenai/models/amazon/google.gemma-3-12b-it.toml b/providers/edenai/models/amazon/google.gemma-3-12b-it.toml new file mode 100644 index 00000000000..3889a7e378e --- /dev/null +++ b/providers/edenai/models/amazon/google.gemma-3-12b-it.toml @@ -0,0 +1,10 @@ +base_model = "google/gemma-3-12b-it" +name = "Gemma 3 12B IT (Amazon Bedrock)" +structured_output = true + +[cost] +input = 0.09 +output = 0.29 + +[limit] +context = 128_000 diff --git a/providers/edenai/models/amazon/google.gemma-3-12b-it@us.toml b/providers/edenai/models/amazon/google.gemma-3-12b-it@us.toml new file mode 100644 index 00000000000..332de3d4ed7 --- /dev/null +++ b/providers/edenai/models/amazon/google.gemma-3-12b-it@us.toml @@ -0,0 +1,10 @@ +base_model = "google/gemma-3-12b-it" +name = "Gemma 3 12B IT (Amazon Bedrock, US)" +structured_output = true + +[cost] +input = 0.09 +output = 0.29 + +[limit] +context = 128_000 diff --git a/providers/edenai/models/amazon/google.gemma-3-27b-it.toml b/providers/edenai/models/amazon/google.gemma-3-27b-it.toml new file mode 100644 index 00000000000..938c2319714 --- /dev/null +++ b/providers/edenai/models/amazon/google.gemma-3-27b-it.toml @@ -0,0 +1,10 @@ +base_model = "google/gemma-3-27b-it" +name = "Gemma 3 27B IT (Amazon Bedrock)" +structured_output = true + +[cost] +input = 0.23 +output = 0.38 + +[limit] +context = 128_000 diff --git a/providers/edenai/models/amazon/google.gemma-3-27b-it@us.toml b/providers/edenai/models/amazon/google.gemma-3-27b-it@us.toml new file mode 100644 index 00000000000..a1637470411 --- /dev/null +++ b/providers/edenai/models/amazon/google.gemma-3-27b-it@us.toml @@ -0,0 +1,10 @@ +base_model = "google/gemma-3-27b-it" +name = "Gemma 3 27B IT (Amazon Bedrock, US)" +structured_output = true + +[cost] +input = 0.23 +output = 0.38 + +[limit] +context = 128_000 diff --git a/providers/edenai/models/amazon/google.gemma-3-4b-it.toml b/providers/edenai/models/amazon/google.gemma-3-4b-it.toml new file mode 100644 index 00000000000..536c47c8d73 --- /dev/null +++ b/providers/edenai/models/amazon/google.gemma-3-4b-it.toml @@ -0,0 +1,10 @@ +base_model = "google/gemma-3-4b-it" +name = "Gemma 3 4B IT (Amazon Bedrock)" +structured_output = false + +[cost] +input = 0.04 +output = 0.08 + +[limit] +context = 128_000 diff --git a/providers/edenai/models/amazon/google.gemma-3-4b-it@us.toml b/providers/edenai/models/amazon/google.gemma-3-4b-it@us.toml new file mode 100644 index 00000000000..2d4e482e0c4 --- /dev/null +++ b/providers/edenai/models/amazon/google.gemma-3-4b-it@us.toml @@ -0,0 +1,10 @@ +base_model = "google/gemma-3-4b-it" +name = "Gemma 3 4B IT (Amazon Bedrock, US)" +structured_output = false + +[cost] +input = 0.04 +output = 0.08 + +[limit] +context = 128_000 diff --git a/providers/edenai/models/amazon/mistral.pixtral-large-2502-v1:0.toml b/providers/edenai/models/amazon/mistral.pixtral-large-2502-v1:0.toml new file mode 100644 index 00000000000..b8f937de99a --- /dev/null +++ b/providers/edenai/models/amazon/mistral.pixtral-large-2502-v1:0.toml @@ -0,0 +1,11 @@ +base_model = "mistral/pixtral-large-2502" +name = "Pixtral Large (25.02) (Amazon Bedrock)" +attachment = false +structured_output = false + +[cost] +input = 2 +output = 6 + +[modalities] +input = ["text"] diff --git a/providers/edenai/models/amazon/mistral.pixtral-large-2502-v1:0@us.toml b/providers/edenai/models/amazon/mistral.pixtral-large-2502-v1:0@us.toml new file mode 100644 index 00000000000..22be2866378 --- /dev/null +++ b/providers/edenai/models/amazon/mistral.pixtral-large-2502-v1:0@us.toml @@ -0,0 +1,11 @@ +base_model = "mistral/pixtral-large-2502" +name = "Pixtral Large (25.02) (Amazon Bedrock, US)" +attachment = false +structured_output = false + +[cost] +input = 2 +output = 6 + +[modalities] +input = ["text"] diff --git a/providers/edenai/models/amazon/mistral.voxtral-mini-3b-2507.toml b/providers/edenai/models/amazon/mistral.voxtral-mini-3b-2507.toml new file mode 100644 index 00000000000..ac2969a8bd4 --- /dev/null +++ b/providers/edenai/models/amazon/mistral.voxtral-mini-3b-2507.toml @@ -0,0 +1,11 @@ +base_model = "mistral/voxtral-mini-3b-2507" +name = "Voxtral Mini 3B 2507 (Amazon Bedrock)" +tool_call = false +structured_output = false + +[cost] +input = 0.04 +output = 0.04 + +[limit] +context = 128_000 diff --git a/providers/edenai/models/amazon/mistral.voxtral-mini-3b-2507@us.toml b/providers/edenai/models/amazon/mistral.voxtral-mini-3b-2507@us.toml new file mode 100644 index 00000000000..2fcf5b2bbae --- /dev/null +++ b/providers/edenai/models/amazon/mistral.voxtral-mini-3b-2507@us.toml @@ -0,0 +1,11 @@ +base_model = "mistral/voxtral-mini-3b-2507" +name = "Voxtral Mini 3B 2507 (Amazon Bedrock, US)" +tool_call = false +structured_output = false + +[cost] +input = 0.04 +output = 0.04 + +[limit] +context = 128_000 diff --git a/providers/edenai/models/amazon/mistral.voxtral-small-24b-2507.toml b/providers/edenai/models/amazon/mistral.voxtral-small-24b-2507.toml new file mode 100644 index 00000000000..99068522d25 --- /dev/null +++ b/providers/edenai/models/amazon/mistral.voxtral-small-24b-2507.toml @@ -0,0 +1,11 @@ +base_model = "mistral/voxtral-small-24b-2507" +name = "Voxtral Small 24B 2507 (Amazon Bedrock)" +tool_call = false +structured_output = false + +[cost] +input = 0.1 +output = 0.3 + +[limit] +context = 128_000 diff --git a/providers/edenai/models/amazon/mistral.voxtral-small-24b-2507@us.toml b/providers/edenai/models/amazon/mistral.voxtral-small-24b-2507@us.toml new file mode 100644 index 00000000000..df20d10ce8e --- /dev/null +++ b/providers/edenai/models/amazon/mistral.voxtral-small-24b-2507@us.toml @@ -0,0 +1,11 @@ +base_model = "mistral/voxtral-small-24b-2507" +name = "Voxtral Small 24B 2507 (Amazon Bedrock, US)" +tool_call = false +structured_output = false + +[cost] +input = 0.1 +output = 0.3 + +[limit] +context = 128_000 diff --git a/providers/edenai/models/amazon/moonshot.kimi-k2-thinking.toml b/providers/edenai/models/amazon/moonshot.kimi-k2-thinking.toml index 0d40d801a1a..7413aad8307 100644 --- a/providers/edenai/models/amazon/moonshot.kimi-k2-thinking.toml +++ b/providers/edenai/models/amazon/moonshot.kimi-k2-thinking.toml @@ -1,6 +1,6 @@ base_model = "moonshotai/kimi-k2-thinking" -tool_call = false -structured_output = false +name = "Kimi K2 Thinking (Amazon Bedrock)" +structured_output = true reasoning_options = [] [cost] @@ -8,4 +8,4 @@ input = 0.6 output = 2.5 [limit] -context = 128_000 +context = 256_000 diff --git a/providers/edenai/models/amazon/moonshotai.kimi-k2.5.toml b/providers/edenai/models/amazon/moonshotai.kimi-k2.5.toml index aa7b37f014a..c64d911d778 100644 --- a/providers/edenai/models/amazon/moonshotai.kimi-k2.5.toml +++ b/providers/edenai/models/amazon/moonshotai.kimi-k2.5.toml @@ -1,5 +1,5 @@ base_model = "moonshotai/kimi-k2.5" -structured_output = false +name = "Kimi K2.5 (Amazon Bedrock)" reasoning_options = [] [cost] diff --git a/providers/edenai/models/amazon/openai.gpt-oss-safeguard-20b.toml b/providers/edenai/models/amazon/openai.gpt-oss-safeguard-20b.toml new file mode 100644 index 00000000000..c159c3bb673 --- /dev/null +++ b/providers/edenai/models/amazon/openai.gpt-oss-safeguard-20b.toml @@ -0,0 +1,13 @@ +base_model = "openai/gpt-oss-safeguard-20b" +name = "GPT OSS Safeguard 20B (Amazon Bedrock)" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.07 +output = 0.2 + +[limit] +context = 128_000 diff --git a/providers/edenai/models/amazon/openai.gpt-oss-safeguard-20b@us.toml b/providers/edenai/models/amazon/openai.gpt-oss-safeguard-20b@us.toml new file mode 100644 index 00000000000..98893d21912 --- /dev/null +++ b/providers/edenai/models/amazon/openai.gpt-oss-safeguard-20b@us.toml @@ -0,0 +1,13 @@ +base_model = "openai/gpt-oss-safeguard-20b" +name = "GPT OSS Safeguard 20B (Amazon Bedrock, US)" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.07 +output = 0.2 + +[limit] +context = 128_000 diff --git a/providers/edenai/models/amazon/zai.glm-4.7-flash.toml b/providers/edenai/models/amazon/zai.glm-4.7-flash.toml index 3799e7654b7..bf215607f73 100644 --- a/providers/edenai/models/amazon/zai.glm-4.7-flash.toml +++ b/providers/edenai/models/amazon/zai.glm-4.7-flash.toml @@ -1,7 +1,11 @@ base_model = "zhipuai/glm-4.7-flash" -structured_output = false +name = "GLM-4.7-Flash (Amazon Bedrock)" +structured_output = true reasoning_options = [] [cost] input = 0.07 output = 0.4 + +[limit] +context = 203_000 diff --git a/providers/edenai/models/amazon/zai.glm-4.7-flash@us.toml b/providers/edenai/models/amazon/zai.glm-4.7-flash@us.toml index 284900db350..1aa3c944b18 100644 --- a/providers/edenai/models/amazon/zai.glm-4.7-flash@us.toml +++ b/providers/edenai/models/amazon/zai.glm-4.7-flash@us.toml @@ -1,8 +1,11 @@ base_model = "zhipuai/glm-4.7-flash" -name = "GLM-4.7-Flash (US)" -structured_output = false +name = "GLM-4.7-Flash (Amazon Bedrock, US)" +structured_output = true reasoning_options = [] [cost] input = 0.07 output = 0.4 + +[limit] +context = 203_000 diff --git a/providers/edenai/models/anthropic/claude-fable-5-1.toml b/providers/edenai/models/anthropic/claude-fable-5-1.toml new file mode 100644 index 00000000000..6f1a3fda3d9 --- /dev/null +++ b/providers/edenai/models/anthropic/claude-fable-5-1.toml @@ -0,0 +1,12 @@ +base_model = "anthropic/claude-fable-5-1" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 diff --git a/providers/edenai/models/anthropic/claude-fable-latest.toml b/providers/edenai/models/anthropic/claude-fable-latest.toml index 60a0268f1dc..fe892ae3296 100644 --- a/providers/edenai/models/anthropic/claude-fable-latest.toml +++ b/providers/edenai/models/anthropic/claude-fable-latest.toml @@ -1,4 +1,5 @@ -base_model = "anthropic/claude-fable-5" +base_model = "anthropic/claude-fable-5-1" +name = "Claude Fable Latest (Claude Fable 5.1)" structured_output = true [[reasoning_options]] @@ -8,5 +9,5 @@ values = ["low", "medium", "high", "xhigh", "max"] [cost] input = 10 output = 50 -cache_read = 1 +cache_read = 0.25 cache_write = 12.5 diff --git a/providers/edenai/models/anthropic/claude-opus-5-5.toml b/providers/edenai/models/anthropic/claude-opus-5-5.toml new file mode 100644 index 00000000000..8d8ff11a7d2 --- /dev/null +++ b/providers/edenai/models/anthropic/claude-opus-5-5.toml @@ -0,0 +1,12 @@ +base_model = "anthropic/claude-opus-5-5" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 4 +output = 20 +cache_read = 0.2 +cache_write = 5 diff --git a/providers/edenai/models/anthropic/claude-opus-latest.toml b/providers/edenai/models/anthropic/claude-opus-latest.toml index 0a58cfec23a..d336938f9f1 100644 --- a/providers/edenai/models/anthropic/claude-opus-latest.toml +++ b/providers/edenai/models/anthropic/claude-opus-latest.toml @@ -1,4 +1,5 @@ base_model = "anthropic/claude-opus-5" +name = "Claude Opus Latest (Claude Opus 5)" structured_output = true [[reasoning_options]] diff --git a/providers/edenai/models/anthropic/claude-sonnet-latest.toml b/providers/edenai/models/anthropic/claude-sonnet-latest.toml index 9db87aa596e..84e5fce82ae 100644 --- a/providers/edenai/models/anthropic/claude-sonnet-latest.toml +++ b/providers/edenai/models/anthropic/claude-sonnet-latest.toml @@ -1,4 +1,5 @@ base_model = "anthropic/claude-sonnet-5" +name = "Claude Sonnet Latest (Claude Sonnet 5)" structured_output = true [[reasoning_options]] diff --git a/providers/edenai/models/azure/gpt-5.1-codex-max.toml b/providers/edenai/models/azure/gpt-5.1-codex-max.toml index ac6346aa6ac..4fd9416e551 100644 --- a/providers/edenai/models/azure/gpt-5.1-codex-max.toml +++ b/providers/edenai/models/azure/gpt-5.1-codex-max.toml @@ -1,5 +1,6 @@ base_model = "openai/gpt-5.1-codex-max" base_model_omit = ["limit.input"] +name = "GPT-5.1 Codex Max (Azure)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/azure/gpt-5.1-codex-mini.toml b/providers/edenai/models/azure/gpt-5.1-codex-mini.toml index eed8b111d93..f039c4791b2 100644 --- a/providers/edenai/models/azure/gpt-5.1-codex-mini.toml +++ b/providers/edenai/models/azure/gpt-5.1-codex-mini.toml @@ -1,5 +1,6 @@ base_model = "openai/gpt-5.1-codex-mini" base_model_omit = ["limit.input"] +name = "GPT-5.1 Codex mini (Azure)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/azure/gpt-5.1-codex.toml b/providers/edenai/models/azure/gpt-5.1-codex.toml index 89e3613f55e..aa4847da453 100644 --- a/providers/edenai/models/azure/gpt-5.1-codex.toml +++ b/providers/edenai/models/azure/gpt-5.1-codex.toml @@ -1,5 +1,6 @@ base_model = "openai/gpt-5.1-codex" base_model_omit = ["limit.input"] +name = "GPT-5.1 Codex (Azure)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/azure/gpt-5.2-codex.toml b/providers/edenai/models/azure/gpt-5.2-codex.toml index cc88366f47e..054a25112fd 100644 --- a/providers/edenai/models/azure/gpt-5.2-codex.toml +++ b/providers/edenai/models/azure/gpt-5.2-codex.toml @@ -1,5 +1,6 @@ base_model = "openai/gpt-5.2-codex" base_model_omit = ["limit.input"] +name = "GPT-5.2 Codex (Azure)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/cerebras/gpt-oss-120b.toml b/providers/edenai/models/cerebras/gpt-oss-120b.toml index fc6d3786a69..ec562201273 100644 --- a/providers/edenai/models/cerebras/gpt-oss-120b.toml +++ b/providers/edenai/models/cerebras/gpt-oss-120b.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-oss-120b" +name = "GPT OSS 120B (Cerebras)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/cloudflare/@cf/aisingapore/gemma-sea-lion-v4-27b-it.toml b/providers/edenai/models/cloudflare/@cf/aisingapore/gemma-sea-lion-v4-27b-it.toml index 06e14f09dab..d323efca4cb 100644 --- a/providers/edenai/models/cloudflare/@cf/aisingapore/gemma-sea-lion-v4-27b-it.toml +++ b/providers/edenai/models/cloudflare/@cf/aisingapore/gemma-sea-lion-v4-27b-it.toml @@ -1,4 +1,5 @@ base_model = "aisingapore/gemma-sea-lion-v4-27b-it" +name = "Gemma-SEA-LION-v4-27B-IT (Cloudflare)" structured_output = false [cost] diff --git a/providers/edenai/models/cloudflare/@cf/deepseek-ai/deepseek-v4-flash-0731.toml b/providers/edenai/models/cloudflare/@cf/deepseek-ai/deepseek-v4-flash-0731.toml index caded09fb6b..f82d3e094da 100644 --- a/providers/edenai/models/cloudflare/@cf/deepseek-ai/deepseek-v4-flash-0731.toml +++ b/providers/edenai/models/cloudflare/@cf/deepseek-ai/deepseek-v4-flash-0731.toml @@ -1,4 +1,5 @@ base_model = "deepseek/deepseek-v4-flash-0731" +name = "DeepSeek V4 Flash 0731 (Cloudflare)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/cloudflare/@cf/deepseek-ai/deepseek-v4-pro-0813.toml b/providers/edenai/models/cloudflare/@cf/deepseek-ai/deepseek-v4-pro-0813.toml index 2bac9436ad1..707f926f6bd 100644 --- a/providers/edenai/models/cloudflare/@cf/deepseek-ai/deepseek-v4-pro-0813.toml +++ b/providers/edenai/models/cloudflare/@cf/deepseek-ai/deepseek-v4-pro-0813.toml @@ -1,4 +1,5 @@ base_model = "deepseek/deepseek-v4-pro-0813" +name = "DeepSeek V4 Pro 0813 (Cloudflare)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/cloudflare/@cf/meta/llama-guard-3-8b.toml b/providers/edenai/models/cloudflare/@cf/meta/llama-guard-3-8b.toml index b18940b04a4..c9be7ae7e00 100644 --- a/providers/edenai/models/cloudflare/@cf/meta/llama-guard-3-8b.toml +++ b/providers/edenai/models/cloudflare/@cf/meta/llama-guard-3-8b.toml @@ -1,4 +1,5 @@ base_model = "meta/llama-guard-3-8b" +name = "Llama-Guard-3-8B (Cloudflare)" structured_output = false [cost] diff --git a/providers/edenai/models/cloudflare/@cf/openai/gpt-oss-120b.toml b/providers/edenai/models/cloudflare/@cf/openai/gpt-oss-120b.toml index 7e8312cd34c..f82bcaa155a 100644 --- a/providers/edenai/models/cloudflare/@cf/openai/gpt-oss-120b.toml +++ b/providers/edenai/models/cloudflare/@cf/openai/gpt-oss-120b.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-oss-120b" +name = "GPT OSS 120B (Cloudflare)" structured_output = false [[reasoning_options]] diff --git a/providers/edenai/models/cloudflare/@cf/openai/gpt-oss-20b.toml b/providers/edenai/models/cloudflare/@cf/openai/gpt-oss-20b.toml index c43fc3001c7..c0000eece82 100644 --- a/providers/edenai/models/cloudflare/@cf/openai/gpt-oss-20b.toml +++ b/providers/edenai/models/cloudflare/@cf/openai/gpt-oss-20b.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-oss-20b" +name = "GPT OSS 20B (Cloudflare)" structured_output = false [[reasoning_options]] diff --git a/providers/edenai/models/cloudflare/@cf/qwen/qwen2.5-coder-32b-instruct.toml b/providers/edenai/models/cloudflare/@cf/qwen/qwen2.5-coder-32b-instruct.toml index 93cb5d3bd2e..be84a18d071 100644 --- a/providers/edenai/models/cloudflare/@cf/qwen/qwen2.5-coder-32b-instruct.toml +++ b/providers/edenai/models/cloudflare/@cf/qwen/qwen2.5-coder-32b-instruct.toml @@ -1,6 +1,7 @@ base_model = "alibaba/qwen2.5-coder-32b-instruct" +name = "Qwen2.5-Coder-32B-Instruct (Cloudflare)" tool_call = false -structured_output = false +structured_output = true [cost] input = 0.66 diff --git a/providers/edenai/models/cloudflare/@cf/zai-org/glm-4.7-flash.toml b/providers/edenai/models/cloudflare/@cf/zai-org/glm-4.7-flash.toml index 1abd0ea732a..a2adc939783 100644 --- a/providers/edenai/models/cloudflare/@cf/zai-org/glm-4.7-flash.toml +++ b/providers/edenai/models/cloudflare/@cf/zai-org/glm-4.7-flash.toml @@ -1,4 +1,5 @@ base_model = "zhipuai/glm-4.7-flash" +name = "GLM-4.7-Flash (Cloudflare)" structured_output = true reasoning_options = [] diff --git a/providers/edenai/models/databricks/databricks-deepseek-v4-flash-0731.toml b/providers/edenai/models/databricks/databricks-deepseek-v4-flash-0731.toml new file mode 100644 index 00000000000..ec6f7cacc88 --- /dev/null +++ b/providers/edenai/models/databricks/databricks-deepseek-v4-flash-0731.toml @@ -0,0 +1,13 @@ +base_model = "deepseek/deepseek-v4-flash-0731" +name = "DeepSeek V4 Flash 0731 (Databricks)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 0.14 +output = 0.28 +cache_read = 0.014 +cache_write = 0.14 diff --git a/providers/edenai/models/databricks/databricks-deepseek-v4-pro-0813.toml b/providers/edenai/models/databricks/databricks-deepseek-v4-pro-0813.toml new file mode 100644 index 00000000000..a293c8ac08b --- /dev/null +++ b/providers/edenai/models/databricks/databricks-deepseek-v4-pro-0813.toml @@ -0,0 +1,13 @@ +base_model = "deepseek/deepseek-v4-pro-0813" +name = "DeepSeek V4 Pro 0813 (Databricks)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 1.32 +output = 3.959999 +cache_read = 0.132 +cache_write = 1.31999 diff --git a/providers/edenai/models/databricks/databricks-gpt-oss-120b.toml b/providers/edenai/models/databricks/databricks-gpt-oss-120b.toml index 2757b223875..d937f340ccb 100644 --- a/providers/edenai/models/databricks/databricks-gpt-oss-120b.toml +++ b/providers/edenai/models/databricks/databricks-gpt-oss-120b.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-oss-120b" +name = "GPT OSS 120B (Databricks)" structured_output = false [[reasoning_options]] @@ -8,5 +9,5 @@ values = ["low", "medium", "high"] [cost] input = 0.15001 output = 0.59997 -cache_read = 0.15001 +cache_read = 0.015001 cache_write = 0.15001 diff --git a/providers/edenai/models/databricks/databricks-gpt-oss-120b@eu.toml b/providers/edenai/models/databricks/databricks-gpt-oss-120b@eu.toml new file mode 100644 index 00000000000..a6fc70753e5 --- /dev/null +++ b/providers/edenai/models/databricks/databricks-gpt-oss-120b@eu.toml @@ -0,0 +1,13 @@ +base_model = "openai/gpt-oss-120b" +name = "GPT OSS 120B (Databricks, EU)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.15001 +output = 0.59997 +cache_read = 0.015001 +cache_write = 0.15001 diff --git a/providers/edenai/models/databricks/databricks-gpt-oss-20b.toml b/providers/edenai/models/databricks/databricks-gpt-oss-20b.toml index e2b022fe2c3..88c8b5e2847 100644 --- a/providers/edenai/models/databricks/databricks-gpt-oss-20b.toml +++ b/providers/edenai/models/databricks/databricks-gpt-oss-20b.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-oss-20b" +name = "GPT OSS 20B (Databricks)" structured_output = false [[reasoning_options]] @@ -8,5 +9,5 @@ values = ["low", "medium", "high"] [cost] input = 0.07 output = 0.30002 -cache_read = 0.07 +cache_read = 0.007 cache_write = 0.07 diff --git a/providers/edenai/models/databricks/databricks-gpt-oss-20b@eu.toml b/providers/edenai/models/databricks/databricks-gpt-oss-20b@eu.toml new file mode 100644 index 00000000000..456e8fff78b --- /dev/null +++ b/providers/edenai/models/databricks/databricks-gpt-oss-20b@eu.toml @@ -0,0 +1,13 @@ +base_model = "openai/gpt-oss-20b" +name = "GPT OSS 20B (Databricks, EU)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.07 +output = 0.30002 +cache_read = 0.007 +cache_write = 0.07 diff --git a/providers/edenai/models/databricks/databricks-inkling.toml b/providers/edenai/models/databricks/databricks-inkling.toml new file mode 100644 index 00000000000..eef08eb01d0 --- /dev/null +++ b/providers/edenai/models/databricks/databricks-inkling.toml @@ -0,0 +1,19 @@ +base_model = "thinkingmachines/inkling" +name = "Inkling (Databricks)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "max"] + +[cost] +input = 1 +output = 4.05 +cache_read = 0.1 +cache_write = 1.00002 + +[limit] +context = 1_000_000 + +[modalities] +input = ["text", "image"] diff --git a/providers/edenai/models/deepinfra/ByteDance/Seed-2.0-code.toml b/providers/edenai/models/deepinfra/ByteDance/Seed-2.0-code.toml index f0535988d69..bc15dd4e96c 100644 --- a/providers/edenai/models/deepinfra/ByteDance/Seed-2.0-code.toml +++ b/providers/edenai/models/deepinfra/ByteDance/Seed-2.0-code.toml @@ -1,6 +1,5 @@ base_model = "bytedance-seed/seed-2.0-code" -tool_call = false -structured_output = false +name = "Seed 2.0 Code (Deep Infra)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/deepinfra/ByteDance/Seed-2.0-mini.toml b/providers/edenai/models/deepinfra/ByteDance/Seed-2.0-mini.toml index 559b3a3a285..c50bdb655e0 100644 --- a/providers/edenai/models/deepinfra/ByteDance/Seed-2.0-mini.toml +++ b/providers/edenai/models/deepinfra/ByteDance/Seed-2.0-mini.toml @@ -1,6 +1,5 @@ base_model = "bytedance-seed/seed-2.0-mini" -tool_call = false -structured_output = false +name = "Seed 2.0 Mini (Deep Infra)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-R1.toml b/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-R1.toml index 6ba25593e54..78d2e12defe 100644 --- a/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-R1.toml +++ b/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-R1.toml @@ -1,4 +1,5 @@ base_model = "deepseek/deepseek-r1" +name = "DeepSeek-R1 (Deep Infra)" structured_output = false reasoning_options = [] diff --git a/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-V3-0324.toml b/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-V3-0324.toml index e18c6527ba1..b3f50f4e8da 100644 --- a/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-V3-0324.toml +++ b/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-V3-0324.toml @@ -1,4 +1,5 @@ base_model = "deepseek/deepseek-v3-0324" +name = "DeepSeek V3 0324 (Deep Infra)" structured_output = false [cost] diff --git a/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-V3.toml b/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-V3.toml index a6d680ebbe5..85b700dcad1 100644 --- a/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-V3.toml +++ b/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-V3.toml @@ -1,4 +1,5 @@ base_model = "deepseek/deepseek-v3" +name = "DeepSeek-V3 (Deep Infra)" structured_output = false [cost] diff --git a/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-V4-Flash-0731.toml b/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-V4-Flash-0731.toml index e065c5297a8..3df69ac9ec4 100644 --- a/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-V4-Flash-0731.toml +++ b/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-V4-Flash-0731.toml @@ -1,13 +1,14 @@ base_model = "deepseek/deepseek-v4-flash-0731" +name = "DeepSeek V4 Flash 0731 (Deep Infra)" [[reasoning_options]] type = "effort" values = ["none", "low", "high", "max"] [cost] -input = 0.08 +input = 0.06 output = 0.18 -cache_read = 0.016 +cache_read = 0.015 [limit] context = 1_048_576 diff --git a/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-V4-Pro-0813.toml b/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-V4-Pro-0813.toml index 8e11ef85e8c..165791c08dd 100644 --- a/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-V4-Pro-0813.toml +++ b/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-V4-Pro-0813.toml @@ -1,4 +1,5 @@ base_model = "deepseek/deepseek-v4-pro-0813" +name = "DeepSeek V4 Pro 0813 (Deep Infra)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-V4.1-Flash.toml b/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-V4.1-Flash.toml new file mode 100644 index 00000000000..d741e86c6d5 --- /dev/null +++ b/providers/edenai/models/deepinfra/deepseek-ai/DeepSeek-V4.1-Flash.toml @@ -0,0 +1,14 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash (Deep Infra)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 0.2 +output = 0.6 +cache_read = 0.006 + +[limit] +context = 1_048_576 diff --git a/providers/edenai/models/deepinfra/google/gemma-3-12b-it.toml b/providers/edenai/models/deepinfra/google/gemma-3-12b-it.toml new file mode 100644 index 00000000000..5e45c8c3afc --- /dev/null +++ b/providers/edenai/models/deepinfra/google/gemma-3-12b-it.toml @@ -0,0 +1,7 @@ +base_model = "google/gemma-3-12b-it" +name = "Gemma 3 12B IT (Deep Infra)" +structured_output = true + +[cost] +input = 0.05 +output = 0.15 diff --git a/providers/edenai/models/deepinfra/google/gemma-3-27b-it.toml b/providers/edenai/models/deepinfra/google/gemma-3-27b-it.toml new file mode 100644 index 00000000000..01fdf25ec18 --- /dev/null +++ b/providers/edenai/models/deepinfra/google/gemma-3-27b-it.toml @@ -0,0 +1,7 @@ +base_model = "google/gemma-3-27b-it" +name = "Gemma 3 27B IT (Deep Infra)" +structured_output = true + +[cost] +input = 0.08 +output = 0.16 diff --git a/providers/edenai/models/deepinfra/google/gemma-3-4b-it.toml b/providers/edenai/models/deepinfra/google/gemma-3-4b-it.toml new file mode 100644 index 00000000000..a8895d2adb3 --- /dev/null +++ b/providers/edenai/models/deepinfra/google/gemma-3-4b-it.toml @@ -0,0 +1,7 @@ +base_model = "google/gemma-3-4b-it" +name = "Gemma 3 4B IT (Deep Infra)" +structured_output = true + +[cost] +input = 0.05 +output = 0.1 diff --git a/providers/edenai/models/deepinfra/meta-llama/Llama-3.2-11B-Vision-Instruct.toml b/providers/edenai/models/deepinfra/meta-llama/Llama-3.2-11B-Vision-Instruct.toml index 1bfc897a035..706cee36ebb 100644 --- a/providers/edenai/models/deepinfra/meta-llama/Llama-3.2-11B-Vision-Instruct.toml +++ b/providers/edenai/models/deepinfra/meta-llama/Llama-3.2-11B-Vision-Instruct.toml @@ -1,4 +1,5 @@ base_model = "meta/llama-3.2-11b-vision-instruct" +name = "Llama-3.2-11B-Vision-Instruct (Deep Infra)" tool_call = false structured_output = true diff --git a/providers/edenai/models/deepinfra/meta-llama/Llama-3.3-70B-Instruct.toml b/providers/edenai/models/deepinfra/meta-llama/Llama-3.3-70B-Instruct.toml index 2638ae0d04c..bf88f7ab5c4 100644 --- a/providers/edenai/models/deepinfra/meta-llama/Llama-3.3-70B-Instruct.toml +++ b/providers/edenai/models/deepinfra/meta-llama/Llama-3.3-70B-Instruct.toml @@ -1,5 +1,5 @@ base_model = "meta/llama-3.3-70b-instruct" -attachment = false +name = "Llama-3.3-70B-Instruct (Deep Infra)" structured_output = true [cost] diff --git a/providers/edenai/models/deepinfra/meta-llama/Llama-Guard-3-8B.toml b/providers/edenai/models/deepinfra/meta-llama/Llama-Guard-3-8B.toml index 7e26572ec9d..57e863aac4e 100644 --- a/providers/edenai/models/deepinfra/meta-llama/Llama-Guard-3-8B.toml +++ b/providers/edenai/models/deepinfra/meta-llama/Llama-Guard-3-8B.toml @@ -1,4 +1,5 @@ base_model = "meta/llama-guard-3-8b" +name = "Llama-Guard-3-8B (Deep Infra)" structured_output = false [cost] diff --git a/providers/edenai/models/deepinfra/meta-models/Muse-Glimmer-30B.toml b/providers/edenai/models/deepinfra/meta-models/Muse-Glimmer-30B.toml index c01aa281174..02739958be0 100644 --- a/providers/edenai/models/deepinfra/meta-models/Muse-Glimmer-30B.toml +++ b/providers/edenai/models/deepinfra/meta-models/Muse-Glimmer-30B.toml @@ -1,4 +1,5 @@ base_model = "meta/muse-glimmer-30b" +name = "Muse Glimmer 30B (Deep Infra)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/deepinfra/moonshotai/Kimi-K2.5.toml b/providers/edenai/models/deepinfra/moonshotai/Kimi-K2.5.toml index 56ab5b2b572..3495335028d 100644 --- a/providers/edenai/models/deepinfra/moonshotai/Kimi-K2.5.toml +++ b/providers/edenai/models/deepinfra/moonshotai/Kimi-K2.5.toml @@ -1,4 +1,5 @@ base_model = "moonshotai/kimi-k2.5" +name = "Kimi K2.5 (Deep Infra)" reasoning_options = [] [cost] diff --git a/providers/edenai/models/deepinfra/nemotron-3-ultra-550b-a55b.toml b/providers/edenai/models/deepinfra/nemotron-3-ultra-550b-a55b.toml index db9ab214604..51ea14aca4b 100644 --- a/providers/edenai/models/deepinfra/nemotron-3-ultra-550b-a55b.toml +++ b/providers/edenai/models/deepinfra/nemotron-3-ultra-550b-a55b.toml @@ -1,4 +1,5 @@ base_model = "nvidia/nemotron-3-ultra-550b-a55b" +name = "Nemotron 3 Ultra 550B A55B (Deep Infra)" structured_output = true [[reasoning_options]] diff --git a/providers/edenai/models/deepinfra/nvidia/Llama-3.1-Nemotron-70B-Instruct.toml b/providers/edenai/models/deepinfra/nvidia/Llama-3.1-Nemotron-70B-Instruct.toml index 1b1be74a6c9..ac91c06b77d 100644 --- a/providers/edenai/models/deepinfra/nvidia/Llama-3.1-Nemotron-70B-Instruct.toml +++ b/providers/edenai/models/deepinfra/nvidia/Llama-3.1-Nemotron-70B-Instruct.toml @@ -1,4 +1,5 @@ base_model = "nvidia/llama-3.1-nemotron-70b-instruct" +name = "Llama 3.1 Nemotron 70B Instruct (Deep Infra)" structured_output = false [cost] diff --git a/providers/edenai/models/deepinfra/nvidia/Nemotron-3-Nano-30B-A3B.toml b/providers/edenai/models/deepinfra/nvidia/Nemotron-3-Nano-30B-A3B.toml index aaff49826e1..8b32282deec 100644 --- a/providers/edenai/models/deepinfra/nvidia/Nemotron-3-Nano-30B-A3B.toml +++ b/providers/edenai/models/deepinfra/nvidia/Nemotron-3-Nano-30B-A3B.toml @@ -1,4 +1,5 @@ base_model = "nvidia/nemotron-3-nano-30b-a3b" +name = "Nemotron 3 Nano 30B A3B (Deep Infra)" structured_output = true reasoning_options = [] diff --git a/providers/edenai/models/deepinfra/openai/gpt-oss-120b.toml b/providers/edenai/models/deepinfra/openai/gpt-oss-120b.toml index e0ec3903a08..644ba82cfd3 100644 --- a/providers/edenai/models/deepinfra/openai/gpt-oss-120b.toml +++ b/providers/edenai/models/deepinfra/openai/gpt-oss-120b.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-oss-120b" +name = "GPT OSS 120B (Deep Infra)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/deepinfra/openai/gpt-oss-20b.toml b/providers/edenai/models/deepinfra/openai/gpt-oss-20b.toml index b37413d1850..18cba074ce6 100644 --- a/providers/edenai/models/deepinfra/openai/gpt-oss-20b.toml +++ b/providers/edenai/models/deepinfra/openai/gpt-oss-20b.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-oss-20b" +name = "GPT OSS 20B (Deep Infra)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/deepinfra/stepfun-ai/Step-3.5-Flash.toml b/providers/edenai/models/deepinfra/stepfun-ai/Step-3.5-Flash.toml index d11a94a99d9..d6ad2dc31a7 100644 --- a/providers/edenai/models/deepinfra/stepfun-ai/Step-3.5-Flash.toml +++ b/providers/edenai/models/deepinfra/stepfun-ai/Step-3.5-Flash.toml @@ -1,5 +1,6 @@ base_model = "stepfun/step-3.5-flash" base_model_omit = ["limit.input"] +name = "Step 3.5 Flash (Deep Infra)" structured_output = true [[reasoning_options]] diff --git a/providers/edenai/models/deepinfra/stepfun-ai/Step-3.7-Flash.toml b/providers/edenai/models/deepinfra/stepfun-ai/Step-3.7-Flash.toml index 123c6bc463b..6cc4f58727b 100644 --- a/providers/edenai/models/deepinfra/stepfun-ai/Step-3.7-Flash.toml +++ b/providers/edenai/models/deepinfra/stepfun-ai/Step-3.7-Flash.toml @@ -1,6 +1,7 @@ base_model = "stepfun/step-3.7-flash" base_model_omit = ["limit.input"] -structured_output = false +name = "Step 3.7 Flash (Deep Infra)" +structured_output = true [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/deepinfra/tencent/Hy3.toml b/providers/edenai/models/deepinfra/tencent/Hy3.toml new file mode 100644 index 00000000000..6cb87c36ee1 --- /dev/null +++ b/providers/edenai/models/deepinfra/tencent/Hy3.toml @@ -0,0 +1,16 @@ +base_model = "tencent/hy3" +base_model_omit = ["limit.input"] +name = "Hy3 (Deep Infra)" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high"] + +[cost] +input = 0.13 +output = 0.53 +cache_read = 0.033 + +[limit] +context = 262_144 diff --git a/providers/edenai/models/deepinfra/thinkingmachines/Inkling-Small.toml b/providers/edenai/models/deepinfra/thinkingmachines/Inkling-Small.toml index a0470066d6b..aab2e4ab14e 100644 --- a/providers/edenai/models/deepinfra/thinkingmachines/Inkling-Small.toml +++ b/providers/edenai/models/deepinfra/thinkingmachines/Inkling-Small.toml @@ -1,4 +1,5 @@ base_model = "thinkingmachines/inkling-small" +name = "Inkling Small (Deep Infra)" structured_output = true [[reasoning_options]] diff --git a/providers/edenai/models/deepinfra/thinkingmachines/Inkling.toml b/providers/edenai/models/deepinfra/thinkingmachines/Inkling.toml index 5353ced4450..f73f8b80c7f 100644 --- a/providers/edenai/models/deepinfra/thinkingmachines/Inkling.toml +++ b/providers/edenai/models/deepinfra/thinkingmachines/Inkling.toml @@ -1,4 +1,5 @@ base_model = "thinkingmachines/inkling" +name = "Inkling (Deep Infra)" structured_output = true [[reasoning_options]] diff --git a/providers/edenai/models/deepinfra/zai-org/GLM-4.7-Flash.toml b/providers/edenai/models/deepinfra/zai-org/GLM-4.7-Flash.toml index 51a1a790b52..a5eba99fa24 100644 --- a/providers/edenai/models/deepinfra/zai-org/GLM-4.7-Flash.toml +++ b/providers/edenai/models/deepinfra/zai-org/GLM-4.7-Flash.toml @@ -1,4 +1,5 @@ base_model = "zhipuai/glm-4.7-flash" +name = "GLM-4.7-Flash (Deep Infra)" structured_output = true reasoning_options = [] diff --git a/providers/edenai/models/deepseek/deepseek-chat.toml b/providers/edenai/models/deepseek/deepseek-chat.toml index 68423502b1b..9daa8f3a3e5 100644 --- a/providers/edenai/models/deepseek/deepseek-chat.toml +++ b/providers/edenai/models/deepseek/deepseek-chat.toml @@ -3,9 +3,9 @@ attachment = false structured_output = true [cost] -input = 0.28 -output = 0.42 -cache_read = 0.028 +input = 0.15 +output = 0.6 +cache_read = 0.003 [limit] context = 131_072 diff --git a/providers/edenai/models/deepseek/deepseek-v4-flash-vision-exp.toml b/providers/edenai/models/deepseek/deepseek-v4-flash-vision-exp.toml index 54c9aff2f3e..afcc9b8045b 100644 --- a/providers/edenai/models/deepseek/deepseek-v4-flash-vision-exp.toml +++ b/providers/edenai/models/deepseek/deepseek-v4-flash-vision-exp.toml @@ -5,9 +5,6 @@ type = "effort" values = ["none", "low", "high", "max"] [cost] -input = 0.22 -output = 0.66 -cache_read = 0.007 - -[limit] -context = 1_048_576 +input = 0.15 +output = 0.6 +cache_read = 0.003 diff --git a/providers/edenai/models/deepseek/deepseek-v4-flash.toml b/providers/edenai/models/deepseek/deepseek-v4-flash.toml index d8f7c84db4d..f3e849c7f29 100644 --- a/providers/edenai/models/deepseek/deepseek-v4-flash.toml +++ b/providers/edenai/models/deepseek/deepseek-v4-flash.toml @@ -1,10 +1,14 @@ base_model = "deepseek/deepseek-v4-flash" +attachment = true [[reasoning_options]] type = "effort" values = ["none", "low", "high", "max"] [cost] -input = 0.44 -output = 1.32 -cache_read = 0.014 +input = 0.15 +output = 0.6 +cache_read = 0.003 + +[modalities] +input = ["text", "image"] diff --git a/providers/edenai/models/deepseek/deepseek-v4-pro.toml b/providers/edenai/models/deepseek/deepseek-v4-pro.toml index 6b7c04704c9..05723a127e4 100644 --- a/providers/edenai/models/deepseek/deepseek-v4-pro.toml +++ b/providers/edenai/models/deepseek/deepseek-v4-pro.toml @@ -2,9 +2,9 @@ base_model = "deepseek/deepseek-v4-pro" [[reasoning_options]] type = "effort" -values = ["none", "high", "max"] +values = ["none", "low", "high", "max"] [cost] -input = 1.32 -output = 3.96 -cache_read = 0.044 +input = 0.66 +output = 1.98 +cache_read = 0.022 diff --git a/providers/edenai/models/fireworks_ai/accounts/fireworks/models/deepseek-v4-flash-0731.toml b/providers/edenai/models/fireworks_ai/accounts/fireworks/models/deepseek-v4-flash-0731.toml index 7f25a297a2b..43b37cf7cbd 100644 --- a/providers/edenai/models/fireworks_ai/accounts/fireworks/models/deepseek-v4-flash-0731.toml +++ b/providers/edenai/models/fireworks_ai/accounts/fireworks/models/deepseek-v4-flash-0731.toml @@ -1,4 +1,5 @@ base_model = "deepseek/deepseek-v4-flash-0731" +name = "DeepSeek V4 Flash 0731 (Fireworks AI)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/fireworks_ai/accounts/fireworks/models/deepseek-v4-pro-0813.toml b/providers/edenai/models/fireworks_ai/accounts/fireworks/models/deepseek-v4-pro-0813.toml index 2bac9436ad1..2213244487c 100644 --- a/providers/edenai/models/fireworks_ai/accounts/fireworks/models/deepseek-v4-pro-0813.toml +++ b/providers/edenai/models/fireworks_ai/accounts/fireworks/models/deepseek-v4-pro-0813.toml @@ -1,4 +1,5 @@ base_model = "deepseek/deepseek-v4-pro-0813" +name = "DeepSeek V4 Pro 0813 (Fireworks AI)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/fireworks_ai/accounts/fireworks/models/gpt-oss-120b.toml b/providers/edenai/models/fireworks_ai/accounts/fireworks/models/gpt-oss-120b.toml deleted file mode 100644 index 293dd1bccfd..00000000000 --- a/providers/edenai/models/fireworks_ai/accounts/fireworks/models/gpt-oss-120b.toml +++ /dev/null @@ -1,10 +0,0 @@ -base_model = "openai/gpt-oss-120b" - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] - -[cost] -input = 0.15 -output = 0.6 -cache_read = 0.015 diff --git a/providers/edenai/models/fireworks_ai/accounts/fireworks/models/gpt-oss-20b.toml b/providers/edenai/models/fireworks_ai/accounts/fireworks/models/gpt-oss-20b.toml deleted file mode 100644 index 52e5e9d4321..00000000000 --- a/providers/edenai/models/fireworks_ai/accounts/fireworks/models/gpt-oss-20b.toml +++ /dev/null @@ -1,10 +0,0 @@ -base_model = "openai/gpt-oss-20b" - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] - -[cost] -input = 0.07 -output = 0.3 -cache_read = 0.035 diff --git a/providers/edenai/models/fireworks_ai/accounts/fireworks/models/inkling.toml b/providers/edenai/models/fireworks_ai/accounts/fireworks/models/inkling.toml new file mode 100644 index 00000000000..7989fb0fe01 --- /dev/null +++ b/providers/edenai/models/fireworks_ai/accounts/fireworks/models/inkling.toml @@ -0,0 +1,15 @@ +base_model = "thinkingmachines/inkling" +name = "Inkling (Fireworks AI)" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "max"] + +[cost] +input = 1 +output = 4.05 +cache_read = 0.17 + +[modalities] +input = ["text", "image"] diff --git a/providers/edenai/models/fireworks_ai/accounts/fireworks/models/muse-glimmer-30b.toml b/providers/edenai/models/fireworks_ai/accounts/fireworks/models/muse-glimmer-30b.toml index 2812d8df497..d7924809f4a 100644 --- a/providers/edenai/models/fireworks_ai/accounts/fireworks/models/muse-glimmer-30b.toml +++ b/providers/edenai/models/fireworks_ai/accounts/fireworks/models/muse-glimmer-30b.toml @@ -1,4 +1,5 @@ base_model = "meta/muse-glimmer-30b" +name = "Muse Glimmer 30B (Fireworks AI)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/fireworks_ai/gpt-oss-120b.toml b/providers/edenai/models/fireworks_ai/gpt-oss-120b.toml index 8a5eae63d21..992ec3575a6 100644 --- a/providers/edenai/models/fireworks_ai/gpt-oss-120b.toml +++ b/providers/edenai/models/fireworks_ai/gpt-oss-120b.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-oss-120b" +name = "GPT OSS 120B (Fireworks AI)" structured_output = false [[reasoning_options]] diff --git a/providers/edenai/models/fireworks_ai/gpt-oss-20b.toml b/providers/edenai/models/fireworks_ai/gpt-oss-20b.toml deleted file mode 100644 index 52e5e9d4321..00000000000 --- a/providers/edenai/models/fireworks_ai/gpt-oss-20b.toml +++ /dev/null @@ -1,10 +0,0 @@ -base_model = "openai/gpt-oss-20b" - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] - -[cost] -input = 0.07 -output = 0.3 -cache_read = 0.035 diff --git a/providers/edenai/models/flexai/DeepSeek-V4-Flash-0731.toml b/providers/edenai/models/flexai/DeepSeek-V4-Flash-0731.toml new file mode 100644 index 00000000000..4ad5f4e9eb7 --- /dev/null +++ b/providers/edenai/models/flexai/DeepSeek-V4-Flash-0731.toml @@ -0,0 +1,14 @@ +base_model = "deepseek/deepseek-v4-flash-0731" +name = "DeepSeek V4 Flash 0731 (FlexAI)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 0.065 +output = 0.18 +cache_read = 0.0097 + +[limit] +context = 1_048_576 diff --git a/providers/edenai/models/flexai/Muse-Glimmer-30B.toml b/providers/edenai/models/flexai/Muse-Glimmer-30B.toml index 1b542648bee..667e84be7c2 100644 --- a/providers/edenai/models/flexai/Muse-Glimmer-30B.toml +++ b/providers/edenai/models/flexai/Muse-Glimmer-30B.toml @@ -1,5 +1,5 @@ base_model = "meta/muse-glimmer-30b" -tool_call = false +name = "Muse Glimmer 30B (FlexAI)" structured_output = false [[reasoning_options]] @@ -8,4 +8,5 @@ values = ["low", "medium", "high", "xhigh"] [cost] input = 0.3 -output = 1.2 +output = 1.1 +cache_read = 0.045 diff --git a/providers/edenai/models/flexai/Nemotron-3-Super-120B-A12B.toml b/providers/edenai/models/flexai/Nemotron-3-Super-120B-A12B.toml deleted file mode 100644 index 3aa985d31f1..00000000000 --- a/providers/edenai/models/flexai/Nemotron-3-Super-120B-A12B.toml +++ /dev/null @@ -1,11 +0,0 @@ -base_model = "nvidia/nemotron-3-super-120b-a12b" -tool_call = false -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["none", "low", "medium"] - -[cost] -input = 0.085 -output = 0.4 diff --git a/providers/edenai/models/flexai/Step-3.7-Flash.toml b/providers/edenai/models/flexai/Step-3.7-Flash.toml new file mode 100644 index 00000000000..ea10ac487a7 --- /dev/null +++ b/providers/edenai/models/flexai/Step-3.7-Flash.toml @@ -0,0 +1,19 @@ +base_model = "stepfun/step-3.7-flash" +base_model_omit = ["limit.input"] +name = "Step 3.7 Flash (FlexAI)" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.2 +output = 1.15 +cache_read = 0.03 + +[limit] +context = 262_144 + +[modalities] +input = ["text", "image"] diff --git a/providers/edenai/models/flexai/deepseek-v4-flash-0731.toml b/providers/edenai/models/flexai/deepseek-v4-flash-0731.toml deleted file mode 100644 index 8d7dbd5484c..00000000000 --- a/providers/edenai/models/flexai/deepseek-v4-flash-0731.toml +++ /dev/null @@ -1,14 +0,0 @@ -base_model = "deepseek/deepseek-v4-flash-0731" -tool_call = false -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["none", "low", "high", "max"] - -[cost] -input = 0.08 -output = 0.18 - -[limit] -context = 786_432 diff --git a/providers/edenai/models/flexai/gpt-oss-120b.toml b/providers/edenai/models/flexai/gpt-oss-120b.toml index c3cccca018f..ee8b1fd793f 100644 --- a/providers/edenai/models/flexai/gpt-oss-120b.toml +++ b/providers/edenai/models/flexai/gpt-oss-120b.toml @@ -1,11 +1,11 @@ base_model = "openai/gpt-oss-120b" -tool_call = false -structured_output = false +name = "GPT OSS 120B (FlexAI)" [[reasoning_options]] type = "effort" values = ["low", "medium", "high"] [cost] -input = 0.039 -output = 0.1 +input = 0.037 +output = 0.17 +cache_read = 0.0055 diff --git a/providers/edenai/models/flexai/gpt-oss-20b.toml b/providers/edenai/models/flexai/gpt-oss-20b.toml index cd92dbb1355..7a4c54cadec 100644 --- a/providers/edenai/models/flexai/gpt-oss-20b.toml +++ b/providers/edenai/models/flexai/gpt-oss-20b.toml @@ -1,11 +1,11 @@ base_model = "openai/gpt-oss-20b" -tool_call = false -structured_output = false +name = "GPT OSS 20B (FlexAI)" [[reasoning_options]] type = "effort" values = ["low", "medium", "high"] [cost] -input = 0.03 -output = 0.13 +input = 0.018 +output = 0.09 +cache_read = 0.0027 diff --git a/providers/edenai/models/google/gemini-3.7-flash.toml b/providers/edenai/models/google/gemini-3.7-flash.toml index 501847ffb65..1a64f9681ee 100644 --- a/providers/edenai/models/google/gemini-3.7-flash.toml +++ b/providers/edenai/models/google/gemini-3.7-flash.toml @@ -5,9 +5,9 @@ type = "effort" values = ["low", "medium", "high"] [cost] -input = 1.5 -output = 7.5 -reasoning = 7.5 -cache_read = 0.15 -cache_write = 0.083333 -input_audio = 1.5 +input = 0.75 +output = 3.75 +reasoning = 3.75 +cache_read = 0.075 +cache_write = 0.041667 +input_audio = 0.75 diff --git a/providers/edenai/models/google/gemini-3.8-flash.toml b/providers/edenai/models/google/gemini-3.8-flash.toml new file mode 100644 index 00000000000..e1d0abd66e5 --- /dev/null +++ b/providers/edenai/models/google/gemini-3.8-flash.toml @@ -0,0 +1,13 @@ +base_model = "google/gemini-3.8-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.75 +output = 3.75 +reasoning = 3.75 +cache_read = 0.075 +cache_write = 0.041667 +input_audio = 0.75 diff --git a/providers/edenai/models/google/gemini-flash-latest.toml b/providers/edenai/models/google/gemini-flash-latest.toml index 501847ffb65..e3ccde409d2 100644 --- a/providers/edenai/models/google/gemini-flash-latest.toml +++ b/providers/edenai/models/google/gemini-flash-latest.toml @@ -1,13 +1,14 @@ -base_model = "google/gemini-3.7-flash" +base_model = "google/gemini-3.8-flash" +name = "Gemini Flash Latest (Gemini 3.8 Flash)" [[reasoning_options]] type = "effort" values = ["low", "medium", "high"] [cost] -input = 1.5 -output = 7.5 -reasoning = 7.5 -cache_read = 0.15 -cache_write = 0.083333 -input_audio = 1.5 +input = 0.75 +output = 3.75 +reasoning = 3.75 +cache_read = 0.075 +cache_write = 0.041667 +input_audio = 0.75 diff --git a/providers/edenai/models/google/gemini-pro-latest.toml b/providers/edenai/models/google/gemini-pro-latest.toml index 38907bc3ce0..ae9e93123b3 100644 --- a/providers/edenai/models/google/gemini-pro-latest.toml +++ b/providers/edenai/models/google/gemini-pro-latest.toml @@ -1,4 +1,5 @@ base_model = "google/gemini-3.1-pro-preview" +name = "Gemini Pro Latest (Gemini 3.1 Pro Preview)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/google/lyria-3-clip-preview.toml b/providers/edenai/models/google/lyria-3-clip-preview.toml deleted file mode 100644 index 0e5aade5c80..00000000000 --- a/providers/edenai/models/google/lyria-3-clip-preview.toml +++ /dev/null @@ -1,9 +0,0 @@ -base_model = "google/lyria-3-clip-preview" -structured_output = true - -[cost] -input = 0 -output = 0 - -[limit] -context = 1_048_576 diff --git a/providers/edenai/models/groq/openai/gpt-oss-120b.toml b/providers/edenai/models/groq/openai/gpt-oss-120b.toml index e66f11b7da6..bb02ded6a84 100644 --- a/providers/edenai/models/groq/openai/gpt-oss-120b.toml +++ b/providers/edenai/models/groq/openai/gpt-oss-120b.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-oss-120b" +name = "GPT OSS 120B (Groq)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/groq/openai/gpt-oss-20b.toml b/providers/edenai/models/groq/openai/gpt-oss-20b.toml index 7fb706235b9..255f5361da6 100644 --- a/providers/edenai/models/groq/openai/gpt-oss-20b.toml +++ b/providers/edenai/models/groq/openai/gpt-oss-20b.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-oss-20b" +name = "GPT OSS 20B (Groq)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/groq/openai/gpt-oss-safeguard-20b.toml b/providers/edenai/models/groq/openai/gpt-oss-safeguard-20b.toml new file mode 100644 index 00000000000..bceeac7daec --- /dev/null +++ b/providers/edenai/models/groq/openai/gpt-oss-safeguard-20b.toml @@ -0,0 +1,11 @@ +base_model = "openai/gpt-oss-safeguard-20b" +name = "GPT OSS Safeguard 20B (Groq)" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.075 +output = 0.3 +cache_read = 0.0375 diff --git a/providers/edenai/models/infomaniak/mistralai/Ministral-3-14B-Instruct-2512.toml b/providers/edenai/models/infomaniak/mistralai/Ministral-3-14B-Instruct-2512.toml new file mode 100644 index 00000000000..3dbec673b70 --- /dev/null +++ b/providers/edenai/models/infomaniak/mistralai/Ministral-3-14B-Instruct-2512.toml @@ -0,0 +1,15 @@ +base_model = "mistral/ministral-3-14b-instruct-2512" +name = "Ministral 3 14B (Infomaniak)" +attachment = false +tool_call = false +structured_output = false + +[cost] +input = 0.34233 +output = 0.45644 + +[limit] +context = 100_000 + +[modalities] +input = ["text"] diff --git a/providers/edenai/models/ionos/meta-llama/Llama-3.3-70B-Instruct.toml b/providers/edenai/models/ionos/meta-llama/Llama-3.3-70B-Instruct.toml index 3fb9086c97e..0cb3a8f6a33 100644 --- a/providers/edenai/models/ionos/meta-llama/Llama-3.3-70B-Instruct.toml +++ b/providers/edenai/models/ionos/meta-llama/Llama-3.3-70B-Instruct.toml @@ -1,8 +1,8 @@ base_model = "meta/llama-3.3-70b-instruct" -attachment = false +name = "Llama-3.3-70B-Instruct (IONOS)" tool_call = false structured_output = false [cost] -input = 0.758485 -output = 0.758485 +input = 0.741715 +output = 0.741715 diff --git a/providers/edenai/models/ionos/openai/gpt-oss-120b.toml b/providers/edenai/models/ionos/openai/gpt-oss-120b.toml index c1278fe8028..84c064335a1 100644 --- a/providers/edenai/models/ionos/openai/gpt-oss-120b.toml +++ b/providers/edenai/models/ionos/openai/gpt-oss-120b.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-oss-120b" +name = "GPT OSS 120B (IONOS)" tool_call = false structured_output = false @@ -7,5 +8,5 @@ type = "effort" values = ["low", "medium", "high"] [cost] -input = 0.175035 -output = 0.758485 +input = 0.171165 +output = 0.741715 diff --git a/providers/edenai/models/mistral/codestral-latest.toml b/providers/edenai/models/mistral/codestral-latest.toml index 7046f48c1d3..b0b137235e1 100644 --- a/providers/edenai/models/mistral/codestral-latest.toml +++ b/providers/edenai/models/mistral/codestral-latest.toml @@ -4,3 +4,4 @@ structured_output = true [cost] input = 0.3 output = 0.9 +cache_read = 0.03 diff --git a/providers/edenai/models/mistral/devstral-2512.toml b/providers/edenai/models/mistral/devstral-2512.toml index 53cfd98aa8f..dc55a17b584 100644 --- a/providers/edenai/models/mistral/devstral-2512.toml +++ b/providers/edenai/models/mistral/devstral-2512.toml @@ -3,9 +3,9 @@ attachment = true structured_output = true [cost] -input = 0.44 -output = 2.2 -cache_read = 0.044 +input = 0.4 +output = 2 +cache_read = 0.04 [modalities] input = ["text", "pdf"] diff --git a/providers/edenai/models/mistral/magistral-medium-latest.toml b/providers/edenai/models/mistral/magistral-medium-latest.toml index 4e681bedade..cc8503b4e41 100644 --- a/providers/edenai/models/mistral/magistral-medium-latest.toml +++ b/providers/edenai/models/mistral/magistral-medium-latest.toml @@ -4,8 +4,9 @@ structured_output = true reasoning_options = [] [cost] -input = 2 -output = 5 +input = 1.5 +output = 7.5 +cache_read = 0.15 [limit] context = 262_144 diff --git a/providers/edenai/models/mistral/mistral-medium-2604.toml b/providers/edenai/models/mistral/mistral-medium-2604.toml index 811c7ffe231..be9a882e3ab 100644 --- a/providers/edenai/models/mistral/mistral-medium-2604.toml +++ b/providers/edenai/models/mistral/mistral-medium-2604.toml @@ -7,3 +7,4 @@ values = ["none", "high"] [cost] input = 1.5 output = 7.5 +cache_read = 0.15 diff --git a/providers/edenai/models/mistral/mistral-medium-latest.toml b/providers/edenai/models/mistral/mistral-medium-latest.toml index 1f83fe33308..66bfb523c22 100644 --- a/providers/edenai/models/mistral/mistral-medium-latest.toml +++ b/providers/edenai/models/mistral/mistral-medium-latest.toml @@ -7,3 +7,4 @@ values = ["none", "high"] [cost] input = 1.5 output = 7.5 +cache_read = 0.15 diff --git a/providers/edenai/models/mistral/mistral-small-latest.toml b/providers/edenai/models/mistral/mistral-small-latest.toml index dd09544702f..59ec1c034c7 100644 --- a/providers/edenai/models/mistral/mistral-small-latest.toml +++ b/providers/edenai/models/mistral/mistral-small-latest.toml @@ -8,6 +8,7 @@ values = ["none", "high"] [cost] input = 0.15 output = 0.6 +cache_read = 0.015 [limit] context = 262_144 diff --git a/providers/edenai/models/mistral/voxtral-small-latest.toml b/providers/edenai/models/mistral/voxtral-small-latest.toml new file mode 100644 index 00000000000..1c35a86c208 --- /dev/null +++ b/providers/edenai/models/mistral/voxtral-small-latest.toml @@ -0,0 +1,10 @@ +base_model = "mistral/voxtral-small-latest" +structured_output = true + +[cost] +input = 0.1 +output = 0.4 +cache_read = 0.01 + +[limit] +context = 32_768 diff --git a/providers/edenai/models/moonshot/kimi-k2.7-code-highspeed.toml b/providers/edenai/models/moonshot/kimi-k2.7-code-highspeed.toml new file mode 100644 index 00000000000..3153080377b --- /dev/null +++ b/providers/edenai/models/moonshot/kimi-k2.7-code-highspeed.toml @@ -0,0 +1,13 @@ +base_model = "moonshotai/kimi-k2.7-code-highspeed" +attachment = false +tool_call = false +structured_output = false +reasoning_options = [] + +[cost] +input = 1.9 +output = 8 +cache_read = 0.38 + +[modalities] +input = ["text"] diff --git a/providers/edenai/models/nebius/deepseek-ai/DeepSeek-V4-Flash-0731.toml b/providers/edenai/models/nebius/deepseek-ai/DeepSeek-V4-Flash-0731.toml index e7b6da98f38..fa8a3e7e345 100644 --- a/providers/edenai/models/nebius/deepseek-ai/DeepSeek-V4-Flash-0731.toml +++ b/providers/edenai/models/nebius/deepseek-ai/DeepSeek-V4-Flash-0731.toml @@ -1,4 +1,5 @@ base_model = "deepseek/deepseek-v4-flash-0731" +name = "DeepSeek V4 Flash 0731 (Nebius)" [[reasoning_options]] type = "effort" @@ -10,4 +11,4 @@ output = 0.28 cache_read = 0.14 [limit] -context = 1_048_576 +context = 1_024_000 diff --git a/providers/edenai/models/nebius/deepseek-ai/DeepSeek-V4-Pro-0813.toml b/providers/edenai/models/nebius/deepseek-ai/DeepSeek-V4-Pro-0813.toml new file mode 100644 index 00000000000..ff086c1598a --- /dev/null +++ b/providers/edenai/models/nebius/deepseek-ai/DeepSeek-V4-Pro-0813.toml @@ -0,0 +1,14 @@ +base_model = "deepseek/deepseek-v4-pro-0813" +name = "DeepSeek V4 Pro 0813 (Nebius)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 1.32 +output = 3.96 +cache_read = 1.32 + +[limit] +context = 979_000 diff --git a/providers/edenai/models/nebius/deepseek-ai/DeepSeek-V4.1-Flash.toml b/providers/edenai/models/nebius/deepseek-ai/DeepSeek-V4.1-Flash.toml new file mode 100644 index 00000000000..48e159fa2bc --- /dev/null +++ b/providers/edenai/models/nebius/deepseek-ai/DeepSeek-V4.1-Flash.toml @@ -0,0 +1,16 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash (Nebius)" +tool_call = false +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.3 + +[limit] +context = 1_048_000 diff --git a/providers/edenai/models/nebius/google/gemma-3-27b-it.toml b/providers/edenai/models/nebius/google/gemma-3-27b-it.toml new file mode 100644 index 00000000000..3d6e1bdc836 --- /dev/null +++ b/providers/edenai/models/nebius/google/gemma-3-27b-it.toml @@ -0,0 +1,11 @@ +base_model = "google/gemma-3-27b-it" +name = "Gemma 3 27B IT (Nebius)" +structured_output = true + +[cost] +input = 0.1 +output = 0.3 +cache_read = 0.1 + +[limit] +context = 110_000 diff --git a/providers/edenai/models/nebius/meta-llama/Llama-3.3-70B-Instruct.toml b/providers/edenai/models/nebius/meta-llama/Llama-3.3-70B-Instruct.toml deleted file mode 100644 index 0881ce87b06..00000000000 --- a/providers/edenai/models/nebius/meta-llama/Llama-3.3-70B-Instruct.toml +++ /dev/null @@ -1,11 +0,0 @@ -base_model = "meta/llama-3.3-70b-instruct" -attachment = false -structured_output = true - -[cost] -input = 0.13 -output = 0.4 -cache_read = 0.13 - -[limit] -context = 131_072 diff --git a/providers/edenai/models/nebius/nvidia/Nemotron-3-Ultra-550b-a55b.toml b/providers/edenai/models/nebius/nvidia/Nemotron-3-Ultra-550b-a55b.toml index 5ba56b54de3..f2436a7ba86 100644 --- a/providers/edenai/models/nebius/nvidia/Nemotron-3-Ultra-550b-a55b.toml +++ b/providers/edenai/models/nebius/nvidia/Nemotron-3-Ultra-550b-a55b.toml @@ -1,4 +1,5 @@ base_model = "nvidia/nemotron-3-ultra-550b-a55b" +name = "Nemotron 3 Ultra 550B A55B (Nebius)" structured_output = true [[reasoning_options]] diff --git a/providers/edenai/models/nebius/nvidia/nemotron-3-super-120b-a12b.toml b/providers/edenai/models/nebius/nvidia/nemotron-3-super-120b-a12b.toml index c3806a4c850..5405a7eeccd 100644 --- a/providers/edenai/models/nebius/nvidia/nemotron-3-super-120b-a12b.toml +++ b/providers/edenai/models/nebius/nvidia/nemotron-3-super-120b-a12b.toml @@ -1,4 +1,5 @@ base_model = "nvidia/nemotron-3-super-120b-a12b" +name = "Nemotron 3 Super 120B A12B (Nebius)" structured_output = true [[reasoning_options]] diff --git a/providers/edenai/models/nebius/openai/gpt-oss-120b.toml b/providers/edenai/models/nebius/openai/gpt-oss-120b.toml index a7f3229d340..f6045b89cc3 100644 --- a/providers/edenai/models/nebius/openai/gpt-oss-120b.toml +++ b/providers/edenai/models/nebius/openai/gpt-oss-120b.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-oss-120b" +name = "GPT OSS 120B (Nebius)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/openai/gpt-5.4-pro.toml b/providers/edenai/models/openai/gpt-5.4-pro.toml index 18caf358b3c..5213b8ffc52 100644 --- a/providers/edenai/models/openai/gpt-5.4-pro.toml +++ b/providers/edenai/models/openai/gpt-5.4-pro.toml @@ -8,13 +8,11 @@ values = ["medium", "high", "xhigh"] [cost] input = 30 output = 180 -cache_read = 3 [[cost.tiers]] tier = { type = "context", size = 272_000 } input = 60 output = 270 -cache_read = 6 [modalities] input = ["text", "image", "pdf"] diff --git a/providers/edenai/models/openai/gpt-5.5-pro.toml b/providers/edenai/models/openai/gpt-5.5-pro.toml index eca4c05cfd4..664304915ee 100644 --- a/providers/edenai/models/openai/gpt-5.5-pro.toml +++ b/providers/edenai/models/openai/gpt-5.5-pro.toml @@ -7,10 +7,8 @@ values = ["medium", "high", "xhigh"] [cost] input = 30 output = 180 -cache_read = 3 [[cost.tiers]] tier = { type = "context", size = 272_000 } input = 60 output = 270 -cache_read = 6 diff --git a/providers/edenai/models/openai/gpt-6-astra.toml b/providers/edenai/models/openai/gpt-6-astra.toml new file mode 100644 index 00000000000..d3cae944f01 --- /dev/null +++ b/providers/edenai/models/openai/gpt-6-astra.toml @@ -0,0 +1,18 @@ +base_model = "openai/gpt-6-astra" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 20 +output = 75 +cache_read = 2 +cache_write = 25 diff --git a/providers/edenai/models/openai/gpt-6-luna.toml b/providers/edenai/models/openai/gpt-6-luna.toml new file mode 100644 index 00000000000..9a9537cbf02 --- /dev/null +++ b/providers/edenai/models/openai/gpt-6-luna.toml @@ -0,0 +1,18 @@ +base_model = "openai/gpt-6-luna" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.1 +output = 0.5 +cache_read = 0.01 +cache_write = 0.125 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 0.2 +output = 0.75 +cache_read = 0.02 +cache_write = 0.25 diff --git a/providers/edenai/models/openai/gpt-6-sol.toml b/providers/edenai/models/openai/gpt-6-sol.toml new file mode 100644 index 00000000000..94f694d64de --- /dev/null +++ b/providers/edenai/models/openai/gpt-6-sol.toml @@ -0,0 +1,18 @@ +base_model = "openai/gpt-6-sol" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 4 +output = 15 +cache_read = 0.4 +cache_write = 5 diff --git a/providers/edenai/models/openai/gpt-latest.toml b/providers/edenai/models/openai/gpt-latest.toml index c32a0af9b15..70646ca0a1e 100644 --- a/providers/edenai/models/openai/gpt-latest.toml +++ b/providers/edenai/models/openai/gpt-latest.toml @@ -1,18 +1,19 @@ -base_model = "openai/gpt-5.6-sol" +base_model = "openai/gpt-6-astra" +name = "GPT Latest (GPT-6 Astra)" [[reasoning_options]] type = "effort" -values = ["none", "low", "medium", "high", "xhigh", "max"] +values = ["low", "medium", "high", "xhigh", "max"] [cost] -input = 4 -output = 20 -cache_read = 0.4 -cache_write = 5 +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 [[cost.tiers]] tier = { type = "context", size = 272_000 } -input = 8 -output = 30 -cache_read = 0.8 -cache_write = 10 +input = 20 +output = 75 +cache_read = 2 +cache_write = 25 diff --git a/providers/edenai/models/openai/gpt-mini-latest.toml b/providers/edenai/models/openai/gpt-mini-latest.toml index b71b67ad193..b53e46a9e2d 100644 --- a/providers/edenai/models/openai/gpt-mini-latest.toml +++ b/providers/edenai/models/openai/gpt-mini-latest.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-5.4-mini" +name = "GPT Mini Latest (GPT-5.4 mini)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/openai/gpt-pro-latest.toml b/providers/edenai/models/openai/gpt-pro-latest.toml index eca4c05cfd4..b52aca44d42 100644 --- a/providers/edenai/models/openai/gpt-pro-latest.toml +++ b/providers/edenai/models/openai/gpt-pro-latest.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-5.5-pro" +name = "GPT Pro Latest (GPT-5.5 Pro)" [[reasoning_options]] type = "effort" @@ -7,10 +8,8 @@ values = ["medium", "high", "xhigh"] [cost] input = 30 output = 180 -cache_read = 3 [[cost.tiers]] tier = { type = "context", size = 272_000 } input = 60 output = 270 -cache_read = 6 diff --git a/providers/edenai/models/ovhcloud/gpt-oss-120b.toml b/providers/edenai/models/ovhcloud/gpt-oss-120b.toml index c8f65159859..008c82e0cbf 100644 --- a/providers/edenai/models/ovhcloud/gpt-oss-120b.toml +++ b/providers/edenai/models/ovhcloud/gpt-oss-120b.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-oss-120b" +name = "GPT OSS 120B (OVHcloud)" tool_call = false [[reasoning_options]] diff --git a/providers/edenai/models/ovhcloud/gpt-oss-20b.toml b/providers/edenai/models/ovhcloud/gpt-oss-20b.toml index 616a18348e8..102125304ad 100644 --- a/providers/edenai/models/ovhcloud/gpt-oss-20b.toml +++ b/providers/edenai/models/ovhcloud/gpt-oss-20b.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-oss-20b" +name = "GPT OSS 20B (OVHcloud)" tool_call = false [[reasoning_options]] diff --git a/providers/edenai/models/qwen/deepseek-v4-flash-0731.toml b/providers/edenai/models/qwen/deepseek-v4-flash-0731.toml index 1f11f70d4ba..8bebf930c58 100644 --- a/providers/edenai/models/qwen/deepseek-v4-flash-0731.toml +++ b/providers/edenai/models/qwen/deepseek-v4-flash-0731.toml @@ -1,9 +1,11 @@ base_model = "deepseek/deepseek-v4-flash-0731" +name = "DeepSeek V4 Flash 0731 (Alibaba)" [[reasoning_options]] type = "effort" values = ["none", "low", "high", "max"] [cost] -input = 0.176 -output = 0.528 +input = 0.22 +output = 0.66 +cache_read = 0.022 diff --git a/providers/edenai/models/qwen/deepseek-v4-pro-0813.toml b/providers/edenai/models/qwen/deepseek-v4-pro-0813.toml index 7e31b605e19..f8e6a947c22 100644 --- a/providers/edenai/models/qwen/deepseek-v4-pro-0813.toml +++ b/providers/edenai/models/qwen/deepseek-v4-pro-0813.toml @@ -1,9 +1,11 @@ base_model = "deepseek/deepseek-v4-pro-0813" +name = "DeepSeek V4 Pro 0813 (Alibaba)" [[reasoning_options]] type = "effort" values = ["none", "low", "high", "max"] [cost] -input = 0.5808 -output = 1.7424 +input = 0.66 +output = 1.98 +cache_read = 0.066 diff --git a/providers/edenai/models/qwen/deepseek-v4.1-flash.toml b/providers/edenai/models/qwen/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..f6b4321f953 --- /dev/null +++ b/providers/edenai/models/qwen/deepseek-v4.1-flash.toml @@ -0,0 +1,11 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash (Alibaba)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 0.15 +output = 0.6 +cache_read = 0.015 diff --git a/providers/edenai/models/qwen/qwen3.8-flash.toml b/providers/edenai/models/qwen/qwen3.8-flash.toml new file mode 100644 index 00000000000..3432e836e33 --- /dev/null +++ b/providers/edenai/models/qwen/qwen3.8-flash.toml @@ -0,0 +1,11 @@ +base_model = "alibaba/qwen3.8-flash" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "xhigh"] + +[cost] +input = 0.15 +output = 0.47 +cache_read = 0.016 +cache_write = 0.2 diff --git a/providers/edenai/models/qwen/qwen3.8-max-0902.toml b/providers/edenai/models/qwen/qwen3.8-max-0902.toml new file mode 100644 index 00000000000..4ecec330d98 --- /dev/null +++ b/providers/edenai/models/qwen/qwen3.8-max-0902.toml @@ -0,0 +1,15 @@ +base_model = "alibaba/qwen3.8-max-0902" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 2 +output = 6 +cache_read = 0.25 +cache_write = 2.5 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/edenai/models/scaleway/deepseek-v4-flash-0731.toml b/providers/edenai/models/scaleway/deepseek-v4-flash-0731.toml index 027c0f64156..d9d452ba506 100644 --- a/providers/edenai/models/scaleway/deepseek-v4-flash-0731.toml +++ b/providers/edenai/models/scaleway/deepseek-v4-flash-0731.toml @@ -1,5 +1,5 @@ base_model = "deepseek/deepseek-v4-flash-0731" -tool_call = false +name = "DeepSeek V4 Flash 0731 (Scaleway)" structured_output = false [[reasoning_options]] @@ -7,8 +7,9 @@ type = "effort" values = ["none", "low", "high", "max"] [cost] -input = 0.46676 -output = 0.933521 +input = 0.45644 +output = 0.91288 +cache_read = 0.091288 [limit] context = 256_000 diff --git a/providers/edenai/models/scaleway/gemma-3-27b-it.toml b/providers/edenai/models/scaleway/gemma-3-27b-it.toml new file mode 100644 index 00000000000..48792411115 --- /dev/null +++ b/providers/edenai/models/scaleway/gemma-3-27b-it.toml @@ -0,0 +1,11 @@ +base_model = "google/gemma-3-27b-it" +name = "Gemma 3 27B IT (Scaleway)" +tool_call = false +structured_output = false + +[cost] +input = 0.287125 +output = 0.57425 + +[limit] +context = 40_000 diff --git a/providers/edenai/models/scaleway/gpt-oss-120b.toml b/providers/edenai/models/scaleway/gpt-oss-120b.toml index 21734031ada..ffa042bc61e 100644 --- a/providers/edenai/models/scaleway/gpt-oss-120b.toml +++ b/providers/edenai/models/scaleway/gpt-oss-120b.toml @@ -1,5 +1,5 @@ base_model = "openai/gpt-oss-120b" -tool_call = false +name = "GPT OSS 120B (Scaleway)" structured_output = false [[reasoning_options]] @@ -7,8 +7,8 @@ type = "effort" values = ["low", "medium", "high"] [cost] -input = 0.175035 -output = 0.70014 +input = 0.171165 +output = 0.68466 [limit] context = 128_000 diff --git a/providers/edenai/models/scaleway/llama-3.3-70b-instruct.toml b/providers/edenai/models/scaleway/llama-3.3-70b-instruct.toml index 008423b04d1..be3eaa9445a 100644 --- a/providers/edenai/models/scaleway/llama-3.3-70b-instruct.toml +++ b/providers/edenai/models/scaleway/llama-3.3-70b-instruct.toml @@ -1,8 +1,7 @@ base_model = "meta/llama-3.3-70b-instruct" -attachment = false -tool_call = false +name = "Llama-3.3-70B-Instruct (Scaleway)" structured_output = false [cost] -input = 1.050211 -output = 1.050211 +input = 1.02699 +output = 1.02699 diff --git a/providers/edenai/models/tensorx/deepseek/deepseek-v4-flash-0731.toml b/providers/edenai/models/tensorx/deepseek/deepseek-v4-flash-0731.toml index 8e0dd3fbcbf..b08e9335e76 100644 --- a/providers/edenai/models/tensorx/deepseek/deepseek-v4-flash-0731.toml +++ b/providers/edenai/models/tensorx/deepseek/deepseek-v4-flash-0731.toml @@ -1,4 +1,5 @@ base_model = "deepseek/deepseek-v4-flash-0731" +name = "DeepSeek V4 Flash 0731 (TensorX)" structured_output = false [[reasoning_options]] diff --git a/providers/edenai/models/tensorx/deepseek/deepseek-v4-pro-0813.toml b/providers/edenai/models/tensorx/deepseek/deepseek-v4-pro-0813.toml new file mode 100644 index 00000000000..7676b089585 --- /dev/null +++ b/providers/edenai/models/tensorx/deepseek/deepseek-v4-pro-0813.toml @@ -0,0 +1,15 @@ +base_model = "deepseek/deepseek-v4-pro-0813" +name = "DeepSeek V4 Pro 0813 (TensorX)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 2 +output = 4 +cache_read = 0.5 + +[limit] +context = 1_048_576 diff --git a/providers/edenai/models/tensorx/deepseek/deepseek-v4.1-flash.toml b/providers/edenai/models/tensorx/deepseek/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..add18f0e36c --- /dev/null +++ b/providers/edenai/models/tensorx/deepseek/deepseek-v4.1-flash.toml @@ -0,0 +1,15 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash (TensorX)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 0.5 +output = 1.5 +cache_read = 0.125 + +[limit] +context = 1_048_576 diff --git a/providers/edenai/models/tensorx/moonshotai/kimi-k2.5.toml b/providers/edenai/models/tensorx/moonshotai/kimi-k2.5.toml index ea149e3c5f0..fc327494824 100644 --- a/providers/edenai/models/tensorx/moonshotai/kimi-k2.5.toml +++ b/providers/edenai/models/tensorx/moonshotai/kimi-k2.5.toml @@ -1,5 +1,5 @@ base_model = "moonshotai/kimi-k2.5" -structured_output = false +name = "Kimi K2.5 (TensorX)" reasoning_options = [] [cost] diff --git a/providers/edenai/models/together_ai/deepseek-ai/DeepSeek-V4-Flash-0731.toml b/providers/edenai/models/together_ai/deepseek-ai/DeepSeek-V4-Flash-0731.toml index 76a721abc1d..7059ffb8bf9 100644 --- a/providers/edenai/models/together_ai/deepseek-ai/DeepSeek-V4-Flash-0731.toml +++ b/providers/edenai/models/together_ai/deepseek-ai/DeepSeek-V4-Flash-0731.toml @@ -1,4 +1,5 @@ base_model = "deepseek/deepseek-v4-flash-0731" +name = "DeepSeek V4 Flash 0731 (Together AI)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/together_ai/deepseek-ai/DeepSeek-V4-Pro-0813.toml b/providers/edenai/models/together_ai/deepseek-ai/DeepSeek-V4-Pro-0813.toml index 7ea403f9d79..a859c5f3781 100644 --- a/providers/edenai/models/together_ai/deepseek-ai/DeepSeek-V4-Pro-0813.toml +++ b/providers/edenai/models/together_ai/deepseek-ai/DeepSeek-V4-Pro-0813.toml @@ -1,4 +1,5 @@ base_model = "deepseek/deepseek-v4-pro-0813" +name = "DeepSeek V4 Pro 0813 (Together AI)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/together_ai/deepseek-ai/DeepSeek-V4.1-Flash.toml b/providers/edenai/models/together_ai/deepseek-ai/DeepSeek-V4.1-Flash.toml new file mode 100644 index 00000000000..6de196ab790 --- /dev/null +++ b/providers/edenai/models/together_ai/deepseek-ai/DeepSeek-V4.1-Flash.toml @@ -0,0 +1,14 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash (Together AI)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.006 + +[limit] +context = 1_048_576 diff --git a/providers/edenai/models/together_ai/meta-models/Muse-Glimmer-30B.toml b/providers/edenai/models/together_ai/meta-models/Muse-Glimmer-30B.toml index 2812d8df497..24eaec5a33d 100644 --- a/providers/edenai/models/together_ai/meta-models/Muse-Glimmer-30B.toml +++ b/providers/edenai/models/together_ai/meta-models/Muse-Glimmer-30B.toml @@ -1,4 +1,5 @@ base_model = "meta/muse-glimmer-30b" +name = "Muse Glimmer 30B (Together AI)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/together_ai/nvidia/nemotron-3-ultra-550b-a55b.toml b/providers/edenai/models/together_ai/nvidia/nemotron-3-ultra-550b-a55b.toml deleted file mode 100644 index e4eec863471..00000000000 --- a/providers/edenai/models/together_ai/nvidia/nemotron-3-ultra-550b-a55b.toml +++ /dev/null @@ -1,14 +0,0 @@ -base_model = "nvidia/nemotron-3-ultra-550b-a55b" -structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["none", "medium", "high"] - -[cost] -input = 0.6 -output = 3.6 -cache_read = 0.2 - -[limit] -context = 512_288 diff --git a/providers/edenai/models/together_ai/openai/gpt-oss-120b.toml b/providers/edenai/models/together_ai/openai/gpt-oss-120b.toml index ee19598d69f..4c7b1c1c1da 100644 --- a/providers/edenai/models/together_ai/openai/gpt-oss-120b.toml +++ b/providers/edenai/models/together_ai/openai/gpt-oss-120b.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-oss-120b" +name = "GPT OSS 120B (Together AI)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/together_ai/openai/gpt-oss-20b.toml b/providers/edenai/models/together_ai/openai/gpt-oss-20b.toml deleted file mode 100644 index 75f0276365b..00000000000 --- a/providers/edenai/models/together_ai/openai/gpt-oss-20b.toml +++ /dev/null @@ -1,9 +0,0 @@ -base_model = "openai/gpt-oss-20b" - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] - -[cost] -input = 0.05 -output = 0.2 diff --git a/providers/edenai/models/together_ai/thinkingmachines/Inkling-Small.toml b/providers/edenai/models/together_ai/thinkingmachines/Inkling-Small.toml deleted file mode 100644 index 97f9be04094..00000000000 --- a/providers/edenai/models/together_ai/thinkingmachines/Inkling-Small.toml +++ /dev/null @@ -1,14 +0,0 @@ -base_model = "thinkingmachines/inkling-small" -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["none", "minimal", "low", "medium", "high", "max"] - -[cost] -input = 0.5 -output = 1.2 -cache_read = 0.1 - -[limit] -context = 524_288 diff --git a/providers/edenai/models/together_ai/thinkingmachines/Inkling.toml b/providers/edenai/models/together_ai/thinkingmachines/Inkling.toml index 4d654c74315..66bfe97992d 100644 --- a/providers/edenai/models/together_ai/thinkingmachines/Inkling.toml +++ b/providers/edenai/models/together_ai/thinkingmachines/Inkling.toml @@ -1,4 +1,5 @@ base_model = "thinkingmachines/inkling" +name = "Inkling (Together AI)" structured_output = true [[reasoning_options]] diff --git a/providers/edenai/models/vertex/gemini-2.5-flash-image.toml b/providers/edenai/models/vertex/gemini-2.5-flash-image.toml index 02d2fae70e5..9494e8da758 100644 --- a/providers/edenai/models/vertex/gemini-2.5-flash-image.toml +++ b/providers/edenai/models/vertex/gemini-2.5-flash-image.toml @@ -1,4 +1,5 @@ base_model = "google/gemini-2.5-flash-image" +name = "Nano Banana (Vertex AI)" structured_output = true reasoning_options = [] diff --git a/providers/edenai/models/vertex/gemini-3-flash-preview.toml b/providers/edenai/models/vertex/gemini-3-flash-preview.toml index 9acd0dde8dc..1ff397be940 100644 --- a/providers/edenai/models/vertex/gemini-3-flash-preview.toml +++ b/providers/edenai/models/vertex/gemini-3-flash-preview.toml @@ -1,4 +1,5 @@ base_model = "google/gemini-3-flash-preview" +name = "Gemini 3 Flash Preview (Vertex AI)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/vertex/gemini-3-pro-image.toml b/providers/edenai/models/vertex/gemini-3-pro-image.toml index dbeda02bac7..80b8191940a 100644 --- a/providers/edenai/models/vertex/gemini-3-pro-image.toml +++ b/providers/edenai/models/vertex/gemini-3-pro-image.toml @@ -1,4 +1,5 @@ base_model = "google/gemini-3-pro-image" +name = "Nano Banana Pro (Vertex AI)" structured_output = true [[reasoning_options]] diff --git a/providers/edenai/models/vertex/gemini-3.1-flash-image.toml b/providers/edenai/models/vertex/gemini-3.1-flash-image.toml index 124aed86d30..008f70de785 100644 --- a/providers/edenai/models/vertex/gemini-3.1-flash-image.toml +++ b/providers/edenai/models/vertex/gemini-3.1-flash-image.toml @@ -1,4 +1,5 @@ base_model = "google/gemini-3.1-flash-image" +name = "Nano Banana 2 (Vertex AI)" structured_output = true [[reasoning_options]] diff --git a/providers/edenai/models/vertex/gemini-3.1-flash-lite-image.toml b/providers/edenai/models/vertex/gemini-3.1-flash-lite-image.toml index 9a410b9bf77..5fa34cea0b7 100644 --- a/providers/edenai/models/vertex/gemini-3.1-flash-lite-image.toml +++ b/providers/edenai/models/vertex/gemini-3.1-flash-lite-image.toml @@ -1,4 +1,5 @@ base_model = "google/gemini-3.1-flash-lite-image" +name = "Nano Banana 2 Lite (Vertex AI)" tool_call = false structured_output = true diff --git a/providers/edenai/models/vertex/gemini-3.1-flash-lite.toml b/providers/edenai/models/vertex/gemini-3.1-flash-lite.toml new file mode 100644 index 00000000000..72cced92785 --- /dev/null +++ b/providers/edenai/models/vertex/gemini-3.1-flash-lite.toml @@ -0,0 +1,14 @@ +base_model = "google/gemini-3.1-flash-lite" +name = "Gemini 3.1 Flash Lite (Vertex AI)" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high"] + +[cost] +input = 0.25 +output = 1.5 +reasoning = 1.5 +cache_read = 0.025 +cache_write = 0.083333 +input_audio = 0.5 diff --git a/providers/edenai/models/vertex/gemini-3.1-flash-lite@eu.toml b/providers/edenai/models/vertex/gemini-3.1-flash-lite@eu.toml new file mode 100644 index 00000000000..83586e62f83 --- /dev/null +++ b/providers/edenai/models/vertex/gemini-3.1-flash-lite@eu.toml @@ -0,0 +1,14 @@ +base_model = "google/gemini-3.1-flash-lite" +name = "Gemini 3.1 Flash Lite (Vertex AI, EU)" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high"] + +[cost] +input = 0.25 +output = 1.5 +reasoning = 1.5 +cache_read = 0.025 +cache_write = 0.083333 +input_audio = 0.5 diff --git a/providers/edenai/models/vertex/gemini-3.1-flash-lite@us.toml b/providers/edenai/models/vertex/gemini-3.1-flash-lite@us.toml new file mode 100644 index 00000000000..43b451572a6 --- /dev/null +++ b/providers/edenai/models/vertex/gemini-3.1-flash-lite@us.toml @@ -0,0 +1,14 @@ +base_model = "google/gemini-3.1-flash-lite" +name = "Gemini 3.1 Flash Lite (Vertex AI, US)" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high"] + +[cost] +input = 0.25 +output = 1.5 +reasoning = 1.5 +cache_read = 0.025 +cache_write = 0.083333 +input_audio = 0.5 diff --git a/providers/edenai/models/vertex/gemini-3.1-pro-preview.toml b/providers/edenai/models/vertex/gemini-3.1-pro-preview.toml index 8daae0c833e..b2a7736dd52 100644 --- a/providers/edenai/models/vertex/gemini-3.1-pro-preview.toml +++ b/providers/edenai/models/vertex/gemini-3.1-pro-preview.toml @@ -1,4 +1,5 @@ base_model = "google/gemini-3.1-pro-preview" +name = "Gemini 3.1 Pro Preview (Vertex AI)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/vertex/gemini-3.5-flash-lite.toml b/providers/edenai/models/vertex/gemini-3.5-flash-lite.toml index 6b453fde7ea..bdf99faf08a 100644 --- a/providers/edenai/models/vertex/gemini-3.5-flash-lite.toml +++ b/providers/edenai/models/vertex/gemini-3.5-flash-lite.toml @@ -1,4 +1,5 @@ base_model = "google/gemini-3.5-flash-lite" +name = "Gemini 3.5 Flash Lite (Vertex AI)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/vertex/gemini-3.5-flash-lite@eu.toml b/providers/edenai/models/vertex/gemini-3.5-flash-lite@eu.toml index b20e5f62901..903fd416455 100644 --- a/providers/edenai/models/vertex/gemini-3.5-flash-lite@eu.toml +++ b/providers/edenai/models/vertex/gemini-3.5-flash-lite@eu.toml @@ -1,5 +1,5 @@ base_model = "google/gemini-3.5-flash-lite" -name = "Gemini 3.5 Flash Lite (EU)" +name = "Gemini 3.5 Flash Lite (Vertex AI, EU)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/vertex/gemini-3.5-flash-lite@us.toml b/providers/edenai/models/vertex/gemini-3.5-flash-lite@us.toml index 2208a8ca3e0..06e99f9ab6a 100644 --- a/providers/edenai/models/vertex/gemini-3.5-flash-lite@us.toml +++ b/providers/edenai/models/vertex/gemini-3.5-flash-lite@us.toml @@ -1,5 +1,5 @@ base_model = "google/gemini-3.5-flash-lite" -name = "Gemini 3.5 Flash Lite (US)" +name = "Gemini 3.5 Flash Lite (Vertex AI, US)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/vertex/gemini-3.5-flash.toml b/providers/edenai/models/vertex/gemini-3.5-flash.toml index 1d261426563..95432f795b9 100644 --- a/providers/edenai/models/vertex/gemini-3.5-flash.toml +++ b/providers/edenai/models/vertex/gemini-3.5-flash.toml @@ -1,4 +1,5 @@ base_model = "google/gemini-3.5-flash" +name = "Gemini 3.5 Flash (Vertex AI)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/vertex/gemini-3.5-flash@eu.toml b/providers/edenai/models/vertex/gemini-3.5-flash@eu.toml index c2c6ac845d5..10645d51a40 100644 --- a/providers/edenai/models/vertex/gemini-3.5-flash@eu.toml +++ b/providers/edenai/models/vertex/gemini-3.5-flash@eu.toml @@ -1,5 +1,5 @@ base_model = "google/gemini-3.5-flash" -name = "Gemini 3.5 Flash (EU)" +name = "Gemini 3.5 Flash (Vertex AI, EU)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/vertex/gemini-3.5-flash@us.toml b/providers/edenai/models/vertex/gemini-3.5-flash@us.toml index 0a18a5eab71..13f2dad5653 100644 --- a/providers/edenai/models/vertex/gemini-3.5-flash@us.toml +++ b/providers/edenai/models/vertex/gemini-3.5-flash@us.toml @@ -1,5 +1,5 @@ base_model = "google/gemini-3.5-flash" -name = "Gemini 3.5 Flash (US)" +name = "Gemini 3.5 Flash (Vertex AI, US)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/vertex/gemini-3.6-flash.toml b/providers/edenai/models/vertex/gemini-3.6-flash.toml index 230c56de2e5..c4c1b8a1eb7 100644 --- a/providers/edenai/models/vertex/gemini-3.6-flash.toml +++ b/providers/edenai/models/vertex/gemini-3.6-flash.toml @@ -1,4 +1,5 @@ base_model = "google/gemini-3.6-flash" +name = "Gemini 3.6 Flash (Vertex AI)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/vertex/gemini-3.6-flash@eu.toml b/providers/edenai/models/vertex/gemini-3.6-flash@eu.toml index a91902ab537..affe7bd94f3 100644 --- a/providers/edenai/models/vertex/gemini-3.6-flash@eu.toml +++ b/providers/edenai/models/vertex/gemini-3.6-flash@eu.toml @@ -1,5 +1,5 @@ base_model = "google/gemini-3.6-flash" -name = "Gemini 3.6 Flash (EU)" +name = "Gemini 3.6 Flash (Vertex AI, EU)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/vertex/gemini-3.6-flash@us.toml b/providers/edenai/models/vertex/gemini-3.6-flash@us.toml index 315ad0ad0b0..7db2190999f 100644 --- a/providers/edenai/models/vertex/gemini-3.6-flash@us.toml +++ b/providers/edenai/models/vertex/gemini-3.6-flash@us.toml @@ -1,5 +1,5 @@ base_model = "google/gemini-3.6-flash" -name = "Gemini 3.6 Flash (US)" +name = "Gemini 3.6 Flash (Vertex AI, US)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/vertex/gemini-3.7-flash.toml b/providers/edenai/models/vertex/gemini-3.7-flash.toml index 501847ffb65..cec321b9ba5 100644 --- a/providers/edenai/models/vertex/gemini-3.7-flash.toml +++ b/providers/edenai/models/vertex/gemini-3.7-flash.toml @@ -1,13 +1,14 @@ base_model = "google/gemini-3.7-flash" +name = "Gemini 3.7 Flash (Vertex AI)" [[reasoning_options]] type = "effort" values = ["low", "medium", "high"] [cost] -input = 1.5 -output = 7.5 -reasoning = 7.5 -cache_read = 0.15 -cache_write = 0.083333 -input_audio = 1.5 +input = 0.75 +output = 3.75 +reasoning = 3.75 +cache_read = 0.075 +cache_write = 0.041667 +input_audio = 0.75 diff --git a/providers/edenai/models/vertex/gemini-3.7-flash@eu.toml b/providers/edenai/models/vertex/gemini-3.7-flash@eu.toml index b9a37e88446..41edb99ded2 100644 --- a/providers/edenai/models/vertex/gemini-3.7-flash@eu.toml +++ b/providers/edenai/models/vertex/gemini-3.7-flash@eu.toml @@ -1,14 +1,14 @@ base_model = "google/gemini-3.7-flash" -name = "Gemini 3.7 Flash (EU)" +name = "Gemini 3.7 Flash (Vertex AI, EU)" [[reasoning_options]] type = "effort" values = ["low", "medium", "high"] [cost] -input = 1.5 -output = 7.5 -reasoning = 7.5 -cache_read = 0.15 -cache_write = 0.083333 -input_audio = 1.5 +input = 0.75 +output = 3.75 +reasoning = 3.75 +cache_read = 0.075 +cache_write = 0.041667 +input_audio = 0.75 diff --git a/providers/edenai/models/vertex/gemini-3.7-flash@us.toml b/providers/edenai/models/vertex/gemini-3.7-flash@us.toml index a9baa56c393..5cfc072389a 100644 --- a/providers/edenai/models/vertex/gemini-3.7-flash@us.toml +++ b/providers/edenai/models/vertex/gemini-3.7-flash@us.toml @@ -1,14 +1,14 @@ base_model = "google/gemini-3.7-flash" -name = "Gemini 3.7 Flash (US)" +name = "Gemini 3.7 Flash (Vertex AI, US)" [[reasoning_options]] type = "effort" values = ["low", "medium", "high"] [cost] -input = 1.5 -output = 7.5 -reasoning = 7.5 -cache_read = 0.15 -cache_write = 0.083333 -input_audio = 1.5 +input = 0.75 +output = 3.75 +reasoning = 3.75 +cache_read = 0.075 +cache_write = 0.041667 +input_audio = 0.75 diff --git a/providers/edenai/models/vertex/gemini-3.8-flash.toml b/providers/edenai/models/vertex/gemini-3.8-flash.toml new file mode 100644 index 00000000000..678f54bb0aa --- /dev/null +++ b/providers/edenai/models/vertex/gemini-3.8-flash.toml @@ -0,0 +1,14 @@ +base_model = "google/gemini-3.8-flash" +name = "Gemini 3.8 Flash (Vertex AI)" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.75 +output = 3.75 +reasoning = 3.75 +cache_read = 0.075 +cache_write = 0.041667 +input_audio = 0.75 diff --git a/providers/edenai/models/vertex/gemini-3.8-flash@eu.toml b/providers/edenai/models/vertex/gemini-3.8-flash@eu.toml new file mode 100644 index 00000000000..9426cf35d75 --- /dev/null +++ b/providers/edenai/models/vertex/gemini-3.8-flash@eu.toml @@ -0,0 +1,14 @@ +base_model = "google/gemini-3.8-flash" +name = "Gemini 3.8 Flash (Vertex AI, EU)" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.75 +output = 3.75 +reasoning = 3.75 +cache_read = 0.075 +cache_write = 0.041667 +input_audio = 0.75 diff --git a/providers/edenai/models/vertex/gemini-3.8-flash@us.toml b/providers/edenai/models/vertex/gemini-3.8-flash@us.toml new file mode 100644 index 00000000000..1971cc01e88 --- /dev/null +++ b/providers/edenai/models/vertex/gemini-3.8-flash@us.toml @@ -0,0 +1,14 @@ +base_model = "google/gemini-3.8-flash" +name = "Gemini 3.8 Flash (Vertex AI, US)" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.75 +output = 3.75 +reasoning = 3.75 +cache_read = 0.075 +cache_write = 0.041667 +input_audio = 0.75 diff --git a/providers/edenai/models/vertex/gemini-flash-latest.toml b/providers/edenai/models/vertex/gemini-flash-latest.toml index 501847ffb65..3df1c883ad6 100644 --- a/providers/edenai/models/vertex/gemini-flash-latest.toml +++ b/providers/edenai/models/vertex/gemini-flash-latest.toml @@ -1,13 +1,14 @@ -base_model = "google/gemini-3.7-flash" +base_model = "google/gemini-3.8-flash" +name = "Gemini Flash Latest (Gemini 3.8 Flash, Vertex AI)" [[reasoning_options]] type = "effort" values = ["low", "medium", "high"] [cost] -input = 1.5 -output = 7.5 -reasoning = 7.5 -cache_read = 0.15 -cache_write = 0.083333 -input_audio = 1.5 +input = 0.75 +output = 3.75 +reasoning = 3.75 +cache_read = 0.075 +cache_write = 0.041667 +input_audio = 0.75 diff --git a/providers/edenai/models/vertex/gemini-pro-latest.toml b/providers/edenai/models/vertex/gemini-pro-latest.toml index 8daae0c833e..f0c0fcb8cbf 100644 --- a/providers/edenai/models/vertex/gemini-pro-latest.toml +++ b/providers/edenai/models/vertex/gemini-pro-latest.toml @@ -1,4 +1,5 @@ base_model = "google/gemini-3.1-pro-preview" +name = "Gemini Pro Latest (Gemini 3.1 Pro Preview, Vertex AI)" [[reasoning_options]] type = "effort" diff --git a/providers/edenai/models/xai/grok-4.7.toml b/providers/edenai/models/xai/grok-4.7.toml new file mode 100644 index 00000000000..65cbf72670b --- /dev/null +++ b/providers/edenai/models/xai/grok-4.7.toml @@ -0,0 +1,16 @@ +base_model = "xai/grok-4.7" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh"] + +[cost] +input = 2 +output = 6 +cache_read = 0.5 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 3.2 +output = 9.6 +cache_read = 0.8 diff --git a/providers/edenai/models/xai/grok-latest.toml b/providers/edenai/models/xai/grok-latest.toml index cbcf623d7cd..eece4afa8de 100644 --- a/providers/edenai/models/xai/grok-latest.toml +++ b/providers/edenai/models/xai/grok-latest.toml @@ -1,4 +1,5 @@ base_model = "xai/grok-4.6" +name = "Grok Latest (Grok 4.6)" [[reasoning_options]] type = "effort" diff --git a/providers/empiriolabs/models/deepseek-v3-2.toml b/providers/empiriolabs/models/deepseek-v3-2.toml index 39659c40e1e..02394655514 100644 --- a/providers/empiriolabs/models/deepseek-v3-2.toml +++ b/providers/empiriolabs/models/deepseek-v3-2.toml @@ -1,8 +1,5 @@ base_model = "deepseek/deepseek-v3.2" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/deepseek-v4-1-flash.toml b/providers/empiriolabs/models/deepseek-v4-1-flash.toml new file mode 100644 index 00000000000..ca0af8dd884 --- /dev/null +++ b/providers/empiriolabs/models/deepseek-v4-1-flash.toml @@ -0,0 +1,18 @@ +base_model = "deepseek/deepseek-v4.1-flash" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" +min = 1 +max = 393_216 + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.3 + +[limit] +output = 393_216 diff --git a/providers/empiriolabs/models/deepseek-v4-flash-0731.toml b/providers/empiriolabs/models/deepseek-v4-flash-0731.toml index a1ea834cde8..f5aabea1560 100644 --- a/providers/empiriolabs/models/deepseek-v4-flash-0731.toml +++ b/providers/empiriolabs/models/deepseek-v4-flash-0731.toml @@ -1,8 +1,5 @@ base_model = "deepseek/deepseek-v4-flash-0731" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/deepseek-v4-flash.toml b/providers/empiriolabs/models/deepseek-v4-flash.toml index 7bc75ba4c5c..16373cc6247 100644 --- a/providers/empiriolabs/models/deepseek-v4-flash.toml +++ b/providers/empiriolabs/models/deepseek-v4-flash.toml @@ -1,9 +1,6 @@ base_model = "deepseek/deepseek-v4-flash" last_updated = "2026-06-12" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/deepseek-v4-pro-0813.toml b/providers/empiriolabs/models/deepseek-v4-pro-0813.toml index 5872f8a2f05..5c90d606912 100644 --- a/providers/empiriolabs/models/deepseek-v4-pro-0813.toml +++ b/providers/empiriolabs/models/deepseek-v4-pro-0813.toml @@ -1,8 +1,5 @@ base_model = "deepseek/deepseek-v4-pro-0813" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/deepseek-v4-pro.toml b/providers/empiriolabs/models/deepseek-v4-pro.toml index 2c83c4cb98e..79372250253 100644 --- a/providers/empiriolabs/models/deepseek-v4-pro.toml +++ b/providers/empiriolabs/models/deepseek-v4-pro.toml @@ -1,9 +1,6 @@ base_model = "deepseek/deepseek-v4-pro" last_updated = "2026-06-12" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/fugu-ultra-v2-0.toml b/providers/empiriolabs/models/fugu-ultra-v2-0.toml new file mode 100644 index 00000000000..e4461632bc0 --- /dev/null +++ b/providers/empiriolabs/models/fugu-ultra-v2-0.toml @@ -0,0 +1,20 @@ +base_model = "sakana/fugu-ultra" +name = "Fugu Ultra v2.0" + +[[reasoning_options]] +type = "effort" +values = ["high", "xhigh", "max"] + +[cost] +input = 5 +output = 30 +cache_read = 0.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 10 +output = 45 +cache_read = 1 + +[limit] +output = 131_072 diff --git a/providers/empiriolabs/models/gemma-3-27b.toml b/providers/empiriolabs/models/gemma-3-27b.toml new file mode 100644 index 00000000000..caeb9f37cb3 --- /dev/null +++ b/providers/empiriolabs/models/gemma-3-27b.toml @@ -0,0 +1,12 @@ +base_model = "google/gemma-3-27b-it" +name = "Gemma 3 27B" +tool_call = false +structured_output = true + +[cost] +input = 0 +output = 0 + +[limit] +context = 128_000 +output = 8_192 diff --git a/providers/empiriolabs/models/gemma-4-26b-a4b.toml b/providers/empiriolabs/models/gemma-4-26b-a4b.toml index 785a46f03ee..bb6dbc1a17e 100644 --- a/providers/empiriolabs/models/gemma-4-26b-a4b.toml +++ b/providers/empiriolabs/models/gemma-4-26b-a4b.toml @@ -2,9 +2,6 @@ base_model = "google/gemma-4-26b-a4b-it" name = "Gemma 4 26B-A4B" last_updated = "2026-06-12" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/glm-5-1.toml b/providers/empiriolabs/models/glm-5-1.toml index 87b108a67ea..0224b7de115 100644 --- a/providers/empiriolabs/models/glm-5-1.toml +++ b/providers/empiriolabs/models/glm-5-1.toml @@ -2,9 +2,6 @@ base_model = "zhipuai/glm-5.1" name = "GLM 5.1" last_updated = "2026-06-12" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/glm-5-2.toml b/providers/empiriolabs/models/glm-5-2.toml index cebceb91bb3..d0d3a97a50e 100644 --- a/providers/empiriolabs/models/glm-5-2.toml +++ b/providers/empiriolabs/models/glm-5-2.toml @@ -1,9 +1,6 @@ base_model = "zhipuai/glm-5.2" name = "GLM 5.2" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] diff --git a/providers/empiriolabs/models/kimi-k2-6.toml b/providers/empiriolabs/models/kimi-k2-6.toml index 5e61c74fd04..d1ee9f7a896 100644 --- a/providers/empiriolabs/models/kimi-k2-6.toml +++ b/providers/empiriolabs/models/kimi-k2-6.toml @@ -1,9 +1,6 @@ base_model = "moonshotai/kimi-k2.6" last_updated = "2026-06-12" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/mimo-v2-6-flash.toml b/providers/empiriolabs/models/mimo-v2-6-flash.toml new file mode 100644 index 00000000000..14d640b4db5 --- /dev/null +++ b/providers/empiriolabs/models/mimo-v2-6-flash.toml @@ -0,0 +1,14 @@ +base_model = "xiaomi/mimo-v2.6-flash" +name = "MiMo V2.6 Flash" +structured_output = true + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.7 +output = 1.4 +cache_read = 0.7 + +[limit] +context = 1_000_000 diff --git a/providers/empiriolabs/models/mimo-v2-6-pro-ultraspeed.toml b/providers/empiriolabs/models/mimo-v2-6-pro-ultraspeed.toml new file mode 100644 index 00000000000..e69d20993d0 --- /dev/null +++ b/providers/empiriolabs/models/mimo-v2-6-pro-ultraspeed.toml @@ -0,0 +1,14 @@ +base_model = "xiaomi/mimo-v2.6-pro-ultraspeed" +name = "MiMo V2.6 Pro UltraSpeed" +structured_output = true + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 21.75 +output = 43.5 +cache_read = 21.75 + +[limit] +context = 1_000_000 diff --git a/providers/empiriolabs/models/mimo-v2-6-pro.toml b/providers/empiriolabs/models/mimo-v2-6-pro.toml new file mode 100644 index 00000000000..54b2f7069c3 --- /dev/null +++ b/providers/empiriolabs/models/mimo-v2-6-pro.toml @@ -0,0 +1,14 @@ +base_model = "xiaomi/mimo-v2.6-pro" +name = "MiMo V2.6 Pro" +structured_output = true + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 2.175 +output = 4.35 +cache_read = 2.175 + +[limit] +context = 1_000_000 diff --git a/providers/empiriolabs/models/mistral-medium-3.toml b/providers/empiriolabs/models/mistral-medium-3.toml deleted file mode 100644 index f868fad65db..00000000000 --- a/providers/empiriolabs/models/mistral-medium-3.toml +++ /dev/null @@ -1,10 +0,0 @@ -base_model = "mistral/mistral-medium-2505" -structured_output = true - -[cost] -input = 0 -output = 0 - -[limit] -context = 130_000 -output = 40_000 diff --git a/providers/empiriolabs/models/muse-spark-1-1.toml b/providers/empiriolabs/models/muse-spark-1-1.toml index c6e27c90a7a..8db80eb737d 100644 --- a/providers/empiriolabs/models/muse-spark-1-1.toml +++ b/providers/empiriolabs/models/muse-spark-1-1.toml @@ -9,9 +9,5 @@ input = 1.25 output = 4.25 cache_read = 1 -[limit] -context = 1_048_576 -output = 131_072 - [modalities] input = ["text", "image", "video", "audio"] diff --git a/providers/empiriolabs/models/muse-spark-1-3.toml b/providers/empiriolabs/models/muse-spark-1-3.toml new file mode 100644 index 00000000000..3e6d5ba8d7d --- /dev/null +++ b/providers/empiriolabs/models/muse-spark-1-3.toml @@ -0,0 +1,13 @@ +base_model = "meta/muse-spark-1.3" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 1.25 +output = 4.25 +cache_read = 1 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/empiriolabs/models/qwen3-5-122b-a10b.toml b/providers/empiriolabs/models/qwen3-5-122b-a10b.toml index 4e5a031a156..051fb2ed4fc 100644 --- a/providers/empiriolabs/models/qwen3-5-122b-a10b.toml +++ b/providers/empiriolabs/models/qwen3-5-122b-a10b.toml @@ -1,8 +1,5 @@ base_model = "alibaba/qwen3.5-122b-a10b" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/qwen3-5-27b.toml b/providers/empiriolabs/models/qwen3-5-27b.toml index 8ec24690b05..65e6d1423b0 100644 --- a/providers/empiriolabs/models/qwen3-5-27b.toml +++ b/providers/empiriolabs/models/qwen3-5-27b.toml @@ -1,8 +1,5 @@ base_model = "alibaba/qwen3.5-27b" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/qwen3-5-35b-a3b.toml b/providers/empiriolabs/models/qwen3-5-35b-a3b.toml index 79c7b132465..061c41b87d9 100644 --- a/providers/empiriolabs/models/qwen3-5-35b-a3b.toml +++ b/providers/empiriolabs/models/qwen3-5-35b-a3b.toml @@ -1,8 +1,5 @@ base_model = "alibaba/qwen3.5-35b-a3b" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/qwen3-5-397b-a17b.toml b/providers/empiriolabs/models/qwen3-5-397b-a17b.toml index 71c88ef9155..0063bf09354 100644 --- a/providers/empiriolabs/models/qwen3-5-397b-a17b.toml +++ b/providers/empiriolabs/models/qwen3-5-397b-a17b.toml @@ -1,8 +1,5 @@ base_model = "alibaba/qwen3.5-397b-a17b" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/qwen3-5-4b.toml b/providers/empiriolabs/models/qwen3-5-4b.toml index f7a003f1cef..af27e389880 100644 --- a/providers/empiriolabs/models/qwen3-5-4b.toml +++ b/providers/empiriolabs/models/qwen3-5-4b.toml @@ -9,9 +9,6 @@ tool_call = true structured_output = true open_weights = true -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/qwen3-5-9b.toml b/providers/empiriolabs/models/qwen3-5-9b.toml index f9c215d402c..23363844f21 100644 --- a/providers/empiriolabs/models/qwen3-5-9b.toml +++ b/providers/empiriolabs/models/qwen3-5-9b.toml @@ -1,8 +1,5 @@ base_model = "alibaba/qwen3.5-9b" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/qwen3-6-27b.toml b/providers/empiriolabs/models/qwen3-6-27b.toml index 67e1fc45fb6..80c72e5ecd1 100644 --- a/providers/empiriolabs/models/qwen3-6-27b.toml +++ b/providers/empiriolabs/models/qwen3-6-27b.toml @@ -1,8 +1,5 @@ base_model = "alibaba/qwen3.6-27b" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/qwen3-6-35b-a3b.toml b/providers/empiriolabs/models/qwen3-6-35b-a3b.toml index d7c0dce5058..5b6add630f9 100644 --- a/providers/empiriolabs/models/qwen3-6-35b-a3b.toml +++ b/providers/empiriolabs/models/qwen3-6-35b-a3b.toml @@ -2,9 +2,6 @@ base_model = "alibaba/qwen3.6-35b-a3b" name = "Qwen3.6 35B A3B" attachment = false -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/qwen3-6-flash.toml b/providers/empiriolabs/models/qwen3-6-flash.toml index 9ac389cedaf..0b1cbc497d6 100644 --- a/providers/empiriolabs/models/qwen3-6-flash.toml +++ b/providers/empiriolabs/models/qwen3-6-flash.toml @@ -1,8 +1,5 @@ base_model = "alibaba/qwen3.6-flash" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/qwen3-6-max-preview.toml b/providers/empiriolabs/models/qwen3-6-max-preview.toml index dc02cfe19ba..be4ad9c722e 100644 --- a/providers/empiriolabs/models/qwen3-6-max-preview.toml +++ b/providers/empiriolabs/models/qwen3-6-max-preview.toml @@ -1,9 +1,6 @@ base_model = "alibaba/qwen3.6-max-preview" structured_output = true -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/qwen3-7-flash.toml b/providers/empiriolabs/models/qwen3-7-flash.toml index 2f3d3d5a4d5..26b58b3e7b3 100644 --- a/providers/empiriolabs/models/qwen3-7-flash.toml +++ b/providers/empiriolabs/models/qwen3-7-flash.toml @@ -1,8 +1,5 @@ base_model = "alibaba/qwen3.7-flash" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/qwen3-7-max.toml b/providers/empiriolabs/models/qwen3-7-max.toml index b651d772d2f..52fda1a63a5 100644 --- a/providers/empiriolabs/models/qwen3-7-max.toml +++ b/providers/empiriolabs/models/qwen3-7-max.toml @@ -2,9 +2,6 @@ base_model = "alibaba/qwen3.7-max" last_updated = "2026-06-12" structured_output = true -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/qwen3-7-plus.toml b/providers/empiriolabs/models/qwen3-7-plus.toml index e9d36d2cfea..6ee8b3e76c8 100644 --- a/providers/empiriolabs/models/qwen3-7-plus.toml +++ b/providers/empiriolabs/models/qwen3-7-plus.toml @@ -2,9 +2,6 @@ base_model = "alibaba/qwen3.7-plus" last_updated = "2026-06-12" structured_output = true -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/qwen3-8-27b.toml b/providers/empiriolabs/models/qwen3-8-27b.toml index d0f170be85f..c5d6f2e57ac 100644 --- a/providers/empiriolabs/models/qwen3-8-27b.toml +++ b/providers/empiriolabs/models/qwen3-8-27b.toml @@ -1,8 +1,5 @@ base_model = "alibaba/qwen3.8-27b" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "xhigh"] diff --git a/providers/empiriolabs/models/qwen3-8-flash.toml b/providers/empiriolabs/models/qwen3-8-flash.toml new file mode 100644 index 00000000000..de93d1d0e24 --- /dev/null +++ b/providers/empiriolabs/models/qwen3-8-flash.toml @@ -0,0 +1,16 @@ +base_model = "alibaba/qwen3.8-flash" +temperature = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" +min = 1 +max = 262_144 + +[cost] +input = 0.16 +output = 0.47 +cache_read = 0.16 diff --git a/providers/empiriolabs/models/qwen3-8-max-0902.toml b/providers/empiriolabs/models/qwen3-8-max-0902.toml new file mode 100644 index 00000000000..1ecde38c227 --- /dev/null +++ b/providers/empiriolabs/models/qwen3-8-max-0902.toml @@ -0,0 +1,20 @@ +base_model = "alibaba/qwen3.8-max" +name = "Qwen3.8 Max 0902" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" +min = 1 +max = 262_144 + +[cost] +input = 2 +output = 6 +cache_read = 2 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/empiriolabs/models/qwen3-8-max.toml b/providers/empiriolabs/models/qwen3-8-max.toml index f9b405845ed..5d907ad22d4 100644 --- a/providers/empiriolabs/models/qwen3-8-max.toml +++ b/providers/empiriolabs/models/qwen3-8-max.toml @@ -1,9 +1,6 @@ base_model = "alibaba/qwen3.8-max" structured_output = true -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["none", "low", "medium", "high", "max"] diff --git a/providers/empiriolabs/models/qwen3-8-omni-flash.toml b/providers/empiriolabs/models/qwen3-8-omni-flash.toml new file mode 100644 index 00000000000..3f74a9fcb03 --- /dev/null +++ b/providers/empiriolabs/models/qwen3-8-omni-flash.toml @@ -0,0 +1,17 @@ +base_model = "alibaba/qwen3.8-omni-flash" +temperature = true +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" +min = 1 +max = 262_144 + +[cost] +input = 0.3 +output = 0.94 +cache_read = 0.3 diff --git a/providers/empiriolabs/models/seed-2-0-lite.toml b/providers/empiriolabs/models/seed-2-0-lite.toml index 299714a3910..b2ba0932611 100644 --- a/providers/empiriolabs/models/seed-2-0-lite.toml +++ b/providers/empiriolabs/models/seed-2-0-lite.toml @@ -1,5 +1,4 @@ base_model = "bytedance-seed/seed-2.0-lite" -structured_output = true [[reasoning_options]] type = "toggle" diff --git a/providers/empiriolabs/models/seed-2-0-mini.toml b/providers/empiriolabs/models/seed-2-0-mini.toml index da2918942a9..6ea20e5b116 100644 --- a/providers/empiriolabs/models/seed-2-0-mini.toml +++ b/providers/empiriolabs/models/seed-2-0-mini.toml @@ -1,5 +1,4 @@ base_model = "bytedance-seed/seed-2.0-mini" -structured_output = true [[reasoning_options]] type = "toggle" diff --git a/providers/empiriolabs/models/seed-2-0-pro.toml b/providers/empiriolabs/models/seed-2-0-pro.toml index cfec380b517..907c80ad87c 100644 --- a/providers/empiriolabs/models/seed-2-0-pro.toml +++ b/providers/empiriolabs/models/seed-2-0-pro.toml @@ -1,5 +1,4 @@ base_model = "bytedance-seed/seed-2.0-pro" -structured_output = true [[reasoning_options]] type = "toggle" diff --git a/providers/empiriolabs/models/seed-2-1-turbo.toml b/providers/empiriolabs/models/seed-2-1-turbo.toml index 7d3367af0f2..d0749a11c06 100644 --- a/providers/empiriolabs/models/seed-2-1-turbo.toml +++ b/providers/empiriolabs/models/seed-2-1-turbo.toml @@ -1,5 +1,4 @@ base_model = "bytedance-seed/seed-2.1-turbo" -structured_output = true [[reasoning_options]] type = "toggle" diff --git a/providers/empiriolabs/models/step-5-preview.toml b/providers/empiriolabs/models/step-5-preview.toml new file mode 100644 index 00000000000..c4ca4d28659 --- /dev/null +++ b/providers/empiriolabs/models/step-5-preview.toml @@ -0,0 +1,16 @@ +base_model = "stepfun/step-5-preview" +base_model_omit = ["limit.input"] +temperature = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 1 +output = 2.7 +cache_read = 0.05 + +[limit] +context = 1_024_000 +output = 131_072 diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-flash-0731.toml b/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-flash-0731.toml index e9f174ee395..276c95f212a 100644 --- a/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-flash-0731.toml +++ b/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-flash-0731.toml @@ -1,4 +1,9 @@ +# Serverless deprecation announced for 2026-09-25: https://docs.fireworks.ai/updates/changelog base_model = "deepseek/deepseek-v4-flash-0731" +status = "deprecated" + +[interleaved] +field = "reasoning_content" [[reasoning_options]] type = "toggle" @@ -7,10 +12,11 @@ type = "toggle" type = "effort" values = ["low", "high", "max"] -[interleaved] -field = "reasoning_content" - [cost] -input = 0.14 -output = 0.28 -cache_read = 0.028 +input = 0.22 +output = 0.66 +cache_read = 0.007 + +[experimental.modes.priority] +cost = { input = 0.275, output = 0.825, cache_read = 0.00875 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-flash-vision-exp.toml b/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-flash-vision-exp.toml new file mode 100644 index 00000000000..0e06ace6ae7 --- /dev/null +++ b/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-flash-vision-exp.toml @@ -0,0 +1,22 @@ +# Serverless deprecation announced for 2026-09-25: https://docs.fireworks.ai/updates/changelog +# Toggle: thinking.type = enabled|disabled (reasoning_effort = none|false also disables) +# Effort: reasoning_effort = low|high|max (same surface as deepseek-v4-flash-0731 on Fireworks) +# Pricing/model: https://fireworks.ai/models/deepseek-ai/deepseek-v4-flash-vision-exp (accessed 2026-09-02) +# Peer: providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-flash-0731.toml +base_model = "deepseek/deepseek-v4-flash-vision-exp" +status = "deprecated" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.22 +output = 0.66 +cache_read = 0.007 diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-flash.toml b/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-flash.toml deleted file mode 100644 index 21fab17a91c..00000000000 --- a/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-flash.toml +++ /dev/null @@ -1,19 +0,0 @@ -base_model = "deepseek/deepseek-v4-flash" -# Fireworks' published schema does not document this model's toggle or "max" -# effort mapping. https://docs.fireworks.ai/guides/reasoning (accessed 2026-06-25) -last_updated = "2026-06-16" - -[[reasoning_options]] -type = "toggle" - -[[reasoning_options]] -type = "effort" -values = ["high", "max"] - -[interleaved] -field = "reasoning_content" - -[cost] -input = 0.14 -output = 0.28 -cache_read = 0.028 diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-pro-0813.toml b/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-pro-0813.toml index e98a50a2643..38881be88e1 100644 --- a/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-pro-0813.toml +++ b/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-pro-0813.toml @@ -1,8 +1,13 @@ +# Serverless deprecation announced for 2026-09-25: https://docs.fireworks.ai/updates/changelog # Toggle: thinking.type = enabled|disabled (reasoning_effort = none|false also disables) # Effort: reasoning_effort = high|max; low/medium promote to high, xhigh to max # Reasoning: https://docs.fireworks.ai/api-reference/post-chatcompletions (accessed 2026-08-14) # Pricing: https://fireworks.ai/models/deepseek-ai/deepseek-v4-pro-0813 (accessed 2026-08-14) base_model = "deepseek/deepseek-v4-pro-0813" +status = "deprecated" + +[interleaved] +field = "reasoning_content" [[reasoning_options]] type = "toggle" @@ -11,10 +16,11 @@ type = "toggle" type = "effort" values = ["high", "max"] -[interleaved] -field = "reasoning_content" - [cost] input = 1.32 output = 3.96 cache_read = 0.044 + +[experimental.modes.priority] +cost = { input = 1.65, output = 4.95, cache_read = 0.055 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-pro.toml b/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-pro.toml index eda5cdf4d64..6af4675f1f0 100644 --- a/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-pro.toml +++ b/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-pro.toml @@ -1,6 +1,16 @@ +# Deprecated effective 2026-08-27: https://docs.fireworks.ai/updates/changelog +# GET /v1/serverless/models lists DeepSeek V4 Pro on Standard and Priority +# at $1.20 / $0.60 / $1.20 per 1M (input / cached input / output) on +# 2026-09-16. Both serving modes currently have the same price. +# Toggle: thinking.type = enabled|disabled (reasoning_effort = none|false also disables) +# Effort: reasoning_effort = high|max; low/medium promote to high, xhigh to max +# Reasoning API: https://docs.fireworks.ai/api-reference/post-chatcompletions (accessed 2026-09-15) +# Peer surface: providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4-pro-0813.toml base_model = "deepseek/deepseek-v4-pro" -# Fireworks' published schema does not document this model's toggle or "max" -# effort mapping. https://docs.fireworks.ai/guides/reasoning (accessed 2026-06-25) +status = "deprecated" + +[interleaved] +field = "reasoning_content" [[reasoning_options]] type = "toggle" @@ -9,10 +19,11 @@ type = "toggle" type = "effort" values = ["high", "max"] -[interleaved] -field = "reasoning_content" - [cost] -input = 1.74 -output = 3.48 -cache_read = 0.145 +input = 1.2 +output = 1.2 +cache_read = 0.6 + +[experimental.modes.priority] +cost = { input = 1.2, output = 1.2, cache_read = 0.6 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4p1-flash.toml b/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4p1-flash.toml new file mode 100644 index 00000000000..07a24dbd793 --- /dev/null +++ b/providers/fireworks-ai/models/accounts/fireworks/models/deepseek-v4p1-flash.toml @@ -0,0 +1,29 @@ +# Toggle: thinking.type = enabled|disabled (reasoning_effort = "none" or false also disables) +# Effort: reasoning_effort = low|medium|high|xhigh|max +# medium and high produce identical output (medium promoted to high). +# low is a distinct tier, not promoted to high despite docs. +# xhigh and max are distinct tiers, not promoted despite docs. +# Verified 2026-09-10 across 4 prompts at temperature 0. +# Reasoning: https://docs.fireworks.ai/api-reference/post-chatcompletions (accessed 2026-09-10) +# Pricing: https://fireworks.ai/models/deepseek-ai/deepseek-v4p1-flash (accessed 2026-09-10) +# Released on Fireworks Serverless API 2026-09-10. +base_model = "deepseek/deepseek-v4.1-flash" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.22 +output = 0.66 +cache_read = 0.007 + +[experimental.modes.priority] +cost = { input = 0.275, output = 0.825, cache_read = 0.00875 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/glm-5p2.toml b/providers/fireworks-ai/models/accounts/fireworks/models/glm-5p2.toml index 74a93f7734b..8cfa16eeca2 100644 --- a/providers/fireworks-ai/models/accounts/fireworks/models/glm-5p2.toml +++ b/providers/fireworks-ai/models/accounts/fireworks/models/glm-5p2.toml @@ -1,7 +1,8 @@ -name = "GLM 5.2" -description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" +# Serverless deprecation announced for 2026-09-25: https://docs.fireworks.ai/updates/changelog # Fireworks' published schema does not document this model's toggle or "max" # effort mapping. https://docs.fireworks.ai/guides/reasoning (accessed 2026-06-25) +name = "GLM 5.2" +description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" family = "glm" release_date = "2026-06-16" last_updated = "2026-06-16" @@ -10,6 +11,10 @@ reasoning = true temperature = true tool_call = true open_weights = true +status = "deprecated" + +[interleaved] +field = "reasoning_content" [[reasoning_options]] type = "toggle" @@ -19,8 +24,8 @@ type = "effort" values = ["high", "max"] [cost] -input = 1.40 -output = 4.40 +input = 1.4 +output = 4.4 cache_read = 0.14 [limit] @@ -31,5 +36,6 @@ output = 131_072 input = ["text"] output = ["text"] -[interleaved] -field = "reasoning_content" +[experimental.modes.priority] +cost = { input = 1.75, output = 5.5, cache_read = 0.175 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/glm-5p3-flash.toml b/providers/fireworks-ai/models/accounts/fireworks/models/glm-5p3-flash.toml new file mode 100644 index 00000000000..2792714f8e4 --- /dev/null +++ b/providers/fireworks-ai/models/accounts/fireworks/models/glm-5p3-flash.toml @@ -0,0 +1,38 @@ +# Pricing: https://fireworks.ai/models/fireworks/glm-5p3-flash (accessed 2026-09-02) +# Released on Fireworks Serverless API 2026-08-26. +# Thinking-only model: reasoning cannot be disabled. Three distinct effort +# tiers like Fireworks GLM 5.3 (NOT the two-tier GLM 5.2 collapse): verified +# empirically 2026-09-04 — same prompt yields ~9/17/559 reasoning tokens for +# low/high/max. max/xhigh select max. +# https://docs.fireworks.ai/api-reference/post-chatcompletions +# Serving limits verified 2026-09-07: GET /v1/models reports context_length +# 1_048_576; an over-limit probe (1_200_012 prompt tokens) was rejected with +# "model maximum context length: 1048573" — the enforced prompt cap, recorded +# here (the lab default is 1M context). Output stays at the inherited +# 131_072: Fireworks performs no pre-flight max_tokens validation (up to +# 2_000_000 accepted), and Baseten documents 131_072 for GLM-5.3-Flash. +base_model = "zhipuai/glm-5.3-flash" +name = "GLM 5.3 Flash" +last_updated = "2026-09-07" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.03 + +[limit] +context = 1_048_573 + +[modalities] +input = ["text", "image"] + +[experimental.modes.priority] +cost = { input = 0.1875, output = 0.625, cache_read = 0.0375 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/glm-5p3.toml b/providers/fireworks-ai/models/accounts/fireworks/models/glm-5p3.toml new file mode 100644 index 00000000000..c805f171742 --- /dev/null +++ b/providers/fireworks-ai/models/accounts/fireworks/models/glm-5p3.toml @@ -0,0 +1,40 @@ +# Pricing: https://docs.fireworks.ai/serverless/pricing (accessed 2026-08-29) +# Released on Fireworks Serverless API 2026-08-28. +# Thinking-only model: reasoning cannot be disabled (reasoning_effort="none" +# and thinking.type="disabled" both return 400). Unlike GLM 5.2 (two tiers, +# low/medium collapse to high), GLM 5.3 has three distinct effort tiers: +# verified empirically 2026-09-04 — same prompt yields ~10/25/198 reasoning +# tokens for low/high/max. max/xhigh select max. +# https://docs.fireworks.ai/api-reference/post-chatcompletions +# Serving limits verified 2026-09-07: GET /v1/models reports context_length +# 1_048_576; an over-limit probe (1_200_012 prompt tokens) was rejected with +# "model maximum context length: 1048573" — the enforced prompt cap, recorded +# here. Fireworks performs no pre-flight max_tokens validation at all +# (262_144, 524_288, and 2_000_000 all accepted), so a request-side output +# ceiling is untestable by probes; output = 262_144 per the Baseten- +# documented generation ceiling for the same weights. The Z.ai lab default +# (1M / 128K, https://docs.z.ai/guides/llm/glm-5.3) understates Fireworks +# serving. +base_model = "zhipuai/glm-5.3" +name = "GLM 5.3" +last_updated = "2026-09-07" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.26 + +[limit] +context = 1_048_573 +output = 262_144 + +[experimental.modes.priority] +cost = { input = 1.75, output = 5.5, cache_read = 0.325 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/gpt-oss-120b.toml b/providers/fireworks-ai/models/accounts/fireworks/models/gpt-oss-120b.toml index b62f6b4eb62..3b5586b6964 100644 --- a/providers/fireworks-ai/models/accounts/fireworks/models/gpt-oss-120b.toml +++ b/providers/fireworks-ai/models/accounts/fireworks/models/gpt-oss-120b.toml @@ -1,7 +1,5 @@ name = "GPT OSS 120B" description = "Open-weight GPT model for self-hosted reasoning and instruction-following workloads" -# $.reasoning_effort = "low" | "medium" | "high". -# https://docs.fireworks.ai/guides/reasoning (accessed 2026-06-25) family = "gpt-oss" release_date = "2025-08-05" last_updated = "2026-06-16" @@ -17,7 +15,7 @@ values = ["low", "medium", "high"] [cost] input = 0.15 -output = 0.60 +output = 0.6 cache_read = 0.015 [limit] @@ -27,3 +25,7 @@ output = 32_768 [modalities] input = ["text"] output = ["text"] + +[experimental.modes.priority] +cost = { input = 0.18, output = 0.72, cache_read = 0.018 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/gpt-oss-20b.toml b/providers/fireworks-ai/models/accounts/fireworks/models/gpt-oss-20b.toml deleted file mode 100644 index e125b71c646..00000000000 --- a/providers/fireworks-ai/models/accounts/fireworks/models/gpt-oss-20b.toml +++ /dev/null @@ -1,29 +0,0 @@ -name = "GPT OSS 20B" -description = "Open-weight GPT model for self-hosted reasoning and instruction-following workloads" -# $.reasoning_effort = "low" | "medium" | "high". -# https://docs.fireworks.ai/guides/reasoning (accessed 2026-06-25) -family = "gpt-oss" -release_date = "2025-08-05" -last_updated = "2025-08-05" -attachment = false -reasoning = true -temperature = true -tool_call = true -open_weights = true - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] - -[cost] -input = 0.07 -output = 0.30 -cache_read = 0.035 - -[limit] -context = 131_072 -output = 32_768 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/kimi-k2p6.toml b/providers/fireworks-ai/models/accounts/fireworks/models/kimi-k2p6.toml index 290cb4c7819..f2e97c2cc21 100644 --- a/providers/fireworks-ai/models/accounts/fireworks/models/kimi-k2p6.toml +++ b/providers/fireworks-ai/models/accounts/fireworks/models/kimi-k2p6.toml @@ -1,7 +1,8 @@ -name = "Kimi K2.6" -description = "Kimi reasoning model for long-horizon research, planning, and tool use" +# Serverless deprecation announced for 2026-09-25: https://docs.fireworks.ai/updates/changelog # Fireworks documents thinking.type = "enabled", but no explicit disabled # value for this model. https://docs.fireworks.ai/guides/reasoning (accessed 2026-06-25) +name = "Kimi K2.6" +description = "Kimi reasoning model for long-horizon research, planning, and tool use" family = "kimi-thinking" release_date = "2026-04-17" last_updated = "2026-04-17" @@ -10,14 +11,18 @@ reasoning = true temperature = true tool_call = true open_weights = true +status = "deprecated" + +[interleaved] +field = "reasoning_content" [[reasoning_options]] type = "toggle" [cost] -cache_read = 0.16 input = 0.95 -output = 4.00 +output = 4 +cache_read = 0.16 [limit] context = 262_000 @@ -27,5 +32,6 @@ output = 262_000 input = ["text", "image"] output = ["text"] -[interleaved] -field = "reasoning_content" +[experimental.modes.priority] +cost = { input = 1.5, output = 6, cache_read = 0.22 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/kimi-k2p7-code.toml b/providers/fireworks-ai/models/accounts/fireworks/models/kimi-k2p7-code.toml index 47df91e54ee..b69c7ada8f2 100644 --- a/providers/fireworks-ai/models/accounts/fireworks/models/kimi-k2p7-code.toml +++ b/providers/fireworks-ai/models/accounts/fireworks/models/kimi-k2p7-code.toml @@ -1,7 +1,8 @@ -name = "Kimi K2.7 Code" -description = "Kimi coding model for software agents, refactors, and repository reasoning" +# Serverless deprecation announced for 2026-09-25: https://docs.fireworks.ai/updates/changelog # Fireworks documents thinking.type = "enabled", but no explicit disabled # value for this model. https://docs.fireworks.ai/guides/reasoning (accessed 2026-06-25) +name = "Kimi K2.7 Code" +description = "Kimi coding model for software agents, refactors, and repository reasoning" family = "kimi-k2" release_date = "2026-06-12" last_updated = "2026-06-16" @@ -10,14 +11,18 @@ reasoning = true temperature = true tool_call = true open_weights = true +status = "deprecated" + +[interleaved] +field = "reasoning_content" [[reasoning_options]] type = "toggle" [cost] -cache_read = 0.19 input = 0.95 -output = 4.00 +output = 4 +cache_read = 0.19 [limit] context = 262_000 @@ -27,5 +32,6 @@ output = 262_000 input = ["text", "image"] output = ["text"] -[interleaved] -field = "reasoning_content" +[experimental.modes.priority] +cost = { input = 1.425, output = 6, cache_read = 0.285 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/kimi-k3.toml b/providers/fireworks-ai/models/accounts/fireworks/models/kimi-k3.toml index 6780b801c9c..065b801125b 100644 --- a/providers/fireworks-ai/models/accounts/fireworks/models/kimi-k3.toml +++ b/providers/fireworks-ai/models/accounts/fireworks/models/kimi-k3.toml @@ -2,6 +2,9 @@ base_model = "moonshotai/kimi-k3" release_date = "2026-07-27" last_updated = "2026-07-27" +[interleaved] +field = "reasoning_content" + [[reasoning_options]] type = "toggle" @@ -13,13 +16,14 @@ values = ["low", "medium", "high", "max"] type = "budget_tokens" min = 1_024 -[interleaved] -field = "reasoning_content" - [cost] -input = 3.0 -output = 15.0 +input = 3 +output = 15 cache_read = 0.3 [modalities] input = ["text", "image"] + +[experimental.modes.priority] +cost = { input = 3.75, output = 18.75, cache_read = 0.375 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/minimax-m2p7.toml b/providers/fireworks-ai/models/accounts/fireworks/models/minimax-m2p7.toml index 2fc97e864b0..bbf3b9c635c 100644 --- a/providers/fireworks-ai/models/accounts/fireworks/models/minimax-m2p7.toml +++ b/providers/fireworks-ai/models/accounts/fireworks/models/minimax-m2p7.toml @@ -1,32 +1,26 @@ -name = "MiniMax-M2.7" -description = "MiniMax model for chat, coding, office work, and agentic tasks" -# $.reasoning_effort = "low" | "medium" | "high". -# https://docs.fireworks.ai/guides/reasoning (accessed 2026-06-25) -family = "minimax" -release_date = "2026-04-12" -last_updated = "2026-04-12" -attachment = false -reasoning = true -temperature = true -tool_call = true -open_weights = true +# Deprecated effective 2026-08-27: https://docs.fireworks.ai/updates/changelog +# GET /v1/serverless/models lists MiniMax M2.7 as Priority-only at +# $1.20 / $0.60 / $1.20 per 1M (input / cached input / output) with a +# 196,608-token context on 2026-09-16. +# $.reasoning_effort = "low" | "medium" | "high" (same Fireworks surface as MiniMax M3). +# https://docs.fireworks.ai/guides/reasoning +base_model = "minimax/MiniMax-M2.7" +status = "deprecated" + +[interleaved] +field = "reasoning_content" [[reasoning_options]] type = "effort" values = ["low", "medium", "high"] [cost] -input = 0.30 -output = 1.20 -cache_read = 0.06 +input = 1.2 +output = 1.2 +cache_read = 0.6 [limit] context = 196_608 -output = 196_608 -[modalities] -input = ["text"] -output = ["text"] - -[interleaved] -field = "reasoning_content" +[provider] +body = { service_tier = "priority" } diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/minimax-m3.toml b/providers/fireworks-ai/models/accounts/fireworks/models/minimax-m3.toml index 89f9d16f043..e87e3cd0cce 100644 --- a/providers/fireworks-ai/models/accounts/fireworks/models/minimax-m3.toml +++ b/providers/fireworks-ai/models/accounts/fireworks/models/minimax-m3.toml @@ -1,23 +1,26 @@ -name = "MiniMax-M3" -description = "MiniMax multimodal coding model for long-context reasoning and agent tasks" # $.reasoning_effort = "low" | "medium" | "high". # https://docs.fireworks.ai/guides/reasoning (accessed 2026-06-25) +name = "MiniMax-M3" +description = "Fireworks text-only MiniMax coding model for long-context reasoning and agent tasks" family = "minimax" release_date = "2026-06-12" last_updated = "2026-06-12" -attachment = true +attachment = false reasoning = true temperature = true tool_call = true open_weights = true +[interleaved] +field = "reasoning_content" + [[reasoning_options]] type = "effort" values = ["low", "medium", "high"] [cost] -input = 0.30 -output = 1.20 +input = 0.3 +output = 1.2 cache_read = 0.06 [limit] @@ -25,8 +28,9 @@ context = 512_000 output = 512_000 [modalities] -input = ["text", "image", "video"] +input = ["text"] output = ["text"] -[interleaved] -field = "reasoning_content" +[experimental.modes.priority] +cost = { input = 0.45, output = 1.8, cache_read = 0.09 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/muse-glimmer-30b.toml b/providers/fireworks-ai/models/accounts/fireworks/models/muse-glimmer-30b.toml index f86f459d872..4a73f9bf085 100644 --- a/providers/fireworks-ai/models/accounts/fireworks/models/muse-glimmer-30b.toml +++ b/providers/fireworks-ai/models/accounts/fireworks/models/muse-glimmer-30b.toml @@ -1,4 +1,6 @@ +# Serverless deprecation announced for 2026-09-25: https://docs.fireworks.ai/updates/changelog base_model = "meta/muse-glimmer-30b" +status = "deprecated" [[reasoning_options]] type = "effort" diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/nemotron-3-ultra-nvfp4.toml b/providers/fireworks-ai/models/accounts/fireworks/models/nemotron-3-ultra-nvfp4.toml index 169414e233e..baa9d9b890a 100644 --- a/providers/fireworks-ai/models/accounts/fireworks/models/nemotron-3-ultra-nvfp4.toml +++ b/providers/fireworks-ai/models/accounts/fireworks/models/nemotron-3-ultra-nvfp4.toml @@ -4,9 +4,9 @@ base_model = "nvidia/nemotron-3-ultra-550b-a55b" type = "toggle" [cost] -input = 0.60 -output = 2.40 -cache_read = 0.119 +input = 0.6 +output = 2.4 +cache_read = 0.12 [limit] context = 262_144 diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/qwen3p8-2p4t-a95b.toml b/providers/fireworks-ai/models/accounts/fireworks/models/qwen3p8-2p4t-a95b.toml new file mode 100644 index 00000000000..c026897dfd3 --- /dev/null +++ b/providers/fireworks-ai/models/accounts/fireworks/models/qwen3p8-2p4t-a95b.toml @@ -0,0 +1,21 @@ +# Fireworks' page retains a qwen3p8-max URL slug, but identifies the served model as +# Qwen3.8-2.4T-A95B with API path accounts/fireworks/models/qwen3p8-2p4t-a95b; +# it also documents serverless pricing, 262K context, and text-only input: +# https://fireworks.ai/models/fireworks/qwen3p8-max (accessed 2026-09-04) +# The model requires thinking and accepts reasoning_effort low|medium|xhigh: +# https://huggingface.co/Qwen/Qwen3.8-2.4T-A95B/raw/main/README.md (accessed 2026-09-04) +# Fireworks returns reasoning in reasoning_content: +# https://docs.fireworks.ai/api-reference/post-chatcompletions (accessed 2026-09-04) +base_model = "alibaba/qwen3.8-2.4t-a95b" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 2.00 +output = 6.00 +cache_read = 0.25 diff --git a/providers/fireworks-ai/models/accounts/fireworks/models/qwen3p8-max.toml b/providers/fireworks-ai/models/accounts/fireworks/models/qwen3p8-max.toml index 61607c96136..ff82f0c6561 100644 --- a/providers/fireworks-ai/models/accounts/fireworks/models/qwen3p8-max.toml +++ b/providers/fireworks-ai/models/accounts/fireworks/models/qwen3p8-max.toml @@ -1,18 +1,19 @@ base_model = "alibaba/qwen3.8-max" -attachment = false - [[reasoning_options]] type = "toggle" -[modalities] -input = ["text"] -output = ["text"] - [cost] -input = 2.00 -output = 6.00 +input = 2 +output = 6 cache_read = 0.25 [limit] context = 262_144 + +[modalities] +input = ["text", "image"] + +[experimental.modes.priority] +cost = { input = 3, output = 9, cache_read = 0.375 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/fireworks-ai/models/accounts/fireworks/routers/deepseek-flash-latest.toml b/providers/fireworks-ai/models/accounts/fireworks/routers/deepseek-flash-latest.toml new file mode 100644 index 00000000000..a0062c45fe7 --- /dev/null +++ b/providers/fireworks-ai/models/accounts/fireworks/routers/deepseek-flash-latest.toml @@ -0,0 +1,36 @@ +# Version-tracking standard-path router for current DeepSeek Flash +# (tracks the live Flash SKU; currently DeepSeek V4.1 Flash). +# Short ID: deepseek-flash-latest +# Full model: accounts/fireworks/routers/deepseek-flash-latest +# FireConnect: https://docs.fireworks.ai/ecosystem/fireconnect/models +# (latest vs fast; pinned deepseek-v4-flash deprecated → deepseek-flash-latest) +# Underlying serverless model: accounts/fireworks/models/deepseek-v4p1-flash +# Pricing (Standard / Priority, input / cached / output per 1M): +# https://docs.fireworks.ai/serverless/pricing (accessed 2026-09-15) +# https://fireworks.ai/models/deepseek-ai/deepseek-v4p1-flash (accessed 2026-09-15) +# Standard $0.22 / $0.007 / $0.66; Priority $0.275 / $0.00875 / $0.825 +# Toggle: thinking.type = enabled|disabled (reasoning_effort = "none" or false also disables) +# Effort: reasoning_effort = low|medium|high|xhigh|max +# Same surface as accounts/fireworks/models/deepseek-v4p1-flash (verified peer 2026-09-10). +# Reasoning API: https://docs.fireworks.ai/api-reference/post-chatcompletions +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek Flash Latest" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.22 +output = 0.66 +cache_read = 0.007 + +[experimental.modes.priority] +cost = { input = 0.275, output = 0.825, cache_read = 0.00875 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/fireworks-ai/models/accounts/fireworks/routers/deepseek-pro-latest.toml b/providers/fireworks-ai/models/accounts/fireworks/routers/deepseek-pro-latest.toml new file mode 100644 index 00000000000..d15bb087698 --- /dev/null +++ b/providers/fireworks-ai/models/accounts/fireworks/routers/deepseek-pro-latest.toml @@ -0,0 +1,34 @@ +# Version-tracking "latest" router for DeepSeek Pro on Fireworks Serverless +# (standard path — not Fast). FireConnect documents the short ID +# deepseek-pro-latest and expands it to accounts/fireworks/routers/deepseek-pro-latest. +# Static + catalog resolution currently targets deepseek-v4-pro-0813: +# https://docs.fireworks.ai/ecosystem/fireconnect/models +# https://github.com/fw-ai/fireconnect/blob/main/packages/setup-cli/lib/fireworks/model-specs.mjs +# (ROUTER_SPEC_ALIASES + DEEPSEEK_PRO_LATEST_BASE_CANDIDATES; accessed 2026-09-15) +# Pricing matches DeepSeek V4 Pro (0813) standard serverless rates: +# https://docs.fireworks.ai/serverless/pricing +# https://fireworks.ai/models/deepseek-ai/deepseek-v4-pro-0813 +# Toggle: thinking.type = enabled|disabled (reasoning_effort = none|false also disables) +# Effort: reasoning_effort = high|max; low/medium promote to high, xhigh to max +# Reasoning: https://docs.fireworks.ai/api-reference/post-chatcompletions +base_model = "deepseek/deepseek-v4-pro-0813" +name = "DeepSeek Pro Latest" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["high", "max"] + +[cost] +input = 1.32 +output = 3.96 +cache_read = 0.044 + +[experimental.modes.priority] +cost = { input = 1.65, output = 4.95, cache_read = 0.055 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/fireworks-ai/models/accounts/fireworks/routers/glm-5p3-fast.toml b/providers/fireworks-ai/models/accounts/fireworks/routers/glm-5p3-fast.toml new file mode 100644 index 00000000000..c65dd42dfce --- /dev/null +++ b/providers/fireworks-ai/models/accounts/fireworks/routers/glm-5p3-fast.toml @@ -0,0 +1,40 @@ +# Fast serving-path router for GLM 5.3 — same model, faster serving (the +# chat-completions response echoes the underlying +# accounts/fireworks/models/glm-5p3): +# https://docs.fireworks.ai/serverless/serving-paths +# Router is live on Fireworks accounts but not yet listed on the public +# pricing page (which currently lists GLM 5.2 Fast only). Pricing confirmed +# from a Fireworks account rate card (2026-09-07): $2.10 / $0.39 / $6.60 +# per 1M (input / cached input / output) — a 1.5x premium over GLM 5.3 +# standard, matching the GLM 5.2 Fast premium over GLM 5.2. +# Limits and release verified 2026-09-07: GET /v1/models reports +# context_length 1_048_576 and a created timestamp of 2026-08-28 (identical +# to glm-5p3 — router launched with the base model); an over-limit probe +# (1_200_012 prompt tokens) was rejected +# with "model maximum context length: 1048572" — the enforced prompt cap +# sits 4 tokens below the advertised context_length, so that value is +# recorded here. Fireworks performs no pre-flight max_tokens validation +# (2_000_000 accepted); output = 262_144 per the Baseten/Vercel-documented +# generation ceiling for the same weights. +# Thinking-only, effort tiers identical to the sibling glm-5p3 entry: +# low/high/max (max/xhigh select max). +base_model = "zhipuai/glm-5.3" +name = "GLM 5.3 Fast" +release_date = "2026-08-28" +last_updated = "2026-09-07" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 2.10 +output = 6.60 +cache_read = 0.39 + +[limit] +context = 1_048_572 +output = 262_144 diff --git a/providers/fireworks-ai/models/accounts/fireworks/routers/glm-fast-latest.toml b/providers/fireworks-ai/models/accounts/fireworks/routers/glm-fast-latest.toml new file mode 100644 index 00000000000..f7d8ed7d2f5 --- /dev/null +++ b/providers/fireworks-ai/models/accounts/fireworks/routers/glm-fast-latest.toml @@ -0,0 +1,38 @@ +# Version-tracking Fast serving-path alias for the current flagship GLM Fast +# router. Same weights/quality as the pinned Fast path; higher $/token than +# Standard; aims for 100+ tok/s (Fireworks serving paths). +# +# Current target (2026-09-15): GLM 5.3 Fast +# (accounts/fireworks/routers/glm-5p3-fast). FireConnect prefers +# glm-5p3-fast over glm-5p2-fast when the newer Fast router is in the +# serverless catalog: +# https://github.com/fw-ai/fireconnect/blob/main/packages/setup-cli/lib/fireworks/model-specs.mjs +# (GLM_FAST_LATEST_BASE_CANDIDATES = ["glm-5p3-fast", "glm-5p2-fast"]) +# Docs: +# https://docs.fireworks.ai/ecosystem/fireconnect/models +# (glm-fast-latest: Fast text-only agent loops, 1M context) +# https://docs.fireworks.ai/serverless/serving-paths +# https://docs.fireworks.ai/serverless/pricing +# (GLM 5.3 Fast: $2.10 / $0.39 / $6.60 per 1M input / cached / output) +# Peer limits/reasoning match authored glm-5p3-fast (thinking-only effort +# low|high|max; context 1_048_572; output 262_144). +base_model = "zhipuai/glm-5.3" +name = "GLM 5.3 Fast (Latest)" +release_date = "2026-08-28" +last_updated = "2026-09-15" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 2.10 +output = 6.60 +cache_read = 0.39 + +[limit] +context = 1_048_572 +output = 262_144 diff --git a/providers/fireworks-ai/models/accounts/fireworks/routers/glm-flash-latest.toml b/providers/fireworks-ai/models/accounts/fireworks/routers/glm-flash-latest.toml new file mode 100644 index 00000000000..72dad231910 --- /dev/null +++ b/providers/fireworks-ai/models/accounts/fireworks/routers/glm-flash-latest.toml @@ -0,0 +1,40 @@ +# Version-tracking router alias for the current GLM Flash model on Fireworks +# Serverless (currently GLM 5.3 Flash / accounts/fireworks/models/glm-5p3-flash). +# Short ID glm-flash-latest; canonical path accounts/fireworks/routers/glm-flash-latest. +# Sources (accessed 2026-09-15): +# - Alias target: FireConnect ROUTER_SPEC_ALIASES maps glm-flash-latest → glm-5p3-flash +# https://github.com/fw-ai/fireconnect/blob/main/packages/setup-cli/lib/fireworks/model-specs.mjs +# - FireConnect models doc: glm-flash-latest is vision-capable GLM for image tasks +# https://docs.fireworks.ai/ecosystem/fireconnect/models +# - Pricing / base model page (GLM 5.3 Flash Standard): $0.15 / $0.03 / $0.50 per 1M +# (input / cached input / output) +# https://docs.fireworks.ai/serverless/pricing +# https://fireworks.ai/models/fireworks/glm-5p3-flash +# Limits, reasoning controls, and modalities match the sibling pinned +# accounts/fireworks/models/glm-5p3-flash entry (thinking-only effort low/high/max; +# Fireworks text+image serverless surface). +base_model = "zhipuai/glm-5.3-flash" +name = "GLM Flash Latest (GLM 5.3 Flash)" +last_updated = "2026-09-15" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.03 + +[limit] +context = 1_048_573 + +[modalities] +input = ["text", "image"] + +[experimental.modes.priority] +cost = { input = 0.1875, output = 0.625, cache_read = 0.0375 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/fireworks-ai/models/accounts/fireworks/routers/glm-latest.toml b/providers/fireworks-ai/models/accounts/fireworks/routers/glm-latest.toml new file mode 100644 index 00000000000..ff486ff3f73 --- /dev/null +++ b/providers/fireworks-ai/models/accounts/fireworks/routers/glm-latest.toml @@ -0,0 +1,37 @@ +# Version-tracking standard-path router for the current flagship GLM. +# FireConnect documents glm-latest as a Latest (standard path) alias that +# moves to the current model automatically: +# https://docs.fireworks.ai/ecosystem/fireconnect/models +# Current target is GLM 5.3 (accounts/fireworks/models/glm-5p3). FireConnect +# main maps ROUTER_SPEC_ALIASES["glm-latest"] = "glm-5p3" and resolves +# candidates ["glm-5p3", "glm-5p2"] preferring the first present in catalog: +# https://github.com/fw-ai/fireconnect/blob/main/packages/setup-cli/lib/fireworks/model-specs.mjs +# Pricing matches GLM 5.3 Standard on the serverless pricing page (accessed +# 2026-09-15): $1.40 / $0.26 / $4.40 per 1M (input / cached input / output). +# Priority tier: $1.75 / $0.325 / $5.50. +# https://docs.fireworks.ai/serverless/pricing +# Limits, reasoning, and interleaved field match the sibling +# accounts/fireworks/models/glm-5p3 entry (thinking-only; effort low/high/max). +base_model = "zhipuai/glm-5.3" +name = "GLM Latest" +last_updated = "2026-09-15" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.26 + +[limit] +context = 1_048_573 +output = 262_144 + +[experimental.modes.priority] +cost = { input = 1.75, output = 5.5, cache_read = 0.325 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/fireworks-ai/models/accounts/fireworks/routers/kimi-fast-latest.toml b/providers/fireworks-ai/models/accounts/fireworks/routers/kimi-fast-latest.toml new file mode 100644 index 00000000000..97505dbfb22 --- /dev/null +++ b/providers/fireworks-ai/models/accounts/fireworks/routers/kimi-fast-latest.toml @@ -0,0 +1,39 @@ +# Version-tracking Fast serving-path router for the current Kimi flagship. +# Same quality as kimi-latest / pinned kimi-k3; Fast path aims for 100+ tok/s +# at a higher $/token. Currently resolves to Kimi K3 Fast. +# Docs: https://docs.fireworks.ai/ecosystem/fireconnect/models +# Serving paths: https://docs.fireworks.ai/serverless/serving-paths +# Pricing (Kimi K3 Fast row, accessed 2026-09-15): +# https://docs.fireworks.ai/serverless/pricing — $4.50 / $0.45 / $22.50 +# per 1M (input / cached input / output). Pinned peer: +# accounts/fireworks/routers/kimi-k3-fast. +# Toggle: thinking.type = enabled|disabled (or thinking object) +# Effort: reasoning_effort = low|medium|high|max +# Budget: thinking.budget_tokens (N >= 1024); conflicts with reasoning_effort +# https://docs.fireworks.ai/guides/reasoning +base_model = "moonshotai/kimi-k3" +name = "Kimi Fast Latest" +release_date = "2026-07-27" +last_updated = "2026-09-15" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" +min = 1_024 + +[interleaved] +field = "reasoning_content" + +[cost] +input = 4.5 +output = 22.5 +cache_read = 0.45 + +[modalities] +input = ["text", "image"] diff --git a/providers/fireworks-ai/models/accounts/fireworks/routers/kimi-k2p6-fast.toml b/providers/fireworks-ai/models/accounts/fireworks/routers/kimi-k2p6-fast.toml deleted file mode 100644 index 52ddcd2c874..00000000000 --- a/providers/fireworks-ai/models/accounts/fireworks/routers/kimi-k2p6-fast.toml +++ /dev/null @@ -1,31 +0,0 @@ -name = "Kimi K2.6 Fast" -description = "Kimi reasoning model for long-horizon research, planning, and tool use" -# No router-specific toggle mapping or explicit disabled value is documented. -# https://docs.fireworks.ai/guides/reasoning (accessed 2026-06-25) -family = "kimi-thinking" -release_date = "2026-04-17" -last_updated = "2026-06-05" -attachment = true -reasoning = true -temperature = true -tool_call = true -open_weights = true - -[[reasoning_options]] -type = "toggle" - -[cost] -cache_read = 0.30 -input = 2.00 -output = 8.00 - -[limit] -context = 262_000 -output = 262_000 - -[modalities] -input = ["text", "image"] -output = ["text"] - -[interleaved] -field = "reasoning_content" diff --git a/providers/fireworks-ai/models/accounts/fireworks/routers/kimi-k2p6-turbo.toml b/providers/fireworks-ai/models/accounts/fireworks/routers/kimi-k2p6-turbo.toml deleted file mode 100644 index 87e3f6b32bb..00000000000 --- a/providers/fireworks-ai/models/accounts/fireworks/routers/kimi-k2p6-turbo.toml +++ /dev/null @@ -1,31 +0,0 @@ -name = "Kimi K2.6 Turbo" -description = "Kimi reasoning model for long-horizon research, planning, and tool use" -# No router-specific toggle mapping or explicit disabled value is documented. -# https://docs.fireworks.ai/guides/reasoning (accessed 2026-06-25) -family = "kimi-thinking" -release_date = "2026-04-17" -last_updated = "2026-04-17" -attachment = true -reasoning = true -temperature = true -tool_call = true -open_weights = true - -[[reasoning_options]] -type = "toggle" - -[cost] -cache_read = 0.30 -input = 2.00 -output = 8.00 - -[limit] -context = 262_000 -output = 262_000 - -[modalities] -input = ["text", "image"] -output = ["text"] - -[interleaved] -field = "reasoning_content" diff --git a/providers/fireworks-ai/models/accounts/fireworks/routers/kimi-k2p7-code-fast.toml b/providers/fireworks-ai/models/accounts/fireworks/routers/kimi-k2p7-code-fast.toml deleted file mode 100644 index 0cbc6520216..00000000000 --- a/providers/fireworks-ai/models/accounts/fireworks/routers/kimi-k2p7-code-fast.toml +++ /dev/null @@ -1,31 +0,0 @@ -name = "Kimi K2.7 Code Fast" -description = "Kimi coding model for software agents, refactors, and repository reasoning" -# No router-specific toggle mapping or explicit disabled value is documented. -# https://docs.fireworks.ai/guides/reasoning (accessed 2026-06-25) -family = "kimi-k2" -release_date = "2026-06-12" -last_updated = "2026-06-16" -attachment = true -reasoning = true -temperature = true -tool_call = true -open_weights = true - -[[reasoning_options]] -type = "toggle" - -[cost] -cache_read = 0.38 -input = 1.90 -output = 8.00 - -[limit] -context = 262_000 -output = 262_000 - -[modalities] -input = ["text", "image"] -output = ["text"] - -[interleaved] -field = "reasoning_content" diff --git a/providers/fireworks-ai/models/accounts/fireworks/routers/kimi-latest.toml b/providers/fireworks-ai/models/accounts/fireworks/routers/kimi-latest.toml new file mode 100644 index 00000000000..53861f148c0 --- /dev/null +++ b/providers/fireworks-ai/models/accounts/fireworks/routers/kimi-latest.toml @@ -0,0 +1,41 @@ +# Version-tracking Standard-path router for the current Kimi flagship +# (currently Kimi K3). Short ID `kimi-latest` expands to +# accounts/fireworks/routers/kimi-latest. +# https://docs.fireworks.ai/ecosystem/fireconnect/models +# Pricing matches Kimi K3 Standard / Priority (USD per 1M tokens): +# Standard $3.00 / $0.30 / $15.00, Priority $3.75 / $0.375 / $18.75 +# https://docs.fireworks.ai/serverless/pricing +# Toggle: thinking.type = enabled|disabled +# Effort: reasoning_effort = low|medium|high|max +# Budget: thinking.budget_tokens (min 1024; conflicts with reasoning_effort) +# https://docs.fireworks.ai/guides/reasoning +base_model = "moonshotai/kimi-k3" +name = "Kimi Latest" +release_date = "2026-07-27" +last_updated = "2026-09-15" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" +min = 1_024 + +[cost] +input = 3 +output = 15 +cache_read = 0.3 + +[modalities] +input = ["text", "image"] + +[experimental.modes.priority] +cost = { input = 3.75, output = 18.75, cache_read = 0.375 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/fireworks-ai/models/accounts/fireworks/routers/minimax-latest.toml b/providers/fireworks-ai/models/accounts/fireworks/routers/minimax-latest.toml new file mode 100644 index 00000000000..3a4afb34e7f --- /dev/null +++ b/providers/fireworks-ai/models/accounts/fireworks/routers/minimax-latest.toml @@ -0,0 +1,41 @@ +# Version-tracking router for the latest MiniMax model on Fireworks Serverless. +# Currently resolves to accounts/fireworks/models/minimax-m3 (MiniMax M3): +# - https://docs.fireworks.ai/ecosystem/fireconnect/models (minimax-latest) +# - FireConnect ROUTER_SPEC_ALIASES: "minimax-latest" -> "minimax-m3" +# https://github.com/fw-ai/fireconnect/blob/0ff8a6c5/packages/setup-cli/lib/fireworks/model-specs.mjs +# Pricing matches MiniMax M3 standard serverless (input / cached input / output): +# $0.30 / $0.06 / $1.20; Priority $0.45 / $0.09 / $1.80 +# - https://docs.fireworks.ai/serverless/pricing +# - https://fireworks.ai/models/fireworks/minimax-m3 +# Context/output ceilings and text-only modalities match the pinned minimax-m3 +# sibling on this host (Fireworks serverless context 512k). +# Effort: $.reasoning_effort = "low" | "medium" | "high" (same surface as +# accounts/fireworks/models/minimax-m3). +# https://docs.fireworks.ai/guides/reasoning +base_model = "minimax/MiniMax-M3" +name = "MiniMax Latest" +release_date = "2026-06-12" +last_updated = "2026-09-15" +attachment = false + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.06 + +[limit] +context = 512_000 + +[modalities] +input = ["text"] + +[experimental.modes.priority] +cost = { input = 0.45, output = 1.8, cache_read = 0.09 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/fireworks-ai/models/accounts/fireworks/routers/qwen-max-latest.toml b/providers/fireworks-ai/models/accounts/fireworks/routers/qwen-max-latest.toml new file mode 100644 index 00000000000..f0ec43be08c --- /dev/null +++ b/providers/fireworks-ai/models/accounts/fireworks/routers/qwen-max-latest.toml @@ -0,0 +1,26 @@ +# Version-tracking standard-path alias for Qwen 3.8 Max, advertised by +# https://api.fireworks.ai/v1/serverless/models on 2026-09-16 as +# accounts/fireworks/routers/qwen-max-latest. The same response supplies +# standard and Priority pricing, text/image input, and the Priority recipe. +# Toggle: thinking.type = enabled|disabled (matches the pinned Qwen 3.8 Max route). +base_model = "alibaba/qwen3.8-max" +name = "Qwen Max Latest (Qwen3.8 Max)" +last_updated = "2026-09-16" + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 2 +output = 6 +cache_read = 0.25 + +[limit] +context = 262_144 + +[modalities] +input = ["text", "image"] + +[experimental.modes.priority] +cost = { input = 3, output = 9, cache_read = 0.375 } +provider = { body = { service_tier = "priority" } } diff --git a/providers/friendli/models/MiniMaxAI/MiniMax-M2.5.toml b/providers/friendli/models/MiniMaxAI/MiniMax-M2.5.toml index 9fa904e270b..82bcc78bb46 100644 --- a/providers/friendli/models/MiniMaxAI/MiniMax-M2.5.toml +++ b/providers/friendli/models/MiniMaxAI/MiniMax-M2.5.toml @@ -1,13 +1,14 @@ +# Budget: reasoning_budget = positive integer reasoning-token cap (-1 = unlimited) +# https://friendli.ai/docs/openapi/model-apis/chat-completions#body-reasoning-budget-one-of-0 base_model = "minimax/MiniMax-M2.5" -name = "MiniMax-M2.5" -release_date = "2026-02-12" -last_updated = "2026-02-12" structured_output = true -reasoning_options = [] [interleaved] field = "reasoning_content" +[[reasoning_options]] +type = "budget_tokens" + [cost] input = 0.3 output = 1.2 @@ -15,4 +16,3 @@ cache_read = 0.06 [limit] context = 196_608 -output = 196_608 diff --git a/providers/friendli/models/deepseek-ai/DeepSeek-V3.2.toml b/providers/friendli/models/deepseek-ai/DeepSeek-V3.2.toml index 4714efddca6..4dfa7122d90 100644 --- a/providers/friendli/models/deepseek-ai/DeepSeek-V3.2.toml +++ b/providers/friendli/models/deepseek-ai/DeepSeek-V3.2.toml @@ -1,19 +1,18 @@ -name = "DeepSeek-V3.2" -description = "DeepSeek chat model for instruction following, coding, and analysis" -family = "deepseek" -attachment = false -reasoning = true -reasoning_options = [{ type = "toggle" }] -tool_call = true -structured_output = true -temperature = true -release_date = "2025-12-01" -last_updated = "2025-12-01" -open_weights = true +# Toggle: chat_template_kwargs.enable_thinking = true | false +# https://friendli.ai/docs/guides/reasoning +# Budget: reasoning_budget = positive integer reasoning-token cap (-1 = unlimited) +# https://friendli.ai/docs/openapi/model-apis/chat-completions#body-reasoning-budget-one-of-0 +base_model = "deepseek/deepseek-v3.2" [interleaved] field = "reasoning_content" +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "budget_tokens" + [cost] input = 0.5 output = 1.5 @@ -21,8 +20,3 @@ cache_read = 0.25 [limit] context = 163_840 -output = 163_840 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/friendli/models/google/gemma-4-31B-it.toml b/providers/friendli/models/google/gemma-4-31B-it.toml index cd945119017..e6094afcc7e 100644 --- a/providers/friendli/models/google/gemma-4-31B-it.toml +++ b/providers/friendli/models/google/gemma-4-31B-it.toml @@ -1,5 +1,17 @@ +# Toggle: chat_template_kwargs.enable_thinking = true | false +# https://friendli.ai/docs/guides/reasoning +# Budget: reasoning_budget = positive integer reasoning-token cap (-1 = unlimited) +# https://friendli.ai/docs/openapi/model-apis/chat-completions#body-reasoning-budget-one-of-0 base_model = "google/gemma-4-31b-it" -reasoning_options = [{ type = "toggle" }] + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "budget_tokens" [cost] input = 0.14 diff --git a/providers/friendli/models/zai-org/GLM-5.1.toml b/providers/friendli/models/zai-org/GLM-5.1.toml index 1ee4131636b..d97a8d26dda 100644 --- a/providers/friendli/models/zai-org/GLM-5.1.toml +++ b/providers/friendli/models/zai-org/GLM-5.1.toml @@ -1,13 +1,18 @@ +# Toggle: chat_template_kwargs.enable_thinking = true | false +# https://friendli.ai/docs/guides/reasoning +# Budget: reasoning_budget = positive integer reasoning-token cap (-1 = unlimited) +# https://friendli.ai/docs/openapi/model-apis/chat-completions#body-reasoning-budget-one-of-0 base_model = "zhipuai/glm-5.1" -name = "GLM-5.1" -release_date = "2026-04-07" -last_updated = "2026-04-07" -structured_output = true -reasoning_options = [] [interleaved] field = "reasoning_content" +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "budget_tokens" + [cost] input = 1.4 output = 4.4 @@ -15,4 +20,3 @@ cache_read = 0.26 [limit] context = 202_752 -output = 202_752 diff --git a/providers/friendli/models/zai-org/GLM-5.2.toml b/providers/friendli/models/zai-org/GLM-5.2.toml index 81fbbb90c49..187d5de39d0 100644 --- a/providers/friendli/models/zai-org/GLM-5.2.toml +++ b/providers/friendli/models/zai-org/GLM-5.2.toml @@ -1,17 +1,28 @@ -name = "GLM-5.2" -# Friendli documents only $.chat_template_kwargs.enable_thinking = true | false -# for this model, not the configured effort values "high" and "max". -# https://friendli.ai/docs/guides/reasoning (accessed 2026-06-25) +# Toggle: chat_template_kwargs.enable_thinking = true | false +# https://friendli.ai/docs/guides/reasoning +# Effort: reasoning_effort = "high" | "max" +# https://friendli.ai/docs/openapi/model-apis/chat-completions#body-reasoning-effort-one-of-0 +# Budget: reasoning_budget = positive integer reasoning-token cap (-1 = unlimited) +# https://friendli.ai/docs/openapi/model-apis/chat-completions#body-reasoning-budget-one-of-0 base_model = "zhipuai/glm-5.2" +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "toggle" + [[reasoning_options]] type = "effort" values = ["high", "max"] -[interleaved] -field = "reasoning_content" +[[reasoning_options]] +type = "budget_tokens" [cost] input = 1.4 output = 4.4 -cache_read = 0.26 \ No newline at end of file +cache_read = 0.26 + +[limit] +context = 1_048_576 diff --git a/providers/friendli/models/zai-org/GLM-5.3-Flash.toml b/providers/friendli/models/zai-org/GLM-5.3-Flash.toml new file mode 100644 index 00000000000..7d25fca9c7b --- /dev/null +++ b/providers/friendli/models/zai-org/GLM-5.3-Flash.toml @@ -0,0 +1,26 @@ +# Effort: reasoning_effort = "low" | "high" | "max" +# https://friendli.ai/docs/openapi/model-apis/chat-completions#body-reasoning-effort-one-of-0 +# Budget: reasoning_budget = positive integer reasoning-token cap (-1 = unlimited) +# https://friendli.ai/docs/openapi/model-apis/chat-completions#body-reasoning-budget-one-of-0 +base_model = "zhipuai/glm-5.3-flash" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.03 + +[limit] +context = 1_048_576 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/friendli/models/zai-org/GLM-5.3.toml b/providers/friendli/models/zai-org/GLM-5.3.toml new file mode 100644 index 00000000000..baad00a0786 --- /dev/null +++ b/providers/friendli/models/zai-org/GLM-5.3.toml @@ -0,0 +1,23 @@ +# Effort: reasoning_effort = "low" | "high" | "max" +# https://friendli.ai/docs/openapi/model-apis/chat-completions#body-reasoning-effort-one-of-0 +# Budget: reasoning_budget = positive integer reasoning-token cap (-1 = unlimited) +# https://friendli.ai/docs/openapi/model-apis/chat-completions#body-reasoning-budget-one-of-0 +base_model = "zhipuai/glm-5.3" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 1.26 +output = 3.96 +cache_read = 0.234 + +[limit] +context = 1_048_576 diff --git a/providers/friendli/provider.toml b/providers/friendli/provider.toml index 7b619647048..38b3260c369 100644 --- a/providers/friendli/provider.toml +++ b/providers/friendli/provider.toml @@ -1,7 +1,11 @@ name = "Friendli" -# Reasoning HTTP format (accessed 2026-06-25): POST /serverless/v1/chat/completions. -# Toggle: chat_template_kwargs.enable_thinking = true | false; support is -# model-specific. No effort or reasoning-token budget field is documented. +# Reasoning HTTP format (accessed 2026-08-29): POST /serverless/v1/chat/completions. +# Toggle: chat_template_kwargs.enable_thinking = true | false; support is model-specific. +# Effort: reasoning_effort = minimal|low|medium|high|xhigh|max|ultracode; reasoning +# models only, available options depend on the model. +# Budget: reasoning_budget (positive integer reasoning-token cap); reasoning models only. +# https://friendli.ai/docs/openapi/model-apis/chat-completions#body-reasoning-effort-one-of-0 +# https://friendli.ai/docs/openapi/model-apis/chat-completions#body-reasoning-budget-one-of-0 # https://friendli.ai/docs/guides/reasoning env = ["FRIENDLI_TOKEN"] npm = "@ai-sdk/openai-compatible" diff --git a/providers/github-copilot/models/claude-fable-5.1.toml b/providers/github-copilot/models/claude-fable-5.1.toml new file mode 100644 index 00000000000..8cc14c5ec61 --- /dev/null +++ b/providers/github-copilot/models/claude-fable-5.1.toml @@ -0,0 +1,11 @@ +# Sources: +# - https://github.blog/changelog/2026-09-01-claude-fable-5-1-generally-available-in-github-copilot +# - https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing +base_model = "anthropic/claude-fable-5-1" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 diff --git a/providers/github-copilot/models/claude-opus-4.5.toml b/providers/github-copilot/models/claude-opus-4.5.toml deleted file mode 100644 index 7d1d43dd490..00000000000 --- a/providers/github-copilot/models/claude-opus-4.5.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "anthropic/claude-opus-4-5" -reasoning_options = [{ type = "budget_tokens", min = 1_024, max = 32_000 }] - -[cost] -input = 5 -output = 25 -cache_read = 0.5 -cache_write = 6.25 - -[limit] -input = 168_000 -output = 32_000 diff --git a/providers/github-copilot/models/claude-opus-4.6.toml b/providers/github-copilot/models/claude-opus-4.6.toml deleted file mode 100644 index fbbf9fd23e2..00000000000 --- a/providers/github-copilot/models/claude-opus-4.6.toml +++ /dev/null @@ -1,17 +0,0 @@ -base_model = "anthropic/claude-opus-4-6" -reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "max"] }] - -[cost] -input = 5 -output = 25 -cache_read = 0.5 -cache_write = 6.25 - -[limit] -context = 200_000 -input = 168_000 -output = 32_000 - -[experimental.modes.fast] -cost = { input = 30, output = 150, cache_read = 3, cache_write = 37.5 } -provider = { body = { speed = "fast" }, headers = { anthropic-beta = "fast-mode-2026-02-01" } } diff --git a/providers/github-copilot/models/claude-opus-5.5.toml b/providers/github-copilot/models/claude-opus-5.5.toml new file mode 100644 index 00000000000..6e3f31961a6 --- /dev/null +++ b/providers/github-copilot/models/claude-opus-5.5.toml @@ -0,0 +1,13 @@ +# Sources: +# - https://github.blog/changelog/2026-09-22-claude-opus-5-5-is-now-available-in-github-copilot/ +# - https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing +# - https://www.anthropic.com/claude-opus-5-5 +# - https://platform.claude.com/docs/en/models/opus-5-5/overview +base_model = "anthropic/claude-opus-5-5" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 4 +output = 20 +cache_read = 0.2 +cache_write = 5 diff --git a/providers/github-copilot/models/claude-sonnet-4.5.toml b/providers/github-copilot/models/claude-sonnet-4.5.toml deleted file mode 100644 index 096431de139..00000000000 --- a/providers/github-copilot/models/claude-sonnet-4.5.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "anthropic/claude-sonnet-4-5" -reasoning_options = [{ type = "budget_tokens", min = 1_024, max = 32_000 }] - -[cost] -input = 3 -output = 15 -cache_read = 0.3 -cache_write = 3.75 - -[limit] -input = 168_000 -output = 32_000 diff --git a/providers/github-copilot/models/claude-sonnet-4.toml b/providers/github-copilot/models/claude-sonnet-4.toml deleted file mode 100644 index 9e9ade55dea..00000000000 --- a/providers/github-copilot/models/claude-sonnet-4.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "anthropic/claude-sonnet-4-0" -reasoning_options = [] - -[cost] -input = 3 -output = 15 -cache_read = 0.3 -cache_write = 3.75 - -[limit] -context = 216_000 -input = 128_000 -output = 16_000 diff --git a/providers/github-copilot/models/gemini-3.1-pro-preview.toml b/providers/github-copilot/models/gemini-3.1-pro-preview.toml deleted file mode 100644 index 01991d61de1..00000000000 --- a/providers/github-copilot/models/gemini-3.1-pro-preview.toml +++ /dev/null @@ -1,18 +0,0 @@ -base_model = "google/gemini-3.1-pro-preview" -reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }, { type = "budget_tokens", min = 256, max = 32_000 }] - -[cost] -input = 2 -output = 12 -cache_read = 0.2 - -[[cost.tiers]] -tier = { type = "context", size = 200_000 } -input = 4 -output = 18 -cache_read = 0.4 - -[limit] -context = 1_000_000 -input = 936_000 -output = 64_000 diff --git a/providers/github-copilot/models/gemini-3.6-flash.toml b/providers/github-copilot/models/gemini-3.6-flash.toml index e6fab531054..bbb6d9fcae4 100644 --- a/providers/github-copilot/models/gemini-3.6-flash.toml +++ b/providers/github-copilot/models/gemini-3.6-flash.toml @@ -1,10 +1,19 @@ +# Pricing: https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing base_model = "google/gemini-3.6-flash" -reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }, { type = "budget_tokens", min = 256, max = 32_000 }] + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high"] + +[[reasoning_options]] +type = "budget_tokens" +min = 256 +max = 32_000 [cost] -input = 1.5 -output = 7.5 -cache_read = 0.15 +input = 0.75 +output = 3.75 +cache_read = 0.075 [limit] context = 1_000_000 diff --git a/providers/github-copilot/models/gemini-3.8-flash.toml b/providers/github-copilot/models/gemini-3.8-flash.toml new file mode 100644 index 00000000000..74432656991 --- /dev/null +++ b/providers/github-copilot/models/gemini-3.8-flash.toml @@ -0,0 +1,21 @@ +# Sources: +# - https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing +# - https://docs.github.com/en/copilot/reference/ai-models/supported-models +# - https://api.githubcopilot.com/models +# Pricing: Gemini 3.8 Flash promo $0.75/$0.075/$3.75 per 1M tokens through 2026-12-31 +# Reasoning: effort low|medium|high (matches lab + github-copilot gemini-3.7-flash peer) +base_model = "google/gemini-3.8-flash" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[cost] +input = 0.75 +output = 3.75 +cache_read = 0.075 + +[limit] +context = 1_000_000 +input = 936_000 +output = 64_000 + +[modalities] +input = ["text", "image"] diff --git a/providers/github-copilot/models/gpt-4.1.toml b/providers/github-copilot/models/gpt-4.1.toml deleted file mode 100644 index e8b167e7baa..00000000000 --- a/providers/github-copilot/models/gpt-4.1.toml +++ /dev/null @@ -1,11 +0,0 @@ -base_model = "openai/gpt-4.1" - -[cost] -input = 2 -output = 8 -cache_read = 0.5 - -[limit] -context = 128_000 -input = 128_000 -output = 16_384 diff --git a/providers/github-copilot/models/gpt-5.2-codex.toml b/providers/github-copilot/models/gpt-5.2-codex.toml deleted file mode 100644 index a03382c9d90..00000000000 --- a/providers/github-copilot/models/gpt-5.2-codex.toml +++ /dev/null @@ -1,7 +0,0 @@ -base_model = "openai/gpt-5.2-codex" -reasoning_options = [] - -[cost] -input = 1.75 -output = 14 -cache_read = 0.175 diff --git a/providers/github-copilot/models/gpt-5.2.toml b/providers/github-copilot/models/gpt-5.2.toml deleted file mode 100644 index 4f38ef3d4dc..00000000000 --- a/providers/github-copilot/models/gpt-5.2.toml +++ /dev/null @@ -1,7 +0,0 @@ -base_model = "openai/gpt-5.2" -reasoning_options = [] - -[cost] -input = 1.75 -output = 14 -cache_read = 0.175 diff --git a/providers/github-copilot/models/gpt-5.6-luna.toml b/providers/github-copilot/models/gpt-5.6-luna.toml index 2521a9108ab..9adeea21314 100644 --- a/providers/github-copilot/models/gpt-5.6-luna.toml +++ b/providers/github-copilot/models/gpt-5.6-luna.toml @@ -1,15 +1,19 @@ # Pricing: https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing -# GPT-5.6 Luna reduced rates (matches OpenAI 2026-07-30 cut); long-context threshold >200K base_model = "openai/gpt-5.6-luna" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 0.20 -output = 1.20 +input = 0.2 +output = 1.2 cache_read = 0.02 +cache_write = 0.25 [[cost.tiers]] tier = { type = "context", size = 200_000 } -input = 0.40 -output = 1.80 +input = 0.4 +output = 1.8 cache_read = 0.04 +cache_write = 0.5 diff --git a/providers/github-copilot/models/gpt-5.6-sol.toml b/providers/github-copilot/models/gpt-5.6-sol.toml index 0e083daa0c9..b43e647a519 100644 --- a/providers/github-copilot/models/gpt-5.6-sol.toml +++ b/providers/github-copilot/models/gpt-5.6-sol.toml @@ -1,19 +1,20 @@ -# Source: https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing -# GPT-5.6 Sol promotional pricing (50% off standard rates) through September 3, 2026. -# Default ≤272K: $2.50 / $0.25 / $3.125 / $15.00 (input / cache_read / cache_write / output) -# Long context >272K: $5.00 / $0.50 / $6.25 / $22.50 +# Pricing: https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing +# GPT-5.6 Sol standard rates (promo ended): ≤272K $4/$0.40/$5/$20; >272K $8/$0.80/$10/$30 per 1M base_model = "openai/gpt-5.6-sol" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 2.5 -output = 15 -cache_read = 0.25 -cache_write = 3.125 +input = 4 +output = 20 +cache_read = 0.4 +cache_write = 5 [[cost.tiers]] tier = { type = "context", size = 272_000 } -input = 5 -output = 22.5 -cache_read = 0.5 -cache_write = 6.25 +input = 8 +output = 30 +cache_read = 0.8 +cache_write = 10 diff --git a/providers/github-copilot/models/gpt-5.6-terra.toml b/providers/github-copilot/models/gpt-5.6-terra.toml index ad20e81d801..a61acebebe7 100644 --- a/providers/github-copilot/models/gpt-5.6-terra.toml +++ b/providers/github-copilot/models/gpt-5.6-terra.toml @@ -1,15 +1,19 @@ # Pricing: https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing -# GPT-5.6 Terra reduced rates (matches OpenAI 2026-07-30 cut); long-context threshold >272K base_model = "openai/gpt-5.6-terra" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 2.00 -output = 12.00 -cache_read = 0.20 +input = 2 +output = 12 +cache_read = 0.2 +cache_write = 2.5 [[cost.tiers]] tier = { type = "context", size = 272_000 } -input = 4.00 -output = 18.00 -cache_read = 0.40 +input = 4 +output = 18 +cache_read = 0.4 +cache_write = 5 diff --git a/providers/github-copilot/models/gpt-6-astra.toml b/providers/github-copilot/models/gpt-6-astra.toml new file mode 100644 index 00000000000..73551409384 --- /dev/null +++ b/providers/github-copilot/models/gpt-6-astra.toml @@ -0,0 +1,20 @@ +# Pricing: https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing +# GPT-6 Astra rates: ≤272K $10/$1/$12.50/$50; >272K $20/$2/$25/$75 per 1M (input/cached/cache write/output) +base_model = "openai/gpt-6-astra" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 20 +output = 75 +cache_read = 2 +cache_write = 25 diff --git a/providers/github-copilot/models/gpt-6-luna.toml b/providers/github-copilot/models/gpt-6-luna.toml new file mode 100644 index 00000000000..bd1d21a407f --- /dev/null +++ b/providers/github-copilot/models/gpt-6-luna.toml @@ -0,0 +1,20 @@ +# Pricing: https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing +# GPT-6 Luna rates: ≤272K $0.10/$0.01/$0.125/$0.50; >272K $0.20/$0.02/$0.25/$0.75 per 1M (input/cached/cache write/output) +base_model = "openai/gpt-6-luna" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.1 +output = 0.5 +cache_read = 0.01 +cache_write = 0.125 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 0.2 +output = 0.75 +cache_read = 0.02 +cache_write = 0.25 diff --git a/providers/github-copilot/models/gpt-6-sol.toml b/providers/github-copilot/models/gpt-6-sol.toml new file mode 100644 index 00000000000..209b909b0be --- /dev/null +++ b/providers/github-copilot/models/gpt-6-sol.toml @@ -0,0 +1,20 @@ +# Pricing: https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing +# GPT-6 Sol rates: ≤272K $2/$0.20/$2.50/$10; >272K $4/$0.40/$5.00/$15 per 1M (input/cached/cache write/output) +base_model = "openai/gpt-6-sol" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 4 +output = 15 +cache_read = 0.4 +cache_write = 5 diff --git a/providers/github-copilot/models/grok-4.7.toml b/providers/github-copilot/models/grok-4.7.toml new file mode 100644 index 00000000000..25d6bf546e2 --- /dev/null +++ b/providers/github-copilot/models/grok-4.7.toml @@ -0,0 +1,24 @@ +# Sources: +# - https://github.blog/changelog/2026-09-21-grok-4-7-is-now-available-in-github-copilot/ +# - https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing +# - https://docs.github.com/en/copilot/reference/ai-models/supported-models +# - https://docs.x.ai/developers/models/grok-4.7 +# - https://docs.x.ai/developers/pricing +base_model = "xai/grok-4.7" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh"] }] + +[cost] +input = 2 +output = 6 +cache_read = 0.5 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 4 +output = 12 +cache_read = 1 + +[limit] +context = 500_000 +input = 372_000 +output = 128_000 diff --git a/providers/gitlab/models/duo-chat-fable-5-1.toml b/providers/gitlab/models/duo-chat-fable-5-1.toml new file mode 100644 index 00000000000..1379d3f11bf --- /dev/null +++ b/providers/gitlab/models/duo-chat-fable-5-1.toml @@ -0,0 +1,9 @@ +base_model = "anthropic/claude-fable-5-1" +name = "Agentic Chat (Claude Fable 5.1)" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 0 +output = 0 +cache_read = 0 +cache_write = 0 diff --git a/providers/gitlab/models/duo-chat-gpt-5-6-luna.toml b/providers/gitlab/models/duo-chat-gpt-5-6-luna.toml index 8c5a15f1803..7a4793159c4 100644 --- a/providers/gitlab/models/duo-chat-gpt-5-6-luna.toml +++ b/providers/gitlab/models/duo-chat-gpt-5-6-luna.toml @@ -1,6 +1,6 @@ base_model = "openai/gpt-5.6-luna" name = "Agentic Chat (GPT-5.6 Luna)" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] [cost] input = 0 diff --git a/providers/gitlab/models/duo-chat-gpt-5-6-sol.toml b/providers/gitlab/models/duo-chat-gpt-5-6-sol.toml index a7e940cad4b..98fbc75111f 100644 --- a/providers/gitlab/models/duo-chat-gpt-5-6-sol.toml +++ b/providers/gitlab/models/duo-chat-gpt-5-6-sol.toml @@ -1,6 +1,6 @@ base_model = "openai/gpt-5.6-sol" name = "Agentic Chat (GPT-5.6 Sol)" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] [cost] input = 0 diff --git a/providers/gitlab/models/duo-chat-gpt-5-6-terra.toml b/providers/gitlab/models/duo-chat-gpt-5-6-terra.toml index 7dc3cceb9c1..14e0e617968 100644 --- a/providers/gitlab/models/duo-chat-gpt-5-6-terra.toml +++ b/providers/gitlab/models/duo-chat-gpt-5-6-terra.toml @@ -1,6 +1,6 @@ base_model = "openai/gpt-5.6-terra" name = "Agentic Chat (GPT-5.6 Terra)" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] [cost] input = 0 diff --git a/providers/gitlab/models/duo-chat-gpt-6-astra.toml b/providers/gitlab/models/duo-chat-gpt-6-astra.toml new file mode 100644 index 00000000000..55ba068c60b --- /dev/null +++ b/providers/gitlab/models/duo-chat-gpt-6-astra.toml @@ -0,0 +1,9 @@ +base_model = "openai/gpt-6-astra" +name = "Agentic Chat (GPT-6 Astra)" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 0 +output = 0 +cache_read = 0 +cache_write = 0 diff --git a/providers/gitlab/models/duo-chat-opus-4-8.toml b/providers/gitlab/models/duo-chat-opus-4-8.toml index 6855a9124e2..bc0ab16ca76 100644 --- a/providers/gitlab/models/duo-chat-opus-4-8.toml +++ b/providers/gitlab/models/duo-chat-opus-4-8.toml @@ -5,7 +5,7 @@ release_date = "2026-05-28" last_updated = "2026-05-28" attachment = true reasoning = true -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] temperature = false tool_call = true knowledge = "2026-01-31" diff --git a/providers/gitlab/models/duo-chat-opus-5-5.toml b/providers/gitlab/models/duo-chat-opus-5-5.toml new file mode 100644 index 00000000000..acfba463a94 --- /dev/null +++ b/providers/gitlab/models/duo-chat-opus-5-5.toml @@ -0,0 +1,9 @@ +base_model = "anthropic/claude-opus-5-5" +name = "Agentic Chat (Claude Opus 5.5)" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 0 +output = 0 +cache_read = 0 +cache_write = 0 diff --git a/providers/gitlab/provider.toml b/providers/gitlab/provider.toml index d9c42b94a22..fda87c1b1f0 100644 --- a/providers/gitlab/provider.toml +++ b/providers/gitlab/provider.toml @@ -1,7 +1,4 @@ -name = "GitLab Duo" -env = ["GITLAB_TOKEN"] -npm = "gitlab-ai-provider" -# Raw HTTP reasoning controls (sources accessed 2026-06-25): +# Reasoning controls (sources accessed 2026-09-04): # - OpenAI Chat: POST /ai/v1/proxy/openai/v1/chat/completions uses top-level # `reasoning_effort`; Responses: POST /ai/v1/proxy/openai/v1/responses uses # `reasoning = { effort = "..." }`. @@ -11,11 +8,12 @@ npm = "gitlab-ai-provider" # `thinking = { type = "enabled", budget_tokens = N }` or # `thinking = { type = "disabled" }`; effort is `output_config.effort`. # https://docs.anthropic.com/en/api/messages -# The npm provider obtains a direct-access token, points the native SDKs at -# those proxy bases, but builds fixed request bodies without reasoning fields; -# it does not expose a reasoning passthrough. These raw shapes therefore do not -# make `reasoning_options` available through this configured npm integration. +# gitlab-ai-provider 6.14.0 exposes OpenAI `reasoningEffort` and Anthropic +# `thinking` options through model defaults and per-call provider options. # https://gitlab.com/vglafirov/gitlab-ai-provider/-/blob/main/src/gitlab-direct-access.ts # https://gitlab.com/vglafirov/gitlab-ai-provider/-/blob/main/src/gitlab-openai-language-model.ts # https://gitlab.com/vglafirov/gitlab-ai-provider/-/blob/main/src/gitlab-anthropic-language-model.ts +name = "GitLab Duo" +env = ["GITLAB_TOKEN"] +npm = "gitlab-ai-provider" doc = "https://docs.gitlab.com/user/duo_agent_platform/" diff --git a/providers/google-vertex-anthropic/models/claude-fable-5-1@default.toml b/providers/google-vertex-anthropic/models/claude-fable-5-1@default.toml new file mode 100644 index 00000000000..65d3cdf102d --- /dev/null +++ b/providers/google-vertex-anthropic/models/claude-fable-5-1@default.toml @@ -0,0 +1,9 @@ +base_model = "anthropic/claude-fable-5-1" +structured_output = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 diff --git a/providers/google-vertex-anthropic/models/claude-opus-5-5@default.toml b/providers/google-vertex-anthropic/models/claude-opus-5-5@default.toml new file mode 100644 index 00000000000..cede54eca95 --- /dev/null +++ b/providers/google-vertex-anthropic/models/claude-opus-5-5@default.toml @@ -0,0 +1,9 @@ +base_model = "anthropic/claude-opus-5-5" +structured_output = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 4 +output = 20 +cache_read = 0.2 +cache_write = 5 diff --git a/providers/google-vertex/models/claude-fable-5-1@default.toml b/providers/google-vertex/models/claude-fable-5-1@default.toml new file mode 100644 index 00000000000..83568ba4aeb --- /dev/null +++ b/providers/google-vertex/models/claude-fable-5-1@default.toml @@ -0,0 +1,12 @@ +base_model = "anthropic/claude-fable-5-1" +structured_output = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 + +[provider] +npm = "@ai-sdk/google-vertex/anthropic" diff --git a/providers/google-vertex/models/claude-opus-5-5@default.toml b/providers/google-vertex/models/claude-opus-5-5@default.toml new file mode 100644 index 00000000000..8a2a18a47c1 --- /dev/null +++ b/providers/google-vertex/models/claude-opus-5-5@default.toml @@ -0,0 +1,12 @@ +base_model = "anthropic/claude-opus-5-5" +structured_output = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 4 +output = 20 +cache_read = 0.2 +cache_write = 5 + +[provider] +npm = "@ai-sdk/google-vertex/anthropic" diff --git a/providers/google-vertex/models/gemini-3.8-flash.toml b/providers/google-vertex/models/gemini-3.8-flash.toml new file mode 100644 index 00000000000..b134b307f96 --- /dev/null +++ b/providers/google-vertex/models/gemini-3.8-flash.toml @@ -0,0 +1,11 @@ +# Sources: +# - https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing +# - https://ai.google.dev/gemini-api/docs/models/gemini-3.8-flash +base_model = "google/gemini-3.8-flash" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[cost] +input = 0.75 +output = 3.75 +cache_read = 0.075 +input_audio = 0.75 diff --git a/providers/google-vertex/models/openai/gpt-oss-120b-maas.toml b/providers/google-vertex/models/openai/gpt-oss-120b-maas.toml index d442d9715bc..d44155f7b7e 100644 --- a/providers/google-vertex/models/openai/gpt-oss-120b-maas.toml +++ b/providers/google-vertex/models/openai/gpt-oss-120b-maas.toml @@ -21,3 +21,7 @@ output = 32_768 [modalities] input = ["text"] output = ["text"] + +[provider] +npm = "@ai-sdk/openai-compatible" +api = "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" diff --git a/providers/google-vertex/models/openai/gpt-oss-20b-maas.toml b/providers/google-vertex/models/openai/gpt-oss-20b-maas.toml index 83c4ea25071..a17cc9ba22c 100644 --- a/providers/google-vertex/models/openai/gpt-oss-20b-maas.toml +++ b/providers/google-vertex/models/openai/gpt-oss-20b-maas.toml @@ -24,3 +24,7 @@ output = 32_768 [modalities] input = ["text"] output = ["text"] + +[provider] +npm = "@ai-sdk/openai-compatible" +api = "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" diff --git a/providers/google-vertex/models/xai/grok-4.1-fast-non-reasoning.toml b/providers/google-vertex/models/xai/grok-4.1-fast-non-reasoning.toml new file mode 100644 index 00000000000..d46be5858d7 --- /dev/null +++ b/providers/google-vertex/models/xai/grok-4.1-fast-non-reasoning.toml @@ -0,0 +1,18 @@ +# Sources: +# - https://docs.cloud.google.com/vertex-ai/generative-ai/docs/partner-models/grok/grok-4-1-fast +# - https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing +base_model = "xai/grok-4.1-fast" +description = "Fast Grok model for responsive chat, tool-assisted work, and low-latency responses" +status = "deprecated" + +[cost] +input = 0.2 +output = 0.5 +cache_read = 0.05 + +[limit] +context = 128_000 + +[provider] +npm = "@ai-sdk/openai-compatible" +api = "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" diff --git a/providers/google-vertex/models/xai/grok-4.1-fast-reasoning.toml b/providers/google-vertex/models/xai/grok-4.1-fast-reasoning.toml new file mode 100644 index 00000000000..842a77c5559 --- /dev/null +++ b/providers/google-vertex/models/xai/grok-4.1-fast-reasoning.toml @@ -0,0 +1,20 @@ +# Sources: +# - https://docs.cloud.google.com/vertex-ai/generative-ai/docs/partner-models/grok/grok-4-1-fast +# - https://docs.cloud.google.com/vertex-ai/generative-ai/docs/partner-models/grok/capabilities/reasoning +# - https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing +base_model = "xai/grok-4.1-fast-reasoning" +description = "Fast Grok model for responsive chat, reasoning, and tool-assisted work" +reasoning_options = [] +status = "deprecated" + +[cost] +input = 0.2 +output = 0.5 +cache_read = 0.05 + +[limit] +context = 128_000 + +[provider] +npm = "@ai-sdk/openai-compatible" +api = "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" diff --git a/providers/google-vertex/models/xai/grok-4.20-non-reasoning.toml b/providers/google-vertex/models/xai/grok-4.20-non-reasoning.toml new file mode 100644 index 00000000000..6d7b518406b --- /dev/null +++ b/providers/google-vertex/models/xai/grok-4.20-non-reasoning.toml @@ -0,0 +1,25 @@ +# Sources: +# - https://docs.cloud.google.com/vertex-ai/generative-ai/docs/partner-models/grok/grok-4-20 +# - https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing +base_model = "xai/grok-4.20-0309-non-reasoning" + +[cost] +input = 1.25 +output = 2.5 +cache_read = 0.2 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 2.5 +output = 5 +cache_read = 0.4 + +[limit] +context = 2_000_000 + +[modalities] +input = ["text", "image"] + +[provider] +npm = "@ai-sdk/openai-compatible" +api = "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" diff --git a/providers/google-vertex/models/xai/grok-4.20-reasoning.toml b/providers/google-vertex/models/xai/grok-4.20-reasoning.toml new file mode 100644 index 00000000000..5ddd9c53548 --- /dev/null +++ b/providers/google-vertex/models/xai/grok-4.20-reasoning.toml @@ -0,0 +1,27 @@ +# Sources: +# - https://docs.cloud.google.com/vertex-ai/generative-ai/docs/partner-models/grok/grok-4-20 +# - https://docs.cloud.google.com/vertex-ai/generative-ai/docs/partner-models/grok/capabilities/reasoning +# - https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing +base_model = "xai/grok-4.20-0309-reasoning" +reasoning_options = [] + +[cost] +input = 1.25 +output = 2.5 +cache_read = 0.2 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 2.5 +output = 5 +cache_read = 0.4 + +[limit] +context = 2_000_000 + +[modalities] +input = ["text", "image"] + +[provider] +npm = "@ai-sdk/openai-compatible" +api = "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" diff --git a/providers/google-vertex/models/xai/grok-4.3.toml b/providers/google-vertex/models/xai/grok-4.3.toml new file mode 100644 index 00000000000..926ef300cf9 --- /dev/null +++ b/providers/google-vertex/models/xai/grok-4.3.toml @@ -0,0 +1,28 @@ +# Sources: +# - https://docs.cloud.google.com/vertex-ai/generative-ai/docs/partner-models/grok/grok-4-3 +# - https://docs.cloud.google.com/vertex-ai/generative-ai/docs/partner-models/grok/capabilities/reasoning +# - https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing +base_model = "xai/grok-4.3" +reasoning_options = [] +status = "beta" + +[cost] +input = 1.25 +output = 2.5 +cache_read = 0.2 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 2.5 +output = 5 +cache_read = 0.4 + +[limit] +context = 200_000 + +[modalities] +input = ["text", "image"] + +[provider] +npm = "@ai-sdk/openai-compatible" +api = "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" diff --git a/providers/google-vertex/models/xai/grok-4.6.toml b/providers/google-vertex/models/xai/grok-4.6.toml new file mode 100644 index 00000000000..b9a3ebb2596 --- /dev/null +++ b/providers/google-vertex/models/xai/grok-4.6.toml @@ -0,0 +1,25 @@ +# Sources: +# - https://docs.cloud.google.com/vertex-ai/generative-ai/docs/partner-models/grok/grok-4-6 +# - https://docs.cloud.google.com/vertex-ai/generative-ai/docs/partner-models/grok/capabilities/reasoning +# - https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing +base_model = "xai/grok-4.6" +reasoning_options = [] +status = "beta" + +[cost] +input = 2 +output = 6 +cache_read = 0.5 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 4 +output = 12 +cache_read = 1 + +[limit] +context = 524_288 + +[provider] +npm = "@ai-sdk/openai-compatible" +api = "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" diff --git a/providers/google-vertex/models/zai-org/glm-5.2-maas.toml b/providers/google-vertex/models/zai-org/glm-5.2-maas.toml new file mode 100644 index 00000000000..f8680d8075c --- /dev/null +++ b/providers/google-vertex/models/zai-org/glm-5.2-maas.toml @@ -0,0 +1,24 @@ +# POST .../endpoints/openapi/chat/completions; toggle with +# $.chat_template_kwargs.enable_thinking = true | false. +# Sources: +# - https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/maas/zaiorg/glm-52 +# - https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing +base_model = "zhipuai/glm-5.2" +reasoning_options = [{ type = "toggle" }] +status = "beta" + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1.40 +output = 4.40 +cache_read = 0.14 + +[limit] +context = 1_000_000 +output = 64_000 + +[provider] +npm = "@ai-sdk/openai-compatible" +api = "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" diff --git a/providers/google/models/gemini-3-pro-image-preview.toml b/providers/google/models/gemini-3-pro-image-preview.toml index 64807b961ff..6ac9306cf6a 100644 --- a/providers/google/models/gemini-3-pro-image-preview.toml +++ b/providers/google/models/gemini-3-pro-image-preview.toml @@ -1,4 +1,5 @@ base_model = "google/gemini-3-pro-image-preview" +name = "Nano Banana Pro" reasoning_options = [] [cost] diff --git a/providers/google/models/gemini-3.8-flash.toml b/providers/google/models/gemini-3.8-flash.toml new file mode 100644 index 00000000000..071c149245f --- /dev/null +++ b/providers/google/models/gemini-3.8-flash.toml @@ -0,0 +1,14 @@ +# Sources: +# - https://ai.google.dev/gemini-api/docs/pricing +# - https://ai.google.dev/gemini-api/docs/latest-model +base_model = "google/gemini-3.8-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.75 +output = 3.75 +cache_read = 0.075 +input_audio = 0.75 diff --git a/providers/google/models/gemini-robotics-er-1.6-preview.toml b/providers/google/models/gemini-robotics-er-1.6-preview.toml deleted file mode 100644 index 826ca678aae..00000000000 --- a/providers/google/models/gemini-robotics-er-1.6-preview.toml +++ /dev/null @@ -1,18 +0,0 @@ -# Sources: -# - https://ai.google.dev/gemini-api/docs/pricing (Gemini Robotics-ER 1.6 Preview) -# - https://ai.google.dev/gemini-api/docs/robotics-overview (thinking_budget) -# - https://ai.google.dev/gemini-api/docs/models/gemini-robotics-er-1.6-preview - -base_model = "google/gemini-robotics-er-1.6-preview" - -[[reasoning_options]] -type = "toggle" # API: thinking_config.thinking_budget = 0 disables thinking - -[[reasoning_options]] -type = "budget_tokens" # API: thinking_config.thinking_budget -min = 0 - -[cost] -input = 1.0 -output = 5.0 -input_audio = 2.0 diff --git a/providers/greenpt/models/deepseek-v4.1-flash.toml b/providers/greenpt/models/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..28bd8e54523 --- /dev/null +++ b/providers/greenpt/models/deepseek-v4.1-flash.toml @@ -0,0 +1,13 @@ +# Cost: GreenPT EUR list prices converted at 1.1616 USD/EUR (ECB, 2026-09-10). +# Sources: https://docs.greenpt.ai/deepseek-v4-1-flash and https://docs.greenpt.ai/model-cards +# FX: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-usd.en.html +# GreenPT accepts reasoning_effort = none|minimal|low|medium|high. +# Source: https://docs.greenpt.ai/reasoning +# Cache writes are not charged: https://docs.greenpt.ai/prompt-caching +base_model = "deepseek/deepseek-v4.1-flash" +reasoning_options = [{ type = "effort", values = ["none", "minimal", "low", "medium", "high"] }] + +[cost] +input = 0.255552 +cache_read = 0.0127776 +output = 1.27776 diff --git a/providers/greenpt/models/glm-5.3-flash.toml b/providers/greenpt/models/glm-5.3-flash.toml new file mode 100644 index 00000000000..94a88aa1d38 --- /dev/null +++ b/providers/greenpt/models/glm-5.3-flash.toml @@ -0,0 +1,17 @@ +# Cost: GreenPT EUR list prices converted at 1.1614 USD/EUR (ECB, 2026-09-08). +# Sources: https://docs.greenpt.ai/pricing and https://docs.greenpt.ai/model-cards +# FX: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-usd.en.html +# GreenPT accepts reasoning_effort = none|minimal|low|medium|high. +# Source: https://docs.greenpt.ai/reasoning +# Cache writes are not charged: https://docs.greenpt.ai/prompt-caching +base_model = "zhipuai/glm-5.3-flash" +reasoning_options = [{ type = "effort", values = ["none", "minimal", "low", "medium", "high"] }] +attachment = false + +[modalities] +input = ["text"] + +[cost] +input = 0.127754 +cache_read = 0.0255508 +output = 0.511016 diff --git a/providers/greenpt/models/glm-5.3.toml b/providers/greenpt/models/glm-5.3.toml new file mode 100644 index 00000000000..a111f618605 --- /dev/null +++ b/providers/greenpt/models/glm-5.3.toml @@ -0,0 +1,13 @@ +# Cost: GreenPT EUR list prices converted at 1.1614 USD/EUR (ECB, 2026-09-08). +# Sources: https://docs.greenpt.ai/pricing and https://docs.greenpt.ai/model-cards +# FX: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-usd.en.html +# GreenPT accepts reasoning_effort = none|minimal|low|medium|high. +# Source: https://docs.greenpt.ai/reasoning +# Cache writes are not charged: https://docs.greenpt.ai/prompt-caching +base_model = "zhipuai/glm-5.3" +reasoning_options = [{ type = "effort", values = ["none", "minimal", "low", "medium", "high"] }] + +[cost] +input = 1.27754 +cache_read = 0.319385 +output = 5.11016 diff --git a/providers/groq/models/qwen/qwen3.8-27b.toml b/providers/groq/models/qwen/qwen3.8-27b.toml new file mode 100644 index 00000000000..623715d4605 --- /dev/null +++ b/providers/groq/models/qwen/qwen3.8-27b.toml @@ -0,0 +1,21 @@ +# Sources (accessed 2026-08-28): +# https://console.groq.com/docs/model/qwen/qwen3.8-27b +# https://console.groq.com/docs/models +# https://console.groq.com/docs/reasoning +# Effort: reasoning_effort = none|default|low|medium|high +# Pricing: $0.80/M input, $4.00/M output. Context 131_042, max output 16_384. +# Modalities on Groq: text + images in, text out (no video). Preview model. +base_model = "alibaba/qwen3.8-27b" +reasoning_options = [{ type = "effort", values = ["none", "default", "low", "medium", "high"] }] + +[cost] +input = 0.80 +output = 4.00 + +[limit] +context = 131_042 +output = 16_384 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/huggingface/models/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp.toml b/providers/huggingface/models/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp.toml new file mode 100644 index 00000000000..b6175614f9f --- /dev/null +++ b/providers/huggingface/models/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp.toml @@ -0,0 +1,15 @@ +# HF relay: reasoning_effort = low|high|max, matching the native model and relay peers. +# HF documents no shared thinking toggle or numeric reasoning budget. +# https://huggingface.co/docs/inference-providers/en/tasks/chat-completion (accessed 2026-09-03) +# https://api-docs.deepseek.com/guides/thinking_mode (accessed 2026-09-03) +base_model = "deepseek/deepseek-v4-flash-vision-exp" +description = "Fast DeepSeek model for efficient chat, coding help, and agent loops" +open_weights = true +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[cost] +input = 0.44 +output = 1.32 + +[limit] +context = 1_048_576 diff --git a/providers/huggingface/models/deepseek-ai/DeepSeek-V4.1-Flash.toml b/providers/huggingface/models/deepseek-ai/DeepSeek-V4.1-Flash.toml new file mode 100644 index 00000000000..4907c3e93df --- /dev/null +++ b/providers/huggingface/models/deepseek-ai/DeepSeek-V4.1-Flash.toml @@ -0,0 +1,12 @@ +# Effort: reasoning_effort = none|low|high|xhigh|max; none disables thinking. +# https://recipes.vllm.ai/deepseek-ai/DeepSeek-V4.1-Flash (accessed 2026-09-10) +base_model = "deepseek/deepseek-v4.1-flash" +description = "Fast DeepSeek model for efficient chat, coding help, and agent loops" +reasoning_options = [{ type = "effort", values = ["none", "low", "high", "xhigh", "max"] }] + +[cost] +input = 0.3 +output = 1.2 + +[limit] +context = 1_048_576 diff --git a/providers/huggingface/models/google/gemma-3-12b-it.toml b/providers/huggingface/models/google/gemma-3-12b-it.toml new file mode 100644 index 00000000000..0b84591264d --- /dev/null +++ b/providers/huggingface/models/google/gemma-3-12b-it.toml @@ -0,0 +1,7 @@ +base_model = "google/gemma-3-12b-it" +description = "Open Gemma instruction model for efficient chat and self-hosted deployments" +structured_output = true + +[cost] +input = 0.05 +output = 0.15 diff --git a/providers/huggingface/models/google/gemma-3-27b-it.toml b/providers/huggingface/models/google/gemma-3-27b-it.toml new file mode 100644 index 00000000000..92928c254f8 --- /dev/null +++ b/providers/huggingface/models/google/gemma-3-27b-it.toml @@ -0,0 +1,7 @@ +base_model = "google/gemma-3-27b-it" +description = "Open Gemma instruction model for efficient chat and self-hosted deployments" +structured_output = true + +[cost] +input = 0.08 +output = 0.16 diff --git a/providers/huggingface/models/google/gemma-3-4b-it.toml b/providers/huggingface/models/google/gemma-3-4b-it.toml new file mode 100644 index 00000000000..17d0868d8ba --- /dev/null +++ b/providers/huggingface/models/google/gemma-3-4b-it.toml @@ -0,0 +1,7 @@ +base_model = "google/gemma-3-4b-it" +description = "Open Gemma instruction model for efficient chat and self-hosted deployments" +structured_output = true + +[cost] +input = 0.05 +output = 0.1 diff --git a/providers/huggingface/models/tencent/Hy4-preview.toml b/providers/huggingface/models/tencent/Hy4-preview.toml new file mode 100644 index 00000000000..5a2ca915a5b --- /dev/null +++ b/providers/huggingface/models/tencent/Hy4-preview.toml @@ -0,0 +1,13 @@ +# Effort: reasoning_effort = none|high; high is the default. +# https://huggingface.co/tencent/Hy4-preview#quickstart +base_model = "tencent/hy4-preview" +description = "Tencent Hy reasoning model for coding, instruction following, and agent tasks" +structured_output = true +reasoning_options = [{ type = "effort", values = ["none", "high"] }] + +[cost] +input = 0.834 +output = 2.501 + +[limit] +context = 1_000_000 diff --git a/providers/huggingface/models/zai-org/GLM-4.7-Flash.toml b/providers/huggingface/models/zai-org/GLM-4.7-Flash.toml index b0524072f5c..aa24fe9b12f 100644 --- a/providers/huggingface/models/zai-org/GLM-4.7-Flash.toml +++ b/providers/huggingface/models/zai-org/GLM-4.7-Flash.toml @@ -1,6 +1,6 @@ name = "GLM-4.7-Flash" description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -family = "glm" +family = "glm-flash" release_date = "2025-08-08" last_updated = "2025-08-08" attachment = false diff --git a/providers/huggingface/models/zai-org/GLM-5.3-Flash.toml b/providers/huggingface/models/zai-org/GLM-5.3-Flash.toml index b37f2da2873..c89651d6d77 100644 --- a/providers/huggingface/models/zai-org/GLM-5.3-Flash.toml +++ b/providers/huggingface/models/zai-org/GLM-5.3-Flash.toml @@ -1,9 +1,10 @@ # Effort: reasoning_effort = low|high|max; thinking cannot be disabled. +# Native multimodal (image input); HF Inference Providers chat-completion supports image_url. # https://docs.z.ai/guides/llm/glm-5.3-flash +# https://huggingface.co/zai-org/GLM-5.3-Flash # https://huggingface.co/docs/inference-providers/tasks/chat-completion base_model = "zhipuai/glm-5.3-flash" description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -attachment = false open_weights = true reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] @@ -15,4 +16,4 @@ output = 0.5 context = 1_048_576 [modalities] -input = ["text"] +input = ["text", "image"] diff --git a/providers/huggingface/models/zai-org/GLM-5.3.toml b/providers/huggingface/models/zai-org/GLM-5.3.toml new file mode 100644 index 00000000000..63a6b009d06 --- /dev/null +++ b/providers/huggingface/models/zai-org/GLM-5.3.toml @@ -0,0 +1,15 @@ +# Effort: reasoning_effort = low|high|max; GLM-5.3 always reasons. +# HF exposes model/provider-specific effort; use the lab's supported levels. +# https://docs.z.ai/guides/llm/glm-5.3 +# https://huggingface.co/docs/inference-providers/en/tasks/chat-completion +base_model = "zhipuai/glm-5.3" +description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" +open_weights = true +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[cost] +input = 1.4 +output = 4.4 + +[limit] +context = 1_048_576 diff --git a/providers/hyper/models/deepseek-v4-flash-0731.toml b/providers/hyper/models/deepseek-v4-flash-0731.toml index 5bb961722a3..dda2f29cdd0 100644 --- a/providers/hyper/models/deepseek-v4-flash-0731.toml +++ b/providers/hyper/models/deepseek-v4-flash-0731.toml @@ -4,12 +4,9 @@ last_updated = "2026-08-02" [[reasoning_options]] type = "effort" -values = ["none", "low", "high", "max"] +values = ["low", "high", "max"] [cost] input = 0.44 output = 1.32 cache_read = 0.044 - -[limit] -context = 1_048_576 diff --git a/providers/hyper/models/deepseek-v4-pro-0813.toml b/providers/hyper/models/deepseek-v4-pro-0813.toml index 3ef1ae8a3a4..0dcacb83cab 100644 --- a/providers/hyper/models/deepseek-v4-pro-0813.toml +++ b/providers/hyper/models/deepseek-v4-pro-0813.toml @@ -4,7 +4,7 @@ last_updated = "2026-08-14" [[reasoning_options]] type = "effort" -values = ["none", "low", "high", "max"] +values = ["low", "high", "max"] [cost] input = 1.437216 @@ -12,5 +12,4 @@ output = 4.311648 cache_read = 0.047907 [limit] -context = 1_048_576 output = 262_144 diff --git a/providers/hyper/models/deepseek-v4.1-flash.toml b/providers/hyper/models/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..7fd6fdfb3b1 --- /dev/null +++ b/providers/hyper/models/deepseek-v4.1-flash.toml @@ -0,0 +1,14 @@ +base_model = "deepseek/deepseek-v4.1-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "xhigh"] + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.03 + +[limit] +context = 1_048_576 +output = 32_768 diff --git a/providers/hyper/models/gemma-4-26b-a4b-it.toml b/providers/hyper/models/gemma-4-26b-a4b-it.toml index 85218385ac6..dd4a8093488 100644 --- a/providers/hyper/models/gemma-4-26b-a4b-it.toml +++ b/providers/hyper/models/gemma-4-26b-a4b-it.toml @@ -5,9 +5,9 @@ attachment = false reasoning_options = [] [cost] -input = 0.12 -output = 0.42 -cache_write = 0.06 +input = 0.098 +output = 0.334 +cache_read = 0.049 [limit] context = 256_000 diff --git a/providers/hyper/models/glm-5.1.toml b/providers/hyper/models/glm-5.1.toml deleted file mode 100644 index 76d2acf71f4..00000000000 --- a/providers/hyper/models/glm-5.1.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "zhipuai/glm-5.1" -release_date = "2026-06-04" -last_updated = "2026-07-22" -reasoning_options = [] - -[cost] -input = 1.36 -output = 4.4 -cache_write = 0.68 - -[limit] -context = 202_750 -output = 3_276 diff --git a/providers/hyper/models/glm-5.2.toml b/providers/hyper/models/glm-5.2.toml index bde5c7f646d..19c9bb5d6d5 100644 --- a/providers/hyper/models/glm-5.2.toml +++ b/providers/hyper/models/glm-5.2.toml @@ -1,11 +1,10 @@ base_model = "zhipuai/glm-5.2" release_date = "2026-06-30" last_updated = "2026-07-22" -attachment = true [[reasoning_options]] type = "effort" -values = ["none", "high", "max"] +values = ["high", "xhigh"] [cost] input = 1.52432 @@ -13,8 +12,4 @@ output = 4.79072 cache_read = 0.152432 [limit] -context = 1_048_576 output = 32_768 - -[modalities] -input = ["text", "image"] diff --git a/providers/hyper/models/glm-5.3-flash.toml b/providers/hyper/models/glm-5.3-flash.toml new file mode 100644 index 00000000000..8a41dc80ef6 --- /dev/null +++ b/providers/hyper/models/glm-5.3-flash.toml @@ -0,0 +1,17 @@ +base_model = "zhipuai/glm-5.3-flash" +last_updated = "2026-08-31" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.16332 +output = 0.5444 +cache_read = 0.031575 + +[limit] +context = 1_048_576 + +[modalities] +input = ["text", "image"] diff --git a/providers/hyper/models/glm-5.3.toml b/providers/hyper/models/glm-5.3.toml new file mode 100644 index 00000000000..271d0fbd971 --- /dev/null +++ b/providers/hyper/models/glm-5.3.toml @@ -0,0 +1,15 @@ +base_model = "zhipuai/glm-5.3" +release_date = "2026-08-28" +last_updated = "2026-08-31" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.52432 +output = 4.79072 +cache_read = 0.283088 + +[limit] +output = 128_000 diff --git a/providers/hyper/models/glm-5.toml b/providers/hyper/models/glm-5.toml deleted file mode 100644 index 10f3e251574..00000000000 --- a/providers/hyper/models/glm-5.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "zhipuai/glm-5" -release_date = "2026-04-13" -last_updated = "2026-08-16" -reasoning_options = [] - -[cost] -input = 0.91 -output = 2.814 -cache_write = 0.455 - -[limit] -context = 202_752 -output = 20_275 diff --git a/providers/hyper/models/gpt-oss-120b.toml b/providers/hyper/models/gpt-oss-120b.toml index ad08deed2d7..bc7e3589b61 100644 --- a/providers/hyper/models/gpt-oss-120b.toml +++ b/providers/hyper/models/gpt-oss-120b.toml @@ -4,13 +4,12 @@ last_updated = "2026-07-22" [[reasoning_options]] type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] +values = ["low", "medium", "high"] [cost] -input = 0.188 -output = 0.7 -cache_write = 0.094 +input = 0.178 +output = 0.68 +cache_read = 0.089 [limit] -context = 128_072 output = 13_107 diff --git a/providers/hyper/models/inkling.toml b/providers/hyper/models/inkling.toml new file mode 100644 index 00000000000..5379b31fe1a --- /dev/null +++ b/providers/hyper/models/inkling.toml @@ -0,0 +1,18 @@ +base_model = "thinkingmachines/inkling" +release_date = "2026-08-15" +last_updated = "2026-09-05" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 1.0888 +output = 4.40964 +cache_read = 0.185096 + +[limit] +output = 32_768 + +[modalities] +input = ["text", "image"] diff --git a/providers/hyper/models/kimi-k2-thinking.toml b/providers/hyper/models/kimi-k2-thinking.toml new file mode 100644 index 00000000000..03488a06cac --- /dev/null +++ b/providers/hyper/models/kimi-k2-thinking.toml @@ -0,0 +1,12 @@ +base_model = "moonshotai/kimi-k2-thinking" +release_date = "2026-09-02" +last_updated = "2026-09-02" +reasoning_options = [] + +[cost] +input = 0.6 +output = 2.5 +cache_read = 0.3 + +[limit] +output = 26_214 diff --git a/providers/hyper/models/kimi-k2.5.toml b/providers/hyper/models/kimi-k2.5.toml deleted file mode 100644 index debc53b807a..00000000000 --- a/providers/hyper/models/kimi-k2.5.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "moonshotai/kimi-k2.5" -release_date = "2026-04-13" -last_updated = "2026-07-22" -attachment = false -reasoning_options = [] - -[cost] -input = 0.5444 -output = 2.855 -cache_write = 0.2722 - -[limit] -output = 26_214 - -[modalities] -input = ["text"] diff --git a/providers/hyper/models/kimi-k2.6.toml b/providers/hyper/models/kimi-k2.6.toml deleted file mode 100644 index c51aa337b1d..00000000000 --- a/providers/hyper/models/kimi-k2.6.toml +++ /dev/null @@ -1,19 +0,0 @@ -base_model = "moonshotai/kimi-k2.6" -release_date = "2026-07-03" -last_updated = "2026-07-22" - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] - -[cost] -input = 1.03436 -output = 4.3552 -cache_read = 0.174208 - -[limit] -context = 262_000 -output = 26_214 - -[modalities] -input = ["text", "image"] diff --git a/providers/hyper/models/kimi-k2.7-code.toml b/providers/hyper/models/kimi-k2.7-code.toml index b94d5b3888c..ef24433c661 100644 --- a/providers/hyper/models/kimi-k2.7-code.toml +++ b/providers/hyper/models/kimi-k2.7-code.toml @@ -9,7 +9,7 @@ output = 4.3552 cache_read = 0.206872 [limit] -context = 262_000 +context = 256_000 output = 16_000 [modalities] diff --git a/providers/hyper/models/llama-3.3-70b-instruct.toml b/providers/hyper/models/llama-3.3-70b-instruct.toml deleted file mode 100644 index de40b2bad9b..00000000000 --- a/providers/hyper/models/llama-3.3-70b-instruct.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "meta/llama-3.3-70b-instruct" -release_date = "2026-04-30" -last_updated = "2026-07-22" -attachment = false - -[cost] -input = 0.598 -output = 0.738 -cache_write = 0.299 - -[limit] -output = 12_800 diff --git a/providers/hyper/models/llama-4-maverick-17b-128e-instruct-fp8.toml b/providers/hyper/models/llama-4-maverick-17b-128e-instruct-fp8.toml deleted file mode 100644 index 9b588de13d6..00000000000 --- a/providers/hyper/models/llama-4-maverick-17b-128e-instruct-fp8.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "meta/llama-4-maverick-17b-instruct" -release_date = "2026-04-30" -last_updated = "2026-07-22" -attachment = false - -[cost] -input = 0.274 -output = 0.8992 -cache_write = 0.137 - -[limit] -context = 430_000 -output = 43_000 - -[modalities] -input = ["text"] diff --git a/providers/hyper/models/minimax-m2.7.toml b/providers/hyper/models/minimax-m2.7.toml index a0af9119e84..13ca6a02401 100644 --- a/providers/hyper/models/minimax-m2.7.toml +++ b/providers/hyper/models/minimax-m2.7.toml @@ -4,9 +4,9 @@ last_updated = "2026-07-22" reasoning_options = [] [cost] -input = 0.41 -output = 1.52 -cache_write = 0.205 +input = 0.484 +output = 1.852 +cache_read = 0.242 [limit] context = 262_100 diff --git a/providers/hyper/models/qwen3-coder-480b-a35b-instruct-int4-mixed-ar.toml b/providers/hyper/models/qwen3-coder-480b-a35b-instruct-int4-mixed-ar.toml deleted file mode 100644 index 3f34d120a9b..00000000000 --- a/providers/hyper/models/qwen3-coder-480b-a35b-instruct-int4-mixed-ar.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "alibaba/qwen3-coder-480b-a35b-instruct" -release_date = "2026-04-30" -last_updated = "2026-07-22" - -[cost] -input = 0.445 -output = 2.145 -cache_write = 0.2225 - -[limit] -context = 106_000 -output = 10_600 diff --git a/providers/hyper/models/qwen3-next-80b-a3b-instruct.toml b/providers/hyper/models/qwen3-next-80b-a3b-instruct.toml deleted file mode 100644 index fd9d9ca3d08..00000000000 --- a/providers/hyper/models/qwen3-next-80b-a3b-instruct.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "alibaba/qwen3-next-80b-a3b-instruct" -release_date = "2026-04-30" -last_updated = "2026-07-22" - -[cost] -input = 0.1175 -output = 1.136 -cache_write = 0.05875 - -[limit] -context = 262_144 -output = 26_214 diff --git a/providers/hyper/models/qwen3.6-flash.toml b/providers/hyper/models/qwen3.6-flash.toml deleted file mode 100644 index d686f6e3ca8..00000000000 --- a/providers/hyper/models/qwen3.6-flash.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "alibaba/qwen3.6-flash" -release_date = "2026-05-20" -last_updated = "2026-07-22" -reasoning_options = [] - -[cost] -input = 1 -output = 4 -cache_read = 0.1 -cache_write = 1.25 - -[limit] -output = 64_000 - -[modalities] -input = ["text", "image"] diff --git a/providers/hyper/models/qwen3.6-max.toml b/providers/hyper/models/qwen3.6-max.toml deleted file mode 100644 index c333833038d..00000000000 --- a/providers/hyper/models/qwen3.6-max.toml +++ /dev/null @@ -1,14 +0,0 @@ -base_model = "alibaba/qwen3.6-max-preview" -release_date = "2026-05-20" -last_updated = "2026-07-22" -reasoning_options = [] - -[cost] -input = 2 -output = 12 -cache_read = 0.2 -cache_write = 2.5 - -[limit] -context = 256_000 -output = 64_000 diff --git a/providers/hyper/models/qwen3.6-plus.toml b/providers/hyper/models/qwen3.6-plus.toml deleted file mode 100644 index 7bf8a3d4c4b..00000000000 --- a/providers/hyper/models/qwen3.6-plus.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "alibaba/qwen3.6-plus" -release_date = "2026-05-20" -last_updated = "2026-07-22" -reasoning_options = [] - -[cost] -input = 2 -output = 6 -cache_read = 0.2 -cache_write = 2.5 - -[limit] -output = 64_000 - -[modalities] -input = ["text", "image"] diff --git a/providers/hyper/models/qwen3.7-flash.toml b/providers/hyper/models/qwen3.7-flash.toml index 4f4691bb8af..e5ed200d633 100644 --- a/providers/hyper/models/qwen3.7-flash.toml +++ b/providers/hyper/models/qwen3.7-flash.toml @@ -2,7 +2,10 @@ base_model = "alibaba/qwen3.7-flash" description = "Efficient model for low-latency assistance, extraction, and routine automation" release_date = "2026-07-27" last_updated = "2026-07-30" -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high"] [cost] input = 0.2 diff --git a/providers/hyper/models/qwen3.7-max.toml b/providers/hyper/models/qwen3.7-max.toml index 745d85c8ecb..1e03fe5328f 100644 --- a/providers/hyper/models/qwen3.7-max.toml +++ b/providers/hyper/models/qwen3.7-max.toml @@ -1,7 +1,10 @@ base_model = "alibaba/qwen3.7-max" release_date = "2026-05-28" last_updated = "2026-07-22" -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high"] [cost] input = 2.5 diff --git a/providers/hyper/models/qwen3.7-plus.toml b/providers/hyper/models/qwen3.7-plus.toml index e808ce99ff1..781ddcaf367 100644 --- a/providers/hyper/models/qwen3.7-plus.toml +++ b/providers/hyper/models/qwen3.7-plus.toml @@ -1,7 +1,10 @@ base_model = "alibaba/qwen3.7-plus" release_date = "2026-06-15" last_updated = "2026-07-22" -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high"] [cost] input = 1.2 diff --git a/providers/hyper/models/qwen3.8-2.4t-a95b.toml b/providers/hyper/models/qwen3.8-2.4t-a95b.toml index 5de67d80511..00fdf314a69 100644 --- a/providers/hyper/models/qwen3.8-2.4t-a95b.toml +++ b/providers/hyper/models/qwen3.8-2.4t-a95b.toml @@ -1,7 +1,10 @@ base_model = "alibaba/qwen3.8-2.4t-a95b" release_date = "2026-08-26" last_updated = "2026-08-26" -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high"] [cost] input = 2 diff --git a/providers/hyper/models/qwen3.8-27b.toml b/providers/hyper/models/qwen3.8-27b.toml index ae043f3c6d1..fd47a185674 100644 --- a/providers/hyper/models/qwen3.8-27b.toml +++ b/providers/hyper/models/qwen3.8-27b.toml @@ -1,7 +1,10 @@ base_model = "alibaba/qwen3.8-27b" release_date = "2026-08-26" last_updated = "2026-08-26" -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high"] [cost] input = 0.5 diff --git a/providers/hyper/models/qwen3.8-flash.toml b/providers/hyper/models/qwen3.8-flash.toml index 7429fb9c848..f95aa060385 100644 --- a/providers/hyper/models/qwen3.8-flash.toml +++ b/providers/hyper/models/qwen3.8-flash.toml @@ -1,21 +1,17 @@ -name = "Qwen3.8-Flash" +base_model = "alibaba/qwen3.8-flash" description = "Efficient model for low-latency assistance, extraction, and routine automation" -release_date = "2026-08-26" -last_updated = "2026-08-26" -attachment = true -reasoning = false -tool_call = true -open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high"] [cost] -input = 0.16 +input = 0.15 output = 0.47 cache_read = 0.016 [limit] -context = 1_000_000 output = 128_000 [modalities] input = ["text", "image"] -output = ["text"] diff --git a/providers/hyper/models/qwen3.8-max.toml b/providers/hyper/models/qwen3.8-max.toml index 03488defed5..88d26a05f7e 100644 --- a/providers/hyper/models/qwen3.8-max.toml +++ b/providers/hyper/models/qwen3.8-max.toml @@ -1,5 +1,8 @@ base_model = "alibaba/qwen3.8-max-preview" -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high"] [cost] input = 2 diff --git a/providers/inception/logo.svg b/providers/inception/logo.svg index f70ffbc785b..c8f9d452ccf 100644 --- a/providers/inception/logo.svg +++ b/providers/inception/logo.svg @@ -1,4 +1,14 @@ - - - + + + + + + + + + + + + + diff --git a/providers/inception/models/mercury-2.5.toml b/providers/inception/models/mercury-2.5.toml new file mode 100644 index 00000000000..306f7ae383e --- /dev/null +++ b/providers/inception/models/mercury-2.5.toml @@ -0,0 +1,29 @@ +name = "Mercury 2.5" +description = "Mercury 2.5 is the fastest reasoning LLM, and the latest diffusion LLM (dLLM) from Inception" +# Model exception (accessed 2026-06-25): `reasoning_effort = "instant"` is also +# accepted for near-realtime responses, but it is not a models.dev effort enum. +# https://docs.inceptionlabs.ai/capabilities/instant +family = "mercury" +release_date = "2026-09-08" +last_updated = "2026-09-10" +attachment = false +reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] +temperature = true +knowledge = "2025-11-01" +tool_call = true +structured_output = true +open_weights = false + +[cost] +input = 0.04 +output = 0.15 +cache_read = 0.004 + +[limit] +context = 260_000 +output = 65_536 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/inception/models/mercury-edit-2.toml b/providers/inception/models/mercury-edit-2.toml index 52bcc2bdf83..83ac2191068 100644 --- a/providers/inception/models/mercury-edit-2.toml +++ b/providers/inception/models/mercury-edit-2.toml @@ -1,15 +1,23 @@ -name = "Mercury Edit 2" -description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" -# Model exception (accessed 2026-06-25): the /v1/edit/completions and -# /v1/fim/completions request schemas expose no reasoning-control field. +# Sources (accessed 2026-09-10): Mercury Edit 2 is served only on +# /v1/edit/completions and /v1/fim/completions, which cap context at 32K and +# output at 8,192 tokens; it is not offered on chat completions. Neither the +# edit nor the FIM request/response schema exposes a reasoning field, and +# `reasoning_effort` is documented as applying to mercury-2.5 and mercury-2 on +# chat completions only. The docs model table lists no tool-calling or +# structured-output support for this model. +# https://docs.inceptionlabs.ai/get-started/models +# https://docs.inceptionlabs.ai/capabilities/reasoning-efforts # https://api.inceptionlabs.ai/openapi.json +name = "Mercury Edit 2" +description = "Code editing dLLM for autocomplete (FIM) and next-edit suggestions" +family = "mercury" release_date = "2026-03-30" last_updated = "2026-03-30" attachment = false -reasoning = true -reasoning_options = [] +reasoning = false temperature = true tool_call = false +structured_output = false open_weights = false [cost] @@ -18,9 +26,9 @@ output = 0.75 cache_read = 0.025 [limit] -context = 128000 -output = 8192 +context = 32_000 +output = 8_192 [modalities] input = ["text"] -output = ["text"] \ No newline at end of file +output = ["text"] diff --git a/providers/inception/provider.toml b/providers/inception/provider.toml index 362d02d8ffa..90591ade98f 100644 --- a/providers/inception/provider.toml +++ b/providers/inception/provider.toml @@ -1,11 +1,12 @@ name = "Inception" env = ["INCEPTION_API_KEY"] npm = "@ai-sdk/openai-compatible" -# Reasoning HTTP format (accessed 2026-06-25): POST /v1/chat/completions accepts +# Reasoning HTTP format (accessed 2026-09-10): POST /v1/chat/completions accepts # top-level `reasoning_effort` = instant, low, medium, or high; default medium. # It documents no off value or numeric reasoning-token budget. `instant` is the -# near-realtime Mercury 2 mode for low-latency turns that do not require tools. +# near-realtime mode for low-latency turns. Effort applies to mercury-2.5 and +# mercury-2 on chat completions only. # https://docs.inceptionlabs.ai/api-reference/chat/create-a-chat-completion -# https://docs.inceptionlabs.ai/capabilities/instant +# https://docs.inceptionlabs.ai/capabilities/reasoning-efforts api = "https://api.inceptionlabs.ai/v1/" -doc = "https://platform.inceptionlabs.ai/docs" +doc = "https://docs.inceptionlabs.ai/get-started/models" diff --git a/providers/inceptron/models/moonshotai/Kimi-K2.6.toml b/providers/inceptron/models/moonshotai/Kimi-K2.6.toml index d0ba64678f6..a18dab49113 100644 --- a/providers/inceptron/models/moonshotai/Kimi-K2.6.toml +++ b/providers/inceptron/models/moonshotai/Kimi-K2.6.toml @@ -5,7 +5,7 @@ reasoning_options = [] field = "reasoning_content" [cost] -input = 0.56 +input = 0.53 output = 3.39 cache_read = 0.17 cache_write = 0 diff --git a/providers/inceptron/models/moonshotai/Kimi-K2.7-Code.toml b/providers/inceptron/models/moonshotai/Kimi-K2.7-Code.toml index d2d11d2b15c..d633e11afd0 100644 --- a/providers/inceptron/models/moonshotai/Kimi-K2.7-Code.toml +++ b/providers/inceptron/models/moonshotai/Kimi-K2.7-Code.toml @@ -6,9 +6,9 @@ reasoning_options = [] field = "reasoning_content" [cost] -input = 0.67 +input = 0.66 output = 3.4 -cache_read = 0.19 +cache_read = 0.18 cache_write = 0 [modalities] diff --git a/providers/inceptron/models/zai-org/GLM-5.2.toml b/providers/inceptron/models/zai-org/GLM-5.2.toml index d2bbfd839b2..52d1dc577ca 100644 --- a/providers/inceptron/models/zai-org/GLM-5.2.toml +++ b/providers/inceptron/models/zai-org/GLM-5.2.toml @@ -9,9 +9,9 @@ type = "effort" values = ["high", "max"] [cost] -input = 0.75 -output = 2.4 -cache_read = 0.17 +input = 0.71 +output = 2.35 +cache_read = 0.12 cache_write = 0 [limit] diff --git a/providers/inco/logo.svg b/providers/inco/logo.svg new file mode 100644 index 00000000000..e60b4418f08 --- /dev/null +++ b/providers/inco/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/providers/inco/models/deepseek-v4.1-flash:fast.toml b/providers/inco/models/deepseek-v4.1-flash:fast.toml new file mode 100644 index 00000000000..2b762eedb7e --- /dev/null +++ b/providers/inco/models/deepseek-v4.1-flash:fast.toml @@ -0,0 +1,15 @@ +# Toggle: chat_template_kwargs.thinking = true|false (verified against Inco; +# reasoning_effort and thinking.type are accepted but ignored). Reasoning is +# off by default on this route; send thinking=true to enable it. +# reasoning_content interleaved field verified against Inco responses. +base_model = "deepseek/deepseek-v4.1-flash" + +[[reasoning_options]] +type = "toggle" + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.6 +output = 2.4 diff --git a/providers/inco/models/glm-5.3-flash:fast.toml b/providers/inco/models/glm-5.3-flash:fast.toml new file mode 100644 index 00000000000..e4b52c4169f --- /dev/null +++ b/providers/inco/models/glm-5.3-flash:fast.toml @@ -0,0 +1,15 @@ +# Toggle: chat_template_kwargs.enable_thinking = true|false (verified against +# Inco; reasoning_effort and thinking.type are accepted but ignored). Reasons +# by default; reasoning_content interleaved field verified against Inco +# responses. +base_model = "zhipuai/glm-5.3-flash" + +[[reasoning_options]] +type = "toggle" + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.15 +output = 0.5 diff --git a/providers/inco/models/glm-5.3.toml b/providers/inco/models/glm-5.3.toml new file mode 100644 index 00000000000..bfc8998ba01 --- /dev/null +++ b/providers/inco/models/glm-5.3.toml @@ -0,0 +1,15 @@ +# Toggle: chat_template_kwargs.enable_thinking = true|false (verified against +# Inco; reasoning_effort and thinking.type are accepted but ignored). Reasons +# by default; reasoning_content interleaved field verified against Inco +# responses. +base_model = "zhipuai/glm-5.3" + +[[reasoning_options]] +type = "toggle" + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1.4 +output = 4.4 diff --git a/providers/inco/models/glm-5.3:fast.toml b/providers/inco/models/glm-5.3:fast.toml new file mode 100644 index 00000000000..63d16c7dfe8 --- /dev/null +++ b/providers/inco/models/glm-5.3:fast.toml @@ -0,0 +1,15 @@ +# Standard-speed endpoint at 2x credit pricing. +# Toggle: chat_template_kwargs.enable_thinking = true|false +# Verified against Inco; reasons by default. +base_model = "zhipuai/glm-5.3" +name = "GLM-5.3 Fast" + +[[reasoning_options]] +type = "toggle" + +[interleaved] +field = "reasoning_content" + +[cost] +input = 2.8 +output = 8.8 diff --git a/providers/inco/models/kimi-k3:fast.toml b/providers/inco/models/kimi-k3:fast.toml new file mode 100644 index 00000000000..ebe03653543 --- /dev/null +++ b/providers/inco/models/kimi-k3:fast.toml @@ -0,0 +1,14 @@ +# Toggle: chat_template_kwargs.thinking = true|false (verified against Inco; +# reasoning_effort and thinking.type are accepted but ignored). Reasons by +# default; reasoning_content interleaved field verified against Inco responses. +base_model = "moonshotai/kimi-k3" + +[[reasoning_options]] +type = "toggle" + +[interleaved] +field = "reasoning_content" + +[cost] +input = 6 +output = 30 diff --git a/providers/inco/models/minimax-m3.toml b/providers/inco/models/minimax-m3.toml new file mode 100644 index 00000000000..dee42c58f8c --- /dev/null +++ b/providers/inco/models/minimax-m3.toml @@ -0,0 +1,13 @@ +# Always reasons on Inco; no caller control — toggle fields (thinking.type, +# chat_template_kwargs.thinking/enable_thinking, reasoning) were tested and are +# ignored. reasoning_content interleaved field verified against Inco responses. +base_model = "minimax/MiniMax-M3" + +reasoning_options = [] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.3 +output = 1.2 diff --git a/providers/inco/models/minimax-m3:fast.toml b/providers/inco/models/minimax-m3:fast.toml new file mode 100644 index 00000000000..02e06cf191d --- /dev/null +++ b/providers/inco/models/minimax-m3:fast.toml @@ -0,0 +1,12 @@ +# Standard-speed endpoint at 2x credit pricing, see minimax-m3.toml for controls. +base_model = "minimax/MiniMax-M3" +name = "MiniMax M3 Fast" + +reasoning_options = [] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.6 +output = 2.4 diff --git a/providers/inco/provider.toml b/providers/inco/provider.toml new file mode 100644 index 00000000000..1cbf0c9ba78 --- /dev/null +++ b/providers/inco/provider.toml @@ -0,0 +1,5 @@ +name = "Inco" +npm = "@ai-sdk/openai-compatible" +env = ["INCO_API_KEY"] +api = "https://api.inco.ai/v1" +doc = "https://platform.inco.ai/docs" diff --git a/providers/infer/logo.svg b/providers/infer/logo.svg new file mode 100644 index 00000000000..514621c5477 --- /dev/null +++ b/providers/infer/logo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/providers/infer/models/infer/gpt-5.6-sol:official.toml b/providers/infer/models/infer/gpt-5.6-sol:official.toml new file mode 100644 index 00000000000..9c6273b9563 --- /dev/null +++ b/providers/infer/models/infer/gpt-5.6-sol:official.toml @@ -0,0 +1,20 @@ +# Source: https://infer.flow7.org/api/public/catalog (2026-09-12 UTC) +# Exact selector: infer/gpt-5.6-sol:official +# Responses request reasoning.effort follows the underlying OpenAI model. +base_model = "openai/gpt-5.6-sol" +base_model_omit = ["limit.input"] +name = "GPT-5.6 Sol (Official API)" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 2.5 +output = 12.5 +cache_read = 0.25 +cache_write = 3.125 + +[limit] +context = 271999 +output = 128000 + +[provider] +shape = "responses" diff --git a/providers/infer/models/infer/gpt-6-astra:official.toml b/providers/infer/models/infer/gpt-6-astra:official.toml new file mode 100644 index 00000000000..f8c638d5fff --- /dev/null +++ b/providers/infer/models/infer/gpt-6-astra:official.toml @@ -0,0 +1,20 @@ +# Source: https://infer.flow7.org/api/public/catalog (2026-09-12 UTC) +# Exact selector: infer/gpt-6-astra:official +# Responses request reasoning.effort follows the underlying OpenAI model. +base_model = "openai/gpt-6-astra" +base_model_omit = ["limit.input"] +name = "GPT-6 Astra (Official API)" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 12.5 +output = 62.5 +cache_read = 1.25 +cache_write = 15.625 + +[limit] +context = 271999 +output = 128000 + +[provider] +shape = "responses" diff --git a/providers/infer/provider.toml b/providers/infer/provider.toml new file mode 100644 index 00000000000..327bd75640f --- /dev/null +++ b/providers/infer/provider.toml @@ -0,0 +1,7 @@ +# Docs: https://infer.flow7.org/docs +# Public catalog: https://infer.flow7.org/api/public/catalog +name = "Infer by Flow7" +npm = "@ai-sdk/openai" +env = ["INFER_API_KEY"] +api = "https://infer.flow7.org/v1" +doc = "https://infer.flow7.org/opencode" diff --git a/providers/iteracompute/models/deepseek/deepseek-v4-flash-0731.toml b/providers/iteracompute/models/deepseek/deepseek-v4-flash-0731.toml new file mode 100644 index 00000000000..de987dfd5fe --- /dev/null +++ b/providers/iteracompute/models/deepseek/deepseek-v4-flash-0731.toml @@ -0,0 +1,16 @@ +# Sources (accessed 2026-09-15): +# https://api.iteracompute.com/v1/models (model ID, availability, capabilities, limits, and pricing) +# https://iteracompute.com/docs.html (OpenAI-compatible API documentation) +# Reasoning is mandatory and the public catalog exposes no caller-selectable reasoning control. +# Prices are in USD per million tokens. +base_model = "deepseek/deepseek-v4-flash-0731" +reasoning_options = [] + +[cost] +input = 0.34 +output = 1.05 +cache_read = 0.035 + +[limit] +context = 970_000 +output = 393_216 diff --git a/providers/iteracompute/models/deepseek/deepseek-v4-pro-0813.toml b/providers/iteracompute/models/deepseek/deepseek-v4-pro-0813.toml new file mode 100644 index 00000000000..0199acb7930 --- /dev/null +++ b/providers/iteracompute/models/deepseek/deepseek-v4-pro-0813.toml @@ -0,0 +1,16 @@ +# Sources (accessed 2026-09-15): +# https://api.iteracompute.com/v1/models (model ID, availability, capabilities, limits, and pricing) +# https://iteracompute.com/docs.html (OpenAI-compatible API documentation) +# Reasoning is mandatory and the public catalog exposes no caller-selectable reasoning control. +# Prices are in USD per million tokens. +base_model = "deepseek/deepseek-v4-pro-0813" +reasoning_options = [] + +[cost] +input = 1.10 +output = 3.30 +cache_read = 0.11 + +[limit] +context = 1_048_576 +output = 393_216 diff --git a/providers/iteracompute/models/iteracompute/qwen3.8-27b.toml b/providers/iteracompute/models/iteracompute/qwen3.8-27b.toml deleted file mode 100644 index 908d60482e5..00000000000 --- a/providers/iteracompute/models/iteracompute/qwen3.8-27b.toml +++ /dev/null @@ -1,16 +0,0 @@ -# Sources (accessed 2026-08-24): -# https://api.iteracompute.com/v1/models (model ID, availability, and input/output pricing) -# https://iteracompute.com/docs.html (OpenAI-compatible API documentation) -# Cache-read pricing is the rate supplied for the OpenCode/models.dev integration. -# -# IteraCompute serves Qwen3.8 27B through its OpenAI-compatible API. -# Model capabilities, limits, and modalities are inherited from -# models/alibaba/qwen3.8-27b.toml. Prices are in USD per million tokens. -# Effort: reasoning_effort = none|low|medium|xhigh (xhigh is the default). -base_model = "alibaba/qwen3.8-27b" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "xhigh"] }] - -[cost] -input = 0.35 -output = 3.00 -cache_read = 0.10 diff --git a/providers/iteracompute/models/minimax/minimax-m3.toml b/providers/iteracompute/models/minimax/minimax-m3.toml new file mode 100644 index 00000000000..f9d9908e3f6 --- /dev/null +++ b/providers/iteracompute/models/minimax/minimax-m3.toml @@ -0,0 +1,19 @@ +# Sources (accessed 2026-09-15): +# https://api.iteracompute.com/v1/models (model ID, availability, capabilities, limits, and pricing) +# https://iteracompute.com/docs.html (OpenAI-compatible API documentation) +# Reasoning is mandatory and the public catalog exposes no caller-selectable reasoning control. +# Prices are in USD per million tokens. +base_model = "minimax/MiniMax-M3" +reasoning_options = [] + +[cost] +input = 0.29 +output = 1.20 +cache_read = 0.08 + +[limit] +context = 1_048_576 +output = 524_288 + +[modalities] +input = ["text", "image"] diff --git a/providers/iteracompute/models/moonshotai/kimi-k3.toml b/providers/iteracompute/models/moonshotai/kimi-k3.toml new file mode 100644 index 00000000000..4e4af1d1240 --- /dev/null +++ b/providers/iteracompute/models/moonshotai/kimi-k3.toml @@ -0,0 +1,20 @@ +# Sources (accessed 2026-09-15): +# https://api.iteracompute.com/v1/models (model ID, availability, capabilities, limits, and pricing) +# https://iteracompute.com/docs.html (OpenAI-compatible API documentation) +# Reasoning is mandatory and the public catalog exposes no caller-selectable reasoning control. +# Prices are in USD per million tokens. +base_model = "moonshotai/kimi-k3" +structured_output = false +reasoning_options = [] + +[cost] +input = 3.00 +output = 14.90 +cache_read = 0.29 + +[limit] +context = 1_048_576 +output = 999_999 + +[modalities] +input = ["text", "image"] diff --git a/providers/iteracompute/models/ornith-ai/ornith-1.5-35b-a3b.toml b/providers/iteracompute/models/ornith-ai/ornith-1.5-35b-a3b.toml new file mode 100644 index 00000000000..e0ee4a079e5 --- /dev/null +++ b/providers/iteracompute/models/ornith-ai/ornith-1.5-35b-a3b.toml @@ -0,0 +1,22 @@ +# Sources (accessed 2026-09-15): +# https://api.iteracompute.com/v1/models (canonical model ID, availability, capabilities, limits, and pricing) +# https://iteracompute.com/docs.html (OpenAI-compatible API documentation) +# Toggle wire path: reasoning_effort = "none" disables thinking; responses expose reasoning_content. +# Prices are in USD per million tokens. +base_model = "deepreinforce/ornith-1.5-35b-a3b" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.30 +output = 3.00 +cache_read = 0.03 + +[limit] +context = 327_680 +input = 262_144 +output = 65_536 diff --git a/providers/iteracompute/models/qwen/qwen3.8-2.4t-a95b.toml b/providers/iteracompute/models/qwen/qwen3.8-2.4t-a95b.toml new file mode 100644 index 00000000000..1499c45a580 --- /dev/null +++ b/providers/iteracompute/models/qwen/qwen3.8-2.4t-a95b.toml @@ -0,0 +1,19 @@ +# Sources (accessed 2026-09-15): +# https://api.iteracompute.com/v1/models (model ID, availability, capabilities, limits, and pricing) +# https://iteracompute.com/docs.html (OpenAI-compatible API documentation) +# Prices are in USD per million tokens. +base_model = "alibaba/qwen3.8-2.4t-a95b" +attachment = true +reasoning_options = [{ type = "toggle" }] + +[cost] +input = 1.95 +output = 5.95 +cache_read = 0.20 + +[limit] +context = 970_000 +output = 131_072 + +[modalities] +input = ["text", "image"] diff --git a/providers/iteracompute/models/qwen/qwen3.8-27b.toml b/providers/iteracompute/models/qwen/qwen3.8-27b.toml new file mode 100644 index 00000000000..bb7bc16c39d --- /dev/null +++ b/providers/iteracompute/models/qwen/qwen3.8-27b.toml @@ -0,0 +1,19 @@ +# Sources (accessed 2026-09-15): +# https://api.iteracompute.com/v1/models (canonical model ID, availability, capabilities, limits, and pricing) +# https://iteracompute.com/docs.html (OpenAI-compatible API documentation) +# Prices are in USD per million tokens. +base_model = "alibaba/qwen3.8-27b" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "xhigh"] }] + +[cost] +input = 0.30 +output = 2.50 +cache_read = 0.03 + +[limit] +context = 327_680 +input = 262_144 +output = 65_536 + +[modalities] +input = ["text", "image"] diff --git a/providers/iteracompute/models/z-ai/glm-5.3-flash.toml b/providers/iteracompute/models/z-ai/glm-5.3-flash.toml new file mode 100644 index 00000000000..19503c99421 --- /dev/null +++ b/providers/iteracompute/models/z-ai/glm-5.3-flash.toml @@ -0,0 +1,20 @@ +# Sources (accessed 2026-09-15): +# https://api.iteracompute.com/v1/models (model ID, availability, capabilities, limits, pricing, and capacity) +# https://iteracompute.com/docs.html (OpenAI-compatible API documentation) +# Effort wire path: reasoning.effort = low|high|max. Reasoning is mandatory. +# Prices are in USD per million tokens. +base_model = "zhipuai/glm-5.3-flash" +structured_output = false +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[cost] +input = 0.14 +output = 0.49 +cache_read = 0.03 + +[limit] +context = 1_048_576 +output = 131_072 + +[modalities] +input = ["text", "image"] diff --git a/providers/iteracompute/models/z-ai/glm-5.3.toml b/providers/iteracompute/models/z-ai/glm-5.3.toml new file mode 100644 index 00000000000..2ba1f3cca79 --- /dev/null +++ b/providers/iteracompute/models/z-ai/glm-5.3.toml @@ -0,0 +1,17 @@ +# Sources (accessed 2026-09-15): +# https://api.iteracompute.com/v1/models (model ID, availability, capabilities, limits, and pricing) +# https://iteracompute.com/docs.html (OpenAI-compatible API documentation) +# Reasoning is mandatory and the public catalog exposes no caller-selectable reasoning control. +# Prices are in USD per million tokens. +base_model = "zhipuai/glm-5.3" +structured_output = false +reasoning_options = [] + +[cost] +input = 1.20 +output = 3.50 +cache_read = 0.26 + +[limit] +context = 1_048_576 +output = 131_072 diff --git a/providers/jiekou/models/zai-org/glm-4.7-flash.toml b/providers/jiekou/models/zai-org/glm-4.7-flash.toml index 81dc436cc68..6d3d8dda497 100644 --- a/providers/jiekou/models/zai-org/glm-4.7-flash.toml +++ b/providers/jiekou/models/zai-org/glm-4.7-flash.toml @@ -1,6 +1,6 @@ name = "GLM-4.7-Flash" description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -family = "glm" +family = "glm-flash" release_date = "2026-01" last_updated = "2026-01" attachment = false diff --git a/providers/kenari/models/claude-opus-5.toml b/providers/kenari/models/claude-opus-5.toml new file mode 100644 index 00000000000..162ff1c21df --- /dev/null +++ b/providers/kenari/models/claude-opus-5.toml @@ -0,0 +1,9 @@ +base_model = "anthropic/claude-opus-5" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/claude-sonnet-4-6.toml b/providers/kenari/models/claude-sonnet-4-6.toml new file mode 100644 index 00000000000..a35b82de825 --- /dev/null +++ b/providers/kenari/models/claude-sonnet-4-6.toml @@ -0,0 +1,9 @@ +base_model = "anthropic/claude-sonnet-4-6" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "max"] + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/deepseek-v4-1-flash.toml b/providers/kenari/models/deepseek-v4-1-flash.toml new file mode 100644 index 00000000000..2a775a81e1f --- /dev/null +++ b/providers/kenari/models/deepseek-v4-1-flash.toml @@ -0,0 +1,11 @@ +# Source: https://kenari.id/v1/models (id deepseek-v4-1-flash, reasoning low/high/max) +# Kenari convention: subscription pricing, cost 0/0 like other Kenari entries. +base_model = "deepseek/deepseek-v4.1-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/gemini-3-1-flash-tts.toml b/providers/kenari/models/gemini-3-1-flash-tts.toml new file mode 100644 index 00000000000..3ce0ea388d5 --- /dev/null +++ b/providers/kenari/models/gemini-3-1-flash-tts.toml @@ -0,0 +1,5 @@ +base_model = "google/gemini-3.1-flash-tts-preview" + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/gemini-3-1-pro.toml b/providers/kenari/models/gemini-3-1-pro.toml new file mode 100644 index 00000000000..fc8387d3d92 --- /dev/null +++ b/providers/kenari/models/gemini-3-1-pro.toml @@ -0,0 +1,9 @@ +base_model = "google/gemini-3.1-pro-preview" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/gemini-3-5-flash.toml b/providers/kenari/models/gemini-3-5-flash.toml new file mode 100644 index 00000000000..32d60ab7cf4 --- /dev/null +++ b/providers/kenari/models/gemini-3-5-flash.toml @@ -0,0 +1,9 @@ +base_model = "google/gemini-3.5-flash" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high"] + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/gemini-3-6-flash.toml b/providers/kenari/models/gemini-3-6-flash.toml new file mode 100644 index 00000000000..76b7a0c3dfa --- /dev/null +++ b/providers/kenari/models/gemini-3-6-flash.toml @@ -0,0 +1,9 @@ +base_model = "google/gemini-3.6-flash" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high"] + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/gemini-3-7-flash.toml b/providers/kenari/models/gemini-3-7-flash.toml new file mode 100644 index 00000000000..da58f5c67fb --- /dev/null +++ b/providers/kenari/models/gemini-3-7-flash.toml @@ -0,0 +1,9 @@ +base_model = "google/gemini-3.7-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/glm-5-3-flash.toml b/providers/kenari/models/glm-5-3-flash.toml new file mode 100644 index 00000000000..98ace03c3eb --- /dev/null +++ b/providers/kenari/models/glm-5-3-flash.toml @@ -0,0 +1,9 @@ +base_model = "zhipuai/glm-5.3-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/glm-5-3.toml b/providers/kenari/models/glm-5-3.toml new file mode 100644 index 00000000000..9b34f5dc786 --- /dev/null +++ b/providers/kenari/models/glm-5-3.toml @@ -0,0 +1,9 @@ +base_model = "zhipuai/glm-5.3" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/grok-4-6.toml b/providers/kenari/models/grok-4-6.toml new file mode 100644 index 00000000000..a8dfff08ee9 --- /dev/null +++ b/providers/kenari/models/grok-4-6.toml @@ -0,0 +1,9 @@ +base_model = "xai/grok-4.6" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh"] + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/grok-imagine-image-2-0.toml b/providers/kenari/models/grok-imagine-image-2-0.toml new file mode 100644 index 00000000000..28f9c82aadc --- /dev/null +++ b/providers/kenari/models/grok-imagine-image-2-0.toml @@ -0,0 +1,5 @@ +base_model = "xai/grok-imagine-image-2.0" + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/hy3.toml b/providers/kenari/models/hy3.toml new file mode 100644 index 00000000000..aec067fe7d2 --- /dev/null +++ b/providers/kenari/models/hy3.toml @@ -0,0 +1,9 @@ +base_model = "tencent/hy3" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high"] + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/hy3:free.toml b/providers/kenari/models/hy3:free.toml new file mode 100644 index 00000000000..60e6b14beb9 --- /dev/null +++ b/providers/kenari/models/hy3:free.toml @@ -0,0 +1,10 @@ +base_model = "tencent/hy3" +name = "Hy3 (Free)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high"] + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/minimax-m2-7-highspeed.toml b/providers/kenari/models/minimax-m2-7-highspeed.toml new file mode 100644 index 00000000000..d4d61741ca8 --- /dev/null +++ b/providers/kenari/models/minimax-m2-7-highspeed.toml @@ -0,0 +1,6 @@ +base_model = "minimax/MiniMax-M2.7-highspeed" +reasoning_options = [] + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/minimax-m2-7.toml b/providers/kenari/models/minimax-m2-7.toml new file mode 100644 index 00000000000..04bde4fc751 --- /dev/null +++ b/providers/kenari/models/minimax-m2-7.toml @@ -0,0 +1,6 @@ +base_model = "minimax/MiniMax-M2.7" +reasoning_options = [] + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/mistral-large:free.toml b/providers/kenari/models/mistral-large:free.toml new file mode 100644 index 00000000000..49a8f426fd5 --- /dev/null +++ b/providers/kenari/models/mistral-large:free.toml @@ -0,0 +1,6 @@ +base_model = "mistral/mistral-large-latest" +name = "Mistral Large (Free)" + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/mistral-medium-3-5:free.toml b/providers/kenari/models/mistral-medium-3-5:free.toml new file mode 100644 index 00000000000..9f2bf1039bd --- /dev/null +++ b/providers/kenari/models/mistral-medium-3-5:free.toml @@ -0,0 +1,10 @@ +base_model = "mistral/mistral-medium-2604" +name = "Mistral Medium 3.5 (Free)" + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/qwen3-8-max.toml b/providers/kenari/models/qwen3-8-max.toml new file mode 100644 index 00000000000..88171d4a690 --- /dev/null +++ b/providers/kenari/models/qwen3-8-max.toml @@ -0,0 +1,9 @@ +base_model = "alibaba/qwen3.8-max" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/step-3-7-flash.toml b/providers/kenari/models/step-3-7-flash.toml new file mode 100644 index 00000000000..778be2e4008 --- /dev/null +++ b/providers/kenari/models/step-3-7-flash.toml @@ -0,0 +1,9 @@ +base_model = "stepfun/step-3.7-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/step-3-7-flash:free.toml b/providers/kenari/models/step-3-7-flash:free.toml new file mode 100644 index 00000000000..5f90458c8df --- /dev/null +++ b/providers/kenari/models/step-3-7-flash:free.toml @@ -0,0 +1,10 @@ +base_model = "stepfun/step-3.7-flash" +name = "Step 3.7 Flash (Free)" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0 +output = 0 diff --git a/providers/kenari/models/whisper-large-v3-turbo.toml b/providers/kenari/models/whisper-large-v3-turbo.toml new file mode 100644 index 00000000000..0150da262d9 --- /dev/null +++ b/providers/kenari/models/whisper-large-v3-turbo.toml @@ -0,0 +1,5 @@ +base_model = "openai/whisper-large-v3-turbo" + +[cost] +input = 0 +output = 0 diff --git a/providers/kilo/models/aion-labs/aion-3.5-mini.toml b/providers/kilo/models/aion-labs/aion-3.5-mini.toml new file mode 100644 index 00000000000..13d926e0dd0 --- /dev/null +++ b/providers/kilo/models/aion-labs/aion-3.5-mini.toml @@ -0,0 +1,27 @@ +name = "AionLabs: Aion 3.5 Mini" +description = "Aion 3.5 Mini is a multi-model roleplaying and storytelling system from AionLabs, built on the GLM family of models. It is the smaller, lower-cost sibling of Aion 3.5 and uses..." +release_date = "2026-09-23" +last_updated = "2026-09-23" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.7 +output = 1.4 +cache_read = 0.18 + +[limit] +context = 262_144 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/kilo/models/aion-labs/aion-3.5.toml b/providers/kilo/models/aion-labs/aion-3.5.toml new file mode 100644 index 00000000000..bf909dcbb8e --- /dev/null +++ b/providers/kilo/models/aion-labs/aion-3.5.toml @@ -0,0 +1,27 @@ +name = "AionLabs: Aion 3.5" +description = "Aion 3.5 is a multi-model roleplaying and storytelling system from AionLabs, built on the GLM family of models. It uses a collaborative generation process in which multiple specialized models each..." +release_date = "2026-09-23" +last_updated = "2026-09-23" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 3 +output = 6 +cache_read = 0.75 + +[limit] +context = 262_144 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/kilo/models/allenai/olmo-3-32b-think.toml b/providers/kilo/models/allenai/olmo-3-32b-think.toml deleted file mode 100644 index d51cca6fc33..00000000000 --- a/providers/kilo/models/allenai/olmo-3-32b-think.toml +++ /dev/null @@ -1,27 +0,0 @@ -name = "AllenAI: Olmo 3 32B Think" -description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" -family = "allenai" -release_date = "2025-11-21" -last_updated = "2025-11-21" -attachment = false -reasoning = true -temperature = true -tool_call = false -structured_output = true -open_weights = false - -[[reasoning_options]] -type = "effort" -values = ["high"] - -[cost] -input = 0.15 -output = 0.5 - -[limit] -context = 65_536 -output = 58_982 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/kilo/models/anthracite-org/magnum-v4-72b.toml b/providers/kilo/models/anthracite-org/magnum-v4-72b.toml index 181bbb3df41..0558f113c0a 100644 --- a/providers/kilo/models/anthracite-org/magnum-v4-72b.toml +++ b/providers/kilo/models/anthracite-org/magnum-v4-72b.toml @@ -10,7 +10,7 @@ structured_output = true open_weights = false [cost] -input = 3 +input = 2.5 output = 5 [limit] diff --git a/providers/kilo/models/anthropic/claude-fable-5.1.toml b/providers/kilo/models/anthropic/claude-fable-5.1.toml new file mode 100644 index 00000000000..225f81f488f --- /dev/null +++ b/providers/kilo/models/anthropic/claude-fable-5.1.toml @@ -0,0 +1,13 @@ +base_model = "anthropic/claude-fable-5-1" +description = "Claude Fable 5.1 improves on Claude Fable 5 across the board, with the biggest gains in agentic coding, long-running agentic workflows, and knowledge work: long code refactors, front-end and visual..." +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 diff --git a/providers/kilo/models/anthropic/claude-opus-4.7-fast.toml b/providers/kilo/models/anthropic/claude-opus-4.7-fast.toml deleted file mode 100644 index d9e36623fa9..00000000000 --- a/providers/kilo/models/anthropic/claude-opus-4.7-fast.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "anthropic/claude-opus-4-7" -description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents" -structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["none", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 30 -output = 150 -cache_read = 3 -cache_write = 37.5 diff --git a/providers/kilo/models/anthropic/claude-opus-4.8-fast.toml b/providers/kilo/models/anthropic/claude-opus-4.8-fast.toml deleted file mode 100644 index 693ca9822b2..00000000000 --- a/providers/kilo/models/anthropic/claude-opus-4.8-fast.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "anthropic/claude-opus-4-8" -description = "Fast-mode variant of [Opus 4.8](/anthropic/claude-opus-4.8) - identical capabilities with higher output speed at 2x pricing relative to regular Opus 4.8. Learn more in Anthropic's docs: https://platform.claude.com/docs/en/build-with-claude/fast-mode" -structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["none", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 10 -output = 50 -cache_read = 1 -cache_write = 12.5 diff --git a/providers/kilo/models/anthropic/claude-opus-4.toml b/providers/kilo/models/anthropic/claude-opus-4.toml deleted file mode 100644 index 6e622f068ab..00000000000 --- a/providers/kilo/models/anthropic/claude-opus-4.toml +++ /dev/null @@ -1,29 +0,0 @@ -name = "Anthropic: Claude Opus 4 ($$$$)" -description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents" -family = "claude-opus" -release_date = "2025-05-22" -last_updated = "2025-05-22" -attachment = true -reasoning = true -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "effort" -values = ["none", "high"] - -[cost] -input = 15 -output = 75 -cache_read = 1.5 -cache_write = 18.75 - -[limit] -context = 200_000 -output = 32_000 - -[modalities] -input = ["image", "text", "pdf"] -output = ["text"] diff --git a/providers/kilo/models/anthropic/claude-opus-5-fast.toml b/providers/kilo/models/anthropic/claude-opus-5-fast.toml deleted file mode 100644 index d6d2efe26b9..00000000000 --- a/providers/kilo/models/anthropic/claude-opus-5-fast.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "anthropic/claude-opus-5" -description = "Fast-mode variant of [Opus 5](/anthropic/claude-opus-5) - identical capabilities with higher output speed at 2x pricing relative to regular Opus 5. Learn more in Anthropic's docs: https://platform.claude.com/docs/en/build-with-claude/fast-mode" -structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["none", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 10 -output = 50 -cache_read = 1 -cache_write = 12.5 diff --git a/providers/kilo/models/anthropic/claude-opus-5.5.toml b/providers/kilo/models/anthropic/claude-opus-5.5.toml new file mode 100644 index 00000000000..53b1a0d9fb2 --- /dev/null +++ b/providers/kilo/models/anthropic/claude-opus-5.5.toml @@ -0,0 +1,14 @@ +base_model = "anthropic/claude-opus-5-5" +description = "Claude Opus 5.5 is Anthropic's flagship model for demanding reasoning, coding, and long-horizon agentic work, succeeding Claude Opus 5. It is particularly strong at multi-step changes in large codebases, code..." +temperature = true +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 4 +output = 20 +cache_read = 0.2 +cache_write = 5 diff --git a/providers/kilo/models/arcee-ai/trinity-large-thinking.toml b/providers/kilo/models/arcee-ai/trinity-large-thinking.toml index 6640f8c04b2..aab2adaa0f5 100644 --- a/providers/kilo/models/arcee-ai/trinity-large-thinking.toml +++ b/providers/kilo/models/arcee-ai/trinity-large-thinking.toml @@ -1,15 +1,15 @@ base_model = "arcee-ai/trinity-large-thinking" -structured_output = true +structured_output = false [[reasoning_options]] type = "effort" values = ["high"] [cost] -input = 0.22 -output = 0.85 +input = 0.25 +output = 0.8 cache_read = 0.06 [limit] context = 262_144 -output = 235_929 +output = 80_000 diff --git a/providers/kilo/models/arcee-ai/virtuoso-large.toml b/providers/kilo/models/arcee-ai/virtuoso-large.toml deleted file mode 100644 index f7d03cc0ca4..00000000000 --- a/providers/kilo/models/arcee-ai/virtuoso-large.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Arcee AI: Virtuoso Large" -description = "Flagship model for demanding analysis, coding, and production agent workflows" -release_date = "2025-05-05" -last_updated = "2025-05-05" -attachment = false -reasoning = false -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[cost] -input = 0.75 -output = 1.2 - -[limit] -context = 131_072 -output = 64_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/kilo/models/baidu/ernie-4.5-vl-424b-a47b.toml b/providers/kilo/models/baidu/ernie-4.5-vl-424b-a47b.toml index a962a373363..ef65a04722c 100644 --- a/providers/kilo/models/baidu/ernie-4.5-vl-424b-a47b.toml +++ b/providers/kilo/models/baidu/ernie-4.5-vl-424b-a47b.toml @@ -1,4 +1,4 @@ -name = "Baidu: ERNIE 4.5 VL 424B A47B " +name = "Baidu: ERNIE 4.5 VL 424B A47B (retires Oct 8)" description = "Multimodal reasoning model for visual analysis, planning, and tool use" family = "ernie" release_date = "2025-06-30" diff --git a/providers/kilo/models/bytedance-seed/seed-2.0-lite.toml b/providers/kilo/models/bytedance-seed/seed-2.0-lite.toml index b4f478fc036..cfdf2d37937 100644 --- a/providers/kilo/models/bytedance-seed/seed-2.0-lite.toml +++ b/providers/kilo/models/bytedance-seed/seed-2.0-lite.toml @@ -1,6 +1,5 @@ base_model = "bytedance-seed/seed-2.0-lite" description = "Multimodal reasoning model for visual analysis, planning, and tool use" -structured_output = true [[reasoning_options]] type = "effort" diff --git a/providers/kilo/models/bytedance-seed/seed-2.0-mini.toml b/providers/kilo/models/bytedance-seed/seed-2.0-mini.toml index 22dd8120f8b..9d67dc91391 100644 --- a/providers/kilo/models/bytedance-seed/seed-2.0-mini.toml +++ b/providers/kilo/models/bytedance-seed/seed-2.0-mini.toml @@ -1,6 +1,5 @@ base_model = "bytedance-seed/seed-2.0-mini" description = "Multimodal reasoning model for visual analysis, planning, and tool use" -structured_output = true [[reasoning_options]] type = "effort" diff --git a/providers/kilo/models/cohere/command-a-plus.toml b/providers/kilo/models/cohere/command-a-plus.toml new file mode 100644 index 00000000000..dcee2ea1432 --- /dev/null +++ b/providers/kilo/models/cohere/command-a-plus.toml @@ -0,0 +1,28 @@ +name = "Cohere: Command A+" +description = "Command A+ is Cohere's flagship model for enterprise agentic workflows. It accepts text and image inputs with a 192K context window, supports native tool calling with strict tool schemas, structured..." +family = "command-a" +release_date = "2026-09-22" +last_updated = "2026-09-22" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.3 +output = 1.5 +cache_read = 0.15 + +[limit] +context = 192_000 +output = 64_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/kilo/models/deepseek/deepseek-chat-v3-0324.toml b/providers/kilo/models/deepseek/deepseek-chat-v3-0324.toml index dd52e88cbb2..764c5575e7c 100644 --- a/providers/kilo/models/deepseek/deepseek-chat-v3-0324.toml +++ b/providers/kilo/models/deepseek/deepseek-chat-v3-0324.toml @@ -11,9 +11,8 @@ structured_output = true open_weights = false [cost] -input = 0.27 -output = 1.12 -cache_read = 0.135 +input = 0.25 +output = 1 [limit] context = 163_840 diff --git a/providers/kilo/models/deepseek/deepseek-chat-v3.1.toml b/providers/kilo/models/deepseek/deepseek-chat-v3.1.toml index 7717353dce8..4269d8ff1fa 100644 --- a/providers/kilo/models/deepseek/deepseek-chat-v3.1.toml +++ b/providers/kilo/models/deepseek/deepseek-chat-v3.1.toml @@ -20,8 +20,8 @@ output = 1 cache_read = 0.135 [limit] -context = 161_000 -output = 144_900 +context = 163_840 +output = 32_768 [modalities] input = ["text"] diff --git a/providers/kilo/models/deepseek/deepseek-chat.toml b/providers/kilo/models/deepseek/deepseek-chat.toml index 9284b65fb41..42fda83c47b 100644 --- a/providers/kilo/models/deepseek/deepseek-chat.toml +++ b/providers/kilo/models/deepseek/deepseek-chat.toml @@ -4,9 +4,9 @@ attachment = false structured_output = true [cost] -input = 0.4 -output = 1.3 +input = 0.32 +output = 0.89 [limit] -context = 128_000 -output = 16_000 +context = 163_840 +output = 16_384 diff --git a/providers/kilo/models/deepseek/deepseek-r1-distill-llama-70b.toml b/providers/kilo/models/deepseek/deepseek-r1-distill-llama-70b.toml index 3635f13d091..18d5e9a099b 100644 --- a/providers/kilo/models/deepseek/deepseek-r1-distill-llama-70b.toml +++ b/providers/kilo/models/deepseek/deepseek-r1-distill-llama-70b.toml @@ -1,4 +1,4 @@ -name = "DeepSeek: R1 Distill Llama 70B" +name = "DeepSeek: R1 Distill Llama 70B (retires Sep 28)" description = "DeepSeek reasoning model for multi-step analysis, math, coding, and tools" family = "deepseek" release_date = "2025-01-23" diff --git a/providers/kilo/models/deepseek/deepseek-r1.toml b/providers/kilo/models/deepseek/deepseek-r1.toml index a4d870608da..0154d4c6e92 100644 --- a/providers/kilo/models/deepseek/deepseek-r1.toml +++ b/providers/kilo/models/deepseek/deepseek-r1.toml @@ -1,6 +1,6 @@ base_model = "deepseek/deepseek-r1" description = "DeepSeek reasoning model for multi-step analysis, math, coding, and tools" -structured_output = true +structured_output = false [[reasoning_options]] type = "effort" diff --git a/providers/kilo/models/deepseek/deepseek-v3.1-terminus.toml b/providers/kilo/models/deepseek/deepseek-v3.1-terminus.toml index 79663dcfa0f..0715bd02e00 100644 --- a/providers/kilo/models/deepseek/deepseek-v3.1-terminus.toml +++ b/providers/kilo/models/deepseek/deepseek-v3.1-terminus.toml @@ -1,4 +1,4 @@ -name = "DeepSeek: DeepSeek V3.1 Terminus" +name = "DeepSeek: DeepSeek V3.1 Terminus (retires Sep 28)" description = "DeepSeek chat model for instruction following, coding, and analysis" family = "deepseek" release_date = "2025-09-22" diff --git a/providers/kilo/models/deepseek/deepseek-v3.2-exp.toml b/providers/kilo/models/deepseek/deepseek-v3.2-exp.toml index 7e9c21db938..0ac45019600 100644 --- a/providers/kilo/models/deepseek/deepseek-v3.2-exp.toml +++ b/providers/kilo/models/deepseek/deepseek-v3.2-exp.toml @@ -1,4 +1,4 @@ -name = "DeepSeek: DeepSeek V3.2 Exp" +name = "DeepSeek: DeepSeek V3.2 Exp (retires Sep 28)" description = "DeepSeek chat model for instruction following, coding, and analysis" family = "deepseek" release_date = "2025-09-29" diff --git a/providers/kilo/models/deepseek/deepseek-v3.2.toml b/providers/kilo/models/deepseek/deepseek-v3.2.toml index 1af0a0ca64c..a29137a7cc0 100644 --- a/providers/kilo/models/deepseek/deepseek-v3.2.toml +++ b/providers/kilo/models/deepseek/deepseek-v3.2.toml @@ -12,4 +12,4 @@ cache_read = 0.1345 [limit] context = 163_840 -output = 147_456 +output = 65_536 diff --git a/providers/kilo/models/deepseek/deepseek-v4-flash-vision-exp.toml b/providers/kilo/models/deepseek/deepseek-v4-flash-vision-exp.toml index 6f876cf5199..a280435f49f 100644 --- a/providers/kilo/models/deepseek/deepseek-v4-flash-vision-exp.toml +++ b/providers/kilo/models/deepseek/deepseek-v4-flash-vision-exp.toml @@ -1,15 +1,15 @@ base_model = "deepseek/deepseek-v4-flash-vision-exp" description = "DeepSeek V4 Flash Vision Exp is an experimental vision-enabled version of [DeepSeek V4 Flash 0731](https://openrouter.ai/deepseek/deepseek-v4-flash-0731) from DeepSeek, adding image understanding while matching the base model on text capabilities including agents,..." -structured_output = false [[reasoning_options]] type = "effort" values = ["none", "low", "high", "max"] [cost] -input = 0.22 -output = 0.66 -cache_read = 0.007 +input = 0.44 +output = 1.32 +cache_read = 0.028 [limit] context = 1_048_576 +output = 943_718 diff --git a/providers/kilo/models/deepseek/deepseek-v4-pro-0813.toml b/providers/kilo/models/deepseek/deepseek-v4-pro-0813.toml index 7f2ba8568dd..01800e18158 100644 --- a/providers/kilo/models/deepseek/deepseek-v4-pro-0813.toml +++ b/providers/kilo/models/deepseek/deepseek-v4-pro-0813.toml @@ -8,8 +8,7 @@ values = ["none", "low", "high", "max"] [cost] input = 1.32 output = 3.96 -cache_read = 0.132 +cache_read = 0.044 [limit] -context = 1_048_575 -output = 943_717 +context = 1_024_000 diff --git a/providers/kilo/models/deepseek/deepseek-v4.1-flash.toml b/providers/kilo/models/deepseek/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..d755c215bcf --- /dev/null +++ b/providers/kilo/models/deepseek/deepseek-v4.1-flash.toml @@ -0,0 +1,15 @@ +base_model = "deepseek/deepseek-v4.1-flash" +description = "DeepSeek V4.1 Flash is a sparse mixture-of-experts model from DeepSeek, and the cost-efficient tier of the V4.1 family. DeepSeek reports that it exceeds V4 Pro on performance, speed, and task..." + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.006 + +[limit] +context = 1_048_576 +output = 943_718 diff --git a/providers/kilo/models/google/gemini-2.5-pro-preview-05-06.toml b/providers/kilo/models/google/gemini-2.5-pro-preview-05-06.toml deleted file mode 100644 index 5d6ee47e3c9..00000000000 --- a/providers/kilo/models/google/gemini-2.5-pro-preview-05-06.toml +++ /dev/null @@ -1,30 +0,0 @@ -name = "Google: Gemini 2.5 Pro Preview 05-06" -description = "Advanced Gemini model for complex reasoning, coding, and multimodal analysis" -family = "gemini" -release_date = "2025-05-07" -last_updated = "2025-05-07" -attachment = true -reasoning = true -temperature = true -tool_call = true -structured_output = true -open_weights = false - -[[reasoning_options]] -type = "effort" -values = ["high"] - -[cost] -input = 1.25 -output = 10 -reasoning = 10 -cache_read = 0.125 -cache_write = 0.375 - -[limit] -context = 1_048_576 -output = 65_535 - -[modalities] -input = ["text", "image", "pdf", "audio", "video"] -output = ["text"] diff --git a/providers/kilo/models/google/gemini-3-flash-preview.toml b/providers/kilo/models/google/gemini-3-flash-preview.toml index c36634cee03..53969153e81 100644 --- a/providers/kilo/models/google/gemini-3-flash-preview.toml +++ b/providers/kilo/models/google/gemini-3-flash-preview.toml @@ -6,8 +6,8 @@ type = "effort" values = ["none", "minimal", "low", "medium", "high"] [cost] -input = 0.5 -output = 3 -reasoning = 3 -cache_read = 0.05 -cache_write = 0.083333 +input = 0.25 +output = 1.5 +reasoning = 1.5 +cache_read = 0.025 +cache_write = 0.041667 diff --git a/providers/kilo/models/google/gemini-3-pro-image-preview.toml b/providers/kilo/models/google/gemini-3-pro-image-preview.toml index fbc8273e7e5..187901bba6f 100644 --- a/providers/kilo/models/google/gemini-3-pro-image-preview.toml +++ b/providers/kilo/models/google/gemini-3-pro-image-preview.toml @@ -7,11 +7,11 @@ type = "effort" values = ["high"] [cost] -input = 2 -output = 12 -reasoning = 12 -cache_read = 0.2 -cache_write = 0.375 +input = 1 +output = 6 +reasoning = 6 +cache_read = 0.1 +cache_write = 0.1875 [modalities] input = ["image", "text", "pdf"] diff --git a/providers/kilo/models/google/gemini-3-pro-image.toml b/providers/kilo/models/google/gemini-3-pro-image.toml index b4f1e62ee4d..13d9172697e 100644 --- a/providers/kilo/models/google/gemini-3-pro-image.toml +++ b/providers/kilo/models/google/gemini-3-pro-image.toml @@ -14,8 +14,5 @@ reasoning = 12 cache_read = 0.2 cache_write = 0.375 -[limit] -context = 131_072 - [modalities] input = ["image", "text", "pdf"] diff --git a/providers/kilo/models/google/gemini-3.1-flash-lite.toml b/providers/kilo/models/google/gemini-3.1-flash-lite.toml index d01a3b46f5d..5de09a65c91 100644 --- a/providers/kilo/models/google/gemini-3.1-flash-lite.toml +++ b/providers/kilo/models/google/gemini-3.1-flash-lite.toml @@ -6,8 +6,8 @@ type = "effort" values = ["none", "minimal", "low", "medium", "high"] [cost] -input = 0.25 -output = 1.5 -reasoning = 1.5 -cache_read = 0.025 -cache_write = 0.083333 +input = 0.125 +output = 0.75 +reasoning = 0.75 +cache_read = 0.0125 +cache_write = 0.041667 diff --git a/providers/kilo/models/google/gemini-3.1-pro-preview.toml b/providers/kilo/models/google/gemini-3.1-pro-preview.toml index b6940362b26..9504d134abe 100644 --- a/providers/kilo/models/google/gemini-3.1-pro-preview.toml +++ b/providers/kilo/models/google/gemini-3.1-pro-preview.toml @@ -6,8 +6,8 @@ type = "effort" values = ["low", "medium", "high"] [cost] -input = 2 -output = 12 -reasoning = 12 -cache_read = 0.2 -cache_write = 0.375 +input = 1 +output = 6 +reasoning = 6 +cache_read = 0.1 +cache_write = 0.1875 diff --git a/providers/kilo/models/google/gemini-3.5-flash-lite.toml b/providers/kilo/models/google/gemini-3.5-flash-lite.toml index 9d7dc172272..7df3fa1b11d 100644 --- a/providers/kilo/models/google/gemini-3.5-flash-lite.toml +++ b/providers/kilo/models/google/gemini-3.5-flash-lite.toml @@ -6,8 +6,8 @@ type = "effort" values = ["minimal", "low", "medium", "high"] [cost] -input = 0.3 -output = 2.5 -reasoning = 2.5 -cache_read = 0.03 -cache_write = 0.083333 +input = 0.15 +output = 1.25 +reasoning = 1.25 +cache_read = 0.015 +cache_write = 0.041667 diff --git a/providers/kilo/models/google/gemini-3.5-flash.toml b/providers/kilo/models/google/gemini-3.5-flash.toml index 636e645a59e..924de6b8409 100644 --- a/providers/kilo/models/google/gemini-3.5-flash.toml +++ b/providers/kilo/models/google/gemini-3.5-flash.toml @@ -6,8 +6,8 @@ type = "effort" values = ["minimal", "low", "medium", "high"] [cost] -input = 1.5 -output = 9 -reasoning = 9 -cache_read = 0.15 -cache_write = 0.083333 +input = 0.75 +output = 4.5 +reasoning = 4.5 +cache_read = 0.075 +cache_write = 0.041667 diff --git a/providers/kilo/models/google/gemini-3.6-flash.toml b/providers/kilo/models/google/gemini-3.6-flash.toml index 0cfea2d6c4d..a0edcbc465b 100644 --- a/providers/kilo/models/google/gemini-3.6-flash.toml +++ b/providers/kilo/models/google/gemini-3.6-flash.toml @@ -6,8 +6,8 @@ type = "effort" values = ["minimal", "low", "medium", "high"] [cost] -input = 0.75 -output = 3.75 -reasoning = 3.75 -cache_read = 0.075 -cache_write = 0.041667 +input = 0.375 +output = 1.875 +reasoning = 1.875 +cache_read = 0.0375 +cache_write = 0.020833 diff --git a/providers/kilo/models/google/gemini-3.7-flash.toml b/providers/kilo/models/google/gemini-3.7-flash.toml index 912cb550f9a..c15dde8744f 100644 --- a/providers/kilo/models/google/gemini-3.7-flash.toml +++ b/providers/kilo/models/google/gemini-3.7-flash.toml @@ -6,8 +6,8 @@ type = "effort" values = ["low", "medium", "high"] [cost] -input = 1.5 -output = 7.5 -reasoning = 7.5 -cache_read = 0.15 -cache_write = 0.083333 +input = 0.75 +output = 3.75 +reasoning = 3.75 +cache_read = 0.075 +cache_write = 0.041667 diff --git a/providers/kilo/models/google/gemini-3.8-flash.toml b/providers/kilo/models/google/gemini-3.8-flash.toml new file mode 100644 index 00000000000..35a21fd5441 --- /dev/null +++ b/providers/kilo/models/google/gemini-3.8-flash.toml @@ -0,0 +1,13 @@ +base_model = "google/gemini-3.8-flash" +description = "Gemini 3.8 Flash is Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows." + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.75 +output = 3.75 +reasoning = 3.75 +cache_read = 0.075 +cache_write = 0.041667 diff --git a/providers/kilo/models/google/gemma-3-12b-it.toml b/providers/kilo/models/google/gemma-3-12b-it.toml index cdccfeef0ea..df1bb400e98 100644 --- a/providers/kilo/models/google/gemma-3-12b-it.toml +++ b/providers/kilo/models/google/gemma-3-12b-it.toml @@ -1,23 +1,10 @@ -name = "Google: Gemma 3 12B" +base_model = "google/gemma-3-12b-it" description = "Open Gemma instruction model for efficient chat and self-hosted deployments" -family = "gemma" -release_date = "2025-03-13" -last_updated = "2025-03-13" -attachment = true -reasoning = false -temperature = true -tool_call = true structured_output = true -open_weights = false [cost] input = 0.05 output = 0.15 [limit] -context = 131_072 output = 16_384 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/kilo/models/google/gemma-3-27b-it.toml b/providers/kilo/models/google/gemma-3-27b-it.toml index 30df275dd92..be1dacf09a9 100644 --- a/providers/kilo/models/google/gemma-3-27b-it.toml +++ b/providers/kilo/models/google/gemma-3-27b-it.toml @@ -1,23 +1,10 @@ -name = "Google: Gemma 3 27B" +base_model = "google/gemma-3-27b-it" description = "Open Gemma instruction model for efficient chat and self-hosted deployments" -family = "gemma" -release_date = "2025-03-12" -last_updated = "2025-03-12" -attachment = true -reasoning = false -temperature = true -tool_call = true structured_output = true -open_weights = false [cost] input = 0.08 output = 0.16 [limit] -context = 131_072 output = 117_964 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/kilo/models/google/gemma-3-4b-it.toml b/providers/kilo/models/google/gemma-3-4b-it.toml index 469a5f8c8ea..45f5a1839e2 100644 --- a/providers/kilo/models/google/gemma-3-4b-it.toml +++ b/providers/kilo/models/google/gemma-3-4b-it.toml @@ -1,23 +1,11 @@ -name = "Google: Gemma 3 4B" +base_model = "google/gemma-3-4b-it" description = "Open Gemma instruction model for efficient chat and self-hosted deployments" -family = "gemma" -release_date = "2025-03-13" -last_updated = "2025-03-13" -attachment = true -reasoning = false -temperature = true tool_call = false structured_output = true -open_weights = false [cost] input = 0.05 output = 0.1 [limit] -context = 131_072 output = 16_384 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/kilo/models/google/gemma-4-26b-a4b-it.toml b/providers/kilo/models/google/gemma-4-26b-a4b-it.toml index 512c2f23404..baa53082fe1 100644 --- a/providers/kilo/models/google/gemma-4-26b-a4b-it.toml +++ b/providers/kilo/models/google/gemma-4-26b-a4b-it.toml @@ -10,7 +10,7 @@ input = 0.042 output = 0.22 [limit] -output = 16_384 +output = 235_929 [modalities] input = ["image", "text", "video"] diff --git a/providers/kilo/models/gryphe/mythomax-l2-13b.toml b/providers/kilo/models/gryphe/mythomax-l2-13b.toml index a7751171cf6..9cb22a7518d 100644 --- a/providers/kilo/models/gryphe/mythomax-l2-13b.toml +++ b/providers/kilo/models/gryphe/mythomax-l2-13b.toml @@ -10,8 +10,8 @@ structured_output = true open_weights = false [cost] -input = 0.06 -output = 0.06 +input = 0.08 +output = 0.11 [limit] context = 4_096 diff --git a/providers/kilo/models/ibm-granite/granite-4.1-8b.toml b/providers/kilo/models/ibm-granite/granite-4.1-8b.toml deleted file mode 100644 index f53347d702d..00000000000 --- a/providers/kilo/models/ibm-granite/granite-4.1-8b.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "IBM: Granite 4.1 8B" -description = "Tool-capable chat model for instruction following and agentic application workflows" -family = "granite" -release_date = "2026-04-30" -last_updated = "2026-04-30" -attachment = false -reasoning = false -temperature = true -tool_call = true -structured_output = true -open_weights = false - -[cost] -input = 0.05 -output = 0.1 -cache_read = 0.05 - -[limit] -context = 131_072 -output = 117_964 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/kilo/models/ibm-granite/granite-4.2-8b.toml b/providers/kilo/models/ibm-granite/granite-4.2-8b.toml new file mode 100644 index 00000000000..f7ead7bbbc0 --- /dev/null +++ b/providers/kilo/models/ibm-granite/granite-4.2-8b.toml @@ -0,0 +1,28 @@ +name = "IBM: Granite 4.2 8B" +description = "Granite 4.2 8B is a dense reasoning model from IBM. It is suited for mathematics, code generation, multilingual dialogue, and agentic workflows that need multi-step reasoning. It supports full, low-effort,..." +family = "granite" +release_date = "2026-08-31" +last_updated = "2026-08-31" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high"] + +[cost] +input = 0.06 +output = 0.25 +cache_read = 0.015 + +[limit] +context = 131_072 +output = 117_964 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/kilo/models/inception/mercury-2.5.toml b/providers/kilo/models/inception/mercury-2.5.toml new file mode 100644 index 00000000000..03b5d5c14c7 --- /dev/null +++ b/providers/kilo/models/inception/mercury-2.5.toml @@ -0,0 +1,28 @@ +name = "Inception: Mercury 2.5" +description = "Mercury 2.5 is the fastest reasoning LLM, and the latest diffusion LLM (dLLM) from Inception. Instead of generating tokens sequentially, Mercury 2.5 produces and refines multiple tokens in parallel, achieving..." +family = "mercury" +release_date = "2026-09-08" +last_updated = "2026-09-08" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + +[cost] +input = 0.2 +output = 0.75 +cache_read = 0.02 + +[limit] +context = 260_000 +output = 65_536 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/kilo/models/inclusionai/ling-3.0-flash-fin.toml b/providers/kilo/models/inclusionai/ling-3.0-flash-fin.toml new file mode 100644 index 00000000000..8eefe09bab0 --- /dev/null +++ b/providers/kilo/models/inclusionai/ling-3.0-flash-fin.toml @@ -0,0 +1,28 @@ +name = "inclusionAI: Ling 3.0 Flash Fin" +description = "Ling 3.0 Flash Fin is a finance-focused mixture-of-experts model from InclusionAI, built on Ling 3.0 Flash with 5.1B active parameters out of 124B total. It is designed for real-world investment..." +family = "ling" +release_date = "2026-08-27" +last_updated = "2026-08-27" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.06 +output = 0.18 +cache_read = 0.012 + +[limit] +context = 262_144 +output = 235_929 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/kilo/models/inclusionai/ling-3.0-flash-fin:free.toml b/providers/kilo/models/inclusionai/ling-3.0-flash-fin:free.toml new file mode 100644 index 00000000000..8a567141419 --- /dev/null +++ b/providers/kilo/models/inclusionai/ling-3.0-flash-fin:free.toml @@ -0,0 +1,27 @@ +name = "inclusionAI: Ling 3.0 Flash Fin (free)" +description = "Ling 3.0 Flash Fin is a finance-focused mixture-of-experts model from InclusionAI, built on Ling 3.0 Flash with 5.1B active parameters out of 124B total. It is designed for real-world investment..." +family = "ling" +release_date = "2026-08-27" +last_updated = "2026-08-27" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0 +output = 0 + +[limit] +context = 262_144 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/kilo/models/inclusionai/ling-3.0-flash-sante:free.toml b/providers/kilo/models/inclusionai/ling-3.0-flash-sante:free.toml new file mode 100644 index 00000000000..06431f38e8d --- /dev/null +++ b/providers/kilo/models/inclusionai/ling-3.0-flash-sante:free.toml @@ -0,0 +1,27 @@ +name = "inclusionAI: Ling 3.0 Flash Sante (free)" +description = "Ling 3.0 Flash Sante is a health and medicine-focused mixture-of-experts model from InclusionAI, built on Ling 3.0 Flash with 5.1B active parameters out of 124B total. It is designed for..." +family = "ling" +release_date = "2026-09-04" +last_updated = "2026-09-04" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0 +output = 0 + +[limit] +context = 262_144 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/kilo/models/inclusionai/ling-3.0-flash-vl.toml b/providers/kilo/models/inclusionai/ling-3.0-flash-vl.toml new file mode 100644 index 00000000000..7231d1ddd68 --- /dev/null +++ b/providers/kilo/models/inclusionai/ling-3.0-flash-vl.toml @@ -0,0 +1,28 @@ +name = "inclusionAI: Ling 3.0 Flash VL" +description = "Ling 3.0 Flash VL builds on Ling 3.0 Flash (124B total / 5.5B active MoE from InclusionAI), further strengthening its language capabilities while adding native visual perception and advanced visual..." +family = "ling" +release_date = "2026-09-10" +last_updated = "2026-09-10" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.075 +output = 0.22 +cache_read = 0.015 + +[limit] +context = 131_072 +output = 32_768 + +[modalities] +input = ["text", "image", "video"] +output = ["text"] diff --git a/providers/kilo/models/inclusionai/ling-3.0-flash.toml b/providers/kilo/models/inclusionai/ling-3.0-flash.toml index 3f459c7644b..aed0e0e6da0 100644 --- a/providers/kilo/models/inclusionai/ling-3.0-flash.toml +++ b/providers/kilo/models/inclusionai/ling-3.0-flash.toml @@ -1,4 +1,4 @@ -name = "Ling-3.0-flash" +name = "inclusionAI: Ling 3.0 Flash" description = "*Ling-3.0-flash* is a *124B-parameter Mixture-of-Experts (MoE) model*, with approximately *5.1B parameters activated per token*. The model is designed with *token efficiency and production-scale agentic inference* as key priorities, enabling developers..." family = "ling" release_date = "2026-07-23" diff --git a/providers/kilo/models/inference-net/schematron-v2-small.toml b/providers/kilo/models/inference-net/schematron-v2-small.toml new file mode 100644 index 00000000000..17606c49e47 --- /dev/null +++ b/providers/kilo/models/inference-net/schematron-v2-small.toml @@ -0,0 +1,23 @@ +name = "Inference.net: Schematron V2 Small" +description = "Schematron V2 Small is a 3B-parameter HTML-to-JSON extraction model from Inference.net. It prioritizes extraction quality for complex schemas and long pages. Extraction instructions must be supplied through a JSON schema..." +release_date = "2026-09-12" +last_updated = "2026-09-12" +attachment = false +reasoning = false +temperature = true +tool_call = false +structured_output = true +open_weights = false + +[cost] +input = 0.05 +output = 0.23 +cache_read = 0.05 + +[limit] +context = 128_000 +output = 4_096 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/kilo/models/inference-net/schematron-v2-turbo.toml b/providers/kilo/models/inference-net/schematron-v2-turbo.toml new file mode 100644 index 00000000000..a3ab0173806 --- /dev/null +++ b/providers/kilo/models/inference-net/schematron-v2-turbo.toml @@ -0,0 +1,23 @@ +name = "Inference.net: Schematron V2 Turbo" +description = "Schematron V2 Turbo is a 3B-parameter HTML-to-JSON extraction model from Inference.net. It prioritizes throughput for high-volume extraction workloads. Extraction instructions must be supplied through a JSON schema in response_format rather..." +release_date = "2026-09-12" +last_updated = "2026-09-12" +attachment = false +reasoning = false +temperature = true +tool_call = false +structured_output = true +open_weights = false + +[cost] +input = 0.03 +output = 0.15 +cache_read = 0.03 + +[limit] +context = 128_000 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/kilo/models/kilo-auto/free.toml b/providers/kilo/models/kilo-auto/free.toml index 826dc9f64ed..9b52762995f 100644 --- a/providers/kilo/models/kilo-auto/free.toml +++ b/providers/kilo/models/kilo-auto/free.toml @@ -20,7 +20,7 @@ cache_write = 0 [limit] context = 256_000 -output = 10_000 +output = 32_768 [modalities] input = ["text"] diff --git a/providers/kilo/models/kwaipilot/kat-coder-air-v2.5.toml b/providers/kilo/models/kwaipilot/kat-coder-air-v2.5.toml deleted file mode 100644 index d891c2b7b64..00000000000 --- a/providers/kilo/models/kwaipilot/kat-coder-air-v2.5.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Kwaipilot: KAT-Coder-Air V2.5" -description = "KAT-Coder-Air V2.5 is a flagship-level Agentic Coding model that can directly hand over an entire issue or an entire business workflow to it, allowing it to autonomously locate and make..." -family = "kat-coder" -release_date = "2026-07-10" -last_updated = "2026-07-10" -attachment = false -reasoning = false -temperature = true -tool_call = true -structured_output = true -open_weights = false - -[cost] -input = 0.15 -output = 0.6 -cache_read = 0.03 - -[limit] -context = 256_000 -output = 80_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/kilo/models/kwaipilot/kat-coder-pro-v2.5.toml b/providers/kilo/models/kwaipilot/kat-coder-pro-v2.5.toml index a7851a2fa50..38b3e5d6d0e 100644 --- a/providers/kilo/models/kwaipilot/kat-coder-pro-v2.5.toml +++ b/providers/kilo/models/kwaipilot/kat-coder-pro-v2.5.toml @@ -16,8 +16,8 @@ output = 2.96 cache_read = 0.15 [limit] -context = 256_000 -output = 80_000 +context = 262_144 +output = 235_929 [modalities] input = ["text"] diff --git a/providers/kilo/models/kwaipilot/kat-coder-pro-v2.toml b/providers/kilo/models/kwaipilot/kat-coder-pro-v2.toml deleted file mode 100644 index 8c14b589e85..00000000000 --- a/providers/kilo/models/kwaipilot/kat-coder-pro-v2.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Kwaipilot: KAT-Coder-Pro V2" -description = "Coding model for repository understanding, refactors, and agentic engineering tasks" -family = "kat-coder" -release_date = "2026-03-27" -last_updated = "2026-03-27" -attachment = false -reasoning = false -temperature = true -tool_call = true -structured_output = true -open_weights = false - -[cost] -input = 0.3 -output = 1.2 -cache_read = 0.06 - -[limit] -context = 256_000 -output = 80_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/kilo/models/mancer/weaver.toml b/providers/kilo/models/mancer/weaver.toml index 9bd2ed94b99..498687047fe 100644 --- a/providers/kilo/models/mancer/weaver.toml +++ b/providers/kilo/models/mancer/weaver.toml @@ -11,7 +11,7 @@ structured_output = false open_weights = false [cost] -input = 0.5 +input = 0.4 output = 0.75 [limit] diff --git a/providers/kilo/models/meituan/longcat-2.0-free.toml b/providers/kilo/models/meituan/longcat-2.0-free.toml deleted file mode 100644 index 582e354a9eb..00000000000 --- a/providers/kilo/models/meituan/longcat-2.0-free.toml +++ /dev/null @@ -1,29 +0,0 @@ -name = "Meituan: LongCat 2.0 (free)" -description = "LongCat 2.0 is a sparse mixture-of-experts language model from Meituan, with 48B active parameters out of 1.6T total. It is suited for coding, repository-level changes, long-horizon problem solving, and agentic workflows. Available free in Kilo for a limited time." -family = "longcat" -release_date = "2025-08-26" -last_updated = "2025-08-26" -attachment = false -reasoning = true -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "effort" -values = ["none", "high"] - -[cost] -input = 0 -output = 0 -reasoning = 0 -cache_read = 0 - -[limit] -context = 1_048_756 -output = 131_072 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/kilo/models/meta-llama/llama-3.1-70b-instruct.toml b/providers/kilo/models/meta-llama/llama-3.1-70b-instruct.toml index 9897bdffb94..881a90e0d15 100644 --- a/providers/kilo/models/meta-llama/llama-3.1-70b-instruct.toml +++ b/providers/kilo/models/meta-llama/llama-3.1-70b-instruct.toml @@ -1,14 +1,6 @@ -name = "Meta: Llama 3.1 70B Instruct" +base_model = "meta/llama-3.1-70b-instruct" description = "Open Llama instruction model for multilingual chat, reasoning, and coding" -family = "llama" -release_date = "2024-07-23" -last_updated = "2024-07-23" -attachment = false -reasoning = false -temperature = true -tool_call = true structured_output = true -open_weights = false [cost] input = 0.4 @@ -17,7 +9,3 @@ output = 0.4 [limit] context = 131_072 output = 16_384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/kilo/models/meta-llama/llama-3.3-70b-instruct.toml b/providers/kilo/models/meta-llama/llama-3.3-70b-instruct.toml index 1651fa89774..6ec2fdc3aa4 100644 --- a/providers/kilo/models/meta-llama/llama-3.3-70b-instruct.toml +++ b/providers/kilo/models/meta-llama/llama-3.3-70b-instruct.toml @@ -1,6 +1,5 @@ base_model = "meta/llama-3.3-70b-instruct" description = "Open Llama instruction model for multilingual chat, reasoning, and coding" -attachment = false structured_output = true [cost] @@ -8,4 +7,5 @@ input = 0.1 output = 0.32 [limit] -output = 115_200 +context = 131_072 +output = 16_384 diff --git a/providers/kilo/models/meta-llama/llama-4-maverick.toml b/providers/kilo/models/meta-llama/llama-4-maverick.toml index 3db8291511b..fab1dd0fc03 100644 --- a/providers/kilo/models/meta-llama/llama-4-maverick.toml +++ b/providers/kilo/models/meta-llama/llama-4-maverick.toml @@ -11,11 +11,11 @@ structured_output = true open_weights = false [cost] -input = 0.2 -output = 0.696 +input = 0.1875 +output = 0.6525 [limit] -context = 1_048_576 +context = 128_000 output = 16_384 [modalities] diff --git a/providers/kilo/models/meta-llama/llama-4-scout.toml b/providers/kilo/models/meta-llama/llama-4-scout.toml index 94cda30825c..e70a3817365 100644 --- a/providers/kilo/models/meta-llama/llama-4-scout.toml +++ b/providers/kilo/models/meta-llama/llama-4-scout.toml @@ -15,8 +15,8 @@ input = 0.1 output = 0.3 [limit] -context = 131_072 -output = 8_192 +context = 327_680 +output = 16_384 [modalities] input = ["text", "image"] diff --git a/providers/kilo/models/meta/muse-glimmer-30b.toml b/providers/kilo/models/meta/muse-glimmer-30b.toml index 2c352c0d845..aa01201020a 100644 --- a/providers/kilo/models/meta/muse-glimmer-30b.toml +++ b/providers/kilo/models/meta/muse-glimmer-30b.toml @@ -11,7 +11,7 @@ output = 1.1 cache_read = 0.04 [limit] -output = 117_964 +output = 16_384 [modalities] input = ["text", "image", "pdf"] diff --git a/providers/kilo/models/meta/muse-spark-1.1.toml b/providers/kilo/models/meta/muse-spark-1.1.toml index 52d43f95e1f..68a20ab4888 100644 --- a/providers/kilo/models/meta/muse-spark-1.1.toml +++ b/providers/kilo/models/meta/muse-spark-1.1.toml @@ -11,7 +11,6 @@ output = 4.25 cache_read = 0.15 [limit] -context = 1_048_576 output = 943_718 [modalities] diff --git a/providers/kilo/models/meta/muse-spark-1.3-contributor.toml b/providers/kilo/models/meta/muse-spark-1.3-contributor.toml new file mode 100644 index 00000000000..f0748ba0c05 --- /dev/null +++ b/providers/kilo/models/meta/muse-spark-1.3-contributor.toml @@ -0,0 +1,28 @@ +name = "Meta: Muse Spark 1.3 Contributor" +description = "Muse Spark 1.3 Contributor is the cost-efficient contributor tier of Meta’s multimodal reasoning model for experimentation, learning, and early-stage agentic, multi-agent, and coding workflows. It is designed to track information..." +family = "muse" +release_date = "2026-09-02" +last_updated = "2026-09-02" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.1 +output = 0.2 +cache_read = 0.002 + +[limit] +context = 1_048_576 +output = 943_718 + +[modalities] +input = ["text", "image", "video", "pdf", "audio"] +output = ["text"] diff --git a/providers/kilo/models/meta/muse-spark-1.3.toml b/providers/kilo/models/meta/muse-spark-1.3.toml new file mode 100644 index 00000000000..42aa0a7f8db --- /dev/null +++ b/providers/kilo/models/meta/muse-spark-1.3.toml @@ -0,0 +1,14 @@ +base_model = "meta/muse-spark-1.3" +description = "Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It is designed to keep track of information across extended tasks, work through..." + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 1.25 +output = 4.25 +cache_read = 0.15 + +[limit] +output = 943_718 diff --git a/providers/kilo/models/minimax/minimax-m2.7:free.toml b/providers/kilo/models/minimax/minimax-m2.7:free.toml deleted file mode 100644 index a0258eb4533..00000000000 --- a/providers/kilo/models/minimax/minimax-m2.7:free.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "minimax/MiniMax-M2.7" -name = "MiniMax: MiniMax M2.7 (free)" -description = "MiniMax-M2.7 is a next-generation large language model designed for autonomous, real-world productivity and continuous improvement. Built to actively participate in its own evolution, M2.7 integrates advanced agentic capabilities through multi-agent..." -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["high"] - -[cost] -input = 0 -output = 0 - -[limit] -context = 196_608 -output = 176_947 diff --git a/providers/kilo/models/minimax/minimax-m3:free.toml b/providers/kilo/models/minimax/minimax-m3:free.toml deleted file mode 100644 index d922c671141..00000000000 --- a/providers/kilo/models/minimax/minimax-m3:free.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "minimax/MiniMax-M3" -name = "MiniMax: MiniMax M3 (free)" -description = "MiniMax-M3 is a multimodal foundation model from MiniMax. It supports text, image, and video inputs with text output, a 1M-token context window, and is suited for long-horizon agentic work, coding,..." -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["none", "high"] - -[cost] -input = 0 -output = 0 - -[limit] -output = 943_718 diff --git a/providers/kilo/models/mistralai/devstral-2512.toml b/providers/kilo/models/mistralai/devstral-2512.toml deleted file mode 100644 index 2df4113f1ab..00000000000 --- a/providers/kilo/models/mistralai/devstral-2512.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "mistral/devstral-2512" -description = "Devstral 2 is a state-of-the-art open-source model by Mistral AI specializing in agentic coding. It is a 123B-parameter dense transformer model supporting a 256K context window. Devstral 2 supports exploring..." -attachment = true -structured_output = true - -[cost] -input = 0.44 -output = 2.2 -cache_read = 0.044 - -[limit] -output = 209_715 - -[modalities] -input = ["text", "pdf"] diff --git a/providers/kilo/models/mistralai/ministral-8b.toml b/providers/kilo/models/mistralai/ministral-8b.toml deleted file mode 100644 index a6f3b6862cf..00000000000 --- a/providers/kilo/models/mistralai/ministral-8b.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Mistral: Ministral 8B" -description = "Ministral 8B is an 8B parameter model featuring a unique interleaved sliding-window attention pattern for faster, memory-efficient inference. Designed for edge use cases, it supports up to 128k context length..." -family = "ministral" -release_date = "2024-10-17" -last_updated = "2024-10-17" -attachment = false -reasoning = false -temperature = true -tool_call = false -structured_output = true -open_weights = false - -[cost] -input = 0.11 -output = 0.11 - -[limit] -context = 128_000 -output = 102_400 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/kilo/models/mistralai/mistral-large-2512.toml b/providers/kilo/models/mistralai/mistral-large-2512.toml deleted file mode 100644 index a1f4d549c6b..00000000000 --- a/providers/kilo/models/mistralai/mistral-large-2512.toml +++ /dev/null @@ -1,14 +0,0 @@ -base_model = "mistral/mistral-large-2512" -description = "Flagship Mistral model for advanced reasoning, coding, and multilingual work" -structured_output = true - -[cost] -input = 0.5 -output = 1.5 -cache_read = 0.05 - -[limit] -output = 209_715 - -[modalities] -input = ["text", "image", "pdf"] diff --git a/providers/kilo/models/mistralai/mistral-nemo.toml b/providers/kilo/models/mistralai/mistral-nemo.toml index 818e29c051d..05d2aff530a 100644 --- a/providers/kilo/models/mistralai/mistral-nemo.toml +++ b/providers/kilo/models/mistralai/mistral-nemo.toml @@ -3,9 +3,8 @@ description = "Mistral model for multilingual chat, reasoning, and tool-assisted structured_output = true [cost] -input = 0.165 -output = 0.165 -cache_read = 0.0165 +input = 0.019 +output = 0.03 [limit] context = 131_072 diff --git a/providers/kilo/models/mistralai/mistral-small-3.1-24b-instruct.toml b/providers/kilo/models/mistralai/mistral-small-3.1-24b-instruct.toml index e5a92d90a1c..cddc0eb9495 100644 --- a/providers/kilo/models/mistralai/mistral-small-3.1-24b-instruct.toml +++ b/providers/kilo/models/mistralai/mistral-small-3.1-24b-instruct.toml @@ -6,7 +6,7 @@ last_updated = "2025-03-17" attachment = true reasoning = false temperature = true -tool_call = false +tool_call = true structured_output = false open_weights = false diff --git a/providers/kilo/models/mistralai/mistral-small-3.2-24b-instruct.toml b/providers/kilo/models/mistralai/mistral-small-3.2-24b-instruct.toml index 2ae0dda2905..acb807ef2ce 100644 --- a/providers/kilo/models/mistralai/mistral-small-3.2-24b-instruct.toml +++ b/providers/kilo/models/mistralai/mistral-small-3.2-24b-instruct.toml @@ -11,12 +11,11 @@ structured_output = true open_weights = false [cost] -input = 0.11 -output = 0.33 -cache_read = 0.011 +input = 0.09375 +output = 0.25 [limit] -context = 128_000 +context = 256_000 output = 16_384 [modalities] diff --git a/providers/kilo/models/mistralai/voxtral-small-24b-2507.toml b/providers/kilo/models/mistralai/voxtral-small-24b-2507.toml index 8f7727e8b7b..fec9c4575b2 100644 --- a/providers/kilo/models/mistralai/voxtral-small-24b-2507.toml +++ b/providers/kilo/models/mistralai/voxtral-small-24b-2507.toml @@ -1,14 +1,6 @@ -name = "Mistral: Voxtral Small 24B 2507" +base_model = "mistral/voxtral-small-24b-2507" description = "Efficient Mistral model for fast chat, extraction, and production assistants" -family = "mistral" -release_date = "2025-10-30" -last_updated = "2025-10-30" -attachment = true -reasoning = false -temperature = true -tool_call = true structured_output = true -open_weights = false [cost] input = 0.1 @@ -16,9 +8,7 @@ output = 0.3 cache_read = 0.01 [limit] -context = 32_000 -output = 25_600 +output = 26_214 [modalities] input = ["text", "audio", "pdf"] -output = ["text"] diff --git a/providers/kilo/models/moonshotai/kimi-k2-0905.toml b/providers/kilo/models/moonshotai/kimi-k2-0905.toml index 43681235bd0..39cad5b17ea 100644 --- a/providers/kilo/models/moonshotai/kimi-k2-0905.toml +++ b/providers/kilo/models/moonshotai/kimi-k2-0905.toml @@ -16,7 +16,7 @@ output = 2.5 [limit] context = 262_144 -output = 100_352 +output = 98_304 [modalities] input = ["text"] diff --git a/providers/kilo/models/moonshotai/kimi-k2-thinking.toml b/providers/kilo/models/moonshotai/kimi-k2-thinking.toml index 75e607a6e02..c0ea113422d 100644 --- a/providers/kilo/models/moonshotai/kimi-k2-thinking.toml +++ b/providers/kilo/models/moonshotai/kimi-k2-thinking.toml @@ -12,4 +12,4 @@ output = 2.5 cache_read = 0.15 [limit] -output = 100_352 +output = 98_304 diff --git a/providers/kilo/models/moonshotai/kimi-k2.5.toml b/providers/kilo/models/moonshotai/kimi-k2.5.toml index c11fd52e611..7631b0fcb16 100644 --- a/providers/kilo/models/moonshotai/kimi-k2.5.toml +++ b/providers/kilo/models/moonshotai/kimi-k2.5.toml @@ -9,7 +9,6 @@ values = ["none", "high"] [cost] input = 0.6 output = 3 -cache_read = 0.1 [limit] output = 235_929 diff --git a/providers/kilo/models/moonshotai/kimi-k2.6.toml b/providers/kilo/models/moonshotai/kimi-k2.6.toml index 6c37950cf82..de82e76dbba 100644 --- a/providers/kilo/models/moonshotai/kimi-k2.6.toml +++ b/providers/kilo/models/moonshotai/kimi-k2.6.toml @@ -6,8 +6,8 @@ type = "effort" values = ["none", "high"] [cost] -input = 0.8 -output = 3.4 +input = 0.95 +output = 4 cache_read = 0.16 [limit] diff --git a/providers/kilo/models/moonshotai/kimi-k2.7-code.toml b/providers/kilo/models/moonshotai/kimi-k2.7-code.toml index a3ec51be6ac..647938cad59 100644 --- a/providers/kilo/models/moonshotai/kimi-k2.7-code.toml +++ b/providers/kilo/models/moonshotai/kimi-k2.7-code.toml @@ -7,9 +7,9 @@ type = "effort" values = ["high"] [cost] -input = 0.95 -output = 4 -cache_read = 0.19 +input = 0.7062 +output = 3.3 +cache_read = 0.18 [limit] output = 235_929 diff --git a/providers/kilo/models/moonshotai/kimi-k2.toml b/providers/kilo/models/moonshotai/kimi-k2.toml index 86b749e2024..5c774ee8a6d 100644 --- a/providers/kilo/models/moonshotai/kimi-k2.toml +++ b/providers/kilo/models/moonshotai/kimi-k2.toml @@ -16,7 +16,7 @@ output = 2.3 [limit] context = 131_072 -output = 100_352 +output = 98_304 [modalities] input = ["text"] diff --git a/providers/kilo/models/nex-agi/nex-n2-mini.toml b/providers/kilo/models/nex-agi/nex-n2-mini.toml deleted file mode 100644 index 1cbab95cdaf..00000000000 --- a/providers/kilo/models/nex-agi/nex-n2-mini.toml +++ /dev/null @@ -1,28 +0,0 @@ -name = "Nex AGI: Nex-N2-Mini" -description = "Nex-N2-Mini is an open-source agentic mixture-of-experts model from Nex AGI, the smaller sibling in the Nex-N2 series. It accepts text and image input and is built for coding, tool use,..." -family = "agi" -release_date = "2026-06-24" -last_updated = "2026-06-24" -attachment = true -reasoning = true -temperature = true -tool_call = true -structured_output = true -open_weights = false - -[[reasoning_options]] -type = "effort" -values = ["none", "high"] - -[cost] -input = 0.025 -output = 0.1 -cache_read = 0.0025 - -[limit] -context = 262_144 -output = 235_929 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/kilo/models/nex-agi/nex-n2-pro.toml b/providers/kilo/models/nex-agi/nex-n2-pro.toml deleted file mode 100644 index afe5b39162b..00000000000 --- a/providers/kilo/models/nex-agi/nex-n2-pro.toml +++ /dev/null @@ -1,28 +0,0 @@ -name = "Nex AGI: Nex-N2-Pro" -description = "Nex-N2-Pro is an agentic mixture-of-experts model from Nex AGI, with 17B active parameters out of 397B total. Built on the Qwen3.5 architecture, it accepts text and image input and produces..." -family = "agi" -release_date = "2026-06-08" -last_updated = "2026-06-08" -attachment = true -reasoning = true -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "effort" -values = ["none", "high"] - -[cost] -input = 0.25 -output = 1 -cache_read = 0.025 - -[limit] -context = 262_144 -output = 235_929 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/kilo/models/nex-agi/nex-n2.5-mini.toml b/providers/kilo/models/nex-agi/nex-n2.5-mini.toml new file mode 100644 index 00000000000..04ca31fff1a --- /dev/null +++ b/providers/kilo/models/nex-agi/nex-n2.5-mini.toml @@ -0,0 +1,28 @@ +name = "Nex AGI: Nex-N2.5-Mini" +description = "Nex-N2.5 is an agentic model built to turn goals into working, verified outcomes. Its core strength is agentic coding within a visual feedback loop: it can explore codebases, implement multi-file..." +family = "agi" +release_date = "2026-09-08" +last_updated = "2026-09-08" +attachment = true +reasoning = true +temperature = true +tool_call = false +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "medium", "high"] + +[cost] +input = 0.025 +output = 0.1 +cache_read = 0.0025 + +[limit] +context = 262_144 +output = 235_929 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/kilo/models/nex-agi/nex-n2.5-mini:free.toml b/providers/kilo/models/nex-agi/nex-n2.5-mini:free.toml new file mode 100644 index 00000000000..2618f50eb27 --- /dev/null +++ b/providers/kilo/models/nex-agi/nex-n2.5-mini:free.toml @@ -0,0 +1,27 @@ +name = "Nex AGI: Nex-N2.5-Mini (free)" +description = "Nex-N2.5 is an agentic model built to turn goals into working, verified outcomes. Its core strength is agentic coding within a visual feedback loop: it can explore codebases, implement multi-file..." +family = "agi" +release_date = "2026-09-08" +last_updated = "2026-09-08" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "medium", "high"] + +[cost] +input = 0 +output = 0 + +[limit] +context = 262_144 +output = 235_929 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/kilo/models/nex-agi/nex-n2.5-pro.toml b/providers/kilo/models/nex-agi/nex-n2.5-pro.toml new file mode 100644 index 00000000000..e565d70e36f --- /dev/null +++ b/providers/kilo/models/nex-agi/nex-n2.5-pro.toml @@ -0,0 +1,28 @@ +name = "Nex AGI: Nex-N2.5-Pro" +description = "Nex-N2.5 is an agentic model built to turn goals into working, verified outcomes. Its core strength is agentic coding within a visual feedback loop: it can explore codebases, implement multi-file..." +family = "agi" +release_date = "2026-09-08" +last_updated = "2026-09-08" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "medium", "high"] + +[cost] +input = 0.075 +output = 0.25 +cache_read = 0.015 + +[limit] +context = 262_144 +output = 235_929 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/kilo/models/nex-agi/nex-n2.5-pro:free.toml b/providers/kilo/models/nex-agi/nex-n2.5-pro:free.toml new file mode 100644 index 00000000000..6788a3fe86a --- /dev/null +++ b/providers/kilo/models/nex-agi/nex-n2.5-pro:free.toml @@ -0,0 +1,27 @@ +name = "Nex AGI: Nex-N2.5-Pro (free)" +description = "Nex-N2.5 is an agentic model built to turn goals into working, verified outcomes. Its core strength is agentic coding within a visual feedback loop: it can explore codebases, implement multi-file..." +family = "agi" +release_date = "2026-09-08" +last_updated = "2026-09-08" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "medium", "high"] + +[cost] +input = 0 +output = 0 + +[limit] +context = 262_144 +output = 235_929 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/kilo/models/nousresearch/hermes-4-70b.toml b/providers/kilo/models/nousresearch/hermes-4-70b.toml deleted file mode 100644 index b7876a5d850..00000000000 --- a/providers/kilo/models/nousresearch/hermes-4-70b.toml +++ /dev/null @@ -1,27 +0,0 @@ -name = "Nous: Hermes 4 70B" -description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" -family = "nousresearch" -release_date = "2025-08-26" -last_updated = "2025-08-26" -attachment = false -reasoning = true -temperature = true -tool_call = false -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "effort" -values = ["none", "high"] - -[cost] -input = 0.13 -output = 0.4 - -[limit] -context = 131_072 -output = 117_964 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/kilo/models/nvidia/nemotron-3-nano-30b-a3b.toml b/providers/kilo/models/nvidia/nemotron-3-nano-30b-a3b.toml index dbe7bd30394..ecf7bafae91 100644 --- a/providers/kilo/models/nvidia/nemotron-3-nano-30b-a3b.toml +++ b/providers/kilo/models/nvidia/nemotron-3-nano-30b-a3b.toml @@ -8,7 +8,7 @@ values = ["none", "high"] [cost] input = 0.05 output = 0.2 -cache_read = 0.025 +cache_read = 0.03 [limit] output = 235_929 diff --git a/providers/kilo/models/nvidia/nemotron-3-super-120b-a12b.toml b/providers/kilo/models/nvidia/nemotron-3-super-120b-a12b.toml index 39cb4ddae08..f1b0bbb6bfd 100644 --- a/providers/kilo/models/nvidia/nemotron-3-super-120b-a12b.toml +++ b/providers/kilo/models/nvidia/nemotron-3-super-120b-a12b.toml @@ -6,8 +6,8 @@ type = "effort" values = ["none", "low", "medium"] [cost] -input = 0.085 -output = 0.4 +input = 0.08 +output = 0.45 [limit] -output = 16_384 +output = 235_929 diff --git a/providers/kilo/models/nvidia/nemotron-3-ultra-550b-a55b.toml b/providers/kilo/models/nvidia/nemotron-3-ultra-550b-a55b.toml index 4d6615c6b1e..25c72a0b0fb 100644 --- a/providers/kilo/models/nvidia/nemotron-3-ultra-550b-a55b.toml +++ b/providers/kilo/models/nvidia/nemotron-3-ultra-550b-a55b.toml @@ -12,5 +12,5 @@ output = 2.2 cache_read = 0.1 [limit] -context = 512_288 -output = 461_059 +context = 202_800 +output = 182_520 diff --git a/providers/kilo/models/nvidia/nemotron-3.5-content-safety.toml b/providers/kilo/models/nvidia/nemotron-3.5-content-safety.toml new file mode 100644 index 00000000000..9dd8f8ac54c --- /dev/null +++ b/providers/kilo/models/nvidia/nemotron-3.5-content-safety.toml @@ -0,0 +1,15 @@ +base_model = "nvidia/nemotron-3.5-content-safety" +description = "NVIDIA Nemotron 3.5 Content Safety is a compact 4B-parameter multimodal guardrail model from NVIDIA, fine-tuned from Google Gemma-3-4B. It moderates both inputs to and responses from LLMs and VLMs, accepting..." +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.2 +output = 0.2 + +[limit] +context = 131_072 +output = 117_964 diff --git a/providers/kilo/models/nvidia/nemotron-3.5-lightning.toml b/providers/kilo/models/nvidia/nemotron-3.5-lightning.toml index f6b9541a819..78104d7319f 100644 --- a/providers/kilo/models/nvidia/nemotron-3.5-lightning.toml +++ b/providers/kilo/models/nvidia/nemotron-3.5-lightning.toml @@ -6,9 +6,8 @@ type = "effort" values = ["none", "high"] [cost] -input = 0.08 -output = 0.2 -cache_read = 0.04 +input = 0.065 +output = 0.18 [limit] output = 131_072 diff --git a/providers/kilo/models/openai/gpt-4-turbo-preview.toml b/providers/kilo/models/openai/gpt-4-turbo-preview.toml deleted file mode 100644 index 25a840098c0..00000000000 --- a/providers/kilo/models/openai/gpt-4-turbo-preview.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "OpenAI: GPT-4 Turbo Preview ($$$$)" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "gpt" -release_date = "2024-01-25" -last_updated = "2024-01-25" -attachment = true -reasoning = false -temperature = true -tool_call = true -structured_output = true -open_weights = false - -[cost] -input = 10 -output = 30 - -[limit] -context = 128_000 -output = 4_096 - -[modalities] -input = ["text", "pdf"] -output = ["text"] diff --git a/providers/kilo/models/openai/gpt-5.1.toml b/providers/kilo/models/openai/gpt-5.1.toml index 5758647a980..4fb1c961279 100644 --- a/providers/kilo/models/openai/gpt-5.1.toml +++ b/providers/kilo/models/openai/gpt-5.1.toml @@ -1,5 +1,6 @@ base_model = "openai/gpt-5.1" description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" +temperature = false [[reasoning_options]] type = "effort" diff --git a/providers/kilo/models/openai/gpt-5.2.toml b/providers/kilo/models/openai/gpt-5.2.toml index 5561e674b1c..8c11e11820c 100644 --- a/providers/kilo/models/openai/gpt-5.2.toml +++ b/providers/kilo/models/openai/gpt-5.2.toml @@ -1,5 +1,6 @@ base_model = "openai/gpt-5.2" description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" +temperature = false [[reasoning_options]] type = "effort" diff --git a/providers/kilo/models/openai/gpt-5.3-codex.toml b/providers/kilo/models/openai/gpt-5.3-codex.toml index 93f23f1c621..bff5995bbd5 100644 --- a/providers/kilo/models/openai/gpt-5.3-codex.toml +++ b/providers/kilo/models/openai/gpt-5.3-codex.toml @@ -1,5 +1,6 @@ base_model = "openai/gpt-5.3-codex" description = "Coding-optimized GPT model for repository edits, reviews, and agentic software work" +temperature = false [[reasoning_options]] type = "effort" diff --git a/providers/kilo/models/openai/gpt-5.4-mini.toml b/providers/kilo/models/openai/gpt-5.4-mini.toml index 23fef5244fc..d9e7888cb4d 100644 --- a/providers/kilo/models/openai/gpt-5.4-mini.toml +++ b/providers/kilo/models/openai/gpt-5.4-mini.toml @@ -1,5 +1,6 @@ base_model = "openai/gpt-5.4-mini" description = "Compact GPT model for low-latency assistance and high-volume workloads" +temperature = false [[reasoning_options]] type = "effort" diff --git a/providers/kilo/models/openai/gpt-5.4-nano.toml b/providers/kilo/models/openai/gpt-5.4-nano.toml index 5357765dea0..162cffcdc29 100644 --- a/providers/kilo/models/openai/gpt-5.4-nano.toml +++ b/providers/kilo/models/openai/gpt-5.4-nano.toml @@ -1,5 +1,6 @@ base_model = "openai/gpt-5.4-nano" description = "Compact GPT model for low-latency assistance and high-volume workloads" +temperature = false [[reasoning_options]] type = "effort" diff --git a/providers/kilo/models/openai/gpt-5.4.toml b/providers/kilo/models/openai/gpt-5.4.toml index 2ac608ee27a..0c60795a42c 100644 --- a/providers/kilo/models/openai/gpt-5.4.toml +++ b/providers/kilo/models/openai/gpt-5.4.toml @@ -1,5 +1,6 @@ base_model = "openai/gpt-5.4" description = "Frontier GPT model for professional reasoning, coding, and multimodal work" +temperature = false [[reasoning_options]] type = "effort" diff --git a/providers/kilo/models/openai/gpt-5.6-sol-discounted.toml b/providers/kilo/models/openai/gpt-5.6-sol-discounted.toml deleted file mode 100644 index d29366792b0..00000000000 --- a/providers/kilo/models/openai/gpt-5.6-sol-discounted.toml +++ /dev/null @@ -1,30 +0,0 @@ -name = "OpenAI: GPT-5.6 Sol (50% off)" -description = "GPT-5.6 Sol served by OpenAI through Vercel AI Gateway at 50% lower cost than other available inference providers. This promotion runs through September 18, 2026." -family = "gpt" -release_date = "2025-08-26" -last_updated = "2025-08-26" -attachment = true -reasoning = true -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "effort" -values = ["none", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 2.5 -output = 15 -reasoning = 0 -cache_read = 0.25 -cache_write = 3.125 - -[limit] -context = 1_050_000 -output = 128_000 - -[modalities] -input = ["text", "image", "pdf"] -output = ["text"] diff --git a/providers/kilo/models/openai/gpt-6-astra-pro.toml b/providers/kilo/models/openai/gpt-6-astra-pro.toml new file mode 100644 index 00000000000..e930a0ca690 --- /dev/null +++ b/providers/kilo/models/openai/gpt-6-astra-pro.toml @@ -0,0 +1,29 @@ +name = "OpenAI: GPT-6 Astra Pro ($$$$)" +description = "GPT-6 Astra Pro is the same underlying model as [GPT-6 Astra](https://openrouter.ai/openai/gpt-6-astra), served with `reasoning.mode` set to `pro` for higher-quality responses on complex tasks. Learn more in OpenAI's docs: https://developers.openai.com/api/docs/guides/reasoning#reasoning-mode" +family = "gpt" +release_date = "2026-09-04" +last_updated = "2026-09-04" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[limit] +context = 1_050_000 +output = 128_000 + +[modalities] +input = ["pdf", "image", "text"] +output = ["text"] diff --git a/providers/kilo/models/openai/gpt-6-astra.toml b/providers/kilo/models/openai/gpt-6-astra.toml new file mode 100644 index 00000000000..3cd84fe9c9f --- /dev/null +++ b/providers/kilo/models/openai/gpt-6-astra.toml @@ -0,0 +1,12 @@ +base_model = "openai/gpt-6-astra" +description = "GPT-6 Astra is OpenAI's flagship model for demanding end-to-end work. It is suited for advanced analysis, software engineering, deep research, scientific work, and document creation, with particular strengths in long-horizon..." + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 diff --git a/providers/kilo/models/openai/gpt-6-luna-pro.toml b/providers/kilo/models/openai/gpt-6-luna-pro.toml new file mode 100644 index 00000000000..3e57329bcf1 --- /dev/null +++ b/providers/kilo/models/openai/gpt-6-luna-pro.toml @@ -0,0 +1,29 @@ +name = "OpenAI: GPT-6 Luna Pro" +description = "GPT-6 Luna Pro is the same underlying model as [GPT-6 Luna](https://openrouter.ai/openai/gpt-6-luna), served with `reasoning.mode` set to `pro` for higher-quality responses on complex tasks. Learn more in OpenAI's docs: https://developers.openai.com/api/docs/guides/reasoning#reasoning-mode" +family = "gpt" +release_date = "2026-09-22" +last_updated = "2026-09-22" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.1 +output = 0.5 +cache_read = 0.01 +cache_write = 0.125 + +[limit] +context = 1_050_000 +output = 128_000 + +[modalities] +input = ["pdf", "image", "text"] +output = ["text"] diff --git a/providers/kilo/models/openai/gpt-6-luna.toml b/providers/kilo/models/openai/gpt-6-luna.toml new file mode 100644 index 00000000000..9e9940bc126 --- /dev/null +++ b/providers/kilo/models/openai/gpt-6-luna.toml @@ -0,0 +1,12 @@ +base_model = "openai/gpt-6-luna" +description = "GPT-6 Luna is the fast, cost-efficient model in OpenAI's GPT-6 series, positioned below GPT-6 Sol. It is suited for high-volume and latency-sensitive workloads such as chat, classification, and lightweight agentic..." + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.1 +output = 0.5 +cache_read = 0.01 +cache_write = 0.125 diff --git a/providers/kilo/models/openai/gpt-6-sol-pro.toml b/providers/kilo/models/openai/gpt-6-sol-pro.toml new file mode 100644 index 00000000000..f1d263d64fa --- /dev/null +++ b/providers/kilo/models/openai/gpt-6-sol-pro.toml @@ -0,0 +1,29 @@ +name = "OpenAI: GPT-6 Sol Pro" +description = "GPT-6 Sol Pro is the same underlying model as [GPT-6 Sol](https://openrouter.ai/openai/gpt-6-sol), served with `reasoning.mode` set to `pro` for higher-quality responses on complex tasks. Learn more in OpenAI's docs: https://developers.openai.com/api/docs/guides/reasoning#reasoning-mode" +family = "gpt" +release_date = "2026-09-22" +last_updated = "2026-09-22" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 + +[limit] +context = 1_050_000 +output = 128_000 + +[modalities] +input = ["pdf", "image", "text"] +output = ["text"] diff --git a/providers/kilo/models/openai/gpt-6-sol.toml b/providers/kilo/models/openai/gpt-6-sol.toml new file mode 100644 index 00000000000..5960d039080 --- /dev/null +++ b/providers/kilo/models/openai/gpt-6-sol.toml @@ -0,0 +1,12 @@ +base_model = "openai/gpt-6-sol" +description = "GPT-6 Sol is the cost-efficient high-end model in OpenAI's GPT-6 series, positioned below the flagship GPT-6 Astra and above the fast GPT-6 Luna tier. It is suited for demanding professional..." + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 diff --git a/providers/kilo/models/openai/gpt-oss-120b.toml b/providers/kilo/models/openai/gpt-oss-120b.toml index 2b409022a13..4e8c1b4eab6 100644 --- a/providers/kilo/models/openai/gpt-oss-120b.toml +++ b/providers/kilo/models/openai/gpt-oss-120b.toml @@ -11,4 +11,4 @@ output = 0.17 cache_read = 0.03 [limit] -output = 117_964 +output = 65_536 diff --git a/providers/kilo/models/openai/gpt-oss-20b.toml b/providers/kilo/models/openai/gpt-oss-20b.toml index 895f7fb4602..98aeb108997 100644 --- a/providers/kilo/models/openai/gpt-oss-20b.toml +++ b/providers/kilo/models/openai/gpt-oss-20b.toml @@ -6,8 +6,5 @@ type = "effort" values = ["low", "medium", "high"] [cost] -input = 0.02 -output = 0.1 - -[limit] -output = 117_964 +input = 0.018 +output = 0.09 diff --git a/providers/kilo/models/openai/gpt-oss-safeguard-20b.toml b/providers/kilo/models/openai/gpt-oss-safeguard-20b.toml index f820fb3c589..1602ee7bf0a 100644 --- a/providers/kilo/models/openai/gpt-oss-safeguard-20b.toml +++ b/providers/kilo/models/openai/gpt-oss-safeguard-20b.toml @@ -1,14 +1,5 @@ -name = "OpenAI: gpt-oss-safeguard-20b" +base_model = "openai/gpt-oss-safeguard-20b" description = "Safety model for policy screening, moderation, and risk-aware routing workflows" -family = "gpt-oss" -release_date = "2025-10-29" -last_updated = "2025-10-29" -attachment = false -reasoning = true -temperature = true -tool_call = true -structured_output = true -open_weights = false [[reasoning_options]] type = "effort" @@ -20,9 +11,4 @@ output = 0.3 cache_read = 0.0375 [limit] -context = 131_072 output = 65_536 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/kilo/models/prism-ml/ternary-bonsai-2-27b.toml b/providers/kilo/models/prism-ml/ternary-bonsai-2-27b.toml new file mode 100644 index 00000000000..a1eb487d1bb --- /dev/null +++ b/providers/kilo/models/prism-ml/ternary-bonsai-2-27b.toml @@ -0,0 +1,26 @@ +name = "PrismML: Ternary Bonsai 2 27B" +description = "Bonsai 2 27B is a 27B-parameter reasoning model from PrismML derived from Qwen3.8-27B. It supports coding, mathematics, tool calling, and image understanding with a 262K-token context window. Ternary compression shrinks..." +release_date = "2026-09-18" +last_updated = "2026-09-18" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "medium", "xhigh"] + +[cost] +input = 0.075 +output = 0.5 + +[limit] +context = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/kilo/models/qwen/qwen2.5-vl-72b-instruct.toml b/providers/kilo/models/qwen/qwen2.5-vl-72b-instruct.toml index 5441601c6e9..02ea9134945 100644 --- a/providers/kilo/models/qwen/qwen2.5-vl-72b-instruct.toml +++ b/providers/kilo/models/qwen/qwen2.5-vl-72b-instruct.toml @@ -11,12 +11,13 @@ structured_output = true open_weights = false [cost] -input = 0.25 -output = 0.75 +input = 0.8 +output = 1 +cache_read = 0.4 [limit] -context = 32_000 -output = 28_800 +context = 128_000 +output = 115_200 [modalities] input = ["text", "image"] diff --git a/providers/kilo/models/qwen/qwen3-235b-a22b-2507.toml b/providers/kilo/models/qwen/qwen3-235b-a22b-2507.toml index 3f37ded3629..b356342358d 100644 --- a/providers/kilo/models/qwen/qwen3-235b-a22b-2507.toml +++ b/providers/kilo/models/qwen/qwen3-235b-a22b-2507.toml @@ -16,7 +16,7 @@ output = 0.598 [limit] context = 262_144 -output = 16_384 +output = 235_929 [modalities] input = ["text"] diff --git a/providers/kilo/models/qwen/qwen3-30b-a3b.toml b/providers/kilo/models/qwen/qwen3-30b-a3b.toml index a4d4e484294..a8c6cef56d6 100644 --- a/providers/kilo/models/qwen/qwen3-30b-a3b.toml +++ b/providers/kilo/models/qwen/qwen3-30b-a3b.toml @@ -1,6 +1,6 @@ base_model = "alibaba/qwen3-30b-a3b" description = "Qwen instruction model for multilingual chat, reasoning, and tool use" -structured_output = false +structured_output = true [[reasoning_options]] type = "effort" diff --git a/providers/kilo/models/qwen/qwen3-next-80b-a3b-instruct.toml b/providers/kilo/models/qwen/qwen3-next-80b-a3b-instruct.toml index 8247cd4ca01..8071bb6d3c0 100644 --- a/providers/kilo/models/qwen/qwen3-next-80b-a3b-instruct.toml +++ b/providers/kilo/models/qwen/qwen3-next-80b-a3b-instruct.toml @@ -8,4 +8,4 @@ output = 0.78 [limit] context = 262_144 -output = 235_929 +output = 16_384 diff --git a/providers/kilo/models/qwen/qwen3-next-80b-a3b-thinking.toml b/providers/kilo/models/qwen/qwen3-next-80b-a3b-thinking.toml index 7c76fb082af..5d67b671b7a 100644 --- a/providers/kilo/models/qwen/qwen3-next-80b-a3b-thinking.toml +++ b/providers/kilo/models/qwen/qwen3-next-80b-a3b-thinking.toml @@ -9,3 +9,7 @@ values = ["high"] [cost] input = 0.15 output = 1.2 + +[limit] +context = 262_144 +output = 235_929 diff --git a/providers/kilo/models/qwen/qwen3.5-122b-a10b.toml b/providers/kilo/models/qwen/qwen3.5-122b-a10b.toml index 6e5f287283b..3a1fc219280 100644 --- a/providers/kilo/models/qwen/qwen3.5-122b-a10b.toml +++ b/providers/kilo/models/qwen/qwen3.5-122b-a10b.toml @@ -9,8 +9,5 @@ values = ["none", "high"] input = 0.26 output = 2.08 -[limit] -output = 235_929 - [modalities] input = ["text", "image", "video"] diff --git a/providers/kilo/models/qwen/qwen3.5-35b-a3b.toml b/providers/kilo/models/qwen/qwen3.5-35b-a3b.toml index 43f7cfc71e4..bdebd95519c 100644 --- a/providers/kilo/models/qwen/qwen3.5-35b-a3b.toml +++ b/providers/kilo/models/qwen/qwen3.5-35b-a3b.toml @@ -10,7 +10,8 @@ input = 0.1625 output = 1.3 [limit] -output = 235_929 +context = 256_000 +output = 16_384 [modalities] input = ["text", "image", "video"] diff --git a/providers/kilo/models/qwen/qwen3.5-397b-a17b.toml b/providers/kilo/models/qwen/qwen3.5-397b-a17b.toml index d0e349f341a..3d76879dbef 100644 --- a/providers/kilo/models/qwen/qwen3.5-397b-a17b.toml +++ b/providers/kilo/models/qwen/qwen3.5-397b-a17b.toml @@ -9,5 +9,8 @@ values = ["none", "high"] input = 0.39 output = 2.34 +[limit] +output = 235_929 + [modalities] input = ["text", "image", "video"] diff --git a/providers/kilo/models/qwen/qwen3.5-9b.toml b/providers/kilo/models/qwen/qwen3.5-9b.toml index bc4a13e3e11..7c1d5856e31 100644 --- a/providers/kilo/models/qwen/qwen3.5-9b.toml +++ b/providers/kilo/models/qwen/qwen3.5-9b.toml @@ -10,4 +10,5 @@ input = 0.1 output = 0.15 [limit] -output = 235_929 +context = 256_000 +output = 32_768 diff --git a/providers/kilo/models/qwen/qwen3.6-27b.toml b/providers/kilo/models/qwen/qwen3.6-27b.toml index fdb3246f594..6ca4eb2df17 100644 --- a/providers/kilo/models/qwen/qwen3.6-27b.toml +++ b/providers/kilo/models/qwen/qwen3.6-27b.toml @@ -10,7 +10,7 @@ input = 0.45 output = 2.7 [limit] -output = 81_920 +output = 262_140 [modalities] input = ["text", "image", "video"] diff --git a/providers/kilo/models/qwen/qwen3.6-35b-a3b.toml b/providers/kilo/models/qwen/qwen3.6-35b-a3b.toml index a5bbcc9f543..21f9408b4a8 100644 --- a/providers/kilo/models/qwen/qwen3.6-35b-a3b.toml +++ b/providers/kilo/models/qwen/qwen3.6-35b-a3b.toml @@ -6,7 +6,7 @@ type = "effort" values = ["none", "high"] [cost] -input = 0.14 +input = 0.15 output = 1 cache_read = 0.05 diff --git a/providers/kilo/models/qwen/qwen3.7-max.toml b/providers/kilo/models/qwen/qwen3.7-max.toml index 9a5aff06afe..a57091e05fe 100644 --- a/providers/kilo/models/qwen/qwen3.7-max.toml +++ b/providers/kilo/models/qwen/qwen3.7-max.toml @@ -7,10 +7,10 @@ type = "effort" values = ["none", "high"] [cost] -input = 1.25 -output = 3.75 -cache_read = 0.125 -cache_write = 1.5625 +input = 1.475 +output = 4.425 +cache_read = 0.295 +cache_write = 1.84375 [limit] output = 131_072 diff --git a/providers/kilo/models/qwen/qwen3.7-plus.toml b/providers/kilo/models/qwen/qwen3.7-plus.toml index 61512d88eb0..9ec531e90c6 100644 --- a/providers/kilo/models/qwen/qwen3.7-plus.toml +++ b/providers/kilo/models/qwen/qwen3.7-plus.toml @@ -9,7 +9,7 @@ values = ["none", "high"] [cost] input = 0.32 output = 1.28 -cache_read = 0.032 +cache_read = 0.064 cache_write = 0.4 [limit] diff --git a/providers/kilo/models/qwen/qwen3.8-2.4t-a95b.toml b/providers/kilo/models/qwen/qwen3.8-2.4t-a95b.toml index 2e2c290259f..39ad2aa079f 100644 --- a/providers/kilo/models/qwen/qwen3.8-2.4t-a95b.toml +++ b/providers/kilo/models/qwen/qwen3.8-2.4t-a95b.toml @@ -15,4 +15,4 @@ cache_read = 0.25 cache_write = 2.5 [limit] -context = 1_048_576 +context = 1_000_000 diff --git a/providers/kilo/models/qwen/qwen3.8-27b:free.toml b/providers/kilo/models/qwen/qwen3.8-27b:free.toml new file mode 100644 index 00000000000..0b7df919a8f --- /dev/null +++ b/providers/kilo/models/qwen/qwen3.8-27b:free.toml @@ -0,0 +1,14 @@ +base_model = "alibaba/qwen3.8-27b" +name = "Qwen: Qwen3.8 27B (free)" +description = "Qwen3.8 27B is an open-weight dense vision-language model from Qwen. It is suited for coding, professional workflows, research, multimodal interaction, and long-running agent tasks, with flexible thinking that can be..." + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "xhigh"] + +[cost] +input = 0 +output = 0 + +[limit] +output = 235_929 diff --git a/providers/kilo/models/qwen/qwen3.8-flash.toml b/providers/kilo/models/qwen/qwen3.8-flash.toml new file mode 100644 index 00000000000..1d0da1780ca --- /dev/null +++ b/providers/kilo/models/qwen/qwen3.8-flash.toml @@ -0,0 +1,13 @@ +base_model = "alibaba/qwen3.8-flash" +description = "Qwen3.8 Flash is a multimodal reasoning model from Alibaba. It is suited for coding assistance, agentic workflows, visual understanding, document and codebase analysis, desktop interaction, chart analysis, and long-video analysis." +temperature = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.15 +output = 0.47 +cache_read = 0.016 +cache_write = 0.2 diff --git a/providers/kilo/models/qwen/qwen3.8-max-0902.toml b/providers/kilo/models/qwen/qwen3.8-max-0902.toml new file mode 100644 index 00000000000..cb4bc8d0cb3 --- /dev/null +++ b/providers/kilo/models/qwen/qwen3.8-max-0902.toml @@ -0,0 +1,16 @@ +base_model = "alibaba/qwen3.8-max-0902" +description = "Qwen3.8 Max 0902 is an updated snapshot of Qwen3.8 Max from Alibaba's Qwen team. It is a 2.4-trillion-parameter mixture-of-experts model that accepts text, image, and video input and returns text,..." +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 2 +output = 6 +cache_read = 0.25 +cache_write = 2.5 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/kilo/models/qwen/qwen3.8-max.toml b/providers/kilo/models/qwen/qwen3.8-max.toml deleted file mode 100644 index 169746d865f..00000000000 --- a/providers/kilo/models/qwen/qwen3.8-max.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "alibaba/qwen3.8-max" -description = "Qwen3.8 Max is the flagship model in Alibaba's Qwen3.8 series, the general-availability successor to the Qwen3.8 Max Preview. It is a multimodal reasoning model intended for complex reasoning, visual understanding,..." -structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["minimal", "low", "medium", "high", "xhigh"] - -[cost] -input = 2 -output = 6 -cache_read = 0.25 -cache_write = 2.5 - -[modalities] -input = ["text", "image", "video"] diff --git a/providers/kilo/models/qwen/qwen3.8-omni-flash.toml b/providers/kilo/models/qwen/qwen3.8-omni-flash.toml new file mode 100644 index 00000000000..574800249bc --- /dev/null +++ b/providers/kilo/models/qwen/qwen3.8-omni-flash.toml @@ -0,0 +1,13 @@ +base_model = "alibaba/qwen3.8-omni-flash" +description = "Qwen3.8 Omni Flash is an omni-modal reasoning model from Alibaba, the first Qwen model built around agentic capabilities with native audio-video understanding. It is suited for audio-video analysis and summarization,..." +temperature = true +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.15 +output = 0.47 +cache_read = 0.016 diff --git a/providers/kilo/models/sakana/fugu-max.toml b/providers/kilo/models/sakana/fugu-max.toml new file mode 100644 index 00000000000..eef3beb5bf5 --- /dev/null +++ b/providers/kilo/models/sakana/fugu-max.toml @@ -0,0 +1,28 @@ +name = "Sakana: Fugu Max" +description = "Fugu Max is the cost-performance model in Sakana AI's Fugu family. Rather than a single monolithic model, Fugu is a learned multi-agent orchestration system: a language model trained to route..." +family = "fugu" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["high", "xhigh", "max"] + +[cost] +input = 2 +output = 6 +cache_read = 0.25 + +[limit] +context = 1_000_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/kilo/models/sakana/fugu-ultra-v2.toml b/providers/kilo/models/sakana/fugu-ultra-v2.toml new file mode 100644 index 00000000000..6cc322c77c9 --- /dev/null +++ b/providers/kilo/models/sakana/fugu-ultra-v2.toml @@ -0,0 +1,28 @@ +name = "Sakana: Fugu Ultra v2" +description = "Fugu Ultra v2 is the higher-performance model in Sakana AI's Fugu family. Rather than a single monolithic model, Fugu is a learned multi-agent orchestration system: a language model trained to..." +family = "fugu" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["high", "xhigh", "max"] + +[cost] +input = 5 +output = 30 +cache_read = 0.5 + +[limit] +context = 1_000_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/kilo/models/tencent/hy3.toml b/providers/kilo/models/tencent/hy3.toml index d43287f7c3c..e96e3110ab1 100644 --- a/providers/kilo/models/tencent/hy3.toml +++ b/providers/kilo/models/tencent/hy3.toml @@ -13,4 +13,3 @@ cache_read = 0.020625 [limit] context = 262_144 -output = 128_000 diff --git a/providers/kilo/models/tencent/hy3:free.toml b/providers/kilo/models/tencent/hy3:free.toml deleted file mode 100644 index 6106b0b26a5..00000000000 --- a/providers/kilo/models/tencent/hy3:free.toml +++ /dev/null @@ -1,18 +0,0 @@ -base_model = "tencent/hy3" -name = "Tencent: Hy3 (free)" -description = "Hy3 is a 295B-parameter Mixture-of-Experts model from Tencent, activating 21B parameters per token. It supports configurable reasoning effort, agentic workflows, reliable tool calling, and long-context tasks across coding, document processing, financial analysis, and frontend development." -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["none", "low", "high"] - -[cost] -input = 0 -output = 0 -reasoning = 0 -cache_read = 0 - -[limit] -context = 262_144 -output = 128_000 diff --git a/providers/kilo/models/tencent/hy4-preview.toml b/providers/kilo/models/tencent/hy4-preview.toml new file mode 100644 index 00000000000..664c533e3b8 --- /dev/null +++ b/providers/kilo/models/tencent/hy4-preview.toml @@ -0,0 +1,15 @@ +base_model = "tencent/hy4-preview" +description = "Tencent: Hy4 preview is a mixture-of-experts model from Tencent, with 49B active parameters out of 770B total. It is designed for coding agents, complex tool-use workflows, and productivity tasks that..." +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high"] + +[cost] +input = 0.834 +output = 2.501 +cache_read = 0.042 + +[limit] +context = 1_048_576 diff --git a/providers/kilo/models/thedrummer/rocinante-12b.toml b/providers/kilo/models/thedrummer/rocinante-12b.toml deleted file mode 100644 index 917b917cd18..00000000000 --- a/providers/kilo/models/thedrummer/rocinante-12b.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "TheDrummer: Rocinante 12B" -description = "Open-weight instruction model for adaptable chat and self-hosted production workloads" -release_date = "2024-09-30" -last_updated = "2024-09-30" -attachment = false -reasoning = false -temperature = true -tool_call = false -structured_output = true -open_weights = false - -[cost] -input = 0.25 -output = 0.5 - -[limit] -context = 65_536 -output = 58_982 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/kilo/models/thedrummer/unslopnemo-12b.toml b/providers/kilo/models/thedrummer/unslopnemo-12b.toml index 5cce6362295..8348cb4c6d4 100644 --- a/providers/kilo/models/thedrummer/unslopnemo-12b.toml +++ b/providers/kilo/models/thedrummer/unslopnemo-12b.toml @@ -5,7 +5,7 @@ last_updated = "2024-11-08" attachment = false reasoning = false temperature = true -tool_call = true +tool_call = false structured_output = true open_weights = false @@ -14,8 +14,8 @@ input = 0.4 output = 0.4 [limit] -context = 32_768 -output = 26_214 +context = 1_024_000 +output = 819_200 [modalities] input = ["text"] diff --git a/providers/kilo/models/thinkingmachines/inkling.toml b/providers/kilo/models/thinkingmachines/inkling.toml index c46d7a4ad64..a367cecf27a 100644 --- a/providers/kilo/models/thinkingmachines/inkling.toml +++ b/providers/kilo/models/thinkingmachines/inkling.toml @@ -13,4 +13,4 @@ cache_read = 0.16 [limit] context = 524_288 -output = 262_144 +output = 471_859 diff --git a/providers/kilo/models/thinkingmachines/inkling:free.toml b/providers/kilo/models/thinkingmachines/inkling:free.toml deleted file mode 100644 index f9daa5b4864..00000000000 --- a/providers/kilo/models/thinkingmachines/inkling:free.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "thinkingmachines/inkling" -name = "Thinking Machines: Inkling (free)" -description = "Inkling is an open-weight multimodal mixture-of-experts model from Thinking Machines Lab, with 41B active parameters out of 975B total. It is designed for general-purpose reasoning, coding, agentic and tool-use systems,..." -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["none", "minimal", "low", "medium", "high", "max"] - -[cost] -input = 0 -output = 0 - -[limit] -output = 262_144 diff --git a/providers/kilo/models/unbiased/pareto.toml b/providers/kilo/models/unbiased/pareto.toml new file mode 100644 index 00000000000..19990e346ff --- /dev/null +++ b/providers/kilo/models/unbiased/pareto.toml @@ -0,0 +1,6 @@ +base_model = "unbiased/pareto" + +[cost] +input = 2.5 +output = 7.5 +cache_read = 0.25 diff --git a/providers/kilo/models/undi95/remm-slerp-l2-13b.toml b/providers/kilo/models/undi95/remm-slerp-l2-13b.toml index a5a4bba82a0..40ab1560284 100644 --- a/providers/kilo/models/undi95/remm-slerp-l2-13b.toml +++ b/providers/kilo/models/undi95/remm-slerp-l2-13b.toml @@ -10,12 +10,12 @@ structured_output = true open_weights = false [cost] -input = 0.45 +input = 0.35 output = 0.65 [limit] context = 6_144 -output = 4_096 +output = 5_529 [modalities] input = ["text"] diff --git a/providers/kilo/models/upstage/solar-mini4.toml b/providers/kilo/models/upstage/solar-mini4.toml new file mode 100644 index 00000000000..94538bf4b0a --- /dev/null +++ b/providers/kilo/models/upstage/solar-mini4.toml @@ -0,0 +1,28 @@ +name = "Upstage: Solar Mini 4" +description = "Solar Mini 4 is Upstage's compact, cost-efficient language model, a 35B-parameter mixture-of-experts with 3B active parameters and a 524K context window. It is built for agentic use cases where response..." +family = "solar" +release_date = "2026-09-23" +last_updated = "2026-09-23" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.1 +output = 0.4 +cache_read = 0.01 + +[limit] +context = 524_288 +output = 131_072 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/kilo/models/upstage/solar-pro-3.toml b/providers/kilo/models/upstage/solar-pro-3.toml index 54205b2bb45..ad7adb31fe8 100644 --- a/providers/kilo/models/upstage/solar-pro-3.toml +++ b/providers/kilo/models/upstage/solar-pro-3.toml @@ -12,7 +12,7 @@ open_weights = false [[reasoning_options]] type = "effort" -values = ["none", "high"] +values = ["none", "minimal", "low", "medium", "high"] [cost] input = 0.15 diff --git a/providers/kilo/models/upstage/solar-pro4.toml b/providers/kilo/models/upstage/solar-pro4.toml index 4b483744118..d3486cf5460 100644 --- a/providers/kilo/models/upstage/solar-pro4.toml +++ b/providers/kilo/models/upstage/solar-pro4.toml @@ -12,7 +12,7 @@ open_weights = false [[reasoning_options]] type = "effort" -values = ["none", "high"] +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [cost] input = 0.3 diff --git a/providers/kilo/models/x-ai/grok-4.7.toml b/providers/kilo/models/x-ai/grok-4.7.toml new file mode 100644 index 00000000000..7e904bb941d --- /dev/null +++ b/providers/kilo/models/x-ai/grok-4.7.toml @@ -0,0 +1,14 @@ +base_model = "xai/grok-4.7" +description = "Grok 4.7 is SpaceXAI's smartest model with frontier performance on coding, knowledge work, and STEM." + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh"] + +[cost] +input = 1.6 +output = 4.8 +cache_read = 0.4 + +[limit] +output = 450_000 diff --git a/providers/kilo/models/xiaomi/mimo-v2.5-pro.toml b/providers/kilo/models/xiaomi/mimo-v2.5-pro.toml index 904393e08ad..378ff87497c 100644 --- a/providers/kilo/models/xiaomi/mimo-v2.5-pro.toml +++ b/providers/kilo/models/xiaomi/mimo-v2.5-pro.toml @@ -9,9 +9,9 @@ type = "effort" values = ["none", "high"] [cost] -input = 1 -output = 3 -cache_read = 0.2 +input = 0.435 +output = 0.87 +cache_read = 0.004 [[cost.tiers]] tier = { type = "context", size = 256_000 } diff --git a/providers/kilo/models/xiaomi/mimo-v2.6-flash.toml b/providers/kilo/models/xiaomi/mimo-v2.6-flash.toml new file mode 100644 index 00000000000..0a1c6e4fe63 --- /dev/null +++ b/providers/kilo/models/xiaomi/mimo-v2.6-flash.toml @@ -0,0 +1,12 @@ +base_model = "xiaomi/mimo-v2.6-flash" +description = "MiMo-V2.6-Flash is an open-source foundation model developed by Xiaomi. Built on a Mixture-of-Experts architecture with 309B total parameters and 15B activated per token, it employs a hybrid attention mechanism for..." +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.14 +output = 0.28 +cache_read = 0.0028 diff --git a/providers/kilo/models/xiaomi/mimo-v2.6-pro-ultraspeed.toml b/providers/kilo/models/xiaomi/mimo-v2.6-pro-ultraspeed.toml new file mode 100644 index 00000000000..ad9bc52de83 --- /dev/null +++ b/providers/kilo/models/xiaomi/mimo-v2.6-pro-ultraspeed.toml @@ -0,0 +1,12 @@ +base_model = "xiaomi/mimo-v2.6-pro-ultraspeed" +description = "MiMo-V2.6-Pro-UltraSpeed is the fast speed edition of Xiaomi's flagship foundation model, MiMo-V2.6-Pro. Built from the same 1T MiMo-V2.6-Pro checkpoint, it matches the original model in quality while delivering roughly 10x..." +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 4.35 +output = 8.7 +cache_read = 0.036 diff --git a/providers/kilo/models/xiaomi/mimo-v2.6-pro.toml b/providers/kilo/models/xiaomi/mimo-v2.6-pro.toml new file mode 100644 index 00000000000..1285f109afd --- /dev/null +++ b/providers/kilo/models/xiaomi/mimo-v2.6-pro.toml @@ -0,0 +1,12 @@ +base_model = "xiaomi/mimo-v2.6-pro" +description = "MiMo-V2.6-Pro is the flagship foundation model developed by Xiaomi. Built at a scale of over 1T parameters, it is designed to push the ceiling of capability for the most demanding..." +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.435 +output = 0.87 +cache_read = 0.0036 diff --git a/providers/kilo/models/z-ai/glm-4.6.toml b/providers/kilo/models/z-ai/glm-4.6.toml index fd68fe0c68b..2a611ba49e7 100644 --- a/providers/kilo/models/z-ai/glm-4.6.toml +++ b/providers/kilo/models/z-ai/glm-4.6.toml @@ -7,9 +7,10 @@ type = "effort" values = ["none", "high"] [cost] -input = 0.5 -output = 2 -cache_read = 0.1 +input = 0.43 +output = 1.75 +cache_read = 0.08 [limit] -context = 202_752 +context = 198_000 +output = 16_384 diff --git a/providers/kilo/models/z-ai/glm-4.7-flash.toml b/providers/kilo/models/z-ai/glm-4.7-flash.toml index 96d11325c93..1c40468998f 100644 --- a/providers/kilo/models/z-ai/glm-4.7-flash.toml +++ b/providers/kilo/models/z-ai/glm-4.7-flash.toml @@ -7,10 +7,9 @@ type = "effort" values = ["none", "high"] [cost] -input = 0.06 +input = 0.0605 output = 0.4 -cache_read = 0.01 [limit] -context = 202_752 -output = 16_384 +context = 131_072 +output = 117_964 diff --git a/providers/kilo/models/z-ai/glm-5.1.toml b/providers/kilo/models/z-ai/glm-5.1.toml index 75a48589c32..882eaea90db 100644 --- a/providers/kilo/models/z-ai/glm-5.1.toml +++ b/providers/kilo/models/z-ai/glm-5.1.toml @@ -11,5 +11,4 @@ output = 4.4 cache_read = 0.26 [limit] -context = 202_752 -output = 182_476 +output = 128_000 diff --git a/providers/kilo/models/z-ai/glm-5.2.toml b/providers/kilo/models/z-ai/glm-5.2.toml index bfdca8a62a6..bb89edf75cf 100644 --- a/providers/kilo/models/z-ai/glm-5.2.toml +++ b/providers/kilo/models/z-ai/glm-5.2.toml @@ -12,4 +12,3 @@ cache_read = 0.26 [limit] context = 1_048_576 -output = 262_144 diff --git a/providers/kilo/models/z-ai/glm-5.2:free.toml b/providers/kilo/models/z-ai/glm-5.2:free.toml new file mode 100644 index 00000000000..7bd0bf98a27 --- /dev/null +++ b/providers/kilo/models/z-ai/glm-5.2:free.toml @@ -0,0 +1,17 @@ +base_model = "zhipuai/glm-5.2" +name = "Z.ai: GLM 5.2 (free)" +description = "GLM 5.2 is a large-scale reasoning model from Z.ai. It supports text input and output with a 1M-token context window, and is suited for long-horizon agent workflows, project-level software engineering,..." +tool_call = false +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "high", "xhigh"] + +[cost] +input = 0 +output = 0 + +[limit] +context = 32_768 +output = 29_491 diff --git a/providers/kilo/models/z-ai/glm-5.3-flash.toml b/providers/kilo/models/z-ai/glm-5.3-flash.toml index 8493dc1fa79..c464db465b8 100644 --- a/providers/kilo/models/z-ai/glm-5.3-flash.toml +++ b/providers/kilo/models/z-ai/glm-5.3-flash.toml @@ -1,18 +1,18 @@ base_model = "zhipuai/glm-5.3-flash" description = "GLM-5.3-Flash is a native multimodal model from Z.ai. It is suited for efficient coding and long-horizon agent tasks. Its hybrid sparse and linear attention architecture maintains accurate long-context behavior while..." -structured_output = false [[reasoning_options]] type = "effort" values = ["low", "high", "max"] [cost] -input = 0.075 -output = 0.25 -cache_read = 0.015 +input = 0.15 +output = 0.5 +cache_read = 0.03 [limit] context = 1_048_576 +output = 943_718 [modalities] input = ["text", "image", "video"] diff --git a/providers/kilo/models/z-ai/glm-5.3-flashx.toml b/providers/kilo/models/z-ai/glm-5.3-flashx.toml new file mode 100644 index 00000000000..1ea88a6ac56 --- /dev/null +++ b/providers/kilo/models/z-ai/glm-5.3-flashx.toml @@ -0,0 +1,28 @@ +name = "Z.ai: GLM 5.3 FlashX" +description = "GLM-5.3-FlashX is the high-speed variant of Z.ai's GLM-5.3-Flash, a native multimodal model delivering inference speeds of up to 200 tokens/s. Built on the same hybrid sparse and linear attention architecture..." +family = "glm" +release_date = "2026-09-18" +last_updated = "2026-09-18" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.37 +output = 1.25 +cache_read = 0.09 + +[limit] +context = 1_048_576 +output = 131_072 + +[modalities] +input = ["text", "image", "video"] +output = ["text"] diff --git a/providers/kilo/models/z-ai/glm-5.3.toml b/providers/kilo/models/z-ai/glm-5.3.toml index 8192c07e8b6..e9d5bdad891 100644 --- a/providers/kilo/models/z-ai/glm-5.3.toml +++ b/providers/kilo/models/z-ai/glm-5.3.toml @@ -1,6 +1,5 @@ base_model = "zhipuai/glm-5.3" description = "GLM-5.3 is a large-scale reasoning model from Z.ai, built for complex software engineering and long-horizon agent tasks. It supports text input and output with a 1M-token context window, and improves..." -structured_output = false [[reasoning_options]] type = "effort" diff --git a/providers/kilo/models/~anthropic/claude-fable-latest.toml b/providers/kilo/models/~anthropic/claude-fable-latest.toml index 112340248c3..7dcc4eb9bf5 100644 --- a/providers/kilo/models/~anthropic/claude-fable-latest.toml +++ b/providers/kilo/models/~anthropic/claude-fable-latest.toml @@ -17,7 +17,7 @@ values = ["low", "medium", "high", "xhigh", "max"] [cost] input = 10 output = 50 -cache_read = 1 +cache_read = 0.25 cache_write = 12.5 [limit] diff --git a/providers/kilo/models/~anthropic/claude-haiku-latest.toml b/providers/kilo/models/~anthropic/claude-haiku-latest.toml index 2af11ba5520..5f72f1f9aec 100644 --- a/providers/kilo/models/~anthropic/claude-haiku-latest.toml +++ b/providers/kilo/models/~anthropic/claude-haiku-latest.toml @@ -1,5 +1,5 @@ # Tracks the current Claude Haiku alias target on Kilo (Claude Haiku 4.5). -name = "Anthropic Claude Haiku Latest" +name = "Anthropic: Claude Haiku Latest" description = "Fast Claude model for responsive assistance, classification, and lightweight agents" family = "claude-haiku" release_date = "2026-04-27" diff --git a/providers/kilo/models/~anthropic/claude-opus-latest.toml b/providers/kilo/models/~anthropic/claude-opus-latest.toml index 7eae0b14770..709f3bb1f1b 100644 --- a/providers/kilo/models/~anthropic/claude-opus-latest.toml +++ b/providers/kilo/models/~anthropic/claude-opus-latest.toml @@ -12,13 +12,13 @@ open_weights = false [[reasoning_options]] type = "effort" -values = ["none", "low", "medium", "high", "xhigh", "max"] +values = ["low", "medium", "high", "xhigh", "max"] [cost] -input = 5 -output = 25 -cache_read = 0.5 -cache_write = 6.25 +input = 4 +output = 20 +cache_read = 0.2 +cache_write = 5 [limit] context = 1_000_000 diff --git a/providers/kilo/models/~anthropic/claude-sonnet-latest.toml b/providers/kilo/models/~anthropic/claude-sonnet-latest.toml index e7ef48d0ce7..363ecffe942 100644 --- a/providers/kilo/models/~anthropic/claude-sonnet-latest.toml +++ b/providers/kilo/models/~anthropic/claude-sonnet-latest.toml @@ -1,5 +1,5 @@ # Tracks the current Claude Sonnet alias target on Kilo (Claude Sonnet 4.6 by pricing). -name = "Anthropic Claude Sonnet Latest" +name = "Anthropic: Claude Sonnet Latest" description = "Balanced Claude model for coding, analysis, agent workflows, and cost control" family = "claude-sonnet" release_date = "2026-04-27" diff --git a/providers/kilo/models/~deepseek/deepseek-flash-latest.toml b/providers/kilo/models/~deepseek/deepseek-flash-latest.toml new file mode 100644 index 00000000000..0295282190d --- /dev/null +++ b/providers/kilo/models/~deepseek/deepseek-flash-latest.toml @@ -0,0 +1,28 @@ +name = "DeepSeek: DeepSeek Flash Latest" +description = "This model always redirects to the latest model in the DeepSeek Flash family." +family = "deepseek-flash" +release_date = "2026-09-14" +last_updated = "2026-09-14" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 0.1 +output = 0.5 +cache_read = 0.01 + +[limit] +context = 1_048_576 +output = 943_718 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/kilo/models/~deepseek/deepseek-pro-latest.toml b/providers/kilo/models/~deepseek/deepseek-pro-latest.toml new file mode 100644 index 00000000000..6f1d7199aea --- /dev/null +++ b/providers/kilo/models/~deepseek/deepseek-pro-latest.toml @@ -0,0 +1,28 @@ +name = "DeepSeek: DeepSeek Pro Latest" +description = "This model always redirects to the latest model in the DeepSeek Pro family." +family = "deepseek" +release_date = "2026-09-14" +last_updated = "2026-09-14" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 0.39996 +output = 1.19988 +cache_read = 0.012726 + +[limit] +context = 1_048_576 +output = 393_216 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/kilo/models/~deepseek/deepseek-v4-flash-latest.toml b/providers/kilo/models/~deepseek/deepseek-v4-flash-latest.toml index a951250014b..095da1d4acb 100644 --- a/providers/kilo/models/~deepseek/deepseek-v4-flash-latest.toml +++ b/providers/kilo/models/~deepseek/deepseek-v4-flash-latest.toml @@ -1,4 +1,4 @@ -name = "DeepSeek V4 Flash Latest" +name = "DeepSeek: DeepSeek V4 Flash Latest" description = "This model always redirects to the latest model in the DeepSeek V4 Flash family." family = "deepseek" release_date = "2026-08-01" @@ -15,13 +15,13 @@ type = "effort" values = ["none", "low", "high", "max"] [cost] -input = 0.03 -output = 0.075 -cache_read = 0.007 +input = 0.038 +output = 0.55 +cache_read = 0.0228 [limit] context = 1_048_576 -output = 131_072 +output = 943_718 [modalities] input = ["text"] diff --git a/providers/kilo/models/~google/gemini-flash-latest.toml b/providers/kilo/models/~google/gemini-flash-latest.toml index 944d89b8d27..2bc9f722462 100644 --- a/providers/kilo/models/~google/gemini-flash-latest.toml +++ b/providers/kilo/models/~google/gemini-flash-latest.toml @@ -1,5 +1,5 @@ # Tracks the current Gemini Flash alias target (Gemini 3.5 Flash). -name = "Google Gemini Flash Latest" +name = "Google: Gemini Flash Latest" description = "Fast Gemini model balancing multimodal reasoning, tool use, and cost" family = "gemini-flash" release_date = "2026-04-27" @@ -16,11 +16,11 @@ type = "effort" values = ["low", "medium", "high"] [cost] -input = 0.375 -output = 1.875 -reasoning = 1.875 -cache_read = 0.0375 -cache_write = 0.020833 +input = 0.75 +output = 3.75 +reasoning = 3.75 +cache_read = 0.075 +cache_write = 0.041667 [limit] context = 1_048_576 diff --git a/providers/kilo/models/~google/gemini-pro-latest.toml b/providers/kilo/models/~google/gemini-pro-latest.toml index ff879c579ee..a9a18a7f48e 100644 --- a/providers/kilo/models/~google/gemini-pro-latest.toml +++ b/providers/kilo/models/~google/gemini-pro-latest.toml @@ -1,4 +1,4 @@ -name = "Google Gemini Pro Latest" +name = "Google: Gemini Pro Latest" description = "Advanced Gemini model for complex reasoning, coding, and multimodal analysis" family = "gemini-pro" release_date = "2026-04-27" diff --git a/providers/kilo/models/~moonshotai/kimi-latest.toml b/providers/kilo/models/~moonshotai/kimi-latest.toml index de31079e2dd..366b401a83c 100644 --- a/providers/kilo/models/~moonshotai/kimi-latest.toml +++ b/providers/kilo/models/~moonshotai/kimi-latest.toml @@ -1,4 +1,4 @@ -name = "MoonshotAI Kimi Latest" +name = "MoonshotAI: Kimi Latest" description = "Kimi multimodal agent model for visual understanding, coding, and planning" family = "kimi" release_date = "2026-04-27" @@ -15,9 +15,9 @@ type = "effort" values = ["none", "low", "high", "max"] [cost] -input = 2.55 -output = 12.75 -cache_read = 0.256 +input = 1.4989 +output = 10.758 +cache_read = 0.3 [limit] context = 1_048_576 diff --git a/providers/kilo/models/~openai/gpt-astra-latest.toml b/providers/kilo/models/~openai/gpt-astra-latest.toml new file mode 100644 index 00000000000..805c6e510e2 --- /dev/null +++ b/providers/kilo/models/~openai/gpt-astra-latest.toml @@ -0,0 +1,29 @@ +name = "OpenAI: GPT Astra Latest ($$$$)" +description = "This model always redirects to the latest model in the OpenAI GPT Astra family." +family = "gpt-astra" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[limit] +context = 1_050_000 +output = 128_000 + +[modalities] +input = ["pdf", "image", "text"] +output = ["text"] diff --git a/providers/kilo/models/~openai/gpt-latest.toml b/providers/kilo/models/~openai/gpt-latest.toml deleted file mode 100644 index 7c94513eab8..00000000000 --- a/providers/kilo/models/~openai/gpt-latest.toml +++ /dev/null @@ -1,30 +0,0 @@ -# Tracks the current GPT frontier alias target on Kilo (GPT-5.5). -name = "OpenAI GPT Latest" -description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" -family = "gpt" -release_date = "2026-04-27" -last_updated = "2026-04-27" -attachment = true -reasoning = true -temperature = false -tool_call = true -structured_output = true -open_weights = false - -[[reasoning_options]] -type = "effort" -values = ["none", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 2 -output = 10 -cache_read = 0.2 -cache_write = 2.5 - -[limit] -context = 1_050_000 -output = 128_000 - -[modalities] -input = ["pdf", "image", "text"] -output = ["text"] diff --git a/providers/kilo/models/~openai/gpt-luna-latest.toml b/providers/kilo/models/~openai/gpt-luna-latest.toml new file mode 100644 index 00000000000..d593f0aca35 --- /dev/null +++ b/providers/kilo/models/~openai/gpt-luna-latest.toml @@ -0,0 +1,29 @@ +name = "OpenAI: GPT Luna Latest" +description = "This model always redirects to the latest model in the OpenAI GPT Luna family." +family = "gpt-luna" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.1 +output = 0.5 +cache_read = 0.01 +cache_write = 0.125 + +[limit] +context = 1_050_000 +output = 128_000 + +[modalities] +input = ["pdf", "image", "text"] +output = ["text"] diff --git a/providers/kilo/models/~openai/gpt-mini-latest.toml b/providers/kilo/models/~openai/gpt-mini-latest.toml index 4454abcc892..afe30a4a3c1 100644 --- a/providers/kilo/models/~openai/gpt-mini-latest.toml +++ b/providers/kilo/models/~openai/gpt-mini-latest.toml @@ -1,5 +1,5 @@ # Tracks the current GPT Mini alias target on Kilo (GPT-5.4 Mini). -name = "OpenAI GPT Mini Latest" +name = "OpenAI: GPT Mini Latest" description = "Compact GPT model for low-latency assistance and high-volume workloads" family = "gpt-mini" release_date = "2026-04-27" diff --git a/providers/kilo/models/~openai/gpt-sol-latest.toml b/providers/kilo/models/~openai/gpt-sol-latest.toml new file mode 100644 index 00000000000..1af280f2218 --- /dev/null +++ b/providers/kilo/models/~openai/gpt-sol-latest.toml @@ -0,0 +1,29 @@ +name = "OpenAI: GPT Sol Latest" +description = "This model always redirects to the latest model in the OpenAI GPT Sol family." +family = "gpt-sol" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 + +[limit] +context = 1_050_000 +output = 128_000 + +[modalities] +input = ["pdf", "image", "text"] +output = ["text"] diff --git a/providers/kilo/models/~openai/gpt-terra-latest.toml b/providers/kilo/models/~openai/gpt-terra-latest.toml new file mode 100644 index 00000000000..b6b5ed44925 --- /dev/null +++ b/providers/kilo/models/~openai/gpt-terra-latest.toml @@ -0,0 +1,29 @@ +name = "OpenAI: GPT Terra Latest" +description = "This model always redirects to the latest model in the OpenAI GPT Terra family." +family = "gpt-terra" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 12 +cache_read = 0.2 +cache_write = 2.5 + +[limit] +context = 1_050_000 +output = 128_000 + +[modalities] +input = ["pdf", "image", "text"] +output = ["text"] diff --git a/providers/kilo/models/~x-ai/grok-latest.toml b/providers/kilo/models/~x-ai/grok-latest.toml index 5f182ec62c7..85f00745faa 100644 --- a/providers/kilo/models/~x-ai/grok-latest.toml +++ b/providers/kilo/models/~x-ai/grok-latest.toml @@ -15,9 +15,9 @@ type = "effort" values = ["low", "medium", "high", "xhigh"] [cost] -input = 2 -output = 6 -cache_read = 0.5 +input = 1.6 +output = 4.8 +cache_read = 0.4 [limit] context = 500_000 diff --git a/providers/kilo/models/~z-ai/glm-flash-latest.toml b/providers/kilo/models/~z-ai/glm-flash-latest.toml new file mode 100644 index 00000000000..e4ce4e5dfe6 --- /dev/null +++ b/providers/kilo/models/~z-ai/glm-flash-latest.toml @@ -0,0 +1,28 @@ +name = "Z.ai: GLM Flash Latest" +description = "This model always redirects to the latest model in the GLM Flash family." +family = "glm-flash" +release_date = "2026-08-27" +last_updated = "2026-08-27" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.075 +output = 0.25 +cache_read = 0.015 + +[limit] +context = 1_048_576 +output = 131_072 + +[modalities] +input = ["text", "image", "video"] +output = ["text"] diff --git a/providers/kilo/models/~z-ai/glm-latest.toml b/providers/kilo/models/~z-ai/glm-latest.toml index ab46f17462b..d891278d7ef 100644 --- a/providers/kilo/models/~z-ai/glm-latest.toml +++ b/providers/kilo/models/~z-ai/glm-latest.toml @@ -7,7 +7,7 @@ attachment = false reasoning = true temperature = true tool_call = true -structured_output = false +structured_output = true open_weights = false [[reasoning_options]] @@ -15,9 +15,9 @@ type = "effort" values = ["low", "high", "max"] [cost] -input = 1.4 -output = 4.4 -cache_read = 0.26 +input = 0.5614 +output = 1.7644 +cache_read = 0.10426 [limit] context = 1_048_576 diff --git a/providers/kimi-for-coding/logo.svg b/providers/kimi-code-plan-cn/logo.svg similarity index 100% rename from providers/kimi-for-coding/logo.svg rename to providers/kimi-code-plan-cn/logo.svg diff --git a/providers/kimi-code-plan-cn/models/k3-256k.toml b/providers/kimi-code-plan-cn/models/k3-256k.toml new file mode 100644 index 00000000000..3d9c4ba810e --- /dev/null +++ b/providers/kimi-code-plan-cn/models/k3-256k.toml @@ -0,0 +1,27 @@ +# k3-256k is the 256K-context variant of Kimi K3 on the Kimi For Coding +# endpoint. Unlike full K3 it accepts no video input (image only). +# reasoning_options per the Kimi Code docs: +# reasoning_effort = "low" | "high" | "max" (default "high") +# Cost is zeroed per this provider's subscription convention. +base_model = "moonshotai/kimi-k3" +name = "Kimi K3-256K" +description = "256K-context version of Kimi K3, reducing token consumption for shorter coding sessions" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0 +output = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 262_144 + +[modalities] +input = ["text", "image"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/kimi-code-plan-cn/models/k3.toml b/providers/kimi-code-plan-cn/models/k3.toml new file mode 100644 index 00000000000..d0dbb42ade9 --- /dev/null +++ b/providers/kimi-code-plan-cn/models/k3.toml @@ -0,0 +1,21 @@ +# reasoning_options mirror the Moonshot AI platform API surface: +# thinking.type = "enabled" | "disabled" | "adaptive" +# output_config.effort = "low" | "high" | "max" +# Cost is zeroed per this provider's subscription convention. +base_model = "moonshotai/kimi-k3" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0 +output = 0 +cache_read = 0 +cache_write = 0 + +[interleaved] +field = "reasoning_content" diff --git a/providers/kimi-code-plan-cn/models/kimi-for-coding-highspeed.toml b/providers/kimi-code-plan-cn/models/kimi-for-coding-highspeed.toml new file mode 100644 index 00000000000..407bcf710f8 --- /dev/null +++ b/providers/kimi-code-plan-cn/models/kimi-for-coding-highspeed.toml @@ -0,0 +1,15 @@ +base_model = "moonshotai/kimi-k2.7-code-highspeed" +name = "Kimi For Coding HighSpeed" +reasoning_options = [] + +[cost] +input = 0 +output = 0 +cache_read = 0 +cache_write = 0 + +[limit] +output = 32_768 + +[interleaved] +field = "reasoning_content" diff --git a/providers/kimi-code-plan-cn/models/kimi-for-coding.toml b/providers/kimi-code-plan-cn/models/kimi-for-coding.toml new file mode 100644 index 00000000000..570fea3fd8a --- /dev/null +++ b/providers/kimi-code-plan-cn/models/kimi-for-coding.toml @@ -0,0 +1,27 @@ +# https://www.kimi.com/code/docs/en/third-party-tools/opencode.html +# OpenAI-compatible chat completions on api.kimi.com (verified 2026-09-18 with +# kimi-code OAuth credentials; reasoning returned via reasoning_content). +# Toggle: thinking.type = "enabled" | "disabled" | "adaptive" +# Effort: output_config.effort = "low" | "high" | "max" (default: "max") +# Retain the existing output limit; the K2.8 announcement only specifies context. +base_model = "moonshotai/kimi-k2.8-preview" +name = "kimi-for-coding" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0 +output = 0 +cache_read = 0 +cache_write = 0 + +[limit] +output = 32_768 + +[interleaved] +field = "reasoning_content" diff --git a/providers/kimi-code-plan-cn/provider.toml b/providers/kimi-code-plan-cn/provider.toml new file mode 100644 index 00000000000..ab7b8962d83 --- /dev/null +++ b/providers/kimi-code-plan-cn/provider.toml @@ -0,0 +1,10 @@ +# NOTE: api.kimi.com/coding serves BOTH Anthropic (/v1/messages) and +# OpenAI-compatible (/v1/chat/completions) protocols. All four models +# verified on /chat/completions 2026-09-18 with kimi-code OAuth credentials +# (reasoning returned via reasoning_content). The global deployment +# (api.kimi.ai) is the separate kimi-code-plan-global provider. +name = "Kimi For Coding (kimi.com)" +env = ["KIMI_API_KEY"] +npm = "@ai-sdk/openai-compatible" +doc = "https://www.kimi.com/code/docs/en/kimi-code/models.html" +api = "https://api.kimi.com/coding/v1" diff --git a/providers/kimi-code-plan-global/logo.svg b/providers/kimi-code-plan-global/logo.svg new file mode 100644 index 00000000000..d41029890d2 --- /dev/null +++ b/providers/kimi-code-plan-global/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/providers/kimi-code-plan-global/models/k3-256k.toml b/providers/kimi-code-plan-global/models/k3-256k.toml new file mode 100644 index 00000000000..36af21989bd --- /dev/null +++ b/providers/kimi-code-plan-global/models/k3-256k.toml @@ -0,0 +1,29 @@ +# Verified 2026-09-18 against https://api.kimi.ai/coding/v1/chat/completions +# with kimi-code OAuth credentials; reasoning returned via reasoning_content. +# k3-256k is the 256K-context variant of Kimi K3 on the Kimi For Coding +# endpoint. Unlike full K3 it accepts no video input (image only). +# reasoning_options per the Kimi Code docs: +# reasoning_effort = "low" | "high" | "max" (default "high") +# Cost is zeroed per this provider's subscription convention. +base_model = "moonshotai/kimi-k3" +name = "Kimi K3-256K" +description = "256K-context version of Kimi K3, reducing token consumption for shorter coding sessions" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0 +output = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 262_144 + +[modalities] +input = ["text", "image"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/kimi-code-plan-global/models/k3.toml b/providers/kimi-code-plan-global/models/k3.toml new file mode 100644 index 00000000000..e2cc98df82b --- /dev/null +++ b/providers/kimi-code-plan-global/models/k3.toml @@ -0,0 +1,23 @@ +# Verified 2026-09-18 against https://api.kimi.ai/coding/v1/chat/completions +# with kimi-code OAuth credentials; reasoning returned via reasoning_content. +# reasoning_options mirror the Moonshot AI platform API surface: +# thinking.type = "enabled" | "disabled" | "adaptive" +# output_config.effort = "low" | "high" | "max" +# Cost is zeroed per this provider's subscription convention. +base_model = "moonshotai/kimi-k3" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0 +output = 0 +cache_read = 0 +cache_write = 0 + +[interleaved] +field = "reasoning_content" diff --git a/providers/kimi-code-plan-global/models/kimi-for-coding-highspeed.toml b/providers/kimi-code-plan-global/models/kimi-for-coding-highspeed.toml new file mode 100644 index 00000000000..ff4e80c9104 --- /dev/null +++ b/providers/kimi-code-plan-global/models/kimi-for-coding-highspeed.toml @@ -0,0 +1,17 @@ +# Verified 2026-09-18 against https://api.kimi.ai/coding/v1/chat/completions +# with kimi-code OAuth credentials; reasoning returned via reasoning_content. +base_model = "moonshotai/kimi-k2.7-code-highspeed" +name = "Kimi For Coding HighSpeed" +reasoning_options = [] + +[cost] +input = 0 +output = 0 +cache_read = 0 +cache_write = 0 + +[limit] +output = 32_768 + +[interleaved] +field = "reasoning_content" diff --git a/providers/kimi-code-plan-global/models/kimi-for-coding.toml b/providers/kimi-code-plan-global/models/kimi-for-coding.toml new file mode 100644 index 00000000000..766cc5bfb99 --- /dev/null +++ b/providers/kimi-code-plan-global/models/kimi-for-coding.toml @@ -0,0 +1,25 @@ +# Verified 2026-09-18 against https://api.kimi.ai/coding/v1/chat/completions +# with kimi-code OAuth credentials; reasoning returned via reasoning_content. +# Toggle: thinking.type = "enabled" | "disabled" | "adaptive" +# Effort: output_config.effort = "low" | "high" | "max" (default: "max") +base_model = "moonshotai/kimi-k2.8-preview" +name = "kimi-for-coding" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0 +output = 0 +cache_read = 0 +cache_write = 0 + +[limit] +output = 32_768 + +[interleaved] +field = "reasoning_content" diff --git a/providers/kimi-code-plan-global/provider.toml b/providers/kimi-code-plan-global/provider.toml new file mode 100644 index 00000000000..cf4da1d06d8 --- /dev/null +++ b/providers/kimi-code-plan-global/provider.toml @@ -0,0 +1,9 @@ +# Global deployment of Kimi For Coding on api.kimi.ai (separate host and OAuth +# issuer auth.kimi.ai). OpenAI-compatible chat completions; catalog verified +# via GET /models on 2026-09-18 (kimi-for-coding, kimi-for-coding-highspeed, +# k3, k3-256k) with kimi-code OAuth credentials. +name = "Kimi For Coding (kimi.ai)" +env = ["KIMI_API_KEY"] +npm = "@ai-sdk/openai-compatible" +doc = "https://www.kimi.ai/code/docs/en/kimi-code/models.html" +api = "https://api.kimi.ai/coding/v1" diff --git a/providers/kimi-for-coding/models/k3-256k.toml b/providers/kimi-for-coding/models/k3-256k.toml deleted file mode 100644 index d28baff592d..00000000000 --- a/providers/kimi-for-coding/models/k3-256k.toml +++ /dev/null @@ -1,25 +0,0 @@ -# k3-256k is the 256K-context variant of Kimi K3 on the Kimi For Coding -# endpoint. Unlike full K3 it accepts no video input (image only). -# reasoning_options per the Kimi Code docs: -# reasoning_effort = "low" | "high" | "max" (default "high") -# Cost is zeroed per this provider's subscription convention. -base_model = "moonshotai/kimi-k3" -name = "Kimi K3-256K" -description = "256K-context version of Kimi K3, reducing token consumption for shorter coding sessions" -attachment = false - -[[reasoning_options]] -type = "effort" -values = ["low", "high", "max"] - -[cost] -input = 0 -output = 0 -cache_read = 0 -cache_write = 0 - -[limit] -context = 262_144 - -[modalities] -input = ["text", "image"] diff --git a/providers/kimi-for-coding/models/k3.toml b/providers/kimi-for-coding/models/k3.toml deleted file mode 100644 index 3b31cf148db..00000000000 --- a/providers/kimi-for-coding/models/k3.toml +++ /dev/null @@ -1,19 +0,0 @@ -# reasoning_options mirror the Moonshot AI platform API surface: -# thinking.type = "enabled" | "disabled" | "adaptive" -# output_config.effort = "low" | "high" | "max" -# Cost is zeroed per this provider's subscription convention. -base_model = "moonshotai/kimi-k3" -attachment = false - -[[reasoning_options]] -type = "toggle" - -[[reasoning_options]] -type = "effort" -values = ["low", "high", "max"] - -[cost] -input = 0 -output = 0 -cache_read = 0 -cache_write = 0 diff --git a/providers/kimi-for-coding/models/kimi-for-coding-highspeed.toml b/providers/kimi-for-coding/models/kimi-for-coding-highspeed.toml deleted file mode 100644 index 32d5102804a..00000000000 --- a/providers/kimi-for-coding/models/kimi-for-coding-highspeed.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "moonshotai/kimi-k2.7-code-highspeed" -name = "Kimi For Coding HighSpeed" -reasoning_options = [] - -[cost] -input = 0 -output = 0 -cache_read = 0 -cache_write = 0 - -[limit] -output = 32_768 diff --git a/providers/kimi-for-coding/models/kimi-for-coding.toml b/providers/kimi-for-coding/models/kimi-for-coding.toml deleted file mode 100644 index c6486dd0500..00000000000 --- a/providers/kimi-for-coding/models/kimi-for-coding.toml +++ /dev/null @@ -1,11 +0,0 @@ -base_model = "moonshotai/kimi-k2.7-code" -reasoning_options = [] - -[cost] -input = 0 -output = 0 -cache_read = 0 -cache_write = 0 - -[limit] -output = 32_768 diff --git a/providers/kimi-for-coding/provider.toml b/providers/kimi-for-coding/provider.toml deleted file mode 100644 index 0fbd0638ba4..00000000000 --- a/providers/kimi-for-coding/provider.toml +++ /dev/null @@ -1,10 +0,0 @@ -# NOTE: api.kimi.com/coding serves BOTH Anthropic (/v1/messages) and -# OpenAI-compatible (/v1/chat/completions) protocols (verified 2026-07). -# Registered as @ai-sdk/anthropic: the Messages surface is the officially -# documented one (see doc) and round-trips reasoning natively via -# thinking blocks. -name = "Kimi For Coding" -env = ["KIMI_API_KEY"] -npm = "@ai-sdk/anthropic" -doc = "https://www.kimi.com/code/docs/en/third-party-tools/other-coding-agents.html" -api = "https://api.kimi.com/coding/v1" diff --git a/providers/klokintegration/logo.svg b/providers/klokintegration/logo.svg new file mode 100644 index 00000000000..c488f56b401 --- /dev/null +++ b/providers/klokintegration/logo.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/providers/klokintegration/models/Kloker-Integration-Architect.toml b/providers/klokintegration/models/Kloker-Integration-Architect.toml new file mode 100644 index 00000000000..a821123824e --- /dev/null +++ b/providers/klokintegration/models/Kloker-Integration-Architect.toml @@ -0,0 +1,27 @@ +# Cost from https://klokintegration.se/docs/ai-api (email-token rate): +# €0.20 input / €1.00 output per MTok. EUR/USD 1.1583 (2026-08-28) → 0.23 / 1.16 USD. +# Context 200k and max output 50k from Klok. +# Gateway appends Klok practice to the system prompt and runs lookup tools server-side. +name = "Kloker Integration Architect" +description = "Knows the customer integration environment and Klok best practices. Opinionated about structure. The gateway runs ecosystem lookup tools server-side and appends a system-prompt injection (data contracts, CloudEvents, event-driven flows). Client system prompts and OpenAI tool calls are preserved." +attachment = false +reasoning = false +tool_call = true +structured_output = false +temperature = true +release_date = "2026-08-29" +last_updated = "2026-08-29" +open_weights = false +status = "beta" + +[cost] +input = 0.23 +output = 1.16 + +[limit] +context = 200_000 +output = 50_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/klokintegration/models/Kloker-Integration-Developer.toml b/providers/klokintegration/models/Kloker-Integration-Developer.toml new file mode 100644 index 00000000000..6e858630e60 --- /dev/null +++ b/providers/klokintegration/models/Kloker-Integration-Developer.toml @@ -0,0 +1,27 @@ +# Cost from https://klokintegration.se/docs/ai-api (email-token rate): +# €0.20 input / €1.00 output per MTok. EUR/USD 1.1583 (2026-08-28) → 0.23 / 1.16 USD. +# Context 200k and max output 50k from Klok. +# Gateway appends Klok practice to the system prompt and runs lookup tools server-side. +name = "Kloker Integration Developer" +description = "Knows the customer integration environment and Klok best practices. Opinionated about implementation. The gateway runs ecosystem lookup tools server-side and appends a system-prompt injection. Client system prompts and OpenAI tool calls are preserved." +attachment = false +reasoning = false +tool_call = true +structured_output = false +temperature = true +release_date = "2026-08-29" +last_updated = "2026-08-29" +open_weights = false +status = "beta" + +[cost] +input = 0.23 +output = 1.16 + +[limit] +context = 200_000 +output = 50_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/klokintegration/models/Kloker.toml b/providers/klokintegration/models/Kloker.toml new file mode 100644 index 00000000000..d8385b72d6d --- /dev/null +++ b/providers/klokintegration/models/Kloker.toml @@ -0,0 +1,26 @@ +# Cost from https://klokintegration.se/docs/ai-api (email-token rate): +# €0.20 input / €1.00 output per MTok. EUR/USD 1.1583 (2026-08-28) → 0.23 / 1.16 USD. +# Context 200k and max output 50k from Klok. +name = "Kloker" +description = "Cheap general model with a clean context. Nothing from the customer environment is packed in. It tracks the current best open source model. The Klok team verifies it and upgrades it periodically." +attachment = false +reasoning = false +tool_call = true +structured_output = false +temperature = true +release_date = "2026-08-29" +last_updated = "2026-08-29" +open_weights = false +status = "beta" + +[cost] +input = 0.23 +output = 1.16 + +[limit] +context = 200_000 +output = 50_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/klokintegration/provider.toml b/providers/klokintegration/provider.toml new file mode 100644 index 00000000000..39e11a5aed6 --- /dev/null +++ b/providers/klokintegration/provider.toml @@ -0,0 +1,5 @@ +name = "klokintegration.se" +npm = "@ai-sdk/openai-compatible" +env = ["KLOKINTEGRATION_API_KEY"] +api = "https://api-gw.klok.ipaas.se/proxy/kloker-key/v1" +doc = "https://klokintegration.se/docs/ai-api" diff --git a/providers/llmgateway-providers/models/alibaba/deepseek-v4.1-flash.toml b/providers/llmgateway-providers/models/alibaba/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..47bdbfcba40 --- /dev/null +++ b/providers/llmgateway-providers/models/alibaba/deepseek-v4.1-flash.toml @@ -0,0 +1,15 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash (Alibaba Cloud)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.03 + +[limit] +output = 393_216 diff --git a/providers/llmgateway-providers/models/alibaba/glm-5.3.toml b/providers/llmgateway-providers/models/alibaba/glm-5.3.toml new file mode 100644 index 00000000000..1cde92a3889 --- /dev/null +++ b/providers/llmgateway-providers/models/alibaba/glm-5.3.toml @@ -0,0 +1,15 @@ +base_model = "zhipuai/glm-5.3" +name = "GLM-5.3 (Alibaba Cloud)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.28 + +[limit] +context = 1_048_576 diff --git a/providers/llmgateway-providers/models/alibaba/kimi-k3.toml b/providers/llmgateway-providers/models/alibaba/kimi-k3.toml new file mode 100644 index 00000000000..4f21a719d33 --- /dev/null +++ b/providers/llmgateway-providers/models/alibaba/kimi-k3.toml @@ -0,0 +1,14 @@ +base_model = "moonshotai/kimi-k3" +name = "Kimi K3 (Alibaba Cloud)" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 3 +output = 15 +cache_read = 0.3 + +[limit] +output = 1_048_576 diff --git a/providers/llmgateway-providers/models/alibaba/qwen3.8-flash.toml b/providers/llmgateway-providers/models/alibaba/qwen3.8-flash.toml new file mode 100644 index 00000000000..ef229ca5be6 --- /dev/null +++ b/providers/llmgateway-providers/models/alibaba/qwen3.8-flash.toml @@ -0,0 +1,12 @@ +base_model = "alibaba/qwen3.8-flash" +name = "Qwen3.8 Flash (Alibaba Cloud)" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.15 +output = 0.47 +cache_read = 0.016 +cache_write = 0.2 diff --git a/providers/llmgateway-providers/models/anthropic/claude-fable-5-1.toml b/providers/llmgateway-providers/models/anthropic/claude-fable-5-1.toml new file mode 100644 index 00000000000..6fe53a1c861 --- /dev/null +++ b/providers/llmgateway-providers/models/anthropic/claude-fable-5-1.toml @@ -0,0 +1,13 @@ +base_model = "anthropic/claude-fable-5-1" +name = "Claude Fable 5.1 (Anthropic)" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 diff --git a/providers/llmgateway-providers/models/anthropic/claude-opus-5-5.toml b/providers/llmgateway-providers/models/anthropic/claude-opus-5-5.toml new file mode 100644 index 00000000000..090b539ee3e --- /dev/null +++ b/providers/llmgateway-providers/models/anthropic/claude-opus-5-5.toml @@ -0,0 +1,13 @@ +base_model = "anthropic/claude-opus-5-5" +name = "Claude Opus 5.5 (Anthropic)" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 4 +output = 20 +cache_read = 0.2 +cache_write = 5 diff --git a/providers/llmgateway-providers/models/atria/atria-dawn-preview.toml b/providers/llmgateway-providers/models/atria/atria-dawn-preview.toml new file mode 100644 index 00000000000..ff54b19c572 --- /dev/null +++ b/providers/llmgateway-providers/models/atria/atria-dawn-preview.toml @@ -0,0 +1,26 @@ +name = "Atria Dawn Preview (Atria)" +description = "Preview model for early access evaluation, prototyping, and compatibility testing" +release_date = "2026-09-12" +last_updated = "2026-09-12" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0 +output = 0 + +[limit] +context = 262_144 +output = 65_536 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/llmgateway-providers/models/aws-bedrock/claude-fable-5-1.toml b/providers/llmgateway-providers/models/aws-bedrock/claude-fable-5-1.toml new file mode 100644 index 00000000000..2d570728f40 --- /dev/null +++ b/providers/llmgateway-providers/models/aws-bedrock/claude-fable-5-1.toml @@ -0,0 +1,13 @@ +base_model = "anthropic/claude-fable-5-1" +name = "Claude Fable 5.1 (AWS Bedrock)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 diff --git a/providers/llmgateway-providers/models/aws-mantle/gpt-5.6-luna.toml b/providers/llmgateway-providers/models/aws-mantle/gpt-5.6-luna.toml index 14b7dc054c3..f1fab1a8efa 100644 --- a/providers/llmgateway-providers/models/aws-mantle/gpt-5.6-luna.toml +++ b/providers/llmgateway-providers/models/aws-mantle/gpt-5.6-luna.toml @@ -13,4 +13,4 @@ cache_read = 0.022 cache_write = 0.275 [limit] -context = 278_528 +context = 921_600 diff --git a/providers/llmgateway-providers/models/aws-mantle/gpt-5.6-sol.toml b/providers/llmgateway-providers/models/aws-mantle/gpt-5.6-sol.toml index 53e678996d0..3c5f40f364f 100644 --- a/providers/llmgateway-providers/models/aws-mantle/gpt-5.6-sol.toml +++ b/providers/llmgateway-providers/models/aws-mantle/gpt-5.6-sol.toml @@ -7,10 +7,10 @@ type = "effort" values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 5.5 -output = 33 -cache_read = 0.55 -cache_write = 6.875 +input = 4.4 +output = 22 +cache_read = 0.44 +cache_write = 5.5 [limit] -context = 278_528 +context = 921_600 diff --git a/providers/llmgateway-providers/models/aws-mantle/gpt-5.6-terra.toml b/providers/llmgateway-providers/models/aws-mantle/gpt-5.6-terra.toml index febed3b2f4d..66896653c6c 100644 --- a/providers/llmgateway-providers/models/aws-mantle/gpt-5.6-terra.toml +++ b/providers/llmgateway-providers/models/aws-mantle/gpt-5.6-terra.toml @@ -13,4 +13,4 @@ cache_read = 0.22 cache_write = 2.75 [limit] -context = 278_528 +context = 921_600 diff --git a/providers/llmgateway-providers/models/aws-mantle/gpt-6-astra.toml b/providers/llmgateway-providers/models/aws-mantle/gpt-6-astra.toml new file mode 100644 index 00000000000..a9a970a8f7e --- /dev/null +++ b/providers/llmgateway-providers/models/aws-mantle/gpt-6-astra.toml @@ -0,0 +1,12 @@ +base_model = "openai/gpt-6-astra" +name = "GPT-6 Astra (AWS Mantle)" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 diff --git a/providers/llmgateway-providers/models/azure/gpt-5.6-sol.toml b/providers/llmgateway-providers/models/azure/gpt-5.6-sol.toml index 31efa601388..1bbdab35ac1 100644 --- a/providers/llmgateway-providers/models/azure/gpt-5.6-sol.toml +++ b/providers/llmgateway-providers/models/azure/gpt-5.6-sol.toml @@ -6,7 +6,7 @@ type = "effort" values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 5 -output = 30 -cache_read = 0.5 -cache_write = 6.25 +input = 4 +output = 20 +cache_read = 0.4 +cache_write = 5 diff --git a/providers/llmgateway-providers/models/azure/gpt-6-astra.toml b/providers/llmgateway-providers/models/azure/gpt-6-astra.toml new file mode 100644 index 00000000000..d2ebe475720 --- /dev/null +++ b/providers/llmgateway-providers/models/azure/gpt-6-astra.toml @@ -0,0 +1,12 @@ +base_model = "openai/gpt-6-astra" +name = "GPT-6 Astra (Azure)" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 diff --git a/providers/llmgateway-providers/models/baidu/deepseek-v4-flash.toml b/providers/llmgateway-providers/models/baidu/deepseek-v4-flash.toml index 95bedd8498e..40383b0961a 100644 --- a/providers/llmgateway-providers/models/baidu/deepseek-v4-flash.toml +++ b/providers/llmgateway-providers/models/baidu/deepseek-v4-flash.toml @@ -12,7 +12,7 @@ values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [cost] input = 0.44 output = 1.32 -cache_read = 0.044 +cache_read = 0.014 [limit] context = 1_048_576 diff --git a/providers/llmgateway-providers/models/baidu/deepseek-v4-pro.toml b/providers/llmgateway-providers/models/baidu/deepseek-v4-pro.toml index bab1be34eeb..e9463e0fe2a 100644 --- a/providers/llmgateway-providers/models/baidu/deepseek-v4-pro.toml +++ b/providers/llmgateway-providers/models/baidu/deepseek-v4-pro.toml @@ -12,7 +12,7 @@ values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [cost] input = 1.32 output = 3.96 -cache_read = 0.132 +cache_read = 0.042 [limit] context = 1_048_576 diff --git a/providers/llmgateway-providers/models/baidu/deepseek-v4.1-flash.toml b/providers/llmgateway-providers/models/baidu/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..a22c803e3f5 --- /dev/null +++ b/providers/llmgateway-providers/models/baidu/deepseek-v4.1-flash.toml @@ -0,0 +1,15 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash (Baidu)" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.006 + +[limit] +context = 1_048_576 +output = 393_216 diff --git a/providers/llmgateway-providers/models/cerebras/llama-3.3-70b-instruct.toml b/providers/llmgateway-providers/models/cerebras/llama-3.3-70b-instruct.toml index 34696489bf7..c333bbf720c 100644 --- a/providers/llmgateway-providers/models/cerebras/llama-3.3-70b-instruct.toml +++ b/providers/llmgateway-providers/models/cerebras/llama-3.3-70b-instruct.toml @@ -1,6 +1,5 @@ base_model = "meta/llama-3.3-70b-instruct" name = "Llama 3.3 70B Instruct (Cerebras)" -attachment = false structured_output = false [cost] diff --git a/providers/llmgateway-providers/models/consensusprotocol/Qwen3.8-27B.toml b/providers/llmgateway-providers/models/consensusprotocol/Qwen3.8-27B.toml new file mode 100644 index 00000000000..c02ad50d9d8 --- /dev/null +++ b/providers/llmgateway-providers/models/consensusprotocol/Qwen3.8-27B.toml @@ -0,0 +1,27 @@ +name = "Qwen3.8 27B (Consensus Protocol)" +description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" +release_date = "2026-09-02" +last_updated = "2026-09-02" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] + +[cost] +input = 0.08 +output = 0.35 +cache_read = 0.05 + +[limit] +context = 32_768 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/llmgateway-providers/models/consensusprotocol/deepseek-v4-flash.toml b/providers/llmgateway-providers/models/consensusprotocol/deepseek-v4-flash.toml new file mode 100644 index 00000000000..20a72c32212 --- /dev/null +++ b/providers/llmgateway-providers/models/consensusprotocol/deepseek-v4-flash.toml @@ -0,0 +1,18 @@ +base_model = "deepseek/deepseek-v4-flash" +name = "DeepSeek V4 Flash (Consensus Protocol)" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 0.05 +output = 0.1 +cache_read = 0.01 + +[limit] +context = 1_050_000 +output = 393_216 diff --git a/providers/llmgateway-providers/models/consensusprotocol/deepseek-v4.1-flash.toml b/providers/llmgateway-providers/models/consensusprotocol/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..3ebe60d0b7b --- /dev/null +++ b/providers/llmgateway-providers/models/consensusprotocol/deepseek-v4.1-flash.toml @@ -0,0 +1,15 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash (Consensus Protocol)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "xhigh", "max"] + +[cost] +input = 0.2 +output = 0.6 +cache_read = 0.005 + +[limit] +context = 1_048_576 diff --git a/providers/llmgateway-providers/models/consensusprotocol/gemma-4-31b-it.toml b/providers/llmgateway-providers/models/consensusprotocol/gemma-4-31b-it.toml new file mode 100644 index 00000000000..25e68298d12 --- /dev/null +++ b/providers/llmgateway-providers/models/consensusprotocol/gemma-4-31b-it.toml @@ -0,0 +1,16 @@ +base_model = "google/gemma-4-31b-it" +name = "Gemma 4 31B IT (Consensus Protocol)" +attachment = false +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "high", "xhigh", "max"] + +[cost] +input = 0.1 +output = 0.25 +cache_read = 0.01 + +[modalities] +input = ["text"] diff --git a/providers/llmgateway-providers/models/consensusprotocol/glm-5.3-flash.toml b/providers/llmgateway-providers/models/consensusprotocol/glm-5.3-flash.toml new file mode 100644 index 00000000000..4fd6e3fc0b3 --- /dev/null +++ b/providers/llmgateway-providers/models/consensusprotocol/glm-5.3-flash.toml @@ -0,0 +1,15 @@ +base_model = "zhipuai/glm-5.3-flash" +name = "GLM-5.3 Flash (Consensus Protocol)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.1 +output = 0.25 +cache_read = 0.02 + +[limit] +context = 1_048_576 diff --git a/providers/llmgateway-providers/models/consensusprotocol/gpt-oss-20b.toml b/providers/llmgateway-providers/models/consensusprotocol/gpt-oss-20b.toml new file mode 100644 index 00000000000..e855e9ed4ff --- /dev/null +++ b/providers/llmgateway-providers/models/consensusprotocol/gpt-oss-20b.toml @@ -0,0 +1,16 @@ +base_model = "openai/gpt-oss-20b" +name = "GPT OSS 20B (Consensus Protocol)" +attachment = true +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.04 +output = 0.19 +cache_read = 0.01 + +[limit] +context = 65_536 diff --git a/providers/llmgateway-providers/models/deepinfra/deepseek-v4.1-flash.toml b/providers/llmgateway-providers/models/deepinfra/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..c5319df2e3b --- /dev/null +++ b/providers/llmgateway-providers/models/deepinfra/deepseek-v4.1-flash.toml @@ -0,0 +1,15 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash (DeepInfra)" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.2 +output = 0.6 +cache_read = 0.006 + +[limit] +context = 1_048_576 +output = 393_216 diff --git a/providers/llmgateway-providers/models/deepinfra/glm-5.3.toml b/providers/llmgateway-providers/models/deepinfra/glm-5.3.toml new file mode 100644 index 00000000000..49f3f113f39 --- /dev/null +++ b/providers/llmgateway-providers/models/deepinfra/glm-5.3.toml @@ -0,0 +1,14 @@ +base_model = "zhipuai/glm-5.3" +name = "GLM-5.3 (DeepInfra)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 1.2 +output = 4 +cache_read = 0.2 + +[limit] +context = 1_048_576 diff --git a/providers/llmgateway-providers/models/deepinfra/inkling-small.toml b/providers/llmgateway-providers/models/deepinfra/inkling-small.toml new file mode 100644 index 00000000000..0109639620f --- /dev/null +++ b/providers/llmgateway-providers/models/deepinfra/inkling-small.toml @@ -0,0 +1,16 @@ +base_model = "thinkingmachines/inkling-small" +name = "Inkling Small (DeepInfra)" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.45 +output = 1.2 +cache_read = 0.1 + +[limit] +context = 524_288 +output = 262_144 diff --git a/providers/llmgateway-providers/models/deepinfra/inkling.toml b/providers/llmgateway-providers/models/deepinfra/inkling.toml new file mode 100644 index 00000000000..41e528e739e --- /dev/null +++ b/providers/llmgateway-providers/models/deepinfra/inkling.toml @@ -0,0 +1,17 @@ +base_model = "thinkingmachines/inkling" +name = "Inkling (DeepInfra)" +tool_call = false +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.95 +output = 4.05 +cache_read = 0.16 + +[limit] +context = 524_288 +output = 262_144 diff --git a/providers/llmgateway-providers/models/deepinfra/kimi-k2.5.toml b/providers/llmgateway-providers/models/deepinfra/kimi-k2.5.toml deleted file mode 100644 index 3e524f9954f..00000000000 --- a/providers/llmgateway-providers/models/deepinfra/kimi-k2.5.toml +++ /dev/null @@ -1,19 +0,0 @@ -base_model = "moonshotai/kimi-k2.5" -name = "Kimi K2.5 (DeepInfra)" -structured_output = false - -[interleaved] -field = "reasoning_content" - -[[reasoning_options]] -type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 0.45 -output = 2.25 -cache_read = 0.07 - -[limit] -context = 256_000 -output = 131_072 diff --git a/providers/llmgateway-providers/models/deepinfra/muse-glimmer-30b.toml b/providers/llmgateway-providers/models/deepinfra/muse-glimmer-30b.toml new file mode 100644 index 00000000000..0c26147df21 --- /dev/null +++ b/providers/llmgateway-providers/models/deepinfra/muse-glimmer-30b.toml @@ -0,0 +1,14 @@ +base_model = "meta/muse-glimmer-30b" +name = "Muse Glimmer 30B (DeepInfra)" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.04 + +[limit] +output = 16_384 diff --git a/providers/llmgateway-providers/models/deepinfra/nemotron-3.5-lightning.toml b/providers/llmgateway-providers/models/deepinfra/nemotron-3.5-lightning.toml new file mode 100644 index 00000000000..aa669cc8be8 --- /dev/null +++ b/providers/llmgateway-providers/models/deepinfra/nemotron-3.5-lightning.toml @@ -0,0 +1,13 @@ +base_model = "nvidia/nemotron-3.5-lightning" +name = "Nemotron 3.5 Lightning (DeepInfra)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + +[cost] +input = 0.08 +output = 0.2 + +[limit] +output = 131_072 diff --git a/providers/llmgateway-providers/models/deepinfra/qwen3.8-2.4t-a95b.toml b/providers/llmgateway-providers/models/deepinfra/qwen3.8-2.4t-a95b.toml new file mode 100644 index 00000000000..09c8ba4899d --- /dev/null +++ b/providers/llmgateway-providers/models/deepinfra/qwen3.8-2.4t-a95b.toml @@ -0,0 +1,11 @@ +base_model = "alibaba/qwen3.8-2.4t-a95b" +name = "Qwen3.8 2.4T A95B (DeepInfra)" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 6 +cache_read = 0.2 diff --git a/providers/llmgateway-providers/models/deepinfra/qwen3.8-27b.toml b/providers/llmgateway-providers/models/deepinfra/qwen3.8-27b.toml new file mode 100644 index 00000000000..3b37e4d93ab --- /dev/null +++ b/providers/llmgateway-providers/models/deepinfra/qwen3.8-27b.toml @@ -0,0 +1,14 @@ +base_model = "alibaba/qwen3.8-27b" +name = "Qwen3.8 27B (DeepInfra)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + +[cost] +input = 0.2 +output = 2.5 +cache_read = 0.05 + +[limit] +output = 235_929 diff --git a/providers/llmgateway-providers/models/deepinfra/step-3.7-flash.toml b/providers/llmgateway-providers/models/deepinfra/step-3.7-flash.toml new file mode 100644 index 00000000000..d9f47a5da91 --- /dev/null +++ b/providers/llmgateway-providers/models/deepinfra/step-3.7-flash.toml @@ -0,0 +1,17 @@ +base_model = "stepfun/step-3.7-flash" +base_model_omit = ["limit.input"] +name = "Step 3.7 Flash (DeepInfra)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.2 +output = 1.15 +cache_read = 0.04 + +[limit] +context = 262_144 +output = 32_768 diff --git a/providers/llmgateway-providers/models/deepseek/deepseek-v4-flash.toml b/providers/llmgateway-providers/models/deepseek/deepseek-v4-flash.toml deleted file mode 100644 index 9f461ad4489..00000000000 --- a/providers/llmgateway-providers/models/deepseek/deepseek-v4-flash.toml +++ /dev/null @@ -1,19 +0,0 @@ -base_model = "deepseek/deepseek-v4-flash" -name = "DeepSeek V4 Flash (DeepSeek)" -structured_output = false - -[interleaved] -field = "reasoning_content" - -[[reasoning_options]] -type = "effort" -values = ["none", "low", "high", "max"] - -[cost] -input = 0.14 -output = 0.28 -cache_read = 0.0028 - -[limit] -context = 1_050_000 -output = 393_216 diff --git a/providers/llmgateway-providers/models/deepseek/deepseek-v4.1-flash.toml b/providers/llmgateway-providers/models/deepseek/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..28944b9ff2c --- /dev/null +++ b/providers/llmgateway-providers/models/deepseek/deepseek-v4.1-flash.toml @@ -0,0 +1,16 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash (DeepSeek)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 0.15 +output = 0.6 +cache_read = 0.003 + +[limit] +context = 1_050_000 +output = 393_216 diff --git a/providers/llmgateway-providers/models/fireworks/deepseek-v4-flash.toml b/providers/llmgateway-providers/models/fireworks/deepseek-v4-flash.toml index bdd63f19f70..dd2699004e1 100644 --- a/providers/llmgateway-providers/models/fireworks/deepseek-v4-flash.toml +++ b/providers/llmgateway-providers/models/fireworks/deepseek-v4-flash.toml @@ -9,9 +9,9 @@ type = "effort" values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 0.14 -output = 0.28 -cache_read = 0.028 +input = 0.22 +output = 0.66 +cache_read = 0.007 [limit] context = 1_048_576 diff --git a/providers/llmgateway-providers/models/fireworks/deepseek-v4.1-flash.toml b/providers/llmgateway-providers/models/fireworks/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..b7f489724a1 --- /dev/null +++ b/providers/llmgateway-providers/models/fireworks/deepseek-v4.1-flash.toml @@ -0,0 +1,15 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash (Fireworks AI)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.22 +output = 0.66 +cache_read = 0.007 + +[limit] +context = 1_048_576 +output = 393_216 diff --git a/providers/llmgateway-providers/models/gonka24/deepseek-v4-flash.toml b/providers/llmgateway-providers/models/gonka24/deepseek-v4-flash.toml index 6abdece9001..3497ea65828 100644 --- a/providers/llmgateway-providers/models/gonka24/deepseek-v4-flash.toml +++ b/providers/llmgateway-providers/models/gonka24/deepseek-v4-flash.toml @@ -10,9 +10,9 @@ type = "effort" values = ["none", "low", "medium", "high"] [cost] -input = 0.051 -output = 0.104 -cache_read = 0.0097 +input = 0.065 +output = 0.116 +cache_read = 0.012 [limit] context = 390_000 diff --git a/providers/llmgateway-providers/models/gonka24/glm-5.3-flash.toml b/providers/llmgateway-providers/models/gonka24/glm-5.3-flash.toml new file mode 100644 index 00000000000..8c7a30a6719 --- /dev/null +++ b/providers/llmgateway-providers/models/gonka24/glm-5.3-flash.toml @@ -0,0 +1,20 @@ +base_model = "zhipuai/glm-5.3-flash" +name = "GLM-5.3 Flash (Gonka24)" +attachment = false +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.15 +output = 0.3 +cache_read = 0.035 + +[limit] +context = 200_000 +output = 16_384 + +[modalities] +input = ["text"] diff --git a/providers/llmgateway-providers/models/gonka24/kimi-k2.6.toml b/providers/llmgateway-providers/models/gonka24/kimi-k2.6.toml deleted file mode 100644 index c3ed4034327..00000000000 --- a/providers/llmgateway-providers/models/gonka24/kimi-k2.6.toml +++ /dev/null @@ -1,22 +0,0 @@ -base_model = "moonshotai/kimi-k2.6" -name = "Kimi K2.6 (Gonka24)" -attachment = false -structured_output = false - -[interleaved] -field = "reasoning_content" - -[[reasoning_options]] -type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 0.22 -output = 1.137 -cache_read = 0.048 - -[limit] -output = 98_304 - -[modalities] -input = ["text"] diff --git a/providers/llmgateway-providers/models/google-ai-studio/gemini-3.8-flash.toml b/providers/llmgateway-providers/models/google-ai-studio/gemini-3.8-flash.toml new file mode 100644 index 00000000000..74f0925212a --- /dev/null +++ b/providers/llmgateway-providers/models/google-ai-studio/gemini-3.8-flash.toml @@ -0,0 +1,12 @@ +base_model = "google/gemini-3.8-flash" +name = "Gemini 3.8 Flash (Google AI Studio)" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.75 +output = 3.75 +cache_read = 0.075 +cache_write = 0.08333 diff --git a/providers/llmgateway-providers/models/google-vertex/gemini-3.8-flash.toml b/providers/llmgateway-providers/models/google-vertex/gemini-3.8-flash.toml new file mode 100644 index 00000000000..77a81139d72 --- /dev/null +++ b/providers/llmgateway-providers/models/google-vertex/gemini-3.8-flash.toml @@ -0,0 +1,29 @@ +name = "Gemini 3.8 Flash (Google Vertex AI)" +description = "Fast Gemini model balancing multimodal reasoning, tool use, and cost" +family = "gemini" +release_date = "2026-09-02" +last_updated = "2026-09-02" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.75 +output = 3.75 +cache_read = 0.075 +cache_write = 0.08333 + +[limit] +context = 1_048_576 +output = 65_536 + +[modalities] +input = ["text", "image", "audio"] +output = ["text"] diff --git a/providers/llmgateway-providers/models/iceberg/gemini-3-flash-preview.toml b/providers/llmgateway-providers/models/iceberg/gemini-3-flash-preview.toml deleted file mode 100644 index 4241c3129d0..00000000000 --- a/providers/llmgateway-providers/models/iceberg/gemini-3-flash-preview.toml +++ /dev/null @@ -1,14 +0,0 @@ -base_model = "google/gemini-3-flash-preview" -name = "Gemini 3 Flash (Preview) (Iceberg)" - -[[reasoning_options]] -type = "effort" -values = ["minimal", "low", "medium", "high"] - -[cost] -input = 0.5 -output = 3 -cache_read = 0.05 - -[limit] -output = 65_535 diff --git a/providers/llmgateway-providers/models/iceberg/gemini-3.1-pro-preview.toml b/providers/llmgateway-providers/models/iceberg/gemini-3.1-pro-preview.toml deleted file mode 100644 index 0da6fb52187..00000000000 --- a/providers/llmgateway-providers/models/iceberg/gemini-3.1-pro-preview.toml +++ /dev/null @@ -1,17 +0,0 @@ -base_model = "google/gemini-3.1-pro-preview" -name = "Gemini 3.1 Pro (Preview) (Iceberg)" - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] - -[cost] -input = 2 -output = 12 -cache_read = 0.2 - -[[cost.tiers]] -tier = { type = "context", size = 200_000 } -input = 4 -output = 18 -cache_read = 0.4 diff --git a/providers/llmgateway-providers/models/iceberg/gemini-3.6-flash.toml b/providers/llmgateway-providers/models/iceberg/gemini-3.6-flash.toml deleted file mode 100644 index b7a396ebd56..00000000000 --- a/providers/llmgateway-providers/models/iceberg/gemini-3.6-flash.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "google/gemini-3.6-flash" -name = "Gemini 3.6 Flash (Iceberg)" - -[[reasoning_options]] -type = "effort" -values = ["minimal", "low", "medium", "high"] - -[cost] -input = 0.75 -output = 3.75 -cache_read = 0.075 -cache_write = 0.08333 diff --git a/providers/llmgateway-providers/models/meta-contributor/muse-spark-1.2-contributor.toml b/providers/llmgateway-providers/models/meta-contributor/muse-spark-1.2-contributor.toml new file mode 100644 index 00000000000..4573cc740e2 --- /dev/null +++ b/providers/llmgateway-providers/models/meta-contributor/muse-spark-1.2-contributor.toml @@ -0,0 +1,28 @@ +name = "Muse Spark 1.2 Contributor (Meta Contributor)" +description = "Multimodal reasoning model for visual analysis, planning, and tool use" +family = "muse" +release_date = "2026-08-06" +last_updated = "2026-08-06" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 0.1 +output = 0.2 +cache_read = 0.002 + +[limit] +context = 1_048_576 +output = 131_072 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/llmgateway-providers/models/meta-contributor/muse-spark-1.3-contributor.toml b/providers/llmgateway-providers/models/meta-contributor/muse-spark-1.3-contributor.toml new file mode 100644 index 00000000000..63670f90238 --- /dev/null +++ b/providers/llmgateway-providers/models/meta-contributor/muse-spark-1.3-contributor.toml @@ -0,0 +1,28 @@ +name = "Muse Spark 1.3 Contributor (Meta Contributor)" +description = "Multimodal reasoning model for visual analysis, planning, and tool use" +family = "muse" +release_date = "2026-09-02" +last_updated = "2026-09-02" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 0.1 +output = 0.2 +cache_read = 0.002 + +[limit] +context = 1_048_576 +output = 1_048_576 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/llmgateway-providers/models/meta/muse-spark-1.1.toml b/providers/llmgateway-providers/models/meta/muse-spark-1.1.toml index 760bbb92383..a8448c5cc19 100644 --- a/providers/llmgateway-providers/models/meta/muse-spark-1.1.toml +++ b/providers/llmgateway-providers/models/meta/muse-spark-1.1.toml @@ -9,7 +9,3 @@ values = ["minimal", "low", "medium", "high", "xhigh"] input = 1.25 output = 4.25 cache_read = 0.15 - -[limit] -context = 1_048_576 -output = 131_072 diff --git a/providers/llmgateway-providers/models/meta/muse-spark-1.3.toml b/providers/llmgateway-providers/models/meta/muse-spark-1.3.toml new file mode 100644 index 00000000000..5ffdddfbb9a --- /dev/null +++ b/providers/llmgateway-providers/models/meta/muse-spark-1.3.toml @@ -0,0 +1,18 @@ +# Effort: reasoning_effort or reasoning.effort is forwarded unchanged to Meta's Responses API. +# https://docs.llmgateway.io/features/reasoning +# https://dev.meta.ai/docs/reasoning.md (max is Standard-tier 1.3 only) +# https://github.com/theopenco/llmgateway/blob/910a6632c47b83c74944bad231f25f17bd5acb7b/packages/actions/src/prepare-request-body.ts#L2231-L2241 +base_model = "meta/muse-spark-1.3" +name = "Muse Spark 1.3 (Meta)" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 1.25 +output = 4.25 +cache_read = 0.15 + +[limit] +output = 1_048_576 diff --git a/providers/llmgateway-providers/models/nebius/cosmos3-super-reasoner.toml b/providers/llmgateway-providers/models/nebius/cosmos3-super-reasoner.toml deleted file mode 100644 index 826aa36feab..00000000000 --- a/providers/llmgateway-providers/models/nebius/cosmos3-super-reasoner.toml +++ /dev/null @@ -1,29 +0,0 @@ -# Toggle: $.reasoning_effort = "none" disables thinking; any other accepted -# value (or omitting the field) leaves it on. The gateway maps it to the -# deployment's thinking switch. -# https://docs.llmgateway.io/features/reasoning -name = "Cosmos 3 Super Reasoner (Nebius AI)" -description = "Multimodal reasoning model for visual analysis, planning, and tool use" -release_date = "2026-06-01" -last_updated = "2026-06-01" -attachment = true -reasoning = true -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "toggle" - -[cost] -input = 0.1 -output = 0.3 - -[limit] -context = 262_144 -output = 262_144 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/llmgateway-providers/models/nebius/deepseek-v4-pro.toml b/providers/llmgateway-providers/models/nebius/deepseek-v4-pro.toml deleted file mode 100644 index e6af2f69621..00000000000 --- a/providers/llmgateway-providers/models/nebius/deepseek-v4-pro.toml +++ /dev/null @@ -1,17 +0,0 @@ -base_model = "deepseek/deepseek-v4-pro" -name = "DeepSeek V4 Pro (Nebius AI)" -structured_output = false - -[interleaved] -field = "reasoning_content" - -[[reasoning_options]] -type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 1.75 -output = 3.5 - -[limit] -context = 1_048_576 diff --git a/providers/llmgateway-providers/models/nebius/gemma-3-27b.toml b/providers/llmgateway-providers/models/nebius/gemma-3-27b.toml deleted file mode 100644 index 2919cf2f4a8..00000000000 --- a/providers/llmgateway-providers/models/nebius/gemma-3-27b.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Gemma 3 27B (Nebius AI)" -description = "Open Gemma instruction model for efficient chat and self-hosted deployments" -family = "gemma" -release_date = "2025-03-12" -last_updated = "2025-03-12" -attachment = true -reasoning = false -temperature = true -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 0.1 -output = 0.3 - -[limit] -context = 110_000 -output = 110_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/llmgateway-providers/models/nebius/glm-5.1.toml b/providers/llmgateway-providers/models/nebius/glm-5.1.toml deleted file mode 100644 index c2c273568be..00000000000 --- a/providers/llmgateway-providers/models/nebius/glm-5.1.toml +++ /dev/null @@ -1,17 +0,0 @@ -base_model = "zhipuai/glm-5.1" -name = "GLM-5.1 (Nebius AI)" -structured_output = false - -[interleaved] -field = "reasoning_content" - -[[reasoning_options]] -type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 1.4 -output = 4.4 - -[limit] -context = 202_752 diff --git a/providers/llmgateway-providers/models/nebius/glm-5.2.toml b/providers/llmgateway-providers/models/nebius/glm-5.2.toml deleted file mode 100644 index e6abb09ba21..00000000000 --- a/providers/llmgateway-providers/models/nebius/glm-5.2.toml +++ /dev/null @@ -1,17 +0,0 @@ -base_model = "zhipuai/glm-5.2" -name = "GLM-5.2 (Nebius AI)" -structured_output = false - -[interleaved] -field = "reasoning_content" - -[[reasoning_options]] -type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 1.4 -output = 4.4 - -[limit] -context = 1_048_576 diff --git a/providers/llmgateway-providers/models/nebius/gpt-oss-120b.toml b/providers/llmgateway-providers/models/nebius/gpt-oss-120b.toml deleted file mode 100644 index ff5c0f3cc92..00000000000 --- a/providers/llmgateway-providers/models/nebius/gpt-oss-120b.toml +++ /dev/null @@ -1,11 +0,0 @@ -base_model = "openai/gpt-oss-120b" -name = "GPT OSS 120B (Nebius AI)" -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] - -[cost] -input = 0.15 -output = 0.6 diff --git a/providers/llmgateway-providers/models/nebius/hermes-4-405b.toml b/providers/llmgateway-providers/models/nebius/hermes-4-405b.toml deleted file mode 100644 index 3d3b4ab3858..00000000000 --- a/providers/llmgateway-providers/models/nebius/hermes-4-405b.toml +++ /dev/null @@ -1,30 +0,0 @@ -# Toggle: $.reasoning_effort = "none" disables thinking; any other accepted -# value (or omitting the field) leaves it on. The gateway maps it to the -# deployment's thinking switch. -# https://docs.llmgateway.io/features/reasoning -name = "Hermes 4 405B (Nebius AI)" -description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" -family = "hermes" -release_date = "2025-08-26" -last_updated = "2025-08-26" -attachment = false -reasoning = true -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "toggle" - -[cost] -input = 1 -output = 3 - -[limit] -context = 131_072 -output = 131_072 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/llmgateway-providers/models/nebius/hermes-4-70b.toml b/providers/llmgateway-providers/models/nebius/hermes-4-70b.toml deleted file mode 100644 index 0dbe173405e..00000000000 --- a/providers/llmgateway-providers/models/nebius/hermes-4-70b.toml +++ /dev/null @@ -1,30 +0,0 @@ -# Toggle: $.reasoning_effort = "none" disables thinking; any other accepted -# value (or omitting the field) leaves it on. The gateway maps it to the -# deployment's thinking switch. -# https://docs.llmgateway.io/features/reasoning -name = "Hermes 4 70B (Nebius AI)" -description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" -family = "hermes" -release_date = "2025-08-26" -last_updated = "2025-08-26" -attachment = false -reasoning = true -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "toggle" - -[cost] -input = 0.13 -output = 0.4 - -[limit] -context = 131_072 -output = 131_072 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/llmgateway-providers/models/nebius/kimi-k2.6.toml b/providers/llmgateway-providers/models/nebius/kimi-k2.6.toml deleted file mode 100644 index c51b499d7c2..00000000000 --- a/providers/llmgateway-providers/models/nebius/kimi-k2.6.toml +++ /dev/null @@ -1,14 +0,0 @@ -base_model = "moonshotai/kimi-k2.6" -name = "Kimi K2.6 (Nebius AI)" -structured_output = false - -[interleaved] -field = "reasoning_content" - -[[reasoning_options]] -type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 0.95 -output = 4 diff --git a/providers/llmgateway-providers/models/nebius/kimi-k2.7-code.toml b/providers/llmgateway-providers/models/nebius/kimi-k2.7-code.toml deleted file mode 100644 index e2a4830879b..00000000000 --- a/providers/llmgateway-providers/models/nebius/kimi-k2.7-code.toml +++ /dev/null @@ -1,18 +0,0 @@ -base_model = "moonshotai/kimi-k2.7-code" -name = "Kimi K2.7 Code (Nebius AI)" -attachment = false -structured_output = false - -[interleaved] -field = "reasoning_content" - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high", "xhigh", "max"] - -[cost] -input = 0.95 -output = 4 - -[modalities] -input = ["text"] diff --git a/providers/llmgateway-providers/models/nebius/kimi-k3.toml b/providers/llmgateway-providers/models/nebius/kimi-k3.toml deleted file mode 100644 index 90d46512e7e..00000000000 --- a/providers/llmgateway-providers/models/nebius/kimi-k3.toml +++ /dev/null @@ -1,14 +0,0 @@ -base_model = "moonshotai/kimi-k3" -name = "Kimi K3 (Nebius AI)" -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 3 -output = 15 - -[limit] -output = 1_048_576 diff --git a/providers/llmgateway-providers/models/nebius/llama-3.1-nemotron-ultra-253b.toml b/providers/llmgateway-providers/models/nebius/llama-3.1-nemotron-ultra-253b.toml deleted file mode 100644 index 56575dab8ea..00000000000 --- a/providers/llmgateway-providers/models/nebius/llama-3.1-nemotron-ultra-253b.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Llama 3.1 Nemotron Ultra 253B (Nebius AI)" -description = "Flagship Nemotron model for high-throughput reasoning and complex agents" -family = "nemotron" -release_date = "2025-04-07" -last_updated = "2025-04-07" -attachment = false -reasoning = false -temperature = true -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 0.6 -output = 1.8 - -[limit] -context = 128_000 -output = 128_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/llmgateway-providers/models/nebius/llama-3.3-70b-instruct.toml b/providers/llmgateway-providers/models/nebius/llama-3.3-70b-instruct.toml deleted file mode 100644 index ad45104cca9..00000000000 --- a/providers/llmgateway-providers/models/nebius/llama-3.3-70b-instruct.toml +++ /dev/null @@ -1,8 +0,0 @@ -base_model = "meta/llama-3.3-70b-instruct" -name = "Llama 3.3 70B Instruct (Nebius AI)" -attachment = false -structured_output = false - -[cost] -input = 0.13 -output = 0.4 diff --git a/providers/llmgateway-providers/models/nebius/minicpm-v-4.5.toml b/providers/llmgateway-providers/models/nebius/minicpm-v-4.5.toml deleted file mode 100644 index b6759d8b6c5..00000000000 --- a/providers/llmgateway-providers/models/nebius/minicpm-v-4.5.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "MiniCPM-V 4.5 (Nebius AI)" -description = "Multimodal model for analyzing text, images, documents, and rich media" -release_date = "2025-08-26" -last_updated = "2025-08-26" -attachment = true -reasoning = false -temperature = true -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 0.658 -output = 1.11 - -[limit] -context = 32_000 -output = 32_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/llmgateway-providers/models/nebius/minimax-m2.5.toml b/providers/llmgateway-providers/models/nebius/minimax-m2.5.toml deleted file mode 100644 index 1cea2927551..00000000000 --- a/providers/llmgateway-providers/models/nebius/minimax-m2.5.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "minimax/MiniMax-M2.5" -name = "MiniMax M2.5 (Nebius AI)" -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high", "xhigh", "max"] - -[cost] -input = 0.3 -output = 1.2 - -[limit] -context = 196_608 -output = 131_100 diff --git a/providers/llmgateway-providers/models/nebius/minimax-m3.toml b/providers/llmgateway-providers/models/nebius/minimax-m3.toml deleted file mode 100644 index 69e984b52dd..00000000000 --- a/providers/llmgateway-providers/models/nebius/minimax-m3.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "minimax/MiniMax-M3" -name = "MiniMax M3 (Nebius AI)" -attachment = false -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 0.3 -output = 1.2 - -[modalities] -input = ["text"] diff --git a/providers/llmgateway-providers/models/nebius/nemotron-3-nano-30b.toml b/providers/llmgateway-providers/models/nebius/nemotron-3-nano-30b.toml deleted file mode 100644 index 760c83f5f05..00000000000 --- a/providers/llmgateway-providers/models/nebius/nemotron-3-nano-30b.toml +++ /dev/null @@ -1,30 +0,0 @@ -# Toggle: $.reasoning_effort = "none" disables thinking; any other accepted -# value (or omitting the field) leaves it on. The gateway maps it to the -# deployment's thinking switch. -# https://docs.llmgateway.io/features/reasoning -name = "Nemotron 3 Nano 30B (Nebius AI)" -description = "Compact Nemotron model for efficient reasoning and deployable AI agents" -family = "nemotron" -release_date = "2025-12-15" -last_updated = "2025-12-15" -attachment = false -reasoning = true -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "toggle" - -[cost] -input = 0.06 -output = 0.24 - -[limit] -context = 262_144 -output = 262_144 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/llmgateway-providers/models/nebius/nemotron-3-nano-omni.toml b/providers/llmgateway-providers/models/nebius/nemotron-3-nano-omni.toml deleted file mode 100644 index 6dd6ae2ca16..00000000000 --- a/providers/llmgateway-providers/models/nebius/nemotron-3-nano-omni.toml +++ /dev/null @@ -1,30 +0,0 @@ -# Toggle: $.reasoning_effort = "none" disables thinking; any other accepted -# value (or omitting the field) leaves it on. The gateway maps it to the -# deployment's thinking switch. -# https://docs.llmgateway.io/features/reasoning -name = "Nemotron 3 Nano Omni (Nebius AI)" -description = "Omni-modal model for text, vision, audio, and multimodal agent tasks" -family = "nemotron" -release_date = "2026-04-28" -last_updated = "2026-04-28" -attachment = true -reasoning = true -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "toggle" - -[cost] -input = 0.06 -output = 0.24 - -[limit] -context = 262_144 -output = 262_144 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/llmgateway-providers/models/nebius/nemotron-3-super-120b.toml b/providers/llmgateway-providers/models/nebius/nemotron-3-super-120b.toml deleted file mode 100644 index ac876940067..00000000000 --- a/providers/llmgateway-providers/models/nebius/nemotron-3-super-120b.toml +++ /dev/null @@ -1,30 +0,0 @@ -# Toggle: $.reasoning_effort = "none" disables thinking; any other accepted -# value (or omitting the field) leaves it on. The gateway maps it to the -# deployment's thinking switch. -# https://docs.llmgateway.io/features/reasoning -name = "Nemotron 3 Super 120B (Nebius AI)" -description = "Nemotron model for efficient reasoning, coding, and specialized AI agents" -family = "nemotron" -release_date = "2026-03-11" -last_updated = "2026-03-11" -attachment = false -reasoning = true -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "toggle" - -[cost] -input = 0.3 -output = 0.9 - -[limit] -context = 262_144 -output = 262_144 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/llmgateway-providers/models/nebius/nemotron-3-ultra-550b.toml b/providers/llmgateway-providers/models/nebius/nemotron-3-ultra-550b.toml deleted file mode 100644 index 4e533ea48bb..00000000000 --- a/providers/llmgateway-providers/models/nebius/nemotron-3-ultra-550b.toml +++ /dev/null @@ -1,30 +0,0 @@ -# Toggle: $.reasoning_effort = "none" disables thinking; any other accepted -# value (or omitting the field) leaves it on. The gateway maps it to the -# deployment's thinking switch. -# https://docs.llmgateway.io/features/reasoning -name = "Nemotron 3 Ultra 550B (Nebius AI)" -description = "Flagship Nemotron model for high-throughput reasoning and complex agents" -family = "nemotron" -release_date = "2026-06-01" -last_updated = "2026-06-01" -attachment = false -reasoning = true -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "toggle" - -[cost] -input = 1 -output = 3 - -[limit] -context = 1_048_576 -output = 1_048_576 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/llmgateway-providers/models/nebius/qwen2-5-vl-72b-instruct.toml b/providers/llmgateway-providers/models/nebius/qwen2-5-vl-72b-instruct.toml deleted file mode 100644 index 21c4e2d187f..00000000000 --- a/providers/llmgateway-providers/models/nebius/qwen2-5-vl-72b-instruct.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "alibaba/qwen2-5-vl-72b-instruct" -name = "Qwen2.5 VL 72B Instruct (Nebius AI)" -attachment = true -tool_call = false -structured_output = false - -[cost] -input = 0.25 -output = 0.75 - -[limit] -context = 32_000 diff --git a/providers/llmgateway-providers/models/nebius/qwen3-235b-a22b-instruct-2507.toml b/providers/llmgateway-providers/models/nebius/qwen3-235b-a22b-instruct-2507.toml deleted file mode 100644 index 51c2c748850..00000000000 --- a/providers/llmgateway-providers/models/nebius/qwen3-235b-a22b-instruct-2507.toml +++ /dev/null @@ -1,11 +0,0 @@ -base_model = "alibaba/qwen3-235b-a22b-instruct-2507" -name = "Qwen3 235B A22B Instruct 2507 (Nebius AI)" -structured_output = false - -[cost] -input = 0.2 -output = 0.6 - -[limit] -context = 262_000 -output = 8_192 diff --git a/providers/llmgateway-providers/models/nebius/qwen3-30b-a3b-instruct-2507.toml b/providers/llmgateway-providers/models/nebius/qwen3-30b-a3b-instruct-2507.toml deleted file mode 100644 index e4b4eefbf6b..00000000000 --- a/providers/llmgateway-providers/models/nebius/qwen3-30b-a3b-instruct-2507.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Qwen3 30B A3B Instruct 2507 (Nebius AI)" -description = "Tool-capable chat model for instruction following and agentic application workflows" -release_date = "2025-07-30" -last_updated = "2025-07-30" -attachment = false -reasoning = false -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[cost] -input = 0.1 -output = 0.3 - -[limit] -context = 262_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/llmgateway-providers/models/nebius/qwen3-32b.toml b/providers/llmgateway-providers/models/nebius/qwen3-32b.toml deleted file mode 100644 index e8507cc1b85..00000000000 --- a/providers/llmgateway-providers/models/nebius/qwen3-32b.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "alibaba/qwen3-32b" -name = "Qwen3 32B (Nebius AI)" -reasoning = false -structured_output = false - -[cost] -input = 0.1 -output = 0.3 - -[limit] -context = 40_960 -output = 8_192 diff --git a/providers/llmgateway-providers/models/nebius/qwen3-next-80b-a3b-thinking.toml b/providers/llmgateway-providers/models/nebius/qwen3-next-80b-a3b-thinking.toml deleted file mode 100644 index 8cbde7bf0d6..00000000000 --- a/providers/llmgateway-providers/models/nebius/qwen3-next-80b-a3b-thinking.toml +++ /dev/null @@ -1,11 +0,0 @@ -base_model = "alibaba/qwen3-next-80b-a3b-thinking" -name = "Qwen3 Next 80B A3B Thinking (Nebius AI)" -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["minimal", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 0.15 -output = 1.2 diff --git a/providers/llmgateway-providers/models/novita/deepseek-v4.1-flash.toml b/providers/llmgateway-providers/models/novita/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..06e79ea19ce --- /dev/null +++ b/providers/llmgateway-providers/models/novita/deepseek-v4.1-flash.toml @@ -0,0 +1,16 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash (NovitaAI)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.006 + +[limit] +context = 1_048_576 +output = 393_216 diff --git a/providers/llmgateway-providers/models/novita/glm-5.3-flash.toml b/providers/llmgateway-providers/models/novita/glm-5.3-flash.toml new file mode 100644 index 00000000000..91fc18af8c4 --- /dev/null +++ b/providers/llmgateway-providers/models/novita/glm-5.3-flash.toml @@ -0,0 +1,15 @@ +base_model = "zhipuai/glm-5.3-flash" +name = "GLM-5.3 Flash (NovitaAI)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.03 + +[limit] +context = 1_048_576 diff --git a/providers/llmgateway-providers/models/novita/glm-5.3.toml b/providers/llmgateway-providers/models/novita/glm-5.3.toml new file mode 100644 index 00000000000..3b82595c37a --- /dev/null +++ b/providers/llmgateway-providers/models/novita/glm-5.3.toml @@ -0,0 +1,15 @@ +base_model = "zhipuai/glm-5.3" +name = "GLM-5.3 (NovitaAI)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.26 + +[limit] +context = 1_048_576 diff --git a/providers/llmgateway-providers/models/novita/llama-3.3-70b-instruct.toml b/providers/llmgateway-providers/models/novita/llama-3.3-70b-instruct.toml index 3f6dcf12ade..fdf0390b4cf 100644 --- a/providers/llmgateway-providers/models/novita/llama-3.3-70b-instruct.toml +++ b/providers/llmgateway-providers/models/novita/llama-3.3-70b-instruct.toml @@ -1,6 +1,5 @@ base_model = "meta/llama-3.3-70b-instruct" name = "Llama 3.3 70B Instruct (NovitaAI)" -attachment = false structured_output = false [cost] diff --git a/providers/llmgateway-providers/models/novita/qwen3.8-2.4t-a95b.toml b/providers/llmgateway-providers/models/novita/qwen3.8-2.4t-a95b.toml new file mode 100644 index 00000000000..6cac460cd05 --- /dev/null +++ b/providers/llmgateway-providers/models/novita/qwen3.8-2.4t-a95b.toml @@ -0,0 +1,14 @@ +base_model = "alibaba/qwen3.8-2.4t-a95b" +name = "Qwen3.8 2.4T A95B (NovitaAI)" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 6 +cache_read = 0.25 + +[limit] +context = 1_000_000 diff --git a/providers/llmgateway-providers/models/novita/qwen3.8-27b.toml b/providers/llmgateway-providers/models/novita/qwen3.8-27b.toml new file mode 100644 index 00000000000..32648c39e02 --- /dev/null +++ b/providers/llmgateway-providers/models/novita/qwen3.8-27b.toml @@ -0,0 +1,17 @@ +base_model = "alibaba/qwen3.8-27b" +name = "Qwen3.8 27B (NovitaAI)" +attachment = false +structured_output = false +reasoning_options = [] + +[cost] +input = 0.42 +output = 3 +cache_read = 0.085 + +[limit] +context = 1_000_000 +output = 131_072 + +[modalities] +input = ["text"] diff --git a/providers/llmgateway-providers/models/novita/qwen3.8-flash.toml b/providers/llmgateway-providers/models/novita/qwen3.8-flash.toml new file mode 100644 index 00000000000..336a549d36a --- /dev/null +++ b/providers/llmgateway-providers/models/novita/qwen3.8-flash.toml @@ -0,0 +1,15 @@ +base_model = "alibaba/qwen3.8-flash" +name = "Qwen3.8 Flash (NovitaAI)" +attachment = false + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.15 +output = 0.47 +cache_read = 0.016 + +[modalities] +input = ["text"] diff --git a/providers/llmgateway-providers/models/novita/step-3.7-flash.toml b/providers/llmgateway-providers/models/novita/step-3.7-flash.toml new file mode 100644 index 00000000000..ca5843d5fb8 --- /dev/null +++ b/providers/llmgateway-providers/models/novita/step-3.7-flash.toml @@ -0,0 +1,16 @@ +base_model = "stepfun/step-3.7-flash" +base_model_omit = ["limit.input"] +name = "Step 3.7 Flash (NovitaAI)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.2 +output = 1.15 +cache_read = 0.04 + +[limit] +context = 262_144 diff --git a/providers/llmgateway-providers/models/openai/gpt-5.6-sol.toml b/providers/llmgateway-providers/models/openai/gpt-5.6-sol.toml index 6ac7e092572..feddda8af87 100644 --- a/providers/llmgateway-providers/models/openai/gpt-5.6-sol.toml +++ b/providers/llmgateway-providers/models/openai/gpt-5.6-sol.toml @@ -6,7 +6,7 @@ type = "effort" values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 5 -output = 30 -cache_read = 0.5 -cache_write = 6.25 +input = 4 +output = 20 +cache_read = 0.4 +cache_write = 5 diff --git a/providers/llmgateway-providers/models/openai/gpt-6-astra.toml b/providers/llmgateway-providers/models/openai/gpt-6-astra.toml new file mode 100644 index 00000000000..bbb7e5d4ea9 --- /dev/null +++ b/providers/llmgateway-providers/models/openai/gpt-6-astra.toml @@ -0,0 +1,29 @@ +name = "GPT-6 Astra (OpenAI)" +description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" +family = "gpt" +release_date = "2026-09-03" +last_updated = "2026-09-03" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[limit] +context = 1_050_000 +output = 128_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/llmgateway-providers/models/openai/gpt-6-luna.toml b/providers/llmgateway-providers/models/openai/gpt-6-luna.toml new file mode 100644 index 00000000000..6383b613669 --- /dev/null +++ b/providers/llmgateway-providers/models/openai/gpt-6-luna.toml @@ -0,0 +1,12 @@ +base_model = "openai/gpt-6-luna" +name = "GPT-6 Luna (OpenAI)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.1 +output = 0.5 +cache_read = 0.01 +cache_write = 0.125 diff --git a/providers/llmgateway-providers/models/openai/gpt-6-sol.toml b/providers/llmgateway-providers/models/openai/gpt-6-sol.toml new file mode 100644 index 00000000000..88bcf456342 --- /dev/null +++ b/providers/llmgateway-providers/models/openai/gpt-6-sol.toml @@ -0,0 +1,12 @@ +base_model = "openai/gpt-6-sol" +name = "GPT-6 Sol (OpenAI)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 diff --git a/providers/llmgateway-providers/models/permafrost/kimi-k3.toml b/providers/llmgateway-providers/models/permafrost/kimi-k3.toml deleted file mode 100644 index 2ef88145ac8..00000000000 --- a/providers/llmgateway-providers/models/permafrost/kimi-k3.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "moonshotai/kimi-k3" -name = "Kimi K3 (Permafrost)" -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 3 -output = 15 -cache_read = 0.6 - -[limit] -output = 1_048_576 diff --git a/providers/llmgateway-providers/models/runpod/kimi-k3.toml b/providers/llmgateway-providers/models/runpod/kimi-k3.toml new file mode 100644 index 00000000000..02de6d91ec6 --- /dev/null +++ b/providers/llmgateway-providers/models/runpod/kimi-k3.toml @@ -0,0 +1,14 @@ +base_model = "moonshotai/kimi-k3" +name = "Kimi K3 (Runpod)" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 3 +output = 15 +cache_read = 0.3 + +[limit] +output = 1_048_576 diff --git a/providers/llmgateway-providers/models/runware/deepseek-v4.1-flash.toml b/providers/llmgateway-providers/models/runware/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..98d7ceb2faf --- /dev/null +++ b/providers/llmgateway-providers/models/runware/deepseek-v4.1-flash.toml @@ -0,0 +1,15 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash (Runware)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.15 +output = 0.6 +cache_read = 0.01 + +[limit] +context = 1_048_576 diff --git a/providers/llmgateway-providers/models/runware/glm-5.3-flash.toml b/providers/llmgateway-providers/models/runware/glm-5.3-flash.toml new file mode 100644 index 00000000000..caac83ee8bf --- /dev/null +++ b/providers/llmgateway-providers/models/runware/glm-5.3-flash.toml @@ -0,0 +1,11 @@ +base_model = "zhipuai/glm-5.3-flash" +name = "GLM-5.3 Flash (Runware)" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.03 diff --git a/providers/llmgateway-providers/models/runware/glm-5.3.toml b/providers/llmgateway-providers/models/runware/glm-5.3.toml new file mode 100644 index 00000000000..e73a60cb89e --- /dev/null +++ b/providers/llmgateway-providers/models/runware/glm-5.3.toml @@ -0,0 +1,11 @@ +base_model = "zhipuai/glm-5.3" +name = "GLM-5.3 (Runware)" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.2 +output = 4 +cache_read = 0.2 diff --git a/providers/llmgateway-providers/models/runware/kimi-k3.toml b/providers/llmgateway-providers/models/runware/kimi-k3.toml new file mode 100644 index 00000000000..26d21545c02 --- /dev/null +++ b/providers/llmgateway-providers/models/runware/kimi-k3.toml @@ -0,0 +1,14 @@ +base_model = "moonshotai/kimi-k3" +name = "Kimi K3 (Runware)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 3 +output = 15 +cache_read = 0.3 + +[limit] +output = 1_048_576 diff --git a/providers/llmgateway-providers/models/sakana/fugu-max.toml b/providers/llmgateway-providers/models/sakana/fugu-max.toml new file mode 100644 index 00000000000..13a1b385939 --- /dev/null +++ b/providers/llmgateway-providers/models/sakana/fugu-max.toml @@ -0,0 +1,28 @@ +name = "Fugu Max (Sakana AI)" +description = "Multi-agent model for routing expert agents across complex analytical tasks" +family = "fugu" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["high", "xhigh", "max"] + +[cost] +input = 2 +output = 6 +cache_read = 0.25 + +[limit] +context = 1_000_000 +output = 1_000_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/llmgateway-providers/models/sakana/fugu-ultra-v2.0.toml b/providers/llmgateway-providers/models/sakana/fugu-ultra-v2.0.toml new file mode 100644 index 00000000000..b88b4aa0fc6 --- /dev/null +++ b/providers/llmgateway-providers/models/sakana/fugu-ultra-v2.0.toml @@ -0,0 +1,28 @@ +name = "Fugu Ultra v2.0 (Sakana AI)" +description = "Quality-first multi-agent model for hard research, analysis, and competitions" +family = "fugu" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["high", "xhigh", "max"] + +[cost] +input = 5 +output = 30 +cache_read = 0.5 + +[limit] +context = 1_000_000 +output = 1_000_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/llmgateway-providers/models/scx-ai-gp/deepseek-v4.1-flash.toml b/providers/llmgateway-providers/models/scx-ai-gp/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..9ea85540b29 --- /dev/null +++ b/providers/llmgateway-providers/models/scx-ai-gp/deepseek-v4.1-flash.toml @@ -0,0 +1,14 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash (SCX.ai)" +attachment = false +reasoning = false +tool_call = false +structured_output = false + +[cost] +input = 0.15 +output = 0.6 +cache_read = 0.01 + +[modalities] +input = ["text"] diff --git a/providers/llmgateway-providers/models/scx-ai-gp/glm-5.2-fast.toml b/providers/llmgateway-providers/models/scx-ai-gp/glm-5.2-fast.toml index b20b26804d6..246625941ca 100644 --- a/providers/llmgateway-providers/models/scx-ai-gp/glm-5.2-fast.toml +++ b/providers/llmgateway-providers/models/scx-ai-gp/glm-5.2-fast.toml @@ -4,6 +4,6 @@ structured_output = false reasoning_options = [] [cost] -input = 1.99 -output = 6.16 -cache_read = 0.4 +input = 2.2 +output = 6.5 +cache_read = 0.45 diff --git a/providers/llmgateway-providers/models/scx-ai-gp/glm-5.2.toml b/providers/llmgateway-providers/models/scx-ai-gp/glm-5.2.toml index a5e3a15d492..ef625c449bf 100644 --- a/providers/llmgateway-providers/models/scx-ai-gp/glm-5.2.toml +++ b/providers/llmgateway-providers/models/scx-ai-gp/glm-5.2.toml @@ -10,6 +10,6 @@ type = "effort" values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [cost] -input = 0.55 -output = 1.784 -cache_read = 0.111 +input = 0.88 +output = 2.55 +cache_read = 0.16 diff --git a/providers/llmgateway-providers/models/scx-ai-gp/glm-5.3-flash.toml b/providers/llmgateway-providers/models/scx-ai-gp/glm-5.3-flash.toml new file mode 100644 index 00000000000..1c1bd09c1a7 --- /dev/null +++ b/providers/llmgateway-providers/models/scx-ai-gp/glm-5.3-flash.toml @@ -0,0 +1,15 @@ +base_model = "zhipuai/glm-5.3-flash" +name = "GLM-5.3 Flash (SCX.ai)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.088 +output = 0.25 +cache_read = 0.025 + +[limit] +context = 1_048_576 diff --git a/providers/llmgateway-providers/models/scx-ai-gp/glm-5.3.toml b/providers/llmgateway-providers/models/scx-ai-gp/glm-5.3.toml new file mode 100644 index 00000000000..2c130d77f25 --- /dev/null +++ b/providers/llmgateway-providers/models/scx-ai-gp/glm-5.3.toml @@ -0,0 +1,15 @@ +base_model = "zhipuai/glm-5.3" +name = "GLM-5.3 (SCX.ai)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.26 + +[limit] +output = 128_000 diff --git a/providers/llmgateway-providers/models/scx-ai-gp/kimi-k2.7-code.toml b/providers/llmgateway-providers/models/scx-ai-gp/kimi-k2.7-code.toml new file mode 100644 index 00000000000..08899a30020 --- /dev/null +++ b/providers/llmgateway-providers/models/scx-ai-gp/kimi-k2.7-code.toml @@ -0,0 +1,15 @@ +base_model = "moonshotai/kimi-k2.7-code" +name = "Kimi K2.7 Code (SCX.ai)" +structured_output = false + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 0.95 +output = 4 +cache_read = 0.19 diff --git a/providers/llmgateway-providers/models/scx-ai-gp/kimi-k3.toml b/providers/llmgateway-providers/models/scx-ai-gp/kimi-k3.toml new file mode 100644 index 00000000000..00e8ea93776 --- /dev/null +++ b/providers/llmgateway-providers/models/scx-ai-gp/kimi-k3.toml @@ -0,0 +1,14 @@ +base_model = "moonshotai/kimi-k3" +name = "Kimi K3 (SCX.ai)" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 3.5 +output = 18 +cache_read = 0.35 + +[limit] +output = 1_048_576 diff --git a/providers/llmgateway-providers/models/scx-ai-gp/qwen3.8-max.toml b/providers/llmgateway-providers/models/scx-ai-gp/qwen3.8-max.toml index 89d3c99b3d4..92e0feca6ac 100644 --- a/providers/llmgateway-providers/models/scx-ai-gp/qwen3.8-max.toml +++ b/providers/llmgateway-providers/models/scx-ai-gp/qwen3.8-max.toml @@ -10,7 +10,7 @@ values = ["low", "medium", "xhigh"] type = "budget_tokens" [cost] -input = 1.815 -output = 5.4461 -cache_read = 0.21 +input = 2 +output = 6 +cache_read = 0.25 cache_write = 2.5 diff --git a/providers/llmgateway-providers/models/tencent/deepseek-v4-flash.toml b/providers/llmgateway-providers/models/tencent/deepseek-v4-flash.toml new file mode 100644 index 00000000000..697b620ad81 --- /dev/null +++ b/providers/llmgateway-providers/models/tencent/deepseek-v4-flash.toml @@ -0,0 +1,18 @@ +base_model = "deepseek/deepseek-v4-flash" +name = "DeepSeek V4 Flash (Tencent Cloud)" +structured_output = false + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.14 +output = 0.28 +cache_read = 0.0028 + +[limit] +output = 393_216 diff --git a/providers/llmgateway-providers/models/tencent/deepseek-v4-pro.toml b/providers/llmgateway-providers/models/tencent/deepseek-v4-pro.toml new file mode 100644 index 00000000000..146ff62b8e3 --- /dev/null +++ b/providers/llmgateway-providers/models/tencent/deepseek-v4-pro.toml @@ -0,0 +1,18 @@ +base_model = "deepseek/deepseek-v4-pro" +name = "DeepSeek V4 Pro (Tencent Cloud)" +structured_output = false + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.435 +output = 0.87 +cache_read = 0.00363 + +[limit] +output = 393_216 diff --git a/providers/llmgateway-providers/models/tencent/glm-5-turbo.toml b/providers/llmgateway-providers/models/tencent/glm-5-turbo.toml new file mode 100644 index 00000000000..4a609a2477e --- /dev/null +++ b/providers/llmgateway-providers/models/tencent/glm-5-turbo.toml @@ -0,0 +1,15 @@ +base_model = "zhipuai/glm-5-turbo" +name = "GLM-5 Turbo (Tencent Cloud)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 1.2 +output = 4 +cache_read = 0.24 + +[limit] +output = 128_000 diff --git a/providers/llmgateway-providers/models/tencent/glm-5.1.toml b/providers/llmgateway-providers/models/tencent/glm-5.1.toml new file mode 100644 index 00000000000..f1e5a56aed7 --- /dev/null +++ b/providers/llmgateway-providers/models/tencent/glm-5.1.toml @@ -0,0 +1,18 @@ +base_model = "zhipuai/glm-5.1" +name = "GLM-5.1 (Tencent Cloud)" +structured_output = false + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.26 + +[limit] +output = 128_000 diff --git a/providers/llmgateway-providers/models/tencent/glm-5.2.toml b/providers/llmgateway-providers/models/tencent/glm-5.2.toml new file mode 100644 index 00000000000..62e6bf18232 --- /dev/null +++ b/providers/llmgateway-providers/models/tencent/glm-5.2.toml @@ -0,0 +1,18 @@ +base_model = "zhipuai/glm-5.2" +name = "GLM-5.2 (Tencent Cloud)" +structured_output = false + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.26 + +[limit] +output = 128_000 diff --git a/providers/llmgateway-providers/models/tencent/glm-5.toml b/providers/llmgateway-providers/models/tencent/glm-5.toml new file mode 100644 index 00000000000..11e53b3534b --- /dev/null +++ b/providers/llmgateway-providers/models/tencent/glm-5.toml @@ -0,0 +1,19 @@ +base_model = "zhipuai/glm-5" +name = "GLM-5 (Tencent Cloud)" +structured_output = false + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 1 +output = 3.2 +cache_read = 0.2 + +[limit] +context = 200_000 +output = 128_000 diff --git a/providers/llmgateway-providers/models/tencent/glm-5v-turbo.toml b/providers/llmgateway-providers/models/tencent/glm-5v-turbo.toml new file mode 100644 index 00000000000..93ee5736129 --- /dev/null +++ b/providers/llmgateway-providers/models/tencent/glm-5v-turbo.toml @@ -0,0 +1,15 @@ +base_model = "zhipuai/glm-5v-turbo" +name = "GLM-5V Turbo (Tencent Cloud)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 1.2 +output = 4 +cache_read = 0.24 + +[limit] +output = 128_000 diff --git a/providers/llmgateway-providers/models/tencent/hy-mt2-plus.toml b/providers/llmgateway-providers/models/tencent/hy-mt2-plus.toml new file mode 100644 index 00000000000..a17fce21909 --- /dev/null +++ b/providers/llmgateway-providers/models/tencent/hy-mt2-plus.toml @@ -0,0 +1,23 @@ +name = "Hy-MT2 Plus (Tencent Cloud)" +description = "Tencent Hy reasoning model for coding, instruction following, and agent tasks" +family = "Hy" +release_date = "2026-05-21" +last_updated = "2026-05-21" +attachment = false +reasoning = false +temperature = true +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.074 +output = 0.295 + +[limit] +context = 8_192 +output = 4_096 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/llmgateway-providers/models/tencent/hy3.toml b/providers/llmgateway-providers/models/tencent/hy3.toml new file mode 100644 index 00000000000..1b895b0482a --- /dev/null +++ b/providers/llmgateway-providers/models/tencent/hy3.toml @@ -0,0 +1,17 @@ +base_model = "tencent/hy3" +base_model_omit = ["limit.input"] +name = "Hy3 (Tencent Cloud)" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 0.132 +output = 0.528 +cache_read = 0.033 + +[limit] +context = 262_144 +output = 131_072 diff --git a/providers/llmgateway-providers/models/tencent/hy4-preview.toml b/providers/llmgateway-providers/models/tencent/hy4-preview.toml new file mode 100644 index 00000000000..587eeffca84 --- /dev/null +++ b/providers/llmgateway-providers/models/tencent/hy4-preview.toml @@ -0,0 +1,16 @@ +base_model = "tencent/hy4-preview" +name = "Hy4 Preview (Tencent Cloud)" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.834 +output = 2.501 +cache_read = 0.042 + +[limit] +context = 1_000_000 +output = 65_536 diff --git a/providers/llmgateway-providers/models/tencent/kimi-k2.6.toml b/providers/llmgateway-providers/models/tencent/kimi-k2.6.toml new file mode 100644 index 00000000000..e8e971eb490 --- /dev/null +++ b/providers/llmgateway-providers/models/tencent/kimi-k2.6.toml @@ -0,0 +1,14 @@ +base_model = "moonshotai/kimi-k2.6" +name = "Kimi K2.6 (Tencent Cloud)" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.858 +output = 3.566 +cache_read = 0.145 diff --git a/providers/llmgateway-providers/models/tencent/kimi-k2.7-code-highspeed.toml b/providers/llmgateway-providers/models/tencent/kimi-k2.7-code-highspeed.toml new file mode 100644 index 00000000000..773cdd8b8c0 --- /dev/null +++ b/providers/llmgateway-providers/models/tencent/kimi-k2.7-code-highspeed.toml @@ -0,0 +1,14 @@ +base_model = "moonshotai/kimi-k2.7-code-highspeed" +name = "Kimi K2.7 Code Highspeed (Tencent Cloud)" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 1.9 +output = 8 +cache_read = 0.38 diff --git a/providers/llmgateway-providers/models/tencent/kimi-k2.7-code.toml b/providers/llmgateway-providers/models/tencent/kimi-k2.7-code.toml new file mode 100644 index 00000000000..090a8c09335 --- /dev/null +++ b/providers/llmgateway-providers/models/tencent/kimi-k2.7-code.toml @@ -0,0 +1,14 @@ +base_model = "moonshotai/kimi-k2.7-code" +name = "Kimi K2.7 Code (Tencent Cloud)" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.95 +output = 4 +cache_read = 0.19 diff --git a/providers/llmgateway-providers/models/tencent/kimi-k3.toml b/providers/llmgateway-providers/models/tencent/kimi-k3.toml new file mode 100644 index 00000000000..046d3f6d3ca --- /dev/null +++ b/providers/llmgateway-providers/models/tencent/kimi-k3.toml @@ -0,0 +1,14 @@ +base_model = "moonshotai/kimi-k3" +name = "Kimi K3 (Tencent Cloud)" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 3 +output = 15 +cache_read = 0.3 + +[limit] +output = 1_048_576 diff --git a/providers/llmgateway-providers/models/tencent/mimo-v2.5-pro.toml b/providers/llmgateway-providers/models/tencent/mimo-v2.5-pro.toml new file mode 100644 index 00000000000..745d3f8b533 --- /dev/null +++ b/providers/llmgateway-providers/models/tencent/mimo-v2.5-pro.toml @@ -0,0 +1,24 @@ +base_model = "xiaomi/mimo-v2.5-pro" +name = "MiMo V2.5 Pro (Tencent Cloud)" +structured_output = false + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + +[cost] +input = 0.435 +output = 0.87 +cache_read = 0.0036 + +[[cost.tiers]] +tier = { type = "context", size = 256_000 } +input = 2 +output = 6 +cache_read = 0.4 + +[limit] +context = 1_000_000 diff --git a/providers/llmgateway-providers/models/tencent/minimax-m2.7.toml b/providers/llmgateway-providers/models/tencent/minimax-m2.7.toml new file mode 100644 index 00000000000..b156b040421 --- /dev/null +++ b/providers/llmgateway-providers/models/tencent/minimax-m2.7.toml @@ -0,0 +1,16 @@ +base_model = "minimax/MiniMax-M2.7" +name = "MiniMax M2.7 (Tencent Cloud)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.06 + +[limit] +context = 200_000 +output = 128_000 diff --git a/providers/llmgateway-providers/models/tencent/minimax-m3.toml b/providers/llmgateway-providers/models/tencent/minimax-m3.toml new file mode 100644 index 00000000000..f6574935452 --- /dev/null +++ b/providers/llmgateway-providers/models/tencent/minimax-m3.toml @@ -0,0 +1,16 @@ +base_model = "minimax/MiniMax-M3" +name = "MiniMax M3 (Tencent Cloud)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.06 + +[limit] +context = 1_000_000 +output = 131_072 diff --git a/providers/llmgateway-providers/models/together-ai/deepseek-v4.1-flash.toml b/providers/llmgateway-providers/models/together-ai/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..3d215b854a0 --- /dev/null +++ b/providers/llmgateway-providers/models/together-ai/deepseek-v4.1-flash.toml @@ -0,0 +1,15 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash (Together AI)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "xhigh", "max"] + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.006 + +[limit] +context = 1_048_576 +output = 393_216 diff --git a/providers/llmgateway-providers/models/together-ai/gemma-4-31b-it.toml b/providers/llmgateway-providers/models/together-ai/gemma-4-31b-it.toml deleted file mode 100644 index 1eaec5c565d..00000000000 --- a/providers/llmgateway-providers/models/together-ai/gemma-4-31b-it.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "google/gemma-4-31b-it" -name = "Gemma 4 31B IT (Together AI)" -attachment = false -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["none", "low", "medium", "high"] - -[cost] -input = 0.39 -output = 0.97 - -[modalities] -input = ["text"] diff --git a/providers/llmgateway-providers/models/together-ai/glm-5.3-flash.toml b/providers/llmgateway-providers/models/together-ai/glm-5.3-flash.toml new file mode 100644 index 00000000000..af0987b5584 --- /dev/null +++ b/providers/llmgateway-providers/models/together-ai/glm-5.3-flash.toml @@ -0,0 +1,15 @@ +base_model = "zhipuai/glm-5.3-flash" +name = "GLM-5.3 Flash (Together AI)" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.03 + +[limit] +context = 1_048_576 +output = 943_717 diff --git a/providers/llmgateway-providers/models/together-ai/glm-5.3.toml b/providers/llmgateway-providers/models/together-ai/glm-5.3.toml new file mode 100644 index 00000000000..67971580a73 --- /dev/null +++ b/providers/llmgateway-providers/models/together-ai/glm-5.3.toml @@ -0,0 +1,15 @@ +base_model = "zhipuai/glm-5.3" +name = "GLM-5.3 (Together AI)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.26 + +[limit] +context = 1_048_576 +output = 943_717 diff --git a/providers/llmgateway-providers/models/together-ai/gpt-oss-20b.toml b/providers/llmgateway-providers/models/together-ai/gpt-oss-20b.toml deleted file mode 100644 index ca4ba5e8361..00000000000 --- a/providers/llmgateway-providers/models/together-ai/gpt-oss-20b.toml +++ /dev/null @@ -1,11 +0,0 @@ -base_model = "openai/gpt-oss-20b" -name = "GPT OSS 20B (Together AI)" -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] - -[cost] -input = 0.05 -output = 0.2 diff --git a/providers/llmgateway-providers/models/together-ai/inkling.toml b/providers/llmgateway-providers/models/together-ai/inkling.toml new file mode 100644 index 00000000000..1d6f4d10c7c --- /dev/null +++ b/providers/llmgateway-providers/models/together-ai/inkling.toml @@ -0,0 +1,16 @@ +base_model = "thinkingmachines/inkling" +name = "Inkling (Together AI)" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 1 +output = 4.05 +cache_read = 0.17 + +[limit] +context = 524_288 +output = 471_859 diff --git a/providers/llmgateway-providers/models/together-ai/muse-glimmer-30b.toml b/providers/llmgateway-providers/models/together-ai/muse-glimmer-30b.toml new file mode 100644 index 00000000000..99056ca7d36 --- /dev/null +++ b/providers/llmgateway-providers/models/together-ai/muse-glimmer-30b.toml @@ -0,0 +1,14 @@ +base_model = "meta/muse-glimmer-30b" +name = "Muse Glimmer 30B (Together AI)" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.35 +output = 1.5 +cache_read = 0.04 + +[limit] +output = 117_964 diff --git a/providers/llmgateway-providers/models/together-ai/qwen3.8-2.4t-a95b.toml b/providers/llmgateway-providers/models/together-ai/qwen3.8-2.4t-a95b.toml new file mode 100644 index 00000000000..cd2eecc8a54 --- /dev/null +++ b/providers/llmgateway-providers/models/together-ai/qwen3.8-2.4t-a95b.toml @@ -0,0 +1,15 @@ +base_model = "alibaba/qwen3.8-2.4t-a95b" +name = "Qwen3.8 2.4T A95B (Together AI)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "xhigh"] + +[cost] +input = 2 +output = 6 +cache_read = 0.25 + +[limit] +context = 1_010_000 +output = 909_000 diff --git a/providers/llmgateway-providers/models/tundra/kimi-k2.6.toml b/providers/llmgateway-providers/models/tundra/kimi-k2.6.toml deleted file mode 100644 index d4f3bbcf767..00000000000 --- a/providers/llmgateway-providers/models/tundra/kimi-k2.6.toml +++ /dev/null @@ -1,19 +0,0 @@ -base_model = "moonshotai/kimi-k2.6" -name = "Kimi K2.6 (Tundra)" -attachment = false -structured_output = false - -[interleaved] -field = "reasoning_content" - -[[reasoning_options]] -type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 0.4 -output = 2.2 -cache_read = 0.08 - -[modalities] -input = ["text"] diff --git a/providers/llmgateway-providers/models/xai/grok-4-7.toml b/providers/llmgateway-providers/models/xai/grok-4-7.toml new file mode 100644 index 00000000000..03bd9afa268 --- /dev/null +++ b/providers/llmgateway-providers/models/xai/grok-4-7.toml @@ -0,0 +1,28 @@ +name = "Grok 4.7 (xAI)" +description = "Grok model for agentic tool use, reasoning, coding, and live assistance" +family = "grok" +release_date = "2026-09-21" +last_updated = "2026-09-21" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh"] + +[cost] +input = 2 +output = 6 +cache_read = 0.5 + +[limit] +context = 500_000 +output = 500_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/llmgateway-providers/models/xiaomi/mimo-v2.6-flash.toml b/providers/llmgateway-providers/models/xiaomi/mimo-v2.6-flash.toml new file mode 100644 index 00000000000..718a69cf405 --- /dev/null +++ b/providers/llmgateway-providers/models/xiaomi/mimo-v2.6-flash.toml @@ -0,0 +1,15 @@ +base_model = "xiaomi/mimo-v2.6-flash" +name = "MiMo V2.6 Flash (Xiaomi)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + +[cost] +input = 0.14 +output = 0.28 +cache_read = 0.0028 + +[limit] +context = 1_000_000 diff --git a/providers/llmgateway-providers/models/xiaomi/mimo-v2.6-pro.toml b/providers/llmgateway-providers/models/xiaomi/mimo-v2.6-pro.toml new file mode 100644 index 00000000000..3fe108bfc5a --- /dev/null +++ b/providers/llmgateway-providers/models/xiaomi/mimo-v2.6-pro.toml @@ -0,0 +1,15 @@ +base_model = "xiaomi/mimo-v2.6-pro" +name = "MiMo V2.6 Pro (Xiaomi)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + +[cost] +input = 0.435 +output = 0.87 +cache_read = 0.0036 + +[limit] +context = 1_000_000 diff --git a/providers/llmgateway-providers/models/zai/glm-4.6v-flashx.toml b/providers/llmgateway-providers/models/zai/glm-4.6v-flashx.toml index be8d5892ddd..423aaa1934e 100644 --- a/providers/llmgateway-providers/models/zai/glm-4.6v-flashx.toml +++ b/providers/llmgateway-providers/models/zai/glm-4.6v-flashx.toml @@ -4,7 +4,7 @@ # https://docs.llmgateway.io/features/reasoning name = "GLM-4.6V FlashX (Z AI)" description = "GLM vision model for visual reasoning, documents, and multimodal agents" -family = "glm" +family = "glm-flash" release_date = "2025-12-08" last_updated = "2025-12-08" attachment = true diff --git a/providers/llmgateway-providers/models/zai/glm-5.3-flash.toml b/providers/llmgateway-providers/models/zai/glm-5.3-flash.toml index bfadb0fa4c9..f88b263f11c 100644 --- a/providers/llmgateway-providers/models/zai/glm-5.3-flash.toml +++ b/providers/llmgateway-providers/models/zai/glm-5.3-flash.toml @@ -1,6 +1,5 @@ base_model = "zhipuai/glm-5.3-flash" name = "GLM-5.3 Flash (Z AI)" -attachment = false structured_output = false [[reasoning_options]] @@ -14,6 +13,3 @@ cache_read = 0.03 [limit] context = 1_048_576 - -[modalities] -input = ["text"] diff --git a/providers/llmgateway/models/Qwen3.8-27B.toml b/providers/llmgateway/models/Qwen3.8-27B.toml new file mode 100644 index 00000000000..b25199e56d5 --- /dev/null +++ b/providers/llmgateway/models/Qwen3.8-27B.toml @@ -0,0 +1,27 @@ +name = "Qwen3.8 27B" +description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" +release_date = "2026-09-02" +last_updated = "2026-09-02" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] + +[cost] +input = 0.08 +output = 0.35 +cache_read = 0.05 + +[limit] +context = 32_768 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/llmgateway/models/atria-dawn-preview.toml b/providers/llmgateway/models/atria-dawn-preview.toml new file mode 100644 index 00000000000..29a41c97425 --- /dev/null +++ b/providers/llmgateway/models/atria-dawn-preview.toml @@ -0,0 +1,26 @@ +name = "Atria Dawn Preview" +description = "Preview model for early access evaluation, prototyping, and compatibility testing" +release_date = "2026-09-12" +last_updated = "2026-09-12" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0 +output = 0 + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/llmgateway/models/claude-fable-5-1.toml b/providers/llmgateway/models/claude-fable-5-1.toml new file mode 100644 index 00000000000..dd248407b50 --- /dev/null +++ b/providers/llmgateway/models/claude-fable-5-1.toml @@ -0,0 +1,11 @@ +base_model = "anthropic/claude-fable-5-1" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 diff --git a/providers/llmgateway/models/claude-opus-5-5.toml b/providers/llmgateway/models/claude-opus-5-5.toml new file mode 100644 index 00000000000..85ea7179304 --- /dev/null +++ b/providers/llmgateway/models/claude-opus-5-5.toml @@ -0,0 +1,11 @@ +base_model = "anthropic/claude-opus-5-5" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 4 +output = 20 +cache_read = 0.2 +cache_write = 5 diff --git a/providers/llmgateway/models/cosmos3-super-reasoner.toml b/providers/llmgateway/models/cosmos3-super-reasoner.toml deleted file mode 100644 index 7a78bfe25ff..00000000000 --- a/providers/llmgateway/models/cosmos3-super-reasoner.toml +++ /dev/null @@ -1,29 +0,0 @@ -# Gateway-wide $.reasoning_effort = "none" (or $.reasoning.effort = "none") -# disables non-OpenAI reasoning; this model has no documented effort tiers -# or exact reasoning-token budget. -# https://docs.llmgateway.io/features/reasoning (accessed 2026-07-23) -name = "Cosmos 3 Super Reasoner" -description = "Multimodal reasoning model for visual analysis, planning, and tool use" -release_date = "2026-06-01" -last_updated = "2026-06-01" -attachment = true -reasoning = true -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "toggle" # API: {"reasoning_effort": "none"} or {"reasoning": {"effort": "none"}} - -[cost] -input = 0.1 -output = 0.3 - -[limit] -context = 262_144 -output = 262_144 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/llmgateway/models/deepseek-v4-flash.toml b/providers/llmgateway/models/deepseek-v4-flash.toml index 9e1dd314ff5..18580e3a2f4 100644 --- a/providers/llmgateway/models/deepseek-v4-flash.toml +++ b/providers/llmgateway/models/deepseek-v4-flash.toml @@ -8,9 +8,9 @@ type = "effort" values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [cost] -input = 0.051 -output = 0.104 -cache_read = 0.0097 +input = 0.05 +output = 0.1 +cache_read = 0.01 [limit] context = 1_050_000 diff --git a/providers/llmgateway/models/deepseek-v4.1-flash.toml b/providers/llmgateway/models/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..db5dbbe5fbc --- /dev/null +++ b/providers/llmgateway/models/deepseek-v4.1-flash.toml @@ -0,0 +1,13 @@ +base_model = "deepseek/deepseek-v4.1-flash" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.15 +output = 0.6 +cache_read = 0.003 + +[limit] +context = 1_050_000 diff --git a/providers/llmgateway/models/fugu-max.toml b/providers/llmgateway/models/fugu-max.toml new file mode 100644 index 00000000000..0133ae6d67e --- /dev/null +++ b/providers/llmgateway/models/fugu-max.toml @@ -0,0 +1,28 @@ +name = "Fugu Max" +description = "Multi-agent model for routing expert agents across complex analytical tasks" +family = "fugu" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["high", "xhigh", "max"] + +[cost] +input = 2 +output = 6 +cache_read = 0.25 + +[limit] +context = 1_000_000 +output = 1_000_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/llmgateway/models/fugu-ultra-v2.0.toml b/providers/llmgateway/models/fugu-ultra-v2.0.toml new file mode 100644 index 00000000000..6d261e1eb2f --- /dev/null +++ b/providers/llmgateway/models/fugu-ultra-v2.0.toml @@ -0,0 +1,28 @@ +name = "Fugu Ultra v2.0" +description = "Quality-first multi-agent model for hard research, analysis, and competitions" +family = "fugu" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["high", "xhigh", "max"] + +[cost] +input = 5 +output = 30 +cache_read = 0.5 + +[limit] +context = 1_000_000 +output = 1_000_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/llmgateway/models/gemini-3.8-flash.toml b/providers/llmgateway/models/gemini-3.8-flash.toml new file mode 100644 index 00000000000..cac3cbe0aaf --- /dev/null +++ b/providers/llmgateway/models/gemini-3.8-flash.toml @@ -0,0 +1,29 @@ +name = "Gemini 3.8 Flash" +description = "Fast Gemini model balancing multimodal reasoning, tool use, and cost" +family = "gemini" +release_date = "2026-09-02" +last_updated = "2026-09-02" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.75 +output = 3.75 +cache_read = 0.075 +cache_write = 0.08333 + +[limit] +context = 1_048_576 +output = 1_048_576 + +[modalities] +input = ["text", "image", "audio"] +output = ["text"] diff --git a/providers/llmgateway/models/gemma-3-27b.toml b/providers/llmgateway/models/gemma-3-27b.toml deleted file mode 100644 index 67fa0c85a7a..00000000000 --- a/providers/llmgateway/models/gemma-3-27b.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Gemma 3 27B" -description = "Open Gemma instruction model for efficient chat and self-hosted deployments" -family = "gemma" -release_date = "2025-03-12" -last_updated = "2025-03-12" -attachment = true -reasoning = false -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[cost] -input = 0.1 -output = 0.3 - -[limit] -context = 110_000 -output = 110_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/llmgateway/models/gemma-4-31b-it.toml b/providers/llmgateway/models/gemma-4-31b-it.toml index ade0ba6aa27..b1c4fc2e42e 100644 --- a/providers/llmgateway/models/gemma-4-31b-it.toml +++ b/providers/llmgateway/models/gemma-4-31b-it.toml @@ -5,6 +5,6 @@ type = "effort" values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [cost] -input = 0.102 -output = 0.297 -cache_read = 0.012 +input = 0.1 +output = 0.25 +cache_read = 0.01 diff --git a/providers/llmgateway/models/glm-4.6v-flashx.toml b/providers/llmgateway/models/glm-4.6v-flashx.toml index 20ba7000522..c0f3104470b 100644 --- a/providers/llmgateway/models/glm-4.6v-flashx.toml +++ b/providers/llmgateway/models/glm-4.6v-flashx.toml @@ -1,6 +1,6 @@ name = "GLM-4.6V FlashX" description = "GLM vision model for visual reasoning, documents, and multimodal agents" -family = "glm" +family = "glm-flash" release_date = "2025-12-08" last_updated = "2025-12-08" attachment = true diff --git a/providers/llmgateway/models/glm-5-turbo.toml b/providers/llmgateway/models/glm-5-turbo.toml new file mode 100644 index 00000000000..db90b38197b --- /dev/null +++ b/providers/llmgateway/models/glm-5-turbo.toml @@ -0,0 +1,10 @@ +base_model = "zhipuai/glm-5-turbo" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 1.2 +output = 4 +cache_read = 0.24 diff --git a/providers/llmgateway/models/glm-5.2-fast.toml b/providers/llmgateway/models/glm-5.2-fast.toml index 8b274c33bcc..b281adf9f5f 100644 --- a/providers/llmgateway/models/glm-5.2-fast.toml +++ b/providers/llmgateway/models/glm-5.2-fast.toml @@ -2,6 +2,6 @@ base_model = "zhipuai/glm-5.2" reasoning_options = [] [cost] -input = 1.99 -output = 6.16 -cache_read = 0.4 +input = 2.2 +output = 6.5 +cache_read = 0.45 diff --git a/providers/llmgateway/models/glm-5.2.toml b/providers/llmgateway/models/glm-5.2.toml index a6d3d351263..f2b344230e3 100644 --- a/providers/llmgateway/models/glm-5.2.toml +++ b/providers/llmgateway/models/glm-5.2.toml @@ -13,9 +13,9 @@ type = "effort" values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [cost] -input = 0.55 -output = 1.784 -cache_read = 0.111 +input = 0.8 +output = 2.55 +cache_read = 0.16 cache_write = 0 [limit] diff --git a/providers/llmgateway/models/glm-5.3-flash.toml b/providers/llmgateway/models/glm-5.3-flash.toml index ef942f3d875..d46987e8acc 100644 --- a/providers/llmgateway/models/glm-5.3-flash.toml +++ b/providers/llmgateway/models/glm-5.3-flash.toml @@ -2,12 +2,12 @@ base_model = "zhipuai/glm-5.3-flash" [[reasoning_options]] type = "effort" -values = ["low", "high", "max"] +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [cost] -input = 0.15 -output = 0.5 -cache_read = 0.03 +input = 0.088 +output = 0.25 +cache_read = 0.025 [limit] context = 1_048_576 diff --git a/providers/llmgateway/models/glm-5.3.toml b/providers/llmgateway/models/glm-5.3.toml index 35b4946bedd..6be69ce3acf 100644 --- a/providers/llmgateway/models/glm-5.3.toml +++ b/providers/llmgateway/models/glm-5.3.toml @@ -2,12 +2,12 @@ base_model = "zhipuai/glm-5.3" [[reasoning_options]] type = "effort" -values = ["low", "high", "max"] +values = ["none", "low", "high", "max"] [cost] -input = 1.4 -output = 4.4 -cache_read = 0.26 +input = 1.2 +output = 4 +cache_read = 0.2 [limit] context = 1_048_576 diff --git a/providers/llmgateway/models/glm-5v-turbo.toml b/providers/llmgateway/models/glm-5v-turbo.toml new file mode 100644 index 00000000000..b8a2465703f --- /dev/null +++ b/providers/llmgateway/models/glm-5v-turbo.toml @@ -0,0 +1,10 @@ +base_model = "zhipuai/glm-5v-turbo" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 1.2 +output = 4 +cache_read = 0.24 diff --git a/providers/llmgateway/models/gpt-5.6-sol.toml b/providers/llmgateway/models/gpt-5.6-sol.toml index 45be0a6aee9..8cddfa4d843 100644 --- a/providers/llmgateway/models/gpt-5.6-sol.toml +++ b/providers/llmgateway/models/gpt-5.6-sol.toml @@ -5,7 +5,7 @@ type = "effort" values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 5 -output = 30 -cache_read = 0.5 -cache_write = 6.25 +input = 4 +output = 20 +cache_read = 0.4 +cache_write = 5 diff --git a/providers/llmgateway/models/gpt-6-astra.toml b/providers/llmgateway/models/gpt-6-astra.toml new file mode 100644 index 00000000000..2d589765056 --- /dev/null +++ b/providers/llmgateway/models/gpt-6-astra.toml @@ -0,0 +1,29 @@ +name = "GPT-6 Astra" +description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" +family = "gpt" +release_date = "2026-09-03" +last_updated = "2026-09-03" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[limit] +context = 1_050_000 +output = 1_050_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/llmgateway/models/gpt-6-luna.toml b/providers/llmgateway/models/gpt-6-luna.toml new file mode 100644 index 00000000000..f058ea629ce --- /dev/null +++ b/providers/llmgateway/models/gpt-6-luna.toml @@ -0,0 +1,11 @@ +base_model = "openai/gpt-6-luna" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.1 +output = 0.5 +cache_read = 0.01 +cache_write = 0.125 diff --git a/providers/llmgateway/models/gpt-6-sol.toml b/providers/llmgateway/models/gpt-6-sol.toml new file mode 100644 index 00000000000..e4694368a0c --- /dev/null +++ b/providers/llmgateway/models/gpt-6-sol.toml @@ -0,0 +1,11 @@ +base_model = "openai/gpt-6-sol" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 diff --git a/providers/llmgateway/models/gpt-oss-20b.toml b/providers/llmgateway/models/gpt-oss-20b.toml index 19f47947bea..b7834e1b4d8 100644 --- a/providers/llmgateway/models/gpt-oss-20b.toml +++ b/providers/llmgateway/models/gpt-oss-20b.toml @@ -15,8 +15,9 @@ type = "effort" values = ["low", "medium", "high"] [cost] -input = 0.05 -output = 0.2 +input = 0.04 +output = 0.19 +cache_read = 0.01 [limit] context = 131_072 diff --git a/providers/llmgateway/models/grok-4-7.toml b/providers/llmgateway/models/grok-4-7.toml new file mode 100644 index 00000000000..4e89d64b78f --- /dev/null +++ b/providers/llmgateway/models/grok-4-7.toml @@ -0,0 +1,28 @@ +name = "Grok 4.7" +description = "Grok model for agentic tool use, reasoning, coding, and live assistance" +family = "grok" +release_date = "2026-09-21" +last_updated = "2026-09-21" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh"] + +[cost] +input = 2 +output = 6 +cache_read = 0.5 + +[limit] +context = 500_000 +output = 500_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/llmgateway/models/hermes-4-405b.toml b/providers/llmgateway/models/hermes-4-405b.toml deleted file mode 100644 index b525acfa4c9..00000000000 --- a/providers/llmgateway/models/hermes-4-405b.toml +++ /dev/null @@ -1,30 +0,0 @@ -# Gateway-wide $.reasoning_effort = "none" (or $.reasoning.effort = "none") -# disables non-OpenAI reasoning; this model has no documented effort tiers -# or exact reasoning-token budget. -# https://docs.llmgateway.io/features/reasoning (accessed 2026-07-23) -name = "Hermes 4 405B" -description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" -family = "hermes" -release_date = "2025-08-26" -last_updated = "2025-08-26" -attachment = false -reasoning = true -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "toggle" # API: {"reasoning_effort": "none"} or {"reasoning": {"effort": "none"}} - -[cost] -input = 1 -output = 3 - -[limit] -context = 131_072 -output = 131_072 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/llmgateway/models/hermes-4-70b.toml b/providers/llmgateway/models/hermes-4-70b.toml deleted file mode 100644 index 8dfe55419f1..00000000000 --- a/providers/llmgateway/models/hermes-4-70b.toml +++ /dev/null @@ -1,30 +0,0 @@ -# Gateway-wide $.reasoning_effort = "none" (or $.reasoning.effort = "none") -# disables non-OpenAI reasoning; this model has no documented effort tiers -# or exact reasoning-token budget. -# https://docs.llmgateway.io/features/reasoning (accessed 2026-07-23) -name = "Hermes 4 70B" -description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" -family = "hermes" -release_date = "2025-08-26" -last_updated = "2025-08-26" -attachment = false -reasoning = true -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "toggle" # API: {"reasoning_effort": "none"} or {"reasoning": {"effort": "none"}} - -[cost] -input = 0.13 -output = 0.4 - -[limit] -context = 131_072 -output = 131_072 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/llmgateway/models/hy-mt2-plus.toml b/providers/llmgateway/models/hy-mt2-plus.toml new file mode 100644 index 00000000000..2191653753d --- /dev/null +++ b/providers/llmgateway/models/hy-mt2-plus.toml @@ -0,0 +1,23 @@ +name = "Hy-MT2 Plus" +description = "Tool-capable chat model for instruction following and agentic application workflows" +family = "Hy" +release_date = "2026-05-21" +last_updated = "2026-05-21" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[cost] +input = 0.074 +output = 0.295 + +[limit] +context = 8_192 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/llmgateway/models/hy3.toml b/providers/llmgateway/models/hy3.toml index f4ddcb6f714..696f1077b2d 100644 --- a/providers/llmgateway/models/hy3.toml +++ b/providers/llmgateway/models/hy3.toml @@ -2,12 +2,12 @@ base_model = "tencent/hy3" [[reasoning_options]] type = "effort" -values = ["none", "low", "high"] +values = ["none", "minimal", "low", "medium", "high", "xhigh"] [cost] -input = 0.14 -output = 0.58 -cache_read = 0.035 +input = 0.132 +output = 0.528 +cache_read = 0.033 [limit] context = 262_144 diff --git a/providers/llmgateway/models/hy4-preview.toml b/providers/llmgateway/models/hy4-preview.toml new file mode 100644 index 00000000000..a9c0cb59404 --- /dev/null +++ b/providers/llmgateway/models/hy4-preview.toml @@ -0,0 +1,13 @@ +base_model = "tencent/hy4-preview" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.834 +output = 2.501 +cache_read = 0.042 + +[limit] +context = 1_000_000 diff --git a/providers/llmgateway/models/inkling-small.toml b/providers/llmgateway/models/inkling-small.toml new file mode 100644 index 00000000000..954d4c25f03 --- /dev/null +++ b/providers/llmgateway/models/inkling-small.toml @@ -0,0 +1,13 @@ +base_model = "thinkingmachines/inkling-small" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.45 +output = 1.2 +cache_read = 0.1 + +[limit] +context = 524_288 diff --git a/providers/llmgateway/models/inkling.toml b/providers/llmgateway/models/inkling.toml new file mode 100644 index 00000000000..1d07005aa33 --- /dev/null +++ b/providers/llmgateway/models/inkling.toml @@ -0,0 +1,13 @@ +base_model = "thinkingmachines/inkling" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.95 +output = 4.05 +cache_read = 0.16 + +[limit] +context = 524_288 diff --git a/providers/llmgateway/models/kimi-k2.6.toml b/providers/llmgateway/models/kimi-k2.6.toml index 9d7d9a4940b..7e12ebbe10f 100644 --- a/providers/llmgateway/models/kimi-k2.6.toml +++ b/providers/llmgateway/models/kimi-k2.6.toml @@ -4,14 +4,14 @@ # https://api.llmgateway.io/v1/models providers[].reasoning_efforts (accessed 2026-07-23) base_model = "moonshotai/kimi-k2.6" -[[reasoning_options]] -type = "effort" # API: {"reasoning_effort": ""} or {"reasoning": {"effort": ""}} -values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] - [interleaved] field = "reasoning_content" +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + [cost] -input = 0.22 -output = 1.137 -cache_read = 0.048 +input = 0.6 +output = 3.05 +cache_read = 0.13 diff --git a/providers/llmgateway/models/kimi-k2.7-code-highspeed.toml b/providers/llmgateway/models/kimi-k2.7-code-highspeed.toml index 09a0c8b14ed..6ec637888c2 100644 --- a/providers/llmgateway/models/kimi-k2.7-code-highspeed.toml +++ b/providers/llmgateway/models/kimi-k2.7-code-highspeed.toml @@ -8,7 +8,7 @@ field = "reasoning_content" [[reasoning_options]] type = "effort" -values = ["low", "medium", "high", "xhigh", "max"] +values = ["minimal", "low", "medium", "high", "xhigh", "max"] [cost] input = 1.9 diff --git a/providers/llmgateway/models/kimi-k2.7-code.toml b/providers/llmgateway/models/kimi-k2.7-code.toml index 9fbaa5e5e74..bf7139b1230 100644 --- a/providers/llmgateway/models/kimi-k2.7-code.toml +++ b/providers/llmgateway/models/kimi-k2.7-code.toml @@ -8,7 +8,7 @@ field = "reasoning_content" [[reasoning_options]] type = "effort" -values = ["low", "medium", "high", "xhigh", "max"] +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [cost] input = 0.95 diff --git a/providers/llmgateway/models/llama-3.1-nemotron-ultra-253b.toml b/providers/llmgateway/models/llama-3.1-nemotron-ultra-253b.toml deleted file mode 100644 index c27f84b351e..00000000000 --- a/providers/llmgateway/models/llama-3.1-nemotron-ultra-253b.toml +++ /dev/null @@ -1,8 +0,0 @@ -base_model = "nvidia/llama-3.1-nemotron-ultra-253b" -reasoning = false -tool_call = false -structured_output = true - -[cost] -input = 0.6 -output = 1.8 diff --git a/providers/llmgateway/models/llama-3.3-70b-instruct.toml b/providers/llmgateway/models/llama-3.3-70b-instruct.toml index f4694d9b75a..1609c1b2b94 100644 --- a/providers/llmgateway/models/llama-3.3-70b-instruct.toml +++ b/providers/llmgateway/models/llama-3.3-70b-instruct.toml @@ -1,7 +1,7 @@ base_model = "meta/llama-3.3-70b-instruct" [cost] -input = 0.13 +input = 0.135 output = 0.4 [limit] diff --git a/providers/llmgateway/models/mimo-v2.6-flash.toml b/providers/llmgateway/models/mimo-v2.6-flash.toml new file mode 100644 index 00000000000..a71af774946 --- /dev/null +++ b/providers/llmgateway/models/mimo-v2.6-flash.toml @@ -0,0 +1,13 @@ +base_model = "xiaomi/mimo-v2.6-flash" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + +[cost] +input = 0.14 +output = 0.28 +cache_read = 0.0028 + +[limit] +context = 1_000_000 diff --git a/providers/llmgateway/models/mimo-v2.6-pro.toml b/providers/llmgateway/models/mimo-v2.6-pro.toml new file mode 100644 index 00000000000..36f93eaabd5 --- /dev/null +++ b/providers/llmgateway/models/mimo-v2.6-pro.toml @@ -0,0 +1,13 @@ +base_model = "xiaomi/mimo-v2.6-pro" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + +[cost] +input = 0.435 +output = 0.87 +cache_read = 0.0036 + +[limit] +context = 1_000_000 diff --git a/providers/llmgateway/models/minicpm-v-4.5.toml b/providers/llmgateway/models/minicpm-v-4.5.toml deleted file mode 100644 index 2b50f6bcbd8..00000000000 --- a/providers/llmgateway/models/minicpm-v-4.5.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "MiniCPM-V 4.5" -description = "Multimodal model for analyzing text, images, documents, and rich media" -release_date = "2025-08-26" -last_updated = "2025-08-26" -attachment = true -reasoning = false -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[cost] -input = 0.658 -output = 1.11 - -[limit] -context = 32_000 -output = 32_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/llmgateway/models/muse-glimmer-30b.toml b/providers/llmgateway/models/muse-glimmer-30b.toml new file mode 100644 index 00000000000..9d06a10be3b --- /dev/null +++ b/providers/llmgateway/models/muse-glimmer-30b.toml @@ -0,0 +1,10 @@ +base_model = "meta/muse-glimmer-30b" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.04 diff --git a/providers/llmgateway/models/muse-spark-1.1.toml b/providers/llmgateway/models/muse-spark-1.1.toml index bbc612167da..f71eeb745a8 100644 --- a/providers/llmgateway/models/muse-spark-1.1.toml +++ b/providers/llmgateway/models/muse-spark-1.1.toml @@ -1,10 +1,10 @@ base_model = "meta/muse-spark-1.1" -reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high", "xhigh"] }] + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] [cost] input = 1.25 output = 4.25 cache_read = 0.15 - -[limit] -context = 1_048_576 diff --git a/providers/llmgateway/models/muse-spark-1.2-contributor.toml b/providers/llmgateway/models/muse-spark-1.2-contributor.toml new file mode 100644 index 00000000000..b26c9987b64 --- /dev/null +++ b/providers/llmgateway/models/muse-spark-1.2-contributor.toml @@ -0,0 +1,28 @@ +name = "Muse Spark 1.2 Contributor" +description = "Multimodal reasoning model for visual analysis, planning, and tool use" +family = "muse" +release_date = "2026-08-06" +last_updated = "2026-08-06" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 0.1 +output = 0.2 +cache_read = 0.002 + +[limit] +context = 1_048_576 +output = 1_048_576 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/llmgateway/models/muse-spark-1.3-contributor.toml b/providers/llmgateway/models/muse-spark-1.3-contributor.toml new file mode 100644 index 00000000000..e27694885d8 --- /dev/null +++ b/providers/llmgateway/models/muse-spark-1.3-contributor.toml @@ -0,0 +1,28 @@ +name = "Muse Spark 1.3 Contributor" +description = "Multimodal reasoning model for visual analysis, planning, and tool use" +family = "muse" +release_date = "2026-09-02" +last_updated = "2026-09-02" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 0.1 +output = 0.2 +cache_read = 0.002 + +[limit] +context = 1_048_576 +output = 1_048_576 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/llmgateway/models/muse-spark-1.3.toml b/providers/llmgateway/models/muse-spark-1.3.toml new file mode 100644 index 00000000000..ebc722ec500 --- /dev/null +++ b/providers/llmgateway/models/muse-spark-1.3.toml @@ -0,0 +1,14 @@ +# Effort: reasoning_effort or reasoning.effort is forwarded unchanged to Meta's Responses API. +# https://docs.llmgateway.io/features/reasoning +# https://dev.meta.ai/docs/reasoning.md (max is Standard-tier 1.3 only) +# https://github.com/theopenco/llmgateway/blob/910a6632c47b83c74944bad231f25f17bd5acb7b/packages/actions/src/prepare-request-body.ts#L2231-L2241 +base_model = "meta/muse-spark-1.3" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 1.25 +output = 4.25 +cache_read = 0.15 diff --git a/providers/llmgateway/models/nemotron-3-nano-30b.toml b/providers/llmgateway/models/nemotron-3-nano-30b.toml deleted file mode 100644 index 8b8d3c92db6..00000000000 --- a/providers/llmgateway/models/nemotron-3-nano-30b.toml +++ /dev/null @@ -1,30 +0,0 @@ -# Gateway-wide $.reasoning_effort = "none" (or $.reasoning.effort = "none") -# disables non-OpenAI reasoning; this model has no documented effort tiers -# or exact reasoning-token budget. -# https://docs.llmgateway.io/features/reasoning (accessed 2026-07-23) -name = "Nemotron 3 Nano 30B" -description = "Compact Nemotron model for efficient reasoning and deployable AI agents" -family = "nemotron" -release_date = "2025-12-15" -last_updated = "2025-12-15" -attachment = false -reasoning = true -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "toggle" # API: {"reasoning_effort": "none"} or {"reasoning": {"effort": "none"}} - -[cost] -input = 0.06 -output = 0.24 - -[limit] -context = 262_144 -output = 262_144 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/llmgateway/models/nemotron-3-nano-omni.toml b/providers/llmgateway/models/nemotron-3-nano-omni.toml deleted file mode 100644 index 81a7a15fbc4..00000000000 --- a/providers/llmgateway/models/nemotron-3-nano-omni.toml +++ /dev/null @@ -1,30 +0,0 @@ -# Gateway-wide $.reasoning_effort = "none" (or $.reasoning.effort = "none") -# disables non-OpenAI reasoning; this model has no documented effort tiers -# or exact reasoning-token budget. -# https://docs.llmgateway.io/features/reasoning (accessed 2026-07-23) -name = "Nemotron 3 Nano Omni" -description = "Omni-modal model for text, vision, audio, and multimodal agent tasks" -family = "nemotron" -release_date = "2026-04-28" -last_updated = "2026-04-28" -attachment = true -reasoning = true -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "toggle" # API: {"reasoning_effort": "none"} or {"reasoning": {"effort": "none"}} - -[cost] -input = 0.06 -output = 0.24 - -[limit] -context = 262_144 -output = 262_144 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/llmgateway/models/nemotron-3-super-120b.toml b/providers/llmgateway/models/nemotron-3-super-120b.toml deleted file mode 100644 index 57a9d188262..00000000000 --- a/providers/llmgateway/models/nemotron-3-super-120b.toml +++ /dev/null @@ -1,30 +0,0 @@ -# Gateway-wide $.reasoning_effort = "none" (or $.reasoning.effort = "none") -# disables non-OpenAI reasoning; this model has no documented effort tiers -# or exact reasoning-token budget. -# https://docs.llmgateway.io/features/reasoning (accessed 2026-07-23) -name = "Nemotron 3 Super 120B" -description = "Nemotron model for efficient reasoning, coding, and specialized AI agents" -family = "nemotron" -release_date = "2026-03-11" -last_updated = "2026-03-11" -attachment = false -reasoning = true -temperature = true -tool_call = true -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "toggle" # API: {"reasoning_effort": "none"} or {"reasoning": {"effort": "none"}} - -[cost] -input = 0.3 -output = 0.9 - -[limit] -context = 262_144 -output = 262_144 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/llmgateway/models/nemotron-3.5-lightning.toml b/providers/llmgateway/models/nemotron-3.5-lightning.toml new file mode 100644 index 00000000000..6e7dba809e3 --- /dev/null +++ b/providers/llmgateway/models/nemotron-3.5-lightning.toml @@ -0,0 +1,9 @@ +base_model = "nvidia/nemotron-3.5-lightning" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + +[cost] +input = 0.08 +output = 0.2 diff --git a/providers/llmgateway/models/qwen2-5-vl-72b-instruct.toml b/providers/llmgateway/models/qwen2-5-vl-72b-instruct.toml deleted file mode 100644 index 823e43d3ec7..00000000000 --- a/providers/llmgateway/models/qwen2-5-vl-72b-instruct.toml +++ /dev/null @@ -1,8 +0,0 @@ -base_model = "alibaba/qwen2-5-vl-72b-instruct" - -[cost] -input = 0.25 -output = 0.75 - -[limit] -context = 32_000 diff --git a/providers/llmgateway/models/qwen3-30b-a3b-instruct-2507.toml b/providers/llmgateway/models/qwen3-30b-a3b-instruct-2507.toml deleted file mode 100644 index 732be1543c5..00000000000 --- a/providers/llmgateway/models/qwen3-30b-a3b-instruct-2507.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Qwen3 30B A3B Instruct (2507)" -description = "Qwen instruction model for multilingual chat, reasoning, and tool use" -family = "qwen" -release_date = "2025-07-08" -last_updated = "2025-07-08" -attachment = false -reasoning = false -temperature = true -tool_call = true -structured_output = true -open_weights = true - -[cost] -input = 0.1 -output = 0.3 - -[limit] -context = 262_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/llmgateway/models/qwen3-32b.toml b/providers/llmgateway/models/qwen3-32b.toml index 7eec83a099a..31f2b85bd38 100644 --- a/providers/llmgateway/models/qwen3-32b.toml +++ b/providers/llmgateway/models/qwen3-32b.toml @@ -5,11 +5,11 @@ base_model = "alibaba/qwen3-32b" [[reasoning_options]] -type = "toggle" # API: {"reasoning_effort": "none"} or {"reasoning": {"effort": "none"}} +type = "toggle" [cost] -input = 0.1 -output = 0.3 +input = 0.36 +output = 0.87 reasoning = 8.4 [limit] diff --git a/providers/llmgateway/models/qwen3.8-2.4t-a95b.toml b/providers/llmgateway/models/qwen3.8-2.4t-a95b.toml new file mode 100644 index 00000000000..02fe65d078f --- /dev/null +++ b/providers/llmgateway/models/qwen3.8-2.4t-a95b.toml @@ -0,0 +1,13 @@ +base_model = "alibaba/qwen3.8-2.4t-a95b" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 6 +cache_read = 0.25 + +[limit] +context = 1_010_000 diff --git a/providers/llmgateway/models/qwen3.8-flash.toml b/providers/llmgateway/models/qwen3.8-flash.toml new file mode 100644 index 00000000000..78303b8e6ba --- /dev/null +++ b/providers/llmgateway/models/qwen3.8-flash.toml @@ -0,0 +1,11 @@ +base_model = "alibaba/qwen3.8-flash" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.15 +output = 0.47 +cache_read = 0.016 +cache_write = 0.2 diff --git a/providers/llmgateway/models/qwen3.8-max.toml b/providers/llmgateway/models/qwen3.8-max.toml index e6935723bbf..dde7b85e514 100644 --- a/providers/llmgateway/models/qwen3.8-max.toml +++ b/providers/llmgateway/models/qwen3.8-max.toml @@ -8,9 +8,9 @@ values = ["low", "medium", "xhigh"] type = "budget_tokens" [cost] -input = 1.815 -output = 5.4461 -cache_read = 0.21 +input = 2 +output = 6 +cache_read = 0.25 cache_write = 2.5 [limit] diff --git a/providers/llmgateway/models/step-3.7-flash.toml b/providers/llmgateway/models/step-3.7-flash.toml new file mode 100644 index 00000000000..ad0acb372ea --- /dev/null +++ b/providers/llmgateway/models/step-3.7-flash.toml @@ -0,0 +1,14 @@ +base_model = "stepfun/step-3.7-flash" +base_model_omit = ["limit.input"] + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.2 +output = 1.15 +cache_read = 0.04 + +[limit] +context = 262_144 diff --git a/providers/llmtech/models/unsloth/Qwen3.8-27B-NVFP4.toml b/providers/llmtech/models/nvidia/Qwen3.8-27B-NVFP4.toml similarity index 92% rename from providers/llmtech/models/unsloth/Qwen3.8-27B-NVFP4.toml rename to providers/llmtech/models/nvidia/Qwen3.8-27B-NVFP4.toml index dbad694e9bb..ac3503d02a3 100644 --- a/providers/llmtech/models/unsloth/Qwen3.8-27B-NVFP4.toml +++ b/providers/llmtech/models/nvidia/Qwen3.8-27B-NVFP4.toml @@ -1,23 +1,22 @@ -# Reasoning wire (OpenAI-compatible chat completions at https://api.llmtech.eu/v1): -# Toggle: chat_template_kwargs.enable_thinking = true | false. -# Effort: chat_template_kwargs.reasoning_effort = "low" | "medium" | "xhigh". -# Non-streaming responses carry reasoning text in the `reasoning` field; -# streaming deltas use `reasoning_content`. - -base_model = "alibaba/qwen3.8-27b" -attachment = false - -[[reasoning_options]] -type = "toggle" - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "xhigh"] - -[cost] -input = 0.25 -output = 2.09 -cache_read = 0.04 - -[modalities] -input = ["text"] +# Reasoning wire (OpenAI-compatible chat completions at https://api.llmtech.eu/v1): +# Toggle: chat_template_kwargs.enable_thinking = true | false. +# Effort: chat_template_kwargs.reasoning_effort = "low" | "medium" | "xhigh". +# Non-streaming responses carry reasoning text in the `reasoning` field; +# streaming deltas use `reasoning_content`. + +base_model = "alibaba/qwen3.8-27b" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] + +[cost] +input = 0.25 +output = 2.09 +cache_read = 0.04 + +[modalities] +input = ["text", "image"] diff --git a/providers/lmstudio/logo.svg b/providers/lmstudio/logo.svg new file mode 100644 index 00000000000..bef02e80c29 --- /dev/null +++ b/providers/lmstudio/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/providers/melious/logo.svg b/providers/melious/logo.svg new file mode 100644 index 00000000000..a2ff326807a --- /dev/null +++ b/providers/melious/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/providers/melious/models/deepseek-r1-0528.toml b/providers/melious/models/deepseek-r1-0528.toml new file mode 100644 index 00000000000..78d2c96463c --- /dev/null +++ b/providers/melious/models/deepseek-r1-0528.toml @@ -0,0 +1,31 @@ +# Cost: Melious list price for the default `balanced` route -- EUR 0.60 in / EUR 2.40 +# out / EUR 0.16 cache read per 1M tokens -- converted at 1.1592 USD/EUR (ECB euro +# reference rate, 2026-09-11). +# Sources: GET https://api.melious.ai/v1/models?include_meta=true and +# https://melious.ai/hub/models/deepseek-r1-0528 (both accessed 2026-09-14) +# FX: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-usd.en.html +# Effort: reasoning_effort is the only reasoning control this host exposes, and it +# forwards no lab-native thinking field and no reasoning budget. Measured against this +# deployment on 2026-09-14, it has no effect on this model: reasoning_effort="none" +# still returns reasoning (reasoning_content 2_786/3_010 chars across repeat samples), +# and low/medium/high produce no ordered difference. reasoning_options is therefore [] +# -- this model reasons, with no caller control on this host. That is an affirmative +# measurement, not an untested default. +# https://melious.ai/docs/reference/chat-completions (accessed 2026-09-14) +# Reasoning text is returned in choices[].message.reasoning_content. cache_read: +# usage.cached_tokens are billed at Melious's discounted prefix-cache rate. +# limit.context: the catalog reports 164_000 for this deployment, not the lab's +# 128_000. +base_model = "deepseek/deepseek-r1" +reasoning_options = [] + +[cost] +input = 0.69552 +output = 2.78208 +cache_read = 0.185472 + +[limit] +context = 164_000 + +[interleaved] +field = "reasoning_content" diff --git a/providers/melious/models/deepseek-v3.2.toml b/providers/melious/models/deepseek-v3.2.toml new file mode 100644 index 00000000000..87e4436bc09 --- /dev/null +++ b/providers/melious/models/deepseek-v3.2.toml @@ -0,0 +1,33 @@ +# Cost: Melious list price for the default `balanced` route -- EUR 0.30 in / EUR 0.50 +# out / EUR 0.08 cache read per 1M tokens -- converted at 1.1592 USD/EUR (ECB euro +# reference rate, 2026-09-11). +# Sources: GET https://api.melious.ai/v1/models?include_meta=true and +# https://melious.ai/hub/models/deepseek-v3.2 (both accessed 2026-09-14) +# FX: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-usd.en.html +# Effort: reasoning_effort is the only reasoning control this host exposes, and it +# forwards no lab-native thinking field and no reasoning budget, so no toggle or +# budget_tokens. Measured against this deployment on 2026-09-14: +# reasoning_effort="none" is a real off state (usage.reasoning_tokens = 0 and no +# reasoning_content), while low/medium/high all return reasoning with no ordered +# difference in depth, so they are not published as separate grades. The host also +# accepts undocumented values without a 4xx, so acceptance is not evidence. Because +# off is reachable through the effort field this is an effort list containing none, +# not a toggle. +# https://melious.ai/docs/reference/chat-completions (accessed 2026-09-14) +# Reasoning text is returned in choices[].message.reasoning_content. cache_read: +# usage.cached_tokens are billed at Melious's discounted prefix-cache rate. +# limit.context: the catalog reports 164_000 for this deployment, not the lab's +# 128_000. +base_model = "deepseek/deepseek-v3.2" +reasoning_options = [{ type = "effort", values = ["none", "high"] }] + +[cost] +input = 0.34776 +output = 0.5796 +cache_read = 0.092736 + +[limit] +context = 164_000 + +[interleaved] +field = "reasoning_content" diff --git a/providers/melious/models/deepseek-v4-flash-0731.toml b/providers/melious/models/deepseek-v4-flash-0731.toml new file mode 100644 index 00000000000..6f5c2d8fa23 --- /dev/null +++ b/providers/melious/models/deepseek-v4-flash-0731.toml @@ -0,0 +1,28 @@ +# Cost: Melious list price for the default `balanced` route -- EUR 0.10 in / EUR 0.25 +# out / EUR 0.02 cache read per 1M tokens -- converted at 1.1592 USD/EUR (ECB euro +# reference rate, 2026-09-11). +# Sources: GET https://api.melious.ai/v1/models?include_meta=true and +# https://melious.ai/hub/models/deepseek-v4-flash-0731 (both accessed 2026-09-14) +# FX: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-usd.en.html +# Effort: reasoning_effort is the only reasoning control this host exposes, and it +# forwards no lab-native thinking field and no reasoning budget, so no toggle or +# budget_tokens. Measured against this deployment on 2026-09-14: +# reasoning_effort="none" is a real off state (usage.reasoning_tokens = 0 and no +# reasoning_content), while low/medium/high all return reasoning with no ordered +# difference in depth, so they are not published as separate grades. The host also +# accepts undocumented values without a 4xx, so acceptance is not evidence. Because +# off is reachable through the effort field this is an effort list containing none, +# not a toggle. +# https://melious.ai/docs/reference/chat-completions (accessed 2026-09-14) +# Reasoning text is returned in choices[].message.reasoning_content. cache_read: +# usage.cached_tokens are billed at Melious's discounted prefix-cache rate. +base_model = "deepseek/deepseek-v4-flash-0731" +reasoning_options = [{ type = "effort", values = ["none", "high"] }] + +[cost] +input = 0.11592 +output = 0.2898 +cache_read = 0.023184 + +[interleaved] +field = "reasoning_content" diff --git a/providers/melious/models/deepseek-v4-pro-0813.toml b/providers/melious/models/deepseek-v4-pro-0813.toml new file mode 100644 index 00000000000..0cdb0c82645 --- /dev/null +++ b/providers/melious/models/deepseek-v4-pro-0813.toml @@ -0,0 +1,28 @@ +# Cost: Melious list price for the default `balanced` route -- EUR 1.00 in / EUR 3.00 +# out / EUR 0.10 cache read per 1M tokens -- converted at 1.1592 USD/EUR (ECB euro +# reference rate, 2026-09-11). +# Sources: GET https://api.melious.ai/v1/models?include_meta=true and +# https://melious.ai/hub/models/deepseek-v4-pro-0813 (both accessed 2026-09-14) +# FX: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-usd.en.html +# Effort: reasoning_effort is the only reasoning control this host exposes, and it +# forwards no lab-native thinking field and no reasoning budget, so no toggle or +# budget_tokens. Measured against this deployment on 2026-09-14: +# reasoning_effort="none" is a real off state (usage.reasoning_tokens = 0 and no +# reasoning_content), while low/medium/high all return reasoning with no ordered +# difference in depth, so they are not published as separate grades. The host also +# accepts undocumented values without a 4xx, so acceptance is not evidence. Because +# off is reachable through the effort field this is an effort list containing none, +# not a toggle. +# https://melious.ai/docs/reference/chat-completions (accessed 2026-09-14) +# Reasoning text is returned in choices[].message.reasoning_content. cache_read: +# usage.cached_tokens are billed at Melious's discounted prefix-cache rate. +base_model = "deepseek/deepseek-v4-pro-0813" +reasoning_options = [{ type = "effort", values = ["none", "high"] }] + +[cost] +input = 1.1592 +output = 3.4776 +cache_read = 0.11592 + +[interleaved] +field = "reasoning_content" diff --git a/providers/melious/models/deepseek-v4-pro.toml b/providers/melious/models/deepseek-v4-pro.toml new file mode 100644 index 00000000000..ca2515e3ebf --- /dev/null +++ b/providers/melious/models/deepseek-v4-pro.toml @@ -0,0 +1,28 @@ +# Cost: Melious list price for the default `balanced` route -- EUR 1.60 in / EUR 3.20 +# out / EUR 0.40 cache read per 1M tokens -- converted at 1.1592 USD/EUR (ECB euro +# reference rate, 2026-09-11). +# Sources: GET https://api.melious.ai/v1/models?include_meta=true and +# https://melious.ai/hub/models/deepseek-v4-pro (both accessed 2026-09-14) +# FX: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-usd.en.html +# Effort: reasoning_effort is the only reasoning control this host exposes, and it +# forwards no lab-native thinking field and no reasoning budget, so no toggle or +# budget_tokens. Measured against this deployment on 2026-09-14: +# reasoning_effort="none" is a real off state (usage.reasoning_tokens = 0 and no +# reasoning_content), while low/medium/high all return reasoning with no ordered +# difference in depth, so they are not published as separate grades. The host also +# accepts undocumented values without a 4xx, so acceptance is not evidence. Because +# off is reachable through the effort field this is an effort list containing none, +# not a toggle. +# https://melious.ai/docs/reference/chat-completions (accessed 2026-09-14) +# Reasoning text is returned in choices[].message.reasoning_content. cache_read: +# usage.cached_tokens are billed at Melious's discounted prefix-cache rate. +base_model = "deepseek/deepseek-v4-pro" +reasoning_options = [{ type = "effort", values = ["none", "high"] }] + +[cost] +input = 1.85472 +output = 3.70944 +cache_read = 0.46368 + +[interleaved] +field = "reasoning_content" diff --git a/providers/melious/models/deepseek-v4.1-flash.toml b/providers/melious/models/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..679d9879d8b --- /dev/null +++ b/providers/melious/models/deepseek-v4.1-flash.toml @@ -0,0 +1,28 @@ +# Cost: Melious list price for the default `balanced` route -- EUR 0.20 in / EUR 1.00 +# out / EUR 0.01 cache read per 1M tokens -- converted at 1.1592 USD/EUR (ECB euro +# reference rate, 2026-09-11). +# Sources: GET https://api.melious.ai/v1/models?include_meta=true and +# https://melious.ai/hub/models/deepseek-v4.1-flash (both accessed 2026-09-14) +# FX: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-usd.en.html +# Effort: reasoning_effort is the only reasoning control this host exposes, and it +# forwards no lab-native thinking field and no reasoning budget, so no toggle or +# budget_tokens. Measured against this deployment on 2026-09-14: +# reasoning_effort="none" is a real off state (usage.reasoning_tokens = 0 and no +# reasoning_content), while low/medium/high all return reasoning with no ordered +# difference in depth, so they are not published as separate grades. The host also +# accepts undocumented values without a 4xx, so acceptance is not evidence. Because +# off is reachable through the effort field this is an effort list containing none, +# not a toggle. +# https://melious.ai/docs/reference/chat-completions (accessed 2026-09-14) +# Reasoning text is returned in choices[].message.reasoning_content. cache_read: +# usage.cached_tokens are billed at Melious's discounted prefix-cache rate. +base_model = "deepseek/deepseek-v4.1-flash" +reasoning_options = [{ type = "effort", values = ["none", "high"] }] + +[cost] +input = 0.23184 +output = 1.1592 +cache_read = 0.011592 + +[interleaved] +field = "reasoning_content" diff --git a/providers/melious/models/glm-5.1.toml b/providers/melious/models/glm-5.1.toml new file mode 100644 index 00000000000..63766b09ff8 --- /dev/null +++ b/providers/melious/models/glm-5.1.toml @@ -0,0 +1,33 @@ +# Cost: Melious list price for the default `balanced` route -- EUR 1.30 in / EUR 4.00 +# out / EUR 0.32 cache read per 1M tokens -- converted at 1.1592 USD/EUR (ECB euro +# reference rate, 2026-09-11). +# Sources: GET https://api.melious.ai/v1/models?include_meta=true and +# https://melious.ai/hub/models/glm-5.1 (both accessed 2026-09-14) +# FX: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-usd.en.html +# Effort: reasoning_effort is the only reasoning control this host exposes, and it +# forwards no lab-native thinking field and no reasoning budget, so no toggle or +# budget_tokens. Measured against this deployment on 2026-09-14: +# reasoning_effort="none" is a real off state (usage.reasoning_tokens = 0 and no +# reasoning_content), while low/medium/high all return reasoning with no ordered +# difference in depth, so they are not published as separate grades. The host also +# accepts undocumented values without a 4xx, so acceptance is not evidence. Because +# off is reachable through the effort field this is an effort list containing none, +# not a toggle. +# https://melious.ai/docs/reference/chat-completions (accessed 2026-09-14) +# Reasoning text is returned in choices[].message.reasoning_content. cache_read: +# usage.cached_tokens are billed at Melious's discounted prefix-cache rate. +# limit.context: the catalog reports 203_000 for this deployment, not the lab's +# 200_000. +base_model = "zhipuai/glm-5.1" +reasoning_options = [{ type = "effort", values = ["none", "high"] }] + +[cost] +input = 1.50696 +output = 4.6368 +cache_read = 0.370944 + +[limit] +context = 203_000 + +[interleaved] +field = "reasoning_content" diff --git a/providers/melious/models/glm-5.2.toml b/providers/melious/models/glm-5.2.toml new file mode 100644 index 00000000000..8ca4dbe4c3e --- /dev/null +++ b/providers/melious/models/glm-5.2.toml @@ -0,0 +1,28 @@ +# Cost: Melious list price for the default `balanced` route -- EUR 1.00 in / EUR 4.00 +# out / EUR 0.25 cache read per 1M tokens -- converted at 1.1592 USD/EUR (ECB euro +# reference rate, 2026-09-11). +# Sources: GET https://api.melious.ai/v1/models?include_meta=true and +# https://melious.ai/hub/models/glm-5.2 (both accessed 2026-09-14) +# FX: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-usd.en.html +# Effort: reasoning_effort is the only reasoning control this host exposes, and it +# forwards no lab-native thinking field and no reasoning budget, so no toggle or +# budget_tokens. Measured against this deployment on 2026-09-14: +# reasoning_effort="none" is a real off state (usage.reasoning_tokens = 0 and no +# reasoning_content), while low/medium/high all return reasoning with no ordered +# difference in depth, so they are not published as separate grades. The host also +# accepts undocumented values without a 4xx, so acceptance is not evidence. Because +# off is reachable through the effort field this is an effort list containing none, +# not a toggle. +# https://melious.ai/docs/reference/chat-completions (accessed 2026-09-14) +# Reasoning text is returned in choices[].message.reasoning_content. cache_read: +# usage.cached_tokens are billed at Melious's discounted prefix-cache rate. +base_model = "zhipuai/glm-5.2" +reasoning_options = [{ type = "effort", values = ["none", "high"] }] + +[cost] +input = 1.1592 +output = 4.6368 +cache_read = 0.2898 + +[interleaved] +field = "reasoning_content" diff --git a/providers/melious/models/glm-5.3-flash.toml b/providers/melious/models/glm-5.3-flash.toml new file mode 100644 index 00000000000..d25a740b3f3 --- /dev/null +++ b/providers/melious/models/glm-5.3-flash.toml @@ -0,0 +1,33 @@ +# Cost: Melious list price for the default `balanced` route -- EUR 0.10 in / EUR 0.40 +# out / EUR 0.02 cache read per 1M tokens -- converted at 1.1592 USD/EUR (ECB euro +# reference rate, 2026-09-11). +# Sources: GET https://api.melious.ai/v1/models?include_meta=true and +# https://melious.ai/hub/models/glm-5.3-flash (both accessed 2026-09-14) +# FX: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-usd.en.html +# Effort: reasoning_effort is the only reasoning control this host exposes, and it +# forwards no lab-native thinking field and no reasoning budget, so no toggle or +# budget_tokens. Measured against this deployment on 2026-09-14: +# reasoning_effort="none" is a real off state (usage.reasoning_tokens = 0 and no +# reasoning_content), while low/medium/high all return reasoning with no ordered +# difference in depth, so they are not published as separate grades. The host also +# accepts undocumented values without a 4xx, so acceptance is not evidence. Because +# off is reachable through the effort field this is an effort list containing none, +# not a toggle. +# https://melious.ai/docs/reference/chat-completions (accessed 2026-09-14) +# Reasoning text is returned in choices[].message.reasoning_content. cache_read: +# usage.cached_tokens are billed at Melious's discounted prefix-cache rate. +# modalities.input: this host routes ["text", "image", "video"], narrower than the +# lab's ["text", "image", "video", "pdf"]. +base_model = "zhipuai/glm-5.3-flash" +reasoning_options = [{ type = "effort", values = ["none", "high"] }] + +[cost] +input = 0.11592 +output = 0.46368 +cache_read = 0.023184 + +[modalities] +input = ["text", "image", "video"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/melious/models/glm-5.3.toml b/providers/melious/models/glm-5.3.toml new file mode 100644 index 00000000000..03eac7197c0 --- /dev/null +++ b/providers/melious/models/glm-5.3.toml @@ -0,0 +1,28 @@ +# Cost: Melious list price for the default `balanced` route -- EUR 1.00 in / EUR 3.00 +# out / EUR 0.20 cache read per 1M tokens -- converted at 1.1592 USD/EUR (ECB euro +# reference rate, 2026-09-11). +# Sources: GET https://api.melious.ai/v1/models?include_meta=true and +# https://melious.ai/hub/models/glm-5.3 (both accessed 2026-09-14) +# FX: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-usd.en.html +# Effort: reasoning_effort is the only reasoning control this host exposes, and it +# forwards no lab-native thinking field and no reasoning budget, so no toggle or +# budget_tokens. Measured against this deployment on 2026-09-14: +# reasoning_effort="none" is a real off state (usage.reasoning_tokens = 0 and no +# reasoning_content), while low/medium/high all return reasoning with no ordered +# difference in depth, so they are not published as separate grades. The host also +# accepts undocumented values without a 4xx, so acceptance is not evidence. Because +# off is reachable through the effort field this is an effort list containing none, +# not a toggle. +# https://melious.ai/docs/reference/chat-completions (accessed 2026-09-14) +# Reasoning text is returned in choices[].message.reasoning_content. cache_read: +# usage.cached_tokens are billed at Melious's discounted prefix-cache rate. +base_model = "zhipuai/glm-5.3" +reasoning_options = [{ type = "effort", values = ["none", "high"] }] + +[cost] +input = 1.1592 +output = 3.4776 +cache_read = 0.23184 + +[interleaved] +field = "reasoning_content" diff --git a/providers/melious/models/glm-5.toml b/providers/melious/models/glm-5.toml new file mode 100644 index 00000000000..19ac9f0e728 --- /dev/null +++ b/providers/melious/models/glm-5.toml @@ -0,0 +1,31 @@ +# Cost: Melious list price for the default `balanced` route -- EUR 0.95 in / EUR 2.90 +# out / EUR 0.23 cache read per 1M tokens -- converted at 1.1592 USD/EUR (ECB euro +# reference rate, 2026-09-11). +# Sources: GET https://api.melious.ai/v1/models?include_meta=true and +# https://melious.ai/hub/models/glm-5 (both accessed 2026-09-14) +# FX: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-usd.en.html +# Effort: reasoning_effort is the only reasoning control this host exposes, and it +# forwards no lab-native thinking field and no reasoning budget. Measured against this +# deployment on 2026-09-14, it has no effect on this model: reasoning_effort="none" +# still returns reasoning (reasoning_content 2_444/2_239/686/3_907 chars across repeat +# samples), and low/medium/high produce no ordered difference. reasoning_options is +# therefore [] -- this model reasons, with no caller control on this host. That is an +# affirmative measurement, not an untested default. +# https://melious.ai/docs/reference/chat-completions (accessed 2026-09-14) +# Reasoning text is returned in choices[].message.reasoning_content. cache_read: +# usage.cached_tokens are billed at Melious's discounted prefix-cache rate. +# limit.context: the catalog reports 203_000 for this deployment, not the lab's +# 204_800. +base_model = "zhipuai/glm-5" +reasoning_options = [] + +[cost] +input = 1.10124 +output = 3.36168 +cache_read = 0.266616 + +[limit] +context = 203_000 + +[interleaved] +field = "reasoning_content" diff --git a/providers/melious/models/kimi-k2.5.toml b/providers/melious/models/kimi-k2.5.toml new file mode 100644 index 00000000000..fabc024c1a0 --- /dev/null +++ b/providers/melious/models/kimi-k2.5.toml @@ -0,0 +1,38 @@ +# Cost: Melious list price for the default `balanced` route -- EUR 0.50 in / EUR 2.55 +# out / EUR 0.12 cache read per 1M tokens -- converted at 1.1592 USD/EUR (ECB euro +# reference rate, 2026-09-11). +# Sources: GET https://api.melious.ai/v1/models?include_meta=true and +# https://melious.ai/hub/models/kimi-k2.5 (both accessed 2026-09-14) +# FX: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-usd.en.html +# Effort: reasoning_effort is the only reasoning control this host exposes, and it +# forwards no lab-native thinking field and no reasoning budget. Measured against this +# deployment on 2026-09-14, it has no effect on this model: reasoning_effort="none" +# still returns reasoning (reasoning_content 1_177/1_714/1_100 chars across repeat +# samples), and low/medium/high produce no ordered difference. reasoning_options is +# therefore [] -- this model reasons, with no caller control on this host. That is an +# affirmative measurement, not an untested default. +# https://melious.ai/docs/reference/chat-completions (accessed 2026-09-14) +# Reasoning text is returned in choices[].message.reasoning_content. cache_read: +# usage.cached_tokens are billed at Melious's discounted prefix-cache rate. +# limit.context: the catalog reports 262_000 for this deployment, not the lab's +# 262_144. limit.output: max_output_tokens is null for this model, so output is capped +# at the served context rather than inheriting the lab's larger 262_144. +# modalities.input: this host routes ["text", "image"], narrower than the lab's +# ["text", "image", "video"]. +base_model = "moonshotai/kimi-k2.5" +reasoning_options = [] + +[cost] +input = 0.5796 +output = 2.95596 +cache_read = 0.139104 + +[limit] +context = 262_000 +output = 262_000 + +[modalities] +input = ["text", "image"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/melious/models/kimi-k2.6.toml b/providers/melious/models/kimi-k2.6.toml new file mode 100644 index 00000000000..4784a6bc4c8 --- /dev/null +++ b/providers/melious/models/kimi-k2.6.toml @@ -0,0 +1,35 @@ +# Cost: Melious list price for the default `balanced` route -- EUR 0.70 in / EUR 3.50 +# out / EUR 0.23 cache read per 1M tokens -- converted at 1.1592 USD/EUR (ECB euro +# reference rate, 2026-09-11). +# Sources: GET https://api.melious.ai/v1/models?include_meta=true and +# https://melious.ai/hub/models/kimi-k2.6 (both accessed 2026-09-14) +# FX: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-usd.en.html +# Effort: reasoning_effort is the only reasoning control this host exposes, and it +# forwards no lab-native thinking field and no reasoning budget, so no toggle or +# budget_tokens. Measured against this deployment on 2026-09-14: +# reasoning_effort="none" is a real off state (usage.reasoning_tokens = 0 and no +# reasoning_content), while low/medium/high all return reasoning with no ordered +# difference in depth, so they are not published as separate grades. The host also +# accepts undocumented values without a 4xx, so acceptance is not evidence. Because +# off is reachable through the effort field this is an effort list containing none, +# not a toggle. +# https://melious.ai/docs/reference/chat-completions (accessed 2026-09-14) +# Reasoning text is returned in choices[].message.reasoning_content. cache_read: +# usage.cached_tokens are billed at Melious's discounted prefix-cache rate. +# limit.context: the catalog reports 256_000 for this deployment, not the lab's +# 262_144. limit.output: max_output_tokens is null for this model, so output is capped +# at the served context rather than inheriting the lab's larger 262_144. +base_model = "moonshotai/kimi-k2.6" +reasoning_options = [{ type = "effort", values = ["none", "high"] }] + +[cost] +input = 0.81144 +output = 4.0572 +cache_read = 0.266616 + +[limit] +context = 256_000 +output = 256_000 + +[interleaved] +field = "reasoning_content" diff --git a/providers/melious/models/kimi-k2.7-code.toml b/providers/melious/models/kimi-k2.7-code.toml new file mode 100644 index 00000000000..a38cc7a360b --- /dev/null +++ b/providers/melious/models/kimi-k2.7-code.toml @@ -0,0 +1,28 @@ +# Cost: Melious list price for the default `balanced` route -- EUR 0.70 in / EUR 3.00 +# out / EUR 0.19 cache read per 1M tokens -- converted at 1.1592 USD/EUR (ECB euro +# reference rate, 2026-09-11). +# Sources: GET https://api.melious.ai/v1/models?include_meta=true and +# https://melious.ai/hub/models/kimi-k2.7-code (both accessed 2026-09-14) +# FX: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-usd.en.html +# Effort: reasoning_effort is the only reasoning control this host exposes, and it +# forwards no lab-native thinking field and no reasoning budget, so no toggle or +# budget_tokens. Measured against this deployment on 2026-09-14: +# reasoning_effort="none" is a real off state (usage.reasoning_tokens = 0 and no +# reasoning_content), while low/medium/high all return reasoning with no ordered +# difference in depth, so they are not published as separate grades. The host also +# accepts undocumented values without a 4xx, so acceptance is not evidence. Because +# off is reachable through the effort field this is an effort list containing none, +# not a toggle. +# https://melious.ai/docs/reference/chat-completions (accessed 2026-09-14) +# Reasoning text is returned in choices[].message.reasoning_content. cache_read: +# usage.cached_tokens are billed at Melious's discounted prefix-cache rate. +base_model = "moonshotai/kimi-k2.7-code" +reasoning_options = [{ type = "effort", values = ["none", "high"] }] + +[cost] +input = 0.81144 +output = 3.4776 +cache_read = 0.220248 + +[interleaved] +field = "reasoning_content" diff --git a/providers/melious/models/kimi-k3.toml b/providers/melious/models/kimi-k3.toml new file mode 100644 index 00000000000..6f9d4f8021b --- /dev/null +++ b/providers/melious/models/kimi-k3.toml @@ -0,0 +1,33 @@ +# Cost: Melious list price for the default `balanced` route -- EUR 2.75 in / EUR 13.75 +# out / EUR 0.68 cache read per 1M tokens -- converted at 1.1592 USD/EUR (ECB euro +# reference rate, 2026-09-11). +# Sources: GET https://api.melious.ai/v1/models?include_meta=true and +# https://melious.ai/hub/models/kimi-k3 (both accessed 2026-09-14) +# FX: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-usd.en.html +# Effort: reasoning_effort is the only reasoning control this host exposes, and it +# forwards no lab-native thinking field and no reasoning budget, so no toggle or +# budget_tokens. Measured against this deployment on 2026-09-14: +# reasoning_effort="none" is a real off state (usage.reasoning_tokens = 0 and no +# reasoning_content), while low/medium/high all return reasoning with no ordered +# difference in depth, so they are not published as separate grades. The host also +# accepts undocumented values without a 4xx, so acceptance is not evidence. Because +# off is reachable through the effort field this is an effort list containing none, +# not a toggle. +# https://melious.ai/docs/reference/chat-completions (accessed 2026-09-14) +# Reasoning text is returned in choices[].message.reasoning_content. cache_read: +# usage.cached_tokens are billed at Melious's discounted prefix-cache rate. +# limit.context: the catalog reports 1_000_000 for this deployment, not the lab's +# 1_048_576. +base_model = "moonshotai/kimi-k3" +reasoning_options = [{ type = "effort", values = ["none", "high"] }] + +[cost] +input = 3.1878 +output = 15.939 +cache_read = 0.788256 + +[limit] +context = 1_000_000 + +[interleaved] +field = "reasoning_content" diff --git a/providers/melious/provider.toml b/providers/melious/provider.toml new file mode 100644 index 00000000000..db50ccc00f3 --- /dev/null +++ b/providers/melious/provider.toml @@ -0,0 +1,33 @@ +# Melious AI GmbH relays open-weight models built by other labs on European +# infrastructure. It is not the lab for any model it serves, so every model entry +# here uses base_model. Raw HTTP is POST /v1/chat/completions; the OpenAI SDK works +# by pointing base_url at the API. +# Reasoning: the only control on this surface is `reasoning_effort`. No lab-native +# field is forwarded -- no thinking object, no enable_thinking, no reasoning budget -- +# so no entry here uses `toggle` or `budget_tokens`. The host also accepts any effort +# string without a 4xx, including undocumented ones, so acceptance is not evidence. +# Every model here was measured against this deployment on 2026-09-14 instead. Two +# behaviours were found, and neither matches the vendor docs' low|medium|high ladder: +# on 12 models reasoning_effort="none" is a real off state (usage.reasoning_tokens = 0 +# and no reasoning_content) while low, medium and high all reason with no ordered +# difference in depth -- those are authored as effort ["none", "high"], an effort list +# containing none rather than a toggle, because off is reachable through this field. +# On glm-5, deepseek-r1-0528 and kimi-k2.5, "none" does not suppress reasoning and no +# level grades, so those carry reasoning_options = [] -- an affirmative measurement of +# no caller control, not an untested default. The catalog's own reasoning_type is not +# a reliable guide: glm-5.3-flash is typed always-on yet honours "none", and glm-5 is +# typed hybrid yet ignores it. Reasoning text is returned in +# choices[].message.reasoning_content. +# https://melious.ai/docs/reference/chat-completions (accessed 2026-09-14) +# Routing: a flavour is selected with a model-ID suffix (`:balanced`, `:speed`, +# `:price`, `:eco`, `:batch`). A bare chat model ID resolves to `balanced`, which is +# what the ids and prices here describe; only bare ids are published. A `preset` +# field biases routing, not reasoning depth. +# https://melious.ai/docs/concepts/routing (accessed 2026-09-14) +# Caching: usage.cached_tokens are prompt tokens served from the prefix cache and +# are billed at a cheaper cache-read rate, recorded as cost.cache_read. +name = "Melious" +npm = "@ai-sdk/openai-compatible" +api = "https://api.melious.ai/v1" +env = ["MELIOUS_API_KEY"] +doc = "https://melious.ai/docs/reference/models" diff --git a/providers/merge-gateway/models/anthropic/claude-fable-5-1.toml b/providers/merge-gateway/models/anthropic/claude-fable-5-1.toml new file mode 100644 index 00000000000..6f1a3fda3d9 --- /dev/null +++ b/providers/merge-gateway/models/anthropic/claude-fable-5-1.toml @@ -0,0 +1,12 @@ +base_model = "anthropic/claude-fable-5-1" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 diff --git a/providers/merge-gateway/models/anthropic/claude-opus-4-1-20250805.toml b/providers/merge-gateway/models/anthropic/claude-opus-4-1-20250805.toml index a062e98b15c..d2f26196362 100644 --- a/providers/merge-gateway/models/anthropic/claude-opus-4-1-20250805.toml +++ b/providers/merge-gateway/models/anthropic/claude-opus-4-1-20250805.toml @@ -16,6 +16,3 @@ input = 15 output = 75 cache_read = 1.5 cache_write = 18.75 - -[modalities] -input = ["text", "image"] diff --git a/providers/merge-gateway/models/anthropic/claude-opus-5-5.toml b/providers/merge-gateway/models/anthropic/claude-opus-5-5.toml new file mode 100644 index 00000000000..5f5b832e6f8 --- /dev/null +++ b/providers/merge-gateway/models/anthropic/claude-opus-5-5.toml @@ -0,0 +1,9 @@ +base_model = "anthropic/claude-opus-5-5" +structured_output = true +reasoning_options = [] + +[cost] +input = 4 +output = 20 +cache_read = 0.2 +cache_write = 5 diff --git a/providers/merge-gateway/models/anthropic/claude-sonnet-5.toml b/providers/merge-gateway/models/anthropic/claude-sonnet-5.toml index 4ba9d259a9d..bb662561fba 100644 --- a/providers/merge-gateway/models/anthropic/claude-sonnet-5.toml +++ b/providers/merge-gateway/models/anthropic/claude-sonnet-5.toml @@ -1,13 +1,18 @@ # Source: https://api-gateway.merge.dev/v1/models?model=anthropic%2Fclaude-sonnet-5 (accessed 2026-07-21) # Merge Gateway GET /v1/models?model=anthropic/claude-sonnet-5 (accessed 2026-07-14): # the Anthropic route advertises configurable `reasoning.effort` and disable support. - base_model = "anthropic/claude-sonnet-5" structured_output = true -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] [cost] -input = 2 -output = 10 +input = 3 +output = 15 cache_read = 0.2 cache_write = 2.5 diff --git a/providers/merge-gateway/models/deepseek/deepseek-v4-flash-0423.toml b/providers/merge-gateway/models/deepseek/deepseek-v4-flash-0423.toml new file mode 100644 index 00000000000..95eeecf3e4c --- /dev/null +++ b/providers/merge-gateway/models/deepseek/deepseek-v4-flash-0423.toml @@ -0,0 +1,18 @@ +base_model = "deepseek/deepseek-v4-flash-0423" +tool_call = false +structured_output = false + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.139 +output = 0.278 + +[limit] +context = 131_072 +output = 32_768 diff --git a/providers/merge-gateway/models/deepseek/deepseek-v4-flash-0731-fast.toml b/providers/merge-gateway/models/deepseek/deepseek-v4-flash-0731-fast.toml new file mode 100644 index 00000000000..4fe94f12c6b --- /dev/null +++ b/providers/merge-gateway/models/deepseek/deepseek-v4-flash-0731-fast.toml @@ -0,0 +1,9 @@ +base_model = "deepseek/deepseek-v4-flash-0731" +tool_call = false +structured_output = false +reasoning_options = [] + +[cost] +input = 0.28 +output = 0.56 +cache_read = 0.07 diff --git a/providers/merge-gateway/models/deepseek/deepseek-v4-flash-0731.toml b/providers/merge-gateway/models/deepseek/deepseek-v4-flash-0731.toml index 5105d3ff2de..91f9e45dc56 100644 --- a/providers/merge-gateway/models/deepseek/deepseek-v4-flash-0731.toml +++ b/providers/merge-gateway/models/deepseek/deepseek-v4-flash-0731.toml @@ -1,5 +1,4 @@ base_model = "deepseek/deepseek-v4-flash-0731" -structured_output = false [[reasoning_options]] type = "toggle" @@ -9,6 +8,9 @@ type = "effort" values = ["none", "low", "medium", "high", "max"] [cost] -input = 0.22 -output = 0.66 +input = 0.035 +output = 0.07 cache_read = 0.007 + +[limit] +context = 1_048_576 diff --git a/providers/merge-gateway/models/deepseek/deepseek-v4-flash.toml b/providers/merge-gateway/models/deepseek/deepseek-v4-flash.toml index da386447376..5644b59b802 100644 --- a/providers/merge-gateway/models/deepseek/deepseek-v4-flash.toml +++ b/providers/merge-gateway/models/deepseek/deepseek-v4-flash.toml @@ -1,7 +1,6 @@ # Source: https://api-gateway.merge.dev/v1/models?model=deepseek%2Fdeepseek-v4-flash (accessed 2026-07-21) # Selected route reasoning.controls = ["thinking"], disable_supported = true. base_model = "deepseek/deepseek-v4-flash" -structured_output = false [interleaved] field = "reasoning_content" @@ -10,6 +9,9 @@ field = "reasoning_content" type = "toggle" [cost] -input = 0.22 -output = 0.66 +input = 0.035 +output = 0.07 cache_read = 0.007 + +[limit] +context = 1_048_576 diff --git a/providers/merge-gateway/models/deepseek/deepseek-v4-pro-0423.toml b/providers/merge-gateway/models/deepseek/deepseek-v4-pro-0423.toml index c3e727f5850..a65df5a3d3a 100644 --- a/providers/merge-gateway/models/deepseek/deepseek-v4-pro-0423.toml +++ b/providers/merge-gateway/models/deepseek/deepseek-v4-pro-0423.toml @@ -1,5 +1,4 @@ base_model = "deepseek/deepseek-v4-pro-0423" -structured_output = false [[reasoning_options]] type = "toggle" diff --git a/providers/merge-gateway/models/deepseek/deepseek-v4-pro-0813.toml b/providers/merge-gateway/models/deepseek/deepseek-v4-pro-0813.toml index 62ea3890104..063b14797cb 100644 --- a/providers/merge-gateway/models/deepseek/deepseek-v4-pro-0813.toml +++ b/providers/merge-gateway/models/deepseek/deepseek-v4-pro-0813.toml @@ -1,5 +1,4 @@ base_model = "deepseek/deepseek-v4-pro-0813" -structured_output = false [[reasoning_options]] type = "toggle" @@ -9,6 +8,6 @@ type = "effort" values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [cost] -input = 0.66 -output = 1.98 -cache_read = 0.022 +input = 1.74 +output = 3.48 +cache_read = 0.003625 diff --git a/providers/merge-gateway/models/deepseek/deepseek-v4-pro.toml b/providers/merge-gateway/models/deepseek/deepseek-v4-pro.toml index 9de89a96505..c68cf8e2951 100644 --- a/providers/merge-gateway/models/deepseek/deepseek-v4-pro.toml +++ b/providers/merge-gateway/models/deepseek/deepseek-v4-pro.toml @@ -1,7 +1,6 @@ # Source: https://api-gateway.merge.dev/v1/models?model=deepseek%2Fdeepseek-v4-pro (accessed 2026-07-21) # Selected route reasoning.controls = ["thinking"], disable_supported = true. base_model = "deepseek/deepseek-v4-pro" -structured_output = false [interleaved] field = "reasoning_content" @@ -10,6 +9,9 @@ field = "reasoning_content" type = "toggle" [cost] -input = 0.66 -output = 1.98 -cache_read = 0.022 +input = 1.74 +output = 3.48 +cache_read = 0.145 + +[limit] +output = 262_000 diff --git a/providers/merge-gateway/models/deepseek/deepseek-v4.1-flash.toml b/providers/merge-gateway/models/deepseek/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..1e8fa5e5686 --- /dev/null +++ b/providers/merge-gateway/models/deepseek/deepseek-v4.1-flash.toml @@ -0,0 +1,13 @@ +base_model = "deepseek/deepseek-v4.1-flash" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.15 +output = 0.6 +cache_read = 0.003 diff --git a/providers/merge-gateway/models/google/gemini-2.5-computer-use-preview-10-2025.toml b/providers/merge-gateway/models/google/gemini-2.5-computer-use-preview-10-2025.toml index d00ff2e821e..eaaa6ecc7df 100644 --- a/providers/merge-gateway/models/google/gemini-2.5-computer-use-preview-10-2025.toml +++ b/providers/merge-gateway/models/google/gemini-2.5-computer-use-preview-10-2025.toml @@ -1,6 +1,6 @@ base_model = "google/gemini-2.5-computer-use-preview-10-2025" name = "Gemini 2.5 Computer Use Preview (10-2025)" -structured_output = false +structured_output = true reasoning_options = [] [cost] diff --git a/providers/merge-gateway/models/google/gemini-3.8-flash.toml b/providers/merge-gateway/models/google/gemini-3.8-flash.toml new file mode 100644 index 00000000000..c151d3854a2 --- /dev/null +++ b/providers/merge-gateway/models/google/gemini-3.8-flash.toml @@ -0,0 +1,7 @@ +base_model = "google/gemini-3.8-flash" +reasoning_options = [] + +[cost] +input = 0.75 +output = 3.75 +cache_read = 0.075 diff --git a/providers/merge-gateway/models/google/gemma-3-12b-it.toml b/providers/merge-gateway/models/google/gemma-3-12b-it.toml new file mode 100644 index 00000000000..3cc24f0d6df --- /dev/null +++ b/providers/merge-gateway/models/google/gemma-3-12b-it.toml @@ -0,0 +1,12 @@ +base_model = "google/gemma-3-12b-it" +name = "Gemma 3 12B" +tool_call = false +structured_output = false + +[cost] +input = 0.09 +output = 0.29 + +[limit] +context = 128_000 +output = 8_192 diff --git a/providers/merge-gateway/models/google/gemma-3-27b-it.toml b/providers/merge-gateway/models/google/gemma-3-27b-it.toml new file mode 100644 index 00000000000..8bbd7ddc235 --- /dev/null +++ b/providers/merge-gateway/models/google/gemma-3-27b-it.toml @@ -0,0 +1,15 @@ +base_model = "google/gemma-3-27b-it" +attachment = false +tool_call = false +structured_output = false + +[cost] +input = 0.08 +output = 0.45 +cache_read = 0.04 + +[limit] +output = 32_768 + +[modalities] +input = ["text"] diff --git a/providers/merge-gateway/models/google/gemma-3-4b-it.toml b/providers/merge-gateway/models/google/gemma-3-4b-it.toml new file mode 100644 index 00000000000..fb82eebfbed --- /dev/null +++ b/providers/merge-gateway/models/google/gemma-3-4b-it.toml @@ -0,0 +1,12 @@ +base_model = "google/gemma-3-4b-it" +name = "Gemma 3 4B" +tool_call = false +structured_output = false + +[cost] +input = 0.04 +output = 0.08 + +[limit] +context = 128_000 +output = 8_192 diff --git a/providers/merge-gateway/models/meta/llama-3.1-70b-instruct.toml b/providers/merge-gateway/models/meta/llama-3.1-70b-instruct.toml new file mode 100644 index 00000000000..1a6508d569e --- /dev/null +++ b/providers/merge-gateway/models/meta/llama-3.1-70b-instruct.toml @@ -0,0 +1,10 @@ +base_model = "meta/llama-3.1-70b-instruct" +name = "Llama 3.1 70B" +structured_output = false + +[cost] +input = 0.99 +output = 0.99 + +[limit] +output = 2_048 diff --git a/providers/merge-gateway/models/meta/llama-3.3-70b-instruct.toml b/providers/merge-gateway/models/meta/llama-3.3-70b-instruct.toml index 424d70a90d0..34420f94fab 100644 --- a/providers/merge-gateway/models/meta/llama-3.3-70b-instruct.toml +++ b/providers/merge-gateway/models/meta/llama-3.3-70b-instruct.toml @@ -1,8 +1,6 @@ # Source: https://api-gateway.merge.dev/v1/models?model=meta%2Fllama-3.3-70b-instruct (accessed 2026-07-21) - base_model = "meta/llama-3.3-70b-instruct" name = "Llama 3.3 70B Instruct" -attachment = false structured_output = false [cost] diff --git a/providers/merge-gateway/models/minimax/minimax-m2.1.toml b/providers/merge-gateway/models/minimax/minimax-m2.1.toml index 87d1dde34eb..7334a8d1552 100644 --- a/providers/merge-gateway/models/minimax/minimax-m2.1.toml +++ b/providers/merge-gateway/models/minimax/minimax-m2.1.toml @@ -1,8 +1,7 @@ # Source: https://api-gateway.merge.dev/v1/models?model=minimax%2Fminimax-m2.1 (accessed 2026-07-21) - base_model = "minimax/MiniMax-M2.1" name = "MiniMax M2.1" -structured_output = false +structured_output = true reasoning_options = [] [cost] diff --git a/providers/merge-gateway/models/minimax/minimax-m2.5-highspeed.toml b/providers/merge-gateway/models/minimax/minimax-m2.5-highspeed.toml index 7e4dc4ece19..8d3202d8c33 100644 --- a/providers/merge-gateway/models/minimax/minimax-m2.5-highspeed.toml +++ b/providers/merge-gateway/models/minimax/minimax-m2.5-highspeed.toml @@ -1,8 +1,7 @@ # Source: https://api-gateway.merge.dev/v1/models?model=minimax%2Fminimax-m2.5-highspeed (accessed 2026-07-21) - base_model = "minimax/MiniMax-M2.5-highspeed" name = "MiniMax M2.5 Highspeed" -structured_output = false +structured_output = true reasoning_options = [] [cost] diff --git a/providers/merge-gateway/models/minimax/minimax-m2.5.toml b/providers/merge-gateway/models/minimax/minimax-m2.5.toml index c2c6eccd75c..8f4320f5d56 100644 --- a/providers/merge-gateway/models/minimax/minimax-m2.5.toml +++ b/providers/merge-gateway/models/minimax/minimax-m2.5.toml @@ -1,8 +1,7 @@ # Source: https://api-gateway.merge.dev/v1/models?model=minimax%2Fminimax-m2.5 (accessed 2026-07-21) - base_model = "minimax/MiniMax-M2.5" name = "MiniMax M2.5" -structured_output = false +structured_output = true reasoning_options = [] [cost] diff --git a/providers/merge-gateway/models/minimax/minimax-m2.7-highspeed.toml b/providers/merge-gateway/models/minimax/minimax-m2.7-highspeed.toml index a8783c47c5d..1a16cd603e0 100644 --- a/providers/merge-gateway/models/minimax/minimax-m2.7-highspeed.toml +++ b/providers/merge-gateway/models/minimax/minimax-m2.7-highspeed.toml @@ -1,8 +1,7 @@ # Source: https://api-gateway.merge.dev/v1/models?model=minimax%2Fminimax-m2.7-highspeed (accessed 2026-07-21) - base_model = "minimax/MiniMax-M2.7-highspeed" name = "MiniMax M2.7 Highspeed" -structured_output = false +structured_output = true reasoning_options = [] [cost] diff --git a/providers/merge-gateway/models/minimax/minimax-m2.7.toml b/providers/merge-gateway/models/minimax/minimax-m2.7.toml index 296c2ddf4b5..d634a90e2d3 100644 --- a/providers/merge-gateway/models/minimax/minimax-m2.7.toml +++ b/providers/merge-gateway/models/minimax/minimax-m2.7.toml @@ -1,8 +1,7 @@ # Source: https://api-gateway.merge.dev/v1/models?model=minimax%2Fminimax-m2.7 (accessed 2026-07-21) - base_model = "minimax/MiniMax-M2.7" name = "MiniMax M2.7" -structured_output = false +structured_output = true reasoning_options = [] [cost] diff --git a/providers/merge-gateway/models/minimax/minimax-m2.toml b/providers/merge-gateway/models/minimax/minimax-m2.toml index 3b35af67523..75f762c9df6 100644 --- a/providers/merge-gateway/models/minimax/minimax-m2.toml +++ b/providers/merge-gateway/models/minimax/minimax-m2.toml @@ -1,7 +1,7 @@ # Source: https://api-gateway.merge.dev/v1/models?model=minimax%2Fminimax-m2 (accessed 2026-07-21) base_model = "minimax/MiniMax-M2" name = "MiniMax M2" -structured_output = false +structured_output = true reasoning_options = [] [cost] diff --git a/providers/merge-gateway/models/minimax/minimax-m3.toml b/providers/merge-gateway/models/minimax/minimax-m3.toml index c4c6f10cdf3..c78806e0ae1 100644 --- a/providers/merge-gateway/models/minimax/minimax-m3.toml +++ b/providers/merge-gateway/models/minimax/minimax-m3.toml @@ -1,7 +1,7 @@ # Source: https://api-gateway.merge.dev/v1/models?model=minimax%2Fminimax-m3 (accessed 2026-07-21) base_model = "minimax/MiniMax-M3" name = "MiniMax M3" -structured_output = false +structured_output = true [[reasoning_options]] type = "toggle" diff --git a/providers/merge-gateway/models/moonshot/kimi-k3.toml b/providers/merge-gateway/models/moonshot/kimi-k3.toml index 1e611952389..7e536155c8c 100644 --- a/providers/merge-gateway/models/moonshot/kimi-k3.toml +++ b/providers/merge-gateway/models/moonshot/kimi-k3.toml @@ -8,8 +8,8 @@ type = "effort" values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [cost] -input = 3 -output = 15 +input = 2.9 +output = 14 cache_read = 0.3 [limit] diff --git a/providers/merge-gateway/models/openai/gpt-4-turbo.toml b/providers/merge-gateway/models/openai/gpt-4-turbo.toml index 73a5a029045..a67aace8bc9 100644 --- a/providers/merge-gateway/models/openai/gpt-4-turbo.toml +++ b/providers/merge-gateway/models/openai/gpt-4-turbo.toml @@ -1,6 +1,6 @@ # Source: https://api-gateway.merge.dev/v1/models?model=openai%2Fgpt-4-turbo (accessed 2026-07-21) - base_model = "openai/gpt-4-turbo" +structured_output = true [cost] input = 10 diff --git a/providers/merge-gateway/models/openai/gpt-4o-2024-05-13.toml b/providers/merge-gateway/models/openai/gpt-4o-2024-05-13.toml index 06df984cfdf..d768c316752 100644 --- a/providers/merge-gateway/models/openai/gpt-4o-2024-05-13.toml +++ b/providers/merge-gateway/models/openai/gpt-4o-2024-05-13.toml @@ -1,7 +1,5 @@ # Source: https://api-gateway.merge.dev/v1/models?model=openai%2Fgpt-4o-2024-05-13 (accessed 2026-07-21) - base_model = "openai/gpt-4o-2024-05-13" -structured_output = false [cost] input = 5 diff --git a/providers/merge-gateway/models/openai/gpt-5.6-luna.toml b/providers/merge-gateway/models/openai/gpt-5.6-luna.toml index 0cbbb124685..9c9f16a4eeb 100644 --- a/providers/merge-gateway/models/openai/gpt-5.6-luna.toml +++ b/providers/merge-gateway/models/openai/gpt-5.6-luna.toml @@ -12,3 +12,4 @@ values = ["none", "low", "medium", "high", "xhigh", "max"] input = 0.2 output = 1.2 cache_read = 0.02 +cache_write = 0.25 diff --git a/providers/merge-gateway/models/openai/gpt-5.6-sol.toml b/providers/merge-gateway/models/openai/gpt-5.6-sol.toml index 6acd06e8bb8..762cacdb749 100644 --- a/providers/merge-gateway/models/openai/gpt-5.6-sol.toml +++ b/providers/merge-gateway/models/openai/gpt-5.6-sol.toml @@ -11,3 +11,4 @@ values = ["none", "low", "medium", "high", "xhigh", "max"] input = 5 output = 30 cache_read = 0.5 +cache_write = 5 diff --git a/providers/merge-gateway/models/openai/gpt-5.6-terra.toml b/providers/merge-gateway/models/openai/gpt-5.6-terra.toml index 1e8e3952eaf..a8492821213 100644 --- a/providers/merge-gateway/models/openai/gpt-5.6-terra.toml +++ b/providers/merge-gateway/models/openai/gpt-5.6-terra.toml @@ -12,3 +12,4 @@ values = ["none", "low", "medium", "high", "xhigh", "max"] input = 2 output = 12 cache_read = 0.2 +cache_write = 2.5 diff --git a/providers/merge-gateway/models/openai/gpt-6-astra.toml b/providers/merge-gateway/models/openai/gpt-6-astra.toml new file mode 100644 index 00000000000..da7cc6ca051 --- /dev/null +++ b/providers/merge-gateway/models/openai/gpt-6-astra.toml @@ -0,0 +1,14 @@ +base_model = "openai/gpt-6-astra" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[modalities] +input = ["text", "image"] diff --git a/providers/merge-gateway/models/openai/gpt-6-luna.toml b/providers/merge-gateway/models/openai/gpt-6-luna.toml new file mode 100644 index 00000000000..7b7f12548e8 --- /dev/null +++ b/providers/merge-gateway/models/openai/gpt-6-luna.toml @@ -0,0 +1,17 @@ +base_model = "openai/gpt-6-luna" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.1 +output = 0.5 +cache_read = 0.01 +cache_write = 0.125 + +[modalities] +input = ["text", "image"] diff --git a/providers/merge-gateway/models/openai/gpt-6-sol.toml b/providers/merge-gateway/models/openai/gpt-6-sol.toml new file mode 100644 index 00000000000..e0b3cd3f91b --- /dev/null +++ b/providers/merge-gateway/models/openai/gpt-6-sol.toml @@ -0,0 +1,17 @@ +base_model = "openai/gpt-6-sol" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 + +[modalities] +input = ["text", "image"] diff --git a/providers/merge-gateway/models/openai/gpt-oss-safeguard-20b.toml b/providers/merge-gateway/models/openai/gpt-oss-safeguard-20b.toml new file mode 100644 index 00000000000..a60a70b9ef9 --- /dev/null +++ b/providers/merge-gateway/models/openai/gpt-oss-safeguard-20b.toml @@ -0,0 +1,14 @@ +base_model = "openai/gpt-oss-safeguard-20b" +tool_call = false +structured_output = false +reasoning_options = [] + +[cost] +input = 0.07 +output = 0.2 +cache_read = 0 +cache_write = 0 + +[limit] +context = 4_096 +output = 4_096 diff --git a/providers/merge-gateway/models/qwen/qwen-flash.toml b/providers/merge-gateway/models/qwen/qwen-flash.toml index 800d7f1a840..ede6824a83a 100644 --- a/providers/merge-gateway/models/qwen/qwen-flash.toml +++ b/providers/merge-gateway/models/qwen/qwen-flash.toml @@ -1,6 +1,6 @@ # Source: https://api-gateway.merge.dev/v1/models?model=qwen%2Fqwen-flash (accessed 2026-07-21) base_model = "alibaba/qwen-flash" -structured_output = false +structured_output = true [[reasoning_options]] type = "toggle" diff --git a/providers/merge-gateway/models/qwen/qwen-plus.toml b/providers/merge-gateway/models/qwen/qwen-plus.toml index 60a8231c1cc..e6c1f46ca86 100644 --- a/providers/merge-gateway/models/qwen/qwen-plus.toml +++ b/providers/merge-gateway/models/qwen/qwen-plus.toml @@ -1,6 +1,6 @@ # Source: https://api-gateway.merge.dev/v1/models?model=qwen%2Fqwen-plus (accessed 2026-07-21) base_model = "alibaba/qwen-plus" -structured_output = false +structured_output = true [[reasoning_options]] type = "toggle" diff --git a/providers/merge-gateway/models/qwen/qwen3-235b-a22b.toml b/providers/merge-gateway/models/qwen/qwen3-235b-a22b.toml index d25433e2540..da7f4cacbff 100644 --- a/providers/merge-gateway/models/qwen/qwen3-235b-a22b.toml +++ b/providers/merge-gateway/models/qwen/qwen3-235b-a22b.toml @@ -1,7 +1,7 @@ # Source: https://api-gateway.merge.dev/v1/models?model=qwen%2Fqwen3-235b-a22b (accessed 2026-07-21) base_model = "alibaba/qwen3-235b-a22b" name = "Qwen3 235B A22B" -structured_output = false +structured_output = true [[reasoning_options]] type = "toggle" diff --git a/providers/merge-gateway/models/qwen/qwen3-30b-a3b.toml b/providers/merge-gateway/models/qwen/qwen3-30b-a3b.toml index 76084676532..5a9891d7a0e 100644 --- a/providers/merge-gateway/models/qwen/qwen3-30b-a3b.toml +++ b/providers/merge-gateway/models/qwen/qwen3-30b-a3b.toml @@ -1,5 +1,5 @@ base_model = "alibaba/qwen3-30b-a3b" -structured_output = false +structured_output = true [[reasoning_options]] type = "toggle" diff --git a/providers/merge-gateway/models/qwen/qwen3-coder-flash.toml b/providers/merge-gateway/models/qwen/qwen3-coder-flash.toml index 0fc7a0eddcb..ff224869997 100644 --- a/providers/merge-gateway/models/qwen/qwen3-coder-flash.toml +++ b/providers/merge-gateway/models/qwen/qwen3-coder-flash.toml @@ -1,6 +1,6 @@ # Source: https://api-gateway.merge.dev/v1/models?model=qwen%2Fqwen3-coder-flash (accessed 2026-07-21) base_model = "alibaba/qwen3-coder-flash" -structured_output = false +structured_output = true [cost] input = 0.144 diff --git a/providers/merge-gateway/models/qwen/qwen3-coder-plus.toml b/providers/merge-gateway/models/qwen/qwen3-coder-plus.toml index 11d24d63469..8f25aa3170a 100644 --- a/providers/merge-gateway/models/qwen/qwen3-coder-plus.toml +++ b/providers/merge-gateway/models/qwen/qwen3-coder-plus.toml @@ -1,6 +1,6 @@ # Source: https://api-gateway.merge.dev/v1/models?model=qwen%2Fqwen3-coder-plus (accessed 2026-07-21) base_model = "alibaba/qwen3-coder-plus" -structured_output = false +structured_output = true [cost] input = 0.574 diff --git a/providers/merge-gateway/models/qwen/qwen3-max.toml b/providers/merge-gateway/models/qwen/qwen3-max.toml index ad1210b88ad..858d3349fdb 100644 --- a/providers/merge-gateway/models/qwen/qwen3-max.toml +++ b/providers/merge-gateway/models/qwen/qwen3-max.toml @@ -1,6 +1,6 @@ # Source: https://api-gateway.merge.dev/v1/models?model=qwen%2Fqwen3-max (accessed 2026-07-21) base_model = "alibaba/qwen3-max" -structured_output = false +structured_output = true [cost] input = 0.359 diff --git a/providers/merge-gateway/models/qwen/qwen3-next-80b-a3b-instruct.toml b/providers/merge-gateway/models/qwen/qwen3-next-80b-a3b-instruct.toml index b94096ac22e..04fc76a7597 100644 --- a/providers/merge-gateway/models/qwen/qwen3-next-80b-a3b-instruct.toml +++ b/providers/merge-gateway/models/qwen/qwen3-next-80b-a3b-instruct.toml @@ -1,6 +1,6 @@ # Source: https://api-gateway.merge.dev/v1/models?model=qwen%2Fqwen3-next-80b-a3b-instruct (accessed 2026-07-21) base_model = "alibaba/qwen3-next-80b-a3b-instruct" -structured_output = false +structured_output = true [cost] input = 0.144 diff --git a/providers/merge-gateway/models/qwen/qwen3-vl-235b-a22b-instruct.toml b/providers/merge-gateway/models/qwen/qwen3-vl-235b-a22b-instruct.toml index 488fd9577a4..1d35975631a 100644 --- a/providers/merge-gateway/models/qwen/qwen3-vl-235b-a22b-instruct.toml +++ b/providers/merge-gateway/models/qwen/qwen3-vl-235b-a22b-instruct.toml @@ -1,6 +1,5 @@ base_model = "alibaba/qwen3-vl-235b-a22b-instruct" name = "Qwen3-VL 235B A22B Instruct" -structured_output = false [cost] input = 0.287 diff --git a/providers/merge-gateway/models/qwen/qwen3-vl-235b-a22b-thinking.toml b/providers/merge-gateway/models/qwen/qwen3-vl-235b-a22b-thinking.toml index 9651a10f77e..534d3c93920 100644 --- a/providers/merge-gateway/models/qwen/qwen3-vl-235b-a22b-thinking.toml +++ b/providers/merge-gateway/models/qwen/qwen3-vl-235b-a22b-thinking.toml @@ -1,6 +1,5 @@ base_model = "alibaba/qwen3-vl-235b-a22b-thinking" name = "Qwen3-VL 235B A22B Thinking" -structured_output = false [[reasoning_options]] type = "toggle" diff --git a/providers/merge-gateway/models/qwen/qwen3-vl-plus.toml b/providers/merge-gateway/models/qwen/qwen3-vl-plus.toml index 5b007d27718..3658b3c731b 100644 --- a/providers/merge-gateway/models/qwen/qwen3-vl-plus.toml +++ b/providers/merge-gateway/models/qwen/qwen3-vl-plus.toml @@ -1,7 +1,7 @@ # Source: https://api-gateway.merge.dev/v1/models?model=qwen%2Fqwen3-vl-plus (accessed 2026-07-21) base_model = "alibaba/qwen3-vl-plus" attachment = true -structured_output = false +structured_output = true reasoning_options = [] [cost] diff --git a/providers/merge-gateway/models/qwen/qwen3.5-122b-a10b.toml b/providers/merge-gateway/models/qwen/qwen3.5-122b-a10b.toml index 16d15cbb411..5ef98e7a3a0 100644 --- a/providers/merge-gateway/models/qwen/qwen3.5-122b-a10b.toml +++ b/providers/merge-gateway/models/qwen/qwen3.5-122b-a10b.toml @@ -1,7 +1,7 @@ # Source: https://api-gateway.merge.dev/v1/models?model=qwen%2Fqwen3.5-122b-a10b (accessed 2026-07-21) base_model = "alibaba/qwen3.5-122b-a10b" name = "Qwen3.5 122B A10B" -structured_output = false +attachment = false [[reasoning_options]] type = "toggle" @@ -12,8 +12,8 @@ output = 0.917 cache_read = 0.023 [limit] -context = 256_000 -output = 64_000 +context = 131_072 +output = 32_768 [modalities] -input = ["text", "image"] +input = ["text"] diff --git a/providers/merge-gateway/models/qwen/qwen3.5-27b.toml b/providers/merge-gateway/models/qwen/qwen3.5-27b.toml index 3ef83d21d9d..d7d8d42decc 100644 --- a/providers/merge-gateway/models/qwen/qwen3.5-27b.toml +++ b/providers/merge-gateway/models/qwen/qwen3.5-27b.toml @@ -1,6 +1,6 @@ # Source: https://api-gateway.merge.dev/v1/models?model=qwen%2Fqwen3.5-27b (accessed 2026-07-21) base_model = "alibaba/qwen3.5-27b" -structured_output = false +attachment = false [[reasoning_options]] type = "toggle" @@ -11,8 +11,8 @@ output = 0.688 cache_read = 0.0172 [limit] -context = 256_000 -output = 64_000 +context = 131_072 +output = 32_768 [modalities] -input = ["text", "image"] +input = ["text"] diff --git a/providers/merge-gateway/models/qwen/qwen3.5-35b-a3b.toml b/providers/merge-gateway/models/qwen/qwen3.5-35b-a3b.toml index b4bdd294444..f966f69d01c 100644 --- a/providers/merge-gateway/models/qwen/qwen3.5-35b-a3b.toml +++ b/providers/merge-gateway/models/qwen/qwen3.5-35b-a3b.toml @@ -2,7 +2,7 @@ # Selected route reasoning.controls = ["thinking"], disable_supported = true. base_model = "alibaba/qwen3.5-35b-a3b" name = "Qwen3.5 35B A3B" -structured_output = false +attachment = false [[reasoning_options]] type = "toggle" @@ -13,8 +13,8 @@ output = 0.459 cache_read = 0.020357 [limit] -context = 256_000 -output = 64_000 +context = 131_072 +output = 32_768 [modalities] -input = ["text", "image"] +input = ["text"] diff --git a/providers/merge-gateway/models/qwen/qwen3.5-397b-a17b.toml b/providers/merge-gateway/models/qwen/qwen3.5-397b-a17b.toml index 35e52350151..84592d1b8dd 100644 --- a/providers/merge-gateway/models/qwen/qwen3.5-397b-a17b.toml +++ b/providers/merge-gateway/models/qwen/qwen3.5-397b-a17b.toml @@ -3,7 +3,6 @@ base_model = "alibaba/qwen3.5-397b-a17b" name = "Qwen3.5 397B A17B" attachment = false -structured_output = false [[reasoning_options]] type = "toggle" diff --git a/providers/merge-gateway/models/qwen/qwen3.5-flash.toml b/providers/merge-gateway/models/qwen/qwen3.5-flash.toml index 7169f2ffc97..aa448d645ab 100644 --- a/providers/merge-gateway/models/qwen/qwen3.5-flash.toml +++ b/providers/merge-gateway/models/qwen/qwen3.5-flash.toml @@ -1,6 +1,5 @@ base_model = "alibaba/qwen3.5-flash" attachment = false -structured_output = false [[reasoning_options]] type = "toggle" diff --git a/providers/merge-gateway/models/qwen/qwen3.5-plus.toml b/providers/merge-gateway/models/qwen/qwen3.5-plus.toml index 3e86233bbd7..797948065e1 100644 --- a/providers/merge-gateway/models/qwen/qwen3.5-plus.toml +++ b/providers/merge-gateway/models/qwen/qwen3.5-plus.toml @@ -1,6 +1,6 @@ # Source: https://api-gateway.merge.dev/v1/models?model=qwen%2Fqwen3.5-plus (accessed 2026-07-21) base_model = "alibaba/qwen3.5-plus" -structured_output = false +structured_output = true [[reasoning_options]] type = "toggle" diff --git a/providers/merge-gateway/models/qwen/qwen3.6-35b-a3b.toml b/providers/merge-gateway/models/qwen/qwen3.6-35b-a3b.toml index 281db930778..f1fa86a3996 100644 --- a/providers/merge-gateway/models/qwen/qwen3.6-35b-a3b.toml +++ b/providers/merge-gateway/models/qwen/qwen3.6-35b-a3b.toml @@ -2,7 +2,6 @@ base_model = "alibaba/qwen3.6-35b-a3b" name = "Qwen3.6 35B A3B" attachment = false -structured_output = false [[reasoning_options]] type = "toggle" diff --git a/providers/merge-gateway/models/qwen/qwen3.6-flash.toml b/providers/merge-gateway/models/qwen/qwen3.6-flash.toml index b5c0bdfda0b..269b1a8b224 100644 --- a/providers/merge-gateway/models/qwen/qwen3.6-flash.toml +++ b/providers/merge-gateway/models/qwen/qwen3.6-flash.toml @@ -1,7 +1,6 @@ # Source: https://api-gateway.merge.dev/v1/models?model=qwen%2Fqwen3.6-flash (accessed 2026-07-21) base_model = "alibaba/qwen3.6-flash" attachment = false -structured_output = false [[reasoning_options]] type = "toggle" diff --git a/providers/merge-gateway/models/qwen/qwen3.6-max-preview.toml b/providers/merge-gateway/models/qwen/qwen3.6-max-preview.toml index abc8de8a662..26707800ab6 100644 --- a/providers/merge-gateway/models/qwen/qwen3.6-max-preview.toml +++ b/providers/merge-gateway/models/qwen/qwen3.6-max-preview.toml @@ -1,6 +1,6 @@ # Source: https://api-gateway.merge.dev/v1/models?model=qwen%2Fqwen3.6-max-preview (accessed 2026-07-21) base_model = "alibaba/qwen3.6-max-preview" -structured_output = false +structured_output = true reasoning_options = [] [cost] diff --git a/providers/merge-gateway/models/qwen/qwen3.6-plus.toml b/providers/merge-gateway/models/qwen/qwen3.6-plus.toml index 05999f0ce0f..75d339be349 100644 --- a/providers/merge-gateway/models/qwen/qwen3.6-plus.toml +++ b/providers/merge-gateway/models/qwen/qwen3.6-plus.toml @@ -2,7 +2,7 @@ # Selected route reasoning.controls = ["thinking"], disable_supported = true. base_model = "alibaba/qwen3.6-plus" attachment = false -structured_output = false +structured_output = true [[reasoning_options]] type = "toggle" diff --git a/providers/merge-gateway/models/qwen/qwen3.7-max.toml b/providers/merge-gateway/models/qwen/qwen3.7-max.toml index a719edc7dd2..f3a0658fe5a 100644 --- a/providers/merge-gateway/models/qwen/qwen3.7-max.toml +++ b/providers/merge-gateway/models/qwen/qwen3.7-max.toml @@ -1,6 +1,6 @@ # Source: https://api-gateway.merge.dev/v1/models?model=qwen%2Fqwen3.7-max (accessed 2026-07-21) base_model = "alibaba/qwen3.7-max" -structured_output = false +structured_output = true [[reasoning_options]] type = "toggle" diff --git a/providers/merge-gateway/models/qwen/qwen3.7-plus.toml b/providers/merge-gateway/models/qwen/qwen3.7-plus.toml index 516b5d39a49..e9dd354d93a 100644 --- a/providers/merge-gateway/models/qwen/qwen3.7-plus.toml +++ b/providers/merge-gateway/models/qwen/qwen3.7-plus.toml @@ -1,6 +1,6 @@ # Source: https://api-gateway.merge.dev/v1/models?model=qwen%2Fqwen3.7-plus (accessed 2026-07-21) base_model = "alibaba/qwen3.7-plus" -structured_output = false +structured_output = true reasoning_options = [] [cost] diff --git a/providers/merge-gateway/models/qwen/qwen3.8-max.toml b/providers/merge-gateway/models/qwen/qwen3.8-max.toml index b87024c4974..f79621f2711 100644 --- a/providers/merge-gateway/models/qwen/qwen3.8-max.toml +++ b/providers/merge-gateway/models/qwen/qwen3.8-max.toml @@ -1,5 +1,5 @@ base_model = "alibaba/qwen3.8-max" -structured_output = false +structured_output = true [[reasoning_options]] type = "toggle" diff --git a/providers/merge-gateway/models/sakana/fugu-ultra.toml b/providers/merge-gateway/models/sakana/fugu-ultra.toml index d1a2d6507ff..cdb82eedfdf 100644 --- a/providers/merge-gateway/models/sakana/fugu-ultra.toml +++ b/providers/merge-gateway/models/sakana/fugu-ultra.toml @@ -1,7 +1,10 @@ # Source: https://api-gateway.merge.dev/v1/models?model=sakana%2Ffugu-ultra (accessed 2026-07-21) base_model = "sakana/fugu-ultra" structured_output = false -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["high", "xhigh", "max"] [cost] input = 5 @@ -9,4 +12,4 @@ output = 30 cache_read = 0.5 [limit] -output = 250_000 +output = 128_000 diff --git a/providers/merge-gateway/models/xai/grok-4.6.toml b/providers/merge-gateway/models/xai/grok-4.6.toml index 7bd903104ea..1dee37c146c 100644 --- a/providers/merge-gateway/models/xai/grok-4.6.toml +++ b/providers/merge-gateway/models/xai/grok-4.6.toml @@ -5,6 +5,6 @@ type = "effort" values = ["low", "medium", "high", "xhigh"] [cost] -input = 1.5 -output = 4.5 -cache_read = 0.375 +input = 2 +output = 6 +cache_read = 0.5 diff --git a/providers/merge-gateway/models/xai/grok-4.7.toml b/providers/merge-gateway/models/xai/grok-4.7.toml new file mode 100644 index 00000000000..19465981ea7 --- /dev/null +++ b/providers/merge-gateway/models/xai/grok-4.7.toml @@ -0,0 +1,13 @@ +base_model = "xai/grok-4.7" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 2 +output = 6 +cache_read = 0.5 + +[modalities] +input = ["text", "image"] diff --git a/providers/merge-gateway/models/zai/glm-4.5v.toml b/providers/merge-gateway/models/zai/glm-4.5v.toml index 822f172a0ae..ec63ddc5966 100644 --- a/providers/merge-gateway/models/zai/glm-4.5v.toml +++ b/providers/merge-gateway/models/zai/glm-4.5v.toml @@ -1,9 +1,8 @@ # Source: https://api-gateway.merge.dev/v1/models?model=zai%2Fglm-4.5v (accessed 2026-07-21) - base_model = "zhipuai/glm-4.5v" name = "Glm 4.5V" +structured_output = true reasoning_options = [] -structured_output = false [cost] input = 0.6 diff --git a/providers/merge-gateway/models/zai/glm-5.3-flash.toml b/providers/merge-gateway/models/zai/glm-5.3-flash.toml index af6491a5296..4067b378b24 100644 --- a/providers/merge-gateway/models/zai/glm-5.3-flash.toml +++ b/providers/merge-gateway/models/zai/glm-5.3-flash.toml @@ -1,12 +1,11 @@ base_model = "zhipuai/glm-5.3-flash" name = "GLM-5.3 Flash" -structured_output = false [[reasoning_options]] type = "effort" values = ["low", "high", "max"] [cost] -input = 0.075 -output = 0.25 -cache_read = 0.015 +input = 0.015 +output = 0.05 +cache_read = 0.003 diff --git a/providers/merge-gateway/models/zai/glm-5.3.toml b/providers/merge-gateway/models/zai/glm-5.3.toml index 91a5bf985e4..9091b31da95 100644 --- a/providers/merge-gateway/models/zai/glm-5.3.toml +++ b/providers/merge-gateway/models/zai/glm-5.3.toml @@ -1,5 +1,4 @@ base_model = "zhipuai/glm-5.3" -structured_output = false [[reasoning_options]] type = "effort" diff --git a/providers/meta/models/muse-spark-1.1.toml b/providers/meta/models/muse-spark-1.1.toml index 78580fce3d0..d4a75e74f68 100644 --- a/providers/meta/models/muse-spark-1.1.toml +++ b/providers/meta/models/muse-spark-1.1.toml @@ -1,12 +1,17 @@ # Sources: +# https://dev.meta.ai/docs/models/ # https://ai.developer.meta.com/docs/getting-started/pricing-rate-limits/ # https://developer.meta.com/ai/resources/blog/build-with-muse-spark/ - base_model = "meta/muse-spark-1.1" -reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high", "xhigh"] }] +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] [cost] input = 1.25 output = 4.25 cache_read = 0.15 + +[limit] +context = 1_048_576 diff --git a/providers/meta/models/muse-spark-1.3-contributor.toml b/providers/meta/models/muse-spark-1.3-contributor.toml new file mode 100644 index 00000000000..264b2fada97 --- /dev/null +++ b/providers/meta/models/muse-spark-1.3-contributor.toml @@ -0,0 +1,16 @@ +# Sources: +# https://research.meta.ai/blog/introducing-muse-spark-1-3 +# https://dev.meta.ai/docs/models +# https://dev.meta.ai/docs/pricing-rate-limits +# https://openrouter.ai/meta/muse-spark-1.3-contributor (OpenRouter Meta-hosted catalog snapshot, 2026-09-02) +# Contributor tier prompts and completions may be used to improve Meta's products. + +base_model = "meta/muse-spark-1.3" +name = "Muse Spark 1.3 Contributor" + +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high", "xhigh"] }] + +[cost] +input = 0.10 +output = 0.20 +cache_read = 0.002 diff --git a/providers/meta/models/muse-spark-1.3.toml b/providers/meta/models/muse-spark-1.3.toml new file mode 100644 index 00000000000..fa41397fbca --- /dev/null +++ b/providers/meta/models/muse-spark-1.3.toml @@ -0,0 +1,16 @@ +# Sources: +# https://research.meta.ai/blog/introducing-muse-spark-1-3 +# https://dev.meta.ai/docs/pricing-rate-limits/ +# https://openrouter.ai/api/v1/models/meta/muse-spark-1.3/endpoints (Meta endpoint pricing; accessed 2026-09-02) +# Standard-tier rates match Muse Spark 1.2; Axios reports 1.3 priced the same as predecessor. +# https://dev.meta.ai/docs/reasoning.md (max is Standard-tier 1.3 only; verified 2026-09-04) +# Effort: reasoning_effort (Chat Completions) or reasoning.effort (Responses) = minimal|low|medium|high|xhigh|max + +base_model = "meta/muse-spark-1.3" + +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 1.25 +output = 4.25 +cache_read = 0.15 diff --git a/providers/minimax-cn-coding-plan/provider.toml b/providers/minimax-cn-coding-plan/provider.toml index b72447a7d59..28bd4e0b23d 100644 --- a/providers/minimax-cn-coding-plan/provider.toml +++ b/providers/minimax-cn-coding-plan/provider.toml @@ -1,5 +1,10 @@ -name = "MiniMax Token Plan (minimaxi.com)" +# China API host migrated from api.minimaxi.com → api.minimax.cn +# Sources: +# - https://platform.minimaxi.com/docs/guides/quickstart-preparation +# - https://platform.minimaxi.com/docs/token-plan/other-tools +# Anthropic-compatible base: https://api.minimax.cn/anthropic +name = "MiniMax Token Plan (minimax.cn)" env = ["MINIMAX_API_KEY"] npm = "@ai-sdk/anthropic" doc = "https://platform.minimaxi.com/docs/token-plan/intro" -api = "https://api.minimaxi.com/anthropic/v1" +api = "https://api.minimax.cn/anthropic/v1" diff --git a/providers/minimax-cn/provider.toml b/providers/minimax-cn/provider.toml index a72226e7345..2a75ce8de3a 100644 --- a/providers/minimax-cn/provider.toml +++ b/providers/minimax-cn/provider.toml @@ -1,5 +1,10 @@ -name = "MiniMax (minimaxi.com)" +# China API host migrated from api.minimaxi.com → api.minimax.cn +# Sources: +# - https://platform.minimaxi.com/docs/guides/quickstart-preparation +# - https://platform.minimaxi.com/docs/api-reference/text-anthropic-api +# Anthropic-compatible base: https://api.minimax.cn/anthropic +name = "MiniMax (minimax.cn)" env = ["MINIMAX_API_KEY"] npm = "@ai-sdk/anthropic" doc = "https://platform.minimaxi.com/docs/guides/quickstart" -api = "https://api.minimaxi.com/anthropic/v1" +api = "https://api.minimax.cn/anthropic/v1" diff --git a/providers/mistral/models/zai-glm-5-2.toml b/providers/mistral/models/zai-glm-5-2.toml index 3123d2e4883..2d3bc8af322 100644 --- a/providers/mistral/models/zai-glm-5-2.toml +++ b/providers/mistral/models/zai-glm-5-2.toml @@ -1,10 +1,13 @@ # Source: https://docs.mistral.ai/models/zai-glm-5-2 (accessed 2026-08-26) +# Effort: reasoning_effort = none|high|max. Verified live 2026-09-17: none +# disables thinking; low|medium map to high, xhigh maps to max (GLM-5.2 native +# mapping). Model reasons by default (default effort: max). base_model = "zhipuai/glm-5.2" status = "beta" [[reasoning_options]] type = "effort" -values = ["high", "max"] +values = ["none", "high", "max"] [cost] input = 1.40 diff --git a/providers/mistral/models/zai-glm-5-3.toml b/providers/mistral/models/zai-glm-5-3.toml new file mode 100644 index 00000000000..46a9c565458 --- /dev/null +++ b/providers/mistral/models/zai-glm-5-3.toml @@ -0,0 +1,13 @@ +# Source: https://docs.mistral.ai/models/zai-glm-5-3 (accessed 2026-09-17) +# Effort: reasoning_effort = low|high|max; GLM-5.3 native effective levels +# (unlike 5.2, low is a real level), served unmodified by Mistral. +base_model = "zhipuai/glm-5.3" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.40 +output = 4.40 +cache_read = 0.14 diff --git a/providers/modal/models/Qwen/Qwen3.8-2.4T-A95B.toml b/providers/modal/models/Qwen/Qwen3.8-2.4T-A95B.toml new file mode 100644 index 00000000000..af307963ce2 --- /dev/null +++ b/providers/modal/models/Qwen/Qwen3.8-2.4T-A95B.toml @@ -0,0 +1,25 @@ +# Modal Shared Endpoint model ID: Qwen/Qwen3.8-2.4T-A95B. +# Pricing is USD per 1M tokens: prompt $2.00, cached prompt $0.25, +# and completion $6.00. +# Modal documents text-only input, context up to 1,010,000 tokens, and +# adjustable reasoning effort with low, medium, and xhigh levels. +# https://modal.com/library/qwen/qwen3-8-max +# https://modal.com/blog/qwen3-8-2-4t-a95b-now-available-on-modal +# https://huggingface.co/Qwen/Qwen3.8-2.4T-A95B +base_model = "alibaba/qwen3.8-2.4t-a95b" +name = "Qwen3.8-Max" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 2.0 +output = 6.0 +cache_read = 0.25 + +[limit] +context = 1_010_000 diff --git a/providers/modal/models/zai-org/GLM-5.3-Flash.toml b/providers/modal/models/zai-org/GLM-5.3-Flash.toml new file mode 100644 index 00000000000..a4d4379375a --- /dev/null +++ b/providers/modal/models/zai-org/GLM-5.3-Flash.toml @@ -0,0 +1,24 @@ +# Modal Shared Endpoint model ID: zai-org/GLM-5.3-Flash. +# Pricing is USD per 1M tokens: prompt $0.45, cached prompt $0.09, +# and completion $1.50. +# Modal documents text, image, and video input with a 1M-token context window. +# Effort: reasoning_effort = low|high|max; defaults to max. +# https://modal.com/library/zai/glm-5-3-flash +# https://huggingface.co/zai-org/GLM-5.3-Flash +base_model = "zhipuai/glm-5.3-flash" +name = "GLM 5.3 Flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.45 +output = 1.5 +cache_read = 0.09 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/moonshotai-cn/models/kimi-k2-0711-preview.toml b/providers/moonshotai-cn/models/kimi-k2-0711-preview.toml deleted file mode 120000 index 8e4e60785e7..00000000000 --- a/providers/moonshotai-cn/models/kimi-k2-0711-preview.toml +++ /dev/null @@ -1 +0,0 @@ -../../moonshotai/models/kimi-k2-0711-preview.toml \ No newline at end of file diff --git a/providers/moonshotai-cn/models/kimi-k2-0905-preview.toml b/providers/moonshotai-cn/models/kimi-k2-0905-preview.toml deleted file mode 120000 index d74c6ce2f56..00000000000 --- a/providers/moonshotai-cn/models/kimi-k2-0905-preview.toml +++ /dev/null @@ -1 +0,0 @@ -../../moonshotai/models/kimi-k2-0905-preview.toml \ No newline at end of file diff --git a/providers/moonshotai-cn/models/kimi-k2-thinking-turbo.toml b/providers/moonshotai-cn/models/kimi-k2-thinking-turbo.toml deleted file mode 120000 index 1f1081c786a..00000000000 --- a/providers/moonshotai-cn/models/kimi-k2-thinking-turbo.toml +++ /dev/null @@ -1 +0,0 @@ -../../moonshotai/models/kimi-k2-thinking-turbo.toml \ No newline at end of file diff --git a/providers/moonshotai-cn/models/kimi-k2-thinking.toml b/providers/moonshotai-cn/models/kimi-k2-thinking.toml deleted file mode 120000 index 31cc2adf45b..00000000000 --- a/providers/moonshotai-cn/models/kimi-k2-thinking.toml +++ /dev/null @@ -1 +0,0 @@ -../../moonshotai/models/kimi-k2-thinking.toml \ No newline at end of file diff --git a/providers/moonshotai-cn/models/kimi-k2-turbo-preview.toml b/providers/moonshotai-cn/models/kimi-k2-turbo-preview.toml deleted file mode 120000 index f2e9b0093e5..00000000000 --- a/providers/moonshotai-cn/models/kimi-k2-turbo-preview.toml +++ /dev/null @@ -1 +0,0 @@ -../../moonshotai/models/kimi-k2-turbo-preview.toml \ No newline at end of file diff --git a/providers/moonshotai-cn/models/kimi-k2.5.toml b/providers/moonshotai-cn/models/kimi-k2.5.toml deleted file mode 120000 index ec89508b7cd..00000000000 --- a/providers/moonshotai-cn/models/kimi-k2.5.toml +++ /dev/null @@ -1 +0,0 @@ -../../moonshotai/models/kimi-k2.5.toml \ No newline at end of file diff --git a/providers/moonshotai/models/kimi-k2-0711-preview.toml b/providers/moonshotai/models/kimi-k2-0711-preview.toml deleted file mode 100644 index 81ef972cb71..00000000000 --- a/providers/moonshotai/models/kimi-k2-0711-preview.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Kimi K2 0711" -description = "Kimi model for long-context chat, coding, and agentic reasoning" -family = "kimi-k2" -release_date = "2025-07-14" -last_updated = "2025-07-14" -attachment = false -reasoning = false -temperature = true -tool_call = true -knowledge = "2024-10" -open_weights = true - -[cost] -input = 0.6 -output = 2.5 -cache_read = 0.15 - -[limit] -context = 131_072 -output = 16_384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/moonshotai/models/kimi-k2-0905-preview.toml b/providers/moonshotai/models/kimi-k2-0905-preview.toml deleted file mode 100644 index cab06b8acdd..00000000000 --- a/providers/moonshotai/models/kimi-k2-0905-preview.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Kimi K2 0905" -description = "Kimi model for long-context chat, coding, and agentic reasoning" -family = "kimi-k2" -release_date = "2025-09-05" -last_updated = "2025-09-05" -attachment = false -reasoning = false -temperature = true -tool_call = true -knowledge = "2024-10" -open_weights = true - -[cost] -input = 0.6 -output = 2.5 -cache_read = 0.15 - -[limit] -context = 262_144 -output = 262_144 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/moonshotai/models/kimi-k2-thinking-turbo.toml b/providers/moonshotai/models/kimi-k2-thinking-turbo.toml deleted file mode 100644 index 2f36a534239..00000000000 --- a/providers/moonshotai/models/kimi-k2-thinking-turbo.toml +++ /dev/null @@ -1,28 +0,0 @@ -name = "Kimi K2 Thinking Turbo" -description = "Kimi reasoning model for long-horizon research, planning, and tool use" -family = "kimi-thinking" -release_date = "2025-11-06" -last_updated = "2025-11-06" -attachment = false -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -knowledge = "2024-08" -open_weights = true - -[interleaved] -field = "reasoning_content" - -[cost] -input = 1.15 -output = 8 -cache_read = 0.15 - -[limit] -context = 262_144 -output = 262_144 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/moonshotai/models/kimi-k2-thinking.toml b/providers/moonshotai/models/kimi-k2-thinking.toml deleted file mode 100644 index ed8742f8f36..00000000000 --- a/providers/moonshotai/models/kimi-k2-thinking.toml +++ /dev/null @@ -1,28 +0,0 @@ -name = "Kimi K2 Thinking" -description = "Thinking Kimi model for slower research passes, planning, and hard technical questions" -family = "kimi-thinking" -release_date = "2025-11-06" -last_updated = "2025-11-06" -attachment = false -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -knowledge = "2024-08" -open_weights = true - -[interleaved] -field = "reasoning_content" - -[cost] -input = 0.6 -output = 2.5 -cache_read = 0.15 - -[limit] -context = 262_144 -output = 262_144 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/moonshotai/models/kimi-k2-turbo-preview.toml b/providers/moonshotai/models/kimi-k2-turbo-preview.toml deleted file mode 100644 index 262b7ad957e..00000000000 --- a/providers/moonshotai/models/kimi-k2-turbo-preview.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Kimi K2 Turbo" -description = "Fast Kimi model for responsive chat, coding help, and agent loops" -family = "kimi-k2" -release_date = "2025-09-05" -last_updated = "2025-09-05" -attachment = false -reasoning = false -temperature = true -tool_call = true -knowledge = "2024-10" -open_weights = true - -[cost] -input = 2.4 -output = 10 -cache_read = 0.6 - -[limit] -context = 262_144 -output = 262_144 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/moonshotai/models/kimi-k2.5.toml b/providers/moonshotai/models/kimi-k2.5.toml deleted file mode 100644 index cb64df827ce..00000000000 --- a/providers/moonshotai/models/kimi-k2.5.toml +++ /dev/null @@ -1,31 +0,0 @@ -name = "Kimi K2.5" -description = "Earlier Kimi frontier model for long-context agents, coding, and multimodal work" -family = "kimi-k2" -release_date = "2026-01" -last_updated = "2026-01" -attachment = false -reasoning = true -structured_output = true -temperature = false -tool_call = true -knowledge = "2025-01" -open_weights = true - -[interleaved] -field = "reasoning_content" - -[[reasoning_options]] -type = "toggle" - -[cost] -input = 0.6 -output = 3.0 -cache_read = 0.1 - -[limit] -context = 262_144 -output = 262_144 - -[modalities] -input = ["text", "image", "video"] -output = ["text"] diff --git a/providers/nan/logo.svg b/providers/nan/logo.svg new file mode 100644 index 00000000000..04bead3f0e2 --- /dev/null +++ b/providers/nan/logo.svg @@ -0,0 +1 @@ + diff --git a/providers/nan/models/deepseek-v4-flash.toml b/providers/nan/models/deepseek-v4-flash.toml new file mode 100644 index 00000000000..3a5176c1d84 --- /dev/null +++ b/providers/nan/models/deepseek-v4-flash.toml @@ -0,0 +1,19 @@ +# Source: https://nan.builders/docs/models (accessed 2026-09-11) +# NaN documents this id as the Vision-Exp variant, but the endpoint serves +# DeepSeek V4.1 Flash. Evidence (2026-09-11): forced-choice self-identification +# with randomized option order returned deepseek/deepseek-v4.1-flash 8/8; the id +# deepseek-v4.1-flash is not directly callable here (401) while deepseek-v4-flash +# is, matching DeepSeek's own legacy alias +# (providers/deepseek/models/deepseek-v4-flash.toml). The model takes images +# (text+image), consistent with V4.1 Flash; NaN serves open-weight models, which +# V4.1 Flash is (MIT) and the experimental Vision-Exp entry is not. +# 1M token context, 3B token monthly quota per member, 1.5M tpm. Included in the +# membership, so no per-token price. +# Reasoning: no caller control on this surface; NaN's request examples document +# no reasoning field and reasoning_effort/thinking produced no measurable effect. +base_model = "deepseek/deepseek-v4.1-flash" +reasoning_options = [] + +[cost] +input = 0 +output = 0 diff --git a/providers/nan/models/gemma4.toml b/providers/nan/models/gemma4.toml new file mode 100644 index 00000000000..b457c6aca22 --- /dev/null +++ b/providers/nan/models/gemma4.toml @@ -0,0 +1,14 @@ +# Source: https://nan.builders/docs/models (accessed 2026-09-11) +# 26B-A4B MoE, FP8, 256K token context, multimodal with vision, XML tool +# calling, 1.5M tpm. Sampling defaults temp=0.6, top_p=0.95. +# Included in the membership, so no per-token price. +# Toggle: `reasoning_config={}` in the request body enables reasoning mode -- +# the only reasoning field NaN documents. No graded effort. +base_model = "google/gemma-4-26b-a4b-it" + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0 +output = 0 diff --git a/providers/nan/models/glm5.3-flash.toml b/providers/nan/models/glm5.3-flash.toml new file mode 100644 index 00000000000..7a7e51240b7 --- /dev/null +++ b/providers/nan/models/glm5.3-flash.toml @@ -0,0 +1,15 @@ +# Source: https://nan.builders/docs/models (accessed 2026-09-11) +# 320B-18B MoE, FP8, natively multimodal. 1M token context. 2B token monthly +# quota per member. MIT license. Input is text and image on this host: no video +# or PDF. Included in the membership, so no per-token price. +# Reasoning: no caller control on this surface. NaN lists a reasoning mode but +# exposes no request field for it. +base_model = "zhipuai/glm-5.3-flash" +reasoning_options = [] + +[cost] +input = 0 +output = 0 + +[modalities] +input = ["text", "image"] diff --git a/providers/nan/models/glm5.3.toml b/providers/nan/models/glm5.3.toml new file mode 100644 index 00000000000..0bdc1abc4ad --- /dev/null +++ b/providers/nan/models/glm5.3.toml @@ -0,0 +1,14 @@ +# Source: https://nan.builders/docs/models (accessed 2026-09-11) +# ~753B MoE, FP8, sparse attention, text only: it does not take images. +# Premium tier: callable only with a key on the GLM 5.3 premium membership. +# 1M token context, 3,000M token quota per billing period, capped at 400M tokens +# per rolling 4h window, 5 concurrent requests. Included in the tier, so no +# per-token price. +# Reasoning: no caller control on this surface. NaN documents a reasoning trace +# but no request field for it. +base_model = "zhipuai/glm-5.3" +reasoning_options = [] + +[cost] +input = 0 +output = 0 diff --git a/providers/nan/models/mimo-v2.5.toml b/providers/nan/models/mimo-v2.5.toml new file mode 100644 index 00000000000..e14eac593f0 --- /dev/null +++ b/providers/nan/models/mimo-v2.5.toml @@ -0,0 +1,16 @@ +# Source: https://nan.builders/docs/models (accessed 2026-09-11) +# 310B-15B MoE, FP8, natively omnimodal with dedicated vision and audio encoders. +# 1M token context, 1.0B token monthly quota per member, 1.5M tpm. MIT license. +# Input is text, image and audio on this host: no video. Included in the +# membership, so no per-token price. +# Reasoning: no caller control on this surface. NaN lists a reasoning mode +# (recommends max_tokens >= 300) but exposes no request field for it. +base_model = "xiaomi/mimo-v2.5" +reasoning_options = [] + +[cost] +input = 0 +output = 0 + +[modalities] +input = ["text", "image", "audio"] diff --git a/providers/nan/models/qwen3.6.toml b/providers/nan/models/qwen3.6.toml new file mode 100644 index 00000000000..72da1d4c294 --- /dev/null +++ b/providers/nan/models/qwen3.6.toml @@ -0,0 +1,18 @@ +# Source: https://nan.builders/docs/models (accessed 2026-09-11) +# Flagship model. 35B total MoE, 3B active per token, FP8, 256K token context, +# multimodal with vision, XML tool calling, MTP speculative decoding +# (~2x throughput), 1.5M tpm. Sampling defaults temp=0.6, top_p=0.95. +# Included in the membership, so no per-token price. +# Toggle: `reasoning_config={}` in the request body enables reasoning mode -- +# the only reasoning field NaN documents. No graded effort. +base_model = "alibaba/qwen3.6-35b-a3b" + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0 +output = 0 + +[modalities] +input = ["text", "image"] diff --git a/providers/nan/models/qwen3.8-flash.toml b/providers/nan/models/qwen3.8-flash.toml new file mode 100644 index 00000000000..072346dc409 --- /dev/null +++ b/providers/nan/models/qwen3.8-flash.toml @@ -0,0 +1,18 @@ +# Source: https://nan.builders/docs/models (accessed 2026-09-11) +# 125B-6B MoE, multimodal with vision, 262K token context (the model's native +# window), 500M token monthly quota per member. qwen-community-1.0 license. +# Included in the membership, so no per-token price. +# Reasoning: on by default, with no caller control on this surface. NaN exposes +# no request field to disable it. +base_model = "alibaba/qwen3.8-flash" +reasoning_options = [] + +[cost] +input = 0 +output = 0 + +[limit] +context = 262_144 + +[modalities] +input = ["text", "image"] diff --git a/providers/nan/provider.toml b/providers/nan/provider.toml new file mode 100644 index 00000000000..c47082dd0d3 --- /dev/null +++ b/providers/nan/provider.toml @@ -0,0 +1,11 @@ +# NaN is a builders community that shares dedicated GPUs to serve open-weight models. +# Access is via LiteLLM with an OpenAI-compatible API at https://api.nan.builders/v1. +# Membership based (70 EUR/month, plus a GLM 5.3 premium tier), so +# per-token cost is 0: usage is metered as monthly token quotas, not billed per token. +# Rate limits: 60 rpm and 5 concurrent requests per API key. +# https://nan.builders/docs/getting-started (accessed 2026-09-03) +name = "NaN" +env = ["NAN_API_KEY"] +npm = "@ai-sdk/openai-compatible" +api = "https://api.nan.builders/v1" +doc = "https://nan.builders/docs/models" diff --git a/providers/nano-gpt/models/Baichuan-M2.toml b/providers/nano-gpt/models/Baichuan-M2.toml deleted file mode 100644 index 4e7ccc5c1c8..00000000000 --- a/providers/nano-gpt/models/Baichuan-M2.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Baichuan M2 32B Medical" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "baichuan" -release_date = "2025-08-19" -last_updated = "2025-08-19" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 15.73 -output = 15.73 -cache_read = 7.865 - -[limit] -context = 32_768 -input = 32_768 -output = 32_768 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/Baichuan4-Air.toml b/providers/nano-gpt/models/Baichuan4-Air.toml deleted file mode 100644 index 265ce6975db..00000000000 --- a/providers/nano-gpt/models/Baichuan4-Air.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Baichuan 4 Air" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "baichuan" -release_date = "2025-08-19" -last_updated = "2025-08-19" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 0.157 -output = 0.157 -cache_read = 0.0785 - -[limit] -context = 32_768 -input = 32_768 -output = 32_768 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/Baichuan4-Turbo.toml b/providers/nano-gpt/models/Baichuan4-Turbo.toml deleted file mode 100644 index e07eb628d42..00000000000 --- a/providers/nano-gpt/models/Baichuan4-Turbo.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Baichuan 4 Turbo" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "baichuan" -release_date = "2025-08-19" -last_updated = "2025-08-19" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 2.42 -output = 2.42 -cache_read = 1.21 - -[limit] -context = 128_000 -input = 128_000 -output = 32_768 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/Doctor-Shotgun/MS3.2-24B-Magnum-Diamond.toml b/providers/nano-gpt/models/Doctor-Shotgun/MS3.2-24B-Magnum-Diamond.toml index e6f30b6dafe..1b216b2d0aa 100644 --- a/providers/nano-gpt/models/Doctor-Shotgun/MS3.2-24B-Magnum-Diamond.toml +++ b/providers/nano-gpt/models/Doctor-Shotgun/MS3.2-24B-Magnum-Diamond.toml @@ -15,8 +15,8 @@ output = 0.493 cache_read = 0.2465 [limit] -context = 16_384 -input = 16_384 +context = 32_768 +input = 32_768 output = 32_768 [modalities] diff --git a/providers/nano-gpt/models/EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.0.toml b/providers/nano-gpt/models/EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.0.toml index 539fa619452..698aeb18841 100644 --- a/providers/nano-gpt/models/EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.0.toml +++ b/providers/nano-gpt/models/EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.0.toml @@ -15,8 +15,8 @@ output = 2.006 cache_read = 1.003 [limit] -context = 16_384 -input = 16_384 +context = 32_768 +input = 32_768 output = 16_384 [modalities] diff --git a/providers/nano-gpt/models/EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.1.toml b/providers/nano-gpt/models/EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.1.toml index a776453d756..3de002b8cf5 100644 --- a/providers/nano-gpt/models/EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.1.toml +++ b/providers/nano-gpt/models/EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.1.toml @@ -15,8 +15,8 @@ output = 2.006 cache_read = 1.003 [limit] -context = 16_384 -input = 16_384 +context = 32_768 +input = 32_768 output = 16_384 [modalities] diff --git a/providers/nano-gpt/models/Gemma-4-26B-A4B-MeroMero.toml b/providers/nano-gpt/models/Gemma-4-26B-A4B-MeroMero.toml index 1c6b8a983e9..085bb305a2c 100644 --- a/providers/nano-gpt/models/Gemma-4-26B-A4B-MeroMero.toml +++ b/providers/nano-gpt/models/Gemma-4-26B-A4B-MeroMero.toml @@ -1,7 +1,7 @@ name = "Gemma 4 26B A4B MeroMero" description = "Gemma 4 26B A4B MeroMero is an NVFP4 multimodal mixture-of-experts fine-tune for emotive dialogue, relationship scenes, creative writing, and roleplay." family = "gemma" -release_date = "2026-08-26" +release_date = "2026-07-29" last_updated = "2026-08-26" attachment = true reasoning = true @@ -11,9 +11,9 @@ open_weights = true reasoning_options = [] [cost] -input = 0.08 -output = 0.33 -cache_read = 0.04 +input = 0.12 +output = 0.38 +cache_read = 0.06 [limit] context = 262_144 diff --git a/providers/nano-gpt/models/Gemma-4-26B-A4B-MeroMero:thinking.toml b/providers/nano-gpt/models/Gemma-4-26B-A4B-MeroMero:thinking.toml index b02e770fbc4..bc7e93d87e3 100644 --- a/providers/nano-gpt/models/Gemma-4-26B-A4B-MeroMero:thinking.toml +++ b/providers/nano-gpt/models/Gemma-4-26B-A4B-MeroMero:thinking.toml @@ -1,7 +1,7 @@ name = "Gemma 4 26B A4B MeroMero Thinking" description = "Gemma 4 26B A4B MeroMero with thinking enabled for more deliberate emotive dialogue, relationship scenes, creative writing, and multimodal roleplay." family = "gemma" -release_date = "2026-08-26" +release_date = "2026-07-29" last_updated = "2026-08-26" attachment = true reasoning = true @@ -11,9 +11,9 @@ open_weights = true reasoning_options = [] [cost] -input = 0.08 -output = 0.33 -cache_read = 0.04 +input = 0.12 +output = 0.38 +cache_read = 0.06 [limit] context = 262_144 diff --git a/providers/nano-gpt/models/Gemma-4-31B-MeroMero-v2.toml b/providers/nano-gpt/models/Gemma-4-31B-MeroMero-v2.toml index 9b5c3938098..c848256aa1a 100644 --- a/providers/nano-gpt/models/Gemma-4-31B-MeroMero-v2.toml +++ b/providers/nano-gpt/models/Gemma-4-31B-MeroMero-v2.toml @@ -1,7 +1,7 @@ name = "Gemma 4 31B MeroMero v2" description = "Gemma 4 31B MeroMero v2 is a LoRA finetune for emotive dialogue, relationship scenes, creative writing, and multimodal roleplay." family = "gemma" -release_date = "2026-08-23" +release_date = "2026-07-29" last_updated = "2026-08-23" attachment = true reasoning = true @@ -11,9 +11,9 @@ open_weights = true reasoning_options = [] [cost] -input = 0.08 -output = 0.33 -cache_read = 0.04 +input = 0.1 +output = 0.45 +cache_read = 0.05 [limit] context = 262_144 diff --git a/providers/nano-gpt/models/Gemma-4-31B-MeroMero-v2:thinking.toml b/providers/nano-gpt/models/Gemma-4-31B-MeroMero-v2:thinking.toml index 378a06ef51c..04d1ed8eadb 100644 --- a/providers/nano-gpt/models/Gemma-4-31B-MeroMero-v2:thinking.toml +++ b/providers/nano-gpt/models/Gemma-4-31B-MeroMero-v2:thinking.toml @@ -1,7 +1,7 @@ name = "Gemma 4 31B MeroMero v2 Thinking" description = "Gemma 4 31B MeroMero v2 with thinking enabled for more deliberate emotive dialogue, relationship scenes, creative writing, and multimodal roleplay." family = "gemma" -release_date = "2026-08-24" +release_date = "2026-07-29" last_updated = "2026-08-24" attachment = true reasoning = true @@ -11,9 +11,9 @@ open_weights = true reasoning_options = [] [cost] -input = 0.08 -output = 0.33 -cache_read = 0.04 +input = 0.1 +output = 0.45 +cache_read = 0.05 [limit] context = 262_144 diff --git a/providers/nano-gpt/models/Gryphe/MythoMax-L2-13b.toml b/providers/nano-gpt/models/Gryphe/MythoMax-L2-13b.toml index 7ef3547c0ea..5345194c389 100644 --- a/providers/nano-gpt/models/Gryphe/MythoMax-L2-13b.toml +++ b/providers/nano-gpt/models/Gryphe/MythoMax-L2-13b.toml @@ -15,9 +15,9 @@ output = 0.1003 cache_read = 0.05015 [limit] -context = 4_000 -input = 4_000 -output = 4_096 +context = 4_096 +input = 4_096 +output = 3_686 [modalities] input = ["text"] diff --git a/providers/nano-gpt/models/LatitudeGames/Wayfarer-Large-70B-Llama-3.3.toml b/providers/nano-gpt/models/LatitudeGames/Wayfarer-Large-70B-Llama-3.3.toml index d1c7072ed87..7ae5f729bb8 100644 --- a/providers/nano-gpt/models/LatitudeGames/Wayfarer-Large-70B-Llama-3.3.toml +++ b/providers/nano-gpt/models/LatitudeGames/Wayfarer-Large-70B-Llama-3.3.toml @@ -15,8 +15,8 @@ output = 0.7 cache_read = 0.35 [limit] -context = 16_384 -input = 16_384 +context = 32_768 +input = 32_768 output = 16_384 [modalities] diff --git a/providers/nano-gpt/models/NousResearch/Hermes-4-70B:thinking.toml b/providers/nano-gpt/models/NousResearch/Hermes-4-70B:thinking.toml deleted file mode 100644 index a207e324b43..00000000000 --- a/providers/nano-gpt/models/NousResearch/Hermes-4-70B:thinking.toml +++ /dev/null @@ -1,25 +0,0 @@ -# Included in subscription -name = "Hermes 4 (Thinking)" -description = "General-purpose chat model for instruction following, writing, and analysis" -family = "nousresearch" -release_date = "2025-09-17" -last_updated = "2025-09-17" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = true - -[cost] -input = 0.2006 -output = 0.3995 -cache_read = 0.1003 - -[limit] -context = 128_000 -input = 128_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/NousResearch/hermes-4-70b.toml b/providers/nano-gpt/models/NousResearch/hermes-4-70b.toml deleted file mode 100644 index 96dd6842d7f..00000000000 --- a/providers/nano-gpt/models/NousResearch/hermes-4-70b.toml +++ /dev/null @@ -1,25 +0,0 @@ -# Included in subscription -name = "Hermes 4 Medium" -description = "General-purpose chat model for instruction following, writing, and analysis" -family = "nousresearch" -release_date = "2025-07-03" -last_updated = "2025-07-03" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = true - -[cost] -input = 0.2006 -output = 0.3995 -cache_read = 0.1003 - -[limit] -context = 128_000 -input = 128_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/ReadyArt/MS3.2-The-Omega-Directive-24B-Unslop-v2.0.toml b/providers/nano-gpt/models/ReadyArt/MS3.2-The-Omega-Directive-24B-Unslop-v2.0.toml index b465cf58bb5..b492b8276d3 100644 --- a/providers/nano-gpt/models/ReadyArt/MS3.2-The-Omega-Directive-24B-Unslop-v2.0.toml +++ b/providers/nano-gpt/models/ReadyArt/MS3.2-The-Omega-Directive-24B-Unslop-v2.0.toml @@ -15,8 +15,8 @@ output = 0.5 cache_read = 0.25 [limit] -context = 16_384 -input = 16_384 +context = 32_768 +input = 32_768 output = 32_768 [modalities] diff --git a/providers/nano-gpt/models/Sao10K/L3.1-70B-Hanami-x1.toml b/providers/nano-gpt/models/Sao10K/L3.1-70B-Hanami-x1.toml index ca81d94e690..6aebe0fe20b 100644 --- a/providers/nano-gpt/models/Sao10K/L3.1-70B-Hanami-x1.toml +++ b/providers/nano-gpt/models/Sao10K/L3.1-70B-Hanami-x1.toml @@ -15,8 +15,8 @@ output = 0.493 cache_read = 0.2465 [limit] -context = 16_384 -input = 16_384 +context = 32_768 +input = 32_768 output = 16_384 [modalities] diff --git a/providers/nano-gpt/models/Steelskull/L3.3-Cu-Mai-R1-70b.toml b/providers/nano-gpt/models/Steelskull/L3.3-Cu-Mai-R1-70b.toml index 449b394b5b4..1b9b19b5e64 100644 --- a/providers/nano-gpt/models/Steelskull/L3.3-Cu-Mai-R1-70b.toml +++ b/providers/nano-gpt/models/Steelskull/L3.3-Cu-Mai-R1-70b.toml @@ -15,8 +15,8 @@ output = 0.493 cache_read = 0.2465 [limit] -context = 16_384 -input = 16_384 +context = 32_768 +input = 32_768 output = 16_384 [modalities] diff --git a/providers/nano-gpt/models/Steelskull/L3.3-Electra-R1-70b.toml b/providers/nano-gpt/models/Steelskull/L3.3-Electra-R1-70b.toml index a8966b4cb59..ecd8bdf659d 100644 --- a/providers/nano-gpt/models/Steelskull/L3.3-Electra-R1-70b.toml +++ b/providers/nano-gpt/models/Steelskull/L3.3-Electra-R1-70b.toml @@ -15,8 +15,8 @@ output = 0.69989 cache_read = 0.349945 [limit] -context = 16_384 -input = 16_384 +context = 32_768 +input = 32_768 output = 16_384 [modalities] diff --git a/providers/nano-gpt/models/Steelskull/L3.3-MS-Evayale-70B.toml b/providers/nano-gpt/models/Steelskull/L3.3-MS-Evayale-70B.toml deleted file mode 100644 index a446e987fbd..00000000000 --- a/providers/nano-gpt/models/Steelskull/L3.3-MS-Evayale-70B.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Evayale 70b " -description = "Open Llama instruction model for multilingual chat, reasoning, and coding" -family = "llama" -release_date = "2024-01-01" -last_updated = "2024-12-06" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = true - -[cost] -input = 0.493 -output = 0.493 -cache_read = 0.2465 - -[limit] -context = 16_384 -input = 16_384 -output = 16_384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/Steelskull/L3.3-MS-Nevoria-70b.toml b/providers/nano-gpt/models/Steelskull/L3.3-MS-Nevoria-70b.toml index 416ea29ff99..bfaee82a467 100644 --- a/providers/nano-gpt/models/Steelskull/L3.3-MS-Nevoria-70b.toml +++ b/providers/nano-gpt/models/Steelskull/L3.3-MS-Nevoria-70b.toml @@ -15,8 +15,8 @@ output = 0.493 cache_read = 0.2465 [limit] -context = 16_384 -input = 16_384 +context = 32_768 +input = 32_768 output = 16_384 [modalities] diff --git a/providers/nano-gpt/models/Steelskull/L3.3-Nevoria-R1-70b.toml b/providers/nano-gpt/models/Steelskull/L3.3-Nevoria-R1-70b.toml index 596436d3fca..cdd4ff13a24 100644 --- a/providers/nano-gpt/models/Steelskull/L3.3-Nevoria-R1-70b.toml +++ b/providers/nano-gpt/models/Steelskull/L3.3-Nevoria-R1-70b.toml @@ -15,8 +15,8 @@ output = 0.493 cache_read = 0.2465 [limit] -context = 16_384 -input = 16_384 +context = 32_768 +input = 32_768 output = 16_384 [modalities] diff --git a/providers/nano-gpt/models/TEE/deepseek-v4-flash.toml b/providers/nano-gpt/models/TEE/deepseek-v4-flash.toml deleted file mode 100644 index da0ae193f80..00000000000 --- a/providers/nano-gpt/models/TEE/deepseek-v4-flash.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "deepseek/deepseek-v4-flash" -name = "DeepSeek V4 Flash TEE" -reasoning_options = [] - -[cost] -input = 0.2 -output = 0.4 -cache_read = 0.04 - -[limit] -context = 1_048_576 -input = 1_048_576 -output = 1_048_576 diff --git a/providers/nano-gpt/models/TEE/deepseek-v4.1-flash.toml b/providers/nano-gpt/models/TEE/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..1ebcfb3ebac --- /dev/null +++ b/providers/nano-gpt/models/TEE/deepseek-v4.1-flash.toml @@ -0,0 +1,15 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash TEE" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[cost] +input = 0.65 +output = 1.45 +cache_read = 0.13 + +[limit] +context = 1_048_576 +input = 1_048_576 diff --git a/providers/nano-gpt/models/TEE/gemma-3-27b-it.toml b/providers/nano-gpt/models/TEE/gemma-3-27b-it.toml deleted file mode 100644 index 548643348ac..00000000000 --- a/providers/nano-gpt/models/TEE/gemma-3-27b-it.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Gemma 3 27B TEE" -description = "Open Gemma instruction model for efficient chat and self-hosted deployments" -family = "gemma" -release_date = "2024-01-01" -last_updated = "2025-03-10" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = true - -[cost] -input = 0.2 -output = 0.8 -cache_read = 0.1 - -[limit] -context = 131_072 -input = 131_072 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/TEE/gemma-4-26b-a4b-uncensored.toml b/providers/nano-gpt/models/TEE/gemma-4-26b-a4b-uncensored.toml index ec1f0e921b2..9eb99c7f733 100644 --- a/providers/nano-gpt/models/TEE/gemma-4-26b-a4b-uncensored.toml +++ b/providers/nano-gpt/models/TEE/gemma-4-26b-a4b-uncensored.toml @@ -4,7 +4,7 @@ description = "Open Gemma instruction model for efficient chat and self-hosted d family = "gemma" release_date = "2026-05-23" last_updated = "2026-05-23" -attachment = true +attachment = false reasoning = false tool_call = true structured_output = true @@ -21,5 +21,5 @@ input = 65_536 output = 65_536 [modalities] -input = ["text", "image"] +input = ["text"] output = ["text"] diff --git a/providers/nano-gpt/models/TEE/glm-4.7.toml b/providers/nano-gpt/models/TEE/glm-4.7.toml deleted file mode 100644 index 30b32ec9a5d..00000000000 --- a/providers/nano-gpt/models/TEE/glm-4.7.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "zhipuai/glm-4.7" -name = "GLM 4.7 TEE" -reasoning = false -tool_call = false -structured_output = false - -[cost] -input = 0.85 -output = 3.3 -cache_read = 0.425 - -[limit] -context = 131_000 -input = 131_000 -output = 65_535 diff --git a/providers/nano-gpt/models/TEE/glm-5.2.toml b/providers/nano-gpt/models/TEE/glm-5.2.toml index e47df3b05ad..d13661c5591 100644 --- a/providers/nano-gpt/models/TEE/glm-5.2.toml +++ b/providers/nano-gpt/models/TEE/glm-5.2.toml @@ -4,8 +4,8 @@ reasoning_options = [] [cost] input = 1.4 -output = 4.6 -cache_read = 0.5 +output = 4.4 +cache_read = 0.7 [limit] context = 1_048_576 diff --git a/providers/nano-gpt/models/TEE/glm-5.2:thinking.toml b/providers/nano-gpt/models/TEE/glm-5.2:thinking.toml index 5e70a8d829d..25c9de217ca 100644 --- a/providers/nano-gpt/models/TEE/glm-5.2:thinking.toml +++ b/providers/nano-gpt/models/TEE/glm-5.2:thinking.toml @@ -7,8 +7,8 @@ values = ["low", "medium", "high", "xhigh", "max"] [cost] input = 1.4 -output = 4.6 -cache_read = 0.5 +output = 4.4 +cache_read = 0.7 [limit] context = 1_048_576 diff --git a/providers/nano-gpt/models/TEE/glm-5.3-flash.toml b/providers/nano-gpt/models/TEE/glm-5.3-flash.toml new file mode 100644 index 00000000000..9a90c2b0c6b --- /dev/null +++ b/providers/nano-gpt/models/TEE/glm-5.3-flash.toml @@ -0,0 +1,18 @@ +base_model = "zhipuai/glm-5.3-flash" +name = "GLM 5.3 Flash TEE" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.03 + +[limit] +context = 1_048_576 +input = 1_048_576 + +[modalities] +input = ["text", "image"] diff --git a/providers/nano-gpt/models/TEE/glm-5.3.toml b/providers/nano-gpt/models/TEE/glm-5.3.toml new file mode 100644 index 00000000000..33b553ac7b5 --- /dev/null +++ b/providers/nano-gpt/models/TEE/glm-5.3.toml @@ -0,0 +1,15 @@ +base_model = "zhipuai/glm-5.3" +name = "GLM 5.3 TEE" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.26 + +[limit] +context = 1_048_576 +input = 1_048_576 diff --git a/providers/nano-gpt/models/TEE/gpt-oss-20b.toml b/providers/nano-gpt/models/TEE/gpt-oss-20b.toml deleted file mode 100644 index 5dbb5729808..00000000000 --- a/providers/nano-gpt/models/TEE/gpt-oss-20b.toml +++ /dev/null @@ -1,14 +0,0 @@ -base_model = "openai/gpt-oss-20b" -name = "GPT-OSS 20B TEE" -reasoning = false -tool_call = false -structured_output = false - -[cost] -input = 0.2 -output = 0.8 -cache_read = 0.1 - -[limit] -input = 131_072 -output = 8_192 diff --git a/providers/nano-gpt/models/TEE/kimi-k3.toml b/providers/nano-gpt/models/TEE/kimi-k3.toml index d8557392864..d4a33300b22 100644 --- a/providers/nano-gpt/models/TEE/kimi-k3.toml +++ b/providers/nano-gpt/models/TEE/kimi-k3.toml @@ -12,7 +12,7 @@ cache_read = 1.5 [limit] input = 1_048_576 -output = 1_048_576 +output = 65_535 [modalities] input = ["text", "image"] diff --git a/providers/nano-gpt/models/TEE/nemotron-3.5-lightning.toml b/providers/nano-gpt/models/TEE/nemotron-3.5-lightning.toml new file mode 100644 index 00000000000..8d675f6e0f2 --- /dev/null +++ b/providers/nano-gpt/models/TEE/nemotron-3.5-lightning.toml @@ -0,0 +1,15 @@ +base_model = "nvidia/nemotron-3.5-lightning" +name = "Nvidia Nemotron 3.5 Lightning TEE" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + +[cost] +input = 0.08 +output = 0.2 +cache_read = 0.04 + +[limit] +input = 262_144 +output = 65_536 diff --git a/providers/nano-gpt/models/TEE/qwen3.5-122b-a10b.toml b/providers/nano-gpt/models/TEE/qwen3.5-122b-a10b.toml deleted file mode 100644 index 62be236f5b9..00000000000 --- a/providers/nano-gpt/models/TEE/qwen3.5-122b-a10b.toml +++ /dev/null @@ -1,20 +0,0 @@ -# Not included in subscription -base_model = "alibaba/qwen3.5-122b-a10b" -name = "Qwen3.5 122B A10B TEE" -attachment = false -structured_output = false - -[[reasoning_options]] -type = "toggle" - -[cost] -input = 0.46 -output = 3.68 -cache_read = 0.23 - -[limit] -input = 262_144 -output = 262_144 - -[modalities] -input = ["text"] diff --git a/providers/nano-gpt/models/TEE/qwen3.6-35b-a3b-uncensored.toml b/providers/nano-gpt/models/TEE/qwen3.6-35b-a3b-uncensored.toml deleted file mode 100644 index f370a8ecce8..00000000000 --- a/providers/nano-gpt/models/TEE/qwen3.6-35b-a3b-uncensored.toml +++ /dev/null @@ -1,33 +0,0 @@ -# Not included in subscription -name = "Qwen3.6 35B A3B Uncensored TEE" -description = "Multimodal reasoning model for visual analysis, planning, and tool use" -family = "qwen3.6" -release_date = "2026-05-23" -last_updated = "2026-05-23" -attachment = true -reasoning = true -tool_call = true -structured_output = true -open_weights = true - -[[reasoning_options]] -type = "toggle" - -[[reasoning_options]] -type = "budget_tokens" -min = 1_024 -max = 131_072 - -[cost] -input = 0.3 -output = 1.5 -cache_read = 0.15 - -[limit] -context = 131_072 -input = 131_072 -output = 131_072 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/TheDrummer/Anubis-70B-v1.1.toml b/providers/nano-gpt/models/TheDrummer/Anubis-70B-v1.1.toml index 36fffe8c945..117252e6472 100644 --- a/providers/nano-gpt/models/TheDrummer/Anubis-70B-v1.1.toml +++ b/providers/nano-gpt/models/TheDrummer/Anubis-70B-v1.1.toml @@ -15,8 +15,8 @@ output = 0.31 cache_read = 0.155 [limit] -context = 131_072 -input = 131_072 +context = 32_000 +input = 32_000 output = 16_384 [modalities] diff --git a/providers/nano-gpt/models/TheDrummer/Artemis-v1.1.toml b/providers/nano-gpt/models/TheDrummer/Artemis-v1.1.toml new file mode 100644 index 00000000000..92b0778c727 --- /dev/null +++ b/providers/nano-gpt/models/TheDrummer/Artemis-v1.1.toml @@ -0,0 +1,24 @@ +name = "TheDrummer/Artemis v1.1" +description = "TheDrummer's Artemis v1.1 is a Gemma 4 31B fine-tune for creative writing, expressive dialogue, and roleplay, with optional thinking and a 262K context window." +release_date = "2026-09-06" +last_updated = "2026-09-06" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.1 +output = 0.45 +cache_read = 0.05 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/TheDrummer/Cydonia-24B-v2.toml b/providers/nano-gpt/models/TheDrummer/Cydonia-24B-v2.toml index 5f84c90905a..cf112ef6ace 100644 --- a/providers/nano-gpt/models/TheDrummer/Cydonia-24B-v2.toml +++ b/providers/nano-gpt/models/TheDrummer/Cydonia-24B-v2.toml @@ -15,8 +15,8 @@ output = 0.1207 cache_read = 0.05015 [limit] -context = 16_384 -input = 16_384 +context = 32_768 +input = 32_768 output = 32_768 [modalities] diff --git a/providers/nano-gpt/models/TheDrummer/Cydonia-24B-v4.1.toml b/providers/nano-gpt/models/TheDrummer/Cydonia-24B-v4.1.toml index 51f9accdebc..a6cd77b0f78 100644 --- a/providers/nano-gpt/models/TheDrummer/Cydonia-24B-v4.1.toml +++ b/providers/nano-gpt/models/TheDrummer/Cydonia-24B-v4.1.toml @@ -5,7 +5,7 @@ release_date = "2025-08-19" last_updated = "2025-08-19" attachment = false reasoning = false -tool_call = false +tool_call = true structured_output = false open_weights = true @@ -17,7 +17,7 @@ cache_read = 0.16 [limit] context = 131_072 input = 131_072 -output = 131_072 +output = 117_964 [modalities] input = ["text"] diff --git a/providers/nano-gpt/models/TheDrummer/Cydonia-24B-v4.toml b/providers/nano-gpt/models/TheDrummer/Cydonia-24B-v4.toml index e1d5cba4614..c623200bfe3 100644 --- a/providers/nano-gpt/models/TheDrummer/Cydonia-24B-v4.toml +++ b/providers/nano-gpt/models/TheDrummer/Cydonia-24B-v4.toml @@ -15,8 +15,8 @@ output = 0.2414 cache_read = 0.1003 [limit] -context = 16_384 -input = 16_384 +context = 32_768 +input = 32_768 output = 32_768 [modalities] diff --git a/providers/nano-gpt/models/TheDrummer/UnslopNemo-12B-v4.1.toml b/providers/nano-gpt/models/TheDrummer/UnslopNemo-12B-v4.1.toml index c0ddb13b127..6f130d0c2f8 100644 --- a/providers/nano-gpt/models/TheDrummer/UnslopNemo-12B-v4.1.toml +++ b/providers/nano-gpt/models/TheDrummer/UnslopNemo-12B-v4.1.toml @@ -17,7 +17,7 @@ cache_read = 0.2465 [limit] context = 8_192 input = 8_192 -output = 8_192 +output = 26_214 [modalities] input = ["text", "pdf"] diff --git a/providers/nano-gpt/models/TheDrummer/skyfall-36b-v2.toml b/providers/nano-gpt/models/TheDrummer/skyfall-36b-v2.toml index 710156ef1b7..13f7c7eff9a 100644 --- a/providers/nano-gpt/models/TheDrummer/skyfall-36b-v2.toml +++ b/providers/nano-gpt/models/TheDrummer/skyfall-36b-v2.toml @@ -15,9 +15,9 @@ output = 0.8 cache_read = 0.25 [limit] -context = 32_000 -input = 32_000 -output = 32_768 +context = 32_768 +input = 32_768 +output = 29_491 [modalities] input = ["text", "pdf"] diff --git a/providers/nano-gpt/models/Tongyi-Zhiwen/QwenLong-L1-32B.toml b/providers/nano-gpt/models/Tongyi-Zhiwen/QwenLong-L1-32B.toml deleted file mode 100644 index 04cc80f3aee..00000000000 --- a/providers/nano-gpt/models/Tongyi-Zhiwen/QwenLong-L1-32B.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "QwenLong L1 32B" -description = "Qwen instruction model for multilingual chat, reasoning, and tool use" -family = "qwen" -release_date = "2024-01-01" -last_updated = "2025-01-25" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 0.14 -output = 0.6 -cache_read = 0.07 - -[limit] -context = 128_000 -input = 128_000 -output = 40_960 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/abacusai/Dracarys-72B-Instruct.toml b/providers/nano-gpt/models/abacusai/Dracarys-72B-Instruct.toml index fda08f61986..d00235b0748 100644 --- a/providers/nano-gpt/models/abacusai/Dracarys-72B-Instruct.toml +++ b/providers/nano-gpt/models/abacusai/Dracarys-72B-Instruct.toml @@ -15,8 +15,8 @@ output = 0.493 cache_read = 0.2465 [limit] -context = 16_384 -input = 16_384 +context = 32_768 +input = 32_768 output = 8_192 [modalities] diff --git a/providers/nano-gpt/models/abliteration-ai/abliterated-model-large-v2.toml b/providers/nano-gpt/models/abliteration-ai/abliterated-model-large-v2.toml new file mode 100644 index 00000000000..1a9af392dac --- /dev/null +++ b/providers/nano-gpt/models/abliteration-ai/abliterated-model-large-v2.toml @@ -0,0 +1,27 @@ +name = "Abliterated Model Large V2" +description = "Abliteration.ai's default large text reasoning model is derived from GLM-5.3 for harder reasoning and evaluation workloads, with automatic prompt caching and a one-million-token context window." +release_date = "2026-08-31" +last_updated = "2026-08-31" +attachment = false +reasoning = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 3 +output = 5 +cache_read = 0.3 + +[limit] +context = 1_000_000 +input = 1_000_000 +output = 999_990 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/abliteration-ai/abliterated-model-large.toml b/providers/nano-gpt/models/abliteration-ai/abliterated-model-large.toml new file mode 100644 index 00000000000..58ef18e1471 --- /dev/null +++ b/providers/nano-gpt/models/abliteration-ai/abliterated-model-large.toml @@ -0,0 +1,27 @@ +name = "Abliterated Model Large" +description = "Abliteration.ai's large text reasoning model is derived from GLM-5.2 and supports native tool calling, structured output, automatic prompt caching, and a one-million-token context window." +release_date = "2026-08-27" +last_updated = "2026-08-27" +attachment = false +reasoning = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 3 +output = 5 +cache_read = 0.3 + +[limit] +context = 1_000_000 +input = 1_000_000 +output = 999_990 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/abliteration-ai/abliterated-model.toml b/providers/nano-gpt/models/abliteration-ai/abliterated-model.toml new file mode 100644 index 00000000000..46dfe7fcc9f --- /dev/null +++ b/providers/nano-gpt/models/abliteration-ai/abliterated-model.toml @@ -0,0 +1,27 @@ +name = "Abliterated Model" +description = "Abliteration.ai's multimodal reasoning model supports text and image input, structured output, automatic prompt caching, and a 262K-token context window." +release_date = "2026-08-27" +last_updated = "2026-08-27" +attachment = true +reasoning = true +tool_call = false +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 1 +output = 3 +cache_read = 0.1 + +[limit] +context = 262_144 +input = 262_144 +output = 262_134 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/agnes-3.0-flash.toml b/providers/nano-gpt/models/agnes-3.0-flash.toml new file mode 100644 index 00000000000..3906744eea4 --- /dev/null +++ b/providers/nano-gpt/models/agnes-3.0-flash.toml @@ -0,0 +1,24 @@ +name = "Agnes 3.0 Flash" +description = "Agnes 3.0 Flash is a low-cost model for coding, tool use, and multi-turn agent tasks. It supports text and image input, optional thinking, and a 512K-token context window." +release_date = "2026-09-09" +last_updated = "2026-09-09" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = false +reasoning_options = [] + +[cost] +input = 0.05 +output = 0.15 +cache_read = 0.005 + +[limit] +context = 524_288 +input = 524_288 +output = 65_536 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/aion-labs/aion-3.5-mini.toml b/providers/nano-gpt/models/aion-labs/aion-3.5-mini.toml new file mode 100644 index 00000000000..0142fb07219 --- /dev/null +++ b/providers/nano-gpt/models/aion-labs/aion-3.5-mini.toml @@ -0,0 +1,24 @@ +name = "AionLabs: Aion 3.5 Mini" +description = "A GLM-family collaborative generation model tuned for immersive roleplay and storytelling, with stronger narrative structure, tension, conflict, and nuanced mature themes." +release_date = "2026-09-23" +last_updated = "2026-09-23" +attachment = false +reasoning = true +tool_call = true +structured_output = false +open_weights = false +reasoning_options = [] + +[cost] +input = 0.7 +output = 1.4 +cache_read = 0.18 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/aion-labs/aion-3.5.toml b/providers/nano-gpt/models/aion-labs/aion-3.5.toml new file mode 100644 index 00000000000..30e04d9c3c8 --- /dev/null +++ b/providers/nano-gpt/models/aion-labs/aion-3.5.toml @@ -0,0 +1,24 @@ +name = "AionLabs: Aion 3.5" +description = "A GLM-family collaborative generation model tuned for immersive roleplay and storytelling, with stronger narrative structure, tension, conflict, and nuanced mature themes." +release_date = "2026-09-23" +last_updated = "2026-09-23" +attachment = false +reasoning = true +tool_call = true +structured_output = false +open_weights = false +reasoning_options = [] + +[cost] +input = 3 +output = 6 +cache_read = 0.75 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/alibaba/qwen3.6-27b.toml b/providers/nano-gpt/models/alibaba/qwen3.6-27b.toml deleted file mode 100644 index 2af25f0ba71..00000000000 --- a/providers/nano-gpt/models/alibaba/qwen3.6-27b.toml +++ /dev/null @@ -1,16 +0,0 @@ -# Included in subscription -base_model = "alibaba/qwen3.6-27b" -reasoning = false -structured_output = false - -[cost] -input = 0.203 -output = 2.24 -cache_read = 0.1015 - -[limit] -context = 260_096 -input = 260_096 - -[modalities] -input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/alibaba/qwen3.6-27b:thinking.toml b/providers/nano-gpt/models/alibaba/qwen3.6-27b:thinking.toml deleted file mode 100644 index 9cafb1eba73..00000000000 --- a/providers/nano-gpt/models/alibaba/qwen3.6-27b:thinking.toml +++ /dev/null @@ -1,21 +0,0 @@ -# Included in subscription -base_model = "alibaba/qwen3.6-27b" -name = "Qwen3.6 27B Thinking" -structured_output = false - -[[reasoning_options]] -type = "budget_tokens" -min = 1_024 -max = 131_072 - -[cost] -input = 0.203 -output = 2.24 -cache_read = 0.1015 - -[limit] -context = 260_096 -input = 260_096 - -[modalities] -input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/alibaba/qwen3.8-flash.toml b/providers/nano-gpt/models/alibaba/qwen3.8-flash.toml deleted file mode 100644 index 603cf086b94..00000000000 --- a/providers/nano-gpt/models/alibaba/qwen3.8-flash.toml +++ /dev/null @@ -1,28 +0,0 @@ -name = "Qwen3.8 Flash" -description = "Qwen3.8 Flash is Alibaba's latest fast multimodal model, with a million-token context window for coding, agentic workflows, visual understanding, long documents, codebases, and videos." -release_date = "2026-08-26" -last_updated = "2026-08-26" -attachment = true -reasoning = true -tool_call = true -structured_output = true -open_weights = false - -[[reasoning_options]] -type = "effort" -values = ["none", "high"] - -[cost] -input = 0.16 -output = 0.47 -cache_read = 0.016 -cache_write = 0.2 - -[limit] -context = 991_808 -input = 991_808 -output = 131_072 - -[modalities] -input = ["text", "image", "video"] -output = ["text"] diff --git a/providers/nano-gpt/models/anthropic/claude-fable-5.1.toml b/providers/nano-gpt/models/anthropic/claude-fable-5.1.toml new file mode 100644 index 00000000000..a9045c8b330 --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-fable-5.1.toml @@ -0,0 +1,15 @@ +base_model = "anthropic/claude-fable-5-1" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 + +[limit] +input = 1_000_000 diff --git a/providers/nano-gpt/models/anthropic/claude-fable-latest.toml b/providers/nano-gpt/models/anthropic/claude-fable-latest.toml index b0d0cc6cd6d..48f22c01e7f 100644 --- a/providers/nano-gpt/models/anthropic/claude-fable-latest.toml +++ b/providers/nano-gpt/models/anthropic/claude-fable-latest.toml @@ -16,7 +16,7 @@ values = ["low", "medium", "high", "xhigh", "max"] [cost] input = 10 output = 50 -cache_read = 1 +cache_read = 0.25 cache_write = 12.5 [limit] diff --git a/providers/nano-gpt/models/anthropic/claude-haiku-4.5.toml b/providers/nano-gpt/models/anthropic/claude-haiku-4.5.toml new file mode 100644 index 00000000000..af25254c598 --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-haiku-4.5.toml @@ -0,0 +1,12 @@ +base_model = "anthropic/claude-haiku-4-5" +name = "Claude Haiku 4.5" +reasoning = false +structured_output = true + +[cost] +input = 1 +output = 5 +cache_read = 0.1 + +[limit] +input = 200_000 diff --git a/providers/nano-gpt/models/anthropic/claude-haiku-4.5:thinking.toml b/providers/nano-gpt/models/anthropic/claude-haiku-4.5:thinking.toml new file mode 100644 index 00000000000..85e2558189d --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-haiku-4.5:thinking.toml @@ -0,0 +1,12 @@ +base_model = "anthropic/claude-haiku-4-5" +name = "Claude Haiku 4.5 Thinking" +structured_output = true +reasoning_options = [] + +[cost] +input = 1 +output = 5 +cache_read = 0.1 + +[limit] +input = 200_000 diff --git a/providers/nano-gpt/models/anthropic/claude-opus-4.1.toml b/providers/nano-gpt/models/anthropic/claude-opus-4.1.toml new file mode 100644 index 00000000000..a84153f3d46 --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-opus-4.1.toml @@ -0,0 +1,12 @@ +base_model = "anthropic/claude-opus-4-1" +name = "Claude 4.1 Opus" +reasoning = false +structured_output = true + +[cost] +input = 15 +output = 75 +cache_read = 1.5 + +[limit] +input = 200_000 diff --git a/providers/nano-gpt/models/claude-opus-4-1-thinking.toml b/providers/nano-gpt/models/anthropic/claude-opus-4.1:thinking.toml similarity index 100% rename from providers/nano-gpt/models/claude-opus-4-1-thinking.toml rename to providers/nano-gpt/models/anthropic/claude-opus-4.1:thinking.toml diff --git a/providers/nano-gpt/models/claude-opus-4-1-thinking:1024.toml b/providers/nano-gpt/models/anthropic/claude-opus-4.1:thinking:1024.toml similarity index 100% rename from providers/nano-gpt/models/claude-opus-4-1-thinking:1024.toml rename to providers/nano-gpt/models/anthropic/claude-opus-4.1:thinking:1024.toml diff --git a/providers/nano-gpt/models/claude-opus-4-1-thinking:32000.toml b/providers/nano-gpt/models/anthropic/claude-opus-4.1:thinking:32768.toml similarity index 100% rename from providers/nano-gpt/models/claude-opus-4-1-thinking:32000.toml rename to providers/nano-gpt/models/anthropic/claude-opus-4.1:thinking:32768.toml diff --git a/providers/nano-gpt/models/claude-opus-4-1-thinking:8192.toml b/providers/nano-gpt/models/anthropic/claude-opus-4.1:thinking:8192.toml similarity index 100% rename from providers/nano-gpt/models/claude-opus-4-1-thinking:8192.toml rename to providers/nano-gpt/models/anthropic/claude-opus-4.1:thinking:8192.toml diff --git a/providers/nano-gpt/models/anthropic/claude-opus-4.5.toml b/providers/nano-gpt/models/anthropic/claude-opus-4.5.toml new file mode 100644 index 00000000000..fcf82fc8830 --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-opus-4.5.toml @@ -0,0 +1,15 @@ +base_model = "anthropic/claude-opus-4-5" +name = "Claude 4.5 Opus" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 5 +output = 25 +cache_read = 0.5 + +[limit] +input = 200_000 diff --git a/providers/nano-gpt/models/anthropic/claude-opus-4.5:thinking.toml b/providers/nano-gpt/models/anthropic/claude-opus-4.5:thinking.toml new file mode 100644 index 00000000000..4e055168a35 --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-opus-4.5:thinking.toml @@ -0,0 +1,15 @@ +base_model = "anthropic/claude-opus-4-5" +name = "Claude 4.5 Opus Thinking" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 5 +output = 25 +cache_read = 0.5 + +[limit] +input = 200_000 diff --git a/providers/nano-gpt/models/anthropic/claude-opus-4.toml b/providers/nano-gpt/models/anthropic/claude-opus-4.toml new file mode 100644 index 00000000000..f9b4abae349 --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-opus-4.toml @@ -0,0 +1,24 @@ +name = "Claude 4 Opus" +description = "Claude 4 Opus by Anthropic. The premium version of the new Claude models. A new generation model with improved capabilities, especially on programming and development." +family = "claude-opus" +release_date = "2025-08-05" +last_updated = "2025-08-05" +attachment = true +reasoning = false +tool_call = true +structured_output = true +open_weights = false + +[cost] +input = 15 +output = 75 +cache_read = 1.5 + +[limit] +context = 200_000 +input = 200_000 +output = 32_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/anthropic/claude-opus-4:thinking.toml b/providers/nano-gpt/models/anthropic/claude-opus-4:thinking.toml new file mode 100644 index 00000000000..df5fccc1cf6 --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-opus-4:thinking.toml @@ -0,0 +1,25 @@ +name = "Claude 4 Opus Thinking" +description = "Anthropic's Claude 4 Opus with the ability to show its thinking process step by step." +family = "claude-opus" +release_date = "2025-07-15" +last_updated = "2025-07-15" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [] + +[cost] +input = 15 +output = 75 +cache_read = 1.5 + +[limit] +context = 200_000 +input = 200_000 +output = 32_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/anthropic/claude-opus-4:thinking:1024.toml b/providers/nano-gpt/models/anthropic/claude-opus-4:thinking:1024.toml new file mode 100644 index 00000000000..dca21bd93e9 --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-opus-4:thinking:1024.toml @@ -0,0 +1,25 @@ +name = "Claude 4 Opus Thinking (1K)" +description = "Claude 4 Opus with minimal thinking budget (1,024 tokens)." +family = "claude-opus" +release_date = "2025-08-05" +last_updated = "2025-08-05" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [] + +[cost] +input = 15 +output = 75 +cache_read = 1.5 + +[limit] +context = 200_000 +input = 200_000 +output = 32_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/anthropic/claude-opus-4:thinking:32768.toml b/providers/nano-gpt/models/anthropic/claude-opus-4:thinking:32768.toml new file mode 100644 index 00000000000..b6e9ef29370 --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-opus-4:thinking:32768.toml @@ -0,0 +1,25 @@ +name = "Claude 4 Opus Thinking (32K)" +description = "Claude 4 Opus with extended thinking budget (32,768 tokens)." +family = "claude-opus" +release_date = "2025-08-05" +last_updated = "2025-08-05" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [] + +[cost] +input = 15 +output = 75 +cache_read = 1.5 + +[limit] +context = 200_000 +input = 200_000 +output = 32_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/anthropic/claude-opus-4:thinking:8192.toml b/providers/nano-gpt/models/anthropic/claude-opus-4:thinking:8192.toml new file mode 100644 index 00000000000..2d086d5e1b0 --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-opus-4:thinking:8192.toml @@ -0,0 +1,25 @@ +name = "Claude 4 Opus Thinking (8K)" +description = "Claude 4 Opus with reduced thinking budget (8,192 tokens)." +family = "claude-opus" +release_date = "2025-08-05" +last_updated = "2025-08-05" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [] + +[cost] +input = 15 +output = 75 +cache_read = 1.5 + +[limit] +context = 200_000 +input = 200_000 +output = 32_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/anthropic/claude-opus-5.5.toml b/providers/nano-gpt/models/anthropic/claude-opus-5.5.toml new file mode 100644 index 00000000000..5948dbab4f8 --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-opus-5.5.toml @@ -0,0 +1,15 @@ +base_model = "anthropic/claude-opus-5-5" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 4 +output = 20 +cache_read = 0.2 +cache_write = 5 + +[limit] +input = 1_000_000 diff --git a/providers/nano-gpt/models/anthropic/claude-sonnet-4.5.toml b/providers/nano-gpt/models/anthropic/claude-sonnet-4.5.toml new file mode 100644 index 00000000000..82e28e53689 --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-sonnet-4.5.toml @@ -0,0 +1,15 @@ +base_model = "anthropic/claude-sonnet-4-5" +name = "Claude Sonnet 4.5" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 3 +output = 15 +cache_read = 0.3 + +[limit] +input = 200_000 diff --git a/providers/nano-gpt/models/anthropic/claude-sonnet-4.5:thinking.toml b/providers/nano-gpt/models/anthropic/claude-sonnet-4.5:thinking.toml new file mode 100644 index 00000000000..8edebd11a2a --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-sonnet-4.5:thinking.toml @@ -0,0 +1,15 @@ +base_model = "anthropic/claude-sonnet-4-5" +name = "Claude Sonnet 4.5 Thinking" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 3 +output = 15 +cache_read = 0.3 + +[limit] +input = 200_000 diff --git a/providers/nano-gpt/models/anthropic/claude-sonnet-4.toml b/providers/nano-gpt/models/anthropic/claude-sonnet-4.toml new file mode 100644 index 00000000000..f79dbf29d5f --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-sonnet-4.toml @@ -0,0 +1,24 @@ +name = "Claude 4 Sonnet" +description = "Claude 4 Sonnet by Anthropic. A new generation model with improved capabilities, especially on programming and development. NOTE: Inputs > 200k tokens are charged at 2x input, 1.5x output rate." +family = "claude-sonnet" +release_date = "2025-09-29" +last_updated = "2025-09-29" +attachment = true +reasoning = false +tool_call = true +structured_output = true +open_weights = false + +[cost] +input = 3 +output = 15 +cache_read = 0.3 + +[limit] +context = 200_000 +input = 200_000 +output = 64_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/anthropic/claude-sonnet-4:thinking.toml b/providers/nano-gpt/models/anthropic/claude-sonnet-4:thinking.toml new file mode 100644 index 00000000000..56793324fca --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-sonnet-4:thinking.toml @@ -0,0 +1,25 @@ +name = "Claude 4 Sonnet Thinking" +description = "Anthropic's Claude 4 Sonnet with the ability to show its thinking process step by step." +family = "claude-sonnet" +release_date = "2025-02-24" +last_updated = "2025-02-24" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [] + +[cost] +input = 3 +output = 15 +cache_read = 0.3 + +[limit] +context = 1_000_000 +input = 1_000_000 +output = 64_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/anthropic/claude-sonnet-4:thinking:1024.toml b/providers/nano-gpt/models/anthropic/claude-sonnet-4:thinking:1024.toml new file mode 100644 index 00000000000..084f12aa861 --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-sonnet-4:thinking:1024.toml @@ -0,0 +1,25 @@ +name = "Claude 4 Sonnet Thinking (1K)" +description = "Claude 4 Sonnet with minimal thinking budget (1,024 tokens)." +family = "claude-sonnet" +release_date = "2024-01-01" +last_updated = "2024-01-01" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [] + +[cost] +input = 3 +output = 15 +cache_read = 0.3 + +[limit] +context = 1_000_000 +input = 1_000_000 +output = 64_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/anthropic/claude-sonnet-4:thinking:32768.toml b/providers/nano-gpt/models/anthropic/claude-sonnet-4:thinking:32768.toml new file mode 100644 index 00000000000..2a63f438c9b --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-sonnet-4:thinking:32768.toml @@ -0,0 +1,25 @@ +name = "Claude 4 Sonnet Thinking (32K)" +description = "Claude 4 Sonnet with extended thinking budget (32,768 tokens)." +family = "claude-sonnet" +release_date = "2024-01-01" +last_updated = "2024-01-01" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [] + +[cost] +input = 3 +output = 15 +cache_read = 0.3 + +[limit] +context = 1_000_000 +input = 1_000_000 +output = 64_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/anthropic/claude-sonnet-4:thinking:64000.toml b/providers/nano-gpt/models/anthropic/claude-sonnet-4:thinking:64000.toml new file mode 100644 index 00000000000..12270e79c75 --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-sonnet-4:thinking:64000.toml @@ -0,0 +1,25 @@ +name = "Claude 4 Sonnet Thinking (64K)" +description = "Claude 4 Sonnet with maximum thinking budget (64,000 tokens)." +family = "claude-sonnet" +release_date = "2024-01-01" +last_updated = "2024-01-01" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [] + +[cost] +input = 3 +output = 15 +cache_read = 0.3 + +[limit] +context = 1_000_000 +input = 1_000_000 +output = 64_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/anthropic/claude-sonnet-4:thinking:8192.toml b/providers/nano-gpt/models/anthropic/claude-sonnet-4:thinking:8192.toml new file mode 100644 index 00000000000..c48ed8b14c9 --- /dev/null +++ b/providers/nano-gpt/models/anthropic/claude-sonnet-4:thinking:8192.toml @@ -0,0 +1,25 @@ +name = "Claude 4 Sonnet Thinking (8K)" +description = "Claude 4 Sonnet with reduced thinking budget (8,192 tokens)." +family = "claude-sonnet" +release_date = "2024-01-01" +last_updated = "2024-01-01" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [] + +[cost] +input = 3 +output = 15 +cache_read = 0.3 + +[limit] +context = 1_000_000 +input = 1_000_000 +output = 64_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/azure-gpt-4-turbo.toml b/providers/nano-gpt/models/azure-gpt-4-turbo.toml deleted file mode 100644 index a3722d86120..00000000000 --- a/providers/nano-gpt/models/azure-gpt-4-turbo.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Azure gpt-4-turbo" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "gpt" -release_date = "2024-01-01" -last_updated = "2024-01-01" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 10 -output = 30 - -[limit] -context = 128_000 -input = 128_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/azure-gpt-4o-mini.toml b/providers/nano-gpt/models/azure-gpt-4o-mini.toml deleted file mode 100644 index 4ff5e0d0ccf..00000000000 --- a/providers/nano-gpt/models/azure-gpt-4o-mini.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Azure gpt-4o-mini" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "gpt" -release_date = "2024-01-01" -last_updated = "2024-07-18" -attachment = true -reasoning = false -tool_call = true -structured_output = true -open_weights = false - -[cost] -input = 0.15 -output = 0.6 -cache_read = 0.075 - -[limit] -context = 128_000 -input = 128_000 -output = 16_384 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/azure-gpt-4o.toml b/providers/nano-gpt/models/azure-gpt-4o.toml deleted file mode 100644 index a09a59fff1b..00000000000 --- a/providers/nano-gpt/models/azure-gpt-4o.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Azure gpt-4o" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "gpt" -release_date = "2024-01-01" -last_updated = "2024-05-13" -attachment = true -reasoning = false -tool_call = true -structured_output = true -open_weights = false - -[cost] -input = 2.5 -output = 10 -cache_read = 1.25 - -[limit] -context = 128_000 -input = 128_000 -output = 16_384 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/azure-o1.toml b/providers/nano-gpt/models/azure-o1.toml deleted file mode 100644 index e040c38d60c..00000000000 --- a/providers/nano-gpt/models/azure-o1.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Azure o1" -description = "O-series reasoning model for hard analysis, math, coding, and planning" -family = "o" -release_date = "2024-01-01" -last_updated = "2024-12-17" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 15 -output = 60 -cache_read = 7.5 - -[limit] -context = 200_000 -input = 200_000 -output = 100_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/azure-o3-mini.toml b/providers/nano-gpt/models/azure-o3-mini.toml deleted file mode 100644 index 9daa6421a7c..00000000000 --- a/providers/nano-gpt/models/azure-o3-mini.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Azure o3-mini" -description = "O-series reasoning model for hard analysis, math, coding, and planning" -family = "o" -release_date = "2024-01-01" -last_updated = "2025-01-31" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 1.1 -output = 4.4 -cache_read = 0.55 - -[limit] -context = 200_000 -input = 200_000 -output = 65_536 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/baseten/Kimi-K2-Instruct-FP4.toml b/providers/nano-gpt/models/baseten/Kimi-K2-Instruct-FP4.toml index bd61bb32c3a..f23a348c265 100644 --- a/providers/nano-gpt/models/baseten/Kimi-K2-Instruct-FP4.toml +++ b/providers/nano-gpt/models/baseten/Kimi-K2-Instruct-FP4.toml @@ -5,7 +5,7 @@ release_date = "2024-01-01" last_updated = "2025-07-11" attachment = false reasoning = false -tool_call = true +tool_call = false structured_output = false open_weights = true @@ -15,8 +15,8 @@ output = 1.8 cache_read = 0.2 [limit] -context = 128_000 -input = 128_000 +context = 131_072 +input = 131_072 output = 131_072 [modalities] diff --git a/providers/nano-gpt/models/brave-pro.toml b/providers/nano-gpt/models/brave-pro.toml deleted file mode 100644 index 33249d9e5c3..00000000000 --- a/providers/nano-gpt/models/brave-pro.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Brave (Pro)" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -release_date = "2026-02-10" -last_updated = "2024-01-01" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 5 -output = 5 - -[limit] -context = 8_192 -input = 8_192 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/brave-research.toml b/providers/nano-gpt/models/brave-research.toml deleted file mode 100644 index 6a66a940b5f..00000000000 --- a/providers/nano-gpt/models/brave-research.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Brave (Research)" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -release_date = "2026-02-10" -last_updated = "2024-01-01" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 5 -output = 5 - -[limit] -context = 16_384 -input = 16_384 -output = 16_384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/brave.toml b/providers/nano-gpt/models/brave.toml deleted file mode 100644 index c7a51f0e1a3..00000000000 --- a/providers/nano-gpt/models/brave.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Brave (Answers)" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -release_date = "2026-02-13" -last_updated = "2024-01-01" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 5 -output = 5 - -[limit] -context = 8_192 -input = 8_192 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/bytedance-seed/seed-2-1-turbo.toml b/providers/nano-gpt/models/bytedance-seed/seed-2-1-turbo.toml index 4ca66a0f23f..9c809fe5ded 100644 --- a/providers/nano-gpt/models/bytedance-seed/seed-2-1-turbo.toml +++ b/providers/nano-gpt/models/bytedance-seed/seed-2-1-turbo.toml @@ -18,7 +18,7 @@ cache_read = 0.25 [limit] context = 262_144 input = 262_144 -output = 262_144 +output = 235_929 [modalities] input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/bytedance-seed/seed-2.0-lite.toml b/providers/nano-gpt/models/bytedance-seed/seed-2.0-lite.toml index ff8f59ead35..60e5d8ba554 100644 --- a/providers/nano-gpt/models/bytedance-seed/seed-2.0-lite.toml +++ b/providers/nano-gpt/models/bytedance-seed/seed-2.0-lite.toml @@ -1,10 +1,8 @@ # Not included in subscription base_model = "bytedance-seed/seed-2.0-lite" name = "ByteDance Seed 2.0 Lite" -attachment = false reasoning = false tool_call = false -structured_output = true [cost] input = 0.25 @@ -15,6 +13,3 @@ cache_read = 0.125 context = 262_144 input = 262_144 output = 131_072 - -[modalities] -input = ["text"] diff --git a/providers/nano-gpt/models/chutesai/Mistral-Small-3.2-24B-Instruct-2506.toml b/providers/nano-gpt/models/chutesai/Mistral-Small-3.2-24B-Instruct-2506.toml deleted file mode 100644 index ca9047a7d38..00000000000 --- a/providers/nano-gpt/models/chutesai/Mistral-Small-3.2-24B-Instruct-2506.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Mistral Small 3.2 24b Instruct" -description = "Efficient Mistral model for fast chat, extraction, and production assistants" -family = "chutesai" -release_date = "2025-04-15" -last_updated = "2025-04-15" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = true - -[cost] -input = 0.2 -output = 0.4 -cache_read = 0.1 - -[limit] -context = 128_000 -input = 128_000 -output = 131_072 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/claude-haiku-4-5-20251001-thinking.toml b/providers/nano-gpt/models/claude-haiku-4-5-20251001-thinking.toml deleted file mode 100644 index 4947ff3afe5..00000000000 --- a/providers/nano-gpt/models/claude-haiku-4-5-20251001-thinking.toml +++ /dev/null @@ -1,13 +0,0 @@ -# Not included in subscription -base_model = "anthropic/claude-haiku-4-5-20251001" -name = "Claude Haiku 4.5 Thinking" -structured_output = true -reasoning_options = [] - -[cost] -input = 1 -output = 5 -cache_read = 0.1 - -[limit] -input = 200_000 diff --git a/providers/nano-gpt/models/claude-haiku-4-5-20251001.toml b/providers/nano-gpt/models/claude-haiku-4-5-20251001.toml deleted file mode 100644 index 3babc2fb8d9..00000000000 --- a/providers/nano-gpt/models/claude-haiku-4-5-20251001.toml +++ /dev/null @@ -1,11 +0,0 @@ -base_model = "anthropic/claude-haiku-4-5-20251001" -reasoning = false -structured_output = true - -[cost] -input = 1 -output = 5 -cache_read = 0.1 - -[limit] -input = 200_000 diff --git a/providers/nano-gpt/models/claude-opus-4-1-20250805.toml b/providers/nano-gpt/models/claude-opus-4-1-20250805.toml deleted file mode 100644 index bebe8a38d9e..00000000000 --- a/providers/nano-gpt/models/claude-opus-4-1-20250805.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "anthropic/claude-opus-4-1-20250805" -name = "Claude 4.1 Opus" -reasoning = false -structured_output = true - -[cost] -input = 15 -output = 75 -cache_read = 1.5 - -[limit] -input = 200_000 diff --git a/providers/nano-gpt/models/claude-opus-4-1-thinking:32768.toml b/providers/nano-gpt/models/claude-opus-4-1-thinking:32768.toml deleted file mode 100644 index eed01381084..00000000000 --- a/providers/nano-gpt/models/claude-opus-4-1-thinking:32768.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "anthropic/claude-opus-4-1" -name = "Claude 4.1 Opus Thinking (32K)" -structured_output = true -reasoning_options = [] - -[cost] -input = 15 -output = 75 -cache_read = 1.5 - -[limit] -input = 200_000 diff --git a/providers/nano-gpt/models/claude-opus-4-20250514.toml b/providers/nano-gpt/models/claude-opus-4-20250514.toml deleted file mode 100644 index 133aae4b888..00000000000 --- a/providers/nano-gpt/models/claude-opus-4-20250514.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "anthropic/claude-opus-4-20250514" -name = "Claude 4 Opus" -reasoning = false -structured_output = true - -[cost] -input = 15 -output = 75 -cache_read = 1.5 - -[limit] -input = 200_000 diff --git a/providers/nano-gpt/models/claude-opus-4-5-20251101.toml b/providers/nano-gpt/models/claude-opus-4-5-20251101.toml deleted file mode 100644 index c55048c722d..00000000000 --- a/providers/nano-gpt/models/claude-opus-4-5-20251101.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "anthropic/claude-opus-4-5-20251101" -name = "Claude 4.5 Opus" -structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high", "xhigh", "max"] - -[cost] -input = 5 -output = 25 -cache_read = 0.5 - -[limit] -input = 200_000 -output = 32_000 diff --git a/providers/nano-gpt/models/claude-opus-4-5-20251101:thinking.toml b/providers/nano-gpt/models/claude-opus-4-5-20251101:thinking.toml deleted file mode 100644 index 817feef1609..00000000000 --- a/providers/nano-gpt/models/claude-opus-4-5-20251101:thinking.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "anthropic/claude-opus-4-5-20251101" -name = "Claude 4.5 Opus Thinking" -structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high", "xhigh", "max"] - -[cost] -input = 5 -output = 25 -cache_read = 0.5 - -[limit] -input = 200_000 -output = 32_000 diff --git a/providers/nano-gpt/models/claude-opus-4-thinking.toml b/providers/nano-gpt/models/claude-opus-4-thinking.toml deleted file mode 100644 index 078795b2baf..00000000000 --- a/providers/nano-gpt/models/claude-opus-4-thinking.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "anthropic/claude-opus-4-0" -name = "Claude 4 Opus Thinking" -structured_output = true -reasoning_options = [] - -[cost] -input = 15 -output = 75 -cache_read = 1.5 - -[limit] -input = 200_000 diff --git a/providers/nano-gpt/models/claude-opus-4-thinking:1024.toml b/providers/nano-gpt/models/claude-opus-4-thinking:1024.toml deleted file mode 100644 index 6d0334ab627..00000000000 --- a/providers/nano-gpt/models/claude-opus-4-thinking:1024.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "anthropic/claude-opus-4-0" -name = "Claude 4 Opus Thinking (1K)" -structured_output = true -reasoning_options = [] - -[cost] -input = 15 -output = 75 -cache_read = 1.5 - -[limit] -input = 200_000 diff --git a/providers/nano-gpt/models/claude-opus-4-thinking:32000.toml b/providers/nano-gpt/models/claude-opus-4-thinking:32000.toml deleted file mode 100644 index ef6450e1339..00000000000 --- a/providers/nano-gpt/models/claude-opus-4-thinking:32000.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "anthropic/claude-opus-4-0" -name = "Claude 4 Opus Thinking (32K)" -structured_output = true -reasoning_options = [] - -[cost] -input = 15 -output = 75 -cache_read = 1.5 - -[limit] -input = 200_000 diff --git a/providers/nano-gpt/models/claude-opus-4-thinking:32768.toml b/providers/nano-gpt/models/claude-opus-4-thinking:32768.toml deleted file mode 100644 index ef6450e1339..00000000000 --- a/providers/nano-gpt/models/claude-opus-4-thinking:32768.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "anthropic/claude-opus-4-0" -name = "Claude 4 Opus Thinking (32K)" -structured_output = true -reasoning_options = [] - -[cost] -input = 15 -output = 75 -cache_read = 1.5 - -[limit] -input = 200_000 diff --git a/providers/nano-gpt/models/claude-opus-4-thinking:8192.toml b/providers/nano-gpt/models/claude-opus-4-thinking:8192.toml deleted file mode 100644 index a4eb96b1e3b..00000000000 --- a/providers/nano-gpt/models/claude-opus-4-thinking:8192.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "anthropic/claude-opus-4-0" -name = "Claude 4 Opus Thinking (8K)" -structured_output = true -reasoning_options = [] - -[cost] -input = 15 -output = 75 -cache_read = 1.5 - -[limit] -input = 200_000 diff --git a/providers/nano-gpt/models/claude-sonnet-4-20250514.toml b/providers/nano-gpt/models/claude-sonnet-4-20250514.toml deleted file mode 100644 index d9eae66a888..00000000000 --- a/providers/nano-gpt/models/claude-sonnet-4-20250514.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "anthropic/claude-sonnet-4-20250514" -name = "Claude 4 Sonnet" -reasoning = false -structured_output = true - -[cost] -input = 3 -output = 15 -cache_read = 0.3 - -[limit] -input = 200_000 diff --git a/providers/nano-gpt/models/claude-sonnet-4-5-20250929-thinking.toml b/providers/nano-gpt/models/claude-sonnet-4-5-20250929-thinking.toml deleted file mode 100644 index 9852bd1bef8..00000000000 --- a/providers/nano-gpt/models/claude-sonnet-4-5-20250929-thinking.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "anthropic/claude-sonnet-4-5-20250929" -name = "Claude Sonnet 4.5 Thinking" -structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high", "xhigh", "max"] - -[cost] -input = 3 -output = 15 -cache_read = 0.3 - -[limit] -context = 1_000_000 -input = 1_000_000 diff --git a/providers/nano-gpt/models/claude-sonnet-4-5-20250929.toml b/providers/nano-gpt/models/claude-sonnet-4-5-20250929.toml deleted file mode 100644 index 8d090e4c6c7..00000000000 --- a/providers/nano-gpt/models/claude-sonnet-4-5-20250929.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "anthropic/claude-sonnet-4-5-20250929" -structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high", "xhigh", "max"] - -[cost] -input = 3 -output = 15 -cache_read = 0.3 - -[limit] -context = 1_000_000 -input = 1_000_000 diff --git a/providers/nano-gpt/models/claude-sonnet-4-thinking.toml b/providers/nano-gpt/models/claude-sonnet-4-thinking.toml deleted file mode 100644 index 81b94bd81ff..00000000000 --- a/providers/nano-gpt/models/claude-sonnet-4-thinking.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "anthropic/claude-sonnet-4-0" -name = "Claude 4 Sonnet Thinking" -structured_output = true -reasoning_options = [] - -[cost] -input = 3 -output = 15 -cache_read = 0.3 - -[limit] -context = 1_000_000 -input = 1_000_000 diff --git a/providers/nano-gpt/models/claude-sonnet-4-thinking:1024.toml b/providers/nano-gpt/models/claude-sonnet-4-thinking:1024.toml deleted file mode 100644 index eb6625a53e5..00000000000 --- a/providers/nano-gpt/models/claude-sonnet-4-thinking:1024.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "anthropic/claude-sonnet-4-0" -name = "Claude 4 Sonnet Thinking (1K)" -structured_output = true -reasoning_options = [] - -[cost] -input = 3 -output = 15 -cache_read = 0.3 - -[limit] -context = 1_000_000 -input = 1_000_000 diff --git a/providers/nano-gpt/models/claude-sonnet-4-thinking:32768.toml b/providers/nano-gpt/models/claude-sonnet-4-thinking:32768.toml deleted file mode 100644 index af58b34bcd6..00000000000 --- a/providers/nano-gpt/models/claude-sonnet-4-thinking:32768.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "anthropic/claude-sonnet-4-0" -name = "Claude 4 Sonnet Thinking (32K)" -structured_output = true -reasoning_options = [] - -[cost] -input = 3 -output = 15 -cache_read = 0.3 - -[limit] -context = 1_000_000 -input = 1_000_000 diff --git a/providers/nano-gpt/models/claude-sonnet-4-thinking:64000.toml b/providers/nano-gpt/models/claude-sonnet-4-thinking:64000.toml deleted file mode 100644 index 21468363647..00000000000 --- a/providers/nano-gpt/models/claude-sonnet-4-thinking:64000.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "anthropic/claude-sonnet-4-0" -name = "Claude 4 Sonnet Thinking (64K)" -structured_output = true -reasoning_options = [] - -[cost] -input = 3 -output = 15 -cache_read = 0.3 - -[limit] -context = 1_000_000 -input = 1_000_000 diff --git a/providers/nano-gpt/models/claude-sonnet-4-thinking:8192.toml b/providers/nano-gpt/models/claude-sonnet-4-thinking:8192.toml deleted file mode 100644 index a311bdb9cc2..00000000000 --- a/providers/nano-gpt/models/claude-sonnet-4-thinking:8192.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "anthropic/claude-sonnet-4-0" -name = "Claude 4 Sonnet Thinking (8K)" -structured_output = true -reasoning_options = [] - -[cost] -input = 3 -output = 15 -cache_read = 0.3 - -[limit] -context = 1_000_000 -input = 1_000_000 diff --git a/providers/nano-gpt/models/claw-high.toml b/providers/nano-gpt/models/claw-high.toml index d8fe54b453b..eb151da1c35 100644 --- a/providers/nano-gpt/models/claw-high.toml +++ b/providers/nano-gpt/models/claw-high.toml @@ -3,23 +3,26 @@ name = "Claw High" description = "Compact GPT model for low-latency assistance and high-volume workloads" release_date = "2026-05-11" last_updated = "2026-05-11" -attachment = true +attachment = false reasoning = true tool_call = true structured_output = true open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] [cost] -input = 5 -output = 25 -cache_read = 2.5 +input = 1 +output = 3.2 +cache_read = 0.2 [limit] -context = 1_000_000 -input = 1_000_000 -output = 128_000 +context = 1_048_576 +input = 1_048_576 +output = 131_072 [modalities] -input = ["text", "image", "pdf"] +input = ["text"] output = ["text"] diff --git a/providers/nano-gpt/models/claw-low.toml b/providers/nano-gpt/models/claw-low.toml index 791e35d647d..2f2bd7a41a0 100644 --- a/providers/nano-gpt/models/claw-low.toml +++ b/providers/nano-gpt/models/claw-low.toml @@ -3,24 +3,27 @@ name = "Claw Low" description = "Compact GPT model for low-latency assistance and high-volume workloads" release_date = "2026-05-11" last_updated = "2026-05-11" -attachment = true +attachment = false reasoning = true tool_call = true structured_output = true open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] [cost] -input = 0.25 -output = 1.5 -cache_read = 0.025 +input = 1 +output = 3.2 +cache_read = 0.2 cache_write = 0.08333 [limit] context = 1_048_576 input = 1_048_576 -output = 65_536 +output = 131_072 [modalities] -input = ["text", "image", "video", "pdf"] +input = ["text"] output = ["text"] diff --git a/providers/nano-gpt/models/claw-medium.toml b/providers/nano-gpt/models/claw-medium.toml index 49f28819c78..c54c7e146a7 100644 --- a/providers/nano-gpt/models/claw-medium.toml +++ b/providers/nano-gpt/models/claw-medium.toml @@ -8,16 +8,19 @@ reasoning = true tool_call = true structured_output = true open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] [cost] -input = 0.315 -output = 1.26 -cache_read = 0.1575 +input = 1 +output = 3.2 +cache_read = 0.2 [limit] -context = 204_800 -input = 204_800 +context = 1_048_576 +input = 1_048_576 output = 131_072 [modalities] diff --git a/providers/nano-gpt/models/cohere/north-mini-code.toml b/providers/nano-gpt/models/cohere/north-mini-code.toml deleted file mode 100644 index 5add4237c89..00000000000 --- a/providers/nano-gpt/models/cohere/north-mini-code.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "cohere/north-mini-code-1-0" -name = "Cohere North Mini Code 1.0" -tool_call = false -structured_output = false -reasoning_options = [] - -[cost] -input = 0.2 -output = 0.8 -cache_read = 0.1 - -[limit] -input = 256_000 diff --git a/providers/nano-gpt/models/command-a-plus-05-2026.toml b/providers/nano-gpt/models/command-a-plus-05-2026.toml deleted file mode 100644 index c53f6278954..00000000000 --- a/providers/nano-gpt/models/command-a-plus-05-2026.toml +++ /dev/null @@ -1,16 +0,0 @@ -# Not included in subscription -base_model = "cohere/command-a-plus-05-2026" -name = "Cohere Command A+ (05/2026)" -tool_call = false - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] - -[cost] -input = 2.5 -output = 10 -cache_read = 1.25 - -[limit] -input = 128_000 diff --git a/providers/nano-gpt/models/crofai/greg-2-super.toml b/providers/nano-gpt/models/crofai/greg-2-super.toml deleted file mode 100644 index f472a7969fe..00000000000 --- a/providers/nano-gpt/models/crofai/greg-2-super.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Greg 2 Super" -description = "Greg 2 Super is CrofAI's balanced Greg 2 model for strong UI design, frontend iteration, coding, writing, and everyday agent tasks at a lower cost than Ultra." -release_date = "2026-06-19" -last_updated = "2026-06-19" -attachment = false -reasoning = false -tool_call = true -structured_output = true -open_weights = false - -[cost] -input = 1.5 -output = 5 -cache_read = 0.25 - -[limit] -context = 229_376 -input = 229_376 -output = 229_376 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/crofai/greg-2-ultra.toml b/providers/nano-gpt/models/crofai/greg-2-ultra.toml deleted file mode 100644 index 5138d1fea2b..00000000000 --- a/providers/nano-gpt/models/crofai/greg-2-ultra.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Greg 2 Ultra" -description = "Greg 2 Ultra is CrofAI's most capable Greg 2 model, tuned for premium UI design, agentic coding, creative writing, and higher-end general reasoning tasks." -release_date = "2026-06-19" -last_updated = "2026-06-19" -attachment = false -reasoning = false -tool_call = true -structured_output = true -open_weights = false - -[cost] -input = 3 -output = 10 -cache_read = 0.5 - -[limit] -context = 229_376 -input = 229_376 -output = 229_376 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/deepclaude.toml b/providers/nano-gpt/models/deepclaude.toml deleted file mode 100644 index 6edc6988da6..00000000000 --- a/providers/nano-gpt/models/deepclaude.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "DeepClaude" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -release_date = "2025-03-10" -last_updated = "2025-02-01" -attachment = true -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 3 -output = 15 -cache_read = 0.3 - -[limit] -context = 128_000 -input = 128_000 -output = 8_192 - -[modalities] -input = ["text", "pdf"] -output = ["text"] diff --git a/providers/nano-gpt/models/deepseek-ai/DeepSeek-R1-0528.toml b/providers/nano-gpt/models/deepseek-ai/DeepSeek-R1-0528.toml index 54d5251a668..d527629cafb 100644 --- a/providers/nano-gpt/models/deepseek-ai/DeepSeek-R1-0528.toml +++ b/providers/nano-gpt/models/deepseek-ai/DeepSeek-R1-0528.toml @@ -16,9 +16,9 @@ output = 1.7 cache_read = 0.2 [limit] -context = 128_000 -input = 128_000 -output = 163_840 +context = 163_840 +input = 163_840 +output = 32_768 [modalities] input = ["text"] diff --git a/providers/nano-gpt/models/deepseek/deepseek-prover-v2-671b.toml b/providers/nano-gpt/models/deepseek/deepseek-prover-v2-671b.toml deleted file mode 100644 index 2d005be6c62..00000000000 --- a/providers/nano-gpt/models/deepseek/deepseek-prover-v2-671b.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "DeepSeek Prover v2 671B" -description = "Flagship DeepSeek model for coding, reasoning, and agentic work" -family = "deepseek" -release_date = "2025-11-15" -last_updated = "2025-04-30" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = true - -[cost] -input = 1 -output = 2.5 -cache_read = 0.5 - -[limit] -context = 160_000 -input = 160_000 -output = 16_384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/deepseek/deepseek-v4-flash-0731.toml b/providers/nano-gpt/models/deepseek/deepseek-v4-flash-0731.toml index 07432312cae..86743682fe7 100644 --- a/providers/nano-gpt/models/deepseek/deepseek-v4-flash-0731.toml +++ b/providers/nano-gpt/models/deepseek/deepseek-v4-flash-0731.toml @@ -5,9 +5,9 @@ type = "effort" values = ["none", "low", "high", "max"] [cost] -input = 0.14 -output = 0.28 -cache_read = 0.014 +input = 0.05 +output = 0.16 +cache_read = 0.013 [limit] input = 1_000_000 diff --git a/providers/nano-gpt/models/deepseek/deepseek-v4-flash-0731:thinking.toml b/providers/nano-gpt/models/deepseek/deepseek-v4-flash-0731:thinking.toml index 0b5ea0e7dc3..ad56f0f83d1 100644 --- a/providers/nano-gpt/models/deepseek/deepseek-v4-flash-0731:thinking.toml +++ b/providers/nano-gpt/models/deepseek/deepseek-v4-flash-0731:thinking.toml @@ -6,9 +6,9 @@ type = "effort" values = ["none", "low", "high", "max"] [cost] -input = 0.14 -output = 0.28 -cache_read = 0.014 +input = 0.05 +output = 0.16 +cache_read = 0.013 [limit] input = 1_000_000 diff --git a/providers/nano-gpt/models/deepseek/deepseek-v4-flash-latest.toml b/providers/nano-gpt/models/deepseek/deepseek-v4-flash-latest.toml index ecb9c3ce5f2..fb7f9db2975 100644 --- a/providers/nano-gpt/models/deepseek/deepseek-v4-flash-latest.toml +++ b/providers/nano-gpt/models/deepseek/deepseek-v4-flash-latest.toml @@ -14,14 +14,14 @@ type = "effort" values = ["none", "low", "high", "max"] [cost] -input = 0.14 -output = 0.28 -cache_read = 0.014 +input = 0.05 +output = 0.16 +cache_read = 0.013 [limit] -context = 1_048_576 -input = 1_048_576 -output = 384_000 +context = 1_000_000 +input = 1_000_000 +output = 131_072 [modalities] input = ["text"] diff --git a/providers/nano-gpt/models/deepseek/deepseek-v4.1-flash.toml b/providers/nano-gpt/models/deepseek/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..c7745ff077e --- /dev/null +++ b/providers/nano-gpt/models/deepseek/deepseek-v4.1-flash.toml @@ -0,0 +1,13 @@ +base_model = "deepseek/deepseek-v4.1-flash" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 0.13 +output = 0.52 +cache_read = 0.006 + +[limit] +input = 1_000_000 diff --git a/providers/nano-gpt/models/deepseek/deepseek-v4.1-flash:thinking.toml b/providers/nano-gpt/models/deepseek/deepseek-v4.1-flash:thinking.toml new file mode 100644 index 00000000000..c26ac296879 --- /dev/null +++ b/providers/nano-gpt/models/deepseek/deepseek-v4.1-flash:thinking.toml @@ -0,0 +1,14 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash Thinking" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 0.13 +output = 0.52 +cache_read = 0.006 + +[limit] +input = 1_000_000 diff --git a/providers/nano-gpt/models/dmind/dmind-1-mini.toml b/providers/nano-gpt/models/dmind/dmind-1-mini.toml deleted file mode 100644 index 3938a18079c..00000000000 --- a/providers/nano-gpt/models/dmind/dmind-1-mini.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "DMind-1-Mini" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "gpt" -release_date = "2024-01-01" -last_updated = "2025-06-01" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 0.2 -output = 0.4 -cache_read = 0.1 - -[limit] -context = 32_768 -input = 32_768 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/dots-studio/dots-3-note-preview.toml b/providers/nano-gpt/models/dots-studio/dots-3-note-preview.toml deleted file mode 100644 index 6f3af28a475..00000000000 --- a/providers/nano-gpt/models/dots-studio/dots-3-note-preview.toml +++ /dev/null @@ -1,27 +0,0 @@ -name = "Dots3-Note Preview" -description = "Dots Studio's open-weight multimodal Mixture-of-Experts model activates 16B of 280B parameters for long-context reasoning, coding, visual and document understanding, tool use, and long-horizon agent workflows. Prompts and completions of this model may be logged." -release_date = "2026-08-15" -last_updated = "2026-08-15" -attachment = true -reasoning = true -tool_call = true -structured_output = true -open_weights = true - -[[reasoning_options]] -type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh"] - -[cost] -input = 0.1 -output = 0.2 -cache_read = 0.05 - -[limit] -context = 393_216 -input = 393_216 -output = 393_216 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/exa-answer.toml b/providers/nano-gpt/models/exa-answer.toml deleted file mode 100644 index 59dc04c78b0..00000000000 --- a/providers/nano-gpt/models/exa-answer.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "Exa (Answer)" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -release_date = "2025-12-23" -last_updated = "2025-06-04" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 2.5 -output = 2.5 - -[limit] -context = 4_096 -input = 4_096 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/gemini-2.5-flash-lite-preview-06-17.toml b/providers/nano-gpt/models/gemini-2.5-flash-lite-preview-06-17.toml index b903f64e19a..6a1c528190a 100644 --- a/providers/nano-gpt/models/gemini-2.5-flash-lite-preview-06-17.toml +++ b/providers/nano-gpt/models/gemini-2.5-flash-lite-preview-06-17.toml @@ -19,8 +19,8 @@ output = 0.6 cache_read = 0.015 [limit] -context = 1_048_756 -input = 1_048_756 +context = 1_048_576 +input = 1_048_576 output = 65_536 [modalities] diff --git a/providers/nano-gpt/models/gemini-2.5-flash-lite-preview-09-2025-thinking.toml b/providers/nano-gpt/models/gemini-2.5-flash-lite-preview-09-2025-thinking.toml index bd866af82db..d58e411eea9 100644 --- a/providers/nano-gpt/models/gemini-2.5-flash-lite-preview-09-2025-thinking.toml +++ b/providers/nano-gpt/models/gemini-2.5-flash-lite-preview-09-2025-thinking.toml @@ -19,8 +19,8 @@ output = 0.4 cache_read = 0.01 [limit] -context = 1_048_756 -input = 1_048_756 +context = 1_048_576 +input = 1_048_576 output = 65_536 [modalities] diff --git a/providers/nano-gpt/models/gemini-2.5-flash-lite-preview-09-2025.toml b/providers/nano-gpt/models/gemini-2.5-flash-lite-preview-09-2025.toml index c8324b3784c..8f3240de66f 100644 --- a/providers/nano-gpt/models/gemini-2.5-flash-lite-preview-09-2025.toml +++ b/providers/nano-gpt/models/gemini-2.5-flash-lite-preview-09-2025.toml @@ -19,8 +19,8 @@ output = 0.4 cache_read = 0.01 [limit] -context = 1_048_756 -input = 1_048_756 +context = 1_048_576 +input = 1_048_576 output = 65_536 [modalities] diff --git a/providers/nano-gpt/models/gemini-2.5-flash-lite.toml b/providers/nano-gpt/models/gemini-2.5-flash-lite.toml index 5d2f7caaff7..64903711c5e 100644 --- a/providers/nano-gpt/models/gemini-2.5-flash-lite.toml +++ b/providers/nano-gpt/models/gemini-2.5-flash-lite.toml @@ -12,8 +12,7 @@ output = 0.4 cache_read = 0.01 [limit] -context = 1_048_756 -input = 1_048_756 +input = 1_048_576 [modalities] -input = ["text", "image", "audio"] +input = ["text", "image", "video", "audio"] diff --git a/providers/nano-gpt/models/gemini-2.5-flash-nothinking.toml b/providers/nano-gpt/models/gemini-2.5-flash-nothinking.toml index a2c247811b3..5c7e8b0ac77 100644 --- a/providers/nano-gpt/models/gemini-2.5-flash-nothinking.toml +++ b/providers/nano-gpt/models/gemini-2.5-flash-nothinking.toml @@ -15,10 +15,10 @@ output = 2.5 cache_read = 0.03 [limit] -context = 1_048_756 -input = 1_048_756 +context = 1_048_576 +input = 1_048_576 output = 65_536 [modalities] -input = ["text", "image", "audio", "pdf"] +input = ["text", "image", "video", "audio", "pdf"] output = ["text"] diff --git a/providers/nano-gpt/models/gemini-2.5-flash-preview-04-17.toml b/providers/nano-gpt/models/gemini-2.5-flash-preview-04-17.toml index d13a6edc9e6..632f808bdc0 100644 --- a/providers/nano-gpt/models/gemini-2.5-flash-preview-04-17.toml +++ b/providers/nano-gpt/models/gemini-2.5-flash-preview-04-17.toml @@ -19,8 +19,8 @@ output = 0.6 cache_read = 0.015 [limit] -context = 1_048_756 -input = 1_048_756 +context = 1_048_576 +input = 1_048_576 output = 65_536 [modalities] diff --git a/providers/nano-gpt/models/gemini-2.5-flash-preview-04-17:thinking.toml b/providers/nano-gpt/models/gemini-2.5-flash-preview-04-17:thinking.toml index 4d6bfe143d9..2efb99f0fc6 100644 --- a/providers/nano-gpt/models/gemini-2.5-flash-preview-04-17:thinking.toml +++ b/providers/nano-gpt/models/gemini-2.5-flash-preview-04-17:thinking.toml @@ -19,8 +19,8 @@ output = 3.5 cache_read = 0.015 [limit] -context = 1_048_756 -input = 1_048_756 +context = 1_048_576 +input = 1_048_576 output = 65_536 [modalities] diff --git a/providers/nano-gpt/models/gemini-2.5-flash-preview-09-2025-thinking.toml b/providers/nano-gpt/models/gemini-2.5-flash-preview-09-2025-thinking.toml index 1f1c0a7ee42..e243098e6a5 100644 --- a/providers/nano-gpt/models/gemini-2.5-flash-preview-09-2025-thinking.toml +++ b/providers/nano-gpt/models/gemini-2.5-flash-preview-09-2025-thinking.toml @@ -19,8 +19,8 @@ output = 2.5 cache_read = 0.03 [limit] -context = 1_048_756 -input = 1_048_756 +context = 1_048_576 +input = 1_048_576 output = 65_536 [modalities] diff --git a/providers/nano-gpt/models/gemini-2.5-flash-preview-09-2025.toml b/providers/nano-gpt/models/gemini-2.5-flash-preview-09-2025.toml index b81e312b337..54927974f4e 100644 --- a/providers/nano-gpt/models/gemini-2.5-flash-preview-09-2025.toml +++ b/providers/nano-gpt/models/gemini-2.5-flash-preview-09-2025.toml @@ -19,8 +19,8 @@ output = 2.5 cache_read = 0.03 [limit] -context = 1_048_756 -input = 1_048_756 +context = 1_048_576 +input = 1_048_576 output = 65_536 [modalities] diff --git a/providers/nano-gpt/models/gemini-2.5-flash.toml b/providers/nano-gpt/models/gemini-2.5-flash.toml index 12a931a7eb4..b5ed5c50660 100644 --- a/providers/nano-gpt/models/gemini-2.5-flash.toml +++ b/providers/nano-gpt/models/gemini-2.5-flash.toml @@ -11,8 +11,7 @@ output = 2.5 cache_read = 0.03 [limit] -context = 1_048_756 -input = 1_048_756 +input = 1_048_576 [modalities] -input = ["text", "image", "audio"] +input = ["text", "image", "video", "audio"] diff --git a/providers/nano-gpt/models/gemini-2.5-pro-exp-03-25.toml b/providers/nano-gpt/models/gemini-2.5-pro-exp-03-25.toml index f2f864700d1..20085a3efa2 100644 --- a/providers/nano-gpt/models/gemini-2.5-pro-exp-03-25.toml +++ b/providers/nano-gpt/models/gemini-2.5-pro-exp-03-25.toml @@ -19,8 +19,8 @@ output = 10 cache_read = 0.25 [limit] -context = 1_048_756 -input = 1_048_756 +context = 1_048_576 +input = 1_048_576 output = 65_536 [modalities] diff --git a/providers/nano-gpt/models/gemini-2.5-pro-preview-03-25.toml b/providers/nano-gpt/models/gemini-2.5-pro-preview-03-25.toml index 0ea091e9591..b55fdddb797 100644 --- a/providers/nano-gpt/models/gemini-2.5-pro-preview-03-25.toml +++ b/providers/nano-gpt/models/gemini-2.5-pro-preview-03-25.toml @@ -19,8 +19,8 @@ output = 10 cache_read = 0.25 [limit] -context = 1_048_756 -input = 1_048_756 +context = 1_048_576 +input = 1_048_576 output = 65_536 [modalities] diff --git a/providers/nano-gpt/models/gemini-2.5-pro-preview-05-06.toml b/providers/nano-gpt/models/gemini-2.5-pro-preview-05-06.toml index 1111e07a90c..49636161cbf 100644 --- a/providers/nano-gpt/models/gemini-2.5-pro-preview-05-06.toml +++ b/providers/nano-gpt/models/gemini-2.5-pro-preview-05-06.toml @@ -19,8 +19,8 @@ output = 10 cache_read = 0.25 [limit] -context = 1_048_756 -input = 1_048_756 +context = 1_048_576 +input = 1_048_576 output = 65_536 [modalities] diff --git a/providers/nano-gpt/models/gemini-2.5-pro-preview-06-05.toml b/providers/nano-gpt/models/gemini-2.5-pro-preview-06-05.toml index 37cd71988b3..138dd1a9f94 100644 --- a/providers/nano-gpt/models/gemini-2.5-pro-preview-06-05.toml +++ b/providers/nano-gpt/models/gemini-2.5-pro-preview-06-05.toml @@ -19,8 +19,8 @@ output = 10 cache_read = 0.25 [limit] -context = 1_048_756 -input = 1_048_756 +context = 1_048_576 +input = 1_048_576 output = 65_536 [modalities] diff --git a/providers/nano-gpt/models/gemini-2.5-pro.toml b/providers/nano-gpt/models/gemini-2.5-pro.toml index 63c7f8c7722..e177a90eb72 100644 --- a/providers/nano-gpt/models/gemini-2.5-pro.toml +++ b/providers/nano-gpt/models/gemini-2.5-pro.toml @@ -12,8 +12,7 @@ cache_read = 0.125 cache_write = 0.375 [limit] -context = 1_048_756 -input = 1_048_756 +input = 1_048_576 [modalities] -input = ["text", "image", "audio"] +input = ["text", "image", "video", "audio"] diff --git a/providers/nano-gpt/models/gemini-3-pro-image-preview.toml b/providers/nano-gpt/models/gemini-3-pro-image-preview.toml index 7258a07ee50..1ee700a2e54 100644 --- a/providers/nano-gpt/models/gemini-3-pro-image-preview.toml +++ b/providers/nano-gpt/models/gemini-3-pro-image-preview.toml @@ -9,9 +9,7 @@ output = 12 cache_read = 0.2 [limit] -context = 1_048_756 -input = 1_048_756 -output = 65_536 +input = 65_536 [modalities] output = ["text"] diff --git a/providers/nano-gpt/models/gemma-4-12b-it-semancer.toml b/providers/nano-gpt/models/gemma-4-12b-it-semancer.toml new file mode 100644 index 00000000000..a0e66888780 --- /dev/null +++ b/providers/nano-gpt/models/gemma-4-12b-it-semancer.toml @@ -0,0 +1,25 @@ +name = "Gemma 4 12B Semancer" +description = "Gemma 4 12B Semancer is an open-weight roleplay finetune with image understanding, tool calling, optional reasoning, and a 131,072-token context window." +family = "gemma" +release_date = "2026-09-09" +last_updated = "2026-09-09" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.05 +output = 0.25 +cache_read = 0.025 + +[limit] +context = 131_072 +input = 131_072 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/gemma-4-12b-it-station-keeper.toml b/providers/nano-gpt/models/gemma-4-12b-it-station-keeper.toml new file mode 100644 index 00000000000..c4ccf5f509a --- /dev/null +++ b/providers/nano-gpt/models/gemma-4-12b-it-station-keeper.toml @@ -0,0 +1,25 @@ +name = "Gemma 4 12B StationKeeper" +description = "Gemma 4 12B StationKeeper is an open-weight roleplay finetune with image understanding, tool calling, optional reasoning, and a 131,072-token context window." +family = "gemma" +release_date = "2026-09-09" +last_updated = "2026-09-09" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.05 +output = 0.25 +cache_read = 0.025 + +[limit] +context = 131_072 +input = 131_072 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/gemma-4-12b-it.toml b/providers/nano-gpt/models/gemma-4-12b-it.toml index 1bde1b6c0cc..3d3dd5e5581 100644 --- a/providers/nano-gpt/models/gemma-4-12b-it.toml +++ b/providers/nano-gpt/models/gemma-4-12b-it.toml @@ -1,24 +1,15 @@ +base_model = "google/gemma-4-12b-it" name = "Gemma 4 12B Instruct" -description = "Google's Gemma 4 12B Instruct is an open-weight multimodal model for text, image, audio, and video understanding, with tool calling and structured output support." -family = "gemma" -release_date = "2026-08-01" -last_updated = "2026-08-01" -attachment = true reasoning = false -tool_call = true -structured_output = true -open_weights = true [cost] -input = 0.06 -output = 0.3 -cache_read = 0.03 +input = 0.05 +output = 0.25 +cache_read = 0.025 [limit] -context = 262_144 -input = 262_144 -output = 32_768 +context = 131_072 +input = 131_072 [modalities] input = ["text", "image", "video", "audio"] -output = ["text"] diff --git a/providers/nano-gpt/models/gemma-4-26b-a4b-it-chimerax.toml b/providers/nano-gpt/models/gemma-4-26b-a4b-it-chimerax.toml new file mode 100644 index 00000000000..1b47787ffc4 --- /dev/null +++ b/providers/nano-gpt/models/gemma-4-26b-a4b-it-chimerax.toml @@ -0,0 +1,25 @@ +name = "Chimera X" +description = "Chimera X is a Gemma 4 26B A4B multimodal mixture-of-experts fine-tune for creative writing, expressive dialogue, and roleplay." +family = "gemma" +release_date = "2026-07-29" +last_updated = "2026-07-29" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.12 +output = 0.38 +cache_read = 0.06 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/gemma-4-26b-a4b-it-darksoul.toml b/providers/nano-gpt/models/gemma-4-26b-a4b-it-darksoul.toml new file mode 100644 index 00000000000..126c906a1dc --- /dev/null +++ b/providers/nano-gpt/models/gemma-4-26b-a4b-it-darksoul.toml @@ -0,0 +1,25 @@ +name = "Dark Soul" +description = "Dark Soul is a Gemma 4 26B A4B multimodal mixture-of-experts fine-tune for creative writing, expressive dialogue, and roleplay." +family = "gemma" +release_date = "2026-07-29" +last_updated = "2026-07-29" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.12 +output = 0.38 +cache_read = 0.06 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/gemma-4-26b-a4b-it-luminous.toml b/providers/nano-gpt/models/gemma-4-26b-a4b-it-luminous.toml new file mode 100644 index 00000000000..80a00f3714d --- /dev/null +++ b/providers/nano-gpt/models/gemma-4-26b-a4b-it-luminous.toml @@ -0,0 +1,24 @@ +name = "Luminous Mirror" +description = "Luminous Mirror is a Gemma 4 26B A4B multimodal mixture-of-experts fine-tune for creative writing, expressive dialogue, and roleplay." +family = "gemma" +release_date = "2026-07-29" +last_updated = "2026-07-29" +attachment = true +reasoning = false +tool_call = true +structured_output = false +open_weights = true + +[cost] +input = 0.12 +output = 0.38 +cache_read = 0.06 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/gemma-4-26b-a4b-it-moonlight.toml b/providers/nano-gpt/models/gemma-4-26b-a4b-it-moonlight.toml new file mode 100644 index 00000000000..81a4963069c --- /dev/null +++ b/providers/nano-gpt/models/gemma-4-26b-a4b-it-moonlight.toml @@ -0,0 +1,25 @@ +name = "Moonlight Dusk" +description = "Moonlight Dusk is a Gemma 4 26B A4B multimodal mixture-of-experts fine-tune for creative writing, expressive dialogue, and roleplay." +family = "gemma" +release_date = "2026-07-29" +last_updated = "2026-07-29" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.12 +output = 0.38 +cache_read = 0.06 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/gemma-4-26b-a4b-it-musica.toml b/providers/nano-gpt/models/gemma-4-26b-a4b-it-musica.toml new file mode 100644 index 00000000000..210b4a169db --- /dev/null +++ b/providers/nano-gpt/models/gemma-4-26b-a4b-it-musica.toml @@ -0,0 +1,25 @@ +name = "Musica" +description = "Musica is a Gemma 4 26B A4B multimodal mixture-of-experts fine-tune for creative writing, expressive dialogue, and roleplay." +family = "gemma" +release_date = "2026-07-29" +last_updated = "2026-07-29" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.12 +output = 0.38 +cache_read = 0.06 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/gemma-4-26b-a4b-it-opusdistill.toml b/providers/nano-gpt/models/gemma-4-26b-a4b-it-opusdistill.toml new file mode 100644 index 00000000000..dfc80e77d94 --- /dev/null +++ b/providers/nano-gpt/models/gemma-4-26b-a4b-it-opusdistill.toml @@ -0,0 +1,25 @@ +name = "Opus Distill" +description = "Opus Distill is a Gemma 4 26B A4B multimodal mixture-of-experts fine-tune for creative writing, expressive dialogue, and roleplay." +family = "gemma" +release_date = "2026-07-29" +last_updated = "2026-07-29" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.12 +output = 0.38 +cache_read = 0.06 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/gemma-4-26b-a4b-it-shadowsiren.toml b/providers/nano-gpt/models/gemma-4-26b-a4b-it-shadowsiren.toml new file mode 100644 index 00000000000..d7ce2f13bd1 --- /dev/null +++ b/providers/nano-gpt/models/gemma-4-26b-a4b-it-shadowsiren.toml @@ -0,0 +1,25 @@ +name = "Shadow Siren" +description = "Shadow Siren is a Gemma 4 26B A4B multimodal mixture-of-experts fine-tune for creative writing, expressive dialogue, and roleplay." +family = "gemma" +release_date = "2026-07-29" +last_updated = "2026-07-29" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.12 +output = 0.38 +cache_read = 0.06 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/gemma-4-31b-it-darkidol.toml b/providers/nano-gpt/models/gemma-4-31b-it-darkidol.toml new file mode 100644 index 00000000000..48214e90f31 --- /dev/null +++ b/providers/nano-gpt/models/gemma-4-31b-it-darkidol.toml @@ -0,0 +1,25 @@ +name = "DarkIdol" +description = "DarkIdol is a multimodal Gemma 4 31B creative finetune for expressive dialogue, long-form storytelling, and roleplay." +family = "gemma" +release_date = "2026-07-29" +last_updated = "2026-07-29" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.1 +output = 0.45 +cache_read = 0.05 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/gemma-4-31b-it-fabled.toml b/providers/nano-gpt/models/gemma-4-31b-it-fabled.toml new file mode 100644 index 00000000000..a307993afc4 --- /dev/null +++ b/providers/nano-gpt/models/gemma-4-31b-it-fabled.toml @@ -0,0 +1,25 @@ +name = "Fabled" +description = "Fabled is a multimodal Gemma 4 31B creative finetune for expressive dialogue, long-form storytelling, and roleplay." +family = "gemma" +release_date = "2026-07-29" +last_updated = "2026-07-29" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.1 +output = 0.45 +cache_read = 0.05 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/gemma-4-31b-it-garnet.toml b/providers/nano-gpt/models/gemma-4-31b-it-garnet.toml new file mode 100644 index 00000000000..5ae3faf4915 --- /dev/null +++ b/providers/nano-gpt/models/gemma-4-31b-it-garnet.toml @@ -0,0 +1,25 @@ +name = "Garnet" +description = "Garnet is a multimodal Gemma 4 31B creative finetune for expressive dialogue, long-form storytelling, and roleplay." +family = "gemma" +release_date = "2026-07-29" +last_updated = "2026-07-29" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.1 +output = 0.45 +cache_read = 0.05 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/gemma-4-31b-it-gembrain.toml b/providers/nano-gpt/models/gemma-4-31b-it-gembrain.toml new file mode 100644 index 00000000000..51fc85a0841 --- /dev/null +++ b/providers/nano-gpt/models/gemma-4-31b-it-gembrain.toml @@ -0,0 +1,25 @@ +name = "Gembrain" +description = "Gembrain is a multimodal Gemma 4 31B creative finetune for expressive dialogue, long-form storytelling, and roleplay." +family = "gemma" +release_date = "2026-07-29" +last_updated = "2026-07-29" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.1 +output = 0.45 +cache_read = 0.05 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/gemma-4-31b-it-gemsicle.toml b/providers/nano-gpt/models/gemma-4-31b-it-gemsicle.toml new file mode 100644 index 00000000000..06532309930 --- /dev/null +++ b/providers/nano-gpt/models/gemma-4-31b-it-gemsicle.toml @@ -0,0 +1,25 @@ +name = "Gemsicle" +description = "Gemsicle is a multimodal Gemma 4 31B creative finetune for expressive dialogue, long-form storytelling, and roleplay." +family = "gemma" +release_date = "2026-07-29" +last_updated = "2026-07-29" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.1 +output = 0.45 +cache_read = 0.05 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/gemma-4-31b-it-isometry.toml b/providers/nano-gpt/models/gemma-4-31b-it-isometry.toml new file mode 100644 index 00000000000..e5db9cc6bda --- /dev/null +++ b/providers/nano-gpt/models/gemma-4-31b-it-isometry.toml @@ -0,0 +1,25 @@ +name = "Isometry" +description = "Isometry is a multimodal Gemma 4 31B creative finetune for expressive dialogue, long-form storytelling, and roleplay." +family = "gemma" +release_date = "2026-07-29" +last_updated = "2026-07-29" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.1 +output = 0.45 +cache_read = 0.05 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/gemma-4-31b-it-novelist.toml b/providers/nano-gpt/models/gemma-4-31b-it-novelist.toml new file mode 100644 index 00000000000..f5ebe442424 --- /dev/null +++ b/providers/nano-gpt/models/gemma-4-31b-it-novelist.toml @@ -0,0 +1,25 @@ +name = "Novelist" +description = "Novelist is a multimodal Gemma 4 31B creative finetune for expressive dialogue, long-form storytelling, and roleplay." +family = "gemma" +release_date = "2026-07-29" +last_updated = "2026-07-29" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.1 +output = 0.45 +cache_read = 0.05 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/gemma-4-e2b-it.toml b/providers/nano-gpt/models/gemma-4-e2b-it.toml deleted file mode 100644 index b6becef6c3b..00000000000 --- a/providers/nano-gpt/models/gemma-4-e2b-it.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "google/gemma-4-E2B-it" -name = "Gemma 4 E2B Instruct" -reasoning = false - -[cost] -input = 0.02 -output = 0.1 -cache_read = 0.01 - -[limit] -input = 131_072 -output = 16_384 - -[modalities] -input = ["text", "image", "video", "audio"] diff --git a/providers/nano-gpt/models/gemma-4-e4b-it.toml b/providers/nano-gpt/models/gemma-4-e4b-it.toml deleted file mode 100644 index 931ddf4bf29..00000000000 --- a/providers/nano-gpt/models/gemma-4-e4b-it.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "google/gemma-4-E4B-it" -name = "Gemma 4 E4B Instruct" -reasoning = false - -[cost] -input = 0.04 -output = 0.2 -cache_read = 0.02 - -[limit] -input = 131_072 -output = 16_384 - -[modalities] -input = ["text", "image", "video", "audio"] diff --git a/providers/nano-gpt/models/glm-4-air.toml b/providers/nano-gpt/models/glm-4-air.toml deleted file mode 100644 index 860e39a9bbe..00000000000 --- a/providers/nano-gpt/models/glm-4-air.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "GLM-4 Air" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "glm" -release_date = "2024-01-01" -last_updated = "2024-06-05" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 0.2006 -output = 0.2006 -cache_read = 0.1003 - -[limit] -context = 128_000 -input = 128_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/glm-4-airx.toml b/providers/nano-gpt/models/glm-4-airx.toml deleted file mode 100644 index 300ccdee9ed..00000000000 --- a/providers/nano-gpt/models/glm-4-airx.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "GLM-4 AirX" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "glm" -release_date = "2024-01-01" -last_updated = "2024-06-05" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 2.006 -output = 2.006 -cache_read = 1.003 - -[limit] -context = 8_000 -input = 8_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/glm-4-flash.toml b/providers/nano-gpt/models/glm-4-flash.toml deleted file mode 100644 index bdddde5a4a4..00000000000 --- a/providers/nano-gpt/models/glm-4-flash.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "GLM-4 Flash" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "glm" -release_date = "2024-01-01" -last_updated = "2024-08-01" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 0.1003 -output = 0.1003 -cache_read = 0.05015 - -[limit] -context = 128_000 -input = 128_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/glm-4-plus.toml b/providers/nano-gpt/models/glm-4-plus.toml deleted file mode 100644 index 7d24aa01459..00000000000 --- a/providers/nano-gpt/models/glm-4-plus.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "GLM-4 Plus" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "glm" -release_date = "2024-09-20" -last_updated = "2024-08-01" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 7.497 -output = 7.497 -cache_read = 3.7485 - -[limit] -context = 128_000 -input = 128_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/glm-4.1v-thinking-flash.toml b/providers/nano-gpt/models/glm-4.1v-thinking-flash.toml index 29e59994e81..07a69b18656 100644 --- a/providers/nano-gpt/models/glm-4.1v-thinking-flash.toml +++ b/providers/nano-gpt/models/glm-4.1v-thinking-flash.toml @@ -1,6 +1,6 @@ name = "GLM 4.1V Thinking Flash" description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "glm" +family = "glm-flash" release_date = "2025-07-09" last_updated = "2025-07-09" attachment = true diff --git a/providers/nano-gpt/models/glm-4.1v-thinking-flashx.toml b/providers/nano-gpt/models/glm-4.1v-thinking-flashx.toml index 730a47adcf9..0d366cbcc97 100644 --- a/providers/nano-gpt/models/glm-4.1v-thinking-flashx.toml +++ b/providers/nano-gpt/models/glm-4.1v-thinking-flashx.toml @@ -1,6 +1,6 @@ name = "GLM 4.1V Thinking FlashX" description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "glm" +family = "glm-flash" release_date = "2025-07-09" last_updated = "2025-07-09" attachment = true diff --git a/providers/nano-gpt/models/glm-4.toml b/providers/nano-gpt/models/glm-4.toml deleted file mode 100644 index 61ec5f9e9cf..00000000000 --- a/providers/nano-gpt/models/glm-4.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "GLM-4" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "glm" -release_date = "2024-01-01" -last_updated = "2024-01-16" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 14.994 -output = 14.994 -cache_read = 7.497 - -[limit] -context = 128_000 -input = 128_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/glm-z1-air.toml b/providers/nano-gpt/models/glm-z1-air.toml deleted file mode 100644 index b5111e5aa66..00000000000 --- a/providers/nano-gpt/models/glm-z1-air.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "GLM Z1 Air" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "glm" -release_date = "2025-04-15" -last_updated = "2025-04-15" -attachment = false -reasoning = false -tool_call = true -structured_output = true -open_weights = false - -[cost] -input = 0.07 -output = 0.07 -cache_read = 0.035 - -[limit] -context = 32_000 -input = 32_000 -output = 16_384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/glm-zero-preview.toml b/providers/nano-gpt/models/glm-zero-preview.toml deleted file mode 100644 index 65f95b36a00..00000000000 --- a/providers/nano-gpt/models/glm-zero-preview.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "GLM Zero Preview" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "glm" -release_date = "2024-12-20" -last_updated = "2024-12-01" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 1.802 -output = 1.802 -cache_read = 0.901 - -[limit] -context = 8_000 -input = 8_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/google/diffusiongemma.toml b/providers/nano-gpt/models/google/diffusiongemma.toml new file mode 100644 index 00000000000..244dd04defb --- /dev/null +++ b/providers/nano-gpt/models/google/diffusiongemma.toml @@ -0,0 +1,27 @@ +name = "DiffusionGemma" +description = "DiffusionGemma is a high-speed diffusion-based version of Gemma 4 26B A4B. It supports optional reasoning and a 262,144-token context window." +release_date = "2026-09-19" +last_updated = "2026-09-19" +attachment = false +reasoning = true +tool_call = false +structured_output = false +open_weights = true + +[[reasoning_options]] +type = "effort" +values = ["none", "xhigh"] + +[cost] +input = 0.05 +output = 0.15 +cache_read = 0.025 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/google/gemini-3-flash-preview-thinking.toml b/providers/nano-gpt/models/google/gemini-3-flash-preview-thinking.toml index c1b7f94a508..0d08ad0d947 100644 --- a/providers/nano-gpt/models/google/gemini-3-flash-preview-thinking.toml +++ b/providers/nano-gpt/models/google/gemini-3-flash-preview-thinking.toml @@ -13,8 +13,7 @@ output = 3 cache_read = 0.05 [limit] -context = 1_048_756 -input = 1_048_756 +input = 1_048_576 [modalities] -input = ["text", "image", "audio"] +input = ["text", "image", "video", "audio"] diff --git a/providers/nano-gpt/models/google/gemini-3-flash-preview.toml b/providers/nano-gpt/models/google/gemini-3-flash-preview.toml index 5bb90311b02..9e6a8686ae5 100644 --- a/providers/nano-gpt/models/google/gemini-3-flash-preview.toml +++ b/providers/nano-gpt/models/google/gemini-3-flash-preview.toml @@ -11,8 +11,7 @@ output = 3 cache_read = 0.05 [limit] -context = 1_048_756 -input = 1_048_756 +input = 1_048_576 [modalities] -input = ["text", "image", "audio"] +input = ["text", "image", "video", "audio"] diff --git a/providers/nano-gpt/models/google/gemini-3.1-pro-preview-customtools.toml b/providers/nano-gpt/models/google/gemini-3.1-pro-preview-customtools.toml index f50df40cada..20b170e25a0 100644 --- a/providers/nano-gpt/models/google/gemini-3.1-pro-preview-customtools.toml +++ b/providers/nano-gpt/models/google/gemini-3.1-pro-preview-customtools.toml @@ -13,8 +13,7 @@ cache_read = 0.2 cache_write = 0.375 [limit] -context = 1_048_756 -input = 1_048_756 +input = 1_048_576 [modalities] -input = ["text", "image", "audio"] +input = ["text", "image", "video", "audio"] diff --git a/providers/nano-gpt/models/google/gemini-3.1-pro-preview-high.toml b/providers/nano-gpt/models/google/gemini-3.1-pro-preview-high.toml index 2e9c672892f..d1cfd298546 100644 --- a/providers/nano-gpt/models/google/gemini-3.1-pro-preview-high.toml +++ b/providers/nano-gpt/models/google/gemini-3.1-pro-preview-high.toml @@ -18,10 +18,10 @@ cache_read = 0.2 cache_write = 0.375 [limit] -context = 1_048_756 -input = 1_048_756 +context = 1_048_576 +input = 1_048_576 output = 65_536 [modalities] -input = ["text", "image", "audio"] +input = ["text", "image", "video", "audio"] output = ["text"] diff --git a/providers/nano-gpt/models/google/gemini-3.1-pro-preview-low.toml b/providers/nano-gpt/models/google/gemini-3.1-pro-preview-low.toml index df7e4a728c3..b78d52075b6 100644 --- a/providers/nano-gpt/models/google/gemini-3.1-pro-preview-low.toml +++ b/providers/nano-gpt/models/google/gemini-3.1-pro-preview-low.toml @@ -18,8 +18,8 @@ cache_read = 0.2 cache_write = 0.375 [limit] -context = 1_048_756 -input = 1_048_756 +context = 1_048_576 +input = 1_048_576 output = 65_536 [modalities] diff --git a/providers/nano-gpt/models/google/gemini-3.1-pro-preview.toml b/providers/nano-gpt/models/google/gemini-3.1-pro-preview.toml index dcc5c328aa0..dc51f72a485 100644 --- a/providers/nano-gpt/models/google/gemini-3.1-pro-preview.toml +++ b/providers/nano-gpt/models/google/gemini-3.1-pro-preview.toml @@ -13,8 +13,7 @@ cache_read = 0.2 cache_write = 0.375 [limit] -context = 1_048_756 -input = 1_048_756 +input = 1_048_576 [modalities] -input = ["text", "image", "audio"] +input = ["text", "image", "video", "audio"] diff --git a/providers/nano-gpt/models/google/gemini-3.5-flash-thinking.toml b/providers/nano-gpt/models/google/gemini-3.5-flash-thinking.toml index 9f87ac4e534..07bb78bc52f 100644 --- a/providers/nano-gpt/models/google/gemini-3.5-flash-thinking.toml +++ b/providers/nano-gpt/models/google/gemini-3.5-flash-thinking.toml @@ -18,4 +18,4 @@ cache_write = 0.083333 input = 1_048_576 [modalities] -input = ["text", "image", "audio"] +input = ["text", "image", "video", "audio"] diff --git a/providers/nano-gpt/models/google/gemini-3.5-flash.toml b/providers/nano-gpt/models/google/gemini-3.5-flash.toml index 67649cb2131..893ac82319e 100644 --- a/providers/nano-gpt/models/google/gemini-3.5-flash.toml +++ b/providers/nano-gpt/models/google/gemini-3.5-flash.toml @@ -15,4 +15,4 @@ cache_write = 0.083333 input = 1_048_576 [modalities] -input = ["text", "image", "audio"] +input = ["text", "image", "video", "audio"] diff --git a/providers/nano-gpt/models/google/gemini-3.7-flash.toml b/providers/nano-gpt/models/google/gemini-3.7-flash.toml index e6ceafdd5d1..007e8f6fd41 100644 --- a/providers/nano-gpt/models/google/gemini-3.7-flash.toml +++ b/providers/nano-gpt/models/google/gemini-3.7-flash.toml @@ -5,10 +5,10 @@ type = "effort" values = ["minimal", "low", "medium", "high"] [cost] -input = 0.375 -output = 1.875 -cache_read = 0.0375 -cache_write = 0.020833 +input = 0.75 +output = 3.75 +cache_read = 0.075 +cache_write = 0.041667 [limit] input = 1_048_576 diff --git a/providers/nano-gpt/models/google/gemini-3.8-flash.toml b/providers/nano-gpt/models/google/gemini-3.8-flash.toml new file mode 100644 index 00000000000..5123c75c06a --- /dev/null +++ b/providers/nano-gpt/models/google/gemini-3.8-flash.toml @@ -0,0 +1,14 @@ +base_model = "google/gemini-3.8-flash" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high"] + +[cost] +input = 0.75 +output = 3.75 +cache_read = 0.075 +cache_write = 0.041667 + +[limit] +input = 1_048_576 diff --git a/providers/nano-gpt/models/google/gemini-flash-latest.toml b/providers/nano-gpt/models/google/gemini-flash-latest.toml index 0cc3c5e9717..3e206c4240e 100644 --- a/providers/nano-gpt/models/google/gemini-flash-latest.toml +++ b/providers/nano-gpt/models/google/gemini-flash-latest.toml @@ -7,10 +7,10 @@ type = "effort" values = ["minimal", "low", "medium", "high"] [cost] -input = 0.375 -output = 1.875 -cache_read = 0.0375 -cache_write = 0.020833 +input = 0.75 +output = 3.75 +cache_read = 0.075 +cache_write = 0.041667 [limit] input = 1_048_576 diff --git a/providers/nano-gpt/models/google/gemini-pro-latest.toml b/providers/nano-gpt/models/google/gemini-pro-latest.toml index c7299c217fc..8841cf18ebd 100644 --- a/providers/nano-gpt/models/google/gemini-pro-latest.toml +++ b/providers/nano-gpt/models/google/gemini-pro-latest.toml @@ -21,10 +21,10 @@ cache_read = 0.2 cache_write = 0.375 [limit] -context = 1_048_756 -input = 1_048_756 +context = 1_048_576 +input = 1_048_576 output = 65_536 [modalities] -input = ["text", "image", "audio"] +input = ["text", "image", "video", "audio"] output = ["text"] diff --git a/providers/nano-gpt/models/google/gemma-4-26b-a4b-it-cybersecurity.toml b/providers/nano-gpt/models/google/gemma-4-26b-a4b-it-cybersecurity.toml new file mode 100644 index 00000000000..502d73081ea --- /dev/null +++ b/providers/nano-gpt/models/google/gemma-4-26b-a4b-it-cybersecurity.toml @@ -0,0 +1,25 @@ +name = "Gemma 4 26B A4B Cybersecurity" +description = "Gemma 4 26B A4B Cybersecurity is a cybersecurity-focused variant based on the uncensored model, with provider moderation for illegal activities. It supports optional reasoning, image understanding, tool calling, and a 262,144-token context window." +family = "gemma" +release_date = "2026-09-19" +last_updated = "2026-09-19" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.1056 +output = 0.3344 +cache_read = 0.0528 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/google/gemma-4-26b-a4b-it.toml b/providers/nano-gpt/models/google/gemma-4-26b-a4b-it.toml index bb5c61bc250..3e1fbd8ca47 100644 --- a/providers/nano-gpt/models/google/gemma-4-26b-a4b-it.toml +++ b/providers/nano-gpt/models/google/gemma-4-26b-a4b-it.toml @@ -6,10 +6,13 @@ name = "Gemma 4 26B A4B" type = "toggle" [cost] -input = 0.08 -output = 0.33 -cache_read = 0.04 +input = 0.12 +output = 0.38 +cache_read = 0.06 [limit] input = 262_144 output = 131_072 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/google/gemma-4-26b-a4b-it:thinking.toml b/providers/nano-gpt/models/google/gemma-4-26b-a4b-it:thinking.toml index 2c907734caa..08d90442d4f 100644 --- a/providers/nano-gpt/models/google/gemma-4-26b-a4b-it:thinking.toml +++ b/providers/nano-gpt/models/google/gemma-4-26b-a4b-it:thinking.toml @@ -11,3 +11,6 @@ cache_read = 0.065 [limit] input = 262_144 output = 131_072 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/google/gemma-4-26b-a4b-uncensored.toml b/providers/nano-gpt/models/google/gemma-4-26b-a4b-uncensored.toml deleted file mode 100644 index f55e8645df6..00000000000 --- a/providers/nano-gpt/models/google/gemma-4-26b-a4b-uncensored.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Gemma 4 26B A4B Uncensored" -description = "Gemma 4 26B A4B Uncensored is an NVFP4 open-weight multimodal mixture-of-experts model tuned for fewer refusals across chat, coding, tool use, and long-context work." -family = "gemma" -release_date = "2026-08-22" -last_updated = "2026-08-22" -attachment = true -reasoning = true -tool_call = true -structured_output = true -open_weights = true -reasoning_options = [] - -[cost] -input = 0.08 -output = 0.33 -cache_read = 0.04 - -[limit] -context = 262_144 -input = 262_144 -output = 32_768 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/google/gemma-4-26b-a4b-uncensored:thinking.toml b/providers/nano-gpt/models/google/gemma-4-26b-a4b-uncensored:thinking.toml deleted file mode 100644 index 36888fcce97..00000000000 --- a/providers/nano-gpt/models/google/gemma-4-26b-a4b-uncensored:thinking.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Gemma 4 26B A4B Uncensored Thinking" -description = "Gemma 4 26B A4B Uncensored with thinking enabled for more deliberate coding, multimodal analysis, tool use, and long-context problem solving." -family = "gemma" -release_date = "2026-08-24" -last_updated = "2026-08-24" -attachment = true -reasoning = true -tool_call = true -structured_output = true -open_weights = true -reasoning_options = [] - -[cost] -input = 0.08 -output = 0.33 -cache_read = 0.04 - -[limit] -context = 262_144 -input = 262_144 -output = 32_768 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/google/gemma-4-31b-it.toml b/providers/nano-gpt/models/google/gemma-4-31b-it.toml index 8fa48e25be1..ccc02c9a753 100644 --- a/providers/nano-gpt/models/google/gemma-4-31b-it.toml +++ b/providers/nano-gpt/models/google/gemma-4-31b-it.toml @@ -6,10 +6,13 @@ name = "Gemma 4 31B" type = "toggle" [cost] -input = 0.08 -output = 0.33 -cache_read = 0.04 +input = 0.1 +output = 0.45 +cache_read = 0.05 [limit] input = 262_144 output = 131_072 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/google/gemma-4-31b-it:thinking.toml b/providers/nano-gpt/models/google/gemma-4-31b-it:thinking.toml index d59c3a42cf8..f7f76bab951 100644 --- a/providers/nano-gpt/models/google/gemma-4-31b-it:thinking.toml +++ b/providers/nano-gpt/models/google/gemma-4-31b-it:thinking.toml @@ -11,3 +11,6 @@ cache_read = 0.05 [limit] input = 262_144 output = 131_072 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/google/gemma4-31b-splituntied.toml b/providers/nano-gpt/models/google/gemma4-31b-splituntied.toml new file mode 100644 index 00000000000..2a2440d5a87 --- /dev/null +++ b/providers/nano-gpt/models/google/gemma4-31b-splituntied.toml @@ -0,0 +1,24 @@ +name = "Gemma 4 31B Split-Untied" +description = "Blazed-Forge's Split-Untied is a text-only Gemma 4 31B community finetune with an untied BF16 output head, built for creative writing, roleplay, expressive dialogue, and tool use." +family = "gemma" +release_date = "2026-09-17" +last_updated = "2026-09-17" +attachment = false +reasoning = false +tool_call = true +structured_output = false +open_weights = true + +[cost] +input = 0.1 +output = 0.3 +cache_read = 0.05 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/hermes-high.toml b/providers/nano-gpt/models/hermes-high.toml index 338d60661ce..9d6bf229e10 100644 --- a/providers/nano-gpt/models/hermes-high.toml +++ b/providers/nano-gpt/models/hermes-high.toml @@ -4,23 +4,26 @@ description = "Compact GPT model for low-latency assistance and high-volume work family = "hermes" release_date = "2026-05-11" last_updated = "2026-05-11" -attachment = true +attachment = false reasoning = true tool_call = true structured_output = true open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] [cost] -input = 5 -output = 25 -cache_read = 2.5 +input = 1 +output = 3.2 +cache_read = 0.2 [limit] -context = 1_000_000 -input = 1_000_000 -output = 128_000 +context = 1_048_576 +input = 1_048_576 +output = 131_072 [modalities] -input = ["text", "image", "pdf"] +input = ["text"] output = ["text"] diff --git a/providers/nano-gpt/models/hermes-low.toml b/providers/nano-gpt/models/hermes-low.toml index a5e52e6189e..aec46394a9a 100644 --- a/providers/nano-gpt/models/hermes-low.toml +++ b/providers/nano-gpt/models/hermes-low.toml @@ -4,24 +4,27 @@ description = "Compact GPT model for low-latency assistance and high-volume work family = "hermes" release_date = "2026-05-11" last_updated = "2026-05-11" -attachment = true +attachment = false reasoning = true tool_call = true structured_output = true open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] [cost] -input = 0.25 -output = 1.5 -cache_read = 0.025 +input = 1 +output = 3.2 +cache_read = 0.2 cache_write = 0.08333 [limit] context = 1_048_576 input = 1_048_576 -output = 65_536 +output = 131_072 [modalities] -input = ["text", "image", "video", "pdf"] +input = ["text"] output = ["text"] diff --git a/providers/nano-gpt/models/hermes-medium.toml b/providers/nano-gpt/models/hermes-medium.toml index bbee1c0c489..223fb950e99 100644 --- a/providers/nano-gpt/models/hermes-medium.toml +++ b/providers/nano-gpt/models/hermes-medium.toml @@ -9,16 +9,19 @@ reasoning = true tool_call = true structured_output = true open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] [cost] -input = 0.315 -output = 1.26 -cache_read = 0.1575 +input = 1 +output = 3.2 +cache_read = 0.2 [limit] -context = 204_800 -input = 204_800 +context = 1_048_576 +input = 1_048_576 output = 131_072 [modalities] diff --git a/providers/nano-gpt/models/holo3-35b-a3b.toml b/providers/nano-gpt/models/holo3-35b-a3b.toml index 33930849ca6..b4db0baf2a2 100644 --- a/providers/nano-gpt/models/holo3-35b-a3b.toml +++ b/providers/nano-gpt/models/holo3-35b-a3b.toml @@ -20,7 +20,7 @@ cache_read = 0.125 [limit] context = 65_536 input = 65_536 -output = 65_536 +output = 8_192 [modalities] input = ["text", "image"] diff --git a/providers/nano-gpt/models/holo3-35b-a3b:thinking.toml b/providers/nano-gpt/models/holo3-35b-a3b:thinking.toml index dfbfcfaedaa..d9afd26c8f6 100644 --- a/providers/nano-gpt/models/holo3-35b-a3b:thinking.toml +++ b/providers/nano-gpt/models/holo3-35b-a3b:thinking.toml @@ -18,7 +18,7 @@ cache_read = 0.125 [limit] context = 65_536 input = 65_536 -output = 65_536 +output = 8_192 [modalities] input = ["text", "image"] diff --git a/providers/nano-gpt/models/huihui-ai/Llama-3.3-70B-Instruct-abliterated.toml b/providers/nano-gpt/models/huihui-ai/Llama-3.3-70B-Instruct-abliterated.toml index 6451f7718af..e8d090b4d21 100644 --- a/providers/nano-gpt/models/huihui-ai/Llama-3.3-70B-Instruct-abliterated.toml +++ b/providers/nano-gpt/models/huihui-ai/Llama-3.3-70B-Instruct-abliterated.toml @@ -15,8 +15,8 @@ output = 0.7 cache_read = 0.35 [limit] -context = 16_384 -input = 16_384 +context = 32_768 +input = 32_768 output = 16_384 [modalities] diff --git a/providers/nano-gpt/models/hunyuan-turbos-20250226.toml b/providers/nano-gpt/models/hunyuan-turbos-20250226.toml deleted file mode 100644 index 925e3de8f5e..00000000000 --- a/providers/nano-gpt/models/hunyuan-turbos-20250226.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Hunyuan Turbo S" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "hunyuan" -release_date = "2025-02-27" -last_updated = "2025-02-27" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 0.187 -output = 0.374 -cache_read = 0.0935 - -[limit] -context = 24_000 -input = 24_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/ibm-granite/granite-4.1-8b.toml b/providers/nano-gpt/models/ibm-granite/granite-4.1-8b.toml deleted file mode 100644 index 4cef656c271..00000000000 --- a/providers/nano-gpt/models/ibm-granite/granite-4.1-8b.toml +++ /dev/null @@ -1,25 +0,0 @@ -# Included in subscription -name = "Granite 4.1 8B" -description = "Tool-capable chat model for instruction following and agentic application workflows" -family = "granite" -release_date = "2026-04-29" -last_updated = "2026-04-29" -attachment = false -reasoning = false -tool_call = true -structured_output = true -open_weights = true - -[cost] -input = 0.05 -output = 0.1 -cache_read = 0.05 - -[limit] -context = 131_072 -input = 131_072 -output = 131_072 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/ibm-granite/granite-4.2-8b.toml b/providers/nano-gpt/models/ibm-granite/granite-4.2-8b.toml new file mode 100644 index 00000000000..21c84dcc421 --- /dev/null +++ b/providers/nano-gpt/models/ibm-granite/granite-4.2-8b.toml @@ -0,0 +1,28 @@ +name = "Granite 4.2 8B" +description = "IBM Granite 4.2 8B is an Apache 2.0-licensed dense model with native step-by-step reasoning and specialized training for agentic work. It can plan before acting, sequence tools, navigate codebases, work in terminals, and verify results across coding, search, mathematics, science, and complex instruction-following tasks." +family = "granite" +release_date = "2026-08-31" +last_updated = "2026-08-31" +attachment = false +reasoning = true +tool_call = true +structured_output = true +open_weights = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high"] + +[cost] +input = 0.1 +output = 0.15 +cache_read = 0.05 + +[limit] +context = 131_072 +input = 131_072 +output = 117_964 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/inception/mercury-2.5-preview.toml b/providers/nano-gpt/models/inception/mercury-2.5-preview.toml new file mode 100644 index 00000000000..c1b7e926993 --- /dev/null +++ b/providers/nano-gpt/models/inception/mercury-2.5-preview.toml @@ -0,0 +1,28 @@ +name = "Mercury 2.5 Preview" +description = "Mercury 2.5 Preview is Inception's latest and most intelligent diffusion language model. Instead of generating tokens strictly one at a time, it produces and refines multiple tokens in parallel, reaching up to 1,107 tokens per second on standard GPUs. It delivers a 10+ point intelligence gain over Mercury 2, with tunable reasoning, parallel tool calls, schema-aligned JSON output, and a 260K context window. It is built for latency-sensitive production work such as search agents, voice pipelines, customer support, rapid coding iteration, and coding subagents." +family = "mercury" +release_date = "2026-09-01" +last_updated = "2026-09-01" +attachment = false +reasoning = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + +[cost] +input = 0.04 +output = 0.15 +cache_read = 0.004 + +[limit] +context = 260_000 +input = 260_000 +output = 65_536 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/inclusionai/ling-3.0-flash-vl.toml b/providers/nano-gpt/models/inclusionai/ling-3.0-flash-vl.toml new file mode 100644 index 00000000000..d4212f529b9 --- /dev/null +++ b/providers/nano-gpt/models/inclusionai/ling-3.0-flash-vl.toml @@ -0,0 +1,28 @@ +name = "Ling 3.0 Flash VL" +description = "Ling 3.0 Flash VL is inclusionAI's native multimodal Mixture-of-Experts model with 124B total parameters and 5.5B active parameters per token. It combines image and video understanding with reasoning and tool use for document analysis, charts, visual verification, and interface-based agent tasks. Thinking is enabled by default and can be turned off in settings." +family = "ling" +release_date = "2026-09-09" +last_updated = "2026-09-09" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + +[cost] +input = 0.06 +output = 0.18 +cache_read = 0.012 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image", "video"] +output = ["text"] diff --git a/providers/nano-gpt/models/inference-net/schematron-v2-small.toml b/providers/nano-gpt/models/inference-net/schematron-v2-small.toml new file mode 100644 index 00000000000..92bbd290059 --- /dev/null +++ b/providers/nano-gpt/models/inference-net/schematron-v2-small.toml @@ -0,0 +1,23 @@ +name = "Schematron V2 Small" +description = "Inference.net's 3B-parameter HTML-to-JSON extraction model, focused on accuracy for complex schemas and long web pages. It turns HTML into typed, structured data for web scraping and product catalog ingestion, with a 128K-token context window. Supply HTML in the user message and extraction instructions in a JSON schema via response_format; it does not follow ordinary chat or system prompts." +release_date = "2026-09-12" +last_updated = "2026-09-12" +attachment = false +reasoning = false +tool_call = false +structured_output = true +open_weights = false + +[cost] +input = 0.05 +output = 0.23 +cache_read = 0.025 + +[limit] +context = 128_000 +input = 128_000 +output = 4_096 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/inference-net/schematron-v2-turbo.toml b/providers/nano-gpt/models/inference-net/schematron-v2-turbo.toml new file mode 100644 index 00000000000..8c35b1a6bb7 --- /dev/null +++ b/providers/nano-gpt/models/inference-net/schematron-v2-turbo.toml @@ -0,0 +1,23 @@ +name = "Schematron V2 Turbo" +description = "Inference.net's 3B-parameter HTML-to-JSON extraction model, optimized for throughput and low cost on high-volume workloads. It turns HTML into typed, structured data for web scraping and product catalog ingestion, with a 128K-token context window. Supply HTML in the user message and extraction instructions in a JSON schema via response_format; it does not follow ordinary chat or system prompts." +release_date = "2026-09-12" +last_updated = "2026-09-12" +attachment = false +reasoning = false +tool_call = false +structured_output = true +open_weights = false + +[cost] +input = 0.03 +output = 0.15 +cache_read = 0.015 + +[limit] +context = 128_000 +input = 128_000 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/inflection/inflection-3-pi.toml b/providers/nano-gpt/models/inflection/inflection-3-pi.toml deleted file mode 100644 index a528d3f5cb6..00000000000 --- a/providers/nano-gpt/models/inflection/inflection-3-pi.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Inflection 3 Pi" -description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" -family = "gpt" -release_date = "2025-11-21" -last_updated = "2024-10-11" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 2.499 -output = 9.996 -cache_read = 1.2495 - -[limit] -context = 8_000 -input = 8_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/inflection/inflection-3-productivity.toml b/providers/nano-gpt/models/inflection/inflection-3-productivity.toml deleted file mode 100644 index ebb75a204b8..00000000000 --- a/providers/nano-gpt/models/inflection/inflection-3-productivity.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Inflection 3 Productivity" -description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" -family = "gpt" -release_date = "2025-11-21" -last_updated = "2024-10-11" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 2.499 -output = 9.996 -cache_read = 1.2495 - -[limit] -context = 8_000 -input = 8_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/jamba-large-1.6.toml b/providers/nano-gpt/models/jamba-large-1.6.toml deleted file mode 100644 index 44842744599..00000000000 --- a/providers/nano-gpt/models/jamba-large-1.6.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Jamba Large 1.6" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "jamba" -release_date = "2025-03-12" -last_updated = "2025-03-12" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 1.989 -output = 7.99 -cache_read = 0.9945 - -[limit] -context = 256_000 -input = 256_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/jamba-large-1.7.toml b/providers/nano-gpt/models/jamba-large-1.7.toml deleted file mode 100644 index bb798ade9bd..00000000000 --- a/providers/nano-gpt/models/jamba-large-1.7.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Jamba Large 1.7" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "jamba" -release_date = "2025-07-09" -last_updated = "2025-07-09" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 1.989 -output = 7.99 -cache_read = 0.9945 - -[limit] -context = 256_000 -input = 256_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/jamba-large.toml b/providers/nano-gpt/models/jamba-large.toml deleted file mode 100644 index edfd4b655cc..00000000000 --- a/providers/nano-gpt/models/jamba-large.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Jamba Large" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "jamba" -release_date = "2025-07-09" -last_updated = "2025-07-09" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 1.989 -output = 7.99 -cache_read = 0.9945 - -[limit] -context = 256_000 -input = 256_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/jamba-mini-1.6.toml b/providers/nano-gpt/models/jamba-mini-1.6.toml deleted file mode 100644 index b694ca781d8..00000000000 --- a/providers/nano-gpt/models/jamba-mini-1.6.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Jamba Mini 1.6" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "jamba" -release_date = "2024-01-01" -last_updated = "2025-03-01" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 0.1989 -output = 0.408 -cache_read = 0.09945 - -[limit] -context = 256_000 -input = 256_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/jamba-mini-1.7.toml b/providers/nano-gpt/models/jamba-mini-1.7.toml deleted file mode 100644 index 4db7b7dab3d..00000000000 --- a/providers/nano-gpt/models/jamba-mini-1.7.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Jamba Mini 1.7" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "jamba" -release_date = "2025-07-09" -last_updated = "2025-07-09" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 0.1989 -output = 0.408 -cache_read = 0.09945 - -[limit] -context = 256_000 -input = 256_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/jamba-mini.toml b/providers/nano-gpt/models/jamba-mini.toml deleted file mode 100644 index 961f1a435ec..00000000000 --- a/providers/nano-gpt/models/jamba-mini.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Jamba Mini" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "jamba" -release_date = "2025-07-09" -last_updated = "2025-07-09" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 0.1989 -output = 0.408 -cache_read = 0.09945 - -[limit] -context = 256_000 -input = 256_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/kimi-k2-instruct-fast.toml b/providers/nano-gpt/models/kimi-k2-instruct-fast.toml index 93e059310df..d7999aabd8b 100644 --- a/providers/nano-gpt/models/kimi-k2-instruct-fast.toml +++ b/providers/nano-gpt/models/kimi-k2-instruct-fast.toml @@ -5,7 +5,7 @@ release_date = "2025-12-15" last_updated = "2025-07-15" attachment = true reasoning = false -tool_call = true +tool_call = false structured_output = false open_weights = true diff --git a/providers/nano-gpt/models/kwaipilot/kat-coder-air-v2.5.toml b/providers/nano-gpt/models/kwaipilot/kat-coder-air-v2.5.toml deleted file mode 100644 index 2bbd5fcc96d..00000000000 --- a/providers/nano-gpt/models/kwaipilot/kat-coder-air-v2.5.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "KAT Coder Air V2.5" -description = "Fast, cost-efficient KAT Coder model for code generation, editing, debugging, and agentic software-development workflows." -family = "kat-coder" -release_date = "2026-07-14" -last_updated = "2026-07-14" -attachment = false -reasoning = false -tool_call = true -structured_output = true -open_weights = false - -[cost] -input = 0.15 -output = 0.6 -cache_read = 0.03 - -[limit] -context = 256_000 -input = 256_000 -output = 80_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/kwaipilot/kat-coder-pro-v2.5.toml b/providers/nano-gpt/models/kwaipilot/kat-coder-pro-v2.5.toml deleted file mode 100644 index 21d84bb8053..00000000000 --- a/providers/nano-gpt/models/kwaipilot/kat-coder-pro-v2.5.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "KAT Coder Pro V2.5" -description = "Higher-capability KAT Coder model for complex code generation, repository-scale editing, debugging, and agentic software-development workflows." -family = "kat-coder" -release_date = "2026-07-14" -last_updated = "2026-07-14" -attachment = false -reasoning = false -tool_call = true -structured_output = true -open_weights = false - -[cost] -input = 0.74 -output = 2.96 -cache_read = 0.15 - -[limit] -context = 256_000 -input = 256_000 -output = 80_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/kwaipilot/kat-coder-pro-v2.toml b/providers/nano-gpt/models/kwaipilot/kat-coder-pro-v2.toml deleted file mode 100644 index d60c7fb0bc1..00000000000 --- a/providers/nano-gpt/models/kwaipilot/kat-coder-pro-v2.toml +++ /dev/null @@ -1,25 +0,0 @@ -# Not included in subscription -name = "KAT Coder Pro V2" -description = "Coding model for repository understanding, refactors, and agentic engineering tasks" -family = "kat-coder" -release_date = "2026-03-28" -last_updated = "2026-03-28" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 0.3 -output = 1.2 -cache_read = 0.15 - -[limit] -context = 256_000 -input = 256_000 -output = 80_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/learnlm-1.5-pro-experimental.toml b/providers/nano-gpt/models/learnlm-1.5-pro-experimental.toml deleted file mode 100644 index 1011ec3dfc1..00000000000 --- a/providers/nano-gpt/models/learnlm-1.5-pro-experimental.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Gemini LearnLM Experimental" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "gemini" -release_date = "2024-01-01" -last_updated = "2024-05-14" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 3.502 -output = 10.506 -cache_read = 1.751 - -[limit] -context = 32_767 -input = 32_767 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/lightonai/LightOnOCR-2-1B.toml b/providers/nano-gpt/models/lightonai/LightOnOCR-2-1B.toml new file mode 100644 index 00000000000..f59e8806014 --- /dev/null +++ b/providers/nano-gpt/models/lightonai/LightOnOCR-2-1B.toml @@ -0,0 +1,22 @@ +name = "LightOnOCR 2" +description = "LightOnOCR 2 hosted by IONOS in Berlin, Germany. Zero data retention." +release_date = "2026-09-10" +last_updated = "2026-09-10" +attachment = true +reasoning = false +tool_call = true +structured_output = false +open_weights = true + +[cost] +input = 0.1785 +output = 0.3465 + +[limit] +context = 32_768 +input = 32_768 +output = 8_192 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/meganova-ai/manta-pro-1.0.toml b/providers/nano-gpt/models/meganova-ai/manta-pro-1.0.toml index 6c2c9eb1e8a..94d60025005 100644 --- a/providers/nano-gpt/models/meganova-ai/manta-pro-1.0.toml +++ b/providers/nano-gpt/models/meganova-ai/manta-pro-1.0.toml @@ -15,8 +15,8 @@ output = 0.5 cache_read = 0.03 [limit] -context = 32_768 -input = 32_768 +context = 65_536 +input = 65_536 output = 32_768 [modalities] diff --git a/providers/nano-gpt/models/meta-llama/llama-3.1-8b-instruct.toml b/providers/nano-gpt/models/meta-llama/llama-3.1-8b-instruct.toml index b17eb59e0f9..2ebca8d6c88 100644 --- a/providers/nano-gpt/models/meta-llama/llama-3.1-8b-instruct.toml +++ b/providers/nano-gpt/models/meta-llama/llama-3.1-8b-instruct.toml @@ -1,6 +1,5 @@ base_model = "meta/llama-3.1-8b-instruct" name = "Llama 3.1 8b Instruct" -tool_call = false structured_output = false [cost] diff --git a/providers/nano-gpt/models/meta-llama/llama-3.3-70b-instruct.toml b/providers/nano-gpt/models/meta-llama/llama-3.3-70b-instruct.toml index 9efae912148..eb46f8f5020 100644 --- a/providers/nano-gpt/models/meta-llama/llama-3.3-70b-instruct.toml +++ b/providers/nano-gpt/models/meta-llama/llama-3.3-70b-instruct.toml @@ -1,6 +1,5 @@ base_model = "meta/llama-3.3-70b-instruct" name = "Llama 3.3 70b Instruct" -attachment = false structured_output = true [cost] diff --git a/providers/nano-gpt/models/meta/muse-glimmer-30b.toml b/providers/nano-gpt/models/meta/muse-glimmer-30b.toml index 61a7bd6b3bf..f2db2ba5f63 100644 --- a/providers/nano-gpt/models/meta/muse-glimmer-30b.toml +++ b/providers/nano-gpt/models/meta/muse-glimmer-30b.toml @@ -11,3 +11,4 @@ cache_read = 0.04 [limit] input = 131_072 +output = 117_964 diff --git a/providers/nano-gpt/models/meta/muse-spark-1.1.toml b/providers/nano-gpt/models/meta/muse-spark-1.1.toml index 628d4ce3da9..492ebfbd337 100644 --- a/providers/nano-gpt/models/meta/muse-spark-1.1.toml +++ b/providers/nano-gpt/models/meta/muse-spark-1.1.toml @@ -12,8 +12,9 @@ output = 4.25 cache_read = 0.15 [limit] +context = 1_000_000 input = 1_000_000 output = 65_536 [modalities] -input = ["text", "image"] +input = ["text", "image", "video", "audio"] diff --git a/providers/nano-gpt/models/meta/muse-spark-1.3-contributor.toml b/providers/nano-gpt/models/meta/muse-spark-1.3-contributor.toml new file mode 100644 index 00000000000..5bf15ba2287 --- /dev/null +++ b/providers/nano-gpt/models/meta/muse-spark-1.3-contributor.toml @@ -0,0 +1,28 @@ +name = "Muse Spark 1.3 Contributor" +description = "Meta's Muse Spark 1.3 Contributor is a frontier multimodal reasoning model for long-horizon coding and agentic workflows, with strong gains in computer use, browsing, professional tool use, codebase understanding, and million-token retrieval. It accepts text, images, audio, video, and files, supports tool calling and structured output, and always reasons before answering. Prompts and outputs may be used by Meta for training and to improve its products." +family = "muse" +release_date = "2026-09-02" +last_updated = "2026-09-02" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 0.1 +output = 0.2 +cache_read = 0.002 + +[limit] +context = 1_048_576 +input = 1_048_576 +output = 943_718 + +[modalities] +input = ["text", "image", "video", "audio", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/meta/muse-spark-1.3.toml b/providers/nano-gpt/models/meta/muse-spark-1.3.toml new file mode 100644 index 00000000000..7e3eca1e095 --- /dev/null +++ b/providers/nano-gpt/models/meta/muse-spark-1.3.toml @@ -0,0 +1,14 @@ +base_model = "meta/muse-spark-1.3" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 1.25 +output = 4.25 +cache_read = 0.15 + +[limit] +input = 1_048_576 +output = 943_718 diff --git a/providers/nano-gpt/models/MiniMax-M2.toml b/providers/nano-gpt/models/minimax/minimax-m2.toml similarity index 100% rename from providers/nano-gpt/models/MiniMax-M2.toml rename to providers/nano-gpt/models/minimax/minimax-m2.toml diff --git a/providers/nano-gpt/models/mistral-small-31-24b-instruct.toml b/providers/nano-gpt/models/mistral-small-31-24b-instruct.toml deleted file mode 100644 index 027bb7eb4a4..00000000000 --- a/providers/nano-gpt/models/mistral-small-31-24b-instruct.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Mistral Small 31 24b Instruct" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "mistral-small" -release_date = "2025-04-15" -last_updated = "2025-04-15" -attachment = true -reasoning = false -tool_call = false -structured_output = false -open_weights = true - -[cost] -input = 0.1 -output = 0.3 -cache_read = 0.05 - -[limit] -context = 128_000 -input = 128_000 -output = 131_072 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/mistral/mistral-medium-3.5.toml b/providers/nano-gpt/models/mistral/mistral-medium-3.5.toml deleted file mode 100644 index 0c11d88d490..00000000000 --- a/providers/nano-gpt/models/mistral/mistral-medium-3.5.toml +++ /dev/null @@ -1,29 +0,0 @@ -# Not included in subscription -name = "Mistral Medium 3.5" -description = "Mistral model for multilingual chat, reasoning, and tool-assisted workflows" -family = "mistral-medium" -release_date = "2026-04-29" -last_updated = "2026-04-29" -attachment = true -reasoning = true -tool_call = true -structured_output = true -open_weights = true - -[[reasoning_options]] -type = "effort" -values = ["none", "high"] - -[cost] -input = 1.5 -output = 7.5 -cache_read = 0.75 - -[limit] -context = 256_000 -input = 256_000 -output = 32_768 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/mistral/mistral-medium-3.5:thinking.toml b/providers/nano-gpt/models/mistral/mistral-medium-3.5:thinking.toml deleted file mode 100644 index 1c5240e619a..00000000000 --- a/providers/nano-gpt/models/mistral/mistral-medium-3.5:thinking.toml +++ /dev/null @@ -1,29 +0,0 @@ -# Not included in subscription -name = "Mistral Medium 3.5 Thinking" -description = "Mistral model for multilingual chat, reasoning, and tool-assisted workflows" -family = "mistral-medium" -release_date = "2026-04-30" -last_updated = "2026-04-30" -attachment = true -reasoning = true -tool_call = true -structured_output = true -open_weights = true - -[[reasoning_options]] -type = "effort" -values = ["none", "high"] - -[cost] -input = 1.5 -output = 7.5 -cache_read = 0.75 - -[limit] -context = 256_000 -input = 256_000 -output = 32_768 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/mistralai/Devstral-Small-2505.toml b/providers/nano-gpt/models/mistralai/Devstral-Small-2505.toml deleted file mode 100644 index 04d6ee20dc8..00000000000 --- a/providers/nano-gpt/models/mistralai/Devstral-Small-2505.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Mistral Devstral Small 2505" -description = "Mistral coding agent model for repository tasks and software engineering workflows" -family = "devstral" -release_date = "2025-08-02" -last_updated = "2025-08-02" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = true - -[cost] -input = 0.06 -output = 0.06 -cache_read = 0.03 - -[limit] -context = 32_768 -input = 32_768 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/mistralai/Mistral-Nemo-Instruct-2407.toml b/providers/nano-gpt/models/mistralai/Mistral-Nemo-Instruct-2407.toml deleted file mode 100644 index 34cd455d40c..00000000000 --- a/providers/nano-gpt/models/mistralai/Mistral-Nemo-Instruct-2407.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Mistral Nemo" -description = "Mistral model for multilingual chat, reasoning, and tool-assisted workflows" -family = "mistral-nemo" -release_date = "2024-01-01" -last_updated = "2024-07-18" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = true - -[cost] -input = 0.1003 -output = 0.1207 -cache_read = 0.05015 - -[limit] -context = 16_384 -input = 16_384 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/mistralai/devstral-small-2505.toml b/providers/nano-gpt/models/mistralai/devstral-small-2505.toml new file mode 100644 index 00000000000..a8cfcbf3f42 --- /dev/null +++ b/providers/nano-gpt/models/mistralai/devstral-small-2505.toml @@ -0,0 +1,24 @@ +name = "Mistral Devstral Small 2505" +description = "OpenHands+Devstral is 100% local 100% open, and is SOTA for the category on SWE-Bench Verified: 46.8% accuracy." +family = "devstral" +release_date = "2025-08-02" +last_updated = "2025-08-02" +attachment = false +reasoning = false +tool_call = false +structured_output = false +open_weights = true + +[cost] +input = 0.06 +output = 0.06 +cache_read = 0.03 + +[limit] +context = 32_768 +input = 32_768 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/mistralai/mistral-large-3-675b-instruct-2512.toml b/providers/nano-gpt/models/mistralai/mistral-large-3-675b-instruct-2512.toml deleted file mode 100644 index 0a0650a3987..00000000000 --- a/providers/nano-gpt/models/mistralai/mistral-large-3-675b-instruct-2512.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Mistral Large 3 675B" -description = "Flagship Mistral model for advanced reasoning, coding, and multilingual work" -family = "mistral-large" -release_date = "2025-12-25" -last_updated = "2025-12-02" -attachment = true -reasoning = false -tool_call = false -structured_output = false -open_weights = true - -[cost] -input = 1 -output = 3 -cache_read = 0.5 - -[limit] -context = 262_144 -input = 262_144 -output = 256_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/mistralai/mistral-large.toml b/providers/nano-gpt/models/mistralai/mistral-large.toml index 57daad375cb..e2b013f694f 100644 --- a/providers/nano-gpt/models/mistralai/mistral-large.toml +++ b/providers/nano-gpt/models/mistralai/mistral-large.toml @@ -17,7 +17,7 @@ cache_read = 0.2 [limit] context = 128_000 input = 128_000 -output = 256_000 +output = 102_400 [modalities] input = ["text"] diff --git a/providers/nano-gpt/models/mistralai/mistral-medium-3.5.toml b/providers/nano-gpt/models/mistralai/mistral-medium-3.5.toml new file mode 100644 index 00000000000..f5857d73d12 --- /dev/null +++ b/providers/nano-gpt/models/mistralai/mistral-medium-3.5.toml @@ -0,0 +1,28 @@ +name = "Mistral Medium 3.5" +description = "Mistral Medium 3.5 is a 128B dense open-weights flagship model for instruction-following, reasoning, coding, long-horizon agentic work, tool use, structured output, and multimodal prompts. It supports a 256k context window and configurable reasoning effort." +family = "mistral-medium" +release_date = "2026-04-29" +last_updated = "2026-04-29" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 1.5 +output = 7.5 +cache_read = 0.75 + +[limit] +context = 256_000 +input = 256_000 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/mistralai/mistral-medium-3.5:thinking.toml b/providers/nano-gpt/models/mistralai/mistral-medium-3.5:thinking.toml new file mode 100644 index 00000000000..7aefb13aa98 --- /dev/null +++ b/providers/nano-gpt/models/mistralai/mistral-medium-3.5:thinking.toml @@ -0,0 +1,28 @@ +name = "Mistral Medium 3.5 Thinking" +description = "Mistral Medium 3.5 with reasoning enabled by default (reasoning_effort=high), for complex coding, agentic, and multi-step reasoning prompts." +family = "mistral-medium" +release_date = "2026-04-30" +last_updated = "2026-04-30" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 1.5 +output = 7.5 +cache_read = 0.75 + +[limit] +context = 256_000 +input = 256_000 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/mistralai/mistral-nemo-instruct-2407.toml b/providers/nano-gpt/models/mistralai/mistral-nemo-instruct-2407.toml new file mode 100644 index 00000000000..5ab5f3549ce --- /dev/null +++ b/providers/nano-gpt/models/mistralai/mistral-nemo-instruct-2407.toml @@ -0,0 +1,24 @@ +name = "Mistral Nemo" +description = "12B parameter model with multilingual support." +family = "mistral-nemo" +release_date = "2024-01-01" +last_updated = "2024-01-01" +attachment = false +reasoning = false +tool_call = false +structured_output = false +open_weights = true + +[cost] +input = 0.1003 +output = 0.1207 +cache_read = 0.05015 + +[limit] +context = 16_384 +input = 16_384 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/mistralai/mistral-saba.toml b/providers/nano-gpt/models/mistralai/mistral-saba.toml index e7fa089e08a..f734da7f7ef 100644 --- a/providers/nano-gpt/models/mistralai/mistral-saba.toml +++ b/providers/nano-gpt/models/mistralai/mistral-saba.toml @@ -15,9 +15,9 @@ output = 0.595 cache_read = 0.09945 [limit] -context = 32_000 -input = 32_000 -output = 32_768 +context = 32_768 +input = 32_768 +output = 26_214 [modalities] input = ["text"] diff --git a/providers/nano-gpt/models/mistralai/mistral-small-24b-instruct-2501.toml b/providers/nano-gpt/models/mistralai/mistral-small-24b-instruct-2501.toml new file mode 100644 index 00000000000..09c4689bf49 --- /dev/null +++ b/providers/nano-gpt/models/mistralai/mistral-small-24b-instruct-2501.toml @@ -0,0 +1,23 @@ +name = "Mistral Small 24B" +description = "Mistral Small 24B hosted by IONOS in Berlin, Germany. Zero data retention." +family = "mistral-small" +release_date = "2026-09-10" +last_updated = "2026-09-10" +attachment = false +reasoning = false +tool_call = true +structured_output = false +open_weights = true + +[cost] +input = 0.1155 +output = 0.3465 + +[limit] +context = 32_768 +input = 32_768 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/mistralai/mistral-small-3.1-24b-instruct.toml b/providers/nano-gpt/models/mistralai/mistral-small-3.1-24b-instruct.toml new file mode 100644 index 00000000000..ed6ee8f4ca7 --- /dev/null +++ b/providers/nano-gpt/models/mistralai/mistral-small-3.1-24b-instruct.toml @@ -0,0 +1,24 @@ +name = "Mistral Small 3.1 24B (2503)" +description = "Building upon Mistral Small 3 (2501), Mistral Small 3.1 (2503) adds state-of-the-art vision understanding and enhances long context capabilities up to 128k tokens without compromising text performance. With 24 billion parameters, this model achieves top-tier capabilities in both text and vision tasks." +family = "mistral-small" +release_date = "2025-04-15" +last_updated = "2025-04-15" +attachment = true +reasoning = false +tool_call = false +structured_output = false +open_weights = true + +[cost] +input = 0.1 +output = 0.3 +cache_read = 0.05 + +[limit] +context = 128_000 +input = 128_000 +output = 102_400 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/mistralai/mistral-small-3.2-24b-instruct.toml b/providers/nano-gpt/models/mistralai/mistral-small-3.2-24b-instruct.toml new file mode 100644 index 00000000000..294870992cf --- /dev/null +++ b/providers/nano-gpt/models/mistralai/mistral-small-3.2-24b-instruct.toml @@ -0,0 +1,24 @@ +name = "Mistral Small 3.2 24B (2506)" +description = "The latest iteration of Mistral Small, version 3.2 (2506) brings enhanced performance and capabilities. With 24 billion parameters, this model delivers state-of-the-art results across text generation tasks with improved efficiency." +family = "mistral-small" +release_date = "2025-04-15" +last_updated = "2025-04-15" +attachment = false +reasoning = false +tool_call = false +structured_output = false +open_weights = true + +[cost] +input = 0.2 +output = 0.4 +cache_read = 0.1 + +[limit] +context = 128_000 +input = 128_000 +output = 16_384 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/mistralai/mixtral-8x22b-instruct-v0.1.toml b/providers/nano-gpt/models/mistralai/mixtral-8x22b-instruct-v0.1.toml index 4046941d9fb..86ba96a048d 100644 --- a/providers/nano-gpt/models/mistralai/mixtral-8x22b-instruct-v0.1.toml +++ b/providers/nano-gpt/models/mistralai/mixtral-8x22b-instruct-v0.1.toml @@ -17,7 +17,7 @@ cache_read = 0.2 [limit] context = 65_536 input = 65_536 -output = 65_536 +output = 52_428 [modalities] input = ["text"] diff --git a/providers/nano-gpt/models/moonshotai/Kimi-K2-Instruct-0905.toml b/providers/nano-gpt/models/moonshotai/Kimi-K2-Instruct-0905.toml index 4f6b5e80cee..361a76e0f44 100644 --- a/providers/nano-gpt/models/moonshotai/Kimi-K2-Instruct-0905.toml +++ b/providers/nano-gpt/models/moonshotai/Kimi-K2-Instruct-0905.toml @@ -15,9 +15,9 @@ output = 1.8 cache_read = 0.2 [limit] -context = 256_000 -input = 256_000 -output = 262_144 +context = 262_144 +input = 262_144 +output = 100_352 [modalities] input = ["text"] diff --git a/providers/nano-gpt/models/moonshotai/kimi-k3.toml b/providers/nano-gpt/models/moonshotai/kimi-k3.toml index f626dad940c..35abf18bf41 100644 --- a/providers/nano-gpt/models/moonshotai/kimi-k3.toml +++ b/providers/nano-gpt/models/moonshotai/kimi-k3.toml @@ -5,10 +5,10 @@ type = "effort" values = ["low", "high", "max"] [cost] -input = 2.5 -output = 13.5 -cache_read = 0.25 +input = 2 +output = 10 +cache_read = 0.2 [limit] input = 1_048_576 -output = 1_048_576 +output = 943_718 diff --git a/providers/nano-gpt/models/moonshotai/kimi-latest.toml b/providers/nano-gpt/models/moonshotai/kimi-latest.toml index 0a406444695..fd837ffa80f 100644 --- a/providers/nano-gpt/models/moonshotai/kimi-latest.toml +++ b/providers/nano-gpt/models/moonshotai/kimi-latest.toml @@ -15,14 +15,14 @@ type = "effort" values = ["low", "high", "max"] [cost] -input = 2.5 -output = 13.5 -cache_read = 0.25 +input = 2 +output = 10 +cache_read = 0.2 [limit] context = 1_048_576 input = 1_048_576 -output = 1_048_576 +output = 943_718 [modalities] input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/nano/lumen-stealth.toml b/providers/nano-gpt/models/nano/lumen-stealth.toml new file mode 100644 index 00000000000..9b27918c763 --- /dev/null +++ b/providers/nano-gpt/models/nano/lumen-stealth.toml @@ -0,0 +1,23 @@ +name = "Lumen Stealth" +description = "Experimental multimodal model focused on reasoning, creative writing, roleplay, and agentic workflows. Available temporarily for evaluation ahead of public release. During this evaluation, prompts and responses are logged and may be reviewed to evaluate and improve the model. Do not send sensitive or confidential information." +release_date = "2026-09-22" +last_updated = "2026-09-22" +attachment = true +reasoning = true +tool_call = false +structured_output = false +open_weights = false +reasoning_options = [] + +[cost] +input = 0.05 +output = 0 + +[limit] +context = 200_000 +input = 200_000 +output = 100_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/nex-agi/nex-n2-mini.toml b/providers/nano-gpt/models/nex-agi/nex-n2-mini.toml deleted file mode 100644 index f968a2c4a61..00000000000 --- a/providers/nano-gpt/models/nex-agi/nex-n2-mini.toml +++ /dev/null @@ -1,28 +0,0 @@ -name = "Nex N2 Mini" -description = "Nex AGI's open-source agentic mixture-of-experts model in the Nex N2 family. It accepts text and image input and is built for coding, tool use, structured outputs, and optional reasoning with a 256K context window." -family = "agi" -release_date = "2026-06-24" -last_updated = "2026-06-24" -attachment = true -reasoning = true -tool_call = true -structured_output = true -open_weights = true - -[[reasoning_options]] -type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh"] - -[cost] -input = 0.025 -output = 0.1 -cache_read = 0.0025 - -[limit] -context = 262_144 -input = 262_144 -output = 262_144 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/nex-agi/nex-n2-pro.toml b/providers/nano-gpt/models/nex-agi/nex-n2-pro.toml deleted file mode 100644 index 3b5671f942f..00000000000 --- a/providers/nano-gpt/models/nex-agi/nex-n2-pro.toml +++ /dev/null @@ -1,28 +0,0 @@ -name = "Nex N2 Pro" -description = "Nex AGI's open-source agentic reasoning model, post-trained on Qwen3.5-397B-A17B. It is built for agentic coding, software engineering, deep research, tool use, and long-horizon tasks with a 256K context window." -family = "agi" -release_date = "2026-06-04" -last_updated = "2026-06-04" -attachment = true -reasoning = true -tool_call = true -structured_output = true -open_weights = true - -[[reasoning_options]] -type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh"] - -[cost] -input = 0.5 -output = 2.5 -cache_read = 0.25 - -[limit] -context = 262_144 -input = 262_144 -output = 262_144 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/nothingiisreal/L3.1-70B-Celeste-V0.1-BF16.toml b/providers/nano-gpt/models/nothingiisreal/L3.1-70B-Celeste-V0.1-BF16.toml index 186b9deba87..53ac8ca2e8d 100644 --- a/providers/nano-gpt/models/nothingiisreal/L3.1-70B-Celeste-V0.1-BF16.toml +++ b/providers/nano-gpt/models/nothingiisreal/L3.1-70B-Celeste-V0.1-BF16.toml @@ -15,8 +15,8 @@ output = 0.493 cache_read = 0.2465 [limit] -context = 16_384 -input = 16_384 +context = 32_768 +input = 32_768 output = 16_384 [modalities] diff --git a/providers/nano-gpt/models/nvidia/nemotron-3-nano-30b-a3b.toml b/providers/nano-gpt/models/nvidia/nemotron-3-nano-30b-a3b.toml index 03ce1728d5a..63920b4b3c2 100644 --- a/providers/nano-gpt/models/nvidia/nemotron-3-nano-30b-a3b.toml +++ b/providers/nano-gpt/models/nvidia/nemotron-3-nano-30b-a3b.toml @@ -10,5 +10,5 @@ output = 0.68 cache_read = 0.085 [limit] -context = 256_000 -input = 256_000 +input = 262_144 +output = 235_929 diff --git a/providers/nano-gpt/models/nvidia/nemotron-3-nano-omni-30b-a3b-reasoning.toml b/providers/nano-gpt/models/nvidia/nemotron-3-nano-omni-30b-a3b-reasoning.toml deleted file mode 100644 index 092ddf387b9..00000000000 --- a/providers/nano-gpt/models/nvidia/nemotron-3-nano-omni-30b-a3b-reasoning.toml +++ /dev/null @@ -1,16 +0,0 @@ -# Included in subscription -base_model = "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning" -name = "Nvidia Nemotron 3 Nano Omni" -structured_output = false -reasoning_options = [] - -[cost] -input = 0.105 -output = 0.42 -cache_read = 0.0525 - -[limit] -input = 256_000 - -[modalities] -input = ["text", "image"] diff --git a/providers/nano-gpt/models/nvidia/nemotron-3.5-content-safety.toml b/providers/nano-gpt/models/nvidia/nemotron-3.5-content-safety.toml new file mode 100644 index 00000000000..8564f16dea6 --- /dev/null +++ b/providers/nano-gpt/models/nvidia/nemotron-3.5-content-safety.toml @@ -0,0 +1,17 @@ +base_model = "nvidia/nemotron-3.5-content-safety" +attachment = false +structured_output = false +reasoning_options = [] + +[cost] +input = 0.05 +output = 0.15 +cache_read = 0.025 + +[limit] +context = 131_072 +input = 131_072 +output = 32_768 + +[modalities] +input = ["text"] diff --git a/providers/nano-gpt/models/nvidia/nemotron-3.5-lightning.toml b/providers/nano-gpt/models/nvidia/nemotron-3.5-lightning.toml index 3aece5779f7..e2f97741108 100644 --- a/providers/nano-gpt/models/nvidia/nemotron-3.5-lightning.toml +++ b/providers/nano-gpt/models/nvidia/nemotron-3.5-lightning.toml @@ -1,5 +1,6 @@ base_model = "nvidia/nemotron-3.5-lightning" name = "Nvidia Nemotron 3.5 Lightning" +structured_output = false [[reasoning_options]] type = "effort" diff --git a/providers/nano-gpt/models/nvidia/nemotron-3.5-lightning:thinking.toml b/providers/nano-gpt/models/nvidia/nemotron-3.5-lightning:thinking.toml index b594cd96cdd..360ccdb1329 100644 --- a/providers/nano-gpt/models/nvidia/nemotron-3.5-lightning:thinking.toml +++ b/providers/nano-gpt/models/nvidia/nemotron-3.5-lightning:thinking.toml @@ -1,5 +1,6 @@ base_model = "nvidia/nemotron-3.5-lightning" name = "Nvidia Nemotron 3.5 Lightning Thinking" +structured_output = false [[reasoning_options]] type = "effort" diff --git a/providers/nano-gpt/models/openai/gpt-4-turbo-preview.toml b/providers/nano-gpt/models/openai/gpt-4-turbo-preview.toml deleted file mode 100644 index d875ca7149b..00000000000 --- a/providers/nano-gpt/models/openai/gpt-4-turbo-preview.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "GPT-4 Turbo Preview" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "gpt" -release_date = "2024-01-01" -last_updated = "2024-01-01" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 10 -output = 30 - -[limit] -context = 128_000 -input = 128_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/openai/gpt-4o-mini-search-preview.toml b/providers/nano-gpt/models/openai/gpt-4o-mini-search-preview.toml deleted file mode 100644 index c800c0963e9..00000000000 --- a/providers/nano-gpt/models/openai/gpt-4o-mini-search-preview.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "GPT-4o mini Search Preview" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "gpt-mini" -release_date = "2026-03-10" -last_updated = "2024-07-18" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 0.15 -output = 0.6 -cache_read = 0.075 - -[limit] -context = 128_000 -input = 128_000 -output = 16_384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/openai/gpt-4o-search-preview.toml b/providers/nano-gpt/models/openai/gpt-4o-search-preview.toml deleted file mode 100644 index d62866deb54..00000000000 --- a/providers/nano-gpt/models/openai/gpt-4o-search-preview.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "GPT-4o Search Preview" -description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" -family = "gpt" -release_date = "2026-03-10" -last_updated = "2024-05-13" -attachment = true -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 2.5 -output = 10 -cache_read = 1.25 - -[limit] -context = 128_000 -input = 128_000 -output = 16_384 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/openai/gpt-5-codex.toml b/providers/nano-gpt/models/openai/gpt-5-codex.toml deleted file mode 100644 index 764a0f7b309..00000000000 --- a/providers/nano-gpt/models/openai/gpt-5-codex.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "openai/gpt-5-codex" -name = "GPT-5 Codex" -reasoning_options = [] - -[cost] -input = 1.25 -output = 10 -cache_read = 0.125 - -[limit] -context = 256_000 -input = 256_000 -output = 32_768 - -[modalities] -input = ["text"] diff --git a/providers/nano-gpt/models/openai/gpt-5.1-2025-11-13.toml b/providers/nano-gpt/models/openai/gpt-5.1-2025-11-13.toml index 562a40ae89a..7ad09d53794 100644 --- a/providers/nano-gpt/models/openai/gpt-5.1-2025-11-13.toml +++ b/providers/nano-gpt/models/openai/gpt-5.1-2025-11-13.toml @@ -19,9 +19,9 @@ output = 10 cache_read = 0.125 [limit] -context = 1_000_000 -input = 1_000_000 -output = 32_768 +context = 400_000 +input = 400_000 +output = 128_000 [modalities] input = ["text"] diff --git a/providers/nano-gpt/models/openai/gpt-5.4.toml b/providers/nano-gpt/models/openai/gpt-5.4.toml index 90fff170418..4b213fbe090 100644 --- a/providers/nano-gpt/models/openai/gpt-5.4.toml +++ b/providers/nano-gpt/models/openai/gpt-5.4.toml @@ -12,4 +12,4 @@ output = 15 cache_read = 0.25 [limit] -context = 922_000 +input = 1_050_000 diff --git a/providers/nano-gpt/models/openai/gpt-5.5.toml b/providers/nano-gpt/models/openai/gpt-5.5.toml index cfb2b4240b9..1cf345d52f8 100644 --- a/providers/nano-gpt/models/openai/gpt-5.5.toml +++ b/providers/nano-gpt/models/openai/gpt-5.5.toml @@ -12,5 +12,4 @@ output = 30 cache_read = 0.5 [limit] -context = 1_000_000 -input = 1_000_000 +input = 1_050_000 diff --git a/providers/nano-gpt/models/openai/gpt-5.6-luna-pro.toml b/providers/nano-gpt/models/openai/gpt-5.6-luna-pro.toml index f344b44756f..d119f3ac6af 100644 --- a/providers/nano-gpt/models/openai/gpt-5.6-luna-pro.toml +++ b/providers/nano-gpt/models/openai/gpt-5.6-luna-pro.toml @@ -6,10 +6,10 @@ type = "effort" values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 0.1 -output = 0.6 -cache_read = 0.01 -cache_write = 0.125 +input = 0.2 +output = 1.2 +cache_read = 0.02 +cache_write = 0.25 [limit] input = 1_050_000 diff --git a/providers/nano-gpt/models/openai/gpt-5.6-luna.toml b/providers/nano-gpt/models/openai/gpt-5.6-luna.toml index af5dd2bd12e..614549cd96a 100644 --- a/providers/nano-gpt/models/openai/gpt-5.6-luna.toml +++ b/providers/nano-gpt/models/openai/gpt-5.6-luna.toml @@ -6,10 +6,10 @@ type = "effort" values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 0.1 -output = 0.6 -cache_read = 0.01 -cache_write = 0.125 +input = 0.2 +output = 1.2 +cache_read = 0.02 +cache_write = 0.25 [limit] input = 1_050_000 diff --git a/providers/nano-gpt/models/openai/gpt-5.6-terra-pro.toml b/providers/nano-gpt/models/openai/gpt-5.6-terra-pro.toml index 94be7d6ab03..3f9c760c1bd 100644 --- a/providers/nano-gpt/models/openai/gpt-5.6-terra-pro.toml +++ b/providers/nano-gpt/models/openai/gpt-5.6-terra-pro.toml @@ -6,10 +6,10 @@ type = "effort" values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 1 -output = 6 -cache_read = 0.1 -cache_write = 1.25 +input = 2 +output = 12 +cache_read = 0.2 +cache_write = 2.5 [limit] input = 1_050_000 diff --git a/providers/nano-gpt/models/openai/gpt-5.6-terra.toml b/providers/nano-gpt/models/openai/gpt-5.6-terra.toml index 3b7fabce4b4..e08edd7cf47 100644 --- a/providers/nano-gpt/models/openai/gpt-5.6-terra.toml +++ b/providers/nano-gpt/models/openai/gpt-5.6-terra.toml @@ -6,10 +6,10 @@ type = "effort" values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 1 -output = 6 -cache_read = 0.1 -cache_write = 1.25 +input = 2 +output = 12 +cache_read = 0.2 +cache_write = 2.5 [limit] input = 1_050_000 diff --git a/providers/nano-gpt/models/openai/gpt-6-astra-pro.toml b/providers/nano-gpt/models/openai/gpt-6-astra-pro.toml new file mode 100644 index 00000000000..7d7ab129d1a --- /dev/null +++ b/providers/nano-gpt/models/openai/gpt-6-astra-pro.toml @@ -0,0 +1,29 @@ +name = "GPT 6 Astra Pro" +description = "GPT 6 Astra in Pro reasoning mode. Uses additional model work for difficult tasks, with higher latency and token usage at the same per-token rates. Reasoning effort remains independently configurable." +family = "gpt" +release_date = "2026-09-04" +last_updated = "2026-09-04" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[limit] +context = 1_050_000 +input = 1_050_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/openai/gpt-6-astra.toml b/providers/nano-gpt/models/openai/gpt-6-astra.toml new file mode 100644 index 00000000000..6d87b91b289 --- /dev/null +++ b/providers/nano-gpt/models/openai/gpt-6-astra.toml @@ -0,0 +1,15 @@ +base_model = "openai/gpt-6-astra" +name = "GPT 6 Astra" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[limit] +input = 1_050_000 diff --git a/providers/nano-gpt/models/openai/gpt-6-luna-pro.toml b/providers/nano-gpt/models/openai/gpt-6-luna-pro.toml new file mode 100644 index 00000000000..cc8bc7d726f --- /dev/null +++ b/providers/nano-gpt/models/openai/gpt-6-luna-pro.toml @@ -0,0 +1,29 @@ +name = "GPT 6 Luna Pro" +description = "GPT-6 Luna Pro uses the same underlying model as GPT-6 Luna with Pro reasoning mode enabled for higher-quality responses on complex tasks." +family = "gpt" +release_date = "2026-09-22" +last_updated = "2026-09-22" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.05 +output = 0.25 +cache_read = 0.005 +cache_write = 0.0625 + +[limit] +context = 1_050_000 +input = 1_050_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/openai/gpt-6-luna.toml b/providers/nano-gpt/models/openai/gpt-6-luna.toml new file mode 100644 index 00000000000..23f8b252eec --- /dev/null +++ b/providers/nano-gpt/models/openai/gpt-6-luna.toml @@ -0,0 +1,15 @@ +base_model = "openai/gpt-6-luna" +name = "GPT 6 Luna" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.05 +output = 0.25 +cache_read = 0.005 +cache_write = 0.0625 + +[limit] +input = 1_050_000 diff --git a/providers/nano-gpt/models/openai/gpt-6-sol-pro.toml b/providers/nano-gpt/models/openai/gpt-6-sol-pro.toml new file mode 100644 index 00000000000..1720ef7ae10 --- /dev/null +++ b/providers/nano-gpt/models/openai/gpt-6-sol-pro.toml @@ -0,0 +1,29 @@ +name = "GPT 6 Sol Pro" +description = "GPT-6 Sol Pro uses the same underlying model as GPT-6 Sol with Pro reasoning mode enabled for higher-quality responses on complex tasks." +family = "gpt" +release_date = "2026-09-22" +last_updated = "2026-09-22" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 + +[limit] +context = 1_050_000 +input = 1_050_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/openai/gpt-6-sol.toml b/providers/nano-gpt/models/openai/gpt-6-sol.toml new file mode 100644 index 00000000000..ee3ffe25af3 --- /dev/null +++ b/providers/nano-gpt/models/openai/gpt-6-sol.toml @@ -0,0 +1,15 @@ +base_model = "openai/gpt-6-sol" +name = "GPT 6 Sol" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 + +[limit] +input = 1_050_000 diff --git a/providers/nano-gpt/models/openai/gpt-astra-latest.toml b/providers/nano-gpt/models/openai/gpt-astra-latest.toml new file mode 100644 index 00000000000..35d4f3bcd9f --- /dev/null +++ b/providers/nano-gpt/models/openai/gpt-astra-latest.toml @@ -0,0 +1,29 @@ +name = "GPT Astra Latest" +description = "Compatibility alias that routes to GPT 6 Astra, the latest supported GPT Astra model." +family = "gpt-astra" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[limit] +context = 1_050_000 +input = 1_050_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/openai/gpt-latest.toml b/providers/nano-gpt/models/openai/gpt-latest.toml index a080340442c..4ee95a57363 100644 --- a/providers/nano-gpt/models/openai/gpt-latest.toml +++ b/providers/nano-gpt/models/openai/gpt-latest.toml @@ -12,13 +12,13 @@ open_weights = false [[reasoning_options]] type = "effort" -values = ["none", "low", "medium", "high", "xhigh", "max"] +values = ["low", "medium", "high", "xhigh", "max"] [cost] -input = 2 -output = 10 -cache_read = 0.2 -cache_write = 2.5 +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 [limit] context = 1_050_000 diff --git a/providers/nano-gpt/models/openai/gpt-luna-latest.toml b/providers/nano-gpt/models/openai/gpt-luna-latest.toml new file mode 100644 index 00000000000..c5990d9e154 --- /dev/null +++ b/providers/nano-gpt/models/openai/gpt-luna-latest.toml @@ -0,0 +1,29 @@ +name = "GPT Luna Latest" +description = "Compatibility alias that routes to GPT 5.6 Luna, the latest supported GPT Luna model." +family = "gpt-luna" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.2 +output = 1.2 +cache_read = 0.02 +cache_write = 0.25 + +[limit] +context = 1_050_000 +input = 1_050_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/openai/gpt-oss-safeguard-20b.toml b/providers/nano-gpt/models/openai/gpt-oss-safeguard-20b.toml index 3e77c6ed1e7..7500d84f34d 100644 --- a/providers/nano-gpt/models/openai/gpt-oss-safeguard-20b.toml +++ b/providers/nano-gpt/models/openai/gpt-oss-safeguard-20b.toml @@ -1,13 +1,6 @@ -name = "GPT OSS Safeguard 20B" -description = "Safety model for policy screening, moderation, and risk-aware routing workflows" -family = "gpt-oss" -release_date = "2026-02-23" -last_updated = "2025-10-29" -attachment = false -reasoning = true +base_model = "openai/gpt-oss-safeguard-20b" tool_call = false structured_output = false -open_weights = true [[reasoning_options]] type = "effort" @@ -21,7 +14,3 @@ output = 0.3 context = 128_000 input = 128_000 output = 16_384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/openai/gpt-sol-latest.toml b/providers/nano-gpt/models/openai/gpt-sol-latest.toml new file mode 100644 index 00000000000..5a374a5f702 --- /dev/null +++ b/providers/nano-gpt/models/openai/gpt-sol-latest.toml @@ -0,0 +1,29 @@ +name = "GPT Sol Latest" +description = "Compatibility alias that routes to GPT 5.6 Sol, the latest supported GPT Sol model." +family = "gpt-sol" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 + +[limit] +context = 1_050_000 +input = 1_050_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/openai/gpt-terra-latest.toml b/providers/nano-gpt/models/openai/gpt-terra-latest.toml new file mode 100644 index 00000000000..5cabdf7794c --- /dev/null +++ b/providers/nano-gpt/models/openai/gpt-terra-latest.toml @@ -0,0 +1,29 @@ +name = "GPT Terra Latest" +description = "Compatibility alias that routes to GPT 5.6 Terra, the latest supported GPT Terra model." +family = "gpt-terra" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 12 +cache_read = 0.2 +cache_write = 2.5 + +[limit] +context = 1_050_000 +input = 1_050_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/openai/o1-preview.toml b/providers/nano-gpt/models/openai/o1-preview.toml deleted file mode 100644 index 21b58841092..00000000000 --- a/providers/nano-gpt/models/openai/o1-preview.toml +++ /dev/null @@ -1,28 +0,0 @@ -name = "OpenAI o1-preview" -description = "O-series reasoning model for hard analysis, math, coding, and planning" -family = "o" -release_date = "2024-01-01" -last_updated = "2024-09-12" -attachment = false -reasoning = true -tool_call = false -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] - -[cost] -input = 15 -output = 60 -cache_read = 7.5 - -[limit] -context = 128_000 -input = 128_000 -output = 32_768 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/openai/o3-deep-research.toml b/providers/nano-gpt/models/openai/o3-deep-research.toml deleted file mode 100644 index b6822f52d20..00000000000 --- a/providers/nano-gpt/models/openai/o3-deep-research.toml +++ /dev/null @@ -1,20 +0,0 @@ -base_model = "openai/o3-deep-research" -name = "OpenAI o3 Deep Research" -attachment = false -tool_call = false -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["medium"] - -[cost] -input = 11 -output = 44 -cache_read = 5.5 - -[limit] -input = 200_000 - -[modalities] -input = ["text"] diff --git a/providers/nano-gpt/models/openai/o4-mini-deep-research.toml b/providers/nano-gpt/models/openai/o4-mini-deep-research.toml deleted file mode 100644 index 0c56b868c8e..00000000000 --- a/providers/nano-gpt/models/openai/o4-mini-deep-research.toml +++ /dev/null @@ -1,20 +0,0 @@ -base_model = "openai/o4-mini-deep-research" -name = "OpenAI o4-mini Deep Research" -attachment = false -tool_call = false -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["medium"] - -[cost] -input = 2.2 -output = 8.8 -cache_read = 1.1 - -[limit] -input = 200_000 - -[modalities] -input = ["text"] diff --git a/providers/nano-gpt/models/ornith-ai/ornith-1.5-35b-a3b.toml b/providers/nano-gpt/models/ornith-ai/ornith-1.5-35b-a3b.toml index 0b92da369ad..a2de9d1372a 100644 --- a/providers/nano-gpt/models/ornith-ai/ornith-1.5-35b-a3b.toml +++ b/providers/nano-gpt/models/ornith-ai/ornith-1.5-35b-a3b.toml @@ -1,7 +1,7 @@ name = "Ornith 1.5 35B" description = "Ornith 1.5 35B A3B is an open-weight mixture-of-experts model for agentic coding, tool use, image understanding, and long-context work. This variant disables thinking for faster direct responses." family = "ornith" -release_date = "2026-08-20" +release_date = "2026-07-29" last_updated = "2026-08-20" attachment = true reasoning = true diff --git a/providers/nano-gpt/models/ornith-ai/ornith-1.5-35b-a3b:thinking.toml b/providers/nano-gpt/models/ornith-ai/ornith-1.5-35b-a3b:thinking.toml index ead77c04359..5b27e673c4e 100644 --- a/providers/nano-gpt/models/ornith-ai/ornith-1.5-35b-a3b:thinking.toml +++ b/providers/nano-gpt/models/ornith-ai/ornith-1.5-35b-a3b:thinking.toml @@ -1,7 +1,7 @@ name = "Ornith 1.5 35B Thinking" description = "Ornith 1.5 35B A3B is an open-weight mixture-of-experts model for agentic coding, reasoning, tool use, image understanding, and long-context work. This variant enables thinking by default." family = "ornith" -release_date = "2026-08-20" +release_date = "2026-07-29" last_updated = "2026-08-20" attachment = true reasoning = true diff --git a/providers/nano-gpt/models/ornith-ai/ornith-1.5-397b.toml b/providers/nano-gpt/models/ornith-ai/ornith-1.5-397b.toml deleted file mode 100644 index 6df2ea9f886..00000000000 --- a/providers/nano-gpt/models/ornith-ai/ornith-1.5-397b.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Ornith 1.5 397B" -description = "Ornith 1.5 397B is an open-weight mixture-of-experts model built for agentic coding, tool use, image understanding, and long-context workflows. This variant disables thinking for faster direct responses." -family = "ornith" -release_date = "2026-08-24" -last_updated = "2026-08-24" -attachment = true -reasoning = true -tool_call = true -structured_output = true -open_weights = true -reasoning_options = [] - -[cost] -input = 0.9 -output = 3.6 -cache_read = 0.045 - -[limit] -context = 262_144 -input = 262_144 -output = 32_768 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/ornith-ai/ornith-1.5-397b:thinking.toml b/providers/nano-gpt/models/ornith-ai/ornith-1.5-397b:thinking.toml deleted file mode 100644 index d157ab44a6f..00000000000 --- a/providers/nano-gpt/models/ornith-ai/ornith-1.5-397b:thinking.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Ornith 1.5 397B Thinking" -description = "Ornith 1.5 397B with thinking enabled for deeper agentic coding, reasoning, tool use, image understanding, and long-context workflows." -family = "ornith" -release_date = "2026-08-24" -last_updated = "2026-08-24" -attachment = true -reasoning = true -tool_call = true -structured_output = true -open_weights = true -reasoning_options = [] - -[cost] -input = 0.9 -output = 3.6 -cache_read = 0.045 - -[limit] -context = 262_144 -input = 262_144 -output = 32_768 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/ornith-ai/ornith-1.5-9b.toml b/providers/nano-gpt/models/ornith-ai/ornith-1.5-9b.toml deleted file mode 100644 index bc5ab6144ba..00000000000 --- a/providers/nano-gpt/models/ornith-ai/ornith-1.5-9b.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Ornith 1.5 9B" -description = "Ornith 1.5 9B is an FP8 dense open-weight reasoning model built for agentic coding, tool use, visual understanding, and efficient long-context work." -family = "ornith" -release_date = "2026-08-23" -last_updated = "2026-08-23" -attachment = true -reasoning = true -tool_call = true -structured_output = true -open_weights = true -reasoning_options = [] - -[cost] -input = 0.05 -output = 0.1 -cache_read = 0.025 - -[limit] -context = 262_144 -input = 262_144 -output = 32_768 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/ornith-ai/ornith-1.5-9b:thinking.toml b/providers/nano-gpt/models/ornith-ai/ornith-1.5-9b:thinking.toml deleted file mode 100644 index 7c66d52c707..00000000000 --- a/providers/nano-gpt/models/ornith-ai/ornith-1.5-9b:thinking.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Ornith 1.5 9B Thinking" -description = "Ornith 1.5 9B with thinking enabled for more deliberate agentic coding, tool use, visual understanding, and long-context work." -family = "ornith" -release_date = "2026-08-24" -last_updated = "2026-08-24" -attachment = true -reasoning = true -tool_call = true -structured_output = true -open_weights = true -reasoning_options = [] - -[cost] -input = 0.05 -output = 0.1 -cache_read = 0.025 - -[limit] -context = 262_144 -input = 262_144 -output = 32_768 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/perplexity-academic-researcher.toml b/providers/nano-gpt/models/perplexity-academic-researcher.toml deleted file mode 100644 index 44b93b1f04e..00000000000 --- a/providers/nano-gpt/models/perplexity-academic-researcher.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Perplexity Academic Researcher" -description = "Sonar Reasoning Pro with Perplexity's academic search mode. Prioritizes scholarly and peer-reviewed sources from academic repositories and returns cited research synthesis." -release_date = "2026-07-10" -last_updated = "2026-07-10" -attachment = false -reasoning = true -tool_call = false -structured_output = false -open_weights = false -reasoning_options = [] - -[cost] -input = 2 -output = 8 -cache_read = 1 - -[limit] -context = 127_000 -input = 127_000 -output = 128_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/poolside/laguna-m.1.toml b/providers/nano-gpt/models/poolside/laguna-m.1.toml deleted file mode 100644 index 4b6640a8a82..00000000000 --- a/providers/nano-gpt/models/poolside/laguna-m.1.toml +++ /dev/null @@ -1,12 +0,0 @@ -# Included in subscription -base_model = "poolside/laguna-m.1" -reasoning = false -tool_call = false - -[cost] -input = 0.2 -output = 0.4 -cache_read = 0.1 - -[limit] -input = 262_144 diff --git a/providers/nano-gpt/models/prism-ml/ternary-bonsai-2-27b.toml b/providers/nano-gpt/models/prism-ml/ternary-bonsai-2-27b.toml new file mode 100644 index 00000000000..32eb4c91ae5 --- /dev/null +++ b/providers/nano-gpt/models/prism-ml/ternary-bonsai-2-27b.toml @@ -0,0 +1,27 @@ +name = "Ternary Bonsai 2 27B" +description = "Ternary Bonsai 2 27B is a 27B-parameter reasoning model from PrismML derived from Qwen3.8-27B. It supports coding, mathematics, tool calling, and image understanding with a 262K-token context window." +release_date = "2026-09-18" +last_updated = "2026-09-18" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = true + +[[reasoning_options]] +type = "effort" +values = ["medium", "xhigh"] + +[cost] +input = 0.075 +output = 0.5 +cache_read = 0.0375 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/qwen-3.6-plus.toml b/providers/nano-gpt/models/qwen-3.6-plus.toml deleted file mode 100644 index 76d18669d5a..00000000000 --- a/providers/nano-gpt/models/qwen-3.6-plus.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Qwen 3.6 Plus" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "qwen3.6" -release_date = "2026-04-02" -last_updated = "2026-04-02" -attachment = true -reasoning = false -tool_call = true -structured_output = false -open_weights = false - -[cost] -input = 0.325 -output = 1.95 -cache_read = 0.0325 -cache_write = 0.40625 - -[limit] -context = 991_808 -input = 991_808 -output = 65_536 - -[modalities] -input = ["text", "image", "video"] -output = ["text"] diff --git a/providers/nano-gpt/models/qwen-long.toml b/providers/nano-gpt/models/qwen-long.toml deleted file mode 100644 index 2d5577bad56..00000000000 --- a/providers/nano-gpt/models/qwen-long.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Qwen Long 10M" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "qwen" -release_date = "2024-08-01" -last_updated = "2025-01-25" -attachment = true -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 0.1003 -output = 0.408 -cache_read = 0.05015 - -[limit] -context = 10_000_000 -input = 10_000_000 -output = 8_192 - -[modalities] -input = ["text", "pdf"] -output = ["text"] diff --git a/providers/nano-gpt/models/qwen-plus.toml b/providers/nano-gpt/models/qwen-plus.toml deleted file mode 100644 index 533821e91df..00000000000 --- a/providers/nano-gpt/models/qwen-plus.toml +++ /dev/null @@ -1,20 +0,0 @@ -base_model = "alibaba/qwen-plus" -tool_call = false -structured_output = false - -[[reasoning_options]] -type = "toggle" - -[[reasoning_options]] -type = "budget_tokens" -min = 1_024 -max = 81_920 - -[cost] -input = 0.3995 -output = 1.2002 -cache_read = 0.19975 - -[limit] -context = 995_904 -input = 995_904 diff --git a/providers/nano-gpt/models/qwen/Qwen2.5-Coder-32B-Instruct.toml b/providers/nano-gpt/models/qwen/Qwen2.5-Coder-32B-Instruct.toml deleted file mode 100644 index d62bbdf8079..00000000000 --- a/providers/nano-gpt/models/qwen/Qwen2.5-Coder-32B-Instruct.toml +++ /dev/null @@ -1,14 +0,0 @@ -# Included in subscription -base_model = "alibaba/qwen2.5-coder-32b-instruct" -name = "Qwen 2.5 Coder 32b" -tool_call = false -structured_output = false - -[cost] -input = 0.2006 -output = 0.2006 -cache_read = 0.1003 - -[limit] -context = 32_000 -input = 32_000 diff --git a/providers/nano-gpt/models/qwen/Qwen3-235B-A22B-Instruct-2507.toml b/providers/nano-gpt/models/qwen/Qwen3-235B-A22B-Instruct-2507.toml deleted file mode 100644 index 66e71cbc4e5..00000000000 --- a/providers/nano-gpt/models/qwen/Qwen3-235B-A22B-Instruct-2507.toml +++ /dev/null @@ -1,14 +0,0 @@ -# Included in subscription -base_model = "alibaba/qwen3-235b-a22b-instruct-2507" -name = "Qwen 3 235b A22B 2507" -structured_output = true - -[cost] -input = 0.13 -output = 0.5 -cache_read = 0.065 - -[limit] -context = 256_000 -input = 256_000 -output = 262_144 diff --git a/providers/nano-gpt/models/qwen/Qwen3-235B-A22B-Thinking-2507.toml b/providers/nano-gpt/models/qwen/Qwen3-235B-A22B-Thinking-2507.toml deleted file mode 100644 index 413764df999..00000000000 --- a/providers/nano-gpt/models/qwen/Qwen3-235B-A22B-Thinking-2507.toml +++ /dev/null @@ -1,25 +0,0 @@ -# Included in subscription -name = "Qwen 3 235b A22B 2507 Thinking" -description = "Qwen reasoning model for deliberate problem solving, math, and coding" -family = "qwen" -release_date = "2025-09-11" -last_updated = "2025-09-11" -attachment = false -reasoning = false -tool_call = true -structured_output = false -open_weights = true - -[cost] -input = 0.3 -output = 0.5 -cache_read = 0.15 - -[limit] -context = 256_000 -input = 256_000 -output = 262_144 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/qwen/Qwen3-8B.toml b/providers/nano-gpt/models/qwen/Qwen3-8B.toml deleted file mode 100644 index bc8aaa1ddb2..00000000000 --- a/providers/nano-gpt/models/qwen/Qwen3-8B.toml +++ /dev/null @@ -1,25 +0,0 @@ -# Included in subscription -name = "Qwen 3 8B" -description = "Qwen instruction model for multilingual chat, reasoning, and tool use" -family = "qwen" -release_date = "2024-01-01" -last_updated = "2024-01-01" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = true - -[cost] -input = 0.47 -output = 0.47 -cache_read = 0.235 - -[limit] -context = 41_000 -input = 41_000 -output = 32_768 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/qwen/Qwen3-Next-80B-A3B-Instruct.toml b/providers/nano-gpt/models/qwen/Qwen3-Next-80B-A3B-Instruct.toml deleted file mode 100644 index 7966eaf4786..00000000000 --- a/providers/nano-gpt/models/qwen/Qwen3-Next-80B-A3B-Instruct.toml +++ /dev/null @@ -1,14 +0,0 @@ -# Included in subscription -base_model = "alibaba/qwen3-next-80b-a3b-instruct" -name = "Qwen3 Next 80B A3B (Instruct)" -structured_output = true - -[cost] -input = 0.15 -output = 0.65 -cache_read = 0.075 - -[limit] -context = 256_000 -input = 256_000 -output = 262_144 diff --git a/providers/nano-gpt/models/qwen/Qwen3-VL-235B-A22B-Instruct.toml b/providers/nano-gpt/models/qwen/Qwen3-VL-235B-A22B-Instruct.toml deleted file mode 100644 index ac6a9dc7839..00000000000 --- a/providers/nano-gpt/models/qwen/Qwen3-VL-235B-A22B-Instruct.toml +++ /dev/null @@ -1,14 +0,0 @@ -# Included in subscription -base_model = "alibaba/qwen3-vl-235b-a22b-instruct" -tool_call = false -structured_output = false - -[cost] -input = 0.3 -output = 1.2 -cache_read = 0.15 - -[limit] -context = 128_000 -input = 128_000 -output = 262_144 diff --git a/providers/nano-gpt/models/qwen/Qwen3.6-35B-A3B.toml b/providers/nano-gpt/models/qwen/Qwen3.6-35B-A3B.toml deleted file mode 100644 index 815ba570fca..00000000000 --- a/providers/nano-gpt/models/qwen/Qwen3.6-35B-A3B.toml +++ /dev/null @@ -1,17 +0,0 @@ -# Included in subscription -base_model = "alibaba/qwen3.6-35b-a3b" -name = "Qwen3.6 35B A3B" -reasoning = false -structured_output = false - -[cost] -input = 0.112 -output = 0.8 -cache_read = 0.056 - -[limit] -input = 262_144 -output = 16_384 - -[modalities] -input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/qwen/Qwen3.6-35B-A3B:thinking.toml b/providers/nano-gpt/models/qwen/Qwen3.6-35B-A3B:thinking.toml deleted file mode 100644 index faa635782f9..00000000000 --- a/providers/nano-gpt/models/qwen/Qwen3.6-35B-A3B:thinking.toml +++ /dev/null @@ -1,17 +0,0 @@ -# Included in subscription -base_model = "alibaba/qwen3.6-35b-a3b" -name = "Qwen3.6 35B A3B Thinking" -structured_output = false -reasoning_options = [] - -[cost] -input = 0.112 -output = 0.8 -cache_read = 0.056 - -[limit] -input = 262_144 -output = 16_384 - -[modalities] -input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/qwen/qwen-long.toml b/providers/nano-gpt/models/qwen/qwen-long.toml new file mode 100644 index 00000000000..dc36c556c44 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen-long.toml @@ -0,0 +1,24 @@ +name = "Qwen Long 10M" +description = "Alibaba's huge context window model. Takes in up to 10 million tokens, which is equivalent to dozens of books." +family = "qwen" +release_date = "2024-08-01" +last_updated = "2024-08-01" +attachment = true +reasoning = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.1003 +output = 0.408 +cache_read = 0.05015 + +[limit] +context = 10_000_000 +input = 10_000_000 +output = 8_192 + +[modalities] +input = ["text", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/qwen-max.toml b/providers/nano-gpt/models/qwen/qwen-max.toml similarity index 100% rename from providers/nano-gpt/models/qwen-max.toml rename to providers/nano-gpt/models/qwen/qwen-max.toml diff --git a/providers/nano-gpt/models/qwen/qwen-plus.toml b/providers/nano-gpt/models/qwen/qwen-plus.toml new file mode 100644 index 00000000000..89f28ecb6f6 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen-plus.toml @@ -0,0 +1,13 @@ +base_model = "alibaba/qwen-plus" +tool_call = false +structured_output = false +reasoning_options = [] + +[cost] +input = 0.3995 +output = 1.2002 +cache_read = 0.19975 + +[limit] +context = 995_904 +input = 995_904 diff --git a/providers/nano-gpt/models/qwen-turbo.toml b/providers/nano-gpt/models/qwen/qwen-turbo.toml similarity index 100% rename from providers/nano-gpt/models/qwen-turbo.toml rename to providers/nano-gpt/models/qwen/qwen-turbo.toml diff --git a/providers/nano-gpt/models/qwen/qwen2.5-coder-32b-instruct.toml b/providers/nano-gpt/models/qwen/qwen2.5-coder-32b-instruct.toml new file mode 100644 index 00000000000..221615dee2a --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen2.5-coder-32b-instruct.toml @@ -0,0 +1,13 @@ +base_model = "alibaba/qwen2.5-coder-32b-instruct" +name = "Qwen 2.5 Coder 32b" +tool_call = false +structured_output = false + +[cost] +input = 0.2006 +output = 0.2006 +cache_read = 0.1003 + +[limit] +context = 32_000 +input = 32_000 diff --git a/providers/nano-gpt/models/qwen/qwen3-14b.toml b/providers/nano-gpt/models/qwen/qwen3-14b.toml index 21b6ecf5bc8..0ec7e2615e0 100644 --- a/providers/nano-gpt/models/qwen/qwen3-14b.toml +++ b/providers/nano-gpt/models/qwen/qwen3-14b.toml @@ -6,7 +6,7 @@ release_date = "2024-01-01" last_updated = "2024-01-01" attachment = false reasoning = false -tool_call = false +tool_call = true structured_output = false open_weights = true diff --git a/providers/nano-gpt/models/qwen/qwen3-235b-a22b-instruct-2507.toml b/providers/nano-gpt/models/qwen/qwen3-235b-a22b-instruct-2507.toml new file mode 100644 index 00000000000..da2f8245205 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3-235b-a22b-instruct-2507.toml @@ -0,0 +1,11 @@ +base_model = "alibaba/qwen3-235b-a22b-instruct-2507" +name = "Qwen 3 235b A22B 2507" +structured_output = true + +[cost] +input = 0.13 +output = 0.5 +cache_read = 0.065 + +[limit] +input = 262_144 diff --git a/providers/nano-gpt/models/qwen/qwen3-235b-a22b.toml b/providers/nano-gpt/models/qwen/qwen3-235b-a22b.toml index 4438be6a0c3..dab4411afa2 100644 --- a/providers/nano-gpt/models/qwen/qwen3-235b-a22b.toml +++ b/providers/nano-gpt/models/qwen/qwen3-235b-a22b.toml @@ -11,9 +11,8 @@ output = 0.5 cache_read = 0.15 [limit] -context = 41_000 -input = 41_000 -output = 32_768 +context = 262_144 +input = 262_144 [modalities] input = ["text", "pdf"] diff --git a/providers/nano-gpt/models/qwen/qwen3-30b-a3b-instruct-2507.toml b/providers/nano-gpt/models/qwen/qwen3-30b-a3b-instruct-2507.toml new file mode 100644 index 00000000000..879ab1c3b88 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3-30b-a3b-instruct-2507.toml @@ -0,0 +1,24 @@ +name = "Qwen3 30B A3B Instruct 2507" +description = "Qwen3-30B-A3B-Instruct-2507 is a 30.5B-parameter mixture-of-experts language model from Qwen, with 3.3B active parameters per inference. Significant improvements in general capabilities, including instruction following, logical reasoning, text comprehension, mathematics, science, coding and tool usage." +family = "qwen" +release_date = "2025-02-20" +last_updated = "2025-02-20" +attachment = false +reasoning = false +tool_call = false +structured_output = false +open_weights = true + +[cost] +input = 0.2 +output = 0.5 +cache_read = 0.1 + +[limit] +context = 256_000 +input = 256_000 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/qwen/qwen3-8b.toml b/providers/nano-gpt/models/qwen/qwen3-8b.toml new file mode 100644 index 00000000000..96cac74c86b --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3-8b.toml @@ -0,0 +1,24 @@ +name = "Qwen 3 8B" +description = "Qwen 3 8B is a 8B model. Supports switching between thinking and non thinking: trigger thinking with /think and /no_think anywhere in a prompt or system message to toggle chain-of-thought reasoning." +family = "qwen" +release_date = "2024-01-01" +last_updated = "2024-01-01" +attachment = false +reasoning = false +tool_call = true +structured_output = false +open_weights = true + +[cost] +input = 0.47 +output = 0.47 +cache_read = 0.235 + +[limit] +context = 41_000 +input = 41_000 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/qwen3-coder-30b-a3b-instruct.toml b/providers/nano-gpt/models/qwen/qwen3-coder-30b-a3b-instruct.toml similarity index 100% rename from providers/nano-gpt/models/qwen3-coder-30b-a3b-instruct.toml rename to providers/nano-gpt/models/qwen/qwen3-coder-30b-a3b-instruct.toml diff --git a/providers/nano-gpt/models/qwen/qwen3-max-2026-01-23.toml b/providers/nano-gpt/models/qwen/qwen3-max-2026-01-23.toml new file mode 100644 index 00000000000..8ae8fcfc81f --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3-max-2026-01-23.toml @@ -0,0 +1,24 @@ +name = "Qwen3 Max 2026-01-23" +description = "Qwen3 Max is Alibaba's flagship Qwen 3 reasoning model with native tool use (web search, web extractor, code interpreter) and a 256K context window." +family = "qwen" +release_date = "2026-01-26" +last_updated = "2026-01-26" +attachment = false +reasoning = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 1.2002 +output = 6.001 +cache_read = 0.6001 + +[limit] +context = 256_000 +input = 256_000 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/qwen/qwen3-next-80b-a3b-instruct.toml b/providers/nano-gpt/models/qwen/qwen3-next-80b-a3b-instruct.toml new file mode 100644 index 00000000000..deab693555e --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3-next-80b-a3b-instruct.toml @@ -0,0 +1,12 @@ +base_model = "alibaba/qwen3-next-80b-a3b-instruct" +name = "Qwen3 Next 80B A3B (Instruct)" +structured_output = true + +[cost] +input = 0.15 +output = 0.65 +cache_read = 0.075 + +[limit] +context = 262_144 +input = 262_144 diff --git a/providers/nano-gpt/models/qwen/qwen3-vl-235b-a22b-instruct.toml b/providers/nano-gpt/models/qwen/qwen3-vl-235b-a22b-instruct.toml new file mode 100644 index 00000000000..8b97c180ac4 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3-vl-235b-a22b-instruct.toml @@ -0,0 +1,11 @@ +base_model = "alibaba/qwen3-vl-235b-a22b-instruct" +tool_call = false +structured_output = false + +[cost] +input = 0.3 +output = 1.9 +cache_read = 0.15 + +[limit] +input = 131_072 diff --git a/providers/nano-gpt/models/qwen/qwen3-vl-235b-a22b-thinking.toml b/providers/nano-gpt/models/qwen/qwen3-vl-235b-a22b-thinking.toml new file mode 100644 index 00000000000..7ded44f273c --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3-vl-235b-a22b-thinking.toml @@ -0,0 +1,9 @@ +base_model = "alibaba/qwen3-vl-235b-a22b-thinking" +tool_call = false +structured_output = false +reasoning_options = [] + +[cost] +input = 0.5 +output = 6 +cache_read = 0.25 diff --git a/providers/nano-gpt/models/qwen/qwen3.5-122b-a10b.toml b/providers/nano-gpt/models/qwen/qwen3.5-122b-a10b.toml new file mode 100644 index 00000000000..9d1311c4fc4 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.5-122b-a10b.toml @@ -0,0 +1,17 @@ +base_model = "alibaba/qwen3.5-122b-a10b" +name = "Qwen3.5 122B A10B" +attachment = false +reasoning = false + +[cost] +input = 0.437 +output = 3.496 +cache_read = 0.103788 + +[limit] +context = 131_072 +input = 131_072 +output = 32_768 + +[modalities] +input = ["text"] diff --git a/providers/nano-gpt/models/qwen/qwen3.5-122b-a10b:thinking.toml b/providers/nano-gpt/models/qwen/qwen3.5-122b-a10b:thinking.toml new file mode 100644 index 00000000000..be6d38169e7 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.5-122b-a10b:thinking.toml @@ -0,0 +1,17 @@ +base_model = "alibaba/qwen3.5-122b-a10b" +name = "Qwen3.5 122B A10B Thinking" +attachment = false +reasoning_options = [] + +[cost] +input = 0.437 +output = 3.496 +cache_read = 0.103788 + +[limit] +context = 131_072 +input = 131_072 +output = 32_768 + +[modalities] +input = ["text"] diff --git a/providers/nano-gpt/models/qwen/qwen3.5-27b.toml b/providers/nano-gpt/models/qwen/qwen3.5-27b.toml new file mode 100644 index 00000000000..32d037d663e --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.5-27b.toml @@ -0,0 +1,15 @@ +base_model = "alibaba/qwen3.5-27b" +reasoning = false +structured_output = false + +[cost] +input = 0.27 +output = 2.16 +cache_read = 0.135 + +[limit] +context = 260_096 +input = 260_096 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/qwen/qwen3.5-27b:thinking.toml b/providers/nano-gpt/models/qwen/qwen3.5-27b:thinking.toml new file mode 100644 index 00000000000..80fa741e926 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.5-27b:thinking.toml @@ -0,0 +1,16 @@ +base_model = "alibaba/qwen3.5-27b" +name = "Qwen3.5 27B Thinking" +structured_output = false +reasoning_options = [] + +[cost] +input = 0.27 +output = 2.16 +cache_read = 0.135 + +[limit] +context = 260_096 +input = 260_096 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/qwen/qwen3.5-35b-a3b.toml b/providers/nano-gpt/models/qwen/qwen3.5-35b-a3b.toml new file mode 100644 index 00000000000..c24e51666d7 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.5-35b-a3b.toml @@ -0,0 +1,16 @@ +base_model = "alibaba/qwen3.5-35b-a3b" +name = "Qwen3.5 35B A3B" +reasoning = false +structured_output = false + +[cost] +input = 0.225 +output = 1.8 +cache_read = 0.1125 + +[limit] +context = 260_096 +input = 260_096 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/qwen/qwen3.5-35b-a3b:thinking.toml b/providers/nano-gpt/models/qwen/qwen3.5-35b-a3b:thinking.toml new file mode 100644 index 00000000000..293b615da15 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.5-35b-a3b:thinking.toml @@ -0,0 +1,16 @@ +base_model = "alibaba/qwen3.5-35b-a3b" +name = "Qwen3.5 35B A3B Thinking" +structured_output = false +reasoning_options = [] + +[cost] +input = 0.225 +output = 1.8 +cache_read = 0.1125 + +[limit] +context = 260_096 +input = 260_096 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/qwen/qwen3.5-397b-a17b-thinking.toml b/providers/nano-gpt/models/qwen/qwen3.5-397b-a17b-thinking.toml deleted file mode 100644 index fe9f90244de..00000000000 --- a/providers/nano-gpt/models/qwen/qwen3.5-397b-a17b-thinking.toml +++ /dev/null @@ -1,21 +0,0 @@ -# Included in subscription -base_model = "alibaba/qwen3.5-397b-a17b" -name = "Qwen3.5 397B A17B Thinking" -structured_output = false - -[[reasoning_options]] -type = "budget_tokens" -min = 1_024 -max = 81_920 - -[cost] -input = 0.6 -output = 3.6 -cache_read = 0.3 - -[limit] -context = 258_048 -input = 258_048 - -[modalities] -input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/qwen/qwen3.5-397b-a17b:thinking.toml b/providers/nano-gpt/models/qwen/qwen3.5-397b-a17b:thinking.toml new file mode 100644 index 00000000000..871fa4d8523 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.5-397b-a17b:thinking.toml @@ -0,0 +1,16 @@ +base_model = "alibaba/qwen3.5-397b-a17b" +name = "Qwen3.5 397B A17B Thinking" +structured_output = false +reasoning_options = [] + +[cost] +input = 0.6 +output = 3.6 +cache_read = 0.3 + +[limit] +context = 258_048 +input = 258_048 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/qwen/qwen3.5-9b.toml b/providers/nano-gpt/models/qwen/qwen3.5-9b.toml index 3e8724687eb..0348c77e523 100644 --- a/providers/nano-gpt/models/qwen/qwen3.5-9b.toml +++ b/providers/nano-gpt/models/qwen/qwen3.5-9b.toml @@ -18,6 +18,3 @@ cache_read = 0.025 [limit] context = 256_000 input = 256_000 - -[modalities] -input = ["text", "image"] diff --git a/providers/nano-gpt/models/qwen/qwen3.5-flash.toml b/providers/nano-gpt/models/qwen/qwen3.5-flash.toml new file mode 100644 index 00000000000..1602bd5551c --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.5-flash.toml @@ -0,0 +1,13 @@ +base_model = "alibaba/qwen3.5-flash" +reasoning = false +tool_call = false +structured_output = false + +[cost] +input = 0.1 +output = 0.4 +cache_read = 0.05 + +[limit] +context = 991_808 +input = 991_808 diff --git a/providers/nano-gpt/models/qwen/qwen3.5-flash:thinking.toml b/providers/nano-gpt/models/qwen/qwen3.5-flash:thinking.toml new file mode 100644 index 00000000000..11bfed64c49 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.5-flash:thinking.toml @@ -0,0 +1,14 @@ +base_model = "alibaba/qwen3.5-flash" +name = "Qwen3.5 Flash Thinking" +tool_call = false +structured_output = false +reasoning_options = [] + +[cost] +input = 0.1 +output = 0.4 +cache_read = 0.05 + +[limit] +context = 991_808 +input = 991_808 diff --git a/providers/nano-gpt/models/qwen/qwen3.5-omni-flash.toml b/providers/nano-gpt/models/qwen/qwen3.5-omni-flash.toml new file mode 100644 index 00000000000..ee5c50a1c6b --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.5-omni-flash.toml @@ -0,0 +1,19 @@ +name = "Qwen3.5 Omni Flash" +description = "Qwen3.5 Omni Flash is Qwen's fast multimodal model. We verified live support for text prompts, images, audio files, and direct video URLs on Alibaba's chat-completions-compatible API. Alibaba describes Flash as a fully evolved version of Qwen3 Omni with audio input support across 60+ languages." +family = "qwen3.5" +release_date = "2026-03-30" +last_updated = "2026-03-30" +attachment = true +reasoning = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 49_152 +input = 49_152 +output = 16_384 + +[modalities] +input = ["text", "image", "video", "audio"] +output = ["text"] diff --git a/providers/nano-gpt/models/qwen/qwen3.5-omni-plus.toml b/providers/nano-gpt/models/qwen/qwen3.5-omni-plus.toml new file mode 100644 index 00000000000..2de40cc5893 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.5-omni-plus.toml @@ -0,0 +1,19 @@ +name = "Qwen3.5 Omni Plus" +description = "Qwen3.5 Omni Plus is Qwen's stronger general multimodal model. We verified live support for text prompts, images, audio files, and direct video URLs on Alibaba's chat-completions-compatible API. Alibaba describes Plus as a comprehensive evolution of Qwen3 Omni with support for over 10 hours of audio input." +family = "qwen3.5" +release_date = "2026-03-30" +last_updated = "2026-03-30" +attachment = true +reasoning = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 983_616 +input = 983_616 +output = 65_536 + +[modalities] +input = ["text", "image", "video", "audio"] +output = ["text"] diff --git a/providers/nano-gpt/models/qwen/qwen3.5-plus-thinking.toml b/providers/nano-gpt/models/qwen/qwen3.5-plus-thinking.toml deleted file mode 100644 index c62dcbeaaa2..00000000000 --- a/providers/nano-gpt/models/qwen/qwen3.5-plus-thinking.toml +++ /dev/null @@ -1,20 +0,0 @@ -# Not included in subscription -base_model = "alibaba/qwen3.5-plus" -name = "Qwen3.5 Plus Thinking" -attachment = true -tool_call = false -structured_output = false - -[[reasoning_options]] -type = "budget_tokens" -min = 1_024 -max = 81_920 - -[cost] -input = 0.4 -output = 2.4 -cache_read = 0.04 - -[limit] -context = 983_616 -input = 983_616 diff --git a/providers/nano-gpt/models/qwen/qwen3.5-plus:thinking.toml b/providers/nano-gpt/models/qwen/qwen3.5-plus:thinking.toml new file mode 100644 index 00000000000..e65e53b70fd --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.5-plus:thinking.toml @@ -0,0 +1,15 @@ +base_model = "alibaba/qwen3.5-plus" +name = "Qwen3.5 Plus Thinking" +attachment = true +tool_call = false +structured_output = false +reasoning_options = [] + +[cost] +input = 0.4 +output = 2.4 +cache_read = 0.04 + +[limit] +context = 983_616 +input = 983_616 diff --git a/providers/nano-gpt/models/qwen/qwen3.6-27b.toml b/providers/nano-gpt/models/qwen/qwen3.6-27b.toml new file mode 100644 index 00000000000..660bbf5d035 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.6-27b.toml @@ -0,0 +1,15 @@ +base_model = "alibaba/qwen3.6-27b" +reasoning = false +structured_output = false + +[cost] +input = 0.203 +output = 2.24 +cache_read = 0.1015 + +[limit] +context = 260_096 +input = 260_096 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/qwen/qwen3.6-27b:thinking.toml b/providers/nano-gpt/models/qwen/qwen3.6-27b:thinking.toml new file mode 100644 index 00000000000..b8de29ec3db --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.6-27b:thinking.toml @@ -0,0 +1,16 @@ +base_model = "alibaba/qwen3.6-27b" +name = "Qwen3.6 27B Thinking" +structured_output = false +reasoning_options = [] + +[cost] +input = 0.203 +output = 2.24 +cache_read = 0.1015 + +[limit] +context = 260_096 +input = 260_096 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/qwen/qwen3.6-35b-a3b-uncensored.toml b/providers/nano-gpt/models/qwen/qwen3.6-35b-a3b-uncensored.toml deleted file mode 100644 index f816868d2b5..00000000000 --- a/providers/nano-gpt/models/qwen/qwen3.6-35b-a3b-uncensored.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Qwen 3.6 35B A3B Uncensored" -description = "Qwen 3.6 35B A3B Uncensored is an FP8 open-weight mixture-of-experts model tuned for fewer refusals across chat, coding, tool use, and multimodal tasks." -family = "qwen3.6" -release_date = "2026-08-21" -last_updated = "2026-08-21" -attachment = true -reasoning = true -tool_call = true -structured_output = true -open_weights = true -reasoning_options = [] - -[cost] -input = 0.15 -output = 0.5 -cache_read = 0.075 - -[limit] -context = 262_144 -input = 262_144 -output = 32_768 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/qwen/qwen3.6-35b-a3b-uncensored:thinking.toml b/providers/nano-gpt/models/qwen/qwen3.6-35b-a3b-uncensored:thinking.toml deleted file mode 100644 index ee4b7ebe25e..00000000000 --- a/providers/nano-gpt/models/qwen/qwen3.6-35b-a3b-uncensored:thinking.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Qwen 3.6 35B A3B Uncensored Thinking" -description = "Qwen 3.6 35B A3B Uncensored with thinking enabled for more deliberate coding, multimodal analysis, tool use, and complex chat tasks." -family = "qwen3.6" -release_date = "2026-08-24" -last_updated = "2026-08-24" -attachment = true -reasoning = true -tool_call = true -structured_output = true -open_weights = true -reasoning_options = [] - -[cost] -input = 0.15 -output = 0.5 -cache_read = 0.075 - -[limit] -context = 262_144 -input = 262_144 -output = 32_768 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/qwen/qwen3.6-35b-a3b.toml b/providers/nano-gpt/models/qwen/qwen3.6-35b-a3b.toml new file mode 100644 index 00000000000..8f97165cf08 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.6-35b-a3b.toml @@ -0,0 +1,16 @@ +base_model = "alibaba/qwen3.6-35b-a3b" +name = "Qwen3.6 35B A3B" +reasoning = false +structured_output = false + +[cost] +input = 0.112 +output = 0.8 +cache_read = 0.056 + +[limit] +input = 262_144 +output = 16_384 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/qwen/qwen3.6-35b-a3b:thinking.toml b/providers/nano-gpt/models/qwen/qwen3.6-35b-a3b:thinking.toml new file mode 100644 index 00000000000..6305b4c7e97 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.6-35b-a3b:thinking.toml @@ -0,0 +1,16 @@ +base_model = "alibaba/qwen3.6-35b-a3b" +name = "Qwen3.6 35B A3B Thinking" +structured_output = false +reasoning_options = [] + +[cost] +input = 0.112 +output = 0.8 +cache_read = 0.056 + +[limit] +input = 262_144 +output = 16_384 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/alibaba/qwen3.6-flash.toml b/providers/nano-gpt/models/qwen/qwen3.6-flash.toml similarity index 100% rename from providers/nano-gpt/models/alibaba/qwen3.6-flash.toml rename to providers/nano-gpt/models/qwen/qwen3.6-flash.toml diff --git a/providers/nano-gpt/models/qwen3.6-max-preview.toml b/providers/nano-gpt/models/qwen/qwen3.6-max-preview.toml similarity index 100% rename from providers/nano-gpt/models/qwen3.6-max-preview.toml rename to providers/nano-gpt/models/qwen/qwen3.6-max-preview.toml diff --git a/providers/nano-gpt/models/qwen/qwen3.6-plus.toml b/providers/nano-gpt/models/qwen/qwen3.6-plus.toml new file mode 100644 index 00000000000..32e5100a867 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.6-plus.toml @@ -0,0 +1,14 @@ +base_model = "alibaba/qwen3.6-plus" +name = "Qwen 3.6 Plus" +reasoning = false +structured_output = false + +[cost] +input = 0.325 +output = 1.95 +cache_read = 0.0325 +cache_write = 0.40625 + +[limit] +context = 991_808 +input = 991_808 diff --git a/providers/nano-gpt/models/qwen3.7-flash.toml b/providers/nano-gpt/models/qwen/qwen3.7-flash.toml similarity index 100% rename from providers/nano-gpt/models/qwen3.7-flash.toml rename to providers/nano-gpt/models/qwen/qwen3.7-flash.toml diff --git a/providers/nano-gpt/models/qwen3.7-flash:thinking.toml b/providers/nano-gpt/models/qwen/qwen3.7-flash:thinking.toml similarity index 100% rename from providers/nano-gpt/models/qwen3.7-flash:thinking.toml rename to providers/nano-gpt/models/qwen/qwen3.7-flash:thinking.toml diff --git a/providers/nano-gpt/models/qwen/qwen3.7-max.toml b/providers/nano-gpt/models/qwen/qwen3.7-max.toml new file mode 100644 index 00000000000..a7bb9d17077 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.7-max.toml @@ -0,0 +1,15 @@ +base_model = "alibaba/qwen3.7-max" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 2.5 +output = 7.5 +cache_read = 0.5 +cache_write = 3.125 + +[limit] +input = 1_000_000 diff --git a/providers/nano-gpt/models/qwen3.7-max:thinking.toml b/providers/nano-gpt/models/qwen/qwen3.7-max:thinking.toml similarity index 89% rename from providers/nano-gpt/models/qwen3.7-max:thinking.toml rename to providers/nano-gpt/models/qwen/qwen3.7-max:thinking.toml index 5c4948444ef..e83e629bf83 100644 --- a/providers/nano-gpt/models/qwen3.7-max:thinking.toml +++ b/providers/nano-gpt/models/qwen/qwen3.7-max:thinking.toml @@ -1,4 +1,3 @@ -# Not included in subscription base_model = "alibaba/qwen3.7-max" name = "Qwen3.7 Max Thinking" structured_output = false diff --git a/providers/nano-gpt/models/qwen/qwen3.7-plus.toml b/providers/nano-gpt/models/qwen/qwen3.7-plus.toml new file mode 100644 index 00000000000..f4a154e614c --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.7-plus.toml @@ -0,0 +1,17 @@ +base_model = "alibaba/qwen3.7-plus" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.4 +output = 1.6 +cache_read = 0.08 +cache_write = 0.5 + +[limit] +context = 991_808 +input = 991_808 +output = 65_536 diff --git a/providers/nano-gpt/models/qwen3.7-plus:thinking.toml b/providers/nano-gpt/models/qwen/qwen3.7-plus:thinking.toml similarity index 90% rename from providers/nano-gpt/models/qwen3.7-plus:thinking.toml rename to providers/nano-gpt/models/qwen/qwen3.7-plus:thinking.toml index ac846d4646c..11e249fc621 100644 --- a/providers/nano-gpt/models/qwen3.7-plus:thinking.toml +++ b/providers/nano-gpt/models/qwen/qwen3.7-plus:thinking.toml @@ -1,4 +1,3 @@ -# Not included in subscription base_model = "alibaba/qwen3.7-plus" name = "Qwen3.7 Plus Thinking" structured_output = false diff --git a/providers/nano-gpt/models/qwen/qwen3.8-2.4t-a95b.toml b/providers/nano-gpt/models/qwen/qwen3.8-2.4t-a95b.toml deleted file mode 100644 index 3a44fadfe61..00000000000 --- a/providers/nano-gpt/models/qwen/qwen3.8-2.4t-a95b.toml +++ /dev/null @@ -1,18 +0,0 @@ -base_model = "alibaba/qwen3.8-2.4t-a95b" -name = "Qwen3.8 2.4T A95B (Max)" -attachment = true -reasoning = false - -[cost] -input = 2 -output = 6 -cache_read = 0.25 -cache_write = 2.5 - -[limit] -context = 991_000 -input = 991_000 -output = 65_536 - -[modalities] -input = ["text", "image", "video", "pdf"] diff --git a/providers/nano-gpt/models/qwen/qwen3.8-27b-cybersecurity.toml b/providers/nano-gpt/models/qwen/qwen3.8-27b-cybersecurity.toml new file mode 100644 index 00000000000..fcae44481c3 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.8-27b-cybersecurity.toml @@ -0,0 +1,25 @@ +name = "Qwen 3.8 27B Cybersecurity" +description = "Qwen 3.8 27B Cybersecurity is a cybersecurity-focused variant based on the uncensored model, with provider moderation for illegal activities. It supports optional reasoning, image understanding, tool calling, and a 262,144-token context window." +family = "qwen" +release_date = "2026-09-19" +last_updated = "2026-09-19" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.1 +output = 0.6 +cache_read = 0.05 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/qwen/qwen3.8-27b-fable.toml b/providers/nano-gpt/models/qwen/qwen3.8-27b-fable.toml new file mode 100644 index 00000000000..afff05408b8 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.8-27b-fable.toml @@ -0,0 +1,25 @@ +name = "Qwen 3.8 27B Fable" +description = "Qwen 3.8 27B Fable is an open-weight multimodal creative finetune for expressive dialogue, long-form storytelling, character work, and roleplay." +family = "qwen" +release_date = "2026-07-29" +last_updated = "2026-08-28" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.25 +output = 1.5 +cache_read = 0.125 + +[limit] +context = 524_288 +input = 524_288 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/qwen/qwen3.8-27b-hemmingway.toml b/providers/nano-gpt/models/qwen/qwen3.8-27b-hemmingway.toml new file mode 100644 index 00000000000..e8e4e1ce33f --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.8-27b-hemmingway.toml @@ -0,0 +1,25 @@ +name = "Qwen 3.8 27B Hemingway" +description = "Qwen 3.8 27B Hemingway is an open-weight NVFP4 multimodal creative finetune for long-form prose, character dialogue, storytelling, and roleplay." +family = "qwen" +release_date = "2026-09-21" +last_updated = "2026-09-21" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.25 +output = 1.5 +cache_read = 0.125 + +[limit] +context = 262_144 +input = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/qwen/qwen3.8-27b-obliterated.toml b/providers/nano-gpt/models/qwen/qwen3.8-27b-obliterated.toml index 279664ae347..a9ba3297827 100644 --- a/providers/nano-gpt/models/qwen/qwen3.8-27b-obliterated.toml +++ b/providers/nano-gpt/models/qwen/qwen3.8-27b-obliterated.toml @@ -1,7 +1,7 @@ name = "Qwen 3.8 27B Obliterated" description = "Qwen 3.8 27B Obliterated is an open-weight multimodal model LoRA-tuned for fewer refusals across chat, coding, reasoning, tool use, and long-context work." family = "qwen" -release_date = "2026-08-24" +release_date = "2026-07-29" last_updated = "2026-08-24" attachment = true reasoning = true @@ -11,13 +11,13 @@ open_weights = true reasoning_options = [] [cost] -input = 0.18 -output = 0.5 -cache_read = 0.075 +input = 0.25 +output = 1.5 +cache_read = 0.2 [limit] -context = 262_144 -input = 262_144 +context = 524_288 +input = 524_288 output = 32_768 [modalities] diff --git a/providers/nano-gpt/models/qwen/qwen3.8-27b-obliterated:thinking.toml b/providers/nano-gpt/models/qwen/qwen3.8-27b-obliterated:thinking.toml index d1f6a593767..2913df38ed3 100644 --- a/providers/nano-gpt/models/qwen/qwen3.8-27b-obliterated:thinking.toml +++ b/providers/nano-gpt/models/qwen/qwen3.8-27b-obliterated:thinking.toml @@ -1,7 +1,7 @@ name = "Qwen 3.8 27B Obliterated Thinking" description = "Qwen 3.8 27B Obliterated with thinking enabled for more deliberate creative work, coding, multimodal analysis, tool use, and long-context problem solving." family = "qwen" -release_date = "2026-08-24" +release_date = "2026-07-29" last_updated = "2026-08-24" attachment = true reasoning = true @@ -11,13 +11,13 @@ open_weights = true reasoning_options = [] [cost] -input = 0.18 -output = 0.5 -cache_read = 0.075 +input = 0.25 +output = 1.5 +cache_read = 0.2 [limit] -context = 262_144 -input = 262_144 +context = 524_288 +input = 524_288 output = 32_768 [modalities] diff --git a/providers/nano-gpt/models/qwen/qwen3.8-27b-queen.toml b/providers/nano-gpt/models/qwen/qwen3.8-27b-queen.toml new file mode 100644 index 00000000000..c8df4c54ae7 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.8-27b-queen.toml @@ -0,0 +1,25 @@ +name = "Qwen 3.8 27B Queen" +description = "Qwen 3.8 27B Queen is an open-weight roleplay finetune with image understanding, tool calling, optional reasoning, and a 262,144-token context window." +family = "qwen" +release_date = "2026-09-09" +last_updated = "2026-09-09" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.25 +output = 1.5 +cache_read = 0.125 + +[limit] +context = 524_288 +input = 524_288 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/qwen/qwen3.8-27b-uncensored.toml b/providers/nano-gpt/models/qwen/qwen3.8-27b-uncensored.toml index 3f57c29d10e..3dc414edb50 100644 --- a/providers/nano-gpt/models/qwen/qwen3.8-27b-uncensored.toml +++ b/providers/nano-gpt/models/qwen/qwen3.8-27b-uncensored.toml @@ -1,7 +1,7 @@ name = "Qwen 3.8 27B Uncensored" description = "Qwen 3.8 27B Uncensored is an NVFP4 open-weight multimodal model LoRA-tuned for fewer refusals across chat, coding, reasoning, tool use, and long-context work." family = "qwen" -release_date = "2026-08-21" +release_date = "2026-07-29" last_updated = "2026-08-21" attachment = true reasoning = true @@ -11,13 +11,13 @@ open_weights = true reasoning_options = [] [cost] -input = 0.18 -output = 0.5 -cache_read = 0.075 +input = 0.15 +output = 1.2 +cache_read = 0.125 [limit] -context = 262_144 -input = 262_144 +context = 524_288 +input = 524_288 output = 32_768 [modalities] diff --git a/providers/nano-gpt/models/qwen/qwen3.8-27b-uncensored:thinking.toml b/providers/nano-gpt/models/qwen/qwen3.8-27b-uncensored:thinking.toml index 47b5bd8483a..d4ee170d540 100644 --- a/providers/nano-gpt/models/qwen/qwen3.8-27b-uncensored:thinking.toml +++ b/providers/nano-gpt/models/qwen/qwen3.8-27b-uncensored:thinking.toml @@ -1,7 +1,7 @@ name = "Qwen 3.8 27B Uncensored Thinking" description = "Qwen 3.8 27B Uncensored with thinking enabled for more deliberate creative work, coding, multimodal analysis, tool use, and long-context problem solving." family = "qwen" -release_date = "2026-08-25" +release_date = "2026-07-29" last_updated = "2026-08-25" attachment = true reasoning = true @@ -11,13 +11,13 @@ open_weights = true reasoning_options = [] [cost] -input = 0.18 -output = 0.5 -cache_read = 0.075 +input = 0.15 +output = 1.2 +cache_read = 0.125 [limit] -context = 262_144 -input = 262_144 +context = 524_288 +input = 524_288 output = 32_768 [modalities] diff --git a/providers/nano-gpt/models/qwen/qwen3.8-27b.toml b/providers/nano-gpt/models/qwen/qwen3.8-27b.toml new file mode 100644 index 00000000000..7111eaf2f47 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.8-27b.toml @@ -0,0 +1,10 @@ +base_model = "alibaba/qwen3.8-27b" +reasoning_options = [] + +[cost] +input = 0.15 +output = 0.7 +cache_read = 0.04 + +[limit] +input = 262_144 diff --git a/providers/nano-gpt/models/qwen/qwen3.8-27b:thinking.toml b/providers/nano-gpt/models/qwen/qwen3.8-27b:thinking.toml new file mode 100644 index 00000000000..6ff4fbb2f69 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.8-27b:thinking.toml @@ -0,0 +1,11 @@ +base_model = "alibaba/qwen3.8-27b" +name = "Qwen3.8 27B Thinking" +reasoning_options = [] + +[cost] +input = 0.15 +output = 0.7 +cache_read = 0.04 + +[limit] +input = 262_144 diff --git a/providers/nano-gpt/models/qwen/qwen3.8-flash.toml b/providers/nano-gpt/models/qwen/qwen3.8-flash.toml new file mode 100644 index 00000000000..c04f98ae19f --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.8-flash.toml @@ -0,0 +1,15 @@ +base_model = "alibaba/qwen3.8-flash" + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.14 +output = 0.42 +cache_read = 0.016 +cache_write = 0.2 + +[limit] +context = 991_808 +input = 991_808 diff --git a/providers/nano-gpt/models/qwen/qwen3.8-max-0902.toml b/providers/nano-gpt/models/qwen/qwen3.8-max-0902.toml new file mode 100644 index 00000000000..ed81087ddc3 --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.8-max-0902.toml @@ -0,0 +1,16 @@ +base_model = "alibaba/qwen3.8-max-0902" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[cost] +input = 2 +output = 6 +cache_read = 0.17 +cache_write = 2.5 + +[limit] +context = 991_808 +input = 991_808 diff --git a/providers/nano-gpt/models/qwen3.8-max.toml b/providers/nano-gpt/models/qwen/qwen3.8-max.toml similarity index 100% rename from providers/nano-gpt/models/qwen3.8-max.toml rename to providers/nano-gpt/models/qwen/qwen3.8-max.toml diff --git a/providers/nano-gpt/models/qwen3.8-max:thinking.toml b/providers/nano-gpt/models/qwen/qwen3.8-max:thinking.toml similarity index 100% rename from providers/nano-gpt/models/qwen3.8-max:thinking.toml rename to providers/nano-gpt/models/qwen/qwen3.8-max:thinking.toml diff --git a/providers/nano-gpt/models/qwen/qwen3.8-omni-flash.toml b/providers/nano-gpt/models/qwen/qwen3.8-omni-flash.toml new file mode 100644 index 00000000000..9c6c8edf86a --- /dev/null +++ b/providers/nano-gpt/models/qwen/qwen3.8-omni-flash.toml @@ -0,0 +1,15 @@ +base_model = "alibaba/qwen3.8-omni-flash" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.15 +output = 0.47 +cache_read = 0.016 + +[limit] +context = 991_808 +input = 991_808 diff --git a/providers/nano-gpt/models/qwen25-vl-72b-instruct.toml b/providers/nano-gpt/models/qwen25-vl-72b-instruct.toml deleted file mode 100644 index 8648d0a8ccd..00000000000 --- a/providers/nano-gpt/models/qwen25-vl-72b-instruct.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Qwen25 VL 72b" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -release_date = "2025-05-10" -last_updated = "2025-05-10" -attachment = true -reasoning = false -tool_call = false -structured_output = false -open_weights = true - -[cost] -input = 0.69989 -output = 0.69989 -cache_read = 0.349945 - -[limit] -context = 32_000 -input = 32_000 -output = 32_768 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/qwen3-30b-a3b-instruct-2507.toml b/providers/nano-gpt/models/qwen3-30b-a3b-instruct-2507.toml deleted file mode 100644 index a6f5f2c3866..00000000000 --- a/providers/nano-gpt/models/qwen3-30b-a3b-instruct-2507.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Qwen3 30B A3B Instruct 2507" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -release_date = "2025-02-20" -last_updated = "2025-02-20" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = true - -[cost] -input = 0.2 -output = 0.5 -cache_read = 0.1 - -[limit] -context = 256_000 -input = 256_000 -output = 32_768 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/qwen3-max-2026-01-23.toml b/providers/nano-gpt/models/qwen3-max-2026-01-23.toml deleted file mode 100644 index 514bb7a5472..00000000000 --- a/providers/nano-gpt/models/qwen3-max-2026-01-23.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Qwen3 Max 2026-01-23" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -release_date = "2026-01-26" -last_updated = "2026-01-26" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 1.2002 -output = 6.001 -cache_read = 0.6001 - -[limit] -context = 256_000 -input = 256_000 -output = 32_768 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/qwen3-vl-235b-a22b-instruct-original.toml b/providers/nano-gpt/models/qwen3-vl-235b-a22b-instruct-original.toml index 2f39269ea3f..851b51ce84f 100644 --- a/providers/nano-gpt/models/qwen3-vl-235b-a22b-instruct-original.toml +++ b/providers/nano-gpt/models/qwen3-vl-235b-a22b-instruct-original.toml @@ -9,9 +9,9 @@ structured_output = false open_weights = false [cost] -input = 0.5 -output = 1.2 -cache_read = 0.25 +input = 0.3 +output = 1.9 +cache_read = 0.15 [limit] context = 32_768 diff --git a/providers/nano-gpt/models/qwen3-vl-235b-a22b-thinking.toml b/providers/nano-gpt/models/qwen3-vl-235b-a22b-thinking.toml deleted file mode 100644 index e93934fc273..00000000000 --- a/providers/nano-gpt/models/qwen3-vl-235b-a22b-thinking.toml +++ /dev/null @@ -1,17 +0,0 @@ -base_model = "alibaba/qwen3-vl-235b-a22b-thinking" -tool_call = false -structured_output = false - -[[reasoning_options]] -type = "budget_tokens" -min = 1_024 -max = 81_920 - -[cost] -input = 0.5 -output = 6 -cache_read = 0.25 - -[limit] -context = 32_768 -input = 32_768 diff --git a/providers/nano-gpt/models/qwen3.5-0.8b.toml b/providers/nano-gpt/models/qwen3.5-0.8b.toml deleted file mode 100644 index 4e2cecccc6e..00000000000 --- a/providers/nano-gpt/models/qwen3.5-0.8b.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Qwen3.5 0.8B" -description = "Qwen3.5 0.8B is a lightweight open-weight multimodal model from Alibaba for fast reasoning, visual understanding, tool use, and JSON output." -family = "qwen3.5" -release_date = "2026-08-16" -last_updated = "2026-08-16" -attachment = true -reasoning = true -tool_call = true -structured_output = true -open_weights = true -reasoning_options = [] - -[cost] -input = 0.06 -output = 0.12 -cache_read = 0.03 - -[limit] -context = 262_144 -input = 262_144 -output = 32_768 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/qwen3.5-122b-a10b.toml b/providers/nano-gpt/models/qwen3.5-122b-a10b.toml deleted file mode 100644 index 307ecd0c8e1..00000000000 --- a/providers/nano-gpt/models/qwen3.5-122b-a10b.toml +++ /dev/null @@ -1,18 +0,0 @@ -# Included in subscription -base_model = "alibaba/qwen3.5-122b-a10b" -name = "Qwen3.5 122B A10B" -attachment = false -reasoning = false - -[cost] -input = 0.437 -output = 3.496 -cache_read = 0.103788 - -[limit] -context = 131_072 -input = 131_072 -output = 32_768 - -[modalities] -input = ["text"] diff --git a/providers/nano-gpt/models/qwen3.5-122b-a10b:thinking.toml b/providers/nano-gpt/models/qwen3.5-122b-a10b:thinking.toml deleted file mode 100644 index 83acdd20d9b..00000000000 --- a/providers/nano-gpt/models/qwen3.5-122b-a10b:thinking.toml +++ /dev/null @@ -1,22 +0,0 @@ -# Included in subscription -base_model = "alibaba/qwen3.5-122b-a10b" -name = "Qwen3.5 122B A10B Thinking" -attachment = false - -[[reasoning_options]] -type = "budget_tokens" -min = 1_024 -max = 81_920 - -[cost] -input = 0.437 -output = 3.496 -cache_read = 0.103788 - -[limit] -context = 131_072 -input = 131_072 -output = 32_768 - -[modalities] -input = ["text"] diff --git a/providers/nano-gpt/models/qwen3.5-27b.toml b/providers/nano-gpt/models/qwen3.5-27b.toml deleted file mode 100644 index 2ee18716021..00000000000 --- a/providers/nano-gpt/models/qwen3.5-27b.toml +++ /dev/null @@ -1,16 +0,0 @@ -# Included in subscription -base_model = "alibaba/qwen3.5-27b" -reasoning = false -structured_output = false - -[cost] -input = 0.27 -output = 2.16 -cache_read = 0.135 - -[limit] -context = 260_096 -input = 260_096 - -[modalities] -input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/qwen3.5-27b:thinking.toml b/providers/nano-gpt/models/qwen3.5-27b:thinking.toml deleted file mode 100644 index 978f3266618..00000000000 --- a/providers/nano-gpt/models/qwen3.5-27b:thinking.toml +++ /dev/null @@ -1,21 +0,0 @@ -# Included in subscription -base_model = "alibaba/qwen3.5-27b" -name = "Qwen3.5 27B Thinking" -structured_output = false - -[[reasoning_options]] -type = "budget_tokens" -min = 1_024 -max = 81_920 - -[cost] -input = 0.27 -output = 2.16 -cache_read = 0.135 - -[limit] -context = 260_096 -input = 260_096 - -[modalities] -input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/qwen3.5-2b.toml b/providers/nano-gpt/models/qwen3.5-2b.toml deleted file mode 100644 index cf562f087e6..00000000000 --- a/providers/nano-gpt/models/qwen3.5-2b.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Qwen3.5 2B" -description = "Qwen3.5 2B is a small open-weight multimodal model from Alibaba for efficient reasoning, coding, visual understanding, tool use, and JSON output." -family = "qwen3.5" -release_date = "2026-08-16" -last_updated = "2026-08-16" -attachment = true -reasoning = true -tool_call = true -structured_output = true -open_weights = true -reasoning_options = [] - -[cost] -input = 0.08 -output = 0.16 -cache_read = 0.04 - -[limit] -context = 262_144 -input = 262_144 -output = 32_768 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/qwen3.5-35b-a3b.toml b/providers/nano-gpt/models/qwen3.5-35b-a3b.toml deleted file mode 100644 index 96c810764f0..00000000000 --- a/providers/nano-gpt/models/qwen3.5-35b-a3b.toml +++ /dev/null @@ -1,17 +0,0 @@ -# Included in subscription -base_model = "alibaba/qwen3.5-35b-a3b" -name = "Qwen3.5 35B A3B" -reasoning = false -structured_output = false - -[cost] -input = 0.225 -output = 1.8 -cache_read = 0.1125 - -[limit] -context = 260_096 -input = 260_096 - -[modalities] -input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/qwen3.5-35b-a3b:thinking.toml b/providers/nano-gpt/models/qwen3.5-35b-a3b:thinking.toml deleted file mode 100644 index cca1e2de29b..00000000000 --- a/providers/nano-gpt/models/qwen3.5-35b-a3b:thinking.toml +++ /dev/null @@ -1,21 +0,0 @@ -# Included in subscription -base_model = "alibaba/qwen3.5-35b-a3b" -name = "Qwen3.5 35B A3B Thinking" -structured_output = false - -[[reasoning_options]] -type = "budget_tokens" -min = 1_024 -max = 81_920 - -[cost] -input = 0.225 -output = 1.8 -cache_read = 0.1125 - -[limit] -context = 260_096 -input = 260_096 - -[modalities] -input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/qwen3.5-4b.toml b/providers/nano-gpt/models/qwen3.5-4b.toml deleted file mode 100644 index 0538b8a5be8..00000000000 --- a/providers/nano-gpt/models/qwen3.5-4b.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Qwen3.5 4B" -description = "Qwen3.5 4B is a compact open-weight multimodal model from Alibaba for reasoning, coding, visual understanding, tool use, and structured output." -family = "qwen3.5" -release_date = "2026-08-16" -last_updated = "2026-08-16" -attachment = true -reasoning = true -tool_call = true -structured_output = true -open_weights = true -reasoning_options = [] - -[cost] -input = 0.1 -output = 0.2 -cache_read = 0.05 - -[limit] -context = 262_144 -input = 262_144 -output = 32_768 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/qwen3.5-flash.toml b/providers/nano-gpt/models/qwen3.5-flash.toml deleted file mode 100644 index 90792fb38dc..00000000000 --- a/providers/nano-gpt/models/qwen3.5-flash.toml +++ /dev/null @@ -1,14 +0,0 @@ -# Not included in subscription -base_model = "alibaba/qwen3.5-flash" -reasoning = false -tool_call = false -structured_output = false - -[cost] -input = 0.1 -output = 0.4 -cache_read = 0.05 - -[limit] -context = 991_808 -input = 991_808 diff --git a/providers/nano-gpt/models/qwen3.5-flash:thinking.toml b/providers/nano-gpt/models/qwen3.5-flash:thinking.toml deleted file mode 100644 index 5f23dc9cec2..00000000000 --- a/providers/nano-gpt/models/qwen3.5-flash:thinking.toml +++ /dev/null @@ -1,19 +0,0 @@ -# Not included in subscription -base_model = "alibaba/qwen3.5-flash" -name = "Qwen3.5 Flash Thinking" -tool_call = false -structured_output = false - -[[reasoning_options]] -type = "budget_tokens" -min = 1_024 -max = 81_920 - -[cost] -input = 0.1 -output = 0.4 -cache_read = 0.05 - -[limit] -context = 991_808 -input = 991_808 diff --git a/providers/nano-gpt/models/qwen3.5-omni-flash.toml b/providers/nano-gpt/models/qwen3.5-omni-flash.toml deleted file mode 100644 index 0184330290c..00000000000 --- a/providers/nano-gpt/models/qwen3.5-omni-flash.toml +++ /dev/null @@ -1,24 +0,0 @@ -# Not included in subscription -name = "Qwen3.5 Omni Flash" -description = "Omni-modal model for text, vision, audio, and multimodal agent tasks" -family = "qwen3.5" -release_date = "2026-03-30" -last_updated = "2026-03-30" -attachment = true -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 0 -output = 0 - -[limit] -context = 49_152 -input = 49_152 -output = 16_384 - -[modalities] -input = ["text", "image", "video", "audio"] -output = ["text"] diff --git a/providers/nano-gpt/models/qwen3.5-omni-plus.toml b/providers/nano-gpt/models/qwen3.5-omni-plus.toml deleted file mode 100644 index 379e191256a..00000000000 --- a/providers/nano-gpt/models/qwen3.5-omni-plus.toml +++ /dev/null @@ -1,24 +0,0 @@ -# Not included in subscription -name = "Qwen3.5 Omni Plus" -description = "Omni-modal model for text, vision, audio, and multimodal agent tasks" -family = "qwen3.5" -release_date = "2026-03-30" -last_updated = "2026-03-30" -attachment = true -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 0 -output = 0 - -[limit] -context = 983_616 -input = 983_616 -output = 65_536 - -[modalities] -input = ["text", "image", "video", "audio"] -output = ["text"] diff --git a/providers/nano-gpt/models/qwen3.7-max.toml b/providers/nano-gpt/models/qwen3.7-max.toml deleted file mode 100644 index 8296afa1795..00000000000 --- a/providers/nano-gpt/models/qwen3.7-max.toml +++ /dev/null @@ -1,16 +0,0 @@ -# Not included in subscription -base_model = "alibaba/qwen3.7-max" -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["none", "high"] - -[cost] -input = 2.5 -output = 7.5 -cache_read = 0.5 -cache_write = 3.125 - -[limit] -input = 1_000_000 diff --git a/providers/nano-gpt/models/qwen3.7-plus.toml b/providers/nano-gpt/models/qwen3.7-plus.toml deleted file mode 100644 index 47994898e2c..00000000000 --- a/providers/nano-gpt/models/qwen3.7-plus.toml +++ /dev/null @@ -1,18 +0,0 @@ -# Not included in subscription -base_model = "alibaba/qwen3.7-plus" -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["none", "high"] - -[cost] -input = 0.4 -output = 1.6 -cache_read = 0.08 -cache_write = 0.5 - -[limit] -context = 991_808 -input = 991_808 -output = 65_536 diff --git a/providers/nano-gpt/models/qwen3.8-27b.toml b/providers/nano-gpt/models/qwen3.8-27b.toml deleted file mode 100644 index ad923e81ad5..00000000000 --- a/providers/nano-gpt/models/qwen3.8-27b.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "alibaba/qwen3.8-27b" -reasoning_options = [] - -[cost] -input = 0.2 -output = 1.4 -cache_read = 0.04 - -[limit] -input = 262_144 - -[modalities] -input = ["text", "image"] diff --git a/providers/nano-gpt/models/qwen3.8-27b:thinking.toml b/providers/nano-gpt/models/qwen3.8-27b:thinking.toml deleted file mode 100644 index 33736f4ea82..00000000000 --- a/providers/nano-gpt/models/qwen3.8-27b:thinking.toml +++ /dev/null @@ -1,14 +0,0 @@ -base_model = "alibaba/qwen3.8-27b" -name = "Qwen3.8 27B Thinking" -reasoning_options = [] - -[cost] -input = 0.2 -output = 1.4 -cache_read = 0.04 - -[limit] -input = 262_144 - -[modalities] -input = ["text", "image"] diff --git a/providers/nano-gpt/models/sakana/fugu-max.toml b/providers/nano-gpt/models/sakana/fugu-max.toml new file mode 100644 index 00000000000..20eb479f0a7 --- /dev/null +++ b/providers/nano-gpt/models/sakana/fugu-max.toml @@ -0,0 +1,28 @@ +name = "Fugu Max" +description = "Sakana AI's cost-performance Fugu model uses learned multi-agent orchestration to route tasks across expert models for reasoning, coding, and tool use." +family = "fugu" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["high", "xhigh", "max"] + +[cost] +input = 2 +output = 6 +cache_read = 0.25 + +[limit] +context = 1_000_000 +input = 1_000_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/nano-gpt/models/sakana/fugu-ultra-v1.1.toml b/providers/nano-gpt/models/sakana/fugu-ultra-v1.1.toml index 4e164b14478..b7918f1a026 100644 --- a/providers/nano-gpt/models/sakana/fugu-ultra-v1.1.toml +++ b/providers/nano-gpt/models/sakana/fugu-ultra-v1.1.toml @@ -14,9 +14,9 @@ type = "effort" values = ["high", "xhigh", "max"] [cost] -input = 5.25 -output = 31.5 -cache_read = 0.525 +input = 5 +output = 30 +cache_read = 0.5 [limit] context = 1_000_000 diff --git a/providers/nano-gpt/models/sakana/fugu-ultra.toml b/providers/nano-gpt/models/sakana/fugu-ultra.toml index d163827b235..c2429506bcc 100644 --- a/providers/nano-gpt/models/sakana/fugu-ultra.toml +++ b/providers/nano-gpt/models/sakana/fugu-ultra.toml @@ -5,9 +5,9 @@ type = "effort" values = ["high", "xhigh", "max"] [cost] -input = 5.25 -output = 31.5 -cache_read = 0.525 +input = 5 +output = 30 +cache_read = 0.5 [limit] input = 1_000_000 diff --git a/providers/nano-gpt/models/sarvam-105b.toml b/providers/nano-gpt/models/sarvam-105b.toml index 6731fdd9fce..75c1aa86b8a 100644 --- a/providers/nano-gpt/models/sarvam-105b.toml +++ b/providers/nano-gpt/models/sarvam-105b.toml @@ -7,9 +7,9 @@ type = "effort" values = ["low", "medium", "high"] [cost] -input = 0.045 -output = 0.177 -cache_read = 0.028 +input = 0.054 +output = 0.2124 +cache_read = 0.0336 [limit] input = 131_072 diff --git a/providers/nano-gpt/models/sarvam-30b.toml b/providers/nano-gpt/models/sarvam-30b.toml deleted file mode 100644 index fdceb106862..00000000000 --- a/providers/nano-gpt/models/sarvam-30b.toml +++ /dev/null @@ -1,17 +0,0 @@ -# Not included in subscription -base_model = "sarvam/sarvam-30b" -structured_output = false - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] - -[cost] -input = 0.028 -output = 0.111 -cache_read = 0.017 - -[limit] -context = 65_536 -input = 65_536 -output = 4_096 diff --git a/providers/nano-gpt/models/sonar-deep-research.toml b/providers/nano-gpt/models/sonar-deep-research.toml deleted file mode 100644 index e24af61da6b..00000000000 --- a/providers/nano-gpt/models/sonar-deep-research.toml +++ /dev/null @@ -1,14 +0,0 @@ -base_model = "perplexity/sonar-deep-research" -name = "Perplexity Deep Research" -reasoning = false -structured_output = false - -[cost] -input = 3.4 -output = 13.6 -cache_read = 1.7 - -[limit] -context = 60_000 -input = 60_000 -output = 128_000 diff --git a/providers/nano-gpt/models/sonar-pro.toml b/providers/nano-gpt/models/sonar-pro.toml deleted file mode 100644 index 3268f10405e..00000000000 --- a/providers/nano-gpt/models/sonar-pro.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "perplexity/sonar-pro" -name = "Perplexity Pro" -attachment = false -structured_output = false - -[cost] -input = 3 -output = 15 -cache_read = 1.5 - -[limit] -input = 200_000 -output = 128_000 - -[modalities] -input = ["text"] diff --git a/providers/nano-gpt/models/sonar-reasoning-pro.toml b/providers/nano-gpt/models/sonar-reasoning-pro.toml deleted file mode 100644 index aaff135ee6b..00000000000 --- a/providers/nano-gpt/models/sonar-reasoning-pro.toml +++ /dev/null @@ -1,18 +0,0 @@ -base_model = "perplexity/sonar-reasoning-pro" -name = "Perplexity Reasoning Pro" -attachment = false -structured_output = false -reasoning_options = [] - -[cost] -input = 2 -output = 8 -cache_read = 1 - -[limit] -context = 127_000 -input = 127_000 -output = 128_000 - -[modalities] -input = ["text"] diff --git a/providers/nano-gpt/models/sonar.toml b/providers/nano-gpt/models/sonar.toml deleted file mode 100644 index c2e65f7ee1f..00000000000 --- a/providers/nano-gpt/models/sonar.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "perplexity/sonar" -name = "Perplexity Simple" -structured_output = false - -[cost] -input = 1 -output = 1 -cache_read = 0.5 - -[limit] -context = 127_000 -input = 127_000 -output = 128_000 diff --git a/providers/nano-gpt/models/soob3123/GrayLine-Qwen3-8B.toml b/providers/nano-gpt/models/soob3123/GrayLine-Qwen3-8B.toml index 2feaa84c2b0..1190cb8c632 100644 --- a/providers/nano-gpt/models/soob3123/GrayLine-Qwen3-8B.toml +++ b/providers/nano-gpt/models/soob3123/GrayLine-Qwen3-8B.toml @@ -15,8 +15,8 @@ output = 0.3 cache_read = 0.15 [limit] -context = 16_384 -input = 16_384 +context = 32_768 +input = 32_768 output = 32_768 [modalities] diff --git a/providers/nano-gpt/models/step-r1-v-mini.toml b/providers/nano-gpt/models/step-r1-v-mini.toml deleted file mode 100644 index c5474728bce..00000000000 --- a/providers/nano-gpt/models/step-r1-v-mini.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Step R1 V Mini" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "step" -release_date = "2024-01-01" -last_updated = "2025-04-08" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 2.5 -output = 11 -cache_read = 1.25 - -[limit] -context = 128_000 -input = 128_000 -output = 65_536 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/stepfun-ai/step-3.5-flash-2603.toml b/providers/nano-gpt/models/stepfun-ai/step-3.5-flash-2603.toml index 581f487aac5..c2a46b10c85 100644 --- a/providers/nano-gpt/models/stepfun-ai/step-3.5-flash-2603.toml +++ b/providers/nano-gpt/models/stepfun-ai/step-3.5-flash-2603.toml @@ -11,3 +11,8 @@ values = ["low", "medium", "high"] input = 0.1 output = 0.3 cache_read = 0.05 + +[limit] +context = 262_144 +input = 262_144 +output = 65_536 diff --git a/providers/nano-gpt/models/stepfun-ai/step-3.5-flash.toml b/providers/nano-gpt/models/stepfun-ai/step-3.5-flash.toml index d45fbad1853..c7f7d5d3510 100644 --- a/providers/nano-gpt/models/stepfun-ai/step-3.5-flash.toml +++ b/providers/nano-gpt/models/stepfun-ai/step-3.5-flash.toml @@ -10,3 +10,8 @@ values = ["low", "medium", "high"] input = 0.1 output = 0.3 cache_read = 0.05 + +[limit] +context = 262_144 +input = 262_144 +output = 65_536 diff --git a/providers/nano-gpt/models/stepfun/step-5-preview.toml b/providers/nano-gpt/models/stepfun/step-5-preview.toml new file mode 100644 index 00000000000..20ebdd2b522 --- /dev/null +++ b/providers/nano-gpt/models/stepfun/step-5-preview.toml @@ -0,0 +1,10 @@ +base_model = "stepfun/step-5-preview" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 1 +output = 2.7 +cache_read = 0.05 diff --git a/providers/nano-gpt/models/tencent/Hunyuan-MT-7B.toml b/providers/nano-gpt/models/tencent/Hunyuan-MT-7B.toml deleted file mode 100644 index 611660049bb..00000000000 --- a/providers/nano-gpt/models/tencent/Hunyuan-MT-7B.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Hunyuan MT 7B" -description = "Translation model for multilingual conversion, localization, and cross-language workflows" -family = "hunyuan" -release_date = "2025-08-15" -last_updated = "2025-09-18" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 10 -output = 20 -cache_read = 5 - -[limit] -context = 8_192 -input = 8_192 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/tencent/hy3.toml b/providers/nano-gpt/models/tencent/hy3.toml index c8d5b00fac1..2e87496bb3a 100644 --- a/providers/nano-gpt/models/tencent/hy3.toml +++ b/providers/nano-gpt/models/tencent/hy3.toml @@ -14,4 +14,3 @@ cache_read = 0.029 [limit] context = 262_144 input = 262_144 -output = 262_144 diff --git a/providers/nano-gpt/models/tencent/hy4-preview.toml b/providers/nano-gpt/models/tencent/hy4-preview.toml new file mode 100644 index 00000000000..349cc439215 --- /dev/null +++ b/providers/nano-gpt/models/tencent/hy4-preview.toml @@ -0,0 +1,16 @@ +base_model = "tencent/hy4-preview" +name = "Tencent Hy4 Preview" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high"] + +[cost] +input = 0.834 +output = 2.501 +cache_read = 0.042 + +[limit] +context = 1_048_576 +input = 1_048_576 diff --git a/providers/nano-gpt/models/thinkingmachines/Inkling-Small.toml b/providers/nano-gpt/models/thinkingmachines/Inkling-Small.toml index ed62fad0fb8..d769c5ef3e9 100644 --- a/providers/nano-gpt/models/thinkingmachines/Inkling-Small.toml +++ b/providers/nano-gpt/models/thinkingmachines/Inkling-Small.toml @@ -11,6 +11,3 @@ cache_read = 0.1 context = 524_288 input = 524_288 output = 32_768 - -[modalities] -input = ["text", "image"] diff --git a/providers/nano-gpt/models/thinkingmachines/Inkling-Small:thinking.toml b/providers/nano-gpt/models/thinkingmachines/Inkling-Small:thinking.toml index 6374bce6cad..10a8422f551 100644 --- a/providers/nano-gpt/models/thinkingmachines/Inkling-Small:thinking.toml +++ b/providers/nano-gpt/models/thinkingmachines/Inkling-Small:thinking.toml @@ -15,6 +15,3 @@ cache_read = 0.1 context = 524_288 input = 524_288 output = 32_768 - -[modalities] -input = ["text", "image"] diff --git a/providers/nano-gpt/models/typesafe/jev-latest.toml b/providers/nano-gpt/models/typesafe/jev-latest.toml new file mode 100644 index 00000000000..49c0acf91f0 --- /dev/null +++ b/providers/nano-gpt/models/typesafe/jev-latest.toml @@ -0,0 +1,12 @@ +base_model = "typesafe/jev-latest" +name = "Jev Latest" +structured_output = false + +[cost] +input = 0.042 +output = 0 +cache_read = 0.021 + +[limit] +context = 32_000 +input = 32_000 diff --git a/providers/nano-gpt/models/unbiased/pareto.toml b/providers/nano-gpt/models/unbiased/pareto.toml new file mode 100644 index 00000000000..5f47e30ab94 --- /dev/null +++ b/providers/nano-gpt/models/unbiased/pareto.toml @@ -0,0 +1,9 @@ +base_model = "unbiased/pareto" + +[cost] +input = 2.5 +output = 7.5 +cache_read = 0.25 + +[limit] +input = 262_144 diff --git a/providers/nano-gpt/models/unsloth/gemma-3-12b-it.toml b/providers/nano-gpt/models/unsloth/gemma-3-12b-it.toml index c8a69735228..fc3ddaae4e8 100644 --- a/providers/nano-gpt/models/unsloth/gemma-3-12b-it.toml +++ b/providers/nano-gpt/models/unsloth/gemma-3-12b-it.toml @@ -15,9 +15,9 @@ output = 0.272 cache_read = 0.136 [limit] -context = 128_000 -input = 128_000 -output = 131_072 +context = 131_072 +input = 131_072 +output = 16_384 [modalities] input = ["text", "pdf"] diff --git a/providers/nano-gpt/models/upstage/solar-mini4.toml b/providers/nano-gpt/models/upstage/solar-mini4.toml new file mode 100644 index 00000000000..6ac86e046ec --- /dev/null +++ b/providers/nano-gpt/models/upstage/solar-mini4.toml @@ -0,0 +1,24 @@ +name = "Solar Mini 4" +description = "Upstage's compact 35B-parameter mixture-of-experts model with 3B active parameters and a 524K context window. Built for fast, cost-efficient agentic tasks, with strong Korean and English support." +family = "solar" +release_date = "2026-09-23" +last_updated = "2026-09-23" +attachment = false +reasoning = false +tool_call = true +structured_output = true +open_weights = false + +[cost] +input = 0.05 +output = 0.2 +cache_read = 0.005 + +[limit] +context = 524_288 +input = 524_288 +output = 131_072 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/upstage/solar-mini4:thinking.toml b/providers/nano-gpt/models/upstage/solar-mini4:thinking.toml new file mode 100644 index 00000000000..10528b0f392 --- /dev/null +++ b/providers/nano-gpt/models/upstage/solar-mini4:thinking.toml @@ -0,0 +1,28 @@ +name = "Solar Mini 4 Thinking" +description = "Solar Mini 4 with reasoning enabled for agentic tasks and harder analysis across a 524K-token context window." +family = "solar" +release_date = "2026-09-23" +last_updated = "2026-09-23" +attachment = false +reasoning = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + +[cost] +input = 0.05 +output = 0.2 +cache_read = 0.005 + +[limit] +context = 524_288 +input = 524_288 +output = 131_072 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/upstage/solar-pro-3.toml b/providers/nano-gpt/models/upstage/solar-pro-3.toml index bf315c2409d..b007f270ad0 100644 --- a/providers/nano-gpt/models/upstage/solar-pro-3.toml +++ b/providers/nano-gpt/models/upstage/solar-pro-3.toml @@ -16,9 +16,9 @@ output = 0.6 cache_read = 0.015 [limit] -context = 128_000 -input = 128_000 -output = 128_000 +context = 131_072 +input = 131_072 +output = 117_964 [modalities] input = ["text"] diff --git a/providers/nano-gpt/models/x-ai/grok-4.3.toml b/providers/nano-gpt/models/x-ai/grok-4.3.toml index 62ed7bd7f23..8ffee4ccf4d 100644 --- a/providers/nano-gpt/models/x-ai/grok-4.3.toml +++ b/providers/nano-gpt/models/x-ai/grok-4.3.toml @@ -12,7 +12,7 @@ cache_read = 0.2 [limit] input = 1_000_000 -output = 1_000_000 +output = 900_000 [modalities] input = ["text", "image"] diff --git a/providers/nano-gpt/models/x-ai/grok-4.5.toml b/providers/nano-gpt/models/x-ai/grok-4.5.toml index a77fe23ecfd..fa9d5d73dbe 100644 --- a/providers/nano-gpt/models/x-ai/grok-4.5.toml +++ b/providers/nano-gpt/models/x-ai/grok-4.5.toml @@ -11,3 +11,4 @@ cache_read = 0.5 [limit] input = 500_000 +output = 450_000 diff --git a/providers/nano-gpt/models/x-ai/grok-4.6.toml b/providers/nano-gpt/models/x-ai/grok-4.6.toml index 44110f62ce5..f40e0799ed7 100644 --- a/providers/nano-gpt/models/x-ai/grok-4.6.toml +++ b/providers/nano-gpt/models/x-ai/grok-4.6.toml @@ -11,3 +11,4 @@ cache_read = 0.5 [limit] input = 500_000 +output = 450_000 diff --git a/providers/nano-gpt/models/x-ai/grok-4.7.toml b/providers/nano-gpt/models/x-ai/grok-4.7.toml new file mode 100644 index 00000000000..81b4067b343 --- /dev/null +++ b/providers/nano-gpt/models/x-ai/grok-4.7.toml @@ -0,0 +1,16 @@ +base_model = "xai/grok-4.7" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh"] + +[cost] +input = 1.6 +output = 4.8 +cache_read = 0.4 + +[limit] +input = 500_000 + +[modalities] +input = ["text", "image"] diff --git a/providers/nano-gpt/models/x-ai/grok-build-0.1.toml b/providers/nano-gpt/models/x-ai/grok-build-0.1.toml index 53eb6a95c3d..820097adddf 100644 --- a/providers/nano-gpt/models/x-ai/grok-build-0.1.toml +++ b/providers/nano-gpt/models/x-ai/grok-build-0.1.toml @@ -12,6 +12,7 @@ cache_read = 0.2 [limit] input = 256_000 +output = 230_400 [modalities] input = ["text", "image"] diff --git a/providers/nano-gpt/models/x-ai/grok-latest.toml b/providers/nano-gpt/models/x-ai/grok-latest.toml index c747136ab59..ca0fe338dd6 100644 --- a/providers/nano-gpt/models/x-ai/grok-latest.toml +++ b/providers/nano-gpt/models/x-ai/grok-latest.toml @@ -22,7 +22,7 @@ cache_read = 0.5 [limit] context = 500_000 input = 500_000 -output = 500_000 +output = 450_000 [modalities] input = ["text", "image"] diff --git a/providers/nano-gpt/models/xiaomi/mimo-v2.5-pro-crof.toml b/providers/nano-gpt/models/xiaomi/mimo-v2.5-pro-crof.toml deleted file mode 100644 index 82bd0f094c0..00000000000 --- a/providers/nano-gpt/models/xiaomi/mimo-v2.5-pro-crof.toml +++ /dev/null @@ -1,28 +0,0 @@ -name = "MiMo V2.5 Pro (Crof)" -description = "MiMo V2.5 Pro is Xiaomi's long-context flagship general model for coding and agentic orchestration. This separately served variant is intended for users concerned about censorship on the regular Xiaomi MiMo V2.5 Pro, and it is included in the NanoGPT subscription." -family = "mimo-v2.5-pro" -release_date = "2026-07-23" -last_updated = "2026-07-23" -attachment = false -reasoning = true -tool_call = true -structured_output = true -open_weights = true - -[[reasoning_options]] -type = "effort" -values = ["none", "low", "medium", "high"] - -[cost] -input = 0.4 -output = 0.8 -cache_read = 0.003 - -[limit] -context = 1_000_000 -input = 1_000_000 -output = 131_072 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/xiaomi/mimo-v2.5-pro-crof:thinking.toml b/providers/nano-gpt/models/xiaomi/mimo-v2.5-pro-crof:thinking.toml deleted file mode 100644 index dd75923c267..00000000000 --- a/providers/nano-gpt/models/xiaomi/mimo-v2.5-pro-crof:thinking.toml +++ /dev/null @@ -1,28 +0,0 @@ -name = "MiMo V2.5 Pro Thinking (Crof)" -description = "MiMo V2.5 Pro with Xiaomi thinking enabled for coding, long-context reasoning, and agentic orchestration. This separately served thinking variant is intended for users concerned about censorship on the regular Xiaomi MiMo V2.5 Pro, and it is included in the NanoGPT subscription." -family = "mimo-v2.5-pro" -release_date = "2026-07-23" -last_updated = "2026-07-23" -attachment = false -reasoning = true -tool_call = true -structured_output = true -open_weights = true - -[[reasoning_options]] -type = "effort" -values = ["none", "low", "medium", "high"] - -[cost] -input = 0.4 -output = 0.8 -cache_read = 0.003 - -[limit] -context = 1_000_000 -input = 1_000_000 -output = 131_072 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/xiaomi/mimo-v2.5.toml b/providers/nano-gpt/models/xiaomi/mimo-v2.5.toml index 6cfd5b6f080..9e12521fafe 100644 --- a/providers/nano-gpt/models/xiaomi/mimo-v2.5.toml +++ b/providers/nano-gpt/models/xiaomi/mimo-v2.5.toml @@ -15,6 +15,3 @@ cache_write = 0 [limit] input = 1_048_576 - -[modalities] -input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/xiaomi/mimo-v2.5:thinking.toml b/providers/nano-gpt/models/xiaomi/mimo-v2.5:thinking.toml index c95a9878190..5649f067278 100644 --- a/providers/nano-gpt/models/xiaomi/mimo-v2.5:thinking.toml +++ b/providers/nano-gpt/models/xiaomi/mimo-v2.5:thinking.toml @@ -14,6 +14,3 @@ cache_write = 0 [limit] input = 1_048_576 - -[modalities] -input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/xiaomi/mimo-v2.6-flash.toml b/providers/nano-gpt/models/xiaomi/mimo-v2.6-flash.toml new file mode 100644 index 00000000000..79ac140f7b6 --- /dev/null +++ b/providers/nano-gpt/models/xiaomi/mimo-v2.6-flash.toml @@ -0,0 +1,16 @@ +base_model = "xiaomi/mimo-v2.6-flash" +name = "MiMo V2.6 Flash" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.14 +output = 0.28 +cache_read = 0.0028 +cache_write = 0 + +[limit] +input = 1_048_576 diff --git a/providers/nano-gpt/models/xiaomi/mimo-v2.6-pro-ultraspeed.toml b/providers/nano-gpt/models/xiaomi/mimo-v2.6-pro-ultraspeed.toml new file mode 100644 index 00000000000..8950d4913de --- /dev/null +++ b/providers/nano-gpt/models/xiaomi/mimo-v2.6-pro-ultraspeed.toml @@ -0,0 +1,16 @@ +base_model = "xiaomi/mimo-v2.6-pro-ultraspeed" +name = "MiMo V2.6 Pro UltraSpeed" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 4.35 +output = 8.7 +cache_read = 0.036 +cache_write = 0 + +[limit] +input = 1_048_576 diff --git a/providers/nano-gpt/models/xiaomi/mimo-v2.6-pro.toml b/providers/nano-gpt/models/xiaomi/mimo-v2.6-pro.toml new file mode 100644 index 00000000000..a99c234165d --- /dev/null +++ b/providers/nano-gpt/models/xiaomi/mimo-v2.6-pro.toml @@ -0,0 +1,16 @@ +base_model = "xiaomi/mimo-v2.6-pro" +name = "MiMo V2.6 Pro" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.435 +output = 0.87 +cache_read = 0.0036 +cache_write = 0 + +[limit] +input = 1_048_576 diff --git a/providers/nano-gpt/models/yi-large.toml b/providers/nano-gpt/models/yi-large.toml deleted file mode 100644 index 5529660165a..00000000000 --- a/providers/nano-gpt/models/yi-large.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Yi Large" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "yi" -release_date = "2024-01-01" -last_updated = "2024-05-13" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 3.196 -output = 3.196 -cache_read = 1.598 - -[limit] -context = 32_000 -input = 32_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/yi-lightning.toml b/providers/nano-gpt/models/yi-lightning.toml deleted file mode 100644 index 97c5e1929a4..00000000000 --- a/providers/nano-gpt/models/yi-lightning.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Yi Lightning" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "yi" -release_date = "2025-06-15" -last_updated = "2024-10-16" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 0.2006 -output = 0.2006 -cache_read = 0.1003 - -[limit] -context = 12_000 -input = 12_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/yi-medium-200k.toml b/providers/nano-gpt/models/yi-medium-200k.toml deleted file mode 100644 index e9b63e28d6a..00000000000 --- a/providers/nano-gpt/models/yi-medium-200k.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Yi Medium 200k" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "yi" -release_date = "2024-01-01" -last_updated = "2024-03-01" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = false - -[cost] -input = 2.499 -output = 2.499 -cache_read = 1.2495 - -[limit] -context = 200_000 -input = 200_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/zai-org/GLM-4.5-Air.toml b/providers/nano-gpt/models/z-ai/GLM-4.5-Air.toml similarity index 87% rename from providers/nano-gpt/models/zai-org/GLM-4.5-Air.toml rename to providers/nano-gpt/models/z-ai/GLM-4.5-Air.toml index 38e0ca5177d..8fd72c26d39 100644 --- a/providers/nano-gpt/models/zai-org/GLM-4.5-Air.toml +++ b/providers/nano-gpt/models/z-ai/GLM-4.5-Air.toml @@ -1,4 +1,3 @@ -# Included in subscription base_model = "zhipuai/glm-4.5-air" name = "GLM 4.5 Air" reasoning = false diff --git a/providers/nano-gpt/models/zai-org/GLM-4.5-Air:thinking.toml b/providers/nano-gpt/models/z-ai/GLM-4.5-Air:thinking.toml similarity index 88% rename from providers/nano-gpt/models/zai-org/GLM-4.5-Air:thinking.toml rename to providers/nano-gpt/models/z-ai/GLM-4.5-Air:thinking.toml index 99872438ace..7b478335840 100644 --- a/providers/nano-gpt/models/zai-org/GLM-4.5-Air:thinking.toml +++ b/providers/nano-gpt/models/z-ai/GLM-4.5-Air:thinking.toml @@ -1,4 +1,3 @@ -# Included in subscription base_model = "zhipuai/glm-4.5-air" name = "GLM 4.5 Air (Thinking)" structured_output = true diff --git a/providers/nano-gpt/models/zai-org/GLM-4.5:thinking.toml b/providers/nano-gpt/models/z-ai/GLM-4.5:thinking.toml similarity index 89% rename from providers/nano-gpt/models/zai-org/GLM-4.5:thinking.toml rename to providers/nano-gpt/models/z-ai/GLM-4.5:thinking.toml index a8b28164926..23cacc8f2ce 100644 --- a/providers/nano-gpt/models/zai-org/GLM-4.5:thinking.toml +++ b/providers/nano-gpt/models/z-ai/GLM-4.5:thinking.toml @@ -1,4 +1,3 @@ -# Included in subscription base_model = "zhipuai/glm-4.5" name = "GLM 4.5 (Thinking)" tool_call = false diff --git a/providers/nano-gpt/models/z-ai/GLM-4.6-turbo.toml b/providers/nano-gpt/models/z-ai/GLM-4.6-turbo.toml new file mode 100644 index 00000000000..4969196b493 --- /dev/null +++ b/providers/nano-gpt/models/z-ai/GLM-4.6-turbo.toml @@ -0,0 +1,24 @@ +name = "GLM 4.6 Turbo" +description = "Fast variant of GLM 4.6 for general chat, coding, and analysis with improved latency and strong reasoning." +family = "glm" +release_date = "2025-10-02" +last_updated = "2025-10-02" +attachment = false +reasoning = false +tool_call = false +structured_output = false +open_weights = true + +[cost] +input = 1 +output = 3 +cache_read = 0.5 + +[limit] +context = 204_800 +input = 204_800 +output = 131_072 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/z-ai/GLM-4.6-turbo:thinking.toml b/providers/nano-gpt/models/z-ai/GLM-4.6-turbo:thinking.toml new file mode 100644 index 00000000000..6a53fc7eeff --- /dev/null +++ b/providers/nano-gpt/models/z-ai/GLM-4.6-turbo:thinking.toml @@ -0,0 +1,25 @@ +name = "GLM 4.6 Turbo (Thinking)" +description = "GLM 4.6 Turbo with thinking mode enabled for enhanced reasoning; shows internal reasoning and supports long context." +family = "glm" +release_date = "2025-10-02" +last_updated = "2025-10-02" +attachment = false +reasoning = true +tool_call = false +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 1 +output = 3 +cache_read = 0.5 + +[limit] +context = 204_800 +input = 204_800 +output = 131_072 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/zai-org/glm-4.5.toml b/providers/nano-gpt/models/z-ai/glm-4.5.toml similarity index 89% rename from providers/nano-gpt/models/zai-org/glm-4.5.toml rename to providers/nano-gpt/models/z-ai/glm-4.5.toml index 94a9691866a..ce0b8ee1f86 100644 --- a/providers/nano-gpt/models/zai-org/glm-4.5.toml +++ b/providers/nano-gpt/models/z-ai/glm-4.5.toml @@ -1,4 +1,3 @@ -# Included in subscription base_model = "zhipuai/glm-4.5" name = "GLM 4.5" reasoning = false diff --git a/providers/nano-gpt/models/z-ai/glm-4.5v.toml b/providers/nano-gpt/models/z-ai/glm-4.5v.toml index fa0c7912302..1d268f0dde8 100644 --- a/providers/nano-gpt/models/z-ai/glm-4.5v.toml +++ b/providers/nano-gpt/models/z-ai/glm-4.5v.toml @@ -12,8 +12,8 @@ output = 1.8 cache_read = 0.3 [limit] -input = 64_000 -output = 96_000 +context = 65_536 +input = 65_536 [modalities] input = ["text", "image"] diff --git a/providers/nano-gpt/models/z-ai/glm-4.5v:thinking.toml b/providers/nano-gpt/models/z-ai/glm-4.5v:thinking.toml index df038ad9ff1..7419ab22313 100644 --- a/providers/nano-gpt/models/z-ai/glm-4.5v:thinking.toml +++ b/providers/nano-gpt/models/z-ai/glm-4.5v:thinking.toml @@ -10,8 +10,8 @@ output = 1.8 cache_read = 0.3 [limit] -input = 64_000 -output = 96_000 +context = 65_536 +input = 65_536 [modalities] input = ["text", "image"] diff --git a/providers/nano-gpt/models/z-ai/glm-4.6-original.toml b/providers/nano-gpt/models/z-ai/glm-4.6-original.toml new file mode 100644 index 00000000000..19eca561652 --- /dev/null +++ b/providers/nano-gpt/models/z-ai/glm-4.6-original.toml @@ -0,0 +1,25 @@ +name = "GLM 4.6 Original" +description = "GLM-4.6, Zhipu's flagship text model with 256K context window and advanced reasoning capabilities. Direct via Z-AI (Zhipu)." +family = "glm" +release_date = "2025-12-11" +last_updated = "2025-12-11" +attachment = false +reasoning = true +tool_call = true +structured_output = false +open_weights = true +reasoning_options = [] + +[cost] +input = 0.35 +output = 1.4 +cache_read = 0.175 + +[limit] +context = 256_000 +input = 256_000 +output = 65_535 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/z-ai/glm-4.6v-original.toml b/providers/nano-gpt/models/z-ai/glm-4.6v-original.toml new file mode 100644 index 00000000000..337fa528938 --- /dev/null +++ b/providers/nano-gpt/models/z-ai/glm-4.6v-original.toml @@ -0,0 +1,24 @@ +name = "GLM 4.6V Original" +description = "GLM-4.6V scales its context window to 128k tokens in training, and achieves SoTA performance in visual understanding among models of similar parameter scales. Integrates native Function Calling capabilities, bridging 'visual perception' and 'executable action' for multimodal agents. Direct via Z-AI (Zhipu)." +family = "glm" +release_date = "2025-12-08" +last_updated = "2025-12-08" +attachment = true +reasoning = false +tool_call = false +structured_output = false +open_weights = true + +[cost] +input = 0.6 +output = 0.9 +cache_read = 0.3 + +[limit] +context = 128_000 +input = 128_000 +output = 24_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/zai-org/glm-4.6v.toml b/providers/nano-gpt/models/z-ai/glm-4.6v.toml similarity index 75% rename from providers/nano-gpt/models/zai-org/glm-4.6v.toml rename to providers/nano-gpt/models/z-ai/glm-4.6v.toml index 52281c89590..bf99f726025 100644 --- a/providers/nano-gpt/models/zai-org/glm-4.6v.toml +++ b/providers/nano-gpt/models/z-ai/glm-4.6v.toml @@ -1,4 +1,3 @@ -# Included in subscription base_model = "zhipuai/glm-4.6v" name = "GLM 4.6V" reasoning = false @@ -13,6 +12,3 @@ cache_read = 0.15 [limit] input = 128_000 output = 24_000 - -[modalities] -input = ["text", "image"] diff --git a/providers/nano-gpt/models/zai-org/glm-4.7-flash.toml b/providers/nano-gpt/models/z-ai/glm-4.7-flash.toml similarity index 82% rename from providers/nano-gpt/models/zai-org/glm-4.7-flash.toml rename to providers/nano-gpt/models/z-ai/glm-4.7-flash.toml index a2b47088d3a..104b2a50bb1 100644 --- a/providers/nano-gpt/models/zai-org/glm-4.7-flash.toml +++ b/providers/nano-gpt/models/z-ai/glm-4.7-flash.toml @@ -1,9 +1,7 @@ base_model = "zhipuai/glm-4.7-flash" name = "GLM 4.7 Flash" structured_output = true - -[[reasoning_options]] -type = "toggle" +reasoning_options = [] [cost] input = 0.07 diff --git a/providers/nano-gpt/models/zai-org/glm-4.7-flash:thinking.toml b/providers/nano-gpt/models/z-ai/glm-4.7-flash:thinking.toml similarity index 88% rename from providers/nano-gpt/models/zai-org/glm-4.7-flash:thinking.toml rename to providers/nano-gpt/models/z-ai/glm-4.7-flash:thinking.toml index 2ed5d87a758..859ce6d9655 100644 --- a/providers/nano-gpt/models/zai-org/glm-4.7-flash:thinking.toml +++ b/providers/nano-gpt/models/z-ai/glm-4.7-flash:thinking.toml @@ -1,4 +1,3 @@ -# Included in subscription base_model = "zhipuai/glm-4.7-flash" name = "GLM 4.7 Flash Thinking" structured_output = false diff --git a/providers/nano-gpt/models/z-ai/glm-4.7-original.toml b/providers/nano-gpt/models/z-ai/glm-4.7-original.toml new file mode 100644 index 00000000000..a76ba1036d8 --- /dev/null +++ b/providers/nano-gpt/models/z-ai/glm-4.7-original.toml @@ -0,0 +1,25 @@ +name = "GLM 4.7 Original" +description = "GLM-4.7 is a next-gen GLM series text model with stronger reasoning, long-context chat, and reliable tool use. Routed directly via Z-AI (Zhipu)." +family = "glm" +release_date = "2025-12-22" +last_updated = "2025-12-22" +attachment = false +reasoning = true +tool_call = true +structured_output = true +open_weights = true +reasoning_options = [] + +[cost] +input = 0.6 +output = 2.2 +cache_read = 0.11 + +[limit] +context = 200_000 +input = 200_000 +output = 65_535 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/zai-org/glm-4.7-original:thinking.toml b/providers/nano-gpt/models/z-ai/glm-4.7-original:thinking.toml similarity index 76% rename from providers/nano-gpt/models/zai-org/glm-4.7-original:thinking.toml rename to providers/nano-gpt/models/z-ai/glm-4.7-original:thinking.toml index ff799c8c168..c84b511b215 100644 --- a/providers/nano-gpt/models/zai-org/glm-4.7-original:thinking.toml +++ b/providers/nano-gpt/models/z-ai/glm-4.7-original:thinking.toml @@ -1,6 +1,5 @@ -# Not included in subscription name = "GLM 4.7 Original Thinking" -description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" +description = "GLM-4.7 original with extended thinking capabilities for complex reasoning." family = "glm" release_date = "2025-12-22" last_updated = "2025-12-22" diff --git a/providers/nano-gpt/models/z-ai/glm-4.7.toml b/providers/nano-gpt/models/z-ai/glm-4.7.toml new file mode 100644 index 00000000000..4a5b8b3579b --- /dev/null +++ b/providers/nano-gpt/models/z-ai/glm-4.7.toml @@ -0,0 +1,14 @@ +base_model = "zhipuai/glm-4.7" +name = "GLM 4.7" +structured_output = true +reasoning_options = [] + +[cost] +input = 0.2 +output = 0.8 +cache_read = 0.1 + +[limit] +context = 200_000 +input = 200_000 +output = 65_535 diff --git a/providers/nano-gpt/models/zai-org/glm-4.7:thinking.toml b/providers/nano-gpt/models/z-ai/glm-4.7:thinking.toml similarity index 88% rename from providers/nano-gpt/models/zai-org/glm-4.7:thinking.toml rename to providers/nano-gpt/models/z-ai/glm-4.7:thinking.toml index 4147631e9f2..e8de2402a9f 100644 --- a/providers/nano-gpt/models/zai-org/glm-4.7:thinking.toml +++ b/providers/nano-gpt/models/z-ai/glm-4.7:thinking.toml @@ -1,4 +1,3 @@ -# Included in subscription base_model = "zhipuai/glm-4.7" name = "GLM 4.7 Thinking" structured_output = true diff --git a/providers/nano-gpt/models/z-ai/glm-5-original.toml b/providers/nano-gpt/models/z-ai/glm-5-original.toml new file mode 100644 index 00000000000..841b88ec93d --- /dev/null +++ b/providers/nano-gpt/models/z-ai/glm-5-original.toml @@ -0,0 +1,25 @@ +name = "GLM 5 Original" +description = "GLM-5 is Zhipu's latest flagship model with advanced reasoning and instruction following. Routed directly via Z-AI (Zhipu)." +family = "glm" +release_date = "2026-02-11" +last_updated = "2026-02-11" +attachment = false +reasoning = true +tool_call = true +structured_output = true +open_weights = true +reasoning_options = [] + +[cost] +input = 1 +output = 3.2 +cache_read = 0.2 + +[limit] +context = 200_000 +input = 200_000 +output = 128_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/zai-org/glm-5-original:thinking.toml b/providers/nano-gpt/models/z-ai/glm-5-original:thinking.toml similarity index 76% rename from providers/nano-gpt/models/zai-org/glm-5-original:thinking.toml rename to providers/nano-gpt/models/z-ai/glm-5-original:thinking.toml index dfd041f50f0..77ecbb12949 100644 --- a/providers/nano-gpt/models/zai-org/glm-5-original:thinking.toml +++ b/providers/nano-gpt/models/z-ai/glm-5-original:thinking.toml @@ -1,6 +1,5 @@ -# Not included in subscription name = "GLM 5 Original Thinking" -description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" +description = "GLM-5 original with extended thinking capabilities for complex reasoning." family = "glm" release_date = "2026-02-11" last_updated = "2026-02-11" diff --git a/providers/nano-gpt/models/zai-org/glm-5.1.toml b/providers/nano-gpt/models/z-ai/glm-5.1.toml similarity index 100% rename from providers/nano-gpt/models/zai-org/glm-5.1.toml rename to providers/nano-gpt/models/z-ai/glm-5.1.toml diff --git a/providers/nano-gpt/models/zai-org/glm-5.1:thinking.toml b/providers/nano-gpt/models/z-ai/glm-5.1:thinking.toml similarity index 100% rename from providers/nano-gpt/models/zai-org/glm-5.1:thinking.toml rename to providers/nano-gpt/models/z-ai/glm-5.1:thinking.toml diff --git a/providers/nano-gpt/models/zai-org/glm-5.2.toml b/providers/nano-gpt/models/z-ai/glm-5.2.toml similarity index 100% rename from providers/nano-gpt/models/zai-org/glm-5.2.toml rename to providers/nano-gpt/models/z-ai/glm-5.2.toml diff --git a/providers/nano-gpt/models/zai-org/glm-5.2:thinking.toml b/providers/nano-gpt/models/z-ai/glm-5.2:thinking.toml similarity index 100% rename from providers/nano-gpt/models/zai-org/glm-5.2:thinking.toml rename to providers/nano-gpt/models/z-ai/glm-5.2:thinking.toml diff --git a/providers/nano-gpt/models/z-ai/glm-5.3-flash-cybersecurity.toml b/providers/nano-gpt/models/z-ai/glm-5.3-flash-cybersecurity.toml new file mode 100644 index 00000000000..b55aaf3a6a5 --- /dev/null +++ b/providers/nano-gpt/models/z-ai/glm-5.3-flash-cybersecurity.toml @@ -0,0 +1,28 @@ +name = "GLM 5.3 Flash Cybersecurity" +description = "GLM 5.3 Flash Cybersecurity is a cybersecurity-focused variant based on the uncensored model, with provider moderation for illegal activities. It supports always-on reasoning, image understanding, tool calling, and a 1,048,576-token context window." +family = "glm" +release_date = "2026-09-19" +last_updated = "2026-09-19" +attachment = true +reasoning = true +tool_call = true +structured_output = false +open_weights = true + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.075 + +[limit] +context = 1_048_576 +input = 1_048_576 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/z-ai/glm-5.3-flash-uncensored.toml b/providers/nano-gpt/models/z-ai/glm-5.3-flash-uncensored.toml new file mode 100644 index 00000000000..f0280c43a62 --- /dev/null +++ b/providers/nano-gpt/models/z-ai/glm-5.3-flash-uncensored.toml @@ -0,0 +1,28 @@ +name = "GLM 5.3 Flash Uncensored" +description = "GLM 5.3 Flash Uncensored is an uncensored fine-tune of the efficient 320B mixture-of-experts reasoning model, built for unrestricted chat, creative writing, coding, agentic work, tool use, and long-context tasks." +family = "glm-flash" +release_date = "2026-07-29" +last_updated = "2026-08-27" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = true + +[[reasoning_options]] +type = "effort" +values = ["low", "high"] + +[cost] +input = 0.2 +output = 0.8 +cache_read = 0.1 + +[limit] +context = 1_048_576 +input = 1_048_576 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/nano-gpt/models/z-ai/glm-5.3.toml b/providers/nano-gpt/models/z-ai/glm-5.3.toml new file mode 100644 index 00000000000..a948ca548f4 --- /dev/null +++ b/providers/nano-gpt/models/z-ai/glm-5.3.toml @@ -0,0 +1,15 @@ +base_model = "zhipuai/glm-5.3" +name = "GLM 5.3" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1 +output = 3.2 +cache_read = 0.2 + +[limit] +context = 1_048_576 +input = 1_048_576 diff --git a/providers/nano-gpt/models/z-ai/glm-5.3:thinking.toml b/providers/nano-gpt/models/z-ai/glm-5.3:thinking.toml new file mode 100644 index 00000000000..ad1dfe31719 --- /dev/null +++ b/providers/nano-gpt/models/z-ai/glm-5.3:thinking.toml @@ -0,0 +1,15 @@ +base_model = "zhipuai/glm-5.3" +name = "GLM 5.3 Thinking" + +[[reasoning_options]] +type = "effort" +values = ["high", "max"] + +[cost] +input = 1 +output = 3.2 +cache_read = 0.2 + +[limit] +context = 1_048_576 +input = 1_048_576 diff --git a/providers/nano-gpt/models/z-ai/glm-5.toml b/providers/nano-gpt/models/z-ai/glm-5.toml new file mode 100644 index 00000000000..b8f99c25671 --- /dev/null +++ b/providers/nano-gpt/models/z-ai/glm-5.toml @@ -0,0 +1,14 @@ +base_model = "zhipuai/glm-5" +name = "GLM 5" +structured_output = true +reasoning_options = [] + +[cost] +input = 0.5 +output = 2.55 +cache_read = 0.13 + +[limit] +context = 200_000 +input = 200_000 +output = 128_000 diff --git a/providers/nano-gpt/models/zai-org/glm-5:thinking.toml b/providers/nano-gpt/models/z-ai/glm-5:thinking.toml similarity index 100% rename from providers/nano-gpt/models/zai-org/glm-5:thinking.toml rename to providers/nano-gpt/models/z-ai/glm-5:thinking.toml diff --git a/providers/nano-gpt/models/z-ai/glm-5v-turbo.toml b/providers/nano-gpt/models/z-ai/glm-5v-turbo.toml index 18966c94ce2..02f43815cc6 100644 --- a/providers/nano-gpt/models/z-ai/glm-5v-turbo.toml +++ b/providers/nano-gpt/models/z-ai/glm-5v-turbo.toml @@ -14,4 +14,4 @@ context = 202_800 input = 202_800 [modalities] -input = ["text", "image"] +input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/z-ai/glm-5v-turbo:thinking.toml b/providers/nano-gpt/models/z-ai/glm-5v-turbo:thinking.toml index a7d1b506c17..e7a34b04ca6 100644 --- a/providers/nano-gpt/models/z-ai/glm-5v-turbo:thinking.toml +++ b/providers/nano-gpt/models/z-ai/glm-5v-turbo:thinking.toml @@ -14,4 +14,4 @@ context = 202_800 input = 202_800 [modalities] -input = ["text", "image"] +input = ["text", "image", "video"] diff --git a/providers/nano-gpt/models/z-ai/glm-latest.toml b/providers/nano-gpt/models/z-ai/glm-latest.toml new file mode 100644 index 00000000000..7151629fb90 --- /dev/null +++ b/providers/nano-gpt/models/z-ai/glm-latest.toml @@ -0,0 +1,25 @@ +name = "GLM Latest" +description = "Compatibility alias that routes to the newest thinking GLM model. Currently routes to GLM 5.2 Thinking." +family = "glm" +release_date = "2026-05-03" +last_updated = "2026-05-03" +attachment = false +reasoning = true +tool_call = true +structured_output = true +open_weights = true +reasoning_options = [] + +[cost] +input = 1 +output = 3.2 +cache_read = 0.2 + +[limit] +context = 1_048_576 +input = 1_048_576 +output = 131_072 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nano-gpt/models/zai-org/GLM-4.6-turbo.toml b/providers/nano-gpt/models/zai-org/GLM-4.6-turbo.toml deleted file mode 100644 index 47baf06d381..00000000000 --- a/providers/nano-gpt/models/zai-org/GLM-4.6-turbo.toml +++ /dev/null @@ -1,25 +0,0 @@ -# Not included in subscription -name = "GLM 4.6 Turbo" -description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -family = "glm" -release_date = "2025-10-02" -last_updated = "2025-10-02" -attachment = false -reasoning = false -tool_call = false -structured_output = false -open_weights = true - -[cost] -input = 1 -output = 3 -cache_read = 0.5 - -[limit] -context = 200_000 -input = 200_000 -output = 204_800 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/zai-org/GLM-4.6-turbo:thinking.toml b/providers/nano-gpt/models/zai-org/GLM-4.6-turbo:thinking.toml deleted file mode 100644 index 42470d6f6d9..00000000000 --- a/providers/nano-gpt/models/zai-org/GLM-4.6-turbo:thinking.toml +++ /dev/null @@ -1,26 +0,0 @@ -# Not included in subscription -name = "GLM 4.6 Turbo (Thinking)" -description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -family = "glm" -release_date = "2025-10-02" -last_updated = "2025-10-02" -attachment = false -reasoning = true -tool_call = false -structured_output = false -open_weights = true -reasoning_options = [] - -[cost] -input = 1 -output = 3 -cache_read = 0.5 - -[limit] -context = 200_000 -input = 200_000 -output = 204_800 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/zai-org/glm-4.6-original.toml b/providers/nano-gpt/models/zai-org/glm-4.6-original.toml deleted file mode 100644 index 61cfebbb3bc..00000000000 --- a/providers/nano-gpt/models/zai-org/glm-4.6-original.toml +++ /dev/null @@ -1,28 +0,0 @@ -# Not included in subscription -name = "GLM 4.6 Original" -description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -family = "glm" -release_date = "2025-12-11" -last_updated = "2025-12-11" -attachment = false -reasoning = true -tool_call = true -structured_output = false -open_weights = true - -[[reasoning_options]] -type = "toggle" - -[cost] -input = 0.35 -output = 1.4 -cache_read = 0.175 - -[limit] -context = 256_000 -input = 256_000 -output = 65_535 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/zai-org/glm-4.6v-flash-original.toml b/providers/nano-gpt/models/zai-org/glm-4.6v-flash-original.toml deleted file mode 100644 index d3807ca58e0..00000000000 --- a/providers/nano-gpt/models/zai-org/glm-4.6v-flash-original.toml +++ /dev/null @@ -1,25 +0,0 @@ -# Not included in subscription -name = "GLM 4.6V Flash" -description = "GLM vision model for visual reasoning, documents, and multimodal agents" -family = "glm" -release_date = "2025-12-08" -last_updated = "2025-12-08" -attachment = true -reasoning = false -tool_call = false -structured_output = false -open_weights = true - -[cost] -input = 0.1 -output = 0.4 -cache_read = 0.05 - -[limit] -context = 128_000 -input = 128_000 -output = 24_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/zai-org/glm-4.6v-original.toml b/providers/nano-gpt/models/zai-org/glm-4.6v-original.toml deleted file mode 100644 index 7d0d8e15729..00000000000 --- a/providers/nano-gpt/models/zai-org/glm-4.6v-original.toml +++ /dev/null @@ -1,25 +0,0 @@ -# Not included in subscription -name = "GLM 4.6V Original" -description = "GLM vision model for visual reasoning, documents, and multimodal agents" -family = "glm" -release_date = "2025-12-08" -last_updated = "2025-12-08" -attachment = true -reasoning = false -tool_call = false -structured_output = false -open_weights = true - -[cost] -input = 0.6 -output = 0.9 -cache_read = 0.3 - -[limit] -context = 128_000 -input = 128_000 -output = 24_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/nano-gpt/models/zai-org/glm-4.7-flash-original.toml b/providers/nano-gpt/models/zai-org/glm-4.7-flash-original.toml deleted file mode 100644 index 4ddef908a94..00000000000 --- a/providers/nano-gpt/models/zai-org/glm-4.7-flash-original.toml +++ /dev/null @@ -1,28 +0,0 @@ -# Included in subscription -name = "GLM 4.7 Flash Original" -description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -family = "glm" -release_date = "2026-01-19" -last_updated = "2026-01-19" -attachment = false -reasoning = true -tool_call = true -structured_output = true -open_weights = true - -[[reasoning_options]] -type = "toggle" - -[cost] -input = 0.07 -output = 0.4 -cache_read = 0.035 - -[limit] -context = 200_000 -input = 200_000 -output = 128_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/zai-org/glm-4.7-flash-original:thinking.toml b/providers/nano-gpt/models/zai-org/glm-4.7-flash-original:thinking.toml deleted file mode 100644 index 4ec696aa297..00000000000 --- a/providers/nano-gpt/models/zai-org/glm-4.7-flash-original:thinking.toml +++ /dev/null @@ -1,26 +0,0 @@ -# Included in subscription -name = "GLM 4.7 Flash Original Thinking" -description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -family = "glm" -release_date = "2026-01-19" -last_updated = "2026-01-19" -attachment = false -reasoning = true -tool_call = true -structured_output = false -open_weights = true -reasoning_options = [] - -[cost] -input = 0.07 -output = 0.4 -cache_read = 0.035 - -[limit] -context = 200_000 -input = 200_000 -output = 128_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/zai-org/glm-4.7-original.toml b/providers/nano-gpt/models/zai-org/glm-4.7-original.toml deleted file mode 100644 index 3c7eeac291e..00000000000 --- a/providers/nano-gpt/models/zai-org/glm-4.7-original.toml +++ /dev/null @@ -1,28 +0,0 @@ -# Not included in subscription -name = "GLM 4.7 Original" -description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -family = "glm" -release_date = "2025-12-22" -last_updated = "2025-12-22" -attachment = false -reasoning = true -tool_call = true -structured_output = true -open_weights = true - -[[reasoning_options]] -type = "toggle" - -[cost] -input = 0.6 -output = 2.2 -cache_read = 0.11 - -[limit] -context = 200_000 -input = 200_000 -output = 65_535 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/zai-org/glm-4.7.toml b/providers/nano-gpt/models/zai-org/glm-4.7.toml deleted file mode 100644 index 802f0c311fa..00000000000 --- a/providers/nano-gpt/models/zai-org/glm-4.7.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "zhipuai/glm-4.7" -name = "GLM 4.7" -structured_output = true - -[[reasoning_options]] -type = "toggle" - -[cost] -input = 0.2 -output = 0.8 -cache_read = 0.1 - -[limit] -context = 200_000 -input = 200_000 -output = 65_535 diff --git a/providers/nano-gpt/models/zai-org/glm-5-original.toml b/providers/nano-gpt/models/zai-org/glm-5-original.toml deleted file mode 100644 index bba5e063d77..00000000000 --- a/providers/nano-gpt/models/zai-org/glm-5-original.toml +++ /dev/null @@ -1,28 +0,0 @@ -# Not included in subscription -name = "GLM 5 Original" -description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -family = "glm" -release_date = "2026-02-11" -last_updated = "2026-02-11" -attachment = false -reasoning = true -tool_call = true -structured_output = true -open_weights = true - -[[reasoning_options]] -type = "toggle" - -[cost] -input = 1 -output = 3.2 -cache_read = 0.2 - -[limit] -context = 200_000 -input = 200_000 -output = 128_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nano-gpt/models/zai-org/glm-5.3.toml b/providers/nano-gpt/models/zai-org/glm-5.3.toml deleted file mode 100644 index e5177fe2893..00000000000 --- a/providers/nano-gpt/models/zai-org/glm-5.3.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "zhipuai/glm-5.3" -name = "GLM 5.3 Preview" - -[[reasoning_options]] -type = "effort" -values = ["low", "high", "max"] - -[cost] -input = 1.4 -output = 4.4 -cache_read = 0.26 - -[limit] -context = 1_048_576 -input = 1_048_576 diff --git a/providers/nano-gpt/models/zai-org/glm-5.3:thinking.toml b/providers/nano-gpt/models/zai-org/glm-5.3:thinking.toml deleted file mode 100644 index 723d238b9bc..00000000000 --- a/providers/nano-gpt/models/zai-org/glm-5.3:thinking.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "zhipuai/glm-5.3" -name = "GLM 5.3 Preview Thinking" - -[[reasoning_options]] -type = "effort" -values = ["high", "max"] - -[cost] -input = 1.4 -output = 4.4 -cache_read = 0.26 - -[limit] -context = 1_048_576 -input = 1_048_576 diff --git a/providers/nano-gpt/models/zai-org/glm-5.toml b/providers/nano-gpt/models/zai-org/glm-5.toml deleted file mode 100644 index 1fe1ae7adfc..00000000000 --- a/providers/nano-gpt/models/zai-org/glm-5.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "zhipuai/glm-5" -name = "GLM 5" -structured_output = true - -[[reasoning_options]] -type = "toggle" - -[cost] -input = 0.5 -output = 2.55 -cache_read = 0.13 - -[limit] -context = 200_000 -input = 200_000 -output = 128_000 diff --git a/providers/nano-gpt/models/zai-org/glm-latest.toml b/providers/nano-gpt/models/zai-org/glm-latest.toml deleted file mode 100644 index 0650bcb46cc..00000000000 --- a/providers/nano-gpt/models/zai-org/glm-latest.toml +++ /dev/null @@ -1,29 +0,0 @@ -# Included in subscription (uses 2x input tokens) -name = "GLM Latest" -description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -family = "glm" -release_date = "2026-05-03" -last_updated = "2026-05-03" -attachment = false -reasoning = true -tool_call = true -structured_output = true -open_weights = true - -[[reasoning_options]] -type = "effort" -values = ["high", "xhigh"] - -[cost] -input = 0.42 -output = 1.32 -cache_read = 0.078 - -[limit] -context = 1_048_576 -input = 1_048_576 -output = 131_072 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nearai/models/Qwen/Qwen3-30B-A3B-Instruct-2507.toml b/providers/nearai/models/Qwen/Qwen3-30B-A3B-Instruct-2507.toml deleted file mode 100644 index b8572bec67f..00000000000 --- a/providers/nearai/models/Qwen/Qwen3-30B-A3B-Instruct-2507.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Qwen3 30B-A3B Instruct 2507" -description = "Qwen instruction model for multilingual chat, reasoning, and tool use" -family = "qwen" -release_date = "2025-07-29" -last_updated = "2025-07-29" -attachment = false -reasoning = false -temperature = true -tool_call = true -structured_output = true -open_weights = true - -[cost] -input = 0.15 -output = 0.55 - -[limit] -context = 262_144 -output = 32_768 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nearai/models/Qwen/Qwen3-Embedding-0.6B.toml b/providers/nearai/models/Qwen/Qwen3-Embedding-0.6B.toml index 3d6dfbb0c09..bda13b5cf4e 100644 --- a/providers/nearai/models/Qwen/Qwen3-Embedding-0.6B.toml +++ b/providers/nearai/models/Qwen/Qwen3-Embedding-0.6B.toml @@ -11,10 +11,10 @@ open_weights = true [cost] input = 0.01 -output = 0.00 +output = 0.01 [limit] -context = 40_960 +context = 32768 output = 1_024 [modalities] diff --git a/providers/nearai/models/Qwen/Qwen3-VL-30B-A3B-Instruct.toml b/providers/nearai/models/Qwen/Qwen3-VL-30B-A3B-Instruct.toml index 1fea069c649..8503d559601 100644 --- a/providers/nearai/models/Qwen/Qwen3-VL-30B-A3B-Instruct.toml +++ b/providers/nearai/models/Qwen/Qwen3-VL-30B-A3B-Instruct.toml @@ -15,8 +15,8 @@ input = 0.15 output = 0.55 [limit] -context = 256_000 -output = 32_768 +context = 16384 +output = 8192 [modalities] input = ["text", "image"] diff --git a/providers/nearai/models/Qwen/Qwen3.5-122B-A10B.toml b/providers/nearai/models/Qwen/Qwen3.5-122B-A10B.toml deleted file mode 100644 index 7fc15d636fe..00000000000 --- a/providers/nearai/models/Qwen/Qwen3.5-122B-A10B.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "alibaba/qwen3.5-122b-a10b" -reasoning_options = [{ type = "toggle" }] - -[cost] -input = 0.4 -output = 3.2 - -[limit] -context = 131_072 -output = 32_768 - -[modalities] -input = ["text"] diff --git a/providers/nearai/models/Qwen/Qwen3.6-35B-A3B-FP8.toml b/providers/nearai/models/Qwen/Qwen3.6-35B-A3B-FP8.toml index c1da8f58418..6dd21027b99 100644 --- a/providers/nearai/models/Qwen/Qwen3.6-35B-A3B-FP8.toml +++ b/providers/nearai/models/Qwen/Qwen3.6-35B-A3B-FP8.toml @@ -8,7 +8,7 @@ output = 1.1 cache_read = 0.056 [limit] -output = 32_768 +output = 8192 [modalities] input = ["text"] diff --git a/providers/nearai/models/anthropic/claude-sonnet-4-5.toml b/providers/nearai/models/anthropic/claude-sonnet-4-5.toml index edc0053f1aa..f6b5beba2ca 100644 --- a/providers/nearai/models/anthropic/claude-sonnet-4-5.toml +++ b/providers/nearai/models/anthropic/claude-sonnet-4-5.toml @@ -3,6 +3,6 @@ reasoning_options = [{ type = "toggle" }, { type = "budget_tokens", min = 1_024 [cost] input = 3 -output = 15.5 +output = 15.0 cache_read = 0.3 cache_write = 3.75 diff --git a/providers/nearai/models/black-forest-labs/FLUX.2-klein-4B.toml b/providers/nearai/models/black-forest-labs/FLUX.2-klein-4B.toml index 75fe3ebeb32..4745dd25339 100644 --- a/providers/nearai/models/black-forest-labs/FLUX.2-klein-4B.toml +++ b/providers/nearai/models/black-forest-labs/FLUX.2-klein-4B.toml @@ -18,5 +18,5 @@ context = 128_000 output = 128_000 [modalities] -input = ["text", "image"] +input = ["text"] output = ["image"] diff --git a/providers/nearai/models/google/gemini-3-pro.toml b/providers/nearai/models/google/gemini-3-pro.toml deleted file mode 100644 index c5911d6fa54..00000000000 --- a/providers/nearai/models/google/gemini-3-pro.toml +++ /dev/null @@ -1,7 +0,0 @@ -base_model = "google/gemini-3-pro-preview" -reasoning_options = [] - -[cost] -input = 1.25 -output = 15 -cache_read = 0 diff --git a/providers/nearai/models/google/gemma-4-31B-it.toml b/providers/nearai/models/google/gemma-4-31B-it.toml deleted file mode 100644 index a6f46532bff..00000000000 --- a/providers/nearai/models/google/gemma-4-31B-it.toml +++ /dev/null @@ -1,10 +0,0 @@ -base_model = "google/gemma-4-31b-it" -reasoning_options = [{ type = "toggle" }] - -[cost] -input = 0.13 -output = 0.4 -cache_read = 0.026 - -[modalities] -input = ["text"] diff --git a/providers/nearai/models/openai/gpt-5.2.toml b/providers/nearai/models/openai/gpt-5.2.toml index 3d3ced618b9..839990b6c17 100644 --- a/providers/nearai/models/openai/gpt-5.2.toml +++ b/providers/nearai/models/openai/gpt-5.2.toml @@ -2,6 +2,6 @@ base_model = "openai/gpt-5.2" reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] [cost] -input = 1.8 -output = 15.5 -cache_read = 0.18 +input = 1.75 +output = 14.0 +cache_read = 0.175 diff --git a/providers/nearai/models/openai/gpt-oss-120b.toml b/providers/nearai/models/openai/gpt-oss-120b.toml deleted file mode 100644 index b3cd0e4651e..00000000000 --- a/providers/nearai/models/openai/gpt-oss-120b.toml +++ /dev/null @@ -1,10 +0,0 @@ -base_model = "openai/gpt-oss-120b" -name = "GPT-OSS 120B" -reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] - -[cost] -input = 0.15 -output = 0.55 - -[limit] -context = 131_000 diff --git a/providers/nearai/models/openai/whisper-large-v3.toml b/providers/nearai/models/openai/whisper-large-v3.toml index 9e77565bade..4d5dbf409ba 100644 --- a/providers/nearai/models/openai/whisper-large-v3.toml +++ b/providers/nearai/models/openai/whisper-large-v3.toml @@ -11,7 +11,7 @@ open_weights = true [cost] input = 0.01 -output = 0.00 +output = 0.01 [limit] context = 448 diff --git a/providers/nearai/models/zai-org/GLM-5.1-FP8.toml b/providers/nearai/models/zai-org/GLM-5.1-FP8.toml index 6ce067b5080..8043e4c0cf5 100644 --- a/providers/nearai/models/zai-org/GLM-5.1-FP8.toml +++ b/providers/nearai/models/zai-org/GLM-5.1-FP8.toml @@ -15,12 +15,12 @@ open_weights = true field = "reasoning_content" [cost] -input = 0.85 -output = 3.30 +input = 1.4 +output = 4.4 [limit] context = 202_752 -output = 131_072 +output = 16384 [modalities] input = ["text"] diff --git a/providers/nebius/models/MiniMaxAI/MiniMax-M2.5-fast.toml b/providers/nebius/models/MiniMaxAI/MiniMax-M2.5-fast.toml deleted file mode 100644 index 3c3e5aefbdf..00000000000 --- a/providers/nebius/models/MiniMaxAI/MiniMax-M2.5-fast.toml +++ /dev/null @@ -1,28 +0,0 @@ -name = "MiniMax-M2.5-fast" -description = "Legacy model retained for compatibility with older integrations" -attachment = false -reasoning = true -reasoning_options = [] -status = "deprecated" -tool_call = true -structured_output = true -temperature = true -knowledge = "2025-01" -release_date = "2025-01-20" -last_updated = "2026-05-07" -open_weights = true - -[cost] -input = 0.30 -output = 1.20 -cache_read = 0.03 -cache_write = 0.375 - -[limit] -context = 8_000 -input = 7_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nebius/models/MiniMaxAI/MiniMax-M2.5.toml b/providers/nebius/models/MiniMaxAI/MiniMax-M2.5.toml deleted file mode 100644 index 92789b73aa7..00000000000 --- a/providers/nebius/models/MiniMaxAI/MiniMax-M2.5.toml +++ /dev/null @@ -1,27 +0,0 @@ -name = "MiniMax-M2.5" -description = "MiniMax model for chat, coding, office work, and agentic tasks" -attachment = false -reasoning = true -reasoning_options = [] -tool_call = true -structured_output = true -temperature = true -knowledge = "2025-01" -release_date = "2025-01-20" -last_updated = "2026-05-07" -open_weights = true - -[cost] -input = 0.30 -output = 1.20 -cache_read = 0.03 -cache_write = 0.375 - -[limit] -context = 196_608 -input = 190_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nebius/models/NousResearch/Hermes-4-405B.toml b/providers/nebius/models/NousResearch/Hermes-4-405B.toml index 12013b7634b..41f4352bf13 100644 --- a/providers/nebius/models/NousResearch/Hermes-4-405B.toml +++ b/providers/nebius/models/NousResearch/Hermes-4-405B.toml @@ -19,7 +19,7 @@ cache_read = 0.10 cache_write = 1.25 [limit] -context = 128_000 +context = 131_072 input = 120_000 output = 8_192 diff --git a/providers/nebius/models/NousResearch/Hermes-4-70B.toml b/providers/nebius/models/NousResearch/Hermes-4-70B.toml deleted file mode 100644 index aeecd381857..00000000000 --- a/providers/nebius/models/NousResearch/Hermes-4-70B.toml +++ /dev/null @@ -1,31 +0,0 @@ -name = "Hermes-4-70B" -description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" -attachment = false -reasoning = true -reasoning_options = [] -tool_call = true -structured_output = true -temperature = true -knowledge = "2025-11" -release_date = "2026-01-30" -last_updated = "2026-02-04" -open_weights = true - -[cost] -input = 0.13 -output = 0.40 -reasoning = 0.40 -cache_read = 0.013 -cache_write = 0.16 - -[limit] -context = 128_000 -input = 120_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] - -[interleaved] -field = "reasoning_content" diff --git a/providers/nebius/models/PrimeIntellect/INTELLECT-3.toml b/providers/nebius/models/PrimeIntellect/INTELLECT-3.toml deleted file mode 100644 index 5d1c260122b..00000000000 --- a/providers/nebius/models/PrimeIntellect/INTELLECT-3.toml +++ /dev/null @@ -1,27 +0,0 @@ -name = "INTELLECT-3" -description = "Legacy model retained for compatibility with older integrations" -attachment = false -reasoning = false -status = "deprecated" -tool_call = true -structured_output = true -temperature = true -knowledge = "2025-10" -release_date = "2026-01-25" -last_updated = "2026-02-04" -open_weights = true - -[cost] -input = 0.20 -output = 1.10 -cache_read = 0.02 -cache_write = 0.25 - -[limit] -context = 128_000 -input = 120_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nebius/models/Qwen/Qwen2.5-VL-72B-Instruct.toml b/providers/nebius/models/Qwen/Qwen2.5-VL-72B-Instruct.toml deleted file mode 100644 index 4249901650f..00000000000 --- a/providers/nebius/models/Qwen/Qwen2.5-VL-72B-Instruct.toml +++ /dev/null @@ -1,26 +0,0 @@ -name = "Qwen2.5-VL-72B-Instruct" -description = "Qwen vision-language model for visual reasoning, documents, and agent tasks" -attachment = true -reasoning = false -tool_call = true -structured_output = true -temperature = true -knowledge = "2024-12" -release_date = "2025-01-20" -last_updated = "2026-02-04" -open_weights = true - -[cost] -input = 0.25 -output = 0.75 -cache_read = 0.025 -cache_write = 0.31 - -[limit] -context = 128_000 -input = 120_000 -output = 8_192 - -[modalities] -input = ["text", "image"] -output = ["text"] \ No newline at end of file diff --git a/providers/nebius/models/Qwen/Qwen3-235B-A22B-Thinking-2507-fast.toml b/providers/nebius/models/Qwen/Qwen3-235B-A22B-Thinking-2507-fast.toml deleted file mode 100644 index f8ddac4f0c0..00000000000 --- a/providers/nebius/models/Qwen/Qwen3-235B-A22B-Thinking-2507-fast.toml +++ /dev/null @@ -1,28 +0,0 @@ -name = "Qwen3-235B-A22B-Thinking-2507-fast" -description = "Legacy model retained for compatibility with older integrations" -attachment = false -reasoning = true -reasoning_options = [] -status = "deprecated" -tool_call = true -structured_output = true -temperature = true -knowledge = "2025-07" -release_date = "2025-07-25" -last_updated = "2026-05-07" -open_weights = true - -[cost] -input = 0.50 -output = 2.00 -cache_read = 0.05 -cache_write = 0.625 - -[limit] -context = 8_000 -input = 7_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nebius/models/Qwen/Qwen3-30B-A3B-Instruct-2507.toml b/providers/nebius/models/Qwen/Qwen3-30B-A3B-Instruct-2507.toml index 2f9d2aefd72..620865c9b83 100644 --- a/providers/nebius/models/Qwen/Qwen3-30B-A3B-Instruct-2507.toml +++ b/providers/nebius/models/Qwen/Qwen3-30B-A3B-Instruct-2507.toml @@ -17,8 +17,8 @@ cache_read = 0.01 cache_write = 0.125 [limit] -context = 128_000 -input = 120_000 +context = 262_144 +input = 262_144 output = 8_192 [modalities] diff --git a/providers/nebius/models/Qwen/Qwen3-32B.toml b/providers/nebius/models/Qwen/Qwen3-32B.toml deleted file mode 100644 index 30d6abf2a3d..00000000000 --- a/providers/nebius/models/Qwen/Qwen3-32B.toml +++ /dev/null @@ -1,26 +0,0 @@ -name = "Qwen3-32B" -description = "Qwen instruction model for multilingual chat, reasoning, and tool use" -attachment = false -reasoning = false -tool_call = true -structured_output = true -temperature = true -knowledge = "2025-12" -release_date = "2026-01-28" -last_updated = "2026-02-04" -open_weights = true - -[cost] -input = 0.10 -output = 0.30 -cache_read = 0.01 -cache_write = 0.125 - -[limit] -context = 128_000 -input = 120_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] \ No newline at end of file diff --git a/providers/nebius/models/Qwen/Qwen3-Embedding-8B.toml b/providers/nebius/models/Qwen/Qwen3-Embedding-8B.toml index 77091ddbda9..f75aafb1c3d 100644 --- a/providers/nebius/models/Qwen/Qwen3-Embedding-8B.toml +++ b/providers/nebius/models/Qwen/Qwen3-Embedding-8B.toml @@ -16,8 +16,8 @@ input = 0.01 output = 0.00 [limit] -context = 32_768 -input = 32_768 +context = 40_960 +input = 40_960 output = 0 [modalities] diff --git a/providers/nebius/models/Qwen/Qwen3-Next-80B-A3B-Thinking-fast.toml b/providers/nebius/models/Qwen/Qwen3-Next-80B-A3B-Thinking-fast.toml deleted file mode 100644 index cabba5ab2fa..00000000000 --- a/providers/nebius/models/Qwen/Qwen3-Next-80B-A3B-Thinking-fast.toml +++ /dev/null @@ -1,28 +0,0 @@ -name = "Qwen3-Next-80B-A3B-Thinking-fast" -description = "Legacy model retained for compatibility with older integrations" -attachment = false -reasoning = true -reasoning_options = [] -status = "deprecated" -tool_call = true -structured_output = true -temperature = true -knowledge = "2025-07" -release_date = "2025-07-25" -last_updated = "2026-05-07" -open_weights = true - -[cost] -input = 0.15 -output = 1.20 -cache_read = 0.015 -cache_write = 0.1875 - -[limit] -context = 8_000 -input = 7_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nebius/models/Qwen/Qwen3-Next-80B-A3B-Thinking.toml b/providers/nebius/models/Qwen/Qwen3-Next-80B-A3B-Thinking.toml deleted file mode 100644 index 241156973ec..00000000000 --- a/providers/nebius/models/Qwen/Qwen3-Next-80B-A3B-Thinking.toml +++ /dev/null @@ -1,31 +0,0 @@ -name = "Qwen3-Next-80B-A3B-Thinking" -description = "Qwen reasoning model for deliberate problem solving, math, and coding" -attachment = false -reasoning = true -reasoning_options = [] -tool_call = true -structured_output = true -temperature = true -knowledge = "2025-12" -release_date = "2026-01-28" -last_updated = "2026-02-04" -open_weights = true - -[cost] -input = 0.15 -output = 1.20 -reasoning = 1.20 -cache_read = 0.015 -cache_write = 0.18 - -[limit] -context = 128_000 -input = 120_000 -output = 16_384 - -[modalities] -input = ["text"] -output = ["text"] - -[interleaved] -field = "reasoning_content" diff --git a/providers/nebius/models/Qwen/Qwen3.5-397B-A17B-fast.toml b/providers/nebius/models/Qwen/Qwen3.5-397B-A17B-fast.toml deleted file mode 100644 index 7ba4ee4e80a..00000000000 --- a/providers/nebius/models/Qwen/Qwen3.5-397B-A17B-fast.toml +++ /dev/null @@ -1,28 +0,0 @@ -name = "Qwen3.5-397B-A17B-fast" -description = "Legacy model retained for compatibility with older integrations" -attachment = false -reasoning = true -reasoning_options = [{ type = "toggle" }] -status = "deprecated" -tool_call = true -structured_output = true -temperature = true -knowledge = "2025-07" -release_date = "2025-07-15" -last_updated = "2026-05-07" -open_weights = true - -[cost] -input = 0.60 -output = 3.60 -cache_read = 0.06 -cache_write = 0.75 - -[limit] -context = 8_000 -input = 7_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nebius/models/deepseek-ai/DeepSeek-V3.2-fast.toml b/providers/nebius/models/deepseek-ai/DeepSeek-V3.2-fast.toml deleted file mode 100644 index f0837c4519f..00000000000 --- a/providers/nebius/models/deepseek-ai/DeepSeek-V3.2-fast.toml +++ /dev/null @@ -1,28 +0,0 @@ -name = "DeepSeek-V3.2-fast" -description = "Legacy model retained for compatibility with older integrations" -attachment = false -reasoning = true -reasoning_options = [{ type = "toggle" }] -status = "deprecated" -tool_call = true -structured_output = true -temperature = true -knowledge = "2025-01" -release_date = "2025-01-27" -last_updated = "2026-05-07" -open_weights = true - -[cost] -input = 0.40 -output = 2.00 -cache_read = 0.04 -cache_write = 0.5 - -[limit] -context = 8_000 -input = 7_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nebius/models/deepseek-ai/DeepSeek-V3.2.toml b/providers/nebius/models/deepseek-ai/DeepSeek-V3.2.toml deleted file mode 100644 index 05ee4141350..00000000000 --- a/providers/nebius/models/deepseek-ai/DeepSeek-V3.2.toml +++ /dev/null @@ -1,32 +0,0 @@ -name = "DeepSeek-V3.2" -description = "Legacy model retained for compatibility with older integrations" -attachment = false -reasoning = true -reasoning_options = [{ type = "toggle" }] -status = "deprecated" -tool_call = true -structured_output = true -temperature = true -knowledge = "2025-11" -release_date = "2026-01-20" -last_updated = "2026-02-04" -open_weights = true - -[cost] -input = 0.30 -output = 0.45 -reasoning = 0.45 -cache_read = 0.03 -cache_write = 0.375 - -[limit] -context = 163_000 -input = 160_000 -output = 16_384 - -[modalities] -input = ["text"] -output = ["text"] - -[interleaved] -field = "reasoning_content" diff --git a/providers/nebius/models/deepseek-ai/DeepSeek-V4-Flash-0731.toml b/providers/nebius/models/deepseek-ai/DeepSeek-V4-Flash-0731.toml new file mode 100644 index 00000000000..776b5cfce81 --- /dev/null +++ b/providers/nebius/models/deepseek-ai/DeepSeek-V4-Flash-0731.toml @@ -0,0 +1,26 @@ +# Sources: +# - https://tokenfactory.nebius.com/ (model catalog) +# - https://tokenfactory.nebius.com/api/public/models_info (pricing, context, max length) +# Accessed 2026-08-29. +# Same gateway effort behavior as DeepSeek-V4-Flash on this host: reasoning_effort +# accepts none/minimal/low/medium/high/xhigh/max, but minimal=low=medium and +# high=xhigh collapse, leaving none/low/high/max as the distinct levels. +# No discounted prompt-cache tier on Nebius: cached input is billed at the full +# input rate, so cache_read equals input (same rationale as Kimi-K3 / V4-Flash). +# Context/output use this model's exact models_info max_model_len (1_024_000), which +# intentionally differs from other "1M" IDs on this host (DeepSeek-V4-Pro, GLM-5.2, +# Nemotron entries serve max_model_len = 1_048_576). +base_model = "deepseek/deepseek-v4-flash-0731" +reasoning_options = [{ type = "effort", values = ["none", "low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.14 +output = 0.28 +cache_read = 0.14 + +[limit] +context = 1_024_000 +output = 1_024_000 diff --git a/providers/nebius/models/deepseek-ai/DeepSeek-V4-Flash.toml b/providers/nebius/models/deepseek-ai/DeepSeek-V4-Flash.toml deleted file mode 100644 index f91f083ce89..00000000000 --- a/providers/nebius/models/deepseek-ai/DeepSeek-V4-Flash.toml +++ /dev/null @@ -1,40 +0,0 @@ -# Sources: -# - https://tokenfactory.nebius.com/api/public/models_info (pricing, 131K context) -# - https://tokenfactory.nebius.com/model-catalog.md -# Accessed 2026-08-09. -# Nebius truncates the 1M-context base model to a 131K window. -# max_tokens has no documented ceiling other than the context window, so output -# is set to the context size (same as the other Nebius base_model entries). -# https://docs.tokenfactory.nebius.com/api-reference/inference/create-chat-completion -# Effort: reasoning_effort. Verified live against -# api.tokenfactory.nebius.com/v1/chat/completions on 2026-08-09, temperature 0, -# two prompts. The gateway accepts all seven documented values, but only four -# distinct behaviours exist on this model, and they line up with lab Flash's -# low/high/max (https://api-docs.deepseek.com/guides/thinking_mode/) plus a -# Nebius-side off switch: -# none -> reasoning_tokens 0, no reasoning_content -# minimal = low = medium -> identical output (677 / 133 reasoning tokens) -# high = xhigh -> identical output (490 / 138 reasoning tokens) -# max -> distinct (1102 / 154 reasoning tokens) -# No toggle: `none` is the off switch, and DeepSeek's native -# `thinking.type = disabled` is accepted but ignored here (reasoning_content -# still comes back), so it is not a real caller control on this host. -# Nebius has no discounted prompt-cache tier for this model: models_info exposes -# no cache fields, and cached and fresh input tokens are billed identically at the -# full input rate. cache_read is therefore set equal to input rather than left -# unset, which downstream consumers (e.g. opencode) treat as $0/M. Same reasoning -# as PR #3956 for Kimi-K3. -base_model = "deepseek/deepseek-v4-flash" -reasoning_options = [{ type = "effort", values = ["none", "low", "high", "max"] }] - -[interleaved] -field = "reasoning_content" - -[cost] -input = 0.14 -output = 0.28 -cache_read = 0.14 - -[limit] -context = 131_072 -output = 131_072 diff --git a/providers/nebius/models/deepseek-ai/DeepSeek-V4-Pro-0813.toml b/providers/nebius/models/deepseek-ai/DeepSeek-V4-Pro-0813.toml new file mode 100644 index 00000000000..b439ca31a66 --- /dev/null +++ b/providers/nebius/models/deepseek-ai/DeepSeek-V4-Pro-0813.toml @@ -0,0 +1,28 @@ +# Sources: +# - https://tokenfactory.nebius.com/ (model catalog) +# - https://tokenfactory.nebius.com/api/public/models_info (pricing, context, max length) +# Accessed 2026-09-18. +# Effort: reasoning_effort = none|low|high|max (none = thinking off). Same gateway +# behavior as the other DeepSeek V4 entries on this host (DeepSeek-V4-Flash-0731, +# DeepSeek-V4-Pro): the generic schema accepts none/minimal/low/medium/high/xhigh/max, +# but the mid tiers collapse (minimal=low=medium, high=xhigh) and none disables +# thinking, leaving none/low/high/max as the distinct levels. +# Served window: models_info max_model_len = 979_000 for this snapshot with no separate +# output cap, so context and output both take the full served window. +# No discounted prompt-cache tier is published in the public catalog: cached and fresh +# input are billed identically, so cache_read = input (same rationale as +# DeepSeek-V4-Flash-0731 / Kimi-K3 / GLM-5.3-Flash). +base_model = "deepseek/deepseek-v4-pro-0813" +reasoning_options = [{ type = "effort", values = ["none", "low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1.32 +output = 3.96 +cache_read = 1.32 + +[limit] +context = 979_000 +output = 979_000 diff --git a/providers/nebius/models/deepseek-ai/DeepSeek-V4-Pro.toml b/providers/nebius/models/deepseek-ai/DeepSeek-V4-Pro.toml index 948f4d822dd..0957cac0a05 100644 --- a/providers/nebius/models/deepseek-ai/DeepSeek-V4-Pro.toml +++ b/providers/nebius/models/deepseek-ai/DeepSeek-V4-Pro.toml @@ -1,8 +1,17 @@ +# Sources: +# - https://tokenfactory.nebius.com/ (model catalog) +# - https://tokenfactory.nebius.com/api/public/models_info (pricing, context, max length) +# Accessed 2026-08-29. +# Effort: reasoning_effort = none|low|high|max (none = thinking off). Probed live against +# api.tokenfactory.nebius.com chat completions on 2026-08-29: every schema effort value is +# accepted, none disables thinking (default baseline is non-thinking), the mid tiers run +# flat (same-family collapse note on DeepSeek-V4-Flash-0731: minimal=low=medium, +# high=xhigh), and max is distinctly heavier. The lab's thinking.type field is accepted +# but inert here (type=enabled does not turn thinking on), so reasoning_effort expresses off. +# Served window: models_info max_model_len = 1_048_576 for this model with no separate +# output cap, so context and output both take the full served window. base_model = "deepseek/deepseek-v4-pro" -reasoning_options = [ - { type = "toggle" }, - { type = "effort", values = ["low", "medium", "high"] }, -] +reasoning_options = [{ type = "effort", values = ["none", "low", "high", "max"] }] [interleaved] field = "reasoning_content" @@ -11,3 +20,7 @@ field = "reasoning_content" input = 1.75 output = 3.5 cache_read = 0.15 + +[limit] +context = 1_048_576 +output = 1_048_576 diff --git a/providers/nebius/models/deepseek-ai/DeepSeek-V4.1-Flash.toml b/providers/nebius/models/deepseek-ai/DeepSeek-V4.1-Flash.toml new file mode 100644 index 00000000000..cc631b9cfee --- /dev/null +++ b/providers/nebius/models/deepseek-ai/DeepSeek-V4.1-Flash.toml @@ -0,0 +1,30 @@ +# Sources: +# - https://tokenfactory.nebius.com/ (model catalog) +# - https://tokenfactory.nebius.com/api/public/models_info (pricing, context, max length) +# Accessed 2026-09-18. +# Effort: reasoning_effort = none|low|high|max (none = thinking off). Same gateway +# behavior as the other DeepSeek V4 entries on this host (DeepSeek-V4-Flash-0731, +# DeepSeek-V4-Pro): the generic schema accepts none/minimal/low/medium/high/xhigh/max, +# but the mid tiers collapse (minimal=low=medium, high=xhigh) and none disables +# thinking, leaving none/low/high/max as the distinct levels. +# Server reports model type image2text, so attachment/modalities are inherited from the +# lab entry. +# Served window: models_info max_model_len = 1_048_000 for this model with no separate +# output cap, so context and output both take the full served window. +# No discounted prompt-cache tier is published in the public catalog: cached and fresh +# input are billed identically, so cache_read = input (same rationale as +# DeepSeek-V4-Flash-0731 / Kimi-K3 / GLM-5.3-Flash). +base_model = "deepseek/deepseek-v4.1-flash" +reasoning_options = [{ type = "effort", values = ["none", "low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.3 + +[limit] +context = 1_048_000 +output = 1_048_000 diff --git a/providers/nebius/models/meta-llama/Llama-3.3-70B-Instruct.toml b/providers/nebius/models/meta-llama/Llama-3.3-70B-Instruct.toml deleted file mode 100644 index 46b58975c5d..00000000000 --- a/providers/nebius/models/meta-llama/Llama-3.3-70B-Instruct.toml +++ /dev/null @@ -1,26 +0,0 @@ -name = "Llama-3.3-70B-Instruct" -description = "Open Llama instruction model for multilingual chat, reasoning, and coding" -attachment = false -reasoning = false -tool_call = true -structured_output = true -temperature = true -knowledge = "2025-08" -release_date = "2025-12-05" -last_updated = "2026-02-04" -open_weights = true - -[cost] -input = 0.13 -output = 0.40 -cache_read = 0.013 -cache_write = 0.16 - -[limit] -context = 128_000 -input = 120_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] \ No newline at end of file diff --git a/providers/nebius/models/moonshotai/Kimi-K2.5-fast.toml b/providers/nebius/models/moonshotai/Kimi-K2.5-fast.toml deleted file mode 100644 index d839ec35e0e..00000000000 --- a/providers/nebius/models/moonshotai/Kimi-K2.5-fast.toml +++ /dev/null @@ -1,32 +0,0 @@ -name = "Kimi-K2.5-fast" -description = "Legacy model retained for compatibility with older integrations" -family = "kimi-k2" -release_date = "2025-12-15" -last_updated = "2026-02-04" -attachment = true -reasoning = true -reasoning_options = [{ type = "toggle" }] -status = "deprecated" -tool_call = true -structured_output = true -temperature = true -knowledge = "2025-06" -open_weights = true - -[cost] -input = 0.50 -output = 2.50 -cache_read = 0.05 -cache_write = 0.625 - -[limit] -context = 256_000 -input = 256_000 -output = 8192 - -[modalities] -input = ["text", "image"] -output = ["text"] - -[interleaved] -field = "reasoning_content" diff --git a/providers/nebius/models/moonshotai/Kimi-K2.5.toml b/providers/nebius/models/moonshotai/Kimi-K2.5.toml deleted file mode 100644 index 3cc4c1e26d3..00000000000 --- a/providers/nebius/models/moonshotai/Kimi-K2.5.toml +++ /dev/null @@ -1,33 +0,0 @@ -name = "Kimi-K2.5" -description = "Legacy model retained for compatibility with older integrations" -family = "kimi-k2" -release_date = "2025-12-15" -last_updated = "2026-02-04" -attachment = true -reasoning = true -reasoning_options = [{ type = "toggle" }] -status = "deprecated" -tool_call = true -structured_output = true -temperature = true -knowledge = "2025-06" -open_weights = true - -[cost] -input = 0.50 -output = 2.50 -reasoning = 2.50 -cache_read = 0.05 -cache_write = 0.625 - -[limit] -context = 256_000 -input = 256_000 -output = 8192 - -[modalities] -input = ["text", "image"] -output = ["text"] - -[interleaved] -field = "reasoning_content" diff --git a/providers/nebius/models/nvidia/Llama-3_1-Nemotron-Ultra-253B-v1.toml b/providers/nebius/models/nvidia/Llama-3_1-Nemotron-Ultra-253B-v1.toml deleted file mode 100644 index 47b8177e2e2..00000000000 --- a/providers/nebius/models/nvidia/Llama-3_1-Nemotron-Ultra-253B-v1.toml +++ /dev/null @@ -1,26 +0,0 @@ -name = "Llama-3.1-Nemotron-Ultra-253B-v1" -base_model = "nvidia/llama-3.1-nemotron-ultra-253b" -attachment = false -reasoning = false -tool_call = true -structured_output = true -temperature = true -knowledge = "2024-12" -release_date = "2025-01-15" -last_updated = "2026-02-04" -open_weights = true - -[cost] -input = 0.60 -output = 1.80 -cache_read = 0.06 -cache_write = 0.75 - -[limit] -context = 128_000 -input = 120_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] \ No newline at end of file diff --git a/providers/nebius/models/nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B.toml b/providers/nebius/models/nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B.toml deleted file mode 100644 index f24f5276feb..00000000000 --- a/providers/nebius/models/nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B.toml +++ /dev/null @@ -1,26 +0,0 @@ -name = "Nemotron-3-Nano-30B-A3B" -base_model = "nvidia/nemotron-3-nano-30b-a3b" -attachment = false -reasoning = false -tool_call = true -structured_output = true -temperature = true -knowledge = "2025-05" -release_date = "2025-08-10" -last_updated = "2026-02-04" -open_weights = true - -[cost] -input = 0.06 -output = 0.24 -cache_read = 0.006 -cache_write = 0.075 - -[limit] -context = 32_000 -input = 30_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] \ No newline at end of file diff --git a/providers/nebius/models/nvidia/Nemotron-3-Nano-Omni.toml b/providers/nebius/models/nvidia/Nemotron-3-Nano-Omni.toml deleted file mode 100644 index 114b15c2086..00000000000 --- a/providers/nebius/models/nvidia/Nemotron-3-Nano-Omni.toml +++ /dev/null @@ -1,27 +0,0 @@ -name = "Nemotron-3-Nano-Omni" -base_model = "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning" -attachment = false -reasoning = true -reasoning_options = [] -tool_call = true -structured_output = true -temperature = true -knowledge = "2025-01" -release_date = "2025-01-20" -last_updated = "2026-05-07" -open_weights = true - -[cost] -input = 0.06 -output = 0.24 -cache_read = 0.006 -cache_write = 0.075 - -[limit] -context = 65_536 -input = 60_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nebius/models/nvidia/Nemotron-3-Ultra-550b-a55b.toml b/providers/nebius/models/nvidia/Nemotron-3-Ultra-550b-a55b.toml new file mode 100644 index 00000000000..1dd55593b4d --- /dev/null +++ b/providers/nebius/models/nvidia/Nemotron-3-Ultra-550b-a55b.toml @@ -0,0 +1,28 @@ +# Sources: +# - https://tokenfactory.nebius.com/ (model catalog) +# - https://tokenfactory.nebius.com/model-catalog.md (pricing) +# - https://tokenfactory.nebius.com/api/public/models_info (context, max length) +# Accessed 2026-08-29. +# Effort: reasoning_effort = none|high (none = thinking off). Probed live against +# api.tokenfactory.nebius.com chat completions on 2026-08-29: thinking is ON by default, +# reasoning_effort=none returns zero reasoning tokens, and high enables thinking. Other +# accepted non-none levels did not show a distinct graded effect at probe scale, so they +# are not exposed. The undocumented chat_template_kwargs.enable_thinking kwarg is also +# forwarded, but reasoning_effort is the host's documented control. +# Served window: models_info max_model_len = 1_048_576 with no separate output cap, so +# context and output both take the full served window. + +base_model = "nvidia/nemotron-3-ultra-550b-a55b" + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 1 +output = 3 +cache_read = 1 + +[limit] +context = 1_048_576 +output = 1_048_576 diff --git a/providers/nebius/models/nvidia/Nemotron-3_5-Lightning.toml b/providers/nebius/models/nvidia/Nemotron-3_5-Lightning.toml new file mode 100644 index 00000000000..125a90b4500 --- /dev/null +++ b/providers/nebius/models/nvidia/Nemotron-3_5-Lightning.toml @@ -0,0 +1,27 @@ +# Sources: +# - https://tokenfactory.nebius.com/ (model catalog) +# - https://tokenfactory.nebius.com/model-catalog.md (pricing) +# - https://tokenfactory.nebius.com/api/public/models_info (context, max length) +# Accessed 2026-08-29. +# Effort: reasoning_effort = none|high (none = thinking off). Probed live against +# api.tokenfactory.nebius.com chat completions on 2026-08-29: thinking is ON by default, +# reasoning_effort=none returns zero reasoning tokens, and high enables thinking. Other +# accepted non-none levels did not show a distinct graded effect at probe scale, so they +# are not exposed. +# Served window: models_info max_model_len = 1_048_576 with no separate output cap, so +# context and output both take the full served window. + +base_model = "nvidia/nemotron-3.5-lightning" + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.06 +output = 0.24 +cache_read = 0.06 + +[limit] +context = 1_048_576 +output = 1_048_576 diff --git a/providers/nebius/models/nvidia/nemotron-3-super-120b-a12b.toml b/providers/nebius/models/nvidia/nemotron-3-super-120b-a12b.toml index ae14965ad6d..9f3c68bd81d 100644 --- a/providers/nebius/models/nvidia/nemotron-3-super-120b-a12b.toml +++ b/providers/nebius/models/nvidia/nemotron-3-super-120b-a12b.toml @@ -16,8 +16,8 @@ input = 0.30 output = 0.90 [limit] -context = 256_000 -input = 256_000 +context = 262_144 +input = 262_144 output = 32_768 [modalities] diff --git a/providers/nebius/models/openai/gpt-oss-120b-fast.toml b/providers/nebius/models/openai/gpt-oss-120b-fast.toml deleted file mode 100644 index b777d0e6a2b..00000000000 --- a/providers/nebius/models/openai/gpt-oss-120b-fast.toml +++ /dev/null @@ -1,28 +0,0 @@ -name = "gpt-oss-120b-fast" -description = "Legacy model retained for compatibility with older integrations" -attachment = false -reasoning = true -reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] -status = "deprecated" -tool_call = true -structured_output = true -temperature = true -knowledge = "2025-06" -release_date = "2025-06-10" -last_updated = "2026-05-07" -open_weights = true - -[cost] -input = 0.10 -output = 0.50 -cache_read = 0.01 -cache_write = 0.125 - -[limit] -context = 8_000 -input = 7_000 -output = 8_192 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/nebius/models/openai/gpt-oss-120b.toml b/providers/nebius/models/openai/gpt-oss-120b.toml index f1c2df98c95..6375d4a34d1 100644 --- a/providers/nebius/models/openai/gpt-oss-120b.toml +++ b/providers/nebius/models/openai/gpt-oss-120b.toml @@ -19,7 +19,7 @@ cache_read = 0.015 cache_write = 0.18 [limit] -context = 128_000 +context = 131_072 input = 124_000 output = 8_192 diff --git a/providers/nebius/models/zai-org/GLM-5.2.toml b/providers/nebius/models/zai-org/GLM-5.2.toml index d50ba738521..4a33cde6bde 100644 --- a/providers/nebius/models/zai-org/GLM-5.2.toml +++ b/providers/nebius/models/zai-org/GLM-5.2.toml @@ -12,5 +12,5 @@ input = 1.4 output = 4.4 [limit] -context = 432_000 -output = 432_000 +context = 1_048_576 +output = 1_048_576 diff --git a/providers/nebius/models/zai-org/GLM-5.3-Flash.toml b/providers/nebius/models/zai-org/GLM-5.3-Flash.toml new file mode 100644 index 00000000000..d01a5c3f2b2 --- /dev/null +++ b/providers/nebius/models/zai-org/GLM-5.3-Flash.toml @@ -0,0 +1,35 @@ +# Sources: +# - https://tokenfactory.nebius.com/ (model catalog) +# - https://tokenfactory.nebius.com/model-catalog.md (pricing) +# - https://tokenfactory.nebius.com/api/public/models_info (context, max length) +# - https://docs.bigmodel.cn/cn/guide/models/vlm/glm-5.3-flash (effort set; thinking +# cannot be disabled, so there is no toggle — effort per lab: low|high|max, default max) +# Accessed 2026-08-29. +# Text-only on this host: Token Factory serves GLM-5.3-Flash as text2text with no +# image/video use cases, unlike the multimodal lab model — attachment stays false. +# No discounted prompt-cache tier in the public catalog (no cache rate listed for this +# model): cached and fresh input are billed identically, so cache_read = input +# (same rationale as Kimi-K3 / DeepSeek-V4-Flash-0731). + +base_model = "zhipuai/glm-5.3-flash" +attachment = false + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.15 + +[limit] +context = 1_024_000 +output = 1_024_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/nebius/models/zai-org/GLM-5.3.toml b/providers/nebius/models/zai-org/GLM-5.3.toml new file mode 100644 index 00000000000..be8b6208f43 --- /dev/null +++ b/providers/nebius/models/zai-org/GLM-5.3.toml @@ -0,0 +1,28 @@ +# Sources: +# - https://tokenfactory.nebius.com/ (model catalog) +# - https://tokenfactory.nebius.com/api/public/models_info (pricing, context, max length) +# - https://docs.bigmodel.cn/cn/guide/models/text/glm-5.3 (effort set; thinking cannot +# be disabled, so there is no toggle — effort per lab: low|high|max, default max) +# Accessed 2026-09-18. +# Served window: models_info max_model_len = 1_024_000 with no separate output cap, so +# context and output both take the full served window. +# No discounted prompt-cache tier is published in the public catalog: cached and fresh +# input are billed identically, so cache_read = input (same rationale as +# GLM-5.3-Flash / DeepSeek-V4-Flash-0731 / Kimi-K3). +base_model = "zhipuai/glm-5.3" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1.4 +output = 4.4 +cache_read = 1.4 + +[limit] +context = 1_024_000 +output = 1_024_000 diff --git a/providers/nebius/models/zai-org/GLM-5.toml b/providers/nebius/models/zai-org/GLM-5.toml deleted file mode 100644 index e0a31716e51..00000000000 --- a/providers/nebius/models/zai-org/GLM-5.toml +++ /dev/null @@ -1,31 +0,0 @@ -name = "GLM-5" -description = "Legacy model retained for compatibility with older integrations" -attachment = false -reasoning = true -reasoning_options = [{ type = "toggle" }] -status = "deprecated" -tool_call = true -structured_output = true -temperature = true -knowledge = "2026-01" -release_date = "2026-03-01" -last_updated = "2026-03-10" -open_weights = false - -[cost] -input = 1.00 -output = 3.20 -cache_read = 0.10 -cache_write = 1.00 - -[limit] -context = 200_000 -input = 200_000 -output = 16_384 - -[modalities] -input = ["text"] -output = ["text"] - -[interleaved] -field = "reasoning_content" diff --git a/providers/neon/models/claude-fable-5-1.toml b/providers/neon/models/claude-fable-5-1.toml new file mode 100644 index 00000000000..26a08223218 --- /dev/null +++ b/providers/neon/models/claude-fable-5-1.toml @@ -0,0 +1,19 @@ +# Chat Completions `reasoning_effort` is rejected (`Extra inputs are not permitted`). +# Effort is the Anthropic Messages control: thinking.type adaptive + output_config.effort. +# No toggle: thinking.type.disabled is rejected, same as claude-fable-5. +# json_schema on /v1/chat/completions is translated via forced tool use; this +# model rejects that (INVALID_PARAMETER_VALUE). Measured 2026-09-04. +# [cost] is the neon.com/models list for this id (10 / 50 / cache_read 0.25 / +# cache_write 12.5). Sibling claude-fable-5 publishes cache_read = 1; do not +# copy that onto 5.1. +base_model = "anthropic/claude-fable-5-1" +structured_output = false +reasoning_options = [ + { type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }, +] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 diff --git a/providers/neon/models/glm-5-3-flash.toml b/providers/neon/models/glm-5-3-flash.toml new file mode 100644 index 00000000000..d2dad8e846c --- /dev/null +++ b/providers/neon/models/glm-5-3-flash.toml @@ -0,0 +1,20 @@ +# Effort: chat completions reasoning_effort. +# Lab/peers: low|high|max. Neon accepts extra values (minimal, medium, xhigh) +# with HTTP 200, but a 2026-09-04 effect probe did not show distinct tiers +# (reasoning_content length is not monotonic). `none` is rejected (thinking-only). +# thinking.type=disabled returns 200 and still emits reasoning_content. +base_model = "zhipuai/glm-5.3-flash" +name = "GLM-5.3 Flash" +reasoning_options = [ + { type = "effort", values = ["low", "high", "max"] }, +] + +# List rates. First-party zhipuai currently publishes a 50% promo that Neon does not. +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.03 + +# Lab context is 1_000_000. neon.com/models publishes 1_048_576. +[limit] +context = 1_048_576 diff --git a/providers/neon/models/gpt-5-6-luna.toml b/providers/neon/models/gpt-5-6-luna.toml index 6018ac810d4..55c129cc5c3 100644 --- a/providers/neon/models/gpt-5-6-luna.toml +++ b/providers/neon/models/gpt-5-6-luna.toml @@ -2,15 +2,17 @@ base_model = "openai/gpt-5.6-luna" reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] [cost] -input = 1 -output = 6 -cache_read = 0.1 +input = 0.2 +output = 1.2 +cache_read = 0.02 +cache_write = 0.25 [[cost.tiers]] tier = { type = "context", size = 272_000 } -input = 2 -output = 9 -cache_read = 0.2 +input = 0.4 +output = 1.8 +cache_read = 0.04 +cache_write = 0.5 [modalities] input = ["text", "image", "pdf"] diff --git a/providers/neon/models/gpt-5-6-sol.toml b/providers/neon/models/gpt-5-6-sol.toml index ee6667402b5..f7c9d9fbae4 100644 --- a/providers/neon/models/gpt-5-6-sol.toml +++ b/providers/neon/models/gpt-5-6-sol.toml @@ -5,12 +5,14 @@ reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high input = 5 output = 30 cache_read = 0.5 +cache_write = 6.25 [[cost.tiers]] tier = { type = "context", size = 272_000 } input = 10 output = 45 cache_read = 1 +cache_write = 12.5 [modalities] input = ["text", "image", "pdf"] diff --git a/providers/neon/models/gpt-5-6-terra.toml b/providers/neon/models/gpt-5-6-terra.toml index 4ea2eb9233f..0881c058469 100644 --- a/providers/neon/models/gpt-5-6-terra.toml +++ b/providers/neon/models/gpt-5-6-terra.toml @@ -2,15 +2,17 @@ base_model = "openai/gpt-5.6-terra" reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] [cost] -input = 2.5 -output = 15 -cache_read = 0.25 +input = 2 +output = 12 +cache_read = 0.2 +cache_write = 2.5 [[cost.tiers]] tier = { type = "context", size = 272_000 } -input = 5 -output = 22.5 -cache_read = 0.5 +input = 4 +output = 18 +cache_read = 0.4 +cache_write = 5 [modalities] input = ["text", "image", "pdf"] diff --git a/providers/neon/models/gpt-6-astra.toml b/providers/neon/models/gpt-6-astra.toml new file mode 100644 index 00000000000..2c0f285f346 --- /dev/null +++ b/providers/neon/models/gpt-6-astra.toml @@ -0,0 +1,23 @@ +base_model = "openai/gpt-6-astra" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 20 +output = 75 +cache_read = 2 +cache_write = 25 + +[modalities] +output = ["text", "image"] + +[provider] +npm = "@ai-sdk/openai" +api = "${NEON_AI_GATEWAY_BASE_URL}/openai/v1" +shape = "responses" diff --git a/providers/neon/models/gpt-oss-120b.toml b/providers/neon/models/gpt-oss-120b.toml index 869b4931685..2b2aa08fa90 100644 --- a/providers/neon/models/gpt-oss-120b.toml +++ b/providers/neon/models/gpt-oss-120b.toml @@ -2,8 +2,8 @@ base_model = "openai/gpt-oss-120b" reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] [cost] -input = 0.072 -output = 0.28 +input = 0.15 +output = 0.6 # The Neon gateway caps output below the upstream entry: `max_tokens` one above # 25_000 returns 400. Measured at the boundary 2026-08-08. `context` is inherited. diff --git a/providers/neon/models/gpt-oss-20b.toml b/providers/neon/models/gpt-oss-20b.toml index 05d93cb5b2c..b7c9aff260d 100644 --- a/providers/neon/models/gpt-oss-20b.toml +++ b/providers/neon/models/gpt-oss-20b.toml @@ -12,8 +12,8 @@ open_weights = true reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] [cost] -input = 0.05 -output = 0.20 +input = 0.07 +output = 0.3 [limit] context = 131_072 diff --git a/providers/neon/models/grok-4-6.toml b/providers/neon/models/grok-4-6.toml new file mode 100644 index 00000000000..e611f3d8cdd --- /dev/null +++ b/providers/neon/models/grok-4-6.toml @@ -0,0 +1,27 @@ +# Effort: Chat Completions `reasoning_effort` and Responses `reasoning.effort`. +# Native dialect is openai-responses: POST /openai/v1/responses returns 200. +# Chat Completions also returns 200 and accepts `reasoning_effort`. +# Lab/peers: low|medium|high|xhigh. `max` is rejected. +# `none` and `minimal` return 200 but do not expose a reasoning channel to +# compare against, and first-party xAI does not treat this model as disableable. +# Do not advertise an off switch we cannot verify. +# Cost: https://neon.com/models.json grok-4-6 (USD / 1M tokens). +base_model = "xai/grok-4.6" +reasoning_options = [ + { type = "effort", values = ["low", "medium", "high", "xhigh"] }, +] + +[cost] +input = 2 +output = 6 +cache_read = 0.5 + +# Lab output is 500_000. The gateway names 524_288: +# 'max_tokens' (100000000) exceeds model maximum (524288). Measured 2026-09-04. +[limit] +output = 524_288 + +[provider] +npm = "@ai-sdk/openai" +api = "${NEON_AI_GATEWAY_BASE_URL}/openai/v1" +shape = "responses" diff --git a/providers/neon/models/inkling.toml b/providers/neon/models/inkling.toml index d86e80c646b..01e473cd300 100644 --- a/providers/neon/models/inkling.toml +++ b/providers/neon/models/inkling.toml @@ -8,6 +8,11 @@ reasoning_options = [ { type = "effort", values = ["none", "minimal", "low", "medium", "high", "max"] }, # API: {"reasoning_effort": } ] +[cost] +input = 1 +output = 4.05 +cache_read = 0.17 + # The Neon gateway caps output below the upstream entry: `max_tokens` one above # 65_536 returns 400. Measured at the boundary 2026-08-08. `context` is inherited. [limit] diff --git a/providers/neuralwatt/README.md b/providers/neuralwatt/README.md index e3e2397c581..84a3b5f5cc7 100644 --- a/providers/neuralwatt/README.md +++ b/providers/neuralwatt/README.md @@ -8,37 +8,53 @@ Provider Details - Environment variable: NEURALWATT_API_KEY - Documentation: https://portal.neuralwatt.com/docs -Model Categories - -Reasoning Models (with interleaved thinking): -- glm-5.2 — GLM 5.2, reasoning enabled -- glm-5.2-short — GLM 5.2 Short, reasoning enabled -- moonshotai/Kimi-K2.5 — Kimi K2.5, reasoning + image input -- moonshotai/Kimi-K2.6 — Kimi K2.6, reasoning + image input -- moonshotai/Kimi-K2.7-Code — Kimi K2.7 Code, reasoning + image input -- Qwen/Qwen3.5-397B-A17B-FP8 — Qwen3.5 397B, reasoning enabled -- Qwen/Qwen3.6-35B-A3B — Qwen3.6 35B A3B, reasoning enabled - -Fast Variants (optimized for speed, non-reasoning): -- glm-5.2-fast — GLM 5.2 Fast -- glm-5.2-short-fast — GLM 5.2 Short Fast -- kimi-k2.5-fast — Kimi K2.5 Fast, image input -- kimi-k2.6-fast — Kimi K2.6 Fast, image input -- qwen3.5-397b-fast — Qwen3.5 397B Fast -- qwen3.6-35b-fast — Qwen3.6 35B Fast - -Flex Variants (streaming required, discounted): -- glm-5.2-flex — GLM 5.2 Flex, reasoning enabled -- glm-5.2-short-flex — GLM 5.2 Short Flex, reasoning enabled -- glm-5.2-short-fast-flex — GLM 5.2 Short Fast Flex -- kimi-k2.6-flex — Kimi K2.6 Flex, reasoning + image input -- kimi-k2.7-code-flex — Kimi K2.7 Code Flex, reasoning + image input +Standard Models +- deepseek-v4-flash: DeepSeek V4 Flash, 1M context +- deepseek-v4-pro: DeepSeek V4 Pro, 1M context, private preview +- gemma-4-31b: Gemma 4 31B, image input, 262K context +- glm-5.2: GLM 5.2, 1M context +- glm-5.2-short: GLM 5.2 Short, 200K context, 32K output cap +- glm-5.3: GLM 5.3, 1M context, gated preview +- kimi-k2.7-code: Kimi K2.7 Code, image input, 262K context +- kimi-k3: Kimi K3, image input, 1M context +- qwen-3.8-27b: Qwen 3.8 27B, image input, 262K context, private preview +- qwen3.6-35b: Qwen3.6 35B, image input, 131K context + +Fast Variants +Tuned for lower latency. What that means differs per model: +- glm-5.2-fast, glm-5.2-short-fast: reasoning stays available, but defaults off +- kimi-k2.7-code-fast: reasoning capped to a short budget and cannot be disabled +- kimi-k3-fast, qwen3.6-35b-fast: no reasoning + +Flex Variants +Discounted, best-effort latency. Requests may be held under load. +- deepseek-v4-flash-flex, glm-5.2-flex, glm-5.2-short-flex, + glm-5.2-short-fast-flex, kimi-k2.7-code-flex, kimi-k3-flex + +Pricing +- Rates come from metadata.pricing on GET /v1/models. Preview models require an + authenticated request to appear. +- Cached input is published per model as cached_input_per_million. It is 10% of + the input price on most models, but 20% on deepseek-v4-flash and 55.6% on + qwen-3.8-27b, so read the field rather than applying a ratio. +- There is no separate cache-write charge. +- Flex is billed at 0.65x the standard rate (35% off), cached input included. +- Flex requires stream = true. Non-streaming requests fall through to the + standard tier and are billed at standard rates. + +Reasoning Controls +- reasoning_effort accepts the levels in metadata.reasoning.supported_efforts. + Most lists include none, which is the off switch. glm-5.3 is the exception: + it reports reasoning.mandatory and offers only low, high and max. +- accepted_efforts is wider than supported_efforts. The extra values are + aliases the API folds into a supported level, not distinct levels. +- thinking_token_budget is accepted on every model except deepseek-v4-flash and + gemma-4-31b, which reject it with a 400 on the V2 model runner. +- kimi-k2.7-code and its variants expose no effort control, only a budget. Notes -- Standard model IDs, pricing, and limits are sourced directly from the Neuralwatt API; flex pricing applies the official 0.5 docs multiplier to the corresponding standard rates -- Cache reads are billed at 25% of the input token price; there is no separate cache-write charge -- Neuralwatt provides real-time energy consumption data (Joules/kWh) per request -- "Fast" variants are optimized for lower latency without reasoning -- Flex requires streaming; non-streaming requests fall back to the standard tier -- Official Neuralwatt docs currently describe Flex as a 50% token-pricing discount, including cached-input billing -- Vision models support image input via OpenAI-compatible API +- Preview models are access-gated and stay out of the public catalog until + access is granted. See https://portal.neuralwatt.com/docs/guides/preview-models +- Neuralwatt reports real-time energy consumption (Joules/kWh) per request. +- Models that report no max_output_tokens are capped only by their context + window, and are cataloged with output equal to context. diff --git a/providers/neuralwatt/models/Qwen/Qwen3.5-397B-A17B-FP8.toml b/providers/neuralwatt/models/Qwen/Qwen3.5-397B-A17B-FP8.toml deleted file mode 100644 index a4790f34439..00000000000 --- a/providers/neuralwatt/models/Qwen/Qwen3.5-397B-A17B-FP8.toml +++ /dev/null @@ -1,27 +0,0 @@ -name = "Qwen3.5 397B A17B FP8" -description = "Qwen instruction model for multilingual chat, reasoning, and tool use" -family = "qwen" -release_date = "2026-02-01" -last_updated = "2026-02-01" -attachment = false -reasoning = true -reasoning_options = [{ type = "toggle" }] -temperature = true -tool_call = true -open_weights = true - -[cost] -input = 0.69 -output = 4.14 -cache_read = 0.1725 - -[limit] -context = 262_128 -output = 262_128 - -[modalities] -input = ["text"] -output = ["text"] - -[interleaved] -field = "reasoning_content" \ No newline at end of file diff --git a/providers/neuralwatt/models/Qwen/Qwen3.6-35B-A3B.toml b/providers/neuralwatt/models/Qwen/Qwen3.6-35B-A3B.toml deleted file mode 100644 index 17f34727fba..00000000000 --- a/providers/neuralwatt/models/Qwen/Qwen3.6-35B-A3B.toml +++ /dev/null @@ -1,27 +0,0 @@ -name = "Qwen3.6 35B A3B" -description = "Qwen vision-language model for visual reasoning, documents, and agent tasks" -family = "qwen3.6" -release_date = "2026-04-01" -last_updated = "2026-04-01" -attachment = true -reasoning = true -reasoning_options = [{ type = "toggle" }] -temperature = true -tool_call = true -open_weights = true - -[cost] -input = 0.29 -output = 1.15 -cache_read = 0.0725 - -[limit] -context = 131_056 -output = 131_056 - -[modalities] -input = ["text", "image"] -output = ["text"] - -[interleaved] -field = "reasoning_content" \ No newline at end of file diff --git a/providers/neuralwatt/models/deepseek-v4-flash-flex.toml b/providers/neuralwatt/models/deepseek-v4-flash-flex.toml new file mode 100644 index 00000000000..fae8619652d --- /dev/null +++ b/providers/neuralwatt/models/deepseek-v4-flash-flex.toml @@ -0,0 +1,30 @@ +# Flex-tier variant of deepseek-v4-flash: same model, context window +# (1,048,560), and output cap (393,216, raised from 65,536 per GET /v1/models +# checked 2026-09-18) as the standard tier; requested via the +# `-flex` model ID or service_tier="flex" and requires stream=true +# (non-streaming requests fall through to the standard tier). +# Cost is the flex rate: 0.65x of standard pricing (35% off) per the flex-tier +# guide, applied to the standard rates advertised by GET /v1/models +# ($0.14/$0.28/$0.028, checked 2026-08-27). +# Reasoning matches the standard tier: reasoning_effort = none|high|max +# (default none, reasoning off by default; aliases low/minimal/medium -> high, +# xhigh -> max). thinking_token_budget is rejected with a 400 on V4-Flash +# (and -flex), so it is not declared. +# https://portal.neuralwatt.com/docs/guides/flex-tier +# https://portal.neuralwatt.com/docs/api/chat-completions +base_model = "deepseek/deepseek-v4-flash" +name = "DeepSeek V4 Flash Flex" +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high", "max"] + +[cost] +input = 0.091 +output = 0.182 +cache_read = 0.0182 + +[limit] +context = 1_048_560 +output = 393_216 diff --git a/providers/neuralwatt/models/deepseek-v4-flash-speed.toml b/providers/neuralwatt/models/deepseek-v4-flash-speed.toml new file mode 100644 index 00000000000..adf0fbd952c --- /dev/null +++ b/providers/neuralwatt/models/deepseek-v4-flash-speed.toml @@ -0,0 +1,26 @@ +# Speed variant serving the DeepSeek V4 Flash 0731 checkpoint: same pricing +# as deepseek-v4-flash ($0.14/$0.28/$0.028) with a 393,216-token output cap, +# per the public GET /v1/models metadata (checked 2026-09-18). Text-only +# input on this host. Reasoning matches the standard tier: reasoning_effort +# = none|high|max (default none, reasoning off by default; aliases +# low/minimal/medium -> high, xhigh -> max). Off is effort=none, so no +# separate toggle. thinking_token_budget is rejected with a 400 on this +# generation, so it is not declared. +# https://portal.neuralwatt.com/docs/api/chat-completions +# https://portal.neuralwatt.com/docs/api/models +base_model = "deepseek/deepseek-v4-flash-0731" +name = "DeepSeek V4 Flash (Speed)" +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high", "max"] + +[cost] +input = 0.14 +output = 0.28 +cache_read = 0.028 + +[limit] +context = 1_048_560 +output = 393_216 diff --git a/providers/neuralwatt/models/deepseek-v4-flash.toml b/providers/neuralwatt/models/deepseek-v4-flash.toml index 0f6b1623651..4a32afaee6c 100644 --- a/providers/neuralwatt/models/deepseek-v4-flash.toml +++ b/providers/neuralwatt/models/deepseek-v4-flash.toml @@ -1,15 +1,28 @@ +# Pricing from GET /v1/models metadata.pricing, the effective billed rate +# (checked 2026-08-27); the pricing page shows the same rates with cached +# input rounded to $0.03. Previously listed here at $0.104/$0.207/$0.026. +# Effort: reasoning_effort = none|high|max (default none, reasoning off by +# default; aliases low/minimal/medium -> high, xhigh -> max) per the +# chat-completions per-model table, verified against the live API on +# 2026-08-26. Off is effort=none, so no separate toggle. thinking_token_budget +# is rejected with a 400 on this model, so it is not declared. +# https://portal.neuralwatt.com/docs/api/models +# https://portal.neuralwatt.com/pricing +# Output cap raised to 393,216 tokens per GET /v1/models (checked +# 2026-09-18; was 65,536). +# https://portal.neuralwatt.com/docs/api/chat-completions base_model = "deepseek/deepseek-v4-flash" -name = "DeepSeek V4 Flash" +interleaved = true [[reasoning_options]] type = "effort" -values = ["high", "max"] +values = ["none", "high", "max"] [cost] -input = 0.104 -output = 0.207 -cache_read = 0.026 +input = 0.14 +output = 0.28 +cache_read = 0.028 [limit] context = 1_048_560 -output = 65_536 \ No newline at end of file +output = 393_216 diff --git a/providers/neuralwatt/models/deepseek-v4-pro.toml b/providers/neuralwatt/models/deepseek-v4-pro.toml new file mode 100644 index 00000000000..7b3f48e037a --- /dev/null +++ b/providers/neuralwatt/models/deepseek-v4-pro.toml @@ -0,0 +1,32 @@ +# Deprecated: Neuralwatt retired deepseek-v4-pro from GET /v1/models +# (checked 2026-09-18); it never left private preview. Retained for pricing +# history. +# Reasoning per the chat-completions per-model table (docs verified against +# the live API on 2026-08-26): reasoning_effort accepts none|low|high|max as +# distinct levels with low as the default (reasoning on by default); aliases +# medium/minimal map to low and xhigh maps to high. thinking_token_budget is +# accepted on this model (unlike deepseek-v4-flash, which rejects it); no +# bounds or disable sentinel documented. +# https://portal.neuralwatt.com/docs/api/chat-completions +base_model = "deepseek/deepseek-v4-pro" +status = "deprecated" +interleaved = true + +# Effort: reasoning_effort = none|low|high|max (off is effort=none; aliases +# medium/minimal -> low, xhigh -> high) +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +# Budget: thinking_token_budget (integer reasoning tokens) +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 1.0 +output = 3.0 +cache_read = 0.1 + +[limit] +context = 1_048_560 +output = 393_216 diff --git a/providers/neuralwatt/models/deepseek-v4.1-flash-flex.toml b/providers/neuralwatt/models/deepseek-v4.1-flash-flex.toml new file mode 100644 index 00000000000..a3dcc0edcd1 --- /dev/null +++ b/providers/neuralwatt/models/deepseek-v4.1-flash-flex.toml @@ -0,0 +1,26 @@ +# Flex-tier variant of deepseek-v4.1-flash: same model, context (1,048,560), +# vision, and effort ladder as the standard tier; requested via the `-flex` +# model ID or service_tier="flex" and requires stream=true (non-streaming +# requests fall through to the standard tier). Cost is the flex rate: 0.65x +# of standard pricing (35% off) per the flex-tier guide, applied to the +# standard rates advertised by GET /v1/models ($0.15/$0.6/$0.015, checked +# 2026-09-18). thinking_token_budget is rejected with a 400 on the V4-Flash +# generation and is not documented for V4.1-Flash, so it is not declared. +# https://portal.neuralwatt.com/docs/guides/flex-tier +# https://portal.neuralwatt.com/docs/api/chat-completions +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash Flex" +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "xhigh", "max"] + +[cost] +input = 0.0975 +output = 0.39 +cache_read = 0.00975 + +[limit] +context = 1_048_560 +output = 393_216 diff --git a/providers/neuralwatt/models/deepseek-v4.1-flash.toml b/providers/neuralwatt/models/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..240f6508802 --- /dev/null +++ b/providers/neuralwatt/models/deepseek-v4.1-flash.toml @@ -0,0 +1,25 @@ +# Pricing, limits, vision, and effort ladder from the public GET /v1/models +# metadata (checked 2026-09-18): $0.15/$0.6/$0.015, 1,048,560-token context, +# 393,216-token output cap, 20-image cap. Effort: reasoning_effort = +# none|low|high|xhigh|max (default high, reasoning on by default; aliases +# medium -> high, minimal -> low). Off is effort=none, so no separate toggle. +# thinking_token_budget is rejected with a 400 on the V4-Flash generation +# (checked 2026-08-26) and is not documented for V4.1-Flash, so it is not +# declared. +# https://portal.neuralwatt.com/docs/api/chat-completions +# https://portal.neuralwatt.com/docs/api/models +base_model = "deepseek/deepseek-v4.1-flash" +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "xhigh", "max"] + +[cost] +input = 0.15 +output = 0.6 +cache_read = 0.015 + +[limit] +context = 1_048_560 +output = 393_216 diff --git a/providers/neuralwatt/models/gemma-4-31b.toml b/providers/neuralwatt/models/gemma-4-31b.toml index 179f7f33a8d..0da74c962b9 100644 --- a/providers/neuralwatt/models/gemma-4-31b.toml +++ b/providers/neuralwatt/models/gemma-4-31b.toml @@ -1,11 +1,12 @@ base_model = "google/gemma-4-31b-it" name = "Gemma 4 31B" -reasoning_options = [{ type = "toggle" }] +reasoning_options = [{ type = "effort", values = ["none", "max"] }] +interleaved = true [cost] input = 0.144 output = 0.42 -cache_read = 0.036 +cache_read = 0.0144 [limit] context = 262_128 diff --git a/providers/neuralwatt/models/glm-5.2-fast.toml b/providers/neuralwatt/models/glm-5.2-fast.toml index e31157c077d..241dd01adcd 100644 --- a/providers/neuralwatt/models/glm-5.2-fast.toml +++ b/providers/neuralwatt/models/glm-5.2-fast.toml @@ -1,23 +1,28 @@ +# Deprecated: Neuralwatt retired the GLM-5.2 family from GET /v1/models +# (checked 2026-09-18); retained for pricing history. +# Budget: thinking_token_budget (integer reasoning tokens) +base_model = "zhipuai/glm-5.2" name = "GLM 5.2 Fast" description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -family = "glm" release_date = "2026-06-17" last_updated = "2026-06-17" -attachment = false -reasoning = false -temperature = true -tool_call = true -open_weights = true +structured_output = false +status = "deprecated" + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" [cost] input = 1.45 output = 4.5 -cache_read = 0.3625 +cache_read = 0.145 [limit] context = 1_048_560 output = 1_048_560 - -[modalities] -input = ["text"] -output = ["text"] \ No newline at end of file diff --git a/providers/neuralwatt/models/glm-5.2-flex.toml b/providers/neuralwatt/models/glm-5.2-flex.toml index 52a7eb9a8d3..b8fce8e6ba2 100644 --- a/providers/neuralwatt/models/glm-5.2-flex.toml +++ b/providers/neuralwatt/models/glm-5.2-flex.toml @@ -1,28 +1,28 @@ +# Deprecated: Neuralwatt retired the GLM-5.2 family from GET /v1/models +# (checked 2026-09-18); retained for pricing history. +# Budget: thinking_token_budget (integer reasoning tokens) +base_model = "zhipuai/glm-5.2" name = "GLM 5.2 Flex" description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -family = "glm" release_date = "2026-06-17" last_updated = "2026-06-17" -attachment = false -reasoning = true -reasoning_options = [ - { type = "toggle" }, - { type = "effort", values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] }, - { type = "budget_tokens" }, -] -temperature = true -tool_call = true -open_weights = true +structured_output = false +status = "deprecated" + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" [cost] -input = 0.725 -output = 2.25 -cache_read = 0.18125 +input = 0.9425 +output = 2.925 +cache_read = 0.09425 [limit] context = 1_048_560 output = 1_048_560 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/neuralwatt/models/glm-5.2-short-fast-flex.toml b/providers/neuralwatt/models/glm-5.2-short-fast-flex.toml index a3c330a85b6..f463c21d078 100644 --- a/providers/neuralwatt/models/glm-5.2-short-fast-flex.toml +++ b/providers/neuralwatt/models/glm-5.2-short-fast-flex.toml @@ -1,23 +1,28 @@ +# Deprecated: Neuralwatt retired the GLM-5.2 family from GET /v1/models +# (checked 2026-09-18); retained for pricing history. +# Budget: thinking_token_budget (integer reasoning tokens) +base_model = "zhipuai/glm-5.2" name = "GLM 5.2 Short Fast Flex" description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -family = "glm" release_date = "2026-06-17" last_updated = "2026-06-17" -attachment = false -reasoning = false -temperature = true -tool_call = true -open_weights = true +structured_output = false +status = "deprecated" + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" [cost] -input = 0.725 -output = 2.25 -cache_read = 0.18125 +input = 0.9425 +output = 2.925 +cache_read = 0.09425 [limit] context = 199_984 -output = 199_984 - -[modalities] -input = ["text"] -output = ["text"] +output = 32_000 diff --git a/providers/neuralwatt/models/glm-5.2-short-fast.toml b/providers/neuralwatt/models/glm-5.2-short-fast.toml index 52e5c586126..20da2db40c4 100644 --- a/providers/neuralwatt/models/glm-5.2-short-fast.toml +++ b/providers/neuralwatt/models/glm-5.2-short-fast.toml @@ -1,23 +1,28 @@ +# Deprecated: Neuralwatt retired the GLM-5.2 family from GET /v1/models +# (checked 2026-09-18); retained for pricing history. +# Budget: thinking_token_budget (integer reasoning tokens) +base_model = "zhipuai/glm-5.2" name = "GLM 5.2 Short Fast" description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -family = "glm" release_date = "2026-06-17" last_updated = "2026-06-17" -attachment = false -reasoning = false -temperature = true -tool_call = true -open_weights = true +structured_output = false +status = "deprecated" + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" [cost] input = 1.45 output = 4.5 -cache_read = 0.3625 +cache_read = 0.145 [limit] context = 199_984 -output = 199_984 - -[modalities] -input = ["text"] -output = ["text"] \ No newline at end of file +output = 32_000 diff --git a/providers/neuralwatt/models/glm-5.2-short-flex.toml b/providers/neuralwatt/models/glm-5.2-short-flex.toml index c673e3a4141..0b1cc1ed110 100644 --- a/providers/neuralwatt/models/glm-5.2-short-flex.toml +++ b/providers/neuralwatt/models/glm-5.2-short-flex.toml @@ -1,28 +1,28 @@ +# Deprecated: Neuralwatt retired the GLM-5.2 family from GET /v1/models +# (checked 2026-09-18); retained for pricing history. +# Budget: thinking_token_budget (integer reasoning tokens) +base_model = "zhipuai/glm-5.2" name = "GLM 5.2 Short Flex" description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -family = "glm" release_date = "2026-06-17" last_updated = "2026-06-17" -attachment = false -reasoning = true -reasoning_options = [ - { type = "toggle" }, - { type = "effort", values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] }, - { type = "budget_tokens" }, -] -temperature = true -tool_call = true -open_weights = true +structured_output = false +status = "deprecated" + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" [cost] -input = 0.725 -output = 2.25 -cache_read = 0.18125 +input = 0.9425 +output = 2.925 +cache_read = 0.09425 [limit] context = 199_984 -output = 199_984 - -[modalities] -input = ["text"] -output = ["text"] +output = 32_000 diff --git a/providers/neuralwatt/models/glm-5.2-short.toml b/providers/neuralwatt/models/glm-5.2-short.toml index 729cfd09b69..a324bae38c5 100644 --- a/providers/neuralwatt/models/glm-5.2-short.toml +++ b/providers/neuralwatt/models/glm-5.2-short.toml @@ -1,28 +1,28 @@ +# Deprecated: Neuralwatt retired the GLM-5.2 family from GET /v1/models +# (checked 2026-09-18); retained for pricing history. +# Budget: thinking_token_budget (integer reasoning tokens) +base_model = "zhipuai/glm-5.2" name = "GLM 5.2 Short" description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -family = "glm" release_date = "2026-06-17" last_updated = "2026-06-17" -attachment = false -reasoning = true -reasoning_options = [ - { type = "toggle" }, - { type = "effort", values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] }, - { type = "budget_tokens" }, -] -temperature = true -tool_call = true -open_weights = true +structured_output = false +status = "deprecated" + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" [cost] input = 1.45 output = 4.5 -cache_read = 0.3625 +cache_read = 0.145 [limit] context = 199_984 -output = 199_984 - -[modalities] -input = ["text"] -output = ["text"] +output = 32_000 diff --git a/providers/neuralwatt/models/glm-5.2.toml b/providers/neuralwatt/models/glm-5.2.toml index b500c2bc329..b83cbca3c04 100644 --- a/providers/neuralwatt/models/glm-5.2.toml +++ b/providers/neuralwatt/models/glm-5.2.toml @@ -1,28 +1,28 @@ +# Deprecated: Neuralwatt retired the GLM-5.2 family from GET /v1/models +# (checked 2026-09-18); retained for pricing history. +# Budget: thinking_token_budget (integer reasoning tokens) +base_model = "zhipuai/glm-5.2" name = "GLM 5.2" description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -family = "glm" release_date = "2026-06-17" last_updated = "2026-06-17" -attachment = false -reasoning = true -reasoning_options = [ - { type = "toggle" }, - { type = "effort", values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] }, - { type = "budget_tokens" }, -] -temperature = true -tool_call = true -open_weights = true +structured_output = false +status = "deprecated" + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" [cost] input = 1.45 output = 4.5 -cache_read = 0.3625 +cache_read = 0.145 [limit] context = 1_048_560 output = 1_048_560 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/neuralwatt/models/glm-5.3-flash-flex.toml b/providers/neuralwatt/models/glm-5.3-flash-flex.toml new file mode 100644 index 00000000000..502beae0882 --- /dev/null +++ b/providers/neuralwatt/models/glm-5.3-flash-flex.toml @@ -0,0 +1,34 @@ +# Flex-tier variant of glm-5.3-flash: same model, context (1,048,560), +# vision, and effort ladder as the standard tier; requested via the `-flex` +# model ID or service_tier="flex" and requires stream=true (non-streaming +# requests fall through to the standard tier). Cost is the flex rate: 0.65x +# of standard pricing (35% off) per the flex-tier guide, applied to the +# standard rates advertised by GET /v1/models ($0.15/$0.5/$0.03, checked +# 2026-09-18). JSON mode is off on this host, unlike the lab default. +# https://portal.neuralwatt.com/docs/guides/flex-tier +# https://portal.neuralwatt.com/docs/api/chat-completions +base_model = "zhipuai/glm-5.3-flash" +name = "GLM-5.3 Flash Flex" +structured_output = false + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.0975 +output = 0.325 +cache_read = 0.0195 + +[limit] +context = 1_048_560 +output = 1_048_560 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/neuralwatt/models/glm-5.3-flash.toml b/providers/neuralwatt/models/glm-5.3-flash.toml new file mode 100644 index 00000000000..8f87fce7fcc --- /dev/null +++ b/providers/neuralwatt/models/glm-5.3-flash.toml @@ -0,0 +1,35 @@ +# Exited preview 2026-09-11. Pricing, vision, and effort ladder from the +# public GET /v1/models metadata (checked 2026-09-18): $0.15/$0.5/$0.03, +# 1,048,560-token context, 20-image cap. Reasoning cannot be disabled +# (reasoning.mandatory = true), so there is no none level and no toggle; +# low, high and max are distinct efforts, with minimal/medium/xhigh accepted +# as aliases onto them. Budget: thinking_token_budget (integer reasoning +# tokens). Neuralwatt serves text+image input only (lab metadata also lists +# video/pdf). JSON mode is off on this host, unlike the lab default. +# https://portal.neuralwatt.com/docs/api/chat-completions +# https://portal.neuralwatt.com/models/glm-5.3-flash +base_model = "zhipuai/glm-5.3-flash" +name = "GLM-5.3 Flash" +structured_output = false + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.03 + +[limit] +context = 1_048_560 +output = 1_048_560 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/neuralwatt/models/glm-5.3-flex.toml b/providers/neuralwatt/models/glm-5.3-flex.toml new file mode 100644 index 00000000000..fa4a8aaef2c --- /dev/null +++ b/providers/neuralwatt/models/glm-5.3-flex.toml @@ -0,0 +1,30 @@ +# Flex-tier variant of glm-5.3: same model, context (1,048,560), and effort +# ladder as the standard tier; requested via the `-flex` model ID or +# service_tier="flex" and requires stream=true (non-streaming requests fall +# through to the standard tier). Cost is the flex rate: 0.65x of standard +# pricing (35% off) per the flex-tier guide, applied to the standard rates +# advertised by GET /v1/models ($1.45/$4.5/$0.145, checked 2026-09-18). +# Budget: thinking_token_budget (integer reasoning tokens) +# https://portal.neuralwatt.com/docs/guides/flex-tier +# https://portal.neuralwatt.com/docs/api/chat-completions +base_model = "zhipuai/glm-5.3" +name = "GLM 5.3 Flex" +structured_output = false + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.9425 +output = 2.925 +cache_read = 0.09425 + +[limit] +context = 1_048_560 +output = 1_048_560 diff --git a/providers/neuralwatt/models/glm-5.3.toml b/providers/neuralwatt/models/glm-5.3.toml new file mode 100644 index 00000000000..5e77d0a249d --- /dev/null +++ b/providers/neuralwatt/models/glm-5.3.toml @@ -0,0 +1,28 @@ +# Exited preview 2026-09-10; the preview-parity list price ($1.45/$4.5/$0.145) +# was confirmed as the launch price per GET /v1/models (checked 2026-09-18). +# Reasoning cannot be disabled (reasoning.mandatory = true), so there is no +# none level and no toggle. The API supports low, high and max as distinct +# efforts; minimal, medium and xhigh are accepted as aliases onto them. +# Budget: thinking_token_budget (integer reasoning tokens) +# https://portal.neuralwatt.com/docs/api/chat-completions +base_model = "zhipuai/glm-5.3" +name = "GLM 5.3" +structured_output = false + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 1.45 +output = 4.5 +cache_read = 0.145 + +[limit] +context = 1_048_560 +output = 1_048_560 diff --git a/providers/neuralwatt/models/kimi-k2.5-fast.toml b/providers/neuralwatt/models/kimi-k2.5-fast.toml deleted file mode 100644 index 75da1e5d69f..00000000000 --- a/providers/neuralwatt/models/kimi-k2.5-fast.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Kimi K2.5 Fast" -description = "Kimi multimodal agent model for visual understanding, coding, and planning" -family = "kimi-k2" -release_date = "2026-01-27" -last_updated = "2026-01-27" -attachment = true -reasoning = false -temperature = true -tool_call = true -open_weights = true - -[cost] -input = 0.52 -output = 2.59 -cache_read = 0.13 - -[limit] -context = 262_128 -output = 262_128 - -[modalities] -input = ["text", "image"] -output = ["text"] \ No newline at end of file diff --git a/providers/neuralwatt/models/kimi-k2.6-fast.toml b/providers/neuralwatt/models/kimi-k2.6-fast.toml deleted file mode 100644 index b5f8319ad65..00000000000 --- a/providers/neuralwatt/models/kimi-k2.6-fast.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Kimi K2.6 Fast" -description = "Kimi multimodal agent model for visual understanding, coding, and planning" -family = "kimi-k2" -release_date = "2026-04-21" -last_updated = "2026-04-21" -attachment = true -reasoning = false -temperature = true -tool_call = true -open_weights = true - -[cost] -input = 0.69 -output = 3.22 -cache_read = 0.1725 - -[limit] -context = 262_128 -output = 262_128 - -[modalities] -input = ["text", "image"] -output = ["text"] \ No newline at end of file diff --git a/providers/neuralwatt/models/kimi-k2.6-flex.toml b/providers/neuralwatt/models/kimi-k2.6-flex.toml deleted file mode 100644 index f0e4c6f8088..00000000000 --- a/providers/neuralwatt/models/kimi-k2.6-flex.toml +++ /dev/null @@ -1,27 +0,0 @@ -name = "Kimi K2.6 Flex" -description = "Kimi multimodal agent model for visual understanding, coding, and planning" -family = "kimi-k2" -release_date = "2026-04-21" -last_updated = "2026-04-21" -attachment = true -reasoning = true -reasoning_options = [{ type = "toggle" }] -temperature = true -tool_call = true -open_weights = true - -[cost] -input = 0.345 -output = 1.61 -cache_read = 0.08625 - -[limit] -context = 262_128 -output = 262_128 - -[modalities] -input = ["text", "image"] -output = ["text"] - -[interleaved] -field = "reasoning_content" diff --git a/providers/neuralwatt/models/kimi-k2.7-code-fast.toml b/providers/neuralwatt/models/kimi-k2.7-code-fast.toml new file mode 100644 index 00000000000..0799b2e3f23 --- /dev/null +++ b/providers/neuralwatt/models/kimi-k2.7-code-fast.toml @@ -0,0 +1,21 @@ +# Budget: thinking_token_budget (integer reasoning tokens) +base_model = "moonshotai/kimi-k2.7-code" +name = "Kimi K2.7 Code Fast" +description = "Kimi K2.7 Code with reasoning capped to a short budget for lower latency; reasoning cannot be disabled on this model" + +interleaved = true + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.95 +output = 4 +cache_read = 0.095 + +[limit] +context = 262_128 +output = 262_128 + +[modalities] +input = ["text", "image"] diff --git a/providers/neuralwatt/models/kimi-k2.7-code-flex.toml b/providers/neuralwatt/models/kimi-k2.7-code-flex.toml index df1d02c4764..6df952380fc 100644 --- a/providers/neuralwatt/models/kimi-k2.7-code-flex.toml +++ b/providers/neuralwatt/models/kimi-k2.7-code-flex.toml @@ -1,12 +1,20 @@ +# Budget: thinking_token_budget (integer reasoning tokens) base_model = "moonshotai/kimi-k2.7-code" name = "Kimi K2.7 Code Flex" -reasoning_options = [] + +interleaved = true + +[[reasoning_options]] +type = "budget_tokens" [cost] -input = 0.475 -output = 2 -cache_read = 0.11875 +input = 0.6175 +output = 2.6 +cache_read = 0.06175 + +[limit] +context = 262_128 +output = 262_128 [modalities] input = ["text", "image"] -output = ["text"] diff --git a/providers/neuralwatt/models/kimi-k2.7-code.toml b/providers/neuralwatt/models/kimi-k2.7-code.toml new file mode 100644 index 00000000000..13152a3a491 --- /dev/null +++ b/providers/neuralwatt/models/kimi-k2.7-code.toml @@ -0,0 +1,19 @@ +# Budget: thinking_token_budget (integer reasoning tokens) +base_model = "moonshotai/kimi-k2.7-code" + +interleaved = true + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.95 +output = 4 +cache_read = 0.095 + +[limit] +context = 262_128 +output = 262_128 + +[modalities] +input = ["text", "image"] diff --git a/providers/neuralwatt/models/kimi-k3-fast.toml b/providers/neuralwatt/models/kimi-k3-fast.toml index 0c1ebe32ec3..68cacc816ff 100644 --- a/providers/neuralwatt/models/kimi-k3-fast.toml +++ b/providers/neuralwatt/models/kimi-k3-fast.toml @@ -4,8 +4,8 @@ description = "Kimi K3 with thinking disabled for low-latency tool calling, visi reasoning = false [cost] -input = 3.0 -output = 15.0 +input = 3 +output = 15 cache_read = 0.3 [limit] @@ -14,4 +14,3 @@ output = 1_048_560 [modalities] input = ["text", "image"] -output = ["text"] diff --git a/providers/neuralwatt/models/kimi-k3-flex.toml b/providers/neuralwatt/models/kimi-k3-flex.toml new file mode 100644 index 00000000000..96234c9c8d1 --- /dev/null +++ b/providers/neuralwatt/models/kimi-k3-flex.toml @@ -0,0 +1,25 @@ +# Budget: thinking_token_budget (integer reasoning tokens) +base_model = "moonshotai/kimi-k3" +name = "Kimi K3 Flex" +description = "Kimi K3 on the flex tier: discounted, best-effort latency, requests may be held under load" + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 1.95 +output = 9.75 +cache_read = 0.195 + +[limit] +context = 1_048_560 +output = 1_048_560 + +[modalities] +input = ["text", "image"] diff --git a/providers/neuralwatt/models/kimi-k3.toml b/providers/neuralwatt/models/kimi-k3.toml index 0f1ef9c488b..06cfeff6fc6 100644 --- a/providers/neuralwatt/models/kimi-k3.toml +++ b/providers/neuralwatt/models/kimi-k3.toml @@ -1,28 +1,19 @@ -# Reasoning controls verified against the Neuralwatt live API on 2026-08-05. -# Toggle: chat_template_kwargs.enable_thinking = true|false — setting false on -# kimi-k3 drops reasoning to zero chars on a proof task (vs ~1,900 at max). -# Effort: reasoning_effort = low|high|max — max produces deep reasoning while -# low/high produce minimal reasoning; matches first-party moonshotai baseline. -# thinking_token_budget is documented but rejected by the current vLLM V2 -# runner ("not yet supported by the V2 model runner"), so it is not declared. -# Sources: -# https://portal.neuralwatt.com/docs/api/chat-completions -# https://platform.kimi.ai/docs/guide/use-reasoning-effort +# Effort: reasoning_effort = none|low|high|max (none disables thinking) +# Budget: thinking_token_budget (integer reasoning tokens) base_model = "moonshotai/kimi-k3" -[[reasoning_options]] -type = "toggle" # API: {"chat_template_kwargs": {"enable_thinking": false}} +interleaved = true [[reasoning_options]] type = "effort" -values = ["low", "high", "max"] +values = ["none", "low", "high", "max"] -[interleaved] -field = "reasoning_content" +[[reasoning_options]] +type = "budget_tokens" [cost] -input = 3.0 -output = 15.0 +input = 3 +output = 15 cache_read = 0.3 [limit] @@ -31,4 +22,3 @@ output = 1_048_560 [modalities] input = ["text", "image"] -output = ["text"] diff --git a/providers/neuralwatt/models/moonshotai/Kimi-K2.5.toml b/providers/neuralwatt/models/moonshotai/Kimi-K2.5.toml deleted file mode 100644 index ca750d34648..00000000000 --- a/providers/neuralwatt/models/moonshotai/Kimi-K2.5.toml +++ /dev/null @@ -1,27 +0,0 @@ -name = "Kimi K2.5" -description = "Kimi multimodal agent model for visual understanding, coding, and planning" -family = "kimi-k2" -release_date = "2026-01-27" -last_updated = "2026-01-27" -attachment = true -reasoning = true -reasoning_options = [{ type = "toggle" }] -temperature = true -tool_call = true -open_weights = true - -[cost] -input = 0.52 -output = 2.59 -cache_read = 0.13 - -[limit] -context = 262_128 -output = 262_128 - -[modalities] -input = ["text", "image"] -output = ["text"] - -[interleaved] -field = "reasoning_content" \ No newline at end of file diff --git a/providers/neuralwatt/models/moonshotai/Kimi-K2.6.toml b/providers/neuralwatt/models/moonshotai/Kimi-K2.6.toml deleted file mode 100644 index 1abe7364f0e..00000000000 --- a/providers/neuralwatt/models/moonshotai/Kimi-K2.6.toml +++ /dev/null @@ -1,27 +0,0 @@ -name = "Kimi K2.6" -description = "Kimi multimodal agent model for visual understanding, coding, and planning" -family = "kimi-k2" -release_date = "2026-04-21" -last_updated = "2026-04-21" -attachment = true -reasoning = true -reasoning_options = [{ type = "toggle" }] -temperature = true -tool_call = true -open_weights = true - -[cost] -input = 0.69 -output = 3.22 -cache_read = 0.1725 - -[limit] -context = 262_128 -output = 262_128 - -[modalities] -input = ["text", "image"] -output = ["text"] - -[interleaved] -field = "reasoning_content" \ No newline at end of file diff --git a/providers/neuralwatt/models/moonshotai/Kimi-K2.7-Code.toml b/providers/neuralwatt/models/moonshotai/Kimi-K2.7-Code.toml deleted file mode 100644 index 021f06e3028..00000000000 --- a/providers/neuralwatt/models/moonshotai/Kimi-K2.7-Code.toml +++ /dev/null @@ -1,11 +0,0 @@ -base_model = "moonshotai/kimi-k2.7-code" -reasoning_options = [] - -[cost] -input = 0.95 -output = 4 -cache_read = 0.2375 - -[modalities] -input = ["text", "image"] -output = ["text"] \ No newline at end of file diff --git a/providers/neuralwatt/models/qwen-3.8-27b-flex.toml b/providers/neuralwatt/models/qwen-3.8-27b-flex.toml new file mode 100644 index 00000000000..7021462ac7f --- /dev/null +++ b/providers/neuralwatt/models/qwen-3.8-27b-flex.toml @@ -0,0 +1,33 @@ +# Flex-tier variant of qwen-3.8-27b: same model, context (262,128), vision, +# and effort ladder as the standard tier; requested via the `-flex` model ID +# or service_tier="flex" and requires stream=true (non-streaming requests +# fall through to the standard tier). Cost is the flex rate: 0.65x of +# standard pricing (35% off) per the flex-tier guide, applied to the standard +# rates advertised by GET /v1/models ($0.45/$3.2/$0.25, checked 2026-09-18). +# Budget: thinking_token_budget (integer reasoning tokens) +# Neuralwatt serves text+image input only (lab metadata also lists video). +# https://portal.neuralwatt.com/docs/guides/flex-tier +# https://portal.neuralwatt.com/docs/api/chat-completions +base_model = "alibaba/qwen3.8-27b" +name = "Qwen3.8 27B Flex" +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "xhigh"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.2925 +output = 2.08 +cache_read = 0.1625 + +[limit] +context = 262_128 +output = 131_072 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/neuralwatt/models/qwen-3.8-27b.toml b/providers/neuralwatt/models/qwen-3.8-27b.toml new file mode 100644 index 00000000000..e2749dc1438 --- /dev/null +++ b/providers/neuralwatt/models/qwen-3.8-27b.toml @@ -0,0 +1,35 @@ +# Left preview and joined the public GET /v1/models catalog; the output cap +# was raised from 65,536 to 131,072 tokens (checked 2026-09-18). +# Effort: reasoning_effort = none|low|medium|xhigh (default xhigh, reasoning +# on by default); aliases max/xhigh/high -> xhigh and minimal -> low, per the +# chat-completions per-model table (docs verified against the live API on +# 2026-08-26). Off is effort=none, so no separate toggle. +# Budget: thinking_token_budget (integer reasoning tokens) is accepted on this +# model. +# Neuralwatt serves text+image input only (lab metadata also lists video). +# Pricing, context, output cap, and effort ladder from the model page and the +# GET /v1/models metadata (checked 2026-09-18): +# https://portal.neuralwatt.com/models/qwen-3.8-27b +# https://portal.neuralwatt.com/docs/api/chat-completions +base_model = "alibaba/qwen3.8-27b" +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "xhigh"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.45 +output = 3.2 +cache_read = 0.25 + +[limit] +context = 262_128 +output = 131_072 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/neuralwatt/models/qwen3.5-397b-fast.toml b/providers/neuralwatt/models/qwen3.5-397b-fast.toml deleted file mode 100644 index 522dca0f9aa..00000000000 --- a/providers/neuralwatt/models/qwen3.5-397b-fast.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Qwen3.5 397B Fast" -description = "Efficient Qwen model for fast chat, extraction, and high-volume workloads" -family = "qwen" -release_date = "2026-02-01" -last_updated = "2026-02-01" -attachment = false -reasoning = false -temperature = true -tool_call = true -open_weights = true - -[cost] -input = 0.69 -output = 4.14 -cache_read = 0.1725 - -[limit] -context = 262_128 -output = 262_128 - -[modalities] -input = ["text"] -output = ["text"] \ No newline at end of file diff --git a/providers/neuralwatt/models/qwen3.6-35b-fast.toml b/providers/neuralwatt/models/qwen3.6-35b-fast.toml index 51e31b5fcf6..46634b0e8e7 100644 --- a/providers/neuralwatt/models/qwen3.6-35b-fast.toml +++ b/providers/neuralwatt/models/qwen3.6-35b-fast.toml @@ -1,18 +1,15 @@ +base_model = "alibaba/qwen3.6-35b-a3b" name = "Qwen3.6 35B Fast" description = "Efficient model for low-latency assistance, extraction, and routine automation" family = "qwen3.6" release_date = "2026-04-01" last_updated = "2026-04-01" -attachment = true reasoning = false -temperature = true -tool_call = true -open_weights = true [cost] input = 0.29 output = 1.15 -cache_read = 0.0725 +cache_read = 0.029 [limit] context = 131_056 @@ -20,4 +17,3 @@ output = 131_056 [modalities] input = ["text", "image"] -output = ["text"] \ No newline at end of file diff --git a/providers/neuralwatt/models/qwen3.6-35b-flex.toml b/providers/neuralwatt/models/qwen3.6-35b-flex.toml new file mode 100644 index 00000000000..3f8bd238eca --- /dev/null +++ b/providers/neuralwatt/models/qwen3.6-35b-flex.toml @@ -0,0 +1,32 @@ +# Flex-tier variant of qwen3.6-35b: same model, context (131,056), vision, +# and effort ladder as the standard tier; requested via the `-flex` model ID +# or service_tier="flex" and requires stream=true (non-streaming requests +# fall through to the standard tier). Cost is the flex rate: 0.65x of +# standard pricing (35% off) per the flex-tier guide, applied to the standard +# rates advertised by GET /v1/models ($0.29/$1.15/$0.029, checked 2026-09-18). +# Budget: thinking_token_budget (integer reasoning tokens) +# https://portal.neuralwatt.com/docs/guides/flex-tier +# https://portal.neuralwatt.com/docs/api/chat-completions +base_model = "alibaba/qwen3.6-35b-a3b" +name = "Qwen3.6 35B Flex" + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.1885 +output = 0.7475 +cache_read = 0.01885 + +[limit] +context = 131_056 +output = 131_056 + +[modalities] +input = ["text", "image"] diff --git a/providers/neuralwatt/models/qwen3.6-35b.toml b/providers/neuralwatt/models/qwen3.6-35b.toml new file mode 100644 index 00000000000..efe4eb1711b --- /dev/null +++ b/providers/neuralwatt/models/qwen3.6-35b.toml @@ -0,0 +1,24 @@ +# Budget: thinking_token_budget (integer reasoning tokens) +base_model = "alibaba/qwen3.6-35b-a3b" +name = "Qwen3.6 35B" + +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.29 +output = 1.15 +cache_read = 0.029 + +[limit] +context = 131_056 +output = 131_056 + +[modalities] +input = ["text", "image"] diff --git a/providers/neuralwatt/provider.toml b/providers/neuralwatt/provider.toml index c7784906cea..aae26883ba3 100644 --- a/providers/neuralwatt/provider.toml +++ b/providers/neuralwatt/provider.toml @@ -7,10 +7,13 @@ npm = "@ai-sdk/openai-compatible" # accepts `reasoning_effort`, with the model-specific normalization documented. # Flex tier uses either a `-flex` model ID or `service_tier = "flex"` and # requires `stream = true`; non-streaming requests fall through to the standard -# tier. The official Energy Methodology docs currently state a 0.5 flex pricing -# multiplier. +# tier. The flex-tier guide states a 0.65 pricing multiplier (35% off), applied +# to token billing and energy billing alike (accessed 2026-08-27). +# The reasoning trace comes back on a `reasoning` field, streaming and +# non-streaming alike, never `reasoning_content`/`reasoning_details`, so +# `interleaved` is the bare boolean rather than a field name. # https://portal.neuralwatt.com/docs/api/chat-completions (accessed 2026-06-25) -# https://portal.neuralwatt.com/docs/guides/flex-tier +# https://portal.neuralwatt.com/docs/guides/flex-tier (accessed 2026-08-27) # https://portal.neuralwatt.com/docs/energy-methodology (accessed 2026-06-28) api = "https://api.neuralwatt.com/v1" doc = "https://portal.neuralwatt.com/docs" diff --git a/providers/novita-ai/models/zai-org/glm-4.7-flash.toml b/providers/novita-ai/models/zai-org/glm-4.7-flash.toml index b5e02bf1ccb..c0079c3decf 100644 --- a/providers/novita-ai/models/zai-org/glm-4.7-flash.toml +++ b/providers/novita-ai/models/zai-org/glm-4.7-flash.toml @@ -1,6 +1,6 @@ name = "GLM-4.7-Flash" description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -family = "glm" +family = "glm-flash" release_date = "2026-01-19" last_updated = "2026-01-19" attachment = false diff --git a/providers/nvidia/models/deepseek-ai/deepseek-v4-pro-0813.toml b/providers/nvidia/models/deepseek-ai/deepseek-v4-pro-0813.toml new file mode 100644 index 00000000000..c9b6566a09d --- /dev/null +++ b/providers/nvidia/models/deepseek-ai/deepseek-v4-pro-0813.toml @@ -0,0 +1,17 @@ +# NIM Chat schema: `reasoning_effort = none|high|max`; `none` disables thinking. +# https://build.nvidia.com/deepseek-ai/deepseek-v4-pro-0813 +# +# Pricing: hosted on NVIDIA's API trial tier and currently free — no separate +# list rate is published for this ID. Source: this model's catalog card, +# https://build.nvidia.com/deepseek-ai/deepseek-v4-pro-0813 (governed by the +# NVIDIA API Trial Terms of Service). +base_model = "deepseek/deepseek-v4-pro-0813" + +reasoning_options = [{ type = "effort", values = ["none", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.0 +output = 0.0 diff --git a/providers/nvidia/models/z-ai/glm-5.3-flash.toml b/providers/nvidia/models/z-ai/glm-5.3-flash.toml new file mode 100644 index 00000000000..4e846d402ad --- /dev/null +++ b/providers/nvidia/models/z-ai/glm-5.3-flash.toml @@ -0,0 +1,14 @@ +# Hosted NIM: model listed at GET https://integrate.api.nvidia.com/v1/models +# (verified 2026-09-12). Thinking is always enabled; reasoning budget controlled +# with top-level `reasoning_effort`: low|high|max, default max. +# https://docs.nvidia.com/nim/vision-language-models/latest/get-started/advanced/get-started-glm-5-3-flash.html +base_model = "zhipuai/glm-5.3-flash" + +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.0 +output = 0.0 diff --git a/providers/nvidia/models/z-ai/glm-5.3.toml b/providers/nvidia/models/z-ai/glm-5.3.toml new file mode 100644 index 00000000000..7ac15f9946c --- /dev/null +++ b/providers/nvidia/models/z-ai/glm-5.3.toml @@ -0,0 +1,14 @@ +# Hosted NIM: model listed at GET https://integrate.api.nvidia.com/v1/models +# (verified 2026-09-16). Thinking is always enabled; reasoning budget controlled +# with top-level `reasoning_effort`: low|high|max, default max. +# https://docs.nvidia.com/nim/large-language-models/2.0.11/get-started/advanced/get-started-glm-5.3.html +base_model = "zhipuai/glm-5.3" + +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.0 +output = 0.0 \ No newline at end of file diff --git a/providers/oci/logo.svg b/providers/oci/logo.svg new file mode 100644 index 00000000000..a46ebf3f9ec --- /dev/null +++ b/providers/oci/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/providers/oci/models/meta.llama-3.3-70b-instruct.toml b/providers/oci/models/meta.llama-3.3-70b-instruct.toml new file mode 100644 index 00000000000..fabd7912f72 --- /dev/null +++ b/providers/oci/models/meta.llama-3.3-70b-instruct.toml @@ -0,0 +1,15 @@ +# OCI list price, pay as you go, USD (public price list, part B108080, accessed 2026-09-14): +# $0.0018 per 10,000 transactions, where one transaction is one character of input or +# output. OCI's model pages estimate four characters per token, so the per-token price used +# here is $0.0018 / 10,000 * 4 * 1,000,000 = $0.72 per 1M input and output tokens. +# Limits from https://docs.oracle.com/en-us/iaas/Content/generative-ai/meta-llama-3-3-70b.htm +# The endpoint returns tool-call arguments as JSON strings and requires the first message +# of a tool-calling request to be a user message. +base_model = "meta/llama-3.3-70b-instruct" +# opencode sends its system prompt first with tools; OCI rejects that for Llama models +# (400 "Tool calling for this Llama model requires the first message to be a user message"). +tool_call = false + +[cost] +input = 0.72 +output = 0.72 diff --git a/providers/oci/models/meta.llama-4-maverick-17b-128e-instruct-fp8.toml b/providers/oci/models/meta.llama-4-maverick-17b-128e-instruct-fp8.toml new file mode 100644 index 00000000000..5b2d087b79c --- /dev/null +++ b/providers/oci/models/meta.llama-4-maverick-17b-128e-instruct-fp8.toml @@ -0,0 +1,18 @@ +# OCI list price, pay as you go, USD (public price list, part B111036, accessed 2026-09-14): +# $0.0018 per 10,000 transactions, where one transaction is one character of input or +# output. OCI's model pages estimate four characters per token, so the per-token price used +# here is $0.0018 / 10,000 * 4 * 1,000,000 = $0.72 per 1M input and output tokens. +# Limits from https://docs.oracle.com/en-us/iaas/Content/generative-ai/meta-llama-4-maverick.htm +# The endpoint returns tool-call arguments as JSON strings and requires the first message +# of a tool-calling request to be a user message. +base_model = "meta/llama-4-maverick-17b-instruct" +# opencode sends its system prompt first with tools; OCI rejects that for Llama models +# (400 "Tool calling for this Llama model requires the first message to be a user message"). +tool_call = false + +[cost] +input = 0.72 +output = 0.72 + +[limit] +context = 512_000 diff --git a/providers/oci/models/meta.llama-4-scout-17b-16e-instruct.toml b/providers/oci/models/meta.llama-4-scout-17b-16e-instruct.toml new file mode 100644 index 00000000000..a6e246a918f --- /dev/null +++ b/providers/oci/models/meta.llama-4-scout-17b-16e-instruct.toml @@ -0,0 +1,18 @@ +# OCI list price, pay as you go, USD (public price list, part B111035, accessed 2026-09-14): +# $0.0018 per 10,000 transactions, where one transaction is one character of input or +# output. OCI's model pages estimate four characters per token, so the per-token price used +# here is $0.0018 / 10,000 * 4 * 1,000,000 = $0.72 per 1M input and output tokens. +# Limits from https://docs.oracle.com/en-us/iaas/Content/generative-ai/meta-llama-4-scout.htm +# The endpoint returns tool-call arguments as JSON strings and requires the first message +# of a tool-calling request to be a user message. +base_model = "meta/llama-4-scout-17b-instruct" +# opencode sends its system prompt first with tools; OCI rejects that for Llama models +# (400 "Tool calling for this Llama model requires the first message to be a user message"). +tool_call = false + +[cost] +input = 0.72 +output = 0.72 + +[limit] +context = 192_000 diff --git a/providers/oci/models/openai.gpt-oss-120b.toml b/providers/oci/models/openai.gpt-oss-120b.toml new file mode 100644 index 00000000000..9822596fbb4 --- /dev/null +++ b/providers/oci/models/openai.gpt-oss-120b.toml @@ -0,0 +1,20 @@ +# OCI list price, pay as you go, USD per 1M tokens (public price list, parts B112004/B112005, +# accessed 2026-09-14). Context and output limits from +# https://docs.oracle.com/en-us/iaas/Content/generative-ai/openai-gpt-oss-120b.htm: 128,000 tokens +# prompt + response; Oracle documents a 16,000-token response cap in its playground and no +# larger API cap, so 16,384 is used here. +# Effort: reasoning_effort = low|medium|high (accepted on this endpoint, 2026-09-14). +# Reasoning is streamed in `reasoning_content` deltas. +base_model = "openai/gpt-oss-120b" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.15 +output = 0.60 + +[limit] +context = 128_000 +output = 16_384 diff --git a/providers/oci/models/openai.gpt-oss-20b.toml b/providers/oci/models/openai.gpt-oss-20b.toml new file mode 100644 index 00000000000..8d742f9081d --- /dev/null +++ b/providers/oci/models/openai.gpt-oss-20b.toml @@ -0,0 +1,20 @@ +# OCI list price, pay as you go, USD per 1M tokens (public price list, parts B112006/B112007, +# accessed 2026-09-14). Context and output limits from +# https://docs.oracle.com/en-us/iaas/Content/generative-ai/openai-gpt-oss-20b.htm: 128,000 tokens +# prompt + response; Oracle documents a 16,000-token response cap in its playground and no +# larger API cap, so 16,384 is used here. +# Effort: reasoning_effort = low|medium|high (accepted on this endpoint, 2026-09-14). +# Reasoning is streamed in `reasoning_content` deltas. +base_model = "openai/gpt-oss-20b" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.07 +output = 0.30 + +[limit] +context = 128_000 +output = 16_384 diff --git a/providers/oci/models/xai.grok-4.20-non-reasoning.toml b/providers/oci/models/xai.grok-4.20-non-reasoning.toml new file mode 100644 index 00000000000..8baf2ac03bc --- /dev/null +++ b/providers/oci/models/xai.grok-4.20-non-reasoning.toml @@ -0,0 +1,21 @@ +# OCI list price, pay as you go, USD per 1M tokens (public price list "Grok 4.2" parts +# B111910/B111911/B112076-B112079, accessed 2026-09-14); the higher band applies above 200K +# prompt tokens. Model is hosted by xAI and called through OCI. Limits from +# https://docs.oracle.com/en-us/iaas/Content/generative-ai/xai-grok-4-20.htm (1M context). +# Only text and base64 images were verified through this endpoint; PDF input is not declared. +base_model = "xai/grok-4.20-0309-non-reasoning" + +[cost] +input = 1.25 +output = 2.50 +cache_read = 0.20 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 2.50 +output = 5.00 +cache_read = 0.40 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/oci/models/xai.grok-4.20-reasoning.toml b/providers/oci/models/xai.grok-4.20-reasoning.toml new file mode 100644 index 00000000000..72c4992fb8f --- /dev/null +++ b/providers/oci/models/xai.grok-4.20-reasoning.toml @@ -0,0 +1,23 @@ +# OCI list price, pay as you go, USD per 1M tokens (public price list "Grok 4.2" parts +# B111910/B111911/B112076-B112079, accessed 2026-09-14); the higher band applies above 200K +# prompt tokens. Model is hosted by xAI and called through OCI. Limits from +# https://docs.oracle.com/en-us/iaas/Content/generative-ai/xai-grok-4-20.htm (1M context). +# reasoning_effort is rejected with 400 by this endpoint for the reasoning variant: no caller control. +# Only text and base64 images were verified through this endpoint; PDF input is not declared. +base_model = "xai/grok-4.20-0309-reasoning" +reasoning_options = [] + +[cost] +input = 1.25 +output = 2.50 +cache_read = 0.20 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 2.50 +output = 5.00 +cache_read = 0.40 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/oci/models/xai.grok-4.3.toml b/providers/oci/models/xai.grok-4.3.toml new file mode 100644 index 00000000000..9bb0c653565 --- /dev/null +++ b/providers/oci/models/xai.grok-4.3.toml @@ -0,0 +1,23 @@ +# OCI list price, pay as you go, USD per 1M tokens (public price list, parts B112080-B112085, +# accessed 2026-09-14); the higher band applies above 200K prompt tokens. Model is hosted by +# xAI and called through OCI (see the OCI model page). Limits from +# https://docs.oracle.com/en-us/iaas/Content/generative-ai/xai-grok-4-3.htm (1M context). +# Effort: reasoning_effort mirrors xAI's controls for this model. +# Only text and base64 images were verified through this endpoint; PDF input is not declared. +base_model = "xai/grok-4.3" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] + +[cost] +input = 1.25 +output = 2.50 +cache_read = 0.20 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 2.50 +output = 5.00 +cache_read = 0.40 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/oci/models/xai.grok-4.6.toml b/providers/oci/models/xai.grok-4.6.toml new file mode 100644 index 00000000000..0821f873c24 --- /dev/null +++ b/providers/oci/models/xai.grok-4.6.toml @@ -0,0 +1,19 @@ +# OCI list price, pay as you go, USD per 1M tokens (public price list parts B112086/B112087/ +# B112589-B112592, accessed 2026-09-14); the higher band applies above 200K prompt tokens. +# OCI also sells a priority tier at twice these prices (service_tier), not modelled here. +# Model is hosted by xAI and called through OCI. Limits from +# https://docs.oracle.com/en-us/iaas/Content/generative-ai/xai-grok-4-6.htm (500K context). +# Effort: reasoning_effort mirrors xAI's controls for this model. +base_model = "xai/grok-4.6" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh"] }] + +[cost] +input = 2.00 +output = 6.00 +cache_read = 0.50 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 4.00 +output = 12.00 +cache_read = 1.00 diff --git a/providers/oci/provider.toml b/providers/oci/provider.toml new file mode 100644 index 00000000000..e623d53d68d --- /dev/null +++ b/providers/oci/provider.toml @@ -0,0 +1,22 @@ +# OCI Generative AI, OpenAI-compatible endpoint (accessed 2026-09-14): +# POST https://inference.generativeai..oci.oraclecloud.com/openai/v1/chat/completions +# Auth: an OCI Generative AI API key sent as `Authorization: Bearer ` (create one with +# `oci generative-ai api-key create`; keys are regional and compartment-scoped, no other +# header is needed). The default URL below targets us-chicago-1; for the other supported +# regions (us-ashburn-1, us-phoenix-1, eu-frankfurt-1, ap-hyderabad-1, ap-osaka-1) set the +# provider baseURL option in the consuming tool. +# Reasoning: reasoning_effort = low|medium|high on gpt-oss and Grok 4.3/4.6; the Grok 4.20 +# reasoning variants reject reasoning_effort (400). gpt-oss streams reasoning as +# `reasoning_content` deltas. Streaming clients must accept gzip (the endpoint negotiates +# zstd and compresses each streamed chunk as a separate frame). +# Models below are the ones Oracle lists for API-key access to this endpoint (Meta Llama, +# xAI Grok, OpenAI gpt-oss); Cohere models are served by the native OCI API only. +# Sources: +# https://docs.oracle.com/en-us/iaas/Content/generative-ai/openai-compatible-api.htm +# https://docs.oracle.com/en-us/iaas/Content/generative-ai/api-keys.htm +# https://docs.oracle.com/en-us/iaas/Content/generative-ai/pretrained-models.htm +name = "OCI Generative AI" +env = ["OCI_GENAI_API_KEY"] +npm = "@ai-sdk/openai-compatible" +api = "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/openai/v1" +doc = "https://docs.oracle.com/en-us/iaas/Content/generative-ai/pretrained-models.htm" diff --git a/providers/ofox/models/anthropic/claude-fable-5.1.toml b/providers/ofox/models/anthropic/claude-fable-5.1.toml new file mode 100644 index 00000000000..1471ba3d420 --- /dev/null +++ b/providers/ofox/models/anthropic/claude-fable-5.1.toml @@ -0,0 +1,17 @@ +# Sources: +# - https://ofox.ai/models/anthropic/claude-fable-5.1 (pricing, context, capabilities; accessed 2026-09-03) +# - https://api.ofox.ai/v2/models/catalog (remote id anthropic/claude-fable-5.1) +# - Lab: models/anthropic/claude-fable-5-1.toml; first-party effort: providers/anthropic/models/claude-fable-5-1.toml +# Effort: Anthropic adaptive thinking effort on Ofox Anthropic protocol (same surface as other ofox anthropic/* entries) +base_model = "anthropic/claude-fable-5-1" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 + +[provider] +npm = "@ai-sdk/anthropic" +api = "https://api.ofox.ai/anthropic/v1" diff --git a/providers/ofox/models/anthropic/claude-opus-5.5.toml b/providers/ofox/models/anthropic/claude-opus-5.5.toml new file mode 100644 index 00000000000..23287398bb0 --- /dev/null +++ b/providers/ofox/models/anthropic/claude-opus-5.5.toml @@ -0,0 +1,16 @@ +# Sources: +# https://ofox.ai/models/anthropic/claude-opus-5.5 +# https://platform.claude.com/docs/en/models/opus-5-5/overview +# https://www.anthropic.com/claude-opus-5-5 +base_model = "anthropic/claude-opus-5-5" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 4 +output = 20 +cache_read = 0.2 +cache_write = 5 + +[provider] +npm = "@ai-sdk/anthropic" +api = "https://api.ofox.ai/anthropic/v1" diff --git a/providers/ofox/models/bailian/qwen3.8-flash.toml b/providers/ofox/models/bailian/qwen3.8-flash.toml new file mode 100644 index 00000000000..f8768c1fb51 --- /dev/null +++ b/providers/ofox/models/bailian/qwen3.8-flash.toml @@ -0,0 +1,14 @@ +# Sources (accessed 2026-08-27): +# https://ofox.ai/en/models/bailian/qwen3.8-flash (pricing, context 1M/131K, capabilities) +# https://www.qwencloud.com/models/qwen3.8-flash (lab pricing/limits; enable_thinking example) +# https://docs.qwencloud.com/developer-guides/text-generation/thinking +# Toggle: enable_thinking true|false (Bailian/DashScope chat path via Ofox; same surface as ofox bailian/qwen3.5-flash, qwen3.6-flash) +# Budget: thinking_budget +base_model = "alibaba/qwen3.8-flash" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 0.15 +output = 0.47 +cache_read = 0.016 +cache_write = 0.2 diff --git a/providers/ofox/models/bailian/qwen3.8-max-0902.toml b/providers/ofox/models/bailian/qwen3.8-max-0902.toml new file mode 100644 index 00000000000..bcf8deebcd4 --- /dev/null +++ b/providers/ofox/models/bailian/qwen3.8-max-0902.toml @@ -0,0 +1,20 @@ +# Sources (accessed 2026-09-03): +# https://ofox.ai/models/bailian/qwen3.8-max-0902 +# https://www.qwencloud.com/models/qwen3.8-max-0902 +# https://www.alibabacloud.com/help/en/model-studio/qwen3-8-max +# https://docs.qwencloud.com/developer-guides/text-generation/thinking +# Toggle: enable_thinking true|false (hybrid; same Bailian/DashScope surface as ofox bailian/qwen3.8-max) +# Effort: reasoning_effort = low|medium|xhigh (default xhigh); high accepted as alias → xhigh +# Budget: thinking_budget (0..262144) cannot be combined with reasoning_effort +base_model = "alibaba/qwen3.8-max-0902" +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["low", "medium", "xhigh"] }, + { type = "budget_tokens", min = 0, max = 262_144 }, +] + +[cost] +input = 2.00 +output = 6.00 +cache_read = 0.25 +cache_write = 2.5 diff --git a/providers/ofox/models/deepseek/deepseek-v4-flash-0423.toml b/providers/ofox/models/deepseek/deepseek-v4-flash-0423.toml new file mode 100644 index 00000000000..0b858dede74 --- /dev/null +++ b/providers/ofox/models/deepseek/deepseek-v4-flash-0423.toml @@ -0,0 +1,18 @@ +# Sources (accessed 2026-09-11): +# https://ofox.ai/models/deepseek/deepseek-v4-flash-0423 +# https://api.ofox.ai/v1/models/deepseek/deepseek-v4-flash-0423 +# Toggle: thinking.type = enabled|disabled +# Effort: reasoning_effort = low|high|max +base_model = "deepseek/deepseek-v4-flash-0423" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.19 +output = 0.51 +cache_read = 0.028 diff --git a/providers/ofox/models/deepseek/deepseek-v4-flash-0731.toml b/providers/ofox/models/deepseek/deepseek-v4-flash-0731.toml index 846d1a51acf..9bbcfa17ecf 100644 --- a/providers/ofox/models/deepseek/deepseek-v4-flash-0731.toml +++ b/providers/ofox/models/deepseek/deepseek-v4-flash-0731.toml @@ -12,6 +12,6 @@ type = "effort" values = ["low", "high", "max"] [cost] -input = 0.44 -output = 1.32 -cache_read = 0.014 +input = 0.308 +output = 0.924 +cache_read = 0.0098 diff --git a/providers/ofox/models/deepseek/deepseek-v4-pro-0423.toml b/providers/ofox/models/deepseek/deepseek-v4-pro-0423.toml index 737b6fefef8..2480d6388a1 100644 --- a/providers/ofox/models/deepseek/deepseek-v4-pro-0423.toml +++ b/providers/ofox/models/deepseek/deepseek-v4-pro-0423.toml @@ -14,4 +14,4 @@ values = ["high", "max"] [cost] input = 1.32 output = 3.96 -cache_read = 0.044 +cache_read = 0.15 diff --git a/providers/ofox/models/deepseek/deepseek-v4-pro-0813.toml b/providers/ofox/models/deepseek/deepseek-v4-pro-0813.toml index 28bd1ad9388..be532dcc24e 100644 --- a/providers/ofox/models/deepseek/deepseek-v4-pro-0813.toml +++ b/providers/ofox/models/deepseek/deepseek-v4-pro-0813.toml @@ -12,6 +12,6 @@ type = "effort" values = ["high", "max"] [cost] -input = 1.32 -output = 3.96 -cache_read = 0.044 +input = 0.924 +output = 2.772 +cache_read = 0.0308 diff --git a/providers/ofox/models/deepseek/deepseek-v4.1-flash.toml b/providers/ofox/models/deepseek/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..ab0f22f5c0c --- /dev/null +++ b/providers/ofox/models/deepseek/deepseek-v4.1-flash.toml @@ -0,0 +1,18 @@ +# https://ofox.ai/models/deepseek/deepseek-v4.1-flash +# https://api-docs.deepseek.com/quick_start/pricing/ +# https://api-docs.deepseek.com/guides/thinking_mode/ +# Toggle: thinking.type = enabled|disabled +# Effort: reasoning_effort = low|high|max (Flash; lab maps xhigh→high) +base_model = "deepseek/deepseek-v4.1-flash" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.21 +output = 0.84 +cache_read = 0.0042 diff --git a/providers/ofox/models/google/gemini-2.5-flash-lite.toml b/providers/ofox/models/google/gemini-2.5-flash-lite.toml index 67b87706a7c..ae565244def 100644 --- a/providers/ofox/models/google/gemini-2.5-flash-lite.toml +++ b/providers/ofox/models/google/gemini-2.5-flash-lite.toml @@ -3,14 +3,18 @@ # 0 disables; enabled manual budgets 512..24576 # https://ai.google.dev/gemini-api/docs/thinking base_model = "google/gemini-2.5-flash-lite" -reasoning_options = [ - { type = "toggle" }, - { type = "budget_tokens", min = 512, max = 24_576 }, -] + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "budget_tokens" +min = 512 +max = 24_576 [cost] input = 0.1 output = 0.4 -cache_read = 0.025 +cache_read = 0.01 cache_write = 1 input_audio = 0.3 diff --git a/providers/ofox/models/google/gemini-3.8-flash.toml b/providers/ofox/models/google/gemini-3.8-flash.toml new file mode 100644 index 00000000000..62f8fcecf5b --- /dev/null +++ b/providers/ofox/models/google/gemini-3.8-flash.toml @@ -0,0 +1,26 @@ +# Sources (accessed 2026-09-11): +# https://ofox.ai/models/google/gemini-3.8-flash +# https://api.ofox.ai/v1/models/google/gemini-3.8-flash +# https://ai.google.dev/gemini-api/docs/models/gemini-3.8-flash +base_model = "google/gemini-3.8-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.75 +output = 3.75 +cache_read = 0.075 +cache_write = 0.0415 +input_audio = 0.75 + +[limit] +context = 1_000_000 + +[modalities] +input = ["text", "image", "audio", "pdf"] + +[provider] +npm = "@ai-sdk/google" +api = "https://api.ofox.ai/gemini/v1beta" diff --git a/providers/ofox/models/openai/gpt-4.1-mini.toml b/providers/ofox/models/openai/gpt-4.1-mini.toml index fed0af7b191..7db37cb4a30 100644 --- a/providers/ofox/models/openai/gpt-4.1-mini.toml +++ b/providers/ofox/models/openai/gpt-4.1-mini.toml @@ -3,9 +3,9 @@ base_model = "openai/gpt-4.1-mini" [cost] -input = 0.4 -output = 1.6 -cache_read = 0.1 +input = 0.32 +output = 1.28 +cache_read = 0.08 [provider] npm = "@ai-sdk/openai" diff --git a/providers/ofox/models/openai/gpt-4.1.toml b/providers/ofox/models/openai/gpt-4.1.toml index 89ea7a1baef..873c885bb86 100644 --- a/providers/ofox/models/openai/gpt-4.1.toml +++ b/providers/ofox/models/openai/gpt-4.1.toml @@ -4,9 +4,9 @@ base_model = "openai/gpt-4.1" [cost] -input = 2 -output = 8 -cache_read = 0.5 +input = 1.6 +output = 6.4 +cache_read = 0.4 [provider] npm = "@ai-sdk/openai" diff --git a/providers/ofox/models/openai/gpt-4o-mini.toml b/providers/ofox/models/openai/gpt-4o-mini.toml index 1a04244651f..5c2ab7b62d3 100644 --- a/providers/ofox/models/openai/gpt-4o-mini.toml +++ b/providers/ofox/models/openai/gpt-4o-mini.toml @@ -4,9 +4,9 @@ base_model = "openai/gpt-4o-mini" [cost] -input = 0.15 -output = 0.6 -cache_read = 0.075 +input = 0.12 +output = 0.48 +cache_read = 0.06 [provider] npm = "@ai-sdk/openai" diff --git a/providers/ofox/models/openai/gpt-4o.toml b/providers/ofox/models/openai/gpt-4o.toml index 5375b57603f..abe97a2e139 100644 --- a/providers/ofox/models/openai/gpt-4o.toml +++ b/providers/ofox/models/openai/gpt-4o.toml @@ -3,9 +3,9 @@ base_model = "openai/gpt-4o" [cost] -input = 2.5 -output = 10 -cache_read = 1.25 +input = 2 +output = 8 +cache_read = 1 [provider] npm = "@ai-sdk/openai" diff --git a/providers/ofox/models/openai/gpt-5-mini.toml b/providers/ofox/models/openai/gpt-5-mini.toml index c69ea0d1474..1a91f1921b9 100644 --- a/providers/ofox/models/openai/gpt-5-mini.toml +++ b/providers/ofox/models/openai/gpt-5-mini.toml @@ -6,12 +6,15 @@ # - peers: providers/openai/models/gpt-5-mini.toml, providers/ofox/models/openai/gpt-5.5.toml base_model = "openai/gpt-5-mini" base_model_omit = ["limit.input"] -reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }] + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high"] [cost] -input = 0.25 -output = 2 -cache_read = 0.03 +input = 0.2 +output = 1.6 +cache_read = 0.024 [limit] context = 256_000 diff --git a/providers/ofox/models/openai/gpt-5-nano.toml b/providers/ofox/models/openai/gpt-5-nano.toml index 4db26dd6594..144156961a1 100644 --- a/providers/ofox/models/openai/gpt-5-nano.toml +++ b/providers/ofox/models/openai/gpt-5-nano.toml @@ -4,9 +4,9 @@ base_model = "openai/gpt-5-nano" reasoning = false [cost] -input = 0.05 -output = 0.4 -cache_read = 0.01 +input = 0.04 +output = 0.32 +cache_read = 0.008 [provider] npm = "@ai-sdk/openai" diff --git a/providers/ofox/models/openai/gpt-5.1-codex-max.toml b/providers/ofox/models/openai/gpt-5.1-codex-max.toml index 91408197ffe..7d613b82a99 100644 --- a/providers/ofox/models/openai/gpt-5.1-codex-max.toml +++ b/providers/ofox/models/openai/gpt-5.1-codex-max.toml @@ -5,12 +5,15 @@ # Effort: reasoning_effort = low|medium|high|xhigh (OpenAI Codex Max / established relay peers) base_model = "openai/gpt-5.1-codex-max" base_model_omit = ["limit.input"] -reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh"] }] + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh"] [cost] -input = 1.25 -output = 10 -cache_read = 0.13 +input = 1 +output = 8 +cache_read = 0.104 [limit] context = 256_000 diff --git a/providers/ofox/models/openai/gpt-5.1-codex-mini.toml b/providers/ofox/models/openai/gpt-5.1-codex-mini.toml index 7fbf643e70a..8753622a4f9 100644 --- a/providers/ofox/models/openai/gpt-5.1-codex-mini.toml +++ b/providers/ofox/models/openai/gpt-5.1-codex-mini.toml @@ -5,12 +5,15 @@ # https://learn.microsoft.com/en-us/azure/foundry/openai/how-to/reasoning base_model = "openai/gpt-5.1-codex-mini" base_model_omit = ["limit.input"] -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] [cost] -input = 0.25 -output = 2 -cache_read = 0.03 +input = 0.2 +output = 1.6 +cache_read = 0.024 [limit] context = 256_000 diff --git a/providers/ofox/models/openai/gpt-5.1.toml b/providers/ofox/models/openai/gpt-5.1.toml index f8cf72b22eb..9dd3ad82c15 100644 --- a/providers/ofox/models/openai/gpt-5.1.toml +++ b/providers/ofox/models/openai/gpt-5.1.toml @@ -1,11 +1,14 @@ # https://ofox.ai/models/openai/gpt-5.1 — input $1.25/M, output $10/M, cache_read $0.13/M base_model = "openai/gpt-5.1" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] [cost] -input = 1.25 -output = 10 -cache_read = 0.13 +input = 1 +output = 8 +cache_read = 0.104 [provider] npm = "@ai-sdk/openai" diff --git a/providers/ofox/models/openai/gpt-5.2-codex.toml b/providers/ofox/models/openai/gpt-5.2-codex.toml index 456524152de..770e2369a97 100644 --- a/providers/ofox/models/openai/gpt-5.2-codex.toml +++ b/providers/ofox/models/openai/gpt-5.2-codex.toml @@ -3,12 +3,15 @@ # - https://api.ofox.ai/v1/models/openai/gpt-5.2-codex (prompt/completion/cache_read per-token) # - https://developers.openai.com/api/docs/models/gpt-5.2-codex (effort: low|medium|high|xhigh) base_model = "openai/gpt-5.2-codex" -reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh"] }] + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh"] [cost] -input = 1.75 -output = 14 -cache_read = 0.18 +input = 1.4 +output = 11.2 +cache_read = 0.144 [provider] npm = "@ai-sdk/openai" diff --git a/providers/ofox/models/openai/gpt-5.2.toml b/providers/ofox/models/openai/gpt-5.2.toml index 9c764368464..6ab0d2b9bdc 100644 --- a/providers/ofox/models/openai/gpt-5.2.toml +++ b/providers/ofox/models/openai/gpt-5.2.toml @@ -3,12 +3,15 @@ # https://api.ofox.ai/v2/models/catalog (remote model id openai/gpt-5.2) # Reasoning: OpenAI first-party gpt-5.2 + ofox openai/gpt-5.5 peer base_model = "openai/gpt-5.2" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh"] [cost] -input = 1.75 -output = 14 -cache_read = 0.18 +input = 1.4 +output = 11.2 +cache_read = 0.144 [provider] npm = "@ai-sdk/openai" diff --git a/providers/ofox/models/openai/gpt-5.3-codex.toml b/providers/ofox/models/openai/gpt-5.3-codex.toml index 192d650e1df..f331b887502 100644 --- a/providers/ofox/models/openai/gpt-5.3-codex.toml +++ b/providers/ofox/models/openai/gpt-5.3-codex.toml @@ -1,11 +1,14 @@ # Source: https://api.ofox.ai/v2/models/catalog?include=provider_price&limit=500 base_model = "openai/gpt-5.3-codex" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh"] [cost] -input = 1.75 -output = 14 -cache_read = 0.18 +input = 1.4 +output = 11.2 +cache_read = 0.144 [provider] npm = "@ai-sdk/openai" diff --git a/providers/ofox/models/openai/gpt-5.4-mini.toml b/providers/ofox/models/openai/gpt-5.4-mini.toml index 1f3a57db295..b3ab0f891fd 100644 --- a/providers/ofox/models/openai/gpt-5.4-mini.toml +++ b/providers/ofox/models/openai/gpt-5.4-mini.toml @@ -3,12 +3,15 @@ # https://ofox.ai/en/models # https://ofox.ai/docs (example model id openai/gpt-5.4-mini) base_model = "openai/gpt-5.4-mini" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh"] [cost] -input = 0.75 -output = 4.5 -cache_read = 0.075 +input = 0.6 +output = 3.6 +cache_read = 0.06 [provider] npm = "@ai-sdk/openai" diff --git a/providers/ofox/models/openai/gpt-5.4-nano.toml b/providers/ofox/models/openai/gpt-5.4-nano.toml index 734225204ad..4dc4fd65cdf 100644 --- a/providers/ofox/models/openai/gpt-5.4-nano.toml +++ b/providers/ofox/models/openai/gpt-5.4-nano.toml @@ -2,12 +2,15 @@ # https://ofox.ai/en/models/openai/gpt-5.4-nano (Ofox list price: $0.20/$1.25, cache_read $0.02) # https://developers.openai.com/api/docs/models/gpt-5.4-nano (lab pricing + reasoning effort) base_model = "openai/gpt-5.4-nano" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh"] [cost] -input = 0.2 -output = 1.25 -cache_read = 0.02 +input = 0.16 +output = 1 +cache_read = 0.016 [provider] npm = "@ai-sdk/openai" diff --git a/providers/ofox/models/openai/gpt-5.4-pro.toml b/providers/ofox/models/openai/gpt-5.4-pro.toml index c0214b5c75c..a08a8a55eba 100644 --- a/providers/ofox/models/openai/gpt-5.4-pro.toml +++ b/providers/ofox/models/openai/gpt-5.4-pro.toml @@ -1,11 +1,14 @@ # Ofox bills a flat 30/180 across the full advertised context window; the Ofox # catalog publishes no >=272k context tier, so no [[cost.tiers]] applies here. base_model = "openai/gpt-5.4-pro" -reasoning_options = [{ type = "effort", values = ["medium", "high", "xhigh"] }] + +[[reasoning_options]] +type = "effort" +values = ["medium", "high", "xhigh"] [cost] -input = 30 -output = 180 +input = 24 +output = 144 [provider] npm = "@ai-sdk/openai" diff --git a/providers/ofox/models/openai/gpt-5.4.toml b/providers/ofox/models/openai/gpt-5.4.toml index b2dcf2dc973..c48c7a8ab3f 100644 --- a/providers/ofox/models/openai/gpt-5.4.toml +++ b/providers/ofox/models/openai/gpt-5.4.toml @@ -1,11 +1,14 @@ # Source: https://api.ofox.ai/v2/models/catalog?include=provider_price&limit=500 base_model = "openai/gpt-5.4" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh"] [cost] -input = 2.5 -output = 15 -cache_read = 0.25 +input = 2 +output = 12 +cache_read = 0.2 [provider] npm = "@ai-sdk/openai" diff --git a/providers/ofox/models/openai/gpt-5.5.toml b/providers/ofox/models/openai/gpt-5.5.toml index 679d0e58dc4..3635ad8bdd9 100644 --- a/providers/ofox/models/openai/gpt-5.5.toml +++ b/providers/ofox/models/openai/gpt-5.5.toml @@ -1,10 +1,13 @@ base_model = "openai/gpt-5.5" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh"] [cost] -input = 5 -output = 30 -cache_read = 0.5 +input = 4 +output = 24 +cache_read = 0.4 [provider] npm = "@ai-sdk/openai" diff --git a/providers/ofox/models/openai/gpt-5.toml b/providers/ofox/models/openai/gpt-5.toml index c2393f6cb44..297a9224d26 100644 --- a/providers/ofox/models/openai/gpt-5.toml +++ b/providers/ofox/models/openai/gpt-5.toml @@ -3,12 +3,15 @@ # - https://api.ofox.ai/v2/models/catalog?include=provider_price (input/output/cache_read) # Reasoning effort: OpenAI first-party gpt-5 + relay peers (minimal/low/medium/high) base_model = "openai/gpt-5" -reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }] + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high"] [cost] -input = 1.25 -output = 10 -cache_read = 0.13 +input = 1 +output = 8 +cache_read = 0.104 [provider] npm = "@ai-sdk/openai" diff --git a/providers/ofox/models/openai/gpt-6-astra.toml b/providers/ofox/models/openai/gpt-6-astra.toml new file mode 100644 index 00000000000..56cc44e71c6 --- /dev/null +++ b/providers/ofox/models/openai/gpt-6-astra.toml @@ -0,0 +1,20 @@ +# Sources: +# - Ofox model page: https://ofox.ai/models/openai/gpt-6-astra +# - Ofox catalog API: https://api.ofox.ai/v2/models/catalog?include=provider_price&search=gpt-6-astra +# - OpenAI model docs (reasoning effort): https://developers.openai.com/api/docs/models/gpt-6-astra +# Ofox publishes flat $10/$50 (+ cache) with no >=272k context tier in the catalog, so no [[cost.tiers]]. +base_model = "openai/gpt-6-astra" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 8 +output = 40 +cache_read = 0.8 +cache_write = 10 + +[provider] +npm = "@ai-sdk/openai" +api = "https://api.ofox.ai/v1" diff --git a/providers/ofox/models/openai/gpt-6-luna.toml b/providers/ofox/models/openai/gpt-6-luna.toml new file mode 100644 index 00000000000..990db0bda79 --- /dev/null +++ b/providers/ofox/models/openai/gpt-6-luna.toml @@ -0,0 +1,20 @@ +# Sources: +# - Ofox model page: https://ofox.ai/models/openai/gpt-6-luna +# - Ofox catalog API: https://api.ofox.ai/v2/models/catalog?include=provider_price&search=gpt-6-luna +# - OpenAI model docs (pricing/reasoning): https://developers.openai.com/api/docs/models/gpt-6-luna +# Ofox provider_price override is flat $0.08/$0.40 (+ cache) with no context tier in the catalog, so no [[cost.tiers]]. +base_model = "openai/gpt-6-luna" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.08 +output = 0.4 +cache_read = 0.008 +cache_write = 0.1 + +[provider] +npm = "@ai-sdk/openai" +api = "https://api.ofox.ai/v1" diff --git a/providers/ofox/models/openai/gpt-6-sol.toml b/providers/ofox/models/openai/gpt-6-sol.toml new file mode 100644 index 00000000000..c686a7a19a1 --- /dev/null +++ b/providers/ofox/models/openai/gpt-6-sol.toml @@ -0,0 +1,20 @@ +# Sources: +# - Ofox model page: https://ofox.ai/models/openai/gpt-6-sol +# - Ofox catalog API: https://api.ofox.ai/v2/models/catalog?include=provider_price&search=gpt-6-sol +# - OpenAI model docs (reasoning effort + list pricing): https://developers.openai.com/api/docs/models/gpt-6-sol +# Ofox provider_price is the -20% promo override ($1.6/$8 + cache vs $2/$10 list); flat with no >=272k context tier in the catalog, so no [[cost.tiers]]. +base_model = "openai/gpt-6-sol" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 1.6 +output = 8 +cache_read = 0.16 +cache_write = 2 + +[provider] +npm = "@ai-sdk/openai" +api = "https://api.ofox.ai/v1" diff --git a/providers/ofox/models/qwen/qwen-flash.toml b/providers/ofox/models/qwen/qwen-flash.toml new file mode 100644 index 00000000000..eca6704d742 --- /dev/null +++ b/providers/ofox/models/qwen/qwen-flash.toml @@ -0,0 +1,17 @@ +# Sources (accessed 2026-09-11): +# https://ofox.ai/models/qwen/qwen-flash +# https://api.ofox.ai/v1/models/qwen/qwen-flash +# https://help.aliyun.com/en/model-studio/deep-thinking +# Toggle: enable_thinking true|false (Qwen/DashScope chat path through Ofox) +# Budget: thinking_budget +base_model = "alibaba/qwen-flash" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 0.022 +output = 0.22 +cache_read = 0.0043 +cache_write = 0.027 + +[limit] +output = 32_000 diff --git a/providers/ofox/models/qwen/qwen-max.toml b/providers/ofox/models/qwen/qwen-max.toml new file mode 100644 index 00000000000..44ad790b404 --- /dev/null +++ b/providers/ofox/models/qwen/qwen-max.toml @@ -0,0 +1,13 @@ +# Sources (accessed 2026-09-11): +# https://ofox.ai/models/qwen/qwen-max +# https://api.ofox.ai/v1/models/qwen/qwen-max +base_model = "alibaba/qwen-max" + +[cost] +input = 0.35 +output = 1.38 +cache_read = 0.069 + +[limit] +context = 32_000 +output = 8_000 diff --git a/providers/ofox/models/qwen/qwen-plus.toml b/providers/ofox/models/qwen/qwen-plus.toml new file mode 100644 index 00000000000..37c1a0cbf95 --- /dev/null +++ b/providers/ofox/models/qwen/qwen-plus.toml @@ -0,0 +1,13 @@ +# Sources (accessed 2026-09-11): +# https://ofox.ai/models/qwen/qwen-plus +# https://api.ofox.ai/v1/models/qwen/qwen-plus +base_model = "alibaba/qwen-plus" +reasoning = false + +[cost] +input = 0.12 +output = 0.29 +cache_read = 0.023 + +[limit] +output = 32_000 diff --git a/providers/ofox/models/qwen/qwen-turbo.toml b/providers/ofox/models/qwen/qwen-turbo.toml new file mode 100644 index 00000000000..392aca68ca5 --- /dev/null +++ b/providers/ofox/models/qwen/qwen-turbo.toml @@ -0,0 +1,14 @@ +# Sources (accessed 2026-09-11): +# https://ofox.ai/models/qwen/qwen-turbo +# https://api.ofox.ai/v1/models/qwen/qwen-turbo +base_model = "alibaba/qwen-turbo" +reasoning = false + +[cost] +input = 0.043 +output = 0.09 +cache_read = 0.0086 + +[limit] +context = 128_000 +output = 16_000 diff --git a/providers/ofox/models/qwen/qwen-vl-max.toml b/providers/ofox/models/qwen/qwen-vl-max.toml new file mode 100644 index 00000000000..ba15f7556b3 --- /dev/null +++ b/providers/ofox/models/qwen/qwen-vl-max.toml @@ -0,0 +1,13 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen-vl-max +# https://api.ofox.ai/v1/models/qwen/qwen-vl-max +base_model = "alibaba/qwen-vl-max" + +[cost] +input = 0.23 +output = 0.58 +cache_read = 0.023 + +[limit] +context = 128_000 +output = 8_000 diff --git a/providers/ofox/models/qwen/qwen3-coder-flash.toml b/providers/ofox/models/qwen/qwen3-coder-flash.toml new file mode 100644 index 00000000000..75b3885adaa --- /dev/null +++ b/providers/ofox/models/qwen/qwen3-coder-flash.toml @@ -0,0 +1,13 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3-coder-flash +# https://api.ofox.ai/v1/models/qwen/qwen3-coder-flash +base_model = "alibaba/qwen3-coder-flash" + +[cost] +input = 0.5 +output = 2.5 +cache_read = 0.06 +cache_write = 0.27 + +[limit] +output = 64_000 diff --git a/providers/ofox/models/qwen/qwen3-coder-next.toml b/providers/ofox/models/qwen/qwen3-coder-next.toml new file mode 100644 index 00000000000..826c97c4f25 --- /dev/null +++ b/providers/ofox/models/qwen/qwen3-coder-next.toml @@ -0,0 +1,12 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3-coder-next +# https://api.ofox.ai/v1/models/qwen/qwen3-coder-next +base_model = "alibaba/qwen3-coder-next" + +[cost] +input = 0.2 +output = 1.5 + +[limit] +context = 256_000 +output = 64_000 diff --git a/providers/ofox/models/qwen/qwen3-coder-plus.toml b/providers/ofox/models/qwen/qwen3-coder-plus.toml new file mode 100644 index 00000000000..a787d74d0e5 --- /dev/null +++ b/providers/ofox/models/qwen/qwen3-coder-plus.toml @@ -0,0 +1,14 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3-coder-plus +# https://api.ofox.ai/v1/models/qwen/qwen3-coder-plus +base_model = "alibaba/qwen3-coder-plus" + +[cost] +input = 1.8 +output = 9 +cache_read = 0.2 +cache_write = 1 + +[limit] +context = 1_000_000 +output = 64_000 diff --git a/providers/ofox/models/qwen/qwen3-max.toml b/providers/ofox/models/qwen/qwen3-max.toml new file mode 100644 index 00000000000..36aacd179c5 --- /dev/null +++ b/providers/ofox/models/qwen/qwen3-max.toml @@ -0,0 +1,18 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3-max +# https://api.ofox.ai/v1/models/qwen/qwen3-max +# https://www.alibabacloud.com/help/en/model-studio/deep-thinking +# Toggle: enable_thinking true|false (hybrid; default off) +# Budget: thinking_budget +base_model = "alibaba/qwen3-max" +reasoning = true +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 0.36 +output = 1.43 +cache_read = 0.072 + +[limit] +context = 256_000 +output = 64_000 diff --git a/providers/ofox/models/qwen/qwen3.5-122b-a10b.toml b/providers/ofox/models/qwen/qwen3.5-122b-a10b.toml new file mode 100644 index 00000000000..6609c1c51b1 --- /dev/null +++ b/providers/ofox/models/qwen/qwen3.5-122b-a10b.toml @@ -0,0 +1,19 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3.5-122b-a10b +# https://api.ofox.ai/v1/models/qwen/qwen3.5-122b-a10b +# Toggle: enable_thinking true|false (Qwen/DashScope chat path through Ofox) +# Budget: thinking_budget +base_model = "alibaba/qwen3.5-122b-a10b" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 0.29 +output = 2.29 +cache_read = 0.29 + +[limit] +context = 256_000 +output = 64_000 + +[modalities] +input = ["text", "image"] diff --git a/providers/ofox/models/qwen/qwen3.5-27b.toml b/providers/ofox/models/qwen/qwen3.5-27b.toml new file mode 100644 index 00000000000..ddf63942c12 --- /dev/null +++ b/providers/ofox/models/qwen/qwen3.5-27b.toml @@ -0,0 +1,19 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3.5-27b +# https://api.ofox.ai/v1/models/qwen/qwen3.5-27b +# Toggle: enable_thinking true|false (Qwen/DashScope chat path through Ofox) +# Budget: thinking_budget +base_model = "alibaba/qwen3.5-27b" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 0.29 +output = 2.05 +cache_read = 0.29 + +[limit] +context = 256_000 +output = 64_000 + +[modalities] +input = ["text", "image"] diff --git a/providers/ofox/models/qwen/qwen3.5-35b-a3b.toml b/providers/ofox/models/qwen/qwen3.5-35b-a3b.toml new file mode 100644 index 00000000000..fe7310792ff --- /dev/null +++ b/providers/ofox/models/qwen/qwen3.5-35b-a3b.toml @@ -0,0 +1,19 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3.5-35b-a3b +# https://api.ofox.ai/v1/models/qwen/qwen3.5-35b-a3b +# Toggle: enable_thinking true|false (Qwen/DashScope chat path through Ofox) +# Budget: thinking_budget +base_model = "alibaba/qwen3.5-35b-a3b" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 0.29 +output = 1.83 +cache_read = 0.29 + +[limit] +context = 256_000 +output = 64_000 + +[modalities] +input = ["text", "image"] diff --git a/providers/ofox/models/qwen/qwen3.5-397b-a17b.toml b/providers/ofox/models/qwen/qwen3.5-397b-a17b.toml new file mode 100644 index 00000000000..f08f155e01c --- /dev/null +++ b/providers/ofox/models/qwen/qwen3.5-397b-a17b.toml @@ -0,0 +1,19 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3.5-397b-a17b +# https://api.ofox.ai/v1/models/qwen/qwen3.5-397b-a17b +# Toggle: enable_thinking true|false (Qwen/DashScope chat path through Ofox) +# Budget: thinking_budget +base_model = "alibaba/qwen3.5-397b-a17b" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 0.55 +output = 3.5 +cache_read = 0.55 + +[limit] +context = 256_000 +output = 64_000 + +[modalities] +input = ["text", "image"] diff --git a/providers/ofox/models/qwen/qwen3.5-flash.toml b/providers/ofox/models/qwen/qwen3.5-flash.toml new file mode 100644 index 00000000000..dd4205c51ac --- /dev/null +++ b/providers/ofox/models/qwen/qwen3.5-flash.toml @@ -0,0 +1,16 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3.5-flash +# https://api.ofox.ai/v1/models/qwen/qwen3.5-flash +# Toggle: enable_thinking true|false (Qwen/DashScope chat path through Ofox) +# Budget: thinking_budget +base_model = "alibaba/qwen3.5-flash" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 0.1 +output = 0.4 +cache_read = 0.01 +cache_write = 0.125 + +[limit] +output = 64_000 diff --git a/providers/ofox/models/qwen/qwen3.5-plus.toml b/providers/ofox/models/qwen/qwen3.5-plus.toml new file mode 100644 index 00000000000..7badf80bbb0 --- /dev/null +++ b/providers/ofox/models/qwen/qwen3.5-plus.toml @@ -0,0 +1,16 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3.5-plus +# https://api.ofox.ai/v1/models/qwen/qwen3.5-plus +# Toggle: enable_thinking true|false (Qwen/DashScope chat path through Ofox) +# Budget: thinking_budget +base_model = "alibaba/qwen3.5-plus" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 0.4 +output = 2.4 +cache_read = 0.04 +cache_write = 0.4 + +[limit] +output = 64_000 diff --git a/providers/ofox/models/qwen/qwen3.6-27b.toml b/providers/ofox/models/qwen/qwen3.6-27b.toml new file mode 100644 index 00000000000..3309ae4d43d --- /dev/null +++ b/providers/ofox/models/qwen/qwen3.6-27b.toml @@ -0,0 +1,20 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3.6-27b +# https://api.ofox.ai/v1/models/qwen/qwen3.6-27b +# Toggle: enable_thinking true|false (Qwen/DashScope chat path through Ofox) +# Budget: thinking_budget +base_model = "alibaba/qwen3.6-27b" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.43 +output = 2.57 + +[limit] +context = 256_000 +output = 64_000 diff --git a/providers/ofox/models/qwen/qwen3.6-flash.toml b/providers/ofox/models/qwen/qwen3.6-flash.toml new file mode 100644 index 00000000000..ac1359ad408 --- /dev/null +++ b/providers/ofox/models/qwen/qwen3.6-flash.toml @@ -0,0 +1,16 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3.6-flash +# https://api.ofox.ai/v1/models/qwen/qwen3.6-flash +# Toggle: enable_thinking true|false (Qwen/DashScope chat path through Ofox) +# Budget: thinking_budget +base_model = "alibaba/qwen3.6-flash" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 0.25 +output = 1.5 +cache_read = 0.025 +cache_write = 0.31 + +[limit] +output = 64_000 diff --git a/providers/ofox/models/qwen/qwen3.6-max-preview.toml b/providers/ofox/models/qwen/qwen3.6-max-preview.toml new file mode 100644 index 00000000000..30c5aff16f1 --- /dev/null +++ b/providers/ofox/models/qwen/qwen3.6-max-preview.toml @@ -0,0 +1,17 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3.6-max-preview +# https://api.ofox.ai/v1/models/qwen/qwen3.6-max-preview +# Toggle: enable_thinking true|false (Qwen/DashScope chat path through Ofox) +# Budget: thinking_budget +base_model = "alibaba/qwen3.6-max-preview" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 2.15 +output = 12.86 +cache_read = 0.2 +cache_write = 1.17 + +[limit] +context = 256_000 +output = 64_000 diff --git a/providers/ofox/models/qwen/qwen3.6-plus.toml b/providers/ofox/models/qwen/qwen3.6-plus.toml new file mode 100644 index 00000000000..7c0f1c3277e --- /dev/null +++ b/providers/ofox/models/qwen/qwen3.6-plus.toml @@ -0,0 +1,16 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3.6-plus +# https://api.ofox.ai/v1/models/qwen/qwen3.6-plus +# Toggle: enable_thinking true|false (Qwen/DashScope chat path through Ofox) +# Budget: thinking_budget +base_model = "alibaba/qwen3.6-plus" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 0.5 +output = 3 +cache_read = 0.05 +cache_write = 0.625 + +[limit] +output = 64_000 diff --git a/providers/ofox/models/qwen/qwen3.7-max.toml b/providers/ofox/models/qwen/qwen3.7-max.toml new file mode 100644 index 00000000000..9a6456417eb --- /dev/null +++ b/providers/ofox/models/qwen/qwen3.7-max.toml @@ -0,0 +1,22 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3.7-max +# https://api.ofox.ai/v1/models/qwen/qwen3.7-max +# Toggle: enable_thinking true|false (Qwen/DashScope chat path through Ofox) +# Budget: thinking_budget +base_model = "alibaba/qwen3.7-max" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 1.71 +output = 5.14 +cache_read = 0.17 +cache_write = 2.14 + +[limit] +context = 1_064_000 +output = 64_000 diff --git a/providers/ofox/models/qwen/qwen3.7-plus.toml b/providers/ofox/models/qwen/qwen3.7-plus.toml new file mode 100644 index 00000000000..88cbf529408 --- /dev/null +++ b/providers/ofox/models/qwen/qwen3.7-plus.toml @@ -0,0 +1,16 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3.7-plus +# https://api.ofox.ai/v1/models/qwen/qwen3.7-plus +# Toggle: enable_thinking true|false (Qwen/DashScope chat path through Ofox) +# Budget: thinking_budget +base_model = "alibaba/qwen3.7-plus" +reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[cost] +input = 0.4 +output = 1.6 +cache_read = 0.08 +cache_write = 0.5 + +[limit] +context = 1_064_000 diff --git a/providers/ofox/models/qwen/qwen3.8-27b.toml b/providers/ofox/models/qwen/qwen3.8-27b.toml new file mode 100644 index 00000000000..074148d9e8a --- /dev/null +++ b/providers/ofox/models/qwen/qwen3.8-27b.toml @@ -0,0 +1,22 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3.8-27b +# https://api.ofox.ai/v1/models/qwen/qwen3.8-27b +# Toggle: enable_thinking true|false (Qwen/DashScope chat path through Ofox) +# Budget: thinking_budget +base_model = "alibaba/qwen3.8-27b" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.5 +output = 1.71 +cache_read = 0.043 +cache_write = 0.63 + +[limit] +context = 1_131_072 +output = 131_072 diff --git a/providers/ofox/models/qwen/qwen3.8-flash.toml b/providers/ofox/models/qwen/qwen3.8-flash.toml new file mode 100644 index 00000000000..ecd5475f9ce --- /dev/null +++ b/providers/ofox/models/qwen/qwen3.8-flash.toml @@ -0,0 +1,20 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3.8-flash +# https://api.ofox.ai/v1/models/qwen/qwen3.8-flash +# https://www.qwencloud.com/models/qwen3.8-flash +# https://docs.qwencloud.com/developer-guides/text-generation/thinking +# Toggle: enable_thinking true|false (hybrid; Qwen/DashScope surface through Ofox) +# Budget: thinking_budget +base_model = "alibaba/qwen3.8-flash" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.11 +output = 0.39 +cache_read = 0.011 +cache_write = 0.14 diff --git a/providers/ofox/models/qwen/qwen3.8-max-0902.toml b/providers/ofox/models/qwen/qwen3.8-max-0902.toml new file mode 100644 index 00000000000..fde94b3d0a8 --- /dev/null +++ b/providers/ofox/models/qwen/qwen3.8-max-0902.toml @@ -0,0 +1,28 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3.8-max-0902 +# https://api.ofox.ai/v1/models/qwen/qwen3.8-max-0902 +# https://www.qwencloud.com/models/qwen3.8-max-0902 +# https://www.alibabacloud.com/help/en/model-studio/qwen3-8-max +# https://docs.qwencloud.com/developer-guides/text-generation/thinking +# Toggle: enable_thinking true|false (hybrid; Qwen/DashScope surface through Ofox) +# Effort: reasoning_effort = low|medium|xhigh (default xhigh); high accepted as alias → xhigh +# Budget: thinking_budget (0..262144) cannot be combined with reasoning_effort +base_model = "alibaba/qwen3.8-max-0902" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] + +[[reasoning_options]] +type = "budget_tokens" +min = 0 +max = 262_144 + +[cost] +input = 1.71 +output = 5.14 +cache_read = 0.17 +cache_write = 2.14 diff --git a/providers/ofox/models/qwen/qwen3.8-max.toml b/providers/ofox/models/qwen/qwen3.8-max.toml new file mode 100644 index 00000000000..6c0c7e2b1eb --- /dev/null +++ b/providers/ofox/models/qwen/qwen3.8-max.toml @@ -0,0 +1,27 @@ +# Sources (accessed 2026-09-10): +# https://ofox.ai/models/qwen/qwen3.8-max +# https://api.ofox.ai/v1/models/qwen/qwen3.8-max +# https://www.qwencloud.com/models/qwen3.8-max +# https://docs.qwencloud.com/developer-guides/text-generation/thinking +# Toggle: enable_thinking true|false (hybrid; Qwen/DashScope surface through Ofox) +# Effort: reasoning_effort = low|medium|xhigh (default xhigh); high accepted as alias → xhigh +# Budget: thinking_budget (0..262144) cannot be combined with reasoning_effort +base_model = "alibaba/qwen3.8-max" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] + +[[reasoning_options]] +type = "budget_tokens" +min = 0 +max = 262_144 + +[cost] +input = 1.71 +output = 5.14 +cache_read = 0.17 +cache_write = 2.14 diff --git a/providers/ofox/models/x-ai/grok-4.7.toml b/providers/ofox/models/x-ai/grok-4.7.toml new file mode 100644 index 00000000000..b829098d460 --- /dev/null +++ b/providers/ofox/models/x-ai/grok-4.7.toml @@ -0,0 +1,16 @@ +# Ofox: x-ai/grok-4.7 → xAI Grok 4.7 +# Sources: +# - https://api.ofox.ai/v1/models/x-ai/grok-4.7 (prompt $2/M, completion $6/M, cache_read $0.5/M; context 500k; max_completion 65536; supported_parameters includes reasoning) +# - https://ofox.ai/models/x-ai/grok-4.7 (same pricing; max output 66K; reasoning + tools + prompt caching) +# - https://docs.x.ai/developers/models/grok-4.7 (reasoning_effort low|medium|high|xhigh; cannot disable) +# reasoning_options match first-party xAI + relay peers (no none) +base_model = "xai/grok-4.7" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh"] }] + +[cost] +input = 2 +output = 6 +cache_read = 0.5 + +[limit] +output = 65_536 diff --git a/providers/ofox/models/z-ai/glm-4.6.toml b/providers/ofox/models/z-ai/glm-4.6.toml index 85a42ae6558..f9182a89012 100644 --- a/providers/ofox/models/z-ai/glm-4.6.toml +++ b/providers/ofox/models/z-ai/glm-4.6.toml @@ -2,9 +2,11 @@ # https://api.ofox.ai/v1/models/z-ai/glm-4.6 # Toggle: thinking.type = enabled|disabled (Z.ai native; Ofox lists supported_parameters: reasoning) base_model = "zhipuai/glm-4.6" -reasoning_options = [{ type = "toggle" }] + +[[reasoning_options]] +type = "toggle" [cost] -input = 0.4 -output = 1.9 +input = 0.6 +output = 2.2 cache_read = 0.11 diff --git a/providers/ofox/models/z-ai/glm-4.7-flashx.toml b/providers/ofox/models/z-ai/glm-4.7-flashx.toml index f3bbe1f38aa..d5e52076c23 100644 --- a/providers/ofox/models/z-ai/glm-4.7-flashx.toml +++ b/providers/ofox/models/z-ai/glm-4.7-flashx.toml @@ -5,12 +5,14 @@ # - https://docs.z.ai/guides/overview/pricing (lab list price reference) # Toggle: thinking.type = enabled|disabled base_model = "zhipuai/glm-4.7-flashx" -reasoning_options = [{ type = "toggle" }] + +[[reasoning_options]] +type = "toggle" [cost] input = 0.072 -output = 0.43 -cache_read = 0.015 +output = 0.4 +cache_read = 0.01 [limit] output = 128_000 diff --git a/providers/ofox/models/z-ai/glm-4.7.toml b/providers/ofox/models/z-ai/glm-4.7.toml index 73b6b2c494b..ff7a89f7aac 100644 --- a/providers/ofox/models/z-ai/glm-4.7.toml +++ b/providers/ofox/models/z-ai/glm-4.7.toml @@ -1,9 +1,11 @@ # https://ofox.ai/models/z-ai/glm-4.7 # Toggle: thinking.type = enabled|disabled (Z.AI first-party / peers) base_model = "zhipuai/glm-4.7" -reasoning_options = [{ type = "toggle" }] + +[[reasoning_options]] +type = "toggle" [cost] input = 0.4 -output = 2 -cache_read = 0.08 +output = 2.2 +cache_read = 0.11 diff --git a/providers/ofox/models/z-ai/glm-5.2.toml b/providers/ofox/models/z-ai/glm-5.2.toml index eadde6f74bc..fe20830a575 100644 --- a/providers/ofox/models/z-ai/glm-5.2.toml +++ b/providers/ofox/models/z-ai/glm-5.2.toml @@ -5,6 +5,6 @@ type = "effort" values = ["high", "max"] [cost] -input = 0.98 -output = 3.08 -cache_read = 0.182 +input = 1.4 +output = 4.4 +cache_read = 0.26 diff --git a/providers/ofox/models/z-ai/glm-5.3-flash.toml b/providers/ofox/models/z-ai/glm-5.3-flash.toml new file mode 100644 index 00000000000..74eb807ba1b --- /dev/null +++ b/providers/ofox/models/z-ai/glm-5.3-flash.toml @@ -0,0 +1,15 @@ +# Sources: +# - https://ofox.ai/en/models/z-ai/glm-5.3-flash (Ofox: $0.075/$0.25/M, cache read $0.015/M at -50%; 1M context; 131K output; always-on thinking with low/high/max effort) +# - https://docs.z.ai/guides/overview/pricing (Z.AI list/promo: GLM-5.3-Flash $0.075/$0.25/M, cached input $0.015/M; 50% promo ends 2026-09-09 24:00 UTC+8) +# - https://docs.z.ai/guides/llm/glm-5.3-flash (thinking.type only enabled; cannot disable; reasoning_effort recommended max) +# Effort: reasoning_effort = low|high|max (thinking always on) +base_model = "zhipuai/glm-5.3-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.03 diff --git a/providers/ofox/models/z-ai/glm-5.3.toml b/providers/ofox/models/z-ai/glm-5.3.toml index 6cb486df150..c6ad1a40387 100644 --- a/providers/ofox/models/z-ai/glm-5.3.toml +++ b/providers/ofox/models/z-ai/glm-5.3.toml @@ -11,6 +11,6 @@ type = "effort" values = ["low", "high", "max"] [cost] -input = 1.26 -output = 3.96 -cache_read = 0.234 +input = 1.4 +output = 4.4 +cache_read = 0.26 diff --git a/providers/ollama-cloud/models/deepseek-v4-flash.toml b/providers/ollama-cloud/models/deepseek-v4-flash.toml index 75c065b672c..515c3a01a0e 100644 --- a/providers/ollama-cloud/models/deepseek-v4-flash.toml +++ b/providers/ollama-cloud/models/deepseek-v4-flash.toml @@ -1,3 +1,7 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). Ollama bills +# Base (off-peak) and Peak (2x, 12:00-18:00 UTC Mon-Fri) rates; the schema +# cannot express time-based tiers, so the Base rate is recorded. See +# https://github.com/anomalyco/models.dev/issues/5913. name = "deepseek-v4-flash" description = "Fast DeepSeek model for efficient chat, coding help, and agent loops" family = "deepseek-flash" @@ -16,3 +20,8 @@ output = 1048576 [modalities] input = ["text"] output = ["text"] + +[cost] +input = 0.22 +output = 0.66 +cache_read = 0.007 diff --git a/providers/ollama-cloud/models/deepseek-v4-flash:0731.toml b/providers/ollama-cloud/models/deepseek-v4-flash:0731.toml index 9666e6cb2dd..08a5f37bd8e 100644 --- a/providers/ollama-cloud/models/deepseek-v4-flash:0731.toml +++ b/providers/ollama-cloud/models/deepseek-v4-flash:0731.toml @@ -1,3 +1,7 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). Ollama bills +# Base (off-peak) and Peak (2x, 12:00-18:00 UTC Mon-Fri) rates; the schema +# cannot express time-based tiers, so the Base rate is recorded. See +# https://github.com/anomalyco/models.dev/issues/5913. # Toggle: native POST /api/chat and /api/generate use `think = true|false`. # Effort: OpenAI POST /v1/chat/completions accepts top-level `reasoning_effort` # or `reasoning.effort` with high|max (DeepSeek V4 maps low/medium -> high). @@ -9,4 +13,9 @@ reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["high", " [limit] context = 1048576 -output = 1048576 \ No newline at end of file +output = 1048576 + +[cost] +input = 0.22 +output = 0.66 +cache_read = 0.007 diff --git a/providers/ollama-cloud/models/deepseek-v4-pro.toml b/providers/ollama-cloud/models/deepseek-v4-pro.toml index 09643bf6663..95855eac75c 100644 --- a/providers/ollama-cloud/models/deepseek-v4-pro.toml +++ b/providers/ollama-cloud/models/deepseek-v4-pro.toml @@ -1,3 +1,7 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). Ollama bills +# Base (off-peak) and Peak (2x, 12:00-18:00 UTC Mon-Fri) rates; the schema +# cannot express time-based tiers, so the Base rate is recorded. See +# https://github.com/anomalyco/models.dev/issues/5913. name = "deepseek-v4-pro" description = "Flagship DeepSeek model for coding, reasoning, and agentic work" family = "deepseek-thinking" @@ -16,3 +20,8 @@ output = 1048576 [modalities] input = ["text"] output = ["text"] + +[cost] +input = 0.66 +output = 1.98 +cache_read = 0.022 diff --git a/providers/ollama-cloud/models/deepseek-v4-pro:0813.toml b/providers/ollama-cloud/models/deepseek-v4-pro:0813.toml new file mode 100644 index 00000000000..97cd7c67de3 --- /dev/null +++ b/providers/ollama-cloud/models/deepseek-v4-pro:0813.toml @@ -0,0 +1,23 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). Ollama bills +# Base (off-peak) and Peak (2x, 12:00-18:00 UTC Mon-Fri) rates; the schema +# cannot express time-based tiers, so the Base rate is recorded. See +# https://github.com/anomalyco/models.dev/issues/5913. +# Toggle: native POST /api/chat and /api/generate use `think = true|false`. +# Effort: OpenAI POST /v1/chat/completions accepts top-level `reasoning_effort` +# or `reasoning.effort` with high|max (DeepSeek V4 maps low/medium -> high). +# Sources: https://docs.ollama.com/capabilities/thinking, https://docs.ollama.com/openai +# API-verified context: https://ollama.com/api/show (deepseek4.context_length = 1048576) +# Output: Ollama has no separate output cap; deepseek4 peers on this host +# (deepseek-v4-flash:0731, deepseek-v4-pro) serve output = 1048576. +base_model = "deepseek/deepseek-v4-pro-0813" + +reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["high", "max"] }] + +[limit] +context = 1048576 +output = 1048576 + +[cost] +input = 0.66 +output = 1.98 +cache_read = 0.022 diff --git a/providers/ollama-cloud/models/deepseek-v4.1-flash.toml b/providers/ollama-cloud/models/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..298a6d57684 --- /dev/null +++ b/providers/ollama-cloud/models/deepseek-v4.1-flash.toml @@ -0,0 +1,23 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). Ollama bills +# Base (off-peak) and Peak (2x, 12:00-18:00 UTC Mon-Fri) rates; the schema +# cannot express time-based tiers, so the Base rate is recorded. See +# https://github.com/anomalyco/models.dev/issues/5913. +# Toggle: native POST /api/chat and /api/generate use `think = true|false`. +# Effort: OpenAI POST /v1/chat/completions accepts top-level `reasoning_effort` +# or `reasoning.effort` with low|high|max (Flash maps requested low -> low). +# Sources: https://docs.ollama.com/capabilities/thinking, https://docs.ollama.com/openai +# API-verified context: https://ollama.com/api/show (deepseek_v41.context_length = 1048576) +base_model = "deepseek/deepseek-v4.1-flash" + +reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[limit] +context = 1048576 + +[cost] +input = 0.15 +output = 0.6 +cache_read = 0.003 diff --git a/providers/ollama-cloud/models/gemma4:31b.toml b/providers/ollama-cloud/models/gemma4:31b.toml index ff9564944cd..f6cec87c879 100644 --- a/providers/ollama-cloud/models/gemma4:31b.toml +++ b/providers/ollama-cloud/models/gemma4:31b.toml @@ -1,3 +1,4 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). name = "gemma4:31b" description = "Open Gemma instruction model for efficient chat and self-hosted deployments" family = "gemma" @@ -17,3 +18,8 @@ output = 262144 [modalities] input = ["text","image"] output = ["text"] + +[cost] +input = 0.14 +output = 0.4 +cache_read = 0.05 diff --git a/providers/ollama-cloud/models/glm-5.1.toml b/providers/ollama-cloud/models/glm-5.1.toml index d546ca5ed92..0ee8e039d72 100644 --- a/providers/ollama-cloud/models/glm-5.1.toml +++ b/providers/ollama-cloud/models/glm-5.1.toml @@ -1,3 +1,4 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). name = "glm-5.1" description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" family = "glm" @@ -19,3 +20,8 @@ output = 131072 [modalities] input = ["text"] output = ["text"] + +[cost] +input = 1.0 +output = 3.2 +cache_read = 0.2 diff --git a/providers/ollama-cloud/models/glm-5.2.toml b/providers/ollama-cloud/models/glm-5.2.toml index dcb62d38c8a..f2dfc95e184 100644 --- a/providers/ollama-cloud/models/glm-5.2.toml +++ b/providers/ollama-cloud/models/glm-5.2.toml @@ -1,3 +1,4 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). base_model = "zhipuai/glm-5.2" open_weights = true @@ -9,4 +10,9 @@ values = ["high", "max"] field = "reasoning_content" [limit] -context = 976_000 \ No newline at end of file +context = 976_000 + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.26 diff --git a/providers/ollama-cloud/models/glm-5.3-flash.toml b/providers/ollama-cloud/models/glm-5.3-flash.toml new file mode 100644 index 00000000000..acff7eff693 --- /dev/null +++ b/providers/ollama-cloud/models/glm-5.3-flash.toml @@ -0,0 +1,15 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). +base_model = "zhipuai/glm-5.3-flash" +open_weights = true + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.03 diff --git a/providers/ollama-cloud/models/glm-5.3.toml b/providers/ollama-cloud/models/glm-5.3.toml new file mode 100644 index 00000000000..b2d0787d7df --- /dev/null +++ b/providers/ollama-cloud/models/glm-5.3.toml @@ -0,0 +1,21 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). +# Effort: OpenAI POST /v1/chat/completions accepts top-level `reasoning_effort` +# or `reasoning.effort` with low|high|max (GLM-5.3 always reasons; thinking +# cannot be disabled, so there is no toggle). +# Sources: https://docs.ollama.com/capabilities/thinking, https://docs.ollama.com/openai +# API-verified context: https://ollama.com/api/show (glm_dsa_moe.context_length = 1048576) +base_model = "zhipuai/glm-5.3" +open_weights = true + +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[limit] +context = 1_048_576 + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.26 diff --git a/providers/ollama-cloud/models/gpt-oss:120b.toml b/providers/ollama-cloud/models/gpt-oss:120b.toml index 45d64801792..67a40918ed6 100644 --- a/providers/ollama-cloud/models/gpt-oss:120b.toml +++ b/providers/ollama-cloud/models/gpt-oss:120b.toml @@ -1,3 +1,4 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). name = "gpt-oss:120b" description = "Open-weight GPT model for self-hosted reasoning and instruction-following workloads" family = "gpt-oss" @@ -16,3 +17,8 @@ output = 32768 [modalities] input = ["text"] output = ["text"] + +[cost] +input = 0.15 +output = 0.6 +cache_read = 0.014 diff --git a/providers/ollama-cloud/models/gpt-oss:20b.toml b/providers/ollama-cloud/models/gpt-oss:20b.toml index 7e355ac8e7e..da92e1826d5 100644 --- a/providers/ollama-cloud/models/gpt-oss:20b.toml +++ b/providers/ollama-cloud/models/gpt-oss:20b.toml @@ -1,3 +1,4 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). name = "gpt-oss:20b" description = "Open-weight GPT model for self-hosted reasoning and instruction-following workloads" family = "gpt-oss" @@ -16,3 +17,8 @@ output = 32768 [modalities] input = ["text"] output = ["text"] + +[cost] +input = 0.07 +output = 0.3 +cache_read = 0.035 diff --git a/providers/ollama-cloud/models/kimi-k2.6.toml b/providers/ollama-cloud/models/kimi-k2.6.toml index 8f5f6011b45..644ab635138 100644 --- a/providers/ollama-cloud/models/kimi-k2.6.toml +++ b/providers/ollama-cloud/models/kimi-k2.6.toml @@ -1,3 +1,4 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). name = "kimi-k2.6" description = "Kimi multimodal agent model for visual understanding, coding, and planning" family = "kimi-k2" @@ -16,3 +17,8 @@ output = 262144 [modalities] input = ["text", "image"] output = ["text"] + +[cost] +input = 0.95 +output = 4 +cache_read = 0.16 diff --git a/providers/ollama-cloud/models/kimi-k2.7-code.toml b/providers/ollama-cloud/models/kimi-k2.7-code.toml index e5ddc85c644..faac2d00fb3 100644 --- a/providers/ollama-cloud/models/kimi-k2.7-code.toml +++ b/providers/ollama-cloud/models/kimi-k2.7-code.toml @@ -1,3 +1,4 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). base_model = "moonshotai/kimi-k2.7-code" name = "kimi-k2.7-code" reasoning_options = [{ type = "toggle" }] @@ -5,3 +6,8 @@ reasoning_options = [{ type = "toggle" }] [modalities] input = ["text", "image"] output = ["text"] + +[cost] +input = 0.95 +output = 4 +cache_read = 0.19 diff --git a/providers/ollama-cloud/models/kimi-k3.toml b/providers/ollama-cloud/models/kimi-k3.toml index 8c5b5b050bb..da32429a156 100644 --- a/providers/ollama-cloud/models/kimi-k3.toml +++ b/providers/ollama-cloud/models/kimi-k3.toml @@ -1,3 +1,4 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). # Ollama Cloud direct API model ID verified from https://docs.ollama.com/api/tags. # Library page documents Kimi K3 as a cloud thinking model with 1M context # and text/image input. @@ -13,3 +14,8 @@ reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "h [modalities] input = ["text", "image"] + +[cost] +input = 3 +output = 15 +cache_read = 0.3 diff --git a/providers/ollama-cloud/models/minimax-m2.7.toml b/providers/ollama-cloud/models/minimax-m2.7.toml index 88e4a404a96..fe6f862b2a7 100644 --- a/providers/ollama-cloud/models/minimax-m2.7.toml +++ b/providers/ollama-cloud/models/minimax-m2.7.toml @@ -1,3 +1,4 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). name = "minimax-m2.7" description = "MiniMax model for chat, coding, office work, and agentic tasks" family = "minimax" @@ -16,3 +17,8 @@ output = 196608 [modalities] input = ["text"] output = ["text"] + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.06 diff --git a/providers/ollama-cloud/models/minimax-m3.toml b/providers/ollama-cloud/models/minimax-m3.toml index c8155d651db..1505acb8787 100644 --- a/providers/ollama-cloud/models/minimax-m3.toml +++ b/providers/ollama-cloud/models/minimax-m3.toml @@ -1,3 +1,4 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). name = "minimax-m3" description = "MiniMax multimodal coding model for long-context reasoning and agent tasks" family = "minimax-m3" @@ -19,3 +20,8 @@ output = 131_072 [modalities] input = ["text", "image", "video"] output = ["text"] + +[cost] +input = 0.6 +output = 2.4 +cache_read = 0.12 diff --git a/providers/ollama-cloud/models/mistral-large-3:675b.toml b/providers/ollama-cloud/models/mistral-large-3:675b.toml index 905503bb479..d49e67e4ef0 100644 --- a/providers/ollama-cloud/models/mistral-large-3:675b.toml +++ b/providers/ollama-cloud/models/mistral-large-3:675b.toml @@ -1,3 +1,4 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). name = "mistral-large-3:675b" description = "Flagship Mistral model for advanced reasoning, coding, and multilingual work" family = "mistral-large" @@ -15,3 +16,7 @@ output = 262144 [modalities] input = ["text","image"] output = ["text"] + +[cost] +input = 0.5 +output = 1.5 diff --git a/providers/ollama-cloud/models/nemotron-3-nano:30b.toml b/providers/ollama-cloud/models/nemotron-3-nano:30b.toml index 179fd8e2beb..184a873907e 100644 --- a/providers/ollama-cloud/models/nemotron-3-nano:30b.toml +++ b/providers/ollama-cloud/models/nemotron-3-nano:30b.toml @@ -1,3 +1,4 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). name = "nemotron-3-nano:30b" base_model = "nvidia/nemotron-3-nano-30b-a3b" family = "nemotron" @@ -16,3 +17,7 @@ output = 131072 [modalities] input = ["text"] output = ["text"] + +[cost] +input = 0.06 +output = 0.24 diff --git a/providers/ollama-cloud/models/nemotron-3-super.toml b/providers/ollama-cloud/models/nemotron-3-super.toml index b72a6d91e5d..8a4ac22dec6 100644 --- a/providers/ollama-cloud/models/nemotron-3-super.toml +++ b/providers/ollama-cloud/models/nemotron-3-super.toml @@ -1,3 +1,4 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). name = "nemotron-3-super" base_model = "nvidia/nemotron-3-super-120b-a12b" family = "nemotron" @@ -16,3 +17,8 @@ output = 65536 [modalities] input = ["text"] output = ["text"] + +[cost] +input = 0.015 +output = 0.6 +cache_read = 0.015 diff --git a/providers/ollama-cloud/models/nemotron-3-ultra.toml b/providers/ollama-cloud/models/nemotron-3-ultra.toml index 23cbabaecfb..6490eeeca84 100644 --- a/providers/ollama-cloud/models/nemotron-3-ultra.toml +++ b/providers/ollama-cloud/models/nemotron-3-ultra.toml @@ -1,6 +1,12 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). name = "nemotron-3-ultra" base_model = "nvidia/nemotron-3-ultra-550b-a55b" reasoning_options = [{ type = "toggle" }] [limit] context = 262144 + +[cost] +input = 0.1 +output = 3 +cache_read = 0.1 diff --git a/providers/ollama-cloud/models/qwen3.5:397b.toml b/providers/ollama-cloud/models/qwen3.5:397b.toml index 25442c93f33..956aa90c51c 100644 --- a/providers/ollama-cloud/models/qwen3.5:397b.toml +++ b/providers/ollama-cloud/models/qwen3.5:397b.toml @@ -1,3 +1,4 @@ +# Cost from https://ollama.com/pricing (accessed 2026-09-15). name = "qwen3.5:397b" description = "Qwen vision-language model for visual reasoning, documents, and agent tasks" family = "qwen" @@ -19,3 +20,7 @@ output = 65536 [modalities] input = ["text", "image"] output = ["text"] + +[cost] +input = 0.6 +output = 3.6 diff --git a/providers/openai/models/gpt-5.2-chat-latest.toml b/providers/openai/models/gpt-5.2-chat-latest.toml index f4508392b7a..2fd185477b9 100644 --- a/providers/openai/models/gpt-5.2-chat-latest.toml +++ b/providers/openai/models/gpt-5.2-chat-latest.toml @@ -11,6 +11,7 @@ knowledge = "2025-08-31" tool_call = true structured_output = true open_weights = false +status = "deprecated" [cost] input = 1.75 diff --git a/providers/openai/models/gpt-5.3-chat-latest.toml b/providers/openai/models/gpt-5.3-chat-latest.toml index fda276bb0d2..1f4bcb461fa 100644 --- a/providers/openai/models/gpt-5.3-chat-latest.toml +++ b/providers/openai/models/gpt-5.3-chat-latest.toml @@ -10,6 +10,7 @@ knowledge = "2025-08-31" tool_call = true structured_output = true open_weights = false +status = "deprecated" [cost] input = 1.75 diff --git a/providers/openai/models/gpt-6-astra.toml b/providers/openai/models/gpt-6-astra.toml new file mode 100644 index 00000000000..4d59049f8a5 --- /dev/null +++ b/providers/openai/models/gpt-6-astra.toml @@ -0,0 +1,24 @@ +# Pricing: https://developers.openai.com/api/docs/models/gpt-6-astra +# Reasoning and modes: https://developers.openai.com/api/docs/guides/latest-model?model=gpt-6-astra +base_model = "openai/gpt-6-astra" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 10.00 +output = 50.00 +cache_read = 1.00 +cache_write = 12.50 + +[[cost.tiers]] +tier = { size = 272_000 } +input = 20.00 +output = 75.00 +cache_read = 2.00 +cache_write = 25.00 + +[experimental.modes.fast] +cost = { input = 20.00, output = 100.00, cache_read = 2.00, cache_write = 25.00 } +provider = { body = { service_tier = "priority" } } + +[experimental.modes.pro] +provider = { body = { reasoning = { mode = "pro" } } } diff --git a/providers/openai/models/gpt-6-luna.toml b/providers/openai/models/gpt-6-luna.toml new file mode 100644 index 00000000000..3a132f7fabb --- /dev/null +++ b/providers/openai/models/gpt-6-luna.toml @@ -0,0 +1,24 @@ +# Pricing: https://developers.openai.com/api/docs/models/gpt-6-luna +# Reasoning and modes: https://developers.openai.com/api/docs/guides/latest-model?model=gpt-6-luna +base_model = "openai/gpt-6-luna" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 0.10 +output = 0.50 +cache_read = 0.01 +cache_write = 0.125 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 0.20 +output = 0.75 +cache_read = 0.02 +cache_write = 0.25 + +[experimental.modes.fast] +cost = { input = 0.20, output = 1.00, cache_read = 0.02, cache_write = 0.25 } +provider = { body = { service_tier = "priority" } } + +[experimental.modes.pro] +provider = { body = { reasoning = { mode = "pro" } } } diff --git a/providers/openai/models/gpt-6-sol.toml b/providers/openai/models/gpt-6-sol.toml new file mode 100644 index 00000000000..e141e9653ad --- /dev/null +++ b/providers/openai/models/gpt-6-sol.toml @@ -0,0 +1,24 @@ +# Pricing: https://developers.openai.com/api/docs/models/gpt-6-sol +# Reasoning and modes: https://developers.openai.com/api/docs/guides/latest-model?model=gpt-6-sol +base_model = "openai/gpt-6-sol" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 2.00 +output = 10.00 +cache_read = 0.20 +cache_write = 2.50 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 4.00 +output = 15.00 +cache_read = 0.40 +cache_write = 5.00 + +[experimental.modes.fast] +cost = { input = 4.00, output = 20.00, cache_read = 0.40, cache_write = 5.00 } +provider = { body = { service_tier = "priority" } } + +[experimental.modes.pro] +provider = { body = { reasoning = { mode = "pro" } } } diff --git a/providers/opencode-go/models/deepseek-v4-flash-vision-exp.toml b/providers/opencode-go/models/deepseek-v4-flash-vision-exp.toml index 1f68e0a4dd5..de410add742 100644 --- a/providers/opencode-go/models/deepseek-v4-flash-vision-exp.toml +++ b/providers/opencode-go/models/deepseek-v4-flash-vision-exp.toml @@ -8,6 +8,6 @@ reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "h field = "reasoning_content" [cost] -input = 0.22 -output = 0.66 -cache_read = 0.007 +input = 0.15 +output = 0.6 +cache_read = 0.003 diff --git a/providers/opencode-go/models/deepseek-v4-flash.toml b/providers/opencode-go/models/deepseek-v4-flash.toml index 31fdd5dc3d5..09d83c0a6db 100644 --- a/providers/opencode-go/models/deepseek-v4-flash.toml +++ b/providers/opencode-go/models/deepseek-v4-flash.toml @@ -11,6 +11,6 @@ values = ["low", "high", "max"] field = "reasoning_content" [cost] -input = 0.22 -output = 0.66 -cache_read = 0.007 +input = 0.15 +output = 0.6 +cache_read = 0.003 diff --git a/providers/opencode-go/models/deepseek-v4.1-flash.toml b/providers/opencode-go/models/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..21a954201c4 --- /dev/null +++ b/providers/opencode-go/models/deepseek-v4.1-flash.toml @@ -0,0 +1,14 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.15 +output = 0.6 +cache_read = 0.003 diff --git a/providers/opencode-go/models/glm-5.3-flash.toml b/providers/opencode-go/models/glm-5.3-flash.toml index 5e54a54c6b3..f0c6c886ed3 100644 --- a/providers/opencode-go/models/glm-5.3-flash.toml +++ b/providers/opencode-go/models/glm-5.3-flash.toml @@ -1,11 +1,11 @@ base_model = "zhipuai/glm-5.3-flash" -name = "GLM-5.3-Flash (2x usage)" +name = "GLM-5.3-Flash" reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] [interleaved] field = "reasoning_content" [cost] -input = 0.075 -output = 0.25 -cache_read = 0.015 +input = 0.15 +output = 0.5 +cache_read = 0.03 diff --git a/providers/opencode-go/models/grok-4.7.toml b/providers/opencode-go/models/grok-4.7.toml new file mode 100644 index 00000000000..edde035f699 --- /dev/null +++ b/providers/opencode-go/models/grok-4.7.toml @@ -0,0 +1,19 @@ +base_model = "xai/grok-4.7" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh"] + +[cost] +input = 2 +output = 6 +cache_read = 0.5 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 4 +output = 12 +cache_read = 1 + +[provider] +npm = "@ai-sdk/openai" diff --git a/providers/opencode-go/models/hy3.toml b/providers/opencode-go/models/hy3.toml index 5b3b95a6c48..be97effd28f 100644 --- a/providers/opencode-go/models/hy3.toml +++ b/providers/opencode-go/models/hy3.toml @@ -1,11 +1,10 @@ base_model = "tencent/hy3" -name = "Hy3 (8x usage)" [[reasoning_options]] type = "effort" values = ["none", "low", "high"] [cost] -input = 0.0175 -output = 0.0725 -cache_read = 0.004375 +input = 0.14 +output = 0.58 +cache_read = 0.035 diff --git a/providers/opencode-go/models/hy4-preview.toml b/providers/opencode-go/models/hy4-preview.toml new file mode 100644 index 00000000000..bf1bce1abc0 --- /dev/null +++ b/providers/opencode-go/models/hy4-preview.toml @@ -0,0 +1,10 @@ +base_model = "tencent/hy4-preview" + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.834 +output = 2.501 +cache_read = 0.042 diff --git a/providers/opencode-go/models/mimo-v2.6-flash.toml b/providers/opencode-go/models/mimo-v2.6-flash.toml new file mode 100644 index 00000000000..06b0dcf1faa --- /dev/null +++ b/providers/opencode-go/models/mimo-v2.6-flash.toml @@ -0,0 +1,10 @@ +base_model = "xiaomi/mimo-v2.6-flash" +reasoning_options = [] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.14 +output = 0.28 +cache_read = 0.0028 diff --git a/providers/opencode-go/models/mimo-v2.6-pro.toml b/providers/opencode-go/models/mimo-v2.6-pro.toml new file mode 100644 index 00000000000..7513e538ec8 --- /dev/null +++ b/providers/opencode-go/models/mimo-v2.6-pro.toml @@ -0,0 +1,10 @@ +base_model = "xiaomi/mimo-v2.6-pro" +reasoning_options = [] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.435 +output = 0.87 +cache_read = 0.003625 diff --git a/providers/opencode-go/models/minimax-m2.5.toml b/providers/opencode-go/models/minimax-m2.5.toml index 81fcd79363a..f6973ebf170 100644 --- a/providers/opencode-go/models/minimax-m2.5.toml +++ b/providers/opencode-go/models/minimax-m2.5.toml @@ -15,7 +15,8 @@ status = "deprecated" [cost] input = 0.3 output = 1.2 -cache_read = 0.03 +cache_read = 0.06 +cache_write = 0.375 [limit] context = 204_800 diff --git a/providers/opencode-go/models/minimax-m2.7.toml b/providers/opencode-go/models/minimax-m2.7.toml index 311a9c4af6f..33faddac7d9 100644 --- a/providers/opencode-go/models/minimax-m2.7.toml +++ b/providers/opencode-go/models/minimax-m2.7.toml @@ -15,6 +15,7 @@ open_weights = true input = 0.3 output = 1.2 cache_read = 0.06 +cache_write = 0.375 [limit] context = 204_800 diff --git a/providers/opencode-go/models/muse-spark-1.3-contributor.toml b/providers/opencode-go/models/muse-spark-1.3-contributor.toml new file mode 100644 index 00000000000..df9405a4823 --- /dev/null +++ b/providers/opencode-go/models/muse-spark-1.3-contributor.toml @@ -0,0 +1,33 @@ +# Capability metadata follows Muse Spark 1.2 pending public 1.3 specifications. +# Dates reflect first confirmed availability, not a public Meta announcement. +# https://research.meta.ai/blog/introducing-muse-code-and-muse-spark-1-2 +# https://dev.meta.ai/docs/models +name = "Muse Spark 1.3 Contributor" +description = "Muse Spark 1.3 is a multimodal reasoning model from Meta for coding and agentic workflows." +family = "muse" +release_date = "2026-09-02" +last_updated = "2026-09-02" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high", "xhigh"] }] + +[limit] +context = 1_048_576 +output = 131_072 + +[modalities] +input = ["text", "image", "video", "pdf", "audio"] +output = ["text"] + +[cost] +input = 0.1 +output = 0.2 +cache_read = 0.002 + +[provider] +npm = "@ai-sdk/openai" diff --git a/providers/opencode-go/models/omen-alpha.toml b/providers/opencode-go/models/omen-alpha.toml new file mode 100644 index 00000000000..140090f751a --- /dev/null +++ b/providers/opencode-go/models/omen-alpha.toml @@ -0,0 +1,28 @@ +name = "Omen Alpha" +description = "oH man anothEr aLPha ModEl" +release_date = "2026-09-04" +last_updated = "2026-09-04" +attachment = true +reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "high"] }] +temperature = true +tool_call = true +structured_output = true +open_weights = false +status = "deprecated" + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.2 +output = 0.66 +cache_read = 0.04 + +[limit] +context = 500_000 +output = 128_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/opencode-go/models/qwen3.8-flash.toml b/providers/opencode-go/models/qwen3.8-flash.toml new file mode 100644 index 00000000000..ebfbab557c9 --- /dev/null +++ b/providers/opencode-go/models/qwen3.8-flash.toml @@ -0,0 +1,25 @@ +# https://opencode.ai/docs/go/#endpoints +# https://help.aliyun.com/en/model-studio/anthropic-api-messages +# Toggle (Messages): thinking.type = enabled|disabled +# Effort (Messages): output_config.effort = low|medium|xhigh +base_model = "alibaba/qwen3.8-flash" +temperature = true + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.15 +output = 0.47 +cache_read = 0.016 +cache_write = 0.2 + +[provider] +npm = "@ai-sdk/anthropic" diff --git a/providers/opencode-go/models/qwen3.8-max.toml b/providers/opencode-go/models/qwen3.8-max.toml index 2b3305cff9d..efb0a63581f 100644 --- a/providers/opencode-go/models/qwen3.8-max.toml +++ b/providers/opencode-go/models/qwen3.8-max.toml @@ -1,15 +1,16 @@ -name = "Qwen3.8 Max" +# https://opencode.ai/docs/go/#endpoints +# https://help.aliyun.com/en/model-studio/anthropic-api-messages +# Toggle (Messages): thinking.type = enabled|disabled +# Effort (Messages): output_config.effort = low|medium|xhigh +base_model = "alibaba/qwen3.8-max" description = "2.4-trillion-parameter multimodal flagship for coding, professional work, and long-horizon agentic workflows" family = "qwen3.8-max" -release_date = "2026-08-03" -last_updated = "2026-08-03" -attachment = true -reasoning = true -reasoning_options = [{ type = "toggle" }, { type = "budget_tokens", max = 262_144 }] -temperature = true -tool_call = true +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["low", "medium", "xhigh"] }, + { type = "budget_tokens", max = 262_144 }, +] structured_output = true -open_weights = false [cost] input = 2 @@ -17,10 +18,5 @@ output = 6 cache_read = 0.25 cache_write = 2.5 -[limit] -context = 1_000_000 -output = 131_072 - [modalities] input = ["text", "image", "video"] -output = ["text"] diff --git a/providers/opencode-go/models/space-bunny-free.toml b/providers/opencode-go/models/space-bunny-free.toml new file mode 100644 index 00000000000..6fb0ca2a5eb --- /dev/null +++ b/providers/opencode-go/models/space-bunny-free.toml @@ -0,0 +1,30 @@ +name = "Space Bunny Free" +description = "Anonymous preview reasoning model for coding, agentic tasks, tool use, and multimodal input" +release_date = "2026-09-23" +last_updated = "2026-09-23" + +attachment = true +reasoning = true +reasoning_options = [ + { type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }, +] +tool_call = true +open_weights = false + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 1_048_576 +input = 524_288 +output = 524_288 + +[modalities] +input = ["text", "image", "video"] +output = ["text"] \ No newline at end of file diff --git a/providers/opencode-go/provider.toml b/providers/opencode-go/provider.toml index 833a7cb0002..7ddf38e1f5d 100644 --- a/providers/opencode-go/provider.toml +++ b/providers/opencode-go/provider.toml @@ -8,4 +8,4 @@ npm = "@ai-sdk/openai-compatible" # by the public Zen page. # https://opencode.ai/docs/zen#endpoints api = "https://opencode.ai/zen/go/v1" -doc = "https://opencode.ai/docs/zen" +doc = "https://opencode.ai/docs/go" diff --git a/providers/opencode/models/claude-fable-5-1.toml b/providers/opencode/models/claude-fable-5-1.toml new file mode 100644 index 00000000000..393e9120010 --- /dev/null +++ b/providers/opencode/models/claude-fable-5-1.toml @@ -0,0 +1,14 @@ +base_model = "anthropic/claude-fable-5-1" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 + +[provider] +npm = "@ai-sdk/anthropic" \ No newline at end of file diff --git a/providers/opencode/models/claude-opus-5-5.toml b/providers/opencode/models/claude-opus-5-5.toml new file mode 100644 index 00000000000..e39cc456019 --- /dev/null +++ b/providers/opencode/models/claude-opus-5-5.toml @@ -0,0 +1,12 @@ +# Pricing: https://platform.claude.com/docs/en/models/opus-5-5/overview +base_model = "anthropic/claude-opus-5-5" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 4 +output = 20 +cache_read = 0.2 +cache_write = 5 + +[provider] +npm = "@ai-sdk/anthropic" diff --git a/providers/opencode/models/deepseek-v4-flash-vision-exp.toml b/providers/opencode/models/deepseek-v4-flash-vision-exp.toml new file mode 100644 index 00000000000..f6858d10c75 --- /dev/null +++ b/providers/opencode/models/deepseek-v4-flash-vision-exp.toml @@ -0,0 +1,12 @@ +# Toggle: thinking.type = enabled|disabled +# Effort: reasoning_effort = low|high|max +base_model = "deepseek/deepseek-v4-flash-vision-exp" +reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.14 +output = 0.28 +cache_read = 0.028 diff --git a/providers/opencode/models/deepseek-v4.1-flash.toml b/providers/opencode/models/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..20a4928d010 --- /dev/null +++ b/providers/opencode/models/deepseek-v4.1-flash.toml @@ -0,0 +1,14 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.006 diff --git a/providers/opencode/models/gemini-3.8-flash.toml b/providers/opencode/models/gemini-3.8-flash.toml new file mode 100644 index 00000000000..2f995cd4138 --- /dev/null +++ b/providers/opencode/models/gemini-3.8-flash.toml @@ -0,0 +1,14 @@ +base_model = "google/gemini-3.8-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 1.50 +output = 7.50 +cache_read = 0.15 +input_audio = 1.50 + +[provider] +npm = "@ai-sdk/google" diff --git a/providers/opencode/models/glm-5.3-flash.toml b/providers/opencode/models/glm-5.3-flash.toml new file mode 100644 index 00000000000..828e40e41b9 --- /dev/null +++ b/providers/opencode/models/glm-5.3-flash.toml @@ -0,0 +1,10 @@ +base_model = "zhipuai/glm-5.3-flash" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.03 diff --git a/providers/opencode/models/glm-5.3.toml b/providers/opencode/models/glm-5.3.toml new file mode 100644 index 00000000000..a61a9939174 --- /dev/null +++ b/providers/opencode/models/glm-5.3.toml @@ -0,0 +1,10 @@ +base_model = "zhipuai/glm-5.3" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.26 diff --git a/providers/opencode/models/gpt-5.6-sol.toml b/providers/opencode/models/gpt-5.6-sol.toml index 1aaeeb843ed..f122b60d0fe 100644 --- a/providers/opencode/models/gpt-5.6-sol.toml +++ b/providers/opencode/models/gpt-5.6-sol.toml @@ -1,22 +1,20 @@ -# Source: https://vercel.com/changelog/gpt-5-6-sol-is-50-off-on-ai-gateway-for-the-next-month # List pricing: https://developers.openai.com/api/docs/pricing -# The promotion applies to all token types and long-context tiers through September 18, 2026. base_model = "openai/gpt-5.6-sol" -name = "GPT-5.6 Sol (50% Off)" +name = "GPT-5.6 Sol" reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] [cost] -input = 2 -output = 10 -cache_read = 0.2 -cache_write = 2.5 - -[[cost.tiers]] -tier = { type = "context", size = 272_000 } input = 4 -output = 15 +output = 20 cache_read = 0.4 cache_write = 5 +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 8 +output = 30 +cache_read = 0.8 +cache_write = 10 + [provider] npm = "@ai-sdk/openai" diff --git a/providers/opencode/models/gpt-6-astra.toml b/providers/opencode/models/gpt-6-astra.toml new file mode 100644 index 00000000000..af9ab833561 --- /dev/null +++ b/providers/opencode/models/gpt-6-astra.toml @@ -0,0 +1,18 @@ +base_model = "openai/gpt-6-astra" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 20 +output = 75 +cache_read = 2 +cache_write = 25 + +[provider] +npm = "@ai-sdk/openai" diff --git a/providers/opencode/models/gpt-6-luna.toml b/providers/opencode/models/gpt-6-luna.toml new file mode 100644 index 00000000000..1263a99bdc4 --- /dev/null +++ b/providers/opencode/models/gpt-6-luna.toml @@ -0,0 +1,19 @@ +# Pricing and controls: https://developers.openai.com/api/docs/models/gpt-6-luna +base_model = "openai/gpt-6-luna" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 0.1 +output = 0.5 +cache_read = 0.01 +cache_write = 0.125 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 0.2 +output = 0.75 +cache_read = 0.02 +cache_write = 0.25 + +[provider] +npm = "@ai-sdk/openai" diff --git a/providers/opencode/models/gpt-6-sol.toml b/providers/opencode/models/gpt-6-sol.toml new file mode 100644 index 00000000000..eefd5c4f407 --- /dev/null +++ b/providers/opencode/models/gpt-6-sol.toml @@ -0,0 +1,19 @@ +# Pricing and controls: https://developers.openai.com/api/docs/models/gpt-6-sol +base_model = "openai/gpt-6-sol" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 4 +output = 15 +cache_read = 0.4 +cache_write = 5 + +[provider] +npm = "@ai-sdk/openai" diff --git a/providers/opencode/models/grok-4.7.toml b/providers/opencode/models/grok-4.7.toml new file mode 100644 index 00000000000..e121d9b0cd5 --- /dev/null +++ b/providers/opencode/models/grok-4.7.toml @@ -0,0 +1,21 @@ +# Pricing: 30% off OpenCode Go Grok 4.7 rates, including long-context tiers. +base_model = "xai/grok-4.7" +name = "Grok 4.7 (30% Off)" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh"] + +[cost] +input = 1.4 +output = 4.2 +cache_read = 0.35 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 2.8 +output = 8.4 +cache_read = 0.7 + +[provider] +npm = "@ai-sdk/openai" diff --git a/providers/opencode/models/grok-code.toml b/providers/opencode/models/grok-code.toml index c3a1f2fac08..caf8e8c27ae 100644 --- a/providers/opencode/models/grok-code.toml +++ b/providers/opencode/models/grok-code.toml @@ -3,7 +3,7 @@ description = "Legacy model retained for compatibility with older integrations" family = "grok" release_date = "2025-08-20" last_updated = "2025-08-20" -attachment = true +attachment = false reasoning = true reasoning_options = [] temperature = true diff --git a/providers/opencode/models/hy3-free.toml b/providers/opencode/models/hy3-free.toml index 7b88cc2c0a2..ebf95f43868 100644 --- a/providers/opencode/models/hy3-free.toml +++ b/providers/opencode/models/hy3-free.toml @@ -2,6 +2,7 @@ base_model = "tencent/hy3" name = "Hy3 Free" family = "hy3-free" structured_output = true +status = "deprecated" reasoning_options = [ { type = "toggle" }, diff --git a/providers/opencode/models/jev-1.13-free.toml b/providers/opencode/models/jev-1.13-free.toml new file mode 100644 index 00000000000..3c2a23a4f39 --- /dev/null +++ b/providers/opencode/models/jev-1.13-free.toml @@ -0,0 +1,7 @@ +# Availability: https://opencode.ai/zen/v1/models +base_model = "typesafe/jev-latest" +name = "Jev 1.13 Free" + +[cost] +input = 0 +output = 0 diff --git a/providers/opencode/models/jev-1.13.toml b/providers/opencode/models/jev-1.13.toml new file mode 100644 index 00000000000..c31caeddd67 --- /dev/null +++ b/providers/opencode/models/jev-1.13.toml @@ -0,0 +1,8 @@ +# Availability: https://opencode.ai/zen/v1/models +# Pricing: https://docs.typesafe.ai/models.md +base_model = "typesafe/jev-latest" +name = "Jev 1.13" + +[cost] +input = 0.042 +output = 0 diff --git a/providers/opencode/models/ling-3.0-flash-fin-free.toml b/providers/opencode/models/ling-3.0-flash-fin-free.toml new file mode 100644 index 00000000000..a111395b0d2 --- /dev/null +++ b/providers/opencode/models/ling-3.0-flash-fin-free.toml @@ -0,0 +1,10 @@ +base_model = "inclusionai/ling-3.0-flash-fin" +name = "Ling 3.0 Flash Fin Free" +temperature = true +structured_output = false +reasoning_options = [{ type = "toggle" }] + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/opencode/models/mimo-v2.5-free.toml b/providers/opencode/models/mimo-v2.5-free.toml index 3a1d9a269a6..d799e874914 100644 --- a/providers/opencode/models/mimo-v2.5-free.toml +++ b/providers/opencode/models/mimo-v2.5-free.toml @@ -10,6 +10,7 @@ temperature = true tool_call = true knowledge = "2024-12" open_weights = true +status = "deprecated" [interleaved] field = "reasoning_content" diff --git a/providers/opencode/models/mimo-v2.6-flash-free.toml b/providers/opencode/models/mimo-v2.6-flash-free.toml new file mode 100644 index 00000000000..753e0075aa2 --- /dev/null +++ b/providers/opencode/models/mimo-v2.6-flash-free.toml @@ -0,0 +1,15 @@ +base_model = "xiaomi/mimo-v2.6-flash" +name = "MiMo-V2.6-Flash Free" +reasoning_options = [] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 + +[limit] +context = 200_000 +output = 32_000 diff --git a/providers/opencode/models/muse-spark-1.3-contributor-free.toml b/providers/opencode/models/muse-spark-1.3-contributor-free.toml new file mode 100644 index 00000000000..829fdeae0b1 --- /dev/null +++ b/providers/opencode/models/muse-spark-1.3-contributor-free.toml @@ -0,0 +1,33 @@ +# Capability metadata follows Muse Spark 1.2 pending public 1.3 specifications. +# Dates reflect first confirmed availability, not a public Meta announcement. +# https://research.meta.ai/blog/introducing-muse-code-and-muse-spark-1-2 +# https://dev.meta.ai/docs/models +name = "Muse Spark 1.3 Free" +description = "Muse Spark 1.3 is a multimodal reasoning model from Meta for coding and agentic workflows." +family = "muse-free" +release_date = "2026-09-02" +last_updated = "2026-09-02" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high", "xhigh"] }] + +[limit] +context = 1_048_576 +output = 131_072 + +[modalities] +input = ["text", "image", "video", "pdf", "audio"] +output = ["text"] + +[cost] +input = 0 +output = 0 +cache_read = 0 + +[provider] +npm = "@ai-sdk/openai" diff --git a/providers/opencode/models/muse-spark-1.3.toml b/providers/opencode/models/muse-spark-1.3.toml new file mode 100644 index 00000000000..80f0b886543 --- /dev/null +++ b/providers/opencode/models/muse-spark-1.3.toml @@ -0,0 +1,10 @@ +base_model = "meta/muse-spark-1.3" +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high", "xhigh"] }] + +[cost] +input = 1.25 +output = 4.25 +cache_read = 0.15 + +[provider] +npm = "@ai-sdk/openai" diff --git a/providers/opencode/models/qwen3.8-flash.toml b/providers/opencode/models/qwen3.8-flash.toml new file mode 100644 index 00000000000..1cd079b5cb3 --- /dev/null +++ b/providers/opencode/models/qwen3.8-flash.toml @@ -0,0 +1,25 @@ +# https://opencode.ai/docs/go/#endpoints +# https://help.aliyun.com/en/model-studio/anthropic-api-messages +# Toggle (Messages): thinking.type = enabled|disabled +# Effort (Messages): output_config.effort = low|medium|xhigh +base_model = "alibaba/qwen3.8-flash" +temperature = true + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.15 +output = 0.47 +cache_read = 0.016 +cache_write = 0.2 + +[provider] +npm = "@ai-sdk/anthropic" \ No newline at end of file diff --git a/providers/opencode/models/space-bunny-free.toml b/providers/opencode/models/space-bunny-free.toml new file mode 100644 index 00000000000..6fb0ca2a5eb --- /dev/null +++ b/providers/opencode/models/space-bunny-free.toml @@ -0,0 +1,30 @@ +name = "Space Bunny Free" +description = "Anonymous preview reasoning model for coding, agentic tasks, tool use, and multimodal input" +release_date = "2026-09-23" +last_updated = "2026-09-23" + +attachment = true +reasoning = true +reasoning_options = [ + { type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }, +] +tool_call = true +open_weights = false + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 1_048_576 +input = 524_288 +output = 524_288 + +[modalities] +input = ["text", "image", "video"] +output = ["text"] \ No newline at end of file diff --git a/providers/openreason/logo.svg b/providers/openreason/logo.svg new file mode 100644 index 00000000000..7484a9dd53e --- /dev/null +++ b/providers/openreason/logo.svg @@ -0,0 +1,8 @@ + + OpenReason + + + diff --git a/providers/openreason/models/deepseek-ai/deepseek-v4-flash-0731.toml b/providers/openreason/models/deepseek-ai/deepseek-v4-flash-0731.toml new file mode 100644 index 00000000000..919917925e7 --- /dev/null +++ b/providers/openreason/models/deepseek-ai/deepseek-v4-flash-0731.toml @@ -0,0 +1,19 @@ +# OpenReason routes deepseek-ai/deepseek-v4-flash-0731 through Baseten by +# default (endpoint pin `@baseten-us`). OpenReason forwards top-level +# `reasoning_effort` verbatim; the accepted values are +# `none | minimal | low | medium | high (default) | xhigh | max`, matching +# Baseten's documented surface. Reasoning output is returned in the +# `reasoning_content` field. +# https://openreason.app · https://docs.baseten.co/inference/model-apis/reasoning +base_model = "deepseek/deepseek-v4-flash-0731" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.1371 +output = 0.2743 + +[interleaved] +field = "reasoning_content" diff --git a/providers/openreason/models/moonshotai/kimi-k2.7-code.toml b/providers/openreason/models/moonshotai/kimi-k2.7-code.toml new file mode 100644 index 00000000000..55f9a8e73b5 --- /dev/null +++ b/providers/openreason/models/moonshotai/kimi-k2.7-code.toml @@ -0,0 +1,23 @@ +# OpenReason routes moonshotai/kimi-k2.7-code through Baseten by default +# (endpoint pin `@baseten-us`). The upstream accepts opt-in via +# `chat_template_args.enable_thinking = true`; OpenReason forwards the value +# verbatim. No off behavior, effort values, or reasoning-token budget are +# documented. Reasoning output is returned in the `reasoning_content` field. +# The Baseten route respects temperature, so we override the canonical +# `false` to `true` for this host. +# https://openreason.app · https://docs.baseten.co/inference/model-apis/reasoning +base_model = "moonshotai/kimi-k2.7-code" +temperature = true + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 1.0022 +output = 4.22 + +[interleaved] +field = "reasoning_content" + +[modalities] +input = ["text", "image"] diff --git a/providers/openreason/models/openai/gpt-oss-120b.toml b/providers/openreason/models/openai/gpt-oss-120b.toml new file mode 100644 index 00000000000..fff56114067 --- /dev/null +++ b/providers/openreason/models/openai/gpt-oss-120b.toml @@ -0,0 +1,18 @@ +# OpenReason routes openai/gpt-oss-120b across multiple upstream inference +# providers (Baseten, Nscale, Nebius, Scaleway). OpenReason forwards top-level +# `reasoning_effort` verbatim; the published values are the safe intersection +# accepted at every routed endpoint (`low | medium | high`). Baseten's own +# endpoint additionally accepts `none | minimal | xhigh | max` — customers +# pinning `@baseten-us` may send those values, but OpenReason does not +# advertise them as universally accepted. Reasoning output is returned in +# the `reasoning_content` field. +# https://openreason.app +base_model = "openai/gpt-oss-120b" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[cost] +input = 0.1055 +output = 0.422 + +[interleaved] +field = "reasoning_content" diff --git a/providers/openreason/provider.toml b/providers/openreason/provider.toml new file mode 100644 index 00000000000..d7d794a0e56 --- /dev/null +++ b/providers/openreason/provider.toml @@ -0,0 +1,9 @@ +name = "OpenReason" +# Sovereignty-aware OpenAI-compatible router across US and EU inference. +# Endpoints are pinned via the `@` suffix on the model slug +# (e.g. moonshotai/kimi-k2.7-code@baseten-us). See docs for the full list. +# https://openreason.app +env = ["OPENREASON_API_KEY"] +npm = "@ai-sdk/openai-compatible" +api = "https://api.openreason.app/v1" +doc = "https://openreason.app/docs" diff --git a/providers/openrouter/models/aion-labs/aion-3.5-mini.toml b/providers/openrouter/models/aion-labs/aion-3.5-mini.toml new file mode 100644 index 00000000000..a7b06af9a33 --- /dev/null +++ b/providers/openrouter/models/aion-labs/aion-3.5-mini.toml @@ -0,0 +1,27 @@ +name = "Aion 3.5 Mini" +description = "Efficient model for low-latency assistance, extraction, and routine automation" +release_date = "2026-09-23" +last_updated = "2026-09-23" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.7 +output = 1.4 +cache_read = 0.18 + +[limit] +context = 262_144 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/openrouter/models/aion-labs/aion-3.5.toml b/providers/openrouter/models/aion-labs/aion-3.5.toml new file mode 100644 index 00000000000..1dfb66964e7 --- /dev/null +++ b/providers/openrouter/models/aion-labs/aion-3.5.toml @@ -0,0 +1,27 @@ +name = "Aion 3.5" +description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" +release_date = "2026-09-23" +last_updated = "2026-09-23" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 3 +output = 6 +cache_read = 0.75 + +[limit] +context = 262_144 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/openrouter/models/allenai/olmo-3-32b-think.toml b/providers/openrouter/models/allenai/olmo-3-32b-think.toml deleted file mode 100644 index e9191571fa0..00000000000 --- a/providers/openrouter/models/allenai/olmo-3-32b-think.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Olmo 3 32B Think" -description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" -family = "allenai" -release_date = "2025-11-21" -last_updated = "2025-11-21" -attachment = false -reasoning = true -temperature = true -tool_call = false -structured_output = true -open_weights = true -reasoning_options = [] - -[cost] -input = 0.15 -output = 0.5 - -[limit] -context = 65_536 -output = 58_982 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/openrouter/models/amazon/nova-2-lite-v1.toml b/providers/openrouter/models/amazon/nova-2-lite-v1.toml index 1b51e0c4f1a..ffb27f523af 100644 --- a/providers/openrouter/models/amazon/nova-2-lite-v1.toml +++ b/providers/openrouter/models/amazon/nova-2-lite-v1.toml @@ -1,4 +1,5 @@ -reasoning_options = [] +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Nova 2 Lite" description = "Multimodal reasoning model for visual analysis, planning, and tool use" family = "nova" @@ -11,6 +12,9 @@ tool_call = true structured_output = false open_weights = false +[[reasoning_options]] +type = "toggle" + [cost] input = 0.3 output = 2.5 diff --git a/providers/openrouter/models/anthracite-org/magnum-v4-72b.toml b/providers/openrouter/models/anthracite-org/magnum-v4-72b.toml index e107403b036..8dbd3cf8d96 100644 --- a/providers/openrouter/models/anthracite-org/magnum-v4-72b.toml +++ b/providers/openrouter/models/anthracite-org/magnum-v4-72b.toml @@ -11,7 +11,7 @@ knowledge = "2024-06-30" open_weights = true [cost] -input = 3 +input = 2.5 output = 5 [limit] diff --git a/providers/openrouter/models/anthropic/claude-fable-5.1.toml b/providers/openrouter/models/anthropic/claude-fable-5.1.toml new file mode 100644 index 00000000000..9f6a8f9989c --- /dev/null +++ b/providers/openrouter/models/anthropic/claude-fable-5.1.toml @@ -0,0 +1,13 @@ +base_model = "anthropic/claude-fable-5-1" +description = "Claude model for creative writing, analysis, and controlled agent workflows" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 diff --git a/providers/openrouter/models/anthropic/claude-haiku-4.5.toml b/providers/openrouter/models/anthropic/claude-haiku-4.5.toml index af225d0ca15..187e02907a2 100644 --- a/providers/openrouter/models/anthropic/claude-haiku-4.5.toml +++ b/providers/openrouter/models/anthropic/claude-haiku-4.5.toml @@ -1,14 +1,11 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "anthropic/claude-haiku-4-5" structured_output = true [[reasoning_options]] type = "toggle" -[[reasoning_options]] -type = "budget_tokens" -min = 1_024 -max = 63_999 - [cost] input = 1 output = 5 diff --git a/providers/openrouter/models/anthropic/claude-opus-4.1.toml b/providers/openrouter/models/anthropic/claude-opus-4.1.toml index e8fcf991080..e2af373bed2 100644 --- a/providers/openrouter/models/anthropic/claude-opus-4.1.toml +++ b/providers/openrouter/models/anthropic/claude-opus-4.1.toml @@ -1,14 +1,11 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "anthropic/claude-opus-4-1" structured_output = false [[reasoning_options]] type = "toggle" -[[reasoning_options]] -type = "budget_tokens" -min = 1_024 -max = 31_999 - [cost] input = 15 output = 75 diff --git a/providers/openrouter/models/anthropic/claude-opus-4.5.toml b/providers/openrouter/models/anthropic/claude-opus-4.5.toml index 5199bb685e2..28abffd9a66 100644 --- a/providers/openrouter/models/anthropic/claude-opus-4.5.toml +++ b/providers/openrouter/models/anthropic/claude-opus-4.5.toml @@ -1,18 +1,11 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "anthropic/claude-opus-4-5" structured_output = true [[reasoning_options]] type = "toggle" -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] - -[[reasoning_options]] -type = "budget_tokens" -min = 1_024 -max = 63_999 - [cost] input = 5 output = 25 diff --git a/providers/openrouter/models/anthropic/claude-opus-4.7-fast.toml b/providers/openrouter/models/anthropic/claude-opus-4.7-fast.toml deleted file mode 100644 index 78269e8a76d..00000000000 --- a/providers/openrouter/models/anthropic/claude-opus-4.7-fast.toml +++ /dev/null @@ -1,19 +0,0 @@ -# This route maps effort through top-level `verbosity`, not `reasoning.effort`. -# https://openrouter.ai/docs/api/reference/parameters#verbosity (accessed 2026-06-25) -base_model = "anthropic/claude-opus-4-7" -name = "Claude Opus 4.7 (Fast)" -description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents" -structured_output = true - -[[reasoning_options]] -type = "toggle" - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high", "xhigh", "max"] - -[cost] -input = 30 -output = 150 -cache_read = 3 -cache_write = 37.5 diff --git a/providers/openrouter/models/anthropic/claude-opus-4.8-fast.toml b/providers/openrouter/models/anthropic/claude-opus-4.8-fast.toml deleted file mode 100644 index 07ca464df48..00000000000 --- a/providers/openrouter/models/anthropic/claude-opus-4.8-fast.toml +++ /dev/null @@ -1,19 +0,0 @@ -# This route maps effort through top-level `verbosity`, not `reasoning.effort`. -# https://openrouter.ai/docs/api/reference/parameters#verbosity (accessed 2026-06-25) -base_model = "anthropic/claude-opus-4-8" -name = "Claude Opus 4.8 (Fast)" -description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents" -structured_output = true - -[[reasoning_options]] -type = "toggle" - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high", "xhigh", "max"] - -[cost] -input = 10 -output = 50 -cache_read = 1 -cache_write = 12.5 diff --git a/providers/openrouter/models/anthropic/claude-opus-4.toml b/providers/openrouter/models/anthropic/claude-opus-4.toml deleted file mode 100644 index 53e62ce8f24..00000000000 --- a/providers/openrouter/models/anthropic/claude-opus-4.toml +++ /dev/null @@ -1,27 +0,0 @@ -reasoning_options = [{ type = "toggle" }, { type = "budget_tokens", min = 1024, max = 31999 }] -name = "Claude Opus 4" -description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents" -family = "claude-opus" -release_date = "2025-05-22" -last_updated = "2025-05-22" -attachment = true -reasoning = true -temperature = true -tool_call = true -structured_output = false -knowledge = "2025-01-31" -open_weights = false - -[cost] -input = 15 -output = 75 -cache_read = 1.5 -cache_write = 18.75 - -[limit] -context = 200_000 -output = 32_000 - -[modalities] -input = ["image", "text", "pdf"] -output = ["text"] diff --git a/providers/openrouter/models/anthropic/claude-opus-5-fast.toml b/providers/openrouter/models/anthropic/claude-opus-5-fast.toml deleted file mode 100644 index 6d282fa6b32..00000000000 --- a/providers/openrouter/models/anthropic/claude-opus-5-fast.toml +++ /dev/null @@ -1,17 +0,0 @@ -base_model = "anthropic/claude-opus-5" -name = "Claude Opus 5 (Fast)" -description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents" -structured_output = true - -[[reasoning_options]] -type = "toggle" - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high", "xhigh", "max"] - -[cost] -input = 10 -output = 50 -cache_read = 1 -cache_write = 12.5 diff --git a/providers/openrouter/models/anthropic/claude-opus-5.5.toml b/providers/openrouter/models/anthropic/claude-opus-5.5.toml new file mode 100644 index 00000000000..70709244ff6 --- /dev/null +++ b/providers/openrouter/models/anthropic/claude-opus-5.5.toml @@ -0,0 +1,14 @@ +base_model = "anthropic/claude-opus-5-5" +description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents" +temperature = true +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 4 +output = 20 +cache_read = 0.2 +cache_write = 5 diff --git a/providers/openrouter/models/anthropic/claude-sonnet-4.5.toml b/providers/openrouter/models/anthropic/claude-sonnet-4.5.toml index b8f2ac6f412..e6f4db6ea47 100644 --- a/providers/openrouter/models/anthropic/claude-sonnet-4.5.toml +++ b/providers/openrouter/models/anthropic/claude-sonnet-4.5.toml @@ -1,14 +1,11 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "anthropic/claude-sonnet-4-5" structured_output = true [[reasoning_options]] type = "toggle" -[[reasoning_options]] -type = "budget_tokens" -min = 1_024 -max = 63_999 - [cost] input = 3 output = 15 diff --git a/providers/openrouter/models/anthropic/claude-sonnet-4.toml b/providers/openrouter/models/anthropic/claude-sonnet-4.toml index 7dcce2aabf0..b7b54a299a9 100644 --- a/providers/openrouter/models/anthropic/claude-sonnet-4.toml +++ b/providers/openrouter/models/anthropic/claude-sonnet-4.toml @@ -1,4 +1,5 @@ -reasoning_options = [{ type = "toggle" }, { type = "budget_tokens", min = 1024, max = 63999 }] +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Claude Sonnet 4" description = "Balanced Claude model for coding, analysis, agent workflows, and cost control" family = "claude-sonnet" @@ -12,6 +13,9 @@ structured_output = false knowledge = "2025-01-31" open_weights = false +[[reasoning_options]] +type = "toggle" + [cost] input = 3 output = 15 @@ -26,7 +30,7 @@ cache_read = 0.6 cache_write = 7.5 [limit] -context = 1_000_000 +context = 200_000 output = 64_000 [modalities] diff --git a/providers/openrouter/models/arcee-ai/trinity-large-thinking.toml b/providers/openrouter/models/arcee-ai/trinity-large-thinking.toml index 4fcf49f5d9d..303c0f58cee 100644 --- a/providers/openrouter/models/arcee-ai/trinity-large-thinking.toml +++ b/providers/openrouter/models/arcee-ai/trinity-large-thinking.toml @@ -1,12 +1,12 @@ base_model = "arcee-ai/trinity-large-thinking" -structured_output = true +structured_output = false reasoning_options = [] [cost] -input = 0.22 -output = 0.85 +input = 0.25 +output = 0.8 cache_read = 0.06 [limit] context = 262_144 -output = 235_929 +output = 80_000 diff --git a/providers/openrouter/models/arcee-ai/virtuoso-large.toml b/providers/openrouter/models/arcee-ai/virtuoso-large.toml deleted file mode 100644 index 87f8e66b8db..00000000000 --- a/providers/openrouter/models/arcee-ai/virtuoso-large.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Virtuoso Large" -description = "Flagship model for demanding analysis, coding, and production agent workflows" -release_date = "2025-05-05" -last_updated = "2025-05-05" -attachment = false -reasoning = false -temperature = true -tool_call = true -structured_output = false -knowledge = "2025-03-31" -open_weights = false - -[cost] -input = 0.75 -output = 1.2 - -[limit] -context = 131_072 -output = 64_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/openrouter/models/baidu/ernie-4.5-vl-424b-a47b.toml b/providers/openrouter/models/baidu/ernie-4.5-vl-424b-a47b.toml index 9613f948a58..ca55754cdf6 100644 --- a/providers/openrouter/models/baidu/ernie-4.5-vl-424b-a47b.toml +++ b/providers/openrouter/models/baidu/ernie-4.5-vl-424b-a47b.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "ERNIE 4.5 VL 424B A47B " description = "Multimodal reasoning model for visual analysis, planning, and tool use" family = "ernie" @@ -10,7 +12,9 @@ tool_call = false structured_output = false knowledge = "2025-03-31" open_weights = true -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 0.42 diff --git a/providers/openrouter/models/bytedance-seed/seed-1.6-flash.toml b/providers/openrouter/models/bytedance-seed/seed-1.6-flash.toml index 8b41db7edd3..fc1a19bfeb6 100644 --- a/providers/openrouter/models/bytedance-seed/seed-1.6-flash.toml +++ b/providers/openrouter/models/bytedance-seed/seed-1.6-flash.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Seed 1.6 Flash" description = "Multimodal reasoning model for visual analysis, planning, and tool use" family = "seed" @@ -9,7 +11,9 @@ temperature = true tool_call = true structured_output = true open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 0.075 diff --git a/providers/openrouter/models/bytedance-seed/seed-1.6.toml b/providers/openrouter/models/bytedance-seed/seed-1.6.toml index a1f8f345f22..9790f2d6762 100644 --- a/providers/openrouter/models/bytedance-seed/seed-1.6.toml +++ b/providers/openrouter/models/bytedance-seed/seed-1.6.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Seed 1.6" description = "Multimodal reasoning model for visual analysis, planning, and tool use" family = "seed" @@ -9,7 +11,9 @@ temperature = true tool_call = true structured_output = true open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 0.25 diff --git a/providers/openrouter/models/bytedance-seed/seed-2-1-turbo.toml b/providers/openrouter/models/bytedance-seed/seed-2-1-turbo.toml index 37e4e63fa34..d129903d8f1 100644 --- a/providers/openrouter/models/bytedance-seed/seed-2-1-turbo.toml +++ b/providers/openrouter/models/bytedance-seed/seed-2-1-turbo.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Seed 2.1 Turbo" description = "Multimodal reasoning model for visual analysis, planning, and tool use" family = "seed" @@ -9,7 +11,9 @@ temperature = true tool_call = true structured_output = true open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 0.5 diff --git a/providers/openrouter/models/bytedance-seed/seed-2.0-lite.toml b/providers/openrouter/models/bytedance-seed/seed-2.0-lite.toml index b86b4bc5916..33cfe7cf3ab 100644 --- a/providers/openrouter/models/bytedance-seed/seed-2.0-lite.toml +++ b/providers/openrouter/models/bytedance-seed/seed-2.0-lite.toml @@ -1,6 +1,7 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "bytedance-seed/seed-2.0-lite" description = "Multimodal reasoning model for visual analysis, planning, and tool use" -structured_output = true [[reasoning_options]] type = "toggle" diff --git a/providers/openrouter/models/bytedance-seed/seed-2.0-mini.toml b/providers/openrouter/models/bytedance-seed/seed-2.0-mini.toml index e07bb957bbd..abe379d9357 100644 --- a/providers/openrouter/models/bytedance-seed/seed-2.0-mini.toml +++ b/providers/openrouter/models/bytedance-seed/seed-2.0-mini.toml @@ -1,6 +1,7 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "bytedance-seed/seed-2.0-mini" description = "Multimodal reasoning model for visual analysis, planning, and tool use" -structured_output = true [[reasoning_options]] type = "toggle" diff --git a/providers/openrouter/models/cohere/command-a-plus.toml b/providers/openrouter/models/cohere/command-a-plus.toml new file mode 100644 index 00000000000..a3ee649020e --- /dev/null +++ b/providers/openrouter/models/cohere/command-a-plus.toml @@ -0,0 +1,29 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens +name = "Command A+" +description = "Cohere command model for multilingual enterprise agents, tools, and chat" +family = "command-a" +release_date = "2026-09-22" +last_updated = "2026-09-22" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.3 +output = 1.5 +cache_read = 0.15 + +[limit] +context = 192_000 +output = 64_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/openrouter/models/cohere/north-mini-code:free.toml b/providers/openrouter/models/cohere/north-mini-code:free.toml index 8616b407eae..48751d38e9d 100644 --- a/providers/openrouter/models/cohere/north-mini-code:free.toml +++ b/providers/openrouter/models/cohere/north-mini-code:free.toml @@ -1,6 +1,7 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "North Mini Code (free)" description = "Cohere coding model for practical software engineering and agentic edits" -reasoning_options = [] family = "north" release_date = "2026-06-17" last_updated = "2026-06-17" @@ -11,6 +12,9 @@ tool_call = true structured_output = false open_weights = true +[[reasoning_options]] +type = "toggle" + [cost] input = 0 output = 0 diff --git a/providers/openrouter/models/deepseek/deepseek-chat-v3.1.toml b/providers/openrouter/models/deepseek/deepseek-chat-v3.1.toml index 139b9db9f6e..24302ed5e58 100644 --- a/providers/openrouter/models/deepseek/deepseek-chat-v3.1.toml +++ b/providers/openrouter/models/deepseek/deepseek-chat-v3.1.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "DeepSeek V3.1" description = "DeepSeek chat model for instruction following, coding, and analysis" family = "deepseek" @@ -15,13 +17,13 @@ open_weights = true type = "toggle" [cost] -input = 0.55 -output = 1.65 -cache_read = 0.55 +input = 0.25 +output = 0.95 +cache_read = 0.13 [limit] context = 163_840 -output = 144_900 +output = 32_768 [modalities] input = ["text"] diff --git a/providers/openrouter/models/deepseek/deepseek-chat.toml b/providers/openrouter/models/deepseek/deepseek-chat.toml index a01fc1ca488..7768aadee98 100644 --- a/providers/openrouter/models/deepseek/deepseek-chat.toml +++ b/providers/openrouter/models/deepseek/deepseek-chat.toml @@ -3,9 +3,9 @@ attachment = false structured_output = true [cost] -input = 0.2574 -output = 1.0287 +input = 0.32 +output = 0.89 [limit] context = 163_840 -output = 16_000 +output = 16_384 diff --git a/providers/openrouter/models/deepseek/deepseek-r1-distill-llama-70b.toml b/providers/openrouter/models/deepseek/deepseek-r1-distill-llama-70b.toml index a27a50348f9..9d94410007a 100644 --- a/providers/openrouter/models/deepseek/deepseek-r1-distill-llama-70b.toml +++ b/providers/openrouter/models/deepseek/deepseek-r1-distill-llama-70b.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "R1 Distill Llama 70B" description = "DeepSeek reasoning model for multi-step analysis, math, coding, and tools" family = "deepseek-thinking" @@ -10,7 +12,9 @@ tool_call = false structured_output = false knowledge = "2024-07-31" open_weights = true -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 0.8 diff --git a/providers/openrouter/models/deepseek/deepseek-r1.toml b/providers/openrouter/models/deepseek/deepseek-r1.toml index 69fd9fdd280..08925e91e21 100644 --- a/providers/openrouter/models/deepseek/deepseek-r1.toml +++ b/providers/openrouter/models/deepseek/deepseek-r1.toml @@ -1,5 +1,5 @@ base_model = "deepseek/deepseek-r1" -structured_output = true +structured_output = false reasoning_options = [] [cost] diff --git a/providers/openrouter/models/deepseek/deepseek-v3.2.toml b/providers/openrouter/models/deepseek/deepseek-v3.2.toml index 5b00049c654..80cd9bc29e1 100644 --- a/providers/openrouter/models/deepseek/deepseek-v3.2.toml +++ b/providers/openrouter/models/deepseek/deepseek-v3.2.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "deepseek/deepseek-v3.2" description = "DeepSeek chat model for instruction following, coding, and analysis" @@ -5,10 +7,10 @@ description = "DeepSeek chat model for instruction following, coding, and analys type = "toggle" [cost] -input = 0.26 -output = 0.38 -cache_read = 0.13 +input = 0.269 +output = 0.4 +cache_read = 0.1345 [limit] context = 163_840 -output = 147_456 +output = 65_536 diff --git a/providers/openrouter/models/deepseek/deepseek-v4-flash-0731.toml b/providers/openrouter/models/deepseek/deepseek-v4-flash-0731.toml index 5211487ab5f..3de935d9215 100644 --- a/providers/openrouter/models/deepseek/deepseek-v4-flash-0731.toml +++ b/providers/openrouter/models/deepseek/deepseek-v4-flash-0731.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "deepseek/deepseek-v4-flash-0731" [[reasoning_options]] @@ -8,9 +10,9 @@ type = "effort" values = ["low", "high", "max"] [cost] -input = 0.06 -output = 0.12 -cache_read = 0.012 +input = 0.04 +output = 0.64 +cache_read = 0.016 [limit] context = 1_310_720 diff --git a/providers/openrouter/models/deepseek/deepseek-v4-flash-vision-exp.toml b/providers/openrouter/models/deepseek/deepseek-v4-flash-vision-exp.toml index 55662d5ab50..2186c60b6fb 100644 --- a/providers/openrouter/models/deepseek/deepseek-v4-flash-vision-exp.toml +++ b/providers/openrouter/models/deepseek/deepseek-v4-flash-vision-exp.toml @@ -1,6 +1,7 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "deepseek/deepseek-v4-flash-vision-exp" description = "Fast DeepSeek model for efficient chat, coding help, and agent loops" -structured_output = false [[reasoning_options]] type = "toggle" @@ -16,3 +17,4 @@ cache_read = 0.007 [limit] context = 1_048_576 +output = 943_718 diff --git a/providers/openrouter/models/deepseek/deepseek-v4-flash.toml b/providers/openrouter/models/deepseek/deepseek-v4-flash.toml index 38f2e9b4e85..b4a73a16375 100644 --- a/providers/openrouter/models/deepseek/deepseek-v4-flash.toml +++ b/providers/openrouter/models/deepseek/deepseek-v4-flash.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "deepseek/deepseek-v4-flash" [interleaved] @@ -11,9 +13,9 @@ type = "effort" values = ["high", "xhigh"] [cost] -input = 0.08106 -output = 0.16212 -cache_read = 0.016212 +input = 0.08246 +output = 0.16492 +cache_read = 0.016492 [limit] context = 1_048_576 diff --git a/providers/openrouter/models/deepseek/deepseek-v4-pro-0813.toml b/providers/openrouter/models/deepseek/deepseek-v4-pro-0813.toml index 0442fcfba2d..7d6b9d6f45e 100644 --- a/providers/openrouter/models/deepseek/deepseek-v4-pro-0813.toml +++ b/providers/openrouter/models/deepseek/deepseek-v4-pro-0813.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "deepseek/deepseek-v4-pro-0813" [[reasoning_options]] @@ -8,10 +10,9 @@ type = "effort" values = ["low", "high", "max"] [cost] -input = 1.32 -output = 3.96 -cache_read = 0.044 +input = 0.462 +output = 1.386 +cache_read = 0.0154 [limit] context = 1_048_576 -output = 943_717 diff --git a/providers/openrouter/models/deepseek/deepseek-v4-pro.toml b/providers/openrouter/models/deepseek/deepseek-v4-pro.toml index bd9f599978c..2a431cd5648 100644 --- a/providers/openrouter/models/deepseek/deepseek-v4-pro.toml +++ b/providers/openrouter/models/deepseek/deepseek-v4-pro.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "deepseek/deepseek-v4-pro" [interleaved] @@ -11,9 +13,9 @@ type = "effort" values = ["high", "xhigh"] [cost] -input = 0.87 -output = 1.74 -cache_read = 0.0725 +input = 0.951432 +output = 1.902864 +cache_read = 0.079286 [limit] context = 1_048_576 diff --git a/providers/openrouter/models/deepseek/deepseek-v4.1-flash.toml b/providers/openrouter/models/deepseek/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..ee75b6ad088 --- /dev/null +++ b/providers/openrouter/models/deepseek/deepseek-v4.1-flash.toml @@ -0,0 +1,20 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens +base_model = "deepseek/deepseek-v4.1-flash" +description = "Fast DeepSeek model for efficient chat, coding help, and agent loops" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.1 +output = 0.5 +cache_read = 0.01 + +[limit] +context = 1_048_576 +output = 943_718 diff --git a/providers/openrouter/models/dots-studio/dots-3-note-preview:free.toml b/providers/openrouter/models/dots-studio/dots-3-note-preview:free.toml index c4cfb09df88..2de0d76750a 100644 --- a/providers/openrouter/models/dots-studio/dots-3-note-preview:free.toml +++ b/providers/openrouter/models/dots-studio/dots-3-note-preview:free.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Dots3-Note Preview (free)" description = "Multimodal reasoning model for visual analysis, planning, and tool use" release_date = "2026-08-14" @@ -8,7 +10,9 @@ temperature = true tool_call = true structured_output = true open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 0 diff --git a/providers/openrouter/models/google/gemini-2.5-flash-lite.toml b/providers/openrouter/models/google/gemini-2.5-flash-lite.toml index dfb707f9360..f5cc3f5c707 100644 --- a/providers/openrouter/models/google/gemini-2.5-flash-lite.toml +++ b/providers/openrouter/models/google/gemini-2.5-flash-lite.toml @@ -1,13 +1,10 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "google/gemini-2.5-flash-lite" [[reasoning_options]] type = "toggle" -[[reasoning_options]] -type = "budget_tokens" -min = 512 -max = 24_576 - [cost] input = 0.1 output = 0.4 diff --git a/providers/openrouter/models/google/gemini-2.5-flash.toml b/providers/openrouter/models/google/gemini-2.5-flash.toml index b465dc01456..9a8ff7ace41 100644 --- a/providers/openrouter/models/google/gemini-2.5-flash.toml +++ b/providers/openrouter/models/google/gemini-2.5-flash.toml @@ -1,13 +1,10 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "google/gemini-2.5-flash" [[reasoning_options]] type = "toggle" -[[reasoning_options]] -type = "budget_tokens" -min = 0 -max = 24_576 - [cost] input = 0.3 output = 2.5 diff --git a/providers/openrouter/models/google/gemini-2.5-pro-preview-05-06.toml b/providers/openrouter/models/google/gemini-2.5-pro-preview-05-06.toml deleted file mode 100644 index 658c2b8b4b9..00000000000 --- a/providers/openrouter/models/google/gemini-2.5-pro-preview-05-06.toml +++ /dev/null @@ -1,38 +0,0 @@ -name = "Gemini 2.5 Pro Preview 05-06" -description = "Advanced Gemini model for complex reasoning, coding, and multimodal analysis" -family = "gemini-pro" -release_date = "2025-05-07" -last_updated = "2025-05-07" -attachment = true -reasoning = true -temperature = true -tool_call = true -structured_output = true -knowledge = "2025-01-31" -open_weights = false - -[[reasoning_options]] -type = "budget_tokens" -min = 128 -max = 32_768 - -[cost] -input = 1.25 -output = 10 -reasoning = 10 -cache_read = 0.125 -cache_write = 0.375 - -[[cost.tiers]] -tier = { type = "context", size = 200_000 } -input = 2.5 -output = 15 -cache_read = 0.25 - -[limit] -context = 1_048_576 -output = 65_535 - -[modalities] -input = ["text", "image", "pdf", "audio", "video"] -output = ["text"] diff --git a/providers/openrouter/models/google/gemini-3.7-flash.toml b/providers/openrouter/models/google/gemini-3.7-flash.toml index aca24855c7b..db204acd0ef 100644 --- a/providers/openrouter/models/google/gemini-3.7-flash.toml +++ b/providers/openrouter/models/google/gemini-3.7-flash.toml @@ -6,8 +6,8 @@ type = "effort" values = ["low", "medium", "high"] [cost] -input = 0.375 -output = 1.875 -reasoning = 1.875 -cache_read = 0.0375 -cache_write = 0.020833 +input = 0.75 +output = 3.75 +reasoning = 3.75 +cache_read = 0.075 +cache_write = 0.041667 diff --git a/providers/openrouter/models/google/gemini-3.8-flash.toml b/providers/openrouter/models/google/gemini-3.8-flash.toml new file mode 100644 index 00000000000..ead931aabb0 --- /dev/null +++ b/providers/openrouter/models/google/gemini-3.8-flash.toml @@ -0,0 +1,13 @@ +base_model = "google/gemini-3.8-flash" +description = "Fast Gemini model balancing multimodal reasoning, tool use, and cost" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.75 +output = 3.75 +reasoning = 3.75 +cache_read = 0.075 +cache_write = 0.041667 diff --git a/providers/openrouter/models/google/gemma-3-12b-it.toml b/providers/openrouter/models/google/gemma-3-12b-it.toml index 8db8ed43f0b..df1bb400e98 100644 --- a/providers/openrouter/models/google/gemma-3-12b-it.toml +++ b/providers/openrouter/models/google/gemma-3-12b-it.toml @@ -1,24 +1,10 @@ -name = "Gemma 3 12B" +base_model = "google/gemma-3-12b-it" description = "Open Gemma instruction model for efficient chat and self-hosted deployments" -family = "gemma" -release_date = "2025-03-13" -last_updated = "2025-03-13" -attachment = true -reasoning = false -temperature = true -tool_call = true structured_output = true -knowledge = "2024-08-31" -open_weights = true [cost] input = 0.05 output = 0.15 [limit] -context = 131_072 output = 16_384 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/openrouter/models/google/gemma-3-27b-it.toml b/providers/openrouter/models/google/gemma-3-27b-it.toml index c08fc52ae88..617f624675d 100644 --- a/providers/openrouter/models/google/gemma-3-27b-it.toml +++ b/providers/openrouter/models/google/gemma-3-27b-it.toml @@ -1,15 +1,6 @@ -name = "Gemma 3 27B" +base_model = "google/gemma-3-27b-it" description = "Open Gemma instruction model for efficient chat and self-hosted deployments" -family = "gemma" -release_date = "2025-03-12" -last_updated = "2025-03-12" -attachment = true -reasoning = false -temperature = true -tool_call = true structured_output = true -knowledge = "2024-08-31" -open_weights = true [cost] input = 0.08 @@ -17,9 +8,4 @@ output = 0.45 cache_read = 0.04 [limit] -context = 262_144 output = 117_964 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/openrouter/models/google/gemma-3-4b-it.toml b/providers/openrouter/models/google/gemma-3-4b-it.toml index aa109558138..45f5a1839e2 100644 --- a/providers/openrouter/models/google/gemma-3-4b-it.toml +++ b/providers/openrouter/models/google/gemma-3-4b-it.toml @@ -1,24 +1,11 @@ -name = "Gemma 3 4B" +base_model = "google/gemma-3-4b-it" description = "Open Gemma instruction model for efficient chat and self-hosted deployments" -family = "gemma" -release_date = "2025-03-13" -last_updated = "2025-03-13" -attachment = true -reasoning = false -temperature = true tool_call = false structured_output = true -knowledge = "2024-08-31" -open_weights = true [cost] input = 0.05 output = 0.1 [limit] -context = 131_072 output = 16_384 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/openrouter/models/google/gemma-4-26b-a4b-it.toml b/providers/openrouter/models/google/gemma-4-26b-a4b-it.toml index a79fba4f50b..7d230a2be6f 100644 --- a/providers/openrouter/models/google/gemma-4-26b-a4b-it.toml +++ b/providers/openrouter/models/google/gemma-4-26b-a4b-it.toml @@ -1,14 +1,17 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "google/gemma-4-26b-a4b-it" [[reasoning_options]] type = "toggle" [cost] -input = 0.07 -output = 0.34 +input = 0.09 +output = 0.3 +cache_read = 0.05 [limit] -output = 16_384 +output = 235_929 [modalities] input = ["image", "text", "video"] diff --git a/providers/openrouter/models/gryphe/mythomax-l2-13b.toml b/providers/openrouter/models/gryphe/mythomax-l2-13b.toml index 0ddba1dbce0..2028e3c85b6 100644 --- a/providers/openrouter/models/gryphe/mythomax-l2-13b.toml +++ b/providers/openrouter/models/gryphe/mythomax-l2-13b.toml @@ -11,8 +11,8 @@ knowledge = "2023-06-30" open_weights = true [cost] -input = 0.06 -output = 0.06 +input = 0.08 +output = 0.11 [limit] context = 8_192 diff --git a/providers/openrouter/models/ibm-granite/granite-4.1-8b.toml b/providers/openrouter/models/ibm-granite/granite-4.1-8b.toml deleted file mode 100644 index 3ea6f4851d5..00000000000 --- a/providers/openrouter/models/ibm-granite/granite-4.1-8b.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Granite 4.1 8B" -description = "Open-weight instruction model for adaptable chat and self-hosted production workloads" -family = "granite" -release_date = "2026-04-30" -last_updated = "2026-04-30" -attachment = false -reasoning = false -temperature = true -tool_call = true -structured_output = true -open_weights = true - -[cost] -input = 0.05 -output = 0.1 -cache_read = 0.05 - -[limit] -context = 131_072 -output = 117_964 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/openrouter/models/ibm-granite/granite-4.2-8b.toml b/providers/openrouter/models/ibm-granite/granite-4.2-8b.toml new file mode 100644 index 00000000000..62943cfaadb --- /dev/null +++ b/providers/openrouter/models/ibm-granite/granite-4.2-8b.toml @@ -0,0 +1,28 @@ +name = "Granite 4.2 8B" +description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" +family = "granite" +release_date = "2026-08-31" +last_updated = "2026-08-31" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high"] + +[cost] +input = 0.06 +output = 0.25 +cache_read = 0.015 + +[limit] +context = 131_072 +output = 117_964 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/openrouter/models/inception/mercury-2.5.toml b/providers/openrouter/models/inception/mercury-2.5.toml new file mode 100644 index 00000000000..04931f78a87 --- /dev/null +++ b/providers/openrouter/models/inception/mercury-2.5.toml @@ -0,0 +1,28 @@ +name = "Mercury 2.5" +description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" +family = "mercury" +release_date = "2026-09-08" +last_updated = "2026-09-08" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + +[cost] +input = 0.04 +output = 0.15 +cache_read = 0.004 + +[limit] +context = 260_000 +output = 65_536 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/openrouter/models/inclusionai/ling-3.0-flash-fin.toml b/providers/openrouter/models/inclusionai/ling-3.0-flash-fin.toml new file mode 100644 index 00000000000..85c929a5d94 --- /dev/null +++ b/providers/openrouter/models/inclusionai/ling-3.0-flash-fin.toml @@ -0,0 +1,29 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens +name = "Ling 3.0 Flash Fin" +description = "Efficient model for low-latency assistance, extraction, and routine automation" +family = "ling" +release_date = "2026-08-27" +last_updated = "2026-08-27" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.06 +output = 0.18 +cache_read = 0.012 + +[limit] +context = 262_144 +output = 235_929 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/openrouter/models/inclusionai/ling-3.0-flash-fin:free.toml b/providers/openrouter/models/inclusionai/ling-3.0-flash-fin:free.toml new file mode 100644 index 00000000000..409dc68f92e --- /dev/null +++ b/providers/openrouter/models/inclusionai/ling-3.0-flash-fin:free.toml @@ -0,0 +1,28 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens +name = "Ling 3.0 Flash Fin (free)" +description = "Efficient model for low-latency assistance, extraction, and routine automation" +family = "ling" +release_date = "2026-08-27" +last_updated = "2026-08-27" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0 +output = 0 + +[limit] +context = 262_144 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/openrouter/models/inclusionai/ling-3.0-flash-sante:free.toml b/providers/openrouter/models/inclusionai/ling-3.0-flash-sante:free.toml new file mode 100644 index 00000000000..c07e7f799ed --- /dev/null +++ b/providers/openrouter/models/inclusionai/ling-3.0-flash-sante:free.toml @@ -0,0 +1,28 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens +name = "Ling 3.0 Flash Sante (free)" +description = "Efficient model for low-latency assistance, extraction, and routine automation" +family = "ling" +release_date = "2026-09-04" +last_updated = "2026-09-04" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0 +output = 0 + +[limit] +context = 262_144 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/openrouter/models/inclusionai/ling-3.0-flash-vl.toml b/providers/openrouter/models/inclusionai/ling-3.0-flash-vl.toml new file mode 100644 index 00000000000..b7c7c3951b1 --- /dev/null +++ b/providers/openrouter/models/inclusionai/ling-3.0-flash-vl.toml @@ -0,0 +1,29 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens +name = "Ling 3.0 Flash VL" +description = "Multimodal reasoning model for visual analysis, planning, and tool use" +family = "ling" +release_date = "2026-09-10" +last_updated = "2026-09-10" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.06 +output = 0.18 +cache_read = 0.012 + +[limit] +context = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image", "video"] +output = ["text"] diff --git a/providers/openrouter/models/inclusionai/ling-3.0-flash.toml b/providers/openrouter/models/inclusionai/ling-3.0-flash.toml index b9a9c35a085..cf79271ade5 100644 --- a/providers/openrouter/models/inclusionai/ling-3.0-flash.toml +++ b/providers/openrouter/models/inclusionai/ling-3.0-flash.toml @@ -1,4 +1,6 @@ -name = "Ling-3.0-flash" +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens +name = "Ling 3.0 Flash" description = "Efficient model for low-latency assistance, extraction, and routine automation" family = "ling" release_date = "2026-07-23" @@ -9,7 +11,9 @@ temperature = true tool_call = true structured_output = false open_weights = true -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 0.021 diff --git a/providers/openrouter/models/inference-net/schematron-v2-small.toml b/providers/openrouter/models/inference-net/schematron-v2-small.toml new file mode 100644 index 00000000000..8b5149f5d77 --- /dev/null +++ b/providers/openrouter/models/inference-net/schematron-v2-small.toml @@ -0,0 +1,23 @@ +name = "Schematron V2 Small" +description = "Efficient model for low-latency assistance, extraction, and routine automation" +release_date = "2026-09-12" +last_updated = "2026-09-12" +attachment = false +reasoning = false +temperature = true +tool_call = false +structured_output = true +open_weights = true + +[cost] +input = 0.05 +output = 0.23 +cache_read = 0.05 + +[limit] +context = 128_000 +output = 4_096 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/openrouter/models/inference-net/schematron-v2-turbo.toml b/providers/openrouter/models/inference-net/schematron-v2-turbo.toml new file mode 100644 index 00000000000..e5c154e9b76 --- /dev/null +++ b/providers/openrouter/models/inference-net/schematron-v2-turbo.toml @@ -0,0 +1,23 @@ +name = "Schematron V2 Turbo" +description = "Efficient model for low-latency assistance, extraction, and routine automation" +release_date = "2026-09-12" +last_updated = "2026-09-12" +attachment = false +reasoning = false +temperature = true +tool_call = false +structured_output = true +open_weights = true + +[cost] +input = 0.03 +output = 0.15 +cache_read = 0.03 + +[limit] +context = 128_000 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/openrouter/models/kwaipilot/kat-coder-air-v2.5.toml b/providers/openrouter/models/kwaipilot/kat-coder-air-v2.5.toml deleted file mode 100644 index 2c513fd50ba..00000000000 --- a/providers/openrouter/models/kwaipilot/kat-coder-air-v2.5.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "KAT-Coder-Air V2.5" -description = "Coding model for repository understanding, refactors, and agentic engineering tasks" -family = "kat-coder" -release_date = "2026-07-10" -last_updated = "2026-07-10" -attachment = false -reasoning = false -temperature = true -tool_call = true -structured_output = true -open_weights = false - -[cost] -input = 0.15 -output = 0.6 -cache_read = 0.03 - -[limit] -context = 256_000 -output = 80_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/openrouter/models/kwaipilot/kat-coder-pro-v2.5.toml b/providers/openrouter/models/kwaipilot/kat-coder-pro-v2.5.toml index 2a0c70fda72..3a631336627 100644 --- a/providers/openrouter/models/kwaipilot/kat-coder-pro-v2.5.toml +++ b/providers/openrouter/models/kwaipilot/kat-coder-pro-v2.5.toml @@ -16,8 +16,8 @@ output = 2.96 cache_read = 0.15 [limit] -context = 256_000 -output = 80_000 +context = 262_144 +output = 235_929 [modalities] input = ["text"] diff --git a/providers/openrouter/models/kwaipilot/kat-coder-pro-v2.toml b/providers/openrouter/models/kwaipilot/kat-coder-pro-v2.toml deleted file mode 100644 index afdeb4228d2..00000000000 --- a/providers/openrouter/models/kwaipilot/kat-coder-pro-v2.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "KAT-Coder-Pro V2" -description = "Coding model for repository understanding, refactors, and agentic engineering tasks" -family = "kat-coder" -release_date = "2026-03-27" -last_updated = "2026-03-27" -attachment = false -reasoning = false -temperature = true -tool_call = true -structured_output = true -open_weights = false - -[cost] -input = 0.3 -output = 1.2 -cache_read = 0.06 - -[limit] -context = 262_144 -output = 80_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/openrouter/models/mancer/weaver.toml b/providers/openrouter/models/mancer/weaver.toml index 3bf39c850fa..1948144537d 100644 --- a/providers/openrouter/models/mancer/weaver.toml +++ b/providers/openrouter/models/mancer/weaver.toml @@ -12,7 +12,7 @@ knowledge = "2023-06-30" open_weights = false [cost] -input = 0.5 +input = 0.4 output = 0.75 [limit] diff --git a/providers/openrouter/models/meituan/longcat-2.0.toml b/providers/openrouter/models/meituan/longcat-2.0.toml index 29e85d5574e..14881c85746 100644 --- a/providers/openrouter/models/meituan/longcat-2.0.toml +++ b/providers/openrouter/models/meituan/longcat-2.0.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "LongCat 2.0" description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" family = "longcat" @@ -10,6 +12,9 @@ tool_call = true structured_output = false open_weights = true +[[reasoning_options]] +type = "toggle" + [[reasoning_options]] type = "budget_tokens" diff --git a/providers/openrouter/models/meta-llama/llama-3.1-70b-instruct.toml b/providers/openrouter/models/meta-llama/llama-3.1-70b-instruct.toml index b2d0588ba33..881a90e0d15 100644 --- a/providers/openrouter/models/meta-llama/llama-3.1-70b-instruct.toml +++ b/providers/openrouter/models/meta-llama/llama-3.1-70b-instruct.toml @@ -1,15 +1,6 @@ -name = "Llama 3.1 70B Instruct" +base_model = "meta/llama-3.1-70b-instruct" description = "Open Llama instruction model for multilingual chat, reasoning, and coding" -family = "llama" -release_date = "2024-07-23" -last_updated = "2024-07-23" -attachment = false -reasoning = false -temperature = true -tool_call = true structured_output = true -knowledge = "2023-12-31" -open_weights = true [cost] input = 0.4 @@ -18,7 +9,3 @@ output = 0.4 [limit] context = 131_072 output = 16_384 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/openrouter/models/meta-llama/llama-3.3-70b-instruct.toml b/providers/openrouter/models/meta-llama/llama-3.3-70b-instruct.toml index c6879803b3d..7440afe7d67 100644 --- a/providers/openrouter/models/meta-llama/llama-3.3-70b-instruct.toml +++ b/providers/openrouter/models/meta-llama/llama-3.3-70b-instruct.toml @@ -1,12 +1,10 @@ base_model = "meta/llama-3.3-70b-instruct" -attachment = false structured_output = true [cost] -input = 0.71 -output = 0.71 -cache_read = 0.71 +input = 0.1 +output = 0.32 [limit] context = 131_072 -output = 115_200 +output = 16_384 diff --git a/providers/openrouter/models/meta-llama/llama-4-maverick.toml b/providers/openrouter/models/meta-llama/llama-4-maverick.toml index de6e5240ff9..b9b42749c83 100644 --- a/providers/openrouter/models/meta-llama/llama-4-maverick.toml +++ b/providers/openrouter/models/meta-llama/llama-4-maverick.toml @@ -12,8 +12,8 @@ knowledge = "2024-08-31" open_weights = true [cost] -input = 0.2 -output = 0.8 +input = 0.1875 +output = 0.6525 [limit] context = 1_048_576 diff --git a/providers/openrouter/models/meta-llama/llama-4-scout.toml b/providers/openrouter/models/meta-llama/llama-4-scout.toml index 9c41cc72a7f..58447cec7dd 100644 --- a/providers/openrouter/models/meta-llama/llama-4-scout.toml +++ b/providers/openrouter/models/meta-llama/llama-4-scout.toml @@ -12,13 +12,12 @@ knowledge = "2024-08-31" open_weights = true [cost] -input = 0.11 -output = 0.34 -cache_read = 0.055 +input = 0.1 +output = 0.3 [limit] context = 1_310_720 -output = 8_192 +output = 16_384 [modalities] input = ["text", "image"] diff --git a/providers/openrouter/models/meta/muse-glimmer-30b.toml b/providers/openrouter/models/meta/muse-glimmer-30b.toml index 3b46ee2987a..d4077f81891 100644 --- a/providers/openrouter/models/meta/muse-glimmer-30b.toml +++ b/providers/openrouter/models/meta/muse-glimmer-30b.toml @@ -10,9 +10,9 @@ type = "effort" values = ["low", "medium", "high", "xhigh"] [cost] -input = 0.35 -output = 1.5 +input = 0.3 +output = 1.2 cache_read = 0.04 [limit] -output = 117_964 +output = 16_384 diff --git a/providers/openrouter/models/meta/muse-spark-1.1.toml b/providers/openrouter/models/meta/muse-spark-1.1.toml index be6bd0b377c..2e671bfddf0 100644 --- a/providers/openrouter/models/meta/muse-spark-1.1.toml +++ b/providers/openrouter/models/meta/muse-spark-1.1.toml @@ -11,7 +11,6 @@ output = 4.25 cache_read = 0.15 [limit] -context = 1_048_576 output = 943_718 [modalities] diff --git a/providers/openrouter/models/meta/muse-spark-1.3-contributor.toml b/providers/openrouter/models/meta/muse-spark-1.3-contributor.toml new file mode 100644 index 00000000000..81136b11398 --- /dev/null +++ b/providers/openrouter/models/meta/muse-spark-1.3-contributor.toml @@ -0,0 +1,28 @@ +name = "Muse Spark 1.3 Contributor" +description = "Open Llama multimodal model for image understanding and text reasoning" +family = "muse" +release_date = "2026-09-02" +last_updated = "2026-09-02" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.1 +output = 0.2 +cache_read = 0.002 + +[limit] +context = 1_048_576 +output = 943_718 + +[modalities] +input = ["text", "image", "video", "pdf", "audio"] +output = ["text"] diff --git a/providers/openrouter/models/meta/muse-spark-1.3.toml b/providers/openrouter/models/meta/muse-spark-1.3.toml new file mode 100644 index 00000000000..1a5da91e2e5 --- /dev/null +++ b/providers/openrouter/models/meta/muse-spark-1.3.toml @@ -0,0 +1,14 @@ +base_model = "meta/muse-spark-1.3" +description = "Open Llama multimodal model for image understanding and text reasoning" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 1.25 +output = 4.25 +cache_read = 0.15 + +[limit] +output = 943_718 diff --git a/providers/openrouter/models/minimax/minimax-m1.toml b/providers/openrouter/models/minimax/minimax-m1.toml index 5663a97b096..063613f9d24 100644 --- a/providers/openrouter/models/minimax/minimax-m1.toml +++ b/providers/openrouter/models/minimax/minimax-m1.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "MiniMax M1" description = "MiniMax model for chat, coding, office work, and agentic tasks" family = "minimax" @@ -10,10 +12,12 @@ tool_call = true structured_output = false knowledge = "2024-06-30" open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] -input = 0.55 +input = 0.4 output = 2.2 [limit] diff --git a/providers/openrouter/models/minimax/minimax-m2.7:free.toml b/providers/openrouter/models/minimax/minimax-m2.7:free.toml deleted file mode 100644 index a7661fb85f8..00000000000 --- a/providers/openrouter/models/minimax/minimax-m2.7:free.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "minimax/MiniMax-M2.7" -name = "MiniMax M2.7 (free)" -description = "MiniMax model for chat, coding, office work, and agentic tasks" -structured_output = false -reasoning_options = [] - -[cost] -input = 0 -output = 0 - -[limit] -context = 196_608 -output = 176_947 diff --git a/providers/openrouter/models/minimax/minimax-m3.toml b/providers/openrouter/models/minimax/minimax-m3.toml index 4244d4862c3..bff429beeb6 100644 --- a/providers/openrouter/models/minimax/minimax-m3.toml +++ b/providers/openrouter/models/minimax/minimax-m3.toml @@ -1,6 +1,10 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "minimax/MiniMax-M3" structured_output = true -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 0.3 diff --git a/providers/openrouter/models/minimax/minimax-m3:free.toml b/providers/openrouter/models/minimax/minimax-m3:free.toml deleted file mode 100644 index df4f09f7032..00000000000 --- a/providers/openrouter/models/minimax/minimax-m3:free.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "minimax/MiniMax-M3" -name = "MiniMax M3 (free)" -description = "MiniMax multimodal coding model for long-context reasoning and agent tasks" -structured_output = false -reasoning_options = [] - -[cost] -input = 0 -output = 0 - -[limit] -output = 943_718 diff --git a/providers/openrouter/models/mistralai/devstral-2512.toml b/providers/openrouter/models/mistralai/devstral-2512.toml deleted file mode 100644 index 4ac16feadc2..00000000000 --- a/providers/openrouter/models/mistralai/devstral-2512.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "mistral/devstral-2512" -description = "Mistral coding agent model for repository tasks and software engineering workflows" -attachment = true -structured_output = true - -[cost] -input = 0.44 -output = 2.2 -cache_read = 0.044 - -[limit] -output = 209_715 - -[modalities] -input = ["text", "pdf"] diff --git a/providers/openrouter/models/mistralai/ministral-8b.toml b/providers/openrouter/models/mistralai/ministral-8b.toml deleted file mode 100644 index 451ea70512d..00000000000 --- a/providers/openrouter/models/mistralai/ministral-8b.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Ministral 8B" -description = "Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads" -family = "ministral" -release_date = "2024-10-17" -last_updated = "2024-10-17" -attachment = false -reasoning = false -temperature = true -tool_call = false -structured_output = true -knowledge = "2024-09-30" -open_weights = false - -[cost] -input = 0.11 -output = 0.11 - -[limit] -context = 128_000 -output = 102_400 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/openrouter/models/mistralai/mistral-large-2512.toml b/providers/openrouter/models/mistralai/mistral-large-2512.toml deleted file mode 100644 index 8dcd57cfa35..00000000000 --- a/providers/openrouter/models/mistralai/mistral-large-2512.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "mistral/mistral-large-2512" -structured_output = true - -[cost] -input = 0.5 -output = 1.5 -cache_read = 0.05 - -[limit] -output = 209_715 - -[modalities] -input = ["text", "image", "pdf"] diff --git a/providers/openrouter/models/mistralai/mistral-small-3.1-24b-instruct.toml b/providers/openrouter/models/mistralai/mistral-small-3.1-24b-instruct.toml index 45893fba68d..bc32aea52eb 100644 --- a/providers/openrouter/models/mistralai/mistral-small-3.1-24b-instruct.toml +++ b/providers/openrouter/models/mistralai/mistral-small-3.1-24b-instruct.toml @@ -6,7 +6,7 @@ last_updated = "2025-03-17" attachment = true reasoning = false temperature = true -tool_call = false +tool_call = true structured_output = false knowledge = "2023-10-31" open_weights = true diff --git a/providers/openrouter/models/mistralai/mistral-small-3.2-24b-instruct.toml b/providers/openrouter/models/mistralai/mistral-small-3.2-24b-instruct.toml index e56ed9bddb4..809cb9dd124 100644 --- a/providers/openrouter/models/mistralai/mistral-small-3.2-24b-instruct.toml +++ b/providers/openrouter/models/mistralai/mistral-small-3.2-24b-instruct.toml @@ -12,11 +12,11 @@ knowledge = "2023-10-31" open_weights = true [cost] -input = 0.075 -output = 0.2 +input = 0.09375 +output = 0.25 [limit] -context = 131_072 +context = 256_000 output = 16_384 [modalities] diff --git a/providers/openrouter/models/mistralai/voxtral-small-24b-2507.toml b/providers/openrouter/models/mistralai/voxtral-small-24b-2507.toml index 1fdb2e715d2..fec9c4575b2 100644 --- a/providers/openrouter/models/mistralai/voxtral-small-24b-2507.toml +++ b/providers/openrouter/models/mistralai/voxtral-small-24b-2507.toml @@ -1,14 +1,6 @@ -name = "Voxtral Small 24B 2507" +base_model = "mistral/voxtral-small-24b-2507" description = "Efficient Mistral model for fast chat, extraction, and production assistants" -family = "mistral" -release_date = "2025-10-30" -last_updated = "2025-10-30" -attachment = true -reasoning = false -temperature = true -tool_call = true structured_output = true -open_weights = true [cost] input = 0.1 @@ -16,9 +8,7 @@ output = 0.3 cache_read = 0.01 [limit] -context = 32_000 -output = 25_600 +output = 26_214 [modalities] input = ["text", "audio", "pdf"] -output = ["text"] diff --git a/providers/openrouter/models/moonshotai/kimi-k2-0905.toml b/providers/openrouter/models/moonshotai/kimi-k2-0905.toml index af63305cb7e..a867b9f2383 100644 --- a/providers/openrouter/models/moonshotai/kimi-k2-0905.toml +++ b/providers/openrouter/models/moonshotai/kimi-k2-0905.toml @@ -17,7 +17,7 @@ output = 2.5 [limit] context = 262_144 -output = 100_352 +output = 98_304 [modalities] input = ["text"] diff --git a/providers/openrouter/models/moonshotai/kimi-k2-thinking.toml b/providers/openrouter/models/moonshotai/kimi-k2-thinking.toml index 91ad22ed77f..589eb077162 100644 --- a/providers/openrouter/models/moonshotai/kimi-k2-thinking.toml +++ b/providers/openrouter/models/moonshotai/kimi-k2-thinking.toml @@ -11,4 +11,4 @@ output = 2.5 cache_read = 0.15 [limit] -output = 100_352 +output = 98_304 diff --git a/providers/openrouter/models/moonshotai/kimi-k2.5.toml b/providers/openrouter/models/moonshotai/kimi-k2.5.toml index 45ae7506d48..ebb15bee06b 100644 --- a/providers/openrouter/models/moonshotai/kimi-k2.5.toml +++ b/providers/openrouter/models/moonshotai/kimi-k2.5.toml @@ -1,10 +1,14 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "moonshotai/kimi-k2.5" temperature = true -reasoning_options = [] [interleaved] field = "reasoning_details" +[[reasoning_options]] +type = "toggle" + [cost] input = 0.45 output = 2.25 diff --git a/providers/openrouter/models/moonshotai/kimi-k2.6.toml b/providers/openrouter/models/moonshotai/kimi-k2.6.toml index d52ae05dcac..b0351ac363c 100644 --- a/providers/openrouter/models/moonshotai/kimi-k2.6.toml +++ b/providers/openrouter/models/moonshotai/kimi-k2.6.toml @@ -1,9 +1,13 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "moonshotai/kimi-k2.6" -reasoning_options = [] [interleaved] field = "reasoning_details" +[[reasoning_options]] +type = "toggle" + [cost] input = 0.95 output = 4 diff --git a/providers/openrouter/models/moonshotai/kimi-k2.7-code.toml b/providers/openrouter/models/moonshotai/kimi-k2.7-code.toml index 9af80ded38d..3fb61dea6a2 100644 --- a/providers/openrouter/models/moonshotai/kimi-k2.7-code.toml +++ b/providers/openrouter/models/moonshotai/kimi-k2.7-code.toml @@ -3,9 +3,9 @@ temperature = true reasoning_options = [] [cost] -input = 0.67 -output = 3.4 -cache_read = 0.19 +input = 0.7062 +output = 3.3 +cache_read = 0.18 [limit] output = 235_929 diff --git a/providers/openrouter/models/moonshotai/kimi-k2.toml b/providers/openrouter/models/moonshotai/kimi-k2.toml index da05ef41c84..6bc9044c209 100644 --- a/providers/openrouter/models/moonshotai/kimi-k2.toml +++ b/providers/openrouter/models/moonshotai/kimi-k2.toml @@ -17,7 +17,7 @@ output = 2.3 [limit] context = 131_072 -output = 100_352 +output = 98_304 [modalities] input = ["text"] diff --git a/providers/openrouter/models/moonshotai/kimi-k3.toml b/providers/openrouter/models/moonshotai/kimi-k3.toml index 50bd15db035..c11eb6c3dae 100644 --- a/providers/openrouter/models/moonshotai/kimi-k3.toml +++ b/providers/openrouter/models/moonshotai/kimi-k3.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "moonshotai/kimi-k3" description = "Kimi multimodal agent model for visual understanding, coding, and planning" temperature = true diff --git a/providers/openrouter/models/nex-agi/nex-n2-mini.toml b/providers/openrouter/models/nex-agi/nex-n2-mini.toml deleted file mode 100644 index 47906f6afd0..00000000000 --- a/providers/openrouter/models/nex-agi/nex-n2-mini.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Nex-N2-Mini" -description = "Multimodal reasoning model for visual analysis, planning, and tool use" -family = "agi" -release_date = "2026-06-24" -last_updated = "2026-06-24" -attachment = true -reasoning = true -temperature = true -tool_call = true -structured_output = true -open_weights = true -reasoning_options = [] - -[cost] -input = 0.025 -output = 0.1 -cache_read = 0.0025 - -[limit] -context = 262_144 -output = 235_929 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/openrouter/models/nex-agi/nex-n2-pro.toml b/providers/openrouter/models/nex-agi/nex-n2-pro.toml deleted file mode 100644 index 7fb3dd88a59..00000000000 --- a/providers/openrouter/models/nex-agi/nex-n2-pro.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Nex-N2-Pro" -description = "Multimodal reasoning model for visual analysis, planning, and tool use" -family = "agi" -release_date = "2026-06-08" -last_updated = "2026-06-08" -attachment = true -reasoning = true -temperature = true -tool_call = true -structured_output = false -open_weights = true -reasoning_options = [] - -[cost] -input = 0.25 -output = 1 -cache_read = 0.025 - -[limit] -context = 262_144 -output = 235_929 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/openrouter/models/nex-agi/nex-n2.5-mini.toml b/providers/openrouter/models/nex-agi/nex-n2.5-mini.toml new file mode 100644 index 00000000000..539fc6a6686 --- /dev/null +++ b/providers/openrouter/models/nex-agi/nex-n2.5-mini.toml @@ -0,0 +1,28 @@ +name = "Nex-N2.5-Mini" +description = "Multimodal reasoning model for visual analysis, planning, and tool use" +family = "agi" +release_date = "2026-09-08" +last_updated = "2026-09-08" +attachment = true +reasoning = true +temperature = true +tool_call = false +structured_output = true +open_weights = true + +[[reasoning_options]] +type = "effort" +values = ["none", "medium", "high"] + +[cost] +input = 0.025 +output = 0.1 +cache_read = 0.0025 + +[limit] +context = 262_144 +output = 235_929 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/openrouter/models/nex-agi/nex-n2.5-mini:free.toml b/providers/openrouter/models/nex-agi/nex-n2.5-mini:free.toml new file mode 100644 index 00000000000..b2ba3f5965a --- /dev/null +++ b/providers/openrouter/models/nex-agi/nex-n2.5-mini:free.toml @@ -0,0 +1,27 @@ +name = "Nex-N2.5-Mini (free)" +description = "Efficient model for low-latency assistance, extraction, and routine automation" +family = "agi" +release_date = "2026-09-08" +last_updated = "2026-09-08" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[[reasoning_options]] +type = "effort" +values = ["none", "medium", "high"] + +[cost] +input = 0 +output = 0 + +[limit] +context = 262_144 +output = 235_929 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/openrouter/models/nex-agi/nex-n2.5-pro.toml b/providers/openrouter/models/nex-agi/nex-n2.5-pro.toml new file mode 100644 index 00000000000..0cb11065de4 --- /dev/null +++ b/providers/openrouter/models/nex-agi/nex-n2.5-pro.toml @@ -0,0 +1,28 @@ +name = "Nex-N2.5-Pro" +description = "Multimodal reasoning model for visual analysis, planning, and tool use" +family = "agi" +release_date = "2026-09-08" +last_updated = "2026-09-08" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[[reasoning_options]] +type = "effort" +values = ["none", "medium", "high"] + +[cost] +input = 0.075 +output = 0.25 +cache_read = 0.015 + +[limit] +context = 262_144 +output = 235_929 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/openrouter/models/nex-agi/nex-n2.5-pro:free.toml b/providers/openrouter/models/nex-agi/nex-n2.5-pro:free.toml new file mode 100644 index 00000000000..5d1969c1a4e --- /dev/null +++ b/providers/openrouter/models/nex-agi/nex-n2.5-pro:free.toml @@ -0,0 +1,27 @@ +name = "Nex-N2.5-Pro (free)" +description = "Multimodal reasoning model for visual analysis, planning, and tool use" +family = "agi" +release_date = "2026-09-08" +last_updated = "2026-09-08" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[[reasoning_options]] +type = "effort" +values = ["none", "medium", "high"] + +[cost] +input = 0 +output = 0 + +[limit] +context = 262_144 +output = 235_929 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/openrouter/models/nousresearch/hermes-4-70b.toml b/providers/openrouter/models/nousresearch/hermes-4-70b.toml deleted file mode 100644 index 74f7f018fd1..00000000000 --- a/providers/openrouter/models/nousresearch/hermes-4-70b.toml +++ /dev/null @@ -1,27 +0,0 @@ -name = "Hermes 4 70B" -description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" -family = "hermes" -release_date = "2025-08-26" -last_updated = "2025-08-26" -attachment = false -reasoning = true -temperature = true -tool_call = false -structured_output = false -knowledge = "2024-08-31" -open_weights = true - -[[reasoning_options]] -type = "toggle" - -[cost] -input = 0.13 -output = 0.4 - -[limit] -context = 131_072 -output = 117_964 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/openrouter/models/nvidia/nemotron-3-nano-30b-a3b.toml b/providers/openrouter/models/nvidia/nemotron-3-nano-30b-a3b.toml index b4271827c2d..bf732029012 100644 --- a/providers/openrouter/models/nvidia/nemotron-3-nano-30b-a3b.toml +++ b/providers/openrouter/models/nvidia/nemotron-3-nano-30b-a3b.toml @@ -1,6 +1,10 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "nvidia/nemotron-3-nano-30b-a3b" structured_output = true -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 0.05 diff --git a/providers/openrouter/models/nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free.toml b/providers/openrouter/models/nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free.toml index f80a020a6f1..24b9785876b 100644 --- a/providers/openrouter/models/nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free.toml +++ b/providers/openrouter/models/nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free.toml @@ -1,7 +1,12 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning" name = "Nemotron 3 Nano Omni (free)" structured_output = false +[[reasoning_options]] +type = "toggle" + [[reasoning_options]] type = "budget_tokens" diff --git a/providers/openrouter/models/nvidia/nemotron-3-super-120b-a12b.toml b/providers/openrouter/models/nvidia/nemotron-3-super-120b-a12b.toml index 0c8ec81b077..cc742eb161c 100644 --- a/providers/openrouter/models/nvidia/nemotron-3-super-120b-a12b.toml +++ b/providers/openrouter/models/nvidia/nemotron-3-super-120b-a12b.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "nvidia/nemotron-3-super-120b-a12b" structured_output = true @@ -12,9 +14,8 @@ values = ["low", "medium"] type = "budget_tokens" [cost] -input = 0.085 -output = 0.4 +input = 0.08 +output = 0.45 [limit] -context = 1_000_000 -output = 16_384 +output = 235_929 diff --git a/providers/openrouter/models/nvidia/nemotron-3-ultra-550b-a55b.toml b/providers/openrouter/models/nvidia/nemotron-3-ultra-550b-a55b.toml index 41555319289..5dcd117448e 100644 --- a/providers/openrouter/models/nvidia/nemotron-3-ultra-550b-a55b.toml +++ b/providers/openrouter/models/nvidia/nemotron-3-ultra-550b-a55b.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "nvidia/nemotron-3-ultra-550b-a55b" structured_output = true @@ -13,9 +15,9 @@ type = "budget_tokens" [cost] input = 0.6 -output = 3.6 -cache_read = 0.2 +output = 2.4 +cache_read = 0.12 [limit] -context = 512_288 -output = 461_059 +context = 262_144 +output = 182_520 diff --git a/providers/openrouter/models/nvidia/nemotron-3.5-content-safety.toml b/providers/openrouter/models/nvidia/nemotron-3.5-content-safety.toml new file mode 100644 index 00000000000..c5cb87fdd33 --- /dev/null +++ b/providers/openrouter/models/nvidia/nemotron-3.5-content-safety.toml @@ -0,0 +1,15 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens +base_model = "nvidia/nemotron-3.5-content-safety" +structured_output = false + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.2 +output = 0.2 + +[limit] +context = 131_072 +output = 117_964 diff --git a/providers/openrouter/models/nvidia/nemotron-3.5-content-safety:free.toml b/providers/openrouter/models/nvidia/nemotron-3.5-content-safety:free.toml index 3c9543b28cb..ee73f2eee81 100644 --- a/providers/openrouter/models/nvidia/nemotron-3.5-content-safety:free.toml +++ b/providers/openrouter/models/nvidia/nemotron-3.5-content-safety:free.toml @@ -1,7 +1,11 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "nvidia/nemotron-3.5-content-safety" name = "Nemotron 3.5 Content Safety (free)" structured_output = false -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 0 diff --git a/providers/openrouter/models/openai/gpt-4-turbo-preview.toml b/providers/openrouter/models/openai/gpt-4-turbo-preview.toml deleted file mode 100644 index f1e4784d5dd..00000000000 --- a/providers/openrouter/models/openai/gpt-4-turbo-preview.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "GPT-4 Turbo Preview" -description = "Compact GPT model for low-latency assistance and high-volume workloads" -family = "gpt" -release_date = "2024-01-25" -last_updated = "2024-01-25" -attachment = false -reasoning = false -temperature = true -tool_call = true -structured_output = true -knowledge = "2023-12-31" -open_weights = false - -[cost] -input = 10 -output = 30 - -[limit] -context = 128_000 -output = 4_096 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/openrouter/models/openai/gpt-5.1.toml b/providers/openrouter/models/openai/gpt-5.1.toml index 75e6b010bde..931ba99f4e0 100644 --- a/providers/openrouter/models/openai/gpt-5.1.toml +++ b/providers/openrouter/models/openai/gpt-5.1.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-5.1" +temperature = false [[reasoning_options]] type = "effort" diff --git a/providers/openrouter/models/openai/gpt-5.2.toml b/providers/openrouter/models/openai/gpt-5.2.toml index d8761780d97..95265894e8a 100644 --- a/providers/openrouter/models/openai/gpt-5.2.toml +++ b/providers/openrouter/models/openai/gpt-5.2.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-5.2" +temperature = false [[reasoning_options]] type = "effort" diff --git a/providers/openrouter/models/openai/gpt-5.3-codex.toml b/providers/openrouter/models/openai/gpt-5.3-codex.toml index 970482bc4de..f7d62896ab3 100644 --- a/providers/openrouter/models/openai/gpt-5.3-codex.toml +++ b/providers/openrouter/models/openai/gpt-5.3-codex.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-5.3-codex" +temperature = false [[reasoning_options]] type = "effort" diff --git a/providers/openrouter/models/openai/gpt-5.4-mini.toml b/providers/openrouter/models/openai/gpt-5.4-mini.toml index b71b67ad193..b3277f7996c 100644 --- a/providers/openrouter/models/openai/gpt-5.4-mini.toml +++ b/providers/openrouter/models/openai/gpt-5.4-mini.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-5.4-mini" +temperature = false [[reasoning_options]] type = "effort" diff --git a/providers/openrouter/models/openai/gpt-5.4-nano.toml b/providers/openrouter/models/openai/gpt-5.4-nano.toml index 2ca6f6a161e..957f3136cbe 100644 --- a/providers/openrouter/models/openai/gpt-5.4-nano.toml +++ b/providers/openrouter/models/openai/gpt-5.4-nano.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-5.4-nano" +temperature = false [[reasoning_options]] type = "effort" diff --git a/providers/openrouter/models/openai/gpt-5.4.toml b/providers/openrouter/models/openai/gpt-5.4.toml index 5ace7ba4f07..a5b83ea76eb 100644 --- a/providers/openrouter/models/openai/gpt-5.4.toml +++ b/providers/openrouter/models/openai/gpt-5.4.toml @@ -1,4 +1,5 @@ base_model = "openai/gpt-5.4" +temperature = false [[reasoning_options]] type = "effort" diff --git a/providers/openrouter/models/openai/gpt-6-astra-pro.toml b/providers/openrouter/models/openai/gpt-6-astra-pro.toml new file mode 100644 index 00000000000..31554ae7caa --- /dev/null +++ b/providers/openrouter/models/openai/gpt-6-astra-pro.toml @@ -0,0 +1,36 @@ +name = "GPT-6 Astra Pro" +description = "Frontier GPT model for professional reasoning, coding, and multimodal work" +family = "gpt" +release_date = "2026-09-04" +last_updated = "2026-09-04" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 20 +output = 75 +cache_read = 2 +cache_write = 25 + +[limit] +context = 1_050_000 +output = 128_000 + +[modalities] +input = ["pdf", "image", "text"] +output = ["text"] diff --git a/providers/openrouter/models/openai/gpt-6-astra.toml b/providers/openrouter/models/openai/gpt-6-astra.toml new file mode 100644 index 00000000000..9342c064d10 --- /dev/null +++ b/providers/openrouter/models/openai/gpt-6-astra.toml @@ -0,0 +1,19 @@ +base_model = "openai/gpt-6-astra" +description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 20 +output = 75 +cache_read = 2 +cache_write = 25 diff --git a/providers/openrouter/models/openai/gpt-6-luna-pro.toml b/providers/openrouter/models/openai/gpt-6-luna-pro.toml new file mode 100644 index 00000000000..f3f1dd66bc1 --- /dev/null +++ b/providers/openrouter/models/openai/gpt-6-luna-pro.toml @@ -0,0 +1,36 @@ +name = "GPT-6 Luna Pro" +description = "Frontier GPT model for professional reasoning, coding, and multimodal work" +family = "gpt" +release_date = "2026-09-22" +last_updated = "2026-09-22" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.1 +output = 0.5 +cache_read = 0.01 +cache_write = 0.125 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 0.2 +output = 0.75 +cache_read = 0.02 +cache_write = 0.25 + +[limit] +context = 1_050_000 +output = 128_000 + +[modalities] +input = ["pdf", "image", "text"] +output = ["text"] diff --git a/providers/openrouter/models/openai/gpt-6-luna.toml b/providers/openrouter/models/openai/gpt-6-luna.toml new file mode 100644 index 00000000000..be8a0fb9e1b --- /dev/null +++ b/providers/openrouter/models/openai/gpt-6-luna.toml @@ -0,0 +1,19 @@ +base_model = "openai/gpt-6-luna" +description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.1 +output = 0.5 +cache_read = 0.01 +cache_write = 0.125 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 0.2 +output = 0.75 +cache_read = 0.02 +cache_write = 0.25 diff --git a/providers/openrouter/models/openai/gpt-6-sol-pro.toml b/providers/openrouter/models/openai/gpt-6-sol-pro.toml new file mode 100644 index 00000000000..a34a53e3bb1 --- /dev/null +++ b/providers/openrouter/models/openai/gpt-6-sol-pro.toml @@ -0,0 +1,36 @@ +name = "GPT-6 Sol Pro" +description = "Frontier GPT model for professional reasoning, coding, and multimodal work" +family = "gpt" +release_date = "2026-09-22" +last_updated = "2026-09-22" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 4 +output = 15 +cache_read = 0.4 +cache_write = 5 + +[limit] +context = 1_050_000 +output = 128_000 + +[modalities] +input = ["pdf", "image", "text"] +output = ["text"] diff --git a/providers/openrouter/models/openai/gpt-6-sol.toml b/providers/openrouter/models/openai/gpt-6-sol.toml new file mode 100644 index 00000000000..83f598548a3 --- /dev/null +++ b/providers/openrouter/models/openai/gpt-6-sol.toml @@ -0,0 +1,19 @@ +base_model = "openai/gpt-6-sol" +description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 4 +output = 15 +cache_read = 0.4 +cache_write = 5 diff --git a/providers/openrouter/models/openai/gpt-oss-120b.toml b/providers/openrouter/models/openai/gpt-oss-120b.toml index e888deb71f4..16d06df52b1 100644 --- a/providers/openrouter/models/openai/gpt-oss-120b.toml +++ b/providers/openrouter/models/openai/gpt-oss-120b.toml @@ -5,8 +5,9 @@ type = "effort" values = ["low", "medium", "high"] [cost] -input = 0.037 -output = 0.17 +input = 0.15 +output = 0.6 +cache_read = 0.075 [limit] -output = 117_964 +output = 65_536 diff --git a/providers/openrouter/models/openai/gpt-oss-20b.toml b/providers/openrouter/models/openai/gpt-oss-20b.toml index b65dd3718e0..98aeb108997 100644 --- a/providers/openrouter/models/openai/gpt-oss-20b.toml +++ b/providers/openrouter/models/openai/gpt-oss-20b.toml @@ -6,9 +6,5 @@ type = "effort" values = ["low", "medium", "high"] [cost] -input = 0.03 -output = 0.13 -cache_read = 0.03 - -[limit] -output = 117_964 +input = 0.018 +output = 0.09 diff --git a/providers/openrouter/models/openai/gpt-oss-safeguard-20b.toml b/providers/openrouter/models/openai/gpt-oss-safeguard-20b.toml index e4898e7fedb..165dfd21c6a 100644 --- a/providers/openrouter/models/openai/gpt-oss-safeguard-20b.toml +++ b/providers/openrouter/models/openai/gpt-oss-safeguard-20b.toml @@ -1,14 +1,5 @@ -name = "gpt-oss-safeguard-20b" +base_model = "openai/gpt-oss-safeguard-20b" description = "Safety model for policy screening, moderation, and risk-aware routing workflows" -family = "gpt-oss" -release_date = "2025-10-29" -last_updated = "2025-10-29" -attachment = false -reasoning = true -temperature = true -tool_call = true -structured_output = true -open_weights = true [[reasoning_options]] type = "effort" @@ -20,9 +11,4 @@ output = 0.3 cache_read = 0.0375 [limit] -context = 131_072 output = 65_536 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/openrouter/models/openai/o1-pro.toml b/providers/openrouter/models/openai/o1-pro.toml index d9ca9966515..3f0fd40df4b 100644 --- a/providers/openrouter/models/openai/o1-pro.toml +++ b/providers/openrouter/models/openai/o1-pro.toml @@ -1,6 +1,10 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "openai/o1-pro" tool_call = false -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 150 diff --git a/providers/openrouter/models/openai/o1.toml b/providers/openrouter/models/openai/o1.toml index 40b6a2a4af8..0a0dcdc84ef 100644 --- a/providers/openrouter/models/openai/o1.toml +++ b/providers/openrouter/models/openai/o1.toml @@ -1,8 +1,9 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "openai/o1" [[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] +type = "toggle" [cost] input = 15 diff --git a/providers/openrouter/models/openai/o3-mini.toml b/providers/openrouter/models/openai/o3-mini.toml index 59c55ee37a4..ff57052aaaa 100644 --- a/providers/openrouter/models/openai/o3-mini.toml +++ b/providers/openrouter/models/openai/o3-mini.toml @@ -1,9 +1,10 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "openai/o3-mini" attachment = true [[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] +type = "toggle" [cost] input = 1.1 diff --git a/providers/openrouter/models/openai/o3-pro.toml b/providers/openrouter/models/openai/o3-pro.toml index b2ece450837..729c144d17a 100644 --- a/providers/openrouter/models/openai/o3-pro.toml +++ b/providers/openrouter/models/openai/o3-pro.toml @@ -1,8 +1,9 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "openai/o3-pro" [[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] +type = "toggle" [cost] input = 20 diff --git a/providers/openrouter/models/openai/o3.toml b/providers/openrouter/models/openai/o3.toml index 977bf918256..b1933ecd752 100644 --- a/providers/openrouter/models/openai/o3.toml +++ b/providers/openrouter/models/openai/o3.toml @@ -1,8 +1,9 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "openai/o3" [[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] +type = "toggle" [cost] input = 2 diff --git a/providers/openrouter/models/openai/o4-mini.toml b/providers/openrouter/models/openai/o4-mini.toml index f97e6e892b8..aed9393a8b0 100644 --- a/providers/openrouter/models/openai/o4-mini.toml +++ b/providers/openrouter/models/openai/o4-mini.toml @@ -1,8 +1,9 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "openai/o4-mini" [[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] +type = "toggle" [cost] input = 1.1 diff --git a/providers/openrouter/models/perceptron/perceptron-mk1.toml b/providers/openrouter/models/perceptron/perceptron-mk1.toml index 97f315f941a..5f5abd16181 100644 --- a/providers/openrouter/models/perceptron/perceptron-mk1.toml +++ b/providers/openrouter/models/perceptron/perceptron-mk1.toml @@ -1,4 +1,5 @@ -reasoning_options = [] +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Perceptron Mk1" description = "Multimodal reasoning model for visual analysis, planning, and tool use" release_date = "2026-05-12" @@ -10,6 +11,9 @@ tool_call = false structured_output = true open_weights = false +[[reasoning_options]] +type = "toggle" + [cost] input = 0.15 output = 1.5 diff --git a/providers/openrouter/models/perplexity/sonar-deep-research.toml b/providers/openrouter/models/perplexity/sonar-deep-research.toml index 317389ef351..3ba392526b3 100644 --- a/providers/openrouter/models/perplexity/sonar-deep-research.toml +++ b/providers/openrouter/models/perplexity/sonar-deep-research.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Sonar Deep Research" description = "Sonar search model for current answers, retrieval, and citation-backed chat" family = "sonar-deep-research" @@ -9,7 +11,9 @@ temperature = true tool_call = false structured_output = false open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 2 diff --git a/providers/openrouter/models/perplexity/sonar-reasoning-pro.toml b/providers/openrouter/models/perplexity/sonar-reasoning-pro.toml index 216c17e90ed..aceaa472fd5 100644 --- a/providers/openrouter/models/perplexity/sonar-reasoning-pro.toml +++ b/providers/openrouter/models/perplexity/sonar-reasoning-pro.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Sonar Reasoning Pro" description = "Web-grounded reasoning model for multi-step research and cited answers" family = "sonar-reasoning" @@ -9,7 +11,9 @@ temperature = true tool_call = false structured_output = false open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 2 diff --git a/providers/openrouter/models/poolside/laguna-s-2.1.toml b/providers/openrouter/models/poolside/laguna-s-2.1.toml index 0357d84da69..75ddbd0b613 100644 --- a/providers/openrouter/models/poolside/laguna-s-2.1.toml +++ b/providers/openrouter/models/poolside/laguna-s-2.1.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Laguna S 2.1" description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" family = "laguna-s" @@ -9,7 +11,9 @@ temperature = true tool_call = true structured_output = false open_weights = true -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 0.09 diff --git a/providers/openrouter/models/poolside/laguna-s-2.1:free.toml b/providers/openrouter/models/poolside/laguna-s-2.1:free.toml index 85050a7ee50..8e3c51877d8 100644 --- a/providers/openrouter/models/poolside/laguna-s-2.1:free.toml +++ b/providers/openrouter/models/poolside/laguna-s-2.1:free.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Laguna S 2.1 (free)" description = "Free provider route for experiments, demos, and cost-sensitive chat workloads" family = "laguna-s" @@ -9,7 +11,9 @@ temperature = true tool_call = true structured_output = false open_weights = true -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 0 diff --git a/providers/openrouter/models/poolside/laguna-xs-2.1.toml b/providers/openrouter/models/poolside/laguna-xs-2.1.toml index f3a506b8121..f2dc3feeac9 100644 --- a/providers/openrouter/models/poolside/laguna-xs-2.1.toml +++ b/providers/openrouter/models/poolside/laguna-xs-2.1.toml @@ -1,5 +1,9 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "poolside/laguna-xs-2.1" -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 0.06 diff --git a/providers/openrouter/models/poolside/laguna-xs-2.1:free.toml b/providers/openrouter/models/poolside/laguna-xs-2.1:free.toml index 9e6fbbab9d3..3f290d3dce8 100644 --- a/providers/openrouter/models/poolside/laguna-xs-2.1:free.toml +++ b/providers/openrouter/models/poolside/laguna-xs-2.1:free.toml @@ -1,7 +1,11 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "poolside/laguna-xs-2.1" name = "Laguna XS 2.1 (free)" description = "Free provider route for experiments, demos, and cost-sensitive chat workloads" -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 0 diff --git a/providers/openrouter/models/prism-ml/ternary-bonsai-2-27b.toml b/providers/openrouter/models/prism-ml/ternary-bonsai-2-27b.toml new file mode 100644 index 00000000000..316e8fde320 --- /dev/null +++ b/providers/openrouter/models/prism-ml/ternary-bonsai-2-27b.toml @@ -0,0 +1,31 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens +name = "Ternary Bonsai 2 27B" +description = "Multimodal reasoning model for visual analysis, planning, and tool use" +release_date = "2026-09-18" +last_updated = "2026-09-18" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["medium", "xhigh"] + +[cost] +input = 0.075 +output = 0.5 + +[limit] +context = 262_144 +output = 32_768 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/openrouter/models/qwen/qwen2.5-vl-72b-instruct.toml b/providers/openrouter/models/qwen/qwen2.5-vl-72b-instruct.toml index c0bba4820f6..b32e69d51d6 100644 --- a/providers/openrouter/models/qwen/qwen2.5-vl-72b-instruct.toml +++ b/providers/openrouter/models/qwen/qwen2.5-vl-72b-instruct.toml @@ -12,12 +12,13 @@ knowledge = "2024-06-30" open_weights = true [cost] -input = 0.25 -output = 0.75 +input = 0.8 +output = 1 +cache_read = 0.4 [limit] context = 128_000 -output = 28_800 +output = 115_200 [modalities] input = ["text", "image"] diff --git a/providers/openrouter/models/qwen/qwen3-14b.toml b/providers/openrouter/models/qwen/qwen3-14b.toml index 2e47169c42b..b10030292e3 100644 --- a/providers/openrouter/models/qwen/qwen3-14b.toml +++ b/providers/openrouter/models/qwen/qwen3-14b.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Qwen3 14B" description = "Qwen instruction model for multilingual chat, reasoning, and tool use" family = "qwen" diff --git a/providers/openrouter/models/qwen/qwen3-235b-a22b-2507.toml b/providers/openrouter/models/qwen/qwen3-235b-a22b-2507.toml index aa706cc488b..0d691163001 100644 --- a/providers/openrouter/models/qwen/qwen3-235b-a22b-2507.toml +++ b/providers/openrouter/models/qwen/qwen3-235b-a22b-2507.toml @@ -12,12 +12,13 @@ knowledge = "2025-06-30" open_weights = true [cost] -input = 0.09 -output = 0.55 +input = 0.0875 +output = 0.35 +cache_read = 0.0175 [limit] context = 262_144 -output = 16_384 +output = 235_929 [modalities] input = ["text"] diff --git a/providers/openrouter/models/qwen/qwen3-235b-a22b.toml b/providers/openrouter/models/qwen/qwen3-235b-a22b.toml index c607f7353cc..3f3f59b0214 100644 --- a/providers/openrouter/models/qwen/qwen3-235b-a22b.toml +++ b/providers/openrouter/models/qwen/qwen3-235b-a22b.toml @@ -1,14 +1,11 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "alibaba/qwen3-235b-a22b" structured_output = false [[reasoning_options]] type = "toggle" -[[reasoning_options]] -type = "budget_tokens" -min = 1 -max = 38_912 - [cost] input = 0.455 output = 1.82 diff --git a/providers/openrouter/models/qwen/qwen3-30b-a3b.toml b/providers/openrouter/models/qwen/qwen3-30b-a3b.toml index 6c07fb64c63..dca225b27ec 100644 --- a/providers/openrouter/models/qwen/qwen3-30b-a3b.toml +++ b/providers/openrouter/models/qwen/qwen3-30b-a3b.toml @@ -1,6 +1,8 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "alibaba/qwen3-30b-a3b" description = "Qwen instruction model for multilingual chat, reasoning, and tool use" -structured_output = false +structured_output = true [[reasoning_options]] type = "toggle" diff --git a/providers/openrouter/models/qwen/qwen3-max-thinking.toml b/providers/openrouter/models/qwen/qwen3-max-thinking.toml index 199f89f89ba..7eb62a6a784 100644 --- a/providers/openrouter/models/qwen/qwen3-max-thinking.toml +++ b/providers/openrouter/models/qwen/qwen3-max-thinking.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Qwen3 Max Thinking" description = "Qwen reasoning model for deliberate problem solving, math, and coding" family = "qwen" @@ -11,9 +13,7 @@ structured_output = true open_weights = false [[reasoning_options]] -type = "budget_tokens" -min = 1 -max = 81_920 +type = "toggle" [cost] input = 0.78 diff --git a/providers/openrouter/models/qwen/qwen3-next-80b-a3b-instruct.toml b/providers/openrouter/models/qwen/qwen3-next-80b-a3b-instruct.toml index 31bb83cc8bb..64deac24f44 100644 --- a/providers/openrouter/models/qwen/qwen3-next-80b-a3b-instruct.toml +++ b/providers/openrouter/models/qwen/qwen3-next-80b-a3b-instruct.toml @@ -2,10 +2,9 @@ base_model = "alibaba/qwen3-next-80b-a3b-instruct" structured_output = true [cost] -input = 0.1 +input = 0.09 output = 1.1 -cache_read = 0.07 [limit] context = 262_144 -output = 235_929 +output = 16_384 diff --git a/providers/openrouter/models/qwen/qwen3-next-80b-a3b-thinking.toml b/providers/openrouter/models/qwen/qwen3-next-80b-a3b-thinking.toml index 14e222d894d..35f13bee686 100644 --- a/providers/openrouter/models/qwen/qwen3-next-80b-a3b-thinking.toml +++ b/providers/openrouter/models/qwen/qwen3-next-80b-a3b-thinking.toml @@ -8,3 +8,4 @@ output = 1.2 [limit] context = 262_144 +output = 235_929 diff --git a/providers/openrouter/models/qwen/qwen3.5-122b-a10b.toml b/providers/openrouter/models/qwen/qwen3.5-122b-a10b.toml index 726aba0bf25..cf242b0a0f9 100644 --- a/providers/openrouter/models/qwen/qwen3.5-122b-a10b.toml +++ b/providers/openrouter/models/qwen/qwen3.5-122b-a10b.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "alibaba/qwen3.5-122b-a10b" [[reasoning_options]] @@ -7,8 +9,5 @@ type = "toggle" input = 0.26 output = 2.08 -[limit] -output = 235_929 - [modalities] input = ["text", "image", "video"] diff --git a/providers/openrouter/models/qwen/qwen3.5-35b-a3b.toml b/providers/openrouter/models/qwen/qwen3.5-35b-a3b.toml index a1766f7f538..8257248c271 100644 --- a/providers/openrouter/models/qwen/qwen3.5-35b-a3b.toml +++ b/providers/openrouter/models/qwen/qwen3.5-35b-a3b.toml @@ -1,15 +1,17 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "alibaba/qwen3.5-35b-a3b" [[reasoning_options]] type = "toggle" [cost] -input = 0.25 +input = 0.3125 output = 1.25 -cache_read = 0.25 +cache_read = 0.15625 [limit] -output = 235_929 +output = 16_384 [modalities] input = ["text", "image", "video"] diff --git a/providers/openrouter/models/qwen/qwen3.5-397b-a17b.toml b/providers/openrouter/models/qwen/qwen3.5-397b-a17b.toml index a73eaf00e0e..a5c5b5bf91f 100644 --- a/providers/openrouter/models/qwen/qwen3.5-397b-a17b.toml +++ b/providers/openrouter/models/qwen/qwen3.5-397b-a17b.toml @@ -1,11 +1,17 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "alibaba/qwen3.5-397b-a17b" [[reasoning_options]] type = "toggle" [cost] -input = 0.39 -output = 2.34 +input = 0.55 +output = 3.5 +cache_read = 0.225 + +[limit] +output = 235_929 [modalities] input = ["text", "image", "video"] diff --git a/providers/openrouter/models/qwen/qwen3.5-9b.toml b/providers/openrouter/models/qwen/qwen3.5-9b.toml index 34660f4a8ed..8f34db0bc11 100644 --- a/providers/openrouter/models/qwen/qwen3.5-9b.toml +++ b/providers/openrouter/models/qwen/qwen3.5-9b.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "alibaba/qwen3.5-9b" [[reasoning_options]] @@ -8,4 +10,4 @@ input = 0.1 output = 0.15 [limit] -output = 235_929 +output = 32_768 diff --git a/providers/openrouter/models/qwen/qwen3.5-flash-02-23.toml b/providers/openrouter/models/qwen/qwen3.5-flash-02-23.toml index d2d16963acc..b794840a4f0 100644 --- a/providers/openrouter/models/qwen/qwen3.5-flash-02-23.toml +++ b/providers/openrouter/models/qwen/qwen3.5-flash-02-23.toml @@ -1,4 +1,5 @@ -reasoning_options = [{ type = "toggle" }, { type = "budget_tokens", min = 1, max = 81920 }] +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Qwen3.5-Flash" description = "Qwen vision-language model for visual reasoning, documents, and agent tasks" family = "qwen" @@ -11,6 +12,9 @@ tool_call = true structured_output = true open_weights = false +[[reasoning_options]] +type = "toggle" + [cost] input = 0.065 output = 0.26 diff --git a/providers/openrouter/models/qwen/qwen3.5-plus-02-15.toml b/providers/openrouter/models/qwen/qwen3.5-plus-02-15.toml index 42ace991588..72c8ade8b38 100644 --- a/providers/openrouter/models/qwen/qwen3.5-plus-02-15.toml +++ b/providers/openrouter/models/qwen/qwen3.5-plus-02-15.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Qwen3.5 Plus 2026-02-15" description = "Qwen vision-language model for visual reasoning, documents, and agent tasks" family = "qwen" @@ -14,11 +16,6 @@ open_weights = false [[reasoning_options]] type = "toggle" -[[reasoning_options]] -type = "budget_tokens" -min = 1 -max = 81_920 - [cost] input = 0.26 output = 1.56 diff --git a/providers/openrouter/models/qwen/qwen3.5-plus-20260420.toml b/providers/openrouter/models/qwen/qwen3.5-plus-20260420.toml index 88f4ec4b376..8b453ba9902 100644 --- a/providers/openrouter/models/qwen/qwen3.5-plus-20260420.toml +++ b/providers/openrouter/models/qwen/qwen3.5-plus-20260420.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Qwen3.5 Plus 2026-04-20" description = "Qwen vision-language model for visual reasoning, documents, and agent tasks" family = "qwen3.5" @@ -13,11 +15,6 @@ open_weights = false [[reasoning_options]] type = "toggle" -[[reasoning_options]] -type = "budget_tokens" -min = 1 -max = 81_920 - [cost] input = 0.3 output = 1.8 diff --git a/providers/openrouter/models/qwen/qwen3.6-27b.toml b/providers/openrouter/models/qwen/qwen3.6-27b.toml index bb7c7a435ef..c188473afdb 100644 --- a/providers/openrouter/models/qwen/qwen3.6-27b.toml +++ b/providers/openrouter/models/qwen/qwen3.6-27b.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "alibaba/qwen3.6-27b" [[reasoning_options]] @@ -5,10 +7,11 @@ type = "toggle" [cost] input = 0.32 -output = 3.2 +output = 2.7 +cache_read = 0.15 [limit] -output = 81_920 +output = 262_140 [modalities] input = ["text", "image", "video"] diff --git a/providers/openrouter/models/qwen/qwen3.6-35b-a3b.toml b/providers/openrouter/models/qwen/qwen3.6-35b-a3b.toml index c110dd8430f..a223e74df58 100644 --- a/providers/openrouter/models/qwen/qwen3.6-35b-a3b.toml +++ b/providers/openrouter/models/qwen/qwen3.6-35b-a3b.toml @@ -1,10 +1,12 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "alibaba/qwen3.6-35b-a3b" [[reasoning_options]] type = "toggle" [cost] -input = 0.14 +input = 0.15 output = 1 cache_read = 0.05 diff --git a/providers/openrouter/models/qwen/qwen3.6-flash.toml b/providers/openrouter/models/qwen/qwen3.6-flash.toml index 5f723cbff26..efbf5fea742 100644 --- a/providers/openrouter/models/qwen/qwen3.6-flash.toml +++ b/providers/openrouter/models/qwen/qwen3.6-flash.toml @@ -1,13 +1,10 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "alibaba/qwen3.6-flash" [[reasoning_options]] type = "toggle" -[[reasoning_options]] -type = "budget_tokens" -min = 1 -max = 81_920 - [cost] input = 0.1875 output = 1.125 diff --git a/providers/openrouter/models/qwen/qwen3.6-max-preview.toml b/providers/openrouter/models/qwen/qwen3.6-max-preview.toml index f6abb54fe40..635c24238b4 100644 --- a/providers/openrouter/models/qwen/qwen3.6-max-preview.toml +++ b/providers/openrouter/models/qwen/qwen3.6-max-preview.toml @@ -1,14 +1,11 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "alibaba/qwen3.6-max-preview" structured_output = true [[reasoning_options]] type = "toggle" -[[reasoning_options]] -type = "budget_tokens" -min = 1 -max = 131_072 - [cost] input = 1.027 output = 6.162 diff --git a/providers/openrouter/models/qwen/qwen3.6-plus.toml b/providers/openrouter/models/qwen/qwen3.6-plus.toml index 601d87077b1..34291103593 100644 --- a/providers/openrouter/models/qwen/qwen3.6-plus.toml +++ b/providers/openrouter/models/qwen/qwen3.6-plus.toml @@ -1,14 +1,11 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "alibaba/qwen3.6-plus" structured_output = true [[reasoning_options]] type = "toggle" -[[reasoning_options]] -type = "budget_tokens" -min = 1 -max = 81_920 - [cost] input = 0.325 output = 1.95 diff --git a/providers/openrouter/models/qwen/qwen3.7-flash.toml b/providers/openrouter/models/qwen/qwen3.7-flash.toml index 69e72585c8c..0b62b4dce7a 100644 --- a/providers/openrouter/models/qwen/qwen3.7-flash.toml +++ b/providers/openrouter/models/qwen/qwen3.7-flash.toml @@ -1,7 +1,12 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "alibaba/qwen3.7-flash" description = "Qwen vision-language model for visual reasoning, documents, and agent tasks" structured_output = false +[[reasoning_options]] +type = "toggle" + [[reasoning_options]] type = "budget_tokens" diff --git a/providers/openrouter/models/qwen/qwen3.7-max.toml b/providers/openrouter/models/qwen/qwen3.7-max.toml index 772a73bde77..08fbca07c1e 100644 --- a/providers/openrouter/models/qwen/qwen3.7-max.toml +++ b/providers/openrouter/models/qwen/qwen3.7-max.toml @@ -1,14 +1,11 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "alibaba/qwen3.7-max" structured_output = true [[reasoning_options]] type = "toggle" -[[reasoning_options]] -type = "budget_tokens" -min = 1 -max = 262_144 - [cost] input = 1.475 output = 4.425 diff --git a/providers/openrouter/models/qwen/qwen3.7-plus.toml b/providers/openrouter/models/qwen/qwen3.7-plus.toml index 50868c3df1f..532e531a541 100644 --- a/providers/openrouter/models/qwen/qwen3.7-plus.toml +++ b/providers/openrouter/models/qwen/qwen3.7-plus.toml @@ -1,14 +1,11 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "alibaba/qwen3.7-plus" structured_output = true [[reasoning_options]] type = "toggle" -[[reasoning_options]] -type = "budget_tokens" -min = 1 -max = 262_144 - [cost] input = 0.32 output = 1.28 diff --git a/providers/openrouter/models/qwen/qwen3.8-27b.toml b/providers/openrouter/models/qwen/qwen3.8-27b.toml index f443508a413..d1ddcffa2ed 100644 --- a/providers/openrouter/models/qwen/qwen3.8-27b.toml +++ b/providers/openrouter/models/qwen/qwen3.8-27b.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "alibaba/qwen3.8-27b" description = "Qwen vision-language model for visual reasoning, documents, and agent tasks" @@ -9,10 +11,9 @@ type = "effort" values = ["low", "medium", "xhigh"] [cost] -input = 0.425 -output = 2.55 +input = 0.42 +output = 3 cache_read = 0.085 -cache_write = 0.53125 [limit] context = 1_000_000 diff --git a/providers/openrouter/models/qwen/qwen3.8-27b:free.toml b/providers/openrouter/models/qwen/qwen3.8-27b:free.toml new file mode 100644 index 00000000000..51491fc303f --- /dev/null +++ b/providers/openrouter/models/qwen/qwen3.8-27b:free.toml @@ -0,0 +1,19 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens +base_model = "alibaba/qwen3.8-27b" +name = "Qwen3.8 27B (free)" +description = "Qwen vision-language model for visual reasoning, documents, and agent tasks" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] + +[cost] +input = 0 +output = 0 + +[limit] +output = 235_929 diff --git a/providers/openrouter/models/qwen/qwen3.8-flash.toml b/providers/openrouter/models/qwen/qwen3.8-flash.toml new file mode 100644 index 00000000000..620dd895e63 --- /dev/null +++ b/providers/openrouter/models/qwen/qwen3.8-flash.toml @@ -0,0 +1,16 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens +base_model = "alibaba/qwen3.8-flash" +temperature = true + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.15 +output = 0.47 +cache_read = 0.016 +cache_write = 0.2 diff --git a/providers/openrouter/models/qwen/qwen3.8-max-0902.toml b/providers/openrouter/models/qwen/qwen3.8-max-0902.toml new file mode 100644 index 00000000000..78275205850 --- /dev/null +++ b/providers/openrouter/models/qwen/qwen3.8-max-0902.toml @@ -0,0 +1,16 @@ +base_model = "alibaba/qwen3.8-max-0902" +description = "Qwen vision-language model for visual reasoning, documents, and agent tasks" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high", "xhigh"] + +[cost] +input = 2 +output = 6 +cache_read = 0.25 +cache_write = 2.5 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/openrouter/models/qwen/qwen3.8-max.toml b/providers/openrouter/models/qwen/qwen3.8-max.toml deleted file mode 100644 index d86d862997e..00000000000 --- a/providers/openrouter/models/qwen/qwen3.8-max.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "alibaba/qwen3.8-max" -description = "Qwen vision-language model for visual reasoning, documents, and agent tasks" -structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["minimal", "low", "medium", "high", "xhigh"] - -[cost] -input = 2 -output = 6 -cache_read = 0.25 -cache_write = 2.5 - -[modalities] -input = ["text", "image", "video"] diff --git a/providers/openrouter/models/qwen/qwen3.8-omni-flash.toml b/providers/openrouter/models/qwen/qwen3.8-omni-flash.toml new file mode 100644 index 00000000000..d5769de2059 --- /dev/null +++ b/providers/openrouter/models/qwen/qwen3.8-omni-flash.toml @@ -0,0 +1,16 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens +base_model = "alibaba/qwen3.8-omni-flash" +temperature = true +structured_output = true + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.15 +output = 0.47 +cache_read = 0.016 diff --git a/providers/openrouter/models/sakana/fugu-max.toml b/providers/openrouter/models/sakana/fugu-max.toml new file mode 100644 index 00000000000..ce44a62b12b --- /dev/null +++ b/providers/openrouter/models/sakana/fugu-max.toml @@ -0,0 +1,28 @@ +name = "Fugu Max" +description = "Multi-agent model for routing expert agents across complex analytical tasks" +family = "fugu" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["high", "xhigh", "max"] + +[cost] +input = 2 +output = 6 +cache_read = 0.25 + +[limit] +context = 1_000_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/openrouter/models/sakana/fugu-ultra-v2.toml b/providers/openrouter/models/sakana/fugu-ultra-v2.toml new file mode 100644 index 00000000000..60a24159724 --- /dev/null +++ b/providers/openrouter/models/sakana/fugu-ultra-v2.toml @@ -0,0 +1,35 @@ +name = "Fugu Ultra v2" +description = "Quality-first multi-agent model for hard research, analysis, and competitions" +family = "fugu" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +knowledge = "2026-08-28" +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["high", "xhigh", "max"] + +[cost] +input = 5 +output = 30 +cache_read = 0.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 10 +output = 45 +cache_read = 1 + +[limit] +context = 1_000_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/openrouter/models/tencent/hunyuan-a13b-instruct.toml b/providers/openrouter/models/tencent/hunyuan-a13b-instruct.toml index 4af12259f08..d9d48787987 100644 --- a/providers/openrouter/models/tencent/hunyuan-a13b-instruct.toml +++ b/providers/openrouter/models/tencent/hunyuan-a13b-instruct.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Hunyuan A13B Instruct" description = "Tencent Hy reasoning model for coding, instruction following, and agent tasks" family = "hunyuan" @@ -10,7 +12,9 @@ tool_call = false structured_output = true knowledge = "2025-03-31" open_weights = true -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 0.14 diff --git a/providers/openrouter/models/tencent/hy3.toml b/providers/openrouter/models/tencent/hy3.toml index 3b9b7ca7964..f61fa3175e9 100644 --- a/providers/openrouter/models/tencent/hy3.toml +++ b/providers/openrouter/models/tencent/hy3.toml @@ -12,4 +12,3 @@ cache_read = 0.020625 [limit] context = 262_144 -output = 128_000 diff --git a/providers/openrouter/models/tencent/hy4-preview.toml b/providers/openrouter/models/tencent/hy4-preview.toml new file mode 100644 index 00000000000..e39f8986b6d --- /dev/null +++ b/providers/openrouter/models/tencent/hy4-preview.toml @@ -0,0 +1,15 @@ +base_model = "tencent/hy4-preview" +description = "Tencent Hy reasoning model for coding, instruction following, and agent tasks" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high"] + +[cost] +input = 0.834 +output = 2.501 +cache_read = 0.042 + +[limit] +context = 1_048_576 diff --git a/providers/openrouter/models/thedrummer/rocinante-12b.toml b/providers/openrouter/models/thedrummer/rocinante-12b.toml deleted file mode 100644 index 911a35b0533..00000000000 --- a/providers/openrouter/models/thedrummer/rocinante-12b.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Rocinante 12B" -description = "Open-weight instruction model for adaptable chat and self-hosted production workloads" -release_date = "2024-09-30" -last_updated = "2024-09-30" -attachment = false -reasoning = false -temperature = true -tool_call = false -structured_output = true -knowledge = "2024-04-30" -open_weights = true - -[cost] -input = 0.25 -output = 0.5 - -[limit] -context = 65_536 -output = 58_982 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/openrouter/models/thedrummer/unslopnemo-12b.toml b/providers/openrouter/models/thedrummer/unslopnemo-12b.toml index 4d6dfbacd79..2b733ccb0cb 100644 --- a/providers/openrouter/models/thedrummer/unslopnemo-12b.toml +++ b/providers/openrouter/models/thedrummer/unslopnemo-12b.toml @@ -5,7 +5,7 @@ last_updated = "2024-11-08" attachment = false reasoning = false temperature = true -tool_call = true +tool_call = false structured_output = true knowledge = "2024-04-30" open_weights = true @@ -16,7 +16,7 @@ output = 0.4 [limit] context = 1_024_000 -output = 26_214 +output = 819_200 [modalities] input = ["text"] diff --git a/providers/openrouter/models/thinkingmachines/inkling.toml b/providers/openrouter/models/thinkingmachines/inkling.toml index 513922adcef..1a64ecd26f3 100644 --- a/providers/openrouter/models/thinkingmachines/inkling.toml +++ b/providers/openrouter/models/thinkingmachines/inkling.toml @@ -7,9 +7,9 @@ type = "effort" values = ["none", "minimal", "low", "medium", "high", "max"] [cost] -input = 0.95 +input = 1 output = 4.05 -cache_read = 0.16 +cache_read = 0.17 [limit] -output = 262_144 +output = 471_859 diff --git a/providers/openrouter/models/unbiased/pareto.toml b/providers/openrouter/models/unbiased/pareto.toml new file mode 100644 index 00000000000..19990e346ff --- /dev/null +++ b/providers/openrouter/models/unbiased/pareto.toml @@ -0,0 +1,6 @@ +base_model = "unbiased/pareto" + +[cost] +input = 2.5 +output = 7.5 +cache_read = 0.25 diff --git a/providers/openrouter/models/undi95/remm-slerp-l2-13b.toml b/providers/openrouter/models/undi95/remm-slerp-l2-13b.toml index 1f9dedc63f2..abddf28ecbc 100644 --- a/providers/openrouter/models/undi95/remm-slerp-l2-13b.toml +++ b/providers/openrouter/models/undi95/remm-slerp-l2-13b.toml @@ -11,12 +11,12 @@ knowledge = "2023-06-30" open_weights = true [cost] -input = 0.45 +input = 0.35 output = 0.65 [limit] context = 6_144 -output = 4_096 +output = 5_529 [modalities] input = ["text"] diff --git a/providers/openrouter/models/upstage/solar-mini4.toml b/providers/openrouter/models/upstage/solar-mini4.toml new file mode 100644 index 00000000000..e64d7840ac6 --- /dev/null +++ b/providers/openrouter/models/upstage/solar-mini4.toml @@ -0,0 +1,28 @@ +name = "Solar Mini 4" +description = "Efficient model for low-latency assistance, extraction, and routine automation" +family = "solar" +release_date = "2026-09-23" +last_updated = "2026-09-23" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.05 +output = 0.2 +cache_read = 0.005 + +[limit] +context = 524_288 +output = 131_072 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/openrouter/models/upstage/solar-pro-3.toml b/providers/openrouter/models/upstage/solar-pro-3.toml index 7d71a472c5f..c9eda434a24 100644 --- a/providers/openrouter/models/upstage/solar-pro-3.toml +++ b/providers/openrouter/models/upstage/solar-pro-3.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Solar Pro 3" description = "Flagship model for demanding analysis, coding, and production agent workflows" family = "solar-pro" @@ -9,7 +11,10 @@ temperature = true tool_call = true structured_output = true open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high"] [cost] input = 0.15 diff --git a/providers/openrouter/models/upstage/solar-pro4.toml b/providers/openrouter/models/upstage/solar-pro4.toml index 668c1cd157e..7e3d19352a7 100644 --- a/providers/openrouter/models/upstage/solar-pro4.toml +++ b/providers/openrouter/models/upstage/solar-pro4.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Solar Pro 4" description = "Flagship model for demanding analysis, coding, and production agent workflows" family = "solar" @@ -9,12 +11,15 @@ temperature = true tool_call = true structured_output = true open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [cost] -input = 0.03 -output = 0.12 -cache_read = 0.006 +input = 0.09 +output = 0.36 +cache_read = 0.018 [limit] context = 524_288 diff --git a/providers/openrouter/models/x-ai/grok-4.20.toml b/providers/openrouter/models/x-ai/grok-4.20.toml index ef19c8b3c7a..0f5920b9caf 100644 --- a/providers/openrouter/models/x-ai/grok-4.20.toml +++ b/providers/openrouter/models/x-ai/grok-4.20.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "Grok 4.20" description = "Grok model for agentic tool use, reasoning, coding, and live assistance" family = "grok" @@ -10,7 +12,9 @@ tool_call = true structured_output = true knowledge = "2025-09-01" open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 1.25 diff --git a/providers/openrouter/models/x-ai/grok-4.7.toml b/providers/openrouter/models/x-ai/grok-4.7.toml new file mode 100644 index 00000000000..3ffa2ff7ae3 --- /dev/null +++ b/providers/openrouter/models/x-ai/grok-4.7.toml @@ -0,0 +1,20 @@ +base_model = "xai/grok-4.7" +description = "Grok model for agentic tool use, reasoning, coding, and live assistance" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh"] + +[cost] +input = 1.6 +output = 4.8 +cache_read = 0.4 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 3.2 +output = 9.6 +cache_read = 0.8 + +[limit] +output = 450_000 diff --git a/providers/openrouter/models/xiaomi/mimo-v2.6-flash.toml b/providers/openrouter/models/xiaomi/mimo-v2.6-flash.toml new file mode 100644 index 00000000000..e1bb054f013 --- /dev/null +++ b/providers/openrouter/models/xiaomi/mimo-v2.6-flash.toml @@ -0,0 +1,13 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens +base_model = "xiaomi/mimo-v2.6-flash" +description = "MiMo flash model for fast multimodal assistance and agent workflows" +structured_output = true + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.14 +output = 0.28 +cache_read = 0.0028 diff --git a/providers/openrouter/models/xiaomi/mimo-v2.6-pro-ultraspeed.toml b/providers/openrouter/models/xiaomi/mimo-v2.6-pro-ultraspeed.toml new file mode 100644 index 00000000000..e7a245618f3 --- /dev/null +++ b/providers/openrouter/models/xiaomi/mimo-v2.6-pro-ultraspeed.toml @@ -0,0 +1,13 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens +base_model = "xiaomi/mimo-v2.6-pro-ultraspeed" +description = "MiMo pro model for strong multimodal reasoning and agent execution" +structured_output = true + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 4.35 +output = 8.7 +cache_read = 0.036 diff --git a/providers/openrouter/models/xiaomi/mimo-v2.6-pro.toml b/providers/openrouter/models/xiaomi/mimo-v2.6-pro.toml new file mode 100644 index 00000000000..7f938318372 --- /dev/null +++ b/providers/openrouter/models/xiaomi/mimo-v2.6-pro.toml @@ -0,0 +1,13 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens +base_model = "xiaomi/mimo-v2.6-pro" +description = "MiMo pro model for strong multimodal reasoning and agent execution" +structured_output = true + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.435 +output = 0.87 +cache_read = 0.0036 diff --git a/providers/openrouter/models/z-ai/glm-4.6.toml b/providers/openrouter/models/z-ai/glm-4.6.toml index cae4e80102b..9a813d7b44e 100644 --- a/providers/openrouter/models/z-ai/glm-4.6.toml +++ b/providers/openrouter/models/z-ai/glm-4.6.toml @@ -1,8 +1,15 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "zhipuai/glm-4.6" structured_output = true -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] -input = 0.5 -output = 2 -cache_read = 0.1 +input = 0.43 +output = 1.75 +cache_read = 0.08 + +[limit] +output = 16_384 diff --git a/providers/openrouter/models/z-ai/glm-4.6v.toml b/providers/openrouter/models/z-ai/glm-4.6v.toml index f52538d7580..8a395d6a0c1 100644 --- a/providers/openrouter/models/z-ai/glm-4.6v.toml +++ b/providers/openrouter/models/z-ai/glm-4.6v.toml @@ -1,6 +1,10 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "zhipuai/glm-4.6v" structured_output = false -reasoning_options = [] + +[[reasoning_options]] +type = "toggle" [cost] input = 0.3 diff --git a/providers/openrouter/models/z-ai/glm-4.7-flash.toml b/providers/openrouter/models/z-ai/glm-4.7-flash.toml index 378e86c424d..f2fda12e7c2 100644 --- a/providers/openrouter/models/z-ai/glm-4.7-flash.toml +++ b/providers/openrouter/models/z-ai/glm-4.7-flash.toml @@ -1,15 +1,17 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "zhipuai/glm-4.7-flash" structured_output = true -reasoning_options = [] [interleaved] field = "reasoning_details" +[[reasoning_options]] +type = "toggle" + [cost] -input = 0.06 +input = 0.0605 output = 0.4 -cache_read = 0.01 [limit] -context = 202_752 -output = 16_384 +output = 117_964 diff --git a/providers/openrouter/models/z-ai/glm-4.7.toml b/providers/openrouter/models/z-ai/glm-4.7.toml index 5055d1b819a..6471f3670cd 100644 --- a/providers/openrouter/models/z-ai/glm-4.7.toml +++ b/providers/openrouter/models/z-ai/glm-4.7.toml @@ -1,10 +1,14 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "zhipuai/glm-4.7" structured_output = true -reasoning_options = [] [interleaved] field = "reasoning_details" +[[reasoning_options]] +type = "toggle" + [cost] input = 0.4 output = 1.75 diff --git a/providers/openrouter/models/z-ai/glm-5-turbo.toml b/providers/openrouter/models/z-ai/glm-5-turbo.toml index beeb3705236..906c3480673 100644 --- a/providers/openrouter/models/z-ai/glm-5-turbo.toml +++ b/providers/openrouter/models/z-ai/glm-5-turbo.toml @@ -1,10 +1,14 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "zhipuai/glm-5-turbo" structured_output = false -reasoning_options = [] [interleaved] field = "reasoning_content" +[[reasoning_options]] +type = "toggle" + [cost] input = 1.2 output = 4 diff --git a/providers/openrouter/models/z-ai/glm-5.1.toml b/providers/openrouter/models/z-ai/glm-5.1.toml index ecc2b7c648d..5833f33e6e0 100644 --- a/providers/openrouter/models/z-ai/glm-5.1.toml +++ b/providers/openrouter/models/z-ai/glm-5.1.toml @@ -1,14 +1,18 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "zhipuai/glm-5.1" -reasoning_options = [] [interleaved] field = "reasoning_content" +[[reasoning_options]] +type = "toggle" + [cost] -input = 1.26 -output = 3.96 -cache_read = 0.234 +input = 0.966 +output = 3.036 +cache_read = 0.1794 [limit] context = 204_800 -output = 182_476 +output = 128_000 diff --git a/providers/openrouter/models/z-ai/glm-5.2.toml b/providers/openrouter/models/z-ai/glm-5.2.toml index 6991b6090c0..e1246ed1b0a 100644 --- a/providers/openrouter/models/z-ai/glm-5.2.toml +++ b/providers/openrouter/models/z-ai/glm-5.2.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "zhipuai/glm-5.2" [interleaved] @@ -11,10 +13,9 @@ type = "effort" values = ["high", "xhigh"] [cost] -input = 1.19 -output = 3.74 -cache_read = 0.221 +input = 0.6496 +output = 2.0416 +cache_read = 0.12064 [limit] context = 1_048_576 -output = 262_144 diff --git a/providers/openrouter/models/z-ai/glm-5.2:free.toml b/providers/openrouter/models/z-ai/glm-5.2:free.toml index 4139b667397..a48b6dabee1 100644 --- a/providers/openrouter/models/z-ai/glm-5.2:free.toml +++ b/providers/openrouter/models/z-ai/glm-5.2:free.toml @@ -1,6 +1,10 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "zhipuai/glm-5.2" name = "GLM 5.2 (free)" description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" +tool_call = false +structured_output = false [[reasoning_options]] type = "toggle" @@ -14,5 +18,5 @@ input = 0 output = 0 [limit] -context = 256_000 -output = 230_400 +context = 32_768 +output = 29_491 diff --git a/providers/openrouter/models/z-ai/glm-5.3-flash.toml b/providers/openrouter/models/z-ai/glm-5.3-flash.toml index 894e0ea18fb..188a84f8fb5 100644 --- a/providers/openrouter/models/z-ai/glm-5.3-flash.toml +++ b/providers/openrouter/models/z-ai/glm-5.3-flash.toml @@ -1,18 +1,18 @@ base_model = "zhipuai/glm-5.3-flash" description = "GLM vision model for visual reasoning, documents, and multimodal agents" -structured_output = false [[reasoning_options]] type = "effort" values = ["low", "high", "max"] [cost] -input = 0.075 -output = 0.25 -cache_read = 0.015 +input = 0.15 +output = 0.5 +cache_read = 0.05 [limit] -context = 1_048_576 +context = 1_310_720 +output = 943_718 [modalities] input = ["text", "image", "video"] diff --git a/providers/openrouter/models/z-ai/glm-5.3-flashx.toml b/providers/openrouter/models/z-ai/glm-5.3-flashx.toml new file mode 100644 index 00000000000..4e45607c192 --- /dev/null +++ b/providers/openrouter/models/z-ai/glm-5.3-flashx.toml @@ -0,0 +1,28 @@ +name = "GLM 5.3 FlashX" +description = "GLM vision model for visual reasoning, documents, and multimodal agents" +family = "glm" +release_date = "2026-09-18" +last_updated = "2026-09-18" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.37 +output = 1.25 +cache_read = 0.09 + +[limit] +context = 1_048_576 +output = 131_072 + +[modalities] +input = ["text", "image", "video"] +output = ["text"] diff --git a/providers/openrouter/models/z-ai/glm-5.3.toml b/providers/openrouter/models/z-ai/glm-5.3.toml index e777e1a5cf0..8b9af97ef26 100644 --- a/providers/openrouter/models/z-ai/glm-5.3.toml +++ b/providers/openrouter/models/z-ai/glm-5.3.toml @@ -1,15 +1,14 @@ base_model = "zhipuai/glm-5.3" description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -structured_output = false [[reasoning_options]] type = "effort" values = ["low", "high", "max"] [cost] -input = 1.4 -output = 4.4 -cache_read = 0.26 +input = 0.84 +output = 2.64 +cache_read = 0.156 [limit] -context = 1_048_576 +context = 1_310_720 diff --git a/providers/openrouter/models/z-ai/glm-5.toml b/providers/openrouter/models/z-ai/glm-5.toml index c7ad523fd4a..49f3f9e0744 100644 --- a/providers/openrouter/models/z-ai/glm-5.toml +++ b/providers/openrouter/models/z-ai/glm-5.toml @@ -1,10 +1,14 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "zhipuai/glm-5" structured_output = true -reasoning_options = [] [interleaved] field = "reasoning_content" +[[reasoning_options]] +type = "toggle" + [cost] input = 0.6 output = 1.92 diff --git a/providers/openrouter/models/z-ai/glm-5v-turbo.toml b/providers/openrouter/models/z-ai/glm-5v-turbo.toml index 94f84f0e662..d5df6f56d83 100644 --- a/providers/openrouter/models/z-ai/glm-5v-turbo.toml +++ b/providers/openrouter/models/z-ai/glm-5v-turbo.toml @@ -1,7 +1,11 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens base_model = "zhipuai/glm-5v-turbo" -reasoning_options = [] structured_output = false +[[reasoning_options]] +type = "toggle" + [cost] input = 1.2 output = 4 diff --git a/providers/openrouter/models/~anthropic/claude-fable-latest.toml b/providers/openrouter/models/~anthropic/claude-fable-latest.toml index 5eb3002ec4c..384dddac050 100644 --- a/providers/openrouter/models/~anthropic/claude-fable-latest.toml +++ b/providers/openrouter/models/~anthropic/claude-fable-latest.toml @@ -1,6 +1,5 @@ # This route maps effort through top-level `verbosity`, not `reasoning.effort`. # https://openrouter.ai/docs/api/reference/parameters#verbosity (accessed 2026-06-25) -reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] name = "Claude Fable Latest" description = "Claude model for creative writing, analysis, and controlled agent workflows" family = "claude-fable" @@ -13,10 +12,14 @@ tool_call = true structured_output = true open_weights = false +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + [cost] input = 10 output = 50 -cache_read = 1 +cache_read = 0.25 cache_write = 12.5 [limit] diff --git a/providers/openrouter/models/~anthropic/claude-haiku-latest.toml b/providers/openrouter/models/~anthropic/claude-haiku-latest.toml index 85dc865f562..b943d5f3841 100644 --- a/providers/openrouter/models/~anthropic/claude-haiku-latest.toml +++ b/providers/openrouter/models/~anthropic/claude-haiku-latest.toml @@ -1,5 +1,6 @@ -reasoning_options = [{ type = "toggle" }, { type = "budget_tokens", min = 1024, max = 63999 }] -name = "Anthropic Claude Haiku Latest" +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens +name = "Claude Haiku Latest" description = "Fast Claude model for responsive assistance, classification, and lightweight agents" family = "claude-haiku" release_date = "2026-04-27" @@ -11,6 +12,9 @@ tool_call = true structured_output = true open_weights = false +[[reasoning_options]] +type = "toggle" + [cost] input = 1 output = 5 diff --git a/providers/openrouter/models/~anthropic/claude-opus-latest.toml b/providers/openrouter/models/~anthropic/claude-opus-latest.toml index f4dce5e6b4e..8057256dd8c 100644 --- a/providers/openrouter/models/~anthropic/claude-opus-latest.toml +++ b/providers/openrouter/models/~anthropic/claude-opus-latest.toml @@ -12,18 +12,15 @@ tool_call = true structured_output = true open_weights = false -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" values = ["low", "medium", "high", "xhigh", "max"] [cost] -input = 5 -output = 25 -cache_read = 0.5 -cache_write = 6.25 +input = 4 +output = 20 +cache_read = 0.2 +cache_write = 5 [limit] context = 1_000_000 diff --git a/providers/openrouter/models/~anthropic/claude-sonnet-latest.toml b/providers/openrouter/models/~anthropic/claude-sonnet-latest.toml index 18e2ed6e310..b121dec2b42 100644 --- a/providers/openrouter/models/~anthropic/claude-sonnet-latest.toml +++ b/providers/openrouter/models/~anthropic/claude-sonnet-latest.toml @@ -1,6 +1,6 @@ # OpenRouter alias currently redirects to Claude Sonnet 5. # https://openrouter.ai/~anthropic/claude-sonnet-latest -name = "Anthropic Claude Sonnet Latest" +name = "Claude Sonnet Latest" description = "Balanced Claude model for coding, analysis, agent workflows, and cost control" family = "claude-sonnet" release_date = "2026-04-27" diff --git a/providers/openrouter/models/~deepseek/deepseek-flash-latest.toml b/providers/openrouter/models/~deepseek/deepseek-flash-latest.toml new file mode 100644 index 00000000000..a3bff918037 --- /dev/null +++ b/providers/openrouter/models/~deepseek/deepseek-flash-latest.toml @@ -0,0 +1,33 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens +name = "DeepSeek Flash Latest" +description = "Fast DeepSeek model for efficient chat, coding help, and agent loops" +family = "deepseek-flash" +release_date = "2026-09-14" +last_updated = "2026-09-14" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.1 +output = 0.5 +cache_read = 0.01 + +[limit] +context = 1_048_576 +output = 943_718 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/openrouter/models/~deepseek/deepseek-pro-latest.toml b/providers/openrouter/models/~deepseek/deepseek-pro-latest.toml new file mode 100644 index 00000000000..5a32de51cb5 --- /dev/null +++ b/providers/openrouter/models/~deepseek/deepseek-pro-latest.toml @@ -0,0 +1,33 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens +name = "DeepSeek Pro Latest" +description = "Flagship DeepSeek model for coding, reasoning, and agentic work" +family = "deepseek" +release_date = "2026-09-14" +last_updated = "2026-09-14" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.39996 +output = 1.19988 +cache_read = 0.012726 + +[limit] +context = 1_048_576 +output = 393_216 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/openrouter/models/~deepseek/deepseek-v4-flash-latest.toml b/providers/openrouter/models/~deepseek/deepseek-v4-flash-latest.toml index 7bd172e6fed..f4f9f511585 100644 --- a/providers/openrouter/models/~deepseek/deepseek-v4-flash-latest.toml +++ b/providers/openrouter/models/~deepseek/deepseek-v4-flash-latest.toml @@ -1,3 +1,5 @@ +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens name = "DeepSeek V4 Flash Latest" description = "Fast DeepSeek model for efficient chat, coding help, and agent loops" family = "deepseek" @@ -18,13 +20,13 @@ type = "effort" values = ["low", "high", "max"] [cost] -input = 0.03 -output = 0.075 -cache_read = 0.007 +input = 0.038 +output = 0.55 +cache_read = 0.0228 [limit] context = 1_310_720 -output = 131_072 +output = 943_718 [modalities] input = ["text"] diff --git a/providers/openrouter/models/~google/gemini-flash-latest.toml b/providers/openrouter/models/~google/gemini-flash-latest.toml index 8dfb0cceba0..c9245734fc4 100644 --- a/providers/openrouter/models/~google/gemini-flash-latest.toml +++ b/providers/openrouter/models/~google/gemini-flash-latest.toml @@ -1,6 +1,6 @@ # OpenRouter alias currently redirects to Gemini 3.5 Flash. # https://openrouter.ai/~google/gemini-flash-latest -name = "Google Gemini Flash Latest" +name = "Gemini Flash Latest" description = "Fast Gemini model balancing multimodal reasoning, tool use, and cost" family = "gemini-flash" release_date = "2026-04-27" @@ -18,11 +18,11 @@ type = "effort" values = ["low", "medium", "high"] [cost] -input = 0.375 -output = 1.875 -reasoning = 1.875 -cache_read = 0.0375 -cache_write = 0.020833 +input = 0.75 +output = 3.75 +reasoning = 3.75 +cache_read = 0.075 +cache_write = 0.041667 [limit] context = 1_048_576 diff --git a/providers/openrouter/models/~google/gemini-pro-latest.toml b/providers/openrouter/models/~google/gemini-pro-latest.toml index b25ad638e3f..ac436847d43 100644 --- a/providers/openrouter/models/~google/gemini-pro-latest.toml +++ b/providers/openrouter/models/~google/gemini-pro-latest.toml @@ -1,6 +1,6 @@ # OpenRouter alias currently redirects to Gemini 3.1 Pro Preview. # https://openrouter.ai/~google/gemini-pro-latest -name = "Google Gemini Pro Latest" +name = "Gemini Pro Latest" description = "Advanced Gemini model for complex reasoning, coding, and multimodal analysis" family = "gemini-pro" release_date = "2026-04-27" diff --git a/providers/openrouter/models/~moonshotai/kimi-latest.toml b/providers/openrouter/models/~moonshotai/kimi-latest.toml index 7912c0ac3a3..0aebd435d56 100644 --- a/providers/openrouter/models/~moonshotai/kimi-latest.toml +++ b/providers/openrouter/models/~moonshotai/kimi-latest.toml @@ -1,4 +1,6 @@ -name = "MoonshotAI Kimi Latest" +# Toggle: reasoning.enabled = true|false +# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens +name = "Kimi Latest" description = "Kimi multimodal agent model for visual understanding, coding, and planning" family = "kimi" release_date = "2026-04-27" @@ -18,9 +20,9 @@ type = "effort" values = ["low", "high", "max"] [cost] -input = 2.55 -output = 12.75 -cache_read = 0.256 +input = 1.4989 +output = 10.758 +cache_read = 0.3 [limit] context = 1_048_576 diff --git a/providers/openrouter/models/~openai/gpt-astra-latest.toml b/providers/openrouter/models/~openai/gpt-astra-latest.toml new file mode 100644 index 00000000000..9922e3acf6d --- /dev/null +++ b/providers/openrouter/models/~openai/gpt-astra-latest.toml @@ -0,0 +1,36 @@ +name = "GPT Astra Latest" +description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" +family = "gpt-astra" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 20 +output = 75 +cache_read = 2 +cache_write = 25 + +[limit] +context = 1_050_000 +output = 128_000 + +[modalities] +input = ["pdf", "image", "text"] +output = ["text"] diff --git a/providers/openrouter/models/~openai/gpt-latest.toml b/providers/openrouter/models/~openai/gpt-latest.toml deleted file mode 100644 index 10fad96622b..00000000000 --- a/providers/openrouter/models/~openai/gpt-latest.toml +++ /dev/null @@ -1,39 +0,0 @@ -# OpenRouter alias currently redirects to GPT-5.6 Sol. -# https://openrouter.ai/~openai/gpt-latest -name = "OpenAI GPT Latest" -description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" -family = "gpt" -release_date = "2026-04-27" -last_updated = "2026-04-27" -attachment = true -reasoning = true -temperature = false -tool_call = true -structured_output = true -knowledge = "2026-02-16" -open_weights = false - -[[reasoning_options]] -type = "effort" -values = ["none", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 2 -output = 10 -cache_read = 0.2 -cache_write = 2.5 - -[[cost.tiers]] -tier = { type = "context", size = 272_000 } -input = 4 -output = 15 -cache_read = 0.4 -cache_write = 5 - -[limit] -context = 1_050_000 -output = 128_000 - -[modalities] -input = ["pdf", "image", "text"] -output = ["text"] diff --git a/providers/openrouter/models/~openai/gpt-luna-latest.toml b/providers/openrouter/models/~openai/gpt-luna-latest.toml new file mode 100644 index 00000000000..5324cf22735 --- /dev/null +++ b/providers/openrouter/models/~openai/gpt-luna-latest.toml @@ -0,0 +1,37 @@ +name = "GPT Luna Latest" +description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" +family = "gpt-luna" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +knowledge = "2026-02-16" +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.1 +output = 0.5 +cache_read = 0.01 +cache_write = 0.125 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 0.2 +output = 0.75 +cache_read = 0.02 +cache_write = 0.25 + +[limit] +context = 1_050_000 +output = 128_000 + +[modalities] +input = ["pdf", "image", "text"] +output = ["text"] diff --git a/providers/openrouter/models/~openai/gpt-mini-latest.toml b/providers/openrouter/models/~openai/gpt-mini-latest.toml index 9b3481fbb5b..3106a5836a3 100644 --- a/providers/openrouter/models/~openai/gpt-mini-latest.toml +++ b/providers/openrouter/models/~openai/gpt-mini-latest.toml @@ -1,5 +1,4 @@ -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] -name = "OpenAI GPT Mini Latest" +name = "GPT Mini Latest" description = "Compact GPT model for low-latency assistance and high-volume workloads" family = "gpt-mini" release_date = "2026-04-27" @@ -12,6 +11,10 @@ structured_output = true knowledge = "2025-08-31" open_weights = false +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh"] + [cost] input = 0.75 output = 4.5 diff --git a/providers/openrouter/models/~openai/gpt-sol-latest.toml b/providers/openrouter/models/~openai/gpt-sol-latest.toml new file mode 100644 index 00000000000..b2cafae187b --- /dev/null +++ b/providers/openrouter/models/~openai/gpt-sol-latest.toml @@ -0,0 +1,37 @@ +name = "GPT Sol Latest" +description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" +family = "gpt-sol" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +knowledge = "2026-02-16" +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 4 +output = 15 +cache_read = 0.4 +cache_write = 5 + +[limit] +context = 1_050_000 +output = 128_000 + +[modalities] +input = ["pdf", "image", "text"] +output = ["text"] diff --git a/providers/openrouter/models/~openai/gpt-terra-latest.toml b/providers/openrouter/models/~openai/gpt-terra-latest.toml new file mode 100644 index 00000000000..cf611fa8fc5 --- /dev/null +++ b/providers/openrouter/models/~openai/gpt-terra-latest.toml @@ -0,0 +1,37 @@ +name = "GPT Terra Latest" +description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" +family = "gpt-terra" +release_date = "2026-09-11" +last_updated = "2026-09-11" +attachment = true +reasoning = true +temperature = false +tool_call = true +structured_output = true +knowledge = "2026-02-16" +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 12 +cache_read = 0.2 +cache_write = 2.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 4 +output = 18 +cache_read = 0.4 +cache_write = 5 + +[limit] +context = 1_050_000 +output = 128_000 + +[modalities] +input = ["pdf", "image", "text"] +output = ["text"] diff --git a/providers/openrouter/models/~x-ai/grok-latest.toml b/providers/openrouter/models/~x-ai/grok-latest.toml index ef7efee492e..2ce36baf40e 100644 --- a/providers/openrouter/models/~x-ai/grok-latest.toml +++ b/providers/openrouter/models/~x-ai/grok-latest.toml @@ -15,15 +15,15 @@ type = "effort" values = ["low", "medium", "high", "xhigh"] [cost] -input = 2 -output = 6 -cache_read = 0.5 +input = 1.6 +output = 4.8 +cache_read = 0.4 [[cost.tiers]] tier = { type = "context", size = 200_000 } -input = 4 -output = 12 -cache_read = 1 +input = 3.2 +output = 9.6 +cache_read = 0.8 [limit] context = 500_000 diff --git a/providers/openrouter/models/~z-ai/glm-flash-latest.toml b/providers/openrouter/models/~z-ai/glm-flash-latest.toml new file mode 100644 index 00000000000..c32fca67d4b --- /dev/null +++ b/providers/openrouter/models/~z-ai/glm-flash-latest.toml @@ -0,0 +1,28 @@ +name = "GLM Flash Latest" +description = "GLM vision model for visual reasoning, documents, and multimodal agents" +family = "glm-flash" +release_date = "2026-08-27" +last_updated = "2026-08-27" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.075 +output = 0.25 +cache_read = 0.015 + +[limit] +context = 1_310_720 +output = 131_072 + +[modalities] +input = ["text", "image", "video"] +output = ["text"] diff --git a/providers/openrouter/models/~z-ai/glm-latest.toml b/providers/openrouter/models/~z-ai/glm-latest.toml index ad65d1c7481..42058ee6fca 100644 --- a/providers/openrouter/models/~z-ai/glm-latest.toml +++ b/providers/openrouter/models/~z-ai/glm-latest.toml @@ -7,7 +7,7 @@ attachment = false reasoning = true temperature = true tool_call = true -structured_output = false +structured_output = true open_weights = false [[reasoning_options]] @@ -15,12 +15,12 @@ type = "effort" values = ["low", "high", "max"] [cost] -input = 1.4 -output = 4.4 -cache_read = 0.26 +input = 0.5614 +output = 1.7644 +cache_read = 0.10426 [limit] -context = 1_048_576 +context = 1_310_720 output = 131_072 [modalities] diff --git a/providers/opper/models/anthropic/claude-fable-5.toml b/providers/opper/models/anthropic/claude-fable-5.toml deleted file mode 100644 index 78ec64e8c7f..00000000000 --- a/providers/opper/models/anthropic/claude-fable-5.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "anthropic/claude-fable-5" -structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high", "xhigh", "max"] - -[cost] -input = 10 -output = 50 -cache_read = 1 -cache_write = 12.5 - -[interleaved] -field = "reasoning_content" diff --git a/providers/opper/models/anthropic/claude-haiku-4-5.toml b/providers/opper/models/anthropic/claude-haiku-4-5.toml deleted file mode 100644 index 63e9f09896d..00000000000 --- a/providers/opper/models/anthropic/claude-haiku-4-5.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "anthropic/claude-haiku-4-5" -structured_output = true - -reasoning_options = [] - -[cost] -input = 1 -output = 5 -cache_read = 0.1 -cache_write = 1.25 - -[interleaved] -field = "reasoning_content" diff --git a/providers/opper/models/anthropic/claude-opus-4-5.toml b/providers/opper/models/anthropic/claude-opus-4-5.toml deleted file mode 100644 index 45ac31901cf..00000000000 --- a/providers/opper/models/anthropic/claude-opus-4-5.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "anthropic/claude-opus-4-5" -structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] - -[cost] -input = 5 -output = 25 -cache_read = 0.5 -cache_write = 6.25 - -[interleaved] -field = "reasoning_content" diff --git a/providers/opper/models/anthropic/claude-opus-4-6.toml b/providers/opper/models/anthropic/claude-opus-4-6.toml deleted file mode 100644 index dd56adf14b9..00000000000 --- a/providers/opper/models/anthropic/claude-opus-4-6.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "anthropic/claude-opus-4-6" -structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high", "max"] - -[cost] -input = 5 -output = 25 -cache_read = 0.5 -cache_write = 6.25 - -[interleaved] -field = "reasoning_content" diff --git a/providers/opper/models/anthropic/claude-opus-4-7.toml b/providers/opper/models/anthropic/claude-opus-4-7.toml deleted file mode 100644 index d4f86815775..00000000000 --- a/providers/opper/models/anthropic/claude-opus-4-7.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "anthropic/claude-opus-4-7" -structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high", "xhigh", "max"] - -[cost] -input = 5 -output = 25 -cache_read = 0.5 -cache_write = 6.25 - -[interleaved] -field = "reasoning_content" diff --git a/providers/opper/models/anthropic/claude-opus-4-8.toml b/providers/opper/models/anthropic/claude-opus-4-8.toml deleted file mode 100644 index 83e1e7059c1..00000000000 --- a/providers/opper/models/anthropic/claude-opus-4-8.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "anthropic/claude-opus-4-8" -structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high", "xhigh", "max"] - -[cost] -input = 5 -output = 25 -cache_read = 0.5 -cache_write = 6.25 - -[interleaved] -field = "reasoning_content" diff --git a/providers/opper/models/anthropic/claude-opus-5.toml b/providers/opper/models/anthropic/claude-opus-5.toml deleted file mode 100644 index 634c2f987e6..00000000000 --- a/providers/opper/models/anthropic/claude-opus-5.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "anthropic/claude-opus-5" -structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high", "xhigh", "max"] - -[cost] -input = 5 -output = 25 -cache_read = 0.5 -cache_write = 6.25 - -[interleaved] -field = "reasoning_content" diff --git a/providers/opper/models/anthropic/claude-sonnet-4-5.toml b/providers/opper/models/anthropic/claude-sonnet-4-5.toml deleted file mode 100644 index fdc69c21166..00000000000 --- a/providers/opper/models/anthropic/claude-sonnet-4-5.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "anthropic/claude-sonnet-4-5" -structured_output = true - -reasoning_options = [] - -[cost] -input = 3 -output = 15 -cache_read = 0.3 -cache_write = 3.75 - -[interleaved] -field = "reasoning_content" diff --git a/providers/opper/models/anthropic/claude-sonnet-4-6.toml b/providers/opper/models/anthropic/claude-sonnet-4-6.toml deleted file mode 100644 index aeed8195b8f..00000000000 --- a/providers/opper/models/anthropic/claude-sonnet-4-6.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "anthropic/claude-sonnet-4-6" -structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high", "max"] - -[cost] -input = 3 -output = 15 -cache_read = 0.3 -cache_write = 3.75 - -[interleaved] -field = "reasoning_content" diff --git a/providers/opper/models/anthropic/claude-sonnet-5.toml b/providers/opper/models/anthropic/claude-sonnet-5.toml deleted file mode 100644 index c49fbcbdf8a..00000000000 --- a/providers/opper/models/anthropic/claude-sonnet-5.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "anthropic/claude-sonnet-5" -structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high", "xhigh", "max"] - -[cost] -input = 2 -output = 10 -cache_read = 0.2 -cache_write = 2.5 - -[interleaved] -field = "reasoning_content" diff --git a/providers/opper/models/claude-fable-5-1.toml b/providers/opper/models/claude-fable-5-1.toml new file mode 100644 index 00000000000..a17d2fb8c29 --- /dev/null +++ b/providers/opper/models/claude-fable-5-1.toml @@ -0,0 +1,15 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "anthropic/claude-fable-5-1" +structured_output = true + +reasoning_options = [] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/claude-fable-5.toml b/providers/opper/models/claude-fable-5.toml new file mode 100644 index 00000000000..2bd15839fc0 --- /dev/null +++ b/providers/opper/models/claude-fable-5.toml @@ -0,0 +1,15 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "anthropic/claude-fable-5" +structured_output = true + +reasoning_options = [] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/claude-haiku-4-5.toml b/providers/opper/models/claude-haiku-4-5.toml new file mode 100644 index 00000000000..79bd6828653 --- /dev/null +++ b/providers/opper/models/claude-haiku-4-5.toml @@ -0,0 +1,18 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "anthropic/claude-haiku-4-5" +structured_output = true + +reasoning_options = [] + +[cost] +input = 1.1 +output = 5.5 +cache_read = 0.11 +cache_write = 1.375 + +[modalities] +input = ["text", "image"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/claude-opus-4-5.toml b/providers/opper/models/claude-opus-4-5.toml new file mode 100644 index 00000000000..fe7f973c895 --- /dev/null +++ b/providers/opper/models/claude-opus-4-5.toml @@ -0,0 +1,15 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "anthropic/claude-opus-4-5" +structured_output = true + +reasoning_options = [] + +[cost] +input = 5 +output = 25 +cache_read = 0.5 +cache_write = 6.25 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/claude-opus-4-6.toml b/providers/opper/models/claude-opus-4-6.toml new file mode 100644 index 00000000000..548c9efc22f --- /dev/null +++ b/providers/opper/models/claude-opus-4-6.toml @@ -0,0 +1,15 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "anthropic/claude-opus-4-6" +structured_output = true + +reasoning_options = [] + +[cost] +input = 5 +output = 25 +cache_read = 0.5 +cache_write = 6.25 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/claude-opus-4-7.toml b/providers/opper/models/claude-opus-4-7.toml new file mode 100644 index 00000000000..8b222c7b3c4 --- /dev/null +++ b/providers/opper/models/claude-opus-4-7.toml @@ -0,0 +1,18 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "anthropic/claude-opus-4-7" +structured_output = true + +reasoning_options = [] + +[cost] +input = 5.5 +output = 27.5 +cache_read = 0.55 +cache_write = 6.875 + +[limit] +output = 64000 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/claude-opus-4-8.toml b/providers/opper/models/claude-opus-4-8.toml new file mode 100644 index 00000000000..0d7904267ce --- /dev/null +++ b/providers/opper/models/claude-opus-4-8.toml @@ -0,0 +1,15 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "anthropic/claude-opus-4-8" +structured_output = true + +reasoning_options = [] + +[cost] +input = 5 +output = 25 +cache_read = 0.5 +cache_write = 6.25 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/claude-opus-5.toml b/providers/opper/models/claude-opus-5.toml new file mode 100644 index 00000000000..052e3ac7cd9 --- /dev/null +++ b/providers/opper/models/claude-opus-5.toml @@ -0,0 +1,15 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "anthropic/claude-opus-5" +structured_output = true + +reasoning_options = [] + +[cost] +input = 5.5 +output = 27.5 +cache_read = 0.55 +cache_write = 6.875 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/claude-sonnet-4-5.toml b/providers/opper/models/claude-sonnet-4-5.toml new file mode 100644 index 00000000000..953685007ad --- /dev/null +++ b/providers/opper/models/claude-sonnet-4-5.toml @@ -0,0 +1,23 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +# Context tiers are conservative pool price ceilings, including marginal-rate bands. +base_model = "anthropic/claude-sonnet-4-5" +structured_output = true + +reasoning_options = [] + +[cost] +input = 3.3 +output = 16.5 +cache_read = 0.33 +cache_write = 4.125 + +[[cost.tiers]] +tier = { type = "context", size = 200000 } +input = 6.6 +output = 24.75 +cache_read = 0.66 +cache_write = 8.25 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/claude-sonnet-4-6.toml b/providers/opper/models/claude-sonnet-4-6.toml new file mode 100644 index 00000000000..8efa496556f --- /dev/null +++ b/providers/opper/models/claude-sonnet-4-6.toml @@ -0,0 +1,15 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "anthropic/claude-sonnet-4-6" +structured_output = true + +reasoning_options = [] + +[cost] +input = 3.3 +output = 16.5 +cache_read = 0.33 +cache_write = 4.125 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/claude-sonnet-5.toml b/providers/opper/models/claude-sonnet-5.toml new file mode 100644 index 00000000000..3b91951e85f --- /dev/null +++ b/providers/opper/models/claude-sonnet-5.toml @@ -0,0 +1,18 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "anthropic/claude-sonnet-5" +structured_output = true + +reasoning_options = [] + +[cost] +input = 2.2 +output = 11 +cache_read = 0.22 +cache_write = 2.75 + +[limit] +output = 64000 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/deepseek-v4-flash.toml b/providers/opper/models/deepseek-v4-flash.toml new file mode 100644 index 00000000000..b332afbbd8d --- /dev/null +++ b/providers/opper/models/deepseek-v4-flash.toml @@ -0,0 +1,12 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "deepseek/deepseek-v4-flash" + +reasoning_options = [] + +[cost] +input = 0.25 +output = 0.66 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/deepseek-v4-pro.toml b/providers/opper/models/deepseek-v4-pro.toml new file mode 100644 index 00000000000..fb6c5faa0c1 --- /dev/null +++ b/providers/opper/models/deepseek-v4-pro.toml @@ -0,0 +1,15 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "deepseek/deepseek-v4-pro" + +reasoning_options = [] + +[cost] +input = 1.78812 +output = 3.57624 + +[limit] +output = 65536 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/devstral-2512.toml b/providers/opper/models/devstral-2512.toml new file mode 100644 index 00000000000..d3595c76c26 --- /dev/null +++ b/providers/opper/models/devstral-2512.toml @@ -0,0 +1,11 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +base_model = "mistral/devstral-2512" +structured_output = true + +[cost] +input = 0.4 +output = 2 + +[limit] +context = 256000 +output = 8192 diff --git a/providers/opper/models/gemini-3-flash-preview.toml b/providers/opper/models/gemini-3-flash-preview.toml new file mode 100644 index 00000000000..0e6941f334a --- /dev/null +++ b/providers/opper/models/gemini-3-flash-preview.toml @@ -0,0 +1,13 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "google/gemini-3-flash-preview" + +reasoning_options = [] + +[cost] +input = 0.5 +output = 3 +cache_read = 0.05 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/gemini-3.1-pro-preview.toml b/providers/opper/models/gemini-3.1-pro-preview.toml new file mode 100644 index 00000000000..e25eda06eb1 --- /dev/null +++ b/providers/opper/models/gemini-3.1-pro-preview.toml @@ -0,0 +1,20 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +# Context tiers are conservative pool price ceilings, including marginal-rate bands. +base_model = "google/gemini-3.1-pro-preview" + +reasoning_options = [] + +[cost] +input = 2 +output = 12 +cache_read = 0.2 + +[[cost.tiers]] +tier = { type = "context", size = 200000 } +input = 4 +output = 18 +cache_read = 0.4 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/gemini-3.5-flash-lite.toml b/providers/opper/models/gemini-3.5-flash-lite.toml new file mode 100644 index 00000000000..0f10955993d --- /dev/null +++ b/providers/opper/models/gemini-3.5-flash-lite.toml @@ -0,0 +1,13 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "google/gemini-3.5-flash-lite" + +reasoning_options = [] + +[cost] +input = 0.3 +output = 2.5 +cache_read = 0.03 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/gemini-3.5-flash.toml b/providers/opper/models/gemini-3.5-flash.toml new file mode 100644 index 00000000000..b597560116a --- /dev/null +++ b/providers/opper/models/gemini-3.5-flash.toml @@ -0,0 +1,13 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "google/gemini-3.5-flash" + +reasoning_options = [] + +[cost] +input = 1.5 +output = 9 +cache_read = 0.15 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/gemini-3.7-flash.toml b/providers/opper/models/gemini-3.7-flash.toml new file mode 100644 index 00000000000..514a0c8cd9f --- /dev/null +++ b/providers/opper/models/gemini-3.7-flash.toml @@ -0,0 +1,13 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "google/gemini-3.7-flash" + +reasoning_options = [] + +[cost] +input = 0.75 +output = 3.75 +cache_read = 0.075 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/gemini-3.8-flash.toml b/providers/opper/models/gemini-3.8-flash.toml new file mode 100644 index 00000000000..b7dfba7907c --- /dev/null +++ b/providers/opper/models/gemini-3.8-flash.toml @@ -0,0 +1,16 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# All five members have params but omit params.temperature; Opper drops sampling controls +# for such cards before dispatch, so temperature is accepted but not respected. +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "google/gemini-3.8-flash" +temperature = false + +reasoning_options = [] + +[cost] +input = 0.825 +output = 4.125 +cache_read = 0.0825 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/gemini/gemini-3-flash-preview.toml b/providers/opper/models/gemini/gemini-3-flash-preview.toml deleted file mode 100644 index b5b4efd521b..00000000000 --- a/providers/opper/models/gemini/gemini-3-flash-preview.toml +++ /dev/null @@ -1,10 +0,0 @@ -base_model = "google/gemini-3-flash-preview" - -[[reasoning_options]] -type = "effort" -values = ["minimal", "low", "medium", "high"] - -[cost] -input = 0.5 -output = 3 -cache_read = 0.05 diff --git a/providers/opper/models/gemini/gemini-3.1-pro-preview.toml b/providers/opper/models/gemini/gemini-3.1-pro-preview.toml deleted file mode 100644 index 8cb3844011e..00000000000 --- a/providers/opper/models/gemini/gemini-3.1-pro-preview.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "google/gemini-3.1-pro-preview" - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] - -[cost] -input = 2 -output = 12 -cache_read = 0.2 - -[[cost.tiers]] -tier = { size = 200_000 } -input = 4.00 -output = 18.00 -cache_read = 0.40 diff --git a/providers/opper/models/gemini/gemini-3.5-flash-lite.toml b/providers/opper/models/gemini/gemini-3.5-flash-lite.toml deleted file mode 100644 index e5452932870..00000000000 --- a/providers/opper/models/gemini/gemini-3.5-flash-lite.toml +++ /dev/null @@ -1,10 +0,0 @@ -base_model = "google/gemini-3.5-flash-lite" - -[[reasoning_options]] -type = "effort" -values = ["minimal", "low", "medium", "high"] - -[cost] -input = 0.3 -output = 2.5 -cache_read = 0.03 diff --git a/providers/opper/models/gemini/gemini-3.5-flash.toml b/providers/opper/models/gemini/gemini-3.5-flash.toml deleted file mode 100644 index aa9842db8a7..00000000000 --- a/providers/opper/models/gemini/gemini-3.5-flash.toml +++ /dev/null @@ -1,10 +0,0 @@ -base_model = "google/gemini-3.5-flash" - -[[reasoning_options]] -type = "effort" -values = ["minimal", "low", "medium", "high"] - -[cost] -input = 1.5 -output = 9 -cache_read = 0.15 diff --git a/providers/opper/models/gemma-4-31b-it.toml b/providers/opper/models/gemma-4-31b-it.toml new file mode 100644 index 00000000000..8ee52039c78 --- /dev/null +++ b/providers/opper/models/gemma-4-31b-it.toml @@ -0,0 +1,16 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "google/gemma-4-31b-it" + +reasoning_options = [] + +[cost] +input = 0.46488 +output = 2.44062 + +[limit] +context = 256000 +output = 8192 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/glm-5.2.toml b/providers/opper/models/glm-5.2.toml new file mode 100644 index 00000000000..bc1044a1917 --- /dev/null +++ b/providers/opper/models/glm-5.2.toml @@ -0,0 +1,12 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "zhipuai/glm-5.2" + +reasoning_options = [] + +[cost] +input = 1.62708 +output = 5.811 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/glm-5.3-flash.toml b/providers/opper/models/glm-5.3-flash.toml new file mode 100644 index 00000000000..c7db468e1b7 --- /dev/null +++ b/providers/opper/models/glm-5.3-flash.toml @@ -0,0 +1,21 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "zhipuai/glm-5.3-flash" +attachment = false +structured_output = false + +reasoning_options = [] + +[cost] +input = 0.2 +output = 0.5 +cache_read = 0.07 + +[limit] +output = 128000 + +[modalities] +input = ["text"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/glm-5.3.toml b/providers/opper/models/glm-5.3.toml new file mode 100644 index 00000000000..b6c8534060c --- /dev/null +++ b/providers/opper/models/glm-5.3.toml @@ -0,0 +1,14 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: members do not share a supported effort level. +base_model = "zhipuai/glm-5.3" +structured_output = false + +reasoning_options = [] + +[cost] +input = 1.75 +output = 4.6488 +cache_read = 0.44 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/gpt-5.3-chat-latest.toml b/providers/opper/models/gpt-5.3-chat-latest.toml new file mode 100644 index 00000000000..7568b754041 --- /dev/null +++ b/providers/opper/models/gpt-5.3-chat-latest.toml @@ -0,0 +1,9 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# Live pool call on 2026-09-08 reports this upstream model has been deprecated. +base_model = "openai/gpt-5.3-chat-latest" +status = "deprecated" + +[cost] +input = 1.75 +output = 14 +cache_read = 0.175 diff --git a/providers/opper/models/gpt-5.3-codex.toml b/providers/opper/models/gpt-5.3-codex.toml new file mode 100644 index 00000000000..ea0de06a8c5 --- /dev/null +++ b/providers/opper/models/gpt-5.3-codex.toml @@ -0,0 +1,18 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# Effort: top-level reasoning_effort; OpenAI native levels on all pool members. +# Catalog context equals the lab input cap; retain the lab total context window. +base_model = "openai/gpt-5.3-codex" +temperature = false + +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] + +[cost] +input = 1.75 +output = 14 +cache_read = 0.175 + +[modalities] +input = ["text", "pdf"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/gpt-5.4-mini.toml b/providers/opper/models/gpt-5.4-mini.toml new file mode 100644 index 00000000000..5daca15ba01 --- /dev/null +++ b/providers/opper/models/gpt-5.4-mini.toml @@ -0,0 +1,14 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# Native OpenAI effort levels verified through this single-member pool on 2026-09-08. +# Effort: top-level reasoning_effort; levels shared by the pool members. +base_model = "openai/gpt-5.4-mini" + +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] + +[cost] +input = 0.75 +output = 4.5 +cache_read = 0.075 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/gpt-5.4-nano.toml b/providers/opper/models/gpt-5.4-nano.toml new file mode 100644 index 00000000000..dbbf8bf940a --- /dev/null +++ b/providers/opper/models/gpt-5.4-nano.toml @@ -0,0 +1,14 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# Effort: top-level reasoning_effort; OpenAI native levels on all pool members. +base_model = "openai/gpt-5.4-nano" +temperature = false + +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] + +[cost] +input = 0.2 +output = 1.25 +cache_read = 0.02 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/gpt-5.4-pro.toml b/providers/opper/models/gpt-5.4-pro.toml new file mode 100644 index 00000000000..03bb664a101 --- /dev/null +++ b/providers/opper/models/gpt-5.4-pro.toml @@ -0,0 +1,18 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# Effort: top-level reasoning_effort; levels shared by the pool members. +# Context tiers are conservative pool price ceilings, including marginal-rate bands. +base_model = "openai/gpt-5.4-pro" + +reasoning_options = [{ type = "effort", values = ["medium", "high", "xhigh"] }] + +[cost] +input = 30 +output = 180 + +[[cost.tiers]] +tier = { type = "context", size = 272000 } +input = 60 +output = 270 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/gpt-5.4.toml b/providers/opper/models/gpt-5.4.toml new file mode 100644 index 00000000000..b83170741b4 --- /dev/null +++ b/providers/opper/models/gpt-5.4.toml @@ -0,0 +1,20 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# Effort: top-level reasoning_effort; levels shared by the pool members. +# Context tiers are conservative pool price ceilings, including marginal-rate bands. +base_model = "openai/gpt-5.4" + +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] + +[cost] +input = 2.5 +output = 15 +cache_read = 0.25 + +[[cost.tiers]] +tier = { type = "context", size = 272000 } +input = 5 +output = 22.5 +cache_read = 0.5 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/gpt-5.5-pro.toml b/providers/opper/models/gpt-5.5-pro.toml new file mode 100644 index 00000000000..254bf5b66c9 --- /dev/null +++ b/providers/opper/models/gpt-5.5-pro.toml @@ -0,0 +1,18 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# Native OpenAI effort levels verified through this single-member pool on 2026-09-08. +# All pool members publish flat rates: no pricing.thresholds or input_surcharge_threshold_tokens. +# Opper billing uses this schedule; native context surcharges do not apply to these pools. +# Effort: top-level reasoning_effort; levels shared by the pool members. +base_model = "openai/gpt-5.5-pro" + +reasoning_options = [{ type = "effort", values = ["medium", "high", "xhigh"] }] + +[cost] +input = 30 +output = 180 + +[modalities] +input = ["text", "image"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/gpt-5.5.toml b/providers/opper/models/gpt-5.5.toml new file mode 100644 index 00000000000..b05f12abb7f --- /dev/null +++ b/providers/opper/models/gpt-5.5.toml @@ -0,0 +1,20 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# Effort: top-level reasoning_effort; levels shared by the pool members. +# Context tiers are conservative pool price ceilings, including marginal-rate bands. +base_model = "openai/gpt-5.5" + +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] + +[cost] +input = 5 +output = 30 +cache_read = 0.5 + +[[cost.tiers]] +tier = { type = "context", size = 272000 } +input = 10 +output = 45 +cache_read = 1 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/gpt-5.6-luna.toml b/providers/opper/models/gpt-5.6-luna.toml new file mode 100644 index 00000000000..254ff2a8555 --- /dev/null +++ b/providers/opper/models/gpt-5.6-luna.toml @@ -0,0 +1,25 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# Effort: top-level reasoning_effort; levels shared by the pool members. +# Context tiers are conservative pool price ceilings, including marginal-rate bands. +base_model = "openai/gpt-5.6-luna" + +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 0.2 +output = 1.2 +cache_read = 0.02 +cache_write = 0.25 + +[[cost.tiers]] +tier = { type = "context", size = 272000 } +input = 0.4 +output = 1.8 +cache_read = 0.04 +cache_write = 0.5 + +[limit] +context = 1000000 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/gpt-5.6-sol.toml b/providers/opper/models/gpt-5.6-sol.toml new file mode 100644 index 00000000000..e7b4f94f5f8 --- /dev/null +++ b/providers/opper/models/gpt-5.6-sol.toml @@ -0,0 +1,25 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# Effort: top-level reasoning_effort; levels shared by the pool members. +# Context tiers are conservative pool price ceilings, including marginal-rate bands. +base_model = "openai/gpt-5.6-sol" + +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 5 +output = 30 +cache_read = 0.5 +cache_write = 6.25 + +[[cost.tiers]] +tier = { type = "context", size = 272000 } +input = 10 +output = 45 +cache_read = 1 +cache_write = 12.5 + +[limit] +context = 1000000 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/gpt-5.6-terra.toml b/providers/opper/models/gpt-5.6-terra.toml new file mode 100644 index 00000000000..209fe14cd29 --- /dev/null +++ b/providers/opper/models/gpt-5.6-terra.toml @@ -0,0 +1,25 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# Effort: top-level reasoning_effort; levels shared by the pool members. +# Context tiers are conservative pool price ceilings, including marginal-rate bands. +base_model = "openai/gpt-5.6-terra" + +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 2 +output = 12 +cache_read = 0.2 +cache_write = 2.5 + +[[cost.tiers]] +tier = { type = "context", size = 272000 } +input = 4 +output = 18 +cache_read = 0.4 +cache_write = 5 + +[limit] +context = 1000000 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/gpt-6-astra.toml b/providers/opper/models/gpt-6-astra.toml new file mode 100644 index 00000000000..62f6292c6cb --- /dev/null +++ b/providers/opper/models/gpt-6-astra.toml @@ -0,0 +1,25 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# Effort: top-level reasoning_effort; levels shared by the pool members. +# Context tiers are conservative pool price ceilings, including marginal-rate bands. +base_model = "openai/gpt-6-astra" + +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[[cost.tiers]] +tier = { type = "context", size = 272000 } +input = 20 +output = 75 +cache_read = 2 +cache_write = 25 + +[modalities] +input = ["text", "image"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/gpt-oss-120b.toml b/providers/opper/models/gpt-oss-120b.toml new file mode 100644 index 00000000000..1a576848f91 --- /dev/null +++ b/providers/opper/models/gpt-oss-120b.toml @@ -0,0 +1,16 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "openai/gpt-oss-120b" + +reasoning_options = [] + +[cost] +input = 1.1622 +output = 4.88124 + +[limit] +context = 128000 +output = 8192 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/gpt-oss-20b.toml b/providers/opper/models/gpt-oss-20b.toml new file mode 100644 index 00000000000..ce3715afc7b --- /dev/null +++ b/providers/opper/models/gpt-oss-20b.toml @@ -0,0 +1,16 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "openai/gpt-oss-20b" + +reasoning_options = [] + +[cost] +input = 0.11622 +output = 0.488124 + +[limit] +context = 128000 +output = 8192 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/grok-4.3.toml b/providers/opper/models/grok-4.3.toml new file mode 100644 index 00000000000..e40b4396000 --- /dev/null +++ b/providers/opper/models/grok-4.3.toml @@ -0,0 +1,18 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# All pool members publish flat rates: no pricing.thresholds or input_surcharge_threshold_tokens. +# Opper billing uses this schedule; native context surcharges do not apply to these pools. +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "xai/grok-4.3" + +reasoning_options = [] + +[cost] +input = 1.25 +output = 2.5 +cache_read = 0.2 + +[modalities] +input = ["text", "image"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/grok-4.5.toml b/providers/opper/models/grok-4.5.toml new file mode 100644 index 00000000000..8cb4220459f --- /dev/null +++ b/providers/opper/models/grok-4.5.toml @@ -0,0 +1,15 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# All pool members publish flat rates: no pricing.thresholds or input_surcharge_threshold_tokens. +# Opper billing uses this schedule; native context surcharges do not apply to these pools. +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "xai/grok-4.5" + +reasoning_options = [] + +[cost] +input = 2 +output = 6 +cache_read = 0.5 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/grok-4.6.toml b/providers/opper/models/grok-4.6.toml new file mode 100644 index 00000000000..36c860ca4c1 --- /dev/null +++ b/providers/opper/models/grok-4.6.toml @@ -0,0 +1,20 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +# Context tiers are conservative pool price ceilings, including marginal-rate bands. +base_model = "xai/grok-4.6" + +reasoning_options = [] + +[cost] +input = 2 +output = 6 +cache_read = 0.5 + +[[cost.tiers]] +tier = { type = "context", size = 200000 } +input = 4 +output = 12 +cache_read = 1 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/grok-build-0.1.toml b/providers/opper/models/grok-build-0.1.toml new file mode 100644 index 00000000000..13eef952286 --- /dev/null +++ b/providers/opper/models/grok-build-0.1.toml @@ -0,0 +1,15 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# All pool members publish flat rates: no pricing.thresholds or input_surcharge_threshold_tokens. +# Opper billing uses this schedule; native context surcharges do not apply to these pools. +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "xai/grok-build-0.1" + +reasoning_options = [] + +[cost] +input = 1 +output = 2 +cache_read = 0.2 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/kimi-k3.toml b/providers/opper/models/kimi-k3.toml new file mode 100644 index 00000000000..b4519ce43f6 --- /dev/null +++ b/providers/opper/models/kimi-k3.toml @@ -0,0 +1,16 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: members do not share a supported effort level. +base_model = "moonshotai/kimi-k3" +attachment = false + +reasoning_options = [] + +[cost] +input = 3 +output = 15 + +[modalities] +input = ["text"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/meta/muse-spark-1.2.toml b/providers/opper/models/meta/muse-spark-1.2.toml deleted file mode 100644 index aea877da54a..00000000000 --- a/providers/opper/models/meta/muse-spark-1.2.toml +++ /dev/null @@ -1,8 +0,0 @@ -base_model = "meta/muse-spark-1.2" - -reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high", "xhigh"] }] - -[cost] -input = 1.25 -output = 4.25 -cache_read = 0.15 diff --git a/providers/opper/models/minimax-m2.7.toml b/providers/opper/models/minimax-m2.7.toml new file mode 100644 index 00000000000..ed41ef98618 --- /dev/null +++ b/providers/opper/models/minimax-m2.7.toml @@ -0,0 +1,16 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "minimax/MiniMax-M2.7" +structured_output = true + +reasoning_options = [] + +[cost] +input = 0.69732 +output = 2.78928 + +[limit] +context = 196608 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/minimax-m3.toml b/providers/opper/models/minimax-m3.toml new file mode 100644 index 00000000000..fae074d323c --- /dev/null +++ b/providers/opper/models/minimax-m3.toml @@ -0,0 +1,28 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +# Context tiers are conservative pool price ceilings, including marginal-rate bands. +base_model = "minimax/MiniMax-M3" +structured_output = true + +reasoning_options = [] + +[cost] +input = 0.6 +output = 2.4 +cache_read = 0.12 + +[[cost.tiers]] +tier = { type = "context", size = 524288 } +input = 1.2 +output = 4.8 +cache_read = 0.24 + +[limit] +context = 1000000 +output = 131072 + +[modalities] +input = ["text", "image"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/minimax/m3.toml b/providers/opper/models/minimax/m3.toml deleted file mode 100644 index d53af696874..00000000000 --- a/providers/opper/models/minimax/m3.toml +++ /dev/null @@ -1,24 +0,0 @@ -# Opper billed schedule, verified against GET /v3/compat/models and /v3/models (2026-08-20): -# base 0.6/2.4 (cache 0.12) up to 524_288, then 2x. This differs from MiniMax first-party -# list (0.30/1.20 base, upper band 0.60/2.40); the delta is flagged to Opper catalog -# maintainers and this entry will be updated if the billed schedule changes. -base_model = "minimax/MiniMax-M3" - -reasoning_options = [] - -[cost] -input = 0.6 -output = 2.4 -cache_read = 0.12 - -[[cost.tiers]] -tier = { size = 524_288 } -input = 1.2 -output = 4.8 -cache_read = 0.24 - -[limit] -context = 1_048_576 - -[interleaved] -field = "reasoning_content" diff --git a/providers/opper/models/mistral-large-2512.toml b/providers/opper/models/mistral-large-2512.toml new file mode 100644 index 00000000000..1f67818b4a1 --- /dev/null +++ b/providers/opper/models/mistral-large-2512.toml @@ -0,0 +1,11 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +base_model = "mistral/mistral-large-2512" +structured_output = true + +[cost] +input = 0.5 +output = 1.5 + +[limit] +context = 256000 +output = 8192 diff --git a/providers/opper/models/mistral-small-2603.toml b/providers/opper/models/mistral-small-2603.toml new file mode 100644 index 00000000000..cff65202966 --- /dev/null +++ b/providers/opper/models/mistral-small-2603.toml @@ -0,0 +1,16 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "mistral/mistral-small-2603" +structured_output = false + +reasoning_options = [] + +[cost] +input = 0.5811 +output = 2.44062 + +[limit] +output = 8192 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/mistral/devstral-2512.toml b/providers/opper/models/mistral/devstral-2512.toml deleted file mode 100644 index 62661ddc309..00000000000 --- a/providers/opper/models/mistral/devstral-2512.toml +++ /dev/null @@ -1,5 +0,0 @@ -base_model = "mistral/devstral-2512" - -[cost] -input = 0.4 -output = 2 diff --git a/providers/opper/models/mistral/mistral-large-2512.toml b/providers/opper/models/mistral/mistral-large-2512.toml deleted file mode 100644 index 49df75a6342..00000000000 --- a/providers/opper/models/mistral/mistral-large-2512.toml +++ /dev/null @@ -1,5 +0,0 @@ -base_model = "mistral/mistral-large-2512" - -[cost] -input = 0.5 -output = 1.5 diff --git a/providers/opper/models/mistral/mistral-small-2603.toml b/providers/opper/models/mistral/mistral-small-2603.toml deleted file mode 100644 index c82dfc68357..00000000000 --- a/providers/opper/models/mistral/mistral-small-2603.toml +++ /dev/null @@ -1,9 +0,0 @@ -base_model = "mistral/mistral-small-2603" - -[[reasoning_options]] -type = "effort" -values = ["none", "high"] - -[cost] -input = 0.15 -output = 0.6 diff --git a/providers/opper/models/moonshot/kimi-k3.toml b/providers/opper/models/moonshot/kimi-k3.toml deleted file mode 100644 index 0862dd21e4c..00000000000 --- a/providers/opper/models/moonshot/kimi-k3.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "moonshotai/kimi-k3" - -[[reasoning_options]] -type = "effort" -values = ["low", "high", "max"] - -[cost] -input = 3 -output = 15 -cache_read = 0.3 - -[interleaved] -field = "reasoning_content" diff --git a/providers/opper/models/muse-spark-1.2.toml b/providers/opper/models/muse-spark-1.2.toml new file mode 100644 index 00000000000..200e6da0293 --- /dev/null +++ b/providers/opper/models/muse-spark-1.2.toml @@ -0,0 +1,13 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# Effort: top-level reasoning_effort; levels shared by the pool members. +base_model = "meta/muse-spark-1.2" + +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high", "xhigh"] }] + +[cost] +input = 1.25 +output = 4.25 +cache_read = 0.15 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/muse-spark-1.3.toml b/providers/opper/models/muse-spark-1.3.toml new file mode 100644 index 00000000000..bba0703ecde --- /dev/null +++ b/providers/opper/models/muse-spark-1.3.toml @@ -0,0 +1,15 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# Standard-tier pool forwards native effort unchanged; max verified live on 2026-09-08. +# The catalog reasoning.supported list omits max, but the serving path accepts it. +# Effort: top-level reasoning_effort; levels shared by the pool members. +base_model = "meta/muse-spark-1.3" + +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 1.25 +output = 4.25 +cache_read = 0.15 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/openai/gpt-5.3-chat-latest.toml b/providers/opper/models/openai/gpt-5.3-chat-latest.toml deleted file mode 100644 index 197284ef5f0..00000000000 --- a/providers/opper/models/openai/gpt-5.3-chat-latest.toml +++ /dev/null @@ -1,6 +0,0 @@ -base_model = "openai/gpt-5.3-chat-latest" - -[cost] -input = 1.75 -output = 14 -cache_read = 0.175 diff --git a/providers/opper/models/openai/gpt-5.3-codex.toml b/providers/opper/models/openai/gpt-5.3-codex.toml deleted file mode 100644 index e85f5642a44..00000000000 --- a/providers/opper/models/openai/gpt-5.3-codex.toml +++ /dev/null @@ -1,8 +0,0 @@ -base_model = "openai/gpt-5.3-codex" - -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] - -[cost] -input = 1.75 -output = 14 -cache_read = 0.175 diff --git a/providers/opper/models/openai/gpt-5.4-mini.toml b/providers/opper/models/openai/gpt-5.4-mini.toml deleted file mode 100644 index a21229d609e..00000000000 --- a/providers/opper/models/openai/gpt-5.4-mini.toml +++ /dev/null @@ -1,8 +0,0 @@ -base_model = "openai/gpt-5.4-mini" - -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] - -[cost] -input = 0.75 -output = 4.5 -cache_read = 0.075 diff --git a/providers/opper/models/openai/gpt-5.4-nano.toml b/providers/opper/models/openai/gpt-5.4-nano.toml deleted file mode 100644 index 0db45e05b9e..00000000000 --- a/providers/opper/models/openai/gpt-5.4-nano.toml +++ /dev/null @@ -1,8 +0,0 @@ -base_model = "openai/gpt-5.4-nano" - -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] - -[cost] -input = 0.2 -output = 1.25 -cache_read = 0.02 diff --git a/providers/opper/models/openai/gpt-5.4-pro.toml b/providers/opper/models/openai/gpt-5.4-pro.toml deleted file mode 100644 index 6da8f6aa095..00000000000 --- a/providers/opper/models/openai/gpt-5.4-pro.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "openai/gpt-5.4-pro" - -reasoning_options = [{ type = "effort", values = ["medium", "high", "xhigh"] }] - -[cost] -input = 30 -output = 180 - -[[cost.tiers]] -tier = { size = 272_000 } -input = 60.00 -output = 270.00 diff --git a/providers/opper/models/openai/gpt-5.4.toml b/providers/opper/models/openai/gpt-5.4.toml deleted file mode 100644 index 7398a595b17..00000000000 --- a/providers/opper/models/openai/gpt-5.4.toml +++ /dev/null @@ -1,14 +0,0 @@ -base_model = "openai/gpt-5.4" - -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] - -[cost] -input = 2.5 -output = 15 -cache_read = 0.25 - -[[cost.tiers]] -tier = { size = 272_000 } -input = 5.00 -output = 22.50 -cache_read = 0.50 diff --git a/providers/opper/models/openai/gpt-5.5-pro.toml b/providers/opper/models/openai/gpt-5.5-pro.toml deleted file mode 100644 index 77d5371cb8e..00000000000 --- a/providers/opper/models/openai/gpt-5.5-pro.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "openai/gpt-5.5-pro" - -reasoning_options = [{ type = "effort", values = ["medium", "high", "xhigh"] }] - -[cost] -input = 30 -output = 180 - -[[cost.tiers]] -tier = { size = 272_000 } -input = 60.00 -output = 270.00 diff --git a/providers/opper/models/openai/gpt-5.5.toml b/providers/opper/models/openai/gpt-5.5.toml deleted file mode 100644 index a58539b3e09..00000000000 --- a/providers/opper/models/openai/gpt-5.5.toml +++ /dev/null @@ -1,14 +0,0 @@ -base_model = "openai/gpt-5.5" - -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] - -[cost] -input = 5 -output = 30 -cache_read = 0.5 - -[[cost.tiers]] -tier = { size = 272_000 } -input = 10.00 -output = 45.00 -cache_read = 1.00 diff --git a/providers/opper/models/openai/gpt-5.6-luna.toml b/providers/opper/models/openai/gpt-5.6-luna.toml deleted file mode 100644 index 07d577afa36..00000000000 --- a/providers/opper/models/openai/gpt-5.6-luna.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "openai/gpt-5.6-luna" - -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] - -[cost] -input = 0.2 -output = 1.2 -cache_read = 0.02 -cache_write = 0.25 - -[[cost.tiers]] -tier = { size = 272_000 } -input = 0.40 -output = 1.80 -cache_read = 0.04 -cache_write = 0.50 diff --git a/providers/opper/models/openai/gpt-5.6-sol.toml b/providers/opper/models/openai/gpt-5.6-sol.toml deleted file mode 100644 index 31470933d23..00000000000 --- a/providers/opper/models/openai/gpt-5.6-sol.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "openai/gpt-5.6-sol" - -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] - -[cost] -input = 5 -output = 30 -cache_read = 0.5 -cache_write = 6.25 - -[[cost.tiers]] -tier = { size = 272_000 } -input = 10.00 -output = 45.00 -cache_read = 1.00 -cache_write = 12.50 diff --git a/providers/opper/models/openai/gpt-5.6-terra.toml b/providers/opper/models/openai/gpt-5.6-terra.toml deleted file mode 100644 index 9af64197094..00000000000 --- a/providers/opper/models/openai/gpt-5.6-terra.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "openai/gpt-5.6-terra" - -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] - -[cost] -input = 2 -output = 12 -cache_read = 0.2 -cache_write = 2.5 - -[[cost.tiers]] -tier = { size = 272_000 } -input = 4.00 -output = 18.00 -cache_read = 0.40 -cache_write = 5.00 diff --git a/providers/opper/models/perplexity/sonar-pro.toml b/providers/opper/models/perplexity/sonar-pro.toml deleted file mode 100644 index f03972e3868..00000000000 --- a/providers/opper/models/perplexity/sonar-pro.toml +++ /dev/null @@ -1,5 +0,0 @@ -base_model = "perplexity/sonar-pro" - -[cost] -input = 3 -output = 15 diff --git a/providers/opper/models/perplexity/sonar-reasoning-pro.toml b/providers/opper/models/perplexity/sonar-reasoning-pro.toml deleted file mode 100644 index 6189d9d9ff8..00000000000 --- a/providers/opper/models/perplexity/sonar-reasoning-pro.toml +++ /dev/null @@ -1,7 +0,0 @@ -base_model = "perplexity/sonar-reasoning-pro" - -reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }] - -[cost] -input = 2 -output = 8 diff --git a/providers/opper/models/perplexity/sonar.toml b/providers/opper/models/perplexity/sonar.toml deleted file mode 100644 index a6c921f515e..00000000000 --- a/providers/opper/models/perplexity/sonar.toml +++ /dev/null @@ -1,5 +0,0 @@ -base_model = "perplexity/sonar" - -[cost] -input = 1 -output = 1 diff --git a/providers/opper/models/qwen3-coder-next.toml b/providers/opper/models/qwen3-coder-next.toml new file mode 100644 index 00000000000..2816f8c2b7e --- /dev/null +++ b/providers/opper/models/qwen3-coder-next.toml @@ -0,0 +1,6 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +base_model = "alibaba/qwen3-coder-next" + +[cost] +input = 0.5811 +output = 2.3244 diff --git a/providers/opper/models/qwen3.6-35b-a3b.toml b/providers/opper/models/qwen3.6-35b-a3b.toml new file mode 100644 index 00000000000..f7e98234caf --- /dev/null +++ b/providers/opper/models/qwen3.6-35b-a3b.toml @@ -0,0 +1,15 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "alibaba/qwen3.6-35b-a3b" + +reasoning_options = [] + +[cost] +input = 0.248 +output = 1.485 + +[modalities] +input = ["text", "image"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/qwen3.8-2.4t-a95b.toml b/providers/opper/models/qwen3.8-2.4t-a95b.toml new file mode 100644 index 00000000000..db70485f41e --- /dev/null +++ b/providers/opper/models/qwen3.8-2.4t-a95b.toml @@ -0,0 +1,13 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "alibaba/qwen3.8-2.4t-a95b" + +reasoning_options = [] + +[cost] +input = 2.5 +output = 6 +cache_read = 0.63 + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/qwen3.8-27b.toml b/providers/opper/models/qwen3.8-27b.toml new file mode 100644 index 00000000000..8cd1f5f6882 --- /dev/null +++ b/providers/opper/models/qwen3.8-27b.toml @@ -0,0 +1,17 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# Effort: top-level reasoning_effort; levels shared by the pool members. +base_model = "alibaba/qwen3.8-27b" +attachment = false +structured_output = false + +reasoning_options = [{ type = "effort", values = ["low", "medium", "xhigh"] }] + +[cost] +input = 0.5811 +output = 3 + +[modalities] +input = ["text"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/qwen3.8-max.toml b/providers/opper/models/qwen3.8-max.toml new file mode 100644 index 00000000000..65905a41b73 --- /dev/null +++ b/providers/opper/models/qwen3.8-max.toml @@ -0,0 +1,20 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide graded effort or toggle: members share only reasoning_effort=none. +base_model = "alibaba/qwen3.8-max" +structured_output = true + +reasoning_options = [] + +[cost] +input = 2 +output = 6 +cache_read = 0.25 + +[limit] +context = 983616 + +[modalities] +input = ["text", "image"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/sonar-pro.toml b/providers/opper/models/sonar-pro.toml new file mode 100644 index 00000000000..de476cca476 --- /dev/null +++ b/providers/opper/models/sonar-pro.toml @@ -0,0 +1,14 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +base_model = "perplexity/sonar-pro" +attachment = false +structured_output = true + +[cost] +input = 3 +output = 15 + +[limit] +output = 8000 + +[modalities] +input = ["text"] diff --git a/providers/opper/models/sonar-reasoning-pro.toml b/providers/opper/models/sonar-reasoning-pro.toml new file mode 100644 index 00000000000..98d5cd92398 --- /dev/null +++ b/providers/opper/models/sonar-reasoning-pro.toml @@ -0,0 +1,17 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +# No pool-wide effort control: at least one member does not forward reasoning_effort. +base_model = "perplexity/sonar-reasoning-pro" +attachment = false +structured_output = true + +reasoning_options = [] + +[cost] +input = 2 +output = 8 + +[modalities] +input = ["text"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/opper/models/sonar.toml b/providers/opper/models/sonar.toml new file mode 100644 index 00000000000..7242f639443 --- /dev/null +++ b/providers/opper/models/sonar.toml @@ -0,0 +1,7 @@ +# Pool metadata: https://api.opper.ai/v3/models (2026-09-08). +base_model = "perplexity/sonar" +structured_output = true + +[cost] +input = 1 +output = 1 diff --git a/providers/opper/models/vertexai/gemini-3.7-flash-eu.toml b/providers/opper/models/vertexai/gemini-3.7-flash-eu.toml deleted file mode 100644 index 03e8b29cab7..00000000000 --- a/providers/opper/models/vertexai/gemini-3.7-flash-eu.toml +++ /dev/null @@ -1,11 +0,0 @@ -base_model = "google/gemini-3.7-flash" -name = "Gemini 3.7 Flash (EU)" - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] - -[cost] -input = 0.75 -output = 3.75 -cache_read = 0.075 diff --git a/providers/opper/models/vertexai/gemini-3.7-flash.toml b/providers/opper/models/vertexai/gemini-3.7-flash.toml deleted file mode 100644 index e9bacad26c9..00000000000 --- a/providers/opper/models/vertexai/gemini-3.7-flash.toml +++ /dev/null @@ -1,10 +0,0 @@ -base_model = "google/gemini-3.7-flash" - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] - -[cost] -input = 0.75 -output = 3.75 -cache_read = 0.075 diff --git a/providers/opper/models/xai/grok-4.3.toml b/providers/opper/models/xai/grok-4.3.toml deleted file mode 100644 index 329b82bb4ac..00000000000 --- a/providers/opper/models/xai/grok-4.3.toml +++ /dev/null @@ -1,19 +0,0 @@ -base_model = "xai/grok-4.3" - -[[reasoning_options]] -type = "effort" -values = ["none", "low", "medium", "high"] - -[cost] -input = 1.25 -output = 2.5 -cache_read = 0.2 - -[[cost.tiers]] -tier = { size = 200_000 } -input = 2.5 -output = 5 -cache_read = 0.4 - -[interleaved] -field = "reasoning_content" diff --git a/providers/opper/models/xai/grok-4.5.toml b/providers/opper/models/xai/grok-4.5.toml deleted file mode 100644 index fd10a1caace..00000000000 --- a/providers/opper/models/xai/grok-4.5.toml +++ /dev/null @@ -1,19 +0,0 @@ -base_model = "xai/grok-4.5" - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] - -[cost] -input = 2 -output = 6 -cache_read = 0.3 - -[[cost.tiers]] -tier = { type = "context", size = 200_000 } -input = 4 -output = 12 -cache_read = 0.6 - -[interleaved] -field = "reasoning_content" diff --git a/providers/opper/models/xai/grok-4.6.toml b/providers/opper/models/xai/grok-4.6.toml deleted file mode 100644 index 1f8386fd483..00000000000 --- a/providers/opper/models/xai/grok-4.6.toml +++ /dev/null @@ -1,19 +0,0 @@ -base_model = "xai/grok-4.6" - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high", "xhigh"] - -[cost] -input = 2 -output = 6 -cache_read = 0.5 - -[[cost.tiers]] -tier = { type = "context", size = 200_000 } -input = 4 -output = 12 -cache_read = 1 - -[interleaved] -field = "reasoning_content" diff --git a/providers/opper/models/xai/grok-build-0.1.toml b/providers/opper/models/xai/grok-build-0.1.toml deleted file mode 100644 index b2c4aeeafad..00000000000 --- a/providers/opper/models/xai/grok-build-0.1.toml +++ /dev/null @@ -1,17 +0,0 @@ -base_model = "xai/grok-build-0.1" - -reasoning_options = [] - -[cost] -input = 1 -output = 2 -cache_read = 0.2 - -[[cost.tiers]] -tier = { size = 200_000 } -input = 2.00 -output = 4.00 -cache_read = 0.40 - -[interleaved] -field = "reasoning_content" diff --git a/providers/opper/provider.toml b/providers/opper/provider.toml index 7d14eff2de3..7ccd9102a07 100644 --- a/providers/opper/provider.toml +++ b/providers/opper/provider.toml @@ -1,13 +1,20 @@ +# Sources (2026-09-08): https://api.opper.ai/v3/models?limit=0&type=llm +# and authenticated https://api.opper.ai/v3/compat/models?type=model,pool. +# Model IDs are bare Opper pool names; Opper selects the underlying provider. +# Prices are USD/MTok ceilings across pool members, not a fixed rate for every +# request. Cache-read discounts are listed only when all priced members offer +# them. Context tiers include the highest marginal rates and whole-request +# surcharges, so estimates can exceed the actual bill. No currency conversion +# is needed: the catalog already converts non-USD provider prices to USD. +# Limits do not exceed either the lab model or the pool's smallest known limit; +# input modalities are restricted to those shared by the lab and pool members. +# POST /v3/compat/chat/completions accepts top-level reasoning_effort. Native +# thinking toggles and reasoning-token budgets are not exposed on this surface. +# Effort options describe common pool controls; [] means no pool-wide control, +# including pools where some adapters ignore effort. Reasoning output, when +# present, uses message.reasoning_content or streaming delta.reasoning_content. name = "Opper" env = ["OPPER_API_KEY"] npm = "@ai-sdk/openai-compatible" api = "https://api.opper.ai/v3/compat" -# Reasoning HTTP format (measured against POST /v3/compat/chat/completions, 2026-08-19): -# top-level reasoning_effort takes an effort string that is passed through to the -# upstream model API unchanged, so each model accepts its native set (Anthropic: -# low|medium|high|max; OpenAI GPT-5.x: none|low|medium|high|xhigh and max where the -# model supports it; Gemini: minimal|low|medium|high). Budget-token values are not -# accepted on this surface, and no separate reasoning on/off toggle is exposed. Models with no upstream effort control accept the -# parameter without effect, so those entries use reasoning_options = []. -# Pricing is mirrored from GET /v3/compat/models (USD per token, no gateway markup). doc = "https://opper.ai/models" diff --git a/providers/orcarouter/models/anthropic/claude-fable-5.toml b/providers/orcarouter/models/anthropic/claude-fable-5.toml new file mode 100644 index 00000000000..8ca46d228ca --- /dev/null +++ b/providers/orcarouter/models/anthropic/claude-fable-5.toml @@ -0,0 +1,8 @@ +base_model = "anthropic/claude-fable-5" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 diff --git a/providers/orcarouter/models/anthropic/claude-haiku-4.5.toml b/providers/orcarouter/models/anthropic/claude-haiku-4.5.toml index 57d8d4b851c..88980951c82 100644 --- a/providers/orcarouter/models/anthropic/claude-haiku-4.5.toml +++ b/providers/orcarouter/models/anthropic/claude-haiku-4.5.toml @@ -1,5 +1,5 @@ base_model = "anthropic/claude-haiku-4-5" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] [cost] input = 1 diff --git a/providers/orcarouter/models/anthropic/claude-opus-4.1.toml b/providers/orcarouter/models/anthropic/claude-opus-4.1.toml deleted file mode 100644 index d3b28dfa9d1..00000000000 --- a/providers/orcarouter/models/anthropic/claude-opus-4.1.toml +++ /dev/null @@ -1,8 +0,0 @@ -base_model = "anthropic/claude-opus-4-1" -reasoning_options = [] - -[cost] -input = 15 -output = 75 -cache_read = 1.5 -cache_write = 18.75 diff --git a/providers/orcarouter/models/anthropic/claude-opus-4.5.toml b/providers/orcarouter/models/anthropic/claude-opus-4.5.toml index cf12800a02f..cd3b01382ff 100644 --- a/providers/orcarouter/models/anthropic/claude-opus-4.5.toml +++ b/providers/orcarouter/models/anthropic/claude-opus-4.5.toml @@ -1,5 +1,5 @@ base_model = "anthropic/claude-opus-4-5" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] [cost] input = 5 diff --git a/providers/orcarouter/models/anthropic/claude-opus-4.8.toml b/providers/orcarouter/models/anthropic/claude-opus-4.8.toml new file mode 100644 index 00000000000..2ce24092ea7 --- /dev/null +++ b/providers/orcarouter/models/anthropic/claude-opus-4.8.toml @@ -0,0 +1,8 @@ +base_model = "anthropic/claude-opus-4-8" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[cost] +input = 5 +output = 25 +cache_read = 0.5 +cache_write = 6.25 diff --git a/providers/orcarouter/models/anthropic/claude-opus-4.toml b/providers/orcarouter/models/anthropic/claude-opus-4.toml deleted file mode 100644 index e030d0de629..00000000000 --- a/providers/orcarouter/models/anthropic/claude-opus-4.toml +++ /dev/null @@ -1,8 +0,0 @@ -base_model = "anthropic/claude-opus-4-0" -reasoning_options = [] - -[cost] -input = 15 -output = 75 -cache_read = 1.5 -cache_write = 18.75 diff --git a/providers/orcarouter/models/anthropic/claude-opus-5.toml b/providers/orcarouter/models/anthropic/claude-opus-5.toml new file mode 100644 index 00000000000..d71233ef011 --- /dev/null +++ b/providers/orcarouter/models/anthropic/claude-opus-5.toml @@ -0,0 +1,10 @@ +# Host bills cache write at 2x input, not the usual 1.25x. +# Model page states: Cache read / 1M $0.500, Cache write / 1M $10.00. +base_model = "anthropic/claude-opus-5" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[cost] +input = 5 +output = 25 +cache_read = 0.5 +cache_write = 10 diff --git a/providers/orcarouter/models/anthropic/claude-sonnet-4.5.toml b/providers/orcarouter/models/anthropic/claude-sonnet-4.5.toml index b3c98aed8bc..5e0d41e9751 100644 --- a/providers/orcarouter/models/anthropic/claude-sonnet-4.5.toml +++ b/providers/orcarouter/models/anthropic/claude-sonnet-4.5.toml @@ -1,8 +1,11 @@ base_model = "anthropic/claude-sonnet-4-5" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] [cost] input = 3 output = 15 cache_read = 0.3 cache_write = 3.75 + +[limit] +context = 1_000_000 diff --git a/providers/orcarouter/models/anthropic/claude-sonnet-4.toml b/providers/orcarouter/models/anthropic/claude-sonnet-4.toml deleted file mode 100644 index 6bd3ab6d6fe..00000000000 --- a/providers/orcarouter/models/anthropic/claude-sonnet-4.toml +++ /dev/null @@ -1,8 +0,0 @@ -base_model = "anthropic/claude-sonnet-4-0" -reasoning_options = [] - -[cost] -input = 3 -output = 15 -cache_read = 0.3 -cache_write = 3.75 diff --git a/providers/orcarouter/models/anthropic/claude-sonnet-5.toml b/providers/orcarouter/models/anthropic/claude-sonnet-5.toml new file mode 100644 index 00000000000..aaf6e7badd0 --- /dev/null +++ b/providers/orcarouter/models/anthropic/claude-sonnet-5.toml @@ -0,0 +1,8 @@ +base_model = "anthropic/claude-sonnet-5" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 diff --git a/providers/orcarouter/models/deepseek/deepseek-chat.toml b/providers/orcarouter/models/deepseek/deepseek-chat.toml index 695d36ceb11..ed5e8a032ad 100644 --- a/providers/orcarouter/models/deepseek/deepseek-chat.toml +++ b/providers/orcarouter/models/deepseek/deepseek-chat.toml @@ -1,6 +1,6 @@ base_model = "deepseek/deepseek-chat" [cost] -input = 0.14 -output = 0.28 -cache_read = 0.028 +input = 0.147 +output = 0.295 +cache_read = 0.02 diff --git a/providers/orcarouter/models/deepseek/deepseek-reasoner.toml b/providers/orcarouter/models/deepseek/deepseek-reasoner.toml index 9d828bee1fb..51835b382ba 100644 --- a/providers/orcarouter/models/deepseek/deepseek-reasoner.toml +++ b/providers/orcarouter/models/deepseek/deepseek-reasoner.toml @@ -1,3 +1,5 @@ +# Host rate per /v1/models: 0.147/0.295, matching the V4 Flash line. +# cache_ratio 0.19047619 gives 0.028, not the 0.02 those models use. base_model = "deepseek/deepseek-reasoner" reasoning_options = [] @@ -5,6 +7,6 @@ reasoning_options = [] field = "reasoning_content" [cost] -input = 0.435 -output = 0.87 +input = 0.147 +output = 0.295 cache_read = 0.028 diff --git a/providers/orcarouter/models/deepseek/deepseek-v4-flash-0731.toml b/providers/orcarouter/models/deepseek/deepseek-v4-flash-0731.toml new file mode 100644 index 00000000000..c020036fca0 --- /dev/null +++ b/providers/orcarouter/models/deepseek/deepseek-v4-flash-0731.toml @@ -0,0 +1,14 @@ +# Toggle: thinking true|false +base_model = "deepseek/deepseek-v4-flash-0731" +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["low", "high", "max"] }, +] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.147 +output = 0.295 +cache_read = 0.02 diff --git a/providers/orcarouter/models/deepseek/deepseek-v4-flash-free.toml b/providers/orcarouter/models/deepseek/deepseek-v4-flash-free.toml new file mode 100644 index 00000000000..37dcc13d6d3 --- /dev/null +++ b/providers/orcarouter/models/deepseek/deepseek-v4-flash-free.toml @@ -0,0 +1,14 @@ +# Toggle: thinking true|false +base_model = "deepseek/deepseek-v4-flash" +name = "DeepSeek V4 Flash (free)" +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["low", "high", "max"] }, +] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 diff --git a/providers/orcarouter/models/deepseek/deepseek-v4-flash-vision-exp.toml b/providers/orcarouter/models/deepseek/deepseek-v4-flash-vision-exp.toml new file mode 100644 index 00000000000..2a00b7d5b35 --- /dev/null +++ b/providers/orcarouter/models/deepseek/deepseek-v4-flash-vision-exp.toml @@ -0,0 +1,14 @@ +# Toggle: thinking true|false +base_model = "deepseek/deepseek-v4-flash-vision-exp" +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["low", "high", "max"] }, +] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.147 +output = 0.295 +cache_read = 0.02 diff --git a/providers/orcarouter/models/deepseek/deepseek-v4-flash.toml b/providers/orcarouter/models/deepseek/deepseek-v4-flash.toml index 6f7b5474ebc..74dfbf6a010 100644 --- a/providers/orcarouter/models/deepseek/deepseek-v4-flash.toml +++ b/providers/orcarouter/models/deepseek/deepseek-v4-flash.toml @@ -1,10 +1,14 @@ +# Toggle: thinking true|false base_model = "deepseek/deepseek-v4-flash" -reasoning_options = [] +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["low", "high", "max"] }, +] [interleaved] field = "reasoning_content" [cost] -input = 0.19 -output = 0.37 -cache_read = 0.0028 +input = 0.147 +output = 0.295 +cache_read = 0.02 diff --git a/providers/orcarouter/models/deepseek/deepseek-v4-pro-0813.toml b/providers/orcarouter/models/deepseek/deepseek-v4-pro-0813.toml new file mode 100644 index 00000000000..41b6665954e --- /dev/null +++ b/providers/orcarouter/models/deepseek/deepseek-v4-pro-0813.toml @@ -0,0 +1,14 @@ +# Toggle: thinking true|false +base_model = "deepseek/deepseek-v4-pro-0813" +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["high", "max"] }, +] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.442 +output = 0.884 +cache_read = 0.06 diff --git a/providers/orcarouter/models/deepseek/deepseek-v4-pro.toml b/providers/orcarouter/models/deepseek/deepseek-v4-pro.toml index 050cbe08668..080e7d9a9df 100644 --- a/providers/orcarouter/models/deepseek/deepseek-v4-pro.toml +++ b/providers/orcarouter/models/deepseek/deepseek-v4-pro.toml @@ -1,10 +1,14 @@ +# Toggle: thinking true|false base_model = "deepseek/deepseek-v4-pro" -reasoning_options = [] +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["high", "max"] }, +] [interleaved] field = "reasoning_content" [cost] -input = 0.56 -output = 1.12 -cache_read = 0.003625 +input = 0.442 +output = 0.884 +cache_read = 0.06 diff --git a/providers/orcarouter/models/google/gemini-2.5-pro.toml b/providers/orcarouter/models/google/gemini-2.5-pro.toml index 5b10310e718..e4196aa2919 100644 --- a/providers/orcarouter/models/google/gemini-2.5-pro.toml +++ b/providers/orcarouter/models/google/gemini-2.5-pro.toml @@ -2,8 +2,8 @@ base_model = "google/gemini-2.5-pro" reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] [cost] -input = 2.5 -output = 15 +input = 1.25 +output = 10 cache_read = 0.125 [[cost.tiers]] diff --git a/providers/orcarouter/models/google/gemini-3-flash-preview.toml b/providers/orcarouter/models/google/gemini-3-flash-preview.toml index a2fac1cec45..56a17f39209 100644 --- a/providers/orcarouter/models/google/gemini-3-flash-preview.toml +++ b/providers/orcarouter/models/google/gemini-3-flash-preview.toml @@ -1,5 +1,5 @@ base_model = "google/gemini-3-flash-preview" -reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }] [cost] input = 0.5 diff --git a/providers/orcarouter/models/google/gemini-3-pro-preview.toml b/providers/orcarouter/models/google/gemini-3-pro-preview.toml deleted file mode 100644 index e8612555a17..00000000000 --- a/providers/orcarouter/models/google/gemini-3-pro-preview.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "google/gemini-3-pro-preview" -reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] - -[cost] -input = 4 -output = 18 -cache_read = 0.2 - -[[cost.tiers]] -tier = { type = "context", size = 200_000 } -input = 4 -output = 18 -cache_read = 0.4 diff --git a/providers/orcarouter/models/google/gemini-3.1-flash-lite-preview.toml b/providers/orcarouter/models/google/gemini-3.1-flash-lite-preview.toml index 2e8165f38ec..e862d7dcb19 100644 --- a/providers/orcarouter/models/google/gemini-3.1-flash-lite-preview.toml +++ b/providers/orcarouter/models/google/gemini-3.1-flash-lite-preview.toml @@ -1,5 +1,5 @@ base_model = "google/gemini-3.1-flash-lite-preview" -reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }] [cost] input = 0.25 diff --git a/providers/orcarouter/models/google/gemini-3.1-flash-lite.toml b/providers/orcarouter/models/google/gemini-3.1-flash-lite.toml new file mode 100644 index 00000000000..d9d9b5d7ddc --- /dev/null +++ b/providers/orcarouter/models/google/gemini-3.1-flash-lite.toml @@ -0,0 +1,8 @@ +base_model = "google/gemini-3.1-flash-lite" +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }] + +[cost] +input = 0.25 +output = 1.5 +cache_read = 0.025 +input_audio = 0.5 diff --git a/providers/orcarouter/models/google/gemini-3.1-pro-preview-customtools.toml b/providers/orcarouter/models/google/gemini-3.1-pro-preview-customtools.toml index 1acf47cc5c5..6669e542fc9 100644 --- a/providers/orcarouter/models/google/gemini-3.1-pro-preview-customtools.toml +++ b/providers/orcarouter/models/google/gemini-3.1-pro-preview-customtools.toml @@ -2,8 +2,8 @@ base_model = "google/gemini-3.1-pro-preview-customtools" reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] [cost] -input = 4 -output = 18 +input = 2 +output = 12 cache_read = 0.2 [[cost.tiers]] diff --git a/providers/orcarouter/models/google/gemini-3.1-pro-preview.toml b/providers/orcarouter/models/google/gemini-3.1-pro-preview.toml index d7b7c58587c..4f19ecfb352 100644 --- a/providers/orcarouter/models/google/gemini-3.1-pro-preview.toml +++ b/providers/orcarouter/models/google/gemini-3.1-pro-preview.toml @@ -2,9 +2,10 @@ base_model = "google/gemini-3.1-pro-preview" reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] [cost] -input = 4 -output = 18 +input = 2 +output = 12 cache_read = 0.2 +input_audio = 2 [[cost.tiers]] tier = { type = "context", size = 200_000 } diff --git a/providers/orcarouter/models/google/gemini-3.5-flash-lite.toml b/providers/orcarouter/models/google/gemini-3.5-flash-lite.toml new file mode 100644 index 00000000000..f1f4096223f --- /dev/null +++ b/providers/orcarouter/models/google/gemini-3.5-flash-lite.toml @@ -0,0 +1,7 @@ +base_model = "google/gemini-3.5-flash-lite" +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }] + +[cost] +input = 0.3 +output = 2.5 +cache_read = 0.03 diff --git a/providers/orcarouter/models/google/gemini-3.5-flash.toml b/providers/orcarouter/models/google/gemini-3.5-flash.toml new file mode 100644 index 00000000000..bc7cc0a7294 --- /dev/null +++ b/providers/orcarouter/models/google/gemini-3.5-flash.toml @@ -0,0 +1,9 @@ +base_model = "google/gemini-3.5-flash" +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }] + +[cost] +input = 1.5 +output = 9 +cache_read = 0.15 +cache_write = 0.08333 +input_audio = 3 diff --git a/providers/orcarouter/models/google/gemini-3.6-flash.toml b/providers/orcarouter/models/google/gemini-3.6-flash.toml new file mode 100644 index 00000000000..09bd1d9a756 --- /dev/null +++ b/providers/orcarouter/models/google/gemini-3.6-flash.toml @@ -0,0 +1,9 @@ +# Host bills this at 2x Google's own rate (0.75/3.75); confirmed by +# /api/pricing and prompt_per_million in /v1/models. +base_model = "google/gemini-3.6-flash" +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }] + +[cost] +input = 1.5 +output = 7.5 +cache_read = 0.15 diff --git a/providers/orcarouter/models/google/gemini-flash-latest.toml b/providers/orcarouter/models/google/gemini-flash-latest.toml index 9b124656bb4..402f49ad91e 100644 --- a/providers/orcarouter/models/google/gemini-flash-latest.toml +++ b/providers/orcarouter/models/google/gemini-flash-latest.toml @@ -1,9 +1,9 @@ -# Alias for the current Gemini Flash release (gemini-3.5-flash). +# Host prices this alias below Google's own flash-latest rate. +# /api/pricing publishes no audio_ratio for it, so no input_audio. base_model = "google/gemini-flash-latest" -reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }] +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] [cost] -input = 1.5 -output = 9 -cache_read = 0.15 -input_audio = 1.5 +input = 0.5 +output = 3 +cache_read = 0.1 diff --git a/providers/orcarouter/models/google/gemini-robotics-er-1.6-preview.toml b/providers/orcarouter/models/google/gemini-robotics-er-1.6-preview.toml new file mode 100644 index 00000000000..8dcd261ce75 --- /dev/null +++ b/providers/orcarouter/models/google/gemini-robotics-er-1.6-preview.toml @@ -0,0 +1,10 @@ +# Toggle/budget: generationConfig.thinkingConfig +base_model = "google/gemini-robotics-er-1.6-preview" +reasoning_options = [ + { type = "toggle" }, + { type = "budget_tokens", min = 0 }, +] + +[cost] +input = 1 +output = 5 diff --git a/providers/orcarouter/models/google/gemma-4-26b-a4b-it.toml b/providers/orcarouter/models/google/gemma-4-26b-a4b-it.toml index 0b91d5e1ef8..4d987768ba0 100644 --- a/providers/orcarouter/models/google/gemma-4-26b-a4b-it.toml +++ b/providers/orcarouter/models/google/gemma-4-26b-a4b-it.toml @@ -4,3 +4,4 @@ reasoning_options = [] [cost] input = 0.06 output = 0.33 +cache_read = 0.0075 diff --git a/providers/orcarouter/models/google/gemma-4-31b-it.toml b/providers/orcarouter/models/google/gemma-4-31b-it.toml index 46fde24a2b9..f7ba4aaeba5 100644 --- a/providers/orcarouter/models/google/gemma-4-31b-it.toml +++ b/providers/orcarouter/models/google/gemma-4-31b-it.toml @@ -4,3 +4,4 @@ reasoning_options = [] [cost] input = 0.13 output = 0.38 +cache_read = 0.02 diff --git a/providers/orcarouter/models/grok/grok-4.3.toml b/providers/orcarouter/models/grok/grok-4.3.toml index faeaba94b59..5a02d4a8ea0 100644 --- a/providers/orcarouter/models/grok/grok-4.3.toml +++ b/providers/orcarouter/models/grok/grok-4.3.toml @@ -1,5 +1,5 @@ base_model = "xai/grok-4.3" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] [cost] input = 1.25 diff --git a/providers/orcarouter/models/grok/grok-4.5.toml b/providers/orcarouter/models/grok/grok-4.5.toml new file mode 100644 index 00000000000..c755185fba7 --- /dev/null +++ b/providers/orcarouter/models/grok/grok-4.5.toml @@ -0,0 +1,7 @@ +base_model = "xai/grok-4.5" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[cost] +input = 2 +output = 6 +cache_read = 0.5 diff --git a/providers/orcarouter/models/grok/grok-4.6.toml b/providers/orcarouter/models/grok/grok-4.6.toml new file mode 100644 index 00000000000..5264268a96f --- /dev/null +++ b/providers/orcarouter/models/grok/grok-4.6.toml @@ -0,0 +1,7 @@ +base_model = "xai/grok-4.6" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh"] }] + +[cost] +input = 2 +output = 6 +cache_read = 0.5 diff --git a/providers/orcarouter/models/kimi/kimi-k2.5.toml b/providers/orcarouter/models/kimi/kimi-k2.5.toml index 19871ed4cc3..d33354c9039 100644 --- a/providers/orcarouter/models/kimi/kimi-k2.5.toml +++ b/providers/orcarouter/models/kimi/kimi-k2.5.toml @@ -1,5 +1,6 @@ +# Toggle: thinking true|false base_model = "moonshotai/kimi-k2.5" -reasoning_options = [] +reasoning_options = [{ type = "toggle" }] [interleaved] field = "reasoning_content" @@ -8,3 +9,7 @@ field = "reasoning_content" input = 0.6 output = 3 cache_read = 0.1 +cache_write = 0 + +[limit] +output = 32_768 diff --git a/providers/orcarouter/models/kimi/kimi-k2.6.toml b/providers/orcarouter/models/kimi/kimi-k2.6.toml index 7e038adc8d2..8e343d088cb 100644 --- a/providers/orcarouter/models/kimi/kimi-k2.6.toml +++ b/providers/orcarouter/models/kimi/kimi-k2.6.toml @@ -1,5 +1,6 @@ +# Toggle: thinking true|false base_model = "moonshotai/kimi-k2.6" -reasoning_options = [] +reasoning_options = [{ type = "toggle" }] [interleaved] field = "reasoning_content" @@ -8,3 +9,6 @@ field = "reasoning_content" input = 0.95 output = 4 cache_read = 0.16 + +[limit] +output = 32_768 diff --git a/providers/orcarouter/models/kimi/kimi-k2.7-code.toml b/providers/orcarouter/models/kimi/kimi-k2.7-code.toml new file mode 100644 index 00000000000..59c001905bc --- /dev/null +++ b/providers/orcarouter/models/kimi/kimi-k2.7-code.toml @@ -0,0 +1,10 @@ +base_model = "moonshotai/kimi-k2.7-code" +reasoning_options = [] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.95 +output = 4 +cache_read = 0.19 diff --git a/providers/orcarouter/models/kimi/kimi-k3.toml b/providers/orcarouter/models/kimi/kimi-k3.toml new file mode 100644 index 00000000000..7f76968dcfd --- /dev/null +++ b/providers/orcarouter/models/kimi/kimi-k3.toml @@ -0,0 +1,14 @@ +# Toggle: thinking true|false +base_model = "moonshotai/kimi-k3" +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["low", "high", "max"] }, +] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 3.3 +output = 16.5 +cache_read = 0.33 diff --git a/providers/orcarouter/models/meta/muse-spark-1.1.toml b/providers/orcarouter/models/meta/muse-spark-1.1.toml new file mode 100644 index 00000000000..e810b05129d --- /dev/null +++ b/providers/orcarouter/models/meta/muse-spark-1.1.toml @@ -0,0 +1,7 @@ +base_model = "meta/muse-spark-1.1" +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high", "xhigh"] }] + +[cost] +input = 1.25 +output = 4.25 +cache_read = 0.15 diff --git a/providers/orcarouter/models/meta/muse-spark-1.2.toml b/providers/orcarouter/models/meta/muse-spark-1.2.toml new file mode 100644 index 00000000000..d53a66ded75 --- /dev/null +++ b/providers/orcarouter/models/meta/muse-spark-1.2.toml @@ -0,0 +1,7 @@ +base_model = "meta/muse-spark-1.2" +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high", "xhigh"] }] + +[cost] +input = 1.25 +output = 4.25 +cache_read = 0.15 diff --git a/providers/orcarouter/models/minimax/minimax-m2.5-highspeed.toml b/providers/orcarouter/models/minimax/minimax-m2.5-highspeed.toml index d3be98c0fab..64df7841b29 100644 --- a/providers/orcarouter/models/minimax/minimax-m2.5-highspeed.toml +++ b/providers/orcarouter/models/minimax/minimax-m2.5-highspeed.toml @@ -4,5 +4,5 @@ reasoning_options = [] [cost] input = 0.6 output = 2.4 -cache_read = 0.06 +cache_read = 0.03 cache_write = 0.375 diff --git a/providers/orcarouter/models/minimax/minimax-m3.toml b/providers/orcarouter/models/minimax/minimax-m3.toml new file mode 100644 index 00000000000..5475d5a734b --- /dev/null +++ b/providers/orcarouter/models/minimax/minimax-m3.toml @@ -0,0 +1,8 @@ +# Toggle: thinking true|false +base_model = "minimax/MiniMax-M3" +reasoning_options = [{ type = "toggle" }] + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.06 diff --git a/providers/orcarouter/models/openai/gpt-5-chat-latest.toml b/providers/orcarouter/models/openai/gpt-5-chat-latest.toml index 4dd858d1af8..7359fa1d4a0 100644 --- a/providers/orcarouter/models/openai/gpt-5-chat-latest.toml +++ b/providers/orcarouter/models/openai/gpt-5-chat-latest.toml @@ -5,3 +5,6 @@ reasoning_options = [] input = 1.25 output = 10 cache_read = 0.125 + +[limit] +output = 100_000 diff --git a/providers/orcarouter/models/openai/gpt-5-codex.toml b/providers/orcarouter/models/openai/gpt-5-codex.toml deleted file mode 100644 index 614bb89b104..00000000000 --- a/providers/orcarouter/models/openai/gpt-5-codex.toml +++ /dev/null @@ -1,7 +0,0 @@ -base_model = "openai/gpt-5-codex" -reasoning_options = [] - -[cost] -input = 1.25 -output = 10 -cache_read = 0.125 diff --git a/providers/orcarouter/models/openai/gpt-5-mini.toml b/providers/orcarouter/models/openai/gpt-5-mini.toml index ec2e0406779..5754d47df3f 100644 --- a/providers/orcarouter/models/openai/gpt-5-mini.toml +++ b/providers/orcarouter/models/openai/gpt-5-mini.toml @@ -1,5 +1,5 @@ base_model = "openai/gpt-5-mini" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }] [cost] input = 0.25 diff --git a/providers/orcarouter/models/openai/gpt-5-nano.toml b/providers/orcarouter/models/openai/gpt-5-nano.toml index 35e4f5d9e48..b96eddfd6f0 100644 --- a/providers/orcarouter/models/openai/gpt-5-nano.toml +++ b/providers/orcarouter/models/openai/gpt-5-nano.toml @@ -1,5 +1,5 @@ base_model = "openai/gpt-5-nano" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }] [cost] input = 0.05 diff --git a/providers/orcarouter/models/openai/gpt-5-pro.toml b/providers/orcarouter/models/openai/gpt-5-pro.toml index d9e22584955..59f10fdd949 100644 --- a/providers/orcarouter/models/openai/gpt-5-pro.toml +++ b/providers/orcarouter/models/openai/gpt-5-pro.toml @@ -1,5 +1,5 @@ base_model = "openai/gpt-5-pro" -reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] +reasoning_options = [{ type = "effort", values = ["high"] }] [cost] input = 15 diff --git a/providers/orcarouter/models/openai/gpt-5.1-codex-max.toml b/providers/orcarouter/models/openai/gpt-5.1-codex-max.toml deleted file mode 100644 index a137a421adb..00000000000 --- a/providers/orcarouter/models/openai/gpt-5.1-codex-max.toml +++ /dev/null @@ -1,7 +0,0 @@ -base_model = "openai/gpt-5.1-codex-max" -reasoning_options = [] - -[cost] -input = 1.25 -output = 10 -cache_read = 0.125 diff --git a/providers/orcarouter/models/openai/gpt-5.1-codex-mini.toml b/providers/orcarouter/models/openai/gpt-5.1-codex-mini.toml index ba981225f1a..3cb2b12eeba 100644 --- a/providers/orcarouter/models/openai/gpt-5.1-codex-mini.toml +++ b/providers/orcarouter/models/openai/gpt-5.1-codex-mini.toml @@ -1,5 +1,5 @@ base_model = "openai/gpt-5.1-codex-mini" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] [cost] input = 0.25 diff --git a/providers/orcarouter/models/openai/gpt-5.1-codex.toml b/providers/orcarouter/models/openai/gpt-5.1-codex.toml index 6e672919a05..17e3fc0fbc3 100644 --- a/providers/orcarouter/models/openai/gpt-5.1-codex.toml +++ b/providers/orcarouter/models/openai/gpt-5.1-codex.toml @@ -1,5 +1,5 @@ base_model = "openai/gpt-5.1-codex" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] [cost] input = 1.25 diff --git a/providers/orcarouter/models/openai/gpt-5.1.toml b/providers/orcarouter/models/openai/gpt-5.1.toml index 7ab9851a4ab..489f83fffcb 100644 --- a/providers/orcarouter/models/openai/gpt-5.1.toml +++ b/providers/orcarouter/models/openai/gpt-5.1.toml @@ -1,5 +1,5 @@ base_model = "openai/gpt-5.1" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] [cost] input = 1.25 diff --git a/providers/orcarouter/models/openai/gpt-5.2-chat-latest.toml b/providers/orcarouter/models/openai/gpt-5.2-chat-latest.toml index bbad0e8faf5..e8664270145 100644 --- a/providers/orcarouter/models/openai/gpt-5.2-chat-latest.toml +++ b/providers/orcarouter/models/openai/gpt-5.2-chat-latest.toml @@ -1,5 +1,5 @@ base_model = "openai/gpt-5.2-chat-latest" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["medium"] }] [cost] input = 1.75 diff --git a/providers/orcarouter/models/openai/gpt-5.2-codex.toml b/providers/orcarouter/models/openai/gpt-5.2-codex.toml index a03382c9d90..c084afebb9b 100644 --- a/providers/orcarouter/models/openai/gpt-5.2-codex.toml +++ b/providers/orcarouter/models/openai/gpt-5.2-codex.toml @@ -1,5 +1,5 @@ base_model = "openai/gpt-5.2-codex" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh"] }] [cost] input = 1.75 diff --git a/providers/orcarouter/models/openai/gpt-5.2-pro.toml b/providers/orcarouter/models/openai/gpt-5.2-pro.toml index 860e9e002de..86169206ac8 100644 --- a/providers/orcarouter/models/openai/gpt-5.2-pro.toml +++ b/providers/orcarouter/models/openai/gpt-5.2-pro.toml @@ -1,5 +1,5 @@ base_model = "openai/gpt-5.2-pro" -reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] +reasoning_options = [{ type = "effort", values = ["medium", "high", "xhigh"] }] [cost] input = 21 diff --git a/providers/orcarouter/models/openai/gpt-5.2.toml b/providers/orcarouter/models/openai/gpt-5.2.toml index 4f38ef3d4dc..a2a20d0e325 100644 --- a/providers/orcarouter/models/openai/gpt-5.2.toml +++ b/providers/orcarouter/models/openai/gpt-5.2.toml @@ -1,5 +1,5 @@ base_model = "openai/gpt-5.2" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] [cost] input = 1.75 diff --git a/providers/orcarouter/models/openai/gpt-5.3-chat-latest.toml b/providers/orcarouter/models/openai/gpt-5.3-chat-latest.toml deleted file mode 100644 index 197284ef5f0..00000000000 --- a/providers/orcarouter/models/openai/gpt-5.3-chat-latest.toml +++ /dev/null @@ -1,6 +0,0 @@ -base_model = "openai/gpt-5.3-chat-latest" - -[cost] -input = 1.75 -output = 14 -cache_read = 0.175 diff --git a/providers/orcarouter/models/openai/gpt-5.3-codex.toml b/providers/orcarouter/models/openai/gpt-5.3-codex.toml index 1d3369a77e8..949c3ed11a7 100644 --- a/providers/orcarouter/models/openai/gpt-5.3-codex.toml +++ b/providers/orcarouter/models/openai/gpt-5.3-codex.toml @@ -1,5 +1,5 @@ base_model = "openai/gpt-5.3-codex" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] [cost] input = 1.75 diff --git a/providers/orcarouter/models/openai/gpt-5.4-mini.toml b/providers/orcarouter/models/openai/gpt-5.4-mini.toml index 030517c703c..56a278d15d0 100644 --- a/providers/orcarouter/models/openai/gpt-5.4-mini.toml +++ b/providers/orcarouter/models/openai/gpt-5.4-mini.toml @@ -1,5 +1,5 @@ base_model = "openai/gpt-5.4-mini" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] [cost] input = 0.75 diff --git a/providers/orcarouter/models/openai/gpt-5.4-nano.toml b/providers/orcarouter/models/openai/gpt-5.4-nano.toml index a4366b00e40..3872b109a25 100644 --- a/providers/orcarouter/models/openai/gpt-5.4-nano.toml +++ b/providers/orcarouter/models/openai/gpt-5.4-nano.toml @@ -1,5 +1,5 @@ base_model = "openai/gpt-5.4-nano" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] [cost] input = 0.2 diff --git a/providers/orcarouter/models/openai/gpt-5.4-pro.toml b/providers/orcarouter/models/openai/gpt-5.4-pro.toml index 38eb4124bf8..11330748034 100644 --- a/providers/orcarouter/models/openai/gpt-5.4-pro.toml +++ b/providers/orcarouter/models/openai/gpt-5.4-pro.toml @@ -1,9 +1,9 @@ base_model = "openai/gpt-5.4-pro" -reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] +reasoning_options = [{ type = "effort", values = ["medium", "high", "xhigh"] }] [cost] -input = 60 -output = 270 +input = 30 +output = 180 [[cost.tiers]] tier = { type = "context", size = 272_000 } diff --git a/providers/orcarouter/models/openai/gpt-5.4.toml b/providers/orcarouter/models/openai/gpt-5.4.toml index 344da90f2e0..76ccd302ea0 100644 --- a/providers/orcarouter/models/openai/gpt-5.4.toml +++ b/providers/orcarouter/models/openai/gpt-5.4.toml @@ -1,9 +1,9 @@ base_model = "openai/gpt-5.4" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] [cost] -input = 5 -output = 22.5 +input = 2.5 +output = 15 cache_read = 0.25 [[cost.tiers]] diff --git a/providers/orcarouter/models/openai/gpt-5.5-pro.toml b/providers/orcarouter/models/openai/gpt-5.5-pro.toml index e5630efdaec..616e9a17ee1 100644 --- a/providers/orcarouter/models/openai/gpt-5.5-pro.toml +++ b/providers/orcarouter/models/openai/gpt-5.5-pro.toml @@ -1,5 +1,5 @@ base_model = "openai/gpt-5.5-pro" -reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] +reasoning_options = [{ type = "effort", values = ["medium", "high", "xhigh"] }] [cost] input = 30 @@ -9,3 +9,6 @@ output = 180 tier = { type = "context", size = 272_000 } input = 60 output = 270 + +[limit] +output = 100_000 diff --git a/providers/orcarouter/models/openai/gpt-5.5.toml b/providers/orcarouter/models/openai/gpt-5.5.toml index 6499ab01a51..9b565dd3a2e 100644 --- a/providers/orcarouter/models/openai/gpt-5.5.toml +++ b/providers/orcarouter/models/openai/gpt-5.5.toml @@ -1,5 +1,5 @@ base_model = "openai/gpt-5.5" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] [cost] input = 5 diff --git a/providers/orcarouter/models/openai/gpt-5.6-luna.toml b/providers/orcarouter/models/openai/gpt-5.6-luna.toml new file mode 100644 index 00000000000..a9090b0f1cd --- /dev/null +++ b/providers/orcarouter/models/openai/gpt-5.6-luna.toml @@ -0,0 +1,8 @@ +base_model = "openai/gpt-5.6-luna" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 0.2 +output = 1.2 +cache_read = 0.02 +cache_write = 0.25 diff --git a/providers/orcarouter/models/openai/gpt-5.6-sol.toml b/providers/orcarouter/models/openai/gpt-5.6-sol.toml new file mode 100644 index 00000000000..770c9799aad --- /dev/null +++ b/providers/orcarouter/models/openai/gpt-5.6-sol.toml @@ -0,0 +1,8 @@ +base_model = "openai/gpt-5.6-sol" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 4 +output = 20 +cache_read = 0.4 +cache_write = 5 diff --git a/providers/orcarouter/models/openai/gpt-5.6-terra.toml b/providers/orcarouter/models/openai/gpt-5.6-terra.toml new file mode 100644 index 00000000000..0b76158fb01 --- /dev/null +++ b/providers/orcarouter/models/openai/gpt-5.6-terra.toml @@ -0,0 +1,8 @@ +base_model = "openai/gpt-5.6-terra" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 2 +output = 12 +cache_read = 0.2 +cache_write = 2.5 diff --git a/providers/orcarouter/models/openai/gpt-5.toml b/providers/orcarouter/models/openai/gpt-5.toml index 4c848769ca7..104575502bb 100644 --- a/providers/orcarouter/models/openai/gpt-5.toml +++ b/providers/orcarouter/models/openai/gpt-5.toml @@ -1,5 +1,5 @@ base_model = "openai/gpt-5" -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }] [cost] input = 1.25 diff --git a/providers/orcarouter/models/openai/gpt-oss-120b.toml b/providers/orcarouter/models/openai/gpt-oss-120b.toml new file mode 100644 index 00000000000..ac1ceee7702 --- /dev/null +++ b/providers/orcarouter/models/openai/gpt-oss-120b.toml @@ -0,0 +1,6 @@ +base_model = "openai/gpt-oss-120b" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[cost] +input = 0.03 +output = 0.17 diff --git a/providers/orcarouter/models/orcarouter/free.toml b/providers/orcarouter/models/orcarouter/free.toml new file mode 100644 index 00000000000..19924b3e0ef --- /dev/null +++ b/providers/orcarouter/models/orcarouter/free.toml @@ -0,0 +1,24 @@ +name = "OrcaRouter Free" +description = "Built-in router over the free tier that scores each request's difficulty and sends light work to the smaller free model and harder work to the stronger one. Priced at zero and never falls back to a paid model." +family = "auto" +release_date = "2026-08-27" +last_updated = "2026-08-27" +attachment = false +reasoning = true +reasoning_options = [] +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[cost] +input = 0 +output = 0 + +[limit] +context = 65_536 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/orcarouter/models/orcarouter/fusion-flash.toml b/providers/orcarouter/models/orcarouter/fusion-flash.toml new file mode 100644 index 00000000000..4491dcdb44c --- /dev/null +++ b/providers/orcarouter/models/orcarouter/fusion-flash.toml @@ -0,0 +1,22 @@ +# No [cost]: billed as the sum of the panel legs actually run, at +# upstream cost with zero markup, so there is no per-token price. +name = "OrcaRouter Fusion Flash" +description = "Budget Fusion panel that runs Gemini 3.5 Flash, MiniMax M2.7 and GLM 5.1 in parallel on hard requests, then has a Claude Opus 4.8 judge return the strongest single answer verbatim. Cost-sensitive fan-out over a 200K window." +family = "model-router" +release_date = "2026-06-15" +last_updated = "2026-06-15" +attachment = false +reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[limit] +context = 200_000 +output = 128_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/orcarouter/models/orcarouter/fusion-mini.toml b/providers/orcarouter/models/orcarouter/fusion-mini.toml new file mode 100644 index 00000000000..6e12edd0899 --- /dev/null +++ b/providers/orcarouter/models/orcarouter/fusion-mini.toml @@ -0,0 +1,22 @@ +# No [cost]: billed as the sum of the panel legs actually run, at +# upstream cost with zero markup, so there is no per-token price. +name = "OrcaRouter Fusion Mini" +description = "Leaner two-model Fusion panel that runs Claude Opus 4.8 and GPT-5.5 in parallel on hard requests, then has a Claude Opus 4.8 judge return the strongest single answer verbatim. Easy requests fall through to a cheaper default and bill as one call." +family = "model-router" +release_date = "2026-06-15" +last_updated = "2026-06-15" +attachment = true +reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] +temperature = false +tool_call = true +structured_output = true +open_weights = false + +[limit] +context = 1_000_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/orcarouter/models/orcarouter/fusion.toml b/providers/orcarouter/models/orcarouter/fusion.toml new file mode 100644 index 00000000000..b9dd4814a43 --- /dev/null +++ b/providers/orcarouter/models/orcarouter/fusion.toml @@ -0,0 +1,22 @@ +# No [cost]: billed as the sum of the panel legs actually run, at +# upstream cost with zero markup, so there is no per-token price. +name = "OrcaRouter Fusion" +description = "Curated fan-out router that runs Claude Opus 4.8, GPT-5.5 and Gemini 3.1 Pro in parallel on hard requests, then has a Claude Opus 4.8 judge return the strongest single answer verbatim. Easy requests fall through to a cheaper default and bill as one call." +family = "model-router" +release_date = "2026-06-15" +last_updated = "2026-06-15" +attachment = true +reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] +temperature = false +tool_call = true +structured_output = true +open_weights = false + +[limit] +context = 1_000_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/orcarouter/models/qwen/qwen3-vl-235b-a22b-instruct.toml b/providers/orcarouter/models/qwen/qwen3-vl-235b-a22b-instruct.toml new file mode 100644 index 00000000000..e3c8680b66e --- /dev/null +++ b/providers/orcarouter/models/qwen/qwen3-vl-235b-a22b-instruct.toml @@ -0,0 +1,5 @@ +base_model = "alibaba/qwen3-vl-235b-a22b-instruct" + +[cost] +input = 0.4 +output = 1.6 diff --git a/providers/orcarouter/models/qwen/qwen3-vl-235b-a22b-thinking.toml b/providers/orcarouter/models/qwen/qwen3-vl-235b-a22b-thinking.toml new file mode 100644 index 00000000000..99c063e1aae --- /dev/null +++ b/providers/orcarouter/models/qwen/qwen3-vl-235b-a22b-thinking.toml @@ -0,0 +1,10 @@ +# Budget: thinking_budget. Dedicated thinking SKU, so no off switch. +base_model = "alibaba/qwen3-vl-235b-a22b-thinking" +reasoning_options = [{ type = "budget_tokens", min = 1_024, max = 81_920 }] + +[cost] +input = 0.4 +output = 4 + +[limit] +output = 40_960 diff --git a/providers/orcarouter/models/qwen/qwen3.5-122b-a10b.toml b/providers/orcarouter/models/qwen/qwen3.5-122b-a10b.toml index 1eb4bd3c71f..90e0b506cb0 100644 --- a/providers/orcarouter/models/qwen/qwen3.5-122b-a10b.toml +++ b/providers/orcarouter/models/qwen/qwen3.5-122b-a10b.toml @@ -1,5 +1,9 @@ +# Toggle: enable_thinking; budget: thinking_budget base_model = "alibaba/qwen3.5-122b-a10b" -reasoning_options = [] +reasoning_options = [ + { type = "toggle" }, + { type = "budget_tokens" }, +] [cost] input = 0.115 diff --git a/providers/orcarouter/models/qwen/qwen3.5-27b.toml b/providers/orcarouter/models/qwen/qwen3.5-27b.toml index c029b6e3bd1..09945904753 100644 --- a/providers/orcarouter/models/qwen/qwen3.5-27b.toml +++ b/providers/orcarouter/models/qwen/qwen3.5-27b.toml @@ -1,5 +1,9 @@ +# Toggle: enable_thinking; budget: thinking_budget base_model = "alibaba/qwen3.5-27b" -reasoning_options = [] +reasoning_options = [ + { type = "toggle" }, + { type = "budget_tokens" }, +] [cost] input = 0.086 diff --git a/providers/orcarouter/models/qwen/qwen3.5-35b-a3b.toml b/providers/orcarouter/models/qwen/qwen3.5-35b-a3b.toml index b3505ad727b..9a706594451 100644 --- a/providers/orcarouter/models/qwen/qwen3.5-35b-a3b.toml +++ b/providers/orcarouter/models/qwen/qwen3.5-35b-a3b.toml @@ -1,5 +1,9 @@ +# Toggle: enable_thinking; budget: thinking_budget base_model = "alibaba/qwen3.5-35b-a3b" -reasoning_options = [] +reasoning_options = [ + { type = "toggle" }, + { type = "budget_tokens" }, +] [cost] input = 0.057 diff --git a/providers/orcarouter/models/qwen/qwen3.5-397b-a17b.toml b/providers/orcarouter/models/qwen/qwen3.5-397b-a17b.toml index 359409c9f84..1b3f128da2f 100644 --- a/providers/orcarouter/models/qwen/qwen3.5-397b-a17b.toml +++ b/providers/orcarouter/models/qwen/qwen3.5-397b-a17b.toml @@ -1,5 +1,9 @@ +# Toggle: enable_thinking; budget: thinking_budget base_model = "alibaba/qwen3.5-397b-a17b" -reasoning_options = [] +reasoning_options = [ + { type = "toggle" }, + { type = "budget_tokens" }, +] [cost] input = 0.172 diff --git a/providers/orcarouter/models/qwen/qwen3.5-flash.toml b/providers/orcarouter/models/qwen/qwen3.5-flash.toml new file mode 100644 index 00000000000..45e1c566934 --- /dev/null +++ b/providers/orcarouter/models/qwen/qwen3.5-flash.toml @@ -0,0 +1,10 @@ +# Toggle: enable_thinking; budget: thinking_budget +base_model = "alibaba/qwen3.5-flash" +reasoning_options = [ + { type = "toggle" }, + { type = "budget_tokens", min = 1, max = 81_920 }, +] + +[cost] +input = 0.1 +output = 0.4 diff --git a/providers/orcarouter/models/qwen/qwen3.5-plus.toml b/providers/orcarouter/models/qwen/qwen3.5-plus.toml index 723cc50ec34..69aba29ee3f 100644 --- a/providers/orcarouter/models/qwen/qwen3.5-plus.toml +++ b/providers/orcarouter/models/qwen/qwen3.5-plus.toml @@ -1,5 +1,9 @@ +# Toggle: enable_thinking; budget: thinking_budget base_model = "alibaba/qwen3.5-plus" -reasoning_options = [] +reasoning_options = [ + { type = "toggle" }, + { type = "budget_tokens" }, +] [cost] input = 0.115 diff --git a/providers/orcarouter/models/qwen/qwen3.6-35b-a3b.toml b/providers/orcarouter/models/qwen/qwen3.6-35b-a3b.toml index 4f30ca3b51d..55a66762c0c 100644 --- a/providers/orcarouter/models/qwen/qwen3.6-35b-a3b.toml +++ b/providers/orcarouter/models/qwen/qwen3.6-35b-a3b.toml @@ -1,5 +1,9 @@ +# Toggle: enable_thinking; budget: thinking_budget base_model = "alibaba/qwen3.6-35b-a3b" -reasoning_options = [] +reasoning_options = [ + { type = "toggle" }, + { type = "budget_tokens" }, +] [cost] input = 0.248 diff --git a/providers/orcarouter/models/qwen/qwen3.6-flash.toml b/providers/orcarouter/models/qwen/qwen3.6-flash.toml new file mode 100644 index 00000000000..542b5a094d4 --- /dev/null +++ b/providers/orcarouter/models/qwen/qwen3.6-flash.toml @@ -0,0 +1,10 @@ +# Toggle: enable_thinking; budget: thinking_budget +base_model = "alibaba/qwen3.6-flash" +reasoning_options = [ + { type = "toggle" }, + { type = "budget_tokens" }, +] + +[cost] +input = 0.25 +output = 1.5 diff --git a/providers/orcarouter/models/qwen/qwen3.6-plus.toml b/providers/orcarouter/models/qwen/qwen3.6-plus.toml index 308cef96883..d1d76da4a45 100644 --- a/providers/orcarouter/models/qwen/qwen3.6-plus.toml +++ b/providers/orcarouter/models/qwen/qwen3.6-plus.toml @@ -1,5 +1,9 @@ +# Toggle: enable_thinking; budget: thinking_budget base_model = "alibaba/qwen3.6-plus" -reasoning_options = [] +reasoning_options = [ + { type = "toggle" }, + { type = "budget_tokens" }, +] [cost] input = 0.5 diff --git a/providers/orcarouter/models/qwen/qwen3.7-flash.toml b/providers/orcarouter/models/qwen/qwen3.7-flash.toml new file mode 100644 index 00000000000..06976af6ab0 --- /dev/null +++ b/providers/orcarouter/models/qwen/qwen3.7-flash.toml @@ -0,0 +1,12 @@ +# Toggle: enable_thinking; budget: thinking_budget +base_model = "alibaba/qwen3.7-flash" +reasoning_options = [ + { type = "toggle" }, + { type = "budget_tokens" }, +] + +[cost] +input = 0.03 +output = 0.13 +cache_read = 0.006 +cache_write = 0.038 diff --git a/providers/orcarouter/models/qwen/qwen3.7-max.toml b/providers/orcarouter/models/qwen/qwen3.7-max.toml new file mode 100644 index 00000000000..a71ff398d5d --- /dev/null +++ b/providers/orcarouter/models/qwen/qwen3.7-max.toml @@ -0,0 +1,12 @@ +# Toggle: enable_thinking; budget: thinking_budget +base_model = "alibaba/qwen3.7-max" +reasoning_options = [ + { type = "toggle" }, + { type = "budget_tokens" }, +] + +[cost] +input = 1.25 +output = 3.75 +cache_read = 0.25 +cache_write = 1.563 diff --git a/providers/orcarouter/models/qwen/qwen3.7-plus.toml b/providers/orcarouter/models/qwen/qwen3.7-plus.toml new file mode 100644 index 00000000000..2156f471fa1 --- /dev/null +++ b/providers/orcarouter/models/qwen/qwen3.7-plus.toml @@ -0,0 +1,11 @@ +# Toggle: enable_thinking; budget: thinking_budget +base_model = "alibaba/qwen3.7-plus" +reasoning_options = [ + { type = "toggle" }, + { type = "budget_tokens" }, +] + +[cost] +input = 0.35 +output = 1.42 +cache_read = 0.071 diff --git a/providers/orcarouter/models/qwen/qwen3.8-27b.toml b/providers/orcarouter/models/qwen/qwen3.8-27b.toml new file mode 100644 index 00000000000..9fdacd23754 --- /dev/null +++ b/providers/orcarouter/models/qwen/qwen3.8-27b.toml @@ -0,0 +1,6 @@ +base_model = "alibaba/qwen3.8-27b" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "xhigh"] }] + +[cost] +input = 0.33 +output = 2.4 diff --git a/providers/orcarouter/models/qwen/qwen3.8-max.toml b/providers/orcarouter/models/qwen/qwen3.8-max.toml new file mode 100644 index 00000000000..f2a983c1bd1 --- /dev/null +++ b/providers/orcarouter/models/qwen/qwen3.8-max.toml @@ -0,0 +1,16 @@ +# Toggle: enable_thinking; budget: thinking_budget +base_model = "alibaba/qwen3.8-max" +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["low", "medium", "xhigh"] }, + { type = "budget_tokens", min = 0, max = 262_144 }, +] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 2 +output = 6 +cache_read = 0.25 +cache_write = 2.5 diff --git a/providers/orcarouter/models/tencent/hy3-free.toml b/providers/orcarouter/models/tencent/hy3-free.toml new file mode 100644 index 00000000000..5c4f2f54d2d --- /dev/null +++ b/providers/orcarouter/models/tencent/hy3-free.toml @@ -0,0 +1,7 @@ +base_model = "tencent/hy3" +name = "Hy3 (free)" +reasoning_options = [{ type = "effort", values = ["none", "low", "high"] }] + +[cost] +input = 0 +output = 0 diff --git a/providers/orcarouter/models/tencent/hy3.toml b/providers/orcarouter/models/tencent/hy3.toml new file mode 100644 index 00000000000..d82ff03bcf2 --- /dev/null +++ b/providers/orcarouter/models/tencent/hy3.toml @@ -0,0 +1,7 @@ +base_model = "tencent/hy3" +reasoning_options = [{ type = "effort", values = ["none", "low", "high"] }] + +[cost] +input = 0.18 +output = 0.59 +cache_read = 0.059 diff --git a/providers/orcarouter/models/z-ai/glm-4.5-air.toml b/providers/orcarouter/models/z-ai/glm-4.5-air.toml index 4324692a5be..b99b52d9d03 100644 --- a/providers/orcarouter/models/z-ai/glm-4.5-air.toml +++ b/providers/orcarouter/models/z-ai/glm-4.5-air.toml @@ -1,5 +1,6 @@ +# Toggle: thinking true|false base_model = "zhipuai/glm-4.5-air" -reasoning_options = [] +reasoning_options = [{ type = "toggle" }] [cost] input = 0.2 diff --git a/providers/orcarouter/models/z-ai/glm-4.5.toml b/providers/orcarouter/models/z-ai/glm-4.5.toml index ab4cdeb9737..81bf4ed1436 100644 --- a/providers/orcarouter/models/z-ai/glm-4.5.toml +++ b/providers/orcarouter/models/z-ai/glm-4.5.toml @@ -1,5 +1,6 @@ +# Toggle: thinking true|false base_model = "zhipuai/glm-4.5" -reasoning_options = [] +reasoning_options = [{ type = "toggle" }] [cost] input = 0.6 diff --git a/providers/orcarouter/models/z-ai/glm-4.6.toml b/providers/orcarouter/models/z-ai/glm-4.6.toml index 329b6bbd5cf..103d2fc70fd 100644 --- a/providers/orcarouter/models/z-ai/glm-4.6.toml +++ b/providers/orcarouter/models/z-ai/glm-4.6.toml @@ -1,5 +1,6 @@ +# Toggle: thinking true|false base_model = "zhipuai/glm-4.6" -reasoning_options = [] +reasoning_options = [{ type = "toggle" }] [cost] input = 0.6 diff --git a/providers/orcarouter/models/z-ai/glm-4.7.toml b/providers/orcarouter/models/z-ai/glm-4.7.toml index 2e6a1258941..e65ed707921 100644 --- a/providers/orcarouter/models/z-ai/glm-4.7.toml +++ b/providers/orcarouter/models/z-ai/glm-4.7.toml @@ -1,5 +1,6 @@ +# Toggle: thinking true|false base_model = "zhipuai/glm-4.7" -reasoning_options = [] +reasoning_options = [{ type = "toggle" }] [interleaved] field = "reasoning_content" diff --git a/providers/orcarouter/models/z-ai/glm-5.1.toml b/providers/orcarouter/models/z-ai/glm-5.1.toml index 691da7cfdf2..da8828bb9ab 100644 --- a/providers/orcarouter/models/z-ai/glm-5.1.toml +++ b/providers/orcarouter/models/z-ai/glm-5.1.toml @@ -1,5 +1,6 @@ +# Toggle: thinking true|false base_model = "zhipuai/glm-5.1" -reasoning_options = [] +reasoning_options = [{ type = "toggle" }] [interleaved] field = "reasoning_content" diff --git a/providers/orcarouter/models/z-ai/glm-5.2.toml b/providers/orcarouter/models/z-ai/glm-5.2.toml new file mode 100644 index 00000000000..939962684e8 --- /dev/null +++ b/providers/orcarouter/models/z-ai/glm-5.2.toml @@ -0,0 +1,10 @@ +base_model = "zhipuai/glm-5.2" +reasoning_options = [{ type = "effort", values = ["high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.26 diff --git a/providers/orcarouter/models/z-ai/glm-5.3-flash-free.toml b/providers/orcarouter/models/z-ai/glm-5.3-flash-free.toml new file mode 100644 index 00000000000..ef4e405112a --- /dev/null +++ b/providers/orcarouter/models/z-ai/glm-5.3-flash-free.toml @@ -0,0 +1,15 @@ +# Source: https://api.orcarouter.ai/api/pricing (z-ai/glm-5.3-flash-free, is_free_tier=true, free_base_model=z-ai/glm-5.3-flash, 1M/128k) +base_model = "zhipuai/glm-5.3-flash" +name = "GLM-5.3-Flash (free)" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 + +[limit] +context = 1_000_000 +output = 128_000 diff --git a/providers/orcarouter/models/z-ai/glm-5.3-flash.toml b/providers/orcarouter/models/z-ai/glm-5.3-flash.toml new file mode 100644 index 00000000000..7036c517990 --- /dev/null +++ b/providers/orcarouter/models/z-ai/glm-5.3-flash.toml @@ -0,0 +1,13 @@ +base_model = "zhipuai/glm-5.3-flash" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.075 +output = 0.25 + +[limit] +context = 1_000_000 +output = 128_000 diff --git a/providers/orcarouter/models/z-ai/glm-5.3.toml b/providers/orcarouter/models/z-ai/glm-5.3.toml new file mode 100644 index 00000000000..7fbbffd3aff --- /dev/null +++ b/providers/orcarouter/models/z-ai/glm-5.3.toml @@ -0,0 +1,10 @@ +base_model = "zhipuai/glm-5.3" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1.26 +output = 3.96 +cache_read = 0.234 diff --git a/providers/orcarouter/models/z-ai/glm-5.toml b/providers/orcarouter/models/z-ai/glm-5.toml index 046f58af413..67d7aef87d6 100644 --- a/providers/orcarouter/models/z-ai/glm-5.toml +++ b/providers/orcarouter/models/z-ai/glm-5.toml @@ -1,5 +1,6 @@ +# Toggle: thinking true|false base_model = "zhipuai/glm-5" -reasoning_options = [] +reasoning_options = [{ type = "toggle" }] [interleaved] field = "reasoning_content" @@ -7,5 +8,5 @@ field = "reasoning_content" [cost] input = 1 output = 3.2 -cache_read = 0.2 +cache_read = 0.26 cache_write = 0 diff --git a/providers/ovhcloud/models/qwen3-32b.toml b/providers/ovhcloud/models/qwen3-32b.toml deleted file mode 100644 index b117c1bb3b6..00000000000 --- a/providers/ovhcloud/models/qwen3-32b.toml +++ /dev/null @@ -1,26 +0,0 @@ -# Put `/no_think` in prompt content to disable the model's default reasoning. -# https://www.ovhcloud.com/en/public-cloud/ai-endpoints/catalog/qwen-3-32b/ - -name = "Qwen3-32B" -description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" -release_date = "2025-07-16" -last_updated = "2025-07-16" -attachment = false -reasoning = true -reasoning_options = [{ type = "toggle" }] -temperature = true -tool_call = true -structured_output = true -open_weights = true - -[cost] -input = 0.09 -output = 0.25 - -[limit] -context = 32_768 -output = 32_768 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/ovhcloud/models/qwen3.6-27b.toml b/providers/ovhcloud/models/qwen3.6-27b.toml index 24cf367061c..b0decce5dc7 100644 --- a/providers/ovhcloud/models/qwen3.6-27b.toml +++ b/providers/ovhcloud/models/qwen3.6-27b.toml @@ -1,18 +1,20 @@ # Chat `reasoning_effort` supports none|minimal|low|medium|high; `none` disables it. # https://www.ovhcloud.com/en/public-cloud/ai-endpoints/catalog/qwen-3-6-27b/ - name = "Qwen3.6-27B" description = "Multimodal reasoning model for visual analysis, planning, and tool use" release_date = "2026-06-01" last_updated = "2026-06-01" attachment = true reasoning = true -reasoning_options = [{ type = "effort", values = ["none", "minimal", "low", "medium", "high"] }] temperature = true tool_call = true structured_output = true open_weights = true +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high"] + [cost] input = 0.47 output = 3.19 diff --git a/providers/ovhcloud/models/qwen3.8-27b.toml b/providers/ovhcloud/models/qwen3.8-27b.toml new file mode 100644 index 00000000000..cc5da21fd15 --- /dev/null +++ b/providers/ovhcloud/models/qwen3.8-27b.toml @@ -0,0 +1,34 @@ +# Sources (accessed 2026-09-02): +# https://oai.endpoints.kepler.ai.cloud.ovh.net/doc/Qwen3.8-27B/openapi.json +# https://catalog.endpoints.ai.ovh.net/rest/v2/openrouter +# Effort: reasoning_effort = none|minimal|low|medium|high (OVHcloud's API enum, +# not the lab's low|medium|xhigh). Responses uses reasoning.effort. +# Blank catalog prompt/completion rates default to zero in the sync. +base_model = "alibaba/qwen3.8-27b" +name = "Qwen3.8-27B" +description = "Multimodal reasoning model for visual analysis, planning, and tool use" +family = "qwen" +release_date = "2026-09-02" +last_updated = "2026-09-02" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high"] + +[cost] +input = 0.47 +output = 3.19 + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/ovhcloud/models/qwen3guard-gen-0.6b.toml b/providers/ovhcloud/models/qwen3guard-gen-0.6b.toml index 6e1f4318b3b..46c9923c1db 100644 --- a/providers/ovhcloud/models/qwen3guard-gen-0.6b.toml +++ b/providers/ovhcloud/models/qwen3guard-gen-0.6b.toml @@ -8,6 +8,10 @@ temperature = true tool_call = false open_weights = true +[cost] +input = 0 +output = 0 + [limit] context = 32_768 output = 16_384 diff --git a/providers/ovhcloud/models/qwen3guard-gen-8b.toml b/providers/ovhcloud/models/qwen3guard-gen-8b.toml index b26f56bc363..f7f4eddbb8b 100644 --- a/providers/ovhcloud/models/qwen3guard-gen-8b.toml +++ b/providers/ovhcloud/models/qwen3guard-gen-8b.toml @@ -8,6 +8,10 @@ temperature = true tool_call = false open_weights = true +[cost] +input = 0 +output = 0 + [limit] context = 32_768 output = 16_384 diff --git a/providers/pioneer/models/claude-opus-5-fast.toml b/providers/pioneer/models/claude-opus-5-fast.toml new file mode 100644 index 00000000000..b6db854f608 --- /dev/null +++ b/providers/pioneer/models/claude-opus-5-fast.toml @@ -0,0 +1,15 @@ +# Source: https://api.pioneer.ai/v1/models (accessed 2026-09-11) +base_model = "anthropic/claude-opus-5" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 diff --git a/providers/pioneer/models/devstral-small-2.toml b/providers/pioneer/models/devstral-small-2.toml new file mode 100644 index 00000000000..9372e8cbe89 --- /dev/null +++ b/providers/pioneer/models/devstral-small-2.toml @@ -0,0 +1,12 @@ +# Source: https://api.pioneer.ai/v1/models (accessed 2026-09-11) +base_model = "mistral/devstral-small-2" + +[cost] +input = 0.1 +output = 0.3 +cache_read = 0.1 +cache_write = 0.1 + +[limit] +context = 256_000 +output = 131_072 diff --git a/providers/pioneer/models/fastino/gliguard-LLMGuardrails-300M.toml b/providers/pioneer/models/fastino/gliguard-LLMGuardrails-300M.toml index de754b40e20..f455ac6d116 100644 --- a/providers/pioneer/models/fastino/gliguard-LLMGuardrails-300M.toml +++ b/providers/pioneer/models/fastino/gliguard-LLMGuardrails-300M.toml @@ -3,11 +3,18 @@ description = "Tool-capable chat model for instruction following and agentic app release_date = "2026-04-30" last_updated = "2026-04-30" attachment = false -reasoning = false +reasoning = true temperature = true tool_call = true open_weights = false +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + [cost] input = 0.15 output = 0.15 @@ -16,7 +23,7 @@ cache_write = 0.15 [limit] context = 8_192 -output = 4_096 +output = 8_192 [modalities] input = ["text"] diff --git a/providers/pioneer/models/fastino/gliguard-PII-multi.toml b/providers/pioneer/models/fastino/gliguard-PII-multi.toml new file mode 100644 index 00000000000..cec904e782a --- /dev/null +++ b/providers/pioneer/models/fastino/gliguard-PII-multi.toml @@ -0,0 +1,36 @@ +# Sources: +# - Pioneer live catalog GET https://api.pioneer.ai/v1/models (id fastino/gliguard-PII-multi: display_name, max_input_tokens 8192, max_tokens 8192, prices 0.15, capabilities all false) +# - Pioneer base-models GET https://api.pioneer.ai/base-models (label GLiNER2-Guardrails-PII-Multi, context_window 8192, license Apache-2.0, release_month Jul 2026) +# - Fastino release blog https://fastino.ai/blog/gliner2-guardrails-pii-multi-safety-moderation-privacy-filtering-small-language-model (released July 8 2026, 0.3B param, single forward pass, Apache 2.0) +# - Fastino model page https://fastino.ai/models/gliner2-guardrails-pii-multi (300M-param multilingual safety moderation + PII detection, open weights) +# - Hugging Face https://huggingface.co/fastino/GLiNER2-Guardrails-PII-Multi (Apache-2.0, 0.3B params, unified safety moderation + PII detection) +name = "GLiNER2-Guardrails-PII-Multi" +description = "A 300M-parameter multilingual model that runs LLM safety moderation and PII detection in a single forward pass." +release_date = "2026-07-08" +last_updated = "2026-07-08" +attachment = false +reasoning = true +temperature = true +tool_call = true +open_weights = true + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.15 +output = 0.15 +cache_read = 0.15 +cache_write = 0.15 + +[limit] +context = 8_192 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/pioneer/models/fastino/gliner2-base-v1.toml b/providers/pioneer/models/fastino/gliner2-base-v1.toml index ef23d31a6ad..060cd035d56 100644 --- a/providers/pioneer/models/fastino/gliner2-base-v1.toml +++ b/providers/pioneer/models/fastino/gliner2-base-v1.toml @@ -3,11 +3,18 @@ description = "Tool-capable chat model for instruction following and agentic app release_date = "2025-06-30" last_updated = "2025-06-30" attachment = false -reasoning = false +reasoning = true temperature = true tool_call = true open_weights = false +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + [cost] input = 0.15 output = 0.15 @@ -16,7 +23,7 @@ cache_write = 0.15 [limit] context = 8_192 -output = 4_096 +output = 8_192 [modalities] input = ["text"] diff --git a/providers/pioneer/models/fastino/gliner2-large-v1.toml b/providers/pioneer/models/fastino/gliner2-large-v1.toml index 086e826101d..93f13f5d9c0 100644 --- a/providers/pioneer/models/fastino/gliner2-large-v1.toml +++ b/providers/pioneer/models/fastino/gliner2-large-v1.toml @@ -3,11 +3,18 @@ description = "Flagship model for demanding analysis, coding, and production age release_date = "2025-06-30" last_updated = "2025-06-30" attachment = false -reasoning = false +reasoning = true temperature = true tool_call = true open_weights = false +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + [cost] input = 0.15 output = 0.15 @@ -16,7 +23,7 @@ cache_write = 0.15 [limit] context = 8_192 -output = 4_096 +output = 8_192 [modalities] input = ["text"] diff --git a/providers/pioneer/models/fastino/gliner2-multi-large-v1.toml b/providers/pioneer/models/fastino/gliner2-multi-large-v1.toml index 74367df5b6c..5e3d3050671 100644 --- a/providers/pioneer/models/fastino/gliner2-multi-large-v1.toml +++ b/providers/pioneer/models/fastino/gliner2-multi-large-v1.toml @@ -3,11 +3,18 @@ description = "Flagship model for demanding analysis, coding, and production age release_date = "2025-11-30" last_updated = "2025-11-30" attachment = false -reasoning = false +reasoning = true temperature = true tool_call = true open_weights = false +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + [cost] input = 0.15 output = 0.15 @@ -16,7 +23,7 @@ cache_write = 0.15 [limit] context = 8_192 -output = 4_096 +output = 8_192 [modalities] input = ["text"] diff --git a/providers/pioneer/models/fastino/gliner2-multi-v1.toml b/providers/pioneer/models/fastino/gliner2-multi-v1.toml index 70b2d9553eb..76f6cdfd84a 100644 --- a/providers/pioneer/models/fastino/gliner2-multi-v1.toml +++ b/providers/pioneer/models/fastino/gliner2-multi-v1.toml @@ -3,11 +3,18 @@ description = "Tool-capable chat model for instruction following and agentic app release_date = "2025-11-30" last_updated = "2025-11-30" attachment = false -reasoning = false +reasoning = true temperature = true tool_call = true open_weights = false +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + [cost] input = 0.15 output = 0.15 @@ -16,7 +23,7 @@ cache_write = 0.15 [limit] context = 8_192 -output = 4_096 +output = 8_192 [modalities] input = ["text"] diff --git a/providers/pioneer/models/fastino/gliner2-privacy-filter-PII-multi.toml b/providers/pioneer/models/fastino/gliner2-privacy-filter-PII-multi.toml index 707d407fa98..af0a2ddc10a 100644 --- a/providers/pioneer/models/fastino/gliner2-privacy-filter-PII-multi.toml +++ b/providers/pioneer/models/fastino/gliner2-privacy-filter-PII-multi.toml @@ -3,11 +3,18 @@ description = "Tool-capable chat model for instruction following and agentic app release_date = "2026-04-30" last_updated = "2026-04-30" attachment = false -reasoning = false +reasoning = true temperature = true tool_call = true open_weights = false +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + [cost] input = 0.15 output = 0.15 @@ -16,7 +23,7 @@ cache_write = 0.15 [limit] context = 8_192 -output = 4_096 +output = 8_192 [modalities] input = ["text"] diff --git a/providers/pioneer/models/fastino/gliner2.5-multi-v1.toml b/providers/pioneer/models/fastino/gliner2.5-multi-v1.toml new file mode 100644 index 00000000000..932fc2e0d70 --- /dev/null +++ b/providers/pioneer/models/fastino/gliner2.5-multi-v1.toml @@ -0,0 +1,35 @@ +# Sources: +# - Pioneer live catalog GET https://api.pioneer.ai/base-models (id fastino/gliner2.5-multi-v1: label "GLiNER 2.5 Multi", description "Multilingual boundary NER and span extraction; non-trainable encoder.", context_window 4096, input/output $0.15, cache $0.15, license Apache-2.0, release Aug 2026, is_chat_model true) +# - Model card https://huggingface.co/fastino/gliner2.5-multi-v1 (287M mDeBERTa-v3-base multilingual boundary checkpoint, max_len 4096, Apache-2.0) +# - Release announcement https://fastino.ai/blog/gliner2-5-span-free-information-extraction (released Aug 24, 2026; three Apache-2.0 variants) +# Pioneer is the first-party Fastino inference API (https://pioneer.ai/, https://www.prnewswire.com/news-releases/fastino-launches-pioneer-the-first-agent-for-fine-tuning-and-inference-of-llms-302748105.html); full inline entry follows existing providers/pioneer/models/fastino/* pattern. +name = "GLiNER 2.5 Multi" +description = "Multilingual boundary NER and span extraction; non-trainable encoder." +release_date = "2026-08-24" +last_updated = "2026-08-24" +attachment = false +reasoning = true +temperature = true +tool_call = true +open_weights = true + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.15 +output = 0.15 +cache_read = 0.15 +cache_write = 0.15 + +[limit] +context = 4_096 +output = 4_096 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/pioneer/models/magistral-medium.toml b/providers/pioneer/models/magistral-medium.toml new file mode 100644 index 00000000000..24fe9ebbc91 --- /dev/null +++ b/providers/pioneer/models/magistral-medium.toml @@ -0,0 +1,18 @@ +# Source: https://api.pioneer.ai/v1/models (accessed 2026-09-11) +base_model = "mistral/magistral-medium-latest" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 2 +output = 5 +cache_read = 2 +cache_write = 2 + +[limit] +output = 64_000 diff --git a/providers/pioneer/models/meta/muse-spark-1.1.toml b/providers/pioneer/models/meta/muse-spark-1.1.toml index e91da16f440..dd7a5d7a776 100644 --- a/providers/pioneer/models/meta/muse-spark-1.1.toml +++ b/providers/pioneer/models/meta/muse-spark-1.1.toml @@ -12,7 +12,3 @@ input = 1.25 output = 4.25 cache_read = 0.15 cache_write = 1.25 - -[limit] -context = 1_048_576 -output = 131_072 diff --git a/providers/pioneer/models/ministral-14b.toml b/providers/pioneer/models/ministral-14b.toml new file mode 100644 index 00000000000..989e6e5e0bf --- /dev/null +++ b/providers/pioneer/models/ministral-14b.toml @@ -0,0 +1,12 @@ +# Source: https://api.pioneer.ai/v1/models (accessed 2026-09-11) +base_model = "mistral/ministral-14b" + +[cost] +input = 0.2 +output = 0.2 +cache_read = 0.2 +cache_write = 0.2 + +[limit] +context = 256_000 +output = 131_072 diff --git a/providers/pioneer/models/ministral-3b.toml b/providers/pioneer/models/ministral-3b.toml new file mode 100644 index 00000000000..1048a637647 --- /dev/null +++ b/providers/pioneer/models/ministral-3b.toml @@ -0,0 +1,11 @@ +# Source: https://api.pioneer.ai/v1/models (accessed 2026-09-11) +base_model = "mistral/ministral-3b" + +[cost] +input = 0.1 +output = 0.1 +cache_read = 0.1 +cache_write = 0.1 + +[limit] +output = 4_000 diff --git a/providers/pioneer/models/mistral-medium.toml b/providers/pioneer/models/mistral-medium.toml new file mode 100644 index 00000000000..549214fa0ce --- /dev/null +++ b/providers/pioneer/models/mistral-medium.toml @@ -0,0 +1,12 @@ +# Source: https://api.pioneer.ai/v1/models (accessed 2026-09-11) +base_model = "mistral/mistral-medium-2505" + +[cost] +input = 0.4 +output = 2 +cache_read = 0.4 +cache_write = 0.4 + +[limit] +context = 128_000 +output = 64_000 diff --git a/providers/pioneer/models/moonshotai/Kimi-K3-Fast.toml b/providers/pioneer/models/moonshotai/Kimi-K3-Fast.toml new file mode 100644 index 00000000000..ff9cdc8daf4 --- /dev/null +++ b/providers/pioneer/models/moonshotai/Kimi-K3-Fast.toml @@ -0,0 +1,18 @@ +# Source: https://api.pioneer.ai/v1/models (accessed 2026-09-11) +base_model = "moonshotai/kimi-k3" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 4.5 +output = 22.5 +cache_read = 0.45 +cache_write = 4.5 + +[limit] +context = 1_000_000 diff --git a/providers/pioneer/models/thinkingmachines/inkling-small.toml b/providers/pioneer/models/thinkingmachines/inkling-small.toml new file mode 100644 index 00000000000..ab657339645 --- /dev/null +++ b/providers/pioneer/models/thinkingmachines/inkling-small.toml @@ -0,0 +1,19 @@ +# Source: https://api.pioneer.ai/v1/models (accessed 2026-09-11) +base_model = "thinkingmachines/inkling-small" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 0.5 +output = 1.2 +cache_read = 0.1 +cache_write = 0.5 + +[limit] +context = 1_000_000 +output = 131_072 diff --git a/providers/pioneer/models/zai-org/GLM-5.2-Fast.toml b/providers/pioneer/models/zai-org/GLM-5.2-Fast.toml new file mode 100644 index 00000000000..9afa02f9bc0 --- /dev/null +++ b/providers/pioneer/models/zai-org/GLM-5.2-Fast.toml @@ -0,0 +1,18 @@ +# Source: https://api.pioneer.ai/v1/models (accessed 2026-09-11) +base_model = "zhipuai/glm-5.2" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 2.1 +output = 6.6 +cache_read = 0.21 +cache_write = 2.1 + +[limit] +output = 128_000 diff --git a/providers/privatemode-ai/models/glm-5.3-flash.toml b/providers/privatemode-ai/models/glm-5.3-flash.toml new file mode 100644 index 00000000000..1dfd3467c63 --- /dev/null +++ b/providers/privatemode-ai/models/glm-5.3-flash.toml @@ -0,0 +1,25 @@ +# Sources (accessed 2026-09-16): +# Model overview (preview): https://docs.privatemode.ai/models/overview/#glm-53-flash +# Pricing (EUR): https://docs.privatemode.ai/pricing/ +# Added in v1.56.0: https://docs.privatemode.ai/release/#v1560 +# Upstream: https://huggingface.co/zai-org/GLM-5.3-Flash +# Effort: reasoning_effort = low|high|max (default max; always on). +# Any other value including none is silently mapped to max; reasoning cannot be off. +# Cost: EUR list prices converted at 1 EUR = 1.1555 USD (Frankfurter 2026-08-10), +# matching other Privatemode catalog entries. +# EUR/MTok: input 0.77 / output 3.87 / cached input 0.08 +# Host exposes text+image only (docs); lab base also lists video/pdf. +base_model = "zhipuai/glm-5.3-flash" +status = "beta" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[modalities] +input = ["text", "image"] + +[cost] +input = 0.8897 +output = 4.4718 +cache_read = 0.0924 + +[limit] +context = 256_000 diff --git a/providers/privatemode-ai/models/glm-5.3.toml b/providers/privatemode-ai/models/glm-5.3.toml new file mode 100644 index 00000000000..dfa4c3d6952 --- /dev/null +++ b/providers/privatemode-ai/models/glm-5.3.toml @@ -0,0 +1,21 @@ +# Sources (accessed 2026-09-01): +# Model overview (preview): https://docs.privatemode.ai/models/overview/#glm-53 +# Pricing (EUR): https://docs.privatemode.ai/pricing/ +# Added in v1.55.0 (upgraded from GLM-5.2): https://docs.privatemode.ai/release/#v1550 +# Upstream: https://huggingface.co/zai-org/GLM-5.3 +# Effort: reasoning_effort = low|high|max (default max; always on). +# Any other value including none is silently mapped to max; reasoning cannot be off. +# Cost: EUR list prices converted at 1 EUR = 1.1555 USD (Frankfurter 2026-08-10), +# matching other Privatemode catalog entries with the same EUR list prices. +# EUR/MTok: input 1.55 / output 7.74 / cached input 0.15 +base_model = "zhipuai/glm-5.3" +status = "beta" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[cost] +input = 1.7910 +output = 8.9436 +cache_read = 0.1733 + +[limit] +context = 256_000 diff --git a/providers/privatemode-ai/models/glm-flash-latest.toml b/providers/privatemode-ai/models/glm-flash-latest.toml new file mode 100644 index 00000000000..50cc63ce680 --- /dev/null +++ b/providers/privatemode-ai/models/glm-flash-latest.toml @@ -0,0 +1,26 @@ +# Sources (accessed 2026-09-16): +# Alias routes to the latest available GLM Flash model (currently GLM-5.3-Flash): +# https://docs.privatemode.ai/models/overview/#glm-53-flash +# Pricing (EUR): https://docs.privatemode.ai/pricing/ +# Release: https://docs.privatemode.ai/release/#v1560 +# Effort: reasoning_effort = low|high|max (default max; always on). +# Any other value including none is silently mapped to max; reasoning cannot be off. +# Cost: EUR list prices converted at 1 EUR = 1.1555 USD (Frankfurter 2026-08-10), +# matching other Privatemode catalog entries. +# EUR/MTok: input 0.77 / output 3.87 / cached input 0.08 +# Host exposes text+image only (docs); lab base also lists video/pdf. +base_model = "zhipuai/glm-5.3-flash" +name = "GLM Flash (latest)" +status = "beta" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[modalities] +input = ["text", "image"] + +[cost] +input = 0.8897 +output = 4.4718 +cache_read = 0.0924 + +[limit] +context = 256_000 diff --git a/providers/privatemode-ai/models/glm-latest.toml b/providers/privatemode-ai/models/glm-latest.toml new file mode 100644 index 00000000000..dd1cbd2bcc9 --- /dev/null +++ b/providers/privatemode-ai/models/glm-latest.toml @@ -0,0 +1,22 @@ +# Sources (accessed 2026-09-01): +# Alias routes to the latest available GLM model (currently GLM-5.3): +# https://docs.privatemode.ai/models/overview/#glm-53 +# Pricing (EUR): https://docs.privatemode.ai/pricing/ +# Release: https://docs.privatemode.ai/release/#v1550 +# Effort: reasoning_effort = low|high|max (default max; always on). +# Any other value including none is silently mapped to max; reasoning cannot be off. +# Cost: EUR list prices converted at 1 EUR = 1.1555 USD (Frankfurter 2026-08-10), +# matching other Privatemode catalog entries with the same EUR list prices. +# EUR/MTok: input 1.55 / output 7.74 / cached input 0.15 +base_model = "zhipuai/glm-5.3" +name = "GLM (latest)" +status = "beta" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[cost] +input = 1.7910 +output = 8.9436 +cache_read = 0.1733 + +[limit] +context = 256_000 diff --git a/providers/privatemode-ai/models/kimi-k2.6.toml b/providers/privatemode-ai/models/kimi-k2.6.toml index 2ad5fece2e4..dc0dd54460b 100644 --- a/providers/privatemode-ai/models/kimi-k2.6.toml +++ b/providers/privatemode-ai/models/kimi-k2.6.toml @@ -1,12 +1,14 @@ -# Sources (accessed 2026-08-10): +# Sources (accessed 2026-09-16): # Model overview & reasoning toggle: https://docs.privatemode.ai/models/overview/#kimi-k26 # Pricing (EUR): https://docs.privatemode.ai/pricing/ # Added in v1.40.0 (default model): https://docs.privatemode.ai/release/#v1400 +# Deprecated in v1.56.0 (migrate to GLM-5.3 or GLM-5.3-Flash): https://docs.privatemode.ai/release/#v1560 # Upstream: https://huggingface.co/moonshotai/Kimi-K2.6 # Toggle: chat_template_kwargs.thinking = true|false (default true / reasoning on). # Cost: EUR list prices converted at 1 EUR = 1.1555 USD (Frankfurter 2026-08-10). # EUR/MTok: input 1.55 / output 7.74 / cached input 0.15 base_model = "moonshotai/kimi-k2.6" +status = "deprecated" reasoning_options = [{ type = "toggle" }] [modalities] diff --git a/providers/privatemode-ai/models/kimi-latest.toml b/providers/privatemode-ai/models/kimi-latest.toml index ba3eec7dd66..990b62aef86 100644 --- a/providers/privatemode-ai/models/kimi-latest.toml +++ b/providers/privatemode-ai/models/kimi-latest.toml @@ -1,12 +1,14 @@ -# Sources (accessed 2026-08-10): +# Sources (accessed 2026-09-16): # Alias routes to the latest available Kimi model (currently Kimi K2.6): # https://docs.privatemode.ai/models/overview/#kimi-k26 # Pricing (EUR): https://docs.privatemode.ai/pricing/ +# Deprecated in v1.56.0 (migrate to GLM-5.3 or GLM-5.3-Flash): https://docs.privatemode.ai/release/#v1560 # Toggle: chat_template_kwargs.thinking = true|false (default true / reasoning on). # Cost: EUR list prices converted at 1 EUR = 1.1555 USD (Frankfurter 2026-08-10). # EUR/MTok: input 1.55 / output 7.74 / cached input 0.15 base_model = "moonshotai/kimi-k2.6" name = "Kimi (latest)" +status = "deprecated" reasoning_options = [{ type = "toggle" }] [modalities] diff --git a/providers/regolo-ai/models/qwen3.6-27b.toml b/providers/regolo-ai/models/qwen3.6-27b.toml deleted file mode 100644 index e10771de9fe..00000000000 --- a/providers/regolo-ai/models/qwen3.6-27b.toml +++ /dev/null @@ -1,17 +0,0 @@ -# Prices listed in EUR on Regolo; converted to USD at 1 EUR = 1.1537 USD (2026-08-05) -# Toggle: thinking = true|false -base_model = "alibaba/qwen3.6-27b" - -reasoning_options = [{ type = "toggle" }] - -[cost] -input = 0.58 -output = 2.42 - -[limit] -context = 120_000 -output = 120_000 - -[modalities] -input = ["text", "image", "video"] -output = ["text"] diff --git a/providers/regolo-ai/models/qwen3.8-27b.toml b/providers/regolo-ai/models/qwen3.8-27b.toml new file mode 100644 index 00000000000..b2797559ce5 --- /dev/null +++ b/providers/regolo-ai/models/qwen3.8-27b.toml @@ -0,0 +1,13 @@ +# Prices listed in EUR on Regolo; converted to USD at 1 EUR = 1.1537 USD (2026-08-05) +# Toggle: thinking = true|false +base_model = "alibaba/qwen3.8-27b" + +reasoning_options = [{ type = "toggle" }] + +[cost] +input = 0.58 +output = 2.42 + +[limit] +context = 120_000 +output = 120_000 diff --git a/providers/requesty/models/claude-fable-5.1.toml b/providers/requesty/models/claude-fable-5.1.toml new file mode 100644 index 00000000000..9d623a2b2bf --- /dev/null +++ b/providers/requesty/models/claude-fable-5.1.toml @@ -0,0 +1,15 @@ +base_model = "anthropic/claude-fable-5-1" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 diff --git a/providers/requesty/models/claude-fable-5.1@eu.toml b/providers/requesty/models/claude-fable-5.1@eu.toml new file mode 100644 index 00000000000..4a2be775eb0 --- /dev/null +++ b/providers/requesty/models/claude-fable-5.1@eu.toml @@ -0,0 +1,16 @@ +base_model = "anthropic/claude-fable-5-1" +name = "Claude Fable 5.1 (EU)" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 11 +output = 55 +cache_read = 0.275 +cache_write = 13.75 diff --git a/providers/requesty/models/claude-fable-5.toml b/providers/requesty/models/claude-fable-5.toml index e2a107d8842..685f20fb08b 100644 --- a/providers/requesty/models/claude-fable-5.toml +++ b/providers/requesty/models/claude-fable-5.toml @@ -9,7 +9,7 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 9 -output = 45 -cache_read = 0.9 -cache_write = 11.25 +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 diff --git a/providers/requesty/models/claude-fable-5@eu.toml b/providers/requesty/models/claude-fable-5@eu.toml index 35f9764cd66..7e5d5f41f71 100644 --- a/providers/requesty/models/claude-fable-5@eu.toml +++ b/providers/requesty/models/claude-fable-5@eu.toml @@ -10,7 +10,7 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 9.9 -output = 49.5 -cache_read = 0.99 -cache_write = 12.375 +input = 11 +output = 55 +cache_read = 1.1 +cache_write = 13.75 diff --git a/providers/requesty/models/claude-haiku-4-5.toml b/providers/requesty/models/claude-haiku-4-5.toml index 67ec34cf709..ef99a1dbd00 100644 --- a/providers/requesty/models/claude-haiku-4-5.toml +++ b/providers/requesty/models/claude-haiku-4-5.toml @@ -9,7 +9,7 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.9 -output = 4.5 -cache_read = 0.09 -cache_write = 1.125 +input = 1 +output = 5 +cache_read = 0.1 +cache_write = 1.25 diff --git a/providers/requesty/models/claude-haiku-4-5@eu.toml b/providers/requesty/models/claude-haiku-4-5@eu.toml index 5cc8db46cdd..db382199492 100644 --- a/providers/requesty/models/claude-haiku-4-5@eu.toml +++ b/providers/requesty/models/claude-haiku-4-5@eu.toml @@ -10,7 +10,7 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.99 -output = 4.95 -cache_read = 0.099 -cache_write = 1.2375 +input = 1.1 +output = 5.5 +cache_read = 0.11 +cache_write = 1.375 diff --git a/providers/requesty/models/claude-opus-4-1.toml b/providers/requesty/models/claude-opus-4-1.toml index 18401d20661..bde914f89d9 100644 --- a/providers/requesty/models/claude-opus-4-1.toml +++ b/providers/requesty/models/claude-opus-4-1.toml @@ -9,7 +9,7 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 13.5 -output = 67.5 -cache_read = 1.35 -cache_write = 16.875 +input = 15 +output = 75 +cache_read = 1.5 +cache_write = 18.75 diff --git a/providers/requesty/models/claude-opus-4-5.toml b/providers/requesty/models/claude-opus-4-5.toml index 222b87f29e1..f00d78dd6bb 100644 --- a/providers/requesty/models/claude-opus-4-5.toml +++ b/providers/requesty/models/claude-opus-4-5.toml @@ -9,7 +9,7 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 4.5 -output = 22.5 -cache_read = 0.45 -cache_write = 5.625 +input = 5 +output = 25 +cache_read = 0.5 +cache_write = 6.25 diff --git a/providers/requesty/models/claude-opus-4-5@eu.toml b/providers/requesty/models/claude-opus-4-5@eu.toml index 93abb718801..58430132a60 100644 --- a/providers/requesty/models/claude-opus-4-5@eu.toml +++ b/providers/requesty/models/claude-opus-4-5@eu.toml @@ -10,7 +10,7 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 4.95 -output = 24.75 -cache_read = 0.495 -cache_write = 6.1875 +input = 5.5 +output = 27.5 +cache_read = 0.55 +cache_write = 6.875 diff --git a/providers/requesty/models/claude-opus-4-6.toml b/providers/requesty/models/claude-opus-4-6.toml index b82af39fee8..e43a8709a23 100644 --- a/providers/requesty/models/claude-opus-4-6.toml +++ b/providers/requesty/models/claude-opus-4-6.toml @@ -9,7 +9,7 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 4.5 -output = 22.5 -cache_read = 0.45 -cache_write = 5.625 +input = 5 +output = 25 +cache_read = 0.5 +cache_write = 6.25 diff --git a/providers/requesty/models/claude-opus-4-6@eu.toml b/providers/requesty/models/claude-opus-4-6@eu.toml index 56d5804900f..f5e44965220 100644 --- a/providers/requesty/models/claude-opus-4-6@eu.toml +++ b/providers/requesty/models/claude-opus-4-6@eu.toml @@ -10,7 +10,7 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 4.95 -output = 24.75 -cache_read = 0.495 -cache_write = 6.1875 +input = 5.5 +output = 27.5 +cache_read = 0.55 +cache_write = 6.875 diff --git a/providers/requesty/models/claude-opus-4-7.toml b/providers/requesty/models/claude-opus-4-7.toml index 9b33e0c52b5..4c464ebf796 100644 --- a/providers/requesty/models/claude-opus-4-7.toml +++ b/providers/requesty/models/claude-opus-4-7.toml @@ -9,7 +9,7 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 4.5 -output = 22.5 -cache_read = 0.45 -cache_write = 5.625 +input = 5 +output = 25 +cache_read = 0.5 +cache_write = 6.25 diff --git a/providers/requesty/models/claude-opus-4-7@eu.toml b/providers/requesty/models/claude-opus-4-7@eu.toml index 514bce6a512..b2067197c30 100644 --- a/providers/requesty/models/claude-opus-4-7@eu.toml +++ b/providers/requesty/models/claude-opus-4-7@eu.toml @@ -10,7 +10,7 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 4.95 -output = 24.75 -cache_read = 0.495 -cache_write = 6.1875 +input = 5.5 +output = 27.5 +cache_read = 0.55 +cache_write = 6.875 diff --git a/providers/requesty/models/claude-opus-4-8.toml b/providers/requesty/models/claude-opus-4-8.toml index a77ef72f101..32911565b01 100644 --- a/providers/requesty/models/claude-opus-4-8.toml +++ b/providers/requesty/models/claude-opus-4-8.toml @@ -9,7 +9,7 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 4.5 -output = 22.5 -cache_read = 0.45 -cache_write = 5.625 +input = 5 +output = 25 +cache_read = 0.5 +cache_write = 6.25 diff --git a/providers/requesty/models/claude-opus-4-8@eu.toml b/providers/requesty/models/claude-opus-4-8@eu.toml index ec2bef267b6..af4708b3bfd 100644 --- a/providers/requesty/models/claude-opus-4-8@eu.toml +++ b/providers/requesty/models/claude-opus-4-8@eu.toml @@ -10,7 +10,7 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 4.95 -output = 24.75 -cache_read = 0.495 -cache_write = 6.1875 +input = 5.5 +output = 27.5 +cache_read = 0.55 +cache_write = 6.875 diff --git a/providers/requesty/models/claude-opus-5-5.toml b/providers/requesty/models/claude-opus-5-5.toml new file mode 100644 index 00000000000..1c8fca5fbe5 --- /dev/null +++ b/providers/requesty/models/claude-opus-5-5.toml @@ -0,0 +1,15 @@ +base_model = "anthropic/claude-opus-5-5" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 5 +output = 25 +cache_read = 0.5 +cache_write = 6.25 diff --git a/providers/requesty/models/claude-opus-5-5@eu.toml b/providers/requesty/models/claude-opus-5-5@eu.toml new file mode 100644 index 00000000000..eaa19cb4ca0 --- /dev/null +++ b/providers/requesty/models/claude-opus-5-5@eu.toml @@ -0,0 +1,16 @@ +base_model = "anthropic/claude-opus-5-5" +name = "Claude Opus 5.5 (EU)" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 5.5 +output = 27.5 +cache_read = 0.55 +cache_write = 6.875 diff --git a/providers/requesty/models/claude-opus-5.toml b/providers/requesty/models/claude-opus-5.toml index b765dada372..5807ccae254 100644 --- a/providers/requesty/models/claude-opus-5.toml +++ b/providers/requesty/models/claude-opus-5.toml @@ -9,7 +9,7 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 4.5 -output = 22.5 -cache_read = 0.45 -cache_write = 5.625 +input = 5 +output = 25 +cache_read = 0.5 +cache_write = 6.25 diff --git a/providers/requesty/models/claude-opus-5@eu.toml b/providers/requesty/models/claude-opus-5@eu.toml index f78e6d571a0..efe07665120 100644 --- a/providers/requesty/models/claude-opus-5@eu.toml +++ b/providers/requesty/models/claude-opus-5@eu.toml @@ -10,7 +10,7 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 4.95 -output = 24.75 -cache_read = 0.495 -cache_write = 6.1875 +input = 5.5 +output = 27.5 +cache_read = 0.55 +cache_write = 6.875 diff --git a/providers/requesty/models/claude-sonnet-4-5.toml b/providers/requesty/models/claude-sonnet-4-5.toml index c509d9f175e..fb2d6fa1c69 100644 --- a/providers/requesty/models/claude-sonnet-4-5.toml +++ b/providers/requesty/models/claude-sonnet-4-5.toml @@ -9,17 +9,17 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 2.7 -output = 13.5 -cache_read = 0.27 -cache_write = 3.375 +input = 3 +output = 15 +cache_read = 0.3 +cache_write = 3.75 [[cost.tiers]] tier = { type = "context", size = 200_000 } -input = 5.4 -output = 20.25 -cache_read = 0.54 -cache_write = 6.75 +input = 6 +output = 22.5 +cache_read = 0.6 +cache_write = 7.5 [limit] context = 1_000_000 diff --git a/providers/requesty/models/claude-sonnet-4-5@eu.toml b/providers/requesty/models/claude-sonnet-4-5@eu.toml index 418061c557d..cadc9b45bb9 100644 --- a/providers/requesty/models/claude-sonnet-4-5@eu.toml +++ b/providers/requesty/models/claude-sonnet-4-5@eu.toml @@ -10,17 +10,17 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 2.97 -output = 14.85 -cache_read = 0.27 -cache_write = 3.7125 +input = 3.3 +output = 16.5 +cache_read = 0.3 +cache_write = 4.125 [[cost.tiers]] tier = { type = "context", size = 200_000 } -input = 5.94 -output = 22.275 -cache_read = 0.54 -cache_write = 7.425 +input = 6.6 +output = 24.75 +cache_read = 0.6 +cache_write = 8.25 [limit] context = 1_000_000 diff --git a/providers/requesty/models/claude-sonnet-4-6.toml b/providers/requesty/models/claude-sonnet-4-6.toml index 33f7728a6f0..011600033b7 100644 --- a/providers/requesty/models/claude-sonnet-4-6.toml +++ b/providers/requesty/models/claude-sonnet-4-6.toml @@ -9,10 +9,10 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 2.7 -output = 13.5 -cache_read = 0.27 -cache_write = 3.375 +input = 3 +output = 15 +cache_read = 0.3 +cache_write = 3.75 [limit] output = 128_000 diff --git a/providers/requesty/models/claude-sonnet-4-6@eu.toml b/providers/requesty/models/claude-sonnet-4-6@eu.toml index 94e97bb862a..fb541539029 100644 --- a/providers/requesty/models/claude-sonnet-4-6@eu.toml +++ b/providers/requesty/models/claude-sonnet-4-6@eu.toml @@ -10,7 +10,7 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 2.97 -output = 14.85 -cache_read = 0.27 -cache_write = 3.7125 +input = 3.3 +output = 16.5 +cache_read = 0.3 +cache_write = 4.125 diff --git a/providers/requesty/models/claude-sonnet-4@eu.toml b/providers/requesty/models/claude-sonnet-4@eu.toml index 082d254b653..c66eab29d92 100644 --- a/providers/requesty/models/claude-sonnet-4@eu.toml +++ b/providers/requesty/models/claude-sonnet-4@eu.toml @@ -10,17 +10,17 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 2.7 -output = 13.5 -cache_read = 0.27 -cache_write = 3.375 +input = 3 +output = 15 +cache_read = 0.3 +cache_write = 3.75 [[cost.tiers]] tier = { type = "context", size = 200_000 } -input = 5.4 -output = 20.25 -cache_read = 0.54 -cache_write = 6.75 +input = 6 +output = 22.5 +cache_read = 0.6 +cache_write = 7.5 [limit] context = 1_000_000 diff --git a/providers/requesty/models/claude-sonnet-5.toml b/providers/requesty/models/claude-sonnet-5.toml index b5edcbfe133..ef081972290 100644 --- a/providers/requesty/models/claude-sonnet-5.toml +++ b/providers/requesty/models/claude-sonnet-5.toml @@ -9,7 +9,7 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.8 -output = 9 -cache_read = 0.18 -cache_write = 2.25 +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 diff --git a/providers/requesty/models/claude-sonnet-5@eu.toml b/providers/requesty/models/claude-sonnet-5@eu.toml index e7592a83115..d4db42a626b 100644 --- a/providers/requesty/models/claude-sonnet-5@eu.toml +++ b/providers/requesty/models/claude-sonnet-5@eu.toml @@ -10,7 +10,7 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.98 -output = 9.9 -cache_read = 0.198 -cache_write = 2.475 +input = 2.2 +output = 11 +cache_read = 0.22 +cache_write = 2.75 diff --git a/providers/requesty/models/deepseek-v4-flash-0731.toml b/providers/requesty/models/deepseek-v4-flash-0731.toml index 8509a5326fd..ddf98793307 100644 --- a/providers/requesty/models/deepseek-v4-flash-0731.toml +++ b/providers/requesty/models/deepseek-v4-flash-0731.toml @@ -8,9 +8,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.126 -output = 0.252 -cache_read = 0.063 +input = 0.28 +output = 0.56 +cache_read = 0.07 [limit] context = 1_048_576 diff --git a/providers/requesty/models/deepseek-v4-flash-0731@eu.toml b/providers/requesty/models/deepseek-v4-flash-0731@eu.toml index 50bdcdee824..aa3265185b8 100644 --- a/providers/requesty/models/deepseek-v4-flash-0731@eu.toml +++ b/providers/requesty/models/deepseek-v4-flash-0731@eu.toml @@ -9,9 +9,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.126 -output = 0.252 -cache_read = 0.063 +input = 0.28 +output = 0.56 +cache_read = 0.07 [limit] context = 1_048_576 diff --git a/providers/requesty/models/deepseek-v4-flash.toml b/providers/requesty/models/deepseek-v4-flash.toml index cba6b291fb2..a0e563ee006 100644 --- a/providers/requesty/models/deepseek-v4-flash.toml +++ b/providers/requesty/models/deepseek-v4-flash.toml @@ -1,8 +1,17 @@ base_model = "deepseek/deepseek-v4-flash" -reasoning = false -structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" [cost] -input = 0.396 -output = 1.188 -cache_read = 0.0126 +input = 0.28 +output = 0.56 +cache_read = 0.07 + +[limit] +context = 1_048_576 +output = 131_072 diff --git a/providers/requesty/models/deepseek-v4-pro-0813.toml b/providers/requesty/models/deepseek-v4-pro-0813.toml index 80f2c6e61e7..117c7233a1e 100644 --- a/providers/requesty/models/deepseek-v4-pro-0813.toml +++ b/providers/requesty/models/deepseek-v4-pro-0813.toml @@ -8,9 +8,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.188 -output = 3.564 -cache_read = 0.0396 +input = 1.32 +output = 3.96 +cache_read = 0.044 [limit] output = 131_072 diff --git a/providers/requesty/models/deepseek-v4-pro-0813@eu.toml b/providers/requesty/models/deepseek-v4-pro-0813@eu.toml new file mode 100644 index 00000000000..d8e6ab21e5d --- /dev/null +++ b/providers/requesty/models/deepseek-v4-pro-0813@eu.toml @@ -0,0 +1,18 @@ +base_model = "deepseek/deepseek-v4-pro-0813" +name = "DeepSeek V4 Pro 0813 (EU)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 1.75 +output = 3.5 +cache_read = 0.44 + +[limit] +context = 1_048_576 +output = 65_536 diff --git a/providers/requesty/models/deepseek-v4-pro.toml b/providers/requesty/models/deepseek-v4-pro.toml index 82bea369ce9..3f837b71894 100644 --- a/providers/requesty/models/deepseek-v4-pro.toml +++ b/providers/requesty/models/deepseek-v4-pro.toml @@ -8,6 +8,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.188 -output = 3.564 -cache_read = 0.0396 +input = 1.32 +output = 3.96 +cache_read = 0.044 + +[limit] +output = 131_072 diff --git a/providers/requesty/models/deepseek-v4-pro@eu.toml b/providers/requesty/models/deepseek-v4-pro@eu.toml index 8d322b19c98..5ac0f1fe8f6 100644 --- a/providers/requesty/models/deepseek-v4-pro@eu.toml +++ b/providers/requesty/models/deepseek-v4-pro@eu.toml @@ -9,9 +9,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.575 -output = 3.15 -cache_read = 0.396 +input = 1.75 +output = 3.5 +cache_read = 0.44 [limit] context = 1_048_576 diff --git a/providers/requesty/models/deepseek-v4.1-flash.toml b/providers/requesty/models/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..193eb7f54cb --- /dev/null +++ b/providers/requesty/models/deepseek-v4.1-flash.toml @@ -0,0 +1,17 @@ +base_model = "deepseek/deepseek-v4.1-flash" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.5 +output = 1.5 +cache_read = 0.05 + +[limit] +context = 1_048_576 +output = 393_216 diff --git a/providers/requesty/models/deepseek-v4.1-flash@eu.toml b/providers/requesty/models/deepseek-v4.1-flash@eu.toml new file mode 100644 index 00000000000..ebcd8dc5960 --- /dev/null +++ b/providers/requesty/models/deepseek-v4.1-flash@eu.toml @@ -0,0 +1,18 @@ +base_model = "deepseek/deepseek-v4.1-flash" +name = "DeepSeek V4.1 Flash (EU)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.5 +output = 1.5 +cache_read = 0.05 + +[limit] +context = 1_048_576 +output = 393_216 diff --git a/providers/requesty/models/devstral-latest.toml b/providers/requesty/models/devstral-latest.toml index 3dd0b187efb..6b8094c8fb4 100644 --- a/providers/requesty/models/devstral-latest.toml +++ b/providers/requesty/models/devstral-latest.toml @@ -10,9 +10,9 @@ structured_output = true open_weights = false [cost] -input = 0.396 -output = 1.98 -cache_read = 0.396 +input = 0.44 +output = 2.2 +cache_read = 0.44 [limit] context = 256_000 diff --git a/providers/requesty/models/devstral-latest@eu.toml b/providers/requesty/models/devstral-latest@eu.toml index 040860df3e3..046e77deebd 100644 --- a/providers/requesty/models/devstral-latest@eu.toml +++ b/providers/requesty/models/devstral-latest@eu.toml @@ -10,9 +10,9 @@ structured_output = true open_weights = false [cost] -input = 0.396 -output = 1.98 -cache_read = 0.396 +input = 0.44 +output = 2.2 +cache_read = 0.44 [limit] context = 256_000 diff --git a/providers/requesty/models/fugu-ultra.toml b/providers/requesty/models/fugu-ultra.toml index a36b7df3b9c..f26c055ac34 100644 --- a/providers/requesty/models/fugu-ultra.toml +++ b/providers/requesty/models/fugu-ultra.toml @@ -1,17 +1,23 @@ base_model = "sakana/fugu-ultra" -reasoning = false structured_output = false +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + [cost] -input = 4.5 -output = 27 -cache_read = 0.45 +input = 5 +output = 30 +cache_read = 0.5 [[cost.tiers]] tier = { type = "context", size = 272_000 } -input = 9 -output = 40.5 -cache_read = 0.9 +input = 10 +output = 45 +cache_read = 1 [limit] context = 1_048_576 diff --git a/providers/requesty/models/gemini-2.5-flash-lite@eu.toml b/providers/requesty/models/gemini-2.5-flash-lite@eu.toml new file mode 100644 index 00000000000..08edc6123b1 --- /dev/null +++ b/providers/requesty/models/gemini-2.5-flash-lite@eu.toml @@ -0,0 +1,18 @@ +base_model = "google/gemini-2.5-flash-lite" +name = "Gemini 2.5 Flash-Lite (EU)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.1 +output = 0.4 +cache_read = 0.01 +cache_write = 0.18333 + +[limit] +output = 65_535 diff --git a/providers/requesty/models/gemini-2.5-flash@eu.toml b/providers/requesty/models/gemini-2.5-flash@eu.toml index 2416c428431..fdf5313133a 100644 --- a/providers/requesty/models/gemini-2.5-flash@eu.toml +++ b/providers/requesty/models/gemini-2.5-flash@eu.toml @@ -9,10 +9,10 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.27 -output = 2.25 -cache_read = 0.0675 -cache_write = 0.495 +input = 0.3 +output = 2.5 +cache_read = 0.075 +cache_write = 0.55 [limit] output = 65_535 diff --git a/providers/requesty/models/gemini-2.5-pro@eu.toml b/providers/requesty/models/gemini-2.5-pro@eu.toml new file mode 100644 index 00000000000..652b94e934d --- /dev/null +++ b/providers/requesty/models/gemini-2.5-pro@eu.toml @@ -0,0 +1,25 @@ +base_model = "google/gemini-2.5-pro" +name = "Gemini 2.5 Pro (EU)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 1.25 +output = 10 +cache_read = 0.31 +cache_write = 2.375 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 2.5 +output = 15 +cache_read = 0.62 +cache_write = 4.75 + +[limit] +output = 65_535 diff --git a/providers/requesty/models/gemini-3-pro-image.toml b/providers/requesty/models/gemini-3-pro-image.toml index 7adf6cd3c9d..804c54fa8e9 100644 --- a/providers/requesty/models/gemini-3-pro-image.toml +++ b/providers/requesty/models/gemini-3-pro-image.toml @@ -10,17 +10,10 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.8 -output = 10.8 -cache_read = 0.18 -cache_write = 4.05 - -[[cost.tiers]] -tier = { type = "context", size = 200_000 } -input = 3.6 -output = 16.2 -cache_read = 0.18 -cache_write = 4.05 +input = 2 +output = 12 +cache_read = 0.2 +cache_write = 4.5 [limit] context = 1_048_576 diff --git a/providers/requesty/models/gemini-3.1-flash-image.toml b/providers/requesty/models/gemini-3.1-flash-image.toml index 9d3631718de..e79038dbf6a 100644 --- a/providers/requesty/models/gemini-3.1-flash-image.toml +++ b/providers/requesty/models/gemini-3.1-flash-image.toml @@ -10,10 +10,5 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.45 -output = 1.8 - -[[cost.tiers]] -tier = { type = "context", size = 200_000 } -input = 0.45 -output = 1.8 +input = 0.5 +output = 2 diff --git a/providers/requesty/models/gemini-3.1-flash-lite.toml b/providers/requesty/models/gemini-3.1-flash-lite.toml index ffbedc9c3fc..09bc70069c5 100644 --- a/providers/requesty/models/gemini-3.1-flash-lite.toml +++ b/providers/requesty/models/gemini-3.1-flash-lite.toml @@ -8,17 +8,10 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.225 -output = 1.35 -cache_read = 0.0225 -cache_write = 0.074997 - -[[cost.tiers]] -tier = { type = "context", size = 200_000 } -input = 0.45 -output = 2.025 -cache_read = 0.0225 -cache_write = 0.074997 +input = 0.25 +output = 1.5 +cache_read = 0.025 +cache_write = 0.08333 [limit] output = 65_535 diff --git a/providers/requesty/models/gemini-3.1-flash-lite@eu.toml b/providers/requesty/models/gemini-3.1-flash-lite@eu.toml index 7e6b034a598..01e801b06ac 100644 --- a/providers/requesty/models/gemini-3.1-flash-lite@eu.toml +++ b/providers/requesty/models/gemini-3.1-flash-lite@eu.toml @@ -9,17 +9,10 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.2475 -output = 1.485 -cache_read = 0.02475 -cache_write = 0.082497 - -[[cost.tiers]] -tier = { type = "context", size = 200_000 } -input = 0.495 -output = 2.2275 -cache_read = 0.02475 -cache_write = 0.082497 +input = 0.275 +output = 1.65 +cache_read = 0.0275 +cache_write = 0.091663 [limit] output = 65_535 diff --git a/providers/requesty/models/gemini-3.1-pro-preview.toml b/providers/requesty/models/gemini-3.1-pro-preview.toml index 56dc44aa600..994be938c6c 100644 --- a/providers/requesty/models/gemini-3.1-pro-preview.toml +++ b/providers/requesty/models/gemini-3.1-pro-preview.toml @@ -8,17 +8,17 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.8 -output = 10.8 -cache_read = 0.18 -cache_write = 4.05 +input = 2 +output = 12 +cache_read = 0.2 +cache_write = 4.5 [[cost.tiers]] tier = { type = "context", size = 200_000 } -input = 3.6 -output = 16.2 -cache_read = 0.18 -cache_write = 4.05 +input = 4 +output = 18 +cache_read = 0.4 +cache_write = 9 [limit] output = 65_535 diff --git a/providers/requesty/models/gemini-3.5-flash-lite.toml b/providers/requesty/models/gemini-3.5-flash-lite.toml index c6aada13d23..3373ffd068d 100644 --- a/providers/requesty/models/gemini-3.5-flash-lite.toml +++ b/providers/requesty/models/gemini-3.5-flash-lite.toml @@ -8,9 +8,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.27 -output = 2.25 -cache_read = 0.027 +input = 0.3 +output = 2.5 +cache_read = 0.03 [limit] output = 65_535 diff --git a/providers/requesty/models/gemini-3.5-flash-lite@eu.toml b/providers/requesty/models/gemini-3.5-flash-lite@eu.toml index 41fcc13f5ce..e8db9e82467 100644 --- a/providers/requesty/models/gemini-3.5-flash-lite@eu.toml +++ b/providers/requesty/models/gemini-3.5-flash-lite@eu.toml @@ -9,9 +9,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.297 -output = 2.475 -cache_read = 0.0297 +input = 0.33 +output = 2.75 +cache_read = 0.033 [limit] output = 65_535 diff --git a/providers/requesty/models/gemini-3.5-flash.toml b/providers/requesty/models/gemini-3.5-flash.toml index 2ecd9693695..905b0d8f732 100644 --- a/providers/requesty/models/gemini-3.5-flash.toml +++ b/providers/requesty/models/gemini-3.5-flash.toml @@ -8,10 +8,10 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.35 -output = 8.1 -cache_read = 0.135 -cache_write = 1.4247 +input = 1.5 +output = 9 +cache_read = 0.15 +cache_write = 1.583 [limit] output = 65_535 diff --git a/providers/requesty/models/gemini-3.5-flash@eu.toml b/providers/requesty/models/gemini-3.5-flash@eu.toml index 28011a05ce6..60cb1f7244a 100644 --- a/providers/requesty/models/gemini-3.5-flash@eu.toml +++ b/providers/requesty/models/gemini-3.5-flash@eu.toml @@ -9,10 +9,10 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.485 -output = 8.91 -cache_read = 0.1485 -cache_write = 1.56717 +input = 1.65 +output = 9.9 +cache_read = 0.165 +cache_write = 1.7413 [limit] output = 65_535 diff --git a/providers/requesty/models/gemini-3.6-flash.toml b/providers/requesty/models/gemini-3.6-flash.toml index 656f28894a4..7d7082c4824 100644 --- a/providers/requesty/models/gemini-3.6-flash.toml +++ b/providers/requesty/models/gemini-3.6-flash.toml @@ -8,9 +8,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.35 -output = 6.3 -cache_read = 0.135 +input = 1.5 +output = 7 +cache_read = 0.15 [limit] output = 65_535 diff --git a/providers/requesty/models/gemini-3.7-flash.toml b/providers/requesty/models/gemini-3.7-flash.toml index 2f1ca9bfdf1..7a3857db113 100644 --- a/providers/requesty/models/gemini-3.7-flash.toml +++ b/providers/requesty/models/gemini-3.7-flash.toml @@ -8,9 +8,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.6 -output = 3 -cache_read = 0.06 +input = 0.75 +output = 3.75 +cache_read = 0.075 [limit] output = 65_535 diff --git a/providers/requesty/models/gemini-3.7-flash@eu.toml b/providers/requesty/models/gemini-3.7-flash@eu.toml index 097d1384ab0..c7f3a15dbf3 100644 --- a/providers/requesty/models/gemini-3.7-flash@eu.toml +++ b/providers/requesty/models/gemini-3.7-flash@eu.toml @@ -9,9 +9,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.66 -output = 3.3 -cache_read = 0.066 +input = 0.825 +output = 4.125 +cache_read = 0.0825 [limit] output = 65_535 diff --git a/providers/requesty/models/gemini-3.8-flash.toml b/providers/requesty/models/gemini-3.8-flash.toml new file mode 100644 index 00000000000..05011d631a8 --- /dev/null +++ b/providers/requesty/models/gemini-3.8-flash.toml @@ -0,0 +1,16 @@ +base_model = "google/gemini-3.8-flash" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.75 +output = 3.75 +cache_read = 0.075 + +[limit] +output = 65_535 diff --git a/providers/requesty/models/gemini-3.8-flash@eu.toml b/providers/requesty/models/gemini-3.8-flash@eu.toml new file mode 100644 index 00000000000..09f662715c8 --- /dev/null +++ b/providers/requesty/models/gemini-3.8-flash@eu.toml @@ -0,0 +1,17 @@ +base_model = "google/gemini-3.8-flash" +name = "Gemini 3.8 Flash (EU)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.825 +output = 4.125 +cache_read = 0.0825 + +[limit] +output = 65_535 diff --git a/providers/requesty/models/gemma-4-26b-a4b-it.toml b/providers/requesty/models/gemma-4-26b-a4b-it.toml index 6c8e260546d..923ea60bfd8 100644 --- a/providers/requesty/models/gemma-4-26b-a4b-it.toml +++ b/providers/requesty/models/gemma-4-26b-a4b-it.toml @@ -8,9 +8,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.063 -output = 0.306 -cache_read = 0.063 +input = 0.07 +output = 0.34 +cache_read = 0.07 [limit] output = 262_144 diff --git a/providers/requesty/models/glm-5.1.toml b/providers/requesty/models/glm-5.1.toml index 76d3d1d3014..1dd7588e579 100644 --- a/providers/requesty/models/glm-5.1.toml +++ b/providers/requesty/models/glm-5.1.toml @@ -9,9 +9,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.26 -output = 3.96 -cache_read = 0.234 +input = 1.4 +output = 4.4 +cache_read = 0.26 [limit] output = 128_000 diff --git a/providers/requesty/models/glm-5.1@eu.toml b/providers/requesty/models/glm-5.1@eu.toml index 9e261e54bc5..d4fb0081f69 100644 --- a/providers/requesty/models/glm-5.1@eu.toml +++ b/providers/requesty/models/glm-5.1@eu.toml @@ -9,9 +9,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.26 -output = 3.96 -cache_read = 1.26 +input = 1.4 +output = 4.4 +cache_read = 1.4 [limit] output = 200_000 diff --git a/providers/requesty/models/glm-5.2-fast.toml b/providers/requesty/models/glm-5.2-fast.toml index 85fd830a947..48637ee68dd 100644 --- a/providers/requesty/models/glm-5.2-fast.toml +++ b/providers/requesty/models/glm-5.2-fast.toml @@ -17,9 +17,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.89 -output = 5.94 -cache_read = 0.189 +input = 2.1 +output = 6.6 +cache_read = 0.21 [limit] context = 1_000_000 diff --git a/providers/requesty/models/glm-5.2.toml b/providers/requesty/models/glm-5.2.toml index fa677c6eb8b..b2d4e10b216 100644 --- a/providers/requesty/models/glm-5.2.toml +++ b/providers/requesty/models/glm-5.2.toml @@ -8,9 +8,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.08 -output = 3.78 -cache_read = 0.234 +input = 0.8 +output = 2.55 +cache_read = 0.16 [limit] context = 1_048_576 diff --git a/providers/requesty/models/glm-5.2@eu.toml b/providers/requesty/models/glm-5.2@eu.toml index fe9f804d8bf..7d648ff7b6c 100644 --- a/providers/requesty/models/glm-5.2@eu.toml +++ b/providers/requesty/models/glm-5.2@eu.toml @@ -9,9 +9,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.08 -output = 3.78 -cache_read = 0.234 +input = 1.2 +output = 4.2 +cache_read = 0.26 [limit] context = 1_048_576 diff --git a/providers/requesty/models/glm-5.3-flash.toml b/providers/requesty/models/glm-5.3-flash.toml new file mode 100644 index 00000000000..de8892ee202 --- /dev/null +++ b/providers/requesty/models/glm-5.3-flash.toml @@ -0,0 +1,16 @@ +base_model = "zhipuai/glm-5.3-flash" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.2 +output = 0.6 +cache_read = 0.07 + +[limit] +output = 262_144 diff --git a/providers/requesty/models/glm-5.3-flash@eu.toml b/providers/requesty/models/glm-5.3-flash@eu.toml new file mode 100644 index 00000000000..e31d9a04405 --- /dev/null +++ b/providers/requesty/models/glm-5.3-flash@eu.toml @@ -0,0 +1,17 @@ +base_model = "zhipuai/glm-5.3-flash" +name = "GLM-5.3-Flash (EU)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.2 +output = 0.6 +cache_read = 0.07 + +[limit] +output = 262_144 diff --git a/providers/requesty/models/glm-5.3.toml b/providers/requesty/models/glm-5.3.toml index e6d529fafbd..57ec57604a4 100644 --- a/providers/requesty/models/glm-5.3.toml +++ b/providers/requesty/models/glm-5.3.toml @@ -1,4 +1,5 @@ base_model = "zhipuai/glm-5.3" +structured_output = false [[reasoning_options]] type = "effort" @@ -8,9 +9,10 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.26 -output = 3.96 -cache_read = 0.234 +input = 1.2 +output = 4.2 +cache_read = 0.26 [limit] -output = 128_000 +context = 1_048_576 +output = 1_048_576 diff --git a/providers/requesty/models/glm-5.3@eu.toml b/providers/requesty/models/glm-5.3@eu.toml new file mode 100644 index 00000000000..7e0a95b8ea3 --- /dev/null +++ b/providers/requesty/models/glm-5.3@eu.toml @@ -0,0 +1,24 @@ +# Effort: reasoning_effort = low|high|max, matching GLM-5.3's native controls. +# Thinking is always enabled. Requesty's generic budget conversions document +# other model families, not a GLM-5.3 reasoning-token budget. +# https://docs.z.ai/guides/llm/glm-5.3 +# https://docs.requesty.ai/features/reasoning +base_model = "zhipuai/glm-5.3" +name = "GLM-5.3 (EU)" +structured_output = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 1.2 +output = 4.2 +cache_read = 0.26 + +[limit] +context = 1_048_576 +output = 1_048_576 diff --git a/providers/requesty/models/gpt-4.1-mini@eu.toml b/providers/requesty/models/gpt-4.1-mini@eu.toml index f0cc4b9b339..8f8e3096b5d 100644 --- a/providers/requesty/models/gpt-4.1-mini@eu.toml +++ b/providers/requesty/models/gpt-4.1-mini@eu.toml @@ -2,6 +2,6 @@ base_model = "openai/gpt-4.1-mini" name = "GPT-4.1 mini (EU)" [cost] -input = 0.396 -output = 1.584 -cache_read = 0.099 +input = 0.44 +output = 1.76 +cache_read = 0.11 diff --git a/providers/requesty/models/gpt-4.1-nano@eu.toml b/providers/requesty/models/gpt-4.1-nano@eu.toml index 26ab9bbe24e..69357d3eb93 100644 --- a/providers/requesty/models/gpt-4.1-nano@eu.toml +++ b/providers/requesty/models/gpt-4.1-nano@eu.toml @@ -2,6 +2,6 @@ base_model = "openai/gpt-4.1-nano" name = "GPT-4.1 nano (EU)" [cost] -input = 0.099 -output = 0.396 -cache_read = 0.02475 +input = 0.11 +output = 0.44 +cache_read = 0.0275 diff --git a/providers/requesty/models/gpt-4.1@eu.toml b/providers/requesty/models/gpt-4.1@eu.toml index 7929c847fcf..2bff8e5fc5d 100644 --- a/providers/requesty/models/gpt-4.1@eu.toml +++ b/providers/requesty/models/gpt-4.1@eu.toml @@ -2,6 +2,6 @@ base_model = "openai/gpt-4.1" name = "GPT-4.1 (EU)" [cost] -input = 1.98 -output = 7.92 -cache_read = 0.495 +input = 2.2 +output = 8.8 +cache_read = 0.55 diff --git a/providers/requesty/models/gpt-4o-mini@eu.toml b/providers/requesty/models/gpt-4o-mini@eu.toml index c20471482eb..9af1072d8b5 100644 --- a/providers/requesty/models/gpt-4o-mini@eu.toml +++ b/providers/requesty/models/gpt-4o-mini@eu.toml @@ -2,9 +2,9 @@ base_model = "openai/gpt-4o-mini" name = "GPT-4o mini (EU)" [cost] -input = 0.1485 -output = 0.594 -cache_read = 0.07425 +input = 0.165 +output = 0.66 +cache_read = 0.0825 [limit] output = 16_000 diff --git a/providers/requesty/models/gpt-5-mini@eu.toml b/providers/requesty/models/gpt-5-mini@eu.toml index 949de050d68..5ebb06e4d3b 100644 --- a/providers/requesty/models/gpt-5-mini@eu.toml +++ b/providers/requesty/models/gpt-5-mini@eu.toml @@ -10,9 +10,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.2475 -output = 1.98 -cache_read = 0.02475 +input = 0.275 +output = 2.2 +cache_read = 0.0275 [limit] context = 200_000 diff --git a/providers/requesty/models/gpt-5-nano@eu.toml b/providers/requesty/models/gpt-5-nano@eu.toml index 6af0f44d3bd..15ad36d1521 100644 --- a/providers/requesty/models/gpt-5-nano@eu.toml +++ b/providers/requesty/models/gpt-5-nano@eu.toml @@ -10,9 +10,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.0495 -output = 0.396 -cache_read = 0.00495 +input = 0.055 +output = 0.44 +cache_read = 0.0055 [limit] context = 200_000 diff --git a/providers/requesty/models/gpt-5.1@eu.toml b/providers/requesty/models/gpt-5.1@eu.toml index 7cd1ddb2422..e190b9c134e 100644 --- a/providers/requesty/models/gpt-5.1@eu.toml +++ b/providers/requesty/models/gpt-5.1@eu.toml @@ -9,6 +9,6 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.2375 -output = 9.9 -cache_read = 0.12375 +input = 1.375 +output = 11 +cache_read = 0.1375 diff --git a/providers/requesty/models/gpt-5.3-chat.toml b/providers/requesty/models/gpt-5.3-chat.toml deleted file mode 100644 index c045c9e2f0f..00000000000 --- a/providers/requesty/models/gpt-5.3-chat.toml +++ /dev/null @@ -1,30 +0,0 @@ -name = "gpt-5.3-chat" -description = "GPT-5.3 Chat is an update to ChatGPT's most-used model that makes everyday conversations smoother, more useful, and more directly helpful. It delivers more accurate answers with better contextualization and significantly reduces unnecessary refusals, caveats, and overly cautious phrasing that can interrupt conversational flow." -family = "gpt" -release_date = "2026-03-18" -last_updated = "2026-03-18" -attachment = true -reasoning = true -tool_call = true -structured_output = true -open_weights = false - -[[reasoning_options]] -type = "effort" -values = ["none", "low", "medium", "high", "max"] - -[[reasoning_options]] -type = "budget_tokens" - -[cost] -input = 1.575 -output = 12.6 -cache_read = 0.1575 - -[limit] -context = 128_000 -output = 16_384 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/requesty/models/gpt-5.3-codex.toml b/providers/requesty/models/gpt-5.3-codex.toml index 69bbfb229f8..af89482abab 100644 --- a/providers/requesty/models/gpt-5.3-codex.toml +++ b/providers/requesty/models/gpt-5.3-codex.toml @@ -8,6 +8,6 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.575 -output = 12.6 -cache_read = 0.1575 +input = 1.75 +output = 14 +cache_read = 0.175 diff --git a/providers/requesty/models/gpt-5.4-mini.toml b/providers/requesty/models/gpt-5.4-mini.toml index 47ba8aceac2..44fdb6905d9 100644 --- a/providers/requesty/models/gpt-5.4-mini.toml +++ b/providers/requesty/models/gpt-5.4-mini.toml @@ -8,6 +8,6 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.675 -output = 4.05 -cache_read = 0.0675 +input = 0.75 +output = 4.5 +cache_read = 0.075 diff --git a/providers/requesty/models/gpt-5.4-nano.toml b/providers/requesty/models/gpt-5.4-nano.toml index de9f1e15ca4..3f0bd3d107a 100644 --- a/providers/requesty/models/gpt-5.4-nano.toml +++ b/providers/requesty/models/gpt-5.4-nano.toml @@ -8,6 +8,6 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.18 -output = 1.125 -cache_read = 0.018 +input = 0.2 +output = 1.25 +cache_read = 0.02 diff --git a/providers/requesty/models/gpt-5.4-pro.toml b/providers/requesty/models/gpt-5.4-pro.toml index a0772bd26be..9e8c264fe8a 100644 --- a/providers/requesty/models/gpt-5.4-pro.toml +++ b/providers/requesty/models/gpt-5.4-pro.toml @@ -9,6 +9,6 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 27 -output = 162 -cache_read = 27 +input = 30 +output = 180 +cache_read = 30 diff --git a/providers/requesty/models/gpt-5.4.toml b/providers/requesty/models/gpt-5.4.toml index acf18e0aee5..f11cbe1c51e 100644 --- a/providers/requesty/models/gpt-5.4.toml +++ b/providers/requesty/models/gpt-5.4.toml @@ -8,6 +8,6 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 2.475 -output = 14.85 -cache_read = 0.2475 +input = 2.75 +output = 16.5 +cache_read = 0.275 diff --git a/providers/requesty/models/gpt-5.4@eu.toml b/providers/requesty/models/gpt-5.4@eu.toml index 086b0c91c3a..60c008d3a16 100644 --- a/providers/requesty/models/gpt-5.4@eu.toml +++ b/providers/requesty/models/gpt-5.4@eu.toml @@ -9,12 +9,12 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 2.25 -output = 13.5 -cache_read = 0.225 +input = 2.5 +output = 15 +cache_read = 0.25 [[cost.tiers]] tier = { type = "context", size = 272_000 } -input = 4.5 -output = 20.25 -cache_read = 0.45 +input = 5 +output = 22.5 +cache_read = 0.5 diff --git a/providers/requesty/models/gpt-5.5-pro.toml b/providers/requesty/models/gpt-5.5-pro.toml index 0e803920cb9..b1e1efca4e5 100644 --- a/providers/requesty/models/gpt-5.5-pro.toml +++ b/providers/requesty/models/gpt-5.5-pro.toml @@ -8,5 +8,5 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 27 -output = 162 +input = 30 +output = 180 diff --git a/providers/requesty/models/gpt-5.5.toml b/providers/requesty/models/gpt-5.5.toml index 256baf26db9..28f1a5586f2 100644 --- a/providers/requesty/models/gpt-5.5.toml +++ b/providers/requesty/models/gpt-5.5.toml @@ -8,6 +8,6 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 4.95 -output = 29.7 -cache_read = 0.495 +input = 5.5 +output = 33 +cache_read = 0.55 diff --git a/providers/requesty/models/gpt-5.5@eu.toml b/providers/requesty/models/gpt-5.5@eu.toml index 2f37849b152..b0a78ccfad5 100644 --- a/providers/requesty/models/gpt-5.5@eu.toml +++ b/providers/requesty/models/gpt-5.5@eu.toml @@ -9,12 +9,12 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 4.5 -output = 27 -cache_read = 0.45 +input = 5 +output = 30 +cache_read = 0.5 [[cost.tiers]] tier = { type = "context", size = 272_000 } -input = 9 -output = 40.5 -cache_read = 0.9 +input = 10 +output = 45 +cache_read = 1 diff --git a/providers/requesty/models/gpt-5.6-luna.toml b/providers/requesty/models/gpt-5.6-luna.toml index 9623d14e700..1d24843159f 100644 --- a/providers/requesty/models/gpt-5.6-luna.toml +++ b/providers/requesty/models/gpt-5.6-luna.toml @@ -8,12 +8,12 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.18 -output = 1.08 -cache_read = 0.018 +input = 0.2 +output = 1.2 +cache_read = 0.02 [[cost.tiers]] tier = { type = "context", size = 272_000 } -input = 0.36 -output = 1.62 -cache_read = 0.036 +input = 0.4 +output = 1.8 +cache_read = 0.04 diff --git a/providers/requesty/models/gpt-5.6-luna@eu.toml b/providers/requesty/models/gpt-5.6-luna@eu.toml index 165b2e273d1..9bf48d8107d 100644 --- a/providers/requesty/models/gpt-5.6-luna@eu.toml +++ b/providers/requesty/models/gpt-5.6-luna@eu.toml @@ -9,6 +9,6 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.198 -output = 1.188 -cache_read = 0.0198 +input = 0.22 +output = 1.32 +cache_read = 0.022 diff --git a/providers/requesty/models/gpt-5.6-sol.toml b/providers/requesty/models/gpt-5.6-sol.toml index 42276e2c175..47018de319c 100644 --- a/providers/requesty/models/gpt-5.6-sol.toml +++ b/providers/requesty/models/gpt-5.6-sol.toml @@ -8,14 +8,14 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 3.6 -output = 18 -cache_read = 0.36 -cache_write = 4.5 +input = 4 +output = 20 +cache_read = 0.4 +cache_write = 5 [[cost.tiers]] tier = { type = "context", size = 272_000 } -input = 7.2 -output = 27 -cache_read = 0.72 -cache_write = 9 +input = 8 +output = 30 +cache_read = 0.8 +cache_write = 10 diff --git a/providers/requesty/models/gpt-5.6-sol@eu.toml b/providers/requesty/models/gpt-5.6-sol@eu.toml index 5a42d72505e..ba13b9db3e1 100644 --- a/providers/requesty/models/gpt-5.6-sol@eu.toml +++ b/providers/requesty/models/gpt-5.6-sol@eu.toml @@ -9,6 +9,6 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 4.95 -output = 29.7 -cache_read = 0.495 +input = 4.4 +output = 22 +cache_read = 0.44 diff --git a/providers/requesty/models/gpt-5.6-terra.toml b/providers/requesty/models/gpt-5.6-terra.toml index c58e6be96d6..72544acd7e7 100644 --- a/providers/requesty/models/gpt-5.6-terra.toml +++ b/providers/requesty/models/gpt-5.6-terra.toml @@ -8,12 +8,12 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.8 -output = 10.8 -cache_read = 0.18 +input = 2 +output = 12 +cache_read = 0.2 [[cost.tiers]] tier = { type = "context", size = 272_000 } -input = 3.6 -output = 16.2 -cache_read = 0.36 +input = 4 +output = 18 +cache_read = 0.4 diff --git a/providers/requesty/models/gpt-5.6-terra@eu.toml b/providers/requesty/models/gpt-5.6-terra@eu.toml index 88b926e3c21..d75520d2460 100644 --- a/providers/requesty/models/gpt-5.6-terra@eu.toml +++ b/providers/requesty/models/gpt-5.6-terra@eu.toml @@ -9,6 +9,6 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.98 -output = 11.88 -cache_read = 0.198 +input = 2.2 +output = 13.2 +cache_read = 0.22 diff --git a/providers/requesty/models/gpt-5@eu.toml b/providers/requesty/models/gpt-5@eu.toml index e694ec44140..c03d73bc598 100644 --- a/providers/requesty/models/gpt-5@eu.toml +++ b/providers/requesty/models/gpt-5@eu.toml @@ -9,6 +9,6 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.2375 -output = 9.9 -cache_read = 0.12375 +input = 1.375 +output = 11 +cache_read = 0.1375 diff --git a/providers/requesty/models/gpt-6-astra.toml b/providers/requesty/models/gpt-6-astra.toml new file mode 100644 index 00000000000..ebb2823694f --- /dev/null +++ b/providers/requesty/models/gpt-6-astra.toml @@ -0,0 +1,19 @@ +base_model = "openai/gpt-6-astra" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 10 +output = 50 +cache_read = 1 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 20 +output = 75 +cache_read = 2 diff --git a/providers/requesty/models/gpt-6-luna.toml b/providers/requesty/models/gpt-6-luna.toml new file mode 100644 index 00000000000..a11e192297d --- /dev/null +++ b/providers/requesty/models/gpt-6-luna.toml @@ -0,0 +1,19 @@ +base_model = "openai/gpt-6-luna" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.1 +output = 0.5 +cache_read = 0.01 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 0.2 +output = 0.75 +cache_read = 0.02 diff --git a/providers/requesty/models/gpt-6-luna@eu.toml b/providers/requesty/models/gpt-6-luna@eu.toml new file mode 100644 index 00000000000..b0d9e112fcc --- /dev/null +++ b/providers/requesty/models/gpt-6-luna@eu.toml @@ -0,0 +1,20 @@ +base_model = "openai/gpt-6-luna" +name = "GPT-6 Luna (EU)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.12 +output = 0.6 +cache_read = 0.012 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 0.24 +output = 0.9 +cache_read = 0.024 diff --git a/providers/requesty/models/gpt-6-sol.toml b/providers/requesty/models/gpt-6-sol.toml new file mode 100644 index 00000000000..fccceb9056e --- /dev/null +++ b/providers/requesty/models/gpt-6-sol.toml @@ -0,0 +1,19 @@ +base_model = "openai/gpt-6-sol" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 2 +output = 10 +cache_read = 0.2 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 4 +output = 15 +cache_read = 0.4 diff --git a/providers/requesty/models/gpt-6-sol@eu.toml b/providers/requesty/models/gpt-6-sol@eu.toml new file mode 100644 index 00000000000..357ef21ce6c --- /dev/null +++ b/providers/requesty/models/gpt-6-sol@eu.toml @@ -0,0 +1,20 @@ +base_model = "openai/gpt-6-sol" +name = "GPT-6 Sol (EU)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 2.4 +output = 12 +cache_read = 0.24 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 4.8 +output = 18 +cache_read = 0.48 diff --git a/providers/requesty/models/grok-4.2-beta.toml b/providers/requesty/models/grok-4.2-beta.toml index bd3edb62044..6577aa20daa 100644 --- a/providers/requesty/models/grok-4.2-beta.toml +++ b/providers/requesty/models/grok-4.2-beta.toml @@ -17,17 +17,17 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.8 -output = 5.4 -cache_read = 0.18 -cache_write = 1.8 +input = 2 +output = 6 +cache_read = 0.2 +cache_write = 2 [[cost.tiers]] tier = { type = "context", size = 200_000 } -input = 3.6 -output = 10.8 -cache_read = 0.36 -cache_write = 3.6 +input = 4 +output = 12 +cache_read = 0.4 +cache_write = 4 [limit] context = 2_000_000 diff --git a/providers/requesty/models/grok-4.3.toml b/providers/requesty/models/grok-4.3.toml index 19ecb03eaa7..c9f02e4eef9 100644 --- a/providers/requesty/models/grok-4.3.toml +++ b/providers/requesty/models/grok-4.3.toml @@ -8,17 +8,17 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.125 -output = 2.25 -cache_read = 0.18 -cache_write = 1.125 +input = 1.25 +output = 2.5 +cache_read = 0.2 +cache_write = 1.25 [[cost.tiers]] tier = { type = "context", size = 200_000 } -input = 2.25 -output = 4.5 -cache_read = 0.36 -cache_write = 2.25 +input = 2.5 +output = 5 +cache_read = 0.4 +cache_write = 2.5 [limit] output = 1_000_000 diff --git a/providers/requesty/models/grok-4.5.toml b/providers/requesty/models/grok-4.5.toml index 4e20a50c6a5..3d6bd0b85da 100644 --- a/providers/requesty/models/grok-4.5.toml +++ b/providers/requesty/models/grok-4.5.toml @@ -8,14 +8,14 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.8 -output = 5.4 -cache_read = 0.45 -cache_write = 1.8 +input = 2 +output = 6 +cache_read = 0.5 +cache_write = 2 [[cost.tiers]] tier = { type = "context", size = 200_000 } -input = 3.6 -output = 10.8 -cache_read = 0.9 -cache_write = 3.6 +input = 4 +output = 12 +cache_read = 1 +cache_write = 4 diff --git a/providers/requesty/models/grok-4.6.toml b/providers/requesty/models/grok-4.6.toml index 3d9a628cded..9f48a48a76d 100644 --- a/providers/requesty/models/grok-4.6.toml +++ b/providers/requesty/models/grok-4.6.toml @@ -8,14 +8,14 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.8 -output = 5.4 -cache_read = 0.45 -cache_write = 1.8 +input = 2 +output = 6 +cache_read = 0.5 +cache_write = 2 [[cost.tiers]] tier = { type = "context", size = 200_000 } -input = 3.6 -output = 10.8 -cache_read = 0.9 -cache_write = 3.6 +input = 4 +output = 12 +cache_read = 1 +cache_write = 4 diff --git a/providers/requesty/models/grok-build-0.1.toml b/providers/requesty/models/grok-build-0.1.toml index 580edcd07f4..1fbae26140f 100644 --- a/providers/requesty/models/grok-build-0.1.toml +++ b/providers/requesty/models/grok-build-0.1.toml @@ -2,6 +2,6 @@ base_model = "xai/grok-build-0.1" reasoning = false [cost] -input = 0.9 -output = 1.8 -cache_read = 0.09 +input = 1 +output = 2 +cache_read = 0.1 diff --git a/providers/requesty/models/hy3.toml b/providers/requesty/models/hy3.toml index d8e372d57f5..e5668d835a2 100644 --- a/providers/requesty/models/hy3.toml +++ b/providers/requesty/models/hy3.toml @@ -1,4 +1,5 @@ base_model = "tencent/hy3" +base_model_omit = ["limit.input"] structured_output = true [[reasoning_options]] @@ -9,9 +10,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.126 -output = 0.522 -cache_read = 0.0315 +input = 0.14 +output = 0.58 +cache_read = 0.035 [limit] context = 262_144 diff --git a/providers/requesty/models/inkling-256k.toml b/providers/requesty/models/inkling-256k.toml index fd1df26c03e..45e77a32fba 100644 --- a/providers/requesty/models/inkling-256k.toml +++ b/providers/requesty/models/inkling-256k.toml @@ -16,9 +16,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.496 -output = 3.744 -cache_read = 0.2992 +input = 1.87 +output = 4.68 +cache_read = 0.374 [limit] context = 262_144 diff --git a/providers/requesty/models/inkling.toml b/providers/requesty/models/inkling.toml index 428a090baf4..65b2371a24f 100644 --- a/providers/requesty/models/inkling.toml +++ b/providers/requesty/models/inkling.toml @@ -9,9 +9,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.683 -output = 4.212 -cache_read = 0.3366 +input = 1.87 +output = 4.68 +cache_read = 0.374 [limit] context = 65_536 diff --git a/providers/requesty/models/kat-coder-pro.toml b/providers/requesty/models/kat-coder-pro.toml index c390576ce4f..3ec47a7db38 100644 --- a/providers/requesty/models/kat-coder-pro.toml +++ b/providers/requesty/models/kat-coder-pro.toml @@ -10,8 +10,8 @@ structured_output = false open_weights = false [cost] -input = 0.27 -output = 1.08 +input = 0.3 +output = 1.2 [limit] context = 256_000 diff --git a/providers/requesty/models/kimi-k2.6.toml b/providers/requesty/models/kimi-k2.6.toml index 279bf6221bb..e29bfdedc0c 100644 --- a/providers/requesty/models/kimi-k2.6.toml +++ b/providers/requesty/models/kimi-k2.6.toml @@ -8,6 +8,6 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.855 -output = 3.6 -cache_read = 0.144 +input = 0.95 +output = 4 +cache_read = 0.16 diff --git a/providers/requesty/models/kimi-k2.6@eu.toml b/providers/requesty/models/kimi-k2.6@eu.toml index 9ce827e892c..9770226aa2b 100644 --- a/providers/requesty/models/kimi-k2.6@eu.toml +++ b/providers/requesty/models/kimi-k2.6@eu.toml @@ -9,9 +9,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.855 -output = 3.6 -cache_read = 0.855 +input = 0.95 +output = 4 +cache_read = 0.95 [limit] context = 256_000 diff --git a/providers/requesty/models/kimi-k2.7-code.toml b/providers/requesty/models/kimi-k2.7-code.toml index cd6be544d01..22d04d34e8a 100644 --- a/providers/requesty/models/kimi-k2.7-code.toml +++ b/providers/requesty/models/kimi-k2.7-code.toml @@ -1,4 +1,5 @@ base_model = "moonshotai/kimi-k2.7-code" +structured_output = false [[reasoning_options]] type = "effort" @@ -8,6 +9,6 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.855 -output = 3.6 -cache_read = 0.171 +input = 0.95 +output = 4 +cache_read = 0.19 diff --git a/providers/requesty/models/kimi-k2.7-code@eu.toml b/providers/requesty/models/kimi-k2.7-code@eu.toml index 9037afe922f..411c0773552 100644 --- a/providers/requesty/models/kimi-k2.7-code@eu.toml +++ b/providers/requesty/models/kimi-k2.7-code@eu.toml @@ -9,6 +9,6 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.125 -output = 4.05 -cache_read = 0.279 +input = 1.25 +output = 4.5 +cache_read = 0.31 diff --git a/providers/requesty/models/kimi-k3.toml b/providers/requesty/models/kimi-k3.toml index 3bb366be140..c2452effd5c 100644 --- a/providers/requesty/models/kimi-k3.toml +++ b/providers/requesty/models/kimi-k3.toml @@ -8,9 +8,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 2.025 -output = 10.125 -cache_read = 0.2025 +input = 3 +output = 15 +cache_read = 0.45 [limit] output = 262_144 diff --git a/providers/requesty/models/kimi-k3@eu.toml b/providers/requesty/models/kimi-k3@eu.toml index 92428865b62..021b0f05373 100644 --- a/providers/requesty/models/kimi-k3@eu.toml +++ b/providers/requesty/models/kimi-k3@eu.toml @@ -9,9 +9,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 2.025 -output = 10.125 -cache_read = 0.2025 +input = 3 +output = 15 +cache_read = 0.45 [limit] output = 262_144 diff --git a/providers/requesty/models/ling-2.6-1t.toml b/providers/requesty/models/ling-2.6-1t.toml index 6d03156b1dd..c85bef2c3f2 100644 --- a/providers/requesty/models/ling-2.6-1t.toml +++ b/providers/requesty/models/ling-2.6-1t.toml @@ -10,8 +10,8 @@ structured_output = false open_weights = false [cost] -input = 0.27 -output = 2.25 +input = 0.3 +output = 2.5 [limit] context = 262_144 diff --git a/providers/requesty/models/ling-2.6-flash.toml b/providers/requesty/models/ling-2.6-flash.toml index fbcfbe27c1b..87bbeddcbf2 100644 --- a/providers/requesty/models/ling-2.6-flash.toml +++ b/providers/requesty/models/ling-2.6-flash.toml @@ -10,8 +10,8 @@ structured_output = false open_weights = false [cost] -input = 0.09 -output = 0.27 +input = 0.1 +output = 0.3 [limit] context = 262_144 diff --git a/providers/requesty/models/mimo-v2.5-pro.toml b/providers/requesty/models/mimo-v2.5-pro.toml index 80847758912..7f3a4a10bb6 100644 --- a/providers/requesty/models/mimo-v2.5-pro.toml +++ b/providers/requesty/models/mimo-v2.5-pro.toml @@ -1,8 +1,14 @@ base_model = "xiaomi/mimo-v2.5-pro" -reasoning = false structured_output = false +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + [cost] -input = 0.3915 -output = 0.783 -cache_read = 0.00324 +input = 0.435 +output = 0.87 +cache_read = 0.0036 diff --git a/providers/requesty/models/mimo-v2.5.toml b/providers/requesty/models/mimo-v2.5.toml index 7c4ac60eabf..962066d1fc5 100644 --- a/providers/requesty/models/mimo-v2.5.toml +++ b/providers/requesty/models/mimo-v2.5.toml @@ -1,8 +1,14 @@ base_model = "xiaomi/mimo-v2.5" -reasoning = false structured_output = false +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + [cost] -input = 0.126 -output = 0.252 -cache_read = 0.00252 +input = 0.14 +output = 0.28 +cache_read = 0.0028 diff --git a/providers/requesty/models/minimax-m2.7-highspeed.toml b/providers/requesty/models/minimax-m2.7-highspeed.toml index 505b7a466e9..d13335dcdc7 100644 --- a/providers/requesty/models/minimax-m2.7-highspeed.toml +++ b/providers/requesty/models/minimax-m2.7-highspeed.toml @@ -9,10 +9,10 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.54 -output = 2.16 -cache_read = 0.054 -cache_write = 1.08 +input = 0.6 +output = 2.4 +cache_read = 0.06 +cache_write = 1.2 [limit] context = 200_000 diff --git a/providers/requesty/models/minimax-m2.7.toml b/providers/requesty/models/minimax-m2.7.toml index b650b63f65a..2245aa8535d 100644 --- a/providers/requesty/models/minimax-m2.7.toml +++ b/providers/requesty/models/minimax-m2.7.toml @@ -9,10 +9,10 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.27 -output = 1.08 -cache_read = 0.054 -cache_write = 1.08 +input = 0.3 +output = 1.2 +cache_read = 0.06 +cache_write = 1.2 [limit] context = 200_000 diff --git a/providers/requesty/models/minimax-m3.toml b/providers/requesty/models/minimax-m3.toml index d726705568a..370ba1ce3df 100644 --- a/providers/requesty/models/minimax-m3.toml +++ b/providers/requesty/models/minimax-m3.toml @@ -9,9 +9,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.24 -output = 0.96 -cache_read = 0.048 +input = 0.3 +output = 1.2 +cache_read = 0.06 [limit] context = 1_000_000 diff --git a/providers/requesty/models/minimax-m3@eu.toml b/providers/requesty/models/minimax-m3@eu.toml index 2b240e1d13b..404aceb28f1 100644 --- a/providers/requesty/models/minimax-m3@eu.toml +++ b/providers/requesty/models/minimax-m3@eu.toml @@ -10,9 +10,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.36 -output = 1.8 -cache_read = 0.09 +input = 0.4 +output = 2 +cache_read = 0.1 [limit] output = 1_048_576 diff --git a/providers/requesty/models/mistral-medium-3-5.toml b/providers/requesty/models/mistral-medium-3-5.toml index cd3cc407a6e..846955e7dcf 100644 --- a/providers/requesty/models/mistral-medium-3-5.toml +++ b/providers/requesty/models/mistral-medium-3-5.toml @@ -17,9 +17,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.485 -output = 7.425 -cache_read = 1.485 +input = 1.65 +output = 8.25 +cache_read = 1.65 [limit] context = 262_144 diff --git a/providers/requesty/models/mistral-medium-3-5@eu.toml b/providers/requesty/models/mistral-medium-3-5@eu.toml index ad3d129f3a1..41dfecc58cb 100644 --- a/providers/requesty/models/mistral-medium-3-5@eu.toml +++ b/providers/requesty/models/mistral-medium-3-5@eu.toml @@ -17,9 +17,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.485 -output = 7.425 -cache_read = 1.485 +input = 1.65 +output = 8.25 +cache_read = 1.65 [limit] context = 262_144 diff --git a/providers/requesty/models/mistral-medium-latest.toml b/providers/requesty/models/mistral-medium-latest.toml index 1cc3aa69115..e841391c811 100644 --- a/providers/requesty/models/mistral-medium-latest.toml +++ b/providers/requesty/models/mistral-medium-latest.toml @@ -2,9 +2,9 @@ base_model = "mistral/mistral-medium-latest" reasoning = false [cost] -input = 0.396 -output = 1.98 -cache_read = 0.396 +input = 0.44 +output = 2.2 +cache_read = 0.44 [limit] context = 131_072 diff --git a/providers/requesty/models/mistral-medium-latest@eu.toml b/providers/requesty/models/mistral-medium-latest@eu.toml index 5ca123b9452..406cd97163f 100644 --- a/providers/requesty/models/mistral-medium-latest@eu.toml +++ b/providers/requesty/models/mistral-medium-latest@eu.toml @@ -3,9 +3,9 @@ name = "Mistral Medium (latest) (EU)" reasoning = false [cost] -input = 0.396 -output = 1.98 -cache_read = 0.396 +input = 0.44 +output = 2.2 +cache_read = 0.44 [limit] context = 131_072 diff --git a/providers/requesty/models/mistral-small-2603.toml b/providers/requesty/models/mistral-small-2603.toml index cae2472d897..7a4b26451ff 100644 --- a/providers/requesty/models/mistral-small-2603.toml +++ b/providers/requesty/models/mistral-small-2603.toml @@ -9,6 +9,6 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.1485 -output = 0.594 -cache_read = 0.1485 +input = 0.165 +output = 0.66 +cache_read = 0.165 diff --git a/providers/requesty/models/mistral-small-2603@eu.toml b/providers/requesty/models/mistral-small-2603@eu.toml index 345822d0ae6..66339a0378a 100644 --- a/providers/requesty/models/mistral-small-2603@eu.toml +++ b/providers/requesty/models/mistral-small-2603@eu.toml @@ -10,6 +10,6 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.1485 -output = 0.594 -cache_read = 0.1485 +input = 0.165 +output = 0.66 +cache_read = 0.165 diff --git a/providers/requesty/models/nemotron-3-nano-omni.toml b/providers/requesty/models/nemotron-3-nano-omni.toml index 575ee74c903..f8ca025e68f 100644 --- a/providers/requesty/models/nemotron-3-nano-omni.toml +++ b/providers/requesty/models/nemotron-3-nano-omni.toml @@ -17,9 +17,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.054 -output = 0.216 -cache_read = 0.054 +input = 0.06 +output = 0.24 +cache_read = 0.06 [limit] context = 300_000 diff --git a/providers/requesty/models/nemotron-3-nano-omni@eu.toml b/providers/requesty/models/nemotron-3-nano-omni@eu.toml index 68fc6a8b2e4..1422a67a67c 100644 --- a/providers/requesty/models/nemotron-3-nano-omni@eu.toml +++ b/providers/requesty/models/nemotron-3-nano-omni@eu.toml @@ -17,9 +17,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.054 -output = 0.216 -cache_read = 0.054 +input = 0.06 +output = 0.24 +cache_read = 0.06 [limit] context = 300_000 diff --git a/providers/requesty/models/nemotron-3-ultra-nvfp4.toml b/providers/requesty/models/nemotron-3-ultra-nvfp4.toml index b0cbe8dfa37..3fc92c2cc8b 100644 --- a/providers/requesty/models/nemotron-3-ultra-nvfp4.toml +++ b/providers/requesty/models/nemotron-3-ultra-nvfp4.toml @@ -17,9 +17,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.54 -output = 2.16 -cache_read = 0.108 +input = 0.6 +output = 2.4 +cache_read = 0.12 [limit] context = 262_144 diff --git a/providers/requesty/models/nemotron-lightning-3.5-30b-a3b.toml b/providers/requesty/models/nemotron-lightning-3.5-30b-a3b.toml index 34588b5cc51..d55a5302b32 100644 --- a/providers/requesty/models/nemotron-lightning-3.5-30b-a3b.toml +++ b/providers/requesty/models/nemotron-lightning-3.5-30b-a3b.toml @@ -17,9 +17,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.045 -output = 0.18 -cache_read = 0.009 +input = 0.05 +output = 0.2 +cache_read = 0.01 [limit] context = 262_144 diff --git a/providers/requesty/models/nvidia-nemotron-3-super-120b-a12b.toml b/providers/requesty/models/nvidia-nemotron-3-super-120b-a12b.toml index 6a0e782c9ee..d7fbf31d042 100644 --- a/providers/requesty/models/nvidia-nemotron-3-super-120b-a12b.toml +++ b/providers/requesty/models/nvidia-nemotron-3-super-120b-a12b.toml @@ -17,8 +17,8 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.09 -output = 0.45 +input = 0.1 +output = 0.5 [limit] context = 262_144 diff --git a/providers/requesty/models/nvidia-nemotron-3-ultra.toml b/providers/requesty/models/nvidia-nemotron-3-ultra.toml index 844902a8626..92717df9c6f 100644 --- a/providers/requesty/models/nvidia-nemotron-3-ultra.toml +++ b/providers/requesty/models/nvidia-nemotron-3-ultra.toml @@ -17,8 +17,8 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.45 -output = 2.25 +input = 0.5 +output = 2.5 [limit] context = 262_144 diff --git a/providers/requesty/models/o4-mini@eu.toml b/providers/requesty/models/o4-mini@eu.toml index 39db9fef85e..7e8324087de 100644 --- a/providers/requesty/models/o4-mini@eu.toml +++ b/providers/requesty/models/o4-mini@eu.toml @@ -9,6 +9,6 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.089 -output = 4.356 -cache_read = 0.27225 +input = 1.21 +output = 4.84 +cache_read = 0.3025 diff --git a/providers/requesty/models/qwen3.5-27b.toml b/providers/requesty/models/qwen3.5-27b.toml index bb7844b8e91..e5366eb2b08 100644 --- a/providers/requesty/models/qwen3.5-27b.toml +++ b/providers/requesty/models/qwen3.5-27b.toml @@ -8,8 +8,8 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.234 -output = 2.34 +input = 0.26 +output = 2.6 [limit] output = 262_144 diff --git a/providers/requesty/models/qwen3.5-2b.toml b/providers/requesty/models/qwen3.5-2b.toml index dcb8bf202d0..781016ffc86 100644 --- a/providers/requesty/models/qwen3.5-2b.toml +++ b/providers/requesty/models/qwen3.5-2b.toml @@ -17,8 +17,8 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.018 -output = 0.09 +input = 0.02 +output = 0.1 [limit] context = 262_144 diff --git a/providers/requesty/models/qwen3.5-35b-a3b.toml b/providers/requesty/models/qwen3.5-35b-a3b.toml index 568c5343e3e..ca01a2e54e1 100644 --- a/providers/requesty/models/qwen3.5-35b-a3b.toml +++ b/providers/requesty/models/qwen3.5-35b-a3b.toml @@ -8,9 +8,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.126 -output = 0.9 -cache_read = 0.045 +input = 0.14 +output = 1 +cache_read = 0.05 [limit] output = 262_144 diff --git a/providers/requesty/models/qwen3.6-plus.toml b/providers/requesty/models/qwen3.6-plus.toml index fac83531f59..c9b20433cd1 100644 --- a/providers/requesty/models/qwen3.6-plus.toml +++ b/providers/requesty/models/qwen3.6-plus.toml @@ -9,7 +9,7 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.45 -output = 2.7 -cache_read = 0.045 -cache_write = 0.5625 +input = 0.5 +output = 3 +cache_read = 0.05 +cache_write = 0.625 diff --git a/providers/requesty/models/qwen3.7-max.toml b/providers/requesty/models/qwen3.7-max.toml index b6205364fb9..b0d779243e7 100644 --- a/providers/requesty/models/qwen3.7-max.toml +++ b/providers/requesty/models/qwen3.7-max.toml @@ -9,10 +9,10 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 2.25 -output = 6.75 -cache_read = 0.225 -cache_write = 2.8125 +input = 2.5 +output = 7.5 +cache_read = 0.25 +cache_write = 3.125 [limit] context = 1_048_576 diff --git a/providers/requesty/models/qwen3.7-plus.toml b/providers/requesty/models/qwen3.7-plus.toml index 7e53c0a59df..009846440eb 100644 --- a/providers/requesty/models/qwen3.7-plus.toml +++ b/providers/requesty/models/qwen3.7-plus.toml @@ -9,10 +9,10 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.28 -output = 1.12 -cache_read = 0.028 -cache_write = 0.35 +input = 0.32 +output = 1.28 +cache_read = 0.032 +cache_write = 0.4 [limit] context = 1_048_576 diff --git a/providers/requesty/models/qwen3.8-2.4T-A95B.toml b/providers/requesty/models/qwen3.8-2.4T-A95B.toml index 02cdb3ba648..a28dc96e242 100644 --- a/providers/requesty/models/qwen3.8-2.4T-A95B.toml +++ b/providers/requesty/models/qwen3.8-2.4T-A95B.toml @@ -8,9 +8,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.8 -output = 5.4 -cache_read = 0.18 +input = 2 +output = 6 +cache_read = 0.2 [limit] output = 262_144 diff --git a/providers/requesty/models/qwen3.8-2.4T-A95B@eu.toml b/providers/requesty/models/qwen3.8-2.4T-A95B@eu.toml new file mode 100644 index 00000000000..4c87846e555 --- /dev/null +++ b/providers/requesty/models/qwen3.8-2.4T-A95B@eu.toml @@ -0,0 +1,18 @@ +base_model = "alibaba/qwen3.8-2.4t-a95b" +name = "Qwen3.8 2.4T A95B (EU)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 2.5 +output = 6 +cache_read = 0.63 + +[limit] +context = 1_000_000 +output = 262_144 diff --git a/providers/requesty/models/qwen3.8-flash-next.toml b/providers/requesty/models/qwen3.8-flash-next.toml new file mode 100644 index 00000000000..e7792ebeda9 --- /dev/null +++ b/providers/requesty/models/qwen3.8-flash-next.toml @@ -0,0 +1,16 @@ +base_model = "alibaba/qwen3.8-flash-next" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.2 +output = 0.5 +cache_read = 0.05 + +[limit] +output = 262_144 diff --git a/providers/requesty/models/qwen3.8-flash-next@eu.toml b/providers/requesty/models/qwen3.8-flash-next@eu.toml new file mode 100644 index 00000000000..43a5b2489c6 --- /dev/null +++ b/providers/requesty/models/qwen3.8-flash-next@eu.toml @@ -0,0 +1,17 @@ +base_model = "alibaba/qwen3.8-flash-next" +name = "Qwen3.8 Flash Next (EU)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.2 +output = 0.5 +cache_read = 0.05 + +[limit] +output = 262_144 diff --git a/providers/requesty/models/qwen3.8-flash.toml b/providers/requesty/models/qwen3.8-flash.toml new file mode 100644 index 00000000000..322e429cce3 --- /dev/null +++ b/providers/requesty/models/qwen3.8-flash.toml @@ -0,0 +1,17 @@ +base_model = "alibaba/qwen3.8-flash" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.16 +output = 0.47 +cache_read = 0.016 +cache_write = 0.2 + +[limit] +context = 1_048_576 diff --git a/providers/requesty/models/qwen3.8-max.toml b/providers/requesty/models/qwen3.8-max.toml index bfc96dcb1e9..c9f9d76a6e8 100644 --- a/providers/requesty/models/qwen3.8-max.toml +++ b/providers/requesty/models/qwen3.8-max.toml @@ -9,10 +9,10 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 1.8 -output = 5.4 -cache_read = 0.225 -cache_write = 2.25 +input = 2 +output = 6 +cache_read = 0.25 +cache_write = 2.5 [limit] context = 1_048_576 diff --git a/providers/requesty/models/ring-2.6-1t.toml b/providers/requesty/models/ring-2.6-1t.toml index fed1a0ad2c7..8f33bc84633 100644 --- a/providers/requesty/models/ring-2.6-1t.toml +++ b/providers/requesty/models/ring-2.6-1t.toml @@ -17,8 +17,8 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.27 -output = 2.25 +input = 0.3 +output = 2.5 [limit] context = 262_144 diff --git a/providers/requesty/models/seed-1.8.toml b/providers/requesty/models/seed-1.8.toml index 4b8470af3d8..2472c31bb2a 100644 --- a/providers/requesty/models/seed-1.8.toml +++ b/providers/requesty/models/seed-1.8.toml @@ -17,9 +17,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.225 -output = 1.8 -cache_read = 0.045 +input = 0.25 +output = 2 +cache_read = 0.05 [limit] context = 256_000 diff --git a/providers/requesty/models/seed-2.0-code.toml b/providers/requesty/models/seed-2.0-code.toml index 252f4fa5c1d..c64d1a091ab 100644 --- a/providers/requesty/models/seed-2.0-code.toml +++ b/providers/requesty/models/seed-2.0-code.toml @@ -9,9 +9,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.45 -output = 2.7 -cache_read = 0.09 +input = 0.5 +output = 3 +cache_read = 0.1 [limit] context = 256_000 diff --git a/providers/requesty/models/seed-2.0-mini.toml b/providers/requesty/models/seed-2.0-mini.toml index 86f36d0d349..4e3dfb0ea14 100644 --- a/providers/requesty/models/seed-2.0-mini.toml +++ b/providers/requesty/models/seed-2.0-mini.toml @@ -9,9 +9,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.09 -output = 0.36 -cache_read = 0.018 +input = 0.1 +output = 0.4 +cache_read = 0.02 [limit] output = 256_000 diff --git a/providers/requesty/models/seed-2.0-pro.toml b/providers/requesty/models/seed-2.0-pro.toml index f4d76fe612e..b7091c5fb8c 100644 --- a/providers/requesty/models/seed-2.0-pro.toml +++ b/providers/requesty/models/seed-2.0-pro.toml @@ -9,9 +9,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.45 -output = 2.7 -cache_read = 0.09 +input = 0.5 +output = 3 +cache_read = 0.1 [limit] output = 256_000 diff --git a/providers/requesty/models/step-3.7-flash.toml b/providers/requesty/models/step-3.7-flash.toml index cd2b74f8b6b..10e1b1afba5 100644 --- a/providers/requesty/models/step-3.7-flash.toml +++ b/providers/requesty/models/step-3.7-flash.toml @@ -10,9 +10,9 @@ values = ["none", "low", "medium", "high", "max"] type = "budget_tokens" [cost] -input = 0.18 -output = 1.035 -cache_read = 0.036 +input = 0.2 +output = 1.15 +cache_read = 0.04 [limit] context = 262_144 diff --git a/providers/requesty/models/thinkingcap-qwen3.6-27b.toml b/providers/requesty/models/thinkingcap-qwen3.6-27b.toml deleted file mode 100644 index 9810394d7c2..00000000000 --- a/providers/requesty/models/thinkingcap-qwen3.6-27b.toml +++ /dev/null @@ -1,30 +0,0 @@ -name = "thinkingcap-qwen3.6-27b" -description = "ThinkingCap-Qwen3.6-27B is a reasoning tuned model from BottlecapAI built on Qwen3.6 27B. It supports extended thinking with tool calling and a 256K context window. Served via Sference." -family = "qwen3.6" -release_date = "2026-07-13" -last_updated = "2026-07-13" -attachment = false -reasoning = true -tool_call = true -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "effort" -values = ["none", "low", "medium", "high", "max"] - -[[reasoning_options]] -type = "budget_tokens" - -[cost] -input = 0.36 -output = 2.7 -cache_read = 0.234 - -[limit] -context = 262_144 -output = 32_768 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/requesty/models/thinkingcap-qwen3.6-27b@eu.toml b/providers/requesty/models/thinkingcap-qwen3.6-27b@eu.toml deleted file mode 100644 index 0f5cc42ea4a..00000000000 --- a/providers/requesty/models/thinkingcap-qwen3.6-27b@eu.toml +++ /dev/null @@ -1,30 +0,0 @@ -name = "thinkingcap-qwen3.6-27b@eu" -description = "ThinkingCap-Qwen3.6-27B is a reasoning tuned model from BottlecapAI built on Qwen3.6 27B. It supports extended thinking with tool calling and a 256K context window. Served via Sference." -family = "qwen3.6" -release_date = "2026-07-13" -last_updated = "2026-07-13" -attachment = false -reasoning = true -tool_call = true -structured_output = false -open_weights = false - -[[reasoning_options]] -type = "effort" -values = ["none", "low", "medium", "high", "max"] - -[[reasoning_options]] -type = "budget_tokens" - -[cost] -input = 0.36 -output = 2.7 -cache_read = 0.234 - -[limit] -context = 262_144 -output = 32_768 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/runinfra/models/Inferact/Qwen3.8-2.4T-A95B-NVFP4.toml b/providers/runinfra/models/Inferact/Qwen3.8-2.4T-A95B-NVFP4.toml index 775a2d7d4d0..5e3f2f67645 100644 --- a/providers/runinfra/models/Inferact/Qwen3.8-2.4T-A95B-NVFP4.toml +++ b/providers/runinfra/models/Inferact/Qwen3.8-2.4T-A95B-NVFP4.toml @@ -8,11 +8,15 @@ # It is not published as a separate rung because it is not a distinct behaviour, only the # OpenAI ladder's word for the maximum, and this serve's maximum is "xhigh". Callers that # send "high" are served rather than refused. -# Reasoning cannot be turned off: reasoning_effort = "none" is rejected with HTTP 400 -# "Disabling thinking is not supported." That refusal is deliberate and is NOT folded, so a -# caller asking to switch reasoning off learns the model has no off switch instead of being -# silently charged the most expensive setting. enable_thinking / chat_template_kwargs / -# thinking_budget are accepted but have no effect. +# Reasoning cannot be turned off: reasoning_effort = "none" is rejected with HTTP 400, and the +# refusal is deliberate rather than folded, so such a request is never silently served and +# billed at the most expensive setting. +# ONE CLAIM THAT SAT HERE WAS CORRECTED 2026-08-27 after re-measuring the buyer path. It used +# to say the caller learns this model has no off switch. That is not what happens. The gateway +# authors every rejection sentence a buyer reads and answers an unrecognised refusal with a +# generic one, so a caller sending "none" learns the request was rejected and no more. The +# reason is recorded because the claim was true when written and quietly stopped being true. +# enable_thinking / chat_template_kwargs / thinking_budget are accepted but have no effect. # cache_read is the cached input price. JSON mode went live on this host 2026-08-17, # verified on the public path: 3 of 3 json_object responses parsed and 3 of 3 strict # json_schema responses validated, at 0.35x baseline latency, so structured_output now diff --git a/providers/runinfra/models/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16.toml b/providers/runinfra/models/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16.toml index 2cc8095c64c..b84500c0d2b 100644 --- a/providers/runinfra/models/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16.toml +++ b/providers/runinfra/models/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16.toml @@ -6,6 +6,9 @@ # own run-to-run variance (baseline 570/642 tokens across repeats, medium 588/642), so no graded # control is claimed. enable_thinking / chat_template_kwargs / thinking_budget are accepted but # have no effect. The control is a toggle. +# cache_read is the cached input price, added 2026-08-27 after prefix caching was confirmed on +# this serve rather than assumed: an identical 4,200-token prompt repeated 6 times reported +# cached_tokens 0 on the first attempt and 4,352 on all five that followed. base_model = "nvidia/nemotron-3.5-lightning" [[reasoning_options]] @@ -14,6 +17,7 @@ type = "toggle" [cost] input = 0.05 output = 0.15 +cache_read = 0.01 [limit] output = 32_768 diff --git a/providers/runinfra/models/ornith-ai/Ornith-1.5-35B-A3B.toml b/providers/runinfra/models/ornith-ai/Ornith-1.5-35B-A3B.toml new file mode 100644 index 00000000000..5323a7bc9ae --- /dev/null +++ b/providers/runinfra/models/ornith-ai/Ornith-1.5-35B-A3B.toml @@ -0,0 +1,26 @@ +# Source: https://runinfra.ai/inference-api/ornith-1-5-35b +# Reasoning control, probed live on this serve 2026-08-27 (temperature 0, fixed prompt, +# 3 repeats per level, reproducible to the token): reasoning_effort = "none" completes in 4 +# tokens while the omitted default completes in 78, and "low", "medium", "high", "xhigh" and +# "max" all complete in 78, identical to the default. So the control is an on/off toggle and +# no graded ladder is claimed. Values outside the accepted set are refused (probed "bogus": 400). +# Reasoning streams on a "reasoning_content" delta field (probed live). +# cache_read is the cached input price and prefix caching is real, not declared: an identical +# 4,200-token prompt repeated 6 times reported cached_tokens 0 then 6,976 on every later attempt. +# The output budget is what THIS deployment was launched with; the context window matches the +# lab entry and is therefore not restated here. +base_model = "deepreinforce/ornith-1.5-35b-a3b" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.10 +output = 0.40 +cache_read = 0.01 + +[limit] +output = 32_768 diff --git a/providers/runinfra/models/zai-org/GLM-5.3-Flash.toml b/providers/runinfra/models/zai-org/GLM-5.3-Flash.toml new file mode 100644 index 00000000000..36f839e5808 --- /dev/null +++ b/providers/runinfra/models/zai-org/GLM-5.3-Flash.toml @@ -0,0 +1,38 @@ +# Source: https://runinfra.ai/inference-api/glm-5-3-flash +# Reasoning control, probed live on this serve 2026-08-27 (temperature 0, fixed prompt, +# 3 repeats per level, completion tokens reproducible to the token at every level): +# "low" 4, "high" 12, and "medium" / "xhigh" / "max" / the omitted default all 30. So only +# "low" and "high" are distinct rungs; every other accepted value means maximum effort. +# The serve states this itself when reasoning is switched off: reasoning_effort = "none" +# returns HTTP 400 'reasoning_effort "none" is not supported: GLM 5.3 Flash cannot disable +# thinking, and this serve treats every value outside "low" and "high" as maximum effort.' +# Values outside the accepted set are refused rather than folded (probed "ultra", "bogus": 400). +# Reasoning is interleaved into the stream, on a "reasoning" delta field rather than +# "reasoning_content" (probed live). interleaved is declared as the bare boolean because the +# schema's field enum covers only "reasoning_content" and "reasoning_details", and naming +# either of those here would misdescribe what this serve actually emits. +# Tool calling and structured output verified live the same day: a get_weather call +# round-tripped with correct arguments, json_object parsed, and a strict json_schema validated. +# cache_read is the cached input price and prefix caching is real, not declared: an identical +# 4,200-token prompt repeated 6 times reported cached_tokens 0 then 5,760 on every later attempt. +# context and output are what THIS deployment was launched with, both below the lab entry's +# figures. Input modalities list only text and image because those are the two we serve and +# proved; the lab entry's video and pdf are not claimed here. +base_model = "zhipuai/glm-5.3-flash" +interleaved = true + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.10 +output = 0.40 +cache_read = 0.01 + +[limit] +context = 1_048_576 +output = 32_768 + +[modalities] +input = ["text", "image"] diff --git a/providers/sap-ai-core/models/gemini-3.5-flash-lite.toml b/providers/sap-ai-core/models/gemini-3.5-flash-lite.toml new file mode 100644 index 00000000000..f2b2b13999b --- /dev/null +++ b/providers/sap-ai-core/models/gemini-3.5-flash-lite.toml @@ -0,0 +1,6 @@ +# Cost information is in CU that are not directly comparable to other providers. +base_model = "google/gemini-3.5-flash-lite" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high"] \ No newline at end of file diff --git a/providers/scnet-token-plan/models/DeepSeek-V3.2.toml b/providers/scnet-token-plan/models/DeepSeek-V3.2.toml deleted file mode 100644 index 94dbb40951e..00000000000 --- a/providers/scnet-token-plan/models/DeepSeek-V3.2.toml +++ /dev/null @@ -1,10 +0,0 @@ -base_model = "deepseek/deepseek-v3.2" -reasoning_options = [] - -[interleaved] -field = "reasoning_content" - -[cost] -input = 0 -output = 0 -cache_read = 0 diff --git a/providers/scnet-token-plan/models/DeepSeek-V4-Pro-0813.toml b/providers/scnet-token-plan/models/DeepSeek-V4-Pro-0813.toml new file mode 100644 index 00000000000..ebcbe85a7e1 --- /dev/null +++ b/providers/scnet-token-plan/models/DeepSeek-V4-Pro-0813.toml @@ -0,0 +1,13 @@ +# Toggle: enable_thinking = true|false +# Effort: reasoning_effort = high|max +# https://www.scnet.cn/ac/openapi/doc/2.0/moduleapi/api/chat.html (accessed 2026-08-28) +base_model = "deepseek/deepseek-v4-pro-0813" +reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/scnet-token-plan/models/DeepSeek-V4.1-Flash.toml b/providers/scnet-token-plan/models/DeepSeek-V4.1-Flash.toml new file mode 100644 index 00000000000..3b224be63f4 --- /dev/null +++ b/providers/scnet-token-plan/models/DeepSeek-V4.1-Flash.toml @@ -0,0 +1,17 @@ +# Toggle: enable_thinking = true|false +# Effort: reasoning_effort = high|max +# https://www.scnet.cn/ac/openapi/doc/2.0/moduleapi/api/chat.html (accessed 2026-09-15) +base_model = "deepseek/deepseek-v4.1-flash" +attachment = false +reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 + +[modalities] +input = ["text"] diff --git a/providers/scnet-token-plan/models/GLM-5.3-Flash.toml b/providers/scnet-token-plan/models/GLM-5.3-Flash.toml new file mode 100644 index 00000000000..3267da0b1b4 --- /dev/null +++ b/providers/scnet-token-plan/models/GLM-5.3-Flash.toml @@ -0,0 +1,10 @@ +base_model = "zhipuai/glm-5.3-flash" +reasoning_options = [] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/scnet-token-plan/models/GLM-5.3.toml b/providers/scnet-token-plan/models/GLM-5.3.toml new file mode 100644 index 00000000000..0c44ce127bf --- /dev/null +++ b/providers/scnet-token-plan/models/GLM-5.3.toml @@ -0,0 +1,10 @@ +base_model = "zhipuai/glm-5.3" +reasoning_options = [] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/scnet-token-plan/models/MiMo-V2.5-Pro.toml b/providers/scnet-token-plan/models/MiMo-V2.5-Pro.toml deleted file mode 100644 index 6e465f58869..00000000000 --- a/providers/scnet-token-plan/models/MiMo-V2.5-Pro.toml +++ /dev/null @@ -1,10 +0,0 @@ -base_model = "xiaomi/mimo-v2.5-pro" -reasoning_options = [] - -[interleaved] -field = "reasoning_content" - -[cost] -input = 0 -output = 0 -cache_read = 0 diff --git a/providers/scnet-token-plan/models/Qwen3.8-Flash.toml b/providers/scnet-token-plan/models/Qwen3.8-Flash.toml new file mode 100644 index 00000000000..cdc9432554b --- /dev/null +++ b/providers/scnet-token-plan/models/Qwen3.8-Flash.toml @@ -0,0 +1,13 @@ +# Toggle: enable_thinking = true|false +# Effort: reasoning_effort only applies to DeepSeek-V4 series (high|max); not documented for Qwen3 series. +# https://www.scnet.cn/ac/openapi/doc/2.0/moduleapi/api/chat.html (accessed 2026-09-01) +base_model = "alibaba/qwen3.8-flash" +reasoning_options = [{ type = "toggle" }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/sensenova/logo.svg b/providers/sensenova/logo.svg new file mode 100644 index 00000000000..e9df39bda41 --- /dev/null +++ b/providers/sensenova/logo.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/providers/sensenova/models/deepseek-v4-flash.toml b/providers/sensenova/models/deepseek-v4-flash.toml new file mode 100644 index 00000000000..8fd30e82d9e --- /dev/null +++ b/providers/sensenova/models/deepseek-v4-flash.toml @@ -0,0 +1,23 @@ +# Sources (accessed 2026-08-28): +# https://platform.sensenova.cn/docs +# Reasoning: host documents reasoning_effort none|low|medium|high (default +# medium), but live calls show no grading: none disables reasoning and +# low|medium|high produce indistinguishable reasoning volume (same +# reasoning_content length within run variance). Aligned to the lab-effective +# level (DeepSeek lab maps low/medium -> high); no toggle and no max on this +# host. +base_model = "deepseek/deepseek-v4-flash" +reasoning_options = [ + { type = "effort", values = ["none", "high"] }, +] + +[interleaved] +field = "reasoning_content" + +[limit] +output = 65_536 + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/sensenova/models/deepseek-v4-pro.toml b/providers/sensenova/models/deepseek-v4-pro.toml new file mode 100644 index 00000000000..c794055d51a --- /dev/null +++ b/providers/sensenova/models/deepseek-v4-pro.toml @@ -0,0 +1,30 @@ +# Sources (accessed 2026-09-06): +# https://platform.sensenova.cn/docs +# GET /v1/models: context 1048576, max output 65536, fp8, text -> text, +# supported features tools+json_mode+reasoning; pricing all zero (public beta +# free on TokenPlan). +# Version note: the host serves DeepSeek-V4-Pro 0813, so base_model points at +# the 0813 snapshot. DeepSeek V4 Pro is text-only (no image input). +# Toggle: thinking.type = enabled|disabled (default enabled) +# Effort: reasoning_effort = low|high|max; medium and xhigh are accepted but +# mapped to high. Live calls confirm none disables reasoning and that no +# better-than-high achievable output differs, so the lab-effective levels +# (high/max) are authored per AGENTS.md policy for DeepSeek V4. +base_model = "deepseek/deepseek-v4-pro-0813" +name = "DeepSeek V4 Pro" +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["high", "max"] }, +] + +[interleaved] +field = "reasoning_content" + +[limit] +context = 1_048_576 +output = 65_536 + +[cost] +input = 0 +output = 0 +cache_read = 0 \ No newline at end of file diff --git a/providers/sensenova/models/glm-5.2.toml b/providers/sensenova/models/glm-5.2.toml new file mode 100644 index 00000000000..1cefde124b0 --- /dev/null +++ b/providers/sensenova/models/glm-5.2.toml @@ -0,0 +1,18 @@ +# Sources (accessed 2026-08-28): +# https://platform.sensenova.cn/docs +# Reasoning: host documents reasoning_effort none|low|medium|high (default +# medium), but live calls show no grading: none disables reasoning and +# low|medium|high produce indistinguishable reasoning volume. Aligned to the +# lab-effective level (Z.AI GLM-5.2: high/max; max absent on this host). +base_model = "zhipuai/glm-5.2" +reasoning_options = [ + { type = "effort", values = ["none", "high"] }, +] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/sensenova/models/kimi-k3.toml b/providers/sensenova/models/kimi-k3.toml new file mode 100644 index 00000000000..46fe6450863 --- /dev/null +++ b/providers/sensenova/models/kimi-k3.toml @@ -0,0 +1,30 @@ +# Sources (accessed 2026-09-06): +# https://platform.sensenova.cn/docs +# GET /v1/models: context 1048576, max output 65536, fp8, text -> text, +# supported features tools+json_mode+reasoning; pricing all zero (public beta +# free on TokenPlan). +# Reasoning: host docs give reasoning_effort low|high|max (default max); live +# calls show clear grading (low = 1-14 reasoning tokens, high = 7-36, max = +# 593-626 on the same prompt). No separate on/off toggle is documented on this +# host, so the documented effort levels are authored as-is. +# Image input via base64 image_url is verified live and documented (native +# multimodal agent model); host docs require base64 (public URLs rejected) and +# do not document video, so input is limited to text+image. +base_model = "moonshotai/kimi-k3" +reasoning_options = [ + { type = "effort", values = ["low", "high", "max"] }, +] + +[interleaved] +field = "reasoning_content" + +[limit] +output = 65_536 + +[modalities] +input = ["text", "image"] + +[cost] +input = 0 +output = 0 +cache_read = 0 \ No newline at end of file diff --git a/providers/sensenova/models/sensenova-6.8-flash-lite.toml b/providers/sensenova/models/sensenova-6.8-flash-lite.toml new file mode 100644 index 00000000000..ecf16a424ab --- /dev/null +++ b/providers/sensenova/models/sensenova-6.8-flash-lite.toml @@ -0,0 +1,36 @@ +# Sources (accessed 2026-08-28): +# https://platform.sensenova.cn/docs +# GET /v1/models: context 262144, max output 65536, fp8, text+image -> text, +# supported features tools+json_mode+reasoning; pricing all zero (public beta +# free on TokenPlan). +# Preview launched 2026-08-11: https://www.ithome.com/0/988/416.htm +# Reasoning: reasoning_effort documented enum none|low|medium|high (default +# medium). A reasoning side channel is returned as message.reasoning, which is +# not a schema-supported interleaved field, so no interleaved is authored. + +name = "SenseNova 6.8 Flash Lite" +description = "SenseNova lightweight multimodal agent model for real-world complex tasks, data analysis, and complex information presentation" +release_date = "2026-08-11" +last_updated = "2026-08-28" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [ + { type = "effort", values = ["none", "low", "medium", "high"] }, +] + +[limit] +context = 262_144 +output = 65_536 + +[modalities] +input = ["text", "image"] +output = ["text"] + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/sensenova/provider.toml b/providers/sensenova/provider.toml new file mode 100644 index 00000000000..ed10eeab7f0 --- /dev/null +++ b/providers/sensenova/provider.toml @@ -0,0 +1,5 @@ +name = "SenseNova (China)" +npm = "@ai-sdk/openai-compatible" +env = ["SENSENOVA_API_KEY"] +api = "https://token.sensenova.cn/v1" +doc = "https://platform.sensenova.cn/docs" diff --git a/providers/siliconflow/models/MiniMaxAI/MiniMax-M3.toml b/providers/siliconflow/models/MiniMaxAI/MiniMax-M3.toml new file mode 100644 index 00000000000..748a1991b69 --- /dev/null +++ b/providers/siliconflow/models/MiniMaxAI/MiniMax-M3.toml @@ -0,0 +1,26 @@ +# Budget: thinking_budget (integer reasoning tokens, 128..32768) — SiliconFlow documents +# thinking_budget for all reasoning models; enable_thinking is not enumerated for MiniMax +# models on this host, so no toggle. +# Sources: https://www.siliconflow.com/models (2026-09-08), +# https://docs.siliconflow.com/en/api-reference/chat-completions/chat-completions +base_model = "minimax/MiniMax-M3" + + +reasoning_options = [{ type = "budget_tokens", min = 128, max = 32_768 }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.06 + +[limit] +output = 131_000 + +# SiliconFlow serves image input but not video for this model +# (model page "Support image input: Yes"): https://www.siliconflow.com/models/minimax-m3 +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/siliconflow/models/Qwen/Qwen3-235B-A22B-Thinking-2507.toml b/providers/siliconflow/models/Qwen/Qwen3-235B-A22B-Thinking-2507.toml deleted file mode 100644 index fb446e7d261..00000000000 --- a/providers/siliconflow/models/Qwen/Qwen3-235B-A22B-Thinking-2507.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Qwen/Qwen3-235B-A22B-Thinking-2507" -description = "Qwen reasoning model for deliberate problem solving, math, and coding" -family = "qwen" -release_date = "2025-07-28" -last_updated = "2025-11-25" -attachment = false -reasoning = true -reasoning_options = [{ type = "budget_tokens", min = 128, max = 32_768 }] -temperature = true -tool_call = true -structured_output = true -open_weights = false - -[cost] -input = 0.13 -output = 0.6 - -[limit] -context = 262_000 -output = 262_000 - -[modalities] -input = ["text"] -output = ["text"] \ No newline at end of file diff --git a/providers/siliconflow/models/Qwen/Qwen3-VL-235B-A22B-Instruct.toml b/providers/siliconflow/models/Qwen/Qwen3-VL-235B-A22B-Instruct.toml deleted file mode 100644 index 8c74b4bceca..00000000000 --- a/providers/siliconflow/models/Qwen/Qwen3-VL-235B-A22B-Instruct.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Qwen/Qwen3-VL-235B-A22B-Instruct" -description = "Qwen vision-language model for visual reasoning, documents, and agent tasks" -family = "qwen" -release_date = "2025-10-04" -last_updated = "2025-11-25" -attachment = true -reasoning = false -temperature = true -tool_call = true -structured_output = true -open_weights = false - -[cost] -input = 0.3 -output = 1.5 - -[limit] -context = 262_000 -output = 262_000 - -[modalities] -input = ["text", "image"] -output = ["text"] \ No newline at end of file diff --git a/providers/siliconflow/models/Qwen/Qwen3-VL-235B-A22B-Thinking.toml b/providers/siliconflow/models/Qwen/Qwen3-VL-235B-A22B-Thinking.toml deleted file mode 100644 index 03bb1766276..00000000000 --- a/providers/siliconflow/models/Qwen/Qwen3-VL-235B-A22B-Thinking.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Qwen/Qwen3-VL-235B-A22B-Thinking" -description = "Qwen vision-language model for visual reasoning, documents, and agent tasks" -family = "qwen" -release_date = "2025-10-04" -last_updated = "2025-11-25" -attachment = true -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -structured_output = true -open_weights = false - -[cost] -input = 0.45 -output = 3.5 - -[limit] -context = 262_000 -output = 262_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/siliconflow/models/Qwen/Qwen3.8-2.4T-A95B.toml b/providers/siliconflow/models/Qwen/Qwen3.8-2.4T-A95B.toml new file mode 100644 index 00000000000..86601f6baa1 --- /dev/null +++ b/providers/siliconflow/models/Qwen/Qwen3.8-2.4T-A95B.toml @@ -0,0 +1,16 @@ +# Budget: thinking_budget (integer reasoning tokens, 128..32768) — SiliconFlow exposes no +# reasoning_effort parameter; thinking_budget is documented for all reasoning models. +# Sources: https://www.siliconflow.com/models (2026-09-08), +# https://docs.siliconflow.com/en/api-reference/chat-completions/chat-completions +base_model = "alibaba/qwen3.8-2.4t-a95b" + +reasoning_options = [{ type = "budget_tokens", min = 128, max = 32_768 }] + +[cost] +input = 2.0 +output = 6.0 +cache_read = 0.25 + +[limit] +context = 1_049_000 +output = 131_000 diff --git a/providers/siliconflow/models/baidu/ERNIE-4.5-300B-A47B.toml b/providers/siliconflow/models/baidu/ERNIE-4.5-300B-A47B.toml deleted file mode 100644 index 5309d4c0402..00000000000 --- a/providers/siliconflow/models/baidu/ERNIE-4.5-300B-A47B.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "baidu/ERNIE-4.5-300B-A47B" -description = "Tool-capable chat model for instruction following and agentic application workflows" -family = "ernie" -release_date = "2025-07-02" -last_updated = "2025-11-25" -attachment = false -reasoning = false -temperature = true -tool_call = true -structured_output = true -open_weights = false - -[cost] -input = 0.28 -output = 1.1 - -[limit] -context = 131_000 -output = 131_000 - -[modalities] -input = ["text"] -output = ["text"] \ No newline at end of file diff --git a/providers/siliconflow/models/deepseek-ai/DeepSeek-V3.2.toml b/providers/siliconflow/models/deepseek-ai/DeepSeek-V3.2.toml index a05b736c528..84bd5c7b342 100644 --- a/providers/siliconflow/models/deepseek-ai/DeepSeek-V3.2.toml +++ b/providers/siliconflow/models/deepseek-ai/DeepSeek-V3.2.toml @@ -14,6 +14,7 @@ open_weights = false [cost] input = 0.27 output = 0.42 +cache_read = 0.135 [limit] context = 164_000 diff --git a/providers/siliconflow/models/deepseek-ai/DeepSeek-V4-Flash-0731.toml b/providers/siliconflow/models/deepseek-ai/DeepSeek-V4-Flash-0731.toml new file mode 100644 index 00000000000..be8c8bf0744 --- /dev/null +++ b/providers/siliconflow/models/deepseek-ai/DeepSeek-V4-Flash-0731.toml @@ -0,0 +1,12 @@ +# Sources: https://www.siliconflow.com/models (2026-09-08) +base_model = "deepseek/deepseek-v4-flash-0731" + +reasoning_options = [{ type = "budget_tokens", min = 128, max = 32_768 }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.22 +output = 0.66 +cache_read = 0.014 diff --git a/providers/siliconflow/models/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp.toml b/providers/siliconflow/models/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp.toml new file mode 100644 index 00000000000..674c8102988 --- /dev/null +++ b/providers/siliconflow/models/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp.toml @@ -0,0 +1,12 @@ +# Sources: https://www.siliconflow.com/models (2026-09-08) +base_model = "deepseek/deepseek-v4-flash-vision-exp" + +reasoning_options = [{ type = "budget_tokens", min = 128, max = 32_768 }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.44 +output = 1.32 +cache_read = 0.028 diff --git a/providers/siliconflow/models/deepseek-ai/DeepSeek-V4-Flash.toml b/providers/siliconflow/models/deepseek-ai/DeepSeek-V4-Flash.toml index 744b022d3f0..14ac45494a9 100644 --- a/providers/siliconflow/models/deepseek-ai/DeepSeek-V4-Flash.toml +++ b/providers/siliconflow/models/deepseek-ai/DeepSeek-V4-Flash.toml @@ -6,6 +6,6 @@ reasoning_options = [{ type = "budget_tokens", min = 128, max = 32_768 }] field = "reasoning_content" [cost] -input = 0.14 +input = 0.13 output = 0.28 cache_read = 0.028 diff --git a/providers/siliconflow/models/deepseek-ai/DeepSeek-V4-Pro-0813.toml b/providers/siliconflow/models/deepseek-ai/DeepSeek-V4-Pro-0813.toml new file mode 100644 index 00000000000..dd2c092e9dc --- /dev/null +++ b/providers/siliconflow/models/deepseek-ai/DeepSeek-V4-Pro-0813.toml @@ -0,0 +1,12 @@ +# Sources: https://www.siliconflow.com/models (2026-09-08) +base_model = "deepseek/deepseek-v4-pro-0813" + +reasoning_options = [{ type = "budget_tokens", min = 128, max = 32_768 }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1.32 +output = 3.96 +cache_read = 0.044 diff --git a/providers/siliconflow/models/deepseek-ai/DeepSeek-V4-Pro.toml b/providers/siliconflow/models/deepseek-ai/DeepSeek-V4-Pro.toml index a573cf5c2af..9994892360a 100644 --- a/providers/siliconflow/models/deepseek-ai/DeepSeek-V4-Pro.toml +++ b/providers/siliconflow/models/deepseek-ai/DeepSeek-V4-Pro.toml @@ -1,3 +1,5 @@ +# Cost values are the published USD list prices on SiliconFlow international +# (https://www.siliconflow.com/pricing, accessed 2026-09-08), not FX conversions by this PR. base_model = "deepseek/deepseek-v4-pro" reasoning_options = [{ type = "budget_tokens", min = 128, max = 32_768 }] @@ -6,6 +8,6 @@ reasoning_options = [{ type = "budget_tokens", min = 128, max = 32_768 }] field = "reasoning_content" [cost] -input = 1.74 -output = 3.48 -cache_read = 0.145 +input = 1.50162 +output = 3.135 +cache_read = 0.135 diff --git a/providers/siliconflow/models/google/gemma-4-12B-it.toml b/providers/siliconflow/models/google/gemma-4-12B-it.toml new file mode 100644 index 00000000000..05329524ad5 --- /dev/null +++ b/providers/siliconflow/models/google/gemma-4-12B-it.toml @@ -0,0 +1,16 @@ +# Sources: https://www.siliconflow.com/models (2026-09-08) +base_model = "google/gemma-4-12b-it" +attachment = false +reasoning = false +open_weights = false + +[cost] +input = 0.10 +output = 0.30 + +[limit] +output = 262_144 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/siliconflow/models/meituan-longcat/LongCat-2.0.toml b/providers/siliconflow/models/meituan-longcat/LongCat-2.0.toml new file mode 100644 index 00000000000..dfe567a7db0 --- /dev/null +++ b/providers/siliconflow/models/meituan-longcat/LongCat-2.0.toml @@ -0,0 +1,18 @@ +# Budget: thinking_budget (integer reasoning tokens, 128..32768) — SiliconFlow documents +# thinking_budget for all reasoning models and enumerates enable_thinking only for specific +# models (LongCat not among them), so no toggle on this host. +# Sources: https://www.siliconflow.com/models (2026-09-08), +# https://docs.siliconflow.com/en/api-reference/chat-completions/chat-completions +base_model = "meituan/longcat-2.0" +reasoning_options = [{ type = "budget_tokens", min = 128, max = 32_768 }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.75 +output = 2.95 +cache_read = 0.015 + +[limit] +context = 1_049_000 diff --git a/providers/siliconflow/models/moonshotai/Kimi-K2.6.toml b/providers/siliconflow/models/moonshotai/Kimi-K2.6.toml index 73e5e28af8b..48e6aaf149e 100644 --- a/providers/siliconflow/models/moonshotai/Kimi-K2.6.toml +++ b/providers/siliconflow/models/moonshotai/Kimi-K2.6.toml @@ -16,8 +16,8 @@ field = "reasoning_content" [cost] input = 0.77 -output = 4.0 -cache_read = 0.2 +output = 3.4 +cache_read = 0.14 [limit] context = 262_000 diff --git a/providers/siliconflow/models/moonshotai/Kimi-K2.7-Code.toml b/providers/siliconflow/models/moonshotai/Kimi-K2.7-Code.toml new file mode 100644 index 00000000000..f70f197f92d --- /dev/null +++ b/providers/siliconflow/models/moonshotai/Kimi-K2.7-Code.toml @@ -0,0 +1,21 @@ +# Sources: https://www.siliconflow.com/models (2026-09-08) +base_model = "moonshotai/kimi-k2.7-code" + + +reasoning_options = [{ type = "budget_tokens", min = 128, max = 32_768 }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.85916 +output = 3.8 +cache_read = 0.17993 + +# Cost values are the published USD list prices on SiliconFlow international +# (https://www.siliconflow.com/pricing), not FX conversions by this PR. +# SiliconFlow serves image input but not video for this model +# (model page "Support image input: Yes"): https://www.siliconflow.com/models/kimi-k2-7-code +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/siliconflow/models/moonshotai/Kimi-K3.toml b/providers/siliconflow/models/moonshotai/Kimi-K3.toml new file mode 100644 index 00000000000..daa54bb61f7 --- /dev/null +++ b/providers/siliconflow/models/moonshotai/Kimi-K3.toml @@ -0,0 +1,22 @@ +# Sources: https://www.siliconflow.com/models (2026-09-08) +base_model = "moonshotai/kimi-k3" + + +reasoning_options = [{ type = "budget_tokens", min = 128, max = 32_768 }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 2.7 +output = 13.5 +cache_read = 0.27 + +[limit] +output = 262_000 + +# SiliconFlow serves image input but not video for this model +# (model page "Support image input: Yes"): https://www.siliconflow.com/models/kimi-k3 +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/siliconflow/models/nex-agi/Nex-N2-Pro.toml b/providers/siliconflow/models/nex-agi/Nex-N2-Pro.toml new file mode 100644 index 00000000000..f160fdf834d --- /dev/null +++ b/providers/siliconflow/models/nex-agi/Nex-N2-Pro.toml @@ -0,0 +1,15 @@ +# Sources: https://www.siliconflow.com/models (2026-09-08) +base_model = "nex-agi/nex-n2-pro" + +reasoning_options = [{ type = "budget_tokens", min = 128, max = 32_768 }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.5 +output = 2.5 +cache_read = 0.25 + +[limit] +output = 256_000 diff --git a/providers/siliconflow/models/tencent/Hy3-preview.toml b/providers/siliconflow/models/tencent/Hy3-preview.toml deleted file mode 100644 index fddc3766f5a..00000000000 --- a/providers/siliconflow/models/tencent/Hy3-preview.toml +++ /dev/null @@ -1,18 +0,0 @@ -base_model = "tencent/hy3-preview" -attachment = false -reasoning = true -reasoning_options = [{ type = "budget_tokens", min = 128, max = 32_768 }] -open_weights = false - -[cost] -input = 0.066 -cache_read = 0.029 -output = 0.26 - -[limit] -context = 262_144 -output = 262_144 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/siliconflow/models/tencent/Hy3.toml b/providers/siliconflow/models/tencent/Hy3.toml new file mode 100644 index 00000000000..f304cbd9060 --- /dev/null +++ b/providers/siliconflow/models/tencent/Hy3.toml @@ -0,0 +1,15 @@ +# Sources: https://www.siliconflow.com/models (2026-09-08) +# Limits below are this host's real deltas vs the lab entry (256K/128K): +# SiliconFlow advertises 262K total context and 262K max output +# (https://www.siliconflow.com/models/hy3). +base_model = "tencent/hy3" +reasoning_options = [{ type = "budget_tokens", min = 128, max = 32_768 }] + +[cost] +input = 0.132 +cache_read = 0.033 +output = 0.528 + +[limit] +context = 262_144 +output = 262_144 diff --git a/providers/siliconflow/models/zai-org/GLM-5.1.toml b/providers/siliconflow/models/zai-org/GLM-5.1.toml index 5a341072c0d..248e165981b 100644 --- a/providers/siliconflow/models/zai-org/GLM-5.1.toml +++ b/providers/siliconflow/models/zai-org/GLM-5.1.toml @@ -1,3 +1,6 @@ +# Prices verified against SiliconFlow international, GLM-5.1 model page +# (https://www.siliconflow.com/models/glm-5-1, accessed 2026-09-08): +# input $1.19, cached input $0.6, output $3.74 per M tokens. name = "zai-org/GLM-5.1" description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" family = "glm" @@ -15,14 +18,14 @@ open_weights = true field = "reasoning_content" [cost] -input = 1.4 -output = 4.4 -cache_read = 0.26 +input = 1.19 +output = 3.74 +cache_read = 0.6 cache_write = 0 [limit] context = 205_000 -output = 205_000 +output = 131_000 [modalities] input = ["text"] diff --git a/providers/siliconflow/models/zai-org/GLM-5.2.toml b/providers/siliconflow/models/zai-org/GLM-5.2.toml index 1a6b9e26746..4f4b4d198e8 100644 --- a/providers/siliconflow/models/zai-org/GLM-5.2.toml +++ b/providers/siliconflow/models/zai-org/GLM-5.2.toml @@ -1,3 +1,6 @@ +# Sources: https://www.siliconflow.com/models (2026-09-08) +# Cost values are the published USD list prices on SiliconFlow international +# (https://www.siliconflow.com/pricing, accessed 2026-09-08), not FX conversions by this PR. base_model = "zhipuai/glm-5.2" reasoning_options = [{ type = "effort", values = ["high", "max"] }] @@ -5,8 +8,8 @@ reasoning_options = [{ type = "effort", values = ["high", "max"] }] field = "reasoning_content" [cost] -input = 1.4 -output = 4.4 +input = 1.302 +output = 4.092 cache_read = 0.26 cache_write = 0 diff --git a/providers/siliconflow/models/zai-org/GLM-5.3-Flash.toml b/providers/siliconflow/models/zai-org/GLM-5.3-Flash.toml new file mode 100644 index 00000000000..afb2e9853b8 --- /dev/null +++ b/providers/siliconflow/models/zai-org/GLM-5.3-Flash.toml @@ -0,0 +1,24 @@ +# Sources: https://www.siliconflow.com/models (2026-09-08) +base_model = "zhipuai/glm-5.3-flash" + + +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.03 +cache_write = 0 + +[limit] +context = 1_049_000 +output = 262_000 + +# SiliconFlow serves image input but not video/pdf for this model +# (model page "Support image input: Yes"): https://www.siliconflow.com/models/glm-5-3-flash +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/siliconflow/models/zai-org/GLM-5.3.toml b/providers/siliconflow/models/zai-org/GLM-5.3.toml new file mode 100644 index 00000000000..3de6268387c --- /dev/null +++ b/providers/siliconflow/models/zai-org/GLM-5.3.toml @@ -0,0 +1,16 @@ +# Sources: https://www.siliconflow.com/models (2026-09-08) +base_model = "zhipuai/glm-5.3" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.26 +cache_write = 0 + +[limit] +context = 1_049_000 +output = 262_000 diff --git a/providers/standardcompute/provider.toml b/providers/standardcompute/provider.toml index 2a9d36e18d7..47e78cf63e0 100644 --- a/providers/standardcompute/provider.toml +++ b/providers/standardcompute/provider.toml @@ -15,6 +15,6 @@ # `reasoning_details` (streaming included). name = "Standard Compute" env = ["STANDARDCOMPUTE_API_KEY"] -npm = "@ai-sdk/openai-compatible" +npm = "@openrouter/ai-sdk-provider" api = "https://api.stdcmpt.com/v1" doc = "https://standardcompute.com/models" diff --git a/providers/stepfun-ai-step-plan/models/step-5-preview.toml b/providers/stepfun-ai-step-plan/models/step-5-preview.toml new file mode 100644 index 00000000000..674a616d307 --- /dev/null +++ b/providers/stepfun-ai-step-plan/models/step-5-preview.toml @@ -0,0 +1,11 @@ +# Chat `reasoning_effort` and Messages `output_config.effort` accept +# low/medium/high (accessed 2026-09-20). +# https://platform.stepfun.ai/docs/en/step-plan/integrations/reasoning-api +base_model = "stepfun/step-5-preview" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/stepfun-ai-step-plan/provider.toml b/providers/stepfun-ai-step-plan/provider.toml index 15e9fb3b704..f357f0a530f 100644 --- a/providers/stepfun-ai-step-plan/provider.toml +++ b/providers/stepfun-ai-step-plan/provider.toml @@ -1,12 +1,12 @@ name = "StepFun Step Plan (Global)" env = ["STEPFUN_API_KEY"] npm = "@ai-sdk/openai-compatible" -# Reasoning HTTP format (accessed 2026-06-25): +# Reasoning HTTP format (accessed 2026-09-20): # Step Plan exposes POST /step_plan/v1/chat/completions with top-level # `reasoning_effort` and POST /step_plan/v1/messages with -# `output_config.effort`. step-3.7-flash accepts low/medium/high; -# step-3.5-flash and step-3.5-flash-2603 accept low/high. No plan Responses -# endpoint is listed. +# `output_config.effort`. step-5-preview and step-3.7-flash accept +# low/medium/high; step-3.5-flash and step-3.5-flash-2603 accept low/high. +# No plan Responses endpoint is listed. # Source: # https://platform.stepfun.ai/docs/en/step-plan/integrations/reasoning-api doc = "https://platform.stepfun.ai/docs/en/step-plan/integrations/reasoning-api" diff --git a/providers/stepfun-ai/models/step-5-preview.toml b/providers/stepfun-ai/models/step-5-preview.toml new file mode 100644 index 00000000000..c7a645ba40a --- /dev/null +++ b/providers/stepfun-ai/models/step-5-preview.toml @@ -0,0 +1,21 @@ +# Chat `reasoning_effort`, Messages `output_config.effort`, and Responses +# `reasoning.effort` accept low/medium/high (accessed 2026-09-21). +# https://platform.stepfun.ai/docs/en/guides/models/step-5-preview +# Verified live: GET https://api.stepfun.ai/v1/models lists step-5-preview +# with reasoning_effort_support_list ["low", "medium", "high"] and +# max_input_tokens 1024000; POST /v1/chat/completions succeeds. +# Pricing (USD/MTok): input 1.00, output 2.70, cache_read 0.05 (95% cache +# discount), matching existing mirrors and vendor reporting. +base_model = "stepfun/step-5-preview" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1 +output = 2.7 +cache_read = 0.05 diff --git a/providers/stepfun-ai/provider.toml b/providers/stepfun-ai/provider.toml index 0c84a7aaa5d..84b890902aa 100644 --- a/providers/stepfun-ai/provider.toml +++ b/providers/stepfun-ai/provider.toml @@ -4,8 +4,8 @@ npm = "@ai-sdk/openai-compatible" # Reasoning HTTP format (accessed 2026-06-29): # POST /v1/chat/completions uses top-level `reasoning_effort`; POST /v1/messages # uses `output_config.effort`; POST /v1/responses uses `reasoning.effort`. -# Values are low/medium/high for step-3.7-flash; step-3.5-flash-2603 accepts -# low/high. Responses supports only step-3.7-flash. Chat returns reasoning at +# Values are low/medium/high for step-3.7-flash and step-5-preview; step-3.5-flash-2603 accepts +# low/high. Responses supports step-3.7-flash and step-5-preview. Chat returns reasoning at # `choices[].message.reasoning` or streamed `choices[].delta.reasoning`; # `reasoning_format` is general (default), the latter using `reasoning_content`. # Responses streams `response.reasoning_text.delta`. diff --git a/providers/stepfun-step-plan/models/step-5-preview.toml b/providers/stepfun-step-plan/models/step-5-preview.toml new file mode 100644 index 00000000000..684d9f67224 --- /dev/null +++ b/providers/stepfun-step-plan/models/step-5-preview.toml @@ -0,0 +1,11 @@ +# Chat `reasoning_effort` accepts low/medium/high (accessed 2026-09-20). +# https://platform.stepfun.com/docs/zh/guides/models/step-5-preview +# Step Plan is subscription/credit based with no public per-token price, so no [cost]. +base_model = "stepfun/step-5-preview" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/stepfun-step-plan/provider.toml b/providers/stepfun-step-plan/provider.toml index ebcf390c442..1c0546449a3 100644 --- a/providers/stepfun-step-plan/provider.toml +++ b/providers/stepfun-step-plan/provider.toml @@ -4,7 +4,7 @@ npm = "@ai-sdk/openai-compatible" # Reasoning HTTP format (accessed 2026-06-25): # Step Plan exposes POST /step_plan/v1/chat/completions with top-level # `reasoning_effort` and POST /step_plan/v1/messages with -# `output_config.effort`. step-3.7-flash accepts low/medium/high; +# `output_config.effort`. step-3.7-flash and step-5-preview accept low/medium/high; # step-3.5-flash and step-3.5-flash-2603 accept low/high. No plan Responses # endpoint is listed. # Source: diff --git a/providers/stepfun/models/step-5-preview.toml b/providers/stepfun/models/step-5-preview.toml new file mode 100644 index 00000000000..94aa0f9f5f1 --- /dev/null +++ b/providers/stepfun/models/step-5-preview.toml @@ -0,0 +1,20 @@ +# Chat `reasoning_effort`, Messages `output_config.effort`, and Responses +# `reasoning.effort` accept low/medium/high (accessed 2026-09-20). +# https://platform.stepfun.com/docs/zh/guides/models/step-5-preview +# Cost converted from CNY list price (¥7 / ¥20 / ¥0.35 per 1M tokens) at the +# same 7.2973 CNY/USD rate used by the other stepfun entries (accessed +# 2026-09-20). +# https://platform.stepfun.com/docs/zh/guides/pricing/details +base_model = "stepfun/step-5-preview" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.959 +output = 2.741 +cache_read = 0.048 diff --git a/providers/stepfun/provider.toml b/providers/stepfun/provider.toml index 0de8764f300..b687e0750f1 100644 --- a/providers/stepfun/provider.toml +++ b/providers/stepfun/provider.toml @@ -1,11 +1,12 @@ name = "StepFun (China)" env = ["STEPFUN_API_KEY"] npm = "@ai-sdk/openai-compatible" -# Reasoning HTTP format (accessed 2026-06-25): +# Reasoning HTTP format (accessed 2026-09-20): # POST /v1/chat/completions uses top-level `reasoning_effort`; POST /v1/messages # uses `output_config.effort`; POST /v1/responses uses `reasoning.effort`. -# Values are low/medium/high for step-3.7-flash; step-3.5-flash-2603 accepts -# low/high. Responses supports only step-3.7-flash. Chat returns reasoning at +# Values are low/medium/high for step-5-preview and step-3.7-flash; +# step-3.5-flash-2603 accepts low/high. Responses supports only +# step-5-preview and step-3.7-flash. Chat returns reasoning at # `choices[].message.reasoning` or streamed `choices[].delta.reasoning`; # `reasoning_format` is general (default) or deepseek-style, the latter using # `reasoning_content`. Responses streams `response.reasoning_text.delta`. diff --git a/providers/synthetic/models/hf:deepseek-ai/DeepSeek-V4.1-Flash.toml b/providers/synthetic/models/hf:deepseek-ai/DeepSeek-V4.1-Flash.toml new file mode 100644 index 00000000000..1a610b722d0 --- /dev/null +++ b/providers/synthetic/models/hf:deepseek-ai/DeepSeek-V4.1-Flash.toml @@ -0,0 +1,19 @@ +# GET https://api.synthetic.new/openai/v1/models (accessed 2026-09-16) lists +# hf:deepseek-ai/DeepSeek-V4.1-Flash with reasoning_parameters.efforts +# none|low|high|xhigh|max, text+image input, fp8 quantization. +# Live probes: `reasoning_effort = "none"` disables reasoning; `"xhigh"` streams it. +# Reasoning is returned in the `reasoning` message field. +base_model = "deepseek/deepseek-v4.1-flash" + +reasoning_options = [{ type = "effort", values = ["none", "low", "high", "xhigh", "max"] }] + +interleaved = true + +[cost] +input = 0.6 +output = 1.2 +cache_read = 0.03 + +[limit] +context = 524_288 +output = 65_536 diff --git a/providers/synthetic/models/hf:zai-org/GLM-5.3-Flash.toml b/providers/synthetic/models/hf:zai-org/GLM-5.3-Flash.toml new file mode 100644 index 00000000000..f49d9a0acee --- /dev/null +++ b/providers/synthetic/models/hf:zai-org/GLM-5.3-Flash.toml @@ -0,0 +1,19 @@ +# Pricing, limits, modalities, and reasoning efforts from the live model surface: +# GET https://api.synthetic.new/openai/v1/models (hf:zai-org/GLM-5.3-Flash) +base_model = "zhipuai/glm-5.3-flash" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[modalities] +input = ["text", "image"] + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.04 + +[limit] +context = 524_288 +output = 65_536 diff --git a/providers/tempr/logo.svg b/providers/tempr/logo.svg new file mode 100644 index 00000000000..a9fb18e6892 --- /dev/null +++ b/providers/tempr/logo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/providers/tempr/models/anthropic/claude-fable-5-1.toml b/providers/tempr/models/anthropic/claude-fable-5-1.toml new file mode 100644 index 00000000000..78d27e34265 --- /dev/null +++ b/providers/tempr/models/anthropic/claude-fable-5-1.toml @@ -0,0 +1,16 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Effort: reasoning.effort = low|medium|high|xhigh|max (alias: top-level reasoning_effort) +# /v1/messages: output_config.effort = low|medium|high|xhigh|max +# /v1/responses: reasoning.effort = low|medium|high|xhigh|max +base_model = "anthropic/claude-fable-5-1" +structured_output = true + +reasoning_options = [ + { type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }, +] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 diff --git a/providers/tempr/models/anthropic/claude-fable-5.toml b/providers/tempr/models/anthropic/claude-fable-5.toml new file mode 100644 index 00000000000..03847400952 --- /dev/null +++ b/providers/tempr/models/anthropic/claude-fable-5.toml @@ -0,0 +1,16 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Effort: reasoning.effort = low|medium|high|xhigh|max (alias: top-level reasoning_effort) +# /v1/messages: output_config.effort = low|medium|high|xhigh|max +# /v1/responses: reasoning.effort = low|medium|high|xhigh|max +base_model = "anthropic/claude-fable-5" +structured_output = true + +reasoning_options = [ + { type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }, +] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 diff --git a/providers/tempr/models/anthropic/claude-haiku-4-5-20251001.toml b/providers/tempr/models/anthropic/claude-haiku-4-5-20251001.toml new file mode 100644 index 00000000000..c2502f29a34 --- /dev/null +++ b/providers/tempr/models/anthropic/claude-haiku-4-5-20251001.toml @@ -0,0 +1,18 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Toggle: reasoning.enabled = true|false (reasoning.effort = "none" also turns it off) +# Budget: reasoning.max_tokens (integer reasoning tokens) +# /v1/messages: thinking.type = enabled|disabled; thinking.budget_tokens +# /v1/responses: reasoning.effort = none|low|medium|high (sized to a thinking budget) +base_model = "anthropic/claude-haiku-4-5-20251001" +structured_output = true + +reasoning_options = [ + { type = "toggle" }, + { type = "budget_tokens", min = 1024 }, +] + +[cost] +input = 1 +output = 5 +cache_read = 0.1 +cache_write = 1.25 diff --git a/providers/tempr/models/anthropic/claude-haiku-4-5.toml b/providers/tempr/models/anthropic/claude-haiku-4-5.toml new file mode 100644 index 00000000000..102da98f92e --- /dev/null +++ b/providers/tempr/models/anthropic/claude-haiku-4-5.toml @@ -0,0 +1,18 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Toggle: reasoning.enabled = true|false (reasoning.effort = "none" also turns it off) +# Budget: reasoning.max_tokens (integer reasoning tokens) +# /v1/messages: thinking.type = enabled|disabled; thinking.budget_tokens +# /v1/responses: reasoning.effort = none|low|medium|high (sized to a thinking budget) +base_model = "anthropic/claude-haiku-4-5" +structured_output = true + +reasoning_options = [ + { type = "toggle" }, + { type = "budget_tokens", min = 1024 }, +] + +[cost] +input = 1 +output = 5 +cache_read = 0.1 +cache_write = 1.25 diff --git a/providers/tempr/models/anthropic/claude-opus-4-5-20251101.toml b/providers/tempr/models/anthropic/claude-opus-4-5-20251101.toml new file mode 100644 index 00000000000..1ff845fa823 --- /dev/null +++ b/providers/tempr/models/anthropic/claude-opus-4-5-20251101.toml @@ -0,0 +1,20 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Toggle: reasoning.enabled = true|false (reasoning.effort = "none" also turns it off) +# Effort: reasoning.effort = none|low|medium|high (alias: top-level reasoning_effort) +# Budget: reasoning.max_tokens (integer reasoning tokens) +# /v1/messages: thinking.type = enabled|disabled; output_config.effort = low|medium|high; thinking.budget_tokens +# /v1/responses: reasoning.effort = none|low|medium|high +base_model = "anthropic/claude-opus-4-5-20251101" +structured_output = true + +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["low", "medium", "high"] }, + { type = "budget_tokens", min = 1024 }, +] + +[cost] +input = 5 +output = 25 +cache_read = 0.5 +cache_write = 6.25 diff --git a/providers/tempr/models/anthropic/claude-opus-4-5.toml b/providers/tempr/models/anthropic/claude-opus-4-5.toml new file mode 100644 index 00000000000..35b1bae9829 --- /dev/null +++ b/providers/tempr/models/anthropic/claude-opus-4-5.toml @@ -0,0 +1,20 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Toggle: reasoning.enabled = true|false (reasoning.effort = "none" also turns it off) +# Effort: reasoning.effort = none|low|medium|high (alias: top-level reasoning_effort) +# Budget: reasoning.max_tokens (integer reasoning tokens) +# /v1/messages: thinking.type = enabled|disabled; output_config.effort = low|medium|high; thinking.budget_tokens +# /v1/responses: reasoning.effort = none|low|medium|high +base_model = "anthropic/claude-opus-4-5" +structured_output = true + +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["low", "medium", "high"] }, + { type = "budget_tokens", min = 1024 }, +] + +[cost] +input = 5 +output = 25 +cache_read = 0.5 +cache_write = 6.25 diff --git a/providers/tempr/models/anthropic/claude-opus-4-6.toml b/providers/tempr/models/anthropic/claude-opus-4-6.toml new file mode 100644 index 00000000000..bd4664a3a5f --- /dev/null +++ b/providers/tempr/models/anthropic/claude-opus-4-6.toml @@ -0,0 +1,20 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Toggle: reasoning.enabled = true|false (reasoning.effort = "none" also turns it off) +# Effort: reasoning.effort = none|low|medium|high|max (alias: top-level reasoning_effort) +# Budget: reasoning.max_tokens (integer reasoning tokens) +# /v1/messages: thinking.type = enabled|disabled; output_config.effort = low|medium|high|max; thinking.budget_tokens +# /v1/responses: reasoning.effort = none|low|medium|high|max +base_model = "anthropic/claude-opus-4-6" +structured_output = true + +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["low", "medium", "high", "max"] }, + { type = "budget_tokens", min = 1024 }, +] + +[cost] +input = 5 +output = 25 +cache_read = 0.5 +cache_write = 6.25 diff --git a/providers/tempr/models/anthropic/claude-opus-4-7.toml b/providers/tempr/models/anthropic/claude-opus-4-7.toml new file mode 100644 index 00000000000..5796ecdbe51 --- /dev/null +++ b/providers/tempr/models/anthropic/claude-opus-4-7.toml @@ -0,0 +1,18 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Toggle: reasoning.enabled = true|false (reasoning.effort = "none" also turns it off) +# Effort: reasoning.effort = none|low|medium|high|xhigh|max (alias: top-level reasoning_effort) +# /v1/messages: thinking.type = enabled|disabled; output_config.effort = low|medium|high|xhigh|max +# /v1/responses: reasoning.effort = none|low|medium|high|xhigh|max +base_model = "anthropic/claude-opus-4-7" +structured_output = true + +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }, +] + +[cost] +input = 5 +output = 25 +cache_read = 0.5 +cache_write = 6.25 diff --git a/providers/tempr/models/anthropic/claude-opus-4-8.toml b/providers/tempr/models/anthropic/claude-opus-4-8.toml new file mode 100644 index 00000000000..23f9c6ab18e --- /dev/null +++ b/providers/tempr/models/anthropic/claude-opus-4-8.toml @@ -0,0 +1,18 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Toggle: reasoning.enabled = true|false (reasoning.effort = "none" also turns it off) +# Effort: reasoning.effort = none|low|medium|high|xhigh|max (alias: top-level reasoning_effort) +# /v1/messages: thinking.type = enabled|disabled; output_config.effort = low|medium|high|xhigh|max +# /v1/responses: reasoning.effort = none|low|medium|high|xhigh|max +base_model = "anthropic/claude-opus-4-8" +structured_output = true + +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }, +] + +[cost] +input = 5 +output = 25 +cache_read = 0.5 +cache_write = 6.25 diff --git a/providers/tempr/models/anthropic/claude-opus-5.toml b/providers/tempr/models/anthropic/claude-opus-5.toml new file mode 100644 index 00000000000..ca74b5d1101 --- /dev/null +++ b/providers/tempr/models/anthropic/claude-opus-5.toml @@ -0,0 +1,16 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Effort: reasoning.effort = low|medium|high|xhigh|max (alias: top-level reasoning_effort) +# /v1/messages: output_config.effort = low|medium|high|xhigh|max +# /v1/responses: reasoning.effort = low|medium|high|xhigh|max +base_model = "anthropic/claude-opus-5" +structured_output = true + +reasoning_options = [ + { type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }, +] + +[cost] +input = 5 +output = 25 +cache_read = 0.5 +cache_write = 6.25 diff --git a/providers/tempr/models/anthropic/claude-sonnet-4-5-20250929.toml b/providers/tempr/models/anthropic/claude-sonnet-4-5-20250929.toml new file mode 100644 index 00000000000..8cda1b84187 --- /dev/null +++ b/providers/tempr/models/anthropic/claude-sonnet-4-5-20250929.toml @@ -0,0 +1,18 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Toggle: reasoning.enabled = true|false (reasoning.effort = "none" also turns it off) +# Budget: reasoning.max_tokens (integer reasoning tokens) +# /v1/messages: thinking.type = enabled|disabled; thinking.budget_tokens +# /v1/responses: reasoning.effort = none|low|medium|high (sized to a thinking budget) +base_model = "anthropic/claude-sonnet-4-5-20250929" +structured_output = true + +reasoning_options = [ + { type = "toggle" }, + { type = "budget_tokens", min = 1024 }, +] + +[cost] +input = 3 +output = 15 +cache_read = 0.3 +cache_write = 3.75 diff --git a/providers/tempr/models/anthropic/claude-sonnet-4-5.toml b/providers/tempr/models/anthropic/claude-sonnet-4-5.toml new file mode 100644 index 00000000000..aba63782362 --- /dev/null +++ b/providers/tempr/models/anthropic/claude-sonnet-4-5.toml @@ -0,0 +1,18 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Toggle: reasoning.enabled = true|false (reasoning.effort = "none" also turns it off) +# Budget: reasoning.max_tokens (integer reasoning tokens) +# /v1/messages: thinking.type = enabled|disabled; thinking.budget_tokens +# /v1/responses: reasoning.effort = none|low|medium|high (sized to a thinking budget) +base_model = "anthropic/claude-sonnet-4-5" +structured_output = true + +reasoning_options = [ + { type = "toggle" }, + { type = "budget_tokens", min = 1024 }, +] + +[cost] +input = 3 +output = 15 +cache_read = 0.3 +cache_write = 3.75 diff --git a/providers/tempr/models/anthropic/claude-sonnet-4-6.toml b/providers/tempr/models/anthropic/claude-sonnet-4-6.toml new file mode 100644 index 00000000000..396e2f09c38 --- /dev/null +++ b/providers/tempr/models/anthropic/claude-sonnet-4-6.toml @@ -0,0 +1,20 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Toggle: reasoning.enabled = true|false (reasoning.effort = "none" also turns it off) +# Effort: reasoning.effort = none|low|medium|high|max (alias: top-level reasoning_effort) +# Budget: reasoning.max_tokens (integer reasoning tokens) +# /v1/messages: thinking.type = enabled|disabled; output_config.effort = low|medium|high|max; thinking.budget_tokens +# /v1/responses: reasoning.effort = none|low|medium|high|max +base_model = "anthropic/claude-sonnet-4-6" +structured_output = true + +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["low", "medium", "high", "max"] }, + { type = "budget_tokens", min = 1024 }, +] + +[cost] +input = 3 +output = 15 +cache_read = 0.3 +cache_write = 3.75 diff --git a/providers/tempr/models/anthropic/claude-sonnet-5.toml b/providers/tempr/models/anthropic/claude-sonnet-5.toml new file mode 100644 index 00000000000..a7908c1fc7c --- /dev/null +++ b/providers/tempr/models/anthropic/claude-sonnet-5.toml @@ -0,0 +1,18 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Toggle: reasoning.enabled = true|false (reasoning.effort = "none" also turns it off) +# Effort: reasoning.effort = none|low|medium|high|xhigh|max (alias: top-level reasoning_effort) +# /v1/messages: thinking.type = enabled|disabled; output_config.effort = low|medium|high|xhigh|max +# /v1/responses: reasoning.effort = none|low|medium|high|xhigh|max +base_model = "anthropic/claude-sonnet-5" +structured_output = true + +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }, +] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 diff --git a/providers/tempr/models/google/gemini-3-flash-preview.toml b/providers/tempr/models/google/gemini-3-flash-preview.toml new file mode 100644 index 00000000000..af36c2e66df --- /dev/null +++ b/providers/tempr/models/google/gemini-3-flash-preview.toml @@ -0,0 +1,15 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Effort: reasoning.effort = minimal|low|medium|high (alias: top-level reasoning_effort) +# /v1/messages: output_config.effort = minimal|low|medium|high +# /v1/responses: reasoning.effort = minimal|low|medium|high +base_model = "google/gemini-3-flash-preview" + +reasoning_options = [ + { type = "effort", values = ["minimal", "low", "medium", "high"] }, +] + +[cost] +input = 0.5 +output = 3 +cache_read = 0.05 +input_audio = 1 diff --git a/providers/tempr/models/google/gemini-3.1-flash-lite.toml b/providers/tempr/models/google/gemini-3.1-flash-lite.toml new file mode 100644 index 00000000000..56979e347f7 --- /dev/null +++ b/providers/tempr/models/google/gemini-3.1-flash-lite.toml @@ -0,0 +1,15 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Effort: reasoning.effort = minimal|low|medium|high (alias: top-level reasoning_effort) +# /v1/messages: output_config.effort = minimal|low|medium|high +# /v1/responses: reasoning.effort = minimal|low|medium|high +base_model = "google/gemini-3.1-flash-lite" + +reasoning_options = [ + { type = "effort", values = ["minimal", "low", "medium", "high"] }, +] + +[cost] +input = 0.25 +output = 1.5 +cache_read = 0.025 +input_audio = 0.5 diff --git a/providers/tempr/models/google/gemini-3.1-pro-preview-customtools.toml b/providers/tempr/models/google/gemini-3.1-pro-preview-customtools.toml new file mode 100644 index 00000000000..cc288f0d5ca --- /dev/null +++ b/providers/tempr/models/google/gemini-3.1-pro-preview-customtools.toml @@ -0,0 +1,20 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Effort: reasoning.effort = low|medium|high (alias: top-level reasoning_effort) +# /v1/messages: output_config.effort = low|medium|high +# /v1/responses: reasoning.effort = low|medium|high +base_model = "google/gemini-3.1-pro-preview-customtools" + +reasoning_options = [ + { type = "effort", values = ["low", "medium", "high"] }, +] + +[cost] +input = 2 +output = 12 +cache_read = 0.2 + +[[cost.tiers]] +tier = { type = "context", size = 200000 } +input = 4 +output = 18 +cache_read = 0.4 diff --git a/providers/tempr/models/google/gemini-3.1-pro-preview.toml b/providers/tempr/models/google/gemini-3.1-pro-preview.toml new file mode 100644 index 00000000000..e08f204c81c --- /dev/null +++ b/providers/tempr/models/google/gemini-3.1-pro-preview.toml @@ -0,0 +1,20 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Effort: reasoning.effort = low|medium|high (alias: top-level reasoning_effort) +# /v1/messages: output_config.effort = low|medium|high +# /v1/responses: reasoning.effort = low|medium|high +base_model = "google/gemini-3.1-pro-preview" + +reasoning_options = [ + { type = "effort", values = ["low", "medium", "high"] }, +] + +[cost] +input = 2 +output = 12 +cache_read = 0.2 + +[[cost.tiers]] +tier = { type = "context", size = 200000 } +input = 4 +output = 18 +cache_read = 0.4 diff --git a/providers/tempr/models/google/gemini-3.5-flash-lite.toml b/providers/tempr/models/google/gemini-3.5-flash-lite.toml new file mode 100644 index 00000000000..6863ddd6378 --- /dev/null +++ b/providers/tempr/models/google/gemini-3.5-flash-lite.toml @@ -0,0 +1,14 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Effort: reasoning.effort = minimal|low|medium|high (alias: top-level reasoning_effort) +# /v1/messages: output_config.effort = minimal|low|medium|high +# /v1/responses: reasoning.effort = minimal|low|medium|high +base_model = "google/gemini-3.5-flash-lite" + +reasoning_options = [ + { type = "effort", values = ["minimal", "low", "medium", "high"] }, +] + +[cost] +input = 0.3 +output = 2.5 +cache_read = 0.03 diff --git a/providers/tempr/models/google/gemini-3.5-flash.toml b/providers/tempr/models/google/gemini-3.5-flash.toml new file mode 100644 index 00000000000..bb1b51b4d5e --- /dev/null +++ b/providers/tempr/models/google/gemini-3.5-flash.toml @@ -0,0 +1,15 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Effort: reasoning.effort = minimal|low|medium|high (alias: top-level reasoning_effort) +# /v1/messages: output_config.effort = minimal|low|medium|high +# /v1/responses: reasoning.effort = minimal|low|medium|high +base_model = "google/gemini-3.5-flash" + +reasoning_options = [ + { type = "effort", values = ["minimal", "low", "medium", "high"] }, +] + +[cost] +input = 1.5 +output = 9 +cache_read = 0.15 +input_audio = 1.5 diff --git a/providers/tempr/models/google/gemini-3.6-flash.toml b/providers/tempr/models/google/gemini-3.6-flash.toml new file mode 100644 index 00000000000..aa1d7ce7069 --- /dev/null +++ b/providers/tempr/models/google/gemini-3.6-flash.toml @@ -0,0 +1,15 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Effort: reasoning.effort = minimal|low|medium|high (alias: top-level reasoning_effort) +# /v1/messages: output_config.effort = minimal|low|medium|high +# /v1/responses: reasoning.effort = minimal|low|medium|high +base_model = "google/gemini-3.6-flash" + +reasoning_options = [ + { type = "effort", values = ["minimal", "low", "medium", "high"] }, +] + +[cost] +input = 0.75 +output = 3.75 +cache_read = 0.075 +input_audio = 0.75 diff --git a/providers/tempr/models/google/gemini-3.7-flash.toml b/providers/tempr/models/google/gemini-3.7-flash.toml new file mode 100644 index 00000000000..135e4ffe07a --- /dev/null +++ b/providers/tempr/models/google/gemini-3.7-flash.toml @@ -0,0 +1,15 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Effort: reasoning.effort = low|medium|high (alias: top-level reasoning_effort) +# /v1/messages: output_config.effort = low|medium|high +# /v1/responses: reasoning.effort = low|medium|high +base_model = "google/gemini-3.7-flash" + +reasoning_options = [ + { type = "effort", values = ["low", "medium", "high"] }, +] + +[cost] +input = 0.75 +output = 3.75 +cache_read = 0.075 +input_audio = 0.75 diff --git a/providers/tempr/models/google/gemini-3.8-flash.toml b/providers/tempr/models/google/gemini-3.8-flash.toml new file mode 100644 index 00000000000..44ee2192f92 --- /dev/null +++ b/providers/tempr/models/google/gemini-3.8-flash.toml @@ -0,0 +1,15 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Effort: reasoning.effort = low|medium|high (alias: top-level reasoning_effort) +# /v1/messages: output_config.effort = low|medium|high +# /v1/responses: reasoning.effort = low|medium|high +base_model = "google/gemini-3.8-flash" + +reasoning_options = [ + { type = "effort", values = ["low", "medium", "high"] }, +] + +[cost] +input = 0.75 +output = 3.75 +cache_read = 0.075 +input_audio = 0.75 diff --git a/providers/tempr/models/google/gemini-embedding-001.toml b/providers/tempr/models/google/gemini-embedding-001.toml new file mode 100644 index 00000000000..eb9ce08109f --- /dev/null +++ b/providers/tempr/models/google/gemini-embedding-001.toml @@ -0,0 +1,5 @@ +base_model = "google/gemini-embedding-001" + +[cost] +input = 0.15 +output = 0 diff --git a/providers/tempr/models/google/gemini-embedding-2.toml b/providers/tempr/models/google/gemini-embedding-2.toml new file mode 100644 index 00000000000..a9b158bc61f --- /dev/null +++ b/providers/tempr/models/google/gemini-embedding-2.toml @@ -0,0 +1,15 @@ +# Tempr serves this model on /v1/embeddings, which takes OpenAI's embeddings shape, and +# Gemini gets text input only there: image, audio, video and PDF input isn't reachable. +base_model = "google/gemini-embedding-2" +attachment = false + +[cost] +input = 0.2 +output = 0 + +[limit] +output = 1 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/tempr/models/google/gemini-flash-latest.toml b/providers/tempr/models/google/gemini-flash-latest.toml new file mode 100644 index 00000000000..2aa8e6ce3bd --- /dev/null +++ b/providers/tempr/models/google/gemini-flash-latest.toml @@ -0,0 +1,15 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Effort: reasoning.effort = low|medium|high (alias: top-level reasoning_effort) +# /v1/messages: output_config.effort = low|medium|high +# /v1/responses: reasoning.effort = low|medium|high +base_model = "google/gemini-flash-latest" + +reasoning_options = [ + { type = "effort", values = ["low", "medium", "high"] }, +] + +[cost] +input = 0.75 +output = 3.75 +cache_read = 0.075 +input_audio = 0.75 diff --git a/providers/tempr/models/google/gemini-flash-lite-latest.toml b/providers/tempr/models/google/gemini-flash-lite-latest.toml new file mode 100644 index 00000000000..0c9e9f3e9c8 --- /dev/null +++ b/providers/tempr/models/google/gemini-flash-lite-latest.toml @@ -0,0 +1,14 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Effort: reasoning.effort = minimal|low|medium|high (alias: top-level reasoning_effort) +# /v1/messages: output_config.effort = minimal|low|medium|high +# /v1/responses: reasoning.effort = minimal|low|medium|high +base_model = "google/gemini-flash-lite-latest" + +reasoning_options = [ + { type = "effort", values = ["minimal", "low", "medium", "high"] }, +] + +[cost] +input = 0.3 +output = 2.5 +cache_read = 0.03 diff --git a/providers/tempr/models/google/gemma-4-26b-a4b-it.toml b/providers/tempr/models/google/gemma-4-26b-a4b-it.toml new file mode 100644 index 00000000000..89c5a30b22b --- /dev/null +++ b/providers/tempr/models/google/gemma-4-26b-a4b-it.toml @@ -0,0 +1,9 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Toggle: reasoning.enabled = true|false (reasoning.effort = "none" also turns it off) +# /v1/messages: thinking.type = enabled|disabled +# /v1/responses: reasoning.effort = "none" turns it off, any other level turns it on +base_model = "google/gemma-4-26b-a4b-it" + +reasoning_options = [ + { type = "toggle" }, +] diff --git a/providers/tempr/models/google/gemma-4-31b-it.toml b/providers/tempr/models/google/gemma-4-31b-it.toml new file mode 100644 index 00000000000..94549c23965 --- /dev/null +++ b/providers/tempr/models/google/gemma-4-31b-it.toml @@ -0,0 +1,9 @@ +# Tempr Gateway: https://temprhq.io/docs/gateway-chat-completions#reasoning +# Toggle: reasoning.enabled = true|false (reasoning.effort = "none" also turns it off) +# /v1/messages: thinking.type = enabled|disabled +# /v1/responses: reasoning.effort = "none" turns it off, any other level turns it on +base_model = "google/gemma-4-31b-it" + +reasoning_options = [ + { type = "toggle" }, +] diff --git a/providers/tempr/provider.toml b/providers/tempr/provider.toml new file mode 100644 index 00000000000..70ceee60f53 --- /dev/null +++ b/providers/tempr/provider.toml @@ -0,0 +1,5 @@ +name = "Tempr" +npm = "@ai-sdk/openai-compatible" +env = ["TEMPR_API_KEY"] +api = "https://api.temprhq.io/v1" +doc = "https://temprhq.io/docs/gateway-reference.html" diff --git a/providers/tencent-token-plan/models/hy3.toml b/providers/tencent-token-plan/models/hy3.toml index f44d010abe8..312ca996a61 100644 --- a/providers/tencent-token-plan/models/hy3.toml +++ b/providers/tencent-token-plan/models/hy3.toml @@ -8,7 +8,7 @@ type = "toggle" [[reasoning_options]] type = "effort" -values = ["low", "medium", "high"] +values = ["none", "high"] [cost] input = 0 diff --git a/providers/tencent-token-plan/models/hy4-preview.toml b/providers/tencent-token-plan/models/hy4-preview.toml new file mode 100644 index 00000000000..2a75bc2426a --- /dev/null +++ b/providers/tencent-token-plan/models/hy4-preview.toml @@ -0,0 +1,20 @@ +# China-site list CNY → USD: list_price / tax_rate * FX (accessed 2026-08-26). +# Source USD/1k tokens: input 0.000834, output 0.002501, cache hit 0.000042. +# Catalog is USD / million tokens (×1000). +# Toggle: thinking.type = enabled|disabled (default disabled) +# Effort: reasoning_effort = none|high +# https://cloud.tencent.com/document/product/1823/130055 +# https://cloud.tencent.com/document/product/1823/131208 +base_model = "tencent/hy4-preview" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.834 +output = 2.501 +cache_read = 0.042 diff --git a/providers/tencent-tokenhub/models/hy3.toml b/providers/tencent-tokenhub/models/hy3.toml index f44d010abe8..312ca996a61 100644 --- a/providers/tencent-tokenhub/models/hy3.toml +++ b/providers/tencent-tokenhub/models/hy3.toml @@ -8,7 +8,7 @@ type = "toggle" [[reasoning_options]] type = "effort" -values = ["low", "medium", "high"] +values = ["none", "high"] [cost] input = 0 diff --git a/providers/tencent-tokenhub/models/hy4-preview.toml b/providers/tencent-tokenhub/models/hy4-preview.toml new file mode 100644 index 00000000000..2a75bc2426a --- /dev/null +++ b/providers/tencent-tokenhub/models/hy4-preview.toml @@ -0,0 +1,20 @@ +# China-site list CNY → USD: list_price / tax_rate * FX (accessed 2026-08-26). +# Source USD/1k tokens: input 0.000834, output 0.002501, cache hit 0.000042. +# Catalog is USD / million tokens (×1000). +# Toggle: thinking.type = enabled|disabled (default disabled) +# Effort: reasoning_effort = none|high +# https://cloud.tencent.com/document/product/1823/130055 +# https://cloud.tencent.com/document/product/1823/131208 +base_model = "tencent/hy4-preview" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.834 +output = 2.501 +cache_read = 0.042 diff --git a/providers/tensorx/models/deepseek/deepseek-chat-v3.1.toml b/providers/tensorx/models/deepseek/deepseek-chat-v3.1.toml deleted file mode 100644 index 93143b88c68..00000000000 --- a/providers/tensorx/models/deepseek/deepseek-chat-v3.1.toml +++ /dev/null @@ -1,30 +0,0 @@ -name = "DeepSeek Chat V3.1" -description = "DeepSeek chat model for instruction following, coding, and analysis" -family = "deepseek" -release_date = "2025-08-21" -last_updated = "2025-08-21" -attachment = false -reasoning = true -temperature = true -tool_call = true -knowledge = "2024-11" -open_weights = true - - -[[reasoning_options]] -type = "effort" # API: {"reasoning_effort": }; "none" disables reasoning -values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 0.2 -output = 0.8 -cache_read = 0.05 -cache_write = 0.25 - -[limit] -context = 164000 -output = 163840 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/tensorx/models/deepseek/deepseek-v4-flash.toml b/providers/tensorx/models/deepseek/deepseek-v4-flash.toml deleted file mode 100644 index fdea8b9a03d..00000000000 --- a/providers/tensorx/models/deepseek/deepseek-v4-flash.toml +++ /dev/null @@ -1,13 +0,0 @@ -base_model = "deepseek/deepseek-v4-flash" - -[[reasoning_options]] -type = "toggle" # API: {"chat_template_kwargs": {"thinking": true}} (default off) - -[cost] -input = 0.15 -output = 0.3 -cache_read = 0.0375 -cache_write = 0.1875 - -[limit] -context = 1048576 diff --git a/providers/tensorx/models/deepseek/deepseek-v4-pro-0813.toml b/providers/tensorx/models/deepseek/deepseek-v4-pro-0813.toml new file mode 100644 index 00000000000..82492863b2c --- /dev/null +++ b/providers/tensorx/models/deepseek/deepseek-v4-pro-0813.toml @@ -0,0 +1,19 @@ +base_model = "deepseek/deepseek-v4-pro-0813" +# DeepSeek V4 reasons off by default; toggle chat_template_kwargs.thinking, effort high|max when on. +# https://docs.tensorx.ai/api-reference/reasoning + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["high", "max"] + +[cost] +input = 2.0 +output = 4.0 +cache_read = 0.5 + +[limit] +context = 1048576 +output = 64000 \ No newline at end of file diff --git a/providers/tensorx/models/deepseek/deepseek-v4.1-flash.toml b/providers/tensorx/models/deepseek/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..97d6ea672e1 --- /dev/null +++ b/providers/tensorx/models/deepseek/deepseek-v4.1-flash.toml @@ -0,0 +1,12 @@ +base_model = "deepseek/deepseek-v4.1-flash" + +[[reasoning_options]] +type = "toggle" # API: {"chat_template_kwargs": {"thinking": true}} (default off) + +[cost] +input = 0.5 +output = 1.5 +cache_read = 0.13 + +[limit] +context = 1048576 diff --git a/providers/tensorx/models/nvidia/nemotron-3-super-120b-a12b.toml b/providers/tensorx/models/nvidia/nemotron-3-super-120b-a12b.toml deleted file mode 100644 index 279eb86ea6a..00000000000 --- a/providers/tensorx/models/nvidia/nemotron-3-super-120b-a12b.toml +++ /dev/null @@ -1,11 +0,0 @@ -base_model = "nvidia/nemotron-3-super-120b-a12b" - -[[reasoning_options]] -type = "effort" # API: {"reasoning_effort": }; "none" disables reasoning -values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 0.3 -output = 0.9 -cache_read = 0.075 -cache_write = 0.375 diff --git a/providers/tensorx/models/openai/gpt-oss-120b.toml b/providers/tensorx/models/openai/gpt-oss-120b.toml deleted file mode 100644 index b34a24534e3..00000000000 --- a/providers/tensorx/models/openai/gpt-oss-120b.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "openai/gpt-oss-120b" -knowledge = "2024-10" - -[[reasoning_options]] -type = "effort" # API: {"reasoning_effort": }; reasoning is mandatory, "none" is rejected -values = ["minimal", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 0.04 -output = 0.2 -cache_read = 0.01 -cache_write = 0.05 diff --git a/providers/tensorx/models/qwen/qwen3-coder-30b-a3b-instruct.toml b/providers/tensorx/models/qwen/qwen3-coder-30b-a3b-instruct.toml deleted file mode 100644 index bf2ca2550b6..00000000000 --- a/providers/tensorx/models/qwen/qwen3-coder-30b-a3b-instruct.toml +++ /dev/null @@ -1,10 +0,0 @@ -base_model = "alibaba/qwen3-coder-30b-a3b-instruct" - -[cost] -input = 0.06 -output = 0.25 -cache_read = 0.015 -cache_write = 0.075 - -[limit] -context = 262000 diff --git a/providers/tensorx/models/qwen/qwen3-vl-235b-a22b-instruct.toml b/providers/tensorx/models/qwen/qwen3-vl-235b-a22b-instruct.toml deleted file mode 100644 index 63f03d54a44..00000000000 --- a/providers/tensorx/models/qwen/qwen3-vl-235b-a22b-instruct.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Qwen3 VL 235B-A22B Instruct" -description = "Qwen vision-language model for visual reasoning, documents, and agent tasks" -family = "qwen" -release_date = "2025-09-23" -last_updated = "2025-09-23" -attachment = true -reasoning = false -temperature = true -tool_call = true -knowledge = "2025-03-31" -open_weights = true - -[cost] -input = 0.21 -output = 1.9 -cache_read = 0.0525 -cache_write = 0.2625 - -[limit] -context = 131000 -output = 131072 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/tensorx/models/qwen/qwen3.8-2.4t-a95b.toml b/providers/tensorx/models/qwen/qwen3.8-2.4t-a95b.toml new file mode 100644 index 00000000000..70a027487ce --- /dev/null +++ b/providers/tensorx/models/qwen/qwen3.8-2.4t-a95b.toml @@ -0,0 +1,15 @@ +base_model = "alibaba/qwen3.8-2.4t-a95b" +# Qwen3.8 always reasons; effort xhigh (default) | medium | low. +# https://docs.tensorx.ai/api-reference/reasoning + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] + +[cost] +input = 2.5 +output = 6.0 +cache_read = 0.63 + +[limit] +output = 64000 \ No newline at end of file diff --git a/providers/tensorx/models/qwen/qwen3.8-27b.toml b/providers/tensorx/models/qwen/qwen3.8-27b.toml new file mode 100644 index 00000000000..552bc1978f7 --- /dev/null +++ b/providers/tensorx/models/qwen/qwen3.8-27b.toml @@ -0,0 +1,11 @@ +base_model = "alibaba/qwen3.8-27b" +# Thinking is always on; reasoning_effort low|medium|xhigh (default xhigh). + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] + +[cost] +input = 0.4 +output = 2.4 +cache_read = 0.1 \ No newline at end of file diff --git a/providers/tensorx/models/qwen/qwen3.8-flash-next.toml b/providers/tensorx/models/qwen/qwen3.8-flash-next.toml new file mode 100644 index 00000000000..7df5eb110ec --- /dev/null +++ b/providers/tensorx/models/qwen/qwen3.8-flash-next.toml @@ -0,0 +1,15 @@ +base_model = "alibaba/qwen3.8-flash-next" +# Qwen3.8 always reasons; effort xhigh (default) | medium | low. +# https://docs.tensorx.ai/api-reference/reasoning + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] + +[cost] +input = 0.2 +output = 0.5 +cache_read = 0.05 + +[limit] +output = 64000 \ No newline at end of file diff --git a/providers/tensorx/models/z-ai/glm-4.7.toml b/providers/tensorx/models/z-ai/glm-4.7.toml deleted file mode 100644 index 931c963e6a7..00000000000 --- a/providers/tensorx/models/z-ai/glm-4.7.toml +++ /dev/null @@ -1,19 +0,0 @@ -base_model = "zhipuai/glm-4.7" - -[[reasoning_options]] -type = "effort" # API: {"reasoning_effort": }; "none" disables reasoning -values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 0.6 -output = 2.2 -cache_read = 0.15 -cache_write = 0.75 - -[limit] -context = 200000 -output = 200000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/tensorx/models/z-ai/glm-5.3-flash.toml b/providers/tensorx/models/z-ai/glm-5.3-flash.toml new file mode 100644 index 00000000000..ad6a7edac8e --- /dev/null +++ b/providers/tensorx/models/z-ai/glm-5.3-flash.toml @@ -0,0 +1,20 @@ +base_model = "zhipuai/glm-5.3-flash" +# GLM-5.3-Flash reasons by default; toggle enable_thinking, effort low|high|max (default max). +# Unlike first-party Z.AI, TensorX allows thinking to be disabled (enable_thinking). +# https://docs.tensorx.ai/api-reference/reasoning + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.2 +output = 0.5 +cache_read = 0.05 + +[limit] +context = 1048576 +output = 64000 \ No newline at end of file diff --git a/providers/tensorx/models/z-ai/glm-5.3.toml b/providers/tensorx/models/z-ai/glm-5.3.toml new file mode 100644 index 00000000000..85587ef550d --- /dev/null +++ b/providers/tensorx/models/z-ai/glm-5.3.toml @@ -0,0 +1,20 @@ +base_model = "zhipuai/glm-5.3" +# GLM-5.3 reasons by default; toggle enable_thinking, effort low|high|max (default max). +# Unlike first-party Z.AI, TensorX allows thinking to be disabled (enable_thinking). +# https://docs.tensorx.ai/api-reference/reasoning + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.75 +output = 4.5 +cache_read = 0.44 + +[limit] +context = 1048576 +output = 64000 \ No newline at end of file diff --git a/providers/tinfoil/models/deepseek-v4-1-flash.toml b/providers/tinfoil/models/deepseek-v4-1-flash.toml new file mode 100644 index 00000000000..e3ef163f515 --- /dev/null +++ b/providers/tinfoil/models/deepseek-v4-1-flash.toml @@ -0,0 +1,20 @@ +# Sources (accessed 2026-09-11): +# - https://inference.tinfoil.sh/v1/models (id deepseek-v4-1-flash; experimental; pricing; context 1048576; multimodal; reasoning) +# - https://docs.tinfoil.sh/guides/reasoning.md (host effort surface; sibling deepseek-v4-flash: none|minimal|low|medium|high|xhigh|max) +# - Lab metadata: models/deepseek/deepseek-v4.1-flash.toml +# Effort: reasoning_effort on Tinfoil; off via none (API also exposes thinking disable). Same surface as deepseek-v4-flash. +# status beta: remote catalog marks experimental=true. +base_model = "deepseek/deepseek-v4.1-flash" +status = "beta" + +[[reasoning_options]] +type = "effort" +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.65 +output = 1.45 +cache_read = 0.13 + +[limit] +context = 1_048_576 diff --git a/providers/tinfoil/models/deepseek-v4-flash.toml b/providers/tinfoil/models/deepseek-v4-flash.toml deleted file mode 100644 index e7a7d694206..00000000000 --- a/providers/tinfoil/models/deepseek-v4-flash.toml +++ /dev/null @@ -1,23 +0,0 @@ -# Sources (accessed 2026-08-12): -# - https://inference.tinfoil.sh/v1/models (id deepseek-v4-flash; context 1000000; -# input $0.7/MTok; output $1.9/MTok; cachedInput $0.125/MTok; reasoning true) -# - https://docs.tinfoil.sh/models/chat.md (weights deepseek-ai/DeepSeek-V4-Flash-0731; 1M context) -# - https://docs.tinfoil.sh/guides/reasoning.md (OpenAI-compatible reasoning_effort; response message.reasoning) -# - https://docs.tinfoil.sh/resources/changelog.md (August 2026: added deepseek-v4-flash) -# Effort: lab DeepSeek V4 Flash OpenAI path uses reasoning_effort low|high|max -# (providers/deepseek/models/deepseek-v4-flash.toml). Tinfoil documents only -# reasoning_effort (no separate thinking.type toggle), matching other Tinfoil -# reasoners that author effort-only options. -base_model = "deepseek/deepseek-v4-flash-0731" - -[[reasoning_options]] -type = "effort" -values = ["low", "high", "max"] - -[cost] -input = 0.3 -output = 0.7 -cache_read = 0.06 - -[limit] -context = 1_048_576 diff --git a/providers/tinfoil/models/glm-5-2.toml b/providers/tinfoil/models/glm-5-2.toml deleted file mode 100644 index e8f9e6bdc34..00000000000 --- a/providers/tinfoil/models/glm-5-2.toml +++ /dev/null @@ -1,14 +0,0 @@ -# Pricing source: https://inference.tinfoil.sh/v1/models -base_model = "zhipuai/glm-5.2" - -[[reasoning_options]] -type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] - -[cost] -input = 1.5 -output = 5.25 -cache_read = 0.375 - -[limit] -context = 393_216 diff --git a/providers/tinfoil/models/glm-5-3-flash.toml b/providers/tinfoil/models/glm-5-3-flash.toml new file mode 100644 index 00000000000..9762fb93463 --- /dev/null +++ b/providers/tinfoil/models/glm-5-3-flash.toml @@ -0,0 +1,18 @@ +# Sources (accessed 2026-09-03): +# - https://inference.tinfoil.sh/v1/models +# - https://docs.tinfoil.sh/models/chat.md (weights RedHatAI/GLM-5.3-Flash-NVFP4) +# - https://docs.tinfoil.sh/guides/reasoning.md +# Effort: reasoning_effort = low|high|max on Tinfoil; reasoning is always on (no none/toggle). +base_model = "zhipuai/glm-5.3-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.4 +output = 1.25 +cache_read = 0.1 + +[limit] +context = 1_048_576 diff --git a/providers/tinfoil/models/glm-5-3.toml b/providers/tinfoil/models/glm-5-3.toml new file mode 100644 index 00000000000..5452c715c46 --- /dev/null +++ b/providers/tinfoil/models/glm-5-3.toml @@ -0,0 +1,18 @@ +# Sources (accessed 2026-09-03): +# - https://inference.tinfoil.sh/v1/models (id glm-5-3; context 1048576; pricing input 1.8 / output 5.75 / cache_read 0.45 per 1M) +# - https://docs.tinfoil.sh/models/chat.md (GLM-5.3; 1M context; weights Inferact/GLM-5.3-NVFP4) +# - https://docs.tinfoil.sh/guides/reasoning.md (glm-5-3 effort low|high|max; reasoning always on) +# Effort: reasoning_effort = low|high|max on Tinfoil; reasoning is always on (no none; enable_thinking not honoured). +base_model = "zhipuai/glm-5.3" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.8 +output = 5.75 +cache_read = 0.45 + +[limit] +context = 1_048_576 diff --git a/providers/tinfoil/models/gpt-oss-safeguard-120b.toml b/providers/tinfoil/models/gpt-oss-safeguard-120b.toml index 4ff8d43f992..f1c52ce51c8 100644 --- a/providers/tinfoil/models/gpt-oss-safeguard-120b.toml +++ b/providers/tinfoil/models/gpt-oss-safeguard-120b.toml @@ -1,11 +1,8 @@ base_model = "openai/gpt-oss-safeguard-120b" name = "gpt-oss-safeguard-120b" +reasoning = false knowledge = "2024-06" -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] - [cost] input = 0.15 output = 0.6 diff --git a/providers/tinfoil/models/kimi-k3.toml b/providers/tinfoil/models/kimi-k3.toml index d15645dd9ab..208c3ee17e9 100644 --- a/providers/tinfoil/models/kimi-k3.toml +++ b/providers/tinfoil/models/kimi-k3.toml @@ -1,12 +1,12 @@ -# Sources (accessed 2026-08-08): -# - https://inference.tinfoil.sh/v1/models (id kimi-k3; context 256000; input $2/MTok; output $6/MTok; reasoning true) -# - https://docs.tinfoil.sh/guides/reasoning.md (reasoning_effort on OpenAI-compatible chat; standard scale none…max for Tinfoil chat reasoners) -# Effort values mirror providers/tinfoil/models/kimi-k2-6.toml and glm-5-2/gemma4-31b peers on this host. +# Sources (accessed 2026-08-26): +# - https://inference.tinfoil.sh/v1/models +# - https://docs.tinfoil.sh/guides/reasoning.md +# Effort: reasoning_effort = low|high|max on Tinfoil; reasoning is always on. base_model = "moonshotai/kimi-k3" [[reasoning_options]] type = "effort" -values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] +values = ["low", "high", "max"] [cost] input = 4 diff --git a/providers/togetherai/models/deepseek-ai/DeepSeek-V4.1-Flash.toml b/providers/togetherai/models/deepseek-ai/DeepSeek-V4.1-Flash.toml new file mode 100644 index 00000000000..be629662429 --- /dev/null +++ b/providers/togetherai/models/deepseek-ai/DeepSeek-V4.1-Flash.toml @@ -0,0 +1,13 @@ +base_model = "deepseek/deepseek-v4.1-flash" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.006 + +[limit] +context = 1_048_576 diff --git a/providers/togetherai/models/zai-org/GLM-5.3-Flash.toml b/providers/togetherai/models/zai-org/GLM-5.3-Flash.toml new file mode 100644 index 00000000000..5b8b80ebcb7 --- /dev/null +++ b/providers/togetherai/models/zai-org/GLM-5.3-Flash.toml @@ -0,0 +1,17 @@ +base_model = "zhipuai/glm-5.3-flash" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.15 +output = 0.50 +cache_read = 0.03 + +[limit] +context = 1_048_575 +output = 400_000 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/togetherai/models/zai-org/GLM-5.3.toml b/providers/togetherai/models/zai-org/GLM-5.3.toml new file mode 100644 index 00000000000..3ce03e88dba --- /dev/null +++ b/providers/togetherai/models/zai-org/GLM-5.3.toml @@ -0,0 +1,14 @@ +base_model = "zhipuai/glm-5.3" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1.40 +output = 4.40 +cache_read = 0.26 + +[limit] +context = 1_048_576 +output = 262_144 diff --git a/providers/tokengo/logo.svg b/providers/tokengo/logo.svg new file mode 100644 index 00000000000..c751e6b5d49 --- /dev/null +++ b/providers/tokengo/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/providers/tokengo/models/deepseek/deepseek-v3.1.toml b/providers/tokengo/models/deepseek/deepseek-v3.1.toml new file mode 100644 index 00000000000..2f6f5fb3054 --- /dev/null +++ b/providers/tokengo/models/deepseek/deepseek-v3.1.toml @@ -0,0 +1,14 @@ +# Toggle: thinking.type = enabled|disabled +# Pricing (USD/MTok, accessed 2026-08-27): +# - Public hub $0.19/$0.71: https://www.tokengo.com/models +# - Exact console rates incl. cache $0.19/$0.71/$0.06 (TokenGo model table ratios) +# TokenGo OpenAI-compatible extra_body; same hybrid on/off as typical DeepSeek V3.1 openai-compat peers. +base_model = "deepseek/deepseek-v3.1" + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.19 +output = 0.71 +cache_read = 0.06 diff --git a/providers/tokengo/models/deepseek/deepseek-v3.2.toml b/providers/tokengo/models/deepseek/deepseek-v3.2.toml new file mode 100644 index 00000000000..a936fe664d5 --- /dev/null +++ b/providers/tokengo/models/deepseek/deepseek-v3.2.toml @@ -0,0 +1,14 @@ +# Toggle: thinking.type = enabled|disabled +# Pricing (USD/MTok, accessed 2026-08-27): +# - Public hub (rounded $0.22/$0.33): https://www.tokengo.com/models +# - Exact console rates incl. cache $0.2174/$0.326/$0.06 (TokenGo model table ratios) +# TokenGo OpenAI-compatible extra_body; same hybrid on/off as typical DeepSeek V3.2 openai-compat peers. +base_model = "deepseek/deepseek-v3.2" + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.2174 +output = 0.326 +cache_read = 0.06 diff --git a/providers/tokengo/models/deepseek/deepseek-v4-flash.toml b/providers/tokengo/models/deepseek/deepseek-v4-flash.toml new file mode 100644 index 00000000000..367e9b40ecd --- /dev/null +++ b/providers/tokengo/models/deepseek/deepseek-v4-flash.toml @@ -0,0 +1,19 @@ +# Toggle: thinking.type = enabled|disabled +# Effort: reasoning_effort = low|high|max +# Pricing (USD/MTok, accessed 2026-08-27): +# - Public hub (rounded $0.10/$0.20): https://www.tokengo.com/models +# - Exact console rates incl. cache $0.098/$0.196/$0.028 (TokenGo model table ratios) +# TokenGo OpenAI-compatible extra_body; same controls as typical DeepSeek V4 Flash openai-compat peers. +base_model = "deepseek/deepseek-v4-flash" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.098 +output = 0.196 +cache_read = 0.028 diff --git a/providers/tokengo/models/deepseek/deepseek-v4-pro.toml b/providers/tokengo/models/deepseek/deepseek-v4-pro.toml new file mode 100644 index 00000000000..a1361522479 --- /dev/null +++ b/providers/tokengo/models/deepseek/deepseek-v4-pro.toml @@ -0,0 +1,18 @@ +# Toggle: thinking.type = enabled|disabled +# Effort: reasoning_effort = high|max +# Pricing (USD/MTok, accessed 2026-08-27): +# - Public hub (rounded $0.43/$0.87): https://www.tokengo.com/models +# - Exact console rates $0.435/$0.87 (no cache ratio listed) +# TokenGo OpenAI-compatible extra_body; same controls as typical DeepSeek V4 Pro openai-compat peers. +base_model = "deepseek/deepseek-v4-pro" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["high", "max"] + +[cost] +input = 0.435 +output = 0.87 diff --git a/providers/tokengo/models/minimax/minimax-m2.5.toml b/providers/tokengo/models/minimax/minimax-m2.5.toml new file mode 100644 index 00000000000..92c384bee18 --- /dev/null +++ b/providers/tokengo/models/minimax/minimax-m2.5.toml @@ -0,0 +1,11 @@ +# Always-on thinking; no TokenGo on/off or effort field (same as typical MiniMax-M2.5 peers). +# Pricing (USD/MTok, accessed 2026-08-27): +# - Public hub $0.30/$1.20: https://www.tokengo.com/models +# - Exact console rates incl. cache $0.30/$1.20/$0.03 (TokenGo model table ratios) +base_model = "minimax/MiniMax-M2.5" +reasoning_options = [] + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.03 diff --git a/providers/tokengo/models/moonshotai/kimi-k2.6.toml b/providers/tokengo/models/moonshotai/kimi-k2.6.toml new file mode 100644 index 00000000000..e41d4f4bbdf --- /dev/null +++ b/providers/tokengo/models/moonshotai/kimi-k2.6.toml @@ -0,0 +1,14 @@ +# Toggle: thinking.type = enabled|disabled +# Pricing (USD/MTok, accessed 2026-08-27): +# - Public hub $0.95/$4.00: https://www.tokengo.com/models +# - Exact console rates incl. cache $0.95/$4.00/$0.16 (TokenGo model table ratios) +# TokenGo OpenAI-compatible extra_body; same on/off as typical Kimi K2.6 openai-compat peers. +base_model = "moonshotai/kimi-k2.6" + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.95 +output = 4.0 +cache_read = 0.16 diff --git a/providers/tokengo/models/moonshotai/kimi-k3.toml b/providers/tokengo/models/moonshotai/kimi-k3.toml new file mode 100644 index 00000000000..c7bb5114efd --- /dev/null +++ b/providers/tokengo/models/moonshotai/kimi-k3.toml @@ -0,0 +1,19 @@ +# Toggle: thinking.type = enabled|disabled +# Effort: reasoning_effort = low|high|max +# Pricing (USD/MTok, accessed 2026-08-27): +# - Public hub $3.00/$15.00: https://www.tokengo.com/models +# - Exact console rates incl. cache $3.00/$15.00/$0.30 (TokenGo model table ratios) +# TokenGo OpenAI-compatible extra_body; same controls as typical Kimi K3 openai-compat peers. +base_model = "moonshotai/kimi-k3" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 3.0 +output = 15.0 +cache_read = 0.3 diff --git a/providers/tokengo/models/qwen/qwen3.5-397b-a17b.toml b/providers/tokengo/models/qwen/qwen3.5-397b-a17b.toml new file mode 100644 index 00000000000..75c9d1d86f2 --- /dev/null +++ b/providers/tokengo/models/qwen/qwen3.5-397b-a17b.toml @@ -0,0 +1,15 @@ +# Toggle: enable_thinking true|false +# Pricing (USD/MTok, accessed 2026-08-27): +# - Public hub $0.40/$2.65: https://www.tokengo.com/models +# - Exact console rates incl. cache $0.40/$2.65/$0.20 (TokenGo model table ratios) +# TokenGo OpenAI-compatible extra_body; same on/off control as typical Qwen relays. +# No thinking_budget on this host (generic relays omit DashScope budget). +base_model = "alibaba/qwen3.5-397b-a17b" + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.4 +output = 2.65 +cache_read = 0.2 diff --git a/providers/tokengo/models/z-ai/glm-5.1.toml b/providers/tokengo/models/z-ai/glm-5.1.toml new file mode 100644 index 00000000000..17bf4336a01 --- /dev/null +++ b/providers/tokengo/models/z-ai/glm-5.1.toml @@ -0,0 +1,14 @@ +# Toggle: thinking.type = enabled|disabled +# Pricing (USD/MTok, accessed 2026-08-27): +# - Public hub $1.40/$4.40: https://www.tokengo.com/models +# - Exact console rates incl. cache $1.40/$4.40/$0.26 (TokenGo model table ratios) +# TokenGo OpenAI-compatible extra_body; same on/off as typical GLM-5.1 openai-compat peers. +base_model = "zhipuai/glm-5.1" + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.26 diff --git a/providers/tokengo/models/z-ai/glm-5.2.toml b/providers/tokengo/models/z-ai/glm-5.2.toml new file mode 100644 index 00000000000..2ab99ffa116 --- /dev/null +++ b/providers/tokengo/models/z-ai/glm-5.2.toml @@ -0,0 +1,15 @@ +# Effort: reasoning_effort = high|max +# Pricing (USD/MTok, accessed 2026-08-27): +# - Public hub $1.40/$4.40: https://www.tokengo.com/models +# - Exact console rates incl. cache $1.40/$4.40/$0.26 (TokenGo model table ratios) +# TokenGo OpenAI-compatible extra_body; same effort set as typical GLM-5.2 openai-compat peers. +base_model = "zhipuai/glm-5.2" + +[[reasoning_options]] +type = "effort" +values = ["high", "max"] + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.26 diff --git a/providers/tokengo/models/z-ai/glm-5.3-flash.toml b/providers/tokengo/models/z-ai/glm-5.3-flash.toml new file mode 100644 index 00000000000..ed041093586 --- /dev/null +++ b/providers/tokengo/models/z-ai/glm-5.3-flash.toml @@ -0,0 +1,15 @@ +# Effort: reasoning_effort = low|high|max +# Pricing (USD/MTok, accessed 2026-08-27): +# - Public hub (rounded $0.07/$0.02): https://www.tokengo.com/models +# - Exact console rates incl. cache $0.075/$0.025/$0.015 (TokenGo model table ratios) +# TokenGo OpenAI-compatible extra_body; same effort set as typical GLM-5.3-Flash openai-compat peers. +base_model = "zhipuai/glm-5.3-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.075 +output = 0.025 +cache_read = 0.015 diff --git a/providers/tokengo/models/z-ai/glm-5.3.toml b/providers/tokengo/models/z-ai/glm-5.3.toml new file mode 100644 index 00000000000..9f49bfaa96d --- /dev/null +++ b/providers/tokengo/models/z-ai/glm-5.3.toml @@ -0,0 +1,15 @@ +# Effort: reasoning_effort = low|high|max +# Pricing (USD/MTok, accessed 2026-08-27): +# - Public hub $1.40/$4.40: https://www.tokengo.com/models +# - Exact console rates incl. cache $1.40/$4.40/$0.26 (TokenGo model table ratios) +# TokenGo OpenAI-compatible extra_body; same effort set as typical GLM-5.3 openai-compat peers. +base_model = "zhipuai/glm-5.3" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.26 diff --git a/providers/tokengo/models/z-ai/glm-5.toml b/providers/tokengo/models/z-ai/glm-5.toml new file mode 100644 index 00000000000..fd48f0c5225 --- /dev/null +++ b/providers/tokengo/models/z-ai/glm-5.toml @@ -0,0 +1,14 @@ +# Toggle: thinking.type = enabled|disabled +# Pricing (USD/MTok, accessed 2026-08-27): +# - Public hub $0.89/$3.26: https://www.tokengo.com/models +# - Exact console rates incl. cache $0.89/$3.2647/$0.2226 (TokenGo model table ratios) +# TokenGo OpenAI-compatible extra_body; same on/off as typical GLM-5 openai-compat peers. +base_model = "zhipuai/glm-5" + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.89 +output = 3.2647 +cache_read = 0.2226 diff --git a/providers/tokengo/provider.toml b/providers/tokengo/provider.toml new file mode 100644 index 00000000000..a73c9b417b1 --- /dev/null +++ b/providers/tokengo/provider.toml @@ -0,0 +1,17 @@ +# TokenGo is an OpenAI-compatible multi-model gateway (POST /v1/chat/completions). +# Sources (accessed 2026-08-27), and what each supports: +# - https://www.tokengo.com/docs/documentation/getting-started/introduction +# Unified OpenAI-compatible API; pay-as-you-go USD per million tokens; Model Hub for rates. +# - https://www.tokengo.com/docs/documentation/getting-started/quickstart +# Chat completions base shape (model + messages). +# - https://www.tokengo.com/models +# Public Model Hub input/output list prices (some cards round). Cache is not shown. +# Exact USD/MTok including cache_read come from TokenGo's first-party console model +# table (model/completion/cache ratios) accessed 2026-08-27. +# Reasoning extra_body matches typical openai-compat peers per model (thinking.type / +# reasoning_effort / enable_thinking). See each model file for the exact wire path. +name = "TokenGo" +env = ["TOKENGO_API_KEY"] +npm = "@ai-sdk/openai-compatible" +doc = "https://www.tokengo.com/docs" +api = "https://api.tokengo.com/v1" diff --git a/providers/tokenrouter/logo.svg b/providers/tokenrouter/logo.svg new file mode 100644 index 00000000000..56c8191b295 --- /dev/null +++ b/providers/tokenrouter/logo.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/providers/tokenrouter/models/z-ai/glm-5.3-free.toml b/providers/tokenrouter/models/z-ai/glm-5.3-free.toml new file mode 100644 index 00000000000..0e3d3ff1864 --- /dev/null +++ b/providers/tokenrouter/models/z-ai/glm-5.3-free.toml @@ -0,0 +1,13 @@ +base_model = "zhipuai/glm-5.3" +name = "GLM-5.3 (free)" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0 +output = 0 \ No newline at end of file diff --git a/providers/tokenrouter/provider.toml b/providers/tokenrouter/provider.toml new file mode 100644 index 00000000000..a0fa188e055 --- /dev/null +++ b/providers/tokenrouter/provider.toml @@ -0,0 +1,10 @@ +name = "TokenRouter" +env = ["TOKENROUTER_API_KEY"] +npm = "@ai-sdk/openai-compatible" +# Raw HTTP reasoning controls (live-verified 2026-08-29): +# Chat POST `/v1/chat/completions` accepts `reasoning_effort = +# low|high|max` (verified set for z-ai/glm-5.3-free); thinking is +# always on and reasoning returns in `reasoning_content`. +# https://www.tokenrouter.com +api = "https://api.tokenrouter.com/v1" +doc = "https://www.tokenrouter.com/docs/tokenrouter-feature-guide/" \ No newline at end of file diff --git a/providers/trustedrouter/models/auto.toml b/providers/trustedrouter/models/trustedrouter/auto.toml similarity index 100% rename from providers/trustedrouter/models/auto.toml rename to providers/trustedrouter/models/trustedrouter/auto.toml diff --git a/providers/trustedrouter/models/cheap.toml b/providers/trustedrouter/models/trustedrouter/cheap.toml similarity index 100% rename from providers/trustedrouter/models/cheap.toml rename to providers/trustedrouter/models/trustedrouter/cheap.toml diff --git a/providers/trustedrouter/models/e2e.toml b/providers/trustedrouter/models/trustedrouter/e2e.toml similarity index 100% rename from providers/trustedrouter/models/e2e.toml rename to providers/trustedrouter/models/trustedrouter/e2e.toml diff --git a/providers/trustedrouter/models/fast.toml b/providers/trustedrouter/models/trustedrouter/fast.toml similarity index 100% rename from providers/trustedrouter/models/fast.toml rename to providers/trustedrouter/models/trustedrouter/fast.toml diff --git a/providers/trustedrouter/models/synth-code.toml b/providers/trustedrouter/models/trustedrouter/synth-code.toml similarity index 100% rename from providers/trustedrouter/models/synth-code.toml rename to providers/trustedrouter/models/trustedrouter/synth-code.toml diff --git a/providers/trustedrouter/models/synth.toml b/providers/trustedrouter/models/trustedrouter/synth.toml similarity index 100% rename from providers/trustedrouter/models/synth.toml rename to providers/trustedrouter/models/trustedrouter/synth.toml diff --git a/providers/trustedrouter/models/zdr.toml b/providers/trustedrouter/models/trustedrouter/zdr.toml similarity index 100% rename from providers/trustedrouter/models/zdr.toml rename to providers/trustedrouter/models/trustedrouter/zdr.toml diff --git a/providers/umans-ai-coding-plan/models/umans-coder.toml b/providers/umans-ai-coding-plan/models/umans-coder.toml index 2d6c1c8b2c2..ca486077ae9 100644 --- a/providers/umans-ai-coding-plan/models/umans-coder.toml +++ b/providers/umans-ai-coding-plan/models/umans-coder.toml @@ -1,10 +1,11 @@ -base_model = "moonshotai/kimi-k2.7-code" +base_model = "zhipuai/glm-5.3-flash" name = "Umans Coder" temperature = false -# This alias currently routes to Kimi K2.7 Code: reasoning is always on -# (`can_disable=false`) with no effort levels (accessed 2026-06-25). +# This alias routes to GLM-5.3-Flash since 2026-09-09 (it rode Kimi K2.7 Code +# before): reasoning is always on (`can_disable=false`) WITH effort levels +# low|high|max, default max (accessed 2026-09-08): # https://api.code.umans.ai/v1/models/info -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] [interleaved] field = "reasoning_content" @@ -15,5 +16,9 @@ output = 0 cache_read = 0 cache_write = 0 +[limit] +context = 1_048_576 +output = 131_071 + [modalities] -input = ["text", "image"] +input = ["text", "image", "video"] diff --git a/providers/umans-ai-coding-plan/models/umans-glm-5.2.toml b/providers/umans-ai-coding-plan/models/umans-glm-5.2.toml deleted file mode 100644 index ccc697fa08b..00000000000 --- a/providers/umans-ai-coding-plan/models/umans-glm-5.2.toml +++ /dev/null @@ -1,20 +0,0 @@ -base_model = "zhipuai/glm-5.2" -name = "GLM 5.2" -# Live metadata: levels none/high/max, default high, and `can_disable=true` -# (accessed 2026-06-25): https://api.code.umans.ai/v1/models/info -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["high", "max"] }] - -[interleaved] -field = "reasoning_content" - -[cost] -input = 0 -output = 0 -cache_read = 0 -cache_write = 0 - -[limit] -context = 405_504 - -[modalities] -input = ["text", "image"] diff --git a/providers/umans-ai-coding-plan/models/umans-glm-5.3-flash.toml b/providers/umans-ai-coding-plan/models/umans-glm-5.3-flash.toml new file mode 100644 index 00000000000..96bbd094e14 --- /dev/null +++ b/providers/umans-ai-coding-plan/models/umans-glm-5.3-flash.toml @@ -0,0 +1,29 @@ +# Effort only: reasoning_effort = low|high|max — thinking is ALWAYS ON (the +# checkpoint's chat template has no non-thinking mode; verified against the +# released repo 2026-08-26 and the live lab card since then). The released +# id's live metadata mirrors that shape: levels low/high/max, default max, +# `can_disable=false`: https://api.code.umans.ai/v1/models/info +# Coding-plan keys call the same pay-per-token catalog id (released +# 2026-09-09, llm-gateway 00350); plan usage is flat-fee, so cost is 0 here. +# limit.output is cap-1 on purpose: the gateway 400s max_tokens >= +# max_completion_tokens (131072), so 131071 is the largest value that serves +# (its advertised `recommended_max_tokens`). +base_model = "zhipuai/glm-5.3-flash" +name = "GLM 5.3 Flash" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 1_048_576 +output = 131_071 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/umans-ai-coding-plan/models/umans-kimi-k2.7.toml b/providers/umans-ai-coding-plan/models/umans-kimi-k2.7.toml deleted file mode 100644 index 43ef003cf3a..00000000000 --- a/providers/umans-ai-coding-plan/models/umans-kimi-k2.7.toml +++ /dev/null @@ -1,14 +0,0 @@ -base_model = "moonshotai/kimi-k2.7-code" -name = "Kimi K2.7 Code" -# Live metadata says reasoning is always on (`can_disable=false`) with no effort -# levels (accessed 2026-06-25): https://api.code.umans.ai/v1/models/info -reasoning_options = [] - -[interleaved] -field = "reasoning_content" - -[cost] -input = 0 -output = 0 -cache_read = 0 -cache_write = 0 diff --git a/providers/umans-ai/models/umans-coder.toml b/providers/umans-ai/models/umans-coder.toml index 7bec758f0a0..f4f91982bbb 100644 --- a/providers/umans-ai/models/umans-coder.toml +++ b/providers/umans-ai/models/umans-coder.toml @@ -1,21 +1,23 @@ -base_model = "moonshotai/kimi-k2.7-code" +base_model = "zhipuai/glm-5.3-flash" name = "Umans Coder" temperature = false -# This alias currently routes to Kimi K2.7 Code: reasoning is always on -# (`can_disable=false`) with no effort levels (accessed 2026-06-25). +# This alias routes to GLM-5.3-Flash since 2026-09-09 (it rode Kimi K2.7 Code +# before): reasoning is always on (`can_disable=false`) WITH effort levels +# low|high|max, default max (accessed 2026-09-08): # https://api.code.umans.ai/v1/models/info -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] [interleaved] field = "reasoning_content" [cost] -input = 0.95 -output = 4.00 -cache_read = 0.19 +input = 0.15 +output = 0.50 +cache_read = 0.03 [limit] -output = 32_768 +context = 1_048_576 +output = 131_071 [modalities] -input = ["text", "image"] +input = ["text", "image", "video"] diff --git a/providers/umans-ai/models/umans-glm-5.2.toml b/providers/umans-ai/models/umans-glm-5.2.toml deleted file mode 100644 index 9e2184d3818..00000000000 --- a/providers/umans-ai/models/umans-glm-5.2.toml +++ /dev/null @@ -1,19 +0,0 @@ -base_model = "zhipuai/glm-5.2" -name = "GLM 5.2" -# Live metadata: levels none/high/max, default high, and `can_disable=true` -# (accessed 2026-06-25): https://api.code.umans.ai/v1/models/info -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["high", "max"] }] - -[interleaved] -field = "reasoning_content" - -[cost] -input = 1.40 -output = 4.40 -cache_read = 0.26 - -[limit] -context = 405_504 - -[modalities] -input = ["text", "image"] diff --git a/providers/umans-ai/models/umans-glm-5.3-flash.toml b/providers/umans-ai/models/umans-glm-5.3-flash.toml new file mode 100644 index 00000000000..60262713ba9 --- /dev/null +++ b/providers/umans-ai/models/umans-glm-5.3-flash.toml @@ -0,0 +1,30 @@ +# Effort only: reasoning_effort = low|high|max — thinking is ALWAYS ON (the +# checkpoint's chat template has no non-thinking mode; verified against the +# released repo 2026-08-26 and the live lab card since then). The released +# id's live metadata mirrors that shape: levels low/high/max, default max, +# `can_disable=false`: https://api.code.umans.ai/v1/models/info +# Pay-per-token (llm-gateway 00350, released 2026-09-09): Umans AI's public +# rate, which is what GET /v1/models renders — the publisher's list rates +# ($0.15 / $0.50 / $0.03 per 1M); the 50% launch promo (to 2026-09-09) is not +# mirrored. +# limit.output is cap-1 on purpose: the gateway 400s max_tokens >= +# max_completion_tokens (131072), so 131071 is the largest value that serves +# (its advertised `recommended_max_tokens`). +base_model = "zhipuai/glm-5.3-flash" +name = "GLM 5.3 Flash" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.15 +output = 0.50 +cache_read = 0.03 + +[limit] +context = 1_048_576 +output = 131_071 + +[modalities] +input = ["text", "image", "video"] diff --git a/providers/umans-ai/models/umans-kimi-k2.7.toml b/providers/umans-ai/models/umans-kimi-k2.7.toml deleted file mode 100644 index 913774482d5..00000000000 --- a/providers/umans-ai/models/umans-kimi-k2.7.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "moonshotai/kimi-k2.7-code" -name = "Kimi K2.7 Code" -# Live metadata says reasoning is always on (`can_disable=false`) with no effort -# levels (accessed 2026-06-25): https://api.code.umans.ai/v1/models/info -reasoning_options = [] - -[interleaved] -field = "reasoning_content" - -[cost] -input = 0.95 -output = 4.00 -cache_read = 0.19 - -[limit] -output = 32_768 diff --git a/providers/vancine/logo.svg b/providers/vancine/logo.svg new file mode 100644 index 00000000000..965979730de --- /dev/null +++ b/providers/vancine/logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/providers/vancine/models/MiniMax-M3.toml b/providers/vancine/models/MiniMax-M3.toml new file mode 100644 index 00000000000..80fe26fadfc --- /dev/null +++ b/providers/vancine/models/MiniMax-M3.toml @@ -0,0 +1,22 @@ +# Sources (accessed 2026-06-25): +# https://platform.minimax.io/docs/api-reference/text-openai-api +# https://docs.gmicloud.ai/inference-engine/billing/price +# Lab reasoning controls on the OpenAI-compatible path: $.thinking.type +# = "enabled" | "adaptive" | "disabled". reasoning_split=true returns the +# reasoning stream in a separate reasoning_content field. +# Interleaved field: reasoning_content. +# Lab cost (token plan): input 0.30 / output 1.20 / cache_read 0.06. +# Vancine public pricing (/api/pricing) is 0.24 / 0.96 / 0.048 (USD/MTok). +# No tiered pricing is published on the public Vancine pricing endpoint. +base_model = "minimax/MiniMax-M3" + +[[reasoning_options]] +type = "toggle" + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.24 +output = 0.96 +cache_read = 0.048 diff --git a/providers/vancine/models/deepseek-v4.1-flash.toml b/providers/vancine/models/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..3b03b84f862 --- /dev/null +++ b/providers/vancine/models/deepseek-v4.1-flash.toml @@ -0,0 +1,35 @@ +# DeepSeek official sources and lab model (accessed 2026-09-11): +# https://api-docs.deepseek.com/quick_start/pricing/ +# https://api-docs.deepseek.com/guides/thinking_mode/ +# models/deepseek/deepseek-v4.1-flash.toml +# providers/deepseek/models/deepseek-flash.toml +# Vancine current platform model ID deepseek-v4.1-flash and public pricing +# re-verified from https://vancine.com/api/pricing at 2026-09-15T07:51:35Z. +# base_model remains deepseek/deepseek-v4.1-flash. +# Reasoning HTTP format: thinking.type = "enabled" | "disabled"; +# reasoning_effort = "low" | "high" | "max". Flash maps low -> low +# (unlike Pro). xhigh maps to high. Reasoning tokens are billed at the +# output rate (no separate chain-of-thought price). +# Interleaved field: reasoning_content. +# Lab cost: input 0.15 / output 0.6 / reasoning 0.6 / cache_read 0.003 +# (USD/MTok, DeepSeek list price). +# Vancine price basis: /api/pricing ModelRatio 0.12, CompletionRatio 4, +# CacheRatio 0.02 converted to USD/1M tokens as input = model_ratio * 2 = +# 0.24, output = input * completion_ratio = 0.96, cacheRead = input * +# cache_ratio = 0.0048. +base_model = "deepseek/deepseek-v4.1-flash" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.24 +output = 0.96 +cache_read = 0.0048 diff --git a/providers/vancine/models/glm-5.3-flash.toml b/providers/vancine/models/glm-5.3-flash.toml new file mode 100644 index 00000000000..3e8d22c0be1 --- /dev/null +++ b/providers/vancine/models/glm-5.3-flash.toml @@ -0,0 +1,22 @@ +# Sources (accessed 2026-09-11): +# https://docs.bigmodel.cn/cn/guide/capabilities/thinking +# https://docs.z.ai/guides/overview/pricing +# Lab cost (no 50% promo): input 0.15 / output 0.50 / cache_read 0.03. +# The Vancine half-price promotion for GLM-5.3-Flash has ended; the prices +# below are the regular production rates, not promo rates. +# Vancine public pricing (/api/pricing, verified 2026-09-11) is +# ModelRatio 0.06, CompletionRatio 3.333333333333, CacheRatio 0.2, which +# converts to USD/MTok as input = model_ratio * 2 = 0.12, +# output = input * completion_ratio = 0.40, cache_read = input * cache_ratio +# = 0.024, cache_write 0 (no create_cache_ratio configured). +# Thinking is always enabled, so no toggle. +base_model = "zhipuai/glm-5.3-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.12 +output = 0.40 +cache_read = 0.024 diff --git a/providers/vancine/models/glm-5.3.toml b/providers/vancine/models/glm-5.3.toml new file mode 100644 index 00000000000..20a952fb8f2 --- /dev/null +++ b/providers/vancine/models/glm-5.3.toml @@ -0,0 +1,17 @@ +# Sources (accessed 2026-08-26): +# https://docs.bigmodel.cn/cn/guide/capabilities/thinking +# https://docs.z.ai/guides/overview/pricing +# Lab cost: input 1.40 / output 4.40 / cache_read 0.26 (USD/MTok). +# Vancine public pricing (/api/pricing) is 1.12 / 3.52 / 0.208 (USD/MTok). +# Per the audit-reasoning-options skill, the lab effort list is +# "low" | "high" | "max"; thinking cannot be disabled, so no toggle. +base_model = "zhipuai/glm-5.3" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.12 +output = 3.52 +cache_read = 0.208 diff --git a/providers/vancine/models/hy4-preview.toml b/providers/vancine/models/hy4-preview.toml new file mode 100644 index 00000000000..6a2c758be98 --- /dev/null +++ b/providers/vancine/models/hy4-preview.toml @@ -0,0 +1,17 @@ +# Sources (accessed 2026-08-30): +# models/tencent/hy4-preview.toml +# providers/opencode-go/models/hy4-preview.toml +# Effort: reasoning_effort = "none" | "high". Off is effort = "none", so +# no toggle is authored. No interleaved field evidence on this host. +# Lab cost (Tencent list): input 0.834 / output 2.501 / cache_read 0.042. +# Vancine public pricing (/api/pricing) is 0.67 / 2.00 / 0.034 (USD/MTok). +base_model = "tencent/hy4-preview" + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.67 +output = 2.00 +cache_read = 0.034 diff --git a/providers/vancine/models/kimi-k3.toml b/providers/vancine/models/kimi-k3.toml new file mode 100644 index 00000000000..ab8f3aa37ec --- /dev/null +++ b/providers/vancine/models/kimi-k3.toml @@ -0,0 +1,24 @@ +# Sources (accessed 2026-07-17): +# https://platform.kimi.ai/docs/pricing/chat-k3 +# https://platform.moonshot.ai/docs/api/chat +# Lab reasoning controls: thinking.type = "enabled" | "disabled" | "adaptive"; +# in adaptive mode the depth is set by output_config.effort = "low"|"high"|"max". +# Interleaved field: reasoning_content. +# Lab cost: input 3.00 / output 15.00 / cache_read 0.30 (USD/MTok). +# Vancine public pricing (/api/pricing) is 2.40 / 12.00 / 0.24 (USD/MTok). +base_model = "moonshotai/kimi-k3" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 2.40 +output = 12.00 +cache_read = 0.24 diff --git a/providers/vancine/models/qwen3.8-flash.toml b/providers/vancine/models/qwen3.8-flash.toml new file mode 100644 index 00000000000..ceedd5283e0 --- /dev/null +++ b/providers/vancine/models/qwen3.8-flash.toml @@ -0,0 +1,25 @@ +# Sources (accessed 2026-08-27): +# https://www.qwencloud.com/models/qwen3.8-flash +# https://docs.qwencloud.com/developer-guides/text-generation/thinking +# Lab reasoning controls: enable_thinking true|false (toggle); +# thinking_budget up to 262144. reasoning_effort is NOT exposed for flash +# (qwencloud docs document it for qwen3.8-max / qwen3.8-max-preview only). +# Interleaved field: reasoning_content. +# Lab cost: input 0.15 / output 0.47 / cache_read 0.016 / cache_write 0.20. +# Vancine public pricing (/api/pricing) is 0.12 / 0.38 / 0.013 / n/a (USD/MTok). +base_model = "alibaba/qwen3.8-flash" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "budget_tokens" +max = 262_144 + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.12 +output = 0.38 +cache_read = 0.013 diff --git a/providers/vancine/models/qwen3.8-max.toml b/providers/vancine/models/qwen3.8-max.toml new file mode 100644 index 00000000000..bfe7534f1d7 --- /dev/null +++ b/providers/vancine/models/qwen3.8-max.toml @@ -0,0 +1,31 @@ +# Sources (accessed 2026-08-04): +# https://www.qwencloud.com/models/qwen3.8-max +# https://docs.qwencloud.com/developer-guides/text-generation/thinking +# https://help.aliyun.com/zh/model-studio/model-pricing +# Lab reasoning controls: enable_thinking true|false (toggle); +# reasoning_effort = low|medium|xhigh (default xhigh; high is alias for xhigh); +# thinking_budget 0..262144 (cannot be combined with reasoning_effort). +# Interleaved field: reasoning_content. +# Lab cost: input 2.00 / output 6.00 / cache_read 0.25 / cache_write 2.50. +# Vancine public pricing (/api/pricing) is 1.60 / 4.80 / 0.20 / n/a (USD/MTok). +base_model = "alibaba/qwen3.8-max" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "xhigh"] + +[[reasoning_options]] +type = "budget_tokens" +min = 0 +max = 262_144 + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1.60 +output = 4.80 +cache_read = 0.20 diff --git a/providers/vancine/provider.toml b/providers/vancine/provider.toml new file mode 100644 index 00000000000..98a1e99f7c5 --- /dev/null +++ b/providers/vancine/provider.toml @@ -0,0 +1,5 @@ +name = "Vancine" +npm = "@ai-sdk/openai-compatible" +env = ["VANCINE_API_KEY"] +api = "https://vancine.com/v1" +doc = "https://vancine.com/docs" diff --git a/providers/venice/models/aion-labs-aion-3-0-mini.toml b/providers/venice/models/aion-labs-aion-3-0-mini.toml index 5194d9671bc..bec7ef74857 100644 --- a/providers/venice/models/aion-labs-aion-3-0-mini.toml +++ b/providers/venice/models/aion-labs-aion-3-0-mini.toml @@ -7,10 +7,7 @@ reasoning = true tool_call = true structured_output = true open_weights = false - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] +reasoning_options = [] [cost] input = 0.875 diff --git a/providers/venice/models/aion-labs-aion-3-0.toml b/providers/venice/models/aion-labs-aion-3-0.toml index 3b990a1546e..857dfc722ac 100644 --- a/providers/venice/models/aion-labs-aion-3-0.toml +++ b/providers/venice/models/aion-labs-aion-3-0.toml @@ -7,10 +7,7 @@ reasoning = true tool_call = true structured_output = true open_weights = false - -[[reasoning_options]] -type = "effort" -values = ["low", "medium", "high"] +reasoning_options = [] [cost] input = 3.75 diff --git a/providers/venice/models/aion-labs-aion-3-5-mini.toml b/providers/venice/models/aion-labs-aion-3-5-mini.toml new file mode 100644 index 00000000000..1c7a4904c02 --- /dev/null +++ b/providers/venice/models/aion-labs-aion-3-5-mini.toml @@ -0,0 +1,23 @@ +name = "Aion 3.5 Mini" +description = "Efficient model for low-latency assistance, extraction, and routine automation" +release_date = "2026-09-23" +last_updated = "2026-09-23" +attachment = false +reasoning = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [] + +[cost] +input = 0.875 +output = 1.75 +cache_read = 0.225 + +[limit] +context = 262_144 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/venice/models/aion-labs-aion-3-5.toml b/providers/venice/models/aion-labs-aion-3-5.toml new file mode 100644 index 00000000000..1a4e0e48aa7 --- /dev/null +++ b/providers/venice/models/aion-labs-aion-3-5.toml @@ -0,0 +1,23 @@ +name = "Aion 3.5" +description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" +release_date = "2026-09-23" +last_updated = "2026-09-23" +attachment = false +reasoning = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [] + +[cost] +input = 3.75 +output = 7.5 +cache_read = 0.9375 + +[limit] +context = 262_144 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/venice/models/claude-fable-5-1.toml b/providers/venice/models/claude-fable-5-1.toml new file mode 100644 index 00000000000..b4b1e7008ec --- /dev/null +++ b/providers/venice/models/claude-fable-5-1.toml @@ -0,0 +1,17 @@ +base_model = "anthropic/claude-fable-5-1" +description = "Claude model for creative writing, analysis, and controlled agent workflows" +release_date = "2026-08-29" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 12 +output = 60 +cache_read = 0.3 +cache_write = 15 + +[modalities] +input = ["text", "image"] diff --git a/providers/venice/models/claude-opus-4-6.toml b/providers/venice/models/claude-opus-4-6.toml index 40d473d4409..fb04a060e4a 100644 --- a/providers/venice/models/claude-opus-4-6.toml +++ b/providers/venice/models/claude-opus-4-6.toml @@ -1,10 +1,12 @@ # Live metadata: reasoning only; no effort control or dedicated budget (2026-06-25). # https://api.venice.ai/api/v1/models?type=text - base_model = "anthropic/claude-opus-4-6" last_updated = "2026-06-11" structured_output = true -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "max"] [cost] input = 6 diff --git a/providers/venice/models/claude-opus-4-7.toml b/providers/venice/models/claude-opus-4-7.toml index d27c7c1f918..1c42f4a0bff 100644 --- a/providers/venice/models/claude-opus-4-7.toml +++ b/providers/venice/models/claude-opus-4-7.toml @@ -1,10 +1,12 @@ # Live metadata: reasoning only; no effort control or dedicated budget (2026-06-25). # https://api.venice.ai/api/v1/models?type=text - base_model = "anthropic/claude-opus-4-7" last_updated = "2026-06-11" structured_output = true -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] [cost] input = 6 diff --git a/providers/venice/models/claude-opus-4-8-fast.toml b/providers/venice/models/claude-opus-4-8-fast.toml index 14dd26ef9e9..c60496926f6 100644 --- a/providers/venice/models/claude-opus-4-8-fast.toml +++ b/providers/venice/models/claude-opus-4-8-fast.toml @@ -1,11 +1,13 @@ # Live metadata: reasoning only; no effort control or dedicated budget (2026-06-25). # https://api.venice.ai/api/v1/models?type=text - base_model = "anthropic/claude-opus-4-8" name = "Claude Opus 4.8 Fast" last_updated = "2026-06-11" structured_output = true -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] [cost] input = 12 diff --git a/providers/venice/models/claude-opus-4-8.toml b/providers/venice/models/claude-opus-4-8.toml index 031f143208e..873e3d37aec 100644 --- a/providers/venice/models/claude-opus-4-8.toml +++ b/providers/venice/models/claude-opus-4-8.toml @@ -1,10 +1,12 @@ # Live metadata: reasoning only; no effort control or dedicated budget (2026-06-25). # https://api.venice.ai/api/v1/models?type=text - base_model = "anthropic/claude-opus-4-8" last_updated = "2026-06-11" structured_output = true -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] [cost] input = 6 diff --git a/providers/venice/models/claude-opus-5-5.toml b/providers/venice/models/claude-opus-5-5.toml new file mode 100644 index 00000000000..ff60fa3a6ef --- /dev/null +++ b/providers/venice/models/claude-opus-5-5.toml @@ -0,0 +1,17 @@ +base_model = "anthropic/claude-opus-5-5" +description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents" +release_date = "2026-09-18" +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 4.8 +output = 24 +cache_read = 0.24 +cache_write = 6 + +[modalities] +input = ["text", "image"] diff --git a/providers/venice/models/claude-opus-5-fast.toml b/providers/venice/models/claude-opus-5-fast.toml index 242cbb2d53c..43c582febc4 100644 --- a/providers/venice/models/claude-opus-5-fast.toml +++ b/providers/venice/models/claude-opus-5-fast.toml @@ -3,7 +3,10 @@ name = "Claude Opus 5 Fast" description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents" release_date = "2026-07-23" structured_output = true -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] [cost] input = 12 diff --git a/providers/venice/models/claude-opus-5.toml b/providers/venice/models/claude-opus-5.toml index 28bbe41fa76..a231678fb86 100644 --- a/providers/venice/models/claude-opus-5.toml +++ b/providers/venice/models/claude-opus-5.toml @@ -2,7 +2,10 @@ base_model = "anthropic/claude-opus-5" description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents" release_date = "2026-07-23" structured_output = true -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] [cost] input = 6 diff --git a/providers/venice/models/claude-sonnet-4-6.toml b/providers/venice/models/claude-sonnet-4-6.toml index 5aed1c8be87..f4fb860ec66 100644 --- a/providers/venice/models/claude-sonnet-4-6.toml +++ b/providers/venice/models/claude-sonnet-4-6.toml @@ -1,10 +1,12 @@ # Live metadata: reasoning only; no effort control or dedicated budget (2026-06-25). # https://api.venice.ai/api/v1/models?type=text - base_model = "anthropic/claude-sonnet-4-6" last_updated = "2026-06-11" structured_output = true -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "max"] [cost] input = 3.6 diff --git a/providers/venice/models/claude-sonnet-5.toml b/providers/venice/models/claude-sonnet-5.toml index c3b9665f1b1..9a367547106 100644 --- a/providers/venice/models/claude-sonnet-5.toml +++ b/providers/venice/models/claude-sonnet-5.toml @@ -5,13 +5,16 @@ description = "Balanced Claude model for coding, analysis, agent workflows, and release_date = "2026-06-29" last_updated = "2026-07-01" structured_output = true -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] [cost] -input = 2 -output = 10.000000000000002 -cache_read = 0.2 -cache_write = 2.5000000000000004 +input = 3 +output = 15 +cache_read = 0.3 +cache_write = 3.75 [limit] output = 64_000 diff --git a/providers/venice/models/deepseek-v4-1-flash.toml b/providers/venice/models/deepseek-v4-1-flash.toml new file mode 100644 index 00000000000..2e04252851f --- /dev/null +++ b/providers/venice/models/deepseek-v4-1-flash.toml @@ -0,0 +1,14 @@ +base_model = "deepseek/deepseek-v4.1-flash" +description = "Fast DeepSeek model for efficient chat, coding help, and agent loops" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] + +[cost] +input = 0.375 +output = 1.5 +cache_read = 0.0075 + +[limit] +output = 131_072 diff --git a/providers/venice/models/deepseek-v4-flash.toml b/providers/venice/models/deepseek-v4-flash.toml index f78deda6358..58460c4910d 100644 --- a/providers/venice/models/deepseek-v4-flash.toml +++ b/providers/venice/models/deepseek-v4-flash.toml @@ -2,11 +2,14 @@ base_model = "deepseek/deepseek-v4-flash" name = "DeepSeek V4 Flash 0423" family = "deepseek" last_updated = "2026-06-11" -reasoning_options = [] [interleaved] field = "reasoning_content" +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + [cost] input = 0.138 output = 0.275 diff --git a/providers/venice/models/deepseek-v4-pro-0813.toml b/providers/venice/models/deepseek-v4-pro-0813.toml index 76f63a75fb9..df6b2765085 100644 --- a/providers/venice/models/deepseek-v4-pro-0813.toml +++ b/providers/venice/models/deepseek-v4-pro-0813.toml @@ -2,8 +2,10 @@ base_model = "deepseek/deepseek-v4-pro-0813" description = "Flagship DeepSeek model for coding, reasoning, and agentic work" release_date = "2026-08-14" last_updated = "2026-08-14" -open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high", "max"] [cost] input = 1.65 diff --git a/providers/venice/models/deepseek-v4-pro.toml b/providers/venice/models/deepseek-v4-pro.toml index edc4ced1b96..8f02eb73ba9 100644 --- a/providers/venice/models/deepseek-v4-pro.toml +++ b/providers/venice/models/deepseek-v4-pro.toml @@ -1,11 +1,14 @@ base_model = "deepseek/deepseek-v4-pro" family = "deepseek" last_updated = "2026-06-11" -reasoning_options = [] [interleaved] field = "reasoning_content" +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + [cost] input = 1.65 output = 3.301 diff --git a/providers/venice/models/gemini-3-8-flash.toml b/providers/venice/models/gemini-3-8-flash.toml new file mode 100644 index 00000000000..7c878c334ad --- /dev/null +++ b/providers/venice/models/gemini-3-8-flash.toml @@ -0,0 +1,14 @@ +base_model = "google/gemini-3.8-flash" +description = "Fast Gemini model balancing multimodal reasoning, tool use, and cost" +reasoning_options = [] + +[cost] +input = 0.9375 +output = 4.6875 +cache_read = 0.09375 + +[limit] +context = 1_000_000 + +[modalities] +input = ["text", "image", "audio", "video"] diff --git a/providers/venice/models/google-gemma-3-27b-it.toml b/providers/venice/models/google-gemma-3-27b-it.toml index 0d02714f02f..a897a57a3f9 100644 --- a/providers/venice/models/google-gemma-3-27b-it.toml +++ b/providers/venice/models/google-gemma-3-27b-it.toml @@ -1,13 +1,9 @@ +base_model = "google/gemma-3-27b-it" name = "Google Gemma 3 27B Instruct" description = "Open Gemma instruction model for efficient chat and self-hosted deployments" -family = "gemma" release_date = "2025-11-04" last_updated = "2026-06-11" -attachment = true -reasoning = false -tool_call = true structured_output = true -open_weights = true [cost] input = 0.12 @@ -16,7 +12,3 @@ output = 0.2 [limit] context = 198_000 output = 16_384 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/venice/models/grok-4-7.toml b/providers/venice/models/grok-4-7.toml new file mode 100644 index 00000000000..e405114dc5c --- /dev/null +++ b/providers/venice/models/grok-4-7.toml @@ -0,0 +1,24 @@ +base_model = "xai/grok-4.7" +description = "Grok model for agentic tool use, reasoning, coding, and live assistance" +release_date = "2026-09-16" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh"] + +[cost] +input = 2.27 +output = 6.8 +cache_read = 0.57 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 4.53 +output = 13.6 +cache_read = 1.13 + +[limit] +output = 200_000 + +[modalities] +input = ["text", "image"] diff --git a/providers/venice/models/kimi-k2-5.toml b/providers/venice/models/kimi-k2-5.toml index 3e15964592c..cd7cb32ce01 100644 --- a/providers/venice/models/kimi-k2-5.toml +++ b/providers/venice/models/kimi-k2-5.toml @@ -4,7 +4,6 @@ base_model = "moonshotai/kimi-k2.5" release_date = "2026-01-27" last_updated = "2026-06-11" knowledge = "2024-04" -open_weights = false reasoning_options = [] [interleaved] diff --git a/providers/venice/models/mercury-2-5.toml b/providers/venice/models/mercury-2-5.toml new file mode 100644 index 00000000000..a61068676a6 --- /dev/null +++ b/providers/venice/models/mercury-2-5.toml @@ -0,0 +1,27 @@ +name = "Mercury 2.5" +description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" +family = "mercury" +release_date = "2026-09-08" +last_updated = "2026-09-09" +attachment = false +reasoning = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] + +[cost] +input = 0.04999999999999999 +output = 0.18749999999999994 +cache_read = 0.004999999999999999 + +[limit] +context = 260_000 +output = 65_536 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/venice/models/mistral-small-2603.toml b/providers/venice/models/mistral-small-2603.toml deleted file mode 100644 index 0b9b14a6971..00000000000 --- a/providers/venice/models/mistral-small-2603.toml +++ /dev/null @@ -1,17 +0,0 @@ -# Live /models (2026-06-25): none|high only; no dedicated reasoning budget. -# https://api.venice.ai/api/v1/models?type=text (accessed 2026-06-25) - -base_model = "mistral/mistral-small-2603" -last_updated = "2026-06-11" -structured_output = true - -[[reasoning_options]] -type = "effort" -values = ["none", "high"] - -[cost] -input = 0.1875 -output = 0.75 - -[limit] -output = 65_536 diff --git a/providers/venice/models/mistral-small-3-2-24b-instruct.toml b/providers/venice/models/mistral-small-3-2-24b-instruct.toml index ab8412dcf3b..5407b754356 100644 --- a/providers/venice/models/mistral-small-3-2-24b-instruct.toml +++ b/providers/venice/models/mistral-small-3-2-24b-instruct.toml @@ -3,7 +3,7 @@ description = "Efficient Mistral model for fast chat, extraction, and production family = "mistral-small" release_date = "2026-01-15" last_updated = "2026-06-11" -attachment = false +attachment = true reasoning = false tool_call = true structured_output = true @@ -18,5 +18,5 @@ context = 256_000 output = 16_384 [modalities] -input = ["text"] +input = ["text", "image"] output = ["text"] diff --git a/providers/venice/models/openai-gpt-52-codex.toml b/providers/venice/models/openai-gpt-52-codex.toml deleted file mode 100644 index ff416e3bdaf..00000000000 --- a/providers/venice/models/openai-gpt-52-codex.toml +++ /dev/null @@ -1,24 +0,0 @@ -# Live /models (2026-06-25): none|minimal|low|medium|high; no dedicated reasoning budget. -# https://api.venice.ai/api/v1/models?type=text (accessed 2026-06-25) - -base_model = "openai/gpt-5.2-codex" -family = "gpt" -release_date = "2025-01-15" -last_updated = "2026-06-11" -knowledge = "2025-08" - -[[reasoning_options]] -type = "effort" -values = ["none", "minimal", "low", "medium", "high"] - -[cost] -input = 2.19 -output = 17.5 -cache_read = 0.219 - -[limit] -context = 256_000 -output = 65_536 - -[modalities] -input = ["text", "image"] diff --git a/providers/venice/models/openai-gpt-52.toml b/providers/venice/models/openai-gpt-52.toml index b400e076236..83a8cee2188 100644 --- a/providers/venice/models/openai-gpt-52.toml +++ b/providers/venice/models/openai-gpt-52.toml @@ -1,6 +1,5 @@ # Live /models (2026-06-25): none|minimal|low|medium|high; no dedicated reasoning budget. # https://api.venice.ai/api/v1/models?type=text (accessed 2026-06-25) - base_model = "openai/gpt-5.2" release_date = "2025-12-13" last_updated = "2026-06-11" @@ -8,7 +7,7 @@ attachment = false [[reasoning_options]] type = "effort" -values = ["none", "minimal", "low", "medium", "high"] +values = ["none", "low", "medium", "high", "xhigh"] [cost] input = 2.19 diff --git a/providers/venice/models/openai-gpt-53-codex.toml b/providers/venice/models/openai-gpt-53-codex.toml index fc27c32d66d..8bbd5a49fe7 100644 --- a/providers/venice/models/openai-gpt-53-codex.toml +++ b/providers/venice/models/openai-gpt-53-codex.toml @@ -1,6 +1,5 @@ # Live /models (2026-06-25): none|minimal|low|medium|high; no dedicated reasoning budget. # https://api.venice.ai/api/v1/models?type=text (accessed 2026-06-25) - base_model = "openai/gpt-5.3-codex" family = "gpt" release_date = "2026-02-24" @@ -8,7 +7,7 @@ last_updated = "2026-06-11" [[reasoning_options]] type = "effort" -values = ["none", "minimal", "low", "medium", "high"] +values = ["none", "low", "medium", "high", "xhigh"] [cost] input = 2.19 diff --git a/providers/venice/models/openai-gpt-54-mini.toml b/providers/venice/models/openai-gpt-54-mini.toml index b0de418a6df..cbc1d598e26 100644 --- a/providers/venice/models/openai-gpt-54-mini.toml +++ b/providers/venice/models/openai-gpt-54-mini.toml @@ -1,6 +1,5 @@ # Live /models (2026-06-25): none|minimal|low|medium|high; no dedicated reasoning budget. # https://api.venice.ai/api/v1/models?type=text (accessed 2026-06-25) - base_model = "openai/gpt-5.4-mini" name = "GPT-5.4 Mini" family = "gpt" @@ -9,7 +8,7 @@ last_updated = "2026-06-11" [[reasoning_options]] type = "effort" -values = ["none", "minimal", "low", "medium", "high"] +values = ["none", "low", "medium", "high", "xhigh"] [cost] input = 0.9375 diff --git a/providers/venice/models/openai-gpt-54-pro.toml b/providers/venice/models/openai-gpt-54-pro.toml index 46b420c7b1f..75b2af050fa 100644 --- a/providers/venice/models/openai-gpt-54-pro.toml +++ b/providers/venice/models/openai-gpt-54-pro.toml @@ -1,6 +1,5 @@ # Live /models (2026-06-25): none|minimal|low|medium|high; no dedicated reasoning budget. # https://api.venice.ai/api/v1/models?type=text (accessed 2026-06-25) - base_model = "openai/gpt-5.4-pro" family = "gpt" last_updated = "2026-06-11" @@ -8,7 +7,7 @@ structured_output = true [[reasoning_options]] type = "effort" -values = ["none", "minimal", "low", "medium", "high"] +values = ["none", "medium", "high", "xhigh"] [cost] input = 37.5 diff --git a/providers/venice/models/openai-gpt-54.toml b/providers/venice/models/openai-gpt-54.toml index e261036f262..6d7e63e7e6f 100644 --- a/providers/venice/models/openai-gpt-54.toml +++ b/providers/venice/models/openai-gpt-54.toml @@ -1,12 +1,11 @@ # Live /models (2026-06-25): none|minimal|low|medium|high; no dedicated reasoning budget. # https://api.venice.ai/api/v1/models?type=text (accessed 2026-06-25) - base_model = "openai/gpt-5.4" last_updated = "2026-06-11" [[reasoning_options]] type = "effort" -values = ["none", "minimal", "low", "medium", "high"] +values = ["none", "low", "medium", "high", "xhigh"] [cost] input = 3.13 diff --git a/providers/venice/models/openai-gpt-56-luna-pro.toml b/providers/venice/models/openai-gpt-56-luna-pro.toml index c0bc3e7d243..8e0a117d967 100644 --- a/providers/venice/models/openai-gpt-56-luna-pro.toml +++ b/providers/venice/models/openai-gpt-56-luna-pro.toml @@ -5,20 +5,20 @@ description = "Frontier GPT model for professional reasoning, coding, and multim [[reasoning_options]] type = "effort" -values = ["none", "low", "medium", "high", "xhigh", "max"] +values = ["low", "medium", "high", "xhigh", "max"] [cost] -input = 1.25 -output = 7.5 -cache_read = 0.125 -cache_write = 1.5625 +input = 0.25 +output = 1.5 +cache_read = 0.025 +cache_write = 0.3125 [[cost.tiers]] tier = { type = "context", size = 272_000 } -input = 2.5 -output = 11.25 -cache_read = 0.25 -cache_write = 3.125 +input = 0.5 +output = 2.25 +cache_read = 0.05 +cache_write = 0.625 [limit] context = 1_000_000 diff --git a/providers/venice/models/openai-gpt-56-luna.toml b/providers/venice/models/openai-gpt-56-luna.toml index edfe64bb25b..1f5dcbce8d6 100644 --- a/providers/venice/models/openai-gpt-56-luna.toml +++ b/providers/venice/models/openai-gpt-56-luna.toml @@ -7,10 +7,17 @@ type = "effort" values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 0.26666667 -output = 1.6 -cache_read = 0.02666667 -cache_write = 0.33333334 +input = 0.25 +output = 1.5 +cache_read = 0.025 +cache_write = 0.3125 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 0.5 +output = 2.25 +cache_read = 0.05 +cache_write = 0.625 [limit] context = 1_000_000 diff --git a/providers/venice/models/openai-gpt-56-sol-pro.toml b/providers/venice/models/openai-gpt-56-sol-pro.toml index 20e4ecf6d2f..1b837b0d610 100644 --- a/providers/venice/models/openai-gpt-56-sol-pro.toml +++ b/providers/venice/models/openai-gpt-56-sol-pro.toml @@ -8,17 +8,17 @@ type = "effort" values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 6.25 -output = 37.5 -cache_read = 0.625 -cache_write = 7.8125 +input = 5 +output = 25 +cache_read = 0.5 +cache_write = 6.25 [[cost.tiers]] tier = { type = "context", size = 272_000 } -input = 12.5 -output = 56.25 -cache_read = 1.25 -cache_write = 15.625 +input = 10 +output = 37.5 +cache_read = 1 +cache_write = 12.5 [limit] context = 1_000_000 diff --git a/providers/venice/models/openai-gpt-56-sol.toml b/providers/venice/models/openai-gpt-56-sol.toml index c38aaba119d..a0a89340131 100644 --- a/providers/venice/models/openai-gpt-56-sol.toml +++ b/providers/venice/models/openai-gpt-56-sol.toml @@ -7,10 +7,17 @@ type = "effort" values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 6.25 +input = 5 +output = 25 +cache_read = 0.5 +cache_write = 6.25 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 10 output = 37.5 -cache_read = 0.625 -cache_write = 7.8125 +cache_read = 1 +cache_write = 12.5 [limit] context = 1_000_000 diff --git a/providers/venice/models/openai-gpt-56-terra-pro.toml b/providers/venice/models/openai-gpt-56-terra-pro.toml index f96eba9db6e..313a829c386 100644 --- a/providers/venice/models/openai-gpt-56-terra-pro.toml +++ b/providers/venice/models/openai-gpt-56-terra-pro.toml @@ -5,20 +5,20 @@ description = "Frontier GPT model for professional reasoning, coding, and multim [[reasoning_options]] type = "effort" -values = ["none", "low", "medium", "high", "xhigh", "max"] +values = ["low", "medium", "high", "xhigh", "max"] [cost] -input = 3.125 -output = 18.75 -cache_read = 0.3125 -cache_write = 3.90625 +input = 2.5 +output = 15 +cache_read = 0.25 +cache_write = 3.125 [[cost.tiers]] tier = { type = "context", size = 272_000 } -input = 6.25 -output = 28.125 -cache_read = 0.625 -cache_write = 7.8125 +input = 5 +output = 22.5 +cache_read = 0.5 +cache_write = 6.25 [limit] context = 1_000_000 diff --git a/providers/venice/models/openai-gpt-56-terra.toml b/providers/venice/models/openai-gpt-56-terra.toml index 5c14cdce5a4..da4706dfde0 100644 --- a/providers/venice/models/openai-gpt-56-terra.toml +++ b/providers/venice/models/openai-gpt-56-terra.toml @@ -7,10 +7,17 @@ type = "effort" values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 3.125 -output = 18.75 -cache_read = 0.3125 -cache_write = 3.90625 +input = 2.5 +output = 15 +cache_read = 0.25 +cache_write = 3.125 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 5 +output = 22.5 +cache_read = 0.5 +cache_write = 6.25 [limit] context = 1_000_000 diff --git a/providers/venice/models/openai-gpt-6-astra-pro.toml b/providers/venice/models/openai-gpt-6-astra-pro.toml new file mode 100644 index 00000000000..8d380a44b1d --- /dev/null +++ b/providers/venice/models/openai-gpt-6-astra-pro.toml @@ -0,0 +1,35 @@ +name = "GPT-6 Astra Pro" +description = "Frontier GPT model for professional reasoning, coding, and multimodal work" +family = "gpt" +release_date = "2026-09-05" +last_updated = "2026-09-05" +attachment = true +reasoning = true +tool_call = true +structured_output = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 12.5 +output = 62.5 +cache_read = 1.25 +cache_write = 15.625 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 25 +output = 93.75 +cache_read = 2.5 +cache_write = 31.25 + +[limit] +context = 1_050_000 +output = 128_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/venice/models/openai-gpt-6-astra.toml b/providers/venice/models/openai-gpt-6-astra.toml new file mode 100644 index 00000000000..3ed7e7cfb48 --- /dev/null +++ b/providers/venice/models/openai-gpt-6-astra.toml @@ -0,0 +1,24 @@ +base_model = "openai/gpt-6-astra" +description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" +family = "gpt" +release_date = "2026-09-05" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 20 +output = 75 +cache_read = 2 +cache_write = 25 + +[modalities] +input = ["text", "image"] diff --git a/providers/venice/models/openai-gpt-6-luna.toml b/providers/venice/models/openai-gpt-6-luna.toml new file mode 100644 index 00000000000..df056dfdc5c --- /dev/null +++ b/providers/venice/models/openai-gpt-6-luna.toml @@ -0,0 +1,22 @@ +base_model = "openai/gpt-6-luna" +description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.125 +output = 0.625 +cache_read = 0.0125 +cache_write = 0.15625 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 0.25 +output = 0.9375 +cache_read = 0.025 +cache_write = 0.3125 + +[modalities] +input = ["text", "image"] diff --git a/providers/venice/models/openai-gpt-6-sol.toml b/providers/venice/models/openai-gpt-6-sol.toml new file mode 100644 index 00000000000..5a130d788ba --- /dev/null +++ b/providers/venice/models/openai-gpt-6-sol.toml @@ -0,0 +1,22 @@ +base_model = "openai/gpt-6-sol" +description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2.5 +output = 12.5 +cache_read = 0.25 +cache_write = 3.125 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 5 +output = 18.75 +cache_read = 0.5 +cache_write = 6.25 + +[modalities] +input = ["text", "image"] diff --git a/providers/venice/models/qwen-3-8-flash.toml b/providers/venice/models/qwen-3-8-flash.toml new file mode 100644 index 00000000000..d5e7b60805f --- /dev/null +++ b/providers/venice/models/qwen-3-8-flash.toml @@ -0,0 +1,10 @@ +base_model = "alibaba/qwen3.8-flash" +name = "Qwen 3.8 Flash" +release_date = "2026-09-10" +last_updated = "2026-09-10" +reasoning_options = [] + +[cost] +input = 0.14 +output = 0.49 +cache_read = 0.014 diff --git a/providers/venice/models/qwen3-6-27b.toml b/providers/venice/models/qwen3-6-27b.toml index b57c8e4b878..27cdef2bf5c 100644 --- a/providers/venice/models/qwen3-6-27b.toml +++ b/providers/venice/models/qwen3-6-27b.toml @@ -1,11 +1,9 @@ # Live /models (2026-06-25): none|low|medium|high; no dedicated reasoning budget. # https://api.venice.ai/api/v1/models?type=text (accessed 2026-06-25) - base_model = "alibaba/qwen3.6-27b" name = "Qwen 3.6 27B" release_date = "2026-04-24" last_updated = "2026-06-11" -open_weights = false [[reasoning_options]] type = "effort" diff --git a/providers/venice/models/seed-2-1-turbo.toml b/providers/venice/models/seed-2-1-turbo.toml index 5920f325f9b..fe1ac7fc657 100644 --- a/providers/venice/models/seed-2-1-turbo.toml +++ b/providers/venice/models/seed-2-1-turbo.toml @@ -2,7 +2,6 @@ base_model = "bytedance-seed/seed-2.1-turbo" description = "Multimodal reasoning model for visual analysis, planning, and tool use" release_date = "2026-06-28" last_updated = "2026-07-24" -structured_output = true reasoning_options = [] [cost] diff --git a/providers/venice/models/z-ai-glm-5-3-flash.toml b/providers/venice/models/z-ai-glm-5-3-flash.toml index 04f19975d31..fd7d0779d73 100644 --- a/providers/venice/models/z-ai-glm-5-3-flash.toml +++ b/providers/venice/models/z-ai-glm-5-3-flash.toml @@ -8,9 +8,9 @@ type = "effort" values = ["none", "low", "medium", "high"] [cost] -input = 0.09375 -output = 0.3125 -cache_read = 0.01875 +input = 0.15 +output = 0.5 +cache_read = 0.03 [limit] context = 1_048_576 diff --git a/providers/venice/models/z-ai-glm-5-3.toml b/providers/venice/models/z-ai-glm-5-3.toml index 5c3a60289ec..4d41a6a336e 100644 --- a/providers/venice/models/z-ai-glm-5-3.toml +++ b/providers/venice/models/z-ai-glm-5-3.toml @@ -3,10 +3,7 @@ name = "GLM 5.3" description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" release_date = "2026-08-18" last_updated = "2026-08-18" - -[[reasoning_options]] -type = "effort" -values = ["low", "high", "max"] +reasoning_options = [] [cost] input = 1.75 diff --git a/providers/venice/models/zai-org-glm-4.7-flash.toml b/providers/venice/models/zai-org-glm-4.7-flash.toml index 126400b50d5..854e1fd3c20 100644 --- a/providers/venice/models/zai-org-glm-4.7-flash.toml +++ b/providers/venice/models/zai-org-glm-4.7-flash.toml @@ -2,7 +2,6 @@ # https://api.venice.ai/api/v1/models?type=text (accessed 2026-06-25) base_model = "zhipuai/glm-4.7-flash" name = "GLM 4.7 Flash" -family = "glm" release_date = "2026-01-29" last_updated = "2026-06-11" structured_output = true diff --git a/providers/vercel/models/alibaba/qwen-3.6-max-preview.toml b/providers/vercel/models/alibaba/qwen-3.6-max-preview.toml index 957f43d1d02..df7e9852286 100644 --- a/providers/vercel/models/alibaba/qwen-3.6-max-preview.toml +++ b/providers/vercel/models/alibaba/qwen-3.6-max-preview.toml @@ -5,17 +5,31 @@ release_date = "2026-04-20" last_updated = "2026-04-24" attachment = true reasoning = true -reasoning_options = [{ type = "toggle" }, { type = "budget_tokens", min = 1, max = 131_072 }] temperature = true tool_call = true open_weights = true +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "budget_tokens" +min = 1 +max = 131_072 + [cost] input = 1.3 output = 7.8 -cache_read = 0.26 +cache_read = 0.13 cache_write = 1.625 +[[cost.tiers]] +tier = { type = "context", size = 128_000 } +input = 2 +output = 12 +cache_read = 0.2 +cache_write = 2.5 + [limit] context = 240_000 output = 64_000 diff --git a/providers/vercel/models/alibaba/qwen3-coder-plus.toml b/providers/vercel/models/alibaba/qwen3-coder-plus.toml index 06f877de2eb..656712e8607 100644 --- a/providers/vercel/models/alibaba/qwen3-coder-plus.toml +++ b/providers/vercel/models/alibaba/qwen3-coder-plus.toml @@ -5,5 +5,23 @@ input = 1 output = 5 cache_read = 0.2 +[[cost.tiers]] +tier = { type = "context", size = 32_001 } +input = 1.8 +output = 9 +cache_read = 0.36 + +[[cost.tiers]] +tier = { type = "context", size = 128_001 } +input = 3 +output = 15 +cache_read = 0.6 + +[[cost.tiers]] +tier = { type = "context", size = 256_001 } +input = 6 +output = 60 +cache_read = 1.2 + [limit] context = 1_000_000 diff --git a/providers/vercel/models/alibaba/qwen3-coder.toml b/providers/vercel/models/alibaba/qwen3-coder.toml index e61dd0d67dd..f5fe46e649f 100644 --- a/providers/vercel/models/alibaba/qwen3-coder.toml +++ b/providers/vercel/models/alibaba/qwen3-coder.toml @@ -16,6 +16,18 @@ input = 1.5 output = 7.5 cache_read = 0.3 +[[cost.tiers]] +tier = { type = "context", size = 32_001 } +input = 2.7 +output = 13.5 +cache_read = 0.54 + +[[cost.tiers]] +tier = { type = "context", size = 128_001 } +input = 4.5 +output = 22.5 +cache_read = 0.9 + [limit] context = 262_144 output = 65_536 diff --git a/providers/vercel/models/alibaba/qwen3-max-preview.toml b/providers/vercel/models/alibaba/qwen3-max-preview.toml index 94b902c8984..69a704070b5 100644 --- a/providers/vercel/models/alibaba/qwen3-max-preview.toml +++ b/providers/vercel/models/alibaba/qwen3-max-preview.toml @@ -15,6 +15,18 @@ input = 1.2 output = 6 cache_read = 0.24 +[[cost.tiers]] +tier = { type = "context", size = 32_001 } +input = 2.4 +output = 12 +cache_read = 0.48 + +[[cost.tiers]] +tier = { type = "context", size = 128_001 } +input = 3 +output = 15 +cache_read = 0.6 + [limit] context = 262_144 output = 32_768 diff --git a/providers/vercel/models/alibaba/qwen3-max-thinking.toml b/providers/vercel/models/alibaba/qwen3-max-thinking.toml index db97c26cd56..b00cd1597a9 100644 --- a/providers/vercel/models/alibaba/qwen3-max-thinking.toml +++ b/providers/vercel/models/alibaba/qwen3-max-thinking.toml @@ -5,17 +5,33 @@ release_date = "2026-01-23" last_updated = "2025-01" attachment = false reasoning = true -reasoning_options = [{ type = "budget_tokens", min = 1, max = 81_920 }] temperature = true tool_call = true knowledge = "2025-01" open_weights = true +[[reasoning_options]] +type = "budget_tokens" +min = 1 +max = 81_920 + [cost] input = 1.2 output = 6 cache_read = 0.24 +[[cost.tiers]] +tier = { type = "context", size = 32_001 } +input = 2.4 +output = 12 +cache_read = 0.48 + +[[cost.tiers]] +tier = { type = "context", size = 128_001 } +input = 3 +output = 15 +cache_read = 0.6 + [limit] context = 256_000 output = 65_536 diff --git a/providers/vercel/models/alibaba/qwen3-max.toml b/providers/vercel/models/alibaba/qwen3-max.toml index 74f80d21720..556b71930db 100644 --- a/providers/vercel/models/alibaba/qwen3-max.toml +++ b/providers/vercel/models/alibaba/qwen3-max.toml @@ -5,5 +5,17 @@ input = 1.2 output = 6 cache_read = 0.24 +[[cost.tiers]] +tier = { type = "context", size = 32_001 } +input = 2.4 +output = 12 +cache_read = 0.48 + +[[cost.tiers]] +tier = { type = "context", size = 128_001 } +input = 3 +output = 15 +cache_read = 0.6 + [limit] output = 32_768 diff --git a/providers/vercel/models/alibaba/qwen3-next-80b-a3b-instruct.toml b/providers/vercel/models/alibaba/qwen3-next-80b-a3b-instruct.toml index 30e2796a494..06998ee46a3 100644 --- a/providers/vercel/models/alibaba/qwen3-next-80b-a3b-instruct.toml +++ b/providers/vercel/models/alibaba/qwen3-next-80b-a3b-instruct.toml @@ -4,3 +4,7 @@ name = "Qwen3 Next 80B A3B Instruct" [cost] input = 0.15 output = 1.2 + +[limit] +context = 262_114 +output = 262_114 diff --git a/providers/vercel/models/alibaba/qwen3-next-80b-a3b-thinking.toml b/providers/vercel/models/alibaba/qwen3-next-80b-a3b-thinking.toml index f5c85876808..f01e76acd81 100644 --- a/providers/vercel/models/alibaba/qwen3-next-80b-a3b-thinking.toml +++ b/providers/vercel/models/alibaba/qwen3-next-80b-a3b-thinking.toml @@ -8,3 +8,7 @@ min = 1 [cost] input = 0.15 output = 1.2 + +[limit] +context = 262_144 +output = 262_144 diff --git a/providers/vercel/models/alibaba/qwen3.5-flash.toml b/providers/vercel/models/alibaba/qwen3.5-flash.toml index f7d9fba9ad9..ad8d97ce9c5 100644 --- a/providers/vercel/models/alibaba/qwen3.5-flash.toml +++ b/providers/vercel/models/alibaba/qwen3.5-flash.toml @@ -13,7 +13,7 @@ max = 81_920 [cost] input = 0.1 output = 0.4 -cache_read = 0.001 +cache_read = 0.01 cache_write = 0.125 [limit] diff --git a/providers/vercel/models/alibaba/qwen3.5-plus.toml b/providers/vercel/models/alibaba/qwen3.5-plus.toml index e3a91399921..3f4c69a844a 100644 --- a/providers/vercel/models/alibaba/qwen3.5-plus.toml +++ b/providers/vercel/models/alibaba/qwen3.5-plus.toml @@ -1,14 +1,28 @@ base_model = "alibaba/qwen3.5-plus" -reasoning_options = [{ type = "toggle" }, { type = "budget_tokens", min = 1, max = 81_920 }] name = "Qwen 3.5 Plus" attachment = true +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "budget_tokens" +min = 1 +max = 81_920 + [cost] input = 0.4 -output = 2.4 +output = 2.5 cache_read = 0.04 cache_write = 0.5 +[[cost.tiers]] +tier = { type = "context", size = 256_001 } +input = 0.5 +output = 3 +cache_read = 0.05 +cache_write = 0.625 + [limit] output = 64_000 diff --git a/providers/vercel/models/alibaba/qwen3.6-plus.toml b/providers/vercel/models/alibaba/qwen3.6-plus.toml index ff598b0417f..e87a6735aae 100644 --- a/providers/vercel/models/alibaba/qwen3.6-plus.toml +++ b/providers/vercel/models/alibaba/qwen3.6-plus.toml @@ -12,9 +12,16 @@ max = 131_072 [cost] input = 0.5 output = 3 -cache_read = 0.1 +cache_read = 0.05 cache_write = 0.625 +[[cost.tiers]] +tier = { type = "context", size = 256_000 } +input = 2 +output = 6 +cache_read = 0.2 +cache_write = 2.5 + [limit] output = 64_000 diff --git a/providers/vercel/models/alibaba/qwen3.7-flash.toml b/providers/vercel/models/alibaba/qwen3.7-flash.toml index 774d5fe725d..8aaf3abadf1 100644 --- a/providers/vercel/models/alibaba/qwen3.7-flash.toml +++ b/providers/vercel/models/alibaba/qwen3.7-flash.toml @@ -10,6 +10,20 @@ output = 0.13 cache_read = 0.006 cache_write = 0.038 +[[cost.tiers]] +tier = { type = "context", size = 32_000 } +input = 0.1 +output = 0.4 +cache_read = 0.02 +cache_write = 0.125 + +[[cost.tiers]] +tier = { type = "context", size = 256_000 } +input = 0.2 +output = 0.8 +cache_read = 0.04 +cache_write = 0.25 + [limit] context = 991_000 output = 64_000 diff --git a/providers/vercel/models/alibaba/qwen3.7-plus.toml b/providers/vercel/models/alibaba/qwen3.7-plus.toml index 819ab65c9e3..4511b24804c 100644 --- a/providers/vercel/models/alibaba/qwen3.7-plus.toml +++ b/providers/vercel/models/alibaba/qwen3.7-plus.toml @@ -24,5 +24,12 @@ output = 1.6 cache_read = 0.08 cache_write = 0.5 +[[cost.tiers]] +tier = { type = "context", size = 256_000 } +input = 1.2 +output = 4.8 +cache_read = 0.24 +cache_write = 1.5 + [modalities] input = ["text", "image", "pdf"] diff --git a/providers/vercel/models/alibaba/qwen3.8-2.4t-a95b.toml b/providers/vercel/models/alibaba/qwen3.8-2.4t-a95b.toml index 970bb5a1653..2e1295a93db 100644 --- a/providers/vercel/models/alibaba/qwen3.8-2.4t-a95b.toml +++ b/providers/vercel/models/alibaba/qwen3.8-2.4t-a95b.toml @@ -12,7 +12,10 @@ values = ["low", "medium", "xhigh"] [cost] input = 2 output = 6 -cache_read = 0.2 +cache_read = 0.25 + +[limit] +output = 128_000 [modalities] input = ["text", "image"] diff --git a/providers/vercel/models/alibaba/qwen3.8-27b.toml b/providers/vercel/models/alibaba/qwen3.8-27b.toml index fd3361678fa..84643c210eb 100644 --- a/providers/vercel/models/alibaba/qwen3.8-27b.toml +++ b/providers/vercel/models/alibaba/qwen3.8-27b.toml @@ -8,9 +8,10 @@ type = "effort" values = ["none", "low", "medium", "xhigh"] [cost] -input = 0.55 -output = 3.3 -cache_read = 0.11 +input = 0.5 +output = 3 +cache_read = 0.1 +cache_write = 0.625 [limit] context = 1_000_000 diff --git a/providers/vercel/models/alibaba/qwen3.8-flash.toml b/providers/vercel/models/alibaba/qwen3.8-flash.toml index 4f06d10abd2..bd0aba476f5 100644 --- a/providers/vercel/models/alibaba/qwen3.8-flash.toml +++ b/providers/vercel/models/alibaba/qwen3.8-flash.toml @@ -6,10 +6,15 @@ # Budget: providerOptions.alibaba.thinkingBudget -> thinking_budget (reasoning tokens) base_model = "alibaba/qwen3.8-flash" name = "Qwen 3.8 Flash" -reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }] + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "budget_tokens" [cost] -input = 0.16 +input = 0.15 output = 0.47 cache_read = 0.016 cache_write = 0.2 diff --git a/providers/vercel/models/alibaba/qwen3.8-max-0902.toml b/providers/vercel/models/alibaba/qwen3.8-max-0902.toml new file mode 100644 index 00000000000..f5cd157fc68 --- /dev/null +++ b/providers/vercel/models/alibaba/qwen3.8-max-0902.toml @@ -0,0 +1,24 @@ +# Toggle: reasoning.enabled = true|false +# Effort and budget match Qwen3.8 Max; reasoning.effort and reasoning.max_tokens are mutually exclusive. +# https://vercel.com/docs/ai-gateway/sdks-and-apis/openai-chat-completions/reasoning +# https://docs.qwencloud.com/developer-guides/text-generation/thinking +base_model = "alibaba/qwen3.8-max-0902" +description = "Qwen vision-language model for visual reasoning, documents, and agent tasks" +reasoning_options = [ + { type = "toggle" }, + { type = "effort", values = ["low", "medium", "xhigh"] }, + { type = "budget_tokens", min = 0, max = 262_144 }, +] + +[cost] +input = 2 +output = 6 +cache_read = 0.25 +cache_write = 2.5 + +[limit] +context = 991_000 +output = 128_000 + +[modalities] +input = ["text", "image", "pdf"] diff --git a/providers/vercel/models/alibaba/qwen3.8-max.toml b/providers/vercel/models/alibaba/qwen3.8-max.toml index 4e6f5eac650..d73681007ac 100644 --- a/providers/vercel/models/alibaba/qwen3.8-max.toml +++ b/providers/vercel/models/alibaba/qwen3.8-max.toml @@ -14,9 +14,9 @@ max = 262_144 input = 2 output = 6 cache_read = 0.25 -cache_write = 2.5 [limit] +context = 262_144 output = 128_000 [modalities] diff --git a/providers/vercel/models/alibaba/qwen3.8-omni-flash.toml b/providers/vercel/models/alibaba/qwen3.8-omni-flash.toml new file mode 100644 index 00000000000..f8c34493ce1 --- /dev/null +++ b/providers/vercel/models/alibaba/qwen3.8-omni-flash.toml @@ -0,0 +1,15 @@ +# Effort: reasoning_effort = none|minimal|low|medium|high|xhigh|max +# Alibaba maps minimal to low and high|max to xhigh; none disables thinking. +# https://www.alibabacloud.com/help/en/model-studio/qwen-omni +base_model = "alibaba/qwen3.8-omni-flash" +name = "Qwen 3.8 Omni Flash" +reasoning_options = [{ type = "effort", values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 0.15 +output = 0.47 +cache_read = 0.016 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/vercel/models/alibaba/wan-v2.5-t2v-preview.toml b/providers/vercel/models/alibaba/wan-v2.5-t2v-preview.toml index 7fca15dd7c7..ac51d13a04c 100644 --- a/providers/vercel/models/alibaba/wan-v2.5-t2v-preview.toml +++ b/providers/vercel/models/alibaba/wan-v2.5-t2v-preview.toml @@ -1,6 +1,5 @@ name = "Wan v2.5 Text-to-Video Preview" description = "Video model for prompt-guided generation, editing, and motion workflows" -family = "o" release_date = "2025-09-24" last_updated = "2025-09-24" attachment = false diff --git a/providers/vercel/models/alibaba/wan-v2.6-i2v-flash.toml b/providers/vercel/models/alibaba/wan-v2.6-i2v-flash.toml index 3ed6130c721..d69ba8b46d4 100644 --- a/providers/vercel/models/alibaba/wan-v2.6-i2v-flash.toml +++ b/providers/vercel/models/alibaba/wan-v2.6-i2v-flash.toml @@ -1,6 +1,5 @@ name = "Wan v2.6 Image-to-Video Flash" description = "Image model for prompt-driven generation, editing, and visual design workflows" -family = "o" release_date = "2025-12-16" last_updated = "2025-12-16" attachment = false diff --git a/providers/vercel/models/alibaba/wan-v2.6-i2v.toml b/providers/vercel/models/alibaba/wan-v2.6-i2v.toml index 364138ab961..d1df36cfe39 100644 --- a/providers/vercel/models/alibaba/wan-v2.6-i2v.toml +++ b/providers/vercel/models/alibaba/wan-v2.6-i2v.toml @@ -1,6 +1,5 @@ name = "Wan v2.6 Image-to-Video" description = "Image model for prompt-driven generation, editing, and visual design workflows" -family = "o" release_date = "2025-12-16" last_updated = "2025-12-16" attachment = false diff --git a/providers/vercel/models/alibaba/wan-v2.6-r2v-flash.toml b/providers/vercel/models/alibaba/wan-v2.6-r2v-flash.toml index a6dc42b25dc..f955c1c452e 100644 --- a/providers/vercel/models/alibaba/wan-v2.6-r2v-flash.toml +++ b/providers/vercel/models/alibaba/wan-v2.6-r2v-flash.toml @@ -1,6 +1,5 @@ name = "Wan v2.6 Reference-to-Video Flash" description = "Video model for prompt-guided generation, editing, and motion workflows" -family = "o" release_date = "2025-12-16" last_updated = "2025-12-16" attachment = false diff --git a/providers/vercel/models/alibaba/wan-v2.6-r2v.toml b/providers/vercel/models/alibaba/wan-v2.6-r2v.toml index d359c4e4a33..6b5e8edb335 100644 --- a/providers/vercel/models/alibaba/wan-v2.6-r2v.toml +++ b/providers/vercel/models/alibaba/wan-v2.6-r2v.toml @@ -1,6 +1,5 @@ name = "Wan v2.6 Reference-to-Video" description = "Video model for prompt-guided generation, editing, and motion workflows" -family = "o" release_date = "2025-12-16" last_updated = "2025-12-16" attachment = false diff --git a/providers/vercel/models/alibaba/wan-v2.6-t2v.toml b/providers/vercel/models/alibaba/wan-v2.6-t2v.toml index b6f8c18d623..089929b2dd1 100644 --- a/providers/vercel/models/alibaba/wan-v2.6-t2v.toml +++ b/providers/vercel/models/alibaba/wan-v2.6-t2v.toml @@ -1,6 +1,5 @@ name = "Wan v2.6 Text-to-Video" description = "Video model for prompt-guided generation, editing, and motion workflows" -family = "o" release_date = "2025-12-16" last_updated = "2025-12-16" attachment = false diff --git a/providers/vercel/models/alibaba/wan-v2.7-r2v.toml b/providers/vercel/models/alibaba/wan-v2.7-r2v.toml index f56f24481a1..bcb46d23d3e 100644 --- a/providers/vercel/models/alibaba/wan-v2.7-r2v.toml +++ b/providers/vercel/models/alibaba/wan-v2.7-r2v.toml @@ -1,6 +1,5 @@ name = "Wan v2.7 Reference-to-Video" description = "Video model for prompt-guided generation, editing, and motion workflows" -family = "o" release_date = "2026-04-07" last_updated = "2026-04-07" attachment = false diff --git a/providers/vercel/models/alibaba/wan-v2.7-t2v.toml b/providers/vercel/models/alibaba/wan-v2.7-t2v.toml index 417a61dd8d4..98d5e074e30 100644 --- a/providers/vercel/models/alibaba/wan-v2.7-t2v.toml +++ b/providers/vercel/models/alibaba/wan-v2.7-t2v.toml @@ -1,6 +1,5 @@ name = "Wan v2.7 Text-to-Video" description = "Video model for prompt-guided generation, editing, and motion workflows" -family = "o" release_date = "2026-04-07" last_updated = "2026-04-07" attachment = false diff --git a/providers/vercel/models/alibaba/wan-v3.0-video-prime.toml b/providers/vercel/models/alibaba/wan-v3.0-video-prime.toml new file mode 100644 index 00000000000..869095910ba --- /dev/null +++ b/providers/vercel/models/alibaba/wan-v3.0-video-prime.toml @@ -0,0 +1,16 @@ +name = "Wan v3.0 Video Prime" +description = "Video model for prompt-guided generation, editing, and motion workflows" +release_date = "2026-08-28" +last_updated = "2026-08-28" +attachment = true +reasoning = false +tool_call = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text", "image"] +output = ["video"] diff --git a/providers/vercel/models/alibaba/wan-v3.0-video.toml b/providers/vercel/models/alibaba/wan-v3.0-video.toml index 594d5d4a4c2..41c7bed34bb 100644 --- a/providers/vercel/models/alibaba/wan-v3.0-video.toml +++ b/providers/vercel/models/alibaba/wan-v3.0-video.toml @@ -1,6 +1,5 @@ name = "Wan v3.0 Video" description = "Video model for prompt-guided generation, editing, and motion workflows" -family = "o" release_date = "2026-08-23" last_updated = "2026-08-23" attachment = true diff --git a/providers/vercel/models/anthropic/claude-fable-5.1.toml b/providers/vercel/models/anthropic/claude-fable-5.1.toml new file mode 100644 index 00000000000..b1bc2dcf02f --- /dev/null +++ b/providers/vercel/models/anthropic/claude-fable-5.1.toml @@ -0,0 +1,12 @@ +base_model = "anthropic/claude-fable-5-1" +description = "Claude model for creative writing, analysis, and controlled agent workflows" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 0.25 +cache_write = 12.5 diff --git a/providers/vercel/models/anthropic/claude-opus-4.toml b/providers/vercel/models/anthropic/claude-opus-4.toml index a80b0442665..2553fa1f326 100644 --- a/providers/vercel/models/anthropic/claude-opus-4.toml +++ b/providers/vercel/models/anthropic/claude-opus-4.toml @@ -6,6 +6,3 @@ input = 15 output = 75 cache_read = 1.5 cache_write = 18.75 - -[limit] -output = 8_192 diff --git a/providers/vercel/models/anthropic/claude-opus-5.5-fast.toml b/providers/vercel/models/anthropic/claude-opus-5.5-fast.toml new file mode 100644 index 00000000000..9e516c8d185 --- /dev/null +++ b/providers/vercel/models/anthropic/claude-opus-5.5-fast.toml @@ -0,0 +1,9 @@ +base_model = "anthropic/claude-opus-5-5" +name = "Claude Opus 5.5 (Fast)" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 8 +output = 40 +cache_read = 0.4 +cache_write = 10 diff --git a/providers/vercel/models/anthropic/claude-opus-5.5.toml b/providers/vercel/models/anthropic/claude-opus-5.5.toml new file mode 100644 index 00000000000..8c3442bfe4b --- /dev/null +++ b/providers/vercel/models/anthropic/claude-opus-5.5.toml @@ -0,0 +1,8 @@ +base_model = "anthropic/claude-opus-5-5" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 4 +output = 20 +cache_read = 0.2 +cache_write = 5 diff --git a/providers/vercel/models/anthropic/claude-sonnet-4.toml b/providers/vercel/models/anthropic/claude-sonnet-4.toml index df6a061b4b1..7e189ae395a 100644 --- a/providers/vercel/models/anthropic/claude-sonnet-4.toml +++ b/providers/vercel/models/anthropic/claude-sonnet-4.toml @@ -7,6 +7,12 @@ output = 15 cache_read = 0.3 cache_write = 3.75 +[[cost.tiers]] +tier = { type = "context", size = 200_001 } +input = 6 +output = 22.5 +cache_read = 0.6 +cache_write = 7.5 + [limit] context = 1_000_000 -output = 8_192 diff --git a/providers/vercel/models/bytedance/seed-1.6.toml b/providers/vercel/models/bytedance/seed-1.6.toml index c0346917f50..bc03000e407 100644 --- a/providers/vercel/models/bytedance/seed-1.6.toml +++ b/providers/vercel/models/bytedance/seed-1.6.toml @@ -18,6 +18,12 @@ input = 0.25 output = 2 cache_read = 0.05 +[[cost.tiers]] +tier = { type = "context", size = 128_001 } +input = 0.5 +output = 4 +cache_read = 0.05 + [limit] context = 256_000 output = 32_000 diff --git a/providers/vercel/models/bytedance/seed-1.8.toml b/providers/vercel/models/bytedance/seed-1.8.toml index 1fa077191ce..7e02aaccd52 100644 --- a/providers/vercel/models/bytedance/seed-1.8.toml +++ b/providers/vercel/models/bytedance/seed-1.8.toml @@ -5,17 +5,29 @@ release_date = "2025-09-01" last_updated = "2025-10" attachment = false reasoning = true -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["minimal", "low", "medium", "high"] }] temperature = true tool_call = true knowledge = "2024-10" open_weights = false +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high"] + [cost] input = 0.25 output = 2 cache_read = 0.05 +[[cost.tiers]] +tier = { type = "context", size = 128_001 } +input = 0.5 +output = 4 +cache_read = 0.05 + [limit] context = 256_000 output = 64_000 diff --git a/providers/vercel/models/bytedance/seed-2.1-turbo.toml b/providers/vercel/models/bytedance/seed-2.1-turbo.toml new file mode 100644 index 00000000000..515539af756 --- /dev/null +++ b/providers/vercel/models/bytedance/seed-2.1-turbo.toml @@ -0,0 +1,25 @@ +# Effort: reasoning.effort = none|minimal|low|medium|high|xhigh|max +# https://vercel.com/docs/ai-gateway/sdks-and-apis/openai-chat-completions/reasoning +name = "Seed 2.1 Turbo" +description = "Multimodal reasoning model for visual analysis, planning, and tool use" +family = "seed" +release_date = "2026-06-23" +last_updated = "2026-06-23" +attachment = true +reasoning = true +tool_call = true +open_weights = false +reasoning_options = [{ type = "effort", values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 0.5 +output = 2.5 +cache_read = 0.1 + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/vercel/models/cohere/rerank-v3.5.toml b/providers/vercel/models/cohere/rerank-v3.5.toml index 333260d3e7b..d043fba35e3 100644 --- a/providers/vercel/models/cohere/rerank-v3.5.toml +++ b/providers/vercel/models/cohere/rerank-v3.5.toml @@ -1,6 +1,5 @@ name = "Cohere Rerank 3.5" description = "Reranking model for improving retrieval quality in search and recommendation systems" -family = "o" release_date = "2024-12-02" last_updated = "2024-12-02" attachment = false diff --git a/providers/vercel/models/cohere/rerank-v4-fast.toml b/providers/vercel/models/cohere/rerank-v4-fast.toml index d2768d8e5da..6dfc23fb7d9 100644 --- a/providers/vercel/models/cohere/rerank-v4-fast.toml +++ b/providers/vercel/models/cohere/rerank-v4-fast.toml @@ -1,6 +1,5 @@ name = "Cohere Rerank 4 Fast" description = "Reranking model for improving retrieval quality in search and recommendation systems" -family = "o" release_date = "2025-12-11" last_updated = "2025-12-11" attachment = false diff --git a/providers/vercel/models/cohere/rerank-v4-pro.toml b/providers/vercel/models/cohere/rerank-v4-pro.toml index e7e41c0c6b6..e2e994e8fa2 100644 --- a/providers/vercel/models/cohere/rerank-v4-pro.toml +++ b/providers/vercel/models/cohere/rerank-v4-pro.toml @@ -1,6 +1,5 @@ name = "Cohere Rerank 4 Pro" description = "Reranking model for improving retrieval quality in search and recommendation systems" -family = "o" release_date = "2025-12-11" last_updated = "2025-12-11" attachment = false diff --git a/providers/vercel/models/deepseek/deepseek-v3.2.toml b/providers/vercel/models/deepseek/deepseek-v3.2.toml index af269904ff9..32a4b99d4ca 100644 --- a/providers/vercel/models/deepseek/deepseek-v3.2.toml +++ b/providers/vercel/models/deepseek/deepseek-v3.2.toml @@ -4,9 +4,8 @@ reasoning = false tool_call = false [cost] -input = 0.28 -output = 0.42 -cache_read = 0.028 +input = 0.62 +output = 1.85 [limit] output = 8_000 diff --git a/providers/vercel/models/deepseek/deepseek-v3.toml b/providers/vercel/models/deepseek/deepseek-v3.toml deleted file mode 100644 index 9e57b84026b..00000000000 --- a/providers/vercel/models/deepseek/deepseek-v3.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_model = "deepseek/deepseek-v3" -name = "DeepSeek V3 0324" -description = "DeepSeek chat model for instruction following, coding, and analysis" - -[cost] -input = 0.27 -output = 1.12 -cache_read = 0.135 - -[limit] -context = 163_840 -output = 163_840 diff --git a/providers/vercel/models/deepseek/deepseek-v4-flash-vision-exp.toml b/providers/vercel/models/deepseek/deepseek-v4-flash-vision-exp.toml index 39732a870e7..c3974ea5f6a 100644 --- a/providers/vercel/models/deepseek/deepseek-v4-flash-vision-exp.toml +++ b/providers/vercel/models/deepseek/deepseek-v4-flash-vision-exp.toml @@ -1,7 +1,17 @@ base_model = "deepseek/deepseek-v4-flash-vision-exp" -reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["high", "xhigh"] }] + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["high", "xhigh"] [cost] input = 0.22 output = 0.66 cache_read = 0.007 + +[limit] +context = 1_048_576 +output = 1_048_576 diff --git a/providers/vercel/models/deepseek/deepseek-v4-pro.toml b/providers/vercel/models/deepseek/deepseek-v4-pro.toml index 917089fcfb7..d1c7fbe6694 100644 --- a/providers/vercel/models/deepseek/deepseek-v4-pro.toml +++ b/providers/vercel/models/deepseek/deepseek-v4-pro.toml @@ -8,10 +8,6 @@ type = "effort" values = ["high", "xhigh"] [cost] -input = 1.74 -output = 3.48 -cache_read = 0.14 - -[limit] -context = 1_048_600 -output = 1_048_600 +input = 0.66 +output = 1.98 +cache_read = 0.022 diff --git a/providers/vercel/models/deepseek/deepseek-v4.1-flash.toml b/providers/vercel/models/deepseek/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..5d9ec77c911 --- /dev/null +++ b/providers/vercel/models/deepseek/deepseek-v4.1-flash.toml @@ -0,0 +1,19 @@ +# Toggle: reasoning.enabled = true|false +# Effort: reasoning.effort = high|xhigh (Vercel gateway aliases) +base_model = "deepseek/deepseek-v4.1-flash" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["high", "xhigh"] + +[cost] +input = 0.3 +output = 1.2 +cache_read = 0.007 + +[limit] +context = 1_048_576 +output = 32_768 diff --git a/providers/vercel/models/fish-audio/s1-free.toml b/providers/vercel/models/fish-audio/s1-free.toml deleted file mode 100644 index 031d08ec2c0..00000000000 --- a/providers/vercel/models/fish-audio/s1-free.toml +++ /dev/null @@ -1,17 +0,0 @@ -name = "S1 (Free)" -description = "Speech generation model for controllable voice, narration, and audio delivery" -family = "o" -release_date = "2025-10-20" -last_updated = "2025-10-20" -attachment = false -reasoning = false -tool_call = false -open_weights = false - -[limit] -context = 0 -output = 0 - -[modalities] -input = ["text"] -output = ["audio"] diff --git a/providers/vercel/models/fish-audio/s1.toml b/providers/vercel/models/fish-audio/s1.toml index 3b68c1120b6..775ab2b196e 100644 --- a/providers/vercel/models/fish-audio/s1.toml +++ b/providers/vercel/models/fish-audio/s1.toml @@ -1,6 +1,5 @@ name = "S1" description = "Speech generation model for controllable voice, narration, and audio delivery" -family = "o" release_date = "2025-10-20" last_updated = "2025-10-20" attachment = false diff --git a/providers/vercel/models/fish-audio/s2-pro-free.toml b/providers/vercel/models/fish-audio/s2-pro-free.toml deleted file mode 100644 index 2a65d6f5b70..00000000000 --- a/providers/vercel/models/fish-audio/s2-pro-free.toml +++ /dev/null @@ -1,17 +0,0 @@ -name = "S2 Pro (Free)" -description = "Speech generation model for controllable voice, narration, and audio delivery" -family = "o" -release_date = "2026-03-09" -last_updated = "2026-03-09" -attachment = false -reasoning = false -tool_call = false -open_weights = false - -[limit] -context = 0 -output = 0 - -[modalities] -input = ["text"] -output = ["audio"] diff --git a/providers/vercel/models/fish-audio/s2-pro.toml b/providers/vercel/models/fish-audio/s2-pro.toml index a60fb8fe76b..b154766892a 100644 --- a/providers/vercel/models/fish-audio/s2-pro.toml +++ b/providers/vercel/models/fish-audio/s2-pro.toml @@ -1,6 +1,5 @@ name = "S2 Pro" description = "Speech generation model for controllable voice, narration, and audio delivery" -family = "o" release_date = "2026-03-09" last_updated = "2026-03-09" attachment = false diff --git a/providers/vercel/models/fish-audio/s2.1-pro-free.toml b/providers/vercel/models/fish-audio/s2.1-pro-free.toml deleted file mode 100644 index d1c95dc0d10..00000000000 --- a/providers/vercel/models/fish-audio/s2.1-pro-free.toml +++ /dev/null @@ -1,17 +0,0 @@ -name = "S2.1 Pro (Free)" -description = "Speech generation model for controllable voice, narration, and audio delivery" -family = "o" -release_date = "2026-07-28" -last_updated = "2026-07-28" -attachment = false -reasoning = false -tool_call = false -open_weights = false - -[limit] -context = 0 -output = 0 - -[modalities] -input = ["text"] -output = ["audio"] diff --git a/providers/vercel/models/fish-audio/s2.1-pro.toml b/providers/vercel/models/fish-audio/s2.1-pro.toml index b28b42f7465..de3b45e925d 100644 --- a/providers/vercel/models/fish-audio/s2.1-pro.toml +++ b/providers/vercel/models/fish-audio/s2.1-pro.toml @@ -1,6 +1,5 @@ name = "S2.1 Pro" description = "Speech generation model for controllable voice, narration, and audio delivery" -family = "o" release_date = "2026-07-28" last_updated = "2026-07-28" attachment = false diff --git a/providers/vercel/models/fish-audio/transcribe-1-free.toml b/providers/vercel/models/fish-audio/transcribe-1-free.toml deleted file mode 100644 index e03d53fa6fa..00000000000 --- a/providers/vercel/models/fish-audio/transcribe-1-free.toml +++ /dev/null @@ -1,17 +0,0 @@ -name = "Transcribe-1 (Free)" -description = "Speech transcription model for accurate audio-to-text and captioning workflows" -family = "o" -release_date = "2026-03-01" -last_updated = "2026-03-01" -attachment = false -reasoning = false -tool_call = false -open_weights = false - -[limit] -context = 0 -output = 0 - -[modalities] -input = ["audio"] -output = ["text"] diff --git a/providers/vercel/models/fish-audio/transcribe-1.toml b/providers/vercel/models/fish-audio/transcribe-1.toml index 7020c7432f1..a988499717a 100644 --- a/providers/vercel/models/fish-audio/transcribe-1.toml +++ b/providers/vercel/models/fish-audio/transcribe-1.toml @@ -1,6 +1,5 @@ name = "Transcribe-1" description = "Speech transcription model for accurate audio-to-text and captioning workflows" -family = "o" release_date = "2026-03-01" last_updated = "2026-03-01" attachment = false diff --git a/providers/vercel/models/google/gemini-2.5-flash-image.toml b/providers/vercel/models/google/gemini-2.5-flash-image.toml index 1ea71885c13..115f8bd626c 100644 --- a/providers/vercel/models/google/gemini-2.5-flash-image.toml +++ b/providers/vercel/models/google/gemini-2.5-flash-image.toml @@ -2,7 +2,6 @@ base_model = "google/gemini-2.5-flash-image" name = "Nano Banana (Gemini 2.5 Flash Image)" attachment = false reasoning = false -knowledge = "2025-01" [cost] input = 0.3 @@ -10,4 +9,4 @@ output = 2.5 cache_read = 0.03 [limit] -output = 65_536 +output = 65_535 diff --git a/providers/vercel/models/google/gemini-2.5-flash-lite.toml b/providers/vercel/models/google/gemini-2.5-flash-lite.toml index 9dbd105b8d4..c77c8d9fb11 100644 --- a/providers/vercel/models/google/gemini-2.5-flash-lite.toml +++ b/providers/vercel/models/google/gemini-2.5-flash-lite.toml @@ -1,12 +1,21 @@ base_model = "google/gemini-2.5-flash-lite" -reasoning_options = [{ type = "toggle" }, { type = "budget_tokens", min = 512, max = 24_576 }] name = "Gemini 2.5 Flash Lite" +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "budget_tokens" +min = 512 +max = 24_576 + [cost] input = 0.1 output = 0.4 cache_read = 0.01 +[limit] +output = 65_535 + [modalities] input = ["text", "image", "pdf"] -output = ["text"] diff --git a/providers/vercel/models/google/gemini-3.1-pro-preview.toml b/providers/vercel/models/google/gemini-3.1-pro-preview.toml index 31fde20cebe..742f9779a46 100644 --- a/providers/vercel/models/google/gemini-3.1-pro-preview.toml +++ b/providers/vercel/models/google/gemini-3.1-pro-preview.toml @@ -9,6 +9,12 @@ input = 2 output = 12 cache_read = 0.2 +[[cost.tiers]] +tier = { type = "context", size = 200_001 } +input = 4 +output = 18 +cache_read = 0.4 + [limit] context = 1_000_000 output = 64_000 diff --git a/providers/vercel/models/google/gemini-3.5-transcribe.toml b/providers/vercel/models/google/gemini-3.5-transcribe.toml new file mode 100644 index 00000000000..94262e42d64 --- /dev/null +++ b/providers/vercel/models/google/gemini-3.5-transcribe.toml @@ -0,0 +1,21 @@ +name = "Gemini 3.5 Transcribe" +description = "Speech transcription model for accurate audio-to-text and captioning workflows" +family = "gemini" +release_date = "2026-08-26" +last_updated = "2026-08-26" +attachment = false +reasoning = false +tool_call = false +open_weights = false + +[cost] +input = 2 +output = 12 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["audio"] +output = ["text"] diff --git a/providers/vercel/models/google/gemini-3.7-flash.toml b/providers/vercel/models/google/gemini-3.7-flash.toml index 9a978ed0a3b..c75cf2fdf40 100644 --- a/providers/vercel/models/google/gemini-3.7-flash.toml +++ b/providers/vercel/models/google/gemini-3.7-flash.toml @@ -12,6 +12,7 @@ cache_read = 0.075 [limit] context = 1_000_000 +output = 65_535 [modalities] input = ["text", "image", "pdf"] diff --git a/providers/vercel/models/google/gemini-3.8-flash-lite-tts.toml b/providers/vercel/models/google/gemini-3.8-flash-lite-tts.toml new file mode 100644 index 00000000000..00a0a5f1313 --- /dev/null +++ b/providers/vercel/models/google/gemini-3.8-flash-lite-tts.toml @@ -0,0 +1,22 @@ +name = "Gemini 3.8 Flash-Lite TTS" +description = "Speech generation model for controllable voice, narration, and audio delivery" +family = "gemini" +release_date = "2026-09-23" +last_updated = "2026-09-23" +attachment = false +reasoning = false +tool_call = false +open_weights = false + +[cost] +input = 0.5 +output = 6 +cache_read = 0.125 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["audio"] diff --git a/providers/vercel/models/google/gemini-3.8-flash-tts.toml b/providers/vercel/models/google/gemini-3.8-flash-tts.toml new file mode 100644 index 00000000000..7b51ef7d3af --- /dev/null +++ b/providers/vercel/models/google/gemini-3.8-flash-tts.toml @@ -0,0 +1,22 @@ +name = "Gemini 3.8 Flash TTS" +description = "Speech generation model for controllable voice, narration, and audio delivery" +family = "gemini" +release_date = "2026-09-23" +last_updated = "2026-09-23" +attachment = false +reasoning = false +tool_call = false +open_weights = false + +[cost] +input = 0.5 +output = 9 +cache_read = 0.125 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["audio"] diff --git a/providers/vercel/models/google/gemini-3.8-flash.toml b/providers/vercel/models/google/gemini-3.8-flash.toml new file mode 100644 index 00000000000..39eb1bf1658 --- /dev/null +++ b/providers/vercel/models/google/gemini-3.8-flash.toml @@ -0,0 +1,14 @@ +base_model = "google/gemini-3.8-flash" +reasoning_options = [] + +[cost] +input = 0.75 +output = 3.75 +cache_read = 0.075 + +[limit] +context = 1_000_000 +output = 65_535 + +[modalities] +input = ["text", "image", "pdf"] diff --git a/providers/vercel/models/google/gemini-3.8-live-extended-thinking.toml b/providers/vercel/models/google/gemini-3.8-live-extended-thinking.toml new file mode 100644 index 00000000000..e87d4aa6da0 --- /dev/null +++ b/providers/vercel/models/google/gemini-3.8-live-extended-thinking.toml @@ -0,0 +1,21 @@ +name = "Gemini 3.8 Live Extended Thinking" +description = "Speech generation model for controllable voice, narration, and audio delivery" +family = "gemini" +release_date = "2026-09-15" +last_updated = "2026-09-15" +attachment = false +reasoning = false +tool_call = false +open_weights = false + +[cost] +input = 0.75 +output = 4.5 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text", "audio"] +output = ["text", "audio"] diff --git a/providers/vercel/models/google/gemini-3.8-live.toml b/providers/vercel/models/google/gemini-3.8-live.toml new file mode 100644 index 00000000000..2e5224a264a --- /dev/null +++ b/providers/vercel/models/google/gemini-3.8-live.toml @@ -0,0 +1,21 @@ +name = "Gemini 3.8 Live" +description = "Speech generation model for controllable voice, narration, and audio delivery" +family = "gemini" +release_date = "2026-09-15" +last_updated = "2026-09-15" +attachment = false +reasoning = false +tool_call = false +open_weights = false + +[cost] +input = 0.75 +output = 4.5 + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text", "audio"] +output = ["text", "audio"] diff --git a/providers/vercel/models/inception/mercury-2.5.toml b/providers/vercel/models/inception/mercury-2.5.toml new file mode 100644 index 00000000000..24e73a012a7 --- /dev/null +++ b/providers/vercel/models/inception/mercury-2.5.toml @@ -0,0 +1,25 @@ +# Effort: reasoning.effort = none|low|medium|high +# Native levels: https://docs.inceptionlabs.ai/capabilities/instant +name = "Mercury 2.5" +description = "Reasoning model for deliberate analysis, multi-step problem solving, and tool use" +family = "mercury" +release_date = "2026-09-08" +last_updated = "2026-09-08" +attachment = false +reasoning = true +tool_call = true +open_weights = false +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] + +[cost] +input = 0.04 +output = 0.15 +cache_read = 0.004 + +[limit] +context = 260_000 +output = 65_536 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/vercel/models/inclusionai/ling-3.0-flash-fin-free.toml b/providers/vercel/models/inclusionai/ling-3.0-flash-fin-free.toml new file mode 100644 index 00000000000..ac37b48734e --- /dev/null +++ b/providers/vercel/models/inclusionai/ling-3.0-flash-fin-free.toml @@ -0,0 +1,14 @@ +# Toggle: reasoning.enabled = true|false (Chat Completions API) +# https://vercel.com/docs/ai-gateway/sdks-and-apis/openai-chat-completions/reasoning +# https://ai-gateway.vercel.sh/v1/models/inclusionai/ling-3.0-flash-fin-free/endpoints +base_model = "inclusionai/ling-3.0-flash-fin" +name = "Ling 3.0 Flash Fin (Free)" +reasoning_options = [{ type = "toggle" }] + +[cost] +input = 0 +output = 0 + +[limit] +context = 256_000 +output = 32_000 diff --git a/providers/vercel/models/inclusionai/ling-3.0-flash-fin.toml b/providers/vercel/models/inclusionai/ling-3.0-flash-fin.toml new file mode 100644 index 00000000000..757facd2dbc --- /dev/null +++ b/providers/vercel/models/inclusionai/ling-3.0-flash-fin.toml @@ -0,0 +1,13 @@ +# Toggle: reasoning.enabled = true|false (Chat Completions API) +# https://vercel.com/docs/ai-gateway/sdks-and-apis/openai-chat-completions/reasoning +# https://ai-gateway.vercel.sh/v1/models/inclusionai/ling-3.0-flash-fin/endpoints +base_model = "inclusionai/ling-3.0-flash-fin" +reasoning_options = [{ type = "toggle" }] + +[cost] +input = 0 +output = 0 + +[limit] +context = 256_000 +output = 32_000 diff --git a/providers/vercel/models/inclusionai/ling-3.0-flash-sante-free.toml b/providers/vercel/models/inclusionai/ling-3.0-flash-sante-free.toml new file mode 100644 index 00000000000..c7910d31b2a --- /dev/null +++ b/providers/vercel/models/inclusionai/ling-3.0-flash-sante-free.toml @@ -0,0 +1,22 @@ +name = "Ling 3.0 Flash Sante (Free)" +description = "Efficient model for low-latency assistance, extraction, and routine automation" +family = "ling" +release_date = "2026-09-04" +last_updated = "2026-09-04" +attachment = false +reasoning = true +tool_call = true +open_weights = false +reasoning_options = [] + +[cost] +input = 0 +output = 0 + +[limit] +context = 256_000 +output = 32_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/vercel/models/inclusionai/ling-3.0-flash-sante.toml b/providers/vercel/models/inclusionai/ling-3.0-flash-sante.toml new file mode 100644 index 00000000000..a4a58b331ba --- /dev/null +++ b/providers/vercel/models/inclusionai/ling-3.0-flash-sante.toml @@ -0,0 +1,22 @@ +name = "Ling 3.0 Flash Sante" +description = "Efficient model for low-latency assistance, extraction, and routine automation" +family = "ling" +release_date = "2026-09-04" +last_updated = "2026-09-04" +attachment = false +reasoning = true +tool_call = true +open_weights = false +reasoning_options = [] + +[cost] +input = 0 +output = 0 + +[limit] +context = 256_000 +output = 32_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/vercel/models/inclusionai/ling-3.0-flash-vl.toml b/providers/vercel/models/inclusionai/ling-3.0-flash-vl.toml new file mode 100644 index 00000000000..1084acba3f0 --- /dev/null +++ b/providers/vercel/models/inclusionai/ling-3.0-flash-vl.toml @@ -0,0 +1,27 @@ +# Toggle: reasoning.enabled = true|false +# https://vercel.com/docs/ai-gateway/sdks-and-apis/openai-chat-completions/reasoning +name = "Ling 3.0 Flash VL" +description = "Multimodal reasoning model for visual analysis, planning, and tool use" +family = "ling" +release_date = "2026-09-08" +last_updated = "2026-09-08" +attachment = true +reasoning = true +tool_call = true +open_weights = false + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.075 +output = 0.015 +cache_read = 0.22 + +[limit] +context = 256_000 +output = 32_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/vercel/models/inclusionai/ling-3.0-flash.toml b/providers/vercel/models/inclusionai/ling-3.0-flash.toml index 5f0c3f52fde..dd3bac573c4 100644 --- a/providers/vercel/models/inclusionai/ling-3.0-flash.toml +++ b/providers/vercel/models/inclusionai/ling-3.0-flash.toml @@ -10,9 +10,9 @@ open_weights = false reasoning_options = [] [cost] -input = 0.06 -output = 0.18 -cache_read = 0.012 +input = 0.021 +output = 0.063 +cache_read = 0.0042 [limit] context = 256_000 diff --git a/providers/vercel/models/inference-net/schematron-v2-small.toml b/providers/vercel/models/inference-net/schematron-v2-small.toml new file mode 100644 index 00000000000..7a30cc2781e --- /dev/null +++ b/providers/vercel/models/inference-net/schematron-v2-small.toml @@ -0,0 +1,21 @@ +name = "Schematron V2 Small" +description = "Efficient model for low-latency assistance, extraction, and routine automation" +release_date = "2026-04-16" +last_updated = "2026-04-16" +attachment = false +reasoning = false +tool_call = false +open_weights = false + +[cost] +input = 0.05 +output = 0.23 +cache_read = 0.05 + +[limit] +context = 128_000 +output = 4_096 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/vercel/models/inference-net/schematron-v2-turbo.toml b/providers/vercel/models/inference-net/schematron-v2-turbo.toml new file mode 100644 index 00000000000..ad615547b48 --- /dev/null +++ b/providers/vercel/models/inference-net/schematron-v2-turbo.toml @@ -0,0 +1,21 @@ +name = "Schematron V2 Turbo" +description = "Efficient model for low-latency assistance, extraction, and routine automation" +release_date = "2026-04-16" +last_updated = "2026-04-16" +attachment = false +reasoning = false +tool_call = false +open_weights = false + +[cost] +input = 0.03 +output = 0.15 +cache_read = 0.03 + +[limit] +context = 128_000 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/vercel/models/kwaipilot/kat-coder-air-v2.5.toml b/providers/vercel/models/kwaipilot/kat-coder-air-v2.5.toml deleted file mode 100644 index 0ea0c30f8c9..00000000000 --- a/providers/vercel/models/kwaipilot/kat-coder-air-v2.5.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Kat Coder Air V2.5" -description = "Coding model for repository understanding, refactors, and agentic engineering tasks" -family = "kat-coder" -release_date = "2026-07-10" -last_updated = "2026-07-10" -attachment = false -reasoning = true -temperature = true -tool_call = true -open_weights = false -reasoning_options = [] - -[cost] -input = 0.15 -output = 0.6 -cache_read = 0.03 - -[limit] -context = 256_000 -output = 80_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/vercel/models/kwaipilot/kat-coder-pro-v1.toml b/providers/vercel/models/kwaipilot/kat-coder-pro-v1.toml deleted file mode 100644 index 103b91326ad..00000000000 --- a/providers/vercel/models/kwaipilot/kat-coder-pro-v1.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "KAT-Coder-Pro V1" -description = "Coding model for repository understanding, refactors, and agentic engineering tasks" -family = "kat-coder" -release_date = "2025-11-09" -last_updated = "2025-10-24" -attachment = false -reasoning = true -temperature = true -tool_call = false -knowledge = "2024-10" -open_weights = false -reasoning_options = [] - -[cost] -input = 0.3 -output = 1.2 -cache_read = 0.06 - -[limit] -context = 256_000 -output = 32_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/vercel/models/kwaipilot/kat-coder-pro-v2.5.toml b/providers/vercel/models/kwaipilot/kat-coder-pro-v2.5.toml deleted file mode 100644 index f3a7b4d82b5..00000000000 --- a/providers/vercel/models/kwaipilot/kat-coder-pro-v2.5.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Kat Coder Pro V2.5" -description = "Coding model for repository understanding, refactors, and agentic engineering tasks" -family = "kat-coder" -release_date = "2026-07-10" -last_updated = "2026-07-10" -attachment = false -reasoning = true -temperature = true -tool_call = true -open_weights = false -reasoning_options = [] - -[cost] -input = 0.74 -output = 2.96 -cache_read = 0.15 - -[limit] -context = 256_000 -output = 80_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/vercel/models/kwaipilot/kat-coder-pro-v2.toml b/providers/vercel/models/kwaipilot/kat-coder-pro-v2.toml deleted file mode 100644 index 7c1813d40df..00000000000 --- a/providers/vercel/models/kwaipilot/kat-coder-pro-v2.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Kat Coder Pro V2" -description = "Coding model for repository understanding, refactors, and agentic engineering tasks" -family = "kat-coder" -attachment = false -reasoning = true -reasoning_options = [] -tool_call = true -temperature = true -release_date = "2026-03-27" -last_updated = "2026-03-30" -open_weights = false - -[cost] -input = 0.3 -output = 1.2 -cache_read = 0.06 - -[limit] -context = 256_000 -output = 256_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/vercel/models/meta/muse-image-1.0.toml b/providers/vercel/models/meta/muse-image-1.0.toml new file mode 100644 index 00000000000..723480c3b26 --- /dev/null +++ b/providers/vercel/models/meta/muse-image-1.0.toml @@ -0,0 +1,17 @@ +name = "Muse Image 1.0" +description = "Image model for prompt-driven generation, editing, and visual design workflows" +family = "muse" +release_date = "2026-08-26" +last_updated = "2026-08-26" +attachment = true +reasoning = false +tool_call = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text", "image"] +output = ["image"] diff --git a/providers/vercel/models/meta/muse-spark-1.1.toml b/providers/vercel/models/meta/muse-spark-1.1.toml index e0e2bdd14ce..6a2711cb198 100644 --- a/providers/vercel/models/meta/muse-spark-1.1.toml +++ b/providers/vercel/models/meta/muse-spark-1.1.toml @@ -12,7 +12,6 @@ output = 4.25 cache_read = 0.15 [limit] -context = 1_048_576 output = 1_048_576 [modalities] diff --git a/providers/vercel/models/meta/muse-spark-1.2-contributor.toml b/providers/vercel/models/meta/muse-spark-1.2-contributor.toml index d2a048e3964..e3d37635419 100644 --- a/providers/vercel/models/meta/muse-spark-1.2-contributor.toml +++ b/providers/vercel/models/meta/muse-spark-1.2-contributor.toml @@ -1,3 +1,9 @@ +# Effort: reasoning_effort / reasoning.effort = minimal|low|medium|high|xhigh +# Empty [] was incorrect: Muse Spark exposes graded effort; OpenCode treats [] as no variants. +# max is not available on Contributor / 1.2 tiers per Meta reasoning docs. +# https://ai.developer.meta.com/docs/reasoning +# https://dev.meta.ai/docs/reasoning +# https://vercel.com/docs/ai-gateway/sdks-and-apis/openai-chat-completions/reasoning name = "Muse Spark 1.2 Contributor" description = "Open Llama multimodal model for image understanding and text reasoning" family = "muse" @@ -7,7 +13,7 @@ attachment = true reasoning = true tool_call = true open_weights = false -reasoning_options = [] +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high", "xhigh"] }] [cost] input = 0.1 diff --git a/providers/vercel/models/meta/muse-spark-1.3-contributor.toml b/providers/vercel/models/meta/muse-spark-1.3-contributor.toml new file mode 100644 index 00000000000..4607838838e --- /dev/null +++ b/providers/vercel/models/meta/muse-spark-1.3-contributor.toml @@ -0,0 +1,29 @@ +# Effort: reasoning_effort / reasoning.effort = minimal|low|medium|high|xhigh +# Empty [] was incorrect: Muse Spark exposes graded effort; OpenCode treats [] as no variants. +# max is Standard-tier muse-spark-1.3 only (not Contributor) per Meta reasoning docs. +# https://ai.developer.meta.com/docs/reasoning +# https://dev.meta.ai/docs/reasoning +# https://vercel.com/docs/ai-gateway/sdks-and-apis/openai-chat-completions/reasoning +name = "Muse Spark 1.3 Contributor" +description = "Open Llama multimodal model for image understanding and text reasoning" +family = "muse" +release_date = "2026-09-02" +last_updated = "2026-09-02" +attachment = true +reasoning = true +tool_call = true +open_weights = false +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high", "xhigh"] }] + +[cost] +input = 0.1 +output = 0.2 +cache_read = 0.002 + +[limit] +context = 1_048_576 +output = 1_048_576 + +[modalities] +input = ["text", "image", "pdf"] +output = ["text"] diff --git a/providers/vercel/models/meta/muse-spark-1.3.toml b/providers/vercel/models/meta/muse-spark-1.3.toml new file mode 100644 index 00000000000..22c06967dca --- /dev/null +++ b/providers/vercel/models/meta/muse-spark-1.3.toml @@ -0,0 +1,20 @@ +# Effort: providerOptions.openai.reasoningEffort = minimal|low|medium|high|xhigh|max +# Verified via Chat Completions with providerOptions.gateway.only = ["meta"] on 2026-09-04. +# Native max succeeds on standard 1.3 and is rejected on Contributor/1.2; generic reasoning.effort also accepts those unsupported combinations. +# https://research.meta.ai/blog/introducing-muse-spark-1-3 +# https://vercel.com/docs/ai-gateway/sdks-and-apis/openai-chat-completions/advanced +# https://dev.meta.ai/docs/reasoning.md +base_model = "meta/muse-spark-1.3" +description = "Open Llama multimodal model for image understanding and text reasoning" +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 1.25 +output = 4.25 +cache_read = 0.15 + +[limit] +output = 1_048_576 + +[modalities] +input = ["text", "image", "pdf"] diff --git a/providers/vercel/models/minimax/minimax-h3-max.toml b/providers/vercel/models/minimax/minimax-h3-max.toml new file mode 100644 index 00000000000..7523209ec56 --- /dev/null +++ b/providers/vercel/models/minimax/minimax-h3-max.toml @@ -0,0 +1,17 @@ +name = "MiniMax H3 Max" +description = "Video model for prompt-guided generation, editing, and motion workflows" +family = "minimax" +release_date = "2026-08-27" +last_updated = "2026-08-27" +attachment = true +reasoning = false +tool_call = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text", "image"] +output = ["video"] diff --git a/providers/vercel/models/minimax/minimax-m2.7-free.toml b/providers/vercel/models/minimax/minimax-m2.7-free.toml deleted file mode 100644 index d47133c050a..00000000000 --- a/providers/vercel/models/minimax/minimax-m2.7-free.toml +++ /dev/null @@ -1,11 +0,0 @@ -base_model = "minimax/MiniMax-M2.7" -name = "Minimax M2.7 (Free)" -reasoning_options = [] - -[cost] -input = 0 -output = 0 - -[limit] -context = 196_608 -output = 196_608 diff --git a/providers/vercel/models/minimax/minimax-m3-free.toml b/providers/vercel/models/minimax/minimax-m3-free.toml deleted file mode 100644 index c277befa85d..00000000000 --- a/providers/vercel/models/minimax/minimax-m3-free.toml +++ /dev/null @@ -1,16 +0,0 @@ -base_model = "minimax/MiniMax-M3" -name = "MiniMax M3 (Free)" - -[[reasoning_options]] -type = "toggle" - -[cost] -input = 0 -output = 0 -cache_read = 0 - -[limit] -output = 1_048_576 - -[modalities] -input = ["text", "image"] diff --git a/providers/vercel/models/minimax/minimax-m3.toml b/providers/vercel/models/minimax/minimax-m3.toml index e63dc74aa5e..c17b68ca01e 100644 --- a/providers/vercel/models/minimax/minimax-m3.toml +++ b/providers/vercel/models/minimax/minimax-m3.toml @@ -10,8 +10,7 @@ output = 1.2 cache_read = 0.06 [limit] -context = 1_000_000 -output = 1_000_000 +context = 512_000 [modalities] input = ["text", "image", "pdf"] diff --git a/providers/vercel/models/mistral/devstral-2.toml b/providers/vercel/models/mistral/devstral-2.toml deleted file mode 100644 index 39dcd7ae233..00000000000 --- a/providers/vercel/models/mistral/devstral-2.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Devstral 2" -description = "Mistral coding agent model for repository tasks and software engineering workflows" -family = "devstral" -release_date = "2025-12-09" -last_updated = "2025-12-09" -attachment = false -reasoning = false -temperature = true -tool_call = true -knowledge = "2024-10" -open_weights = false - -[cost] -input = 0.4 -output = 2 - -[limit] -context = 256_000 -output = 256_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/vercel/models/mistral/devstral-small-2.toml b/providers/vercel/models/mistral/devstral-small-2.toml deleted file mode 100644 index ba8cd035573..00000000000 --- a/providers/vercel/models/mistral/devstral-small-2.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Devstral Small 2" -description = "Mistral coding agent model for repository tasks and software engineering workflows" -family = "devstral" -release_date = "2025-12-09" -last_updated = "2025-05-07" -attachment = false -reasoning = false -temperature = true -tool_call = true -knowledge = "2024-10" -open_weights = false - -[cost] -input = 0.1 -output = 0.3 - -[limit] -context = 256_000 -output = 256_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/vercel/models/mistral/ministral-14b.toml b/providers/vercel/models/mistral/ministral-14b.toml index 0e0cab05c58..4d50bcd5a30 100644 --- a/providers/vercel/models/mistral/ministral-14b.toml +++ b/providers/vercel/models/mistral/ministral-14b.toml @@ -13,9 +13,10 @@ open_weights = false [cost] input = 0.2 output = 0.2 +cache_read = 0.02 [limit] -context = 256_000 +context = 262_144 output = 256_000 [modalities] diff --git a/providers/vercel/models/mistral/mistral-large-3.toml b/providers/vercel/models/mistral/mistral-large-3.toml index 34f5793e606..ed49c090141 100644 --- a/providers/vercel/models/mistral/mistral-large-3.toml +++ b/providers/vercel/models/mistral/mistral-large-3.toml @@ -7,16 +7,17 @@ attachment = true reasoning = false temperature = true tool_call = false -open_weights = false knowledge = "2024-10" +open_weights = false [cost] input = 0.5 output = 1.5 +cache_read = 0.05 [limit] -context = 256000 -output = 256000 +context = 262_144 +output = 256_000 [modalities] input = ["text", "image"] diff --git a/providers/vercel/models/mistral/mistral-medium-3.5.toml b/providers/vercel/models/mistral/mistral-medium-3.5.toml index 71e72a2295f..df6e48742b3 100644 --- a/providers/vercel/models/mistral/mistral-medium-3.5.toml +++ b/providers/vercel/models/mistral/mistral-medium-3.5.toml @@ -16,9 +16,10 @@ values = ["none", "high"] [cost] input = 1.5 output = 7.5 +cache_read = 0.15 [limit] -context = 256_000 +context = 262_144 output = 256_000 [modalities] diff --git a/providers/vercel/models/mistral/mistral-medium.toml b/providers/vercel/models/mistral/mistral-medium.toml deleted file mode 100644 index 55cd916da3d..00000000000 --- a/providers/vercel/models/mistral/mistral-medium.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Mistral Medium 3.1" -description = "Mistral model for multilingual chat, reasoning, and tool-assisted workflows" -family = "mistral-medium" -release_date = "2025-05-07" -last_updated = "2025-05-07" -attachment = true -reasoning = false -temperature = true -tool_call = true -open_weights = false -knowledge = "2024-10" - -[cost] -input = 0.4 -output = 2 - -[limit] -context = 128000 -output = 64000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/vercel/models/mistral/mistral-nemo.toml b/providers/vercel/models/mistral/mistral-nemo.toml index d9f4b04fa40..d3fdcb8bd53 100644 --- a/providers/vercel/models/mistral/mistral-nemo.toml +++ b/providers/vercel/models/mistral/mistral-nemo.toml @@ -11,13 +11,13 @@ knowledge = "2024-04" open_weights = false [cost] -input = 0.15 -output = 0.15 +input = 0.04 +output = 0.17 [limit] -context = 128_000 -output = 128_000 +context = 60_288 +output = 16_000 [modalities] -input = ["text", "image"] +input = ["text"] output = ["text"] diff --git a/providers/vercel/models/mistral/mistral-small.toml b/providers/vercel/models/mistral/mistral-small.toml index 6dfa15d7429..588d0d8c5fb 100644 --- a/providers/vercel/models/mistral/mistral-small.toml +++ b/providers/vercel/models/mistral/mistral-small.toml @@ -11,11 +11,12 @@ knowledge = "2025-06" open_weights = true [cost] -input = 0.1 -output = 0.3 +input = 0.15 +output = 0.6 +cache_read = 0.015 [limit] -context = 32_000 +context = 262_144 output = 4_000 [modalities] diff --git a/providers/vercel/models/mistral/pixtral-12b.toml b/providers/vercel/models/mistral/pixtral-12b.toml deleted file mode 120000 index c1f9fff3648..00000000000 --- a/providers/vercel/models/mistral/pixtral-12b.toml +++ /dev/null @@ -1 +0,0 @@ -../../../mistral/models/pixtral-12b.toml \ No newline at end of file diff --git a/providers/vercel/models/mixedbread/toast-1.toml b/providers/vercel/models/mixedbread/toast-1.toml new file mode 100644 index 00000000000..b50f8e55367 --- /dev/null +++ b/providers/vercel/models/mixedbread/toast-1.toml @@ -0,0 +1,6 @@ +base_model = "mixedbread/toast-1" + +[cost] +input = 0.3 +output = 0.72 +cache_read = 0.036 diff --git a/providers/vercel/models/moonshotai/kimi-k2.5.toml b/providers/vercel/models/moonshotai/kimi-k2.5.toml index e58211e60c2..3cceed8535b 100644 --- a/providers/vercel/models/moonshotai/kimi-k2.5.toml +++ b/providers/vercel/models/moonshotai/kimi-k2.5.toml @@ -9,11 +9,10 @@ type = "toggle" [cost] input = 0.6 output = 3 -cache_read = 0.1 [limit] -context = 262_114 -output = 262_114 +context = 256_000 +output = 256_000 [modalities] input = ["text", "image"] diff --git a/providers/vercel/models/moonshotai/kimi-k2.7-code.toml b/providers/vercel/models/moonshotai/kimi-k2.7-code.toml index ad12aa3fa47..c0e7590b4d2 100644 --- a/providers/vercel/models/moonshotai/kimi-k2.7-code.toml +++ b/providers/vercel/models/moonshotai/kimi-k2.7-code.toml @@ -5,7 +5,7 @@ reasoning_options = [] [cost] input = 0.95 output = 4 -cache_read = 0.19 +cache_read = 0.16 [limit] context = 256_000 diff --git a/providers/vercel/models/nvidia/nemotron-3-nano-30b-a3b.toml b/providers/vercel/models/nvidia/nemotron-3-nano-30b-a3b.toml index 6a539219186..3154112a16e 100644 --- a/providers/vercel/models/nvidia/nemotron-3-nano-30b-a3b.toml +++ b/providers/vercel/models/nvidia/nemotron-3-nano-30b-a3b.toml @@ -6,4 +6,5 @@ type = "toggle" [cost] input = 0.05 -output = 0.24 +output = 0.2 +cache_read = 0.025 diff --git a/providers/vercel/models/nvidia/nemotron-3.5-lightning.toml b/providers/vercel/models/nvidia/nemotron-3.5-lightning.toml index a6055f6e02d..cd71f8120c5 100644 --- a/providers/vercel/models/nvidia/nemotron-3.5-lightning.toml +++ b/providers/vercel/models/nvidia/nemotron-3.5-lightning.toml @@ -17,8 +17,8 @@ max = 32_768 [cost] input = 0.05 -output = 0.15 -cache_read = 0.05 +output = 0.2 +cache_read = 0.01 [limit] output = 131_072 diff --git a/providers/vercel/models/openai/gpt-5-codex.toml b/providers/vercel/models/openai/gpt-5-codex.toml index a8bf02f0ba2..8d331a002fe 100644 --- a/providers/vercel/models/openai/gpt-5-codex.toml +++ b/providers/vercel/models/openai/gpt-5-codex.toml @@ -1,6 +1,8 @@ base_model = "openai/gpt-5-codex" attachment = true -reasoning_options = [] +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] [cost] input = 1.25 diff --git a/providers/vercel/models/openai/gpt-5.4-pro.toml b/providers/vercel/models/openai/gpt-5.4-pro.toml index 802e2b01e7d..8f49caeaef4 100644 --- a/providers/vercel/models/openai/gpt-5.4-pro.toml +++ b/providers/vercel/models/openai/gpt-5.4-pro.toml @@ -10,5 +10,10 @@ values = ["medium", "high", "xhigh"] input = 30 output = 180 +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 60 +output = 270 + [modalities] input = ["text", "image", "pdf"] diff --git a/providers/vercel/models/openai/gpt-5.4.toml b/providers/vercel/models/openai/gpt-5.4.toml index 117744507a5..e80519bdd16 100644 --- a/providers/vercel/models/openai/gpt-5.4.toml +++ b/providers/vercel/models/openai/gpt-5.4.toml @@ -1,9 +1,17 @@ base_model = "openai/gpt-5.4" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] name = "GPT 5.4" -temperature = true + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh"] [cost] input = 2.5 output = 15 cache_read = 0.25 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 5 +output = 22.5 +cache_read = 0.5 diff --git a/providers/vercel/models/openai/gpt-5.5-pro.toml b/providers/vercel/models/openai/gpt-5.5-pro.toml index effd8f55a5a..b124e744fda 100644 --- a/providers/vercel/models/openai/gpt-5.5-pro.toml +++ b/providers/vercel/models/openai/gpt-5.5-pro.toml @@ -10,6 +10,11 @@ values = ["medium", "high", "xhigh"] input = 30 output = 180 +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 60 +output = 270 + [limit] context = 1_000_000 input = 872_000 diff --git a/providers/vercel/models/openai/gpt-5.5.toml b/providers/vercel/models/openai/gpt-5.5.toml index 4d37b9c3632..6fa3472701a 100644 --- a/providers/vercel/models/openai/gpt-5.5.toml +++ b/providers/vercel/models/openai/gpt-5.5.toml @@ -11,6 +11,12 @@ input = 5 output = 30 cache_read = 0.5 +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 10 +output = 45 +cache_read = 1 + [limit] context = 1_000_000 input = 872_000 diff --git a/providers/vercel/models/openai/gpt-5.6-luna-fast.toml b/providers/vercel/models/openai/gpt-5.6-luna-fast.toml index acca99f77f7..74dd96c0e31 100644 --- a/providers/vercel/models/openai/gpt-5.6-luna-fast.toml +++ b/providers/vercel/models/openai/gpt-5.6-luna-fast.toml @@ -9,4 +9,11 @@ values = ["none", "low", "medium", "high", "xhigh", "max"] input = 0.4 output = 2.4 cache_read = 0.04 -cache_write = 0.25 +cache_write = 0.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 0.8 +output = 3.6 +cache_read = 0.08 +cache_write = 1 diff --git a/providers/vercel/models/openai/gpt-5.6-luna.toml b/providers/vercel/models/openai/gpt-5.6-luna.toml index f33d0f6f9b5..e48b3985f6c 100644 --- a/providers/vercel/models/openai/gpt-5.6-luna.toml +++ b/providers/vercel/models/openai/gpt-5.6-luna.toml @@ -12,3 +12,10 @@ input = 0.2 output = 1.2 cache_read = 0.02 cache_write = 0.25 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 0.4 +output = 1.8 +cache_read = 0.04 +cache_write = 0.5 diff --git a/providers/vercel/models/openai/gpt-5.6-sol-fast.toml b/providers/vercel/models/openai/gpt-5.6-sol-fast.toml index 93628796761..d989b000e02 100644 --- a/providers/vercel/models/openai/gpt-5.6-sol-fast.toml +++ b/providers/vercel/models/openai/gpt-5.6-sol-fast.toml @@ -6,7 +6,14 @@ type = "effort" values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 4 -output = 20 -cache_read = 0.4 -cache_write = 2.5 +input = 8 +output = 40 +cache_read = 0.8 +cache_write = 10 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 16 +output = 60 +cache_read = 1.6 +cache_write = 20 diff --git a/providers/vercel/models/openai/gpt-5.6-sol.toml b/providers/vercel/models/openai/gpt-5.6-sol.toml index 8b88a743a65..ed5b73a9699 100644 --- a/providers/vercel/models/openai/gpt-5.6-sol.toml +++ b/providers/vercel/models/openai/gpt-5.6-sol.toml @@ -8,7 +8,14 @@ type = "effort" values = ["none", "low", "medium", "high", "xhigh", "max"] [cost] -input = 2 -output = 10 -cache_read = 0.2 -cache_write = 2.5 +input = 4 +output = 20 +cache_read = 0.4 +cache_write = 5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 8 +output = 30 +cache_read = 0.8 +cache_write = 10 diff --git a/providers/vercel/models/openai/gpt-5.6-terra-fast.toml b/providers/vercel/models/openai/gpt-5.6-terra-fast.toml index e8749237b36..e2caf6406e9 100644 --- a/providers/vercel/models/openai/gpt-5.6-terra-fast.toml +++ b/providers/vercel/models/openai/gpt-5.6-terra-fast.toml @@ -9,4 +9,11 @@ values = ["none", "low", "medium", "high", "xhigh", "max"] input = 4 output = 24 cache_read = 0.4 -cache_write = 2.5 +cache_write = 5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 8 +output = 36 +cache_read = 0.8 +cache_write = 10 diff --git a/providers/vercel/models/openai/gpt-5.6-terra.toml b/providers/vercel/models/openai/gpt-5.6-terra.toml index 7c036e01d1c..cc47098412f 100644 --- a/providers/vercel/models/openai/gpt-5.6-terra.toml +++ b/providers/vercel/models/openai/gpt-5.6-terra.toml @@ -12,3 +12,10 @@ input = 2 output = 12 cache_read = 0.2 cache_write = 2.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 4 +output = 18 +cache_read = 0.4 +cache_write = 5 diff --git a/providers/vercel/models/openai/gpt-6-astra-fast.toml b/providers/vercel/models/openai/gpt-6-astra-fast.toml new file mode 100644 index 00000000000..bbb8660be6c --- /dev/null +++ b/providers/vercel/models/openai/gpt-6-astra-fast.toml @@ -0,0 +1,19 @@ +# Pricing: https://ai-gateway.vercel.sh/v1/models (2026-09-04), upper band starts at 272,001 prompt tokens +base_model = "openai/gpt-6-astra-fast" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 20 +output = 100 +cache_read = 2 +cache_write = 25 + +[[cost.tiers]] +tier = { type = "context", size = 272_001 } +input = 40 +output = 150 +cache_read = 4 +cache_write = 50 diff --git a/providers/vercel/models/openai/gpt-6-astra.toml b/providers/vercel/models/openai/gpt-6-astra.toml new file mode 100644 index 00000000000..badf0a32466 --- /dev/null +++ b/providers/vercel/models/openai/gpt-6-astra.toml @@ -0,0 +1,19 @@ +# Pricing: https://ai-gateway.vercel.sh/v1/models (2026-09-04), upper band starts at 272,001 prompt tokens +base_model = "openai/gpt-6-astra" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_001 } +input = 20 +output = 75 +cache_read = 2 +cache_write = 25 diff --git a/providers/vercel/models/openai/gpt-6-luna-fast.toml b/providers/vercel/models/openai/gpt-6-luna-fast.toml new file mode 100644 index 00000000000..5087080071f --- /dev/null +++ b/providers/vercel/models/openai/gpt-6-luna-fast.toml @@ -0,0 +1,19 @@ +base_model = "openai/gpt-6-luna" +name = "GPT-6 Luna (Fast)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.2 +output = 1 +cache_read = 0.02 +cache_write = 0.25 + +[[cost.tiers]] +tier = { type = "context", size = 272_001 } +input = 0.4 +output = 1.5 +cache_read = 0.04 +cache_write = 0.5 diff --git a/providers/vercel/models/openai/gpt-6-luna.toml b/providers/vercel/models/openai/gpt-6-luna.toml new file mode 100644 index 00000000000..c9115379e71 --- /dev/null +++ b/providers/vercel/models/openai/gpt-6-luna.toml @@ -0,0 +1,18 @@ +base_model = "openai/gpt-6-luna" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 0.1 +output = 0.5 +cache_read = 0.01 +cache_write = 0.125 + +[[cost.tiers]] +tier = { type = "context", size = 272_001 } +input = 0.2 +output = 0.75 +cache_read = 0.02 +cache_write = 0.25 diff --git a/providers/vercel/models/openai/gpt-6-sol-fast.toml b/providers/vercel/models/openai/gpt-6-sol-fast.toml new file mode 100644 index 00000000000..8b33bf6106a --- /dev/null +++ b/providers/vercel/models/openai/gpt-6-sol-fast.toml @@ -0,0 +1,19 @@ +base_model = "openai/gpt-6-sol" +name = "GPT-6 Sol (Fast)" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 4 +output = 20 +cache_read = 0.4 +cache_write = 5 + +[[cost.tiers]] +tier = { type = "context", size = 272_001 } +input = 8 +output = 30 +cache_read = 0.8 +cache_write = 10 diff --git a/providers/vercel/models/openai/gpt-6-sol.toml b/providers/vercel/models/openai/gpt-6-sol.toml new file mode 100644 index 00000000000..39b8ede6517 --- /dev/null +++ b/providers/vercel/models/openai/gpt-6-sol.toml @@ -0,0 +1,18 @@ +base_model = "openai/gpt-6-sol" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_001 } +input = 4 +output = 15 +cache_read = 0.4 +cache_write = 5 diff --git a/providers/vercel/models/openai/gpt-image-2.5-flare.toml b/providers/vercel/models/openai/gpt-image-2.5-flare.toml new file mode 100644 index 00000000000..139e7e11fd5 --- /dev/null +++ b/providers/vercel/models/openai/gpt-image-2.5-flare.toml @@ -0,0 +1,10 @@ +base_model = "openai/gpt-image-2.5-flare" +attachment = false + +[cost] +input = 5 +output = 30 +cache_read = 1.25 + +[modalities] +input = ["text"] diff --git a/providers/vercel/models/openai/gpt-image-2.5-sunburst.toml b/providers/vercel/models/openai/gpt-image-2.5-sunburst.toml new file mode 100644 index 00000000000..001417a7de5 --- /dev/null +++ b/providers/vercel/models/openai/gpt-image-2.5-sunburst.toml @@ -0,0 +1,10 @@ +base_model = "openai/gpt-image-2.5-sunburst" +attachment = false + +[cost] +input = 5 +output = 30 +cache_read = 1.25 + +[modalities] +input = ["text"] diff --git a/providers/vercel/models/openai/gpt-live-1.toml b/providers/vercel/models/openai/gpt-live-1.toml new file mode 100644 index 00000000000..afdef373ba0 --- /dev/null +++ b/providers/vercel/models/openai/gpt-live-1.toml @@ -0,0 +1,17 @@ +name = "GPT-Live 1" +description = "Speech generation model for controllable voice, narration, and audio delivery" +family = "gpt" +release_date = "2026-09-10" +last_updated = "2026-09-10" +attachment = false +reasoning = false +tool_call = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text", "audio"] +output = ["text", "audio"] diff --git a/providers/vercel/models/openai/gpt-oss-120b.toml b/providers/vercel/models/openai/gpt-oss-120b.toml index e6cb3565f32..12e8f41b034 100644 --- a/providers/vercel/models/openai/gpt-oss-120b.toml +++ b/providers/vercel/models/openai/gpt-oss-120b.toml @@ -1,5 +1,4 @@ base_model = "openai/gpt-oss-120b" -knowledge = "2024-10" [[reasoning_options]] type = "effort" @@ -8,6 +7,7 @@ values = ["low", "medium", "high"] [cost] input = 0.1 output = 0.5 +cache_read = 0.1 [limit] output = 131_072 diff --git a/providers/vercel/models/openai/gpt-oss-20b.toml b/providers/vercel/models/openai/gpt-oss-20b.toml index a0c15d2d037..df18b0270e5 100644 --- a/providers/vercel/models/openai/gpt-oss-20b.toml +++ b/providers/vercel/models/openai/gpt-oss-20b.toml @@ -1,14 +1,13 @@ base_model = "openai/gpt-oss-20b" description = "Open-weight GPT model for self-hosted reasoning and instruction-following workloads" -knowledge = "2024-10" [[reasoning_options]] type = "effort" values = ["low", "medium", "high"] [cost] -input = 0.05 -output = 0.2 +input = 0.03 +output = 0.14 [limit] input = 122_880 diff --git a/providers/vercel/models/openai/gpt-oss-safeguard-20b.toml b/providers/vercel/models/openai/gpt-oss-safeguard-20b.toml index 8e0bda33d18..f90816d0102 100644 --- a/providers/vercel/models/openai/gpt-oss-safeguard-20b.toml +++ b/providers/vercel/models/openai/gpt-oss-safeguard-20b.toml @@ -1,14 +1,6 @@ +base_model = "openai/gpt-oss-safeguard-20b" name = "gpt-oss-safeguard-20b" description = "Safety model for policy screening, moderation, and risk-aware routing workflows" -family = "gpt-oss" -release_date = "2025-10-29" -last_updated = "2024-12-01" -attachment = false -reasoning = true -temperature = true -tool_call = true -knowledge = "2024-10" -open_weights = false [[reasoning_options]] type = "effort" @@ -22,7 +14,3 @@ output = 0.2 context = 128_000 input = 112_000 output = 16_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/vercel/models/openai/tts-1-hd.toml b/providers/vercel/models/openai/tts-1-hd.toml index c18d5c7866e..11a75cdcbca 100644 --- a/providers/vercel/models/openai/tts-1-hd.toml +++ b/providers/vercel/models/openai/tts-1-hd.toml @@ -1,6 +1,5 @@ name = "TTS-1 HD" description = "Speech generation model for controllable voice, narration, and audio delivery" -family = "o" release_date = "2023-11-06" last_updated = "2023-11-06" attachment = false diff --git a/providers/vercel/models/openai/tts-1.toml b/providers/vercel/models/openai/tts-1.toml index 0e0a978b652..9067935181e 100644 --- a/providers/vercel/models/openai/tts-1.toml +++ b/providers/vercel/models/openai/tts-1.toml @@ -1,6 +1,5 @@ name = "TTS-1" description = "Speech generation model for controllable voice, narration, and audio delivery" -family = "o" release_date = "2023-11-06" last_updated = "2023-11-06" attachment = false diff --git a/providers/vercel/models/quiverai/arrow-1.1.toml b/providers/vercel/models/quiverai/arrow-1.1.toml index 4221693b8e0..3a02c2c71ed 100644 --- a/providers/vercel/models/quiverai/arrow-1.1.toml +++ b/providers/vercel/models/quiverai/arrow-1.1.toml @@ -1,6 +1,5 @@ name = "Arrow 1.1" description = "Image model for prompt-driven generation, editing, and visual design workflows" -family = "o" release_date = "2026-04-16" last_updated = "2026-04-16" attachment = false diff --git a/providers/vercel/models/quiverai/arrow-2-telos.toml b/providers/vercel/models/quiverai/arrow-2-telos.toml new file mode 100644 index 00000000000..59dae7b0880 --- /dev/null +++ b/providers/vercel/models/quiverai/arrow-2-telos.toml @@ -0,0 +1,13 @@ +# https://docs.quiver.ai/api-reference/openresponses/createopenresponse +base_model = "quiverai/arrow-2-telos" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh"] }] + +[cost] +input = 6 +output = 30 +cache_read = 0.6 +cache_write = 7.5 + +[limit] +context = 131_072 +output = 131_072 diff --git a/providers/vercel/models/quiverai/arrow-2.toml b/providers/vercel/models/quiverai/arrow-2.toml new file mode 100644 index 00000000000..2b7145c9081 --- /dev/null +++ b/providers/vercel/models/quiverai/arrow-2.toml @@ -0,0 +1,12 @@ +# https://docs.quiver.ai/api-reference/openresponses/createopenresponse +base_model = "quiverai/arrow-2" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh"] }] + +[cost] +input = 4 +output = 20 +cache_read = 0.4 +cache_write = 5 + +[limit] +output = 131_072 diff --git a/providers/vercel/models/recraft/recraft-v4.1-flash.toml b/providers/vercel/models/recraft/recraft-v4.1-flash.toml new file mode 100644 index 00000000000..9d20cd0531c --- /dev/null +++ b/providers/vercel/models/recraft/recraft-v4.1-flash.toml @@ -0,0 +1,17 @@ +name = "Recraft V4.1 Flash" +description = "Image model for prompt-driven generation, editing, and visual design workflows" +family = "recraft" +release_date = "2026-09-23" +last_updated = "2026-09-23" +attachment = false +reasoning = false +tool_call = false +open_weights = false + +[limit] +context = 0 +output = 0 + +[modalities] +input = ["text"] +output = ["image"] diff --git a/providers/vercel/models/sakana/fugu-max.toml b/providers/vercel/models/sakana/fugu-max.toml new file mode 100644 index 00000000000..a305e311145 --- /dev/null +++ b/providers/vercel/models/sakana/fugu-max.toml @@ -0,0 +1,25 @@ +# Effort: reasoning.effort = high|xhigh|max +# https://console.sakana.ai/models +name = "Fugu Max" +description = "Multi-agent model for routing expert agents across complex analytical tasks" +family = "fugu" +release_date = "2026-09-10" +last_updated = "2026-09-10" +attachment = true +reasoning = true +tool_call = true +open_weights = false +reasoning_options = [{ type = "effort", values = ["high", "xhigh", "max"] }] + +[cost] +input = 2 +output = 6 +cache_read = 0.25 + +[limit] +context = 1_000_000 +output = 1_000_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/vercel/models/sakana/fugu-ultra-v2.toml b/providers/vercel/models/sakana/fugu-ultra-v2.toml new file mode 100644 index 00000000000..3ada0b1935d --- /dev/null +++ b/providers/vercel/models/sakana/fugu-ultra-v2.toml @@ -0,0 +1,34 @@ +# Effort: reasoning.effort = high|xhigh|max +# https://console.sakana.ai/models +name = "Fugu Ultra v2" +description = "Quality-first multi-agent model for hard research, analysis, and competitions" +family = "fugu" +release_date = "2026-09-10" +last_updated = "2026-09-10" +attachment = true +reasoning = true +tool_call = true +open_weights = false + +[[reasoning_options]] +type = "effort" +values = ["high", "xhigh", "max"] + +[cost] +input = 5 +output = 30 +cache_read = 0.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_001 } +input = 10 +output = 45 +cache_read = 1 + +[limit] +context = 1_000_000 +output = 1_000_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/vercel/models/sakana/fugu-ultra.toml b/providers/vercel/models/sakana/fugu-ultra.toml index 099d441fbe6..f36e9177ff8 100644 --- a/providers/vercel/models/sakana/fugu-ultra.toml +++ b/providers/vercel/models/sakana/fugu-ultra.toml @@ -8,5 +8,11 @@ input = 5 output = 30 cache_read = 0.5 +[[cost.tiers]] +tier = { type = "context", size = 272_001 } +input = 10 +output = 45 +cache_read = 1 + [limit] output = 1_000_000 diff --git a/providers/vercel/models/spacexai/grok-4.1-fast-reasoning.toml b/providers/vercel/models/spacexai/grok-4.1-fast-reasoning.toml index 68e87906f8a..c29a5484d0e 100644 --- a/providers/vercel/models/spacexai/grok-4.1-fast-reasoning.toml +++ b/providers/vercel/models/spacexai/grok-4.1-fast-reasoning.toml @@ -1,12 +1,6 @@ +base_model = "xai/grok-4.1-fast-reasoning" name = "Grok 4.1 Fast Reasoning" description = "Fast Grok model for responsive chat, reasoning, and tool-assisted work" -family = "grok" -release_date = "2025-11-19" -last_updated = "2025-11-19" -attachment = true -reasoning = true -tool_call = true -open_weights = false reasoning_options = [] [cost] @@ -20,4 +14,3 @@ output = 1_000_000 [modalities] input = ["text", "image", "pdf"] -output = ["text"] diff --git a/providers/vercel/models/spacexai/grok-4.20-multi-agent-beta.toml b/providers/vercel/models/spacexai/grok-4.20-multi-agent-beta.toml index ed37aa69ee5..d45eab3701e 100644 --- a/providers/vercel/models/spacexai/grok-4.20-multi-agent-beta.toml +++ b/providers/vercel/models/spacexai/grok-4.20-multi-agent-beta.toml @@ -14,6 +14,12 @@ input = 1.25 output = 2.5 cache_read = 0.2 +[[cost.tiers]] +tier = { type = "context", size = 200_001 } +input = 2.5 +output = 5 +cache_read = 0.4 + [limit] context = 2_000_000 output = 2_000_000 diff --git a/providers/vercel/models/spacexai/grok-4.20-multi-agent.toml b/providers/vercel/models/spacexai/grok-4.20-multi-agent.toml index 37a06048cc0..a90774a3c3f 100644 --- a/providers/vercel/models/spacexai/grok-4.20-multi-agent.toml +++ b/providers/vercel/models/spacexai/grok-4.20-multi-agent.toml @@ -14,6 +14,12 @@ input = 1.25 output = 2.5 cache_read = 0.2 +[[cost.tiers]] +tier = { type = "context", size = 200_001 } +input = 2.5 +output = 5 +cache_read = 0.4 + [limit] context = 2_000_000 output = 2_000_000 diff --git a/providers/vercel/models/spacexai/grok-4.20-non-reasoning-beta.toml b/providers/vercel/models/spacexai/grok-4.20-non-reasoning-beta.toml index acd189124d0..ac3eafaaecd 100644 --- a/providers/vercel/models/spacexai/grok-4.20-non-reasoning-beta.toml +++ b/providers/vercel/models/spacexai/grok-4.20-non-reasoning-beta.toml @@ -13,6 +13,12 @@ input = 1.25 output = 2.5 cache_read = 0.4 +[[cost.tiers]] +tier = { type = "context", size = 200_001 } +input = 2.5 +output = 5 +cache_read = 0.4 + [limit] context = 2_000_000 output = 2_000_000 diff --git a/providers/vercel/models/spacexai/grok-4.20-non-reasoning.toml b/providers/vercel/models/spacexai/grok-4.20-non-reasoning.toml index 468d77b85b2..0e9a2baf86f 100644 --- a/providers/vercel/models/spacexai/grok-4.20-non-reasoning.toml +++ b/providers/vercel/models/spacexai/grok-4.20-non-reasoning.toml @@ -13,6 +13,12 @@ input = 1.25 output = 2.5 cache_read = 0.2 +[[cost.tiers]] +tier = { type = "context", size = 200_001 } +input = 2.5 +output = 5 +cache_read = 0.4 + [limit] context = 2_000_000 output = 2_000_000 diff --git a/providers/vercel/models/spacexai/grok-4.20-reasoning-beta.toml b/providers/vercel/models/spacexai/grok-4.20-reasoning-beta.toml index 19522d5f419..691eded5322 100644 --- a/providers/vercel/models/spacexai/grok-4.20-reasoning-beta.toml +++ b/providers/vercel/models/spacexai/grok-4.20-reasoning-beta.toml @@ -14,6 +14,12 @@ input = 1.25 output = 2.5 cache_read = 0.2 +[[cost.tiers]] +tier = { type = "context", size = 200_001 } +input = 2.5 +output = 5 +cache_read = 0.4 + [limit] context = 2_000_000 output = 2_000_000 diff --git a/providers/vercel/models/spacexai/grok-4.20-reasoning.toml b/providers/vercel/models/spacexai/grok-4.20-reasoning.toml index 8fb2843f07d..e6c7e7ae17b 100644 --- a/providers/vercel/models/spacexai/grok-4.20-reasoning.toml +++ b/providers/vercel/models/spacexai/grok-4.20-reasoning.toml @@ -14,6 +14,12 @@ input = 1.25 output = 2.5 cache_read = 0.2 +[[cost.tiers]] +tier = { type = "context", size = 200_001 } +input = 2.5 +output = 5 +cache_read = 0.4 + [limit] context = 2_000_000 output = 2_000_000 diff --git a/providers/vercel/models/spacexai/grok-4.3.toml b/providers/vercel/models/spacexai/grok-4.3.toml index 665e79a33d9..1ce53c49412 100644 --- a/providers/vercel/models/spacexai/grok-4.3.toml +++ b/providers/vercel/models/spacexai/grok-4.3.toml @@ -1,23 +1,20 @@ -name = "Grok 4.3" +base_model = "xai/grok-4.3" description = "Grok model for agentic tool use, reasoning, coding, and live assistance" -family = "grok" -release_date = "2026-04-30" -last_updated = "2026-04-30" -attachment = true -reasoning = true -tool_call = true -open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] [cost] input = 1.25 output = 2.5 cache_read = 0.2 +[[cost.tiers]] +tier = { type = "context", size = 200_001 } +input = 2.5 +output = 5 +cache_read = 0.4 + [limit] -context = 1_000_000 output = 1_000_000 - -[modalities] -input = ["text", "image", "pdf"] -output = ["text"] diff --git a/providers/vercel/models/spacexai/grok-4.5.toml b/providers/vercel/models/spacexai/grok-4.5.toml index a995203dacc..ec9457541d2 100644 --- a/providers/vercel/models/spacexai/grok-4.5.toml +++ b/providers/vercel/models/spacexai/grok-4.5.toml @@ -1,23 +1,20 @@ -name = "Grok 4.5" +base_model = "xai/grok-4.5" description = "Grok model for agentic tool use, reasoning, coding, and live assistance" -family = "grok" -release_date = "2026-07-08" -last_updated = "2026-07-08" -attachment = true -reasoning = true -tool_call = true -open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] [cost] input = 2 output = 6 cache_read = 0.3 -[limit] -context = 500_000 -output = 500_000 +[[cost.tiers]] +tier = { type = "context", size = 200_001 } +input = 4 +output = 12 +cache_read = 0.6 [modalities] input = ["text", "image", "pdf"] -output = ["text"] diff --git a/providers/vercel/models/spacexai/grok-4.6.toml b/providers/vercel/models/spacexai/grok-4.6.toml index 4ecff4de95c..58cede40b86 100644 --- a/providers/vercel/models/spacexai/grok-4.6.toml +++ b/providers/vercel/models/spacexai/grok-4.6.toml @@ -1,23 +1,17 @@ -name = "Grok 4.6" +base_model = "xai/grok-4.6" description = "Grok model for agentic tool use, reasoning, coding, and live assistance" -family = "grok" -release_date = "2026-08-12" -last_updated = "2026-08-12" -attachment = true -reasoning = true -tool_call = true -open_weights = false -reasoning_options = [] + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] [cost] input = 2 output = 6 cache_read = 0.5 -[limit] -context = 500_000 -output = 500_000 - -[modalities] -input = ["text", "image"] -output = ["text"] +[[cost.tiers]] +tier = { type = "context", size = 200_001 } +input = 4 +output = 12 +cache_read = 1 diff --git a/providers/vercel/models/spacexai/grok-4.7.toml b/providers/vercel/models/spacexai/grok-4.7.toml new file mode 100644 index 00000000000..95c1c2ce193 --- /dev/null +++ b/providers/vercel/models/spacexai/grok-4.7.toml @@ -0,0 +1,19 @@ +base_model = "xai/grok-4.7" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 1.2 +output = 3.6 +cache_read = 0.3 + +[[cost.tiers]] +tier = { type = "context", size = 200_001 } +input = 2.4 +output = 7.2 +cache_read = 0.6 + +[modalities] +input = ["text", "image"] diff --git a/providers/vercel/models/spacexai/grok-build-0.1.toml b/providers/vercel/models/spacexai/grok-build-0.1.toml index 70d07cae413..ec232622716 100644 --- a/providers/vercel/models/spacexai/grok-build-0.1.toml +++ b/providers/vercel/models/spacexai/grok-build-0.1.toml @@ -1,12 +1,5 @@ -name = "Grok Build 0.1" +base_model = "xai/grok-build-0.1" description = "Grok coding model for agentic engineering, edits, and codebase workflows" -family = "grok-build" -release_date = "2026-05-20" -last_updated = "2026-05-20" -attachment = true -reasoning = true -tool_call = true -open_weights = false reasoning_options = [] [cost] @@ -14,10 +7,11 @@ input = 1 output = 2 cache_read = 0.2 -[limit] -context = 256_000 -output = 256_000 +[[cost.tiers]] +tier = { type = "context", size = 200_001 } +input = 2 +output = 4 +cache_read = 0.4 [modalities] input = ["text", "image"] -output = ["text"] diff --git a/providers/vercel/models/spacexai/grok-imagine-image-2.0.toml b/providers/vercel/models/spacexai/grok-imagine-image-2.0.toml index 35dbfb81f23..64ba6e53db2 100644 --- a/providers/vercel/models/spacexai/grok-imagine-image-2.0.toml +++ b/providers/vercel/models/spacexai/grok-imagine-image-2.0.toml @@ -1,17 +1,9 @@ -name = "Grok Imagine Image 2.0" +base_model = "xai/grok-imagine-image-2.0" description = "Image model for prompt-driven generation, editing, and visual design workflows" -family = "grok" -release_date = "2026-08-07" -last_updated = "2026-08-07" attachment = false -reasoning = false -tool_call = false -open_weights = false [limit] context = 0 -output = 0 [modalities] input = ["text"] -output = ["image"] diff --git a/providers/vercel/models/spacexai/grok-imagine-video-1.5-preview.toml b/providers/vercel/models/spacexai/grok-imagine-video-1.5-preview.toml deleted file mode 100644 index ab2429fa128..00000000000 --- a/providers/vercel/models/spacexai/grok-imagine-video-1.5-preview.toml +++ /dev/null @@ -1,17 +0,0 @@ -name = "Grok Imagine Video 1.5 Preview" -description = "Image model for prompt-driven generation, editing, and visual design workflows" -family = "grok" -release_date = "2026-05-30" -last_updated = "2026-05-30" -attachment = false -reasoning = false -tool_call = false -open_weights = false - -[limit] -context = 0 -output = 0 - -[modalities] -input = ["text"] -output = ["video"] diff --git a/providers/vercel/models/spacexai/grok-imagine-video-1.5.toml b/providers/vercel/models/spacexai/grok-imagine-video-1.5.toml index 9ad28a47401..567198f09b3 100644 --- a/providers/vercel/models/spacexai/grok-imagine-video-1.5.toml +++ b/providers/vercel/models/spacexai/grok-imagine-video-1.5.toml @@ -1,17 +1,9 @@ -name = "Grok Imagine Video 1.5" +base_model = "xai/grok-imagine-video-1.5" description = "Image model for prompt-driven generation, editing, and visual design workflows" -family = "grok" -release_date = "2026-06-22" -last_updated = "2026-06-22" attachment = false -reasoning = false -tool_call = false -open_weights = false [limit] context = 0 -output = 0 [modalities] input = ["text"] -output = ["video"] diff --git a/providers/vercel/models/stepfun/step-5-preview.toml b/providers/vercel/models/stepfun/step-5-preview.toml new file mode 100644 index 00000000000..ce090c9a924 --- /dev/null +++ b/providers/vercel/models/stepfun/step-5-preview.toml @@ -0,0 +1,12 @@ +base_model = "stepfun/step-5-preview" +description = "StepFun flash model for efficient multimodal reasoning, coding, and tool use" +reasoning = false +tool_call = false + +[cost] +input = 1 +output = 2.7 +cache_read = 0.05 + +[modalities] +input = ["text", "image"] diff --git a/providers/vercel/models/tencent/hy3.toml b/providers/vercel/models/tencent/hy3.toml index 92236761e0a..dde3c6bfc50 100644 --- a/providers/vercel/models/tencent/hy3.toml +++ b/providers/vercel/models/tencent/hy3.toml @@ -6,15 +6,17 @@ # API: {"chat_template_kwargs": {"reasoning_effort": "no_think"|"low"|"high"}} # mapped: no_think → none base_model = "tencent/hy3" +base_model_omit = ["limit.input"] [[reasoning_options]] type = "effort" values = ["none", "low", "high"] [cost] -input = 0.132 -output = 0.528 -cache_read = 0.033 +input = 0.14 +output = 0.58 +cache_read = 0.035 [limit] -output = 128_000 +context = 262_144 +output = 262_144 diff --git a/providers/vercel/models/tencent/hy4-preview.toml b/providers/vercel/models/tencent/hy4-preview.toml new file mode 100644 index 00000000000..a33145904d7 --- /dev/null +++ b/providers/vercel/models/tencent/hy4-preview.toml @@ -0,0 +1,16 @@ +# Effort: reasoning.effort = none|high; none disables reasoning (no separate toggle). +# Vercel routes this model to Tencent; use Tencent's native effort levels. +# https://vercel.com/ai-gateway/models/hy4-preview +# https://vercel.com/docs/ai-gateway/sdks-and-apis/openai-chat-completions/reasoning +# https://cloud.tencent.com/document/product/1823/131208 +base_model = "tencent/hy4-preview" +name = "Tencent Hy4 Preview" + +[[reasoning_options]] +type = "effort" +values = ["none", "high"] + +[cost] +input = 0.834 +output = 2.501 +cache_read = 0.042 diff --git a/providers/vercel/models/typesafe-ai/jev.toml b/providers/vercel/models/typesafe-ai/jev.toml new file mode 100644 index 00000000000..f18f60fb34b --- /dev/null +++ b/providers/vercel/models/typesafe-ai/jev.toml @@ -0,0 +1,8 @@ +base_model = "typesafe/jev-latest" + +[cost] +input = 0.042 +output = 0 + +[limit] +context = 32_000 diff --git a/providers/vercel/models/xiaomi/mimo-v2.6-flash.toml b/providers/vercel/models/xiaomi/mimo-v2.6-flash.toml new file mode 100644 index 00000000000..bb5496a5085 --- /dev/null +++ b/providers/vercel/models/xiaomi/mimo-v2.6-flash.toml @@ -0,0 +1,13 @@ +# Effort: reasoning.effort = none|minimal|low|medium|high|xhigh|max +# https://mimo.mi.com/docs/en-US/api/chat/responses +base_model = "xiaomi/mimo-v2.6-flash" +name = "MiMo V2.6 Flash" +reasoning_options = [{ type = "effort", values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 0.14 +output = 0.28 +cache_read = 0.0028 + +[modalities] +input = ["text", "image"] diff --git a/providers/vercel/models/xiaomi/mimo-v2.6-pro-ultraspeed.toml b/providers/vercel/models/xiaomi/mimo-v2.6-pro-ultraspeed.toml new file mode 100644 index 00000000000..dc1eb9fa8fa --- /dev/null +++ b/providers/vercel/models/xiaomi/mimo-v2.6-pro-ultraspeed.toml @@ -0,0 +1,13 @@ +# Effort: reasoning.effort = none|minimal|low|medium|high|xhigh|max +# https://mimo.mi.com/docs/en-US/api/chat/responses +base_model = "xiaomi/mimo-v2.6-pro-ultraspeed" +name = "MiMo V2.6 Pro UltraSpeed" +reasoning_options = [{ type = "effort", values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 4.35 +output = 8.7 +cache_read = 0.036 + +[modalities] +input = ["text", "image"] diff --git a/providers/vercel/models/xiaomi/mimo-v2.6-pro.toml b/providers/vercel/models/xiaomi/mimo-v2.6-pro.toml new file mode 100644 index 00000000000..11f32cb1976 --- /dev/null +++ b/providers/vercel/models/xiaomi/mimo-v2.6-pro.toml @@ -0,0 +1,13 @@ +# Effort: reasoning.effort = none|minimal|low|medium|high|xhigh|max +# https://mimo.mi.com/docs/en-US/api/chat/responses +base_model = "xiaomi/mimo-v2.6-pro" +name = "MiMo V2.6 Pro" +reasoning_options = [{ type = "effort", values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 0.435 +output = 0.87 +cache_read = 0.0036 + +[modalities] +input = ["text", "image"] diff --git a/providers/vercel/models/zai/glm-5.3-fast.toml b/providers/vercel/models/zai/glm-5.3-fast.toml new file mode 100644 index 00000000000..734583acb2b --- /dev/null +++ b/providers/vercel/models/zai/glm-5.3-fast.toml @@ -0,0 +1,14 @@ +# GLM-5.3 always reasons; effort levels match the native model and Vercel's standard GLM-5.3 route. +# https://docs.z.ai/guides/llm/glm-5.3 +base_model = "zhipuai/glm-5.3" +name = "GLM 5.3 Fast" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[cost] +input = 2.1 +output = 6.6 +cache_read = 0.21 + +[limit] +context = 1_048_576 +output = 262_144 diff --git a/providers/vercel/models/zai/glm-5.3-flash.toml b/providers/vercel/models/zai/glm-5.3-flash.toml index 91deb939f46..83f4bcc9383 100644 --- a/providers/vercel/models/zai/glm-5.3-flash.toml +++ b/providers/vercel/models/zai/glm-5.3-flash.toml @@ -3,12 +3,15 @@ # Thinking is always enabled; no toggle or reasoning-token budget. base_model = "zhipuai/glm-5.3-flash" name = "GLM 5.3 Flash" -reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] [cost] -input = 0.075 -output = 0.25 -cache_read = 0.015 +input = 0.15 +output = 0.5 +cache_read = 0.03 [limit] output = 131_000 diff --git a/providers/vercel/models/zai/glm-5.3-flashx.toml b/providers/vercel/models/zai/glm-5.3-flashx.toml new file mode 100644 index 00000000000..c7fc6f5e326 --- /dev/null +++ b/providers/vercel/models/zai/glm-5.3-flashx.toml @@ -0,0 +1,16 @@ +# GLM-5.3-FlashX uses the same model and forced-thinking effort levels as Flash. +# https://docs.z.ai/guides/vlm/glm-5.3-flash +base_model = "zhipuai/glm-5.3-flash" +name = "GLM 5.3 FlashX" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.37 +output = 1.25 +cache_read = 0.075 + +[modalities] +input = ["text", "image"] diff --git a/providers/vercel/models/zai/glm-5.3.toml b/providers/vercel/models/zai/glm-5.3.toml index a1ee58233c9..05cdccc7976 100644 --- a/providers/vercel/models/zai/glm-5.3.toml +++ b/providers/vercel/models/zai/glm-5.3.toml @@ -1,11 +1,14 @@ base_model = "zhipuai/glm-5.3" name = "GLM 5.3" -reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] [cost] input = 1.4 output = 4.4 -cache_read = 0.26 +cache_read = 0.14 [limit] -output = 12_800 +output = 1_000_000 diff --git a/providers/vispark/logo.svg b/providers/vispark/logo.svg new file mode 100644 index 00000000000..2348c5a2f7f --- /dev/null +++ b/providers/vispark/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/providers/vispark/models/vispark/vision-large.toml b/providers/vispark/models/vispark/vision-large.toml new file mode 100644 index 00000000000..9238a65cb89 --- /dev/null +++ b/providers/vispark/models/vispark/vision-large.toml @@ -0,0 +1,36 @@ +# Vispark: Vision Large — first-party host (provider IS the lab, full inline allowed). +# API model ID: vispark/vision-large — GET https://api.lab.vispark.in/v1/models (verified live 2026-09-13). +# Cost source, USD/MTok, used verbatim: the provider's own models endpoint publishes +# pricing.prompt = "0.00000737" and pricing.completion = "0.00002211" USD per token +# (per-token USD strings) = input 7.37, output 22.11 per MTok. +# Reasoning: always-on, no caller control — accepted params are only +# temperature/max_tokens/top_p/top_k/stop/seed/frequency_penalty/presence_penalty/tools/ +# tool_choice/response_format — no reasoning_effort/thinking/enable_thinking/budget field; +# Capabilities: temperature, top_p/top_k/stop/seed, tools, response_format json_object/json_schema, +# multimodal input text+image+audio+video+pdf (base64/URL), text output, streaming + usage. +# Limits: context 1_000_000 (context_length), output 65_536 (max_output_length) — same endpoint. +# Release 2024-05-15: live endpoint returns created = 1715731200 (= 2024-05-15) per model, +# Last updated 2026-09: current lineup as verified live 2026-09-13 (month precision). +name = "Vision Large" +description = "Most capable Vision model for complex reasoning, detailed media analysis, and structured output over a 1M-token context window." +release_date = "2024-05-15" +last_updated = "2026-09" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [] + +[cost] +input = 7.37 +output = 22.11 + +[limit] +context = 1_000_000 +output = 65_536 + +[modalities] +input = ["text", "image", "audio", "video", "pdf"] +output = ["text"] diff --git a/providers/vispark/models/vispark/vision-medium.toml b/providers/vispark/models/vispark/vision-medium.toml new file mode 100644 index 00000000000..08a3a70579d --- /dev/null +++ b/providers/vispark/models/vispark/vision-medium.toml @@ -0,0 +1,36 @@ +# Vispark: Vision Medium — first-party host (provider IS the lab, full inline allowed). +# API model ID: vispark/vision-medium (default model) — GET https://api.lab.vispark.in/v1/models (verified live 2026-09-13). +# Cost source, USD/MTok, used verbatim: the provider's own models endpoint publishes +# pricing.prompt = "0.00000421" and pricing.completion = "0.00001263" USD per token +# (per-token USD strings) = input 4.21, output 12.63 per MTok. +# Reasoning: always-on, no caller control — accepted params are only +# temperature/max_tokens/top_p/top_k/stop/seed/frequency_penalty/presence_penalty/tools/ +# tool_choice/response_format — no reasoning_effort/thinking/enable_thinking/budget field; +# Capabilities: temperature, top_p/top_k/stop/seed, tools, response_format json_object/json_schema, +# multimodal input text+image+audio+video+pdf (base64/URL), text output, streaming + usage. +# Limits: context 1_000_000 (context_length), output 65_536 (max_output_length) — same endpoint. +# Release 2024-05-15: live endpoint returns created = 1715731200 (= 2024-05-15) per model, +# Last updated 2026-09: current lineup as verified live 2026-09-13 (month precision). +name = "Vision Medium" +description = "Balanced multimodal model pairing a 1M-token context window with deeper reasoning for analysis, content creation, and tool use across text, image, audio, video, and PDF inputs." +release_date = "2024-05-15" +last_updated = "2026-09" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [] + +[cost] +input = 4.21 +output = 12.63 + +[limit] +context = 1_000_000 +output = 65_536 + +[modalities] +input = ["text", "image", "audio", "video", "pdf"] +output = ["text"] diff --git a/providers/vispark/models/vispark/vision-small.toml b/providers/vispark/models/vispark/vision-small.toml new file mode 100644 index 00000000000..c93c050eb49 --- /dev/null +++ b/providers/vispark/models/vispark/vision-small.toml @@ -0,0 +1,36 @@ +# Vispark: Vision Small — first-party host (provider IS the lab, full inline allowed). +# API model ID: vispark/vision-small — GET https://api.lab.vispark.in/v1/models (verified live 2026-09-13). +# Cost source, USD/MTok, used verbatim: the provider's own models endpoint publishes +# pricing.prompt = "0.00000105" and pricing.completion = "0.00000316" USD per token +# (per-token USD strings) = input 1.05, output 3.16 per MTok. +# Reasoning: always-on, no caller control — accepted params are only +# temperature/max_tokens/top_p/top_k/stop/seed/frequency_penalty/presence_penalty/tools/ +# tool_choice/response_format — no reasoning_effort/thinking/enable_thinking/budget field; +# Capabilities: temperature, top_p/top_k/stop/seed, tools, response_format json_object/json_schema, +# multimodal input text+image+audio+video+pdf (base64/URL), text output, streaming + usage. +# Limits: context 1_000_000 (context_length), output 65_536 (max_output_length) — same endpoint. +# Release 2024-05-15: live endpoint returns created = 1715731200 (= 2024-05-15) per model, +# Last updated 2026-09: current lineup as verified live 2026-09-13 (month precision). +name = "Vision Small" +description = "Fast, low-cost multimodal model for understanding text, images, audio, video, and PDFs, with tool calling and a 1M-token context window." +release_date = "2024-05-15" +last_updated = "2026-09" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [] + +[cost] +input = 1.05 +output = 3.16 + +[limit] +context = 1_000_000 +output = 65_536 + +[modalities] +input = ["text", "image", "audio", "video", "pdf"] +output = ["text"] diff --git a/providers/vispark/provider.toml b/providers/vispark/provider.toml new file mode 100644 index 00000000000..ac7e1634846 --- /dev/null +++ b/providers/vispark/provider.toml @@ -0,0 +1,11 @@ +# Vispark Lab — first-party host for Vispark Vision models. +# API: https://api.lab.vispark.in/v1 +# Endpoints: GET /v1/models, POST /v1/chat/completions, POST /v1/completions +# Auth: X-API-Key header or Authorization: Bearer (keys like vl_...) +# Platform: https://lab.vispark.in/ — get API key: https://lab.vispark.in/profile#api +# Vision docs: https://lab.vispark.in/#vision — company: https://vispark.in +name = "Vispark" +npm = "@ai-sdk/openai-compatible" +env = ["VISPARK_LAB_API_KEY"] +api = "https://api.lab.vispark.in/v1" +doc = "https://lab.vispark.in/#vision" diff --git a/providers/vivgrid/models/claude-fable-5-1.toml b/providers/vivgrid/models/claude-fable-5-1.toml new file mode 100644 index 00000000000..756c74d20a3 --- /dev/null +++ b/providers/vivgrid/models/claude-fable-5-1.toml @@ -0,0 +1,15 @@ +# Pricing, context window and max output: +# https://docs.vivgrid.com/models/claude-fable-5-1 (accessed 2026-09-07) +# Effort: output_config.effort = low|medium|high|xhigh|max +base_model = "anthropic/claude-fable-5-1" +structured_output = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 10 +output = 50 +cache_read = 0.5 +cache_write = 12.5 + +[provider] +npm = "@ai-sdk/anthropic" diff --git a/providers/vivgrid/models/claude-fable-5.toml b/providers/vivgrid/models/claude-fable-5.toml new file mode 100644 index 00000000000..31f1362efa1 --- /dev/null +++ b/providers/vivgrid/models/claude-fable-5.toml @@ -0,0 +1,15 @@ +# Pricing, context window and max output: +# https://docs.vivgrid.com/models/claude-fable-5 (accessed 2026-09-07) +# Effort: output_config.effort = low|medium|high|xhigh|max +base_model = "anthropic/claude-fable-5" +structured_output = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 10 +output = 50 +cache_read = 1.25 +cache_write = 12.5 + +[provider] +npm = "@ai-sdk/anthropic" diff --git a/providers/vivgrid/models/claude-opus-5.toml b/providers/vivgrid/models/claude-opus-5.toml new file mode 100644 index 00000000000..fbc0e693efc --- /dev/null +++ b/providers/vivgrid/models/claude-opus-5.toml @@ -0,0 +1,14 @@ +# Pricing, context window and max output: +# https://docs.vivgrid.com/models/claude-opus-5 (accessed 2026-09-07) +base_model = "anthropic/claude-opus-5" +structured_output = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 5.0 +output = 25.0 +cache_read = 0.50 +cache_write = 6.25 + +[provider] +npm = "@ai-sdk/anthropic" diff --git a/providers/vivgrid/models/claude-sonnet-5.toml b/providers/vivgrid/models/claude-sonnet-5.toml new file mode 100644 index 00000000000..44da13b30e5 --- /dev/null +++ b/providers/vivgrid/models/claude-sonnet-5.toml @@ -0,0 +1,16 @@ +# Pricing, context window and max output: +# https://docs.vivgrid.com/models/claude-sonnet-5 (accessed 2026-09-07) +# Toggle: thinking.type = adaptive|disabled +# Effort: output_config.effort = low|medium|high|xhigh|max +base_model = "anthropic/claude-sonnet-5" +reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] +structured_output = true + +[cost] +input = 2 +output = 10 +cache_read = 0.2 +cache_write = 2.5 + +[provider] +npm = "@ai-sdk/anthropic" \ No newline at end of file diff --git a/providers/vivgrid/models/deepseek-v4-flash.toml b/providers/vivgrid/models/deepseek-v4-flash.toml index 38f0598e8fe..464e7b70d2d 100644 --- a/providers/vivgrid/models/deepseek-v4-flash.toml +++ b/providers/vivgrid/models/deepseek-v4-flash.toml @@ -1,3 +1,5 @@ +# Pricing, context window and max output: +# https://docs.vivgrid.com/models/deepseek-v4-flash (accessed 2026-09-18) base_model = "deepseek/deepseek-v4-flash-0731" name = "DeepSeek V4 Flash" diff --git a/providers/vivgrid/models/deepseek-v4-pro-0813.toml b/providers/vivgrid/models/deepseek-v4-pro-0813.toml new file mode 100644 index 00000000000..be0105b9639 --- /dev/null +++ b/providers/vivgrid/models/deepseek-v4-pro-0813.toml @@ -0,0 +1,22 @@ +# Pricing and capabilities: +# https://docs.vivgrid.com/models/deepseek-v4-pro-0813 (accessed 2026-09-07) +# Reasoning tokens bill at the output rate (no separate CoT price). +# Toggle: thinking.type = enabled|disabled +# Effort: reasoning_effort = high|max +base_model = "deepseek/deepseek-v4-pro-0813" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1.35 +output = 3.00 +reasoning = 3.00 +cache_read = 0.05 diff --git a/providers/vivgrid/models/deepseek-v4.1-flash.toml b/providers/vivgrid/models/deepseek-v4.1-flash.toml new file mode 100644 index 00000000000..276f6360406 --- /dev/null +++ b/providers/vivgrid/models/deepseek-v4.1-flash.toml @@ -0,0 +1,20 @@ +# Pricing, context window and max output: +# https://docs.vivgrid.com/models/deepseek-v4.1-flash (accessed 2026-09-21) +base_model = "deepseek/deepseek-v4.1-flash" + +# Toggle: thinking.type = enabled|disabled +# Effort: reasoning_effort = low|high|max +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.31 +output = 1.23 +cache_read = 0.01 diff --git a/providers/vivgrid/models/gemini-3.8-flash.toml b/providers/vivgrid/models/gemini-3.8-flash.toml new file mode 100644 index 00000000000..758290832b2 --- /dev/null +++ b/providers/vivgrid/models/gemini-3.8-flash.toml @@ -0,0 +1,17 @@ +# Pricing and capabilities: +# https://docs.vivgrid.com/models/gemini-3.8-flash (accessed 2026-09-07) +# Vivgrid documents 128K max output for this model, double the 64K the Gemini +# Flash line normally serves. +base_model = "google/gemini-3.8-flash" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[cost] +input = 0.75 +output = 3.75 +cache_read = 0.15 + +[limit] +output = 128_000 + +[provider] +npm = "@ai-sdk/openai-compatible" diff --git a/providers/vivgrid/models/glm-5.2.toml b/providers/vivgrid/models/glm-5.2.toml index ad841133eeb..2ba2cd2bf76 100644 --- a/providers/vivgrid/models/glm-5.2.toml +++ b/providers/vivgrid/models/glm-5.2.toml @@ -1,3 +1,5 @@ +# Pricing, context window and max output: +# https://docs.vivgrid.com/models/glm-5.2 (accessed 2026-09-18) base_model = "zhipuai/glm-5.2" [[reasoning_options]] diff --git a/providers/vivgrid/models/glm-5.3-flash.toml b/providers/vivgrid/models/glm-5.3-flash.toml new file mode 100644 index 00000000000..c96e44f1b38 --- /dev/null +++ b/providers/vivgrid/models/glm-5.3-flash.toml @@ -0,0 +1,12 @@ +# Pricing per https://docs.vivgrid.com/models (accessed 2026-08-27): +# input $0.15 / cached input $0.04 / output $0.50 per 1M tokens. +base_model = "zhipuai/glm-5.3-flash" +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.04 diff --git a/providers/vivgrid/models/glm-5.3.toml b/providers/vivgrid/models/glm-5.3.toml index 704b2199e03..da960ec71fa 100644 --- a/providers/vivgrid/models/glm-5.3.toml +++ b/providers/vivgrid/models/glm-5.3.toml @@ -1,3 +1,5 @@ +# Pricing, context window and max output: +# https://docs.vivgrid.com/models/glm-5.3 (accessed 2026-09-18) base_model = "zhipuai/glm-5.3" reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] diff --git a/providers/vivgrid/models/gpt-5.1-codex-max.toml b/providers/vivgrid/models/gpt-5.1-codex-max.toml index b96035a695e..68ec50cbee8 100644 --- a/providers/vivgrid/models/gpt-5.1-codex-max.toml +++ b/providers/vivgrid/models/gpt-5.1-codex-max.toml @@ -1,3 +1,5 @@ +# Pricing, context window and max output: +# https://docs.vivgrid.com/models/gpt-5.1-codex-max (accessed 2026-09-18) name = "GPT-5.1 Codex Max" description = "Coding-optimized GPT model for repository edits, reviews, and agentic software work" family = "gpt-codex" diff --git a/providers/vivgrid/models/gpt-5.1-codex.toml b/providers/vivgrid/models/gpt-5.1-codex.toml index c8b1158f20c..f6e6f2fa8ee 100644 --- a/providers/vivgrid/models/gpt-5.1-codex.toml +++ b/providers/vivgrid/models/gpt-5.1-codex.toml @@ -1,3 +1,5 @@ +# Pricing, context window and max output: +# https://docs.vivgrid.com/models/gpt-5.1-codex (accessed 2026-09-18) name = "GPT-5.1 Codex" description = "Coding-optimized GPT model for repository edits, reviews, and agentic software work" family = "gpt-codex" diff --git a/providers/vivgrid/models/gpt-5.2-codex.toml b/providers/vivgrid/models/gpt-5.2-codex.toml index e28e266ee10..7319407808d 100644 --- a/providers/vivgrid/models/gpt-5.2-codex.toml +++ b/providers/vivgrid/models/gpt-5.2-codex.toml @@ -1,3 +1,5 @@ +# Pricing, context window and max output: +# https://docs.vivgrid.com/models/gpt-5.2-codex (accessed 2026-09-18) name = "GPT-5.2 Codex" description = "Coding-optimized GPT model for repository edits, reviews, and agentic software work" family = "gpt-codex" diff --git a/providers/vivgrid/models/gpt-5.3-codex.toml b/providers/vivgrid/models/gpt-5.3-codex.toml index 715972403fe..454bc79f662 100644 --- a/providers/vivgrid/models/gpt-5.3-codex.toml +++ b/providers/vivgrid/models/gpt-5.3-codex.toml @@ -1,3 +1,5 @@ +# Pricing, context window and max output: +# https://docs.vivgrid.com/models/gpt-5.3-codex (accessed 2026-09-18) name = "GPT-5.3 Codex" description = "Coding-optimized GPT model for repository edits, reviews, and agentic software work" family = "gpt-codex" diff --git a/providers/vivgrid/models/gpt-5.6-luna.toml b/providers/vivgrid/models/gpt-5.6-luna.toml index fb81c98d331..9c4852173d2 100644 --- a/providers/vivgrid/models/gpt-5.6-luna.toml +++ b/providers/vivgrid/models/gpt-5.6-luna.toml @@ -1,3 +1,5 @@ +# Pricing, context window and max output: +# https://docs.vivgrid.com/models/gpt-5.6-luna (accessed 2026-09-18) base_model = "openai/gpt-5.6-luna" name = "GPT 5.6 Luna" description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" diff --git a/providers/vivgrid/models/gpt-5.6-sol.toml b/providers/vivgrid/models/gpt-5.6-sol.toml index df3250cf9b6..65eb349ce72 100644 --- a/providers/vivgrid/models/gpt-5.6-sol.toml +++ b/providers/vivgrid/models/gpt-5.6-sol.toml @@ -1,3 +1,5 @@ +# Pricing, context window and max output: +# https://docs.vivgrid.com/models/gpt-5.6-sol (accessed 2026-09-18) base_model = "openai/gpt-5.6-sol" name = "GPT 5.6 Sol" description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" diff --git a/providers/vivgrid/models/gpt-5.6-terra.toml b/providers/vivgrid/models/gpt-5.6-terra.toml index 385029c25bd..371995729d7 100644 --- a/providers/vivgrid/models/gpt-5.6-terra.toml +++ b/providers/vivgrid/models/gpt-5.6-terra.toml @@ -1,3 +1,5 @@ +# Pricing, context window and max output: +# https://docs.vivgrid.com/models/gpt-5.6-terra (accessed 2026-09-18) base_model = "openai/gpt-5.6-terra" name = "GPT 5.6 Terra" description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks" diff --git a/providers/vivgrid/models/gpt-6-astra.toml b/providers/vivgrid/models/gpt-6-astra.toml new file mode 100644 index 00000000000..2a246582bfd --- /dev/null +++ b/providers/vivgrid/models/gpt-6-astra.toml @@ -0,0 +1,17 @@ +# Pricing, context window and max output: +# https://docs.vivgrid.com/models/gpt-6-astra (accessed 2026-09-18) +base_model = "openai/gpt-6-astra" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }] + +[cost] +input = 10 +output = 50 +cache_read = 1 +cache_write = 12.5 + +[[cost.tiers]] +tier = { type = "context", size = 272_000 } +input = 20 +output = 75 +cache_read = 2 +cache_write = 25 \ No newline at end of file diff --git a/providers/vivgrid/models/jev.toml b/providers/vivgrid/models/jev.toml new file mode 100644 index 00000000000..f499745e785 --- /dev/null +++ b/providers/vivgrid/models/jev.toml @@ -0,0 +1,7 @@ +# Pricing, context window and max output: +# https://docs.vivgrid.com/models/jev +base_model = "typesafe/jev-latest" + +[cost] +input = 0.042 +output = 0 diff --git a/providers/vivgrid/models/kimi-k3.toml b/providers/vivgrid/models/kimi-k3.toml index 7e11b4c39c2..1ca4fad3636 100644 --- a/providers/vivgrid/models/kimi-k3.toml +++ b/providers/vivgrid/models/kimi-k3.toml @@ -1,3 +1,5 @@ +# Pricing, context window and max output: +# https://docs.vivgrid.com/models/kimi-k3 (accessed 2026-09-18) base_model = "moonshotai/kimi-k3" description = "Kimi multimodal agent model for visual understanding, coding, and planning" reasoning_options = [] diff --git a/providers/vivgrid/models/viv-fast.toml b/providers/vivgrid/models/viv-fast.toml new file mode 100644 index 00000000000..354c69bf873 --- /dev/null +++ b/providers/vivgrid/models/viv-fast.toml @@ -0,0 +1,10 @@ +# Pricing, context window and max output: +# https://docs.vivgrid.com/models/viv-fast (accessed 2026-09-21) +base_model = "vivgrid/viv-fast" +# Effort: reasoning_effort = low|high|max +reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }] + +[cost] +input = 0.13 +output = 0.40 +cache_read = 0.05 diff --git a/providers/volcengine-coding-plan/logo.svg b/providers/volcengine-coding-plan/logo.svg new file mode 100644 index 00000000000..3a4780bc570 --- /dev/null +++ b/providers/volcengine-coding-plan/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/providers/volcengine-coding-plan/models/deepseek-v4-flash.toml b/providers/volcengine-coding-plan/models/deepseek-v4-flash.toml new file mode 100644 index 00000000000..706a72594b5 --- /dev/null +++ b/providers/volcengine-coding-plan/models/deepseek-v4-flash.toml @@ -0,0 +1,23 @@ +# Coding Plan model name from https://www.volcengine.com/docs/82379/1928261 +# (accessed 2026-08-26). Subscription tier: no per-token price. +# Toggle: thinking.type = enabled|disabled, POST /api/coding/v3/chat/completions +# (verified: enabled -> reasoning_tokens 57, disabled -> 0). +# No graded effort: the same body accepts reasoning_effort, but acceptance is not +# effect. Over n=5 runs per level on a prompt hard enough to consume the budget, +# none and minimal were hard zeros (the off switch) while the graded values fully +# overlapped -- low 659/873/216/487/845, medium 271/1548/556/296/1245, +# high 121/123/132/349/262, xhigh 928/753/268/480/110, max 811/435/570/910/623. +# 'high' sits below 'low', so the levels are not separable and only the toggle is +# declared, matching the toggle the lab (providers/deepseek) exposes. +base_model = "deepseek/deepseek-v4-flash" + +[[reasoning_options]] +type = "toggle" + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/volcengine-coding-plan/models/deepseek-v4-pro.toml b/providers/volcengine-coding-plan/models/deepseek-v4-pro.toml new file mode 100644 index 00000000000..68e7561f92e --- /dev/null +++ b/providers/volcengine-coding-plan/models/deepseek-v4-pro.toml @@ -0,0 +1,22 @@ +# Coding Plan model name from https://www.volcengine.com/docs/82379/1928261 +# (accessed 2026-08-26). Subscription tier: no per-token price. +# Toggle: thinking.type = enabled|disabled, POST /api/coding/v3/chat/completions +# (verified: enabled -> reasoning_tokens 79, disabled -> 0). +# No graded effort: the same body accepts reasoning_effort, but acceptance is not +# effect. Over n=5 runs per level on a prompt hard enough to consume the budget, +# none and minimal were hard zeros (the off switch) while the graded values fully +# overlapped -- low 200/517/616/638/313, high 466/673/604/1075/415, +# max 389/204/240/1535/688. The levels are not separable, so only the toggle is +# declared, matching the toggle the lab (providers/deepseek) exposes. +base_model = "deepseek/deepseek-v4-pro" + +[[reasoning_options]] +type = "toggle" + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/volcengine-coding-plan/models/doubao-seed-2.0-lite.toml b/providers/volcengine-coding-plan/models/doubao-seed-2.0-lite.toml new file mode 100644 index 00000000000..36b1f4ec98b --- /dev/null +++ b/providers/volcengine-coding-plan/models/doubao-seed-2.0-lite.toml @@ -0,0 +1,26 @@ +# Coding Plan model name from https://www.volcengine.com/docs/82379/1928261 +# (accessed 2026-08-26). Subscription tier: no per-token price. +# Effort: reasoning_effort = none|low|high, POST /api/coding/v3/chat/completions. +# The wire also accepts minimal|medium|xhigh|max, but they are not separable. +# Over n=4 runs per level on a prompt hard enough to consume the budget: +# none 0 0 0 0 low 610/556/639/583 medium 655/773/777/567 +# high 1328/1618/896/1043 max 1369/1042/1565/867 +# medium overlaps low, and max sits inside the high band (its floor of 867 is below +# high's 896), so max is not a deeper tier and is not declared. Only none|low|high +# hold up. Note an easy prompt hides all of this: on a one-step question every +# level lands at 57-73 tokens. +# 'none' is kept rather than a toggle because thinking.type=disabled sent together +# with a graded effort is rejected as an invalid combination here. +base_model = "bytedance-seed/seed-2.0-lite" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/volcengine-coding-plan/models/doubao-seed-2.1-turbo.toml b/providers/volcengine-coding-plan/models/doubao-seed-2.1-turbo.toml new file mode 100644 index 00000000000..a1af2dce727 --- /dev/null +++ b/providers/volcengine-coding-plan/models/doubao-seed-2.1-turbo.toml @@ -0,0 +1,28 @@ +# Coding Plan model name from https://www.volcengine.com/docs/82379/1928261 +# (accessed 2026-08-26). Subscription tier: no per-token price. +# Effort: reasoning_effort = none|low|high, POST /api/coding/v3/chat/completions. +# The wire also accepts minimal|medium|xhigh|max, but they are not separable. +# Over n=5 runs per level on a prompt hard enough to consume the budget: +# none 0 0 0 0 0 minimal 0 0 0 0 0 -> same off switch +# low 578-1148 medium 946-1248 -> medium overlaps low +# high 1405-1780 xhigh 1008-2085 -> xhigh spans high +# 'max' was re-measured at n=6 against high on the same prompt: +# high 1406-2402 (median 1928) max 1321-2537 (median 1785) +# max's median lands *below* high's and the ranges overlap fully, so it is not a +# deeper tier -- declaring it would advertise a level that thinks no more than +# high. Only none|low|high hold up. +# 'none' is kept rather than a toggle because thinking.type=disabled sent together +# with a graded effort is rejected as an invalid combination here. +base_model = "bytedance-seed/seed-2.1-turbo" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/volcengine-coding-plan/models/doubao-seed-evolving.toml b/providers/volcengine-coding-plan/models/doubao-seed-evolving.toml new file mode 100644 index 00000000000..ea0b56680c0 --- /dev/null +++ b/providers/volcengine-coding-plan/models/doubao-seed-evolving.toml @@ -0,0 +1,26 @@ +# Coding Plan model name from https://www.volcengine.com/docs/82379/1928261 +# (accessed 2026-08-26). Subscription tier: no per-token price. +# Effort: reasoning_effort = none|low|high, POST /api/coding/v3/chat/completions. +# The wire also accepts minimal|medium|xhigh|max, but they are not separable. +# Over n=4 runs per level on a prompt hard enough to consume the budget: +# none 0 0 0 0 low 1609/1242/1194/1195 +# medium 1672/1597/2218/1534 -> overlaps low +# high 4065/2727/2988/3863 +# max 2665/2674/2159/1965 -> lands *below* high +# 'max' is not a deeper tier on this model, so declaring it would mislead callers +# into paying for a level that thinks less than 'high'. Only none|low|high hold up. +# 'none' is kept rather than a toggle because thinking.type=disabled sent together +# with a graded effort is rejected as an invalid combination here. +base_model = "bytedance-seed/seed-evolving" + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "high"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/volcengine-coding-plan/models/glm-5.3-flash.toml b/providers/volcengine-coding-plan/models/glm-5.3-flash.toml new file mode 100644 index 00000000000..45dd0b497e0 --- /dev/null +++ b/providers/volcengine-coding-plan/models/glm-5.3-flash.toml @@ -0,0 +1,17 @@ +# Coding Plan model name from https://www.volcengine.com/docs/82379/1928261 +# (accessed 2026-09-11): the model list includes both glm-5.3 (glm-latest) +# and glm-5.3-flash. Subscription tier: no per-token price. +# Effort levels mirror providers/zai-coding-plan/glm-5.3-flash.toml. +base_model = "zhipuai/glm-5.3-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/volcengine-coding-plan/models/glm-5.3.toml b/providers/volcengine-coding-plan/models/glm-5.3.toml new file mode 100644 index 00000000000..8d75263dbe7 --- /dev/null +++ b/providers/volcengine-coding-plan/models/glm-5.3.toml @@ -0,0 +1,30 @@ +# Coding Plan model name from https://www.volcengine.com/docs/82379/1928261 +# (accessed 2026-08-26). Subscription tier: no per-token price. +# Effort: POST /api/coding/v3/chat/completions accepts low|medium|high|xhigh|max, +# but only the three effective levels are declared. This model reports +# reasoning_tokens = 0 on every level, so the measure is reasoning_content length; +# over n=5 runs per level on a prompt hard enough to consume the thinking budget: +# low 0 0 0 0 0 medium 0 0 0 0 0 -> medium aliases low +# high 169 149 0 188 0 +# xhigh 2840 1943 3338 4655 6279 max 2363 4567 2962 4606 2327 +# -> xhigh aliases max +# Three distinct tiers, matching the lab (providers/zai) and the coding-plan peers. +# Volcengine's mapping table (82379/1449737) covers glm-5-2-260617 but not 5.3, and +# that row disagrees with what 5.3 does here (it maps low/medium to high, whereas +# 5.3 returns no reasoning at all on both), so these levels are set from the +# measurements above rather than from that table. +# No toggle: both reasoning_effort=none|minimal and thinking.type=disabled are +# rejected with 'not supported by this model'. +base_model = "zhipuai/glm-5.3" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/volcengine-coding-plan/models/kimi-k2.7-code.toml b/providers/volcengine-coding-plan/models/kimi-k2.7-code.toml new file mode 100644 index 00000000000..d345d44bd0e --- /dev/null +++ b/providers/volcengine-coding-plan/models/kimi-k2.7-code.toml @@ -0,0 +1,19 @@ +# Coding Plan model name from https://www.volcengine.com/docs/82379/1928261 +# (accessed 2026-08-26). Subscription tier: no per-token price. +# reasoning_options = [] matches the lab (providers/moonshotai) and the other +# relays: thinking is always on with no caller control. POST /api/coding/v3 does +# accept reasoning_effort here, but acceptance is not effect -- over n=3 runs per +# level on a hard arithmetic prompt, reasoning_content length came back +# minimal 707/697/917, high 823/892/755, max 712/861/690, i.e. fully overlapping, +# so no graded control is declared. +base_model = "moonshotai/kimi-k2.7-code" + +reasoning_options = [] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/volcengine-coding-plan/models/kimi-k3.toml b/providers/volcengine-coding-plan/models/kimi-k3.toml new file mode 100644 index 00000000000..7b7fb0c9e7e --- /dev/null +++ b/providers/volcengine-coding-plan/models/kimi-k3.toml @@ -0,0 +1,28 @@ +# Coding Plan model name from https://www.volcengine.com/docs/82379/1928261 +# (accessed 2026-09-11), listed alongside kimi-k2.7-code. Subscription tier: +# no per-token price. +# reasoning_options mirror the lab (providers/moonshotai/models/kimi-k3.toml) +# and the kimi-code-plan-cn relay peer. Wire fields on this provider's OpenAI +# path (provider.toml): POST /api/coding/v3/chat/completions takes +# thinking.type = enabled|disabled plus reasoning_effort = low|high|max +# (`adaptive` is the Moonshot lab surface, not accepted here); the separate +# Anthropic path (/api/coding/v1/messages) uses output_config.effort. +# Endpoint-specific effort behavior on this relay was not measured; the +# baseline is copied per relay convention — adjust if wire probing shows +# levels collapsing as they do on kimi-k2.7-code (see that file). +base_model = "moonshotai/kimi-k3" + +[[reasoning_options]] +type = "toggle" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/volcengine-coding-plan/models/minimax-m3.toml b/providers/volcengine-coding-plan/models/minimax-m3.toml new file mode 100644 index 00000000000..60ca6e93c0d --- /dev/null +++ b/providers/volcengine-coding-plan/models/minimax-m3.toml @@ -0,0 +1,21 @@ +# Coding Plan model name from https://www.volcengine.com/docs/82379/1928261 +# (accessed 2026-08-26). Subscription tier: no per-token price. +# Toggle: thinking.type = enabled|disabled, POST /api/coding/v3/chat/completions +# Toggle only, matching first-party MiniMax and minimax-coding-plan. +# The same body also accepts reasoning_effort, but acceptance is not effect: +# over n=3 runs per level on a hard arithmetic prompt, reasoning_content length was +# minimal 1161/1033/805, high 1195/741/840, max 957/709/1088 -- fully overlapping, +# so no graded control is declared. 'none' is likewise accepted without disabling +# thinking (reasoning_tokens stays non-zero), so thinking.type is the real switch. +base_model = "minimax/MiniMax-M3" + +[[reasoning_options]] +type = "toggle" + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/volcengine-coding-plan/provider.toml b/providers/volcengine-coding-plan/provider.toml new file mode 100644 index 00000000000..7420f6ed561 --- /dev/null +++ b/providers/volcengine-coding-plan/provider.toml @@ -0,0 +1,42 @@ +name = "Volcengine Ark Coding Plan" +env = ["ARK_CODING_PLAN_API_KEY"] +npm = "@ai-sdk/openai-compatible" +# Coding Plan is a subscription tier with its own base URL. Volcengine warns that +# calling the pay-as-you-go https://ark.cn-beijing.volces.com/api/v3 with a Coding +# Plan key does NOT draw down the subscription and bills separately, so the two +# providers must stay distinct. +# The env var is deliberately not ARK_API_KEY: /api/coding/v3 does not check which +# plan a key belongs to, so a pay-as-you-go key reaches it and bills per token. +# Sharing ARK_API_KEY would light up both providers at once and let a user pick a +# Coding Plan entry while silently paying pay-as-you-go rates. +# Reasoning HTTP format (accessed 2026-08-26): +# OpenAI Chat: POST /api/coding/v3/chat/completions; `thinking.type` = enabled or +# disabled (`auto` is rejected on most models); `reasoning_effort` is accepted on +# every model but only some values have effect, so each file declares just the +# levels it honours, measured on this endpoint (n=4-6 per level, 2026-08-27): +# doubao-seed-2.1-turbo / 2.0-lite / evolving -> none|low|high +# (medium overlaps low, xhigh and max overlap high rather than exceeding it) +# glm-5.3 -> low|high|max +# (rejects none and minimal outright; medium aliases low, xhigh aliases max) +# deepseek-v4-flash / -pro -> toggle only +# (graded values fully overlap; on Flash 'high' lands below 'low') +# kimi-k2.7-code -> no controls +# minimax-m3 -> toggle only +# (tolerates none but still spends reasoning tokens on it, so it is not an +# off switch there; thinking.type is) +# Plaintext reasoning is in `choices[].message.reasoning_content` +# and the encrypted block in `choices[].message.encrypted_content`. +# Anthropic: base https://ark.cn-beijing.volces.com/api/coding, POST /v1/messages +# with `thinking.type` and `output_config.effort`. +# Model names here are the short console labels (doubao-seed-2.1-turbo). This +# endpoint is the more permissive of the two: it accepts the dated IDs as well +# (verified 2026-08-27 - doubao-seed-2-1-turbo-260628, doubao-seed-2-0-lite-260428 +# and glm-5-3-260930 all resolve here), whereas the pay-as-you-go /api/v3 accepts +# only the dated form and 404s on a short label. The short labels are used because +# they are what the Coding Plan console shows. `ark-code-latest` follows whichever +# model is selected in the console. +# Sources: +# https://www.volcengine.com/docs/82379/1928261 +# https://www.volcengine.com/docs/82379/2546386 +doc = "https://www.volcengine.com/docs/82379/1928261" +api = "https://ark.cn-beijing.volces.com/api/coding/v3" diff --git a/providers/volcengine/models/doubao-seed-1-6-flash-250828.toml b/providers/volcengine/models/doubao-seed-1-6-flash-250828.toml index 045c026b4dd..1f612a39a73 100644 --- a/providers/volcengine/models/doubao-seed-1-6-flash-250828.toml +++ b/providers/volcengine/models/doubao-seed-1-6-flash-250828.toml @@ -1,7 +1,22 @@ # Model ID verified against POST /api/v3/chat/completions (2026-08-26): `doubao-seed-1-6-flash-250828` # CNY→USD rate: 6.737012, 2026-08-26, source: https://open.er-api.com/v6/latest/USD # CNY list price source: https://www.volcengine.com/docs/82379/1544106 +# Toggle: thinking.type = enabled|disabled, POST /api/v3/chat/completions +# (verified 2026-08-27: enabled -> 278 reasoning tokens, disabled -> 0). This model +# reasons by default -- a bare request with no reasoning params returns 283 reasoning +# tokens -- so the absence of a reasoning declaration here was wrong. +# No graded effort: reasoning_effort is accepted but not separable. Over n=4 runs per +# level, none 762/479/627/646, minimal 715/513/760/717, low 942/561/660/596, +# high 599/502/586/837, max 575/863/714/598 -- fully overlapping, and 'none' does not +# even switch thinking off here, so thinking.type is the only real control. base_model = "bytedance-seed/seed-1-6-flash" +reasoning = true + +[[reasoning_options]] +type = "toggle" + +[interleaved] +field = "reasoning_content" [cost] input = 0.02227 diff --git a/providers/volcengine/models/doubao-seed-1-6-vision-250815.toml b/providers/volcengine/models/doubao-seed-1-6-vision-250815.toml index e720b45e8a2..981343233eb 100644 --- a/providers/volcengine/models/doubao-seed-1-6-vision-250815.toml +++ b/providers/volcengine/models/doubao-seed-1-6-vision-250815.toml @@ -1,7 +1,22 @@ # Model ID verified against POST /api/v3/chat/completions (2026-08-26): `doubao-seed-1-6-vision-250815` # CNY→USD rate: 6.737012, 2026-08-26, source: https://open.er-api.com/v6/latest/USD # CNY list price source: https://www.volcengine.com/docs/82379/1544106 +# Toggle: thinking.type = enabled|disabled, POST /api/v3/chat/completions +# (verified 2026-08-27: enabled -> 162 reasoning tokens, disabled -> 0). This model +# reasons by default -- a bare request with no reasoning params returns 166 reasoning +# tokens -- so the absence of a reasoning declaration here was wrong. +# No graded effort: reasoning_effort is accepted but not separable. Over n=4 runs per +# level, none 895/927/670/736, low 550/901/775/598, high 578/738/787/1031, +# max 852/813/1011/699 -- fully overlapping, and 'none' does not switch thinking off, +# so thinking.type is the only real control. base_model = "bytedance-seed/seed-1-6-vision" +reasoning = true + +[[reasoning_options]] +type = "toggle" + +[interleaved] +field = "reasoning_content" [cost] input = 0.11875 diff --git a/providers/volcengine/models/doubao-seed-1-8-251228.toml b/providers/volcengine/models/doubao-seed-1-8-251228.toml index 91169f4d431..94d9546206f 100644 --- a/providers/volcengine/models/doubao-seed-1-8-251228.toml +++ b/providers/volcengine/models/doubao-seed-1-8-251228.toml @@ -5,16 +5,14 @@ # here since the catalog has no output-length dimension. # Output tiering note applies to the base [cost] block only. # CNY list price source: https://www.volcengine.com/docs/82379/1544106 -# Toggle: thinking.type = enabled|disabled -# Effort: reasoning_effort = minimal|low|medium|high +# Effort: reasoning_effort = none|minimal|low|medium|high|xhigh|max +# none/minimal disable thinking, so no separate toggle: sending effort alone +# already enables it, and thinking.type=disabled + a graded effort is rejected. base_model = "bytedance-seed/seed-1-8" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" -values = ["minimal", "low", "medium", "high"] +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [interleaved] field = "reasoning_content" diff --git a/providers/volcengine/models/doubao-seed-2-0-code-preview-260215.toml b/providers/volcengine/models/doubao-seed-2-0-code-preview-260215.toml index d007a3a66d2..75f52056bd8 100644 --- a/providers/volcengine/models/doubao-seed-2-0-code-preview-260215.toml +++ b/providers/volcengine/models/doubao-seed-2-0-code-preview-260215.toml @@ -1,16 +1,14 @@ # Model ID verified against POST /api/v3/chat/completions (2026-08-26): `doubao-seed-2-0-code-preview-260215` # CNY→USD rate: 6.737012, 2026-08-26, source: https://open.er-api.com/v6/latest/USD # CNY list price source: https://www.volcengine.com/docs/82379/1544106 -# Toggle: thinking.type = enabled|disabled -# Effort: reasoning_effort = minimal|low|medium|high +# Effort: reasoning_effort = none|minimal|low|medium|high|xhigh|max +# none/minimal disable thinking, so no separate toggle: sending effort alone +# already enables it, and thinking.type=disabled + a graded effort is rejected. base_model = "bytedance-seed/seed-2.0-code" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" -values = ["minimal", "low", "medium", "high"] +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [interleaved] field = "reasoning_content" diff --git a/providers/volcengine/models/doubao-seed-2-0-lite-260428.toml b/providers/volcengine/models/doubao-seed-2-0-lite-260428.toml index 887dffe3576..8ff1d78be26 100644 --- a/providers/volcengine/models/doubao-seed-2-0-lite-260428.toml +++ b/providers/volcengine/models/doubao-seed-2-0-lite-260428.toml @@ -1,16 +1,20 @@ # Model ID verified against POST /api/v3/chat/completions (2026-08-26): `doubao-seed-2-0-lite-260428` # CNY→USD rate: 6.737012, 2026-08-26, source: https://open.er-api.com/v6/latest/USD # CNY list price source: https://www.volcengine.com/docs/82379/1544106 -# Toggle: thinking.type = enabled|disabled -# Effort: reasoning_effort = minimal|low|medium|high +# Effort: reasoning_effort = none|minimal|low|medium|high|xhigh|max +# none/minimal disable thinking, so no separate toggle: sending effort alone +# already enables it, and thinking.type=disabled + a graded effort is rejected. +# Output limit: the lab default is 32_000, but this host accepts up to 131_072 +# (verified 2026-08-27: max_tokens=131072 -> 200, 132000 -> 400 invalid), matching +# what openrouter/kilo/nano-gpt already declare for this model. Overridden below. base_model = "bytedance-seed/seed-2.0-lite" -[[reasoning_options]] -type = "toggle" +[limit] +output = 131_072 [[reasoning_options]] type = "effort" -values = ["minimal", "low", "medium", "high"] +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [interleaved] field = "reasoning_content" diff --git a/providers/volcengine/models/doubao-seed-2-0-mini-260428.toml b/providers/volcengine/models/doubao-seed-2-0-mini-260428.toml index 6e198f3f5cb..ab6bb6b255c 100644 --- a/providers/volcengine/models/doubao-seed-2-0-mini-260428.toml +++ b/providers/volcengine/models/doubao-seed-2-0-mini-260428.toml @@ -1,16 +1,20 @@ # Model ID verified against POST /api/v3/chat/completions (2026-08-26): `doubao-seed-2-0-mini-260428` # CNY→USD rate: 6.737012, 2026-08-26, source: https://open.er-api.com/v6/latest/USD # CNY list price source: https://www.volcengine.com/docs/82379/1544106 -# Toggle: thinking.type = enabled|disabled -# Effort: reasoning_effort = minimal|low|medium|high +# Effort: reasoning_effort = none|minimal|low|medium|high|xhigh|max +# none/minimal disable thinking, so no separate toggle: sending effort alone +# already enables it, and thinking.type=disabled + a graded effort is rejected. +# Output limit: the lab default is 32_000, but this host accepts up to 131_072 +# (verified 2026-08-27: max_tokens=131072 -> 200, 132000 -> 400 invalid), matching +# what openrouter/kilo/nano-gpt already declare for this model. Overridden below. base_model = "bytedance-seed/seed-2.0-mini" -[[reasoning_options]] -type = "toggle" +[limit] +output = 131_072 [[reasoning_options]] type = "effort" -values = ["minimal", "low", "medium", "high"] +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [interleaved] field = "reasoning_content" diff --git a/providers/volcengine/models/doubao-seed-2-0-pro-260215.toml b/providers/volcengine/models/doubao-seed-2-0-pro-260215.toml index 61bc3e87899..074981876ac 100644 --- a/providers/volcengine/models/doubao-seed-2-0-pro-260215.toml +++ b/providers/volcengine/models/doubao-seed-2-0-pro-260215.toml @@ -1,16 +1,14 @@ # Model ID verified against POST /api/v3/chat/completions (2026-08-26): `doubao-seed-2-0-pro-260215` # CNY→USD rate: 6.737012, 2026-08-26, source: https://open.er-api.com/v6/latest/USD # CNY list price source: https://www.volcengine.com/docs/82379/1544106 -# Toggle: thinking.type = enabled|disabled -# Effort: reasoning_effort = minimal|low|medium|high +# Effort: reasoning_effort = none|minimal|low|medium|high|xhigh|max +# none/minimal disable thinking, so no separate toggle: sending effort alone +# already enables it, and thinking.type=disabled + a graded effort is rejected. base_model = "bytedance-seed/seed-2.0-pro" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" -values = ["minimal", "low", "medium", "high"] +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [interleaved] field = "reasoning_content" diff --git a/providers/volcengine/models/doubao-seed-2-1-pro-260628.toml b/providers/volcengine/models/doubao-seed-2-1-pro-260628.toml index e084bfdaea9..2fd899c3e71 100644 --- a/providers/volcengine/models/doubao-seed-2-1-pro-260628.toml +++ b/providers/volcengine/models/doubao-seed-2-1-pro-260628.toml @@ -1,16 +1,14 @@ # Model ID verified against POST /api/v3/chat/completions (2026-08-26): `doubao-seed-2-1-pro-260628` # CNY→USD rate: 6.737012, 2026-08-26, source: https://open.er-api.com/v6/latest/USD # CNY list price source: https://www.volcengine.com/docs/82379/1544106 -# Toggle: thinking.type = enabled|disabled -# Effort: reasoning_effort = minimal|low|medium|high +# Effort: reasoning_effort = none|minimal|low|medium|high|xhigh|max +# none/minimal disable thinking, so no separate toggle: sending effort alone +# already enables it, and thinking.type=disabled + a graded effort is rejected. base_model = "bytedance-seed/seed-2.1-pro" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" -values = ["minimal", "low", "medium", "high"] +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [interleaved] field = "reasoning_content" diff --git a/providers/volcengine/models/doubao-seed-2-1-turbo-260628.toml b/providers/volcengine/models/doubao-seed-2-1-turbo-260628.toml index db066348e2b..4480a293892 100644 --- a/providers/volcengine/models/doubao-seed-2-1-turbo-260628.toml +++ b/providers/volcengine/models/doubao-seed-2-1-turbo-260628.toml @@ -1,16 +1,14 @@ # Model ID verified against POST /api/v3/chat/completions (2026-08-26): `doubao-seed-2-1-turbo-260628` # CNY→USD rate: 6.737012, 2026-08-26, source: https://open.er-api.com/v6/latest/USD # CNY list price source: https://www.volcengine.com/docs/82379/1544106 -# Toggle: thinking.type = enabled|disabled -# Effort: reasoning_effort = minimal|low|medium|high +# Effort: reasoning_effort = none|minimal|low|medium|high|xhigh|max +# none/minimal disable thinking, so no separate toggle: sending effort alone +# already enables it, and thinking.type=disabled + a graded effort is rejected. base_model = "bytedance-seed/seed-2.1-turbo" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" -values = ["minimal", "low", "medium", "high"] +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [interleaved] field = "reasoning_content" diff --git a/providers/volcengine/models/doubao-seed-character-260628.toml b/providers/volcengine/models/doubao-seed-character-260628.toml index c81590e9420..83be4ae59b9 100644 --- a/providers/volcengine/models/doubao-seed-character-260628.toml +++ b/providers/volcengine/models/doubao-seed-character-260628.toml @@ -2,7 +2,16 @@ # CNY→USD rate: 6.737012, 2026-08-26, source: https://open.er-api.com/v6/latest/USD # CNY list price source: https://www.volcengine.com/docs/82379/1544106 # Toggle: thinking.type = enabled|disabled -# Effort: reasoning_effort = minimal|low|medium|high +# Effort: reasoning_effort = minimal|low|high, and it must be paired with +# thinking.type=enabled. This model defaults thinking OFF, so a graded effort sent +# on its own is rejected: "Invalid combination of reasoning_effort and thinking +# type: low + disabled". 'none' is likewise unavailable; 'minimal' is the off value. +# Only three levels are separable. With thinking enabled, n=4 runs per level on a +# prompt hard enough to consume the budget: +# minimal 0 0 0 0 low 1347/1258/1166/1149 +# high 1709/2696/1695/1513 max 2304/1881/1985/1480 +# max overlaps high rather than exceeding it, and medium/xhigh sit inside the same +# band, so they are dropped. base_model = "bytedance-seed/seed-character" [[reasoning_options]] @@ -10,7 +19,7 @@ type = "toggle" [[reasoning_options]] type = "effort" -values = ["minimal", "low", "medium", "high"] +values = ["minimal", "low", "high"] [interleaved] field = "reasoning_content" diff --git a/providers/volcengine/models/doubao-seed-evolving.toml b/providers/volcengine/models/doubao-seed-evolving.toml index b86e6b212f4..6b6ba236900 100644 --- a/providers/volcengine/models/doubao-seed-evolving.toml +++ b/providers/volcengine/models/doubao-seed-evolving.toml @@ -1,16 +1,14 @@ # Model ID verified against POST /api/v3/chat/completions (2026-08-26): `doubao-seed-evolving` # CNY→USD rate: 6.737012, 2026-08-26, source: https://open.er-api.com/v6/latest/USD # CNY list price source: https://www.volcengine.com/docs/82379/1544106 -# Toggle: thinking.type = enabled|disabled -# Effort: reasoning_effort = minimal|low|medium|high +# Effort: reasoning_effort = none|minimal|low|medium|high|xhigh|max +# none/minimal disable thinking, so no separate toggle: sending effort alone +# already enables it, and thinking.type=disabled + a graded effort is rejected. base_model = "bytedance-seed/seed-evolving" -[[reasoning_options]] -type = "toggle" - [[reasoning_options]] type = "effort" -values = ["minimal", "low", "medium", "high"] +values = ["none", "minimal", "low", "medium", "high", "xhigh", "max"] [interleaved] field = "reasoning_content" diff --git a/providers/volcengine/models/glm-5-3-flash-260828.toml b/providers/volcengine/models/glm-5-3-flash-260828.toml new file mode 100644 index 00000000000..98cb87ee9ba --- /dev/null +++ b/providers/volcengine/models/glm-5-3-flash-260828.toml @@ -0,0 +1,18 @@ +# Model ID verified against POST /api/v3/chat/completions (2026-09-16): `glm-5-3-flash-260828` +# CNY→USD rate: 6.737012, 2026-08-26, source: https://open.er-api.com/v6/latest/USD +# CNY list price source: https://docs.volcengine.com/docs/82379/1449737 (深度思考) + 智谱官方价目表 +# GLM-5.3-Flash always reasons (thinking cannot be disabled on this model ID) +# Effort: reasoning_effort = low|high|max +base_model = "zhipuai/glm-5.3-flash" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.11875 +output = 0.41563 +cache_read = 0.03414 diff --git a/providers/volcengine/provider.toml b/providers/volcengine/provider.toml index 5879eda36d0..6ca805b6ab9 100644 --- a/providers/volcengine/provider.toml +++ b/providers/volcengine/provider.toml @@ -5,7 +5,9 @@ npm = "@ai-sdk/openai-compatible" # OpenAI Chat: POST /api/v3/chat/completions; `thinking.type` = enabled|disabled # (`auto` is documented but rejected with "Unsupported thinking type for the # current model" on every model here except doubao-seed-1-6-flash), -# `reasoning_effort` = minimal|low|medium|high. Plaintext reasoning is in +# `reasoning_effort` = none|minimal|low|medium|high|xhigh|max (none and minimal +# disable thinking; doubao-seed-1-6-251015 accepts only the middle four). +# Plaintext reasoning is in # `choices[].message.reasoning_content`, encrypted block is in # `choices[].message.encrypted_content` (returned by default). # Responses: POST /api/v3/responses; `reasoning.effort`; encrypted block requires diff --git a/providers/wallaby/logo.svg b/providers/wallaby/logo.svg new file mode 100644 index 00000000000..2eddcadc840 --- /dev/null +++ b/providers/wallaby/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/providers/wallaby/models/moonshotai/kimi-k3.toml b/providers/wallaby/models/moonshotai/kimi-k3.toml new file mode 100644 index 00000000000..ed5e6e18fe3 --- /dev/null +++ b/providers/wallaby/models/moonshotai/kimi-k3.toml @@ -0,0 +1,18 @@ +# Effort: reasoning_effort = low|medium|high|max (verified on this host +# 2026-09-14; same-prompt median reasoning tokens over 6 runs per level: +# low 61 < medium 85 < high 105 < max 123 — four graded tiers, "max" accepted +# and highest, "medium" a distinct intermediate tier). No wire path disables +# reasoning: "none"/"minimal" are accepted but still reason, and +# reasoning.enabled=false / thinking.type="disabled" are ignored — hence no +# "none" in values and no toggle. +# Pricing: https://wallabytoken.com/pricing.json (accessed 2026-09-14), USD per 1M tokens. +base_model = "moonshotai/kimi-k3" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 2.70 +output = 13.50 +cache_read = 0.27 diff --git a/providers/wallaby/provider.toml b/providers/wallaby/provider.toml new file mode 100644 index 00000000000..ffa9498fe24 --- /dev/null +++ b/providers/wallaby/provider.toml @@ -0,0 +1,9 @@ +# OpenAI-compatible API focused on Kimi K3. Reasoning effort is adjustable via +# `reasoning_effort` (low/medium/high) and reasoning streams in the +# `reasoning_content` field. `temperature` is accepted but normalized to 1. +# https://wallabytoken.com/docs (accessed 2026-09-14) +name = "Wallaby" +npm = "@ai-sdk/openai-compatible" +env = ["WALLABY_API_KEY"] +api = "https://api.wallabytoken.com/v1" +doc = "https://wallabytoken.com/docs" diff --git a/providers/wandb/logo.svg b/providers/wandb/logo.svg new file mode 100644 index 00000000000..57144021e2c --- /dev/null +++ b/providers/wandb/logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/providers/wandb/models/deepseek-ai/DeepSeek-V4-Pro-0813.toml b/providers/wandb/models/deepseek-ai/DeepSeek-V4-Pro-0813.toml new file mode 100644 index 00000000000..4e032260521 --- /dev/null +++ b/providers/wandb/models/deepseek-ai/DeepSeek-V4-Pro-0813.toml @@ -0,0 +1,17 @@ +base_model = "deepseek/deepseek-v4-pro-0813" +description = "DeepSeek V4-Pro-0813 is a 1.6T-parameter MoE model excelling at advanced reasoning, coding, and complex agentic workloads." +family = "deepseek" +release_date = "2026-08-13" +last_updated = "2026-08-13" + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 1.31 +output = 3.96 +cache_read = 0.044 + +[limit] +context = 1_048_576 +output = 1_048_576 diff --git a/providers/wandb/models/deepseek-ai/DeepSeek-V4.1-Flash.toml b/providers/wandb/models/deepseek-ai/DeepSeek-V4.1-Flash.toml new file mode 100644 index 00000000000..0c25c1c3eec --- /dev/null +++ b/providers/wandb/models/deepseek-ai/DeepSeek-V4.1-Flash.toml @@ -0,0 +1,15 @@ +base_model = "deepseek/deepseek-v4.1-flash" +description = "DeepSeek V4.1 Flash is a multimodal MoE model for coding, reasoning, and agentic workloads with long contexts." +family = "deepseek" + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.2 +output = 0.65 +cache_read = 0.03 + +[limit] +context = 1_048_576 +output = 1_048_576 diff --git a/providers/wandb/models/google/gemma-4-26B-A4B-it.toml b/providers/wandb/models/google/gemma-4-26B-A4B-it.toml new file mode 100644 index 00000000000..8014a72bac7 --- /dev/null +++ b/providers/wandb/models/google/gemma-4-26B-A4B-it.toml @@ -0,0 +1,14 @@ +base_model = "google/gemma-4-26b-a4b-it" +name = "Gemma 4 26B A4B" +description = "Gemma 4 26B A4B is a multimodal MoE model with LoRA support and function calling for agentic workflows." + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.1 +output = 0.3 +cache_read = 0.05 + +[limit] +output = 262_144 diff --git a/providers/wandb/models/meta-llama/Llama-3.1-70B-Instruct.toml b/providers/wandb/models/meta-llama/Llama-3.1-70B-Instruct.toml index 2b70835acf0..e4025c8baa5 100644 --- a/providers/wandb/models/meta-llama/Llama-3.1-70B-Instruct.toml +++ b/providers/wandb/models/meta-llama/Llama-3.1-70B-Instruct.toml @@ -1,14 +1,7 @@ +base_model = "meta/llama-3.1-70b-instruct" name = "Llama 3.1 70B" description = "Efficient conversational model optimized for responsive multilingual chatbot interactions." -family = "llama" -release_date = "2024-07-23" -last_updated = "2024-07-23" -attachment = false -reasoning = false -temperature = true -tool_call = true structured_output = true -open_weights = true [cost] input = 0.8 @@ -16,9 +9,5 @@ output = 0.8 cache_read = 0.8 [limit] -context = 128_000 -output = 128_000 - -[modalities] -input = ["text"] -output = ["text"] +context = 131_072 +output = 131_072 diff --git a/providers/wandb/models/meta-llama/Llama-3.1-8B-Instruct.toml b/providers/wandb/models/meta-llama/Llama-3.1-8B-Instruct.toml index 08af964b412..824e662b391 100644 --- a/providers/wandb/models/meta-llama/Llama-3.1-8B-Instruct.toml +++ b/providers/wandb/models/meta-llama/Llama-3.1-8B-Instruct.toml @@ -11,4 +11,5 @@ output = 0.22 cache_read = 0.22 [limit] -output = 128_000 +context = 131_072 +output = 131_072 diff --git a/providers/wandb/models/meta-llama/Llama-3.3-70B-Instruct.toml b/providers/wandb/models/meta-llama/Llama-3.3-70B-Instruct.toml index 4ff37a1bc2c..bbef1cd7465 100644 --- a/providers/wandb/models/meta-llama/Llama-3.3-70B-Instruct.toml +++ b/providers/wandb/models/meta-llama/Llama-3.3-70B-Instruct.toml @@ -3,7 +3,6 @@ name = "Llama 3.3 70B" description = "Multilingual model excelling in conversational tasks, detailed instruction-following, and coding." release_date = "2024-12-01" last_updated = "2024-12-01" -attachment = false structured_output = true [cost] diff --git a/providers/wandb/models/moonshotai/Kimi-K3.toml b/providers/wandb/models/moonshotai/Kimi-K3.toml deleted file mode 100644 index e336060fb28..00000000000 --- a/providers/wandb/models/moonshotai/Kimi-K3.toml +++ /dev/null @@ -1,15 +0,0 @@ -base_model = "moonshotai/kimi-k3" -description = "Kimi K3 is a 2.8T-parameter multimodal MoE model with 104B active parameters built for long-horizon coding and agentic workflows." -temperature = true -reasoning_options = [] - -[cost] -input = 3 -output = 15 -cache_read = 0.3 - -[limit] -output = 1_048_576 - -[modalities] -input = ["text", "image"] diff --git a/providers/wandb/models/nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B.toml b/providers/wandb/models/nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B.toml index b90c5c08a3c..94af899ca19 100644 --- a/providers/wandb/models/nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B.toml +++ b/providers/wandb/models/nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B.toml @@ -7,9 +7,9 @@ structured_output = true type = "toggle" [cost] -input = 0.75 -output = 2.75 -cache_read = 0.15 +input = 0.5 +output = 2.15 +cache_read = 0.1 [limit] context = 262_144 diff --git a/providers/wandb/models/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B.toml b/providers/wandb/models/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B.toml index 50a9ad49020..1237a638da9 100644 --- a/providers/wandb/models/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B.toml +++ b/providers/wandb/models/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B.toml @@ -6,6 +6,6 @@ description = "Nemotron 3.5 Lightning is an MoE model built for fast, reliable a type = "toggle" [cost] -input = 0.1 -output = 0.25 -cache_read = 0.05 +input = 0.07 +output = 0.2 +cache_read = 0.04 diff --git a/providers/wandb/models/zai-org/GLM-5.3-Flash.toml b/providers/wandb/models/zai-org/GLM-5.3-Flash.toml new file mode 100644 index 00000000000..678fccd1812 --- /dev/null +++ b/providers/wandb/models/zai-org/GLM-5.3-Flash.toml @@ -0,0 +1,19 @@ +# W&B lists always-on reasoning with low/high/max effort; no on/off toggle. +# https://trace.wandb.ai/inference/catalog/models +base_model = "zhipuai/glm-5.3-flash" +name = "GLM 5.3 Flash" +description = "GLM-5.3-Flash is a natively multimodal model with 320B total parameters and 18B active parameters." +family = "glm" +reasoning_options = [] + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.05 + +[limit] +context = 1_048_576 +output = 1_048_576 + +[modalities] +input = ["text", "image"] diff --git a/providers/wandb/provider.toml b/providers/wandb/provider.toml index a1b023378a3..83867ad26e6 100644 --- a/providers/wandb/provider.toml +++ b/providers/wandb/provider.toml @@ -1,4 +1,4 @@ -name = "Weights & Biases" +name = "CoreWeave" # POST /v1/chat/completions toggles eligible models with # chat_template_kwargs.enable_thinking=true|false; output is choices[].message.reasoning. # DeepSeek V4 and Gemma 4 default off; Nemotron 3, Qwen3.5/3.6, and GLM-5.1/5.2 @@ -8,4 +8,4 @@ name = "Weights & Biases" env = ["WANDB_API_KEY"] npm = "@ai-sdk/openai-compatible" api = "https://api.inference.wandb.ai/v1" -doc = "https://docs.wandb.ai/guides/integrations/inference/" +doc = "https://docs.wandb.ai/inference" diff --git a/providers/xai/models/grok-4.7.toml b/providers/xai/models/grok-4.7.toml new file mode 100644 index 00000000000..c205cfd8209 --- /dev/null +++ b/providers/xai/models/grok-4.7.toml @@ -0,0 +1,18 @@ +# Sources: https://docs.x.ai/developers/models/grok-4.7, https://docs.x.ai/developers/pricing, and https://docs.x.ai/developers/model-capabilities/text/reasoning +base_model = "xai/grok-4.7" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh"] + +[cost] +input = 2 +output = 6 +cache_read = 0.5 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 4 +output = 12 +cache_read = 1 + diff --git a/providers/xai/models/grok-imagine-image-2.0.toml b/providers/xai/models/grok-imagine-image-2.0.toml deleted file mode 100644 index ca1c58ac153..00000000000 --- a/providers/xai/models/grok-imagine-image-2.0.toml +++ /dev/null @@ -1,10 +0,0 @@ -# Sources: -# - https://docs.x.ai/docs/models -# - https://docs.x.ai/developers/models/grok-imagine-image-2.0 -# - https://docs.x.ai/docs/guides/image-generation -# Pricing: $0.04 per image (not token-based; no [cost] authored, same as sibling imagine image models) -base_model = "xai/grok-imagine-image-2.0" - -[modalities] -input = ["text", "image", "pdf"] -output = ["image", "pdf"] diff --git a/providers/xai/models/grok-imagine-image-quality.toml b/providers/xai/models/grok-imagine-image-quality.toml index 5781dc2839b..1be5068f356 100644 --- a/providers/xai/models/grok-imagine-image-quality.toml +++ b/providers/xai/models/grok-imagine-image-quality.toml @@ -1,17 +1,10 @@ -name = "Grok Imagine Image Quality" -description = "Image model for prompt-driven generation, editing, and visual design workflows" -family = "grok" -release_date = "2026-04-03" -last_updated = "2026-04-03" -attachment = true -reasoning = false -temperature = false -tool_call = false -open_weights = false - -[limit] -context = 8_000 -output = 0 +# Sources: +# - https://docs.x.ai/docs/models +# - https://docs.x.ai/developers/models/grok-imagine-image-quality +# - https://docs.x.ai/developers/pricing +# Pricing: $0.05/image (1K), $0.07/image (2K); image input $0.01/image (not token-based; no [cost] authored) +# Aliases: grok-imagine-image-quality-20260403, grok-imagine-image-quality-latest, grok-imagine-image-pro +base_model = "xai/grok-imagine-image-quality" [modalities] input = ["text", "image", "pdf"] diff --git a/providers/xai/models/grok-imagine-image.toml b/providers/xai/models/grok-imagine-image.toml index 1a5fe140ad0..cd78dffb344 100644 --- a/providers/xai/models/grok-imagine-image.toml +++ b/providers/xai/models/grok-imagine-image.toml @@ -10,7 +10,7 @@ tool_call = false open_weights = false [limit] -context = 8_000 +context = 16_000 output = 0 [modalities] diff --git a/providers/xiaomi-token-plan-ams/models/mimo-v2.6-flash.toml b/providers/xiaomi-token-plan-ams/models/mimo-v2.6-flash.toml new file mode 100644 index 00000000000..4129697bc51 --- /dev/null +++ b/providers/xiaomi-token-plan-ams/models/mimo-v2.6-flash.toml @@ -0,0 +1,12 @@ +# Toggle: thinking.type = enabled|disabled +# Source: https://mimo.mi.com/docs/en-US/tokenplan/Token%20Plan/quick-access +base_model = "xiaomi/mimo-v2.6-flash" +reasoning_options = [{ type = "toggle" }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/xiaomi-token-plan-ams/models/mimo-v2.6-pro.toml b/providers/xiaomi-token-plan-ams/models/mimo-v2.6-pro.toml new file mode 100644 index 00000000000..62ef14092f6 --- /dev/null +++ b/providers/xiaomi-token-plan-ams/models/mimo-v2.6-pro.toml @@ -0,0 +1,12 @@ +# Toggle: thinking.type = enabled|disabled +# Source: https://mimo.mi.com/docs/en-US/tokenplan/Token%20Plan/quick-access +base_model = "xiaomi/mimo-v2.6-pro" +reasoning_options = [{ type = "toggle" }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/xiaomi-token-plan-cn/models/mimo-v2.6-flash.toml b/providers/xiaomi-token-plan-cn/models/mimo-v2.6-flash.toml new file mode 100644 index 00000000000..091c178cc51 --- /dev/null +++ b/providers/xiaomi-token-plan-cn/models/mimo-v2.6-flash.toml @@ -0,0 +1,12 @@ +# Toggle: thinking.type = enabled|disabled +# Source: https://mimo.mi.com/docs/zh-CN/api/chat/openai-api +base_model = "xiaomi/mimo-v2.6-flash" +reasoning_options = [{ type = "toggle" }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/xiaomi-token-plan-cn/models/mimo-v2.6-pro.toml b/providers/xiaomi-token-plan-cn/models/mimo-v2.6-pro.toml new file mode 100644 index 00000000000..27c7d777207 --- /dev/null +++ b/providers/xiaomi-token-plan-cn/models/mimo-v2.6-pro.toml @@ -0,0 +1,12 @@ +# Toggle: thinking.type = enabled|disabled +# Source: https://mimo.mi.com/docs/zh-CN/api/chat/openai-api +base_model = "xiaomi/mimo-v2.6-pro" +reasoning_options = [{ type = "toggle" }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/xiaomi-token-plan-sgp/models/mimo-v2.6-flash.toml b/providers/xiaomi-token-plan-sgp/models/mimo-v2.6-flash.toml new file mode 100644 index 00000000000..4129697bc51 --- /dev/null +++ b/providers/xiaomi-token-plan-sgp/models/mimo-v2.6-flash.toml @@ -0,0 +1,12 @@ +# Toggle: thinking.type = enabled|disabled +# Source: https://mimo.mi.com/docs/en-US/tokenplan/Token%20Plan/quick-access +base_model = "xiaomi/mimo-v2.6-flash" +reasoning_options = [{ type = "toggle" }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/xiaomi-token-plan-sgp/models/mimo-v2.6-pro.toml b/providers/xiaomi-token-plan-sgp/models/mimo-v2.6-pro.toml new file mode 100644 index 00000000000..62ef14092f6 --- /dev/null +++ b/providers/xiaomi-token-plan-sgp/models/mimo-v2.6-pro.toml @@ -0,0 +1,12 @@ +# Toggle: thinking.type = enabled|disabled +# Source: https://mimo.mi.com/docs/en-US/tokenplan/Token%20Plan/quick-access +base_model = "xiaomi/mimo-v2.6-pro" +reasoning_options = [{ type = "toggle" }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0 +output = 0 +cache_read = 0 diff --git a/providers/xiaomi/models/mimo-v2.6-flash.toml b/providers/xiaomi/models/mimo-v2.6-flash.toml new file mode 100644 index 00000000000..8a98ed174da --- /dev/null +++ b/providers/xiaomi/models/mimo-v2.6-flash.toml @@ -0,0 +1,31 @@ +# Toggle: thinking.type = enabled|disabled +# Sources: https://mimo.mi.com/models/zh-CN/mimo-v2.6-flash and https://mimo.mi.com/docs/zh-CN/api/chat/openai-api +name = "MiMo-V2.6-Flash" +description = "MiMo Flash model for multimodal coding agents and long-context automation" +family = "mimo" +release_date = "2026-09-22" +last_updated = "2026-09-22" +attachment = true +reasoning = true +temperature = true +tool_call = true +open_weights = true + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.14 +output = 0.28 +cache_read = 0.0028 + +[limit] +context = 1_048_576 +output = 131_072 + +[modalities] +input = ["text", "image", "audio", "video"] +output = ["text"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/xiaomi/models/mimo-v2.6-pro-ultraspeed.toml b/providers/xiaomi/models/mimo-v2.6-pro-ultraspeed.toml new file mode 100644 index 00000000000..400e80cc7c5 --- /dev/null +++ b/providers/xiaomi/models/mimo-v2.6-pro-ultraspeed.toml @@ -0,0 +1,31 @@ +# Toggle: thinking.type = enabled|disabled +# Sources: https://mimo.mi.com/models/zh-CN/mimo-v2.6-pro-ultraspeed and https://mimo.mi.com/docs/zh-CN/api/chat/openai-api +name = "MiMo-V2.6-Pro-UltraSpeed" +description = "MiMo pro model for strong multimodal reasoning and agent execution" +family = "mimo" +release_date = "2026-09-21" +last_updated = "2026-09-21" +attachment = true +reasoning = true +temperature = true +tool_call = true +open_weights = true + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 4.35 +output = 8.7 +cache_read = 0.036 + +[limit] +context = 1_048_576 +output = 131_072 + +[modalities] +input = ["text", "image", "audio", "video"] +output = ["text"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/xiaomi/models/mimo-v2.6-pro.toml b/providers/xiaomi/models/mimo-v2.6-pro.toml new file mode 100644 index 00000000000..d3b71b59d4c --- /dev/null +++ b/providers/xiaomi/models/mimo-v2.6-pro.toml @@ -0,0 +1,31 @@ +# Toggle: thinking.type = enabled|disabled +# Sources: https://mimo.mi.com/models/zh-CN/mimo-v2.6-pro and https://mimo.mi.com/docs/zh-CN/api/chat/openai-api +name = "MiMo-V2.6-Pro" +description = "MiMo Pro model for multimodal coding agents and long-context automation" +family = "mimo" +release_date = "2026-09-22" +last_updated = "2026-09-22" +attachment = true +reasoning = true +temperature = true +tool_call = true +open_weights = true + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.435 +output = 0.87 +cache_read = 0.0036 + +[limit] +context = 1_048_576 +output = 131_072 + +[modalities] +input = ["text", "image", "audio", "video"] +output = ["text"] + +[interleaved] +field = "reasoning_content" diff --git a/providers/zai/models/glm-4.6v-flash.toml b/providers/zai/models/glm-4.6v-flash.toml new file mode 100644 index 00000000000..d9793eab5e8 --- /dev/null +++ b/providers/zai/models/glm-4.6v-flash.toml @@ -0,0 +1,14 @@ +base_model = "zhipuai/glm-4.6v-flash" +# Free Flash tier on Z.AI; cost shape mirrors providers/zai/models/glm-4.5-flash.toml. +# Lab metadata (limits/modalities) lives in models/zhipuai/glm-4.6v-flash.toml. +# https://z.ai/blog/glm-4.6v +# https://huggingface.co/zai-org/GLM-4.6V-Flash + +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0 +output = 0 +cache_read = 0 +cache_write = 0 diff --git a/providers/zai/models/glm-5.3-flash.toml b/providers/zai/models/glm-5.3-flash.toml index 59029d6336a..5850a4727dc 100644 --- a/providers/zai/models/glm-5.3-flash.toml +++ b/providers/zai/models/glm-5.3-flash.toml @@ -2,6 +2,7 @@ base_model = "zhipuai/glm-5.3-flash" # GLM-5.3-Flash reasons by default; effort levels low|high|max, and thinking can # be suppressed with {"thinking": {"type": "disabled"}}. # https://z.ai/blog/glm-5.3-flash +# Pricing: https://docs.z.ai/guides/overview/pricing (accessed 2026-09-19) # Served by https://api.z.ai/api/paas/v4 (verified against GET /models 2026-08-26). [[reasoning_options]] @@ -12,7 +13,7 @@ values = ["low", "high", "max"] field = "reasoning_content" [cost] -input = 0.075 -output = 0.25 -cache_read = 0.015 +input = 0.15 +output = 0.50 +cache_read = 0.03 cache_write = 0 diff --git a/providers/zai/models/glm-5.3-flashx.toml b/providers/zai/models/glm-5.3-flashx.toml new file mode 100644 index 00000000000..059cb836933 --- /dev/null +++ b/providers/zai/models/glm-5.3-flashx.toml @@ -0,0 +1,21 @@ +# GLM-5.3-FlashX is the high-speed serving option for GLM-5.3-Flash. +# https://docs.z.ai/guides/vlm/glm-5.3-flash +# Pricing: https://docs.z.ai/guides/overview/pricing (accessed 2026-09-19) +base_model = "zhipuai/glm-5.3-flash" +name = "GLM-5.3-FlashX" +description = "High-speed GLM-5.3-Flash serving option for coding and agent workflows" +release_date = "2026-09-18" +last_updated = "2026-09-18" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.37 +output = 1.25 +cache_read = 0.075 +cache_write = 0 diff --git a/providers/zeldoc/models/zdev.toml b/providers/zeldoc/models/zdev.toml index 22294cd7219..2d6b42d72f5 100644 --- a/providers/zeldoc/models/zdev.toml +++ b/providers/zeldoc/models/zdev.toml @@ -2,11 +2,10 @@ # https://docs.zeldoc.ai/ (accessed 2026-06-25) name = "ZDev" description = "Coding model for repository understanding, refactors, and agentic engineering tasks" -release_date = "2026-04-15" -last_updated = "2026-04-15" +release_date = "2026-08-26" +last_updated = "2026-08-26" attachment = true reasoning = true -knowledge = "2025-01" temperature = true tool_call = true structured_output = true @@ -14,7 +13,7 @@ open_weights = false [[reasoning_options]] type = "effort" -values = ["high", "max"] +values = ["low", "high", "max"] [interleaved] field = "reasoning_content" diff --git a/providers/zenmux/models/openai/gpt-5.1-chat.toml b/providers/zenmux/models/openai/gpt-5.1-chat.toml index 33972286e34..c35f6c1085e 100644 --- a/providers/zenmux/models/openai/gpt-5.1-chat.toml +++ b/providers/zenmux/models/openai/gpt-5.1-chat.toml @@ -9,6 +9,8 @@ tool_call = true knowledge = "2025-01-01" open_weights = false +status = "deprecated" + [cost] input = 1.25 output = 10.00 diff --git a/providers/zenmux/models/x-ai/grok-4-fast.toml b/providers/zenmux/models/x-ai/grok-4-fast.toml deleted file mode 100644 index f722ac7ac71..00000000000 --- a/providers/zenmux/models/x-ai/grok-4-fast.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Grok 4 Fast" -description = "Fast Grok model for responsive chat, reasoning, and tool-assisted work" -release_date = "2025-09-19" -last_updated = "2025-09-19" -attachment = true -reasoning = true -reasoning_options = [{ type = "toggle" }] -temperature = true -tool_call = true -knowledge = "2025-01-01" -open_weights = false -status = "deprecated" - -[cost] -input = 0.20 -output = 0.50 -cache_read = 0.05 - -[limit] -context = 2000_000 -output = 64_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/zenmux/models/x-ai/grok-4.1-fast-non-reasoning.toml b/providers/zenmux/models/x-ai/grok-4.1-fast-non-reasoning.toml deleted file mode 100644 index 997935a9745..00000000000 --- a/providers/zenmux/models/x-ai/grok-4.1-fast-non-reasoning.toml +++ /dev/null @@ -1,24 +0,0 @@ -name = "Grok 4.1 Fast Non Reasoning" -description = "Fast Grok model for responsive chat, reasoning, and tool-assisted work" -release_date = "2025-11-20" -last_updated = "2025-11-20" -attachment = true -reasoning = false -temperature = true -tool_call = true -knowledge = "2025-01-01" -open_weights = false -status = "deprecated" - -[cost] -input = 0.20 -output = 0.50 -cache_read = 0.05 - -[limit] -context = 2000_000 -output = 64_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/zenmux/models/x-ai/grok-4.1-fast.toml b/providers/zenmux/models/x-ai/grok-4.1-fast.toml deleted file mode 100644 index 6ddced52aef..00000000000 --- a/providers/zenmux/models/x-ai/grok-4.1-fast.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Grok 4.1 Fast" -description = "Fast Grok model for responsive chat, reasoning, and tool-assisted work" -release_date = "2025-11-20" -last_updated = "2025-11-20" -attachment = true -reasoning = true -reasoning_options = [{ type = "toggle" }] -temperature = true -tool_call = true -knowledge = "2025-01-01" -open_weights = false -status = "deprecated" - -[cost] -input = 0.20 -output = 0.50 -cache_read = 0.05 - -[limit] -context = 2000_000 -output = 64_000 - -[modalities] -input = ["text", "image"] -output = ["text"] diff --git a/providers/zenmux/models/x-ai/grok-4.2-fast-non-reasoning.toml b/providers/zenmux/models/x-ai/grok-4.2-fast-non-reasoning.toml index 5fd0f203453..b521181860f 100644 --- a/providers/zenmux/models/x-ai/grok-4.2-fast-non-reasoning.toml +++ b/providers/zenmux/models/x-ai/grok-4.2-fast-non-reasoning.toml @@ -1,22 +1,20 @@ +# https://zenmux.ai/docs/api/openai/openai-list-models.html +base_model = "xai/grok-4.20-0309-non-reasoning" name = "Grok 4.2 Fast Non Reasoning" -description = "Fast Grok model for responsive chat, reasoning, and tool-assisted work" -release_date = "2026-03-20" -last_updated = "2026-03-20" -attachment = true -reasoning = false -temperature = true -tool_call = true -knowledge = "2025-08-31" -open_weights = false [cost] -input = 3.00 -output = 9.00 +input = 2 +output = 6 +cache_read = 0.2 + +[[cost.tiers]] +tier = { type = "context", size = 128_000 } +input = 4 +output = 12 +cache_read = 0.2 [limit] context = 2_000_000 -output = 30_000 [modalities] -input = ["text", "image", "video"] -output = ["text"] +input = ["text", "image"] diff --git a/providers/zenmux/models/x-ai/grok-4.2-fast.toml b/providers/zenmux/models/x-ai/grok-4.2-fast.toml index c768fe47135..fc524864b65 100644 --- a/providers/zenmux/models/x-ai/grok-4.2-fast.toml +++ b/providers/zenmux/models/x-ai/grok-4.2-fast.toml @@ -1,23 +1,25 @@ +# ZenMux's 2026-09-19 page has supports_reasoning=0 and both live OpenAI- and +# Anthropic-compatible entries have capabilities.reasoning=false for this id. +# This route therefore uses the reasoning checkpoint identity but disables the +# reasoning surface as an explicit host delta. +# https://zenmux.ai/docs/api/openai/openai-list-models.html +base_model = "xai/grok-4.20-0309-reasoning" name = "Grok 4.2 Fast" -description = "Fast Grok model for responsive chat, reasoning, and tool-assisted work" -release_date = "2026-03-20" -last_updated = "2026-03-20" -attachment = true -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -knowledge = "2025-08-31" -open_weights = false +reasoning = false [cost] -input = 3.00 -output = 9.00 +input = 2 +output = 6 +cache_read = 0.2 + +[[cost.tiers]] +tier = { type = "context", size = 128_000 } +input = 4 +output = 12 +cache_read = 0.2 [limit] context = 2_000_000 -output = 30_000 [modalities] -input = ["text", "image", "video"] -output = ["text"] +input = ["text", "image"] diff --git a/providers/zenmux/models/x-ai/grok-4.3.toml b/providers/zenmux/models/x-ai/grok-4.3.toml index 455779665fb..ab8ed82e9a7 100644 --- a/providers/zenmux/models/x-ai/grok-4.3.toml +++ b/providers/zenmux/models/x-ai/grok-4.3.toml @@ -1,19 +1,22 @@ +# Effort: reasoning_effort = none|low|medium|high +# https://zenmux.ai/docs/api/openai/openai-list-models.html +# https://zenmux.ai/docs/guide/advanced/reasoning.html base_model = "xai/grok-4.3" -reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high"] [cost] input = 1.25 -output = 2.50 -cache_read = 0.20 -cache_write = 0 +output = 2.5 +cache_read = 0.2 [[cost.tiers]] -tier = { size = 200_000 } -input = 2.50 -output = 5.00 -cache_read = 0.40 -cache_write = 0 +tier = { type = "context", size = 200_000 } +input = 2.5 +output = 5 +cache_read = 0.4 [limit] -context = 1_000_000 output = 1_000_000 diff --git a/providers/zenmux/models/x-ai/grok-4.6.toml b/providers/zenmux/models/x-ai/grok-4.6.toml new file mode 100644 index 00000000000..7b40b61706e --- /dev/null +++ b/providers/zenmux/models/x-ai/grok-4.6.toml @@ -0,0 +1,19 @@ +# Effort: reasoning_effort = low|medium|high|xhigh +# https://zenmux.ai/docs/api/openai/openai-list-models.html +# https://zenmux.ai/docs/guide/advanced/reasoning.html +base_model = "xai/grok-4.6" + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh"] + +[cost] +input = 2 +output = 6 +cache_read = 0.5 + +[[cost.tiers]] +tier = { type = "context", size = 200_000 } +input = 4 +output = 12 +cache_read = 1 diff --git a/providers/zenmux/models/x-ai/grok-4.toml b/providers/zenmux/models/x-ai/grok-4.toml deleted file mode 100644 index 9a3bd9acea0..00000000000 --- a/providers/zenmux/models/x-ai/grok-4.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Grok 4" -description = "Grok model for agentic tool use, reasoning, coding, and live assistance" -release_date = "2025-07-09" -last_updated = "2025-07-09" -attachment = true -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -knowledge = "2025-01-01" -open_weights = false -status = "deprecated" - -[cost] -input = 3.00 -output = 15.00 -cache_read = 0.75 - -[limit] -context = 256_000 -output = 64_000 - -[modalities] -input = ["image", "text"] -output = ["text"] diff --git a/providers/zenmux/models/x-ai/grok-build-0.1.toml b/providers/zenmux/models/x-ai/grok-build-0.1.toml index 59480b618c9..f00530ac65f 100644 --- a/providers/zenmux/models/x-ai/grok-build-0.1.toml +++ b/providers/zenmux/models/x-ai/grok-build-0.1.toml @@ -1,7 +1,13 @@ +# ZenMux's 2026-09-19 page has supports_reasoning=0 and both live OpenAI- and +# Anthropic-compatible entries have capabilities.reasoning=false for this id. +# https://zenmux.ai/docs/api/openai/openai-list-models.html base_model = "xai/grok-build-0.1" -reasoning_options = [] +reasoning = false [cost] -input = 1.00 -output = 2.00 -cache_read = 0.20 +input = 1 +output = 2 +cache_read = 0.2 + +[modalities] +input = ["text", "image"] diff --git a/providers/zenmux/models/x-ai/grok-code-fast-1.toml b/providers/zenmux/models/x-ai/grok-code-fast-1.toml deleted file mode 100644 index 5a692a5e5d9..00000000000 --- a/providers/zenmux/models/x-ai/grok-code-fast-1.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "Grok Code Fast 1" -description = "Fast Grok model for responsive chat, reasoning, and tool-assisted work" -release_date = "2025-08-26" -last_updated = "2025-08-26" -attachment = false -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -knowledge = "2025-01-01" -open_weights = false -status = "deprecated" - -[cost] -input = 0.20 -output = 1.50 -cache_read = 0.02 - -[limit] -context = 256_000 -output = 64_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/zenmux/models/x-ai/grok-imagine-image-2.0.toml b/providers/zenmux/models/x-ai/grok-imagine-image-2.0.toml new file mode 100644 index 00000000000..05abc6d0374 --- /dev/null +++ b/providers/zenmux/models/x-ai/grok-imagine-image-2.0.toml @@ -0,0 +1,7 @@ +# Host context: page and OpenAI list both report 66000 tokens. +# ZenMux pricing is non-token-denominated for this route and is intentionally omitted. +# https://zenmux.ai/docs/api/openai/openai-list-models.html +base_model = "xai/grok-imagine-image-2.0" + +[limit] +context = 66_000 diff --git a/providers/zenmux/models/x-ai/grok-voice-stt-1.0.toml b/providers/zenmux/models/x-ai/grok-voice-stt-1.0.toml new file mode 100644 index 00000000000..c4bf10390e9 --- /dev/null +++ b/providers/zenmux/models/x-ai/grok-voice-stt-1.0.toml @@ -0,0 +1,3 @@ +# ZenMux pricing is non-token-denominated for this route and is intentionally omitted. +# https://zenmux.ai/docs/api/openai/openai-list-models.html +base_model = "xai/grok-voice-stt-1.0" diff --git a/providers/zenmux/models/x-ai/grok-voice-tts-1.0.toml b/providers/zenmux/models/x-ai/grok-voice-tts-1.0.toml new file mode 100644 index 00000000000..27f8f70b699 --- /dev/null +++ b/providers/zenmux/models/x-ai/grok-voice-tts-1.0.toml @@ -0,0 +1,3 @@ +# ZenMux pricing is non-token-denominated for this route and is intentionally omitted. +# https://zenmux.ai/docs/api/openai/openai-list-models.html +base_model = "xai/grok-voice-tts-1.0" diff --git a/providers/zenmux/models/z-ai/glm-4.5-air.toml b/providers/zenmux/models/z-ai/glm-4.5-air.toml index 756ca62b321..3797e830f0e 100644 --- a/providers/zenmux/models/z-ai/glm-4.5-air.toml +++ b/providers/zenmux/models/z-ai/glm-4.5-air.toml @@ -1,24 +1,23 @@ +# Toggle: reasoning.enabled = true|false +# https://zenmux.ai/docs/api/openai/openai-list-models.html +# https://zenmux.ai/docs/guide/advanced/reasoning.html +base_model = "zhipuai/glm-4.5-air" name = "GLM 4.5 Air" -description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -release_date = "2025-07-25" -last_updated = "2025-07-25" -attachment = false -reasoning = true -reasoning_options = [{ type = "toggle" }] -temperature = true -tool_call = true -knowledge = "2025-01-01" -open_weights = false + +[[reasoning_options]] +type = "toggle" [cost] -input = 0.11 -output = 0.56 -cache_read = 0.02 +input = 0.1165 +output = 0.2911 +cache_read = 0.0233 + +[[cost.tiers]] +tier = { type = "context", size = 32_000 } +input = 0.1747 +output = 1.1645 +cache_read = 0.0349 [limit] context = 128_000 -output = 64_000 - -[modalities] -input = ["text"] -output = ["text"] +output = 96_000 diff --git a/providers/zenmux/models/z-ai/glm-4.5.toml b/providers/zenmux/models/z-ai/glm-4.5.toml index b2f7197b924..fffd19cacc1 100644 --- a/providers/zenmux/models/z-ai/glm-4.5.toml +++ b/providers/zenmux/models/z-ai/glm-4.5.toml @@ -1,24 +1,24 @@ +# Toggle: reasoning.enabled = true|false +# https://zenmux.ai/docs/api/openai/openai-list-models.html +# https://zenmux.ai/docs/guide/advanced/reasoning.html +base_model = "zhipuai/glm-4.5" name = "GLM 4.5" -description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -release_date = "2025-07-25" -last_updated = "2025-07-25" -attachment = false -reasoning = true -reasoning_options = [{ type = "toggle" }] -temperature = true -tool_call = true -knowledge = "2025-01-01" -open_weights = false +structured_output = true + +[[reasoning_options]] +type = "toggle" [cost] -input = 0.35 -output = 1.54 -cache_read = 0.07 +input = 0.2911 +output = 1.1645 +cache_read = 0.0582 + +[[cost.tiers]] +tier = { type = "context", size = 32_000 } +input = 0.5823 +output = 2.3291 +cache_read = 0.1165 [limit] context = 128_000 -output = 64_000 - -[modalities] -input = ["text"] -output = ["text"] +output = 96_000 diff --git a/providers/zenmux/models/z-ai/glm-4.6.toml b/providers/zenmux/models/z-ai/glm-4.6.toml index e5f9d2ca1a4..d4d4456a446 100644 --- a/providers/zenmux/models/z-ai/glm-4.6.toml +++ b/providers/zenmux/models/z-ai/glm-4.6.toml @@ -1,24 +1,24 @@ +# Toggle: reasoning.enabled = true|false +# https://zenmux.ai/docs/api/openai/openai-list-models.html +# https://zenmux.ai/docs/guide/advanced/reasoning.html +base_model = "zhipuai/glm-4.6" name = "GLM 4.6" -description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -release_date = "2025-09-30" -last_updated = "2025-09-30" -attachment = false -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -knowledge = "2025-01-01" -open_weights = false +structured_output = true + +[[reasoning_options]] +type = "toggle" [cost] -input = 0.35 -output = 1.54 -cache_read = 0.07 +input = 0.2911 +output = 1.1645 +cache_read = 0.0582 + +[[cost.tiers]] +tier = { type = "context", size = 32_000 } +input = 0.5823 +output = 2.3291 +cache_read = 0.1165 [limit] context = 200_000 -output = 64_000 - -[modalities] -input = ["text"] -output = ["text"] +output = 128_000 diff --git a/providers/zenmux/models/z-ai/glm-4.6v-flash-free.toml b/providers/zenmux/models/z-ai/glm-4.6v-flash-free.toml index 33b4db29d44..18b34502274 100644 --- a/providers/zenmux/models/z-ai/glm-4.6v-flash-free.toml +++ b/providers/zenmux/models/z-ai/glm-4.6v-flash-free.toml @@ -1,23 +1,27 @@ +# Toggle: reasoning.enabled = true|false +# Host modalities: the live free route includes file/PDF input; the paid route omits it. +# https://zenmux.ai/docs/api/openai/openai-list-models.html +# https://zenmux.ai/docs/guide/advanced/reasoning.html +base_model = "zhipuai/glm-4.6v-flash" name = "GLM 4.6V Flash (Free)" -description = "GLM vision model for visual reasoning, documents, and multimodal agents" -release_date = "2025-12-08" -last_updated = "2025-12-08" -attachment = true -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -knowledge = "2025-01-01" -open_weights = false + +[[reasoning_options]] +type = "toggle" [cost] -input = 0.00 -output = 0.00 +input = 0 +output = 0 +cache_read = 0 + +[[cost.tiers]] +tier = { type = "context", size = 32_000 } +input = 0 +output = 0 +cache_read = 0 [limit] context = 200_000 -output = 64_000 +output = 128_000 [modalities] -input = ["text", "image", "video"] -output = ["text"] +input = ["text", "image", "video", "pdf"] diff --git a/providers/zenmux/models/z-ai/glm-4.6v-flash.toml b/providers/zenmux/models/z-ai/glm-4.6v-flash.toml index 00a8fa34b67..6c53afd51b0 100644 --- a/providers/zenmux/models/z-ai/glm-4.6v-flash.toml +++ b/providers/zenmux/models/z-ai/glm-4.6v-flash.toml @@ -1,24 +1,24 @@ +# Toggle: reasoning.enabled = true|false +# Host naming: the 2026-09-19 live route z-ai/glm-4.6v-flash is labeled "GLM 4.6V FlashX". +# https://zenmux.ai/docs/api/openai/openai-list-models.html +# https://zenmux.ai/docs/guide/advanced/reasoning.html +base_model = "zhipuai/glm-4.6v-flash" name = "GLM 4.6V FlashX" -description = "GLM vision model for visual reasoning, documents, and multimodal agents" -release_date = "2025-12-08" -last_updated = "2025-12-08" -attachment = true -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -knowledge = "2025-01-01" -open_weights = false + +[[reasoning_options]] +type = "toggle" [cost] -input = 0.02 -output = 0.21 -cache_read = 0.0043 +input = 0.0218 +output = 0.2184 +cache_read = 0.0044 + +[[cost.tiers]] +tier = { type = "context", size = 32_000 } +input = 0.0437 +output = 0.4367 +cache_read = 0.0044 [limit] context = 200_000 -output = 64_000 - -[modalities] -input = ["text", "image", "video"] -output = ["text"] +output = 128_000 diff --git a/providers/zenmux/models/z-ai/glm-4.6v.toml b/providers/zenmux/models/z-ai/glm-4.6v.toml index 73690ef9e4f..e8c345954c8 100644 --- a/providers/zenmux/models/z-ai/glm-4.6v.toml +++ b/providers/zenmux/models/z-ai/glm-4.6v.toml @@ -1,24 +1,23 @@ +# Toggle: reasoning.enabled = true|false +# https://zenmux.ai/docs/api/openai/openai-list-models.html +# https://zenmux.ai/docs/guide/advanced/reasoning.html +base_model = "zhipuai/glm-4.6v" name = "GLM 4.6V" -description = "GLM vision model for visual reasoning, documents, and multimodal agents" -release_date = "2025-12-08" -last_updated = "2025-12-08" -attachment = true -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -knowledge = "2025-01-01" -open_weights = false + +[[reasoning_options]] +type = "toggle" [cost] -input = 0.14 -output = 0.42 -cache_read = 0.03 +input = 0.1456 +output = 0.4367 +cache_read = 0.0291 + +[[cost.tiers]] +tier = { type = "context", size = 32_000 } +input = 0.2911 +output = 0.8734 +cache_read = 0.0582 [limit] context = 200_000 -output = 64_000 - -[modalities] -input = ["text", "image", "video"] -output = ["text"] +output = 128_000 diff --git a/providers/zenmux/models/z-ai/glm-4.7-flash-free.toml b/providers/zenmux/models/z-ai/glm-4.7-flash-free.toml index b2ddbce96ec..df0e92ac02a 100644 --- a/providers/zenmux/models/z-ai/glm-4.7-flash-free.toml +++ b/providers/zenmux/models/z-ai/glm-4.7-flash-free.toml @@ -1,26 +1,19 @@ +# Toggle: reasoning.enabled = true|false +# https://zenmux.ai/docs/api/openai/openai-list-models.html +# https://zenmux.ai/docs/guide/advanced/reasoning.html +base_model = "zhipuai/glm-4.7-flash" name = "GLM 4.7 Flash (Free)" -description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -release_date = "2026-01-19" -last_updated = "2026-01-19" -attachment = false -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -knowledge = "2025-01-01" -open_weights = false - -[cost] -input = 0.00 -output = 0.00 - -[limit] -context = 200_000 -output = 64_000 [interleaved] field = "reasoning_content" -[modalities] -input = ["text"] -output = ["text"] +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0 +output = 0 +cache_read = 0 + +[limit] +output = 128_000 diff --git a/providers/zenmux/models/z-ai/glm-4.7-flashx.toml b/providers/zenmux/models/z-ai/glm-4.7-flashx.toml index eba199ff720..b131a75aa2a 100644 --- a/providers/zenmux/models/z-ai/glm-4.7-flashx.toml +++ b/providers/zenmux/models/z-ai/glm-4.7-flashx.toml @@ -1,27 +1,19 @@ +# Toggle: reasoning.enabled = true|false +# https://zenmux.ai/docs/api/openai/openai-list-models.html +# https://zenmux.ai/docs/guide/advanced/reasoning.html +base_model = "zhipuai/glm-4.7-flashx" name = "GLM 4.7 FlashX" -description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -release_date = "2026-01-19" -last_updated = "2026-01-19" -attachment = false -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -knowledge = "2025-01-01" -open_weights = false - -[cost] -input = 0.07 -output = 0.42 -cache_read = 0.01 - -[limit] -context = 200_000 -output = 64_000 [interleaved] field = "reasoning_content" -[modalities] -input = ["text"] -output = ["text"] +[[reasoning_options]] +type = "toggle" + +[cost] +input = 0.0728 +output = 0.4367 +cache_read = 0.0146 + +[limit] +output = 128_000 diff --git a/providers/zenmux/models/z-ai/glm-4.7.toml b/providers/zenmux/models/z-ai/glm-4.7.toml index 266005dda7e..c32d76030a6 100644 --- a/providers/zenmux/models/z-ai/glm-4.7.toml +++ b/providers/zenmux/models/z-ai/glm-4.7.toml @@ -1,27 +1,27 @@ +# Toggle: reasoning.enabled = true|false +# https://zenmux.ai/docs/api/openai/openai-list-models.html +# https://zenmux.ai/docs/guide/advanced/reasoning.html +base_model = "zhipuai/glm-4.7" name = "GLM 4.7" -description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -release_date = "2025-12-23" -last_updated = "2025-12-23" -attachment = false -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -knowledge = "2025-01-01" -open_weights = false +structured_output = true + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "toggle" [cost] -input = 0.28 -output = 1.14 -cache_read = 0.06 +input = 0.2911 +output = 1.1645 +cache_read = 0.0582 + +[[cost.tiers]] +tier = { type = "context", size = 32_000 } +input = 0.5823 +output = 2.3291 +cache_read = 0.1165 [limit] context = 200_000 -output = 64_000 - -[interleaved] -field = "reasoning_content" - -[modalities] -input = ["text"] -output = ["text"] +output = 128_000 diff --git a/providers/zenmux/models/z-ai/glm-5-turbo.toml b/providers/zenmux/models/z-ai/glm-5-turbo.toml index ef6438e58ac..ecc0fbae95d 100644 --- a/providers/zenmux/models/z-ai/glm-5-turbo.toml +++ b/providers/zenmux/models/z-ai/glm-5-turbo.toml @@ -1,23 +1,25 @@ +# Toggle: reasoning.enabled = true|false +# https://zenmux.ai/docs/api/openai/openai-list-models.html +# https://zenmux.ai/docs/guide/advanced/reasoning.html +base_model = "zhipuai/glm-5-turbo" name = "GLM 5 Turbo" -description = "Efficient GLM model for fast reasoning, coding, and agent workflows" -release_date = "2026-03-20" -last_updated = "2026-03-20" -attachment = true -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -knowledge = "2025-01-01" -open_weights = false + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "toggle" [cost] -input = 0.88 -output = 3.48 +input = 0.73 +output = 3.19 +cache_read = 0.174 + +[[cost.tiers]] +tier = { type = "context", size = 32_000 } +input = 1.02 +output = 3.77 +cache_read = 0.261 [limit] -context = 200_000 output = 128_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/zenmux/models/z-ai/glm-5.1.toml b/providers/zenmux/models/z-ai/glm-5.1.toml index 3b4c0bec049..3a64eedea4a 100644 --- a/providers/zenmux/models/z-ai/glm-5.1.toml +++ b/providers/zenmux/models/z-ai/glm-5.1.toml @@ -1,27 +1,25 @@ -name = "GLM-5.1" -description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -release_date = "2026-04-03" -last_updated = "2026-04-03" -attachment = false -reasoning = true -reasoning_options = [{ type = "toggle" }] -temperature = true -tool_call = true -structured_output = true -open_weights = false +# Toggle: reasoning.enabled = true|false +# https://zenmux.ai/docs/api/openai/openai-list-models.html +# https://zenmux.ai/docs/guide/advanced/reasoning.html +base_model = "zhipuai/glm-5.1" +name = "GLM 5.1" [interleaved] field = "reasoning_content" +[[reasoning_options]] +type = "toggle" + [cost] input = 0.8781 output = 3.5126 cache_read = 0.1903 -[limit] -context = 200000 -output = 131072 +[[cost.tiers]] +tier = { type = "context", size = 32_000 } +input = 1.1709 +output = 4.098 +cache_read = 0.2927 -[modalities] -input = ["text"] -output = ["text"] +[limit] +output = 128_000 diff --git a/providers/zenmux/models/z-ai/glm-5.2-free.toml b/providers/zenmux/models/z-ai/glm-5.2-free.toml deleted file mode 100644 index 561b079445e..00000000000 --- a/providers/zenmux/models/z-ai/glm-5.2-free.toml +++ /dev/null @@ -1,11 +0,0 @@ -base_model = "zhipuai/glm-5.2" -name = "GLM 5.2 (Free)" - -[cost] -input = 0 -output = 0 -cache_read = 0 - -[[reasoning_options]] -type = "effort" -values = ["high", "max"] diff --git a/providers/zenmux/models/z-ai/glm-5.2.toml b/providers/zenmux/models/z-ai/glm-5.2.toml index 7d3e1a5ebf4..09a38c80a35 100644 --- a/providers/zenmux/models/z-ai/glm-5.2.toml +++ b/providers/zenmux/models/z-ai/glm-5.2.toml @@ -1,11 +1,20 @@ +# Effort: reasoning_effort = high|max +# https://zenmux.ai/docs/api/openai/openai-list-models.html +# https://zenmux.ai/docs/guide/advanced/reasoning.html base_model = "zhipuai/glm-5.2" name = "GLM 5.2" -[cost] -input = 1.40 -output = 4.50 -cache_read = 0.26 +[interleaved] +field = "reasoning_content" [[reasoning_options]] type = "effort" values = ["high", "max"] + +[cost] +input = 0.98 +output = 3.08 +cache_read = 0.182 + +[limit] +output = 128_000 diff --git a/providers/zenmux/models/z-ai/glm-5.3-flash.toml b/providers/zenmux/models/z-ai/glm-5.3-flash.toml new file mode 100644 index 00000000000..3bd77e65bd9 --- /dev/null +++ b/providers/zenmux/models/z-ai/glm-5.3-flash.toml @@ -0,0 +1,20 @@ +# Effort: reasoning_effort = low|high|max +# https://zenmux.ai/docs/api/openai/openai-list-models.html +# https://zenmux.ai/docs/guide/advanced/reasoning.html +base_model = "zhipuai/glm-5.3-flash" +name = "GLM 5.3 Flash" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.15 +output = 0.5 +cache_read = 0.03 + +[limit] +output = 128_000 diff --git a/providers/zenmux/models/z-ai/glm-5.3-flashx.toml b/providers/zenmux/models/z-ai/glm-5.3-flashx.toml new file mode 100644 index 00000000000..50ad6eb5ea5 --- /dev/null +++ b/providers/zenmux/models/z-ai/glm-5.3-flashx.toml @@ -0,0 +1,20 @@ +# Effort: reasoning_effort = low|high|max +# https://zenmux.ai/docs/api/openai/openai-list-models.html +# https://zenmux.ai/docs/guide/advanced/reasoning.html +base_model = "zhipuai/glm-5.3-flash" +name = "GLM 5.3 FlashX" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 0.375 +output = 1.25 +cache_read = 0.075 + +[limit] +output = 128_000 diff --git a/providers/zenmux/models/z-ai/glm-5.3.toml b/providers/zenmux/models/z-ai/glm-5.3.toml new file mode 100644 index 00000000000..18b45ff89ad --- /dev/null +++ b/providers/zenmux/models/z-ai/glm-5.3.toml @@ -0,0 +1,20 @@ +# Effort: reasoning_effort = low|high|max +# https://zenmux.ai/docs/api/openai/openai-list-models.html +# https://zenmux.ai/docs/guide/advanced/reasoning.html +base_model = "zhipuai/glm-5.3" +name = "GLM 5.3" + +[interleaved] +field = "reasoning_content" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[cost] +input = 1.4 +output = 4.4 +cache_read = 0.26 + +[limit] +output = 128_000 diff --git a/providers/zenmux/models/z-ai/glm-5.toml b/providers/zenmux/models/z-ai/glm-5.toml index 3be16bf629a..f2ee297f1d0 100644 --- a/providers/zenmux/models/z-ai/glm-5.toml +++ b/providers/zenmux/models/z-ai/glm-5.toml @@ -1,27 +1,27 @@ +# Toggle: reasoning.enabled = true|false +# https://zenmux.ai/docs/api/openai/openai-list-models.html +# https://zenmux.ai/docs/guide/advanced/reasoning.html +base_model = "zhipuai/glm-5" name = "GLM 5" -description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -release_date = "2026-02-12" -last_updated = "2026-02-12" -attachment = false -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -knowledge = "2025-01-01" -open_weights = true +structured_output = true [interleaved] field = "reasoning_content" +[[reasoning_options]] +type = "toggle" + [cost] input = 0.58 output = 2.6 cache_read = 0.14 +[[cost.tiers]] +tier = { type = "context", size = 32_000 } +input = 0.87 +output = 3.18 +cache_read = 0.22 + [limit] context = 200_000 output = 128_000 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/zenmux/models/z-ai/glm-5v-turbo.toml b/providers/zenmux/models/z-ai/glm-5v-turbo.toml index 00fc2f71901..0e75e57e194 100644 --- a/providers/zenmux/models/z-ai/glm-5v-turbo.toml +++ b/providers/zenmux/models/z-ai/glm-5v-turbo.toml @@ -1,26 +1,25 @@ +# Toggle: reasoning.enabled = true|false +# https://zenmux.ai/docs/api/openai/openai-list-models.html +# https://zenmux.ai/docs/guide/advanced/reasoning.html +base_model = "zhipuai/glm-5v-turbo" name = "GLM 5V Turbo" -description = "GLM vision model for visual reasoning, documents, and multimodal agents" -release_date = "2026-04-01" -last_updated = "2026-04-01" -attachment = true -reasoning = true -reasoning_options = [] -temperature = true -tool_call = true -open_weights = false [interleaved] field = "reasoning_content" +[[reasoning_options]] +type = "toggle" + [cost] input = 0.726 output = 3.1946 cache_read = 0.1743 +[[cost.tiers]] +tier = { type = "context", size = 32_000 } +input = 1.0165 +output = 3.7754 +cache_read = 0.2614 + [limit] -context = 200_000 output = 128_000 - -[modalities] -input = ["text", "image", "video", "pdf"] -output = ["text"] diff --git a/providers/zenmux/models/z-ai/glm-image.toml b/providers/zenmux/models/z-ai/glm-image.toml new file mode 100644 index 00000000000..79c6282b394 --- /dev/null +++ b/providers/zenmux/models/z-ai/glm-image.toml @@ -0,0 +1,9 @@ +# ZenMux's 2026-09-19 page and live Google-compatible list expose text input only; +# image editing exists in the lab model but is unavailable on this hosted route. +# ZenMux pricing is non-token-denominated for this route and is intentionally omitted. +# https://zenmux.ai/docs/api/openai/openai-list-models.html +base_model = "zhipuai/glm-image" +attachment = false + +[modalities] +input = ["text"] diff --git a/providers/zhipuai-coding-plan/models/glm-4.5-air.toml b/providers/zhipuai-coding-plan/models/glm-4.5-air.toml deleted file mode 120000 index 18c5af5fb47..00000000000 --- a/providers/zhipuai-coding-plan/models/glm-4.5-air.toml +++ /dev/null @@ -1 +0,0 @@ -../../zai-coding-plan/models/glm-4.5-air.toml \ No newline at end of file diff --git a/providers/zhipuai-coding-plan/models/glm-4.7.toml b/providers/zhipuai-coding-plan/models/glm-4.7.toml deleted file mode 120000 index aa6a452eb32..00000000000 --- a/providers/zhipuai-coding-plan/models/glm-4.7.toml +++ /dev/null @@ -1 +0,0 @@ -../../zai-coding-plan/models/glm-4.7.toml \ No newline at end of file diff --git a/providers/zhipuai-coding-plan/models/glm-5-turbo.toml b/providers/zhipuai-coding-plan/models/glm-5-turbo.toml deleted file mode 120000 index ad28ebce0c4..00000000000 --- a/providers/zhipuai-coding-plan/models/glm-5-turbo.toml +++ /dev/null @@ -1 +0,0 @@ -../../zai-coding-plan/models/glm-5-turbo.toml \ No newline at end of file diff --git a/providers/zhipuai-coding-plan/models/glm-5.1.toml b/providers/zhipuai-coding-plan/models/glm-5.1.toml deleted file mode 100644 index 8c55069b0a1..00000000000 --- a/providers/zhipuai-coding-plan/models/glm-5.1.toml +++ /dev/null @@ -1,31 +0,0 @@ -name = "GLM-5.1" -description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering" -family = "glm" -release_date = "2026-03-27" -last_updated = "2026-03-27" -attachment = false -reasoning = true -temperature = true -tool_call = true -structured_output = true -open_weights = false - -[[reasoning_options]] -type = "toggle" - -[interleaved] -field = "reasoning_content" - -[cost] -input = 0 -output = 0 -cache_read = 0 -cache_write = 0 - -[limit] -context = 200000 -output = 131072 - -[modalities] -input = ["text"] -output = ["text"] diff --git a/providers/zhipuai-coding-plan/models/glm-5.2-highspeed.toml b/providers/zhipuai-coding-plan/models/glm-5.2-highspeed.toml deleted file mode 120000 index a4242b49c96..00000000000 --- a/providers/zhipuai-coding-plan/models/glm-5.2-highspeed.toml +++ /dev/null @@ -1 +0,0 @@ -../../zai-coding-plan/models/glm-5.2-highspeed.toml \ No newline at end of file diff --git a/providers/zhipuai-coding-plan/models/glm-5.2.toml b/providers/zhipuai-coding-plan/models/glm-5.2.toml deleted file mode 120000 index 539459c44b6..00000000000 --- a/providers/zhipuai-coding-plan/models/glm-5.2.toml +++ /dev/null @@ -1 +0,0 @@ -../../zai-coding-plan/models/glm-5.2.toml \ No newline at end of file diff --git a/providers/zhipuai-coding-plan/models/glm-5.3-highspeed.toml b/providers/zhipuai-coding-plan/models/glm-5.3-highspeed.toml index 2f36aacb151..90c28cdec13 100644 --- a/providers/zhipuai-coding-plan/models/glm-5.3-highspeed.toml +++ b/providers/zhipuai-coding-plan/models/glm-5.3-highspeed.toml @@ -1,8 +1,12 @@ +# GLM-5.3 Highspeed is tier-gated on the coding endpoint: served as-is on +# eligible (higher) plan tiers, 403 "not available on plan" on lower tiers +# (#7331 tested a single lower tier). First-hand verified served via +# open.bigmodel.cn/api/coding/paas/v4 on 2026-09-17. +# https://docs.bigmodel.cn/cn/coding-plan/latest-model base_model = "zhipuai/glm-5.3" name = "GLM-5.3 Highspeed" # Effort levels mirror the base GLM-5.3 (low, high, max). -# https://docs.bigmodel.cn/cn/coding-plan/latest-model [[reasoning_options]] type = "effort" values = ["low", "high", "max"] diff --git a/providers/zhipuai-coding-plan/models/glm-5v-turbo.toml b/providers/zhipuai-coding-plan/models/glm-5v-turbo.toml deleted file mode 100644 index a451c68fd2f..00000000000 --- a/providers/zhipuai-coding-plan/models/glm-5v-turbo.toml +++ /dev/null @@ -1,30 +0,0 @@ -name = "GLM-5V-Turbo" -description = "GLM vision model for visual reasoning, documents, and multimodal agents" -family = "glm" -release_date = "2026-04-01" -last_updated = "2026-04-01" -attachment = true -reasoning = true -temperature = true -tool_call = true -open_weights = false - -[[reasoning_options]] -type = "toggle" - -[interleaved] -field = "reasoning_content" - -[cost] -input = 0 -output = 0 -cache_read = 0 -cache_write = 0 - -[limit] -context = 200000 -output = 131072 - -[modalities] -input = ["text", "image", "video", "pdf"] -output = ["text"] diff --git a/providers/zhipuai/models/glm-5.3-flash.toml b/providers/zhipuai/models/glm-5.3-flash.toml index 84efd9a9cef..d2ff44820e7 100644 --- a/providers/zhipuai/models/glm-5.3-flash.toml +++ b/providers/zhipuai/models/glm-5.3-flash.toml @@ -1,8 +1,7 @@ # GLM-5.3-Flash always reasons (thinking cannot be disabled); text params # match GLM-5.3 — effort low|high|max with default max. # https://docs.bigmodel.cn/cn/guide/models/vlm/glm-5.3-flash -# Cost: https://docs.z.ai/guides/overview/pricing (accessed 2026-08-26) -# GLM-5.3-Flash 50% promo ends 2026-09-09 24:00 UTC+8; list $0.15/$0.03/$0.50. +# Pricing: https://docs.z.ai/guides/overview/pricing (accessed 2026-09-19) base_model = "zhipuai/glm-5.3-flash" [[reasoning_options]] @@ -13,7 +12,7 @@ values = ["low", "high", "max"] field = "reasoning_content" [cost] -input = 0.075 -output = 0.25 -cache_read = 0.015 +input = 0.15 +output = 0.50 +cache_read = 0.03 cache_write = 0 diff --git a/providers/zhipuai/models/glm-5.3-flashx.toml b/providers/zhipuai/models/glm-5.3-flashx.toml new file mode 100644 index 00000000000..851a6969e41 --- /dev/null +++ b/providers/zhipuai/models/glm-5.3-flashx.toml @@ -0,0 +1,21 @@ +# GLM-5.3-FlashX is the high-speed serving option for GLM-5.3-Flash. +# https://docs.bigmodel.cn/cn/guide/models/vlm/glm-5.3-flash +# Pricing: https://docs.z.ai/guides/overview/pricing (accessed 2026-09-19) +base_model = "zhipuai/glm-5.3-flash" +name = "GLM-5.3-FlashX" +description = "High-speed GLM-5.3-Flash serving option for coding and agent workflows" +release_date = "2026-09-18" +last_updated = "2026-09-18" + +[[reasoning_options]] +type = "effort" +values = ["low", "high", "max"] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.37 +output = 1.25 +cache_read = 0.075 +cache_write = 0 diff --git a/sync.md b/sync.md index 8e11926ea23..f2bb9a5130e 100644 --- a/sync.md +++ b/sync.md @@ -9,8 +9,10 @@ The grouped sync targets are available for local convenience, but CI syncs each ## Commands - `bun models:sync aggregators` syncs every provider in the `aggregators` group. +- `bun models:sync aiand` syncs only ai&. - `bun models:sync openrouter` syncs only OpenRouter. - `bun models:sync cloudflare-workers-ai` syncs only Cloudflare Workers AI. +- `bun models:sync cloudflare-ai-gateway` syncs only Cloudflare AI Gateway's proxied catalog. - `bun models:sync cloudflare` syncs the Cloudflare sync group. - `bun models:sync direct` syncs every provider in the `direct` group. - `bun models:sync google` syncs only Google. @@ -19,6 +21,8 @@ The grouped sync targets are available for local convenience, but CI syncs each - `bun models:sync kilo` syncs only Kilo. - `bun models:sync merge-gateway` syncs only Merge Gateway. - `bun models:sync openai` syncs only OpenAI catalog availability. +- `bun models:sync ollama-cloud` syncs Ollama Cloud catalog availability. +- `bun models:sync github-copilot` syncs only GitHub Copilot pricing. - `bun models:sync tinfoil` syncs only Tinfoil. - `bun models:sync aggregators --dry-run` prints changes without writing model files. - `bun models:sync aggregators --new-only` creates new model files but skips updates and removals. @@ -43,6 +47,7 @@ Sync runs also write `.sync/model-sync-report.md` for the automation workflow PR - Removes existing files that are no longer present in the desired synced set. - Writes `.sync/model-sync-report.md` for GitHub Actions. - When `skipCreates` is set and issue opens are enabled, opens one deduped GitHub issue per remote model missing from the local catalog (via `gh`). +- When a provider selectively skips only some models, `missingModelID` can preserve existing metadata and mark those skips for the same deduped issue flow without disabling safe automatic creates. Because the runner removes files missing from the desired set, a provider module should only skip source models when deleting existing local files for those skipped IDs is intentional. @@ -56,12 +61,18 @@ Providers that cannot safely auto-create TOMLs set `skipCreates: true`. In GitHu 4. Dispatches the Issue Fixer explicitly so issues created with `GITHUB_TOKEN` can still produce PRs 5. If listing fails, creates nothing (fail closed) +Every six hours, a recovery workflow checks the oldest open issues with all three automation labels. It redispatches up to three issues that are at least one hour old and have no closing pull request, so a missed or failed Issue Fixer run does not leave them stranded. The one-hour delay keeps the recovery run from racing the initial dispatch. + +Providers that can auto-create most models may instead return an ID from `missingModelID` only for `translateModel` skips that need manual metadata. The runner preserves an existing local entry for that ID while the issue is handled. Intentional skips return `undefined` and do not open issues. + Requires `GH_TOKEN` on the sync workflow step. Local runs are notice-only unless `--open-issues`. Use `--no-issues` / `--dry-run` to skip creates. Each newly opened issue explicitly dispatches the issue-fixer workflow so an agent can research the missing metadata and open a model PR. The first Actions run may open a batch of issues per provider, including remote IDs the catalog intentionally omits (e.g. OpenAI whisper/tts/moderation surfaces, dated snapshots). This one-time volume is accepted by design: close unwanted issues once and the closed-title dedupe suppresses them permanently. If the dedupe list window (1000 labeled issues per provider) ever fills, the sync fails closed and creates nothing rather than risk duplicates. Pioneer and Ofox track remote-only chat models as missing-model issues. Their APIs are not authoritative enough to create complete TOMLs directly, so the issue-fixer agent researches the missing canonical and provider-specific metadata before opening a PR. +Ollama Cloud tracks every remote-only ID from its public `/v1/models` endpoint as a missing-model issue. Existing provider TOMLs and entries absent from the endpoint are preserved because the inventory does not provide enough metadata to author complete entries or determine removals safely. + OpenAI also sets `trackMissingModels: false`: `/v1/models` is scoped to the automation account and mixes public models with legacy, internal experiment, dated snapshot, and non-catalog IDs without lifecycle metadata. Existing OpenAI TOMLs are still preserved by the availability sync. Google sets `trackMissingModels: false`: `/v1beta/models` does not expose lifecycle metadata and can retain shut-down models, superseded snapshots, moving aliases, and EAP IDs. Existing Google TOMLs are still updated from API-authoritative fields. @@ -139,6 +150,16 @@ CI automatically picks up providers registered in `providers` in `packages/core/ Actions are pinned by commit SHA. Keep new workflow actions pinned the same way. +## Eden AI Notes + +- Source endpoint: `https://api.edenai.run/v3/models`; no authentication required. +- Latest aliases (`alias_of` plus an ID ending in `-latest`) get a distinct display name such as `Claude Fable Latest (Claude Fable 5.1)` so they do not collide with the versioned target in UIs that key on `name`. Case-only `alias_of` duplicates are not treated as latest aliases. +- Extra labels (current target, host, region) share one parenthetical, e.g. `Gemini Flash Latest (Gemini 3.8 Flash, Vertex AI)` and `GPT OSS 120B (Deep Infra)`. The lab's own API keeps the unsuffixed canonical name; other hosts (Vertex AI, Deep Infra, Groq, Together AI, …) are named. +- Reasoning effort options are derived from the lab's provider entry or OpenRouter. A toggle-only or budget-only control is not an effort list; do not invent effort levels. +- When the effort mapper cannot resolve controls, preserve the existing route's authored `reasoning_options` while syncing other authoritative fields. Do not replace authored toggle, effort, or budget controls with `[]`. +- New reasoning models with neither a resolved mapping nor authored controls remain skipped for manual authoring. No empty placeholder is generated, so the normal auto-merge policy remains unchanged; legitimate always-on `[]` entries are not blanket-blocked. +- Intentional route deduplication and removal of IDs absent from the upstream catalog are unchanged. + ## CrossModel Notes CrossModel is implemented in `packages/core/src/sync/providers/crossmodel.ts`. @@ -193,7 +214,16 @@ Cloudflare Workers AI is implemented in `packages/core/src/sync/providers/cloudf - Use a dedicated token scoped to Workers AI read access so sync automation does not share deploy credentials. - The endpoint is parsed as Cloudflare's OpenRouter-like Workers AI metadata. - Model IDs map directly to TOML paths under `providers/cloudflare-workers-ai/models`. -- This sync target does not manage `providers/cloudflare-ai-gateway`, because the AI Gateway `/compat/models` endpoint does not support `format=openrouter` and does not provide enough model metadata for authoritative catalog sync. +- This target only manages Workers AI; the separate Cloudflare AI Gateway target handles proxied third-party models. + +## Cloudflare AI Gateway Notes + +- Cloudflare AI Gateway is implemented in `packages/core/src/sync/providers/cloudflare-ai-gateway.ts`. +- Source endpoints: `GET /accounts/{id}/ai/catalog/models` for model availability, context limits, and pricing, plus `GET /accounts/{id}/ai/catalog/models/{model}/schema` for reasoning controls exposed by compatible schemas. +- Required auth: `CLOUDFLARE_ACCOUNT_ID` and `CLOUDFLARE_API_TOKEN`, or the production-token aliases documented in the provider README for local runs. The hourly workflow uses the canonical secret names. +- The sync manages proxied third-party text-generation models only. Workers AI `@cf/...` models remain under `providers/cloudflare-workers-ai`. +- `providers/cloudflare-ai-gateway/curation.toml` supplies base-model mappings, live-tested reasoning controls, structured-output support, limit overrides, and intentional skips that the catalog cannot express authoritatively. +- New catalog entries without canonical lab metadata or required reasoning controls fail closed instead of generating incomplete TOMLs. ## Google Notes @@ -207,6 +237,16 @@ Google is implemented in `packages/core/src/sync/providers/google.ts`. - New Google API models are not created automatically (`skipCreates`) and do not open missing-model issues because the endpoint is not lifecycle-authoritative. - Missing-model tracking is limited to recognizable public model families; opaque API codenames such as `ajax`, `perseus`, and `thorin` are ignored. +## GitHub Copilot Notes + +GitHub Copilot is implemented in `packages/core/src/sync/providers/github-copilot.ts`. + +- Source: `https://raw.githubusercontent.com/github/docs/main/data/tables/copilot/models-and-pricing.yml` +- The YML contains only token rates, so the sync only updates `[cost]`: `input`, `cached_input` (as `cache_read`), `cache_write`, `output`, and long-context rows as `cost.tiers`. +- Display names are converted to file IDs, with minimal special case logic to match existing model entries. +- Unmatched rows open missing-model issues, and local entries missing from the source are kept. +- When removing a fully retired Copilot model, add its pricing-table slug to `IGNORED_ROWS` so stale pricing rows cannot trigger translation or missing-model issues. Models still served to some subscribers (such as Sonnet 4.6 on annual plans) remain eligible. + ## xAI Notes xAI is implemented in `packages/core/src/sync/providers/xai.ts`. @@ -222,8 +262,9 @@ xAI is implemented in `packages/core/src/sync/providers/xai.ts`. - Tinfoil is implemented in `packages/core/src/sync/providers/tinfoil.ts`. - Source endpoint: `https://inference.tinfoil.sh/v1/models`. - No authentication is required; the catalog is public. -- Existing Tinfoil models are updated from API-authoritative input, output, cached-input pricing, context windows, and catalog availability. +- Existing Tinfoil models are updated from API-authoritative input, output, cached-input pricing, context windows, reasoning capability, and catalog availability. - Provider-specific metadata that the endpoint does not expose, including exact modalities, output limits, reasoning controls, and lifecycle status, remains hand-authored. +- Reasoning controls are preserved for reasoners and removed when the API reports `reasoning: false`. A reasoner without authored controls fails sync for manual review rather than inventing an empty control set. - New token-priced chat, safety, and embedding models are not created automatically (`skipCreates`); each missing ID opens a deduped GitHub issue for hand-authored metadata. - Per-request tool, TTS, transcription, realtime, and document-processing services are ignored because their pricing cannot be represented by the token-cost schema. @@ -235,6 +276,15 @@ xAI is implemented in `packages/core/src/sync/providers/xai.ts`. - The endpoint is used only to monitor catalog availability. Existing TOMLs are preserved byte-for-byte, including models absent from the response, because model access can be scoped to the API project. - Fine-tuned and customer-owned models are excluded. Unknown first-party models are ignored because the endpoint does not provide enough lifecycle or visibility metadata to distinguish public catalog additions. +## Meta Notes + +- Run with `bun models:sync meta` or as part of the `direct` group. Registration also enables the hourly provider-specific workflow; no new secret is required. +- Sources: `https://dev.meta.ai/docs/models.md` and `https://dev.meta.ai/docs/pricing-rate-limits.md`. +- Meta's `/v1/models` endpoint is team-scoped and exposes IDs and registry timestamps, not pricing or limits. Use the public documentation instead of treating account-visible IDs as public catalog additions. +- Sync only the token-priced text models in the public model table. Update standard/contributor input, output, and cached-input USD/MTok prices and context windows. Keep output limits, modalities (including audio support caveats), reasoning controls, dates, inheritance, and other authored fields unchanged. +- New documented models open deduped missing-model issues for manual authoring (`skipCreates`); local models absent from the docs are retained (`deleteMissing: false`). Image generation, transcription, and self-hosted models are outside this sync's scope. +- Missing tables, unknown pricing tiers, invalid prices/limits, and duplicate model rows fail before writing. Documentation format changes require updating the parser, not guessing defaults. + ## OVHcloud Notes OVHcloud AI Endpoints is implemented in `packages/core/src/sync/providers/ovhcloud.ts`. @@ -248,6 +298,18 @@ OVHcloud AI Endpoints is implemented in `packages/core/src/sync/providers/ovhclo - `attachment` is derived from non-text `input_modalities`, and `open_weights` from the presence of `hugging_face_id`. - `release_date`/`last_updated` default to the catalog `created` timestamp but preserve any existing hand-authored dates; `knowledge`, `family`, `status`, `interleaved`, and `limit.input` are preserved when present. +## Fireworks AI Notes + +Fireworks AI is implemented in `packages/core/src/sync/providers/fireworks-ai.ts`. + +- Run it with `bun models:sync fireworks-ai` or `bun fireworks:sync`. +- Source endpoint: `https://api.fireworks.ai/v1/serverless/models`; required auth: `FIREWORKS_API_KEY`. +- The serverless catalog exposes one row per serving mode with live per-million-token pricing, invocation identifiers, aliases, advertised context length, and input/output modalities. +- Standard rows update base-model IDs. Fast and other alternate-resource rows update the model or router named by `usage_identifier`; their aliases are tracked as additional invocation IDs. Standard-path aliases inherit the base model's flag modes. Flag-only modes such as Priority become priced `experimental.modes` with the required request-body `service_tier` instead of duplicate catalog IDs. A priority-only model remains discoverable with that service-tier recipe on its base ID. +- New text/vision invocation IDs are reported but not created automatically because the endpoint does not yet provide output limits, reasoning controls, tool support, or open-weight status. Embedding/reranking rows are ignored because the catalog provider entries describe generation models. +- Pricing and modalities come from the matching serverless serving mode; complete API pricing can seed an existing model whose authored TOML has no cost. Existing exact context caps smaller than the advertised API value are preserved, while a lower API ceiling is applied. Authored output limits, reasoning options, tool support, and other metadata not exposed by the endpoint are preserved. +- Models absent from the serverless response are retained for manual lifecycle review. + ## DigitalOcean Notes - DigitalOcean is implemented in `packages/core/src/sync/providers/digitalocean.ts`. @@ -300,3 +362,15 @@ Venice is implemented in `packages/core/src/sync/providers/venice.ts`. ## Standalone Generators Some provider scripts in `packages/core/script/generate-*.ts` are not wired into `bun models:sync`. When updating those scripts, preserve existing `base_model` and `base_model_omit` fields for generated TOMLs that already use model metadata inheritance. New inheritance-aware output should use `base_model`; do not reintroduce legacy `[extends]` syntax. + +## ai& Notes + +- Endpoint: `GET https://api.aiand.com/v1/api.json` (public, no auth). The module reads the `aiand` provider entry; `AIAND_API_URL` overrides the endpoint for staging dry runs. +- The feed publishes this repo's `api.json` shape, so translation is near-identity. The feed is authoritative for prices (including `cache_read`), limits, capability flags, modalities, gateway-enforced `reasoning_options`, and `deprecated` status; the `aiand` entry lists only models whose catalog metadata is complete. +- Curated values win for `name`, `description`, `knowledge`, `release_date`, and `last_updated` — the feed's `last_updated` tracks catalog-row edits, not model revisions, and release dates are lab metadata the gateway is not authoritative for. A curated alpha/beta `status` survives a feed that omits one; a curated `deprecated` does not, since the feed owns deprecation and absence means active. +- On base-factored files, lab-owned fields (`name`, `description`, `family`, `release_date`, `last_updated`, `knowledge`, `open_weights`) are never asserted from the feed: they appear only as deltas the authored TOML already carried on top of its `base_model` (read via `context.authored()`, never the base-resolved merge), so a full-inline file being factored for the first time — or a new file — inherits the lab entry outright. A new feed id resolves its `base_model` by normalized match against `models/` and is skipped with a report notice when nothing resolves — an unfactored full definition is never created. An empty feed fails the run rather than deleting the local catalog. +- `family` passes through `ModelFamily.safeParse` and is omitted when unknown. +- A skipped new id is returned from `missingModelID` (the only skip is "no lab base yet"), so the runner preserves any existing local entry and opens a deduped missing-model issue for the lab metadata. +- `preserveDescriptions` is off: the runner must not re-inject a pre-factor authored description when the translator leaves it unset, or a full-inline → factored transition would recreate a lab-identical override. Created files get a leading header from `translateModel` naming the single reasoning wire path (`reasoning_effort`, "none" = off). `toggle` and `budget_tokens` controls are parsed (so a feed that publishes one never aborts the run) but never written, from feed or authored file: ai& has no separate on/off or token-budget field, so they cannot be true of this host. +- `interleaved` comes from the feed when published, else the authored value, else `{ field = "reasoning_content" }` for reasoners — every ai& reasoner streams thinking in `message.reasoning_content`, so a new reasoner is never created without its side channel. +- A reasoner never gets an invented `[]`: an omitted feed list keeps the authored controls, and a non-empty list whose effort values the schema doesn't know yet does too; when neither yields a schema-valid set the model fails with `MissingReasoningOptionsError` — the runner preserves the local file and routes the id to the missing-model issue flow. Only an explicit `[]` published by the feed is written as "no caller control".