@letta-ai/letta-agent-sdk 0.8.0 → 0.8.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.
Files changed (51) hide show
  1. package/README.md +23 -0
  2. package/dist/agent-creation.d.ts +2 -1
  3. package/dist/agent-creation.d.ts.map +1 -1
  4. package/dist/app-server-session.d.ts.map +1 -1
  5. package/dist/client-base.d.ts +12 -0
  6. package/dist/client-base.d.ts.map +1 -1
  7. package/dist/client-entry.d.ts +1 -0
  8. package/dist/client-entry.d.ts.map +1 -1
  9. package/dist/client-entry.js +457 -2673
  10. package/dist/client-entry.js.map +14 -12
  11. package/dist/client.d.ts +4 -0
  12. package/dist/client.d.ts.map +1 -1
  13. package/dist/cloud-session.d.ts +4 -1
  14. package/dist/cloud-session.d.ts.map +1 -1
  15. package/dist/index.d.ts +5 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +598 -2646
  18. package/dist/index.js.map +18 -15
  19. package/dist/query-types.d.ts +25 -0
  20. package/dist/query-types.d.ts.map +1 -0
  21. package/dist/query.d.ts +7 -0
  22. package/dist/query.d.ts.map +1 -0
  23. package/dist/remote-session-protocol.d.ts +11 -1
  24. package/dist/remote-session-protocol.d.ts.map +1 -1
  25. package/dist/remote-turn-coordinator.d.ts.map +1 -1
  26. package/dist/repository-types.d.ts +89 -0
  27. package/dist/repository-types.d.ts.map +1 -0
  28. package/dist/skill-loading.d.ts +84 -0
  29. package/dist/skill-loading.d.ts.map +1 -0
  30. package/dist/skill-node.d.ts +28 -0
  31. package/dist/skill-node.d.ts.map +1 -0
  32. package/dist/types.d.ts +17 -84
  33. package/dist/types.d.ts.map +1 -1
  34. package/package.json +2 -2
  35. package/src/agent-creation.ts +37 -1
  36. package/src/app-server-session.ts +35 -2
  37. package/src/client-base.ts +138 -1
  38. package/src/client-entry.ts +1 -0
  39. package/src/client.ts +39 -0
  40. package/src/cloud-session.ts +84 -16
  41. package/src/index.ts +16 -0
  42. package/src/local-app-server.ts +1 -1
  43. package/src/query-types.ts +40 -0
  44. package/src/query.ts +43 -0
  45. package/src/remote-client-session-core.ts +1 -1
  46. package/src/remote-session-protocol.ts +12 -1
  47. package/src/remote-turn-coordinator.ts +5 -1
  48. package/src/repository-types.ts +105 -0
  49. package/src/skill-loading.ts +194 -0
  50. package/src/skill-node.ts +139 -0
  51. package/src/types.ts +42 -100
@@ -1,4 +1,8 @@
1
1
  // Generated bundle. Canonical modules are published under src/ and maintained in the letta-agent-sdk repository.
2
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
3
+
4
+ // node_modules/@letta-ai/letta-code/dist/agent-presets-agent-presets.js
5
+ var init_agent_presets_agent_presets = () => {};
2
6
 
3
7
  // node_modules/@letta-ai/letta-client/internal/tslib.mjs
4
8
  function __classPrivateFieldSet(receiver, state, value, kind, f) {
@@ -2993,6 +2997,47 @@ class RepositoriesClient {
2993
2997
  }
2994
2998
  }
2995
2999
 
3000
+ // src/skill-loading.ts
3001
+ var SKILL_NAME_RE = /^[a-z0-9][a-z0-9._-]*$/;
3002
+ function assertValidSkillName(name) {
3003
+ if (!SKILL_NAME_RE.test(name)) {
3004
+ throw new Error(`Invalid skill name "${name}". Skill names are directory names: ` + `lowercase letters, digits, ".", "_", "-" (e.g. "generating-voice-memos").`);
3005
+ }
3006
+ }
3007
+ async function resolveSkillItems(items, loadDirectory) {
3008
+ if (!items || items.length === 0)
3009
+ return [];
3010
+ const resolved = [];
3011
+ for (const item of items) {
3012
+ if (typeof item === "string") {
3013
+ if (!loadDirectory) {
3014
+ throw new Error(`Skill directory paths ("${item}") require a Node.js runtime. ` + "Pass an inline skill ({ name, description, instructions }) instead.");
3015
+ }
3016
+ resolved.push(await loadDirectory(item));
3017
+ } else {
3018
+ assertValidSkillName(item.name);
3019
+ if (!item.instructions || item.instructions.trim().length === 0) {
3020
+ throw new Error(`Skill "${item.name}" has empty instructions.`);
3021
+ }
3022
+ if (!item.description || item.description.trim().length === 0) {
3023
+ throw new Error(`Skill "${item.name}" has no description. ` + `The description is the skill's trigger text; it is required.`);
3024
+ }
3025
+ resolved.push(item);
3026
+ }
3027
+ }
3028
+ const seen = new Set;
3029
+ for (const skill of resolved) {
3030
+ if (seen.has(skill.name)) {
3031
+ throw new Error(`Duplicate skill name: "${skill.name}".`);
3032
+ }
3033
+ seen.add(skill.name);
3034
+ }
3035
+ return resolved;
3036
+ }
3037
+ function skillsHaveSupportFiles(skills) {
3038
+ return skills.some((skill) => skill.files && Object.keys(skill.files).length > 0);
3039
+ }
3040
+
2996
3041
  // src/agent-repositories.ts
2997
3042
  var DEFAULT_VISIBILITY_TIMEOUT_MS = 1e4;
2998
3043
  var DEFAULT_VISIBILITY_POLL_INTERVAL_MS = 100;
@@ -3622,6 +3667,7 @@ async function closeConnection(connection) {
3622
3667
  }
3623
3668
 
3624
3669
  // node_modules/@letta-ai/letta-code/dist/agent-presets.js
3670
+ init_agent_presets_agent_presets();
3625
3671
  var LETTA_CODE_ORIGIN_TAG = "origin:letta-code";
3626
3672
  var LETTA_CODE_SUBAGENT_TAG = "role:subagent";
3627
3673
  var GIT_MEMORY_ENABLED_TAG = "git-memory-enabled";
@@ -5462,2668 +5508,236 @@ async function getDefaultMemoryBlocks() {
5462
5508
  }
5463
5509
  return cachedMemoryBlocks;
5464
5510
  }
5465
- var models_default = {
5466
- models: [
5467
- {
5468
- id: "auto",
5469
- isDefault: true,
5470
- handle: "letta/auto",
5471
- label: "Auto",
5472
- description: "Automatically select the best model",
5473
- free: true,
5474
- updateArgs: {
5475
- context_window: 140000,
5476
- max_output_tokens: 28000,
5477
- parallel_tool_calls: true
5478
- },
5479
- isFeatured: true
5480
- },
5481
- {
5482
- id: "auto-fast",
5483
- handle: "letta/auto-fast",
5484
- label: "Auto Fast",
5485
- description: "Automatically select the best fast model",
5486
- free: true,
5487
- updateArgs: {
5488
- context_window: 140000,
5489
- max_output_tokens: 28000,
5490
- parallel_tool_calls: true
5491
- },
5492
- isFeatured: true
5493
- },
5494
- {
5495
- id: "auto-chat",
5496
- handle: "letta/auto-chat",
5497
- label: "Auto Chat",
5498
- description: "Automatically select the best model for chat",
5499
- free: true,
5500
- updateArgs: {
5501
- context_window: 140000,
5502
- max_output_tokens: 28000,
5503
- parallel_tool_calls: true
5504
- },
5505
- isFeatured: true
5506
- },
5507
- {
5508
- id: "glm",
5509
- handle: "letta/glm",
5510
- label: "Letta GLM",
5511
- description: "Route directly to Letta-hosted GLM 5.2",
5512
- free: true,
5513
- updateArgs: {
5514
- context_window: 200000,
5515
- max_output_tokens: 28000,
5516
- parallel_tool_calls: true
5517
- },
5518
- isFeatured: true
5519
- },
5520
- {
5521
- id: "gpt-5.6-sol-none",
5522
- handle: "openai/gpt-5.6-sol",
5523
- label: "GPT-5.6 Sol",
5524
- description: "OpenAI's most capable GPT-5.6 model (no reasoning)",
5525
- updateArgs: {
5526
- reasoning_effort: "none",
5527
- verbosity: "medium",
5528
- context_window: 350000,
5529
- max_output_tokens: 128000,
5530
- parallel_tool_calls: true
5531
- }
5532
- },
5533
- {
5534
- id: "gpt-5.6-sol-low",
5535
- handle: "openai/gpt-5.6-sol",
5536
- label: "GPT-5.6 Sol",
5537
- description: "OpenAI's most capable GPT-5.6 model (low reasoning)",
5538
- updateArgs: {
5539
- reasoning_effort: "low",
5540
- verbosity: "medium",
5541
- context_window: 350000,
5542
- max_output_tokens: 128000,
5543
- parallel_tool_calls: true
5544
- }
5545
- },
5546
- {
5547
- id: "gpt-5.6-sol-medium",
5548
- handle: "openai/gpt-5.6-sol",
5549
- label: "GPT-5.6 Sol",
5550
- description: "OpenAI's most capable GPT-5.6 model (med reasoning)",
5551
- updateArgs: {
5552
- reasoning_effort: "medium",
5553
- verbosity: "medium",
5554
- context_window: 350000,
5555
- max_output_tokens: 128000,
5556
- parallel_tool_calls: true
5557
- }
5558
- },
5559
- {
5560
- id: "gpt-5.6-sol",
5561
- handle: "openai/gpt-5.6-sol",
5562
- label: "GPT-5.6 Sol",
5563
- description: "OpenAI's most capable GPT-5.6 model (high reasoning)",
5564
- isFeatured: true,
5565
- updateArgs: {
5566
- reasoning_effort: "high",
5567
- verbosity: "medium",
5568
- context_window: 350000,
5569
- max_output_tokens: 128000,
5570
- parallel_tool_calls: true
5571
- }
5572
- },
5573
- {
5574
- id: "gpt-5.6-sol-xhigh",
5575
- handle: "openai/gpt-5.6-sol",
5576
- label: "GPT-5.6 Sol",
5577
- description: "OpenAI's most capable GPT-5.6 model (extra-high reasoning)",
5578
- updateArgs: {
5579
- reasoning_effort: "xhigh",
5580
- verbosity: "medium",
5581
- context_window: 350000,
5582
- max_output_tokens: 128000,
5583
- parallel_tool_calls: true
5584
- }
5585
- },
5586
- {
5587
- id: "gpt-5.6-sol-max",
5588
- handle: "openai/gpt-5.6-sol",
5589
- label: "GPT-5.6 Sol",
5590
- description: "OpenAI's most capable GPT-5.6 model (max reasoning)",
5591
- updateArgs: {
5592
- reasoning_effort: "max",
5593
- verbosity: "medium",
5594
- context_window: 350000,
5595
- max_output_tokens: 128000,
5596
- parallel_tool_calls: true
5597
- }
5598
- },
5599
- {
5600
- id: "gpt-5.6-sol-1m-none",
5601
- handle: "openai/gpt-5.6-sol",
5602
- label: "GPT-5.6 Sol 1M",
5603
- description: "GPT-5.6 Sol 1M (no reasoning)",
5604
- updateArgs: {
5605
- reasoning_effort: "none",
5606
- verbosity: "medium",
5607
- context_window: 1050000,
5608
- max_output_tokens: 128000,
5609
- parallel_tool_calls: true
5610
- }
5611
- },
5612
- {
5613
- id: "gpt-5.6-sol-1m-low",
5614
- handle: "openai/gpt-5.6-sol",
5615
- label: "GPT-5.6 Sol 1M",
5616
- description: "GPT-5.6 Sol 1M (low reasoning)",
5617
- updateArgs: {
5511
+ var models = [];
5512
+ var BUILTIN_MODEL_ALIASES = new Map([
5513
+ ["auto", "letta/auto"],
5514
+ ["auto-chat", "letta/auto-chat"],
5515
+ ["auto-fast", "letta/auto-fast"]
5516
+ ]);
5517
+ function resolveEstablishedCliAlias(modelIdentifier) {
5518
+ if (modelIdentifier === "haiku") {
5519
+ return models.find((model) => model.handle.includes("claude-haiku-4-5")) ?? null;
5520
+ }
5521
+ if (modelIdentifier === "sonnet-4.6-low") {
5522
+ const matchingModels = models.filter((model) => model.handle.includes("claude-sonnet-4-6"));
5523
+ const lowEffortModel = matchingModels.find((model) => model.updateArgs?.reasoning_effort === "low");
5524
+ if (lowEffortModel)
5525
+ return lowEffortModel;
5526
+ const baseModel = matchingModels[0];
5527
+ return baseModel ? {
5528
+ ...baseModel,
5529
+ id: modelIdentifier,
5530
+ updateArgs: {
5531
+ ...baseModel.updateArgs,
5618
5532
  reasoning_effort: "low",
5619
- verbosity: "medium",
5620
- context_window: 1050000,
5621
- max_output_tokens: 128000,
5622
- parallel_tool_calls: true
5623
- }
5624
- },
5625
- {
5626
- id: "gpt-5.6-sol-1m-medium",
5627
- handle: "openai/gpt-5.6-sol",
5628
- label: "GPT-5.6 Sol 1M",
5629
- description: "GPT-5.6 Sol 1M (med reasoning)",
5630
- updateArgs: {
5631
- reasoning_effort: "medium",
5632
- verbosity: "medium",
5633
- context_window: 1050000,
5634
- max_output_tokens: 128000,
5635
- parallel_tool_calls: true
5533
+ enable_reasoner: true
5636
5534
  }
5637
- },
5638
- {
5639
- id: "gpt-5.6-sol-1m",
5640
- handle: "openai/gpt-5.6-sol",
5641
- label: "GPT-5.6 Sol 1M",
5642
- description: "GPT-5.6 Sol with 1M token context window (high reasoning)",
5643
- updateArgs: {
5644
- reasoning_effort: "high",
5645
- verbosity: "medium",
5646
- context_window: 1050000,
5647
- max_output_tokens: 128000,
5648
- parallel_tool_calls: true
5535
+ } : null;
5536
+ }
5537
+ return null;
5538
+ }
5539
+ function resolveCatalogModel(modelIdentifier) {
5540
+ const byId = models.find((model) => model.id === modelIdentifier);
5541
+ if (byId)
5542
+ return byId;
5543
+ const byHandle = models.find((model) => model.handle === modelIdentifier);
5544
+ if (byHandle)
5545
+ return byHandle;
5546
+ const cliAlias = resolveEstablishedCliAlias(modelIdentifier);
5547
+ if (cliAlias)
5548
+ return cliAlias;
5549
+ const matches = models.filter((model) => model.handle.split("/").slice(1).join("/") === modelIdentifier);
5550
+ const matchingHandles = new Set(matches.map((model) => model.handle));
5551
+ return matchingHandles.size === 1 ? matches[0] ?? null : null;
5552
+ }
5553
+ function resolveModel(modelIdentifier) {
5554
+ const entry = resolveCatalogModel(modelIdentifier);
5555
+ if (entry)
5556
+ return entry.handle;
5557
+ const builtinHandle = BUILTIN_MODEL_ALIASES.get(modelIdentifier);
5558
+ if (builtinHandle)
5559
+ return builtinHandle;
5560
+ return modelIdentifier.includes("/") ? modelIdentifier : null;
5561
+ }
5562
+ function getDefaultModel() {
5563
+ if (models.length === 0)
5564
+ return "letta/auto";
5565
+ const autoModel = models.find((model) => model.id === "auto");
5566
+ if (autoModel)
5567
+ return autoModel.handle;
5568
+ const defaultModel = models.find((model) => model.isDefault);
5569
+ if (defaultModel)
5570
+ return defaultModel.handle;
5571
+ const firstModel = models[0];
5572
+ if (!firstModel) {
5573
+ throw new Error("Model catalog is unavailable.");
5574
+ }
5575
+ return firstModel.handle;
5576
+ }
5577
+ var PERSONALITY_OPTIONS = [
5578
+ {
5579
+ id: "memo",
5580
+ label: "Letta Code",
5581
+ description: "The memory-first agent"
5582
+ },
5583
+ {
5584
+ id: "tutorial",
5585
+ label: "Tutor",
5586
+ description: "I help with getting started with Letta. I can answer any questions about Letta, and also help you create and configure agents.",
5587
+ defaultMemoryFiles: [
5588
+ {
5589
+ path: "profile.png",
5590
+ assetId: "tutor-profile",
5591
+ commitMessage: "chore: set default Tutor profile picture"
5649
5592
  }
5593
+ ]
5594
+ },
5595
+ {
5596
+ id: "blank",
5597
+ label: "Blank",
5598
+ description: "Blank starter — you provide the personality"
5599
+ },
5600
+ {
5601
+ id: "linus",
5602
+ label: "Linus",
5603
+ description: "Code with a stern hand"
5604
+ },
5605
+ {
5606
+ id: "kawaii",
5607
+ label: "Letta-Chan",
5608
+ description: "sugoi~ (◕‿◕)✨",
5609
+ defaultModel: "auto-chat"
5610
+ },
5611
+ {
5612
+ id: "claude",
5613
+ label: "Letta Code",
5614
+ description: "Vanilla Claude flavors"
5615
+ },
5616
+ {
5617
+ id: "codex",
5618
+ label: "Letta Code",
5619
+ description: "Vanilla Codex flavors"
5620
+ }
5621
+ ];
5622
+ var PERSONALITY_TAG_PREFIX = "personality:";
5623
+ function buildPersonalityTag(personalityId) {
5624
+ return `${PERSONALITY_TAG_PREFIX}${personalityId}`;
5625
+ }
5626
+ function getPersonalityCreationTags(personalityId) {
5627
+ return getPersonalityDefaultMemoryFiles(personalityId).length > 0 ? [buildPersonalityTag(personalityId)] : [];
5628
+ }
5629
+ var ONBOARDING_PERSONALITIES = [
5630
+ "tutorial"
5631
+ ];
5632
+ function supportsOnboardingBlock(personalityId) {
5633
+ return ONBOARDING_PERSONALITIES.includes(personalityId);
5634
+ }
5635
+ var EDITABLE_FRONTMATTER_KEYS = [
5636
+ "description",
5637
+ "limit",
5638
+ "read_only"
5639
+ ];
5640
+ function ensureTrailingNewline(content) {
5641
+ return `${content.trimEnd()}
5642
+ `;
5643
+ }
5644
+ function getPromptTemplate(promptAssetName) {
5645
+ const rawPrompt = MEMORY_PROMPTS[promptAssetName];
5646
+ if (!rawPrompt) {
5647
+ throw new Error(`Missing built-in prompt content for ${promptAssetName}`);
5648
+ }
5649
+ return parseMdxFrontmatter(rawPrompt);
5650
+ }
5651
+ function getPromptBody(promptAssetName) {
5652
+ const { body } = getPromptTemplate(promptAssetName);
5653
+ if (!body.trim()) {
5654
+ throw new Error(`${promptAssetName} has empty body content`);
5655
+ }
5656
+ return ensureTrailingNewline(body);
5657
+ }
5658
+ function getEditablePromptFrontmatter(promptAssetName) {
5659
+ const { frontmatter } = getPromptTemplate(promptAssetName);
5660
+ return Object.fromEntries(Object.entries(frontmatter).filter(([key]) => EDITABLE_FRONTMATTER_KEYS.includes(key)));
5661
+ }
5662
+ function getSystemPromptById(systemPromptId) {
5663
+ const prompt = SYSTEM_PROMPTS.find((candidate) => candidate.id === systemPromptId);
5664
+ if (!prompt || !prompt.content.trim()) {
5665
+ throw new Error(`Missing built-in prompt content for ${systemPromptId}`);
5666
+ }
5667
+ return prompt.content;
5668
+ }
5669
+ function getPersonalityOption(personalityId) {
5670
+ const option = PERSONALITY_OPTIONS.find((candidate) => candidate.id === personalityId);
5671
+ if (!option) {
5672
+ throw new Error(`Unknown personality: ${personalityId}`);
5673
+ }
5674
+ return option;
5675
+ }
5676
+ function getPersonalityDefaultMemoryFiles(personalityId) {
5677
+ return getPersonalityOption(personalityId).defaultMemoryFiles ?? [];
5678
+ }
5679
+ function getPersonalityContent(personalityId) {
5680
+ if (personalityId === "memo") {
5681
+ return getPromptBody("persona_memo.mdx");
5682
+ }
5683
+ if (personalityId === "tutorial") {
5684
+ return getPromptBody("persona_tutorial.mdx");
5685
+ }
5686
+ if (personalityId === "blank") {
5687
+ return getPromptBody("persona_blank.mdx");
5688
+ }
5689
+ if (personalityId === "kawaii") {
5690
+ return getPromptBody("persona_kawaii.mdx");
5691
+ }
5692
+ if (personalityId === "codex") {
5693
+ return ensureTrailingNewline(getSystemPromptById("source-codex"));
5694
+ }
5695
+ if (personalityId === "linus") {
5696
+ return getPromptBody("persona_linus.mdx");
5697
+ }
5698
+ return ensureTrailingNewline(getSystemPromptById("source-claude"));
5699
+ }
5700
+ function getDefaultHumanContent() {
5701
+ return getPromptBody("human.mdx");
5702
+ }
5703
+ function getPersonalityHumanContent(personalityId) {
5704
+ if (personalityId === "memo") {
5705
+ return getPromptBody("human_memo.mdx");
5706
+ }
5707
+ if (personalityId === "tutorial") {
5708
+ return getPromptBody("human_tutorial.mdx");
5709
+ }
5710
+ if (personalityId === "linus") {
5711
+ return getPromptBody("human_linus.mdx");
5712
+ }
5713
+ if (personalityId === "kawaii") {
5714
+ return getPromptBody("human_kawaii.mdx");
5715
+ }
5716
+ if (personalityId === "blank") {
5717
+ return getDefaultHumanContent();
5718
+ }
5719
+ return getDefaultHumanContent();
5720
+ }
5721
+ function getPersonalityBlockDefinitions(personalityId, environment = "cloud") {
5722
+ const personaTemplatePromptAssetName = personalityId === "memo" ? "persona_memo.mdx" : personalityId === "tutorial" ? "persona_tutorial.mdx" : personalityId === "blank" ? "persona_blank.mdx" : personalityId === "kawaii" ? "persona_kawaii.mdx" : personalityId === "linus" ? "persona_linus.mdx" : "persona.mdx";
5723
+ const humanTemplatePromptAssetName = personalityId === "memo" ? "human_memo.mdx" : personalityId === "tutorial" ? "human_tutorial.mdx" : personalityId === "kawaii" ? "human_kawaii.mdx" : personalityId === "linus" ? "human_linus.mdx" : "human.mdx";
5724
+ const onboardingTemplatePromptAssetName = environment === "local" ? "onboarding_local.mdx" : "onboarding.mdx";
5725
+ return {
5726
+ persona: {
5727
+ value: getPersonalityContent(personalityId),
5728
+ description: getEditablePromptFrontmatter(personaTemplatePromptAssetName).description,
5729
+ templatePromptAssetName: personaTemplatePromptAssetName
5650
5730
  },
5651
- {
5652
- id: "gpt-5.6-sol-1m-xhigh",
5653
- handle: "openai/gpt-5.6-sol",
5654
- label: "GPT-5.6 Sol 1M",
5655
- description: "GPT-5.6 Sol 1M (extra-high reasoning)",
5656
- updateArgs: {
5657
- reasoning_effort: "xhigh",
5658
- verbosity: "medium",
5659
- context_window: 1050000,
5660
- max_output_tokens: 128000,
5661
- parallel_tool_calls: true
5662
- }
5731
+ human: {
5732
+ value: getPersonalityHumanContent(personalityId),
5733
+ description: getEditablePromptFrontmatter(humanTemplatePromptAssetName).description,
5734
+ templatePromptAssetName: humanTemplatePromptAssetName
5663
5735
  },
5664
- {
5665
- id: "gpt-5.6-sol-1m-max",
5666
- handle: "openai/gpt-5.6-sol",
5667
- label: "GPT-5.6 Sol 1M",
5668
- description: "GPT-5.6 Sol 1M (max reasoning)",
5669
- updateArgs: {
5670
- reasoning_effort: "max",
5671
- verbosity: "medium",
5672
- context_window: 1050000,
5673
- max_output_tokens: 128000,
5674
- parallel_tool_calls: true
5675
- }
5676
- },
5677
- {
5678
- id: "gpt-5.6-terra-none",
5679
- handle: "openai/gpt-5.6-terra",
5680
- label: "GPT-5.6 Terra",
5681
- description: "GPT-5.6 Terra (no reasoning)",
5682
- updateArgs: {
5683
- reasoning_effort: "none",
5684
- verbosity: "medium",
5685
- context_window: 350000,
5686
- max_output_tokens: 128000,
5687
- parallel_tool_calls: true
5688
- }
5689
- },
5690
- {
5691
- id: "gpt-5.6-terra-low",
5692
- handle: "openai/gpt-5.6-terra",
5693
- label: "GPT-5.6 Terra",
5694
- description: "GPT-5.6 Terra (low reasoning)",
5695
- updateArgs: {
5696
- reasoning_effort: "low",
5697
- verbosity: "medium",
5698
- context_window: 350000,
5699
- max_output_tokens: 128000,
5700
- parallel_tool_calls: true
5701
- }
5702
- },
5703
- {
5704
- id: "gpt-5.6-terra-medium",
5705
- handle: "openai/gpt-5.6-terra",
5706
- label: "GPT-5.6 Terra",
5707
- description: "GPT-5.6 Terra (med reasoning)",
5708
- updateArgs: {
5709
- reasoning_effort: "medium",
5710
- verbosity: "medium",
5711
- context_window: 350000,
5712
- max_output_tokens: 128000,
5713
- parallel_tool_calls: true
5714
- }
5715
- },
5716
- {
5717
- id: "gpt-5.6-terra",
5718
- handle: "openai/gpt-5.6-terra",
5719
- label: "GPT-5.6 Terra",
5720
- description: "GPT-5.6 Terra (high reasoning)",
5721
- isFeatured: true,
5722
- updateArgs: {
5723
- reasoning_effort: "high",
5724
- verbosity: "medium",
5725
- context_window: 350000,
5726
- max_output_tokens: 128000,
5727
- parallel_tool_calls: true
5728
- }
5729
- },
5730
- {
5731
- id: "gpt-5.6-terra-xhigh",
5732
- handle: "openai/gpt-5.6-terra",
5733
- label: "GPT-5.6 Terra",
5734
- description: "GPT-5.6 Terra (extra-high reasoning)",
5735
- updateArgs: {
5736
- reasoning_effort: "xhigh",
5737
- verbosity: "medium",
5738
- context_window: 350000,
5739
- max_output_tokens: 128000,
5740
- parallel_tool_calls: true
5741
- }
5742
- },
5743
- {
5744
- id: "gpt-5.6-terra-max",
5745
- handle: "openai/gpt-5.6-terra",
5746
- label: "GPT-5.6 Terra",
5747
- description: "GPT-5.6 Terra (max reasoning)",
5748
- updateArgs: {
5749
- reasoning_effort: "max",
5750
- verbosity: "medium",
5751
- context_window: 350000,
5752
- max_output_tokens: 128000,
5753
- parallel_tool_calls: true
5754
- }
5755
- },
5756
- {
5757
- id: "gpt-5.6-terra-1m-none",
5758
- handle: "openai/gpt-5.6-terra",
5759
- label: "GPT-5.6 Terra 1M",
5760
- description: "GPT-5.6 Terra 1M (no reasoning)",
5761
- updateArgs: {
5762
- reasoning_effort: "none",
5763
- verbosity: "medium",
5764
- context_window: 1050000,
5765
- max_output_tokens: 128000,
5766
- parallel_tool_calls: true
5767
- }
5768
- },
5769
- {
5770
- id: "gpt-5.6-terra-1m-low",
5771
- handle: "openai/gpt-5.6-terra",
5772
- label: "GPT-5.6 Terra 1M",
5773
- description: "GPT-5.6 Terra 1M (low reasoning)",
5774
- updateArgs: {
5775
- reasoning_effort: "low",
5776
- verbosity: "medium",
5777
- context_window: 1050000,
5778
- max_output_tokens: 128000,
5779
- parallel_tool_calls: true
5780
- }
5781
- },
5782
- {
5783
- id: "gpt-5.6-terra-1m-medium",
5784
- handle: "openai/gpt-5.6-terra",
5785
- label: "GPT-5.6 Terra 1M",
5786
- description: "GPT-5.6 Terra 1M (med reasoning)",
5787
- updateArgs: {
5788
- reasoning_effort: "medium",
5789
- verbosity: "medium",
5790
- context_window: 1050000,
5791
- max_output_tokens: 128000,
5792
- parallel_tool_calls: true
5793
- }
5794
- },
5795
- {
5796
- id: "gpt-5.6-terra-1m",
5797
- handle: "openai/gpt-5.6-terra",
5798
- label: "GPT-5.6 Terra 1M",
5799
- description: "GPT-5.6 Terra with 1M token context window (high reasoning)",
5800
- updateArgs: {
5801
- reasoning_effort: "high",
5802
- verbosity: "medium",
5803
- context_window: 1050000,
5804
- max_output_tokens: 128000,
5805
- parallel_tool_calls: true
5806
- }
5807
- },
5808
- {
5809
- id: "gpt-5.6-terra-1m-xhigh",
5810
- handle: "openai/gpt-5.6-terra",
5811
- label: "GPT-5.6 Terra 1M",
5812
- description: "GPT-5.6 Terra 1M (extra-high reasoning)",
5813
- updateArgs: {
5814
- reasoning_effort: "xhigh",
5815
- verbosity: "medium",
5816
- context_window: 1050000,
5817
- max_output_tokens: 128000,
5818
- parallel_tool_calls: true
5819
- }
5820
- },
5821
- {
5822
- id: "gpt-5.6-terra-1m-max",
5823
- handle: "openai/gpt-5.6-terra",
5824
- label: "GPT-5.6 Terra 1M",
5825
- description: "GPT-5.6 Terra 1M (max reasoning)",
5826
- updateArgs: {
5827
- reasoning_effort: "max",
5828
- verbosity: "medium",
5829
- context_window: 1050000,
5830
- max_output_tokens: 128000,
5831
- parallel_tool_calls: true
5832
- }
5833
- },
5834
- {
5835
- id: "gpt-5.6-luna-none",
5836
- handle: "openai/gpt-5.6-luna",
5837
- label: "GPT-5.6 Luna",
5838
- description: "GPT-5.6 Luna (no reasoning)",
5839
- updateArgs: {
5840
- reasoning_effort: "none",
5841
- verbosity: "medium",
5842
- context_window: 350000,
5843
- max_output_tokens: 128000,
5844
- parallel_tool_calls: true
5845
- }
5846
- },
5847
- {
5848
- id: "gpt-5.6-luna-low",
5849
- handle: "openai/gpt-5.6-luna",
5850
- label: "GPT-5.6 Luna",
5851
- description: "GPT-5.6 Luna (low reasoning)",
5852
- updateArgs: {
5853
- reasoning_effort: "low",
5854
- verbosity: "medium",
5855
- context_window: 350000,
5856
- max_output_tokens: 128000,
5857
- parallel_tool_calls: true
5858
- }
5859
- },
5860
- {
5861
- id: "gpt-5.6-luna-medium",
5862
- handle: "openai/gpt-5.6-luna",
5863
- label: "GPT-5.6 Luna",
5864
- description: "GPT-5.6 Luna (med reasoning)",
5865
- updateArgs: {
5866
- reasoning_effort: "medium",
5867
- verbosity: "medium",
5868
- context_window: 350000,
5869
- max_output_tokens: 128000,
5870
- parallel_tool_calls: true
5871
- }
5872
- },
5873
- {
5874
- id: "gpt-5.6-luna",
5875
- handle: "openai/gpt-5.6-luna",
5876
- label: "GPT-5.6 Luna",
5877
- description: "GPT-5.6 Luna (high reasoning)",
5878
- isFeatured: true,
5879
- updateArgs: {
5880
- reasoning_effort: "high",
5881
- verbosity: "medium",
5882
- context_window: 350000,
5883
- max_output_tokens: 128000,
5884
- parallel_tool_calls: true
5885
- }
5886
- },
5887
- {
5888
- id: "gpt-5.6-luna-xhigh",
5889
- handle: "openai/gpt-5.6-luna",
5890
- label: "GPT-5.6 Luna",
5891
- description: "GPT-5.6 Luna (extra-high reasoning)",
5892
- updateArgs: {
5893
- reasoning_effort: "xhigh",
5894
- verbosity: "medium",
5895
- context_window: 350000,
5896
- max_output_tokens: 128000,
5897
- parallel_tool_calls: true
5898
- }
5899
- },
5900
- {
5901
- id: "gpt-5.6-luna-max",
5902
- handle: "openai/gpt-5.6-luna",
5903
- label: "GPT-5.6 Luna",
5904
- description: "GPT-5.6 Luna (max reasoning)",
5905
- updateArgs: {
5906
- reasoning_effort: "max",
5907
- verbosity: "medium",
5908
- context_window: 350000,
5909
- max_output_tokens: 128000,
5910
- parallel_tool_calls: true
5911
- }
5912
- },
5913
- {
5914
- id: "gpt-5.6-luna-1m-none",
5915
- handle: "openai/gpt-5.6-luna",
5916
- label: "GPT-5.6 Luna 1M",
5917
- description: "GPT-5.6 Luna 1M (no reasoning)",
5918
- updateArgs: {
5919
- reasoning_effort: "none",
5920
- verbosity: "medium",
5921
- context_window: 1050000,
5922
- max_output_tokens: 128000,
5923
- parallel_tool_calls: true
5924
- }
5925
- },
5926
- {
5927
- id: "gpt-5.6-luna-1m-low",
5928
- handle: "openai/gpt-5.6-luna",
5929
- label: "GPT-5.6 Luna 1M",
5930
- description: "GPT-5.6 Luna 1M (low reasoning)",
5931
- updateArgs: {
5932
- reasoning_effort: "low",
5933
- verbosity: "medium",
5934
- context_window: 1050000,
5935
- max_output_tokens: 128000,
5936
- parallel_tool_calls: true
5937
- }
5938
- },
5939
- {
5940
- id: "gpt-5.6-luna-1m-medium",
5941
- handle: "openai/gpt-5.6-luna",
5942
- label: "GPT-5.6 Luna 1M",
5943
- description: "GPT-5.6 Luna 1M (med reasoning)",
5944
- updateArgs: {
5945
- reasoning_effort: "medium",
5946
- verbosity: "medium",
5947
- context_window: 1050000,
5948
- max_output_tokens: 128000,
5949
- parallel_tool_calls: true
5950
- }
5951
- },
5952
- {
5953
- id: "gpt-5.6-luna-1m",
5954
- handle: "openai/gpt-5.6-luna",
5955
- label: "GPT-5.6 Luna 1M",
5956
- description: "GPT-5.6 Luna with 1M token context window (high reasoning)",
5957
- updateArgs: {
5958
- reasoning_effort: "high",
5959
- verbosity: "medium",
5960
- context_window: 1050000,
5961
- max_output_tokens: 128000,
5962
- parallel_tool_calls: true
5963
- }
5964
- },
5965
- {
5966
- id: "gpt-5.6-luna-1m-xhigh",
5967
- handle: "openai/gpt-5.6-luna",
5968
- label: "GPT-5.6 Luna 1M",
5969
- description: "GPT-5.6 Luna 1M (extra-high reasoning)",
5970
- updateArgs: {
5971
- reasoning_effort: "xhigh",
5972
- verbosity: "medium",
5973
- context_window: 1050000,
5974
- max_output_tokens: 128000,
5975
- parallel_tool_calls: true
5976
- }
5977
- },
5978
- {
5979
- id: "gpt-5.6-luna-1m-max",
5980
- handle: "openai/gpt-5.6-luna",
5981
- label: "GPT-5.6 Luna 1M",
5982
- description: "GPT-5.6 Luna 1M (max reasoning)",
5983
- updateArgs: {
5984
- reasoning_effort: "max",
5985
- verbosity: "medium",
5986
- context_window: 1050000,
5987
- max_output_tokens: 128000,
5988
- parallel_tool_calls: true
5989
- }
5990
- },
5991
- {
5992
- id: "gpt-5.6-sol-plus-pro-none",
5993
- handle: "chatgpt-plus-pro/gpt-5.6-sol",
5994
- label: "GPT-5.6 Sol (ChatGPT)",
5995
- description: "GPT-5.6 Sol (no reasoning) via ChatGPT Plus/Pro",
5996
- updateArgs: {
5997
- reasoning_effort: "none",
5998
- verbosity: "low",
5999
- context_window: 350000,
6000
- max_output_tokens: 128000,
6001
- parallel_tool_calls: true
6002
- }
6003
- },
6004
- {
6005
- id: "gpt-5.6-sol-plus-pro-low",
6006
- handle: "chatgpt-plus-pro/gpt-5.6-sol",
6007
- label: "GPT-5.6 Sol (ChatGPT)",
6008
- description: "GPT-5.6 Sol (low reasoning) via ChatGPT Plus/Pro",
6009
- updateArgs: {
6010
- reasoning_effort: "low",
6011
- verbosity: "low",
6012
- context_window: 350000,
6013
- max_output_tokens: 128000,
6014
- parallel_tool_calls: true
6015
- }
6016
- },
6017
- {
6018
- id: "gpt-5.6-sol-plus-pro-medium",
6019
- handle: "chatgpt-plus-pro/gpt-5.6-sol",
6020
- label: "GPT-5.6 Sol (ChatGPT)",
6021
- description: "GPT-5.6 Sol (med reasoning) via ChatGPT Plus/Pro",
6022
- updateArgs: {
6023
- reasoning_effort: "medium",
6024
- verbosity: "low",
6025
- context_window: 350000,
6026
- max_output_tokens: 128000,
6027
- parallel_tool_calls: true
6028
- }
6029
- },
6030
- {
6031
- id: "gpt-5.6-sol-plus-pro-high",
6032
- handle: "chatgpt-plus-pro/gpt-5.6-sol",
6033
- label: "GPT-5.6 Sol (ChatGPT)",
6034
- description: "GPT-5.6 Sol (high reasoning) via ChatGPT Plus/Pro",
6035
- updateArgs: {
6036
- reasoning_effort: "high",
6037
- verbosity: "low",
6038
- context_window: 350000,
6039
- max_output_tokens: 128000,
6040
- parallel_tool_calls: true
6041
- },
6042
- isFeatured: true
6043
- },
6044
- {
6045
- id: "gpt-5.6-sol-plus-pro-xhigh",
6046
- handle: "chatgpt-plus-pro/gpt-5.6-sol",
6047
- label: "GPT-5.6 Sol (ChatGPT)",
6048
- description: "GPT-5.6 Sol (extra-high reasoning) via ChatGPT Plus/Pro",
6049
- updateArgs: {
6050
- reasoning_effort: "xhigh",
6051
- verbosity: "low",
6052
- context_window: 350000,
6053
- max_output_tokens: 128000,
6054
- parallel_tool_calls: true
6055
- }
6056
- },
6057
- {
6058
- id: "gpt-5.6-sol-plus-pro-max",
6059
- handle: "chatgpt-plus-pro/gpt-5.6-sol",
6060
- label: "GPT-5.6 Sol (ChatGPT)",
6061
- description: "GPT-5.6 Sol (max reasoning) via ChatGPT Plus/Pro",
6062
- updateArgs: {
6063
- reasoning_effort: "max",
6064
- verbosity: "low",
6065
- context_window: 350000,
6066
- max_output_tokens: 128000,
6067
- parallel_tool_calls: true
6068
- }
6069
- },
6070
- {
6071
- id: "gpt-5.6-terra-plus-pro-none",
6072
- handle: "chatgpt-plus-pro/gpt-5.6-terra",
6073
- label: "GPT-5.6 Terra (ChatGPT)",
6074
- description: "GPT-5.6 Terra (no reasoning) via ChatGPT Plus/Pro",
6075
- updateArgs: {
6076
- reasoning_effort: "none",
6077
- verbosity: "low",
6078
- context_window: 350000,
6079
- max_output_tokens: 128000,
6080
- parallel_tool_calls: true
6081
- }
6082
- },
6083
- {
6084
- id: "gpt-5.6-terra-plus-pro-low",
6085
- handle: "chatgpt-plus-pro/gpt-5.6-terra",
6086
- label: "GPT-5.6 Terra (ChatGPT)",
6087
- description: "GPT-5.6 Terra (low reasoning) via ChatGPT Plus/Pro",
6088
- updateArgs: {
6089
- reasoning_effort: "low",
6090
- verbosity: "low",
6091
- context_window: 350000,
6092
- max_output_tokens: 128000,
6093
- parallel_tool_calls: true
6094
- }
6095
- },
6096
- {
6097
- id: "gpt-5.6-terra-plus-pro-medium",
6098
- handle: "chatgpt-plus-pro/gpt-5.6-terra",
6099
- label: "GPT-5.6 Terra (ChatGPT)",
6100
- description: "GPT-5.6 Terra (med reasoning) via ChatGPT Plus/Pro",
6101
- updateArgs: {
6102
- reasoning_effort: "medium",
6103
- verbosity: "low",
6104
- context_window: 350000,
6105
- max_output_tokens: 128000,
6106
- parallel_tool_calls: true
6107
- }
6108
- },
6109
- {
6110
- id: "gpt-5.6-terra-plus-pro-high",
6111
- handle: "chatgpt-plus-pro/gpt-5.6-terra",
6112
- label: "GPT-5.6 Terra (ChatGPT)",
6113
- description: "GPT-5.6 Terra (high reasoning) via ChatGPT Plus/Pro",
6114
- updateArgs: {
6115
- reasoning_effort: "high",
6116
- verbosity: "low",
6117
- context_window: 350000,
6118
- max_output_tokens: 128000,
6119
- parallel_tool_calls: true
6120
- },
6121
- isFeatured: true
6122
- },
6123
- {
6124
- id: "gpt-5.6-terra-plus-pro-xhigh",
6125
- handle: "chatgpt-plus-pro/gpt-5.6-terra",
6126
- label: "GPT-5.6 Terra (ChatGPT)",
6127
- description: "GPT-5.6 Terra (extra-high reasoning) via ChatGPT Plus/Pro",
6128
- updateArgs: {
6129
- reasoning_effort: "xhigh",
6130
- verbosity: "low",
6131
- context_window: 350000,
6132
- max_output_tokens: 128000,
6133
- parallel_tool_calls: true
6134
- }
6135
- },
6136
- {
6137
- id: "gpt-5.6-terra-plus-pro-max",
6138
- handle: "chatgpt-plus-pro/gpt-5.6-terra",
6139
- label: "GPT-5.6 Terra (ChatGPT)",
6140
- description: "GPT-5.6 Terra (max reasoning) via ChatGPT Plus/Pro",
6141
- updateArgs: {
6142
- reasoning_effort: "max",
6143
- verbosity: "low",
6144
- context_window: 350000,
6145
- max_output_tokens: 128000,
6146
- parallel_tool_calls: true
6147
- }
6148
- },
6149
- {
6150
- id: "gpt-5.6-luna-plus-pro-none",
6151
- handle: "chatgpt-plus-pro/gpt-5.6-luna",
6152
- label: "GPT-5.6 Luna (ChatGPT)",
6153
- description: "GPT-5.6 Luna (no reasoning) via ChatGPT Plus/Pro",
6154
- updateArgs: {
6155
- reasoning_effort: "none",
6156
- verbosity: "low",
6157
- context_window: 350000,
6158
- max_output_tokens: 128000,
6159
- parallel_tool_calls: true
6160
- }
6161
- },
6162
- {
6163
- id: "gpt-5.6-luna-plus-pro-low",
6164
- handle: "chatgpt-plus-pro/gpt-5.6-luna",
6165
- label: "GPT-5.6 Luna (ChatGPT)",
6166
- description: "GPT-5.6 Luna (low reasoning) via ChatGPT Plus/Pro",
6167
- updateArgs: {
6168
- reasoning_effort: "low",
6169
- verbosity: "low",
6170
- context_window: 350000,
6171
- max_output_tokens: 128000,
6172
- parallel_tool_calls: true
6173
- }
6174
- },
6175
- {
6176
- id: "gpt-5.6-luna-plus-pro-medium",
6177
- handle: "chatgpt-plus-pro/gpt-5.6-luna",
6178
- label: "GPT-5.6 Luna (ChatGPT)",
6179
- description: "GPT-5.6 Luna (med reasoning) via ChatGPT Plus/Pro",
6180
- updateArgs: {
6181
- reasoning_effort: "medium",
6182
- verbosity: "low",
6183
- context_window: 350000,
6184
- max_output_tokens: 128000,
6185
- parallel_tool_calls: true
6186
- }
6187
- },
6188
- {
6189
- id: "gpt-5.6-luna-plus-pro-high",
6190
- handle: "chatgpt-plus-pro/gpt-5.6-luna",
6191
- label: "GPT-5.6 Luna (ChatGPT)",
6192
- description: "GPT-5.6 Luna (high reasoning) via ChatGPT Plus/Pro",
6193
- updateArgs: {
6194
- reasoning_effort: "high",
6195
- verbosity: "low",
6196
- context_window: 350000,
6197
- max_output_tokens: 128000,
6198
- parallel_tool_calls: true
6199
- },
6200
- isFeatured: true
6201
- },
6202
- {
6203
- id: "gpt-5.6-luna-plus-pro-xhigh",
6204
- handle: "chatgpt-plus-pro/gpt-5.6-luna",
6205
- label: "GPT-5.6 Luna (ChatGPT)",
6206
- description: "GPT-5.6 Luna (extra-high reasoning) via ChatGPT Plus/Pro",
6207
- updateArgs: {
6208
- reasoning_effort: "xhigh",
6209
- verbosity: "low",
6210
- context_window: 350000,
6211
- max_output_tokens: 128000,
6212
- parallel_tool_calls: true
6213
- }
6214
- },
6215
- {
6216
- id: "gpt-5.6-luna-plus-pro-max",
6217
- handle: "chatgpt-plus-pro/gpt-5.6-luna",
6218
- label: "GPT-5.6 Luna (ChatGPT)",
6219
- description: "GPT-5.6 Luna (max reasoning) via ChatGPT Plus/Pro",
6220
- updateArgs: {
6221
- reasoning_effort: "max",
6222
- verbosity: "low",
6223
- context_window: 350000,
6224
- max_output_tokens: 128000,
6225
- parallel_tool_calls: true
6226
- }
6227
- },
6228
- {
6229
- id: "fable",
6230
- handle: "anthropic/claude-fable-5",
6231
- label: "Fable 5",
6232
- description: "Fable 5 (high reasoning)",
6233
- isFeatured: true,
6234
- updateArgs: {
6235
- context_window: 200000,
6236
- max_output_tokens: 128000,
6237
- enable_reasoner: true,
6238
- reasoning_effort: "high",
6239
- parallel_tool_calls: true
6240
- }
6241
- },
6242
- {
6243
- id: "fable-low",
6244
- handle: "anthropic/claude-fable-5",
6245
- label: "Fable 5",
6246
- description: "Fable 5 (low reasoning)",
6247
- updateArgs: {
6248
- context_window: 200000,
6249
- max_output_tokens: 128000,
6250
- enable_reasoner: true,
6251
- reasoning_effort: "low",
6252
- max_reasoning_tokens: 4000,
6253
- parallel_tool_calls: true
6254
- }
6255
- },
6256
- {
6257
- id: "fable-medium",
6258
- handle: "anthropic/claude-fable-5",
6259
- label: "Fable 5",
6260
- description: "Fable 5 (med reasoning)",
6261
- updateArgs: {
6262
- context_window: 200000,
6263
- max_output_tokens: 128000,
6264
- enable_reasoner: true,
6265
- reasoning_effort: "medium",
6266
- max_reasoning_tokens: 12000,
6267
- parallel_tool_calls: true
6268
- }
6269
- },
6270
- {
6271
- id: "fable-xhigh",
6272
- handle: "anthropic/claude-fable-5",
6273
- label: "Fable 5",
6274
- description: "Fable 5 (extra-high reasoning)",
6275
- updateArgs: {
6276
- context_window: 200000,
6277
- max_output_tokens: 128000,
6278
- enable_reasoner: true,
6279
- reasoning_effort: "xhigh",
6280
- parallel_tool_calls: true
6281
- }
6282
- },
6283
- {
6284
- id: "fable-max",
6285
- handle: "anthropic/claude-fable-5",
6286
- label: "Fable 5",
6287
- description: "Fable 5 (max reasoning)",
6288
- updateArgs: {
6289
- context_window: 200000,
6290
- max_output_tokens: 128000,
6291
- enable_reasoner: true,
6292
- reasoning_effort: "max",
6293
- parallel_tool_calls: true
6294
- }
6295
- },
6296
- {
6297
- id: "fable-1m",
6298
- handle: "anthropic/claude-fable-5",
6299
- label: "Fable 5 1M",
6300
- description: "Claude Fable 5 with 1M token context window (high reasoning)",
6301
- updateArgs: {
6302
- context_window: 950000,
6303
- max_output_tokens: 128000,
6304
- enable_reasoner: true,
6305
- reasoning_effort: "high",
6306
- parallel_tool_calls: true
6307
- }
6308
- },
6309
- {
6310
- id: "fable-1m-low",
6311
- handle: "anthropic/claude-fable-5",
6312
- label: "Fable 5 1M",
6313
- description: "Fable 5 1M (low reasoning)",
6314
- updateArgs: {
6315
- context_window: 950000,
6316
- max_output_tokens: 128000,
6317
- enable_reasoner: true,
6318
- reasoning_effort: "low",
6319
- max_reasoning_tokens: 4000,
6320
- parallel_tool_calls: true
6321
- }
6322
- },
6323
- {
6324
- id: "fable-1m-medium",
6325
- handle: "anthropic/claude-fable-5",
6326
- label: "Fable 5 1M",
6327
- description: "Fable 5 1M (med reasoning)",
6328
- updateArgs: {
6329
- context_window: 950000,
6330
- max_output_tokens: 128000,
6331
- enable_reasoner: true,
6332
- reasoning_effort: "medium",
6333
- max_reasoning_tokens: 12000,
6334
- parallel_tool_calls: true
6335
- }
6336
- },
6337
- {
6338
- id: "fable-1m-xhigh",
6339
- handle: "anthropic/claude-fable-5",
6340
- label: "Fable 5 1M",
6341
- description: "Fable 5 1M (extra-high reasoning)",
6342
- updateArgs: {
6343
- context_window: 950000,
6344
- max_output_tokens: 128000,
6345
- enable_reasoner: true,
6346
- reasoning_effort: "xhigh",
6347
- parallel_tool_calls: true
6348
- }
6349
- },
6350
- {
6351
- id: "fable-1m-max",
6352
- handle: "anthropic/claude-fable-5",
6353
- label: "Fable 5 1M",
6354
- description: "Fable 5 1M (max reasoning)",
6355
- updateArgs: {
6356
- context_window: 950000,
6357
- max_output_tokens: 128000,
6358
- enable_reasoner: true,
6359
- reasoning_effort: "max",
6360
- parallel_tool_calls: true
6361
- }
6362
- },
6363
- {
6364
- id: "opus-5",
6365
- handle: "anthropic/claude-opus-5",
6366
- label: "Opus 5",
6367
- description: "Opus 5 (high reasoning)",
6368
- updateArgs: {
6369
- context_window: 200000,
6370
- max_output_tokens: 128000,
6371
- enable_reasoner: true,
6372
- reasoning_effort: "high",
6373
- parallel_tool_calls: true
6374
- }
6375
- },
6376
- {
6377
- id: "opus-5-low",
6378
- handle: "anthropic/claude-opus-5",
6379
- label: "Opus 5",
6380
- description: "Opus 5 (low reasoning)",
6381
- updateArgs: {
6382
- context_window: 200000,
6383
- max_output_tokens: 128000,
6384
- enable_reasoner: true,
6385
- reasoning_effort: "low",
6386
- max_reasoning_tokens: 4000,
6387
- parallel_tool_calls: true
6388
- }
6389
- },
6390
- {
6391
- id: "opus-5-medium",
6392
- handle: "anthropic/claude-opus-5",
6393
- label: "Opus 5",
6394
- description: "Opus 5 (med reasoning)",
6395
- updateArgs: {
6396
- context_window: 200000,
6397
- max_output_tokens: 128000,
6398
- enable_reasoner: true,
6399
- reasoning_effort: "medium",
6400
- max_reasoning_tokens: 12000,
6401
- parallel_tool_calls: true
6402
- }
6403
- },
6404
- {
6405
- id: "opus-5-xhigh",
6406
- handle: "anthropic/claude-opus-5",
6407
- label: "Opus 5",
6408
- description: "Opus 5 (extra-high reasoning)",
6409
- updateArgs: {
6410
- context_window: 200000,
6411
- max_output_tokens: 128000,
6412
- enable_reasoner: true,
6413
- reasoning_effort: "xhigh",
6414
- parallel_tool_calls: true
6415
- }
6416
- },
6417
- {
6418
- id: "opus-5-max",
6419
- handle: "anthropic/claude-opus-5",
6420
- label: "Opus 5",
6421
- description: "Opus 5 (max reasoning)",
6422
- updateArgs: {
6423
- context_window: 200000,
6424
- max_output_tokens: 128000,
6425
- enable_reasoner: true,
6426
- reasoning_effort: "max",
6427
- parallel_tool_calls: true
6428
- }
6429
- },
6430
- {
6431
- id: "opus",
6432
- handle: "anthropic/claude-opus-4-8",
6433
- label: "Opus 4.8",
6434
- description: "Opus 4.8 (high reasoning)",
6435
- isFeatured: true,
6436
- updateArgs: {
6437
- context_window: 200000,
6438
- max_output_tokens: 128000,
6439
- reasoning_effort: "high",
6440
- enable_reasoner: true,
6441
- parallel_tool_calls: true
6442
- }
6443
- },
6444
- {
6445
- id: "opus-4.8-low",
6446
- handle: "anthropic/claude-opus-4-8",
6447
- label: "Opus 4.8",
6448
- description: "Opus 4.8 (low reasoning)",
6449
- updateArgs: {
6450
- context_window: 200000,
6451
- max_output_tokens: 128000,
6452
- reasoning_effort: "low",
6453
- enable_reasoner: true,
6454
- max_reasoning_tokens: 4000,
6455
- parallel_tool_calls: true
6456
- }
6457
- },
6458
- {
6459
- id: "opus-4.8-medium",
6460
- handle: "anthropic/claude-opus-4-8",
6461
- label: "Opus 4.8",
6462
- description: "Opus 4.8 (med reasoning)",
6463
- updateArgs: {
6464
- context_window: 200000,
6465
- max_output_tokens: 128000,
6466
- reasoning_effort: "medium",
6467
- enable_reasoner: true,
6468
- max_reasoning_tokens: 12000,
6469
- parallel_tool_calls: true
6470
- }
6471
- },
6472
- {
6473
- id: "opus-4.8-high",
6474
- handle: "anthropic/claude-opus-4-8",
6475
- label: "Opus 4.8",
6476
- description: "Opus 4.8 (high reasoning)",
6477
- updateArgs: {
6478
- context_window: 200000,
6479
- max_output_tokens: 128000,
6480
- reasoning_effort: "high",
6481
- enable_reasoner: true,
6482
- parallel_tool_calls: true
6483
- }
6484
- },
6485
- {
6486
- id: "opus-4.8-xhigh",
6487
- handle: "anthropic/claude-opus-4-8",
6488
- label: "Opus 4.8",
6489
- description: "Opus 4.8 (extra-high reasoning)",
6490
- updateArgs: {
6491
- context_window: 200000,
6492
- max_output_tokens: 128000,
6493
- reasoning_effort: "xhigh",
6494
- enable_reasoner: true,
6495
- parallel_tool_calls: true
6496
- }
6497
- },
6498
- {
6499
- id: "opus-4.8-max",
6500
- handle: "anthropic/claude-opus-4-8",
6501
- label: "Opus 4.8",
6502
- description: "Opus 4.8 (max reasoning)",
6503
- updateArgs: {
6504
- context_window: 200000,
6505
- max_output_tokens: 128000,
6506
- reasoning_effort: "max",
6507
- enable_reasoner: true,
6508
- parallel_tool_calls: true
6509
- }
6510
- },
6511
- {
6512
- id: "opus-4.8-1m",
6513
- handle: "anthropic/claude-opus-4-8",
6514
- label: "Opus 4.8 1M",
6515
- description: "Claude Opus 4.8 with 1M token context window (high reasoning)",
6516
- updateArgs: {
6517
- context_window: 950000,
6518
- max_output_tokens: 128000,
6519
- reasoning_effort: "high",
6520
- enable_reasoner: true,
6521
- parallel_tool_calls: true
6522
- }
6523
- },
6524
- {
6525
- id: "opus-4.8-1m-no-reasoning",
6526
- handle: "anthropic/claude-opus-4-8",
6527
- label: "Opus 4.8 1M",
6528
- description: "Opus 4.8 1M with no reasoning (faster)",
6529
- updateArgs: {
6530
- context_window: 950000,
6531
- max_output_tokens: 128000,
6532
- reasoning_effort: "none",
6533
- enable_reasoner: false,
6534
- parallel_tool_calls: true
6535
- }
6536
- },
6537
- {
6538
- id: "opus-4.8-1m-low",
6539
- handle: "anthropic/claude-opus-4-8",
6540
- label: "Opus 4.8 1M",
6541
- description: "Opus 4.8 1M (low reasoning)",
6542
- updateArgs: {
6543
- context_window: 950000,
6544
- max_output_tokens: 128000,
6545
- reasoning_effort: "low",
6546
- enable_reasoner: true,
6547
- parallel_tool_calls: true,
6548
- max_reasoning_tokens: 4000
6549
- }
6550
- },
6551
- {
6552
- id: "opus-4.8-1m-medium",
6553
- handle: "anthropic/claude-opus-4-8",
6554
- label: "Opus 4.8 1M",
6555
- description: "Opus 4.8 1M (med reasoning)",
6556
- updateArgs: {
6557
- context_window: 950000,
6558
- max_output_tokens: 128000,
6559
- reasoning_effort: "medium",
6560
- enable_reasoner: true,
6561
- parallel_tool_calls: true,
6562
- max_reasoning_tokens: 12000
6563
- }
6564
- },
6565
- {
6566
- id: "opus-4.8-1m-xhigh",
6567
- handle: "anthropic/claude-opus-4-8",
6568
- label: "Opus 4.8 1M",
6569
- description: "Opus 4.8 1M (max reasoning)",
6570
- updateArgs: {
6571
- context_window: 950000,
6572
- max_output_tokens: 128000,
6573
- reasoning_effort: "xhigh",
6574
- enable_reasoner: true,
6575
- parallel_tool_calls: true
6576
- }
6577
- },
6578
- {
6579
- id: "opus-1m",
6580
- handle: "anthropic/claude-opus-4-6",
6581
- label: "Opus 4.6 1M",
6582
- description: "Claude Opus 4.6 with 1M token context window (high reasoning)",
6583
- updateArgs: {
6584
- context_window: 950000,
6585
- max_output_tokens: 128000,
6586
- reasoning_effort: "high",
6587
- enable_reasoner: true,
6588
- parallel_tool_calls: true
6589
- }
6590
- },
6591
- {
6592
- id: "opus-1m-no-reasoning",
6593
- handle: "anthropic/claude-opus-4-6",
6594
- label: "Opus 4.6 1M",
6595
- description: "Opus 4.6 1M with no reasoning (faster)",
6596
- updateArgs: {
6597
- context_window: 950000,
6598
- max_output_tokens: 128000,
6599
- reasoning_effort: "none",
6600
- enable_reasoner: false,
6601
- parallel_tool_calls: true
6602
- }
6603
- },
6604
- {
6605
- id: "opus-1m-low",
6606
- handle: "anthropic/claude-opus-4-6",
6607
- label: "Opus 4.6 1M",
6608
- description: "Opus 4.6 1M (low reasoning)",
6609
- updateArgs: {
6610
- context_window: 950000,
6611
- max_output_tokens: 128000,
6612
- reasoning_effort: "low",
6613
- enable_reasoner: true,
6614
- max_reasoning_tokens: 4000,
6615
- parallel_tool_calls: true
6616
- }
6617
- },
6618
- {
6619
- id: "opus-1m-medium",
6620
- handle: "anthropic/claude-opus-4-6",
6621
- label: "Opus 4.6 1M",
6622
- description: "Opus 4.6 1M (med reasoning)",
6623
- updateArgs: {
6624
- context_window: 950000,
6625
- max_output_tokens: 128000,
6626
- reasoning_effort: "medium",
6627
- enable_reasoner: true,
6628
- max_reasoning_tokens: 12000,
6629
- parallel_tool_calls: true
6630
- }
6631
- },
6632
- {
6633
- id: "opus-1m-xhigh",
6634
- handle: "anthropic/claude-opus-4-6",
6635
- label: "Opus 4.6 1M",
6636
- description: "Opus 4.6 1M (max reasoning)",
6637
- updateArgs: {
6638
- context_window: 950000,
6639
- max_output_tokens: 128000,
6640
- reasoning_effort: "xhigh",
6641
- enable_reasoner: true,
6642
- parallel_tool_calls: true
6643
- }
6644
- },
6645
- {
6646
- id: "sonnet",
6647
- handle: "anthropic/claude-sonnet-5",
6648
- label: "Sonnet 5",
6649
- description: "Sonnet 5 (high reasoning)",
6650
- isFeatured: true,
6651
- updateArgs: {
6652
- context_window: 1e6,
6653
- max_output_tokens: 128000,
6654
- reasoning_effort: "high",
6655
- enable_reasoner: true,
6656
- parallel_tool_calls: true
6657
- }
6658
- },
6659
- {
6660
- id: "sonnet-5-no-reasoning",
6661
- handle: "anthropic/claude-sonnet-5",
6662
- label: "Sonnet 5",
6663
- description: "Sonnet 5 with no reasoning (faster)",
6664
- updateArgs: {
6665
- context_window: 1e6,
6666
- max_output_tokens: 128000,
6667
- reasoning_effort: "none",
6668
- enable_reasoner: false,
6669
- parallel_tool_calls: true
6670
- }
6671
- },
6672
- {
6673
- id: "sonnet-5-low",
6674
- handle: "anthropic/claude-sonnet-5",
6675
- label: "Sonnet 5",
6676
- description: "Sonnet 5 (low reasoning)",
6677
- updateArgs: {
6678
- context_window: 1e6,
6679
- max_output_tokens: 128000,
6680
- reasoning_effort: "low",
6681
- enable_reasoner: true,
6682
- max_reasoning_tokens: 4000,
6683
- parallel_tool_calls: true
6684
- }
6685
- },
6686
- {
6687
- id: "sonnet-5-medium",
6688
- handle: "anthropic/claude-sonnet-5",
6689
- label: "Sonnet 5",
6690
- description: "Sonnet 5 (med reasoning)",
6691
- updateArgs: {
6692
- context_window: 1e6,
6693
- max_output_tokens: 128000,
6694
- reasoning_effort: "medium",
6695
- enable_reasoner: true,
6696
- max_reasoning_tokens: 12000,
6697
- parallel_tool_calls: true
6698
- }
6699
- },
6700
- {
6701
- id: "sonnet-5-xhigh",
6702
- handle: "anthropic/claude-sonnet-5",
6703
- label: "Sonnet 5",
6704
- description: "Sonnet 5 (extra-high reasoning)",
6705
- updateArgs: {
6706
- context_window: 1e6,
6707
- max_output_tokens: 128000,
6708
- reasoning_effort: "xhigh",
6709
- enable_reasoner: true,
6710
- parallel_tool_calls: true
6711
- }
6712
- },
6713
- {
6714
- id: "sonnet-5-max",
6715
- handle: "anthropic/claude-sonnet-5",
6716
- label: "Sonnet 5",
6717
- description: "Sonnet 5 (max reasoning)",
6718
- updateArgs: {
6719
- context_window: 1e6,
6720
- max_output_tokens: 128000,
6721
- reasoning_effort: "max",
6722
- enable_reasoner: true,
6723
- parallel_tool_calls: true
6724
- }
6725
- },
6726
- {
6727
- id: "sonnet-4.6",
6728
- handle: "anthropic/claude-sonnet-4-6",
6729
- label: "Sonnet 4.6",
6730
- description: "Sonnet 4.6 (high reasoning)",
6731
- updateArgs: {
6732
- context_window: 200000,
6733
- max_output_tokens: 128000,
6734
- reasoning_effort: "high",
6735
- enable_reasoner: true,
6736
- parallel_tool_calls: true
6737
- }
6738
- },
6739
- {
6740
- id: "sonnet-4.6-no-reasoning",
6741
- handle: "anthropic/claude-sonnet-4-6",
6742
- label: "Sonnet 4.6",
6743
- description: "Sonnet 4.6 with no reasoning (faster)",
6744
- updateArgs: {
6745
- context_window: 200000,
6746
- max_output_tokens: 128000,
6747
- reasoning_effort: "none",
6748
- enable_reasoner: false,
6749
- parallel_tool_calls: true
6750
- }
6751
- },
6752
- {
6753
- id: "sonnet-4.6-low",
6754
- handle: "anthropic/claude-sonnet-4-6",
6755
- label: "Sonnet 4.6",
6756
- description: "Sonnet 4.6 (low reasoning)",
6757
- updateArgs: {
6758
- context_window: 200000,
6759
- max_output_tokens: 128000,
6760
- reasoning_effort: "low",
6761
- enable_reasoner: true,
6762
- max_reasoning_tokens: 4000,
6763
- parallel_tool_calls: true
6764
- }
6765
- },
6766
- {
6767
- id: "sonnet-4.6-medium",
6768
- handle: "anthropic/claude-sonnet-4-6",
6769
- label: "Sonnet 4.6",
6770
- description: "Sonnet 4.6 (med reasoning)",
6771
- updateArgs: {
6772
- context_window: 200000,
6773
- max_output_tokens: 128000,
6774
- reasoning_effort: "medium",
6775
- enable_reasoner: true,
6776
- max_reasoning_tokens: 12000,
6777
- parallel_tool_calls: true
6778
- }
6779
- },
6780
- {
6781
- id: "sonnet-4.6-xhigh",
6782
- handle: "anthropic/claude-sonnet-4-6",
6783
- label: "Sonnet 4.6",
6784
- description: "Sonnet 4.6 (max reasoning)",
6785
- updateArgs: {
6786
- context_window: 200000,
6787
- max_output_tokens: 128000,
6788
- reasoning_effort: "xhigh",
6789
- enable_reasoner: true,
6790
- parallel_tool_calls: true
6791
- }
6792
- },
6793
- {
6794
- id: "sonnet-1m",
6795
- handle: "anthropic/claude-sonnet-4-6",
6796
- label: "Sonnet 4.6 1M",
6797
- description: "Claude Sonnet 4.6 with 1M token context window (high reasoning)",
6798
- updateArgs: {
6799
- context_window: 9500000,
6800
- max_output_tokens: 128000,
6801
- reasoning_effort: "high",
6802
- enable_reasoner: true,
6803
- parallel_tool_calls: true
6804
- }
6805
- },
6806
- {
6807
- id: "sonnet-1m-no-reasoning",
6808
- handle: "anthropic/claude-sonnet-4-6",
6809
- label: "Sonnet 4.6 1M",
6810
- description: "Sonnet 4.6 1M with no reasoning (faster)",
6811
- updateArgs: {
6812
- context_window: 9500000,
6813
- max_output_tokens: 128000,
6814
- reasoning_effort: "none",
6815
- enable_reasoner: false,
6816
- parallel_tool_calls: true
6817
- }
6818
- },
6819
- {
6820
- id: "sonnet-1m-low",
6821
- handle: "anthropic/claude-sonnet-4-6",
6822
- label: "Sonnet 4.6 1M",
6823
- description: "Sonnet 4.6 1M (low reasoning)",
6824
- updateArgs: {
6825
- context_window: 9500000,
6826
- max_output_tokens: 128000,
6827
- reasoning_effort: "low",
6828
- enable_reasoner: true,
6829
- max_reasoning_tokens: 4000,
6830
- parallel_tool_calls: true
6831
- }
6832
- },
6833
- {
6834
- id: "sonnet-1m-medium",
6835
- handle: "anthropic/claude-sonnet-4-6",
6836
- label: "Sonnet 4.6 1M",
6837
- description: "Sonnet 4.6 1M (med reasoning)",
6838
- updateArgs: {
6839
- context_window: 9500000,
6840
- max_output_tokens: 128000,
6841
- reasoning_effort: "medium",
6842
- enable_reasoner: true,
6843
- max_reasoning_tokens: 12000,
6844
- parallel_tool_calls: true
6845
- }
6846
- },
6847
- {
6848
- id: "sonnet-1m-xhigh",
6849
- handle: "anthropic/claude-sonnet-4-6",
6850
- label: "Sonnet 4.6 1M",
6851
- description: "Sonnet 4.6 1M (max reasoning)",
6852
- updateArgs: {
6853
- context_window: 9500000,
6854
- max_output_tokens: 128000,
6855
- reasoning_effort: "xhigh",
6856
- enable_reasoner: true,
6857
- parallel_tool_calls: true
6858
- }
6859
- },
6860
- {
6861
- id: "opus-4.6-high",
6862
- handle: "anthropic/claude-opus-4-6",
6863
- label: "Opus 4.6",
6864
- description: "Opus 4.6 (high reasoning)",
6865
- updateArgs: {
6866
- context_window: 200000,
6867
- max_output_tokens: 128000,
6868
- reasoning_effort: "high",
6869
- enable_reasoner: true,
6870
- parallel_tool_calls: true
6871
- }
6872
- },
6873
- {
6874
- id: "opus-4.6-no-reasoning",
6875
- handle: "anthropic/claude-opus-4-6",
6876
- label: "Opus 4.6",
6877
- description: "Opus 4.6 with no reasoning (faster)",
6878
- updateArgs: {
6879
- context_window: 200000,
6880
- max_output_tokens: 128000,
6881
- reasoning_effort: "none",
6882
- enable_reasoner: false,
6883
- parallel_tool_calls: true
6884
- }
6885
- },
6886
- {
6887
- id: "opus-4.6-low",
6888
- handle: "anthropic/claude-opus-4-6",
6889
- label: "Opus 4.6",
6890
- description: "Opus 4.6 (low reasoning)",
6891
- updateArgs: {
6892
- context_window: 200000,
6893
- max_output_tokens: 128000,
6894
- reasoning_effort: "low",
6895
- enable_reasoner: true,
6896
- max_reasoning_tokens: 4000,
6897
- parallel_tool_calls: true
6898
- }
6899
- },
6900
- {
6901
- id: "opus-4.6-medium",
6902
- handle: "anthropic/claude-opus-4-6",
6903
- label: "Opus 4.6",
6904
- description: "Opus 4.6 (med reasoning)",
6905
- updateArgs: {
6906
- context_window: 200000,
6907
- max_output_tokens: 128000,
6908
- reasoning_effort: "medium",
6909
- enable_reasoner: true,
6910
- max_reasoning_tokens: 12000,
6911
- parallel_tool_calls: true
6912
- }
6913
- },
6914
- {
6915
- id: "opus-4.6-xhigh",
6916
- handle: "anthropic/claude-opus-4-6",
6917
- label: "Opus 4.6",
6918
- description: "Opus 4.6 (max reasoning)",
6919
- updateArgs: {
6920
- context_window: 200000,
6921
- max_output_tokens: 128000,
6922
- reasoning_effort: "xhigh",
6923
- enable_reasoner: true,
6924
- parallel_tool_calls: true
6925
- }
6926
- },
6927
- {
6928
- id: "opus-4.7-medium",
6929
- handle: "anthropic/claude-opus-4-7",
6930
- label: "Opus 4.7",
6931
- description: "Opus 4.7 (med reasoning)",
6932
- updateArgs: {
6933
- context_window: 200000,
6934
- max_output_tokens: 128000,
6935
- reasoning_effort: "medium",
6936
- enable_reasoner: true,
6937
- max_reasoning_tokens: 12000,
6938
- parallel_tool_calls: true
6939
- }
6940
- },
6941
- {
6942
- id: "opus-4.7-low",
6943
- handle: "anthropic/claude-opus-4-7",
6944
- label: "Opus 4.7",
6945
- description: "Opus 4.7 (low reasoning)",
6946
- updateArgs: {
6947
- context_window: 200000,
6948
- max_output_tokens: 128000,
6949
- reasoning_effort: "low",
6950
- enable_reasoner: true,
6951
- max_reasoning_tokens: 4000,
6952
- parallel_tool_calls: true
6953
- }
6954
- },
6955
- {
6956
- id: "opus-4.7-high",
6957
- handle: "anthropic/claude-opus-4-7",
6958
- label: "Opus 4.7",
6959
- description: "Opus 4.7 (high reasoning)",
6960
- updateArgs: {
6961
- context_window: 200000,
6962
- max_output_tokens: 128000,
6963
- reasoning_effort: "high",
6964
- enable_reasoner: true,
6965
- parallel_tool_calls: true
6966
- }
6967
- },
6968
- {
6969
- id: "opus-4.7-xhigh",
6970
- handle: "anthropic/claude-opus-4-7",
6971
- label: "Opus 4.7",
6972
- description: "Opus 4.7 (extra-high reasoning)",
6973
- updateArgs: {
6974
- context_window: 200000,
6975
- max_output_tokens: 128000,
6976
- reasoning_effort: "xhigh",
6977
- enable_reasoner: true,
6978
- parallel_tool_calls: true
6979
- }
6980
- },
6981
- {
6982
- id: "opus-4.7-max",
6983
- handle: "anthropic/claude-opus-4-7",
6984
- label: "Opus 4.7",
6985
- description: "Opus 4.7 (max reasoning)",
6986
- updateArgs: {
6987
- context_window: 200000,
6988
- max_output_tokens: 128000,
6989
- reasoning_effort: "max",
6990
- enable_reasoner: true,
6991
- parallel_tool_calls: true
6992
- }
6993
- },
6994
- {
6995
- id: "opus-4.5",
6996
- handle: "anthropic/claude-opus-4-5-20251101",
6997
- label: "Opus 4.5",
6998
- description: "Opus 4.5 (high reasoning)",
6999
- updateArgs: {
7000
- context_window: 180000,
7001
- max_output_tokens: 64000,
7002
- reasoning_effort: "high",
7003
- enable_reasoner: true,
7004
- max_reasoning_tokens: 31999,
7005
- parallel_tool_calls: true
7006
- }
7007
- },
7008
- {
7009
- id: "opus-4.5-no-reasoning",
7010
- handle: "anthropic/claude-opus-4-5-20251101",
7011
- label: "Opus 4.5",
7012
- description: "Opus 4.5 with no reasoning (faster)",
7013
- updateArgs: {
7014
- context_window: 180000,
7015
- max_output_tokens: 64000,
7016
- reasoning_effort: "none",
7017
- enable_reasoner: false,
7018
- parallel_tool_calls: true
7019
- }
7020
- },
7021
- {
7022
- id: "opus-4.5-low",
7023
- handle: "anthropic/claude-opus-4-5-20251101",
7024
- label: "Opus 4.5",
7025
- description: "Opus 4.5 (low reasoning)",
7026
- updateArgs: {
7027
- context_window: 180000,
7028
- max_output_tokens: 64000,
7029
- reasoning_effort: "low",
7030
- enable_reasoner: true,
7031
- max_reasoning_tokens: 4000,
7032
- parallel_tool_calls: true
7033
- }
7034
- },
7035
- {
7036
- id: "opus-4.5-medium",
7037
- handle: "anthropic/claude-opus-4-5-20251101",
7038
- label: "Opus 4.5",
7039
- description: "Opus 4.5 (med reasoning)",
7040
- updateArgs: {
7041
- context_window: 180000,
7042
- max_output_tokens: 64000,
7043
- reasoning_effort: "medium",
7044
- enable_reasoner: true,
7045
- max_reasoning_tokens: 12000,
7046
- parallel_tool_calls: true
7047
- }
7048
- },
7049
- {
7050
- id: "bedrock-opus-4.5",
7051
- handle: "bedrock/us.anthropic.claude-opus-4-5-20251101-v1:0",
7052
- label: "Bedrock Opus 4.5",
7053
- shortLabel: "Opus 4.5 BR",
7054
- description: "Opus 4.5 via AWS Bedrock",
7055
- updateArgs: {
7056
- context_window: 180000,
7057
- max_output_tokens: 64000,
7058
- max_reasoning_tokens: 31999,
7059
- parallel_tool_calls: true
7060
- }
7061
- },
7062
- {
7063
- id: "haiku",
7064
- handle: "anthropic/claude-haiku-4-5",
7065
- label: "Haiku 4.5",
7066
- description: "Haiku 4.5",
7067
- updateArgs: {
7068
- context_window: 180000,
7069
- max_output_tokens: 64000,
7070
- parallel_tool_calls: true
7071
- }
7072
- },
7073
- {
7074
- id: "gpt-5.5-plus-pro-none",
7075
- handle: "chatgpt-plus-pro/gpt-5.5",
7076
- label: "GPT-5.5 (ChatGPT)",
7077
- description: "GPT-5.5 (no reasoning) via ChatGPT Plus/Pro",
7078
- updateArgs: {
7079
- reasoning_effort: "none",
7080
- verbosity: "low",
7081
- context_window: 272000,
7082
- max_output_tokens: 128000,
7083
- parallel_tool_calls: true
7084
- }
7085
- },
7086
- {
7087
- id: "gpt-5.5-plus-pro-low",
7088
- handle: "chatgpt-plus-pro/gpt-5.5",
7089
- label: "GPT-5.5 (ChatGPT)",
7090
- description: "GPT-5.5 (low reasoning) via ChatGPT Plus/Pro",
7091
- updateArgs: {
7092
- reasoning_effort: "low",
7093
- verbosity: "low",
7094
- context_window: 272000,
7095
- max_output_tokens: 128000,
7096
- parallel_tool_calls: true
7097
- }
7098
- },
7099
- {
7100
- id: "gpt-5.5-plus-pro-medium",
7101
- handle: "chatgpt-plus-pro/gpt-5.5",
7102
- label: "GPT-5.5 (ChatGPT)",
7103
- description: "GPT-5.5 (med reasoning) via ChatGPT Plus/Pro",
7104
- updateArgs: {
7105
- reasoning_effort: "medium",
7106
- verbosity: "low",
7107
- context_window: 272000,
7108
- max_output_tokens: 128000,
7109
- parallel_tool_calls: true
7110
- }
7111
- },
7112
- {
7113
- id: "gpt-5.5-plus-pro-high",
7114
- handle: "chatgpt-plus-pro/gpt-5.5",
7115
- label: "GPT-5.5 (ChatGPT)",
7116
- description: "OpenAI's most capable model (high reasoning) via ChatGPT Plus/Pro",
7117
- updateArgs: {
7118
- reasoning_effort: "high",
7119
- verbosity: "low",
7120
- context_window: 272000,
7121
- max_output_tokens: 128000,
7122
- parallel_tool_calls: true
7123
- }
7124
- },
7125
- {
7126
- id: "gpt-5.5-plus-pro-xhigh",
7127
- handle: "chatgpt-plus-pro/gpt-5.5",
7128
- label: "GPT-5.5 (ChatGPT)",
7129
- description: "GPT-5.5 (max reasoning) via ChatGPT Plus/Pro",
7130
- updateArgs: {
7131
- reasoning_effort: "xhigh",
7132
- verbosity: "low",
7133
- context_window: 272000,
7134
- max_output_tokens: 128000,
7135
- parallel_tool_calls: true
7136
- }
7137
- },
7138
- {
7139
- id: "gpt-5.5-fast-plus-pro-none",
7140
- handle: "chatgpt-plus-pro/gpt-5.5-fast",
7141
- label: "GPT-5.5 Fast (ChatGPT)",
7142
- description: "GPT-5.5 Fast (no reasoning) via ChatGPT Plus/Pro",
7143
- updateArgs: {
7144
- reasoning_effort: "none",
7145
- verbosity: "low",
7146
- context_window: 272000,
7147
- max_output_tokens: 128000,
7148
- parallel_tool_calls: true
7149
- }
7150
- },
7151
- {
7152
- id: "gpt-5.5-fast-plus-pro-low",
7153
- handle: "chatgpt-plus-pro/gpt-5.5-fast",
7154
- label: "GPT-5.5 Fast (ChatGPT)",
7155
- description: "GPT-5.5 Fast (low reasoning) via ChatGPT Plus/Pro",
7156
- updateArgs: {
7157
- reasoning_effort: "low",
7158
- verbosity: "low",
7159
- context_window: 272000,
7160
- max_output_tokens: 128000,
7161
- parallel_tool_calls: true
7162
- }
7163
- },
7164
- {
7165
- id: "gpt-5.5-fast-plus-pro-medium",
7166
- handle: "chatgpt-plus-pro/gpt-5.5-fast",
7167
- label: "GPT-5.5 Fast (ChatGPT)",
7168
- description: "GPT-5.5 Fast (med reasoning) via ChatGPT Plus/Pro",
7169
- updateArgs: {
7170
- reasoning_effort: "medium",
7171
- verbosity: "low",
7172
- context_window: 272000,
7173
- max_output_tokens: 128000,
7174
- parallel_tool_calls: true
7175
- }
7176
- },
7177
- {
7178
- id: "gpt-5.5-fast-plus-pro-high",
7179
- handle: "chatgpt-plus-pro/gpt-5.5-fast",
7180
- label: "GPT-5.5 Fast (ChatGPT)",
7181
- description: "GPT-5.5 Fast (high reasoning) via ChatGPT Plus/Pro",
7182
- updateArgs: {
7183
- reasoning_effort: "high",
7184
- verbosity: "low",
7185
- context_window: 272000,
7186
- max_output_tokens: 128000,
7187
- parallel_tool_calls: true
7188
- }
7189
- },
7190
- {
7191
- id: "gpt-5.5-fast-plus-pro-xhigh",
7192
- handle: "chatgpt-plus-pro/gpt-5.5-fast",
7193
- label: "GPT-5.5 Fast (ChatGPT)",
7194
- description: "GPT-5.5 Fast (max reasoning) via ChatGPT Plus/Pro",
7195
- updateArgs: {
7196
- reasoning_effort: "xhigh",
7197
- verbosity: "low",
7198
- context_window: 272000,
7199
- max_output_tokens: 128000,
7200
- parallel_tool_calls: true
7201
- }
7202
- },
7203
- {
7204
- id: "gpt-5.4-plus-pro-none",
7205
- handle: "chatgpt-plus-pro/gpt-5.4",
7206
- label: "GPT-5.4 (ChatGPT)",
7207
- description: "GPT-5.4 (no reasoning) via ChatGPT Plus/Pro",
7208
- updateArgs: {
7209
- reasoning_effort: "none",
7210
- verbosity: "low",
7211
- context_window: 272000,
7212
- max_output_tokens: 128000,
7213
- parallel_tool_calls: true
7214
- }
7215
- },
7216
- {
7217
- id: "gpt-5.4-plus-pro-low",
7218
- handle: "chatgpt-plus-pro/gpt-5.4",
7219
- label: "GPT-5.4 (ChatGPT)",
7220
- description: "GPT-5.4 (low reasoning) via ChatGPT Plus/Pro",
7221
- updateArgs: {
7222
- reasoning_effort: "low",
7223
- verbosity: "low",
7224
- context_window: 272000,
7225
- max_output_tokens: 128000,
7226
- parallel_tool_calls: true
7227
- }
7228
- },
7229
- {
7230
- id: "gpt-5.4-plus-pro-medium",
7231
- handle: "chatgpt-plus-pro/gpt-5.4",
7232
- label: "GPT-5.4 (ChatGPT)",
7233
- description: "GPT-5.4 (med reasoning) via ChatGPT Plus/Pro",
7234
- updateArgs: {
7235
- reasoning_effort: "medium",
7236
- verbosity: "low",
7237
- context_window: 272000,
7238
- max_output_tokens: 128000,
7239
- parallel_tool_calls: true
7240
- }
7241
- },
7242
- {
7243
- id: "gpt-5.4-plus-pro-high",
7244
- handle: "chatgpt-plus-pro/gpt-5.4",
7245
- label: "GPT-5.4 (ChatGPT)",
7246
- description: "OpenAI's most capable model (high reasoning) via ChatGPT Plus/Pro",
7247
- updateArgs: {
7248
- reasoning_effort: "high",
7249
- verbosity: "low",
7250
- context_window: 272000,
7251
- max_output_tokens: 128000,
7252
- parallel_tool_calls: true
7253
- }
7254
- },
7255
- {
7256
- id: "gpt-5.4-plus-pro-xhigh",
7257
- handle: "chatgpt-plus-pro/gpt-5.4",
7258
- label: "GPT-5.4 (ChatGPT)",
7259
- description: "GPT-5.4 (max reasoning) via ChatGPT Plus/Pro",
7260
- updateArgs: {
7261
- reasoning_effort: "xhigh",
7262
- verbosity: "low",
7263
- context_window: 272000,
7264
- max_output_tokens: 128000,
7265
- parallel_tool_calls: true
7266
- }
7267
- },
7268
- {
7269
- id: "gpt-5.4-pro-plus-pro-medium",
7270
- handle: "chatgpt-plus-pro/gpt-5.4-pro",
7271
- label: "GPT-5.4 Pro (ChatGPT)",
7272
- description: "GPT-5.4 Pro (med reasoning) via ChatGPT Plus/Pro",
7273
- updateArgs: {
7274
- reasoning_effort: "medium",
7275
- verbosity: "low",
7276
- context_window: 272000,
7277
- max_output_tokens: 128000,
7278
- parallel_tool_calls: true
7279
- }
7280
- },
7281
- {
7282
- id: "gpt-5.4-pro-plus-pro-high",
7283
- handle: "chatgpt-plus-pro/gpt-5.4-pro",
7284
- label: "GPT-5.4 Pro (ChatGPT)",
7285
- description: "GPT-5.4 Pro (high reasoning) via ChatGPT Plus/Pro",
7286
- updateArgs: {
7287
- reasoning_effort: "high",
7288
- verbosity: "low",
7289
- context_window: 272000,
7290
- max_output_tokens: 128000,
7291
- parallel_tool_calls: true
7292
- }
7293
- },
7294
- {
7295
- id: "gpt-5.4-pro-plus-pro-xhigh",
7296
- handle: "chatgpt-plus-pro/gpt-5.4-pro",
7297
- label: "GPT-5.4 Pro (ChatGPT)",
7298
- description: "GPT-5.4 Pro (max reasoning) via ChatGPT Plus/Pro",
7299
- updateArgs: {
7300
- reasoning_effort: "xhigh",
7301
- verbosity: "low",
7302
- context_window: 272000,
7303
- max_output_tokens: 128000,
7304
- parallel_tool_calls: true
7305
- }
7306
- },
7307
- {
7308
- id: "gpt-5.4-fast-plus-pro-none",
7309
- handle: "chatgpt-plus-pro/gpt-5.4-fast",
7310
- label: "GPT-5.4 Fast (ChatGPT)",
7311
- description: "GPT-5.4 Fast (no reasoning) via ChatGPT Plus/Pro",
7312
- updateArgs: {
7313
- reasoning_effort: "none",
7314
- verbosity: "low",
7315
- context_window: 272000,
7316
- max_output_tokens: 128000,
7317
- parallel_tool_calls: true
7318
- }
7319
- },
7320
- {
7321
- id: "gpt-5.4-fast-plus-pro-low",
7322
- handle: "chatgpt-plus-pro/gpt-5.4-fast",
7323
- label: "GPT-5.4 Fast (ChatGPT)",
7324
- description: "GPT-5.4 Fast (low reasoning) via ChatGPT Plus/Pro",
7325
- updateArgs: {
7326
- reasoning_effort: "low",
7327
- verbosity: "low",
7328
- context_window: 272000,
7329
- max_output_tokens: 128000,
7330
- parallel_tool_calls: true
7331
- }
7332
- },
7333
- {
7334
- id: "gpt-5.4-fast-plus-pro-medium",
7335
- handle: "chatgpt-plus-pro/gpt-5.4-fast",
7336
- label: "GPT-5.4 Fast (ChatGPT)",
7337
- description: "GPT-5.4 Fast (med reasoning) via ChatGPT Plus/Pro",
7338
- updateArgs: {
7339
- reasoning_effort: "medium",
7340
- verbosity: "low",
7341
- context_window: 272000,
7342
- max_output_tokens: 128000,
7343
- parallel_tool_calls: true
7344
- }
7345
- },
7346
- {
7347
- id: "gpt-5.4-fast-plus-pro-high",
7348
- handle: "chatgpt-plus-pro/gpt-5.4-fast",
7349
- label: "GPT-5.4 Fast (ChatGPT)",
7350
- description: "GPT-5.4 Fast (high reasoning) via ChatGPT Plus/Pro",
7351
- updateArgs: {
7352
- reasoning_effort: "high",
7353
- verbosity: "low",
7354
- context_window: 272000,
7355
- max_output_tokens: 128000,
7356
- parallel_tool_calls: true
7357
- }
7358
- },
7359
- {
7360
- id: "gpt-5.4-fast-plus-pro-xhigh",
7361
- handle: "chatgpt-plus-pro/gpt-5.4-fast",
7362
- label: "GPT-5.4 Fast (ChatGPT)",
7363
- description: "GPT-5.4 Fast (max reasoning) via ChatGPT Plus/Pro",
7364
- updateArgs: {
7365
- reasoning_effort: "xhigh",
7366
- verbosity: "low",
7367
- context_window: 272000,
7368
- max_output_tokens: 128000,
7369
- parallel_tool_calls: true
7370
- }
7371
- },
7372
- {
7373
- id: "gpt-5.4-mini-plus-pro-none",
7374
- handle: "chatgpt-plus-pro/gpt-5.4-mini",
7375
- label: "GPT-5.4 Mini (ChatGPT)",
7376
- description: "GPT-5.4 Mini (no reasoning) via ChatGPT Plus/Pro",
7377
- updateArgs: {
7378
- reasoning_effort: "none",
7379
- verbosity: "low",
7380
- context_window: 272000,
7381
- max_output_tokens: 128000,
7382
- parallel_tool_calls: true
7383
- }
7384
- },
7385
- {
7386
- id: "gpt-5.4-mini-plus-pro-low",
7387
- handle: "chatgpt-plus-pro/gpt-5.4-mini",
7388
- label: "GPT-5.4 Mini (ChatGPT)",
7389
- description: "GPT-5.4 Mini (low reasoning) via ChatGPT Plus/Pro",
7390
- updateArgs: {
7391
- reasoning_effort: "low",
7392
- verbosity: "low",
7393
- context_window: 272000,
7394
- max_output_tokens: 128000,
7395
- parallel_tool_calls: true
7396
- }
7397
- },
7398
- {
7399
- id: "gpt-5.4-mini-plus-pro-medium",
7400
- handle: "chatgpt-plus-pro/gpt-5.4-mini",
7401
- label: "GPT-5.4 Mini (ChatGPT)",
7402
- description: "GPT-5.4 Mini (med reasoning) via ChatGPT Plus/Pro",
7403
- updateArgs: {
7404
- reasoning_effort: "medium",
7405
- verbosity: "low",
7406
- context_window: 272000,
7407
- max_output_tokens: 128000,
7408
- parallel_tool_calls: true
7409
- }
7410
- },
7411
- {
7412
- id: "gpt-5.4-mini-plus-pro-high",
7413
- handle: "chatgpt-plus-pro/gpt-5.4-mini",
7414
- label: "GPT-5.4 Mini (ChatGPT)",
7415
- description: "GPT-5.4 Mini (high reasoning) via ChatGPT Plus/Pro",
7416
- updateArgs: {
7417
- reasoning_effort: "high",
7418
- verbosity: "low",
7419
- context_window: 272000,
7420
- max_output_tokens: 128000,
7421
- parallel_tool_calls: true
7422
- }
7423
- },
7424
- {
7425
- id: "gpt-5.4-mini-plus-pro-xhigh",
7426
- handle: "chatgpt-plus-pro/gpt-5.4-mini",
7427
- label: "GPT-5.4 Mini (ChatGPT)",
7428
- description: "GPT-5.4 Mini (max reasoning) via ChatGPT Plus/Pro",
7429
- updateArgs: {
7430
- reasoning_effort: "xhigh",
7431
- verbosity: "low",
7432
- context_window: 272000,
7433
- max_output_tokens: 128000,
7434
- parallel_tool_calls: true
7435
- }
7436
- },
7437
- {
7438
- id: "gpt-5.3-codex-spark-plus-pro-none",
7439
- handle: "chatgpt-plus-pro/gpt-5.3-codex-spark",
7440
- label: "GPT-5.3 Codex Spark (ChatGPT)",
7441
- description: "GPT-5.3 Codex Spark (no reasoning) via ChatGPT Plus/Pro",
7442
- updateArgs: {
7443
- reasoning_effort: "none",
7444
- verbosity: "low",
7445
- context_window: 128000,
7446
- max_output_tokens: 128000,
7447
- parallel_tool_calls: true
7448
- }
7449
- },
7450
- {
7451
- id: "gpt-5.3-codex-spark-plus-pro-low",
7452
- handle: "chatgpt-plus-pro/gpt-5.3-codex-spark",
7453
- label: "GPT-5.3 Codex Spark (ChatGPT)",
7454
- description: "GPT-5.3 Codex Spark (low reasoning) via ChatGPT Plus/Pro",
7455
- updateArgs: {
7456
- reasoning_effort: "low",
7457
- verbosity: "low",
7458
- context_window: 128000,
7459
- max_output_tokens: 128000,
7460
- parallel_tool_calls: true
7461
- }
7462
- },
7463
- {
7464
- id: "gpt-5.3-codex-spark-plus-pro-medium",
7465
- handle: "chatgpt-plus-pro/gpt-5.3-codex-spark",
7466
- label: "GPT-5.3 Codex Spark (ChatGPT)",
7467
- description: "GPT-5.3 Codex Spark (med reasoning) via ChatGPT Plus/Pro",
7468
- updateArgs: {
7469
- reasoning_effort: "medium",
7470
- verbosity: "low",
7471
- context_window: 128000,
7472
- max_output_tokens: 128000,
7473
- parallel_tool_calls: true
7474
- }
7475
- },
7476
- {
7477
- id: "gpt-5.3-codex-spark-plus-pro-high",
7478
- handle: "chatgpt-plus-pro/gpt-5.3-codex-spark",
7479
- label: "GPT-5.3 Codex Spark (ChatGPT)",
7480
- description: "GPT-5.3 Codex Spark (high reasoning) via ChatGPT Plus/Pro",
7481
- updateArgs: {
7482
- reasoning_effort: "high",
7483
- verbosity: "low",
7484
- context_window: 128000,
7485
- max_output_tokens: 128000,
7486
- parallel_tool_calls: true
7487
- }
7488
- },
7489
- {
7490
- id: "gpt-5.3-codex-spark-plus-pro-xhigh",
7491
- handle: "chatgpt-plus-pro/gpt-5.3-codex-spark",
7492
- label: "GPT-5.3 Codex Spark (ChatGPT)",
7493
- description: "GPT-5.3 Codex Spark (max reasoning) via ChatGPT Plus/Pro",
7494
- updateArgs: {
7495
- reasoning_effort: "xhigh",
7496
- verbosity: "low",
7497
- context_window: 128000,
7498
- max_output_tokens: 128000,
7499
- parallel_tool_calls: true
7500
- }
7501
- },
7502
- {
7503
- id: "gpt-5.5-none",
7504
- handle: "openai/gpt-5.5",
7505
- label: "GPT-5.5",
7506
- description: "OpenAI's most capable model (no reasoning)",
7507
- updateArgs: {
7508
- reasoning_effort: "none",
7509
- verbosity: "medium",
7510
- context_window: 272000,
7511
- max_output_tokens: 128000,
7512
- parallel_tool_calls: true
7513
- }
7514
- },
7515
- {
7516
- id: "gpt-5.5-low",
7517
- handle: "openai/gpt-5.5",
7518
- label: "GPT-5.5",
7519
- description: "OpenAI's most capable model (low reasoning)",
7520
- updateArgs: {
7521
- reasoning_effort: "low",
7522
- verbosity: "medium",
7523
- context_window: 272000,
7524
- max_output_tokens: 128000,
7525
- parallel_tool_calls: true
7526
- }
7527
- },
7528
- {
7529
- id: "gpt-5.5-medium",
7530
- handle: "openai/gpt-5.5",
7531
- label: "GPT-5.5",
7532
- description: "OpenAI's most capable model (med reasoning)",
7533
- updateArgs: {
7534
- reasoning_effort: "medium",
7535
- verbosity: "medium",
7536
- context_window: 272000,
7537
- max_output_tokens: 128000,
7538
- parallel_tool_calls: true
7539
- }
7540
- },
7541
- {
7542
- id: "gpt-5.5-high",
7543
- handle: "openai/gpt-5.5",
7544
- label: "GPT-5.5",
7545
- description: "OpenAI's most capable model (high reasoning)",
7546
- updateArgs: {
7547
- reasoning_effort: "high",
7548
- verbosity: "medium",
7549
- context_window: 272000,
7550
- max_output_tokens: 128000,
7551
- parallel_tool_calls: true
7552
- }
7553
- },
7554
- {
7555
- id: "gpt-5.5-xhigh",
7556
- handle: "openai/gpt-5.5",
7557
- label: "GPT-5.5",
7558
- description: "OpenAI's most capable model (max reasoning)",
7559
- updateArgs: {
7560
- reasoning_effort: "xhigh",
7561
- verbosity: "medium",
7562
- context_window: 272000,
7563
- max_output_tokens: 128000,
7564
- parallel_tool_calls: true
7565
- }
7566
- },
7567
- {
7568
- id: "gpt-5.4-none",
7569
- handle: "openai/gpt-5.4",
7570
- label: "GPT-5.4",
7571
- description: "OpenAI's most capable model (no reasoning)",
7572
- updateArgs: {
7573
- reasoning_effort: "none",
7574
- verbosity: "medium",
7575
- context_window: 272000,
7576
- max_output_tokens: 128000,
7577
- parallel_tool_calls: true
7578
- }
7579
- },
7580
- {
7581
- id: "gpt-5.4-low",
7582
- handle: "openai/gpt-5.4",
7583
- label: "GPT-5.4",
7584
- description: "OpenAI's most capable model (low reasoning)",
7585
- updateArgs: {
7586
- reasoning_effort: "low",
7587
- verbosity: "medium",
7588
- context_window: 272000,
7589
- max_output_tokens: 128000,
7590
- parallel_tool_calls: true
7591
- }
7592
- },
7593
- {
7594
- id: "gpt-5.4-medium",
7595
- handle: "openai/gpt-5.4",
7596
- label: "GPT-5.4",
7597
- description: "OpenAI's most capable model (med reasoning)",
7598
- updateArgs: {
7599
- reasoning_effort: "medium",
7600
- verbosity: "medium",
7601
- context_window: 272000,
7602
- max_output_tokens: 128000,
7603
- parallel_tool_calls: true
7604
- }
7605
- },
7606
- {
7607
- id: "gpt-5.4-high",
7608
- handle: "openai/gpt-5.4",
7609
- label: "GPT-5.4",
7610
- description: "OpenAI's most capable model (high reasoning)",
7611
- updateArgs: {
7612
- reasoning_effort: "high",
7613
- verbosity: "medium",
7614
- context_window: 272000,
7615
- max_output_tokens: 128000,
7616
- parallel_tool_calls: true
7617
- }
7618
- },
7619
- {
7620
- id: "gpt-5.4-xhigh",
7621
- handle: "openai/gpt-5.4",
7622
- label: "GPT-5.4",
7623
- description: "OpenAI's most capable model (max reasoning)",
7624
- updateArgs: {
7625
- reasoning_effort: "xhigh",
7626
- verbosity: "medium",
7627
- context_window: 272000,
7628
- max_output_tokens: 128000,
7629
- parallel_tool_calls: true
7630
- }
7631
- },
7632
- {
7633
- id: "gpt-5.4-fast-none",
7634
- handle: "openai/gpt-5.4-fast",
7635
- label: "GPT-5.4 Fast",
7636
- description: "GPT-5.4 with priority service tier (no reasoning)",
7637
- updateArgs: {
7638
- reasoning_effort: "none",
7639
- verbosity: "medium",
7640
- context_window: 272000,
7641
- max_output_tokens: 128000,
7642
- parallel_tool_calls: true
7643
- }
7644
- },
7645
- {
7646
- id: "gpt-5.4-fast-low",
7647
- handle: "openai/gpt-5.4-fast",
7648
- label: "GPT-5.4 Fast",
7649
- description: "GPT-5.4 with priority service tier (low reasoning)",
7650
- updateArgs: {
7651
- reasoning_effort: "low",
7652
- verbosity: "medium",
7653
- context_window: 272000,
7654
- max_output_tokens: 128000,
7655
- parallel_tool_calls: true
7656
- }
7657
- },
7658
- {
7659
- id: "gpt-5.4-fast-medium",
7660
- handle: "openai/gpt-5.4-fast",
7661
- label: "GPT-5.4 Fast",
7662
- description: "GPT-5.4 with priority service tier (med reasoning)",
7663
- updateArgs: {
7664
- reasoning_effort: "medium",
7665
- verbosity: "medium",
7666
- context_window: 272000,
7667
- max_output_tokens: 128000,
7668
- parallel_tool_calls: true
7669
- }
7670
- },
7671
- {
7672
- id: "gpt-5.4-fast-high",
7673
- handle: "openai/gpt-5.4-fast",
7674
- label: "GPT-5.4 Fast",
7675
- description: "GPT-5.4 with priority service tier (high reasoning)",
7676
- updateArgs: {
7677
- reasoning_effort: "high",
7678
- verbosity: "medium",
7679
- context_window: 272000,
7680
- max_output_tokens: 128000,
7681
- parallel_tool_calls: true
7682
- }
7683
- },
7684
- {
7685
- id: "gpt-5.4-fast-xhigh",
7686
- handle: "openai/gpt-5.4-fast",
7687
- label: "GPT-5.4 Fast",
7688
- description: "GPT-5.4 with priority service tier (max reasoning)",
7689
- updateArgs: {
7690
- reasoning_effort: "xhigh",
7691
- verbosity: "medium",
7692
- context_window: 272000,
7693
- max_output_tokens: 128000,
7694
- parallel_tool_calls: true
7695
- }
7696
- },
7697
- {
7698
- id: "gpt-5.4-mini-none",
7699
- handle: "openai/gpt-5.4-mini",
7700
- label: "GPT-5.4 Mini",
7701
- description: "Fast, efficient GPT-5.4 variant (no reasoning)",
7702
- updateArgs: {
7703
- reasoning_effort: "none",
7704
- verbosity: "low",
7705
- context_window: 272000,
7706
- max_output_tokens: 128000,
7707
- parallel_tool_calls: true
7708
- }
7709
- },
7710
- {
7711
- id: "gpt-5.4-mini-low",
7712
- handle: "openai/gpt-5.4-mini",
7713
- label: "GPT-5.4 Mini",
7714
- description: "Fast, efficient GPT-5.4 variant (low reasoning)",
7715
- updateArgs: {
7716
- reasoning_effort: "low",
7717
- verbosity: "low",
7718
- context_window: 272000,
7719
- max_output_tokens: 128000,
7720
- parallel_tool_calls: true
7721
- }
7722
- },
7723
- {
7724
- id: "gpt-5.4-mini-medium",
7725
- handle: "openai/gpt-5.4-mini",
7726
- label: "GPT-5.4 Mini",
7727
- description: "Fast, efficient GPT-5.4 variant (med reasoning)",
7728
- updateArgs: {
7729
- reasoning_effort: "medium",
7730
- verbosity: "low",
7731
- context_window: 272000,
7732
- max_output_tokens: 128000,
7733
- parallel_tool_calls: true
7734
- }
7735
- },
7736
- {
7737
- id: "gpt-5.4-mini-high",
7738
- handle: "openai/gpt-5.4-mini",
7739
- label: "GPT-5.4 Mini",
7740
- description: "Fast, efficient GPT-5.4 variant (high reasoning)",
7741
- updateArgs: {
7742
- reasoning_effort: "high",
7743
- verbosity: "low",
7744
- context_window: 272000,
7745
- max_output_tokens: 128000,
7746
- parallel_tool_calls: true
7747
- }
7748
- },
7749
- {
7750
- id: "gpt-5.4-mini-xhigh",
7751
- handle: "openai/gpt-5.4-mini",
7752
- label: "GPT-5.4 Mini",
7753
- description: "Fast, efficient GPT-5.4 variant (max reasoning)",
7754
- updateArgs: {
7755
- reasoning_effort: "xhigh",
7756
- verbosity: "low",
7757
- context_window: 272000,
7758
- max_output_tokens: 128000,
7759
- parallel_tool_calls: true
7760
- }
7761
- },
7762
- {
7763
- id: "gpt-5.3-codex-none",
7764
- handle: "openai/gpt-5.3-codex",
7765
- label: "GPT-5.3-Codex",
7766
- description: "GPT-5.3 variant (no reasoning) optimized for coding",
7767
- updateArgs: {
7768
- reasoning_effort: "none",
7769
- verbosity: "medium",
7770
- context_window: 272000,
7771
- max_output_tokens: 128000,
7772
- parallel_tool_calls: true
7773
- }
7774
- },
7775
- {
7776
- id: "gpt-5.3-codex-low",
7777
- handle: "openai/gpt-5.3-codex",
7778
- label: "GPT-5.3-Codex",
7779
- description: "GPT-5.3 variant (low reasoning) optimized for coding",
7780
- updateArgs: {
7781
- reasoning_effort: "low",
7782
- verbosity: "medium",
7783
- context_window: 272000,
7784
- max_output_tokens: 128000,
7785
- parallel_tool_calls: true
7786
- }
7787
- },
7788
- {
7789
- id: "gpt-5.3-codex-medium",
7790
- handle: "openai/gpt-5.3-codex",
7791
- label: "GPT-5.3-Codex",
7792
- description: "GPT-5.3 variant (med reasoning) optimized for coding",
7793
- updateArgs: {
7794
- reasoning_effort: "medium",
7795
- verbosity: "medium",
7796
- context_window: 272000,
7797
- max_output_tokens: 128000,
7798
- parallel_tool_calls: true
7799
- }
7800
- },
7801
- {
7802
- id: "gpt-5.3-codex-high",
7803
- handle: "openai/gpt-5.3-codex",
7804
- label: "GPT-5.3-Codex",
7805
- description: "OpenAI's best coding model (high reasoning)",
7806
- updateArgs: {
7807
- reasoning_effort: "high",
7808
- verbosity: "medium",
7809
- context_window: 272000,
7810
- max_output_tokens: 128000,
7811
- parallel_tool_calls: true
7812
- }
7813
- },
7814
- {
7815
- id: "gpt-5.3-codex-xhigh",
7816
- handle: "openai/gpt-5.3-codex",
7817
- label: "GPT-5.3-Codex",
7818
- description: "GPT-5.3 variant (max reasoning) optimized for coding",
7819
- updateArgs: {
7820
- reasoning_effort: "xhigh",
7821
- verbosity: "medium",
7822
- context_window: 272000,
7823
- max_output_tokens: 128000,
7824
- parallel_tool_calls: true
7825
- }
7826
- },
7827
- {
7828
- id: "grok-4.5",
7829
- handle: "xai/grok-4.5",
7830
- label: "Grok 4.5",
7831
- description: "xAI's Grok 4.5 model via the direct xAI API",
7832
- isFeatured: true,
7833
- updateArgs: {
7834
- context_window: 500000,
7835
- max_output_tokens: 16384,
7836
- parallel_tool_calls: true
7837
- }
7838
- },
7839
- {
7840
- id: "glm-5.2",
7841
- handle: "zai/glm-5.2",
7842
- label: "GLM-5.2",
7843
- description: "zAI's latest reasoning and coding model with 1M context",
7844
- isFeatured: true,
7845
- free: true,
7846
- updateArgs: {
7847
- context_window: 1e6,
7848
- max_output_tokens: 131072,
7849
- parallel_tool_calls: true
7850
- }
7851
- },
7852
- {
7853
- id: "glm-5.1",
7854
- handle: "zai/glm-5.1",
7855
- label: "GLM-5.1",
7856
- description: "zAI's coding model",
7857
- isFeatured: false,
7858
- free: true,
7859
- updateArgs: {
7860
- context_window: 180000,
7861
- max_output_tokens: 16000,
7862
- parallel_tool_calls: true
7863
- }
7864
- },
7865
- {
7866
- id: "minimax-m3",
7867
- handle: "minimax/MiniMax-M3",
7868
- label: "MiniMax M3",
7869
- description: "MiniMax's frontier M-series model for agentic reasoning, tool use, coding, multimodal chat input, and long-context tasks",
7870
- isFeatured: true,
7871
- updateArgs: {
7872
- context_window: 500000,
7873
- parallel_tool_calls: true
7874
- }
7875
- },
7876
- {
7877
- id: "minimax-m2.7",
7878
- handle: "minimax/MiniMax-M2.7",
7879
- label: "MiniMax 2.7",
7880
- description: "MiniMax's M2.7 coding model",
7881
- free: true,
7882
- updateArgs: {
7883
- context_window: 160000,
7884
- max_output_tokens: 64000,
7885
- parallel_tool_calls: true
7886
- }
7887
- },
7888
- {
7889
- id: "kimi-k3",
7890
- handle: "moonshot/kimi-k3",
7891
- label: "Kimi K3",
7892
- description: "Moonshot AI's Kimi K3 model for long-context agentic coding and reasoning tasks",
7893
- isFeatured: true,
7894
- updateArgs: {
7895
- context_window: 1048576,
7896
- max_output_tokens: 131072,
7897
- parallel_tool_calls: true
7898
- }
7899
- },
7900
- {
7901
- id: "gemini-3.1",
7902
- handle: "google_ai/gemini-3.1-pro-preview",
7903
- label: "Gemini 3.1 Pro",
7904
- description: "Google's latest and smartest model",
7905
- isFeatured: true,
7906
- updateArgs: {
7907
- context_window: 180000,
7908
- temperature: 1,
7909
- parallel_tool_calls: true
7910
- }
7911
- },
7912
- {
7913
- id: "gemini-3.5-flash",
7914
- handle: "google_ai/gemini-3.5-flash",
7915
- label: "Gemini 3.5 Flash",
7916
- description: "Google's Gemini 3.5 Flash model",
7917
- updateArgs: {
7918
- context_window: 1048576,
7919
- temperature: 1,
7920
- parallel_tool_calls: true
7921
- }
7922
- },
7923
- {
7924
- id: "gemini-3.6-flash",
7925
- handle: "google_ai/gemini-3.6-flash",
7926
- label: "Gemini 3.6 Flash",
7927
- description: "Google's Gemini 3.6 Flash model",
7928
- isFeatured: true,
7929
- updateArgs: {
7930
- context_window: 1048576,
7931
- temperature: 1,
7932
- parallel_tool_calls: true
7933
- }
7934
- }
7935
- ]
7936
- };
7937
- var models = models_default.models;
7938
- function resolveModel(modelIdentifier) {
7939
- const byId = models.find((m) => m.id === modelIdentifier);
7940
- if (byId)
7941
- return byId.handle;
7942
- const byHandle = models.find((m) => m.handle === modelIdentifier);
7943
- if (byHandle)
7944
- return byHandle.handle;
7945
- if (modelIdentifier.includes("/")) {
7946
- return modelIdentifier;
7947
- }
7948
- return null;
7949
- }
7950
- function getDefaultModel() {
7951
- const autoModel = resolveModel("auto");
7952
- if (autoModel)
7953
- return autoModel;
7954
- const defaultModel = models.find((m) => m.isDefault);
7955
- if (defaultModel)
7956
- return defaultModel.handle;
7957
- const firstModel = models[0];
7958
- if (!firstModel) {
7959
- throw new Error("No models available in models.json");
7960
- }
7961
- return firstModel.handle;
7962
- }
7963
- var PERSONALITY_OPTIONS = [
7964
- {
7965
- id: "memo",
7966
- label: "Letta Code",
7967
- description: "The memory-first agent"
7968
- },
7969
- {
7970
- id: "tutorial",
7971
- label: "Tutor",
7972
- description: "I help with getting started with Letta. I can answer any questions about Letta, and also help you create and configure agents.",
7973
- defaultMemoryFiles: [
7974
- {
7975
- path: "profile.png",
7976
- assetId: "tutor-profile",
7977
- commitMessage: "chore: set default Tutor profile picture"
7978
- }
7979
- ]
7980
- },
7981
- {
7982
- id: "blank",
7983
- label: "Blank",
7984
- description: "Blank starter — you provide the personality"
7985
- },
7986
- {
7987
- id: "linus",
7988
- label: "Linus",
7989
- description: "Code with a stern hand"
7990
- },
7991
- {
7992
- id: "kawaii",
7993
- label: "Letta-Chan",
7994
- description: "sugoi~ (◕‿◕)✨",
7995
- defaultModel: "auto-chat"
7996
- },
7997
- {
7998
- id: "claude",
7999
- label: "Letta Code",
8000
- description: "Vanilla Claude flavors"
8001
- },
8002
- {
8003
- id: "codex",
8004
- label: "Letta Code",
8005
- description: "Vanilla Codex flavors"
8006
- }
8007
- ];
8008
- var PERSONALITY_TAG_PREFIX = "personality:";
8009
- function buildPersonalityTag(personalityId) {
8010
- return `${PERSONALITY_TAG_PREFIX}${personalityId}`;
8011
- }
8012
- function getPersonalityCreationTags(personalityId) {
8013
- return getPersonalityDefaultMemoryFiles(personalityId).length > 0 ? [buildPersonalityTag(personalityId)] : [];
8014
- }
8015
- var ONBOARDING_PERSONALITIES = [
8016
- "tutorial"
8017
- ];
8018
- function supportsOnboardingBlock(personalityId) {
8019
- return ONBOARDING_PERSONALITIES.includes(personalityId);
8020
- }
8021
- var EDITABLE_FRONTMATTER_KEYS = [
8022
- "description",
8023
- "limit",
8024
- "read_only"
8025
- ];
8026
- function ensureTrailingNewline(content) {
8027
- return `${content.trimEnd()}
8028
- `;
8029
- }
8030
- function getPromptTemplate(promptAssetName) {
8031
- const rawPrompt = MEMORY_PROMPTS[promptAssetName];
8032
- if (!rawPrompt) {
8033
- throw new Error(`Missing built-in prompt content for ${promptAssetName}`);
8034
- }
8035
- return parseMdxFrontmatter(rawPrompt);
8036
- }
8037
- function getPromptBody(promptAssetName) {
8038
- const { body } = getPromptTemplate(promptAssetName);
8039
- if (!body.trim()) {
8040
- throw new Error(`${promptAssetName} has empty body content`);
8041
- }
8042
- return ensureTrailingNewline(body);
8043
- }
8044
- function getEditablePromptFrontmatter(promptAssetName) {
8045
- const { frontmatter } = getPromptTemplate(promptAssetName);
8046
- return Object.fromEntries(Object.entries(frontmatter).filter(([key]) => EDITABLE_FRONTMATTER_KEYS.includes(key)));
8047
- }
8048
- function getSystemPromptById(systemPromptId) {
8049
- const prompt = SYSTEM_PROMPTS.find((candidate) => candidate.id === systemPromptId);
8050
- if (!prompt || !prompt.content.trim()) {
8051
- throw new Error(`Missing built-in prompt content for ${systemPromptId}`);
8052
- }
8053
- return prompt.content;
8054
- }
8055
- function getPersonalityOption(personalityId) {
8056
- const option = PERSONALITY_OPTIONS.find((candidate) => candidate.id === personalityId);
8057
- if (!option) {
8058
- throw new Error(`Unknown personality: ${personalityId}`);
8059
- }
8060
- return option;
8061
- }
8062
- function getPersonalityDefaultMemoryFiles(personalityId) {
8063
- return getPersonalityOption(personalityId).defaultMemoryFiles ?? [];
8064
- }
8065
- function getPersonalityContent(personalityId) {
8066
- if (personalityId === "memo") {
8067
- return getPromptBody("persona_memo.mdx");
8068
- }
8069
- if (personalityId === "tutorial") {
8070
- return getPromptBody("persona_tutorial.mdx");
8071
- }
8072
- if (personalityId === "blank") {
8073
- return getPromptBody("persona_blank.mdx");
8074
- }
8075
- if (personalityId === "kawaii") {
8076
- return getPromptBody("persona_kawaii.mdx");
8077
- }
8078
- if (personalityId === "codex") {
8079
- return ensureTrailingNewline(getSystemPromptById("source-codex"));
8080
- }
8081
- if (personalityId === "linus") {
8082
- return getPromptBody("persona_linus.mdx");
8083
- }
8084
- return ensureTrailingNewline(getSystemPromptById("source-claude"));
8085
- }
8086
- function getDefaultHumanContent() {
8087
- return getPromptBody("human.mdx");
8088
- }
8089
- function getPersonalityHumanContent(personalityId) {
8090
- if (personalityId === "memo") {
8091
- return getPromptBody("human_memo.mdx");
8092
- }
8093
- if (personalityId === "tutorial") {
8094
- return getPromptBody("human_tutorial.mdx");
8095
- }
8096
- if (personalityId === "linus") {
8097
- return getPromptBody("human_linus.mdx");
8098
- }
8099
- if (personalityId === "kawaii") {
8100
- return getPromptBody("human_kawaii.mdx");
8101
- }
8102
- if (personalityId === "blank") {
8103
- return getDefaultHumanContent();
8104
- }
8105
- return getDefaultHumanContent();
8106
- }
8107
- function getPersonalityBlockDefinitions(personalityId, environment = "cloud") {
8108
- const personaTemplatePromptAssetName = personalityId === "memo" ? "persona_memo.mdx" : personalityId === "tutorial" ? "persona_tutorial.mdx" : personalityId === "blank" ? "persona_blank.mdx" : personalityId === "kawaii" ? "persona_kawaii.mdx" : personalityId === "linus" ? "persona_linus.mdx" : "persona.mdx";
8109
- const humanTemplatePromptAssetName = personalityId === "memo" ? "human_memo.mdx" : personalityId === "tutorial" ? "human_tutorial.mdx" : personalityId === "kawaii" ? "human_kawaii.mdx" : personalityId === "linus" ? "human_linus.mdx" : "human.mdx";
8110
- const onboardingTemplatePromptAssetName = environment === "local" ? "onboarding_local.mdx" : "onboarding.mdx";
8111
- return {
8112
- persona: {
8113
- value: getPersonalityContent(personalityId),
8114
- description: getEditablePromptFrontmatter(personaTemplatePromptAssetName).description,
8115
- templatePromptAssetName: personaTemplatePromptAssetName
8116
- },
8117
- human: {
8118
- value: getPersonalityHumanContent(personalityId),
8119
- description: getEditablePromptFrontmatter(humanTemplatePromptAssetName).description,
8120
- templatePromptAssetName: humanTemplatePromptAssetName
8121
- },
8122
- ...supportsOnboardingBlock(personalityId) ? {
8123
- onboarding: {
8124
- value: getPromptBody(onboardingTemplatePromptAssetName),
8125
- description: getEditablePromptFrontmatter(onboardingTemplatePromptAssetName).description,
8126
- templatePromptAssetName: onboardingTemplatePromptAssetName
5736
+ ...supportsOnboardingBlock(personalityId) ? {
5737
+ onboarding: {
5738
+ value: getPromptBody(onboardingTemplatePromptAssetName),
5739
+ description: getEditablePromptFrontmatter(onboardingTemplatePromptAssetName).description,
5740
+ templatePromptAssetName: onboardingTemplatePromptAssetName
8127
5741
  }
8128
5742
  } : {}
8129
5743
  };
@@ -8242,8 +5856,15 @@ function assertCreateAgentOptionsSupported(options) {
8242
5856
  throw new Error("App-server createAgent() does not yet support dreaming.behavior overrides.");
8243
5857
  }
8244
5858
  }
8245
- async function createAgentBody(options) {
5859
+ async function createAgentBody(options, resolvedSkills) {
8246
5860
  assertCreateAgentOptionsSupported(options);
5861
+ const skills = resolvedSkills ?? await resolveSkillItems(options.skills);
5862
+ if (skills.length > 0 && options.memfs === false) {
5863
+ throw new Error("createAgent() skills require the memory filesystem; remove memfs: false.");
5864
+ }
5865
+ if (resolvedSkills === undefined && skillsHaveSupportFiles(skills)) {
5866
+ throw new Error("This backend does not yet support skill support files (scripts/, " + "references/). Use the Cloud backend, or pass a skill with only SKILL.md.");
5867
+ }
8247
5868
  let system;
8248
5869
  if (options.systemPrompt !== undefined) {
8249
5870
  if (typeof options.systemPrompt !== "string" || isPresetSystemPrompt(options.systemPrompt)) {
@@ -8269,7 +5890,14 @@ async function createAgentBody(options) {
8269
5890
  if (options.human !== undefined) {
8270
5891
  memoryBlocks.push({ label: "human", value: options.human });
8271
5892
  }
8272
- const hasMemoryConfiguration = options.memory !== undefined || options.persona !== undefined || options.human !== undefined;
5893
+ for (const skill of skills) {
5894
+ memoryBlocks.push({
5895
+ label: `skills/${skill.name}`,
5896
+ value: skill.instructions,
5897
+ description: skill.description
5898
+ });
5899
+ }
5900
+ const hasMemoryConfiguration = options.memory !== undefined || options.persona !== undefined || options.human !== undefined || skills.length > 0;
8273
5901
  return buildCreateAgentRequest({
8274
5902
  personalityId: options.personality,
8275
5903
  name: options.name,
@@ -9254,11 +6882,12 @@ class RemoteTurnCoordinator {
9254
6882
  });
9255
6883
  const success = turn.success !== undefined ? turn.success && !approvalConflict && !isFailureStopReason(stopReason) : !approvalConflict && !isFailureStopReason(stopReason);
9256
6884
  const errorCode = approvalConflict ? "approval_conflict" : turn.errorCode ?? toSdkErrorCode(stopReason);
6885
+ const publicError = errorCode && errorCode !== "error" ? errorCode : turn.detail ?? stopReason ?? "error";
9257
6886
  return {
9258
6887
  type: "result",
9259
6888
  success,
9260
6889
  result: success ? tracker?.assistantText || undefined : undefined,
9261
- error: success ? undefined : errorCode ?? stopReason ?? "error",
6890
+ error: success ? undefined : publicError,
9262
6891
  errorCode: success ? undefined : errorCode ?? "error",
9263
6892
  approvalConflict: approvalConflict || undefined,
9264
6893
  recoverable: approvalConflict ? true : success ? undefined : turn.recoverable ?? false,
@@ -9362,7 +6991,7 @@ class RemoteClientSessionCore {
9362
6991
  this.runtime = init.runtime;
9363
6992
  this._agentId = init.runtime.agent_id;
9364
6993
  this._conversationId = init.runtime.conversation_id;
9365
- this._sessionId = `${init.runtime.agent_id}:${init.runtime.conversation_id}`;
6994
+ this._sessionId = init.runtime.agent_id ? `${init.runtime.agent_id}:${init.runtime.conversation_id}` : init.runtime.conversation_id;
9366
6995
  this._modelSettings = init.modelSettings ?? null;
9367
6996
  this._model = typeof init.model === "string" ? init.model : typeof this._modelSettings?.model === "string" ? this._modelSettings.model : "";
9368
6997
  this.toolNames = init.tools;
@@ -10337,8 +7966,8 @@ class AppServerSession extends RemoteClientSessionCore {
10337
7966
  return {
10338
7967
  controller: new AppServerRuntimeController(client, this.remoteOptions, allowedTools, clientToolset),
10339
7968
  runtime: response.runtime,
10340
- model: typeof response.agent?.model === "string" ? response.agent.model : "",
10341
- modelSettings: objectRecord(response.agent?.model_settings) ?? null,
7969
+ model: typeof response.agent?.model === "string" ? response.agent.model : typeof response.conversation?.model === "string" ? response.conversation.model : "",
7970
+ modelSettings: objectRecord(response.agent?.model_settings) ?? objectRecord(response.conversation?.model_settings) ?? null,
10342
7971
  ...availableTools !== undefined ? { tools: availableTools } : {},
10343
7972
  ...skillSources !== undefined ? { skillSources: [...skillSources] } : {}
10344
7973
  };
@@ -10419,6 +8048,24 @@ class AppServerSession extends RemoteClientSessionCore {
10419
8048
  };
10420
8049
  return command;
10421
8050
  }
8051
+ if (this.mode.kind === "agent-free") {
8052
+ if (this.mode.createConversation) {
8053
+ const create = this.mode.createConversation;
8054
+ command.create_conversation = {
8055
+ body: {
8056
+ model: create.model,
8057
+ system: create.system,
8058
+ ...create.modelSettings !== undefined ? { model_settings: create.modelSettings } : {},
8059
+ ...create.contextWindowLimit !== undefined ? { context_window_limit: create.contextWindowLimit } : {}
8060
+ }
8061
+ };
8062
+ } else if (this.mode.conversationId) {
8063
+ command.conversation_id = this.mode.conversationId;
8064
+ } else {
8065
+ throw new Error("Agent-free sessions require a conversation to create or resume.");
8066
+ }
8067
+ return command;
8068
+ }
10422
8069
  if (this.mode.agentId) {
10423
8070
  command.agent_id = this.mode.agentId;
10424
8071
  if (this.mode.newConversation) {
@@ -11138,7 +8785,8 @@ function buildCloudStatusWebSocketUrl(params) {
11138
8785
  throw new Error(`Unsupported cloud apiBaseUrl protocol: ${base.protocol}`);
11139
8786
  }
11140
8787
  base.pathname = `/v1/environments/${encodeURIComponent(params.connectionId)}/status/ws`;
11141
- base.searchParams.set("agentId", params.agentId);
8788
+ if (params.agentId)
8789
+ base.searchParams.set("agentId", params.agentId);
11142
8790
  base.searchParams.set("conversationId", params.conversationId);
11143
8791
  base.searchParams.set("channel", "stream");
11144
8792
  if (params.authMode === "query" && params.apiKey) {
@@ -11169,12 +8817,23 @@ function externalToolsByName(tools) {
11169
8817
  }
11170
8818
  return result;
11171
8819
  }
11172
- async function createCloudAgent(client, agentOptions) {
11173
- const body = await createAgentBody(agentOptions);
8820
+ async function createCloudAgent(client, agentOptions, pushSkillSupportFiles) {
8821
+ const skills = await resolveSkillItems(agentOptions.skills);
8822
+ const hasSupportFiles = skillsHaveSupportFiles(skills);
8823
+ if (hasSupportFiles && pushSkillSupportFiles === undefined) {
8824
+ throw new Error("Skill support files (scripts/, references/) require the Node.js " + "package root; the portable client seeds SKILL.md-only skills.");
8825
+ }
8826
+ const body = await createAgentBody(agentOptions, skills);
11174
8827
  const agent = await client.agents.create(body);
11175
8828
  if (typeof agent.id !== "string" || agent.id.length === 0) {
11176
8829
  throw new Error("Cloud create agent response did not include an agent id.");
11177
8830
  }
8831
+ if (hasSupportFiles && pushSkillSupportFiles) {
8832
+ if (typeof client.apiKey !== "string" || client.apiKey.length === 0) {
8833
+ throw new Error(`Agent ${agent.id} was created, but skill support files need an API ` + "key to push to the agent's memory repo and none is configured.");
8834
+ }
8835
+ await pushSkillSupportFiles({ apiBaseUrl: client.baseURL, apiKey: client.apiKey, agentId: agent.id }, skills);
8836
+ }
11178
8837
  return agent.id;
11179
8838
  }
11180
8839
  function assertCloudSessionOptionsSupported(action, options) {
@@ -11224,7 +8883,9 @@ class CloudEnvironmentSession extends RemoteClientSessionCore {
11224
8883
  this.sandboxLifecycleClosing = false;
11225
8884
  const resolved = await this.resolveRuntime();
11226
8885
  const connection = await this.resolveConnectionForRuntime(resolved.runtime).catch(async (error) => {
11227
- await this.cleanupSessionRepositories(resolved.runtime.agent_id, resolved.runtime.conversation_id);
8886
+ if (resolved.runtime.agent_id) {
8887
+ await this.cleanupSessionRepositories(resolved.runtime.agent_id, resolved.runtime.conversation_id);
8888
+ }
11228
8889
  throw error;
11229
8890
  });
11230
8891
  this.connectionId = connection.connectionId;
@@ -11241,7 +8902,9 @@ class CloudEnvironmentSession extends RemoteClientSessionCore {
11241
8902
  } catch (error) {
11242
8903
  await this.closeMcpBridge();
11243
8904
  await this.cleanupManagedSandbox();
11244
- await this.cleanupSessionRepositories(resolved.runtime.agent_id, resolved.runtime.conversation_id);
8905
+ if (resolved.runtime.agent_id) {
8906
+ await this.cleanupSessionRepositories(resolved.runtime.agent_id, resolved.runtime.conversation_id);
8907
+ }
11245
8908
  throw error;
11246
8909
  }
11247
8910
  }
@@ -11265,8 +8928,8 @@ class CloudEnvironmentSession extends RemoteClientSessionCore {
11265
8928
  requestTimeoutMs: this.cloudOptions.requestTimeoutMs ?? DEFAULT_TURN_TIMEOUT_MS
11266
8929
  }, allowedTools, clientToolset),
11267
8930
  runtime: response.runtime,
11268
- model: typeof response.agent?.model === "string" ? response.agent.model : "",
11269
- modelSettings: response.agent?.model_settings ?? null,
8931
+ model: typeof response.agent?.model === "string" ? response.agent.model : typeof response.conversation?.model === "string" ? response.conversation.model : "",
8932
+ modelSettings: response.agent?.model_settings ?? response.conversation?.model_settings ?? null,
11270
8933
  ...availableTools !== undefined ? { tools: availableTools } : {},
11271
8934
  ...skillSources !== undefined ? { skillSources: [...skillSources] } : {}
11272
8935
  };
@@ -11379,11 +9042,12 @@ class CloudEnvironmentSession extends RemoteClientSessionCore {
11379
9042
  name: SDK_AGENT_ORIGIN,
11380
9043
  title: "Letta Agent SDK"
11381
9044
  },
11382
- agent_id: runtime.agent_id,
11383
9045
  conversation_id: runtime.conversation_id,
11384
9046
  recover_approvals: false,
11385
9047
  force_device_status: true
11386
9048
  };
9049
+ if (runtime.agent_id)
9050
+ command.agent_id = runtime.agent_id;
11387
9051
  const mode = mapPermissionMode(options.permissionMode);
11388
9052
  if (mode)
11389
9053
  command.mode = mode;
@@ -11454,6 +9118,17 @@ class CloudEnvironmentSession extends RemoteClientSessionCore {
11454
9118
  return bridge?.close() ?? Promise.resolve();
11455
9119
  }
11456
9120
  async resolveRuntime() {
9121
+ if (this.cloudMode.kind === "agent-free") {
9122
+ if (!this.cloudMode.conversationId) {
9123
+ throw new Error("Cloud agent-free sessions require a conversation id.");
9124
+ }
9125
+ return {
9126
+ runtime: {
9127
+ agent_id: null,
9128
+ conversation_id: this.cloudMode.conversationId
9129
+ }
9130
+ };
9131
+ }
11457
9132
  let agentId = this.cloudMode.agentId;
11458
9133
  let conversationId = this.cloudMode.conversationId;
11459
9134
  if (!agentId && conversationId) {
@@ -11599,6 +9274,9 @@ class CloudEnvironmentSession extends RemoteClientSessionCore {
11599
9274
  return { connectionId: resolved.connectionId };
11600
9275
  }
11601
9276
  async createManagedSandboxConnection(runtime) {
9277
+ if (!runtime.agent_id) {
9278
+ throw new Error("Agent-free queries require an explicit Cloud computer; managed sandboxes are agent-scoped.");
9279
+ }
11602
9280
  const conversationId = runtime.conversation_id && runtime.conversation_id !== "default" ? runtime.conversation_id : undefined;
11603
9281
  const sandbox = await this.createManagedSandbox(runtime.agent_id, conversationId);
11604
9282
  this.managedSandbox = sandbox;
@@ -11901,6 +9579,36 @@ function createConversationsClient(transport) {
11901
9579
  };
11902
9580
  }
11903
9581
 
9582
+ // src/query.ts
9583
+ function createQuery(createSession, params) {
9584
+ let session = null;
9585
+ let closed = false;
9586
+ const iterator = async function* runQuery() {
9587
+ try {
9588
+ session = await createSession(params.options);
9589
+ if (closed)
9590
+ return;
9591
+ await session.send(params.prompt);
9592
+ yield* session.stream();
9593
+ } finally {
9594
+ closed = true;
9595
+ session?.close();
9596
+ }
9597
+ }();
9598
+ return Object.assign(iterator, {
9599
+ async interrupt() {
9600
+ await session?.abort();
9601
+ },
9602
+ close() {
9603
+ if (closed)
9604
+ return;
9605
+ closed = true;
9606
+ session?.close();
9607
+ iterator.return();
9608
+ }
9609
+ });
9610
+ }
9611
+
11904
9612
  // src/validation.ts
11905
9613
  var VALID_SKILL_SOURCES = [
11906
9614
  "bundled",
@@ -12126,6 +9834,24 @@ function hasCreateAgentEnvironment(options) {
12126
9834
  function looksLikeConversationId(id) {
12127
9835
  return id.startsWith("conv-") || id.startsWith("local-conv-");
12128
9836
  }
9837
+ function agentFreeSessionOptions(options) {
9838
+ const {
9839
+ system: _system,
9840
+ modelSettings: _modelSettings,
9841
+ contextWindowLimit: _contextWindowLimit,
9842
+ ...sessionOptions
9843
+ } = options;
9844
+ return sessionOptions;
9845
+ }
9846
+ function validateAgentFreeQueryOptions(options) {
9847
+ if (typeof options.model !== "string" || options.model.length === 0) {
9848
+ throw new Error("query() requires a non-empty model.");
9849
+ }
9850
+ if (typeof options.system !== "string") {
9851
+ throw new Error("query() requires a system prompt.");
9852
+ }
9853
+ validateCreateSessionOptions(agentFreeSessionOptions(options));
9854
+ }
12129
9855
 
12130
9856
  class LettaAgentClientBase {
12131
9857
  backend;
@@ -12200,6 +9926,11 @@ class LettaAgentClientBase {
12200
9926
  throw new Error("createAgent() does not accept environment. Set a client default or pass environment to resumeSession()/createSession().");
12201
9927
  }
12202
9928
  validateCreateAgentOptions(options);
9929
+ if (options.skills !== undefined && options.skills.length > 0) {
9930
+ const nodeSupport = this.skillNodeSupport();
9931
+ const skills = await resolveSkillItems(options.skills, nodeSupport?.loadSkillDirectory);
9932
+ options = { ...options, skills };
9933
+ }
12203
9934
  if (this.backend === "remote") {
12204
9935
  const session = new AppServerSession(this.appServerSessionOptions(), {
12205
9936
  kind: "create-agent",
@@ -12207,10 +9938,13 @@ class LettaAgentClientBase {
12207
9938
  });
12208
9939
  const initMsg = await session.initialize();
12209
9940
  session.close();
9941
+ if (!initMsg.agentId) {
9942
+ throw new Error("App Server agent creation did not return an agent id.");
9943
+ }
12210
9944
  return initMsg.agentId;
12211
9945
  }
12212
9946
  if (this.backend === "cloud") {
12213
- return createCloudAgent(this.getCloudClient(), options);
9947
+ return createCloudAgent(this.getCloudClient(), options, this.skillNodeSupport()?.pushSkillSupportFiles);
12214
9948
  }
12215
9949
  return this.createLocalAgent(options);
12216
9950
  }
@@ -12283,6 +10017,50 @@ class LettaAgentClientBase {
12283
10017
  session.close();
12284
10018
  }
12285
10019
  }
10020
+ query(params) {
10021
+ validateAgentFreeQueryOptions(params.options);
10022
+ return createQuery((options) => this.createAgentFreeSession(options), params);
10023
+ }
10024
+ async createAgentFreeSession(options) {
10025
+ validateAgentFreeQueryOptions(options);
10026
+ const sessionOptions = agentFreeSessionOptions(options);
10027
+ this.assertSessionBackend("query", sessionOptions);
10028
+ if (this.backend === "remote") {
10029
+ return new AppServerSession(this.appServerSessionOptions(), {
10030
+ kind: "agent-free",
10031
+ createConversation: {
10032
+ model: options.model,
10033
+ system: options.system,
10034
+ ...options.modelSettings !== undefined ? { modelSettings: options.modelSettings } : {},
10035
+ ...options.contextWindowLimit !== undefined ? { contextWindowLimit: options.contextWindowLimit } : {}
10036
+ },
10037
+ options: sessionOptions
10038
+ });
10039
+ }
10040
+ if (this.backend === "cloud") {
10041
+ const computer = options.computer ?? options.environment ?? this.computer;
10042
+ if (computer === undefined) {
10043
+ throw new Error("Cloud query() requires an explicit computer; managed sandboxes are agent-scoped.");
10044
+ }
10045
+ const conversation = await this.getCloudClient().post("/v1/conversations/ephemeral", {
10046
+ body: {
10047
+ model: options.model,
10048
+ system: options.system,
10049
+ ...options.modelSettings !== undefined ? { model_settings: options.modelSettings } : {},
10050
+ ...options.contextWindowLimit !== undefined ? { context_window_limit: options.contextWindowLimit } : {}
10051
+ }
10052
+ });
10053
+ if (!conversation || typeof conversation !== "object" || typeof conversation.id !== "string") {
10054
+ throw new Error("Cloud ephemeral conversation response did not include a conversation id.");
10055
+ }
10056
+ return new CloudEnvironmentSession(this.cloudOptions(), {
10057
+ kind: "agent-free",
10058
+ conversationId: conversation.id,
10059
+ options: sessionOptions
10060
+ }, this.getCloudClient());
10061
+ }
10062
+ return this.createLocalAgentFreeSession(options, sessionOptions);
10063
+ }
12286
10064
  assertSessionBackend(action, options) {
12287
10065
  if (options.computer !== undefined && options.environment !== undefined) {
12288
10066
  throw new Error(`${action}() cannot specify both computer and deprecated environment.`);
@@ -12347,9 +10125,15 @@ class LettaAgentClientBase {
12347
10125
  createLocalAgent(_options) {
12348
10126
  throw this.localBackendUnavailableError();
12349
10127
  }
10128
+ skillNodeSupport() {
10129
+ return;
10130
+ }
12350
10131
  createLocalSession(_agentId, _options) {
12351
10132
  throw this.localBackendUnavailableError();
12352
10133
  }
10134
+ createLocalAgentFreeSession(_queryOptions, _sessionOptions) {
10135
+ throw this.localBackendUnavailableError();
10136
+ }
12353
10137
  resumeLocalSession(_id, _options) {
12354
10138
  throw this.localBackendUnavailableError();
12355
10139
  }
@@ -12946,4 +10730,4 @@ export {
12946
10730
  CloudManagedSandboxExpiredError
12947
10731
  };
12948
10732
 
12949
- //# debugId=6DEC5A9A513E517464756E2164756E21
10733
+ //# debugId=1BC83E9AF5BBAD2864756E2164756E21