@bitkyc08/opencodex 2.6.14 → 2.6.15-preview.20260701.1

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.
@@ -16,7 +16,7 @@
16
16
  } catch (e) {}
17
17
  })();
18
18
  </script>
19
- <script type="module" crossorigin src="/assets/index-B64_jgH-.js"></script>
19
+ <script type="module" crossorigin src="/assets/index-BAJuBSv6.js"></script>
20
20
  <link rel="stylesheet" crossorigin href="/assets/index-DIBiVVC0.css">
21
21
  </head>
22
22
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitkyc08/opencodex",
3
- "version": "2.6.14",
3
+ "version": "2.6.15-preview.20260701.1",
4
4
  "description": "Universal provider proxy for OpenAI Codex — use any LLM with Codex CLI/App/SDK",
5
5
  "type": "module",
6
6
  "main": "./bin/package-main.mjs",
@@ -41,6 +41,11 @@ const OUTPUT_HEADROOM = 8192;
41
41
  /** Minimum visible-output room kept below `max_tokens` (so `max_tokens > budget_tokens` always holds). */
42
42
  const OUTPUT_FLOOR = 4096;
43
43
  const COMPAT_TOOL_PREFIX = "cx_";
44
+ const EPHEMERAL_CACHE_CONTROL = { type: "ephemeral" } as const;
45
+
46
+ function withPromptCache<T extends Record<string, unknown>>(block: T): T & { cache_control: typeof EPHEMERAL_CACHE_CONTROL } {
47
+ return { ...block, cache_control: EPHEMERAL_CACHE_CONTROL };
48
+ }
44
49
 
45
50
  /** Map a Responses reasoning effort to an Anthropic extended-thinking budget (tokens, >= 1024). */
46
51
  function reasoningBudget(effort: string): number {
@@ -203,11 +208,14 @@ function toolsToAnthropicFormat(parsed: OcxParsedRequest, toolNames: { toWire: (
203
208
  ? parsed.context.tools.filter(t => toolAllowedByChoice(t, allowed))
204
209
  : parsed.context.tools;
205
210
  if (tools.length === 0) return undefined;
206
- return tools.map(t => ({
211
+ const converted = tools.map(t => ({
207
212
  name: toolNames.toWire(namespacedToolName(t.namespace, t.name)),
208
213
  description: t.description,
209
214
  input_schema: t.parameters,
210
215
  }));
216
+ const last = converted.length - 1;
217
+ converted[last] = withPromptCache(converted[last]);
218
+ return converted;
211
219
  }
212
220
 
213
221
  export function createAnthropicAdapter(provider: OcxProviderConfig): ProviderAdapter {
@@ -230,10 +238,10 @@ export function createAnthropicAdapter(provider: OcxProviderConfig): ProviderAda
230
238
  // Claude OAuth (Pro/Max) requires the first system block to be the Claude Code identity.
231
239
  body.system = [
232
240
  { type: "text", text: CLAUDE_CODE_SYSTEM_INSTRUCTION },
233
- ...(system ? [{ type: "text", text: system }] : []),
241
+ ...(system ? [withPromptCache({ type: "text", text: system })] : []),
234
242
  ];
235
243
  } else if (system) {
236
- body.system = system;
244
+ body.system = [withPromptCache({ type: "text", text: system })];
237
245
  }
238
246
  if (tools) body.tools = tools;
239
247
  if (parsed.options.temperature !== undefined) body.temperature = parsed.options.temperature;
@@ -20,6 +20,7 @@ import { ANTIGRAVITY_REQUEST_UA, antigravitySessionId, isLikelyRealThoughtSignat
20
20
  import { sanitizeGeminiToolParameters } from "./google-tool-schema";
21
21
  import { neutralizeIdentity } from "./identity";
22
22
  import { antigravityUsesReplayCache, applyAntigravityReplay, clearAntigravityReplay, observeAntigravityReplay } from "./google-antigravity-replay";
23
+ import { resolveAntigravityWireModelId } from "../providers/antigravity-models";
23
24
 
24
25
  // Google-family models (Gemini/Vertex/Antigravity) tend to emit long running commentary between
25
26
  // tool calls. This steers them to keep the BETWEEN-STEP text to one line and reason internally
@@ -229,14 +230,15 @@ export function createGoogleAdapter(provider: OcxProviderConfig): ProviderAdapte
229
230
  const project = provider.project;
230
231
  if (!project) throw new Error("Antigravity requires a discovered Cloud Code Assist project id (re-run `ocx login google-antigravity`).");
231
232
  const sessionId = antigravitySessionId(parsed);
232
- antigravityModel = parsed.modelId;
233
+ const wireModelId = resolveAntigravityWireModelId(parsed.modelId);
234
+ antigravityModel = wireModelId;
233
235
  antigravitySession = sessionId;
234
236
  // Reasoning continuity: Gemini models re-inject cached thoughtSignatures; Claude-on-Antigravity
235
237
  // sanitizes signatures inline (no cache). Both guard against the upstream 400 on bad signatures.
236
238
  if (Array.isArray((body as { contents?: unknown[] }).contents)) {
237
239
  const contents = (body as { contents: unknown[] }).contents;
238
- if (antigravityUsesReplayCache(parsed.modelId)) {
239
- applyAntigravityReplay(parsed.modelId, sessionId, contents);
240
+ if (antigravityUsesReplayCache(wireModelId)) {
241
+ applyAntigravityReplay(wireModelId, sessionId, contents);
240
242
  } else {
241
243
  sanitizeAntigravityClaudeSignatures(contents);
242
244
  }
@@ -246,13 +248,13 @@ export function createGoogleAdapter(provider: OcxProviderConfig): ProviderAdapte
246
248
  // spelling is a non-first-party key, so we send the single canonical location.
247
249
  const request: Record<string, unknown> = { ...body, sessionId };
248
250
  // Claude-on-Antigravity forces VALIDATED function calling (the real client always sets it).
249
- if (/claude/i.test(parsed.modelId)) {
251
+ if (/claude/i.test(wireModelId)) {
250
252
  const existing = (request.toolConfig ?? {}) as Record<string, unknown>;
251
253
  const fcc = (existing.functionCallingConfig ?? {}) as Record<string, unknown>;
252
254
  request.toolConfig = { ...existing, functionCallingConfig: { ...fcc, mode: "VALIDATED" } };
253
255
  }
254
256
  const envelope = {
255
- model: parsed.modelId,
257
+ model: wireModelId,
256
258
  // The envelope's `userAgent` field is a protocol constant ("antigravity"), distinct from
257
259
  // the HTTP `User-Agent` header (the real CLI UA). CLIProxyAPI `geminiToAntigravity` hardcodes
258
260
  // the body field; only the header carries the versioned client string.
@@ -574,6 +574,7 @@ function readNativeBaseline(catalogPath: string): Map<string, number> {
574
574
  type ProviderModelsApiItem = {
575
575
  id: string;
576
576
  owned_by?: string;
577
+ context_length?: number;
577
578
  max_model_len?: number;
578
579
  metadata?: {
579
580
  capabilities?: Record<string, unknown>;
@@ -635,6 +636,7 @@ function catalogHintsFromModelsApiItem(providerName: string, item: ProviderModel
635
636
  const limits = item.metadata?.limits;
636
637
  const contextWindow =
637
638
  typeof limits?.max_context_length === "number" ? limits.max_context_length
639
+ : typeof item.context_length === "number" ? item.context_length
638
640
  : typeof item.max_model_len === "number" ? item.max_model_len
639
641
  : undefined;
640
642
  const reasoningEfforts = capabilities && typeof capabilities.reasoning_effort === "boolean"
@@ -19,6 +19,11 @@ const PROVIDER_ALIASES: Record<string, string> = {
19
19
  "openrouter": "openrouter",
20
20
  "google": "google",
21
21
  "gemini": "google",
22
+ "google-vertex": "google",
23
+ "gemini-vertex": "google",
24
+ "google-antigravity": "google",
25
+ "antigravity": "google",
26
+ "gemini-antigravity": "google",
22
27
  "moonshot": "moonshot",
23
28
  "minimax": "minimax",
24
29
  "minimax-cn": "minimax"
@@ -26,12 +31,12 @@ const PROVIDER_ALIASES: Record<string, string> = {
26
31
 
27
32
  type Row = readonly [id: string, contextWindow?: number, maxTokens?: number, input?: string, reasoning?: 0 | 1, wireModelId?: string];
28
33
  const DATA: Record<string, readonly Row[]> = {
29
- "anthropic": [["claude-3-5-sonnet-20240620",200000,8192,"text,image",0],["claude-3-5-sonnet-20241022",200000,8192,"text,image",0],["claude-3-haiku-20240307",200000,4096,"text,image",0],["claude-fable-5",1000000,128000,"text,image",1],["claude-haiku-4-5",200000,64000,"text,image",1],["claude-haiku-4-5-20251001",200000,64000,"text,image",1],["claude-opus-4-0",200000,32000,"text,image",1],["claude-opus-4-1",200000,32000,"text,image",1],["claude-opus-4-1-20250805",200000,32000,"text,image",1],["claude-opus-4-20250514",200000,32000,"text,image",1],["claude-opus-4-5",200000,64000,"text,image",1],["claude-opus-4-5-20251101",200000,64000,"text,image",1],["claude-opus-4-6",1000000,128000,"text,image",1],["claude-opus-4-6[1m]",1000000,128000,"text,image",1,"claude-opus-4-6"],["claude-opus-4-7",1000000,128000,"text,image",1],["claude-opus-4-7[1m]",1000000,128000,"text,image",1,"claude-opus-4-7"],["claude-opus-4-8",1000000,128000,"text,image",1],["claude-opus-4-8[1m]",1000000,128000,"text,image",1,"claude-opus-4-8"],["claude-sonnet-4-0",200000,64000,"text,image",1],["claude-sonnet-4-20250514",200000,64000,"text,image",1],["claude-sonnet-4-5",200000,64000,"text,image",1],["claude-sonnet-4-5-20250929",200000,64000,"text,image",1],["claude-sonnet-4-6",200000,64000,"text,image",1],["claude-sonnet-4-6[1m]",200000,64000,"text,image",1,"claude-sonnet-4-6"]],
34
+ "anthropic": [["claude-3-5-sonnet-20240620",200000,8192,"text,image",0],["claude-3-5-sonnet-20241022",200000,8192,"text,image",0],["claude-3-haiku-20240307",200000,4096,"text,image",0],["claude-fable-5",1000000,128000,"text,image",1],["claude-haiku-4-5",200000,64000,"text,image",1],["claude-haiku-4-5-20251001",200000,64000,"text,image",1],["claude-opus-4-0",200000,32000,"text,image",1],["claude-opus-4-1",200000,32000,"text,image",1],["claude-opus-4-1-20250805",200000,32000,"text,image",1],["claude-opus-4-20250514",200000,32000,"text,image",1],["claude-opus-4-5",200000,64000,"text,image",1],["claude-opus-4-5-20251101",200000,64000,"text,image",1],["claude-opus-4-6",1000000,128000,"text,image",1],["claude-opus-4-6[1m]",1000000,128000,"text,image",1,"claude-opus-4-6"],["claude-opus-4-7",1000000,128000,"text,image",1],["claude-opus-4-7[1m]",1000000,128000,"text,image",1,"claude-opus-4-7"],["claude-opus-4-8",1000000,128000,"text,image",1],["claude-opus-4-8[1m]",1000000,128000,"text,image",1,"claude-opus-4-8"],["claude-sonnet-4-0",200000,64000,"text,image",1],["claude-sonnet-4-20250514",200000,64000,"text,image",1],["claude-sonnet-4-5",200000,64000,"text,image",1],["claude-sonnet-4-5-20250929",200000,64000,"text,image",1],["claude-sonnet-4-6",200000,64000,"text,image",1],["claude-sonnet-4-6[1m]",200000,64000,"text,image",1,"claude-sonnet-4-6"],["claude-sonnet-5",1000000,128000,"text,image",1]],
30
35
  "google": [["gemini-1.5-flash",1000000,8192,"text,image",0],["gemini-1.5-flash-8b",1000000,8192,"text,image",0],["gemini-1.5-pro",1000000,8192,"text,image",0],["gemini-2.0-flash",1048576,8192,"text,image",0],["gemini-2.0-flash-lite",1048576,8192,"text,image",0],["gemini-2.5-flash",1048576,65536,"text,image",1],["gemini-2.5-flash-lite",1048576,65536,"text,image",1],["gemini-2.5-flash-lite-preview-06-17",1048576,65536,"text,image",1],["gemini-2.5-flash-lite-preview-09-2025",1048576,65536,"text,image",1],["gemini-2.5-flash-preview-04-17",1048576,65536,"text,image",1],["gemini-2.5-flash-preview-05-20",1048576,65536,"text,image",1],["gemini-2.5-flash-preview-09-2025",1048576,65536,"text,image",1],["gemini-2.5-pro",1048576,65536,"text,image",1],["gemini-2.5-pro-preview-05-06",1048576,65536,"text,image",1],["gemini-2.5-pro-preview-06-05",1048576,65536,"text,image",1],["gemini-3-flash-preview",1048576,65536,"text,image",1],["gemini-3-pro-preview",1048576,65536,"text,image",1],["gemini-3.1-flash-lite",1048576,65536,"text,image",1],["gemini-3.1-flash-lite-preview",1048576,65536,"text,image",1],["gemini-3.1-pro-preview",1048576,65536,"text,image",1],["gemini-3.1-pro-preview-customtools",1048576,65536,"text,image",1],["gemini-3.5-flash",1048576,65536,"text,image",1],["gemini-flash-latest",1048576,65536,"text,image",1],["gemini-flash-lite-latest",1048576,65536,"text,image",1],["gemini-live-2.5-flash",128000,8000,"text,image",1],["gemini-live-2.5-flash-preview-native-audio",131072,65536,"text",1],["gemma-3-27b-it",131072,8192,"text,image",0],["gemma-4-26b",256000,8192,"text,image",1],["gemma-4-26b-a4b-it",262144,32768,"text,image",1],["gemma-4-26b-it",256000,8192,"text,image",1],["gemma-4-31b",256000,8192,"text,image",1],["gemma-4-31b-it",262144,32768,"text,image",1],["gemma-4-E2B-it",131072,8192,"text,image",1],["gemma-4-E4B-it",131072,8192,"text,image",1]],
31
- "minimax": [["MiniMax-M2",196608,128000,"text",1],["MiniMax-M2.1",204800,131072,"text",1],["MiniMax-M2.5",204800,131072,"text",1],["MiniMax-M2.5-highspeed",204800,131072,"text",1],["MiniMax-M2.5-lightning",204800,32000,"text",1],["MiniMax-M2.7",204800,131072,"text",1],["MiniMax-M2.7-highspeed",204800,131072,"text",1],["minimax-m3",512000,128000,"text,image",1],["MiniMax-M3",512000,128000,"text,image",1]],
36
+ "minimax": [["MiniMax-M2",196608,128000,"text",1],["MiniMax-M2.1",204800,131072,"text",1],["MiniMax-M2.5",204800,131072,"text",1],["MiniMax-M2.5-highspeed",204800,131072,"text",1],["MiniMax-M2.5-lightning",204800,32000,"text",1],["MiniMax-M2.7",204800,131072,"text",1],["MiniMax-M2.7-highspeed",204800,131072,"text",1],["minimax-m3",512000,128000,"text,image",1],["MiniMax-M3",1000000,128000,"text,image",1]],
32
37
  "moonshot": [["kimi-k2.5",262144,65536,"text,image",1]],
33
- "opencode-go": [["deepseek-v4-flash",1000000,384000,"text",1],["deepseek-v4-pro",1000000,384000,"text",1],["glm-5",204800,131072,"text",1],["glm-5.1",200000,131072,"text",1],["glm-5.2",1000000,131072,"text",1],["hy3-preview",256000,64000,"text",1],["kimi-k2.5",262144,262144,"text,image",1],["kimi-k2.6",262144,262144,"text,image",1],["kimi-k2.7-code",262144,262144,"text,image",1],["mimo-v2-omni",262144,131072,"text,image",1],["mimo-v2-pro",1048576,131072,"text",1],["mimo-v2.5",1048576,131072,"text,image",1],["mimo-v2.5-pro",1048576,131072,"text",1],["minimax-m2.5",204800,131072,"text",1],["minimax-m2.7",204800,131072,"text",1],["minimax-m3",512000,128000,"text,image",1],["qwen3.5-plus",1000000,65536,"text,image",1],["qwen3.6-plus",1000000,65536,"text,image",1],["qwen3.7-max",1000000,65536,"text",1],["qwen3.7-plus",1000000,64000,"text,image",1]],
34
- "openrouter": [["~anthropic/claude-fable-latest",1000000,128000,"text,image",1],["~anthropic/claude-haiku-latest",200000,64000,"text,image",1],["~anthropic/claude-opus-latest",1000000,128000,"text,image",1],["~anthropic/claude-sonnet-latest",1000000,128000,"text,image",1],["~google/gemini-flash-latest",1048576,65536,"text,image",1],["~google/gemini-pro-latest",1048576,65536,"text,image",1],["~moonshotai/kimi-latest",262144,262144,"text,image",1],["~openai/gpt-latest",1050000,128000,"text,image",1],["~openai/gpt-mini-latest",400000,128000,"text,image",1],["ai21/jamba-large-1.7",256000,4096,"text",0],["alibaba/tongyi-deepresearch-30b-a3b",131072,131072,"text",1],["allenai/olmo-3.1-32b-instruct",65536,16384,"text",0],["amazon/nova-2-lite-v1",1000000,65535,"text,image",1],["amazon/nova-lite-v1",300000,5120,"text,image",0],["amazon/nova-micro-v1",128000,5120,"text",0],["amazon/nova-premier-v1",1000000,32000,"text,image",0],["amazon/nova-pro-v1",300000,5120,"text,image",0],["anthropic/claude-3-haiku",200000,4096,"text,image",0],["anthropic/claude-3.5-haiku",200000,8192,"text,image",0],["anthropic/claude-3.5-sonnet",200000,8192,"text,image",0],["anthropic/claude-3.7-sonnet",200000,128000,"text,image",1],["anthropic/claude-3.7-sonnet:thinking",200000,64000,"text,image",1],["anthropic/claude-fable-5",1000000,128000,"text,image",1],["anthropic/claude-haiku-4.5",200000,64000,"text,image",0],["anthropic/claude-opus-4",200000,32000,"text,image",1],["anthropic/claude-opus-4.1",200000,32000,"text,image",1],["anthropic/claude-opus-4.5",200000,64000,"text,image",1],["anthropic/claude-opus-4.6",1000000,128000,"text,image",1],["anthropic/claude-opus-4.6-fast",1000000,128000,"text,image",1],["anthropic/claude-opus-4.7",1000000,128000,"text,image",1],["anthropic/claude-opus-4.7-fast",1000000,128000,"text,image",1],["anthropic/claude-opus-4.8",1000000,128000,"text,image",1],["anthropic/claude-opus-4.8-fast",1000000,128000,"text,image",1],["anthropic/claude-sonnet-4",1000000,64000,"text,image",1],["anthropic/claude-sonnet-4.5",1000000,64000,"text,image",1],["anthropic/claude-sonnet-4.6",1000000,128000,"text,image",1],["arcee-ai/trinity-large-preview",131000,8888,"text",0],["arcee-ai/trinity-large-preview:free",131000,8888,"text",0],["arcee-ai/trinity-large-thinking",262144,262144,"text",1],["arcee-ai/trinity-large-thinking:free",262144,80000,"text",1],["arcee-ai/trinity-mini",131072,131072,"text",1],["arcee-ai/trinity-mini:free",131072,8888,"text",1],["arcee-ai/virtuoso-large",131072,64000,"text",0],["auto",2000000,30000,"text,image",1],["baidu/cobuddy:free",131072,65536,"text",1],["baidu/ernie-4.5-21b-a3b",131072,8000,"text",0],["baidu/ernie-4.5-vl-28b-a3b",131072,8000,"text,image",1],["bytedance-seed/seed-1.6",262144,32768,"text,image",1],["bytedance-seed/seed-1.6-flash",262144,32768,"text,image",1],["bytedance-seed/seed-2.0-lite",262144,131072,"text,image",1],["bytedance-seed/seed-2.0-mini",262144,131072,"text,image",1],["cohere/command-r-08-2024",128000,4000,"text",0],["cohere/command-r-plus-08-2024",128000,4000,"text",0],["cohere/north-mini-code:free",256000,64000,"text",1],["deepseek/deepseek-chat",131072,16000,"text",0],["deepseek/deepseek-chat-v3-0324",163840,16384,"text",1],["deepseek/deepseek-chat-v3.1",163840,32768,"text",1],["deepseek/deepseek-r1",163840,16000,"text",1],["deepseek/deepseek-r1-0528",163840,32768,"text",1],["deepseek/deepseek-v3.1-terminus",163840,32768,"text",1],["deepseek/deepseek-v3.1-terminus:exacto",163840,8888,"text",1],["deepseek/deepseek-v3.2",131072,64000,"text",1],["deepseek/deepseek-v3.2-exp",163840,65536,"text",1],["deepseek/deepseek-v4-flash",1048576,65536,"text",1],["deepseek/deepseek-v4-flash:free",1048576,384000,"text",1],["deepseek/deepseek-v4-pro",1048576,384000,"text",1],["essentialai/rnj-1-instruct",32768,8888,"text",0],["google/gemini-2.0-flash-001",1048576,8192,"text,image",0],["google/gemini-2.0-flash-lite-001",1048576,8192,"text,image",0],["google/gemini-2.5-flash",1048576,65535,"text,image",1],["google/gemini-2.5-flash-lite",1048576,65535,"text,image",0],["google/gemini-2.5-flash-lite-preview-09-2025",1048576,65535,"text,image",1],["google/gemini-2.5-flash-preview-09-2025",1048576,65536,"text,image",1],["google/gemini-2.5-pro",1048576,65536,"text,image",1],["google/gemini-2.5-pro-preview",1048576,65536,"text,image",1],["google/gemini-2.5-pro-preview-05-06",1048576,65535,"text,image",1],["google/gemini-3-flash-preview",1048576,65535,"text,image",1],["google/gemini-3-pro-image",65536,32768,"text,image",1],["google/gemini-3-pro-preview",1048000,64000,"text,image",1],["google/gemini-3.1-flash-lite",1048576,65536,"text,image",1],["google/gemini-3.1-flash-lite-preview",1048576,65536,"text,image",0],["google/gemini-3.1-pro-preview",1048576,65536,"text,image",1],["google/gemini-3.1-pro-preview-customtools",1048756,65536,"text,image",1],["google/gemini-3.5-flash",1048576,65536,"text,image",1],["google/gemma-3-12b-it",131072,16384,"text,image",0],["google/gemma-3-27b-it",131072,16384,"text,image",1],["google/gemma-3-27b-it:free",131072,8192,"text,image",0],["google/gemma-4-26b-a4b-it",262144,8888,"text,image",1],["google/gemma-4-26b-a4b-it:free",262144,32768,"text,image",1],["google/gemma-4-31b-it",262144,262144,"text,image",1],["google/gemma-4-31b-it:free",262144,8192,"text,image",1],["ibm-granite/granite-4.1-8b",131072,131072,"text",0],["inception/mercury",128000,32000,"text",0],["inception/mercury-2",128000,50000,"text",1],["inception/mercury-coder",128000,32000,"text",0],["inclusionai/ling-2.6-1t",262144,32768,"text",0],["inclusionai/ling-2.6-1t:free",262144,32768,"text",0],["inclusionai/ling-2.6-flash",262144,32768,"text",0],["inclusionai/ling-2.6-flash:free",262144,32768,"text",0],["inclusionai/ring-2.6-1t",262144,65536,"text",1],["inclusionai/ring-2.6-1t:free",262144,65536,"text",1],["kwaipilot/kat-coder-pro",256000,128000,"text",0],["kwaipilot/kat-coder-pro-v2",256000,80000,"text",0],["liquid/lfm-2.5-1.2b-thinking:free",32768,8888,"text",1],["meituan/longcat-flash-chat",131072,131072,"text",0],["meta-llama/llama-3-8b-instruct",8192,16384,"text",0],["meta-llama/llama-3.1-405b-instruct",131000,8888,"text",0],["meta-llama/llama-3.1-70b-instruct",131072,16384,"text",0],["meta-llama/llama-3.1-8b-instruct",131072,16384,"text",0],["meta-llama/llama-3.3-70b-instruct",131072,16384,"text",0],["meta-llama/llama-3.3-70b-instruct:free",131072,8888,"text",0],["meta-llama/llama-4-maverick",1048576,16384,"text,image",0],["meta-llama/llama-4-scout",10000000,16384,"text,image",0],["minimax/minimax-m1",1000000,40000,"text",1],["minimax/minimax-m2",204800,196608,"text",1],["minimax/minimax-m2.1",204800,196608,"text",1],["minimax/minimax-m2.5",204800,196608,"text",1],["minimax/minimax-m2.5:free",262144,8192,"text",1],["minimax/minimax-m2.7",204800,131072,"text",1],["minimax/minimax-m3",1048576,512000,"text,image",1],["mistralai/codestral-2508",256000,8888,"text",0],["mistralai/devstral-2512",262144,8888,"text",0],["mistralai/devstral-medium",131072,8888,"text",0],["mistralai/devstral-small",131072,8888,"text",0],["mistralai/ministral-14b-2512",262144,8888,"text,image",0],["mistralai/ministral-3b-2512",131072,8888,"text,image",0],["mistralai/ministral-8b-2512",262144,8888,"text,image",0],["mistralai/mistral-large",128000,8888,"text",0],["mistralai/mistral-large-2407",131072,8888,"text",0],["mistralai/mistral-large-2411",131072,8888,"text",0],["mistralai/mistral-large-2512",262144,8888,"text,image",0],["mistralai/mistral-medium-3",131072,8888,"text,image",0],["mistralai/mistral-medium-3-5",262144,8888,"text,image",1],["mistralai/mistral-medium-3.1",131072,8888,"text,image",0],["mistralai/mistral-nemo",131072,8888,"text",0],["mistralai/mistral-saba",32768,8888,"text",0],["mistralai/mistral-small-24b-instruct-2501",32768,16384,"text",0],["mistralai/mistral-small-2603",262144,8888,"text,image",1],["mistralai/mistral-small-3.1-24b-instruct",131072,131072,"text,image",0],["mistralai/mistral-small-3.1-24b-instruct:free",128000,8888,"text,image",0],["mistralai/mistral-small-3.2-24b-instruct",128000,16384,"text,image",0],["mistralai/mistral-small-creative",32768,8888,"text",0],["mistralai/mixtral-8x22b-instruct",65536,13108,"text",0],["mistralai/mixtral-8x7b-instruct",32768,16384,"text",0],["mistralai/pixtral-large-2411",131072,8888,"text,image",0],["mistralai/voxtral-small-24b-2507",32000,8888,"text",0],["moonshotai/kimi-k2",131072,32768,"text",0],["moonshotai/kimi-k2-0905",262144,262144,"text",0],["moonshotai/kimi-k2-0905:exacto",262144,8888,"text",0],["moonshotai/kimi-k2-thinking",262144,262144,"text",1],["moonshotai/kimi-k2.5",262144,64000,"text,image",1],["moonshotai/kimi-k2.6",262144,262144,"text,image",1],["moonshotai/kimi-k2.6:free",262144,8888,"text,image",1],["moonshotai/kimi-k2.7-code",262144,262144,"text,image",1],["nex-agi/deepseek-v3.1-nex-n1",131072,163840,"text",0],["nex-agi/nex-n2-pro:free",262144,262144,"text,image",1],["nousresearch/deephermes-3-mistral-24b-preview",32768,32768,"text",1],["nousresearch/hermes-4-70b",131072,131072,"text",1],["nvidia/llama-3.1-nemotron-70b-instruct",131072,16384,"text",0],["nvidia/llama-3.3-nemotron-super-49b-v1.5",131072,16384,"text",1],["nvidia/nemotron-3-nano-30b-a3b",262144,228000,"text",1],["nvidia/nemotron-3-nano-30b-a3b:free",256000,8888,"text",1],["nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free",256000,65536,"text,image",1],["nvidia/nemotron-3-super-120b-a12b",1000000,262144,"text",1],["nvidia/nemotron-3-super-120b-a12b:free",1000000,262144,"text",1],["nvidia/nemotron-3-ultra-550b-a55b",1000000,16384,"text",1],["nvidia/nemotron-3-ultra-550b-a55b:free",1000000,65536,"text",1],["nvidia/nemotron-nano-12b-v2-vl:free",128000,128000,"text,image",1],["nvidia/nemotron-nano-9b-v2",131072,16384,"text",1],["nvidia/nemotron-nano-9b-v2:free",128000,8888,"text",1],["openai/gpt-3.5-turbo",16385,4096,"text",0],["openai/gpt-3.5-turbo-0613",4095,4096,"text",0],["openai/gpt-3.5-turbo-16k",16385,4096,"text",0],["openai/gpt-4",8191,8192,"text",0],["openai/gpt-4-0314",8191,4096,"text",0],["openai/gpt-4-1106-preview",128000,4096,"text",0],["openai/gpt-4-turbo",128000,4096,"text,image",0],["openai/gpt-4-turbo-preview",128000,4096,"text",0],["openai/gpt-4.1",1047576,8888,"text,image",0],["openai/gpt-4.1-mini",1047576,32768,"text,image",0],["openai/gpt-4.1-nano",1047576,32768,"text,image",0],["openai/gpt-4o",128000,16384,"text,image",0],["openai/gpt-4o-2024-05-13",128000,4096,"text,image",0],["openai/gpt-4o-2024-08-06",128000,16384,"text,image",0],["openai/gpt-4o-2024-11-20",128000,16384,"text,image",0],["openai/gpt-4o-audio-preview",128000,16384,"text",0],["openai/gpt-4o-mini",128000,16384,"text,image",0],["openai/gpt-4o-mini-2024-07-18",128000,16384,"text,image",0],["openai/gpt-4o:extended",128000,64000,"text,image",0],["openai/gpt-5",400000,128000,"text,image",1],["openai/gpt-5-codex",272000,128000,"text,image",1],["openai/gpt-5-image",400000,128000,"text,image",1],["openai/gpt-5-image-mini",400000,128000,"text,image",1],["openai/gpt-5-mini",400000,128000,"text,image",1],["openai/gpt-5-nano",400000,8888,"text,image",1],["openai/gpt-5-pro",400000,128000,"text,image",1],["openai/gpt-5.1",400000,128000,"text,image",1],["openai/gpt-5.1-chat",128000,32000,"text,image",0],["openai/gpt-5.1-codex",272000,128000,"text,image",1],["openai/gpt-5.1-codex-max",272000,128000,"text,image",1],["openai/gpt-5.1-codex-mini",272000,100000,"text,image",1],["openai/gpt-5.2",400000,128000,"text,image",1],["openai/gpt-5.2-chat",128000,16384,"text,image",0],["openai/gpt-5.2-codex",272000,128000,"text,image",1],["openai/gpt-5.2-pro",400000,128000,"text,image",1],["openai/gpt-5.3-chat",128000,16384,"text",0],["openai/gpt-5.3-codex",272000,128000,"text,image",1],["openai/gpt-5.4",1050000,128000,"text,image",1],["openai/gpt-5.4-mini",400000,128000,"text",0],["openai/gpt-5.4-nano",400000,128000,"text",0],["openai/gpt-5.4-pro",1050000,128000,"text,image",1],["openai/gpt-5.5",1050000,128000,"text,image",1],["openai/gpt-5.5-pro",1050000,128000,"text,image",1],["openai/gpt-audio",128000,16384,"text",0],["openai/gpt-audio-mini",128000,16384,"text",0],["openai/gpt-chat-latest",400000,128000,"text,image",0],["openai/gpt-oss-120b",131072,65536,"text",1],["openai/gpt-oss-120b:exacto",131072,8888,"text",1],["openai/gpt-oss-120b:free",131072,131072,"text",1],["openai/gpt-oss-20b",131072,65536,"text",1],["openai/gpt-oss-20b:free",131072,32768,"text",1],["openai/gpt-oss-safeguard-20b",131072,65536,"text",1],["openai/o1",200000,100000,"text,image",1],["openai/o3",200000,100000,"text,image",1],["openai/o3-deep-research",200000,100000,"text,image",1],["openai/o3-mini",200000,100000,"text",1],["openai/o3-mini-high",200000,100000,"text",1],["openai/o3-pro",200000,100000,"text,image",1],["openai/o4-mini",200000,100000,"text,image",1],["openai/o4-mini-deep-research",200000,100000,"text,image",1],["openai/o4-mini-high",200000,100000,"text,image",1],["openrouter/aurora-alpha",128000,50000,"text",1],["openrouter/auto",2000000,8888,"text,image",1],["openrouter/elephant-alpha",262144,32768,"text",0],["openrouter/free",200000,8888,"text,image",1],["openrouter/healer-alpha",262144,32000,"text,image",1],["openrouter/hunter-alpha",1048576,32000,"text",1],["openrouter/owl-alpha",1048756,262144,"text",0],["poolside/laguna-m.1",262144,32768,"text",1],["poolside/laguna-m.1:free",262144,32768,"text",1],["poolside/laguna-xs.2",262144,32768,"text",1],["poolside/laguna-xs.2:free",262144,32768,"text",1],["prime-intellect/intellect-3",131072,131072,"text",1],["qwen/qwen-2.5-72b-instruct",131072,16384,"text",0],["qwen/qwen-2.5-7b-instruct",131072,32768,"text",0],["qwen/qwen-max",32768,8192,"text",0],["qwen/qwen-plus",1000000,32768,"text",0],["qwen/qwen-plus-2025-07-28",1000000,32768,"text",0],["qwen/qwen-plus-2025-07-28:thinking",1000000,32768,"text",1],["qwen/qwen-turbo",131072,8192,"text",0],["qwen/qwen-vl-max",131072,32768,"text,image",0],["qwen/qwen3-14b",131702,40960,"text",1],["qwen/qwen3-235b-a22b",131072,8192,"text",1],["qwen/qwen3-235b-a22b-2507",262144,16384,"text",1],["qwen/qwen3-235b-a22b-thinking-2507",262144,262144,"text",1],["qwen/qwen3-30b-a3b",131072,16384,"text",1],["qwen/qwen3-30b-a3b-instruct-2507",131072,32000,"text",0],["qwen/qwen3-30b-a3b-thinking-2507",131072,131072,"text",1],["qwen/qwen3-32b",131072,16384,"text",1],["qwen/qwen3-4b",131072,8192,"text",1],["qwen/qwen3-4b:free",40960,8888,"text",1],["qwen/qwen3-8b",131072,8192,"text",1],["qwen/qwen3-coder",1048576,65536,"text",0],["qwen/qwen3-coder-30b-a3b-instruct",160000,32768,"text",0],["qwen/qwen3-coder-flash",1000000,65536,"text",0],["qwen/qwen3-coder-next",262144,262144,"text",0],["qwen/qwen3-coder-plus",1000000,65536,"text",0],["qwen/qwen3-coder:exacto",262144,65536,"text",0],["qwen/qwen3-coder:free",1048576,262000,"text",0],["qwen/qwen3-max",262144,32768,"text",1],["qwen/qwen3-max-thinking",262144,32768,"text",1],["qwen/qwen3-next-80b-a3b-instruct",262144,16384,"text",0],["qwen/qwen3-next-80b-a3b-instruct:free",262144,8888,"text",0],["qwen/qwen3-next-80b-a3b-thinking",262144,32768,"text",1],["qwen/qwen3-vl-235b-a22b-instruct",262144,16384,"text,image",0],["qwen/qwen3-vl-235b-a22b-thinking",131072,32768,"text,image",1],["qwen/qwen3-vl-30b-a3b-instruct",262144,32768,"text,image",0],["qwen/qwen3-vl-30b-a3b-thinking",131072,32768,"text,image",1],["qwen/qwen3-vl-32b-instruct",262144,32768,"text,image",0],["qwen/qwen3-vl-8b-instruct",256000,32768,"text,image",0],["qwen/qwen3-vl-8b-thinking",256000,32768,"text,image",1],["qwen/qwen3.5-122b-a10b",262144,262144,"text,image",1],["qwen/qwen3.5-27b",262144,65536,"text,image",1],["qwen/qwen3.5-35b-a3b",262144,262144,"text,image",1],["qwen/qwen3.5-397b-a17b",256000,8192,"text,image",1],["qwen/qwen3.5-9b",262144,262144,"text,image",1],["qwen/qwen3.5-flash-02-23",1000000,65536,"text,image",1],["qwen/qwen3.5-plus-02-15",1000000,65536,"text,image",1],["qwen/qwen3.5-plus-20260420",1000000,65536,"text,image",1],["qwen/qwen3.6-27b",262144,262140,"text,image",1],["qwen/qwen3.6-35b-a3b",262144,262144,"text,image",1],["qwen/qwen3.6-flash",1000000,65536,"text,image",1],["qwen/qwen3.6-max-preview",262144,65536,"text",1],["qwen/qwen3.6-plus",1000000,65536,"text",1],["qwen/qwen3.6-plus-preview:free",1000000,32000,"text",1],["qwen/qwen3.6-plus:free",1000000,65536,"text,image",1],["qwen/qwen3.7-max",1000000,65536,"text",1],["qwen/qwen3.7-plus",1000000,65536,"text,image",1],["qwen/qwq-32b",131072,131072,"text",1],["reka/reka-edge",16384,16384,"text,image",0],["rekaai/reka-edge",16384,16384,"text,image",0],["relace/relace-search",256000,128000,"text",0],["sao10k/l3-euryale-70b",8192,8192,"text",0],["sao10k/l3.1-euryale-70b",131072,16384,"text",0],["stepfun/step-3.5-flash",262144,16384,"text",0],["stepfun/step-3.5-flash:free",256000,256000,"text",1],["stepfun/step-3.7-flash",256000,256000,"text,image",1],["tencent/hy3-preview",262144,262144,"text",1],["tencent/hy3-preview:free",262144,262144,"text",1],["thedrummer/rocinante-12b",32768,32768,"text",0],["thedrummer/unslopnemo-12b",32768,32768,"text",0],["tngtech/deepseek-r1t2-chimera",163840,163840,"text",1],["tngtech/tng-r1t-chimera",163840,65536,"text",1],["upstage/solar-pro-3",128000,8888,"text",1],["upstage/solar-pro-3:free",128000,8888,"text",1],["x-ai/grok-3",131072,8888,"text",0],["x-ai/grok-3-beta",131072,8888,"text",0],["x-ai/grok-3-mini",131072,8888,"text",1],["x-ai/grok-3-mini-beta",131072,8888,"text",1],["x-ai/grok-4",256000,64000,"text,image",1],["x-ai/grok-4-fast",2000000,30000,"text,image",1],["x-ai/grok-4.1-fast",2000000,30000,"text,image",1],["x-ai/grok-4.20",2000000,8888,"text,image",1],["x-ai/grok-4.20-beta",2000000,8888,"text,image",1],["x-ai/grok-4.3",1000000,1000000,"text,image",1],["x-ai/grok-build-0.1",256000,256000,"text,image",1],["x-ai/grok-code-fast-1",256000,10000,"text",1],["xiaomi/mimo-v2-flash",262144,65536,"text",1],["xiaomi/mimo-v2-omni",262144,65536,"text,image",1],["xiaomi/mimo-v2-pro",1048576,131072,"text",1],["xiaomi/mimo-v2.5",1048576,131072,"text,image",1],["xiaomi/mimo-v2.5-pro",1048576,131072,"text",1],["z-ai/glm-4-32b",128000,8888,"text",0],["z-ai/glm-4.5",131072,98304,"text",1],["z-ai/glm-4.5-air",131072,98304,"text",1],["z-ai/glm-4.5-air:free",131072,96000,"text",1],["z-ai/glm-4.5v",65536,16384,"text,image",1],["z-ai/glm-4.6",202752,131072,"text",1],["z-ai/glm-4.6:exacto",204800,131072,"text",1],["z-ai/glm-4.6v",131072,32768,"text,image",1],["z-ai/glm-4.7",202752,131072,"text",1],["z-ai/glm-4.7-flash",202752,16384,"text",1],["z-ai/glm-5",202752,128000,"text",1],["z-ai/glm-5-turbo",262144,131072,"text",1],["z-ai/glm-5.1",202752,131072,"text",1],["z-ai/glm-5.2",1048576,131072,"text",1],["z-ai/glm-5v-turbo",202752,131072,"text,image",1]],
38
+ "opencode-go": [["deepseek-v4-flash",1000000,384000,"text",1],["deepseek-v4-pro",1000000,384000,"text",1],["glm-5",202752,32768,"text",1],["glm-5.1",202752,32768,"text",1],["glm-5.2",1000000,131072,"text",1],["kimi-k2.5",262144,65536,"text,image",1],["kimi-k2.6",262144,65536,"text,image",1],["kimi-k2.7-code",262144,262144,"text,image",1],["mimo-v2-omni",262144,128000,"text,image",1],["mimo-v2-pro",1048576,128000,"text",1],["mimo-v2.5",1000000,128000,"text,image",1],["mimo-v2.5-pro",1048576,128000,"text",1],["minimax-m2.5",204800,65536,"text",1],["minimax-m2.7",204800,131072,"text",1],["minimax-m3",1000000,131072,"text,image",1],["qwen3.5-plus",262144,65536,"text,image",1],["qwen3.6-plus",1000000,65536,"text,image",1],["qwen3.7-max",1000000,65536,"text",1],["qwen3.7-plus",1000000,65536,"text,image",1]],
39
+ "openrouter": [["~anthropic/claude-fable-latest",1000000,128000,"text,image",1],["~anthropic/claude-haiku-latest",200000,64000,"text,image",1],["~anthropic/claude-opus-latest",1000000,128000,"text,image",1],["~anthropic/claude-sonnet-latest",1000000,128000,"text,image",1],["~google/gemini-flash-latest",1048576,65536,"text,image",1],["~google/gemini-pro-latest",1048576,65536,"text,image",1],["~moonshotai/kimi-latest",262144,262144,"text,image",1],["~openai/gpt-latest",1050000,128000,"text,image",1],["~openai/gpt-mini-latest",400000,128000,"text,image",1],["ai21/jamba-large-1.7",256000,4096,"text",0],["alibaba/tongyi-deepresearch-30b-a3b",131072,131072,"text",1],["allenai/olmo-3.1-32b-instruct",65536,16384,"text",0],["amazon/nova-2-lite-v1",1000000,65535,"text,image",1],["amazon/nova-lite-v1",300000,5120,"text,image",0],["amazon/nova-micro-v1",128000,5120,"text",0],["amazon/nova-premier-v1",1000000,32000,"text,image",0],["amazon/nova-pro-v1",300000,5120,"text,image",0],["anthropic/claude-3-haiku",200000,4096,"text,image",0],["anthropic/claude-3.5-haiku",200000,8192,"text,image",0],["anthropic/claude-3.5-sonnet",200000,8192,"text,image",0],["anthropic/claude-3.7-sonnet",200000,128000,"text,image",1],["anthropic/claude-3.7-sonnet:thinking",200000,64000,"text,image",1],["anthropic/claude-fable-5",1000000,128000,"text,image",1],["anthropic/claude-haiku-4.5",200000,64000,"text,image",0],["anthropic/claude-opus-4",200000,32000,"text,image",1],["anthropic/claude-opus-4.1",200000,32000,"text,image",1],["anthropic/claude-opus-4.5",200000,64000,"text,image",1],["anthropic/claude-opus-4.6",1000000,128000,"text,image",1],["anthropic/claude-opus-4.6-fast",1000000,128000,"text,image",1],["anthropic/claude-opus-4.7",1000000,128000,"text,image",1],["anthropic/claude-opus-4.7-fast",1000000,128000,"text,image",1],["anthropic/claude-opus-4.8",1000000,128000,"text,image",1],["anthropic/claude-opus-4.8-fast",1000000,128000,"text,image",1],["anthropic/claude-sonnet-4",1000000,64000,"text,image",1],["anthropic/claude-sonnet-4.5",1000000,64000,"text,image",1],["anthropic/claude-sonnet-4.6",1000000,128000,"text,image",1],["anthropic/claude-sonnet-5",1000000,128000,"text,image",1],["arcee-ai/trinity-large-preview",131000,8888,"text",0],["arcee-ai/trinity-large-preview:free",131000,8888,"text",0],["arcee-ai/trinity-large-thinking",262144,80000,"text",1],["arcee-ai/trinity-large-thinking:free",262144,80000,"text",1],["arcee-ai/trinity-mini",131072,131072,"text",1],["arcee-ai/trinity-mini:free",131072,8888,"text",1],["arcee-ai/virtuoso-large",131072,64000,"text",0],["auto",2000000,30000,"text,image",1],["baidu/cobuddy:free",131072,65536,"text",1],["baidu/ernie-4.5-21b-a3b",131072,8000,"text",0],["baidu/ernie-4.5-vl-28b-a3b",131072,8000,"text,image",1],["bytedance-seed/seed-1.6",262144,32768,"text,image",1],["bytedance-seed/seed-1.6-flash",262144,32768,"text,image",1],["bytedance-seed/seed-2.0-lite",262144,131072,"text,image",1],["bytedance-seed/seed-2.0-mini",262144,131072,"text,image",1],["cohere/command-r-08-2024",128000,4000,"text",0],["cohere/command-r-plus-08-2024",128000,4000,"text",0],["cohere/north-mini-code:free",256000,64000,"text",1],["deepseek/deepseek-chat",131072,16000,"text",0],["deepseek/deepseek-chat-v3-0324",163840,16384,"text",1],["deepseek/deepseek-chat-v3.1",163840,32768,"text",1],["deepseek/deepseek-r1",163840,16000,"text",1],["deepseek/deepseek-r1-0528",163840,32768,"text",1],["deepseek/deepseek-v3.1-terminus",163840,32768,"text",1],["deepseek/deepseek-v3.1-terminus:exacto",163840,8888,"text",1],["deepseek/deepseek-v3.2",131072,64000,"text",1],["deepseek/deepseek-v3.2-exp",163840,65536,"text",1],["deepseek/deepseek-v4-flash",1048576,384000,"text",1],["deepseek/deepseek-v4-flash:free",1048576,384000,"text",1],["deepseek/deepseek-v4-pro",1048576,384000,"text",1],["essentialai/rnj-1-instruct",32768,8888,"text",0],["google/gemini-2.0-flash-001",1048576,8192,"text,image",0],["google/gemini-2.0-flash-lite-001",1048576,8192,"text,image",0],["google/gemini-2.5-flash",1048576,65535,"text,image",1],["google/gemini-2.5-flash-lite",1048576,65535,"text,image",0],["google/gemini-2.5-flash-lite-preview-09-2025",1048576,65535,"text,image",1],["google/gemini-2.5-flash-preview-09-2025",1048576,65536,"text,image",1],["google/gemini-2.5-pro",1048576,65536,"text,image",1],["google/gemini-2.5-pro-preview",1048576,65536,"text,image",1],["google/gemini-2.5-pro-preview-05-06",1048576,65535,"text,image",1],["google/gemini-3-flash-preview",1048576,65535,"text,image",1],["google/gemini-3-pro-image",65536,32768,"text,image",1],["google/gemini-3-pro-preview",1048000,64000,"text,image",1],["google/gemini-3.1-flash-lite",1048576,65536,"text,image",1],["google/gemini-3.1-flash-lite-preview",1048576,65536,"text,image",0],["google/gemini-3.1-pro-preview",1048576,65536,"text,image",1],["google/gemini-3.1-pro-preview-customtools",1048756,65536,"text,image",1],["google/gemini-3.5-flash",1048576,65536,"text,image",1],["google/gemma-3-12b-it",131072,16384,"text,image",0],["google/gemma-3-27b-it",131072,16384,"text,image",1],["google/gemma-3-27b-it:free",131072,8192,"text,image",0],["google/gemma-4-26b-a4b-it",262144,8888,"text,image",1],["google/gemma-4-26b-a4b-it:free",262144,32768,"text,image",1],["google/gemma-4-31b-it",262144,262144,"text,image",1],["google/gemma-4-31b-it:free",262144,8192,"text,image",1],["ibm-granite/granite-4.1-8b",131072,131072,"text",0],["inception/mercury",128000,32000,"text",0],["inception/mercury-2",128000,50000,"text",1],["inception/mercury-coder",128000,32000,"text",0],["inclusionai/ling-2.6-1t",262144,32768,"text",0],["inclusionai/ling-2.6-1t:free",262144,32768,"text",0],["inclusionai/ling-2.6-flash",262144,32768,"text",0],["inclusionai/ling-2.6-flash:free",262144,32768,"text",0],["inclusionai/ring-2.6-1t",262144,65536,"text",1],["inclusionai/ring-2.6-1t:free",262144,65536,"text",1],["kwaipilot/kat-coder-pro",256000,128000,"text",0],["kwaipilot/kat-coder-pro-v2",256000,80000,"text",0],["liquid/lfm-2.5-1.2b-thinking:free",32768,8888,"text",1],["meituan/longcat-flash-chat",131072,131072,"text",0],["meta-llama/llama-3-8b-instruct",8192,16384,"text",0],["meta-llama/llama-3.1-405b-instruct",131000,8888,"text",0],["meta-llama/llama-3.1-70b-instruct",131072,16384,"text",0],["meta-llama/llama-3.1-8b-instruct",131072,16384,"text",0],["meta-llama/llama-3.3-70b-instruct",131072,16384,"text",0],["meta-llama/llama-3.3-70b-instruct:free",131072,8888,"text",0],["meta-llama/llama-4-maverick",1048576,16384,"text,image",0],["meta-llama/llama-4-scout",10000000,16384,"text,image",0],["minimax/minimax-m1",1000000,40000,"text",1],["minimax/minimax-m2",204800,196608,"text",1],["minimax/minimax-m2.1",204800,196608,"text",1],["minimax/minimax-m2.5",204800,196608,"text",1],["minimax/minimax-m2.5:free",262144,8192,"text",1],["minimax/minimax-m2.7",204800,196608,"text",1],["minimax/minimax-m3",1048576,512000,"text,image",1],["mistralai/codestral-2508",256000,8888,"text",0],["mistralai/devstral-2512",262144,8888,"text",0],["mistralai/devstral-medium",131072,8888,"text",0],["mistralai/devstral-small",131072,8888,"text",0],["mistralai/ministral-14b-2512",262144,8888,"text,image",0],["mistralai/ministral-3b-2512",131072,8888,"text,image",0],["mistralai/ministral-8b-2512",262144,8888,"text,image",0],["mistralai/mistral-large",128000,8888,"text",0],["mistralai/mistral-large-2407",131072,8888,"text",0],["mistralai/mistral-large-2411",131072,8888,"text",0],["mistralai/mistral-large-2512",262144,8888,"text,image",0],["mistralai/mistral-medium-3",131072,8888,"text,image",0],["mistralai/mistral-medium-3-5",262144,8888,"text,image",1],["mistralai/mistral-medium-3.1",131072,8888,"text,image",0],["mistralai/mistral-nemo",131072,8888,"text",0],["mistralai/mistral-saba",32768,8888,"text",0],["mistralai/mistral-small-24b-instruct-2501",32768,16384,"text",0],["mistralai/mistral-small-2603",262144,8888,"text,image",1],["mistralai/mistral-small-3.1-24b-instruct",131072,131072,"text,image",0],["mistralai/mistral-small-3.1-24b-instruct:free",128000,8888,"text,image",0],["mistralai/mistral-small-3.2-24b-instruct",128000,16384,"text,image",0],["mistralai/mistral-small-creative",32768,8888,"text",0],["mistralai/mixtral-8x22b-instruct",65536,13108,"text",0],["mistralai/mixtral-8x7b-instruct",32768,16384,"text",0],["mistralai/pixtral-large-2411",131072,8888,"text,image",0],["mistralai/voxtral-small-24b-2507",32000,8888,"text",0],["moonshotai/kimi-k2",131072,100352,"text",0],["moonshotai/kimi-k2-0905",262144,100352,"text",0],["moonshotai/kimi-k2-0905:exacto",262144,8888,"text",0],["moonshotai/kimi-k2-thinking",262144,262144,"text",1],["moonshotai/kimi-k2.5",262144,64000,"text,image",1],["moonshotai/kimi-k2.6",262144,262144,"text,image",1],["moonshotai/kimi-k2.6:free",262144,8888,"text,image",1],["moonshotai/kimi-k2.7-code",262144,16384,"text,image",1],["nex-agi/deepseek-v3.1-nex-n1",131072,163840,"text",0],["nex-agi/nex-n2-pro:free",262144,262144,"text,image",1],["nousresearch/deephermes-3-mistral-24b-preview",32768,32768,"text",1],["nousresearch/hermes-4-70b",131072,131072,"text",1],["nvidia/llama-3.1-nemotron-70b-instruct",131072,16384,"text",0],["nvidia/llama-3.3-nemotron-super-49b-v1.5",131072,16384,"text",1],["nvidia/nemotron-3-nano-30b-a3b",262144,228000,"text",1],["nvidia/nemotron-3-nano-30b-a3b:free",256000,8888,"text",1],["nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free",256000,65536,"text,image",1],["nvidia/nemotron-3-super-120b-a12b",1000000,16384,"text",1],["nvidia/nemotron-3-super-120b-a12b:free",1000000,262144,"text",1],["nvidia/nemotron-3-ultra-550b-a55b",1000000,16384,"text",1],["nvidia/nemotron-3-ultra-550b-a55b:free",1000000,65536,"text",1],["nvidia/nemotron-nano-12b-v2-vl:free",128000,128000,"text,image",1],["nvidia/nemotron-nano-9b-v2",131072,16384,"text",1],["nvidia/nemotron-nano-9b-v2:free",128000,8888,"text",1],["openai/gpt-3.5-turbo",16385,4096,"text",0],["openai/gpt-3.5-turbo-0613",4095,4096,"text",0],["openai/gpt-3.5-turbo-16k",16385,4096,"text",0],["openai/gpt-4",8191,8192,"text",0],["openai/gpt-4-0314",8191,4096,"text",0],["openai/gpt-4-1106-preview",128000,4096,"text",0],["openai/gpt-4-turbo",128000,4096,"text,image",0],["openai/gpt-4-turbo-preview",128000,4096,"text",0],["openai/gpt-4.1",1047576,8888,"text,image",0],["openai/gpt-4.1-mini",1047576,32768,"text,image",0],["openai/gpt-4.1-nano",1047576,32768,"text,image",0],["openai/gpt-4o",128000,16384,"text,image",0],["openai/gpt-4o-2024-05-13",128000,4096,"text,image",0],["openai/gpt-4o-2024-08-06",128000,16384,"text,image",0],["openai/gpt-4o-2024-11-20",128000,16384,"text,image",0],["openai/gpt-4o-audio-preview",128000,16384,"text",0],["openai/gpt-4o-mini",128000,16384,"text,image",0],["openai/gpt-4o-mini-2024-07-18",128000,16384,"text,image",0],["openai/gpt-4o:extended",128000,64000,"text,image",0],["openai/gpt-5",400000,128000,"text,image",1],["openai/gpt-5-codex",272000,128000,"text,image",1],["openai/gpt-5-image",400000,128000,"text,image",1],["openai/gpt-5-image-mini",400000,128000,"text,image",1],["openai/gpt-5-mini",400000,128000,"text,image",1],["openai/gpt-5-nano",400000,8888,"text,image",1],["openai/gpt-5-pro",400000,128000,"text,image",1],["openai/gpt-5.1",400000,128000,"text,image",1],["openai/gpt-5.1-chat",128000,32000,"text,image",0],["openai/gpt-5.1-codex",272000,128000,"text,image",1],["openai/gpt-5.1-codex-max",272000,128000,"text,image",1],["openai/gpt-5.1-codex-mini",272000,100000,"text,image",1],["openai/gpt-5.2",400000,128000,"text,image",1],["openai/gpt-5.2-chat",128000,16384,"text,image",0],["openai/gpt-5.2-codex",272000,128000,"text,image",1],["openai/gpt-5.2-pro",400000,128000,"text,image",1],["openai/gpt-5.3-chat",128000,16384,"text",0],["openai/gpt-5.3-codex",272000,128000,"text,image",1],["openai/gpt-5.4",1050000,128000,"text,image",1],["openai/gpt-5.4-mini",400000,128000,"text",0],["openai/gpt-5.4-nano",400000,128000,"text",0],["openai/gpt-5.4-pro",1050000,128000,"text,image",1],["openai/gpt-5.5",1050000,128000,"text,image",1],["openai/gpt-5.5-pro",1050000,128000,"text,image",1],["openai/gpt-audio",128000,16384,"text",0],["openai/gpt-audio-mini",128000,16384,"text",0],["openai/gpt-chat-latest",400000,128000,"text,image",0],["openai/gpt-oss-120b",131072,131072,"text",1],["openai/gpt-oss-120b:exacto",131072,8888,"text",1],["openai/gpt-oss-120b:free",131072,131072,"text",1],["openai/gpt-oss-20b",131072,65536,"text",1],["openai/gpt-oss-20b:free",131072,32768,"text",1],["openai/gpt-oss-safeguard-20b",131072,65536,"text",1],["openai/o1",200000,100000,"text,image",1],["openai/o3",200000,100000,"text,image",1],["openai/o3-deep-research",200000,100000,"text,image",1],["openai/o3-mini",200000,100000,"text",1],["openai/o3-mini-high",200000,100000,"text",1],["openai/o3-pro",200000,100000,"text,image",1],["openai/o4-mini",200000,100000,"text,image",1],["openai/o4-mini-deep-research",200000,100000,"text,image",1],["openai/o4-mini-high",200000,100000,"text,image",1],["openrouter/aurora-alpha",128000,50000,"text",1],["openrouter/auto",2000000,8888,"text,image",1],["openrouter/elephant-alpha",262144,32768,"text",0],["openrouter/free",200000,8888,"text,image",1],["openrouter/healer-alpha",262144,32000,"text,image",1],["openrouter/hunter-alpha",1048576,32000,"text",1],["openrouter/owl-alpha",1048756,262144,"text",0],["poolside/laguna-m.1",262144,32768,"text",1],["poolside/laguna-m.1:free",262144,32768,"text",1],["poolside/laguna-xs.2",262144,32768,"text",1],["poolside/laguna-xs.2:free",262144,32768,"text",1],["prime-intellect/intellect-3",131072,131072,"text",1],["qwen/qwen-2.5-72b-instruct",131072,16384,"text",0],["qwen/qwen-2.5-7b-instruct",131072,32768,"text",0],["qwen/qwen-max",32768,8192,"text",0],["qwen/qwen-plus",1000000,32768,"text",0],["qwen/qwen-plus-2025-07-28",1000000,32768,"text",0],["qwen/qwen-plus-2025-07-28:thinking",1000000,32768,"text",1],["qwen/qwen-turbo",131072,8192,"text",0],["qwen/qwen-vl-max",131072,32768,"text,image",0],["qwen/qwen3-14b",131702,40960,"text",1],["qwen/qwen3-235b-a22b",131072,8192,"text",1],["qwen/qwen3-235b-a22b-2507",262144,16384,"text",1],["qwen/qwen3-235b-a22b-thinking-2507",262144,262144,"text",1],["qwen/qwen3-30b-a3b",131072,16384,"text",1],["qwen/qwen3-30b-a3b-instruct-2507",131072,32000,"text",0],["qwen/qwen3-30b-a3b-thinking-2507",131072,131072,"text",1],["qwen/qwen3-32b",131072,16384,"text",1],["qwen/qwen3-4b",131072,8192,"text",1],["qwen/qwen3-4b:free",40960,8888,"text",1],["qwen/qwen3-8b",131072,8192,"text",1],["qwen/qwen3-coder",1048576,65536,"text",0],["qwen/qwen3-coder-30b-a3b-instruct",160000,32768,"text",0],["qwen/qwen3-coder-flash",1000000,65536,"text",0],["qwen/qwen3-coder-next",262144,262144,"text",0],["qwen/qwen3-coder-plus",1000000,65536,"text",0],["qwen/qwen3-coder:exacto",262144,65536,"text",0],["qwen/qwen3-coder:free",1048576,262000,"text",0],["qwen/qwen3-max",262144,32768,"text",1],["qwen/qwen3-max-thinking",262144,32768,"text",1],["qwen/qwen3-next-80b-a3b-instruct",262144,16384,"text",0],["qwen/qwen3-next-80b-a3b-instruct:free",262144,8888,"text",0],["qwen/qwen3-next-80b-a3b-thinking",262144,32768,"text",1],["qwen/qwen3-vl-235b-a22b-instruct",262144,16384,"text,image",0],["qwen/qwen3-vl-235b-a22b-thinking",131072,32768,"text,image",1],["qwen/qwen3-vl-30b-a3b-instruct",262144,32768,"text,image",0],["qwen/qwen3-vl-30b-a3b-thinking",131072,32768,"text,image",1],["qwen/qwen3-vl-32b-instruct",262144,32768,"text,image",0],["qwen/qwen3-vl-8b-instruct",256000,32768,"text,image",0],["qwen/qwen3-vl-8b-thinking",256000,32768,"text,image",1],["qwen/qwen3.5-122b-a10b",262144,262144,"text,image",1],["qwen/qwen3.5-27b",262144,65536,"text,image",1],["qwen/qwen3.5-35b-a3b",262144,81920,"text,image",1],["qwen/qwen3.5-397b-a17b",256000,8192,"text,image",1],["qwen/qwen3.5-9b",262144,262144,"text,image",1],["qwen/qwen3.5-flash-02-23",1000000,65536,"text,image",1],["qwen/qwen3.5-plus-02-15",1000000,65536,"text,image",1],["qwen/qwen3.5-plus-20260420",1000000,65536,"text,image",1],["qwen/qwen3.6-27b",262144,262140,"text,image",1],["qwen/qwen3.6-35b-a3b",262144,262144,"text,image",1],["qwen/qwen3.6-flash",1000000,65536,"text,image",1],["qwen/qwen3.6-max-preview",262144,65536,"text",1],["qwen/qwen3.6-plus",1000000,65536,"text",1],["qwen/qwen3.6-plus-preview:free",1000000,32000,"text",1],["qwen/qwen3.6-plus:free",1000000,65536,"text,image",1],["qwen/qwen3.7-max",1000000,65536,"text",1],["qwen/qwen3.7-plus",1000000,65536,"text,image",1],["qwen/qwq-32b",131072,131072,"text",1],["reka/reka-edge",16384,16384,"text,image",0],["rekaai/reka-edge",16384,16384,"text,image",0],["relace/relace-search",256000,128000,"text",0],["sakana/fugu-ultra",1000000,128000,"text,image",1],["sao10k/l3-euryale-70b",8192,8192,"text",0],["sao10k/l3.1-euryale-70b",131072,16384,"text",0],["stepfun/step-3.5-flash",262144,65536,"text",0],["stepfun/step-3.5-flash:free",256000,256000,"text",1],["stepfun/step-3.7-flash",256000,256000,"text,image",1],["tencent/hy3-preview",262144,64000,"text",1],["tencent/hy3-preview:free",262144,262144,"text",1],["thedrummer/rocinante-12b",32768,32768,"text",0],["thedrummer/unslopnemo-12b",32768,32768,"text",0],["tngtech/deepseek-r1t2-chimera",163840,163840,"text",1],["tngtech/tng-r1t-chimera",163840,65536,"text",1],["upstage/solar-pro-3",128000,8888,"text",1],["upstage/solar-pro-3:free",128000,8888,"text",1],["x-ai/grok-3",131072,8888,"text",0],["x-ai/grok-3-beta",131072,8888,"text",0],["x-ai/grok-3-mini",131072,8888,"text",1],["x-ai/grok-3-mini-beta",131072,8888,"text",1],["x-ai/grok-4",256000,64000,"text,image",1],["x-ai/grok-4-fast",2000000,30000,"text,image",1],["x-ai/grok-4.1-fast",2000000,30000,"text,image",1],["x-ai/grok-4.20",2000000,8888,"text,image",1],["x-ai/grok-4.20-beta",2000000,8888,"text,image",1],["x-ai/grok-4.3",1000000,1000000,"text,image",1],["x-ai/grok-build-0.1",256000,256000,"text,image",1],["x-ai/grok-code-fast-1",256000,10000,"text",1],["xiaomi/mimo-v2-flash",262144,65536,"text",1],["xiaomi/mimo-v2-omni",262144,65536,"text,image",1],["xiaomi/mimo-v2-pro",1048576,131072,"text",1],["xiaomi/mimo-v2.5",1048576,131072,"text,image",1],["xiaomi/mimo-v2.5-pro",1048576,131072,"text",1],["z-ai/glm-4-32b",128000,8888,"text",0],["z-ai/glm-4.5",131072,98304,"text",1],["z-ai/glm-4.5-air",131072,98304,"text",1],["z-ai/glm-4.5-air:free",131072,96000,"text",1],["z-ai/glm-4.5v",65536,16384,"text,image",1],["z-ai/glm-4.6",202752,131072,"text",1],["z-ai/glm-4.6:exacto",204800,131072,"text",1],["z-ai/glm-4.6v",131072,32768,"text,image",1],["z-ai/glm-4.7",202752,131072,"text",1],["z-ai/glm-4.7-flash",202752,16384,"text",1],["z-ai/glm-5",202752,128000,"text",1],["z-ai/glm-5-turbo",262144,131072,"text",1],["z-ai/glm-5.1",202752,131072,"text",1],["z-ai/glm-5.2",1048576,32768,"text",1],["z-ai/glm-5v-turbo",202752,131072,"text,image",1]],
35
40
  "xai": [["grok-2",131072,8192,"text",0],["grok-2-1212",131072,8192,"text",0],["grok-2-latest",131072,8192,"text",0],["grok-2-vision",8192,4096,"text,image",0],["grok-2-vision-1212",8192,4096,"text,image",0],["grok-2-vision-latest",8192,4096,"text,image",0],["grok-3",131072,8192,"text",0],["grok-3-fast",131072,8192,"text",0],["grok-3-fast-latest",131072,8192,"text",0],["grok-3-latest",131072,8192,"text",0],["grok-3-mini",131072,8192,"text",1],["grok-3-mini-fast",131072,8192,"text",1],["grok-3-mini-fast-latest",131072,8192,"text",1],["grok-3-mini-latest",131072,8192,"text",1],["grok-4",256000,64000,"text",1],["grok-4-1-fast",2000000,30000,"text,image",1],["grok-4-1-fast-non-reasoning",2000000,30000,"text,image",0],["grok-4-fast",2000000,30000,"text,image",1],["grok-4-fast-non-reasoning",2000000,30000,"text,image",0],["grok-4.20-0309-non-reasoning",1000000,30000,"text,image",0],["grok-4.20-0309-reasoning",1000000,30000,"text,image",1],["grok-4.20-beta-latest-non-reasoning",2000000,30000,"text,image",0],["grok-4.20-beta-latest-reasoning",2000000,30000,"text,image",1],["grok-4.20-multi-agent-beta-latest",2000000,30000,"text,image",1],["grok-4.3",1000000,30000,"text,image",1],["grok-beta",131072,4096,"text",0],["grok-build-0.1",256000,256000,"text,image",1],["grok-code-fast-1",256000,10000,"text",1],["grok-composer-2.5-fast",200000,64000,"text",1],["grok-vision-beta",8192,4096,"text,image",0]],
36
41
  };
37
42
 
@@ -1,12 +1,10 @@
1
1
  // Google Antigravity (Cloud Code Assist) bundled model list.
2
2
  //
3
3
  // Single source of truth: the Antigravity `:fetchAvailableModels` backend, the same one the `agy`
4
- // CLI resolves labels against. The 8 ids below are the WIRE ids (not the human labels) that the CCA
5
- // `streamGenerateContent` envelope's `model` field accepts, each verified to return 200 live. The
6
- // effort tier is baked into the id by the backend (e.g. "Gemini 3.1 Pro (High)" => gemini-pro-agent),
7
- // so opencodex must send these exact strings, not the label-shaped guesses. Antigravity's OAuth
8
- // backend has no OpenAI-style `GET /models`, so this static list is what surfaces in the picker.
9
- export const ANTIGRAVITY_MODELS = [
4
+ // CLI resolves labels against. The ids below are the CCA WIRE ids followed by CLIProxyAPI-style
5
+ // client aliases. The CCA envelope's `model` field must receive the wire id (for example
6
+ // "Gemini 3.1 Pro (High)" => gemini-pro-agent), while the picker can expose label-shaped aliases.
7
+ const ANTIGRAVITY_WIRE_MODELS = [
10
8
  "gemini-3.5-flash-low",
11
9
  "gemini-3-flash-agent",
12
10
  "gemini-3.5-flash-extra-low",
@@ -17,8 +15,20 @@ export const ANTIGRAVITY_MODELS = [
17
15
  "gpt-oss-120b-medium",
18
16
  ];
19
17
 
18
+ export const ANTIGRAVITY_MODEL_ALIASES: Record<string, string> = {
19
+ "gemini-3.5-flash-mid": "gemini-3.5-flash-low",
20
+ "gemini-3.5-flash-high": "gemini-3-flash-agent",
21
+ "gemini-3.1-pro-high": "gemini-pro-agent",
22
+ "gemini-3.1-pro-preview": "gemini-pro-agent",
23
+ };
24
+
25
+ export const ANTIGRAVITY_MODELS = [
26
+ ...ANTIGRAVITY_WIRE_MODELS,
27
+ ...Object.keys(ANTIGRAVITY_MODEL_ALIASES),
28
+ ];
29
+
20
30
  // Context windows from the upstream `:fetchAvailableModels` maxTokens per model.
21
- export const ANTIGRAVITY_MODEL_CONTEXT_WINDOWS: Record<string, number> = {
31
+ const ANTIGRAVITY_WIRE_MODEL_CONTEXT_WINDOWS: Record<string, number> = {
22
32
  "gemini-3.5-flash-low": 1_048_576,
23
33
  "gemini-3-flash-agent": 1_048_576,
24
34
  "gemini-3.5-flash-extra-low": 1_048_576,
@@ -28,3 +38,17 @@ export const ANTIGRAVITY_MODEL_CONTEXT_WINDOWS: Record<string, number> = {
28
38
  "claude-opus-4-6-thinking": 1_000_000,
29
39
  "gpt-oss-120b-medium": 131_072,
30
40
  };
41
+
42
+ export const ANTIGRAVITY_MODEL_CONTEXT_WINDOWS: Record<string, number> = {
43
+ ...ANTIGRAVITY_WIRE_MODEL_CONTEXT_WINDOWS,
44
+ ...Object.fromEntries(
45
+ Object.entries(ANTIGRAVITY_MODEL_ALIASES).map(([alias, wire]) => [
46
+ alias,
47
+ ANTIGRAVITY_WIRE_MODEL_CONTEXT_WINDOWS[wire],
48
+ ]),
49
+ ),
50
+ };
51
+
52
+ export function resolveAntigravityWireModelId(modelId: string): string {
53
+ return ANTIGRAVITY_MODEL_ALIASES[modelId] ?? modelId;
54
+ }
@@ -1,5 +1,6 @@
1
1
  export const KIRO_MODELS = [
2
2
  "kiro-auto",
3
+ "claude-sonnet-5",
3
4
  "claude-opus-4.8",
4
5
  "claude-opus-4.7",
5
6
  "claude-opus-4.6",
@@ -17,8 +18,11 @@ export const KIRO_MODELS = [
17
18
 
18
19
  // Per-model context windows as documented on Kiro's official model catalog
19
20
  // (https://kiro.dev/docs/models/ — "Quick comparison", page updated 2026-06-19).
21
+ // claude-sonnet-5 is pre-seeded from Anthropic/OpenRouter 1M metadata until Kiro's
22
+ // public catalog catches up.
20
23
  // "Auto" is a router with no fixed window on Kiro's table, so it is intentionally omitted.
21
24
  export const KIRO_MODEL_CONTEXT_WINDOWS: Record<string, number> = {
25
+ "claude-sonnet-5": 1_000_000,
22
26
  "claude-opus-4.8": 1_000_000,
23
27
  "claude-opus-4.7": 1_000_000,
24
28
  "claude-opus-4.6": 1_000_000,
@@ -140,7 +140,8 @@ export const PROVIDER_REGISTRY: readonly ProviderRegistryEntry[] = [
140
140
  oauthId: "anthropic",
141
141
  jawcodeBundle: "anthropic",
142
142
  note: "Log in with your Claude account",
143
- models: ["claude-opus-4-8", "claude-opus-4-7", "claude-opus-4-6", "claude-sonnet-4-6", "claude-haiku-4-5"],
143
+ models: ["claude-sonnet-5", "claude-opus-4-8", "claude-opus-4-7", "claude-opus-4-6", "claude-sonnet-4-6", "claude-haiku-4-5"],
144
+ modelContextWindows: { "claude-sonnet-5": 1_000_000 },
144
145
  defaultModel: "claude-sonnet-4-6",
145
146
  },
146
147
  {
@@ -174,7 +175,7 @@ export const PROVIDER_REGISTRY: readonly ProviderRegistryEntry[] = [
174
175
  note: "Import-first: reuses your installed kiro-cli login (no browser). Experimental third-party harness — see Kiro ToS.",
175
176
  models: KIRO_MODELS,
176
177
  defaultModel: "kiro-auto",
177
- // Context windows sourced from Kiro's official model catalog (kiro.dev/docs/models/).
178
+ // Per-model context metadata is maintained next to the Kiro model list.
178
179
  modelContextWindows: KIRO_MODEL_CONTEXT_WINDOWS,
179
180
  modelReasoningEfforts: KIRO_MODEL_REASONING_EFFORTS,
180
181
  },
@@ -262,7 +263,7 @@ export const PROVIDER_REGISTRY: readonly ProviderRegistryEntry[] = [
262
263
  autoToolChoiceOnlyModels: ["kimi-k2.7-code"],
263
264
  preserveReasoningContentModels: NEURALWATT_REASONING_HISTORY_MODELS,
264
265
  },
265
- { id: "openrouter", label: "OpenRouter", adapter: "openai-chat", baseUrl: "https://openrouter.ai/api/v1", authKind: "key", featured: true, dashboardUrl: "https://openrouter.ai/keys", jawcodeBundle: "openrouter" },
266
+ { id: "openrouter", label: "OpenRouter", adapter: "openai-chat", baseUrl: "https://openrouter.ai/api/v1", authKind: "key", featured: true, dashboardUrl: "https://openrouter.ai/keys", jawcodeBundle: "openrouter", models: ["anthropic/claude-sonnet-5"], modelContextWindows: { "anthropic/claude-sonnet-5": 1_000_000 } },
266
267
  { id: "groq", label: "Groq", adapter: "openai-chat", baseUrl: "https://api.groq.com/openai/v1", authKind: "key", featured: true, dashboardUrl: "https://console.groq.com/keys" },
267
268
  { id: "google", label: "Google Gemini", adapter: "google", baseUrl: "https://generativelanguage.googleapis.com", authKind: "key", featured: true, dashboardUrl: "https://aistudio.google.com/apikey", defaultModel: "gemini-3-pro", jawcodeBundle: "google", extraMetadataAliases: ["gemini"] },
268
269
  { id: "google-vertex", label: "Google Vertex AI", adapter: "google", baseUrl: "https://aiplatform.googleapis.com", authKind: "key", dashboardUrl: "https://console.cloud.google.com/vertex-ai", defaultModel: "gemini-3-pro", googleMode: "vertex", jawcodeBundle: "google", extraMetadataAliases: ["gemini-vertex"] },
@@ -396,6 +396,7 @@ export function parseRequest(body: unknown): OcxParsedRequest {
396
396
  if (data.presence_penalty !== undefined) options.presencePenalty = data.presence_penalty;
397
397
  if (data.frequency_penalty !== undefined) options.frequencyPenalty = data.frequency_penalty;
398
398
  if (data.service_tier !== undefined) options.serviceTier = data.service_tier;
399
+ if (data.prompt_cache_key !== undefined) options.promptCacheKey = data.prompt_cache_key;
399
400
 
400
401
  // Stash the hosted web_search config (if Codex enabled it) so the proxy can run searches via the
401
402
  // gpt-mini sidecar for routed providers. buildTools still drops the hosted tool; the sidecar path
package/src/server.ts CHANGED
@@ -1589,6 +1589,7 @@ async function handleManagementAPI(req: Request, url: URL, config: OcxConfig): P
1589
1589
  generatedAt: now,
1590
1590
  summary: {
1591
1591
  requests: 0,
1592
+ measuredRequests: 0,
1592
1593
  reportedRequests: 0,
1593
1594
  unreportedRequests: 0,
1594
1595
  unsupportedRequests: 0,
package/src/types.ts CHANGED
@@ -171,6 +171,7 @@ export interface OcxRequestOptions {
171
171
  serviceTier?: string;
172
172
  presencePenalty?: number;
173
173
  frequencyPenalty?: number;
174
+ /** Responses prompt-cache affinity key. Passthrough preserves it via _rawBody; routed adapters do not consume it unless their upstream wire supports it. */
174
175
  promptCacheKey?: string;
175
176
  }
176
177
 
@@ -5,6 +5,7 @@ export type UsageRange = "7d" | "30d" | "all";
5
5
 
6
6
  export interface UsageSummaryTotals {
7
7
  requests: number;
8
+ measuredRequests: number;
8
9
  reportedRequests: number;
9
10
  unreportedRequests: number;
10
11
  unsupportedRequests: number;
@@ -20,6 +21,7 @@ export interface UsageSummaryTotals {
20
21
  export interface UsageDay {
21
22
  date: string;
22
23
  requests: number;
24
+ measuredRequests: number;
23
25
  reportedRequests: number;
24
26
  totalTokens: number;
25
27
  models: UsageDayModel[];
@@ -37,7 +39,9 @@ export interface UsageModel {
37
39
  model: string;
38
40
  resolvedModel?: string;
39
41
  requests: number;
42
+ measuredRequests: number;
40
43
  reportedRequests: number;
44
+ estimatedRequests: number;
41
45
  totalTokens: number;
42
46
  inputTokens: number;
43
47
  outputTokens: number;
@@ -47,7 +51,9 @@ export interface UsageModel {
47
51
  export interface UsageProvider {
48
52
  provider: string;
49
53
  requests: number;
54
+ measuredRequests: number;
50
55
  reportedRequests: number;
56
+ estimatedRequests: number;
51
57
  totalTokens: number;
52
58
  shareRatio: number;
53
59
  }
@@ -93,6 +99,7 @@ function dayCountForAllRange(entries: PersistedUsageEntry[], now: number): numbe
93
99
  function blankTotals(): UsageSummaryTotals {
94
100
  return {
95
101
  requests: 0,
102
+ measuredRequests: 0,
96
103
  reportedRequests: 0,
97
104
  unreportedRequests: 0,
98
105
  unsupportedRequests: 0,
@@ -106,8 +113,13 @@ function blankTotals(): UsageSummaryTotals {
106
113
  };
107
114
  }
108
115
 
116
+ function isMeasuredStatus(status: UsageStatus): boolean {
117
+ return status === "reported" || status === "estimated";
118
+ }
119
+
109
120
  function bumpStatus(totals: UsageSummaryTotals, status: UsageStatus): void {
110
121
  totals.requests += 1;
122
+ if (isMeasuredStatus(status)) totals.measuredRequests += 1;
111
123
  if (status === "reported") totals.reportedRequests += 1;
112
124
  else if (status === "unreported") totals.unreportedRequests += 1;
113
125
  else if (status === "unsupported") totals.unsupportedRequests += 1;
@@ -125,7 +137,7 @@ function addTokens(totals: UsageSummaryTotals, entry: PersistedUsageEntry): void
125
137
  }
126
138
 
127
139
  function finalizeCoverage(totals: UsageSummaryTotals): void {
128
- totals.coverageRatio = totals.requests === 0 ? 0 : totals.reportedRequests / totals.requests;
140
+ totals.coverageRatio = totals.requests === 0 ? 0 : totals.measuredRequests / totals.requests;
129
141
  }
130
142
 
131
143
  function buildDayGrid(range: UsageRange, since: number | null, now: number, entries: PersistedUsageEntry[]): UsageDay[] {
@@ -147,16 +159,17 @@ function buildDayGrid(range: UsageRange, since: number | null, now: number, entr
147
159
  };
148
160
  for (let i = days - 1; i >= 0; i--) {
149
161
  const key = localDateKey(now - i * DAY_MS);
150
- grid.set(key, { date: key, requests: 0, reportedRequests: 0, totalTokens: 0, models: [] });
162
+ grid.set(key, { date: key, requests: 0, measuredRequests: 0, reportedRequests: 0, totalTokens: 0, models: [] });
151
163
  }
152
164
  for (const entry of entries) {
153
165
  const key = localDateKey(entry.timestamp);
154
166
  let day = grid.get(key);
155
167
  if (!day) {
156
- day = { date: key, requests: 0, reportedRequests: 0, totalTokens: 0, models: [] };
168
+ day = { date: key, requests: 0, measuredRequests: 0, reportedRequests: 0, totalTokens: 0, models: [] };
157
169
  grid.set(key, day);
158
170
  }
159
171
  day.requests += 1;
172
+ if (isMeasuredStatus(entry.usageStatus)) day.measuredRequests += 1;
160
173
  if (entry.usageStatus === "reported") day.reportedRequests += 1;
161
174
  if (typeof entry.totalTokens === "number") day.totalTokens += entry.totalTokens;
162
175
  else if (entry.usage) day.totalTokens += entry.usage.inputTokens + entry.usage.outputTokens;
@@ -186,7 +199,9 @@ function buildModels(entries: PersistedUsageEntry[], totalRequests: number): Usa
186
199
  model: entry.model,
187
200
  ...(entry.resolvedModel ? { resolvedModel: entry.resolvedModel } : {}),
188
201
  requests: 0,
202
+ measuredRequests: 0,
189
203
  reportedRequests: 0,
204
+ estimatedRequests: 0,
190
205
  totalTokens: 0,
191
206
  inputTokens: 0,
192
207
  outputTokens: 0,
@@ -195,7 +210,9 @@ function buildModels(entries: PersistedUsageEntry[], totalRequests: number): Usa
195
210
  byKey.set(key, model);
196
211
  }
197
212
  model.requests += 1;
213
+ if (isMeasuredStatus(entry.usageStatus)) model.measuredRequests += 1;
198
214
  if (entry.usageStatus === "reported") model.reportedRequests += 1;
215
+ else if (entry.usageStatus === "estimated") model.estimatedRequests += 1;
199
216
  if (entry.usage) {
200
217
  model.inputTokens += entry.usage.inputTokens;
201
218
  model.outputTokens += entry.usage.outputTokens;
@@ -217,14 +234,18 @@ function buildProviders(entries: PersistedUsageEntry[], totalRequests: number):
217
234
  provider = {
218
235
  provider: providerKey,
219
236
  requests: 0,
237
+ measuredRequests: 0,
220
238
  reportedRequests: 0,
239
+ estimatedRequests: 0,
221
240
  totalTokens: 0,
222
241
  shareRatio: 0,
223
242
  };
224
243
  byKey.set(providerKey, provider);
225
244
  }
226
245
  provider.requests += 1;
246
+ if (isMeasuredStatus(entry.usageStatus)) provider.measuredRequests += 1;
227
247
  if (entry.usageStatus === "reported") provider.reportedRequests += 1;
248
+ else if (entry.usageStatus === "estimated") provider.estimatedRequests += 1;
228
249
  if (entry.usage) {
229
250
  if (typeof entry.totalTokens === "number") provider.totalTokens += entry.totalTokens;
230
251
  else provider.totalTokens += entry.usage.inputTokens + entry.usage.outputTokens;