@diffexai/diffex 0.2.5 → 0.2.7

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 (44) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/AGENTS.md +0 -7
  3. package/dist/core/agent-session.js +31 -11
  4. package/dist/core/model-runtime.js +3 -3
  5. package/dist/core/provider-composer.js +1 -1
  6. package/dist/core/system-prompt-production.js +3 -9
  7. package/dist/core/system-prompt.js +2 -9
  8. package/dist/node_modules/@diffexai/diffex-agent-core/distribution-components.json +4 -4
  9. package/dist/node_modules/@diffexai/diffex-agent-core/distribution-files.json +1 -1
  10. package/dist/node_modules/@diffexai/diffex-agent-core/package.json +1 -1
  11. package/dist/node_modules/@diffexai/diffex-ai/dist/api/lazy.d.ts +1 -1
  12. package/dist/node_modules/@diffexai/diffex-ai/dist/api/lazy.js +8 -8
  13. package/dist/node_modules/@diffexai/diffex-ai/dist/models.js +4 -4
  14. package/dist/node_modules/@diffexai/diffex-ai/dist/providers/data/.manifest.json +1 -1
  15. package/dist/node_modules/@diffexai/diffex-ai/dist/providers/data/mistral.json +1 -1
  16. package/dist/node_modules/@diffexai/diffex-ai/dist/providers/data/opencode-go.json +1 -1
  17. package/dist/node_modules/@diffexai/diffex-ai/dist/providers/data/opencode.json +1 -1
  18. package/dist/node_modules/@diffexai/diffex-ai/dist/providers/data/openrouter.json +1 -1
  19. package/dist/node_modules/@diffexai/diffex-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  20. package/dist/node_modules/@diffexai/diffex-ai/distribution-components.json +3 -3
  21. package/dist/node_modules/@diffexai/diffex-ai/distribution-files.json +10 -10
  22. package/dist/node_modules/@diffexai/diffex-ai/package.json +1 -1
  23. package/dist/node_modules/@diffexai/diffex-client/distribution-components.json +3 -3
  24. package/dist/node_modules/@diffexai/diffex-client/distribution-files.json +1 -1
  25. package/dist/node_modules/@diffexai/diffex-client/package.json +1 -1
  26. package/dist/node_modules/@diffexai/diffex-harness-state/distribution-components.json +2 -2
  27. package/dist/node_modules/@diffexai/diffex-harness-state/distribution-files.json +1 -1
  28. package/dist/node_modules/@diffexai/diffex-harness-state/package.json +1 -1
  29. package/dist/node_modules/@diffexai/diffex-protocol/distribution-components.json +2 -2
  30. package/dist/node_modules/@diffexai/diffex-protocol/distribution-files.json +1 -1
  31. package/dist/node_modules/@diffexai/diffex-protocol/package.json +1 -1
  32. package/dist/node_modules/@diffexai/diffex-telemetry/distribution-components.json +2 -2
  33. package/dist/node_modules/@diffexai/diffex-telemetry/distribution-files.json +1 -1
  34. package/dist/node_modules/@diffexai/diffex-telemetry/package.json +1 -1
  35. package/dist/node_modules/@diffexai/diffex-tui/distribution-components.json +2 -2
  36. package/dist/node_modules/@diffexai/diffex-tui/distribution-files.json +1 -1
  37. package/dist/node_modules/@diffexai/diffex-tui/package.json +1 -1
  38. package/distribution-components.json +11 -11
  39. package/distribution-files.json +37 -37
  40. package/npm-shrinkwrap.json +2 -2
  41. package/package.json +1 -1
  42. package/release/distribution-manifest.json +4 -4
  43. package/release/install-package-lock.json +5 -5
  44. package/release/install-package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.2.7] - 2026-09-18
4
+
5
+ ### Fixed
6
+
7
+ - Improved stability and fixed UI issues.
8
+
9
+ ## [0.2.6] - 2026-09-18
10
+
11
+ ### Fixed
12
+
13
+ - Fixed bugs and improved stability.
14
+
3
15
  ## [0.2.5] - 2026-09-17
4
16
 
5
17
  ### Fixed
package/dist/AGENTS.md CHANGED
@@ -1,16 +1,9 @@
1
1
  # Development Rules
2
2
 
3
- ## Conversational Style
4
-
5
- - When the user asks a question, answer it first before making edits or running implementation commands.
6
- - Address the user's feedback directly before describing changes.
7
-
8
3
  ## Code Quality
9
4
 
10
5
  - Before editing or drawing conclusions, read enough surrounding code to understand the relevant behavior and dependencies.
11
6
  - Read affected files in full for broad changes; do not rely on search snippets alone for investigations or audits.
12
- - Ask before removing intentional functionality or code when the removal falls outside the requested scope or its purpose is unclear.
13
- - Preserve unrelated local changes and keep modifications focused on the requested task.
14
7
 
15
8
  ## Commands
16
9
 
@@ -1429,7 +1429,10 @@ export class AgentSession {
1429
1429
  else
1430
1430
  await this.agent.continue();
1431
1431
  firstRun = false;
1432
- if (await this._handlePostAgentRun()) {
1432
+ const next = await this._handlePostAgentRun();
1433
+ if (next === "failed")
1434
+ break;
1435
+ if (next === "continue") {
1433
1436
  if (this._agentRunAborted) {
1434
1437
  const coordination = this._subagentCoordination;
1435
1438
  if (coordination) {
@@ -1605,10 +1608,10 @@ export class AgentSession {
1605
1608
  const msg = this._lastAssistantMessage;
1606
1609
  this._lastAssistantMessage = undefined;
1607
1610
  if (!msg) {
1608
- return false;
1611
+ return "settled";
1609
1612
  }
1610
1613
  if (this._isRetryableError(msg) && (await this._prepareRetry(msg))) {
1611
- return true;
1614
+ return "continue";
1612
1615
  }
1613
1616
  if (msg.stopReason === "error" && this._retryAttempt > 0) {
1614
1617
  this._emit({
@@ -1620,12 +1623,27 @@ export class AgentSession {
1620
1623
  this._retryAttempt = 0;
1621
1624
  }
1622
1625
  if (await this._checkCompaction(msg)) {
1623
- return true;
1626
+ return "continue";
1627
+ }
1628
+ if (msg.stopReason === "error") {
1629
+ // Recovery may have removed the failed response before giving up.
1630
+ if (!this.agent.state.messages.includes(msg))
1631
+ this.agent.state.messages.push(msg);
1632
+ while (true) {
1633
+ const coordination = this._getOrCreateSubagentCoordination();
1634
+ if (!coordination)
1635
+ break;
1636
+ this._exitSubagentCoordination("cancellation");
1637
+ await this._waitForSubagentCoordination(coordination);
1638
+ }
1639
+ // Queued reports and input must not bypass an exhausted recovery budget.
1640
+ // Leave them available for an explicit prompt or queue recovery by the caller.
1641
+ return "failed";
1624
1642
  }
1625
1643
  // Reports already queued by this run must enter context before a new batch is frozen
1626
1644
  // or an escalation-suspended coordination resumes waiting.
1627
1645
  if (this.agent.hasQueuedMessages())
1628
- return true;
1646
+ return "continue";
1629
1647
  while (true) {
1630
1648
  const coordination = this._getOrCreateSubagentCoordination();
1631
1649
  if (!coordination)
@@ -1635,26 +1653,26 @@ export class AgentSession {
1635
1653
  }
1636
1654
  const delivery = await this._waitForSubagentCoordination(coordination);
1637
1655
  if (delivery.reason === "cancellation")
1638
- return false;
1656
+ return "settled";
1639
1657
  if (delivery.reason === "escalation") {
1640
1658
  if (coordination.exitReason === "cancellation" || this._agentRunAborted) {
1641
1659
  this._exitSubagentCoordination("cancellation");
1642
1660
  await this._waitForSubagentCoordination(coordination);
1643
- return false;
1661
+ return "settled";
1644
1662
  }
1645
- return true;
1663
+ return "continue";
1646
1664
  }
1647
1665
  if (delivery.results.length > 0) {
1648
1666
  const message = this._createSubagentResultMessage(delivery.results);
1649
1667
  await this.sendCustomMessage(message, { deliverAs: "steer" });
1650
- return true;
1668
+ return "continue";
1651
1669
  }
1652
1670
  // Explicit agents consumption can empty this batch while the same continuation
1653
1671
  // starts another coordinated child. Freeze that pending run before settling.
1654
1672
  }
1655
1673
  // The agent loop drains both queues before emitting agent_end. Any messages
1656
1674
  // here were queued by agent_end extension handlers and need a continuation.
1657
- return this.agent.hasQueuedMessages();
1675
+ return this.agent.hasQueuedMessages() ? "continue" : "settled";
1658
1676
  }
1659
1677
  /**
1660
1678
  * Send a prompt to the agent.
@@ -2798,7 +2816,9 @@ export class AgentSession {
2798
2816
  contextTokens = directContextTokens;
2799
2817
  }
2800
2818
  if (shouldCompact(contextTokens, contextWindow, settings)) {
2801
- return await this._runAutoCompaction("threshold", false, signal, deferCommit);
2819
+ const queuedContinuation = await this._runAutoCompaction("threshold", false, signal, deferCommit);
2820
+ // Threshold compaction does not recover a provider failure.
2821
+ return assistantMessage.stopReason !== "error" && queuedContinuation;
2802
2822
  }
2803
2823
  return false;
2804
2824
  }
@@ -453,7 +453,7 @@ export class ModelRuntime {
453
453
  return lazyStream(model, async () => {
454
454
  const prepared = await this.prepareRequest(model, options);
455
455
  return prepared.provider.stream(prepared.model, context, prepared.options);
456
- });
456
+ }, options?.signal);
457
457
  }
458
458
  complete(model, context, options) {
459
459
  return this.stream(model, context, options).result();
@@ -462,7 +462,7 @@ export class ModelRuntime {
462
462
  return lazyStream(model, async () => {
463
463
  const prepared = await this.prepareRequest(model, options);
464
464
  return prepared.provider.streamSimple(prepared.model, context, prepared.options);
465
- });
465
+ }, options?.signal);
466
466
  }
467
467
  completeSimple(model, context, options) {
468
468
  return this.streamSimple(model, context, options).result();
@@ -474,7 +474,7 @@ export class ModelRuntime {
474
474
  throw new ModelsError("provider", `Provider ${model.provider} does not support deferred responses`);
475
475
  }
476
476
  return prepared.provider.fetchDeferred(prepared.model, handle, prepared.options);
477
- }).result();
477
+ }, options?.signal).result();
478
478
  }
479
479
  async cancelDeferred(model, handle, options) {
480
480
  const prepared = await this.prepareRequest(model, options);
@@ -321,7 +321,7 @@ export function composeModelProvider(providerId, base, modelConfig, extension) {
321
321
  return simple
322
322
  ? api.streamSimple(model, context, options)
323
323
  : api.stream(model, context, options);
324
- });
324
+ }, options?.signal);
325
325
  const provider = {
326
326
  id: providerId,
327
327
  name: extension?.name ?? config?.name ?? base?.name ?? extension?.oauth?.name ?? providerId,
@@ -5,8 +5,7 @@
5
5
  import { formatSkillsForPrompt } from "./skills.js";
6
6
  /** Build the system prompt with tools, guidelines, and context */
7
7
  export function buildProductionSystemPrompt(options) {
8
- const { customPrompt, selectedTools, toolSnippets, promptGuidelines, appendSystemPrompt, evolutionMemory, cwd, contextFiles: providedContextFiles, skills: providedSkills, } = options;
9
- const promptCwd = cwd.replace(/\\/g, "/");
8
+ const { customPrompt, selectedTools, toolSnippets, promptGuidelines, appendSystemPrompt, evolutionMemory, contextFiles: providedContextFiles, skills: providedSkills, } = options;
10
9
  const appendSection = appendSystemPrompt ? `\n\n${appendSystemPrompt}` : "";
11
10
  const evolutionSection = evolutionMemory?.memory
12
11
  ? `\n\n<evolution_memory version="${evolutionMemory.version}">\n${evolutionMemory.memory}\n</evolution_memory>`
@@ -33,7 +32,6 @@ export function buildProductionSystemPrompt(options) {
33
32
  if (customPromptHasRead && skills.length > 0) {
34
33
  prompt += formatSkillsForPrompt(skills);
35
34
  }
36
- prompt += `\nCurrent working directory: ${promptCwd}`;
37
35
  return prompt;
38
36
  }
39
37
  // Build tools list based on selected tools.
@@ -64,17 +62,14 @@ export function buildProductionSystemPrompt(options) {
64
62
  }
65
63
  }
66
64
  const guidelines = guidelineGroups.length > 0 ? guidelineGroups.join("\n") : "(none)";
67
- let prompt = `You are Diffex, a coding agent. You help users by reading files, executing commands, editing code, and writing new files.
68
-
69
- Available tools:
65
+ let prompt = `Available tools:
70
66
  ${toolsList}
71
67
 
72
- In addition to the tools above, you may have access to other custom project-related tools.
73
-
74
68
  Tool usage guidelines:
75
69
  ${guidelines}
76
70
 
77
71
  Conversational Style:
72
+ - When the user asks a question, answer it first before making edits or running implementation commands.
78
73
  - Keep responses concise and direct, adapting detail and terminology to the user.
79
74
  - No emojis in commits, issues, PR comments, or code.
80
75
  - No fluff or cheerful filler text (e.g., "Thanks @user" not "Thanks so much @user!").
@@ -103,6 +98,5 @@ Diffex documentation (read the documentation website only when the user asks abo
103
98
  if (hasRead && skills.length > 0) {
104
99
  prompt += formatSkillsForPrompt(skills);
105
100
  }
106
- prompt += `\nCurrent working directory: ${promptCwd}`;
107
101
  return prompt;
108
102
  }
@@ -9,8 +9,7 @@ import { buildProductionSystemPrompt } from "./system-prompt-production.js";
9
9
  export function buildSystemPrompt(options) {
10
10
  if (IS_PRODUCTION_DISTRIBUTION)
11
11
  return buildProductionSystemPrompt(options);
12
- const { customPrompt, selectedTools, toolSnippets, promptGuidelines, appendSystemPrompt, evolutionMemory, cwd, contextFiles: providedContextFiles, skills: providedSkills, } = options;
13
- const promptCwd = cwd.replace(/\\/g, "/");
12
+ const { customPrompt, selectedTools, toolSnippets, promptGuidelines, appendSystemPrompt, evolutionMemory, contextFiles: providedContextFiles, skills: providedSkills, } = options;
14
13
  const appendSection = appendSystemPrompt ? `\n\n${appendSystemPrompt}` : "";
15
14
  const evolutionSection = evolutionMemory?.memory
16
15
  ? `\n\n<evolution_memory version="${evolutionMemory.version}">\n${evolutionMemory.memory}\n</evolution_memory>`
@@ -37,7 +36,6 @@ export function buildSystemPrompt(options) {
37
36
  if (customPromptHasRead && skills.length > 0) {
38
37
  prompt += formatSkillsForPrompt(skills);
39
38
  }
40
- prompt += `\nCurrent working directory: ${promptCwd}`;
41
39
  return prompt;
42
40
  }
43
41
  // Get absolute paths to documentation and examples
@@ -71,13 +69,9 @@ export function buildSystemPrompt(options) {
71
69
  }
72
70
  }
73
71
  const guidelines = guidelineGroups.length > 0 ? guidelineGroups.join("\n") : "(none)";
74
- let prompt = `You are Diffex, a coding agent. You help users by reading files, executing commands, editing code, and writing new files.
75
-
76
- Available tools:
72
+ let prompt = `Available tools:
77
73
  ${toolsList}
78
74
 
79
- In addition to the tools above, you may have access to other custom project-related tools.
80
-
81
75
  Tool usage guidelines:
82
76
  ${guidelines}
83
77
 
@@ -116,6 +110,5 @@ ${existsSync(examplesPath) ? `- Examples: ${examplesPath} (extensions, custom to
116
110
  if (hasRead && skills.length > 0) {
117
111
  prompt += formatSkillsForPrompt(skills);
118
112
  }
119
- prompt += `\nCurrent working directory: ${promptCwd}`;
120
113
  return prompt;
121
114
  }
@@ -1,8 +1,8 @@
1
1
  [
2
2
  {
3
3
  "name": "@diffexai/diffex-agent-core",
4
- "version": "0.2.5",
5
- "sourceCommit": "823b91ffb444aa4ba189fa85fa3b0de13b103909",
4
+ "version": "0.2.7",
5
+ "sourceCommit": "598159fca2acfacdf5374205b5a5e46afe0af58a",
6
6
  "license": "Apache-2.0",
7
7
  "portions": "Diffex contributions; Pi-derived portions retain MIT terms in LICENSE",
8
8
  "notice": "LICENSE",
@@ -10,12 +10,12 @@
10
10
  },
11
11
  {
12
12
  "name": "@diffexai/diffex-ai",
13
- "version": "^0.2.5",
13
+ "version": "^0.2.7",
14
14
  "distribution": "resolved separately by package manager; not bundled in this npm tarball"
15
15
  },
16
16
  {
17
17
  "name": "@diffexai/diffex-telemetry",
18
- "version": "^0.2.5",
18
+ "version": "^0.2.7",
19
19
  "distribution": "resolved separately by package manager; not bundled in this npm tarball"
20
20
  },
21
21
  {
@@ -1,5 +1,5 @@
1
1
  {
2
- "sourceCommit": "823b91ffb444aa4ba189fa85fa3b0de13b103909",
2
+ "sourceCommit": "598159fca2acfacdf5374205b5a5e46afe0af58a",
3
3
  "algorithm": "sha256",
4
4
  "files": [
5
5
  {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@diffexai/diffex-agent-core",
3
- "version": "0.2.5",
3
+ "version": "0.2.7",
4
4
  "description": "General-purpose agent with transport abstraction, state management, and attachment support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -5,7 +5,7 @@ import { AssistantMessageEventStream } from "../utils/event-stream.ts";
5
5
  * lazy module loading) behind it. Setup failures terminate the stream with an
6
6
  * error event.
7
7
  */
8
- export declare function lazyStream(model: Model<Api>, setup: () => Promise<AsyncIterable<AssistantMessageEvent>>): AssistantMessageEventStream;
8
+ export declare function lazyStream(model: Model<Api>, setup: () => Promise<AsyncIterable<AssistantMessageEvent>>, signal?: AbortSignal): AssistantMessageEventStream;
9
9
  /**
10
10
  * Wraps a dynamically imported API implementation module as `ProviderStreams`.
11
11
  * The module loads on first stream call; the host's import cache deduplicates
@@ -1,5 +1,5 @@
1
1
  import { AssistantMessageEventStream } from "../utils/event-stream.js";
2
- function createSetupErrorMessage(model, error) {
2
+ function createSetupErrorMessage(model, error, signal) {
3
3
  return {
4
4
  role: "assistant",
5
5
  content: [],
@@ -14,7 +14,7 @@ function createSetupErrorMessage(model, error) {
14
14
  totalTokens: 0,
15
15
  cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
16
16
  },
17
- stopReason: "error",
17
+ stopReason: signal?.aborted ? "aborted" : "error",
18
18
  errorMessage: error instanceof Error ? error.message : String(error),
19
19
  timestamp: Date.now(),
20
20
  };
@@ -33,21 +33,21 @@ async function forwardStream(target, source) {
33
33
  * lazy module loading) behind it. Setup failures terminate the stream with an
34
34
  * error event.
35
35
  */
36
- export function lazyStream(model, setup) {
36
+ export function lazyStream(model, setup, signal) {
37
37
  const outer = new AssistantMessageEventStream();
38
38
  setup()
39
39
  .then((inner) => forwardStream(outer, inner))
40
40
  .catch((error) => {
41
- const message = createSetupErrorMessage(model, error);
42
- outer.push({ type: "error", reason: "error", error: message });
41
+ const message = createSetupErrorMessage(model, error, signal);
42
+ outer.push({ type: "error", reason: signal?.aborted ? "aborted" : "error", error: message });
43
43
  outer.end(message);
44
44
  });
45
45
  return outer;
46
46
  }
47
47
  export function lazyApi(load, capabilities) {
48
48
  const api = {
49
- stream: (model, context, options) => lazyStream(model, async () => (await load()).stream(model, context, options)),
50
- streamSimple: (model, context, options) => lazyStream(model, async () => (await load()).streamSimple(model, context, options)),
49
+ stream: (model, context, options) => lazyStream(model, async () => (await load()).stream(model, context, options), options?.signal),
50
+ streamSimple: (model, context, options) => lazyStream(model, async () => (await load()).streamSimple(model, context, options), options?.signal),
51
51
  };
52
52
  if (capabilities?.fetchDeferred) {
53
53
  api.fetchDeferred = (model, handle, options) => lazyStream(model, async () => {
@@ -55,7 +55,7 @@ export function lazyApi(load, capabilities) {
55
55
  if (!implementation.fetchDeferred)
56
56
  throw new Error("API does not support deferred responses");
57
57
  return implementation.fetchDeferred(model, handle, options);
58
- });
58
+ }, options?.signal);
59
59
  }
60
60
  if (capabilities?.cancelDeferred) {
61
61
  api.cancelDeferred = async (model, handle, options) => {
@@ -382,7 +382,7 @@ class ModelsImpl {
382
382
  const provider = this.requireProvider(model);
383
383
  const { requestModel, requestOptions } = await this.applyAuth(model, options);
384
384
  return provider.stream(requestModel, context, requestOptions);
385
- });
385
+ }, options?.signal);
386
386
  }
387
387
  async complete(model, context, options) {
388
388
  return this.stream(model, context, options).result();
@@ -392,7 +392,7 @@ class ModelsImpl {
392
392
  const provider = this.requireProvider(model);
393
393
  const { requestModel, requestOptions } = await this.applyAuth(model, options);
394
394
  return provider.streamSimple(requestModel, context, requestOptions);
395
- });
395
+ }, options?.signal);
396
396
  }
397
397
  async completeSimple(model, context, options) {
398
398
  return this.streamSimple(model, context, options).result();
@@ -405,7 +405,7 @@ class ModelsImpl {
405
405
  }
406
406
  const { requestModel, requestOptions } = await this.applyAuth(model, options);
407
407
  return provider.fetchDeferred(requestModel, handle, requestOptions);
408
- }).result();
408
+ }, options?.signal).result();
409
409
  }
410
410
  async cancelDeferred(model, handle, options) {
411
411
  const provider = this.requireProvider(model);
@@ -498,7 +498,7 @@ export function createProvider(input) {
498
498
  throw new ModelsError("provider", `Provider ${input.id} does not support deferred responses for "${model.api}"`);
499
499
  }
500
500
  return implementation.fetchDeferred(model, handle, options);
501
- });
501
+ }, options?.signal);
502
502
  }
503
503
  if (streams.some((entry) => entry.cancelDeferred !== undefined)) {
504
504
  provider.cancelDeferred = async (model, handle, options) => {
@@ -1 +1 @@
1
- {"schemaVersion":3,"generatedAt":"2026-09-17T21:13:21.165Z","structureHash":"7976430ecd1e287ac9a4b69368219f88aedc7c445d73dd8c6771409354ad0aa2","files":{"amazon-bedrock.json":"9d3eed9613b9b56f0c5f202a61b279a7168edf01bae6c3218a7ab28664ff80ea","ant-ling.json":"4979fe79d99ed97382d7ce40170c6132e932e77906de1eb54464c042e7d63633","anthropic.json":"6937a397c6c7cf654990d072734efad023b652b294b04961d43a5835d7d08156","azure-openai-responses.json":"787ba62322c46fbc69bc1fcb7c7cfc100b8f74211c72adf9766b6dbf5eae0c41","baseten.json":"c7cf9a7e7e6bee9c53005acf4706c25f954adaa64a9058535fb7e5b1d6920852","cerebras.json":"9eaa554e1b02f3665f8f63e6432d253bf81351af7c72001054dd8108aa528a52","cloudflare-ai-gateway.json":"356a2892803067a5d042c5abb87051edba46f7209589c625f8bcea8c7c5ce5c9","cloudflare-workers-ai.json":"07ef63208ff7517fd1a80962f18143e21de399640423329490b157f459ccf995","deepseek.json":"0dcc807a4e5827b488c6ceac87884ff6e735e01cf4f2ddfec9dd812e6fde041b","fireworks.json":"4c9055f7a2c5345b808bb561b07b227fc29148e0fb774c0ac50db2b34ab89aaf","github-copilot.json":"37cfc1da3a6814e37e14c565ed0a1e41f2eb513b10aa8f11ac18f27fa392308c","google-vertex.json":"e1631109172dc1f7d7977570420a5bb86258bdd1088427e244a2c51545c4f24d","google.json":"7619bf03edd2a7acb06a2274a14b13c3a61354288abe029a758401d4de36a8fd","groq.json":"e4728fd72e358cd8f25e9a518e9b49a521ef44523d3debe38a7db9e0663c4077","huggingface.json":"a488b6f175b382277ccf7d487f877ef0c698994576bb55d2410838bf9c8c7c41","kimi-coding.json":"9da7ea8e9eb8df5d8f73acc25d3da5b41164f522c0f09b45265b4bf104743ac1","minimax-cn.json":"65d37e55a6d9585855f94b3fb7739308d107fe248ebd9e1001d1c5d4606ad2c4","minimax.json":"c7dc5765995ae77242916430929c7cc9a782589f7e483e13f7e01663190d028e","mistral.json":"e3a109306644bf2f2fa38fece50b2d3ce1dbe3b87b1f1b9e2d70cce7eb5c0ea1","moonshotai-cn.json":"63f77de8782dce6a8d4649b6075ee04c9732863ae85561e0867871220c558bde","moonshotai.json":"2a8dfb97eb905e991c22081dc09bd4a61c05b7fa9ac0d5c72d6930f601f490f1","nvidia.json":"2ff6862206269af88a694e627c4b54753055357710adaf49ac8518d102c17407","openai-codex.json":"4a73818291987693fcb53e9e61b4be3429ffd78b3f64ea877a34c5f9928c89e1","openai.json":"6fa1954abd6c5b301620a02a57412bd60bbfdf20465b9a3eb4d113f88dfb8f7b","opencode-go.json":"f6ef7d30054d5af88cb5604bbad21c5d706ff8a4283da3e9f36d2a781d1754cf","opencode.json":"cb309aef8247a0c8717a4ad093927f584d61d25a7319e1b975b703f04c7b78a2","openrouter.json":"bb2b41a4007f5cffda2eb166f34d73f6d566f3501693d74994ebf48f18280634","qwen-token-plan-cn.json":"a50420854a624ea82155d9621cd88d6cbd7802498d28fb1fd317eb7a1bc26cc7","qwen-token-plan-individual.json":"0e1578a5c0e11d65644bb42d1d6efee5af97a55a4881d0421ab68bd970d4d4ef","qwen-token-plan.json":"24285f68b2350aa1d98ecaeafe0914bce97940fe8798eff20f2a5c6d8c26bd6f","together.json":"927c707d06f2236cdab13f14c870fb58bce0614ba7287bbcd57cc9fd66d191ed","vercel-ai-gateway.json":"3f61c5e49ac610838559b8108f287e5c983ad3b8651863c7ddfdf40969dd5346","xai.json":"282838b0546d63106c81f1703cdf5ed31ebfe0c5f13a4bec0d590472cbbe03f2","xiaomi-token-plan-ams.json":"7ce8ed244672c45737d286ff3ca9c3a2686a5d4b2f0c5f71ab9348c14b14daf3","xiaomi-token-plan-cn.json":"684892b5fe6fa371d6040d2011c0fa33facd650d2eaf19f5dbee8efb33016200","xiaomi-token-plan-sgp.json":"b19e79b82ac4fdcb080e6d220106797504c885ed70b27fc2b3c1aa4810f32963","xiaomi.json":"810368d3828c8bb9498012a0d48639030c0c216b8c13e79da02daa515aa23448","zai-coding-cn.json":"abf4cbc22507b9d545842072b5e34bce230025fc20f7b1cc67db3782c1dc4b56","zai.json":"089af736a622b0a25e417493819f4e174884afba43235c5a1f17814057875627"}}
1
+ {"schemaVersion":3,"generatedAt":"2026-09-18T20:09:43.444Z","structureHash":"6f62a1356961b2b72622d38d651d51ae89723f14fdb7281ebaf332d8e913920e","files":{"amazon-bedrock.json":"9d3eed9613b9b56f0c5f202a61b279a7168edf01bae6c3218a7ab28664ff80ea","ant-ling.json":"4979fe79d99ed97382d7ce40170c6132e932e77906de1eb54464c042e7d63633","anthropic.json":"6937a397c6c7cf654990d072734efad023b652b294b04961d43a5835d7d08156","azure-openai-responses.json":"787ba62322c46fbc69bc1fcb7c7cfc100b8f74211c72adf9766b6dbf5eae0c41","baseten.json":"c7cf9a7e7e6bee9c53005acf4706c25f954adaa64a9058535fb7e5b1d6920852","cerebras.json":"9eaa554e1b02f3665f8f63e6432d253bf81351af7c72001054dd8108aa528a52","cloudflare-ai-gateway.json":"356a2892803067a5d042c5abb87051edba46f7209589c625f8bcea8c7c5ce5c9","cloudflare-workers-ai.json":"07ef63208ff7517fd1a80962f18143e21de399640423329490b157f459ccf995","deepseek.json":"0dcc807a4e5827b488c6ceac87884ff6e735e01cf4f2ddfec9dd812e6fde041b","fireworks.json":"4c9055f7a2c5345b808bb561b07b227fc29148e0fb774c0ac50db2b34ab89aaf","github-copilot.json":"37cfc1da3a6814e37e14c565ed0a1e41f2eb513b10aa8f11ac18f27fa392308c","google-vertex.json":"e1631109172dc1f7d7977570420a5bb86258bdd1088427e244a2c51545c4f24d","google.json":"7619bf03edd2a7acb06a2274a14b13c3a61354288abe029a758401d4de36a8fd","groq.json":"e4728fd72e358cd8f25e9a518e9b49a521ef44523d3debe38a7db9e0663c4077","huggingface.json":"a488b6f175b382277ccf7d487f877ef0c698994576bb55d2410838bf9c8c7c41","kimi-coding.json":"9da7ea8e9eb8df5d8f73acc25d3da5b41164f522c0f09b45265b4bf104743ac1","minimax-cn.json":"65d37e55a6d9585855f94b3fb7739308d107fe248ebd9e1001d1c5d4606ad2c4","minimax.json":"c7dc5765995ae77242916430929c7cc9a782589f7e483e13f7e01663190d028e","mistral.json":"be522597b22bceeb0bb9a0ba1781647649ffd19637d0c8e67b056d7b0ec33d52","moonshotai-cn.json":"63f77de8782dce6a8d4649b6075ee04c9732863ae85561e0867871220c558bde","moonshotai.json":"2a8dfb97eb905e991c22081dc09bd4a61c05b7fa9ac0d5c72d6930f601f490f1","nvidia.json":"2ff6862206269af88a694e627c4b54753055357710adaf49ac8518d102c17407","openai-codex.json":"4a73818291987693fcb53e9e61b4be3429ffd78b3f64ea877a34c5f9928c89e1","openai.json":"6fa1954abd6c5b301620a02a57412bd60bbfdf20465b9a3eb4d113f88dfb8f7b","opencode-go.json":"31c4434316c8a1b7fcc637b25f1147dd44da946a0b932ca10fb5ac594261dad7","opencode.json":"ce7fcaa9e6da77b00d875b42db03d39332c259338e8e1632e74126d663c8405b","openrouter.json":"828095707e092be2e68b8c6a052588188ef651f68d4097d3d72ab183fb5c7b81","qwen-token-plan-cn.json":"a50420854a624ea82155d9621cd88d6cbd7802498d28fb1fd317eb7a1bc26cc7","qwen-token-plan-individual.json":"0e1578a5c0e11d65644bb42d1d6efee5af97a55a4881d0421ab68bd970d4d4ef","qwen-token-plan.json":"24285f68b2350aa1d98ecaeafe0914bce97940fe8798eff20f2a5c6d8c26bd6f","together.json":"927c707d06f2236cdab13f14c870fb58bce0614ba7287bbcd57cc9fd66d191ed","vercel-ai-gateway.json":"e61d139444d16c7900a141d0bc9af874761794e80fb7d3ff4a08a21c3e93231f","xai.json":"282838b0546d63106c81f1703cdf5ed31ebfe0c5f13a4bec0d590472cbbe03f2","xiaomi-token-plan-ams.json":"7ce8ed244672c45737d286ff3ca9c3a2686a5d4b2f0c5f71ab9348c14b14daf3","xiaomi-token-plan-cn.json":"684892b5fe6fa371d6040d2011c0fa33facd650d2eaf19f5dbee8efb33016200","xiaomi-token-plan-sgp.json":"b19e79b82ac4fdcb080e6d220106797504c885ed70b27fc2b3c1aa4810f32963","xiaomi.json":"810368d3828c8bb9498012a0d48639030c0c216b8c13e79da02daa515aa23448","zai-coding-cn.json":"abf4cbc22507b9d545842072b5e34bce230025fc20f7b1cc67db3782c1dc4b56","zai.json":"089af736a622b0a25e417493819f4e174884afba43235c5a1f17814057875627"}}
@@ -1 +1 @@
1
- {"mistral-conversations":{"codestral-latest":{"id":"codestral-latest","name":"Codestral (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.3,"output":0.9,"cacheRead":0.03,"cacheWrite":0},"contextWindow":256000,"maxTokens":4096},"devstral-2512":{"id":"devstral-2512","name":"Devstral 2","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.4,"output":2,"cacheRead":0.04,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"devstral-latest":{"id":"devstral-latest","name":"Devstral 2","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.4,"output":2,"cacheRead":0.04,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"devstral-medium-2507":{"id":"devstral-medium-2507","name":"Devstral Medium","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.4,"output":2,"cacheRead":0.04,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"devstral-medium-latest":{"id":"devstral-medium-latest","name":"Devstral 2 (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.4,"output":2,"cacheRead":0.04,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"devstral-small-2505":{"id":"devstral-small-2505","name":"Devstral Small 2505","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.3,"cacheRead":0.01,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"devstral-small-2507":{"id":"devstral-small-2507","name":"Devstral Small","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.3,"cacheRead":0.01,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"labs-devstral-small-2512":{"id":"labs-devstral-small-2512","name":"Devstral Small 2","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":256000,"maxTokens":256000},"magistral-medium-latest":{"id":"magistral-medium-latest","name":"Magistral Medium (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":true,"input":["text"],"cost":{"input":2,"output":5,"cacheRead":0.2,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},"magistral-small":{"id":"magistral-small","name":"Magistral Small","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":true,"input":["text"],"cost":{"input":0.5,"output":1.5,"cacheRead":0.05,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"ministral-3b-latest":{"id":"ministral-3b-latest","name":"Ministral 3B (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.04,"output":0.04,"cacheRead":0.004,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"ministral-8b-latest":{"id":"ministral-8b-latest","name":"Ministral 8B (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.1,"cacheRead":0.01,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"mistral-large-2411":{"id":"mistral-large-2411","name":"Mistral Large 2.1","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":2,"output":6,"cacheRead":0.2,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},"mistral-large-2512":{"id":"mistral-large-2512","name":"Mistral Large 3","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text","image"],"cost":{"input":0.5,"output":1.5,"cacheRead":0.05,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"mistral-large-latest":{"id":"mistral-large-latest","name":"Mistral Large (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text","image"],"cost":{"input":0.5,"output":1.5,"cacheRead":0.05,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"mistral-medium-2505":{"id":"mistral-medium-2505","name":"Mistral Medium 3","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text","image"],"cost":{"input":0.4,"output":2,"cacheRead":0.04,"cacheWrite":0},"contextWindow":131072,"maxTokens":131072},"mistral-medium-2508":{"id":"mistral-medium-2508","name":"Mistral Medium 3.1","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text","image"],"cost":{"input":0.4,"output":2,"cacheRead":0.04,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"mistral-medium-2604":{"id":"mistral-medium-2604","name":"Mistral Medium 3.5","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":true,"input":["text","image"],"cost":{"input":1.5,"output":7.5,"cacheRead":0.15,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"mistral-medium-3.5":{"id":"mistral-medium-3.5","name":"Mistral Medium 3.5","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":true,"input":["text","image"],"cost":{"input":1.5,"output":7.5,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"mistral-medium-latest":{"id":"mistral-medium-latest","name":"Mistral Medium (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":true,"input":["text","image"],"cost":{"input":1.5,"output":7.5,"cacheRead":0.15,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"mistral-nemo":{"id":"mistral-nemo","name":"Mistral Nemo","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.15,"cacheRead":0.015,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"mistral-small-2506":{"id":"mistral-small-2506","name":"Mistral Small 3.2","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text","image"],"cost":{"input":0.1,"output":0.3,"cacheRead":0.01,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},"mistral-small-2603":{"id":"mistral-small-2603","name":"Mistral Small 4","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":true,"input":["text","image"],"cost":{"input":0.15,"output":0.6,"cacheRead":0.015,"cacheWrite":0},"contextWindow":256000,"maxTokens":256000},"mistral-small-latest":{"id":"mistral-small-latest","name":"Mistral Small (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":true,"input":["text","image"],"cost":{"input":0.15,"output":0.6,"cacheRead":0.015,"cacheWrite":0},"contextWindow":256000,"maxTokens":256000},"open-mistral-7b":{"id":"open-mistral-7b","name":"Mistral 7B","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.25,"output":0.25,"cacheRead":0.025,"cacheWrite":0},"contextWindow":8000,"maxTokens":8000},"open-mistral-nemo":{"id":"open-mistral-nemo","name":"Open Mistral Nemo","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.15,"cacheRead":0.015,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"open-mixtral-8x22b":{"id":"open-mixtral-8x22b","name":"Mixtral 8x22B","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":2,"output":6,"cacheRead":0.2,"cacheWrite":0},"contextWindow":64000,"maxTokens":64000},"open-mixtral-8x7b":{"id":"open-mixtral-8x7b","name":"Mixtral 8x7B","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.7,"output":0.7,"cacheRead":0.07,"cacheWrite":0},"contextWindow":32000,"maxTokens":32000},"pixtral-12b":{"id":"pixtral-12b","name":"Pixtral 12B","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text","image"],"cost":{"input":0.15,"output":0.15,"cacheRead":0.015,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"pixtral-large-latest":{"id":"pixtral-large-latest","name":"Pixtral Large (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":6,"cacheRead":0.2,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"voxtral-small-latest":{"id":"voxtral-small-latest","name":"Voxtral Small (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.3,"cacheRead":0.01,"cacheWrite":0},"contextWindow":32000,"maxTokens":32000},"zai-glm-5-2":{"id":"zai-glm-5-2","name":"GLM-5.2","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":true,"input":["text"],"cost":{"input":1.4,"output":4.4,"cacheRead":0.14,"cacheWrite":0},"contextWindow":1000000,"maxTokens":131072}}}
1
+ {"mistral-conversations":{"codestral-latest":{"id":"codestral-latest","name":"Codestral (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.3,"output":0.9,"cacheRead":0.03,"cacheWrite":0},"contextWindow":256000,"maxTokens":4096},"devstral-2512":{"id":"devstral-2512","name":"Devstral 2","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.4,"output":2,"cacheRead":0.04,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"devstral-latest":{"id":"devstral-latest","name":"Devstral 2","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.4,"output":2,"cacheRead":0.04,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"devstral-medium-2507":{"id":"devstral-medium-2507","name":"Devstral Medium","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.4,"output":2,"cacheRead":0.04,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"devstral-medium-latest":{"id":"devstral-medium-latest","name":"Devstral 2 (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.4,"output":2,"cacheRead":0.04,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"devstral-small-2505":{"id":"devstral-small-2505","name":"Devstral Small 2505","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.3,"cacheRead":0.01,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"devstral-small-2507":{"id":"devstral-small-2507","name":"Devstral Small","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.3,"cacheRead":0.01,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"labs-devstral-small-2512":{"id":"labs-devstral-small-2512","name":"Devstral Small 2","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":256000,"maxTokens":256000},"magistral-medium-latest":{"id":"magistral-medium-latest","name":"Magistral Medium (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":true,"input":["text"],"cost":{"input":2,"output":5,"cacheRead":0.2,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},"magistral-small":{"id":"magistral-small","name":"Magistral Small","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":true,"input":["text"],"cost":{"input":0.5,"output":1.5,"cacheRead":0.05,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"ministral-3b-latest":{"id":"ministral-3b-latest","name":"Ministral 3B (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.04,"output":0.04,"cacheRead":0.004,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"ministral-8b-latest":{"id":"ministral-8b-latest","name":"Ministral 8B (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.1,"cacheRead":0.01,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"mistral-large-2411":{"id":"mistral-large-2411","name":"Mistral Large 2.1","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":2,"output":6,"cacheRead":0.2,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},"mistral-large-2512":{"id":"mistral-large-2512","name":"Mistral Large 3","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text","image"],"cost":{"input":0.5,"output":1.5,"cacheRead":0.05,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"mistral-large-latest":{"id":"mistral-large-latest","name":"Mistral Large (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text","image"],"cost":{"input":0.5,"output":1.5,"cacheRead":0.05,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"mistral-medium-2505":{"id":"mistral-medium-2505","name":"Mistral Medium 3","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text","image"],"cost":{"input":0.4,"output":2,"cacheRead":0.04,"cacheWrite":0},"contextWindow":131072,"maxTokens":131072},"mistral-medium-2508":{"id":"mistral-medium-2508","name":"Mistral Medium 3.1","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text","image"],"cost":{"input":0.4,"output":2,"cacheRead":0.04,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"mistral-medium-2604":{"id":"mistral-medium-2604","name":"Mistral Medium 3.5","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":true,"input":["text","image"],"cost":{"input":1.5,"output":7.5,"cacheRead":0.15,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"mistral-medium-3.5":{"id":"mistral-medium-3.5","name":"Mistral Medium 3.5","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":true,"input":["text","image"],"cost":{"input":1.5,"output":7.5,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"mistral-medium-latest":{"id":"mistral-medium-latest","name":"Mistral Medium (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":true,"input":["text","image"],"cost":{"input":1.5,"output":7.5,"cacheRead":0.15,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"mistral-nemo":{"id":"mistral-nemo","name":"Mistral Nemo","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.15,"cacheRead":0.015,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"mistral-small-2506":{"id":"mistral-small-2506","name":"Mistral Small 3.2","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text","image"],"cost":{"input":0.1,"output":0.3,"cacheRead":0.01,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},"mistral-small-2603":{"id":"mistral-small-2603","name":"Mistral Small 4","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":true,"input":["text","image"],"cost":{"input":0.15,"output":0.6,"cacheRead":0.015,"cacheWrite":0},"contextWindow":256000,"maxTokens":256000},"mistral-small-latest":{"id":"mistral-small-latest","name":"Mistral Small (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":true,"input":["text","image"],"cost":{"input":0.15,"output":0.6,"cacheRead":0.015,"cacheWrite":0},"contextWindow":256000,"maxTokens":256000},"open-mistral-7b":{"id":"open-mistral-7b","name":"Mistral 7B","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.25,"output":0.25,"cacheRead":0.025,"cacheWrite":0},"contextWindow":8000,"maxTokens":8000},"open-mistral-nemo":{"id":"open-mistral-nemo","name":"Open Mistral Nemo","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.15,"cacheRead":0.015,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"open-mixtral-8x22b":{"id":"open-mixtral-8x22b","name":"Mixtral 8x22B","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":2,"output":6,"cacheRead":0.2,"cacheWrite":0},"contextWindow":64000,"maxTokens":64000},"open-mixtral-8x7b":{"id":"open-mixtral-8x7b","name":"Mixtral 8x7B","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.7,"output":0.7,"cacheRead":0.07,"cacheWrite":0},"contextWindow":32000,"maxTokens":32000},"pixtral-12b":{"id":"pixtral-12b","name":"Pixtral 12B","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text","image"],"cost":{"input":0.15,"output":0.15,"cacheRead":0.015,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"pixtral-large-latest":{"id":"pixtral-large-latest","name":"Pixtral Large (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":6,"cacheRead":0.2,"cacheWrite":0},"contextWindow":128000,"maxTokens":128000},"voxtral-small-latest":{"id":"voxtral-small-latest","name":"Voxtral Small (latest)","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.3,"cacheRead":0.01,"cacheWrite":0},"contextWindow":32000,"maxTokens":32000},"zai-glm-5-2":{"id":"zai-glm-5-2","name":"GLM-5.2","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":true,"input":["text"],"cost":{"input":1.4,"output":4.4,"cacheRead":0.14,"cacheWrite":0},"contextWindow":1000000,"maxTokens":131072},"zai-glm-5-3":{"id":"zai-glm-5-3","name":"GLM-5.3","api":"mistral-conversations","provider":"mistral","baseUrl":"https://api.mistral.ai","reasoning":true,"input":["text"],"cost":{"input":1.4,"output":4.4,"cacheRead":0.14,"cacheWrite":0},"contextWindow":1000000,"maxTokens":131072}}}
@@ -1 +1 @@
1
- {"anthropic-messages":{"minimax-m3":{"id":"minimax-m3","name":"MiniMax-M3","api":"anthropic-messages","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go","reasoning":true,"input":["text","image"],"cost":{"input":0.3,"output":1.2,"cacheRead":0.06,"cacheWrite":0},"contextWindow":1000000,"maxTokens":131072},"qwen3.8-flash":{"id":"qwen3.8-flash","name":"Qwen3.8 Flash","api":"anthropic-messages","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go","reasoning":true,"input":["text","image"],"cost":{"input":0.15,"output":0.47,"cacheRead":0.016,"cacheWrite":0.2},"contextWindow":1000000,"maxTokens":131072},"union-alpha":{"id":"union-alpha","name":"Union Alpha Free","api":"anthropic-messages","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go","reasoning":true,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":131072}},"openai-completions":{"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0.003,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens","requiresReasoningContentOnAssistantMessages":true,"thinkingFormat":"deepseek"},"contextWindow":1000000,"maxTokens":384000,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null,"high":"high","max":"max"}},"deepseek-v4-flash-vision-exp":{"id":"deepseek-v4-flash-vision-exp","name":"DeepSeek V4 Flash Vision Exp","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.15,"output":0.6,"cacheRead":0.003,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens","requiresReasoningContentOnAssistantMessages":true,"thinkingFormat":"deepseek"},"contextWindow":1000000,"maxTokens":384000,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null,"high":"high","max":"max"}},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro (New)","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":0.66,"output":1.98,"cacheRead":0.022,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens","requiresReasoningContentOnAssistantMessages":true,"thinkingFormat":"deepseek"},"contextWindow":1000000,"maxTokens":384000,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null,"high":"high","max":"max"}},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.15,"output":0.6,"cacheRead":0.003,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens","requiresReasoningContentOnAssistantMessages":true,"thinkingFormat":"deepseek"},"contextWindow":1000000,"maxTokens":384000,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null,"high":"high","max":"max"}},"glm-5.1":{"id":"glm-5.1","name":"GLM-5.1","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":1.4,"output":4.4,"cacheRead":0.26,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":202752,"maxTokens":32768},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":1.4,"output":4.4,"cacheRead":0.26,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1000000,"maxTokens":131072,"thinkingLevelMap":{"off":null,"minimal":null,"low":null,"medium":null,"high":"high","xhigh":null,"max":"max"}},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":1.4,"output":4.4,"cacheRead":0.26,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1000000,"maxTokens":131072,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":null,"high":"high","xhigh":null,"max":"max"}},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.15,"output":0.5,"cacheRead":0.03,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1000000,"maxTokens":131072,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":null,"high":"high","xhigh":null,"max":"max"}},"hy3":{"id":"hy3","name":"Hy3","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":0.14,"output":0.58,"cacheRead":0.035,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":256000,"maxTokens":128000,"thinkingLevelMap":{"off":"none","minimal":null,"low":"low","medium":null,"high":"high","xhigh":null,"max":null}},"hy4-preview":{"id":"hy4-preview","name":"Hy4 preview","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":0.834,"output":2.501,"cacheRead":0.042,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1024000,"maxTokens":64000,"thinkingLevelMap":{"off":"none","minimal":null,"low":null,"medium":null,"high":"high","xhigh":null,"max":null}},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.95,"output":4,"cacheRead":0.16,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"thinkingFormat":"deepseek","supportsReasoningEffort":false,"maxTokensField":"max_tokens","supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":65536,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null}},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.95,"output":4,"cacheRead":0.19,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":262144,"maxTokens":262144},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0.3,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1048576,"maxTokens":131072,"thinkingLevelMap":{"off":null,"minimal":null,"low":null,"medium":null,"high":null,"xhigh":null,"max":"max"}},"longcat-2.0":{"id":"longcat-2.0","name":"LongCat-2.0","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0.006,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1000000,"maxTokens":131072},"mimo-v2.5":{"id":"mimo-v2.5","name":"MiMo V2.5","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.14,"output":0.28,"cacheRead":0.0028,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1000000,"maxTokens":128000},"mimo-v2.5-pro":{"id":"mimo-v2.5-pro","name":"MiMo V2.5 Pro","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":0.435,"output":0.87,"cacheRead":0.003625,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1048576,"maxTokens":128000},"minimax-m2.7":{"id":"minimax-m2.7","name":"MiniMax-M2.7","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0.06,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":204800,"maxTokens":131072},"qwen3.6-plus":{"id":"qwen3.6-plus","name":"Qwen3.6 Plus","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.5,"output":3,"cacheRead":0.05,"cacheWrite":0.625},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"thinkingFormat":"qwen","maxTokensField":"max_tokens"},"contextWindow":1000000,"maxTokens":65536},"qwen3.7-max":{"id":"qwen3.7-max","name":"Qwen3.7 Max","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":2.5,"output":7.5,"cacheRead":0.5,"cacheWrite":3.125},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1000000,"maxTokens":65536},"qwen3.7-plus":{"id":"qwen3.7-plus","name":"Qwen3.7 Plus","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.4,"output":1.6,"cacheRead":0.04,"cacheWrite":0.5},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1000000,"maxTokens":65536},"qwen3.8-max":{"id":"qwen3.8-max","name":"Qwen3.8 Max","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":6,"cacheRead":0.25,"cacheWrite":2.5},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1000000,"maxTokens":131072,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":null,"xhigh":"xhigh","max":null}}},"openai-responses":{"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","api":"openai-responses","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.2,"output":1.2,"cacheRead":0.02,"cacheWrite":0.25},"compat":{"sessionAffinityFormat":"openai-nosession"},"contextWindow":1050000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":"xhigh","max":"max"}},"grok-4.6":{"id":"grok-4.6","name":"Grok 4.6","api":"openai-responses","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":6,"cacheRead":0.5,"cacheWrite":0},"compat":{"sessionAffinityFormat":"openai-nosession"},"contextWindow":500000,"maxTokens":500000,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":"xhigh","max":null}},"muse-spark-1.2-contributor":{"id":"muse-spark-1.2-contributor","name":"Muse Spark 1.2 Contributor","api":"openai-responses","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.1,"output":0.2,"cacheRead":0.002,"cacheWrite":0},"compat":{"sessionAffinityFormat":"openai-nosession"},"contextWindow":1048576,"maxTokens":131072,"thinkingLevelMap":{"off":null,"minimal":"minimal","low":"low","medium":"medium","high":"high","xhigh":"xhigh","max":null}},"muse-spark-1.3-contributor":{"id":"muse-spark-1.3-contributor","name":"Muse Spark 1.3 Contributor","api":"openai-responses","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.1,"output":0.2,"cacheRead":0.002,"cacheWrite":0},"compat":{"sessionAffinityFormat":"openai-nosession"},"contextWindow":1048576,"maxTokens":131072,"thinkingLevelMap":{"off":null,"minimal":"minimal","low":"low","medium":"medium","high":"high","xhigh":"xhigh","max":null}}}}
1
+ {"anthropic-messages":{"minimax-m3":{"id":"minimax-m3","name":"MiniMax-M3","api":"anthropic-messages","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go","reasoning":true,"input":["text","image"],"cost":{"input":0.3,"output":1.2,"cacheRead":0.06,"cacheWrite":0},"contextWindow":1000000,"maxTokens":131072},"qwen3.8-flash":{"id":"qwen3.8-flash","name":"Qwen3.8 Flash","api":"anthropic-messages","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go","reasoning":true,"input":["text","image"],"cost":{"input":0.15,"output":0.47,"cacheRead":0.016,"cacheWrite":0.2},"contextWindow":1000000,"maxTokens":131072}},"openai-completions":{"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0.003,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens","requiresReasoningContentOnAssistantMessages":true,"thinkingFormat":"deepseek"},"contextWindow":1000000,"maxTokens":384000,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null,"high":"high","max":"max"}},"deepseek-v4-flash-vision-exp":{"id":"deepseek-v4-flash-vision-exp","name":"DeepSeek V4 Flash Vision Exp","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.15,"output":0.6,"cacheRead":0.003,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens","requiresReasoningContentOnAssistantMessages":true,"thinkingFormat":"deepseek"},"contextWindow":1000000,"maxTokens":384000,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null,"high":"high","max":"max"}},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro (New)","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":0.66,"output":1.98,"cacheRead":0.022,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens","requiresReasoningContentOnAssistantMessages":true,"thinkingFormat":"deepseek"},"contextWindow":1000000,"maxTokens":384000,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null,"high":"high","max":"max"}},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.15,"output":0.6,"cacheRead":0.003,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens","requiresReasoningContentOnAssistantMessages":true,"thinkingFormat":"deepseek"},"contextWindow":1000000,"maxTokens":384000,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null,"high":"high","max":"max"}},"glm-5.1":{"id":"glm-5.1","name":"GLM-5.1","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":1.4,"output":4.4,"cacheRead":0.26,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":202752,"maxTokens":32768},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":1.4,"output":4.4,"cacheRead":0.26,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1000000,"maxTokens":131072,"thinkingLevelMap":{"off":null,"minimal":null,"low":null,"medium":null,"high":"high","xhigh":null,"max":"max"}},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":1.4,"output":4.4,"cacheRead":0.26,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1000000,"maxTokens":131072,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":null,"high":"high","xhigh":null,"max":"max"}},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.15,"output":0.5,"cacheRead":0.03,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1000000,"maxTokens":131072,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":null,"high":"high","xhigh":null,"max":"max"}},"hy3":{"id":"hy3","name":"Hy3","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":0.14,"output":0.58,"cacheRead":0.035,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":256000,"maxTokens":128000,"thinkingLevelMap":{"off":"none","minimal":null,"low":"low","medium":null,"high":"high","xhigh":null,"max":null}},"hy4-preview":{"id":"hy4-preview","name":"Hy4 preview","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":0.834,"output":2.501,"cacheRead":0.042,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1024000,"maxTokens":64000,"thinkingLevelMap":{"off":"none","minimal":null,"low":null,"medium":null,"high":"high","xhigh":null,"max":null}},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.95,"output":4,"cacheRead":0.16,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"thinkingFormat":"deepseek","supportsReasoningEffort":false,"maxTokensField":"max_tokens","supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":65536,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null}},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.95,"output":4,"cacheRead":0.19,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":262144,"maxTokens":262144},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0.3,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1048576,"maxTokens":131072,"thinkingLevelMap":{"off":null,"minimal":null,"low":null,"medium":null,"high":null,"xhigh":null,"max":"max"}},"longcat-2.0":{"id":"longcat-2.0","name":"LongCat-2.0","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0.006,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1000000,"maxTokens":131072},"mimo-v2.5":{"id":"mimo-v2.5","name":"MiMo V2.5","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.14,"output":0.28,"cacheRead":0.0028,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1000000,"maxTokens":128000},"mimo-v2.5-pro":{"id":"mimo-v2.5-pro","name":"MiMo V2.5 Pro","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":0.435,"output":0.87,"cacheRead":0.003625,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1048576,"maxTokens":128000},"minimax-m2.7":{"id":"minimax-m2.7","name":"MiniMax-M2.7","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0.06,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":204800,"maxTokens":131072},"qwen3.6-plus":{"id":"qwen3.6-plus","name":"Qwen3.6 Plus","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.5,"output":3,"cacheRead":0.05,"cacheWrite":0.625},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"thinkingFormat":"qwen","maxTokensField":"max_tokens"},"contextWindow":1000000,"maxTokens":65536},"qwen3.7-max":{"id":"qwen3.7-max","name":"Qwen3.7 Max","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text"],"cost":{"input":2.5,"output":7.5,"cacheRead":0.5,"cacheWrite":3.125},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1000000,"maxTokens":65536},"qwen3.7-plus":{"id":"qwen3.7-plus","name":"Qwen3.7 Plus","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.4,"output":1.6,"cacheRead":0.04,"cacheWrite":0.5},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1000000,"maxTokens":65536},"qwen3.8-max":{"id":"qwen3.8-max","name":"Qwen3.8 Max","api":"openai-completions","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":6,"cacheRead":0.25,"cacheWrite":2.5},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"maxTokensField":"max_tokens"},"contextWindow":1000000,"maxTokens":131072,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":null,"xhigh":"xhigh","max":null}}},"openai-responses":{"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","api":"openai-responses","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.2,"output":1.2,"cacheRead":0.02,"cacheWrite":0.25},"compat":{"sessionAffinityFormat":"openai-nosession"},"contextWindow":1050000,"maxTokens":128000,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":"xhigh","max":"max"}},"grok-4.6":{"id":"grok-4.6","name":"Grok 4.6","api":"openai-responses","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":6,"cacheRead":0.5,"cacheWrite":0},"compat":{"sessionAffinityFormat":"openai-nosession"},"contextWindow":500000,"maxTokens":500000,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":"xhigh","max":null}},"muse-spark-1.2-contributor":{"id":"muse-spark-1.2-contributor","name":"Muse Spark 1.2 Contributor","api":"openai-responses","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.1,"output":0.2,"cacheRead":0.002,"cacheWrite":0},"compat":{"sessionAffinityFormat":"openai-nosession"},"contextWindow":1048576,"maxTokens":131072,"thinkingLevelMap":{"off":null,"minimal":"minimal","low":"low","medium":"medium","high":"high","xhigh":"xhigh","max":null}},"muse-spark-1.3-contributor":{"id":"muse-spark-1.3-contributor","name":"Muse Spark 1.3 Contributor","api":"openai-responses","provider":"opencode-go","baseUrl":"https://opencode.ai/zen/go/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.1,"output":0.2,"cacheRead":0.002,"cacheWrite":0},"compat":{"sessionAffinityFormat":"openai-nosession"},"contextWindow":1048576,"maxTokens":131072,"thinkingLevelMap":{"off":null,"minimal":"minimal","low":"low","medium":"medium","high":"high","xhigh":"xhigh","max":null}}}}