Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 19 additions & 22 deletions .github/scripts/check-commandcode-model-metadata.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import {
const execFileAsync = promisify(execFile)
const MODELS_REFERENCE_PATH = "dist/bundled/command-code-knowledge/reference/models.md"
const CLI_BUNDLE_PATH = "dist/cli.mjs"
const TEXT_ONLY_MARKER = ',__name(isKnownTextOnlyModel,"isKnownTextOnlyModel")'
const VALID_EFFORTS = new Set(["off", "minimal", "low", "medium", "high", "xhigh", "max"])

function quoteWindowsArgument(argument: string): string {
Expand Down Expand Up @@ -136,26 +135,8 @@ export function parseModelsReference(markdown: string): {
}
}

export function parseKnownTextOnlyModelIds(bundle: string): readonly string[] {
const markerIndex = bundle.indexOf(TEXT_ONLY_MARKER)
if (markerIndex < 0) {
throw new Error("Could not find Command Code's isKnownTextOnlyModel catalog")
}

const setStart = bundle.lastIndexOf("new Set([", markerIndex)
if (setStart < 0) throw new Error("Could not find the text-only model set")

const arrayStart = setStart + "new Set(".length
const arrayEnd = markerIndex - 1
const literal = bundle.slice(arrayStart, arrayEnd)
const parsed: unknown = JSON.parse(literal)
if (!isStringArray(parsed)) throw new Error("Expected the text-only model catalog to be strings")

return sorted(new Set(parsed))
}

function modelObject(bundle: string, modelId: string): string {
const start = bundle.indexOf(`{id:${JSON.stringify(modelId)},inputModalities:`)
const start = bundle.indexOf(`{id:${JSON.stringify(modelId)},`)
if (start < 0) throw new Error(`Could not find model metadata for ${modelId}`)

let depth = 0
Expand Down Expand Up @@ -184,14 +165,30 @@ export function parseBundleModelCapabilities(
bundle: string,
modelIds: readonly string[],
): {
imageModelIds: readonly string[]
reasoningModelIds: readonly string[]
maxOutputTokens: Readonly<Record<string, number>>
} {
const imageModelIds: string[] = []
const reasoningModelIds: string[] = []
const maxOutputTokens: Record<string, number> = {}

for (const modelId of modelIds) {
const entry = modelObject(bundle, modelId)
const modalitiesLiteral = /\binputModalities:(\[[^\]]*\])/.exec(entry)?.[1]
if (!modalitiesLiteral) throw new Error(`Missing input modalities for ${modelId}`)
const modalities: unknown = JSON.parse(modalitiesLiteral)
if (
!isStringArray(modalities) ||
!modalities.includes("text") ||
modalities.some(
(modality) => modality !== "text" && modality !== "image" && modality !== "file",
)
) {
throw new Error(`Unexpected input modalities for ${modelId}`)
}
// The host supports text/image inputs; the CLI's file modality is not advertised.
if (modalities.includes("image")) imageModelIds.push(modelId)
if (entry.includes("reasoning:!0") || entry.includes("reasoningEfforts:[")) {
reasoningModelIds.push(modelId)
}
Expand All @@ -206,6 +203,7 @@ export function parseBundleModelCapabilities(
}

return {
imageModelIds: sorted(imageModelIds),
reasoningModelIds: sorted(reasoningModelIds),
maxOutputTokens: Object.fromEntries(
Object.entries(maxOutputTokens).sort(([left], [right]) => left.localeCompare(right)),
Expand All @@ -218,11 +216,10 @@ export function commandCodeModelMetadataFromContents(
cliBundle: string,
): CommandCodeModelMetadata {
const reference = parseModelsReference(modelsReference)
const textOnlyModelIds = new Set(parseKnownTextOnlyModelIds(cliBundle))
const capabilities = parseBundleModelCapabilities(cliBundle, reference.modelIds)

return {
imageModelIds: reference.modelIds.filter((modelId) => !textOnlyModelIds.has(modelId)),
imageModelIds: capabilities.imageModelIds,
reasoningModelIds: capabilities.reasoningModelIds,
reasoningEfforts: reference.reasoningEfforts,
maxOutputTokens: capabilities.maxOutputTokens,
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Changelog

## Unreleased

- Refresh the static capability snapshot to `command-code@1.82.4`: add image input and reasoning efforts for `google/gemini-4-argon`, `meta/muse-wonder-1.0`, and `Qwen/Qwen3.8-Max-Prime`; replace the retired free Ling 3.1 Flash with `inclusionai/ling-3.1-flash`, preserving its reasoning efforts and 32,768-token output limit. Max Prime has a 131,072-token output limit (#153).
- Fix catalog synchronization with the CLI's new model-object layout. Read explicit input modalities instead of the removed global text-only set, and project the CLI's additional `file` modality onto the host's supported text/image inputs (#153).
- Add reviewed display pricing for Gemini 4 Argon, Muse Wonder, Qwen 3.8 Max Prime, paid Ling 3.1 Flash, Nemotron 3.5 Super VL, Muse Spark Open, and the free Cat Jam preview. Remove the retired free Ling entry. Prices and context tiers were verified against the official pricing page on 2026-10-15; the snapshot covers all 93 advertised models. Cat Jam is free only while its stealth preview lasts, with no published expiry. Models not yet present in CLI 1.82.4 keep conservative capability defaults until upstream metadata is available (#153).

## 0.7.7 - 2026-10-11

- Recognize the `off` reasoning effort now published for the DeepSeek V4 and V4.1 models, so the catalog parser no longer rejects it and the generate transport never forwards `off` as `reasoning_effort`. The Provider API and Oh My Pi adapters translate the level from the model's thinking metadata on their own wire.
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ The following environment variables are intended for tests, local mocks, and com

## Image input

The provider advertises image input only for models marked with the `image` input modality in the official Command Code CLI model catalog. The capability snapshot currently follows `command-code@1.79.2`; unknown models default to text-only until their upstream metadata is reviewed. A daily GitHub Actions job synchronizes the CLI version, image capabilities, reasoning flags, reasoning efforts, and model-specific output limits with the latest published CLI package, also dropping manual effort overrides that upstream has published itself, and opens or updates a reviewable pull request when they change. Pricing remains manually reviewed because temporary promotions and long-context tiers require explicit review.
The provider advertises image input only for models marked with the `image` input modality in the official Command Code CLI model catalog. The capability snapshot currently follows `command-code@1.82.4`; unknown models default to text-only until their upstream metadata is reviewed. A daily GitHub Actions job synchronizes the CLI version, image capabilities, reasoning flags, reasoning efforts, and model-specific output limits with the latest published CLI package, also dropping manual effort overrides that upstream has published itself, and opens or updates a reviewable pull request when they change. Pricing remains manually reviewed because temporary promotions and long-context tiers require explicit review.

For vision-capable models, Pi's native provider adapters forward image blocks from user messages and tool results using the documented OpenAI or Anthropic message schema. Unknown and text-only models remain marked text-only in Pi.

Expand Down
20 changes: 15 additions & 5 deletions src/commandcode-catalog.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export const COMMAND_CODE_CLI_VERSION = "1.79.2"
export const COMMAND_CODE_CLI_VERSION = "1.82.4"

export type CommandCodeInputType = "text" | "image"
export type CommandCodeReasoningEffort =
Expand All @@ -11,7 +11,7 @@ export type CommandCodeReasoningEffort =
| "max"

/**
* Generated from command-code@1.79.2 by `npm run sync:commandcode-catalog`.
* Generated from command-code@1.82.4 by `npm run sync:commandcode-catalog`.
* Do not edit manually.
*/
export const MODEL_INPUT_MODALITIES: Readonly<Record<string, readonly CommandCodeInputType[]>> = {
Expand All @@ -35,6 +35,7 @@ export const MODEL_INPUT_MODALITIES: Readonly<Record<string, readonly CommandCod
"google/gemini-3.6-flash": ["text", "image"],
"google/gemini-3.7-flash": ["text", "image"],
"google/gemini-3.8-flash": ["text", "image"],
"google/gemini-4-argon": ["text", "image"],
"gpt-5.3-codex": ["text", "image"],
"gpt-5.4": ["text", "image"],
"gpt-5.4-mini": ["text", "image"],
Expand All @@ -51,6 +52,7 @@ export const MODEL_INPUT_MODALITIES: Readonly<Record<string, readonly CommandCod
"meta/muse-spark-1.2-contributor": ["text", "image"],
"meta/muse-spark-1.3": ["text", "image"],
"meta/muse-spark-1.3-contributor": ["text", "image"],
"meta/muse-wonder-1.0": ["text", "image"],
"MiniMaxAI/MiniMax-M3": ["text", "image"],
"mistral/mistral-large-4": ["text", "image"],
"moonshotai/Kimi-K2.5": ["text", "image"],
Expand All @@ -65,6 +67,7 @@ export const MODEL_INPUT_MODALITIES: Readonly<Record<string, readonly CommandCod
"Qwen/Qwen3.8-Flash": ["text", "image"],
"Qwen/Qwen3.8-Max": ["text", "image"],
"Qwen/Qwen3.8-Max-0902": ["text", "image"],
"Qwen/Qwen3.8-Max-Prime": ["text", "image"],
"Qwen/Qwen3.8-Omni-Flash": ["text", "image"],
"sakana/fugu-ultra": ["text", "image"],
"stepfun/Step-3.7-Flash": ["text", "image"],
Expand Down Expand Up @@ -105,6 +108,7 @@ export const MODEL_REASONING: Readonly<Record<string, true>> = {
"google/gemini-3.6-flash": true,
"google/gemini-3.7-flash": true,
"google/gemini-3.8-flash": true,
"google/gemini-4-argon": true,
"gpt-5.3-codex": true,
"gpt-5.4": true,
"gpt-5.4-mini": true,
Expand All @@ -117,13 +121,14 @@ export const MODEL_REASONING: Readonly<Record<string, true>> = {
"gpt-6-sol": true,
"gpt-6.1-sol": true,
"inclusionai/ling-3.0-flash-sante:free": true,
"inclusionai/ling-3.1-flash:free": true,
"inclusionai/ling-3.1-flash": true,
"meituan/LongCat-2.0": true,
"meta/muse-spark-1.1": true,
"meta/muse-spark-1.2": true,
"meta/muse-spark-1.2-contributor": true,
"meta/muse-spark-1.3": true,
"meta/muse-spark-1.3-contributor": true,
"meta/muse-wonder-1.0": true,
"MiniMaxAI/MiniMax-M3": true,
"mistral/mistral-large-4": true,
"moonshotai/Kimi-K2.7-Code": true,
Expand All @@ -140,6 +145,7 @@ export const MODEL_REASONING: Readonly<Record<string, true>> = {
"Qwen/Qwen3.8-Flash": true,
"Qwen/Qwen3.8-Max": true,
"Qwen/Qwen3.8-Max-0902": true,
"Qwen/Qwen3.8-Max-Prime": true,
"Qwen/Qwen3.8-Omni-Flash": true,
"sakana/fugu-ultra": true,
"stealth/glyph-cluster:free": true,
Expand Down Expand Up @@ -182,6 +188,7 @@ export const MODEL_EFFORTS: Readonly<Record<string, readonly CommandCodeReasonin
"google/gemini-3.6-flash": ["low", "medium", "high"],
"google/gemini-3.7-flash": ["low", "medium", "high"],
"google/gemini-3.8-flash": ["low", "medium", "high"],
"google/gemini-4-argon": ["low", "medium", "high"],
"gpt-5.3-codex": ["low", "medium", "high", "xhigh"],
"gpt-5.4": ["low", "medium", "high", "xhigh"],
"gpt-5.4-mini": ["low", "medium", "high"],
Expand All @@ -193,19 +200,21 @@ export const MODEL_EFFORTS: Readonly<Record<string, readonly CommandCodeReasonin
"gpt-6-luna": ["low", "medium", "high", "xhigh", "max"],
"gpt-6-sol": ["low", "medium", "high", "xhigh", "max"],
"gpt-6.1-sol": ["low", "medium", "high", "xhigh", "max"],
"inclusionai/ling-3.1-flash:free": ["low", "medium", "high"],
"inclusionai/ling-3.1-flash": ["low", "medium", "high"],
"meta/muse-spark-1.1": ["low", "medium", "high", "xhigh"],
"meta/muse-spark-1.2": ["low", "medium", "high", "xhigh"],
"meta/muse-spark-1.2-contributor": ["low", "medium", "high", "xhigh"],
"meta/muse-spark-1.3": ["low", "medium", "high", "xhigh", "max"],
"meta/muse-spark-1.3-contributor": ["low", "medium", "high", "xhigh"],
"meta/muse-wonder-1.0": ["low", "medium", "high", "xhigh"],
"MiniMaxAI/MiniMax-M3": ["low", "medium", "high"],
"mistral/mistral-large-4": ["low", "medium", "high"],
"moonshotai/Kimi-K3": ["low", "high", "max"],
"Qwen/Qwen3.8-27B": ["low", "medium", "xhigh"],
"Qwen/Qwen3.8-Flash": ["low", "medium", "xhigh"],
"Qwen/Qwen3.8-Max": ["low", "medium", "xhigh"],
"Qwen/Qwen3.8-Max-0902": ["low", "medium", "xhigh"],
"Qwen/Qwen3.8-Max-Prime": ["low", "medium", "xhigh"],
"Qwen/Qwen3.8-Omni-Flash": ["low", "medium", "xhigh"],
"sakana/fugu-ultra": ["high", "xhigh"],
"stealth/glyph-cluster:free": ["low", "medium", "high", "xhigh"],
Expand All @@ -222,10 +231,11 @@ export const MODEL_EFFORTS: Readonly<Record<string, readonly CommandCodeReasonin

export const MODEL_MAX_OUTPUT_TOKENS: Readonly<Record<string, number>> = {
"inclusionai/ling-3.0-flash-sante:free": 32_768,
"inclusionai/ling-3.1-flash:free": 32_768,
"inclusionai/ling-3.1-flash": 32_768,
"mistral/mistral-large-4": 262_144,
"poolside/laguna-s-2.1-free": 32_768,
"Qwen/Qwen3.8-27B": 32_768,
"Qwen/Qwen3.8-Max-Prime": 131_072,
"Qwen/Qwen3.8-Omni-Flash": 131_072,
"stealth/glyph-cluster:free": 256_000,
"z-ai/glm-5.3-flash": 131_072,
Expand Down
11 changes: 9 additions & 2 deletions src/pricing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ export interface TemporaryPricing {
}

export const PRICING_SOURCE_URL = "https://commandcode.ai/docs/resources/pricing-limits"
export const PRICING_LAST_VERIFIED = "2026-10-09"
export const PRICING_LAST_VERIFIED = "2026-10-15"

export const ZERO_MODEL_COST: CommandCodeModelCost = {
input: 0,
Expand All @@ -40,11 +40,13 @@ export const ZERO_MODEL_COST: CommandCodeModelCost = {
export const MODEL_COSTS: Readonly<Record<string, CommandCodeModelCost>> = {
// Free models
"inclusionai/ling-3.0-flash-sante:free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
"inclusionai/ling-3.1-flash:free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
// Free while the stealth preview lasts; no fixed expiry is published.
"stealth/cat-jam:free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
"poolside/laguna-s-2.1-free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
"stealth/glyph-cluster:free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },

// Open and open-weight models
"inclusionai/ling-3.1-flash": { input: 0.3, output: 0.9, cacheRead: 0.06, cacheWrite: 0 },
"mistral/mistral-large-4": { input: 1.36, output: 4.18, cacheRead: 0.14, cacheWrite: 0 },
"tencent/hy3-paid": { input: 0.14, output: 0.58, cacheRead: 0.035, cacheWrite: 0 },
"tencent/hy4-preview": { input: 0.834, output: 2.501, cacheRead: 0.042, cacheWrite: 0 },
Expand Down Expand Up @@ -106,6 +108,7 @@ export const MODEL_COSTS: Readonly<Record<string, CommandCodeModelCost>> = {
cacheRead: 0.016,
cacheWrite: 0,
},
"Qwen/Qwen3.8-Max-Prime": { input: 4, output: 12, cacheRead: 0.5, cacheWrite: 5 },
"Qwen/Qwen3.8-Max": { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 2.5 },
"Qwen/Qwen3.8-Max-0902": { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 },
"Qwen/Qwen3.8-27B": { input: 0.4, output: 3, cacheRead: 0.04, cacheWrite: 0 },
Expand Down Expand Up @@ -177,6 +180,7 @@ export const MODEL_COSTS: Readonly<Record<string, CommandCodeModelCost>> = {
cacheWrite: 0,
},
"xiaomi/mimo-v2.6-flash": { input: 0.14, output: 0.28, cacheRead: 0.0028, cacheWrite: 0 },
"nvidia/nemotron-3.5-super-vl": { input: 0.2, output: 0.5, cacheRead: 0.04, cacheWrite: 0 },
"nvidia/nemotron-3-ultra-550b-a55b": {
input: 0.6,
output: 2.4,
Expand All @@ -194,6 +198,8 @@ export const MODEL_COSTS: Readonly<Record<string, CommandCodeModelCost>> = {
"meta/muse-spark-1.1": { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 },
"meta/muse-spark-1.2": { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 },
"meta/muse-spark-1.3": { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 },
"meta/muse-spark-open": { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 },
"meta/muse-wonder-1.0": { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 0 },
"meta/muse-spark-1.2-contributor": {
input: 0.1,
output: 0.2,
Expand Down Expand Up @@ -305,6 +311,7 @@ export const MODEL_COSTS: Readonly<Record<string, CommandCodeModelCost>> = {
cacheRead: 0.15,
cacheWrite: 0.08334,
},
"google/gemini-4-argon": { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 0 },
"google/gemini-3.8-flash": {
input: 1.5,
output: 7.5,
Expand Down
10 changes: 8 additions & 2 deletions tests/fixtures/commandcode-model-ids.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"fetchedAt": "2026-10-09T06:21:21.675Z",
"fetchedAt": "2026-10-15T20:58:52.909Z",
"source": "https://api.commandcode.ai/provider/v1/models",
"modelIds": [
"claude-sonnet-5-5",
Expand Down Expand Up @@ -51,6 +51,7 @@
"xiaomi/mimo-v2.5-pro",
"xiaomi/mimo-v2.5",
"Qwen/Qwen3.8-Omni-Flash",
"Qwen/Qwen3.8-Max-Prime",
"Qwen/Qwen3.8-Max-0902",
"Qwen/Qwen3.8-Max",
"Qwen/Qwen3.8-27B",
Expand All @@ -66,6 +67,7 @@
"stepfun/Step-3.5-Flash",
"tencent/hy3-paid",
"tencent/hy4-preview",
"google/gemini-4-argon",
"google/gemini-3.8-flash",
"google/gemini-3.7-flash",
"google/gemini-3.6-flash",
Expand All @@ -74,17 +76,21 @@
"google/gemini-3.1-flash-lite",
"sakana/fugu-ultra",
"nvidia/nemotron-3-ultra-550b-a55b",
"nvidia/nemotron-3.5-super-vl",
"thinkingmachines/inkling",
"thinkingmachines/inkling-small",
"stealth/glyph-cluster:free",
"stealth/cat-jam:free",
"poolside/laguna-s-2.1-free",
"inclusionai/ling-3.0-flash-sante:free",
"inclusionai/ling-3.1-flash:free",
"inclusionai/ling-3.1-flash",
"meta/muse-spark-1.1",
"meta/muse-spark-1.2",
"meta/muse-spark-1.2-contributor",
"meta/muse-spark-1.3",
"meta/muse-spark-1.3-contributor",
"meta/muse-spark-open",
"meta/muse-wonder-1.0",
"xai/grok-4.5",
"xai/grok-4.6",
"xai/grok-4.7",
Expand Down
10 changes: 8 additions & 2 deletions tests/fixtures/commandcode-pricing.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"verifiedAt": "2026-10-09",
"verifiedAt": "2026-10-15",
"source": "https://commandcode.ai/docs/resources/pricing-limits",
"tierPolicy": "Use request-wide input tiers; the highest threshold exceeded by input plus cache tokens applies to the full request.",
"tiers": {
Expand All @@ -22,9 +22,10 @@
},
"costs": {
"inclusionai/ling-3.0-flash-sante:free": [0, 0, 0, 0],
"inclusionai/ling-3.1-flash:free": [0, 0, 0, 0],
"stealth/cat-jam:free": [0, 0, 0, 0],
"poolside/laguna-s-2.1-free": [0, 0, 0, 0],
"stealth/glyph-cluster:free": [0, 0, 0, 0],
"inclusionai/ling-3.1-flash": [0.3, 0.9, 0.06, 0],
"mistral/mistral-large-4": [1.36, 4.18, 0.14, 0],
"tencent/hy3-paid": [0.14, 0.58, 0.035, 0],
"tencent/hy4-preview": [0.834, 2.501, 0.042, 0],
Expand All @@ -49,6 +50,7 @@
"deepseek/deepseek-v4-flash-fast": [0.28, 0.56, 0.07, 0],
"deepseek/deepseek-v4.1-flash": [0.15, 0.6, 0.003, 0],
"deepseek/deepseek-v4.1-flash-fast": [0.16, 0.58, 0.016, 0],
"Qwen/Qwen3.8-Max-Prime": [4, 12, 0.5, 5],
"Qwen/Qwen3.8-Max": [2, 6, 0.25, 2.5],
"Qwen/Qwen3.8-Max-0902": [2, 6, 0.25, 0],
"Qwen/Qwen3.8-27B": [0.4, 3, 0.04, 0],
Expand All @@ -68,13 +70,16 @@
"xiaomi/mimo-v2.6-pro": [0.435, 0.87, 0.0036, 0],
"xiaomi/mimo-v2.6-pro-ultraspeed": [4.35, 8.7, 0.036, 0],
"xiaomi/mimo-v2.6-flash": [0.14, 0.28, 0.0028, 0],
"nvidia/nemotron-3.5-super-vl": [0.2, 0.5, 0.04, 0],
"nvidia/nemotron-3-ultra-550b-a55b": [0.6, 2.4, 0.12, 0],
"sakana/fugu-ultra": [5, 30, 0.5, 0],
"thinkingmachines/inkling": [1, 4.05, 0.17, 0],
"thinkingmachines/inkling-small": [0.5, 1.2, 0.1, 0],
"meta/muse-spark-1.1": [1.25, 4.25, 0.15, 0],
"meta/muse-spark-1.2": [1.25, 4.25, 0.15, 0],
"meta/muse-spark-1.3": [1.25, 4.25, 0.15, 0],
"meta/muse-spark-open": [1.25, 4.25, 0.15, 0],
"meta/muse-wonder-1.0": [4, 20, 0.2, 0],
"meta/muse-spark-1.2-contributor": [0.1, 0.2, 0.002, 0],
"meta/muse-spark-1.3-contributor": [0.1, 0.2, 0.002, 0],
"claude-sonnet-5-5": [2, 10, 0.1, 2.5],
Expand All @@ -100,6 +105,7 @@
"gpt-5.3-codex": [2, 8, 0.5, 0],
"gpt-5.4-mini": [0.75, 4.5, 0.075, 0],
"google/gemini-3.7-flash": [1.5, 7.5, 0.15, 0.08334],
"google/gemini-4-argon": [2, 10, 0.1, 0],
"google/gemini-3.8-flash": [1.5, 7.5, 0.15, 0],
"google/gemini-3.6-flash": [1.5, 7.5, 0.15, 0],
"google/gemini-3.5-flash": [1.5, 9, 0.15, 0],
Expand Down
Loading
Loading