@ikarmic/forge-core 5.1.1 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/agent.js +208 -57
- package/dist/agent/enhance-prompt.js +2 -1
- package/dist/agent/goal.d.ts +5 -8
- package/dist/agent/prompts.d.ts +15 -0
- package/dist/agent/prompts.js +34 -0
- package/dist/agent/race-abort.d.ts +8 -0
- package/dist/agent/race-abort.js +24 -0
- package/dist/agent/retry.d.ts +50 -0
- package/dist/agent/retry.js +192 -0
- package/dist/agent/shell-command.d.ts +23 -0
- package/dist/agent/shell-command.js +93 -0
- package/dist/agent/stack-facts.d.ts +23 -0
- package/dist/agent/stack-facts.js +150 -0
- package/dist/catalog/models-dev-snapshot.d.ts +1 -0
- package/dist/catalog/models-dev-snapshot.js +3 -0
- package/dist/catalog/models-dev.d.ts +35 -0
- package/dist/catalog/models-dev.js +143 -0
- package/dist/code-index/parser.js +48 -3
- package/dist/context/compaction.js +8 -2
- package/dist/git/auto-commit.d.ts +4 -2
- package/dist/git/auto-commit.js +16 -5
- package/dist/github/github-tools.d.ts +2 -18
- package/dist/index.d.ts +11 -3
- package/dist/index.js +9 -2
- package/dist/journey/answers-block.js +14 -1
- package/dist/journey/offer.js +2 -1
- package/dist/mcp/json-schema-to-zod.js +12 -1
- package/dist/memory/session-digest.js +2 -1
- package/dist/orchestrator/index.d.ts +1 -1
- package/dist/orchestrator/index.js +1 -1
- package/dist/orchestrator/orchestrator.d.ts +45 -6
- package/dist/orchestrator/orchestrator.js +62 -12
- package/dist/orchestrator/router.d.ts +1 -1
- package/dist/orchestrator/router.js +4 -1
- package/dist/orchestrator/specialists.d.ts +6 -1
- package/dist/orchestrator/specialists.js +165 -68
- package/dist/orchestrator/types.d.ts +1 -1
- package/dist/policy/policy.d.ts +6 -59
- package/dist/pricing.d.ts +2 -0
- package/dist/pricing.js +47 -16
- package/dist/structured/schema.js +9 -12
- package/dist/tools/apply-patch.d.ts +1 -5
- package/dist/tools/ask-user.d.ts +2 -10
- package/dist/tools/ask-user.js +12 -4
- package/dist/tools/browser-tools.d.ts +15 -31
- package/dist/tools/codebase-search.d.ts +1 -7
- package/dist/tools/command-sandbox.d.ts +24 -0
- package/dist/tools/command-sandbox.js +73 -0
- package/dist/tools/dependency-audit.d.ts +30 -0
- package/dist/tools/dependency-audit.js +197 -0
- package/dist/tools/edit-file.d.ts +9 -15
- package/dist/tools/edit-file.js +64 -16
- package/dist/tools/fetch-url.d.ts +1 -18
- package/dist/tools/find-references.d.ts +1 -5
- package/dist/tools/find-symbol.d.ts +10 -8
- package/dist/tools/git-diff.d.ts +13 -0
- package/dist/tools/git-diff.js +85 -0
- package/dist/tools/index.d.ts +3 -1
- package/dist/tools/index.js +5 -1
- package/dist/tools/list-files.d.ts +1 -19
- package/dist/tools/list-symbols.d.ts +1 -5
- package/dist/tools/memory.d.ts +23 -43
- package/dist/tools/notebook.d.ts +11 -17
- package/dist/tools/read-file.d.ts +1 -11
- package/dist/tools/read-image.d.ts +1 -12
- package/dist/tools/read-only.d.ts +1 -1
- package/dist/tools/read-only.js +2 -0
- package/dist/tools/run-command.d.ts +1 -17
- package/dist/tools/run-command.js +12 -2
- package/dist/tools/search-files.d.ts +1 -17
- package/dist/tools/search-files.js +8 -49
- package/dist/tools/search-worker.d.ts +23 -0
- package/dist/tools/search-worker.js +77 -0
- package/dist/tools/sub-agent-wait.d.ts +2 -8
- package/dist/tools/sub-agent.d.ts +2 -70
- package/dist/tools/sub-agent.js +1 -0
- package/dist/tools/todo.d.ts +8 -20
- package/dist/tools/web-search.d.ts +1 -7
- package/dist/tools/write-file.d.ts +1 -7
- package/dist/types.d.ts +60 -1
- package/package.json +3 -3
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// Generated by scripts/models-dev-snapshot.mjs from https://models.dev/api.json on 2026-10-26. Do not edit by hand.
|
|
2
|
+
// Row: [context, output, input $/M, output $/M, cache read $/M, cache write $/M]; trailing unknowns are omitted.
|
|
3
|
+
export const MODELS_DEV_SNAPSHOT = { "anthropic": { "claude-sonnet-4-5": [200000, 64000, 3, 15, 0.3, 3.75], "claude-sonnet-4-6": [1000000, 128000, 3, 15, 0.3, 3.75], "claude-opus-5-5": [1000000, 128000, 4, 20, 0.2, 5], "claude-fable-5": [1000000, 128000, 10, 50, 1, 12.5], "claude-sonnet-4-5-20250929": [200000, 64000, 3, 15, 0.3, 3.75], "claude-fable-5-1": [1000000, 128000, 10, 50, 0.25, 12.5], "claude-opus-4-5": [200000, 64000, 5, 25, 0.5, 6.25], "claude-opus-4-7": [1000000, 128000, 5, 25, 0.5, 6.25], "claude-opus-4-5-20251101": [200000, 64000, 5, 25, 0.5, 6.25], "claude-haiku-4-5": [200000, 64000, 1, 5, 0.1, 1.25], "claude-haiku-4-5-20251001": [200000, 64000, 1, 5, 0.1, 1.25], "claude-sonnet-5": [1000000, 128000, 2, 10, 0.2, 2.5], "claude-haiku-5-5": [1000000, 128000, 0.1, 0.5, 0.01, 0.125], "claude-opus-4-8": [1000000, 128000, 5, 25, 0.5, 6.25], "claude-opus-4-6": [1000000, 128000, 5, 25, 0.5, 6.25], "claude-opus-5": [1000000, 128000, 5, 25, 0.5, 6.25], "claude-sonnet-5-5": [1000000, 128000, 2, 10, 0.1, 2.5] }, "openai": { "gpt-5.4-nano": [400000, 128000, 0.2, 1.25, 0.02], "gpt-5.5-pro": [1050000, 128000, 30, 180], "gpt-6-sol": [1050000, 128000, 2, 10, 0.2, 2.5], "gpt-realtime-2.1": [128000, 32000, 4, 24, 0.4], "gpt-5.1": [400000, 128000, 1.25, 10, 0.125], "gpt-5.3-codex-spark": [128000, 32000, 1.75, 14, 0.175], "text-embedding-ada-002": [8192, 1536, 0.1, 0], "gpt-6.1-sol": [1050000, 128000, 2, 10, 0.1, 2.5], "gpt-4o-2024-11-20": [128000, 16384, 2.5, 10, 1.25], "o1-pro": [200000, 100000, 150, 600], "gpt-5.4-pro": [1050000, 128000, 30, 180], "gpt-5": [400000, 128000, 1.25, 10, 0.125], "gpt-image-1-mini": [0, 0], "gpt-5.2-pro": [400000, 128000, 21, 168], "gpt-image-2": [0, 0, 5, 30, 1.25], "gpt-daybreak-blue-latest": [1050000, 128000, 4, 20, 0.4, 5], "gpt-daybreak-red-latest": [400000, 128000, 12.5, 75, 1.25, 15.625], "gpt-image-1": [0, 0], "o1": [200000, 100000, 15, 60, 7.5], "gpt-5.5": [1050000, 128000, 5, 30, 0.5], "gpt-5-nano": [400000, 128000, 0.05, 0.4, 0.005], "gpt-5.2": [400000, 128000, 1.75, 14, 0.175], "gpt-4o": [128000, 16384, 2.5, 10, 1.25], "gpt-5.3-codex": [400000, 128000, 1.75, 14, 0.175], "gpt-5.6-sol": [1050000, 128000, 4, 20, 0.4, 5], "gpt-5.4-mini": [400000, 128000, 0.75, 4.5, 0.075], "text-embedding-3-small": [8191, 1536, 0.02, 0], "gpt-4": [8192, 8192, 30, 60], "text-embedding-3-large": [8191, 3072, 0.13, 0], "gpt-4.1-mini": [1047576, 32768, 0.4, 1.6, 0.1], "gpt-5.6": [1050000, 128000, 4, 20, 0.4, 5], "gpt-4o-mini": [128000, 16384, 0.15, 0.6, 0.075], "gpt-5.6-terra": [1050000, 128000, 2, 12, 0.2, 2.5], "gpt-5-mini": [400000, 128000, 0.25, 2, 0.025], "gpt-6.1-terra": [1050000, 128000, 1, 5, 0.05, 1.25], "gpt-4o-2024-08-06": [128000, 16384, 2.5, 10, 1.25], "gpt-6-luna": [1050000, 128000, 0.1, 0.5, 0.01, 0.125], "gpt-4-turbo": [128000, 4096, 10, 30], "gpt-6-astra": [1050000, 128000, 10, 50, 1, 12.5], "o3-pro": [200000, 100000, 20, 80], "gpt-3.5-turbo": [16385, 4096, 0.5, 1.5, 0], "o3-mini": [200000, 100000, 1.1, 4.4, 0.55], "gpt-image-1.5": [0, 0], "gpt-5.6-luna": [1050000, 128000, 0.2, 1.2, 0.02, 0.25], "chatgpt-image-latest": [0, 0], "gpt-4.1-nano": [1047576, 32768, 0.1, 0.4, 0.025], "o3": [200000, 100000, 2, 8, 0.5], "o4-mini": [200000, 100000, 1.1, 4.4, 0.275], "gpt-4o-2024-05-13": [128000, 4096, 5, 15], "gpt-5-pro": [400000, 272000, 15, 120], "gpt-4.1": [1047576, 32768, 2, 8, 0.5], "gpt-5.4": [1050000, 128000, 2.5, 15, 0.25] }, "google": { "gemini-3.1-pro-preview": [1048576, 65536, 2, 12, 0.2], "deep-research-preview-04-2026": [131072, 65536, 2, 12, 0.2], "gemini-3-pro-image": [65536, 32768, 2, 120], "gemini-2.5-flash-image": [32768, 32768, 0.3, 30, 0.075], "gemini-3.5-flash": [1048576, 65536, 1.5, 9, 0.15], "gemini-2.5-flash-preview-tts": [8192, 16384, 0.5, 10], "lyria-3-clip-preview": [1048576, 65536, 0, 0], "lyria-3-pro-preview": [1048576, 65536, 0, 0], "gemini-pro-latest": [1048576, 65536, 2, 12, 0.2], "gemini-embedding-001": [2048, 1, 0.15, 0], "gemini-3.5-flash-lite": [1048576, 65536, 0.3, 2.5, 0.03], "gemini-flash-latest": [1048576, 65536, 0.75, 3.75, 0.075], "gemini-3.1-flash-lite-preview": [1048576, 65536, 0.25, 1.5, 0.025], "gemini-2.5-flash": [1048576, 65536, 0.3, 2.5, 0.03], "gemini-3.5-live-translate-preview": [16384, 32768, 3.5, 21], "gemini-3.1-flash-lite-image": [65536, 4096, 0.25, 30], "gemini-3.1-flash-image": [131072, 32768, 0.5, 60], "gemini-3.1-flash-tts-preview": [8192, 16384, 1, 20], "gemini-2.5-flash-lite": [1048576, 65536, 0.1, 0.4, 0.01], "gemini-3-flash-preview": [1048576, 65536, 0.5, 3, 0.05], "gemini-3.1-flash-image-preview": [65536, 65536, 0.5, 60], "gemini-2.5-pro-preview-tts": [8192, 16384, 1, 20], "gemini-3.6-flash": [1048576, 65536, 0.75, 3.75, 0.075], "gemini-2.5-computer-use-preview-10-2025": [128000, 64000, 1.25, 10], "gemini-3.1-flash-lite": [1048576, 65536, 0.25, 1.5, 0.025], "gemini-flash-lite-latest": [1048576, 65536, 0.3, 2.5, 0.03], "gemini-2.5-pro": [1048576, 65536, 1.25, 10, 0.125], "gemini-embedding-2": [8192, 1, 0.2, 0], "gemini-3.1-pro-preview-customtools": [1048576, 65536, 2, 12, 0.2], "gemini-omni-flash-preview": [131072, 65536, 1.5, 17.5], "gemini-4-argon": [1048576, 32768, 2, 10, 0.1], "gemini-3.8-flash": [1048576, 65536, 0.75, 3.75, 0.075], "gemini-3.1-flash-live-preview": [131072, 65536, 0.75, 4.5], "gemma-4-26b-a4b-it": [262144, 32768], "gemma-4-31b-it": [262144, 32768], "deep-research-max-preview-04-2026": [131072, 65536, 2, 12, 0.2], "gemini-3.7-flash": [1048576, 65536, 0.75, 3.75, 0.075], "gemini-3-pro-image-preview": [131072, 32768, 2, 120] }, "openrouter": { "unbiased/pareto-26.9": [262144, 131072, 2.5, 7.5, 0.25], "unbiased/pareto-26.10": [1048576, 131072, 0.8, 3.2, 0.03], "meta-llama/llama-4-maverick": [524288, 16384, 0.1875, 0.6525, 0.05], "meta-llama/llama-3.2-1b-instruct": [60000, 54000, 0.027, 0.201], "meta-llama/llama-guard-4-12b": [163840, 16384, 0.18, 0.18], "meta-llama/llama-3.1-70b-instruct": [131072, 16384, 0.4, 0.4], "meta-llama/llama-4-scout": [1310720, 16384, 0.1, 0.3], "meta-llama/llama-3.3-70b-instruct": [131072, 16384, 0.1, 0.32], "meta-llama/llama-3.2-3b-instruct": [131072, 117964, 0.05, 0.33], "meta-llama/llama-3.1-8b-instruct": [131072, 117964, 0.05, 0.08, 0.025], "mancer/weaver": [8000, 6000, 0.4, 0.75], "inference-net/schematron-v2-small": [128000, 4096, 0.05, 0.23, 0.05], "inference-net/schematron-v2-turbo": [128000, 8192, 0.03, 0.15, 0.03], "fireworks/ember-1": [1048576, 943718, 3, 15, 0.3], "upstage/solar-mini4": [524288, 131072, 0.05, 0.2, 0.005], "upstage/solar-pro4": [524288, 131072, 0.15, 0.6, 0.03], "upstage/solar-pro-3": [131072, 117964, 0.15, 0.6, 0.015], "x-ai/grok-4.6": [500000, 450000, 2, 6, 0.5], "x-ai/grok-4.20-multi-agent": [2000000, 1800000, 1.25, 2.5, 0.2], "x-ai/grok-4.20": [2000000, 1800000, 1.25, 2.5, 0.2], "x-ai/grok-build-0.1": [256000, 230400, 1, 2, 0.2], "x-ai/grok-4.7": [500000, 450000, 2, 6, 0.5], "x-ai/grok-4.3": [1000000, 900000, 1.25, 2.5, 0.2], "x-ai/grok-4.5": [500000, 450000, 2, 6, 0.3], "z-ai/glm-4.5v": [65536, 16384, 0.6, 1.8, 0.11], "z-ai/glm-5.3-prime": [1000000, 131072, 2.8, 8.8, 0.56], "z-ai/glm-4.5-air": [131072, 98304, 0.13, 0.85, 0.025], "z-ai/glm-5.1": [204800, 131072, 1.4, 4.4, 0.26], "z-ai/glm-4.7-flash": [200000, 117964, 0.0605, 0.4], "z-ai/glm-4.5": [131072, 98304, 0.6, 2.2, 0.11], "z-ai/glm-5.3-flashx": [1048576, 131072, 0.37, 1.25, 0.09], "z-ai/glm-5-turbo": [202752, 131072, 1.2, 4, 0.24], "z-ai/glm-5": [204800, 131072, 1, 3.2, 0.2], "z-ai/glm-5.3-flash": [1048576, 943717, 0.15, 0.5, 0.03], "z-ai/glm-5.2": [1048576, 943718, 0.0341, 7, 0.033], "z-ai/glm-4.7": [204800, 131072, 0.54, 1.98, 0.099], "z-ai/glm-5v-turbo": [202752, 131072, 1.2, 4, 0.24], "z-ai/glm-4.6": [204800, 131072, 0.55, 2.2, 0.11], "z-ai/glm-4.6v": [131072, 32768, 0.3, 0.9, 0.05], "z-ai/glm-5.3": [1048576, 943718, 0.0699, 1.4, 0.0689], "bytedance-seed/seed-1.6-flash": [262144, 32768, 0.075, 0.3], "bytedance-seed/seed-2.0-lite": [262144, 131072, 0.25, 2], "bytedance-seed/seed-2.0-code": [262144, 131072, 0.5, 3], "bytedance-seed/seed-2.0-mini": [262144, 131072, 0.1, 0.4], "bytedance-seed/seed-2-1-turbo": [262144, 235929, 0.5, 2.5], "bytedance-seed/seed-1.6": [262144, 32768, 0.25, 2], "anthracite-org/magnum-v4-72b": [32768, 4096, 2.5, 5], "rekaai/reka-edge": [16384, 14745, 0.1, 0.1], "rekaai/reka-flash-3": [65536, 58982, 0.1, 0.2], "~unbiased/pareto-latest": [1048576, 131072, 0.8, 3.2, 0.03], "relace/relace-search": [256000, 128000, 1, 3], "relace/relace-apply-3": [256000, 128000, 0.85, 1.25], "amazon/nova-premier-v1": [1000000, 32000, 2.5, 12.5, 0.625], "amazon/nova-2-lite-v1": [1000000, 65535, 0.3, 2.5], "amazon/nova-pro-v1": [300000, 5120, 0.8, 3.2], "amazon/nova-lite-v1": [300000, 5120, 0.06, 0.24], "amazon/nova-micro-v1": [128000, 5120, 0.035, 0.14], "ibm-granite/granite-4.2-8b": [131072, 117964, 0.06, 0.25, 0.015], "ibm-granite/granite-4.0-h-micro": [131000, 117900, 0.017, 0.112], "minimax/minimax-m2": [204800, 131072, 0.255, 1.02], "minimax/minimax-m2-her": [65536, 2048, 0.3, 1.2, 0.03], "minimax/minimax-m3.1-flash": [1048576, 524288, 0.15, 0.6, 0.015], "minimax/minimax-m3": [1048576, 512000, 0.3, 1.2, 0.06], "minimax/minimax-m2.5": [204800, 131072, 0.3, 1.2, 0.03], "minimax/minimax-m2.7": [204800, 131072, 0.3, 1.2, 0.06], "minimax/minimax-01": [1000192, 40000, 0.2, 1.1], "minimax/minimax-m2.1": [204800, 131072, 0.3, 1.2, 0.03], "minimax/minimax-m1": [1000000, 40000, 0.55, 2.2], "sao10k/l3.1-euryale-70b": [131072, 16384, 0.85, 0.85], "sao10k/l3-lunaris-8b": [8192, 7372, 0.04, 0.05], "elorian/glimpse": [262144, 256000, 0.6, 3, 0.06], "thedrummer/cydonia-24b-v4.1": [131072, 117964, 0.3, 0.5, 0.15], "thedrummer/unslopnemo-12b": [1024000, 819200, 0.4, 0.4], "thedrummer/skyfall-36b-v2": [32768, 29491, 0.55, 0.8, 0.25], "dots-studio/dots-3-note-preview:free": [512000, 460800, 0, 0], "openrouter/fusion": [1000000, 128000], "openrouter/bodybuilder": [128000, 128000], "openrouter/free": [200000, 8000, 0, 0], "openrouter/pareto-code": [2000000, 200000], "openrouter/auto": [2000000, 2000000], "prism-ml/ternary-bonsai-2-27b": [262144, 32768, 0.075, 0.5, 0.0375], "~google/gemini-pro-latest": [1048576, 943718, 2, 10, 0.1, 0.1875], "~google/gemini-flash-latest": [1048576, 65536, 0.75, 3.75, 0.075, 0.041667], "reflection/beam-1.0-501b-a23b": [1048576, 131072, 0.25, 1, 0.05], "meituan/longcat-2.0": [1048756, 262144, 0.3, 1.2, 0.006], "qwen/qwen3.8-max-prime": [1000000, 131072, 4, 12, 0.5], "qwen/qwen3-32b": [131072, 16384, 0.08, 0.28], "qwen/qwen3.5-35b-a3b": [262144, 81920, 0.14, 1, 0.05], "qwen/qwen3.6-27b": [262144, 81920, 0.32, 3.2], "qwen/qwen3.8-flash": [1000000, 131072, 0.15, 0.47, 0.016], "qwen/qwen3-vl-30b-a3b-instruct": [262144, 16384, 0.15, 0.6], "qwen/qwen3.5-flash-02-23": [1000000, 65536, 0.065, 0.26], "qwen/qwen3.6-35b-a3b": [262144, 235929, 0.1, 0.95, 0.05], "qwen/qwen3-coder-next": [262144, 235929, 0.12, 0.8, 0.07], "qwen/qwen3-235b-a22b-2507": [262144, 16384, 0.09, 0.55], "qwen/qwen3-14b": [40960, 16384, 0.12, 0.24], "qwen/qwen3.8-omni-flash": [1000000, 131072, 0.15, 0.47, 0.016], "qwen/qwen-plus": [1000000, 32768, 0.26, 0.78, 0.052, 0.325], "qwen/qwen3.5-9b": [262144, 235929, 0.17, 0.25], "qwen/qwen3-30b-a3b-instruct-2507": [262144, 235929, 0.1, 0.3], "qwen/qwen3-30b-a3b": [40960, 16384, 0.12, 0.5], "qwen/qwen3.7-flash": [1000000, 65536, 0.03, 0.13, 0.006, 0.038], "qwen/qwen3.5-122b-a10b": [262144, 65536, 0.26, 2.08], "qwen/qwen3.5-plus-02-15": [1000000, 65536, 0.26, 1.56], "qwen/qwen3.5-plus-20260420": [1000000, 65536, 0.3, 1.8, null, 0.375], "qwen/qwen3.7-max": [1000000, 131072, 1.475, 4.425, 0.295, 1.84375], "qwen/qwen-2.5-coder-32b-instruct": [32768, 29491, 0.66, 1], "qwen/qwen3-coder": [262144, 65536, 0.3, 1, 0.1], "qwen/qwen3.7-plus": [1000000, 131072, 0.32, 1.28, 0.064, 0.4], "qwen/qwen3.8-2.4t-a95b": [1048576, 909000, 2, 6, 0.25], "qwen/qwen3-next-80b-a3b-instruct": [262144, 16384, 0.09, 1.1], "qwen/qwen3-235b-a22b-thinking-2507": [128000, 16384, 0.45, 3.5], "qwen/qwen3.6-flash": [1000000, 65536, 0.1875, 1.125, null, 0.234375], "qwen/qwen3.6-plus": [1000000, 65536, 0.325, 1.95, null, 0.40625], "qwen/qwen3.5-397b-a17b": [262144, 235929, 0.5, 3.6, 0.3], "qwen/qwen-2.5-7b-instruct": [32768, 29491, 0.1, 0.2], "qwen/qwen3.8-27b": [1000000, 235929, 0.2, 2.5, 0.09], "qwen/qwen3-next-80b-a3b-thinking": [262144, 235929, 0.15, 1.2], "qwen/qwen2.5-vl-72b-instruct": [128000, 115200, 0.8, 1, 0.4], "qwen/qwen3-coder-30b-a3b-instruct": [262144, 235929, 0.07, 0.28], "qwen/qwen3.5-27b": [262144, 65536, 0.27, 2.16, 0.27], "qwen/qwen3-vl-30b-a3b-thinking": [262144, 235929, 0.29, 1], "qwen/qwen-2.5-72b-instruct": [32768, 16384, 0.36, 0.4], "qwen/qwen3-coder-flash": [1000000, 65536, 0.195, 0.975, 0.039, 0.24375], "qwen/qwen3-vl-235b-a22b-instruct": [262144, 32768, 0.21, 1.9, 0.1], "qwen/qwen3.8-max-0902": [1000000, 131072, 2, 6, 0.25], "qwen/qwen3-vl-8b-instruct": [262144, 235929, 0.25, 0.75, 0.12], "nex-agi/nex-n2.5-pro": [262144, 235929, 0.075, 0.25, 0.015], "nex-agi/nex-n2.5-mini": [262144, 235929, 0.025, 0.1, 0.0025], "perplexity/sonar-reasoning-pro": [128000, 115200, 2, 8], "perplexity/sonar-pro": [200000, 8000, 3, 15], "perplexity/sonar-pro-search": [200000, 8000, 3, 15], "perplexity/sonar": [127072, 114364, 1, 1], "perplexity/sonar-deep-research": [128000, 115200, 2, 8], "undi95/remm-slerp-l2-13b": [6144, 5529, 0.35, 0.65], "bytedance/ui-tars-1.5-7b": [128000, 2048, 0.1, 0.2, 0.1], "~anthropic/claude-sonnet-latest": [1000000, 128000, 2, 10, 0.1, 2.5], "~anthropic/claude-haiku-latest": [1000000, 128000, 0.1, 0.5, 0.01, 0.125], "~anthropic/claude-fable-latest": [1000000, 128000, 10, 50, 0.25, 12.5], "~anthropic/claude-opus-latest": [1000000, 128000, 4, 20, 0.2, 5], "recursive/flint-v1.0:free": [262144, 235929, 0, 0], "cognitivecomputations/dolphin-mistral-24b-venice-edition": [128000, 8192, 0.2, 0.9], "inclusionai/ling-3.0-flash": [262144, 32768, 0.021, 0.063, 0.0042], "inclusionai/ling-3.0-flash-vl": [131072, 32768, 0.06, 0.18, 0.012], "inclusionai/ling-3.1-flash": [262144, 235929, 0.075, 0.225, 0.015], "writer/palmyra-x5": [1040000, 8192, 0.6, 6], "inception/mercury-2": [128000, 50000, 0.25, 0.75, 0.025], "inception/mercury-3": [1000000, 131072, 0.1, 0.35, 0.01], "inception/mercury-2.5": [260000, 65536, 0.04, 0.15, 0.004], "sakana/sakana-namazu": [262144, 65536, 0.95, 4, 0.15], "sakana/fugu-max": [1000000, 128000, 2, 6, 0.25], "sakana/fugu-ultra": [1000000, 128000, 5, 30, 0.5], "sakana/fugu-ultra-v2": [1000000, 128000, 5, 30, 0.5], "cohere/command-r-plus-08-2024": [128000, 4000, 2.5, 10], "cohere/command-a": [256000, 8192, 2.5, 10], "cohere/command-r7b-12-2024": [128000, 4000, 0.0375, 0.15], "cohere/command-a-plus": [192000, 64000, 0.3, 1.5, 0.15], "cohere/command-r-08-2024": [128000, 4000, 0.15, 0.6], "cohere/north-mini-code:free": [256000, 64000, 0, 0], "tencent/hunyuan-a13b-instruct": [131072, 117964, 0.14, 0.57], "tencent/hy3-preview": [262144, 235929, 0.18, 0.6, 0.06], "tencent/hy-mt2-7b": [8192, 4096, 0.074, 0.295], "tencent/hy-mt2-1.8b": [8192, 4096, 0.044, 0.177], "tencent/hy4-preview": [1048576, 64000, 0.7506, 2.2509, 0.0378], "tencent/hy-mt2-30b-a3b": [8192, 4096, 0.074, 0.295], "tencent/hy3": [262144, 128000, 0.0825, 0.33, 0.020625], "mistralai/mistral-large-4-0": [1048576, 262144, 1.36, 4.18, 0.14], "mistralai/mistral-nemo": [131072, 16384, 0.029, 0.03], "mistralai/mistral-saba": [32768, 26214, 0.2, 0.6, 0.02], "mistralai/ministral-8b-2512": [262144, 209715, 0.15, 0.15, 0.015], "mistralai/ministral-3b-2512": [131072, 104857, 0.1, 0.1, 0.01], "mistralai/mistral-large": [128000, 102400, 2, 6, 0.2], "mistralai/mistral-large-2407": [131072, 104857, 2, 6, 0.2], "mistralai/mistral-small-3.1-24b-instruct": [128000, 102400, 0.351, 0.555], "mistralai/mistral-small-2603": [262144, 209715, 0.15, 0.6, 0.015], "mistralai/mistral-medium-3.1": [131072, 104857, 0.4, 2, 0.04], "mistralai/mistral-large-2512": [262144, 209715, 0.5, 1.5, 0.05], "mistralai/mixtral-8x22b-instruct": [65536, 52428, 2, 6, 0.2], "mistralai/mistral-medium-3-5": [262144, 209715, 1.5, 7.5], "mistralai/ministral-14b-2512": [262144, 209715, 0.2, 0.2, 0.02], "mistralai/mistral-small-24b-instruct-2501": [32768, 16384, 0.05, 0.08], "mistralai/voxtral-small-24b-2507": [32768, 26214, 0.1, 0.3, 0.01], "mistralai/mistral-medium-3": [131072, 104857, 0.4, 2, 0.04], "mistralai/mistral-small-3.2-24b-instruct": [256000, 16384, 0.075, 0.2], "mistralai/codestral-2508": [256000, 204800, 0.3, 0.9, 0.03], "mistralai/devstral-2512": [262144, 209715, 0.4, 2, 0.04], "scaledown/summarize": [1000000, 4000, 0.04, 0], "scaledown/extract": [1000000, 900000, 0.04, 0], "xiaomi/mimo-v2.6-flash": [1050000, 131072, 0.14, 0.28, 0.0028], "xiaomi/mimo-v2.6-pro-ultraspeed": [1048576, 131072, 4.35, 8.7, 0.036], "xiaomi/mimo-v2.5-pro": [1050000, 945000, 0.3045, 0.609, 0.0028], "xiaomi/mimo-v2.5": [1050000, 945000, 0.119, 0.238, 0.00255], "xiaomi/mimo-v2.6-pro": [1050000, 131072, 0.435, 0.87, 0.0036], "poolside/laguna-xs-2.1": [262144, 32768, 0.06, 0.12, 0.03], "poolside/laguna-s-2.1:free": [262144, 32768, 0, 0], "poolside/laguna-xs-2.1:free": [262144, 32768, 0, 0], "poolside/laguna-s-2.1": [1048576, 131072, 0.09, 0.18, 0.009], "~z-ai/glm-flash-latest": [1048576, 131072, 0.0413, 0.0758, 0.03], "~z-ai/glm-latest": [1048576, 943718, 0.0699, 1.4, 0.0689], "moonshotai/kimi-k2.7-code": [262144, 235929, 0.6712, 3.35, 0.15], "moonshotai/kimi-k2": [131072, 98304, 0.57, 2.3], "moonshotai/kimi-k2-thinking": [262144, 98304, 0.6, 2.5, 0.15], "moonshotai/kimi-k2-0905": [262144, 98304, 0.6, 2.5], "moonshotai/kimi-k2.5": [262144, 235929, 0.5, 2.5, 0.15], "moonshotai/kimi-k2.6": [262144, 235929, 0.65, 3.41, 0.15], "moonshotai/kimi-k3": [1048576, 943718, 0.159, 20, 0.149], "moonshotai/kimi-k3.1-pro": [1048576, 943718, 2, 10, 0.2], "thinkingmachines/inkling": [524288, 471859, 1, 4.05, 0.17], "thinkingmachines/inkling-small": [524288, 262144, 0.45, 1.2, 0.1], "thinkingmachines/inkling-small:free": [1048576, 262144, 0, 0], "thinkingmachines/inkling:free": [1048576, 262144, 0, 0], "nousresearch/hermes-4-405b": [131072, 117964, 1, 3], "nousresearch/hermes-3-llama-3.1-70b": [131072, 16384, 0.7, 0.7], "nousresearch/hermes-3-llama-3.1-405b": [131072, 16384, 1, 1], "~moonshotai/kimi-latest": [1048576, 943718, 0.151, 8.94, 0.15], "aion-labs/aion-2.0": [131072, 32768, 0.8, 1.6, 0.2], "aion-labs/aion-3.5": [262144, 32768, 3, 6, 0.75], "aion-labs/aion-3.0": [131072, 32768, 3, 6, 0.75], "aion-labs/aion-3.5-mini": [262144, 32768, 0.7, 1.4, 0.18], "aion-labs/aion-rp-llama-3.1-8b": [32768, 29491, 0.8, 1.6], "aion-labs/aion-3.0-mini": [131072, 32768, 0.7, 1.4, 0.18], "xingchen-agi/xing4.0-29b-a4b:free": [262144, 235929, 0, 0], "meta/muse-spark-1.2-contributor": [1048576, 943718, 0.1, 0.2, 0.002], "meta/muse-spark-1.3-contributor": [1048576, 943718, 0.1, 0.2, 0.002], "meta/muse-spark-1.3": [1048576, 943718, 1.25, 4.25, 0.15], "meta/muse-glimmer-30b": [131072, 16384, 0.3, 1.2, 0.04], "meta/muse-wonder": [1048576, 943718, 4, 20, 0.2], "meta/muse-spark-1.1": [1048576, 943718, 1.25, 4.25, 0.15], "meta/muse-spark-open": [1048576, 943718, 1.25, 4.25, 0.15], "meta/muse-spark-1.2": [1048576, 943718, 1.25, 4.25, 0.15], "~x-ai/grok-latest": [500000, 450000, 2, 6, 0.5], "moondream/moondream3.1-9b-a2b": [32000, 4096, 0.3, 2.5], "moondream/moondream3-preview": [32000, 4096, 0.3, 2.5], "anthropic/claude-opus-4.7": [1000000, 128000, 5, 25, 0.5, 6.25], "anthropic/claude-sonnet-4.5": [1000000, 64000, 3, 15, 0.3, 3.75], "anthropic/claude-fable-5.1": [1000000, 128000, 10, 50, 0.25, 12.5], "anthropic/claude-opus-4.8": [1000000, 128000, 5, 25, 0.5, 6.25], "anthropic/claude-fable-5": [1000000, 128000, 10, 50, 1, 12.5], "anthropic/claude-opus-4.1": [200000, 32000, 15, 75, 1.5, 18.75], "anthropic/claude-sonnet-4.6": [1000000, 128000, 3, 15, 0.3, 3.75], "anthropic/claude-haiku-5.5": [1000000, 128000, 0.1, 0.5, 0.01, 0.125], "anthropic/claude-haiku-4.5": [200000, 64000, 1, 5, 0.1, 1.25], "anthropic/claude-sonnet-5.5": [1000000, 128000, 2, 10, 0.1, 2.5], "anthropic/claude-opus-5.5": [1000000, 128000, 4, 20, 0.2, 5], "anthropic/claude-sonnet-5": [1000000, 128000, 2, 10, 0.2, 2.5], "anthropic/claude-opus-4.6": [1000000, 128000, 5, 25, 0.5, 6.25], "anthropic/claude-opus-5": [1000000, 128000, 5, 25, 0.5, 6.25], "anthropic/claude-opus-4.5": [200000, 64000, 5, 25, 0.5, 6.25], "~deepseek/deepseek-v4-flash-latest": [1048576, 943718, 0.0422, 0.1694, 0.028], "~deepseek/deepseek-flash-latest": [1048576, 393216, 0.04, 0.5, 0.03], "~deepseek/deepseek-pro-latest": [1048576, 393216, 0.1188, 8, 0.12], "openai/gpt-5.4-nano": [400000, 128000, 0.2, 1.25, 0.02], "openai/gpt-5.5-pro": [1050000, 128000, 30, 180], "openai/gpt-6-sol": [1050000, 128000, 2, 10, 0.2, 2.5], "openai/gpt-5.1": [400000, 128000, 1.25, 10, 0.125], "openai/gpt-5.4-image-2": [272000, 128000, 8, 15, 2], "openai/gpt-oss-safeguard-20b": [131072, 65536, 0.075, 0.3, 0.0375], "openai/gpt-6.1-sol": [1050000, 128000, 2, 10, 0.1, 2.5], "openai/gpt-6.1-sol-pro": [1050000, 128000, 2, 10, 0.1, 2.5], "openai/gpt-5.2-chat": [128000, 32000, 1.75, 14, 0.175], "openai/gpt-4o-2024-11-20": [128000, 16384, 2.5, 10, 1.25], "openai/o3-mini-high": [200000, 100000, 1.1, 4.4, 0.55], "openai/o1-pro": [200000, 100000, 150, 600], "openai/gpt-5.4-pro": [1050000, 128000, 30, 180], "openai/gpt-5": [400000, 128000, 1.25, 10, 0.125], "openai/gpt-5.6-terra-pro": [1050000, 128000, 2, 12, 0.2, 2.5], "openai/gpt-5.2-pro": [400000, 128000, 21, 168], "openai/gpt-oss-120b": [131072, 65536, 0.15, 0.6, 0.075], "openai/gpt-3.5-turbo-0613": [4095, 3685, 1, 2], "openai/gpt-6-luna-pro": [1050000, 128000, 0.1, 0.5, 0.01, 0.125], "openai/gpt-5.1-codex-mini": [400000, 128000, 0.25, 2, 0.03], "openai/o1": [200000, 100000, 15, 60, 7.5], "openai/gpt-5.5": [1050000, 128000, 5, 30, 0.5], "openai/gpt-audio-mini": [128000, 16384, 0.6, 2.4], "openai/gpt-5-nano": [400000, 128000, 0.05, 0.4, 0.005], "openai/gpt-5.2": [400000, 128000, 1.75, 14, 0.175], "openai/gpt-6-astra-pro": [1050000, 128000, 10, 50, 1, 12.5], "openai/gpt-5.6-luna-pro": [1050000, 128000, 0.2, 1.2, 0.02, 0.25], "openai/gpt-4o": [128000, 16384, 2.5, 10, 1.25], "openai/gpt-5.3-codex": [400000, 128000, 1.75, 14, 0.175], "openai/gpt-5-image-mini": [400000, 128000, 2.5, 2, 0.25], "openai/gpt-oss-20b": [131072, 32768, 0.018, 0.09, 0.009], "openai/gpt-5.6-sol": [1050000, 128000, 4, 20, 0.4, 5], "openai/gpt-5.4-mini": [400000, 128000, 0.75, 4.5, 0.075], "openai/gpt-4": [8191, 4096, 30, 60], "openai/gpt-3.5-turbo-16k": [16385, 4096, 3, 4], "openai/gpt-5.6-sol-pro": [1050000, 128000, 4, 20, 0.4, 5], "openai/gpt-4.1-mini": [1047576, 32768, 0.4, 1.6, 0.1], "openai/gpt-4o-mini": [128000, 16384, 0.15, 0.6, 0.075], "openai/gpt-5.1-codex": [400000, 128000, 1.25, 10, 0.13], "openai/gpt-5.6-terra": [1050000, 128000, 2, 12, 0.2, 2.5], "openai/gpt-5-mini": [400000, 128000, 0.25, 2, 0.025], "openai/gpt-6.1-terra": [1050000, 128000, 1, 5, 0.05, 1.25], "openai/gpt-4o-2024-08-06": [128000, 16384, 2.5, 10, 1.25], "openai/gpt-audio": [128000, 16384, 2.5, 10], "openai/gpt-6-luna": [1050000, 128000, 0.1, 0.5, 0.01, 0.125], "openai/gpt-6-sol-pro": [1050000, 128000, 2, 10, 0.2, 2.5], "openai/gpt-4-turbo": [128000, 4096, 10, 30], "openai/gpt-6-astra": [1050000, 128000, 10, 50, 1, 12.5], "openai/o3-pro": [200000, 100000, 20, 80], "openai/gpt-5.1-codex-max": [400000, 128000, 1.25, 10, 0.125], "openai/o3-mini": [200000, 100000, 1.1, 4.4, 0.55], "openai/gpt-4o-mini-2024-07-18": [128000, 16384, 0.15, 0.6, 0.075], "openai/gpt-5.6-luna": [1050000, 128000, 0.2, 1.2, 0.02, 0.25], "openai/gpt-5.2-codex": [400000, 128000, 1.75, 14, 0.175], "openai/o4-mini-high": [200000, 100000, 1.1, 4.4, 0.275], "openai/gpt-4.1-nano": [1047576, 942818, 0.1, 0.4, 0.03], "openai/gpt-chat-latest": [400000, 128000, 5, 30, 0.5], "openai/o3": [200000, 100000, 2, 8, 0.5], "openai/o4-mini": [200000, 100000, 1.1, 4.4, 0.275], "openai/gpt-4o-2024-05-13": [128000, 4096, 5, 15], "openai/gpt-5-image": [400000, 128000, 10, 10, 1.25], "openai/gpt-5-pro": [400000, 128000, 15, 120], "openai/gpt-4.1": [1047576, 32768, 2, 8, 0.5], "openai/gpt-5.4": [1050000, 128000, 2.5, 15, 0.25], "perceptron/perceptron-mk1": [32768, 8192, 0.15, 1.5], "perceptron/perceptron-mk1.5": [36864, 8192, 0.15, 1.5], "google/gemini-3.1-pro-preview": [1048576, 65536, 2, 12, 0.2, 0.375], "google/gemma-3-12b-it": [131072, 16384, 0.05, 0.15], "google/gemini-3-pro-image": [131072, 32768, 2, 12, 0.2, 0.375], "google/gemini-nano-banana-2.1": [65536, 58982, 1.5, 7.5], "google/gemma-2-27b-it": [8192, 2048, 0.65, 0.65], "google/gemini-2.5-flash-image": [32768, 8192, 0.3, 2.5, 0.03, 0.083333], "google/gemini-3.5-flash": [1048576, 65536, 1.5, 9, 0.15, 0.083333], "google/lyria-3-clip-preview": [1048576, 65536, 0, 0], "google/lyria-3-pro-preview": [1048576, 65536, 0, 0], "google/gemini-3.5-flash-lite": [1048576, 65536, 0.3, 2.5, 0.03, 0.083333], "google/gemini-3.1-flash-lite-preview": [1048576, 65536, 0.25, 1.5, 0.025, 0.083333], "google/gemini-2.5-flash": [1048576, 65535, 0.3, 2.5, 0.03, 0.083333], "google/gemini-3.1-flash-lite-image": [65536, 58982, 0.25, 1.5], "google/gemini-3.1-flash-image": [131072, 32768, 0.5, 3], "google/gemma-4-26b-a4b-it:free": [262144, 32768, 0, 0], "google/gemini-2.5-flash-lite": [1048576, 65535, 0.1, 0.4, 0.01, 0.083333], "google/gemini-3-flash-preview": [1048576, 65536, 0.5, 3, 0.05, 0.083333], "google/gemini-3.1-flash-image-preview": [65536, 58982, 0.5, 3], "google/gemini-3.6-flash": [1048576, 65536, 0.75, 3.75, 0.075, 0.041667], "google/gemini-3.1-flash-lite": [1048576, 65536, 0.25, 1.5, 0.025, 0.083333], "google/gemma-4-31b-it:free": [262144, 32768, 0, 0], "google/gemini-2.5-pro": [1048576, 65536, 1.25, 10, 0.125, 0.375], "google/gemini-3.1-pro-preview-customtools": [1048576, 65536, 2, 12, 0.2, 0.375], "google/gemini-4-argon": [1048576, 943718, 2, 10, 0.1, 0.1875], "google/gemini-3.8-flash": [1048576, 65536, 0.825, 4.125, 0.0825, 0.041667], "google/gemini-2.5-pro-preview": [1048576, 65536, 1.25, 10, 0.125, 0.375], "google/gemma-3-27b-it": [131072, 117964, 0.08, 0.35, 0.04], "google/gemma-4-26b-a4b-it": [262144, 235929, 0.0765, 0.255, 0.0425], "google/gemma-4-31b-it": [262144, 16384, 0.2, 0.4], "google/gemma-3-4b-it": [131072, 117964, 0.04, 0.05, 0.02], "google/gemini-3.7-flash": [1048576, 65536, 0.75, 3.75, 0.075, 0.041667], "google/gemini-3-pro-image-preview": [65536, 32768, 2, 12, 0.2, 0.375], "microsoft/phi-4": [16384, 14745, 0.07, 0.14], "liquid/lfm-2.5-24b-a2b": [128000, 8192, 0.05, 0.7, 0.025], "liquid/lfm-2.5-2.6b:free": [65536, 8192, 0, 0], "liquid/lfm-2.5-2.6b": [128000, 8192, 0.35, 0.5, 0.04], "gryphe/mythomax-l2-13b": [8192, 3686, 0.08, 0.11], "deepseek/deepseek-chat": [163840, 16000, 0.2574, 1.0287], "deepseek/deepseek-v3.2-exp": [163840, 147456, 0.27, 0.41], "deepseek/deepseek-v4.1-flash": [1048576, 393216, 0.0477, 0.1908, 0.000954], "deepseek/deepseek-v4-pro-0813": [1048576, 393216, 0.66, 1.98, 0.022], "deepseek/deepseek-v4-flash": [1048576, 943717, 0.091, 0.182, 0.0182], "deepseek/deepseek-v4-flash-vision-exp": [1048576, 262144, 0.2156, 0.6468, 0.00686], "deepseek/deepseek-chat-v3-0324": [163840, 115200, 0.29, 1.14, 0.11], "deepseek/deepseek-r1-0528": [163840, 32768, 0.5, 2.15, 0.35], "deepseek/deepseek-v3.2": [163840, 65536, 0.28, 0.42, 0.028], "deepseek/deepseek-chat-v3.1": [163840, 32768, 0.25, 0.95, 0.13], "deepseek/deepseek-v4-pro": [1048576, 384000, 0.730104, 1.460208, 0.060842], "deepseek/deepseek-v4-flash-0731": [1048576, 131072, 0.04444, 0.13332, 0.001414], "deepseek/deepseek-v4.1-flash-1017": [1048576, 393216, 0.15, 0.6, 0.003], "deepseek/deepseek-v3.1-terminus": [163840, 147456, 0.27, 1], "~openai/gpt-sol-latest": [1050000, 128000, 2, 10, 0.1, 2.5], "~openai/gpt-mini-latest": [400000, 128000, 0.75, 4.5, 0.075], "~openai/gpt-astra-latest": [1050000, 128000, 10, 50, 1, 12.5], "~openai/gpt-luna-latest": [1050000, 128000, 0.1, 0.5, 0.01, 0.125], "~openai/gpt-terra-latest": [1050000, 128000, 1, 5, 0.05, 1.25], "stepfun/step-3.5-flash": [262144, 65536, 0.1, 0.3], "stepfun/step-3.7-flash": [262144, 230400, 0.2, 1.15, 0.04], "stepfun/step-5-preview": [1048576, 64000, 1, 2.7, 0.1], "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free": [256000, 65536, 0, 0], "nvidia/nemotron-3-super-120b-a12b:free": [262144, 235929, 0, 0], "nvidia/nemotron-3-super-120b-a12b": [262144, 235929, 0.3, 2.4, 0.15], "nvidia/nemotron-3.5-lightning:free": [1000000, 65536, 0, 0], "nvidia/nemotron-3-nano-30b-a3b": [262144, 235929, 0.06, 0.24], "nvidia/nemotron-3.5-super-vl": [1048576, 235929, 0.15, 0.5, 0.02], "nvidia/nemotron-3.5-lightning": [262144, 235929, 0.07, 0.2, 0.04], "nvidia/nemotron-3-ultra-550b-a55b:free": [1000000, 65536, 0, 0], "nvidia/nemotron-3.5-content-safety": [131072, 117964, 0.2, 0.2], "nvidia/nemotron-3.5-super-vl:free": [1000000, 131072, 0, 0], "nvidia/nemotron-3.5-content-safety:free": [128000, 8192, 0, 0], "nvidia/nemotron-3-ultra-550b-a55b": [262144, 182520, 0.6, 2.4, 0.12], "morph/morph-v3-fast": [262144, 131072, 0.8, 1.2], "morph/morph-v3-large": [262144, 131072, 0.9, 1.9] }, "minimax": { "MiniMax-M3.1-Flash": [1000000, 524288, 0.15, 0.6, 0.015], "MiniMax-M2.1": [204800, 131072, 0.3, 1.2, 0.03, 0.375], "MiniMax-M3": [1000000, 524288, 0.3, 1.2, 0.06], "MiniMax-M2.5-highspeed": [204800, 131072, 0.6, 2.4, 0.03, 0.375], "MiniMax-M2": [204800, 131072, 0.3, 1.2], "MiniMax-M2.7-highspeed": [204800, 131072, 0.6, 2.4, 0.06, 0.375], "MiniMax-M2.5": [204800, 131072, 0.3, 1.2, 0.03, 0.375], "MiniMax-M2.7": [204800, 131072, 0.3, 1.2, 0.06, 0.375] }, "amazon-bedrock": { "anthropic.claude-opus-4-5-20251101-v1:0": [200000, 64000, 5, 25, 0.5, 6.25], "us.anthropic.claude-opus-4-6-v1": [1000000, 128000, 5.5, 27.5, 0.55, 6.875], "amazon.nova-pro-v1:0": [300000, 10000, 0.8, 3.2, 0.2, 0.8], "anthropic.claude-opus-5": [1000000, 128000, 5, 25, 0.5, 6.25], "global.openai.gpt-6-luna": [1050000, 128000, 0.1, 0.5, 0.01, 0.125], "us.anthropic.claude-opus-5": [1000000, 128000, 5.5, 27.5, 0.55, 6.875], "mistral.ministral-3-8b-instruct": [128000, 4096, 0.15, 0.15], "amazon.nova-micro-v1:0": [128000, 10000, 0.035, 0.14, 0.00875, 0.035], "apac.amazon.nova-lite-v1:0": [300000, 10000, 0.063, 0.252, 0.01575, 0.063], "global.anthropic.claude-fable-5-1": [1000000, 128000, 10, 50, 0.25, 12.5], "in.openai.gpt-5.6-luna": [1050000, 128000, 0.22, 1.32, 0.022, 0.275], "anthropic.claude-haiku-5-5": [1000000, 128000, 0.1, 0.5, 0.01, 0.125], "au.anthropic.claude-opus-4-7": [1000000, 128000, 5.5, 27.5, 0.55, 6.875], "eu.amazon.nova-2-lite-v1:0": [1000000, 65535, 0.374, 3.157, 0.0935, 0.374], "nvidia.nemotron-nano-9b-v2": [131072, 8192, 0.06, 0.23], "meta.llama3-1-70b-instruct-v1:0": [128000, 4096, 0.72, 0.72], "global.anthropic.claude-sonnet-5": [1000000, 128000, 2, 10, 0.2, 2.5], "global.anthropic.claude-sonnet-4-5-20250929-v1:0": [200000, 64000, 3, 15, 0.3, 3.75], "global.openai.gpt-5.6-terra": [1050000, 128000, 2, 12, 0.2, 2.5], "minimax.minimax-m2.5": [196608, 98304, 0.3, 1.2], "global.openai.gpt-6-sol": [1050000, 128000, 2, 10, 0.2, 2.5], "global.zai.glm-5.3": [1000000, 128000, 1.68, 5.28, 0.312, 2.1], "deepseek.v3-v1:0": [163840, 81920, 0.58, 1.68], "eu.anthropic.claude-haiku-5-5": [1000000, 128000, 0.11, 0.55, 0.011, 0.1375], "us.amazon.nova-2-lite-v1:0": [1000000, 65535, 0.33, 2.75, 0.0825, 0.33], "eu.amazon.nova-micro-v1:0": [128000, 10000, 0.04, 0.16, 0.01, 0.04], "eu.anthropic.claude-sonnet-4-5-20250929-v1:0": [200000, 64000, 3.3, 16.5, 0.33, 4.125], "google.gemma-3-4b-it": [131072, 4096, 0.04, 0.08], "jp.anthropic.claude-opus-5": [1000000, 128000, 5.5, 27.5, 0.55, 6.875], "google.gemma-3-12b-it": [131072, 8192, 0.09, 0.29], "us.anthropic.claude-opus-4-8": [1000000, 128000, 5.5, 27.5, 0.55, 6.875], "us.anthropic.claude-sonnet-4-5-20250929-v1:0": [200000, 64000, 3.3, 16.5, 0.33, 4.125], "us.anthropic.claude-sonnet-5": [1000000, 128000, 2.2, 11, 0.22, 2.75], "qwen.qwen3-coder-30b-a3b-v1:0": [262144, 131072, 0.15, 0.6], "au.anthropic.claude-opus-4-8": [1000000, 128000, 5.5, 27.5, 0.55, 6.875], "us.anthropic.claude-haiku-5-5": [1000000, 128000, 0.11, 0.55, 0.011, 0.1375], "anthropic.claude-sonnet-4-6": [1000000, 128000, 3.3, 16.5, 0.33, 4.125], "us.amazon.nova-lite-v1:0": [300000, 10000, 0.06, 0.24, 0.015, 0.06], "us.openai.gpt-5.6-terra": [1050000, 128000, 2.2, 13.2, 0.22, 2.75], "global.anthropic.claude-opus-4-5-20251101-v1:0": [200000, 64000, 5, 25, 0.5, 6.25], "au.anthropic.claude-opus-5-5": [1000000, 128000, 4.4, 22, 0.22, 5.5], "global.anthropic.claude-fable-5": [1000000, 128000, 10, 50, 1, 12.5], "global.openai.gpt-6.1-sol": [1050000, 128000, 2, 10, 0.1, 2.5], "apac.anthropic.claude-sonnet-4-20250514-v1:0": [200000, 64000, 3, 15, 0.3, 3.75], "global.openai.gpt-5.6-luna": [1050000, 128000, 0.2, 1.2, 0.02, 0.25], "jp.anthropic.claude-sonnet-4-6": [1000000, 128000, 3.3, 16.5, 0.33, 4.125], "xai.grok-4.3": [1000000, 131072, 1.25, 2.5, 0.2], "openai.gpt-5.6-luna": [1050000, 128000, 0.22, 1.32, 0.022, 0.275], "writer.palmyra-x4-v1:0": [122880, 8192, 2.5, 10], "jp.amazon.nova-2-lite-v1:0": [1000000, 65535, 0.396, 3.311, 0.099, 0.396], "mistral.ministral-3-14b-instruct": [128000, 4096, 0.2, 0.2], "openai.gpt-oss-20b-1:0": [131072, 128000, 0.07, 0.3], "zai.glm-4.7-flash": [202752, 131072, 0.07, 0.4], "google.gemma-4-31b": [262144, 32768, 0.14, 0.4], "jp.anthropic.claude-opus-4-7": [1000000, 128000, 5.5, 27.5, 0.55, 6.875], "anthropic.claude-opus-4-6-v1": [1000000, 128000, 5.5, 27.5, 0.55, 6.875], "global.anthropic.claude-sonnet-4-20250514-v1:0": [200000, 64000, 3, 15, 0.3, 3.75], "openai.gpt-5.6-terra": [1050000, 128000, 2.2, 13.2, 0.22, 2.75], "openai.gpt-5.6-sol": [1050000, 128000, 4.4, 22, 0.44, 5.5], "us.anthropic.claude-sonnet-4-6": [1000000, 128000, 3.3, 16.5, 0.33, 4.125], "meta.llama4-maverick-17b-instruct-v1:0": [1000000, 8192, 0.24, 0.97], "mistral.magistral-small-2509": [128000, 40000, 0.5, 1.5], "minimax.minimax-m2": [204608, 128000, 0.3, 1.2], "global.openai.gpt-6-astra": [1050000, 128000, 10, 50, 1, 12.5], "qwen.qwen3-next-80b-a3b": [262144, 262000, 0.15, 1.2], "nvidia.nemotron-super-3-120b": [262144, 131072, 0.15, 0.65], "apac.amazon.nova-micro-v1:0": [128000, 10000, 0.037, 0.148, 0.00925, 0.037], "mistral.mistral-large-3-675b-instruct": [262144, 8192, 0.5, 1.5], "google.gemma-4-26b-a4b": [262144, 32768, 0.13, 0.4], "in.openai.gpt-5.6-terra": [1050000, 128000, 2.2, 13.2, 0.22, 2.75], "in.anthropic.claude-opus-5": [1000000, 128000, 5.5, 27.5, 0.55, 6.875], "eu.anthropic.claude-opus-5": [1000000, 128000, 5.5, 27.5, 0.55, 6.875], "jp.anthropic.claude-sonnet-5": [1000000, 128000, 2.2, 11, 0.22, 2.75], "openai.gpt-oss-120b": [131072, 131072, 0.15, 0.6], "eu.anthropic.claude-opus-4-8": [1000000, 128000, 5.5, 27.5, 0.55, 6.875], "us.deepseek.r1-v1:0": [128000, 32768, 1.35, 5.4], "us.anthropic.claude-opus-5-5": [1000000, 128000, 4.4, 22, 0.22, 5.5], "anthropic.claude-opus-4-7": [1000000, 128000, 5, 25, 0.5, 6.25], "mistral.voxtral-mini-3b-2507": [32768, 4096, 0.04, 0.04], "meta.llama3-3-70b-instruct-v1:0": [128000, 4096, 0.72, 0.72], "global.anthropic.claude-sonnet-4-6": [1000000, 128000, 3, 15, 0.3, 3.75], "xai.grok-4.6": [500000, 500000, 2.2, 6.6, 0.55], "anthropic.claude-fable-5-1": [1000000, 128000, 10, 50, 0.25, 12.5], "mistral.voxtral-small-24b-2507": [32768, 8192, 0.1, 0.3], "openai.gpt-5.5": [1000000, 128000, 5.5, 33, 0.55], "global.anthropic.claude-haiku-5-5": [1000000, 128000, 0.1, 0.5, 0.01, 0.125], "mistral.devstral-2-123b": [262144, 8192, 0.4, 2], "us.meta.llama4-maverick-17b-instruct-v1:0": [1000000, 8192, 0.24, 0.97], "jp.anthropic.claude-opus-4-8": [1000000, 128000, 5.5, 27.5, 0.55, 6.875], "zai.glm-4.7": [202752, 131072, 0.6, 2.2], "eu.anthropic.claude-opus-4-6-v1": [1000000, 128000, 5.5, 27.5, 0.55, 6.875], "openai.gpt-6.1-sol": [1050000, 128000, 2.2, 11, 0.11, 2.75], "openai.gpt-oss-20b": [131072, 131072, 0.07, 0.3], "in.anthropic.claude-sonnet-5": [1000000, 128000, 2.2, 11, 0.22, 2.75], "global.anthropic.claude-opus-5-5": [1000000, 128000, 4, 20, 0.2, 5], "ca.amazon.nova-lite-v1:0": [300000, 10000, 0.064, 0.256, 0.016, 0.064], "us.anthropic.claude-opus-4-5-20251101-v1:0": [200000, 64000, 5.5, 27.5, 0.55, 6.875], "au.anthropic.claude-sonnet-5-5": [1000000, 128000, 2.2, 11, 0.11, 2.75], "eu.anthropic.claude-sonnet-5-5": [1000000, 128000, 2.2, 11, 0.11, 2.75], "global.anthropic.claude-opus-5": [1000000, 128000, 5, 25, 0.5, 6.25], "us.openai.gpt-6-astra": [1050000, 128000, 11, 55, 1.1, 13.75], "anthropic.claude-sonnet-5": [1000000, 128000, 2, 10, 0.2, 2.5], "nvidia.nemotron-nano-12b-v2": [131072, 8192, 0.2, 0.6], "writer.palmyra-x5-v1:0": [1040000, 8192, 0.6, 6], "meta.llama4-scout-17b-instruct-v1:0": [10000000, 8192, 0.17, 0.66], "global.anthropic.claude-opus-4-6-v1": [1000000, 128000, 5, 25, 0.5, 6.25], "us.xai.grok-4.7": [500000, 500000, 2.2, 6.6, 0.55], "anthropic.claude-fable-5": [1000000, 128000, 10, 50, 1, 12.5], "us.anthropic.claude-opus-4-7": [1000000, 128000, 5.5, 27.5, 0.55, 6.875], "jp.anthropic.claude-sonnet-4-5-20250929-v1:0": [200000, 64000, 3.3, 16.5, 0.33, 4.125], "us.amazon.nova-premier-v1:0": [1000000, 10000, 2.5, 12.5, 0.625, 2.5], "eu.anthropic.claude-sonnet-4-20250514-v1:0": [200000, 64000, 3, 15, 0.3, 3.75], "global.anthropic.claude-sonnet-5-5": [1000000, 128000, 2, 10, 0.1, 2.5], "openai.gpt-6-luna": [1050000, 128000, 0.11, 0.55, 0.011, 0.1375], "us.amazon.nova-pro-v1:0": [300000, 10000, 0.8, 3.2, 0.2, 0.8], "au.anthropic.claude-haiku-5-5": [1000000, 128000, 0.11, 0.55, 0.011, 0.1375], "openai.gpt-5.4": [1000000, 128000, 2.75, 16.5, 0.275], "us.meta.llama3-1-8b-instruct-v1:0": [128000, 4096, 0.22, 0.22], "qwen.qwen3-235b-a22b-2507-v1:0": [262144, 131072, 0.22, 0.88], "us.writer.palmyra-x4-v1:0": [122880, 8192, 2.5, 10], "eu.anthropic.claude-haiku-4-5-20251001-v1:0": [200000, 64000, 1.1, 5.5, 0.11, 1.375], "openai.gpt-6-astra": [1050000, 128000, 11, 55, 1.1, 13.75], "eu.amazon.nova-pro-v1:0": [300000, 10000, 0.92, 3.68, 0.23, 0.92], "us.anthropic.claude-haiku-4-5-20251001-v1:0": [200000, 64000, 1.1, 5.5, 0.11, 1.375], "us-gov.openai.gpt-oss-20b-1:0": [128000, 16384, 0.084, 0.36], "us-gov.openai.gpt-oss-120b-1:0": [128000, 16384, 0.18, 0.72], "us.moonshotai.kimi-k3": [1048576, 128000, 3.3, 16.5, 0.33, 4.125], "us.openai.gpt-6-sol": [1050000, 128000, 2.2, 11, 0.22, 2.75], "moonshotai.kimi-k2.5": [262144, 16384, 0.6, 3], "us.xai.grok-4.6": [500000, 500000, 2.2, 6.6, 0.55], "us.zai.glm-5.3": [1000000, 128000, 1.848, 5.808, 0.3432, 2.31], "global.openai.gpt-5.6-sol": [1050000, 128000, 4, 20, 0.4, 5], "au.anthropic.claude-sonnet-4-6": [1000000, 128000, 3.3, 16.5, 0.33, 4.125], "openai.gpt-6-sol": [1050000, 128000, 2.2, 11, 0.22, 2.75], "us.meta.llama4-scout-17b-instruct-v1:0": [10000000, 8192, 0.17, 0.66], "us.anthropic.claude-fable-5": [1000000, 128000, 11, 55, 1.1, 13.75], "mistral.ministral-3-3b-instruct": [256000, 8192, 0.1, 0.1], "anthropic.claude-opus-4-8": [1000000, 128000, 5, 25, 0.5, 6.25], "amazon.nova-2-lite-v1:0": [1000000, 65535, 0.33, 2.75, 0.0825, 0.33], "in.anthropic.claude-haiku-4-5-20251001-v1:0": [200000, 64000, 1.1, 5.5, 0.11, 1.375], "eu.anthropic.claude-sonnet-4-6": [1000000, 128000, 3.3, 16.5, 0.33, 4.125], "us.meta.llama3-1-70b-instruct-v1:0": [128000, 4096, 0.72, 0.72], "eu.anthropic.claude-opus-4-7": [1000000, 128000, 5.5, 27.5, 0.55, 6.875], "us.openai.gpt-6.1-sol": [1050000, 128000, 2.2, 11, 0.11, 2.75], "anthropic.claude-haiku-4-5-20251001-v1:0": [200000, 64000, 1, 5, 0.1, 1.25], "eu.anthropic.claude-opus-4-5-20251101-v1:0": [200000, 64000, 5.5, 27.5, 0.55, 6.875], "au.anthropic.claude-sonnet-4-5-20250929-v1:0": [200000, 64000, 3.3, 16.5, 0.33, 4.125], "us.anthropic.claude-sonnet-4-20250514-v1:0": [200000, 64000, 3, 15, 0.3, 3.75], "global.anthropic.claude-opus-4-8": [1000000, 128000, 5, 25, 0.5, 6.25], "us.anthropic.claude-sonnet-5-5": [1000000, 128000, 2.2, 11, 0.11, 2.75], "eu.anthropic.claude-opus-5-5": [1000000, 128000, 4.4, 22, 0.22, 5.5], "anthropic.claude-opus-4-1-20250805-v1:0": [200000, 32000, 15, 75, 1.5, 18.75], "jp.anthropic.claude-opus-5-5": [1000000, 128000, 4.4, 22, 0.22, 5.5], "us.amazon.nova-micro-v1:0": [128000, 10000, 0.035, 0.14, 0.00875, 0.035], "au.anthropic.claude-opus-5": [1000000, 128000, 5.5, 27.5, 0.55, 6.875], "meta.llama3-1-8b-instruct-v1:0": [128000, 4096, 0.22, 0.22], "us.openai.gpt-5.6-luna": [1050000, 128000, 0.22, 1.32, 0.022, 0.275], "anthropic.claude-opus-5-5": [1000000, 128000, 4, 20, 0.2, 5], "openai.gpt-oss-120b-1:0": [131072, 128000, 0.15, 0.6], "au.anthropic.claude-haiku-4-5-20251001-v1:0": [200000, 64000, 1.1, 5.5, 0.11, 1.375], "us.meta.llama3-3-70b-instruct-v1:0": [128000, 4096, 0.72, 0.72], "jp.anthropic.claude-haiku-4-5-20251001-v1:0": [200000, 64000, 1.1, 5.5, 0.11, 1.375], "deepseek.r1-v1:0": [128000, 32768, 1.35, 5.4], "us.anthropic.claude-opus-4-1-20250805-v1:0": [200000, 32000, 15, 75, 1.5, 18.75], "amazon.nova-lite-v1:0": [300000, 10000, 0.06, 0.24, 0.015, 0.06], "moonshot.kimi-k2-thinking": [262144, 16000, 0.6, 2.5], "eu.anthropic.claude-sonnet-5": [1000000, 128000, 2.2, 11, 0.22, 2.75], "global.xai.grok-4.7": [500000, 500000, 2, 6, 0.5], "deepseek.v3.2": [163840, 81920, 0.62, 1.85], "global.moonshotai.kimi-k3": [1048576, 128000, 3, 15, 0.3, 3.75], "us.openai.gpt-6-luna": [1050000, 128000, 0.11, 0.55, 0.011, 0.1375], "jp.anthropic.claude-haiku-5-5": [1000000, 128000, 0.11, 0.55, 0.011, 0.1375], "google.gemma-3-27b-it": [131072, 8192, 0.23, 0.38], "au.anthropic.claude-opus-4-6-v1": [1000000, 128000, 5.5, 27.5, 0.55, 6.875], "anthropic.claude-sonnet-4-5-20250929-v1:0": [200000, 64000, 3, 15, 0.3, 3.75], "qwen.qwen3-vl-235b-a22b": [262144, 262000, 0.53, 2.66], "global.anthropic.claude-haiku-4-5-20251001-v1:0": [200000, 64000, 1, 5, 0.1, 1.25], "qwen.qwen3-32b-v1:0": [32768, 16384, 0.15, 0.6], "eu.anthropic.claude-fable-5": [1000000, 128000, 11, 55, 1.1, 13.75], "mistral.pixtral-large-2502-v1:0": [128000, 8192, 2, 6], "qwen.qwen3-coder-480b-a35b-v1:0": [131072, 65536, 0.45, 1.8], "apac.amazon.nova-pro-v1:0": [300000, 10000, 0.84, 3.36, 0.21, 0.84], "eu.mistral.pixtral-large-2502-v1:0": [128000, 8192, 2, 6], "global.amazon.nova-2-lite-v1:0": [1000000, 65535, 0.3, 2.5, 0.075, 0.3], "anthropic.claude-sonnet-5-5": [1000000, 128000, 2, 10, 0.1, 2.5], "minimax.minimax-m2.1": [196608, 131072, 0.3, 1.2], "us.anthropic.claude-fable-5-1": [1000000, 128000, 11, 55, 0.275, 13.75], "nvidia.nemotron-nano-3-30b": [262144, 8192, 0.06, 0.24], "zai.glm-5": [202752, 131072, 1, 3.2], "us.mistral.pixtral-large-2502-v1:0": [128000, 8192, 2, 6], "global.anthropic.claude-opus-4-7": [1000000, 128000, 5, 25, 0.5, 6.25], "qwen.qwen3-coder-next": [262144, 65536, 0.5, 1.2], "us.writer.palmyra-x5-v1:0": [1040000, 8192, 0.6, 6], "openai.gpt-oss-safeguard-120b": [128000, 16384, 0.15, 0.6], "google.gemma-4-e2b": [131072, 8192, 0.04, 0.08], "au.anthropic.claude-sonnet-5": [1000000, 128000, 2.2, 11, 0.22, 2.75], "us.openai.gpt-5.6-sol": [1050000, 128000, 4.4, 22, 0.44, 5.5], "openai.gpt-oss-safeguard-20b": [128000, 16384, 0.07, 0.2], "global.xai.grok-4.6": [500000, 500000, 2, 6, 0.5], "eu.amazon.nova-lite-v1:0": [300000, 10000, 0.069, 0.276, 0.01725, 0.069] }, "google-vertex": { "claude-opus-4@20250514": [200000, 32000, 15, 75, 1.5, 18.75], "gemini-3.1-pro-preview": [1048576, 65536, 2, 12, 0.2], "claude-opus-4-5@20251101": [200000, 64000, 5, 25, 0.5, 6.25], "claude-opus-4-6@default": [1000000, 128000, 5, 25, 0.5, 6.25], "gemini-3-pro-image": [65536, 32768, 2, 120, 0.2], "claude-haiku-4-5@20251001": [200000, 64000, 1, 5, 0.1, 1.25], "claude-sonnet-4@20250514": [200000, 64000, 3, 15, 0.3, 3.75], "claude-sonnet-5@default": [1000000, 128000, 2, 10, 0.2, 2.5], "gemini-nano-banana-2.1": [131072, 32768, 1.5, 30, 0.15], "claude-opus-4-8@default": [1000000, 128000, 5, 25, 0.5, 6.25], "gemini-2.5-flash-image": [32768, 32768, 0.3, 30], "gemini-3.5-flash": [1048576, 65536, 1.5, 9, 0.15], "claude-opus-4-1@20250805": [200000, 32000, 15, 75, 1.5, 18.75], "claude-opus-5@default": [1000000, 128000, 5, 25, 0.5, 6.25], "gemini-embedding-001": [2048, 1, 0.15, 0], "gemini-3.5-flash-lite": [1048576, 65536, 0.3, 2.5, 0.03], "gemini-2.5-flash-tts": [32768, 16384, 0.5, 10], "claude-opus-4-7@default": [1000000, 128000, 5, 25, 0.5, 6.25], "gemini-2.5-flash": [1048576, 65536, 0.3, 2.5, 0.03], "codestral-2": [128000, 8192, 0.3, 0.9], "gemini-3.1-flash-lite-image": [65536, 4096, 0.25, 30, 0.025], "gemini-3.1-flash-image": [131072, 32768, 0.5, 60, 0.05], "gemini-2.5-flash-lite": [1048576, 65536, 0.1, 0.4, 0.01], "gemini-3-flash-preview": [1048576, 65536, 0.5, 3, 0.05], "gemini-3.6-flash": [1048576, 65536, 0.75, 3.75, 0.075], "gemini-3.1-flash-lite": [1048576, 65536, 0.25, 1.5, 0.025], "claude-sonnet-5-5@default": [1000000, 128000, 2, 10, 0.1, 2.5], "claude-fable-5-1@default": [1000000, 128000, 10, 50, 0.25, 12.5], "gemini-2.5-pro-tts": [32768, 16384, 1, 20], "claude-sonnet-4-5@20250929": [200000, 64000, 3, 15, 0.3, 3.75], "gemini-2.5-pro": [1048576, 65536, 1.25, 10, 0.125], "claude-sonnet-4-6@default": [1000000, 128000, 3, 15, 0.3, 3.75], "gemini-3.1-pro-preview-customtools": [1048576, 65536, 2, 12, 0.2], "claude-haiku-5-5@default": [1000000, 128000, 0.1, 0.5, 0.01, 0.125], "gemini-4-argon": [1048576, 65536, 2, 10, 0.1], "gemini-3.8-flash": [1048576, 65536, 0.75, 3.75, 0.075], "mistral-medium-3": [131072, 131072, 0.4, 2], "claude-fable-5@default": [1000000, 128000, 10, 50, 1, 12.5], "claude-opus-5-5@default": [1000000, 128000, 4, 20, 0.2, 5], "gemini-3.7-flash": [1048576, 65536, 0.75, 3.75, 0.075], "mistral-small-2503": [128000, 16384, 0.1, 0.3], "qwen/qwen3-235b-a22b-instruct-2507-maas": [262144, 16384, 0.22, 0.88], "zai-org/glm-5.2-maas": [1000000, 64000, 1.4, 4.4, 0.14], "zai-org/glm-4.7-maas": [200000, 128000, 0.6, 2.2, 0.06], "zai-org/glm-5-maas": [200000, 128000, 1, 3.2, 0.1], "deepseek-ai/deepseek-v3.1-maas": [163840, 32768, 0.6, 1.7, 0.06], "deepseek-ai/deepseek-v3.2-maas": [163840, 65536, 0.56, 1.68, 0.056], "moonshotai/kimi-k2-thinking-maas": [262144, 262144, 0.6, 2.5, 0.06], "meta/llama-4-scout-17b-16e-instruct-maas": [1310720, 8192, 0.25, 0.7], "meta/llama-3.3-70b-instruct-maas": [128000, 8192, 0.72, 0.72], "meta/llama-4-maverick-17b-128e-instruct-maas": [524288, 8192, 0.35, 1.15], "xai/grok-4.6": [524288, 500000, 2, 6, 0.5], "xai/grok-4.1-fast-reasoning": [128000, 30000, 0.2, 0.5, 0.05], "xai/grok-4.20-non-reasoning": [2000000, 30000, 1.25, 2.5, 0.2], "xai/grok-4.7": [524288, 500000, 2, 6, 0.5], "xai/grok-4.1-fast-non-reasoning": [128000, 30000, 0.2, 0.5, 0.05], "xai/grok-4.3": [200000, 30000, 1.25, 2.5, 0.2], "xai/grok-4.20-reasoning": [2000000, 30000, 1.25, 2.5, 0.2], "openai/gpt-oss-120b-maas": [131072, 131072, 0.09, 0.36], "openai/gpt-oss-20b-maas": [131072, 32768, 0.07, 0.25, 0.007], "google/gemma-4-26b-a4b-it-maas": [262144, 128000, 0.15, 0.6, 0.015] }, "azure": { "gpt-5.4-nano": [400000, 128000, 0.2, 1.25, 0.02], "claude-sonnet-4-5": [200000, 64000, 3, 15, 0.3, 3.75], "gpt-6-sol": [1050000, 128000, 2, 10, 0.2, 2.5], "gpt-5.1": [400000, 128000, 1.25, 10, 0.125], "grok-4.6": [200000, 128000, 2, 6, 0.5], "text-embedding-ada-002": [8192, 1536, 0.1, 0], "cohere-embed-v3-english": [512, 1024, 0.1, 0], "phi-4": [128000, 4096, 0.125, 0.5], "gpt-6.1-sol": [1050000, 128000, 2, 10, 0.1, 2.5], "claude-sonnet-4-6": [1000000, 64000, 3, 15, 0.3, 3.75], "gpt-3.5-turbo-1106": [16384, 4096, 1, 2], "kimi-k2.7-code": [262144, 262144, 0.95, 4, 0.19], "cohere-embed-v-4-0": [128000, 1536, 0.12, 0], "claude-opus-5-5": [1000000, 128000, 4, 20, 0.2, 5], "grok-4-20-reasoning": [262000, 8192, 2, 6], "gpt-5.4-pro": [1050000, 128000, 30, 180], "gpt-5": [400000, 128000, 1.25, 10, 0.125], "deepseek-v4.1-flash": [1000000, 128000, 0.3, 1.2, 0.006], "gpt-image-2": [0, 0, 5, 30, 1.25], "claude-fable-5": [1000000, 128000, 10, 50, 1, 12.5], "mistral-medium-2505": [128000, 128000, 0.4, 2], "claude-fable-5-1": [1000000, 128000, 10, 50, 0.25, 12.5], "deepseek-v4-flash": [1000000, 384000, 0.19, 0.51], "gpt-5.1-codex-mini": [400000, 128000, 0.25, 2, 0.025], "model-router": [200000, 16384, 0.14, 0], "gpt-image-1": [0, 0, 5, 40, 1.25], "o1": [200000, 100000, 15, 60, 7.5], "gpt-5.5": [1050000, 128000, 5, 30, 0.5], "gpt-5-nano": [400000, 128000, 0.05, 0.4, 0.005], "phi-4-multimodal": [128000, 4096, 0.08, 0.32], "gpt-5.2": [400000, 128000, 1.75, 14, 0.175], "llama-4-scout-17b-16e-instruct": [128000, 8192, 0.2, 0.78], "deepseek-v3.2-speciale": [128000, 128000, 0.58, 1.68], "claude-opus-4-5": [200000, 64000, 5, 25, 0.5, 6.25], "gpt-image-2.5-sunburst": [0, 0, 5, 30, 1.25], "gpt-4o": [128000, 16384, 2.5, 10, 1.25], "gpt-image-2.5-flare": [0, 0, 5, 30, 1.25], "claude-opus-4-7": [1000000, 128000, 5, 25, 0.5, 6.25], "llama-4-maverick-17b-128e-instruct-fp8": [1000000, 16384, 0.25, 1], "ministral-3b": [128000, 8192, 0.04, 0.04], "gpt-5.3-codex": [400000, 128000, 1.75, 14, 0.175], "gpt-3.5-turbo-instruct": [4096, 4096, 1.5, 2], "grok-4-1-fast-reasoning": [128000, 8192, 0.2, 0.5, 0.05], "codex-mini": [200000, 100000, 1.5, 6, 0.375], "gpt-5.6-sol": [1050000, 128000, 4, 20, 0.4, 5], "gpt-5.4-mini": [400000, 128000, 0.75, 4.5, 0.075], "text-embedding-3-small": [8192, 1536, 0.02, 0], "phi-4-mini": [128000, 4096, 0.075, 0.3], "gpt-3.5-turbo-0125": [16384, 4096, 0.5, 1.5], "text-embedding-3-large": [8192, 3072, 0.13, 0], "kimi-k2.5": [262144, 262144, 0.6, 3], "gpt-4.1-mini": [1047576, 32768, 0.4, 1.6, 0.1], "grok-4.7": [500000, 500000], "gpt-4o-mini": [128000, 16384, 0.15, 0.6, 0.075], "codestral-2501": [256000, 256000, 0.3, 0.9], "claude-haiku-4-5": [200000, 64000, 1, 5, 0.1, 1.25], "llama-3.3-70b-instruct": [128000, 32768, 0.71, 0.71], "phi-4-reasoning": [32000, 4096, 0.125, 0.5], "deepseek-v3.2": [128000, 128000, 0.58, 1.68], "claude-sonnet-5": [1000000, 128000, 2, 10, 0.2, 2.5], "gpt-5.1-codex": [400000, 128000, 1.25, 10, 0.125], "claude-mythos-5": [1000000, 128000, 10, 50, 1, 12.5], "gpt-5-codex": [400000, 128000, 1.25, 10, 0.125], "gpt-5.6-terra": [1050000, 128000, 2, 12, 0.2, 2.5], "gpt-5-mini": [400000, 128000, 0.25, 2, 0.025], "claude-haiku-5-5": [1000000, 128000, 0.1, 0.5, 0.01, 0.125], "claude-opus-4-8": [1000000, 128000, 5, 25, 0.5, 6.25], "gpt-6-luna": [1050000, 128000, 0.1, 0.5, 0.01, 0.125], "gpt-4-turbo": [128000, 4096, 10, 30], "gpt-6-astra": [1050000, 128000, 10, 50, 1, 12.5], "gpt-5.1-codex-max": [400000, 128000, 1.25, 10, 0.125], "claude-opus-4-6": [1000000, 128000, 5, 25, 0.5, 6.25], "o3-mini": [200000, 100000, 1.1, 4.4, 0.55], "deepseek-v4-pro": [1000000, 384000, 1.74, 3.48], "gpt-image-1.5": [0, 0, 5, 32, 1.25], "phi-4-mini-reasoning": [128000, 4096, 0.075, 0.3], "gpt-5.6-luna": [1050000, 128000, 0.2, 1.2, 0.02, 0.25], "gpt-4-turbo-vision": [128000, 4096, 10, 30], "gpt-5.2-codex": [400000, 128000, 1.75, 14, 0.175], "kimi-k2.6": [262144, 262144, 0.95, 4], "claude-opus-5": [1000000, 128000, 5, 25, 0.5, 6.25], "gpt-4.1-nano": [1047576, 32768, 0.1, 0.4, 0.025], "claude-sonnet-5-5": [1000000, 128000, 2, 10, 0.2, 2.5], "gpt-chat-latest": [400000, 128000, 5, 30, 0.5], "grok-4-1-fast-non-reasoning": [128000, 8192, 0.2, 0.5, 0.05], "cohere-command-a": [131072, 8192, 2.5, 10], "cohere-embed-v3-multilingual": [512, 1024, 0.1, 0], "o3": [200000, 100000, 2, 8, 0.5], "phi-4-reasoning-plus": [32000, 4096, 0.125, 0.5], "o4-mini": [200000, 100000, 1.1, 4.4, 0.275], "grok-4-20-non-reasoning": [262000, 8192, 2, 6], "gpt-5-pro": [400000, 128000, 15, 120], "gpt-4.1": [1047576, 32768, 2, 8, 0.5], "gpt-5.4": [1050000, 128000, 2.5, 15, 0.25], "mistral-small-2503": [128000, 32768, 0.1, 0.3] }, "deepseek": { "deepseek-v4-flash": [1048576, 393216, 0.15, 0.6, 0.003], "deepseek-v4-flash-vision-exp": [1048576, 393216, 0.15, 0.6, 0.003], "deepseek-flash": [1048576, 393216, 0.15, 0.6, 0.003], "deepseek-v4-pro": [1048576, 393216, 0.66, 1.98, 0.022] }, "moonshotai": { "kimi-k2.7-code-highspeed": [262144, 262144, 1.9, 8, 0.38], "kimi-k2.7-code": [262144, 262144, 0.95, 4, 0.19], "kimi-k3.1-pro-highspeed": [1048576, 1048576, 4, 20, 0.2, 4], "kimi-k2.6": [262144, 262144, 0.95, 4, 0.16], "kimi-k3": [1048576, 1048576, 3, 15, 0.3, 3], "kimi-k3.1-pro": [1048576, 1048576, 2, 10, 0.2, 2] }, "xai": { "grok-4.6": [500000, 500000, 2, 6, 0.5], "grok-imagine-image": [16000, 0], "grok-imagine-video": [1024, 0], "grok-4.20-0309-reasoning": [1000000, 30000, 1.25, 2.5, 0.2], "grok-imagine-video-1.5-lite": [1024, 0], "grok-imagine-image-quality": [16000, 0], "grok-imagine-video-1.5": [1024, 0], "grok-build-0.1": [256000, 256000, 1, 2, 0.2], "grok-4.20-multi-agent-0309": [1000000, 30000, 1.25, 2.5, 0.2], "grok-4.7": [500000, 500000, 2, 6, 0.5], "grok-4.3": [1000000, 30000, 1.25, 2.5, 0.2], "grok-4.5": [500000, 500000, 2, 6, 0.3], "grok-4.20-0309-non-reasoning": [1000000, 30000, 1.25, 2.5, 0.2] }, "mistral": { "mistral-medium-2604": [262144, 262144, 1.5, 7.5, 0.15], "zai-glm-5-2": [1048576, 131072, 1.4, 4.4, 0.14], "mistral-small-2506": [128000, 16384, 0.1, 0.3], "glm-5-2": [1048576, 131072, 1.4, 4.4, 0.14], "zai-glm-5-3-flash": [1048576, 131072, 0.15, 0.5, 0.03], "codestral-latest": [256000, 4096, 0.3, 0.9, 0.03], "mistral-medium-latest": [262144, 262144, 1.5, 7.5, 0.15], "voxtral-small-latest": [32768, 32000, 0.1, 0.4], "mistral-medium-2505": [131072, 131072, 0.4, 2], "voxtral-small-2507": [32768, 32000, 0.1, 0.4], "ministral-8b-2512": [262144, 262144, 0.15, 0.15, 0.015], "ministral-3b-2512": [131072, 262144, 0.1, 0.1, 0.01], "mistral-small-2603": [262144, 256000, 0.15, 0.6, 0.015], "mistral-medium-2508": [262144, 262144, 0.4, 2], "labs-devstral-small-2512": [256000, 256000, 0, 0], "zai-glm-5-3": [1048576, 131072, 1.4, 4.4, 0.14], "mistral-large-2512": [262144, 262144, 0.5, 1.5, 0.05], "ministral-8b-latest": [262144, 128000, 0.15, 0.15, 0.015], "mistral-embed": [8000, 3072, 0.1, 0], "ministral-14b-2512": [262144, 262144, 0.2, 0.2, 0.02], "labs-leanstral-1-5-1": [262144, 128000, 0, 0], "devstral-medium-latest": [262144, 262144, 0.4, 2], "pixtral-12b": [128000, 128000, 0.15, 0.15], "magistral-medium-latest": [262144, 16384, 2, 5], "mistral-small-latest": [262144, 256000, 0.15, 0.6, 0.015], "devstral-latest": [262144, 262144, 0.4, 2], "mistral-large-4": [1048576, 262144, 1.36, 4.18, 0.14], "ministral-3b-latest": [131072, 128000, 0.1, 0.1, 0.01], "voxtral-mini-tts-latest": [0, 0], "open-mistral-nemo": [128000, 128000, 0.15, 0.15], "codestral-2508": [256000, 8192, 0.3, 0.9, 0.03], "devstral-2512": [262144, 262144, 0.4, 2], "voxtral-mini-latest": [0, 0], "mistral-large-latest": [262144, 262144, 0.5, 1.5, 0.05] }, "alibaba": { "qwen3-vl-235b-a22b": [131072, 32768, 0.7, 2.8], "qwen3-32b": [131072, 16384, 0.7, 2.8], "qwen3.5-35b-a3b": [262144, 65536, 0.25, 2], "qwen-mt-plus": [16384, 8192, 2.46, 7.37], "qwen3.6-27b": [262144, 65536, 0.6, 3.6], "qwen3.8-flash": [1000000, 131072, 0.15, 0.47, 0.016, 0.2], "qwen3-coder-480b-a35b-instruct": [262144, 65536, 1.5, 7.5], "qwen3.6-35b-a3b": [262144, 65536, 0.375, 2.25], "qwen-flash": [1000000, 32768, 0.05, 0.4, 0.01, 0.0625], "qwen3-14b": [131072, 8192, 0.35, 1.4], "qwen3.8-omni-flash": [1000000, 131072, 0.15, 0.47, 0.016], "qwen3-coder-plus": [1048576, 65536, 1, 5], "qwen-plus": [1000000, 32768, 0.4, 1.2, 0.08, 0.5], "qwen-vl-plus": [131072, 8192, 0.21, 0.63], "qwen3-vl-plus": [262144, 32768, 0.2, 1.6, 0.04, 0.25], "qwen3.7-flash": [1000000, 131072, 0.03, 0.13, 0.006, 0.0375], "qwen3.5-122b-a10b": [262144, 65536, 0.4, 3.2], "qwen-omni-turbo-realtime": [32768, 2048, 0.27, 1.07], "qwen3-max": [262144, 65536, 1.2, 6], "qwen3.8-max": [1000000, 131072, 2, 6, 0.25, 2.5], "qwen-turbo": [1000000, 16384, 0.05, 0.2], "qwen3.7-max": [1000000, 131072, 2.5, 7.5, 0.5, 3.125], "qwen3.6-max-preview": [262144, 65536, 1.3, 7.8, 0.13, 1.625], "qwen3.7-plus": [1000000, 131072, 0.4, 1.6, 0.08, 0.5], "qwen3-asr-flash": [53248, 4096], "qwen-max": [32768, 8192, 1.6, 6.4], "qwen-omni-turbo": [32768, 2048, 0.07, 0.27], "qwen3-next-80b-a3b-instruct": [131072, 32768, 0.5, 2], "qwen-vl-ocr": [34096, 4096, 0.07, 0.16], "qwen3.6-flash": [1000000, 65536, 0.25, 1.5, 0.025, 0.3125], "qwen3.6-plus": [1000000, 65536, 0.5, 3, 0.05, 0.625], "qwen3.5-397b-a17b": [262144, 65536, 0.6, 3.6], "qwen3-vl-30b-a3b": [131072, 32768, 0.2, 0.8], "qwen3-omni-flash": [65536, 16384, 0.43, 1.66], "qwen3-livetranslate-flash-realtime": [53248, 4096, 10, 10], "qwen3-next-80b-a3b-thinking": [131072, 32768, 0.5, 6], "qwen3.5-flash": [1000000, 65536, 0.1, 0.4, 0.01, 0.125], "qwen3-235b-a22b": [131072, 16384, 0.7, 2.8], "qwen-vl-max": [131072, 8192, 0.8, 3.2], "qwen3-coder-30b-a3b-instruct": [262144, 65536, 0.45, 2.25], "qwen3-8b": [131072, 8192, 0.18, 0.7], "qwen3-omni-flash-realtime": [65536, 16384, 0.52, 1.99], "qwen3.5-27b": [262144, 65536, 0.3, 2.4], "glm-5.2": [1000000, 131072, 1.4, 4.4, 0.28, 0], "deepseek-v4-flash-0731": [1000000, 384000, 0.44, 1.32, 0.088], "qvq-max": [131072, 8192, 1.2, 4.8], "qwen-mt-turbo": [16384, 8192, 0.16, 0.49], "qwen3.5-plus": [1000000, 65536, 0.4, 2.4], "qwen2-5-omni-7b": [32768, 2048, 0.1, 0.4], "qwen3-coder-flash": [1000000, 65536, 0.3, 1.5, 0.06, 0.375], "kimi-k3": [1048576, 1048576, 3, 15, 0.3], "qwen-plus-character-ja": [8192, 512, 0.5, 1.4], "qwq-plus": [131072, 8192, 0.8, 2.4] }, "zhipuai": { "glm-4.5v": [64000, 16384, 0.29879, 0.89637, 0.05976, 0], "glm-4.5-flash": [131072, 98304, 0, 0, 0, 0], "glm-4.5-air": [131072, 98304, 0.11952, 0.89637, 0.0239, 0], "glm-5.1": [200000, 131072, 0.89637, 3.58548, 0.19421, 0], "glm-4.7-flash": [200000, 131072, 0, 0, 0, 0], "glm-4.5": [131072, 98304, 0.6, 2.2, 0.11, 0], "glm-5.3-flashx": [1000000, 131072, 0.29879, 1.04577, 0.08516, 0], "glm-4.7-flashx": [200000, 131072, 0.0747, 0.44819, 0.01494, 0], "glm-5": [204800, 131072, 0.59758, 2.68911, 0.1494, 0], "glm-5.3-flash": [1000000, 131072, 0.11952, 0.41831, 0.03436, 0], "glm-5.2": [1000000, 131072, 1.19516, 4.18306, 0.29879, 0], "glm-4.7": [204800, 131072, 0.44819, 2.09153, 0.08964, 0], "glm-5v-turbo": [200000, 131072, 0.74698, 3.28669, 0.17927, 0], "glm-4.6": [204800, 131072, 0.6, 2.2, 0.11, 0], "glm-4.6v-flash": [128000, 32768, 0, 0, 0, 0], "glm-4.6v": [128000, 32768, 0.1494, 0.44819, 0.02988, 0], "glm-5.3": [1000000, 131072, 1.19516, 4.18306, 0.29879, 0] }, "groq": { "whisper-large-v3": [448, 448], "llama-3.3-70b-versatile": [131072, 32768, 0.59, 0.79], "llama-3.1-8b-instant": [131072, 131072, 0.05, 0.08], "whisper-large-v3-turbo": [448, 448], "allam-2-7b": [4096, 4096, 0, 0], "meta-llama/llama-prompt-guard-2-86m": [512, 512, 0.04, 0.04], "meta-llama/llama-prompt-guard-2-22m": [512, 512, 0.03, 0.03], "qwen/qwen3.6-27b": [131072, 16384, 0.6, 3, 0.3], "qwen/qwen3.8-27b": [131072, 16384, 0.8, 4], "canopylabs/orpheus-v1-english": [4000, 50000], "canopylabs/orpheus-arabic-saudi": [4000, 50000], "openai/gpt-oss-safeguard-20b": [131072, 65536, 0.075, 0.3, 0.0375], "openai/gpt-oss-120b": [131072, 65536, 0.15, 0.6, 0.075], "openai/gpt-oss-20b": [131072, 65536, 0.075, 0.3, 0.0375] } };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export declare const MODELS_DEV_URL = "https://models.dev/api.json";
|
|
2
|
+
type Row = ReadonlyArray<number | null>;
|
|
3
|
+
type Trimmed = Record<string, Record<string, Row>>;
|
|
4
|
+
export interface CatalogEntry {
|
|
5
|
+
context?: number;
|
|
6
|
+
output?: number;
|
|
7
|
+
/** USD per 1M tokens. */
|
|
8
|
+
cost?: {
|
|
9
|
+
input: number;
|
|
10
|
+
output: number;
|
|
11
|
+
cacheRead?: number;
|
|
12
|
+
cacheWrite?: number;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/** The fields Forge uses from a models.dev api.json, for the providers it can reach. */
|
|
16
|
+
export declare function trimModelsDev(api: unknown): Trimmed;
|
|
17
|
+
/** The catalog's entry for a model, or undefined (no catalog loaded, or an id it does not list exactly). */
|
|
18
|
+
export declare function catalogEntry(model: {
|
|
19
|
+
provider: string;
|
|
20
|
+
model: string;
|
|
21
|
+
}): CatalogEntry | undefined;
|
|
22
|
+
/** Forget the loaded catalog (tests). */
|
|
23
|
+
export declare function resetModelCatalog(): void;
|
|
24
|
+
export declare function defaultCatalogCacheFile(): string;
|
|
25
|
+
export type CatalogSource = 'cache' | 'fetched' | 'stale-cache' | 'snapshot';
|
|
26
|
+
/**
|
|
27
|
+
* Load the catalog: a fresh cache, else models.dev (written back to the cache), else a stale cache, else the
|
|
28
|
+
* bundled snapshot. Never throws: a broken network or cache only means older data.
|
|
29
|
+
*/
|
|
30
|
+
export declare function loadModelCatalog(opts?: {
|
|
31
|
+
cacheFile?: string;
|
|
32
|
+
fetchImpl?: typeof fetch;
|
|
33
|
+
now?: number;
|
|
34
|
+
}): Promise<CatalogSource>;
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model limits and prices from models.dev, the catalog Kilo and OpenCode read at runtime. A surface calls
|
|
3
|
+
* loadModelCatalog() once at startup: it uses a cached copy (24 h), refreshes it from models.dev, and falls back to
|
|
4
|
+
* the snapshot bundled with this release. Until then the catalog is empty and the hand-written tables answer.
|
|
5
|
+
* Lookups match an exact model id only: a newer model is never priced like an older one (RB-34).
|
|
6
|
+
*/
|
|
7
|
+
import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
|
|
8
|
+
import os from 'node:os';
|
|
9
|
+
import path from 'node:path';
|
|
10
|
+
import { installedFetch } from '../policy/proxy.js';
|
|
11
|
+
import { MODELS_DEV_SNAPSHOT } from './models-dev-snapshot.js';
|
|
12
|
+
export const MODELS_DEV_URL = 'https://models.dev/api.json';
|
|
13
|
+
const CACHE_TTL_MS = 24 * 60 * 60 * 1000;
|
|
14
|
+
const FETCH_TIMEOUT_MS = 10_000;
|
|
15
|
+
/** models.dev provider keys Forge can reach (keep in step with scripts/models-dev-snapshot.mjs). */
|
|
16
|
+
const CATALOG_PROVIDERS = [
|
|
17
|
+
'anthropic', 'openai', 'google', 'openrouter', 'minimax', 'amazon-bedrock', 'google-vertex', 'azure',
|
|
18
|
+
'deepseek', 'moonshotai', 'xai', 'mistral', 'alibaba', 'zhipuai', 'groq',
|
|
19
|
+
];
|
|
20
|
+
/** Forge provider -> the models.dev provider whose ids it uses. Others (openai-compatible…) match by id across all. */
|
|
21
|
+
const PROVIDER_KEY = {
|
|
22
|
+
anthropic: 'anthropic',
|
|
23
|
+
openai: 'openai',
|
|
24
|
+
google: 'google',
|
|
25
|
+
openrouter: 'openrouter',
|
|
26
|
+
minimax: 'minimax',
|
|
27
|
+
bedrock: 'amazon-bedrock',
|
|
28
|
+
vertex: 'google-vertex',
|
|
29
|
+
azure: 'azure',
|
|
30
|
+
};
|
|
31
|
+
/** Lower-cased id -> row, per provider key. */
|
|
32
|
+
let index;
|
|
33
|
+
function build(data) {
|
|
34
|
+
index = new Map();
|
|
35
|
+
for (const [provider, models] of Object.entries(data)) {
|
|
36
|
+
const byId = new Map();
|
|
37
|
+
for (const [id, row] of Object.entries(models))
|
|
38
|
+
byId.set(id.toLowerCase(), row);
|
|
39
|
+
index.set(provider, byId);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** The fields Forge uses from a models.dev api.json, for the providers it can reach. */
|
|
43
|
+
export function trimModelsDev(api) {
|
|
44
|
+
const out = {};
|
|
45
|
+
const root = (api ?? {});
|
|
46
|
+
for (const key of CATALOG_PROVIDERS) {
|
|
47
|
+
const models = root[key]?.models;
|
|
48
|
+
if (!models || typeof models !== 'object')
|
|
49
|
+
continue;
|
|
50
|
+
out[key] = {};
|
|
51
|
+
for (const [id, m] of Object.entries(models)) {
|
|
52
|
+
const c = m?.cost ?? {};
|
|
53
|
+
const num = (v) => (typeof v === 'number' && Number.isFinite(v) ? v : null);
|
|
54
|
+
const row = [num(m?.limit?.context), num(m?.limit?.output), num(c.input), num(c.output), num(c.cache_read), num(c.cache_write)];
|
|
55
|
+
while (row.length > 2 && row[row.length - 1] === null)
|
|
56
|
+
row.pop();
|
|
57
|
+
out[key][id] = row;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return out;
|
|
61
|
+
}
|
|
62
|
+
function entryOf(row) {
|
|
63
|
+
const at = (i) => (typeof row[i] === 'number' && row[i] > 0 ? row[i] : undefined);
|
|
64
|
+
const entry = {};
|
|
65
|
+
if (at(0))
|
|
66
|
+
entry.context = at(0);
|
|
67
|
+
if (at(1))
|
|
68
|
+
entry.output = at(1);
|
|
69
|
+
const input = row[2];
|
|
70
|
+
const output = row[3];
|
|
71
|
+
if (typeof input === 'number' && typeof output === 'number') {
|
|
72
|
+
entry.cost = { input, output, ...(typeof row[4] === 'number' ? { cacheRead: row[4] } : {}), ...(typeof row[5] === 'number' ? { cacheWrite: row[5] } : {}) };
|
|
73
|
+
}
|
|
74
|
+
return entry;
|
|
75
|
+
}
|
|
76
|
+
/** The catalog's entry for a model, or undefined (no catalog loaded, or an id it does not list exactly). */
|
|
77
|
+
export function catalogEntry(model) {
|
|
78
|
+
if (!index)
|
|
79
|
+
return undefined;
|
|
80
|
+
const id = model.model.toLowerCase().replace(/^models\//, '');
|
|
81
|
+
const key = PROVIDER_KEY[model.provider];
|
|
82
|
+
if (key) {
|
|
83
|
+
const row = index.get(key)?.get(id);
|
|
84
|
+
return row ? entryOf(row) : undefined;
|
|
85
|
+
}
|
|
86
|
+
for (const byId of index.values()) {
|
|
87
|
+
const row = byId.get(id);
|
|
88
|
+
if (row)
|
|
89
|
+
return entryOf(row);
|
|
90
|
+
}
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
/** Forget the loaded catalog (tests). */
|
|
94
|
+
export function resetModelCatalog() {
|
|
95
|
+
index = undefined;
|
|
96
|
+
}
|
|
97
|
+
export function defaultCatalogCacheFile() {
|
|
98
|
+
return path.join(os.homedir(), '.forge', 'cache', 'models-dev.json');
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Load the catalog: a fresh cache, else models.dev (written back to the cache), else a stale cache, else the
|
|
102
|
+
* bundled snapshot. Never throws: a broken network or cache only means older data.
|
|
103
|
+
*/
|
|
104
|
+
export async function loadModelCatalog(opts = {}) {
|
|
105
|
+
const cacheFile = opts.cacheFile ?? defaultCatalogCacheFile();
|
|
106
|
+
const now = opts.now ?? Date.now();
|
|
107
|
+
let cached;
|
|
108
|
+
try {
|
|
109
|
+
const parsed = JSON.parse(await readFile(cacheFile, 'utf8'));
|
|
110
|
+
if (typeof parsed.fetchedAt === 'number' && parsed.data && typeof parsed.data === 'object')
|
|
111
|
+
cached = parsed;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// No cache yet, or an unreadable one: fetch.
|
|
115
|
+
}
|
|
116
|
+
if (cached && now - cached.fetchedAt < CACHE_TTL_MS) {
|
|
117
|
+
build(cached.data);
|
|
118
|
+
return 'cache';
|
|
119
|
+
}
|
|
120
|
+
try {
|
|
121
|
+
const doFetch = opts.fetchImpl ?? installedFetch() ?? fetch;
|
|
122
|
+
const res = await doFetch(MODELS_DEV_URL, { signal: AbortSignal.timeout(FETCH_TIMEOUT_MS) });
|
|
123
|
+
if (!res.ok)
|
|
124
|
+
throw new Error(`models.dev answered ${res.status}`);
|
|
125
|
+
const data = trimModelsDev(await res.json());
|
|
126
|
+
if (Object.keys(data).length === 0)
|
|
127
|
+
throw new Error('models.dev returned no known provider');
|
|
128
|
+
build(data);
|
|
129
|
+
await mkdir(path.dirname(cacheFile), { recursive: true });
|
|
130
|
+
const tmpFile = `${cacheFile}.${process.pid}.tmp`;
|
|
131
|
+
await writeFile(tmpFile, JSON.stringify({ fetchedAt: now, data }));
|
|
132
|
+
await rename(tmpFile, cacheFile).catch(() => undefined);
|
|
133
|
+
return 'fetched';
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
if (cached) {
|
|
137
|
+
build(cached.data);
|
|
138
|
+
return 'stale-cache';
|
|
139
|
+
}
|
|
140
|
+
build(MODELS_DEV_SNAPSHOT);
|
|
141
|
+
return 'snapshot';
|
|
142
|
+
}
|
|
143
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
1
2
|
import { createRequire } from 'node:module';
|
|
2
3
|
import path from 'node:path';
|
|
3
4
|
import Parser from 'web-tree-sitter';
|
|
@@ -44,6 +45,47 @@ const KIND_BY_NODE_TYPE = {
|
|
|
44
45
|
method_definition: 'method',
|
|
45
46
|
method_signature: 'method',
|
|
46
47
|
};
|
|
48
|
+
/**
|
|
49
|
+
* The folder of a bundle that carries its wasm files beside it, or null. The VS Code extension's build copies the
|
|
50
|
+
* runtime and grammar wasm into `dist/` next to `extension.js`, and its VSIX has no node_modules to resolve from.
|
|
51
|
+
* `typeof` keeps this safe under real ESM, where `__dirname` is not defined.
|
|
52
|
+
*/
|
|
53
|
+
function bundledWasmDir() {
|
|
54
|
+
if (typeof __dirname !== 'string')
|
|
55
|
+
return null;
|
|
56
|
+
return existsSync(path.join(__dirname, 'tree-sitter.wasm')) ? __dirname : null;
|
|
57
|
+
}
|
|
58
|
+
/** web-tree-sitter's runtime wasm, beside the bundle or resolved from the package; throws when this build does not carry it. */
|
|
59
|
+
function treeSitterWasm() {
|
|
60
|
+
const bundled = bundledWasmDir();
|
|
61
|
+
if (bundled)
|
|
62
|
+
return path.join(bundled, 'tree-sitter.wasm');
|
|
63
|
+
let file;
|
|
64
|
+
try {
|
|
65
|
+
file = path.join(path.dirname(getRequire().resolve('web-tree-sitter/package.json')), 'tree-sitter.wasm');
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
throw new Error('Symbol tools are not available in this build: tree-sitter (web-tree-sitter) is not installed. Use search_files instead.');
|
|
69
|
+
}
|
|
70
|
+
if (!existsSync(file)) {
|
|
71
|
+
throw new Error(`Symbol tools are not available in this build: ${file} is missing. Use search_files instead.`);
|
|
72
|
+
}
|
|
73
|
+
return file;
|
|
74
|
+
}
|
|
75
|
+
/** A grammar's wasm, beside the bundle or from `tree-sitter-wasms`; throws when this build does not carry it. */
|
|
76
|
+
function grammarWasm(grammarFile) {
|
|
77
|
+
let file;
|
|
78
|
+
try {
|
|
79
|
+
file = path.join(bundledWasmDir() ?? path.join(path.dirname(getRequire().resolve('tree-sitter-wasms/package.json')), 'out'), grammarFile);
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
throw new Error('Symbol tools are not available in this build: tree-sitter grammars (tree-sitter-wasms) are not installed. Use search_files instead.');
|
|
83
|
+
}
|
|
84
|
+
if (!existsSync(file)) {
|
|
85
|
+
throw new Error(`Symbol tools are not available in this build: ${file} is missing. Use search_files instead.`);
|
|
86
|
+
}
|
|
87
|
+
return file;
|
|
88
|
+
}
|
|
47
89
|
let parserInitialized = false;
|
|
48
90
|
const languageCache = new Map();
|
|
49
91
|
async function loadLanguage(ext) {
|
|
@@ -54,11 +96,14 @@ async function loadLanguage(ext) {
|
|
|
54
96
|
if (cached)
|
|
55
97
|
return cached;
|
|
56
98
|
if (!parserInitialized) {
|
|
57
|
-
|
|
99
|
+
// Point web-tree-sitter at its own wasm. Left to itself it looks next to the running script, which in the
|
|
100
|
+
// extension's one-file CommonJS bundle is dist/, and aborts when the file is not there: the promise never
|
|
101
|
+
// settles and every symbol tool call hangs (RB-40). A missing wasm is a clear, immediate error instead.
|
|
102
|
+
const wasm = treeSitterWasm();
|
|
103
|
+
await Parser.init({ locateFile: () => wasm });
|
|
58
104
|
parserInitialized = true;
|
|
59
105
|
}
|
|
60
|
-
const
|
|
61
|
-
const lang = await Parser.Language.load(path.join(wasmDir, grammarFile));
|
|
106
|
+
const lang = await Parser.Language.load(grammarWasm(grammarFile));
|
|
62
107
|
languageCache.set(grammarFile, lang);
|
|
63
108
|
return lang;
|
|
64
109
|
}
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
* dedicated cheaper model or even a deterministic extractive summarizer.
|
|
13
13
|
*/
|
|
14
14
|
import { generateText } from 'ai';
|
|
15
|
+
import { withModelRetry } from '../agent/retry.js';
|
|
16
|
+
import { catalogEntry } from '../catalog/models-dev.js';
|
|
15
17
|
import { mediaPartLabel, mediaPartTokens } from '../attachments.js';
|
|
16
18
|
import { stripThinkTags } from '../agent/think-tags.js';
|
|
17
19
|
import { overrideContextTokens } from '../model-overrides.js';
|
|
@@ -88,6 +90,9 @@ export function getModelWindowTokens(model) {
|
|
|
88
90
|
const overridden = overrideContextTokens(model);
|
|
89
91
|
if (overridden)
|
|
90
92
|
return overridden;
|
|
93
|
+
const listed = typeof model === 'string' ? undefined : catalogEntry(model)?.context;
|
|
94
|
+
if (listed)
|
|
95
|
+
return listed;
|
|
91
96
|
const id = typeof model === 'string' ? model : model.model;
|
|
92
97
|
const stripped = id.toLowerCase().replace(/^models\//, '');
|
|
93
98
|
// Direct hit first.
|
|
@@ -201,11 +206,12 @@ Here is the conversation to summarize:
|
|
|
201
206
|
|
|
202
207
|
${truncateToBudget(transcript, 60_000)}`;
|
|
203
208
|
const llm = factory(model);
|
|
204
|
-
const result = await generateText({
|
|
209
|
+
const result = await withModelRetry(() => generateText({
|
|
205
210
|
model: llm,
|
|
206
211
|
prompt,
|
|
207
212
|
maxOutputTokens: 2000,
|
|
208
|
-
|
|
213
|
+
maxRetries: 0,
|
|
214
|
+
}));
|
|
209
215
|
// Reasoning models put an inline <think> block in the reply; it must not be stored as the summary.
|
|
210
216
|
return stripThinkTags(result.text).trim();
|
|
211
217
|
};
|
|
@@ -27,11 +27,11 @@ export declare function commitDirty(cwd: string, options?: GitCommitOptions): Pr
|
|
|
27
27
|
export declare function diffForFiles(cwd: string, files: string[]): Promise<string>;
|
|
28
28
|
/** Deterministic message used when no model is available or it fails. */
|
|
29
29
|
export declare function fallbackCommitMessage(files: string[]): string;
|
|
30
|
-
export declare function commitMessagePrompt(diff: string, task?: string, instruction?: string): string;
|
|
30
|
+
export declare function commitMessagePrompt(diff: string, task?: string, instruction?: string, language?: string): string;
|
|
31
31
|
/** Strip an inline `<think>` block (MiniMax and other reasoning models) and the fences/quotes a model may wrap around the message. */
|
|
32
32
|
export declare function cleanCommitMessage(text: string): string;
|
|
33
33
|
/** Draft a commit message with `model` (typically the cheap model); never throws. */
|
|
34
|
-
export declare function generateCommitMessage(diff: string, files: string[], model: ModelConfig | undefined, task?: string, modelFactory?: (cfg: ModelConfig) => LanguageModel, instruction?: string): Promise<string>;
|
|
34
|
+
export declare function generateCommitMessage(diff: string, files: string[], model: ModelConfig | undefined, task?: string, modelFactory?: (cfg: ModelConfig) => LanguageModel, instruction?: string, language?: string): Promise<string>;
|
|
35
35
|
export type UndoResult = {
|
|
36
36
|
ok: true;
|
|
37
37
|
commit: string;
|
|
@@ -60,4 +60,6 @@ export declare function afterRun(cwd: string, state: {
|
|
|
60
60
|
model?: ModelConfig;
|
|
61
61
|
task?: string;
|
|
62
62
|
modelFactory?: (cfg: ModelConfig) => LanguageModel;
|
|
63
|
+
instruction?: string;
|
|
64
|
+
language?: string;
|
|
63
65
|
}): Promise<ForgeCommit | null>;
|
package/dist/git/auto-commit.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { execFile } from 'node:child_process';
|
|
7
7
|
import { promisify } from 'node:util';
|
|
8
8
|
import { generateText } from 'ai';
|
|
9
|
+
import { withModelRetry } from '../agent/retry.js';
|
|
9
10
|
import { stripThinkTags } from '../agent/think-tags.js';
|
|
10
11
|
import { createLanguageModel } from '../providers.js';
|
|
11
12
|
const execFileAsync = promisify(execFile);
|
|
@@ -112,10 +113,20 @@ export function fallbackCommitMessage(files) {
|
|
|
112
113
|
return `forge: update ${shown}${more}`;
|
|
113
114
|
}
|
|
114
115
|
const MAX_DIFF_CHARS = 12_000;
|
|
115
|
-
|
|
116
|
+
const MAX_LANGUAGE_CHARS = 40;
|
|
117
|
+
/** One short line for the prompt, or '' when English or unset. The value is typed by a person and goes into a model prompt. */
|
|
118
|
+
function languageLine(language) {
|
|
119
|
+
const lang = (language ?? '').replace(/\s+/g, ' ').trim().slice(0, MAX_LANGUAGE_CHARS).trim();
|
|
120
|
+
if (!lang || /^(english|en)$/i.test(lang))
|
|
121
|
+
return '';
|
|
122
|
+
return `
|
|
123
|
+
|
|
124
|
+
Write the commit message in ${lang}.`;
|
|
125
|
+
}
|
|
126
|
+
export function commitMessagePrompt(diff, task, instruction, language) {
|
|
116
127
|
const clipped = diff.length > MAX_DIFF_CHARS ? `${diff.slice(0, MAX_DIFF_CHARS)}\n[diff truncated]` : diff;
|
|
117
128
|
const lead = instruction?.trim() || 'Write a git commit message for this diff in conventional-commit style (type(scope): subject, imperative mood, under 72 characters). Add a short body only if the change needs explaining. Reply with the message only, no quotes or code fences.';
|
|
118
|
-
return `${lead}${task ? `\n\nThe change was made for this request: ${task}` : ''}\n\n${clipped}`;
|
|
129
|
+
return `${lead}${languageLine(language)}${task ? `\n\nThe change was made for this request: ${task}` : ''}\n\n${clipped}`;
|
|
119
130
|
}
|
|
120
131
|
/** Strip an inline `<think>` block (MiniMax and other reasoning models) and the fences/quotes a model may wrap around the message. */
|
|
121
132
|
export function cleanCommitMessage(text) {
|
|
@@ -126,11 +137,11 @@ export function cleanCommitMessage(text) {
|
|
|
126
137
|
.trim();
|
|
127
138
|
}
|
|
128
139
|
/** Draft a commit message with `model` (typically the cheap model); never throws. */
|
|
129
|
-
export async function generateCommitMessage(diff, files, model, task, modelFactory = createLanguageModel, instruction) {
|
|
140
|
+
export async function generateCommitMessage(diff, files, model, task, modelFactory = createLanguageModel, instruction, language) {
|
|
130
141
|
if (!model || !diff.trim())
|
|
131
142
|
return fallbackCommitMessage(files);
|
|
132
143
|
try {
|
|
133
|
-
const result = await generateText({ model: modelFactory(model), prompt: commitMessagePrompt(diff, task, instruction) });
|
|
144
|
+
const result = await withModelRetry(() => generateText({ model: modelFactory(model), prompt: commitMessagePrompt(diff, task, instruction, language), maxRetries: 0 }), { maxRetries: 2 });
|
|
134
145
|
const message = cleanCommitMessage(result.text);
|
|
135
146
|
return message || fallbackCommitMessage(files);
|
|
136
147
|
}
|
|
@@ -181,6 +192,6 @@ export async function afterRun(cwd, state, options) {
|
|
|
181
192
|
if (files.length === 0)
|
|
182
193
|
return null;
|
|
183
194
|
const diff = await diffForFiles(cwd, files);
|
|
184
|
-
const message = await generateCommitMessage(diff, files, options.model, options.task, options.modelFactory);
|
|
195
|
+
const message = await generateCommitMessage(diff, files, options.model, options.task, options.modelFactory, options.instruction, options.language);
|
|
185
196
|
return commitFiles(cwd, files, message, options);
|
|
186
197
|
}
|
|
@@ -49,11 +49,7 @@ export interface PullRequestReport {
|
|
|
49
49
|
}
|
|
50
50
|
declare const readParams: z.ZodObject<{
|
|
51
51
|
number: z.ZodOptional<z.ZodNumber>;
|
|
52
|
-
},
|
|
53
|
-
number?: number | undefined;
|
|
54
|
-
}, {
|
|
55
|
-
number?: number | undefined;
|
|
56
|
-
}>;
|
|
52
|
+
}, z.core.$strip>;
|
|
57
53
|
export declare function createGitHubReadTool(cfg: GitHubConfig): ToolDefinition<z.infer<typeof readParams>, PullRequestReport>;
|
|
58
54
|
declare const createParams: z.ZodObject<{
|
|
59
55
|
title: z.ZodString;
|
|
@@ -61,19 +57,7 @@ declare const createParams: z.ZodObject<{
|
|
|
61
57
|
base: z.ZodOptional<z.ZodString>;
|
|
62
58
|
head: z.ZodOptional<z.ZodString>;
|
|
63
59
|
draft: z.ZodOptional<z.ZodBoolean>;
|
|
64
|
-
},
|
|
65
|
-
body: string;
|
|
66
|
-
title: string;
|
|
67
|
-
draft?: boolean | undefined;
|
|
68
|
-
base?: string | undefined;
|
|
69
|
-
head?: string | undefined;
|
|
70
|
-
}, {
|
|
71
|
-
body: string;
|
|
72
|
-
title: string;
|
|
73
|
-
draft?: boolean | undefined;
|
|
74
|
-
base?: string | undefined;
|
|
75
|
-
head?: string | undefined;
|
|
76
|
-
}>;
|
|
60
|
+
}, z.core.$strip>;
|
|
77
61
|
export declare function createGitHubCreateTool(cfg: GitHubConfig): ToolDefinition<z.infer<typeof createParams>, {
|
|
78
62
|
number: number;
|
|
79
63
|
url: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { Agent, applySandbox } from './agent/agent.js';
|
|
2
2
|
export { LoopGuard } from './agent/loop-guard.js';
|
|
3
3
|
export { enhancePrompt } from './agent/enhance-prompt.js';
|
|
4
|
+
export { generateShellCommand, shellKindOf, commandRisk } from './agent/shell-command.js';
|
|
5
|
+
export type { ShellKind } from './agent/shell-command.js';
|
|
4
6
|
export { stripThinkTags } from './agent/think-tags.js';
|
|
5
7
|
export { createGitHubCreateTool, createGitHubReadTool, createGitHubTools, githubFromEnv, parseRemote, type GitHubConfig, type PullRequestReport, type RepoRef, } from './github/github-tools.js';
|
|
6
8
|
export { createWebSearchTool, searchWeb, WEB_SEARCH_PROVIDERS, webSearchFromEnv, webSearchProblem, type WebSearchConfig, type WebSearchProvider, type WebSearchResult, } from './tools/web-search.js';
|
|
@@ -42,8 +44,8 @@ export { createLanguageModel, formatModelId, pickAvailableProvider, resolveModel
|
|
|
42
44
|
export { defaultSessionDir, generateSessionId, saveSession, loadSession, deleteSession, listSessions, findLatestSession, formatSessionMarkdown, formatSessionJson, appendedSince, summarizeMessage, watchSession, searchSessions, sessionText, pruneSessions, pruneByRetention, } from './sessions/index.js';
|
|
43
45
|
export type { Session, ListEntry, FormatOptions, SessionUpdate, WatchSessionOptions, SessionMatch, SearchSessionsOptions, SessionPruneOptions, SessionPruneResult } from './sessions/index.js';
|
|
44
46
|
export { commandDirs, expandCustomCommand, formatCustomCommands, loadCustomCommands, parseCommandFile, type CustomCommand, } from './commands/custom-commands.js';
|
|
45
|
-
export { BUILTIN_TOOLS, editFileTool, fetchUrlTool, findSymbolTool, listFilesTool, memoryReadTool, memoryForgetTool, memoryWriteTool, readFileTool, runCommandTool, searchFilesTool, subAgentTool, writeFileTool, checkPolicyViolation, globToRegex, mergeToolSandbox, normalizePathPattern, pathMatchesAny, redact, countRedactions, buildRules, ToolResultCache, buildCacheKey, cachedExecute, } from './tools/index.js';
|
|
46
|
-
export type { AgentConfig, AgentEvent, AgentRunOptions, AgentRunReason, AgentRunResult, AnyLanguageModel, ApprovalDecision, CommandRunner, ModelRouter, VerifyConfig, ApprovalRequest, LanguageModelFactory, ModelConfig, PricePerMillionTokens, ProviderName, RedactOptions, TodoItem, ToolContext, UserQuestion, ToolDefinition, ToolPolicy, ToolSandbox, } from './types.js';
|
|
47
|
+
export { BUILTIN_TOOLS, editFileTool, fetchUrlTool, findSymbolTool, gitDiffTool, dependencyAuditTool, listFilesTool, memoryReadTool, memoryForgetTool, memoryWriteTool, readFileTool, runCommandTool, searchFilesTool, subAgentTool, writeFileTool, checkPolicyViolation, globToRegex, mergeToolSandbox, normalizePathPattern, pathMatchesAny, redact, countRedactions, buildRules, ToolResultCache, buildCacheKey, cachedExecute, } from './tools/index.js';
|
|
48
|
+
export type { AgentConfig, AgentEvent, ApprovalSource, AgentRunOptions, AgentRunReason, AgentRunResult, AnyLanguageModel, ApprovalDecision, CommandRunner, ModelRouter, VerifyConfig, ApprovalRequest, LanguageModelFactory, ModelConfig, PricePerMillionTokens, ProviderName, RedactOptions, TodoItem, ToolContext, UserQuestion, ToolDefinition, ToolPolicy, ToolSandbox, } from './types.js';
|
|
47
49
|
export type { CacheKeyParts, CacheStats } from './tools/index.js';
|
|
48
50
|
export type { RedactionRule, RedactionResult } from './tools/index.js';
|
|
49
51
|
export { buildSkillsBlock, builtinSkills, composeSkillsPrompt, discoverSkills, fetchSkillsCatalog, installSkillFromCatalog, loadSkillsRegistry, loadSkillsRegistryAsync, parseSkill, parseSkillsDir, resolveSkillRoots, scoreSkill, searchSkills, selectSkills, skillsRegistryFromList, DEFAULT_SKILL_CATALOG_URL, GLOBAL_SKILLS_DIR, LOCAL_SKILLS_DIR, PROJECT_SKILLS_DIR, SKILL_CATALOG_VERSION, } from './skills/index.js';
|
|
@@ -82,7 +84,7 @@ export { CheckpointStore, type CheckpointStoreLimits } from './checkpoints/index
|
|
|
82
84
|
export type { CaptureOptions, Checkpoint, CheckpointFile, CheckpointFileStatus, CheckpointSummary, CheckpointTrigger, PruneResult, RestoreResult, } from './checkpoints/index.js';
|
|
83
85
|
export { SpecStore, isSafeSpecId, runKey, slugifyTaskForSpecId, SPEC_READONLY_TOOLS, splitRequirementsDesign, splitSpecSections, splitTasksSection, convertToCheckboxes, parseTasks, setTaskDone, changedSince, changeSize, keepDoneTasks, referencedPaths, specDrift, syncSpecTask } from './specs/index.js';
|
|
84
86
|
export type { SpecDraft, SpecRunRecord, SpecRuns, SpecSections, SpecSummary, SpecTask, SpecDrift } from './specs/index.js';
|
|
85
|
-
export { BUILTIN_SPECIALISTS, defaultConfigPath, effectiveToolsFor, BOARD_TOOL_NAMES, createBoardTools, DEFAULT_BOARD_CAP, getRegisteredSpecialist, getSpecialist, MessageBoard, listSpecialists, loadSpecialistsFromConfig, parseRouterOutput, registerSpecialist, resolveEffectiveModel, ROUTER_SYSTEM_PROMPT, runOrchestrator, runRouter, saveSpecialistsToConfig, unregisterSpecialist, validateSpecialistConfig, _resetSpecialistsForTests, _customSpecialistCount, } from './orchestrator/index.js';
|
|
87
|
+
export { BUILTIN_SPECIALISTS, defaultConfigPath, effectiveToolsFor, BOARD_TOOL_NAMES, createBoardTools, DEFAULT_BOARD_CAP, getRegisteredSpecialist, getSpecialist, MessageBoard, listSpecialists, loadSpecialistsFromConfig, parseRouterOutput, registerSpecialist, resolveEffectiveModel, ROUTER_SYSTEM_PROMPT, specialistAgentConfig, runOrchestrator, runRouter, saveSpecialistsToConfig, unregisterSpecialist, validateSpecialistConfig, _resetSpecialistsForTests, _customSpecialistCount, } from './orchestrator/index.js';
|
|
86
88
|
export type { BoardMessage } from './orchestrator/index.js';
|
|
87
89
|
export type { BuiltInSpecialistId, CustomSpecialistConfig, LoadSpecialistsResult, OrchestratorOptions, OrchestratorPlan, OrchestratorProgressEvent, OrchestratorRunResult, OrchestratorStep, OrchestratorStepResult, SpecialistConfig, SpecialistId, SpecialistsConfigFile, } from './orchestrator/index.js';
|
|
88
90
|
export { computeUnifiedDiff, computeDiffSummary, type DiffOptions, type DiffResult, type DiffSummary, } from './diff/index.js';
|
|
@@ -95,8 +97,14 @@ export { formatSteeringLine, isSafeSteeringName, loadSteering, overrideFilePath,
|
|
|
95
97
|
export type { StartSelection, SteeringConfig, SteeringDoc, SteeringInclusion, SteeringLoadResult, SteeringSkip, } from './steering/index.js';
|
|
96
98
|
export { CONFIG_KEY_COVERAGE, FORGE_CONFIG_SCHEMA } from './config-schema.js';
|
|
97
99
|
export { FILE_WRITE_TOOL_NAMES, filesTouchedBy } from './tools/write-tools.js';
|
|
100
|
+
export { isSafeGitRef, MAX_DIFF_CHARS } from './tools/git-diff.js';
|
|
101
|
+
export { detectStackFacts, stackBlock, MAX_STACK_LIBRARIES, type StackFacts } from './agent/stack-facts.js';
|
|
102
|
+
export { pickAuditors, type AuditFinding, type AuditorPlan } from './tools/dependency-audit.js';
|
|
98
103
|
export { shellEnv } from './tools/shell-env.js';
|
|
99
104
|
export { previewPatch } from './tools/apply-patch.js';
|
|
105
|
+
export { applyTextEdit } from './tools/edit-file.js';
|
|
106
|
+
export { catalogEntry, loadModelCatalog, type CatalogEntry, type CatalogSource } from './catalog/models-dev.js';
|
|
107
|
+
export { isContextOverflowError, retryDecision, withModelRetry } from './agent/retry.js';
|
|
100
108
|
export type { PatchPreview } from './tools/apply-patch.js';
|
|
101
109
|
export { applyPatchTool, parsePatch, patchedPaths } from './tools/apply-patch.js';
|
|
102
110
|
export { buildEmbedder, type EmbedderSpec } from './semantic/embedder.js';
|