dsh-model-think-level 1.1.1 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -275,52 +275,57 @@ var KNOWLEDGE_BASE = [
275
275
  patterns: ["gpt-5.6"],
276
276
  // gpt-5.6 spans the full modern ladder including max; the sol/luna/terra
277
277
  // variants share it (official reasoning guide: values "can include none
278
- // minimal low medium high xhigh, and max").
278
+ // minimal low medium high xhigh, and max"). pi-ai 1.2.0 catalog
279
+ // confirms the FULL ladder at a 272,000 context.
279
280
  efforts: { off: "none", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" },
280
281
  defaultEffort: "medium",
281
282
  compat: { thinkingFormat: "openai", supportsReasoningEffort: true },
282
283
  input: ["text", "image"],
283
- contextWindow: 105e4,
284
+ contextWindow: 272e3,
284
285
  maxTokens: 128e3,
285
- note: "GPT-5.6\uFF08\u522B\u540D\u5373 sol\uFF09\u6863\u4F4D\uFF1ANone / Low / Medium(\u9ED8\u8BA4) / High / XHigh / Max\uFF1Bsol/luna/terra \u540C\u6863\uFF0C\u5E26\u56FE\u8F93\u5165\u3002"
286
+ note: "GPT-5.6\uFF08\u522B\u540D\u5373 sol\uFF09\u6863\u4F4D\uFF1ANone / Low / Medium(\u9ED8\u8BA4) / High / XHigh / Max\uFF1Bsol/luna/terra \u540C\u6863\uFF0C\u5E26\u56FE\u8F93\u5165\u30022026-10 \u6821\u51C6\uFF1A\u4E0A\u4E0B\u6587\u6309 pi-ai 1.2.0 \u76EE\u5F55\u8BB0 272,000\uFF08\u6B64\u524D\u8BEF\u8BB0 1,050,000\uFF09\u3002"
286
287
  },
287
288
  {
288
289
  id: "openai-gpt-5-5",
289
290
  patterns: ["gpt-5.5"],
290
291
  // gpt-5.5 defaults to medium (official reasoning guide) and tops out at
291
- // xhigh; the -pro variant drops none/low (medium/high/xhigh only).
292
+ // xhigh (max is ABSENT from the pi-ai 1.2.0 catalog); the -pro variant
293
+ // (1.05M context, Responses-only) keeps high/xhigh only.
292
294
  efforts: { off: "none", low: "low", medium: "medium", high: "high", xhigh: "xhigh" },
293
295
  defaultEffort: "medium",
294
296
  compat: { thinkingFormat: "openai", supportsReasoningEffort: true },
295
297
  input: ["text", "image"],
296
- contextWindow: 105e4,
298
+ contextWindow: 272e3,
297
299
  maxTokens: 128e3,
298
- note: "GPT-5.5 \u6863\u4F4D\uFF1ANone / Low / Medium(\u9ED8\u8BA4) / High / XHigh\uFF0C\u5E26\u56FE\u8F93\u5165\u3002pro \u53D8\u4F53\u4EC5 Medium / High(\u9ED8\u8BA4) / XHigh \u4E14\u4EC5 Responses API\u3002"
300
+ note: "GPT-5.5 \u6863\u4F4D\uFF1ANone / Low / Medium(\u9ED8\u8BA4) / High / XHigh\uFF08\u65E0 Max \u6863\uFF09\uFF0C\u5E26\u56FE\u8F93\u5165\u3002pro \u53D8\u4F53\u4EC5 High(\u9ED8\u8BA4) / XHigh\u30011.05M \u4E0A\u4E0B\u6587\u4E14\u4EC5 Responses API\u30022026-10 \u6821\u51C6\uFF1A\u4E0A\u4E0B\u6587\u6309 pi-ai 1.2.0 \u76EE\u5F55\u8BB0 272,000\uFF08\u6B64\u524D\u8BEF\u8BB0 1,050,000\uFF09\u3002"
299
301
  },
300
302
  {
301
303
  id: "openai-gpt-5-4",
302
304
  patterns: ["gpt-5.4"],
303
305
  // Official model page: none (default) / low / medium / high / xhigh;
304
- // pro drops none+low and is Responses-only; mini/nano sit on 400K.
306
+ // pro drops none+low (medium/high/xhigh, 1.05M, Responses-only);
307
+ // mini/nano sit on 400K. pi-ai 1.2.0 catalog: 272,000 context.
305
308
  efforts: { off: "none", low: "low", medium: "medium", high: "high", xhigh: "xhigh" },
306
309
  defaultEffort: "off",
307
310
  compat: { thinkingFormat: "openai", supportsReasoningEffort: true },
308
311
  input: ["text", "image"],
309
- contextWindow: 105e4,
312
+ contextWindow: 272e3,
310
313
  maxTokens: 128e3,
311
- note: "GPT-5.4 \u6863\u4F4D\uFF1ANone(\u9ED8\u8BA4) / Low / Medium / High / XHigh\uFF0C\u5E26\u56FE\u8F93\u5165\u3002pro \u53D8\u4F53\u4EC5 Medium/High/XHigh\uFF1Bmini/nano \u4E3A 400K \u4E0A\u4E0B\u6587\u3002"
314
+ note: "GPT-5.4 \u6863\u4F4D\uFF1ANone(\u9ED8\u8BA4) / Low / Medium / High / XHigh\uFF0C\u5E26\u56FE\u8F93\u5165\u3002pro \u53D8\u4F53\u4EC5 Medium/High/XHigh\uFF081.05M\uFF09\uFF1Bmini/nano \u4E3A 400K \u4E0A\u4E0B\u6587\u30022026-10 \u6821\u51C6\uFF1A\u4E0A\u4E0B\u6587\u6309 pi-ai 1.2.0 \u76EE\u5F55\u8BB0 272,000\uFF08\u6B64\u524D\u8BEF\u8BB0 1,050,000\uFF09\u3002"
312
315
  },
313
316
  {
314
317
  id: "openai-gpt-5-3",
315
318
  patterns: ["gpt-5.3"],
316
- // Official model page: low / medium / high / xhigh only -- no none.
317
- efforts: { low: "low", medium: "medium", high: "high", xhigh: "xhigh" },
319
+ // pi-ai 1.2.0 catalog (gpt-5.3-codex): none IS accepted on the codex
320
+ // line, spelled 'none' -- the older "no none" reading is retired.
321
+ // gpt-5.3-chat (non-reasoning) keys its own openai-chat entry.
322
+ efforts: { off: "none", low: "low", medium: "medium", high: "high", xhigh: "xhigh" },
318
323
  defaultEffort: "medium",
319
324
  compat: { thinkingFormat: "openai", supportsReasoningEffort: true },
320
325
  input: ["text", "image"],
321
326
  contextWindow: 4e5,
322
327
  maxTokens: 128e3,
323
- note: "GPT-5.3-Codex \u6863\u4F4D\uFF1ALow / Medium / High / XHigh\uFF08\u65E0 None \u6863\uFF09\uFF0C\u5E26\u56FE\u8F93\u5165\u3001400K\uFF1Bgpt-5.3-chat \u4E3A\u975E\u63A8\u7406\u804A\u5929\u6A21\u578B\uFF08\u89C1 chat \u6761\u76EE\uFF09\u3002"
328
+ note: "GPT-5.3-Codex \u6863\u4F4D\uFF1ANone / Low / Medium(\u9ED8\u8BA4) / High / XHigh\uFF0C\u5E26\u56FE\u8F93\u5165\u3001400K\uFF1B2026-10 \u6821\u51C6\uFF1ANone \u6863\u6309 pi-ai 1.2.0 \u76EE\u5F55\u8865\u56DE\uFF08\u6B64\u524D\u6309\u65E7\u6A21\u578B\u9875\u8BB0\u4E3A\u65E0 None\uFF09\u3002gpt-5.3-chat \u4E3A\u975E\u63A8\u7406\u804A\u5929\u6A21\u578B\uFF08\u89C1 chat \u6761\u76EE\uFF09\u3002"
324
329
  },
325
330
  {
326
331
  id: "openai-gpt-5-1",
@@ -366,6 +371,20 @@ var KNOWLEDGE_BASE = [
366
371
  maxTokens: 128e3,
367
372
  note: "GPT-5 \u521D\u4EE3\u6863\u4F4D\uFF1AMinimal / Low / Medium / High\uFF0C\u65E0\u5173\u95ED\u6863\u3002"
368
373
  },
374
+ {
375
+ id: "openai-gpt-5-2-chat",
376
+ // pi-ai 1.2.0 catalog: gpt-5.2-chat-latest IS a reasoning model with a
377
+ // tiny ladder (off[omit] / medium / xhigh) at 128K -- it must not fall
378
+ // into the non-reasoning openai-chat entry below, which is why that
379
+ // entry's 'gpt-5.2-chat' pattern moved here.
380
+ patterns: ["gpt-5.2-chat"],
381
+ efforts: { off: null, medium: "medium", xhigh: "xhigh" },
382
+ compat: { thinkingFormat: "openai", supportsReasoningEffort: true },
383
+ input: ["text", "image"],
384
+ contextWindow: 128e3,
385
+ maxTokens: 16384,
386
+ note: "GPT-5.2-Chat\uFF08\u5B98\u65B9 id gpt-5.2-chat-latest\uFF09\uFF1Api-ai 1.2.0 \u76EE\u5F55\u8BB0\u4E3A\u63A8\u7406\u6A21\u578B\uFF0C\u4EC5 Medium / XHigh \u4E24\u6863\uFF08off \u4EE5\u7701\u7565\u8868\u8FBE\uFF0C\u975E\u663E\u5F0F\u5173\u95ED\uFF09\uFF0C128K / 16,384 \u8F93\u51FA\u30022026-10 \u65B0\u589E\u6761\u76EE\u3002"
387
+ },
369
388
  {
370
389
  id: "openai-chat",
371
390
  // Non-reasoning chat lines across generations: they take no
@@ -373,23 +392,22 @@ var KNOWLEDGE_BASE = [
373
392
  // Official ids are the *-chat-latest snapshots; the bare -chat spellings
374
393
  // stay for gateways serving them. gpt-5-chat-latest was removed upstream
375
394
  // on 2026-07-23 and gpt-chat-latest has no model page anymore -- the
376
- // patterns persist for compatibility only.
395
+ // patterns persist for compatibility only. ('gpt-5.2-chat' moved to its
396
+ // own reasoning entry above per pi-ai 1.2.0.)
377
397
  patterns: [
378
398
  "gpt-5.1-chat-latest",
379
- "gpt-5.2-chat-latest",
380
399
  "gpt-5.3-chat-latest",
381
400
  "gpt-5-chat-latest",
382
401
  "gpt-chat-latest",
383
402
  "gpt-5-chat",
384
403
  "gpt-5.1-chat",
385
- "gpt-5.2-chat",
386
404
  "gpt-5.3-chat"
387
405
  ],
388
406
  efforts: false,
389
407
  input: ["text", "image"],
390
408
  contextWindow: 128e3,
391
409
  maxTokens: 16384,
392
- note: "-chat \u7CFB\u5217\uFF08\u5B98\u65B9 id \u4E3A gpt-5.x-chat-latest\uFF09\u4E3A\u975E\u63A8\u7406\u804A\u5929\u6A21\u578B\uFF0C\u4E0D\u652F\u6301 effort \u53C2\u6570\uFF08\u52FF\u52FE\u601D\u8003\u6863\uFF09\uFF1B\u5B98\u65B9\u652F\u6301\u56FE\u7247\u8F93\u5165\uFF0C128K / 16,384 \u8F93\u51FA\u3002gpt-5-chat-latest \u5DF2\u4E8E 2026-07-23 \u4E0B\u67B6\u3001gpt-chat-latest \u5DF2\u65E0\u5B98\u65B9\u9875\u9762\uFF08\u4FDD\u7559\u6A21\u5F0F\u4F9B\u7F51\u5173\uFF09\u3002"
410
+ note: "-chat \u7CFB\u5217\uFF08\u5B98\u65B9 id \u4E3A gpt-5.x-chat-latest\uFF09\u4E3A\u975E\u63A8\u7406\u804A\u5929\u6A21\u578B\uFF0C\u4E0D\u652F\u6301 effort \u53C2\u6570\uFF08\u52FF\u52FE\u601D\u8003\u6863\uFF09\uFF1B\u5B98\u65B9\u652F\u6301\u56FE\u7247\u8F93\u5165\uFF0C128K / 16,384 \u8F93\u51FA\u3002gpt-5-chat-latest \u5DF2\u4E8E 2026-07-23 \u4E0B\u67B6\u3001gpt-chat-latest \u5DF2\u65E0\u5B98\u65B9\u9875\u9762\uFF08\u4FDD\u7559\u6A21\u5F0F\u4F9B\u7F51\u5173\uFF09\u3002gpt-5.2-chat \u53E6\u6709\u63A8\u7406\u6761\u76EE\u3002"
393
411
  },
394
412
  {
395
413
  id: "openai-o",
@@ -424,20 +442,63 @@ var KNOWLEDGE_BASE = [
424
442
  maxTokens: 131072,
425
443
  note: "GPT-OSS \u5F00\u6E90\u6743\u91CD\uFF08Ollama/vLLM \u5E38\u89C1\uFF09\uFF1Areasoning effort Low / Medium / High\uFF0C\u7EAF\u6587\u672C\uFF0C131K \u4E0A\u4E0B\u6587 / 131K \u8F93\u51FA\u30022026-09 \u590D\u6838\uFF1A\u5B98\u65B9\u6A21\u578B\u9875\u73B0\u5728\u5199 Chat Completions = Not supported\u3001\u65E0\u56FE\u7247\u8F93\u5165\uFF08\u9ED8\u8BA4 Low \u6765\u81EA\u5B98\u65B9 CLI\uFF0C\u4E0D\u662F API \u9875\uFF09\uFF0C\u56E0\u6B64\u8FD9\u91CC\u4E0D\u518D\u58F0\u660E Off\u3002"
426
444
  },
445
+ {
446
+ id: "openai-gpt-6",
447
+ // GPT-6 luna/sol/terra (2026, after astra): pi-ai 1.2.0 catalog carries
448
+ // the FULL ladder with an explicit 'none' off for luna/sol. astra keys
449
+ // its own entry above (its off is the omit-style null), and 6.1-sol's
450
+ // off is likewise omit-expressed there -- 'none' is not proven manually
451
+ // adjustable on it, so it stays in the astra entry's shape.
452
+ patterns: ["gpt-6-luna", "gpt-6-sol", "gpt-6-terra", "gpt-6.1"],
453
+ efforts: { off: "none", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" },
454
+ compat: { thinkingFormat: "openai", supportsReasoningEffort: true },
455
+ input: ["text", "image"],
456
+ contextWindow: 272e3,
457
+ maxTokens: 128e3,
458
+ note: 'GPT-6 \u7CFB\uFF08luna/sol/terra\uFF0C2026-10 \u6821\u51C6\u65B0\u589E\uFF09\uFF1Api-ai 1.2.0 \u76EE\u5F55\u5168\u6863 None / Low / Medium / High / XHigh / Max\uFF0C\u5E26\u56FE\u8F93\u5165\uFF0C272,000 \u4E0A\u4E0B\u6587 / 128,000 \u8F93\u51FA\u3002gpt-6-astra \u89C1\u5355\u72EC\u6761\u76EE\uFF08\u88F8 "gpt-6" \u4E0E 6.1-sol \u7531 astra \u6761\u76EE\u627F\u63A5\uFF0Coff \u4EE5\u7701\u7565\u8868\u8FBE\uFF0C"none" \u672A\u8BC1\u5B9E\u53EF\u624B\u8C03\uFF09\u3002'
459
+ },
427
460
  {
428
461
  id: "openai-gpt-6-astra",
429
462
  // Longest-pattern-wins keeps this ahead of the 5.x entries; 'astra' is the
430
463
  // only stable token an aggregator is likely to expose.
431
- patterns: ["gpt-6-astra", "gpt-6"],
464
+ patterns: ["gpt-6-astra", "gpt-6", "gpt-6.1-sol"],
432
465
  // Official reasoning guide: none returns HTTP 400 on this model, and the
433
- // model page lists low/medium/high/xhigh/max. Official docs publish no
434
- // default effort for it, so none is recorded rather than guessed.
466
+ // model page lists low/medium/high/xhigh/max. pi-ai 1.2.0 catalog adds
467
+ // minimal as present-null (omit-expressed) and keeps astra at 272,000.
468
+ // The bare 'gpt-6' stem lives here (not on the luna/sol/terra sibling)
469
+ // so gateways serving unversioned "gpt-6" keep the omit-style off that
470
+ // astra/6.1-sol actually use; 'gpt-6.1' likewise -- only 6.1-sol exists
471
+ // in the 1.2.0 catalog, and its off is omit-expressed like astra's.
435
472
  efforts: { low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" },
436
473
  compat: { thinkingFormat: "openai", supportsReasoningEffort: true },
437
474
  input: ["text", "image"],
475
+ contextWindow: 272e3,
476
+ maxTokens: 128e3,
477
+ note: 'GPT-6 Astra \u6863\u4F4D\uFF1ALow / Medium / High / XHigh / Max\u2014\u2014**\u6CA1\u6709 None \u6863**\uFF08\u5B98\u65B9\u539F\u6587\uFF1A\u8BBE\u4E3A none \u8FD4\u56DE HTTP 400\uFF09\uFF0C\u56E0\u6B64\u672C\u6761\u76EE\u4E0D\u58F0\u660E Off\u3002\u5E26\u56FE\u8F93\u5165\uFF1B2026-10 \u6821\u51C6\uFF1A\u4E0A\u4E0B\u6587\u6309 pi-ai 1.2.0 \u76EE\u5F55\u8BB0 272,000\uFF08\u6B64\u524D\u8BEF\u8BB0 1,050,000\uFF09\u3002\u5DE5\u5177\u8C03\u7528\u9700\u8D70 Responses API\u3002gpt-6 luna/sol/terra \u89C1\u5355\u72EC\u6761\u76EE\uFF1B\u88F8 "gpt-6" \u4E0E 6.1-sol\uFF08off \u4EE5\u7701\u7565\u8868\u8FBE\uFF09\u7531\u672C\u6761\u76EE\u627F\u63A5\u3002'
478
+ },
479
+ {
480
+ id: "openai-gpt-daybreak",
481
+ // pi-ai 1.2.0 catalog: gpt-daybreak-blue-latest (1.05M) and -red-latest
482
+ // (400K) take the FULL modern ladder with an explicit 'none' off.
483
+ patterns: ["gpt-daybreak"],
484
+ efforts: { off: "none", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" },
485
+ compat: { thinkingFormat: "openai", supportsReasoningEffort: true },
486
+ input: ["text", "image"],
438
487
  contextWindow: 105e4,
439
488
  maxTokens: 128e3,
440
- note: "GPT-6 Astra \u6863\u4F4D\uFF1ALow / Medium / High / XHigh / Max\u2014\u2014**\u6CA1\u6709 None \u6863**\uFF08\u5B98\u65B9\u539F\u6587\uFF1A\u8BBE\u4E3A none \u8FD4\u56DE HTTP 400\uFF09\uFF0C\u56E0\u6B64\u672C\u6761\u76EE\u4E0D\u58F0\u660E Off\u3002\u5E26\u56FE\u8F93\u5165\uFF0C1,050,000 \u4E0A\u4E0B\u6587 / 128,000 \u8F93\u51FA\uFF1BAI \u5B98\u65B9\u9ED8\u8BA4\u6863\u4F4D\u672A\u516C\u5E03\uFF0C\u6545\u4E0D\u586B\u3002\u5DE5\u5177\u8C03\u7528\u9700\u8D70 Responses API\u3002"
489
+ note: "GPT-Daybreak\uFF08blue-latest 1.05M / red-latest 400K\uFF0C2026-10 \u65B0\u589E\uFF09\uFF1Api-ai 1.2.0 \u76EE\u5F55\u5168\u6863 None / Low / Medium / High / XHigh / Max\uFF0C\u5E26\u56FE\u8F93\u5165 / 128,000 \u8F93\u51FA\u3002"
490
+ },
491
+ {
492
+ id: "openai-gpt-realtime",
493
+ // pi-ai 1.2.0 catalog: gpt-realtime-2.1 -- minimal joins the ladder as a
494
+ // real wire value (off stays omit-style), 128K in / 32K out.
495
+ patterns: ["gpt-realtime"],
496
+ efforts: { minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh" },
497
+ compat: { thinkingFormat: "openai", supportsReasoningEffort: true },
498
+ input: ["text", "image"],
499
+ contextWindow: 128e3,
500
+ maxTokens: 32e3,
501
+ note: "GPT-Realtime 2.1\uFF082026-10 \u65B0\u589E\uFF09\uFF1Api-ai 1.2.0 \u76EE\u5F55\u6863\u4F4D Minimal / Low / Medium / High / XHigh\uFF08off \u4EE5\u7701\u7565\u8868\u8FBE\uFF09\uFF0C128,000 \u4E0A\u4E0B\u6587 / 32,000 \u8F93\u51FA\u3002"
441
502
  },
442
503
  {
443
504
  id: "openai-gpt-5-6-cyber",
@@ -515,20 +576,19 @@ var KNOWLEDGE_BASE = [
515
576
  note: "GPT-4/3.5 \u4EE3\u9645\uFF1A\u975E\u63A8\u7406\u6A21\u578B\uFF0C\u4E0D\u652F\u6301 effort \u53C2\u6570\uFF08\u52FF\u52FE\u601D\u8003\u6863\uFF09\u3002gpt-4-turbo/4.1 \u8D77\u652F\u6301\u56FE\u7247\uFF0C\u89C1\u5355\u72EC\u6761\u76EE\uFF1B\u65B0\u4EE3\u8BF7\u7528 GPT-5 \u7CFB\uFF08\u89C1 openai-chat/gpt-5.x \u6761\u76EE\uFF09\u3002"
516
577
  },
517
578
  {
518
- id: "anthropic-claude-5",
519
- // Claude 5th generation (fable/mythos/opus-5/sonnet-5, 2026): adaptive
520
- // thinking with an effort ladder that adds xhigh and max; the fable and
521
- // mythos entries think always-on, so no off level. Mythos Preview is
522
- // split into its own entry: it takes max but NOT xhigh (official effort
523
- // matrix), so the shared ladder's xhigh would be a 400.
524
- patterns: ["claude-fable-5", "claude-mythos-5", "claude-opus-5", "claude-sonnet-5"],
525
- // Ladder per the official effort matrix (platform.claude.com
526
- // docs/build-with-claude/effort). NOTE: Anthropic's own OpenAI-SDK
527
- // compatibility layer IGNORES reasoning_effort (thinking is driven by
528
- // its own param, on by default for Claude 5) -- the declaration bites
529
- // on third-party gateways that map it; on the native
530
- // anthropic-messages protocol, anthropicAdaptive pins the compat that
531
- // makes pi-ai dispatch these as output_config.effort.
579
+ id: "anthropic-claude-5-5",
580
+ // Claude 5.5 generation (2026-10): haiku/opus/sonnet-5-5 all take the
581
+ // FULL effort ladder per pi-ai 1.2.0's official catalog (off and
582
+ // minimal are present-null = omit-expressed, the five rungs dispatch as
583
+ // output_config.effort). Absorbs the turn-2 haiku-5.5 entry: pi-ai
584
+ // 1.2.0 names xhigh/max for the whole generation, the catalog size is
585
+ // 1M/128K (not the 200K/64K first read off ofox's aggregator listing),
586
+ // patterns cover the whole generation plus the bare aggregator
587
+ // spelling. ('claude-haiku-5-5' is NOT listed separately: loose
588
+ // normalization folds '-' and '.' identically, so the dotted spelling
589
+ // already keys the dash spelling -- listing both would trip the
590
+ // unique-normalized-pattern hygiene test.)
591
+ patterns: ["claude-haiku-5.5", "claude-opus-5-5", "claude-sonnet-5-5", "haiku-5.5", "claude-5-5"],
532
592
  efforts: { low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" },
533
593
  defaultEffort: "high",
534
594
  // No thinkingFormat: pi-ai has no 'anthropic' member, and the
@@ -539,31 +599,58 @@ var KNOWLEDGE_BASE = [
539
599
  input: ["text", "image"],
540
600
  contextWindow: 1e6,
541
601
  maxTokens: 128e3,
542
- note: "Claude 5 \u4EE3\uFF08Fable 5 / Mythos 5 / Opus 5 / Sonnet 5\uFF09\u6863\u4F4D\uFF1ALow / Medium / High(\u9ED8\u8BA4) / XHigh / Max\uFF1BFable 5.1 \u4E0E Mythos 5.1 \u89C1\u5355\u72EC\u6761\u76EE\uFF0CMythos Preview \u4EC5\u81F3 Max\u30021M \u4E0A\u4E0B\u6587 / 128K \u8F93\u51FA\uFF08Batch 300K\uFF09\u3002\u5B98\u65B9\u652F\u6301 PDF \u8F93\u5165\u3002\u6CE8\u610F\uFF1AAnthropic \u5B98\u65B9 OpenAI \u517C\u5BB9\u5C42\u4F1A\u5FFD\u7565 effort \u53C2\u6570\uFF0C\u58F0\u660E\u5728\u7B2C\u4E09\u65B9\u7F51\u5173\u6620\u5C04\u65F6\u751F\u6548\u3002"
602
+ note: "Claude 5.5 \u4EE3\uFF08Haiku 5.5 / Opus 5.5 / Sonnet 5.5\uFF09\uFF1Api-ai 1.2.0 \u5B98\u65B9\u76EE\u5F55\u5168\u6863 Low / Medium / High(\u9ED8\u8BA4) / XHigh / Max\uFF0C\u81EA\u9002\u5E94\u601D\u8003\uFF0C1M \u4E0A\u4E0B\u6587 / 128K \u8F93\u51FA\u3002off/minimal \u4EE5\u7701\u7565\u8868\u8FBE\uFF08\u76EE\u5F55\u5C06\u4E24\u952E\u8BB0\u4E3A null\uFF0C\u975E\u663E\u5F0F\u5173\u95ED\uFF09\u3002"
603
+ },
604
+ {
605
+ id: "anthropic-claude-5",
606
+ // Claude 5th generation (fable/mythos-5/opus-5/sonnet-5, 2026): adaptive
607
+ // thinking. 2026-10 calibration against pi-ai 1.2.0's official catalog:
608
+ // low/medium/high were REMOVED from these models' effort maps (they
609
+ // remain on the 5.5 generation) -- fable-5 and opus-5 keep only
610
+ // xhigh/max (with an omit-expressed off), sonnet-5 keeps xhigh/max with
611
+ // no off at all. Mythos has no pi-ai entry; it stays matched here
612
+ // conservatively on the same-generation shape. Mythos Preview is split
613
+ // into its own entry below.
614
+ patterns: ["claude-fable-5", "claude-mythos-5", "claude-opus-5", "claude-sonnet-5"],
615
+ // Ladder per pi-ai 1.2.0 (claude-fable-5 / claude-opus-5 /
616
+ // claude-sonnet-5). NOTE: Anthropic's own OpenAI-SDK compatibility
617
+ // layer IGNORES reasoning_effort (thinking is driven by its own param,
618
+ // on by default for Claude 5) -- the declaration bites on third-party
619
+ // gateways that map it; on the native anthropic-messages protocol,
620
+ // anthropicAdaptive pins the compat that makes pi-ai dispatch these as
621
+ // output_config.effort.
622
+ efforts: { xhigh: "xhigh", max: "max" },
623
+ // pi-ai 1.2.0 publishes no default rung for this generation; the old
624
+ // 'high' default was removed with the low/medium/high rungs themselves.
625
+ compat: { supportsReasoningEffort: true },
626
+ anthropicAdaptive: true,
627
+ input: ["text", "image"],
628
+ contextWindow: 1e6,
629
+ maxTokens: 128e3,
630
+ note: "Claude 5 \u4EE3\uFF08Fable 5 / Mythos 5 / Opus 5 / Sonnet 5\uFF09\uFF1A2026-10 \u6821\u51C6\u2014\u2014pi-ai 1.2.0 \u5B98\u65B9\u76EE\u5F55\u5DF2\u6536\u7D27\u4E3A XHigh / Max\uFF08low/medium/high \u6863\u5DF2\u4ECE\u8BE5\u4EE3 effort \u76EE\u5F55\u79FB\u9664\uFF1BFable 5 \u4E0E Opus 5 \u53E6\u63A5\u53D7\u4EE5\u7701\u7565\u8868\u8FBE\u7684 off\uFF0CSonnet 5 \u65E0 off\uFF09\u30021M \u4E0A\u4E0B\u6587 / 128K \u8F93\u51FA\uFF08Batch 300K\uFF09\u3002\u5B98\u65B9\u652F\u6301 PDF \u8F93\u5165\u3002\u6CE8\u610F\uFF1AAnthropic \u5B98\u65B9 OpenAI \u517C\u5BB9\u5C42\u4F1A\u5FFD\u7565 effort \u53C2\u6570\uFF0C\u58F0\u660E\u5728\u7B2C\u4E09\u65B9\u7F51\u5173\u6620\u5C04\u65F6\u751F\u6548\u3002"
543
631
  },
544
632
  {
545
633
  id: "anthropic-claude-5-1",
546
634
  // Ahead of the claude-5 entry, whose 'claude-fable-5' / 'claude-mythos-5'
547
635
  // patterns are prefixes of these ids and would win the equal-length tie.
548
- // Same ladder and default as the 5.0 generation per the official effort
549
- // page; the meaningful difference is behavioural (these two are the
550
- // models allowed to change effort mid-conversation), which this plugin
551
- // does not declare per model.
636
+ // 2026-10 calibration: pi-ai 1.2.0 keeps fable-5-1 on the same tight
637
+ // xhigh/max map as fable-5 (plus mid-conversation effort support,
638
+ // which this plugin does not declare per model).
552
639
  patterns: ["claude-fable-5-1", "claude-mythos-5-1"],
553
- efforts: { low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" },
554
- defaultEffort: "high",
640
+ efforts: { xhigh: "xhigh", max: "max" },
555
641
  compat: { supportsReasoningEffort: true },
556
642
  anthropicAdaptive: true,
557
643
  input: ["text", "image"],
558
644
  contextWindow: 1e6,
559
645
  maxTokens: 128e3,
560
- note: "Claude Fable 5.1 / Mythos 5.1\uFF1A\u5B98\u65B9\u6863\u4F4D Low / Medium / High(\u9ED8\u8BA4) / XHigh / Max\uFF0C\u81EA\u9002\u5E94\u601D\u8003\u5E38\u5F00\uFF08\u4E0D\u63A5\u53D7 enabled/disabled\uFF09\u30021M \u4E0A\u4E0B\u6587 / 128K \u8F93\u51FA\uFF1B\u8FD9\u4E24\u578B\u4E5F\u662F\u5B98\u65B9\u552F\u4E00\u5141\u8BB8\u4F1A\u8BDD\u4E2D\u9014\u6539\u6863\u7684\uFF08\u9700 beta header\uFF0C\u672C\u63D2\u4EF6\u4E0D\u6D89\u53CA\uFF09\u3002"
646
+ note: "Claude Fable 5.1 / Mythos 5.1\uFF1A2026-10 \u6821\u51C6\u2014\u2014pi-ai 1.2.0 \u76EE\u5F55\u6863\u4F4D XHigh / Max\uFF08off \u4EE5\u7701\u7565\u8868\u8FBE\uFF09\uFF0C\u81EA\u9002\u5E94\u601D\u8003\u5E38\u5F00\uFF08\u4E0D\u63A5\u53D7 enabled/disabled\uFF09\u30021M \u4E0A\u4E0B\u6587 / 128K \u8F93\u51FA\uFF1BFable 5.1 \u652F\u6301\u4F1A\u8BDD\u4E2D\u9014\u6539\u6863\uFF08\u9700 beta header\uFF0C\u672C\u63D2\u4EF6\u4E0D\u6D89\u53CA\uFF09\u3002"
561
647
  },
562
648
  {
563
649
  id: "anthropic-claude-mythos-preview",
564
650
  // Official effort matrix: max is available, xhigh is NOT (the matrix's
565
651
  // xhigh list covers Fable 5 / Mythos 5 / Opus 5 / Opus 4.8 / Opus 4.7 /
566
- // Sonnet 5 only).
652
+ // Sonnet 5 only). pi-ai 1.2.0 has no mythos entry at all; this entry
653
+ // keeps its doc-derived ladder unchanged.
567
654
  patterns: ["claude-mythos-preview"],
568
655
  efforts: { low: "low", medium: "medium", high: "high", max: "max" },
569
656
  // Anthropic's effort page: the API default is HIGH across the whole
@@ -574,35 +661,35 @@ var KNOWLEDGE_BASE = [
574
661
  input: ["text", "image"],
575
662
  contextWindow: 1e6,
576
663
  maxTokens: 128e3,
577
- note: "Claude Mythos Preview\uFF1A\u5B98\u65B9\u6863\u4F4D Low / Medium / High / Max\uFF08\u65E0 XHigh\uFF09\uFF0C1M \u4E0A\u4E0B\u6587\u3002"
664
+ note: "Claude Mythos Preview\uFF1A\u5B98\u65B9\u6863\u4F4D Low / Medium / High / Max\uFF08\u65E0 XHigh\uFF09\uFF0C1M \u4E0A\u4E0B\u6587\u3002pi-ai 1.2.0 \u76EE\u5F55\u65E0 mythos \u6761\u76EE\uFF0C\u672C\u6863\u4F4D\u6CBF\u7528\u5B98\u65B9 effort \u77E9\u9635\u3002"
578
665
  },
579
666
  {
580
667
  id: "anthropic-claude-opus-4-high",
581
668
  patterns: ["claude-opus-4-8", "claude-opus-4-7"],
582
- // Official effort page: Opus 4.7/4.8 take the full ladder including
583
- // xhigh and max (xhigh is the recommended coding start on 4.7).
584
- efforts: { low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" },
585
- defaultEffort: "high",
669
+ // 2026-10 calibration: pi-ai 1.2.0's catalog lists ONLY xhigh/max for
670
+ // opus-4-7/4-8 -- the low/medium/high rungs are gone from the official
671
+ // effort maps (xhigh remains the recommended coding start on 4.7).
672
+ efforts: { xhigh: "xhigh", max: "max" },
586
673
  compat: { supportsReasoningEffort: true },
587
674
  anthropicAdaptive: true,
588
675
  input: ["text", "image"],
589
676
  contextWindow: 1e6,
590
677
  maxTokens: 128e3,
591
- note: "Claude Opus 4.7/4.8 \u6863\u4F4D\uFF1ALow / Medium / High(\u9ED8\u8BA4) / XHigh / Max\uFF1Bxhigh \u4E3A\u5B98\u65B9\u63A8\u8350\u7684\u7F16\u7801\u8D77\u6B65\u6863\u30021M \u4E0A\u4E0B\u6587\u3002"
678
+ note: "Claude Opus 4.7/4.8\uFF1A2026-10 \u6821\u51C6\u2014\u2014pi-ai 1.2.0 \u5B98\u65B9\u76EE\u5F55\u6863\u4F4D\u4EC5 XHigh / Max\uFF08low/medium/high \u5DF2\u4ECE\u8BE5\u4EE3\u76EE\u5F55\u79FB\u9664\uFF1Bxhigh \u4E3A\u5B98\u65B9\u63A8\u8350\u7684\u7F16\u7801\u8D77\u6B65\u6863\uFF09\u30021M \u4E0A\u4E0B\u6587\u3002"
592
679
  },
593
680
  {
594
681
  id: "anthropic-claude-4-6",
595
682
  patterns: ["claude-opus-4-6", "claude-sonnet-4-6"],
596
- // Official effort page: the 4.6 generation supports max but NOT xhigh
597
- // ("some models that support max don't support xhigh").
598
- efforts: { low: "low", medium: "medium", high: "high", max: "max" },
599
- defaultEffort: "high",
683
+ // 2026-10 calibration: pi-ai 1.2.0 narrows the 4.6 generation to a
684
+ // single rung -- max only (the official effort page's "some models that
685
+ // support max don't support xhigh" reading tightens further).
686
+ efforts: { max: "max" },
600
687
  compat: { supportsReasoningEffort: true },
601
688
  anthropicAdaptive: true,
602
689
  input: ["text", "image"],
603
690
  contextWindow: 1e6,
604
691
  maxTokens: 128e3,
605
- note: "Claude 4.6 \u4EE3\u6863\u4F4D\uFF1ALow / Medium / High / Max\uFF08\u65E0 XHigh\u2014\u2014\u5B98\u65B9\u660E\u8A00\u300C\u652F\u6301 max \u7684\u90E8\u5206\u578B\u53F7\u4E0D\u652F\u6301 xhigh\u300D\uFF09\u30021M \u4E0A\u4E0B\u6587\u3002"
692
+ note: "Claude 4.6 \u4EE3\uFF08Opus 4.6 / Sonnet 4.6\uFF09\uFF1A2026-10 \u6821\u51C6\u2014\u2014pi-ai 1.2.0 \u5B98\u65B9\u76EE\u5F55\u4EC5\u5269 Max \u4E00\u6863\uFF08low/medium/high/xhigh \u5747\u5DF2\u4ECE\u76EE\u5F55\u79FB\u9664\uFF09\u30021M \u4E0A\u4E0B\u6587\u3002"
606
693
  },
607
694
  {
608
695
  id: "anthropic-claude-opus-4-5",
@@ -623,18 +710,19 @@ var KNOWLEDGE_BASE = [
623
710
  id: "anthropic-claude",
624
711
  // Everything else in the Claude line: 3.x and the 4.5-generation
625
712
  // Sonnet/Haiku. Anthropic's official effort support list names exactly
626
- // fable-5 / mythos-5 / mythos-preview / opus-5 / opus-4-8 / opus-4-7 /
627
- // opus-4-6 / sonnet-5 / sonnet-4-6 / opus-4-5-20251101 -- none of the
628
- // models matching this entry take the effort parameter (their thinking
629
- // rides thinking.type), so a ladder here would be refused. `false` is
630
- // the honest "no effort control" declaration, matching the openai-chat
631
- // convention.
713
+ // the 5.5/5/5.1 generations plus opus-4-5/4-6/4-7/4-8/sonnet-4-6 -- none
714
+ // of the models matching this entry take the effort parameter (their
715
+ // thinking rides thinking.type), so a ladder here would be refused.
716
+ // `false` is the honest "no effort control" declaration, matching the
717
+ // openai-chat convention. (The 5.5 generation -- haiku/opus/sonnet-5-5,
718
+ // including aggregator spellings like 'haiku-5.5' -- keys its own
719
+ // strictly longer entry above.)
632
720
  patterns: ["claude"],
633
721
  efforts: false,
634
722
  input: ["text", "image"],
635
723
  contextWindow: 2e5,
636
724
  maxTokens: 64e3,
637
- note: "Claude 3.x \u4E0E Sonnet 4.5 / Haiku 4.5\uFF1A\u5B98\u65B9 effort \u53C2\u6570\u4E0D\u652F\u6301\uFF08\u4EC5 Fable/Mythos 5\u3001Opus 5/4.6-4.8\u3001Sonnet 5/4.6\u3001Opus 4.5 \u652F\u6301\uFF09\uFF0C\u601D\u8003\u7531 thinking.type \u63A7\u5236\u2014\u2014\u52FF\u52FE\u601D\u8003\u6863\u3002\u53C2\u8003\u5BB9\u91CF 200K / 64K\uFF08Haiku 3.5 \u4E3A\u7EAF\u6587\u672C\uFF0C\u6309\u9700\u53D6\u6D88\u56FE\u7247\uFF09\u3002"
725
+ note: "Claude 3.x \u4E0E Sonnet 4.5 / Haiku 4.5\uFF1A\u5B98\u65B9 effort \u53C2\u6570\u4E0D\u652F\u6301\uFF08\u4EC5 5.5/5/5.1 \u4EE3\u3001Opus 4.5/4.6/4.7/4.8\u3001Sonnet 4.6 \u652F\u6301\uFF09\uFF0C\u601D\u8003\u7531 thinking.type \u63A7\u5236\u2014\u2014\u52FF\u52FE\u601D\u8003\u6863\u3002\u53C2\u8003\u5BB9\u91CF 200K / 64K\uFF08Haiku 3.5 \u4E3A\u7EAF\u6587\u672C\uFF0C\u6309\u9700\u53D6\u6D88\u56FE\u7247\uFF09\u3002Haiku 5.5 \u53CA\u6574\u4E2A 5.5 \u4EE3\u89C1\u4E0A\u65B9 anthropic-claude-5-5 \u6761\u76EE\u3002"
638
726
  },
639
727
  {
640
728
  id: "google-gemini",
@@ -651,27 +739,39 @@ var KNOWLEDGE_BASE = [
651
739
  input: ["text", "image"],
652
740
  contextWindow: 1048576,
653
741
  maxTokens: 65536,
654
- note: "Gemini \u901A\u7528\u5B89\u5168\u6863\uFF1ALow / Medium / High\uFF08\u5B98\u65B9 OpenAI \u517C\u5BB9\u6620\u5C04\u8868\u53E6\u6536 minimal\uFF1A2.5 \u7CFB\u6620\u5C04\u4E3A 1,024 \u9884\u7B97\u30013.1 Flash-Lite/3 Flash \u539F\u751F minimal\u30013.1 Pro \u843D low\uFF09\u3002none \u4EC5\u80FD\u5173 2.5 \u975E Pro\uFF1B2.5 Pro \u4E0E 3 \u4EE3\u4E0D\u53EF\u5173\uFF1B\u5404\u578B\u9ED8\u8BA4\u4E0D\u4E00\uFF08flash-lite \u9ED8\u8BA4\u5173\uFF09\u3002\u5B98\u65B9\u53E6\u6536\u97F3\u9891/\u89C6\u9891/PDF\u3002"
742
+ note: "Gemini \u901A\u7528\u5B89\u5168\u6863\uFF1ALow / Medium / High\uFF08\u5B98\u65B9 OpenAI \u517C\u5BB9\u6620\u5C04\u8868\u53E6\u6536 minimal\uFF1A2.5 \u7CFB\u6620\u5C04\u4E3A 1,024 \u9884\u7B97\u30013.1 Flash-Lite/3 Flash \u539F\u751F minimal\u30013.1 Pro \u843D low\uFF09\u3002none \u4EC5\u80FD\u5173 2.5 \u975E Pro\uFF1B2.5 Pro \u4E0E 3 \u4EE3\u4E0D\u53EF\u5173\uFF1B\u5404\u578B\u9ED8\u8BA4\u4E0D\u4E00\uFF08flash-lite \u9ED8\u8BA4\u5173\uFF09\u3002\u5B98\u65B9\u53E6\u6536\u97F3\u9891/\u89C6\u9891/PDF\u3002Gemma-4 \u89C1\u4E0B\u6761\u3002"
743
+ },
744
+ {
745
+ id: "google-gemma-4",
746
+ // 2026-10 calibration NEW entry: pi-ai 1.2.0 keys gemma-4-26b-a4b-it /
747
+ // gemma-4-31b-it with a THREE-slot map {off:null, minimal:'MINIMAL',
748
+ // high:'HIGH'} -- the Google native spelling for this open model goes
749
+ // upper-case enum style, and the medium/low rungs are ABSENT (they are
750
+ // not accepted). Vision per catalog; 262,144 in / 32,768 out.
751
+ patterns: ["gemma-4"],
752
+ efforts: { off: null, minimal: "MINIMAL", high: "HIGH" },
753
+ compat: { thinkingFormat: "openai", supportsReasoningEffort: true },
754
+ input: ["text", "image"],
755
+ contextWindow: 262144,
756
+ maxTokens: 32768,
757
+ note: "Gemma 4\uFF0826b/31b-it\uFF09\uFF1A\u4E09\u6863 Minimal / High\uFF08\u6863\u4F4D\u7EBF\u4E3A\u5B98\u65B9\u5927\u5199\u679A\u4E3E\u62FC\u5199\uFF09\uFF0Coff \u4EE5\u7701\u7565\u8868\u8FBE\uFF1BLow/Medium \u4E0D\u88AB\u63A5\u53D7\u3002\u5E26\u56FE\u8F93\u5165\uFF0C262,144 / 32,768\uFF082026-10 \u6821\u51C6\u65B0\u589E\uFF09\u3002"
655
758
  },
656
759
  {
657
760
  id: "xai-grok-4-7",
658
761
  // grok-4.7 shipped after the 2026-08 pass that read it as 404 upstream;
659
- // that reading is retired here. xAI's own docs were unreachable for this
660
- // pass, so every field below is a public-catalog reading rather than a
661
- // first-party one: OpenRouter publishes the slug x-ai/grok-4.7 with
662
- // reasoning_effort in its supported_parameters, and models.dev records
663
- // the ladder as low/medium/high/xhigh -- the same four steps 4.6 takes,
664
- // which is why the same declaration shape is reused. The default level
665
- // and whether thinking can be closed are NOT established, so neither an
666
- // `off` nor a defaultEffort is declared. Capacity follows the sources
667
- // that agree (500K context); max output disagrees across catalogs
668
- // (450K vs 500K), so it stays out.
762
+ // that reading is retired here. 2026-10 calibration: pi-ai 1.2.0 is
763
+ // now a first-party catalog entry -- the ladder
764
+ // off[omit]/low/medium/high/xhigh is confirmed (max stays ABSENT), and
765
+ // the earlier "xhigh unverified" hedge is retired. Capacity: 500K in /
766
+ // 500K out per the catalog, so the "max output disagrees across
767
+ // catalogs" note is resolved as 500,000.
669
768
  patterns: ["grok-4.7"],
670
769
  efforts: { low: "low", medium: "medium", high: "high", xhigh: "xhigh" },
671
770
  compat: { thinkingFormat: "openai", supportsReasoningEffort: true },
672
771
  input: ["text", "image"],
673
772
  contextWindow: 5e5,
674
- note: 'Grok 4.7\uFF08\u4E0A\u6E38\u5FEB\u7167 grok-4.7-20260916\uFF09\uFF1A\u6863\u4F4D Low / Medium / High / XHigh\u2014\u2014**\u53D6\u81EA\u516C\u5F00\u76EE\u5F55**\uFF08OpenRouter \u7684 supported_parameters\u3001models.dev \u5BF9 docs.x.ai \u7684\u8F6C\u8FF0\uFF09\uFF0C\u672C\u6B21 xAI \u5B98\u65B9\u6587\u6863\u7AD9\u4E0D\u53EF\u8FBE\u3001\u672A\u80FD\u4E00\u624B\u8BC1\u5B9E\uFF1B\u9ED8\u8BA4\u6863\u4F4D\u4E0E"\u80FD\u5426\u5173\u95ED\u601D\u8003"\u540C\u6837\u672A\u8BC1\u5B9E\uFF0C\u6545\u4E0D\u58F0\u660E Off\uFF0C\u4E5F\u4E0D\u5199\u9ED8\u8BA4\u6863\u3002\u5E26\u56FE\u8F93\u5165\uFF08\u76EE\u5F55\u8BB0 text+image+file\uFF0CPDF \u5B58\u7591\uFF09\uFF0C500K \u4E0A\u4E0B\u6587\uFF1B\u6700\u5927\u8F93\u51FA\u5404\u76EE\u5F55\u7ED9\u51FA 450K \u4E0E 500K \u4E24\u79CD\u503C\uFF0C\u6309"\u5206\u6B67\u5373\u4E0D\u5199"\u5904\u7406\u30022026-08 \u90A3\u6B21"grok-4.7 \u4E0D\u5B58\u5728\uFF08\u5B98\u65B9 404\uFF09"\u7684\u7ED3\u8BBA\u5DF2\u968F\u53D1\u5E03\u4F5C\u5E9F\u3002'
773
+ maxTokens: 5e5,
774
+ note: 'Grok 4.7\uFF1A\u6863\u4F4D Low / Medium / High / XHigh\uFF0C\u601D\u8003\u4E0D\u53EF\u5173\u95ED\uFF08off \u4EC5\u4EE5\u7701\u7565\u8868\u8FBE\uFF09\uFF1B\u5E26\u56FE\u8F93\u5165\uFF0C500K \u4E0A\u4E0B\u6587 / 500K \u8F93\u51FA\uFF082026-10 \u6821\u51C6\uFF1Api-ai 1.2.0 \u5B98\u65B9\u76EE\u5F55\u786E\u8BA4\u6863\u4F4D\u4E0E\u5BB9\u91CF\uFF0C"\u4E0A\u6E38 404"\u4E0E"\u6863\u4F4D\u672A\u8BC1\u5B9E"\u4E24\u6761\u65E7\u8BB0\u5F55\u4F5C\u5E9F\uFF09\u3002grok-4.5 \u4F20 xhigh \u88AB\u9759\u9ED8\u6309 High \u5904\u7406\u7684\u8BF4\u660E\u89C1\u5176\u6761\u76EE\u3002'
675
775
  },
676
776
  {
677
777
  id: "xai-grok-high",
@@ -706,17 +806,18 @@ var KNOWLEDGE_BASE = [
706
806
  // levels (none / low / medium / high) with a 1M context window; the
707
807
  // deprecated grok-4-fast/grok-4-1-fast/grok-4-0709 slugs redirect to
708
808
  // grok-4.3 at low/none. The old "no none for 4.3" reading of the docs
709
- // was wrong and is fixed here.
809
+ // was wrong and is fixed here. 2026-10 calibration: pi-ai 1.2.0's
810
+ // catalog has NO xhigh for 4.3 (it joins at 4.6/4.7) and puts the
811
+ // output cap at 30,000 -- the xhigh rung from the earlier pass is
812
+ // retired.
710
813
  patterns: ["grok-4.3"],
711
- // Official models page (docs.x.ai model JSON): supportedEfforts now
712
- // spans none/low/medium/high/XHIGH with defaultEffort "low" -- xhigh
713
- // joined the ladder after the 2026-08 pass, and low is the default.
714
- efforts: { off: "none", low: "low", medium: "medium", high: "high", xhigh: "xhigh" },
814
+ efforts: { off: "none", low: "low", medium: "medium", high: "high" },
715
815
  defaultEffort: "low",
716
816
  compat: { thinkingFormat: "openai", supportsReasoningEffort: true },
717
817
  input: ["text", "image"],
718
818
  contextWindow: 1e6,
719
- note: "Grok 4.3\uFF1A\u5B98\u65B9\u56DB\u7EA7 reasoning effort\uFF08None / Low / Medium / High\uFF09\uFF0C1M \u4E0A\u4E0B\u6587\u3001\u5E26\u56FE\u8F93\u5165\uFF1Bgrok-4-fast \u7B49\u65E7 slug 2026-05-15 \u8D77\u81EA\u52A8\u91CD\u5B9A\u5411\u5230\u672C\u578B\u53F7\u3002"
819
+ maxTokens: 3e4,
820
+ note: "Grok 4.3\uFF1A\u5B98\u65B9\u56DB\u7EA7 reasoning effort\uFF08None / Low(\u9ED8\u8BA4) / Medium / High\uFF09\uFF0C1M \u4E0A\u4E0B\u6587 / 30,000 \u8F93\u51FA\uFF082026-10 \u6821\u51C6\uFF1AXHigh \u6863\u6309 pi-ai 1.2.0 \u76EE\u5F55\u79FB\u9664\u2014\u2014\u5B83\u81EA 4.6 \u8D77\u624D\u52A0\u5165\uFF1B\u5E26\u56FE\u8F93\u5165\uFF09\u3002grok-4-fast \u7B49\u65E7 slug 2026-05-15 \u8D77\u81EA\u52A8\u91CD\u5B9A\u5411\u5230\u672C\u578B\u53F7\u3002"
720
821
  },
721
822
  {
722
823
  id: "xai-grok",
@@ -734,40 +835,74 @@ var KNOWLEDGE_BASE = [
734
835
  },
735
836
  {
736
837
  id: "mistral-magistral",
737
- // The native magistral line is a run-together thinking family with no
738
- // reasoning_effort control of its own (its thinking is driven by
739
- // prompt_mode / always-on), and Mistral marked the whole line
740
- // deprecated on 2026-07-28 (phased out through mid-2026; reasoning now
741
- // rides the generalist models). `false` is the honest "no effort
742
- // control" declaration; gateways that happen to map an effort
743
- // parameter onto magistral ids can be tuned by hand.
838
+ // 2026-10 calibration REVERSAL: pi-ai 1.2.0's official catalog keys
839
+ // magistral-medium-latest on the new mistral-conversations protocol
840
+ // WITH a two-state effort map (none/high, off spelled 'none') -- the
841
+ // earlier "no effort parameter / deprecated" reading is retired. The
842
+ // ladder is the same two-state shape the modern mistral-medium/small
843
+ // line takes; vision per the catalog; capacity 262,144 in / 16,384 out.
744
844
  patterns: ["magistral"],
745
- efforts: false,
746
- input: ["text"],
747
- contextWindow: 32768,
748
- maxTokens: 32768,
749
- note: "Magistral \u539F\u751F\u601D\u8003\u7EBF\uFF08\u65E0 effort \u53C2\u6570\uFF0C\u4E3A prompt_mode \u8BED\u4E49\uFF09\uFF0C\u5B98\u65B9\u5DF2\u4E8E 2026-07-28 \u58F0\u660E\u5F03\u7528\u3001\u9010\u6B65\u64A4\u51FA\uFF1B\u73B0\u5F79\u63A8\u7406\u8D70 mistral-small-2603 / mistral-medium-3-5 \u7684 reasoning_effort\uFF08\u89C1\u4E0B\u6761\uFF09\u3002"
845
+ efforts: { off: "none", high: "high" },
846
+ // The catalog's no-parameter behaviour maps to the 'none' wire value.
847
+ defaultEffort: "off",
848
+ compat: { thinkingFormat: "openai", supportsReasoningEffort: true },
849
+ input: ["text", "image"],
850
+ contextWindow: 262144,
851
+ maxTokens: 16384,
852
+ note: 'Magistral\uFF08magistral-medium-latest\uFF09\uFF1A2026-10 \u6821\u51C6\u2014\u2014pi-ai 1.2.0 \u76EE\u5F55\u663E\u793A\u73B0\u5F79 magistral \u8D70 mistral-conversations \u534F\u8BAE\u5E76\u63A5\u53D7 effort\uFF08None / High \u4E24\u6863\uFF0C\u9ED8\u8BA4 None\uFF09\uFF0C\u5E26\u56FE\u8F93\u5165\uFF0C262,144 / 16,384\u3002\u65E9\u524D"\u8BE5\u7EBF\u65E0 effort \u53C2\u6570\u4E14\u5DF2\u5F03\u7528"\u7684\u8BB0\u5F55\u4F5C\u5E9F\u3002'
750
853
  },
751
854
  {
752
855
  id: "mistral-medium-3",
753
856
  // Official reasoning page + mistral-common request.py (the first-party
754
857
  // protocol enum) name the reasoning_effort models: values are exactly
755
- // none/high. The API ids today are mistral-medium-3-5 (Medium 3.5's
756
- // model page names the dotted spelling too) and mistral-small-2603
757
- // (Mistral Small 4); mistral-small-latest is its alias. The dated
758
- // "small-2506" builds are retiring and are NOT matched; the bare
759
- // 'mistral-medium-3' stem was dropped so the 3.1 generation (no
760
- // reasoning_effort) does not get the ladder.
858
+ // none/high. 2026-10 calibration adds pi-ai 1.2.0's catalog ids: the
859
+ // reasoning line now spans mistral-large-4 (1M/262K, vision),
860
+ // mistral-medium-2604 / mistral-medium-latest (262K/262K, vision) plus
861
+ // the earlier small-2603/small-latest pair -- all on the same
862
+ // two-state none/high map on the mistral-conversations protocol.
761
863
  // Normalization folds '.' and '-' to the same space, so the one dotted
762
864
  // spelling also keys the API id (mistral-medium-3-5).
763
- patterns: ["mistral-medium-3.5", "mistral-small-latest", "mistral-small-2603"],
865
+ patterns: [
866
+ "mistral-medium-3.5",
867
+ "mistral-large-4",
868
+ "mistral-medium-2604",
869
+ "mistral-medium-latest",
870
+ "mistral-small-latest",
871
+ "mistral-small-2603"
872
+ ],
764
873
  efforts: { off: "none", high: "high" },
765
874
  // mistral-common's ModelSettings defaults reasoning_effort to None --
766
875
  // the endpoint's no-parameter behaviour IS the none/off level.
767
876
  defaultEffort: "off",
768
877
  compat: { thinkingFormat: "openai", supportsReasoningEffort: true },
769
878
  input: ["text", "image"],
770
- note: "Mistral \u73B0\u5F79\u63A8\u7406\u6863\uFF1ANone / High\u2014\u2014\u5B98\u65B9 reasoning_effort \u679A\u4E3E\uFF08mistral-common \u534F\u8BAE\u5E93\uFF09\u5373 none/high\uFF1Bmistral-small-2603\uFF08Small 4\uFF09\u4E0E mistral-medium-3-5 \u7ECF\u5B83\u63A7\u5236\uFF0CMedium 3.5 \u5E26\u89C6\u89C9\u3002\u5BB9\u91CF\u672A\u5728\u5B98\u65B9\u76EE\u5F55\u9875\u5355\u5217\uFF0C\u4E0D\u63D0\u4F9B\u3002"
879
+ note: "Mistral \u73B0\u5F79\u63A8\u7406\u6863\uFF082026-10 \u6269\u5145\uFF09\uFF1ANone / High \u4E24\u6863\uFF0C\u5B98\u65B9 reasoning_effort \u679A\u4E3E\u5373 none/high\uFF1B\u73B0\u5F79\u578B\u53F7 mistral-large-4\uFF081M\uFF09\u3001mistral-medium-3.5\uFF082604/latest\uFF09\u3001mistral-small-2603\uFF08Small 4\uFF09\u7ECF\u5B83\u63A7\u5236\uFF0C\u5747\u5E26\u89C6\u89C9\u3002\u5BB9\u91CF\uFF1Alarge-4 262,144 \u8F93\u51FA\u3001medium 262,144 \u8F93\u51FA\u3001small 256,000 \u8F93\u51FA\uFF08\u4E0A\u4E0B\u6587\u5747 262,144\uFF09\u3002\u975E\u63A8\u7406\u65E7\u6B3E\u89C1\u4E0B\u6761\u3002"
880
+ },
881
+ {
882
+ id: "mistral-legacy",
883
+ // 2026-10 calibration: pi-ai 1.2.0 keys the NON-reasoning mistral line
884
+ // (r=false, no tlm) separately from the two-state reasoning line above.
885
+ // These slugs take no effort parameter at all; matching them here keeps
886
+ // auto-adapt from handing them the reasoning ladder via the generic
887
+ // 'mistral' stem. devstral/ministral/codestral/pixtral/voxtral carry
888
+ // the stem too and are covered by the same false declaration.
889
+ patterns: [
890
+ "mistral-large-2411",
891
+ "mistral-large-latest",
892
+ "mistral-large-2512",
893
+ "mistral-medium-2505",
894
+ "mistral-medium-2508",
895
+ "mistral-small-2506",
896
+ "mistral-nemo",
897
+ "devstral",
898
+ "ministral",
899
+ "codestral",
900
+ "pixtral",
901
+ "voxtral"
902
+ ],
903
+ efforts: false,
904
+ input: ["text", "image"],
905
+ note: "Mistral \u975E\u63A8\u7406\u7EBF\uFF082026-10 \u65B0\u589E\u6761\u76EE\uFF09\uFF1Alarge-2411/2512/latest\u3001medium-2505/2508\u3001small-2506\u3001nemo \u53CA devstral/ministral/codestral/pixtral/voxtral \u7B49\u4E13\u7528\u7EBF\u5747\u4E0D\u63A5\u53D7 effort \u53C2\u6570\uFF08\u52FF\u52FE\u601D\u8003\u6863\uFF09\u3002\u591A\u6570\u73B0\u5F79\u6B3E\u5E26\u89C6\u89C9\uFF08large-2411 \u4E3A\u7EAF\u6587\u672C\uFF09\u3002"
771
906
  },
772
907
  {
773
908
  id: "qwen-vision",
@@ -884,7 +1019,12 @@ var KNOWLEDGE_BASE = [
884
1019
  // variant the 5.3 ladder (low/high/max). Native multimodal (320B), which
885
1020
  // the text-only glm-5.3 entry must NOT claim — hence this separate entry;
886
1021
  // the longer pattern wins over plain 'glm-5.3'.
887
- patterns: ["glm-5.3-flash"],
1022
+ // 'glm-5.3-flashx' is the same model under a relay spelling (ofox lists
1023
+ // 'z-ai/glm-5.3-flashx' named 'GLM-5.3-FlashX'). It must be listed
1024
+ // explicitly: boundary matching rejects the bare 'glm 5 3 flash' needle
1025
+ // there because the next character is the alnum 'x', and the shorter
1026
+ // 'glm-5.3' would then claim the id as the text-only model.
1027
+ patterns: ["glm-5.3-flash", "glm-5.3-flashx"],
888
1028
  efforts: { low: "low", high: "high", max: "max" },
889
1029
  defaultEffort: "max",
890
1030
  compat: { thinkingFormat: "zai", supportsReasoningEffort: true },
@@ -975,6 +1115,23 @@ var KNOWLEDGE_BASE = [
975
1115
  contextWindow: 262144,
976
1116
  note: "Kimi K2.7 Code\uFF08\u542B\u9AD8\u901F\u7248\uFF09\uFF1A\u59CB\u7EC8\u601D\u8003\u2014\u2014thinking.type \u4EC5\u63A5\u53D7 enabled\uFF08\u4F20 disabled \u62A5\u9519\uFF09\uFF0C\u65E0 Off \u6863\uFF1B\u5E26\u89C6\u89C9\uFF0C256K\u3002"
977
1117
  },
1118
+ {
1119
+ id: "kimi-for-coding",
1120
+ // 2026-10 calibration NEW entry: pi-ai 1.2.0 keys kimi-for-coding on
1121
+ // anthropic-messages with a four-rung map (off omit-expressed, then
1122
+ // low/high/max) plus forceAdaptiveThinking -- Moonshot's coding
1123
+ // endpoint speaks the Anthropic shape, not the deepseek thinking.type
1124
+ // switch the K2 line uses. -highspeed twin has NO tlm (no effort
1125
+ // control); 1M in / 32,768 out, vision.
1126
+ patterns: ["kimi-for-coding"],
1127
+ efforts: { low: "low", high: "high", max: "max" },
1128
+ compat: { supportsReasoningEffort: true },
1129
+ anthropicAdaptive: true,
1130
+ input: ["text", "image"],
1131
+ contextWindow: 1048576,
1132
+ maxTokens: 32768,
1133
+ note: "Kimi for Coding\uFF1AMoonshot \u7F16\u7801\u4E13\u7EBF\u8D70 anthropic-messages \u534F\u8BAE\u3001\u81EA\u9002\u5E94\u601D\u8003\uFF0C\u6863\u4F4D Low / High / Max\uFF08off \u4EE5\u7701\u7565\u8868\u8FBE\uFF09\uFF1B\u5E26\u56FE\u8F93\u5165\uFF0C1M \u4E0A\u4E0B\u6587 / 32,768 \u8F93\u51FA\u3002\u9AD8\u901F\u7248\uFF08-highspeed\uFF09\u65E0 effort \u63A7\u4EF6\uFF082026-10 \u6821\u51C6\u65B0\u589E\uFF09\u3002"
1134
+ },
978
1135
  {
979
1136
  id: "kimi-moonshot-v1-vision",
980
1137
  // Legacy Moonshot V1 vision variants (official model list): plain
@@ -1090,18 +1247,35 @@ var KNOWLEDGE_BASE = [
1090
1247
  input: ["text", "image"],
1091
1248
  note: "\u8C46\u5305\u6863\u4F4D\uFF1AOff / Low / Medium / High\u2014\u2014effort \u9636\u68AF\u4ECD\u662F\u793E\u533A\u8BC1\u636E\u3001\u5B98\u65B9 Ark \u6587\u6863\u660E\u5217\u7684\u4E3A thinking.type \u5F00\u5173\uFF082026-08-24 \u590D\u6838\u4ECD\u672A\u89C1\u5230 effort \u5B98\u65B9\u660E\u6587\uFF09\u3002seed \u4EE3\u6536\u56FE\uFF081.5-pro \u4F8B\u5916\uFF09\u3002"
1092
1249
  },
1250
+ {
1251
+ id: "minimax-m2",
1252
+ // 2026-10 calibration NEW entry: pi-ai 1.2.0 keys MiniMax-M2.5 (and the
1253
+ // M2 line) with NO thinkingLevelMap and supportsReasoningEffort:false
1254
+ // on the anthropic-messages protocol -- unlike M3 below, the M2
1255
+ // generation predates the thinking parameter entirely. `false` keeps
1256
+ // auto-adapt from handing it the M3 declaration. Text-only;
1257
+ // 204,800 in / 131,072 out.
1258
+ patterns: ["minimax-m2"],
1259
+ efforts: false,
1260
+ input: ["text"],
1261
+ contextWindow: 204800,
1262
+ maxTokens: 131072,
1263
+ note: "MiniMax-M2 / M2.5\uFF08\u542B -highspeed\uFF09\uFF1A\u65E0\u601D\u8003\u63A7\u4EF6\u3001\u65E0 effort \u53C2\u6570\uFF08M3 \u624D\u5F15\u5165 thinking \u53C2\u6570\uFF09\uFF0C\u7EAF\u6587\u672C\uFF0C204,800 / 131,072\uFF082026-10 \u6821\u51C6\u65B0\u589E\uFF1BM3 \u89C1\u4E0B\u6761\uFF09\u3002"
1264
+ },
1093
1265
  {
1094
1266
  id: "minimax-m3",
1095
1267
  // Official M3 README: a thinking parameter with enabled / adaptive /
1096
1268
  // disabled -- NO reasoning_effort ladder. That is exactly the
1097
1269
  // deepseek-shaped toggle, so the kimi-style declaration fits; "adaptive"
1098
1270
  // is not expressible in the level vocabulary and defaults apply.
1271
+ // 2026-10 calibration adds the catalog's 512,000 output cap.
1099
1272
  patterns: ["minimax-m3"],
1100
1273
  efforts: { off: null, high: "high" },
1101
1274
  compat: { thinkingFormat: "deepseek" },
1102
1275
  input: ["text", "image"],
1103
1276
  contextWindow: 1048576,
1104
- note: "MiniMax-M3\uFF1A\u5B98\u65B9 thinking \u53C2\u6570 enabled/adaptive/disabled\uFF08\u65E0 effort \u6863\uFF09\uFF0C\u5F00=High\u3001\u5173=disabled\uFF1B\u539F\u751F\u591A\u6A21\u6001\uFF08\u56FE/\u89C6\u9891\uFF0C\u6838\u5FC3\u8BCD\u8868\u4EC5\u542B\u56FE\uFF09\uFF0C1M \u4E0A\u4E0B\u6587\u3002"
1277
+ maxTokens: 512e3,
1278
+ note: "MiniMax-M3\uFF1A\u5B98\u65B9 thinking \u53C2\u6570 enabled/adaptive/disabled\uFF08\u65E0 effort \u6863\uFF09\uFF0C\u5F00=High\u3001\u5173=disabled\uFF1B\u539F\u751F\u591A\u6A21\u6001\uFF08\u56FE/\u89C6\u9891\uFF0C\u6838\u5FC3\u8BCD\u8868\u4EC5\u542B\u56FE\uFF09\uFF0C1M \u4E0A\u4E0B\u6587 / 512,000 \u8F93\u51FA\uFF082026-10 \u6821\u51C6\u8865\u5BB9\u91CF\uFF09\u3002"
1105
1279
  },
1106
1280
  {
1107
1281
  id: "mimo-v2-6",
@@ -1152,6 +1326,70 @@ var KNOWLEDGE_BASE = [
1152
1326
  input: ["text"],
1153
1327
  contextWindow: 131072,
1154
1328
  note: "\u767E\u5EA6\u5343\u5E06 ERNIE \u7CFB\uFF1A\u5B98\u65B9 OpenAI \u517C\u5BB9\u63A5\u53E3\u65E0 reasoning_effort \u53C2\u6570\u2014\u2014\u601D\u8003\u7531\u6A21\u578B\u53D8\u4F53\u51B3\u5B9A\uFF08-Thinking \u7CFB\u5217\u59CB\u7EC8\u601D\u8003\u3001\u666E\u901A\u7CFB\u5217\u4E0D\u601D\u8003\uFF09\uFF0C\u52FF\u52FE\u601D\u8003\u6863\u3002ERNIE 4.5 Turbo VL \u652F\u6301\u56FE\u7247\uFF0C\u6309\u9700\u624B\u52FE\uFF1B\u53C2\u8003\u5BB9\u91CF\u53D6 Turbo 128K \u6863\u3002"
1329
+ },
1330
+ {
1331
+ id: "fireworks-ember",
1332
+ // 2026-10 calibration NEW entry: Fireworks' ember-1 keys on
1333
+ // anthropic-messages in pi-ai 1.2.0 with a five-rung map (off spelled
1334
+ // 'none') plus forceAdaptiveThinking/allowEmptySignature -- a relay
1335
+ // model that genuinely dispatches output_config.effort. Vision;
1336
+ // 1,048,576 in / 131,072 out.
1337
+ patterns: ["ember-1"],
1338
+ efforts: { off: "none", low: "low", medium: "medium", high: "high", max: "max" },
1339
+ compat: { supportsReasoningEffort: true },
1340
+ anthropicAdaptive: true,
1341
+ input: ["text", "image"],
1342
+ contextWindow: 1048576,
1343
+ maxTokens: 131072,
1344
+ note: "Fireworks ember-1\uFF1Aanthropic-messages \u534F\u8BAE\u81EA\u9002\u5E94\u601D\u8003\uFF0C\u6863\u4F4D None(\u5173) / Low / Medium / High / Max\uFF08off \u663E\u5F0F none \u62FC\u5199\uFF09\uFF1B\u5E26\u56FE\u8F93\u5165\uFF0C1M \u4E0A\u4E0B\u6587 / 131,072 \u8F93\u51FA\uFF082026-10 \u6821\u51C6\u65B0\u589E\uFF09\u3002"
1345
+ },
1346
+ {
1347
+ id: "thinkingmachines-inkling",
1348
+ // 2026-10 calibration NEW entry: pi-ai 1.2.0 keys inkling (Thinking
1349
+ // Machines) with the FULL seven-rung ladder incl. explicit max, vision,
1350
+ // 524,288 in / 131,072 out. On together.ai the relay exposes
1351
+ // supportsReasoningEffort:false -- the ladder below still keys the
1352
+ // model name first; relays that forward it accept the rungs.
1353
+ patterns: ["inkling"],
1354
+ efforts: {
1355
+ off: "none",
1356
+ minimal: "minimal",
1357
+ low: "low",
1358
+ medium: "medium",
1359
+ high: "high",
1360
+ xhigh: "xhigh",
1361
+ max: "max"
1362
+ },
1363
+ defaultEffort: "medium",
1364
+ compat: { thinkingFormat: "openai", supportsReasoningEffort: true },
1365
+ input: ["text", "image"],
1366
+ contextWindow: 524288,
1367
+ maxTokens: 131072,
1368
+ note: "Thinking Machines Inkling\uFF1A\u5168\u6863 Minimal / Low / Medium(\u9ED8\u8BA4) / High / XHigh / Max\uFF0Coff \u663E\u5F0F none\uFF1B\u5E26\u56FE\u8F93\u5165\uFF0C512K \u4E0A\u4E0B\u6587 / 131,072 \u8F93\u51FA\uFF082026-10 \u6821\u51C6\u65B0\u589E\uFF1Btogether \u4E2D\u7EE7\u4FA7 effort \u53C2\u6570\u672A\u5F00\u653E\uFF0C\u9700\u652F\u6301\u65B9\u8F6C\u53D1\uFF09\u3002"
1369
+ },
1370
+ {
1371
+ id: "antling-ring",
1372
+ // 2026-10 calibration NEW entry: Ant Ling's Ring-2.6-1T takes a
1373
+ // two-rung map (high/xhigh) with off omit-expressed; Ling-2.6(-flash)
1374
+ // is r=false (non-reasoning) and keys the second entry. 262,144 in /
1375
+ // 65,536 out per pi-ai 1.2.0.
1376
+ patterns: ["ring-2.6"],
1377
+ efforts: { high: "high", xhigh: "xhigh" },
1378
+ compat: { thinkingFormat: "openai", supportsReasoningEffort: true },
1379
+ input: ["text"],
1380
+ contextWindow: 262144,
1381
+ maxTokens: 65536,
1382
+ note: "\u8682\u8681 Ling Ring-2.6-1T\uFF1A\u6863\u4F4D High / XHigh\uFF08off \u4EE5\u7701\u7565\u8868\u8FBE\uFF09\uFF1B262,144 / 65,536\uFF082026-10 \u6821\u51C6\u65B0\u589E\uFF09\u3002"
1383
+ },
1384
+ {
1385
+ id: "antling-ling",
1386
+ // 2026-10 calibration NEW entry: Ling-2.6-1T / Ling-2.6-flash are
1387
+ // non-reasoning (r=false, no tlm in pi-ai 1.2.0) -- declared false so
1388
+ // auto-adapt does not hand them the Ring ladder.
1389
+ patterns: ["ling-2.6"],
1390
+ efforts: false,
1391
+ input: ["text"],
1392
+ note: "\u8682\u8681 Ling-2.6\uFF08\u542B -flash\uFF09\uFF1A\u975E\u601D\u8003\u6A21\u578B\uFF0C\u65E0 effort \u63A7\u4EF6\uFF082026-10 \u6821\u51C6\u65B0\u589E\uFF1BRing-2.6 \u601D\u8003\u7EBF\u89C1\u4E0A\u6761\uFF09\u3002"
1155
1393
  }
1156
1394
  ];
1157
1395
  var GENERIC_OPENAI_EFFORTS = {