@ikarmic/forge-core 5.2.0 → 5.4.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.
Files changed (129) hide show
  1. package/dist/agent/agent.js +324 -122
  2. package/dist/agent/cache-hints.d.ts +2 -0
  3. package/dist/agent/cache-hints.js +18 -3
  4. package/dist/agent/enhance-prompt.js +2 -1
  5. package/dist/agent/history-adapt.d.ts +23 -0
  6. package/dist/agent/history-adapt.js +114 -0
  7. package/dist/agent/prompts.d.ts +19 -2
  8. package/dist/agent/prompts.js +44 -2
  9. package/dist/agent/retry.d.ts +50 -0
  10. package/dist/agent/retry.js +192 -0
  11. package/dist/agent/shell-command.d.ts +23 -0
  12. package/dist/agent/shell-command.js +93 -0
  13. package/dist/agent/tool-repair.d.ts +8 -0
  14. package/dist/agent/tool-repair.js +16 -0
  15. package/dist/catalog/models-dev-snapshot.d.ts +1 -0
  16. package/dist/catalog/models-dev-snapshot.js +3 -0
  17. package/dist/catalog/models-dev.d.ts +45 -0
  18. package/dist/catalog/models-dev.js +155 -0
  19. package/dist/checkpoints/store.js +3 -1
  20. package/dist/context/compaction.d.ts +21 -6
  21. package/dist/context/compaction.js +94 -28
  22. package/dist/context/mask.d.ts +9 -9
  23. package/dist/context/mask.js +30 -1
  24. package/dist/format/auto-format.d.ts +22 -0
  25. package/dist/format/auto-format.js +39 -0
  26. package/dist/git/auto-commit.d.ts +4 -2
  27. package/dist/git/auto-commit.js +16 -5
  28. package/dist/github/github-tools.d.ts +1 -0
  29. package/dist/github/github-tools.js +9 -9
  30. package/dist/github/pr.d.ts +34 -0
  31. package/dist/github/pr.js +70 -0
  32. package/dist/human-text.d.ts +6 -0
  33. package/dist/human-text.js +37 -0
  34. package/dist/index.d.ts +19 -9
  35. package/dist/index.js +14 -6
  36. package/dist/journey/answers-block.d.ts +2 -4
  37. package/dist/lsp/diagnostics.d.ts +4 -0
  38. package/dist/lsp/diagnostics.js +8 -2
  39. package/dist/lsp/index.d.ts +1 -1
  40. package/dist/lsp/index.js +1 -1
  41. package/dist/mcp/index.d.ts +1 -1
  42. package/dist/mcp/index.js +1 -1
  43. package/dist/mcp/json-schema-to-zod.js +2 -4
  44. package/dist/mcp/mcp-client.d.ts +14 -0
  45. package/dist/mcp/mcp-client.js +102 -18
  46. package/dist/memory/session-digest.js +2 -1
  47. package/dist/orchestrator/specialists-registry.js +14 -1
  48. package/dist/orchestrator/specialists.js +3 -3
  49. package/dist/pricing.js +12 -0
  50. package/dist/semantic/embedder.d.ts +11 -0
  51. package/dist/semantic/embedder.js +16 -0
  52. package/dist/semantic/semantic-index.d.ts +39 -1
  53. package/dist/semantic/semantic-index.js +43 -13
  54. package/dist/semantic/vector-store.d.ts +2 -0
  55. package/dist/semantic/vector-store.js +13 -1
  56. package/dist/sessions/index.d.ts +2 -2
  57. package/dist/sessions/index.js +1 -1
  58. package/dist/sessions/search.js +2 -2
  59. package/dist/sessions/session-export.d.ts +1 -1
  60. package/dist/sessions/session-export.js +41 -33
  61. package/dist/sessions/session-store.d.ts +20 -1
  62. package/dist/sessions/session-store.js +7 -0
  63. package/dist/sessions/watch.js +4 -4
  64. package/dist/skills/activator.d.ts +6 -0
  65. package/dist/skills/activator.js +17 -0
  66. package/dist/skills/skill-tool.d.ts +12 -0
  67. package/dist/skills/skill-tool.js +28 -0
  68. package/dist/tools/background-process.d.ts +63 -0
  69. package/dist/tools/background-process.js +150 -0
  70. package/dist/tools/command-sandbox.d.ts +24 -0
  71. package/dist/tools/command-sandbox.js +73 -0
  72. package/dist/tools/edit-file.d.ts +8 -0
  73. package/dist/tools/edit-file.js +39 -16
  74. package/dist/tools/edit-match.d.ts +16 -0
  75. package/dist/tools/edit-match.js +115 -0
  76. package/dist/tools/fetch-url.d.ts +15 -1
  77. package/dist/tools/fetch-url.js +7 -47
  78. package/dist/tools/get-diagnostics.d.ts +14 -0
  79. package/dist/tools/get-diagnostics.js +44 -0
  80. package/dist/tools/glob-filter.d.ts +7 -0
  81. package/dist/tools/glob-filter.js +12 -0
  82. package/dist/tools/html-to-markdown.d.ts +13 -0
  83. package/dist/tools/html-to-markdown.js +507 -0
  84. package/dist/tools/index.d.ts +5 -1
  85. package/dist/tools/index.js +11 -1
  86. package/dist/tools/list-files.d.ts +1 -0
  87. package/dist/tools/list-files.js +17 -5
  88. package/dist/tools/list-symbols.js +2 -2
  89. package/dist/tools/network-policy.d.ts +5 -0
  90. package/dist/tools/network-policy.js +77 -0
  91. package/dist/tools/office-docs.d.ts +6 -0
  92. package/dist/tools/office-docs.js +393 -0
  93. package/dist/tools/permission-rules.js +55 -5
  94. package/dist/tools/read-file.d.ts +2 -0
  95. package/dist/tools/read-file.js +47 -10
  96. package/dist/tools/read-image.js +2 -2
  97. package/dist/tools/read-only.d.ts +1 -1
  98. package/dist/tools/read-only.js +4 -0
  99. package/dist/tools/repo-clone.d.ts +40 -0
  100. package/dist/tools/repo-clone.js +218 -0
  101. package/dist/tools/result-cap.d.ts +8 -0
  102. package/dist/tools/result-cap.js +44 -0
  103. package/dist/tools/run-command.d.ts +18 -1
  104. package/dist/tools/run-command.js +44 -9
  105. package/dist/tools/search-files.js +12 -53
  106. package/dist/tools/search-worker.d.ts +23 -0
  107. package/dist/tools/search-worker.js +86 -0
  108. package/dist/tools/shared.d.ts +14 -1
  109. package/dist/tools/shared.js +76 -4
  110. package/dist/tools/shell.d.ts +27 -0
  111. package/dist/tools/shell.js +80 -0
  112. package/dist/tools/sub-agent.d.ts +1 -1
  113. package/dist/tools/sub-agent.js +4 -1
  114. package/dist/tools/suggest-plan.d.ts +18 -0
  115. package/dist/tools/suggest-plan.js +28 -0
  116. package/dist/types.d.ts +132 -1
  117. package/dist/wakeup/wakeup-tools.d.ts +22 -0
  118. package/dist/wakeup/wakeup-tools.js +34 -0
  119. package/dist/wakeup/wakeup.d.ts +75 -0
  120. package/dist/wakeup/wakeup.js +151 -0
  121. package/dist/worktree/health.d.ts +51 -0
  122. package/dist/worktree/health.js +186 -0
  123. package/dist/worktree/index.d.ts +4 -0
  124. package/dist/worktree/index.js +2 -0
  125. package/dist/worktree/setup.d.ts +51 -0
  126. package/dist/worktree/setup.js +173 -0
  127. package/dist/worktree/worktree.d.ts +7 -0
  128. package/dist/worktree/worktree.js +9 -4
  129. package/package.json +1 -1
@@ -0,0 +1,93 @@
1
+ import { generateText } from 'ai';
2
+ import { createLanguageModel } from '../providers.js';
3
+ import { withModelRetry } from './retry.js';
4
+ import { stripThinkTags } from './think-tags.js';
5
+ /** Which shell an executable path is, by its file name; an unknown one is PowerShell on Windows and bash elsewhere. */
6
+ export function shellKindOf(shellPath, platform) {
7
+ const base = (shellPath ?? '').split(/[\\/]/).pop()?.toLowerCase().replace(/\.(exe|cmd|bat)$/, '') ?? '';
8
+ if (base === 'pwsh' || base === 'powershell')
9
+ return 'powershell';
10
+ if (base === 'cmd')
11
+ return 'cmd';
12
+ if (base === 'bash' || base === 'zsh' || base === 'fish' || base === 'sh')
13
+ return base;
14
+ return platform === 'win32' ? 'powershell' : 'bash';
15
+ }
16
+ const SHELL_NAMES = {
17
+ powershell: 'PowerShell',
18
+ cmd: 'cmd.exe (Windows Command Prompt)',
19
+ bash: 'bash',
20
+ zsh: 'zsh',
21
+ fish: 'fish',
22
+ sh: 'POSIX sh',
23
+ };
24
+ function osName(platform) {
25
+ if (platform === 'win32')
26
+ return 'Windows';
27
+ if (platform === 'darwin')
28
+ return 'macOS';
29
+ return 'Linux';
30
+ }
31
+ function shellCommandPrompt(request, shell, platform) {
32
+ return (`Write exactly one command for ${SHELL_NAMES[shell]} on ${osName(platform)} that does what the request below asks. ` +
33
+ 'Use only tools that ship with that shell and system. Reply with the command only: no explanation, no quotes, no code fences, no prompt symbol.\n\n' +
34
+ `Request:\n${request}`);
35
+ }
36
+ const SHELL_OPERATORS = /[|&;<>$()=\\/]|\s-{1,2}[A-Za-z]/;
37
+ /** A line of explanation rather than a command: it ends in a colon, or reads as a sentence with no shell syntax in it. */
38
+ function isProse(line) {
39
+ const t = line.trim();
40
+ if (t.endsWith(':'))
41
+ return true;
42
+ const words = t.split(/\s+/);
43
+ return /^[A-Z][a-z']*[,!.]?$/.test(words[0] ?? '') && words.length > 6 && !SHELL_OPERATORS.test(t);
44
+ }
45
+ /**
46
+ * Reduce a model reply to the bare command: no think block (RB-1), no fence, quotes, prompt symbol or explanation.
47
+ * Returns '' when nothing is left.
48
+ */
49
+ export function cleanShellCommand(text) {
50
+ let body = stripThinkTags(text).trim();
51
+ const fence = /```[^\n]*\n?([\s\S]*?)(?:```|$)/.exec(body);
52
+ if (fence)
53
+ body = fence[1].trim();
54
+ const lines = body.split(/\r?\n/).filter((l) => l.trim() && !isProse(l));
55
+ if (lines.length === 0)
56
+ return '';
57
+ lines[0] = lines[0].replace(/^\s*(?:PS [^>\n]*>|PS>|\$|>)\s+/, '');
58
+ let command = lines.join('\n').trim();
59
+ for (const q of ['"', "'", '`']) {
60
+ if (command.length > 1 && command.startsWith(q) && command.endsWith(q) && !command.slice(1, -1).includes(q)) {
61
+ command = command.slice(1, -1).trim();
62
+ break;
63
+ }
64
+ }
65
+ return command;
66
+ }
67
+ /** Turn a plain request into one command for `shell`. Never throws: any failure or an unusable reply is `{ error: 'empty' }`. */
68
+ export async function generateShellCommand(request, opts) {
69
+ try {
70
+ const factory = opts.modelFactory ?? createLanguageModel;
71
+ const result = await withModelRetry(() => generateText({ model: factory(opts.model), prompt: shellCommandPrompt(request, opts.shell, opts.platform), maxRetries: 0 }), { maxRetries: 2 });
72
+ const command = cleanShellCommand(result.text);
73
+ return command ? { command } : { error: 'empty' };
74
+ }
75
+ catch {
76
+ return { error: 'empty' };
77
+ }
78
+ }
79
+ const RISKS = [
80
+ [
81
+ 'deletes files',
82
+ /\brm\s+(?:-\w+\s+)*-(?:\w*[rR]\w*|-recursive)\b|\b(?:remove-item|ri)\b[^|;&\n]*\s-r\w*\b|\bdel\b[^|;&\n]*\/s\b|\b(?:rmdir|rd)\b[^|;&\n]*\/s\b|\bfind\b[^|;&\n]*\s-delete\b/i,
83
+ ],
84
+ ['forces', /(?:^|\s)--force\b|\bpush\b[^|;&\n]*\s-f\b/i],
85
+ ['runs as administrator', /(?:^|[\s;&|(])sudo\b|\brunas\b|\bstart-process\b[^|;&\n]*-verb\s+runas\b/i],
86
+ ['rewrites git history', /\bgit\s+(?:-\S+\s+)*(?:reset\b[^|;&\n]*--hard\b|rebase\b|push\b[^|;&\n]*--force\b)/i],
87
+ ['drops data', /\bdrop\s+table\b|\btruncate\b/i],
88
+ ['formats a disk', /\bmkfs(?:\.\w+)?\b|(?:^|[;&|]\s*)format(?:\.com|\.exe)?\s+[a-z]:|\bdiskpart\b/i],
89
+ ];
90
+ /** Why a command deserves a second look, or undefined. The first matching reason wins, in the order of RISKS. */
91
+ export function commandRisk(command) {
92
+ return RISKS.find(([, re]) => re.test(command))?.[0];
93
+ }
@@ -0,0 +1,8 @@
1
+ import type { ToolCallRepairFunction, ToolSet } from 'ai';
2
+ /**
3
+ * The tool a model meant when it wrote a known tool's name in the wrong case ("Read_File"), or null when the
4
+ * name is exact, unknown, or ambiguous. Only case is repaired: guessing further would run the wrong tool.
5
+ */
6
+ export declare function fixToolName(name: string, known: readonly string[]): string | null;
7
+ /** `repairToolCall` for the AI SDK: a call to a tool that does not exist is retried under the right-cased name (G9). */
8
+ export declare const repairToolCall: ToolCallRepairFunction<ToolSet>;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The tool a model meant when it wrote a known tool's name in the wrong case ("Read_File"), or null when the
3
+ * name is exact, unknown, or ambiguous. Only case is repaired: guessing further would run the wrong tool.
4
+ */
5
+ export function fixToolName(name, known) {
6
+ if (known.includes(name))
7
+ return null;
8
+ const lower = name.toLowerCase();
9
+ const hits = known.filter((k) => k.toLowerCase() === lower);
10
+ return hits.length === 1 ? hits[0] : null;
11
+ }
12
+ /** `repairToolCall` for the AI SDK: a call to a tool that does not exist is retried under the right-cased name (G9). */
13
+ export const repairToolCall = async ({ toolCall, tools }) => {
14
+ const fixed = fixToolName(toolCall.toolName, Object.keys(tools));
15
+ return fixed ? { ...toolCall, toolName: fixed } : null;
16
+ };
@@ -0,0 +1 @@
1
+ export declare const MODELS_DEV_SNAPSHOT: Record<string, Record<string, ReadonlyArray<number | null>>>;
@@ -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,45 @@
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
+ /** Most reply tokens Forge asks for, whatever the model allows (Kilo uses the same figure). */
23
+ export declare const MAX_REPLY_TOKENS = 32000;
24
+ /**
25
+ * The reply length to ask for: the model's own output limit from the catalog, at most `MAX_REPLY_TOKENS`.
26
+ * Unlisted models and local servers get nothing, so the host keeps its own default (G8).
27
+ */
28
+ export declare function maxOutputTokensFor(model: {
29
+ provider: string;
30
+ model: string;
31
+ }): number | undefined;
32
+ /** Forget the loaded catalog (tests). */
33
+ export declare function resetModelCatalog(): void;
34
+ export declare function defaultCatalogCacheFile(): string;
35
+ export type CatalogSource = 'cache' | 'fetched' | 'stale-cache' | 'snapshot';
36
+ /**
37
+ * Load the catalog: a fresh cache, else models.dev (written back to the cache), else a stale cache, else the
38
+ * bundled snapshot. Never throws: a broken network or cache only means older data.
39
+ */
40
+ export declare function loadModelCatalog(opts?: {
41
+ cacheFile?: string;
42
+ fetchImpl?: typeof fetch;
43
+ now?: number;
44
+ }): Promise<CatalogSource>;
45
+ export {};
@@ -0,0 +1,155 @@
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
+ /** Most reply tokens Forge asks for, whatever the model allows (Kilo uses the same figure). */
94
+ export const MAX_REPLY_TOKENS = 32_000;
95
+ /**
96
+ * The reply length to ask for: the model's own output limit from the catalog, at most `MAX_REPLY_TOKENS`.
97
+ * Unlisted models and local servers get nothing, so the host keeps its own default (G8).
98
+ */
99
+ export function maxOutputTokensFor(model) {
100
+ if (model.provider === 'ollama' || model.provider === 'lmstudio')
101
+ return undefined;
102
+ const limit = catalogEntry(model)?.output;
103
+ return limit ? Math.min(limit, MAX_REPLY_TOKENS) : undefined;
104
+ }
105
+ /** Forget the loaded catalog (tests). */
106
+ export function resetModelCatalog() {
107
+ index = undefined;
108
+ }
109
+ export function defaultCatalogCacheFile() {
110
+ return path.join(os.homedir(), '.forge', 'cache', 'models-dev.json');
111
+ }
112
+ /**
113
+ * Load the catalog: a fresh cache, else models.dev (written back to the cache), else a stale cache, else the
114
+ * bundled snapshot. Never throws: a broken network or cache only means older data.
115
+ */
116
+ export async function loadModelCatalog(opts = {}) {
117
+ const cacheFile = opts.cacheFile ?? defaultCatalogCacheFile();
118
+ const now = opts.now ?? Date.now();
119
+ let cached;
120
+ try {
121
+ const parsed = JSON.parse(await readFile(cacheFile, 'utf8'));
122
+ if (typeof parsed.fetchedAt === 'number' && parsed.data && typeof parsed.data === 'object')
123
+ cached = parsed;
124
+ }
125
+ catch {
126
+ // No cache yet, or an unreadable one: fetch.
127
+ }
128
+ if (cached && now - cached.fetchedAt < CACHE_TTL_MS) {
129
+ build(cached.data);
130
+ return 'cache';
131
+ }
132
+ try {
133
+ const doFetch = opts.fetchImpl ?? installedFetch() ?? fetch;
134
+ const res = await doFetch(MODELS_DEV_URL, { signal: AbortSignal.timeout(FETCH_TIMEOUT_MS) });
135
+ if (!res.ok)
136
+ throw new Error(`models.dev answered ${res.status}`);
137
+ const data = trimModelsDev(await res.json());
138
+ if (Object.keys(data).length === 0)
139
+ throw new Error('models.dev returned no known provider');
140
+ build(data);
141
+ await mkdir(path.dirname(cacheFile), { recursive: true });
142
+ const tmpFile = `${cacheFile}.${process.pid}.tmp`;
143
+ await writeFile(tmpFile, JSON.stringify({ fetchedAt: now, data }));
144
+ await rename(tmpFile, cacheFile).catch(() => undefined);
145
+ return 'fetched';
146
+ }
147
+ catch {
148
+ if (cached) {
149
+ build(cached.data);
150
+ return 'stale-cache';
151
+ }
152
+ build(MODELS_DEV_SNAPSHOT);
153
+ return 'snapshot';
154
+ }
155
+ }
@@ -17,6 +17,7 @@ import { mkdir, readdir, readFile, rm, writeFile } from 'node:fs/promises';
17
17
  import path from 'node:path';
18
18
  import { snapshotWorktreeContext } from '../worktree/worktree.js';
19
19
  import { isOutsideRel } from '../tools/shared.js';
20
+ import { toolLabel } from '../human-text.js';
20
21
  const MANIFEST_FILENAME = 'manifest.json';
21
22
  const FILES_SUBDIR = 'files';
22
23
  /** Default retention for prune. Keeps the last 20 checkpoints. */
@@ -408,7 +409,8 @@ function defaultDescription(options) {
408
409
  return 'Session start';
409
410
  if (options.trigger === 'tool_use' && options.toolName) {
410
411
  const fp = options.focusPath ?? '';
411
- return fp ? `before ${options.toolName}: ${fp}` : `before ${options.toolName}`;
412
+ const what = toolLabel(options.toolName).toLowerCase();
413
+ return fp ? `before ${what}: ${fp}` : `before ${what}`;
412
414
  }
413
415
  return 'manual checkpoint';
414
416
  }
@@ -19,6 +19,13 @@ import type { ModelConfig } from '../types.js';
19
19
  * `DEFAULT_WINDOW_TOKENS`.
20
20
  */
21
21
  export declare const DEFAULT_WINDOW_TOKENS = 32000;
22
+ /**
23
+ * For a hosted model nothing lists: most current ones hold 128k or more, so 32k would condense a long chat at once
24
+ * and the model would forget without an error (F16c). Local servers keep 32k, where the real window is usually small.
25
+ */
26
+ export declare const HOSTED_FALLBACK_WINDOW_TOKENS = 128000;
27
+ /** True when no override, catalog entry or table knows this model's window: the figure used is only a guess. */
28
+ export declare function windowIsGuess(model: string | ModelConfig): boolean;
22
29
  export declare function getModelWindowTokens(model: string | ModelConfig): number;
23
30
  /** Approximate token count from a string. Rough: ~4 chars/token. */
24
31
  export declare function estimateTokens(text: string): number;
@@ -26,7 +33,13 @@ export declare function estimateTokens(text: string): number;
26
33
  * Sum estimated tokens across a message list. Used as a fallback when
27
34
  * the provider doesn't expose usage (e.g. test mocks).
28
35
  */
29
- export declare function estimateMessageTokens(messages: ModelMessage[]): number;
36
+ export declare function estimateMessageTokens(messages: readonly ModelMessage[]): number;
37
+ /** Tool output in the summarizer's transcript is cut to this, so a few file reads cannot crowd out the decisions. */
38
+ export declare const SUMMARY_TOOL_OUTPUT_CHARS = 2000;
39
+ /** The first words of a compaction summary message; how the chat and exports tell it from what the person wrote. */
40
+ export declare const COMPACTION_SUMMARY_PREFIX = "[Summary of earlier conversation";
41
+ /** Whether a message is the summary that compaction put in place of older turns. */
42
+ export declare function isCompactionSummary(message: ModelMessage | undefined): boolean;
30
43
  /**
31
44
  * The summarizer takes a chunk of messages and returns a structured
32
45
  * summary. Library users can supply their own (e.g., a deterministic
@@ -69,16 +82,18 @@ export interface CompactionResult {
69
82
  summary: string;
70
83
  }
71
84
  /**
72
- * Compact the message history in-place. Drops the oldest N messages and
73
- * inserts a single `[Compacted summary of N earlier turns]` system message
74
- * followed by the structured summary.
85
+ * Compact the message history. Replaces older messages with one summary message.
75
86
  *
76
87
  * Keeps:
77
88
  * - the original system prompt (first message, if it's a system one)
78
- * - the most recent `keepRecent` turns
89
+ * - the user's first request, word for word
90
+ * - the most recent messages: at least `keepRecent` of them and at least `keepRecentTokens` worth, cut where a
91
+ * step starts, so a tool result never loses the call that made it (RB-56)
79
92
  *
80
- * Replaces everything in between with a single summary.
93
+ * The summary is a user message (`COMPACTION_SUMMARY_PREFIX`): Gemini and Bedrock refuse a system message after the
94
+ * conversation has started.
81
95
  */
82
96
  export declare function compactMessages(allMessages: ModelMessage[], summarizer: Summarizer, options?: {
83
97
  keepRecent?: number;
98
+ keepRecentTokens?: number;
84
99
  }): Promise<CompactionResult>;