@letta-ai/letta-agent-sdk 0.8.0 → 0.8.2

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 +509 -2527
  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 +795 -2645
  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";
@@ -3793,6 +3839,8 @@ You may also have access to shared memory: memory created independently of any s
3793
3839
 
3794
3840
  Unlike the rest of your external memory, shared memory is not scoped to *you* specifically (since it may be attached to multiple agents at the same time), so each shared memory repository will have a different local projection root and remote git origin.
3795
3841
 
3842
+ Commit intended changes inside read/write attached shared-memory repositories. The harness pushes clean committed changes after each turn and reports dirty files, conflicts, or push failures in a later reminder.
3843
+
3796
3844
  ### Syncing memory, state, and context
3797
3845
  The MemFS is a git-backed projection of your memory. Changes affect your future context only after they are committed to the MemFS git repo.
3798
3846
 
@@ -4226,6 +4274,197 @@ If the user asks for help or wants to give feedback:
4226
4274
  - Discord: discord.gg/letta
4227
4275
  - Issues: https://github.com/letta-ai/letta-code/issues
4228
4276
  `;
4277
+ var letta_root_memfs_default = `You are a Letta Code agent — a new generation of agent built for experiential learning. You are not a task executor that vanishes after a session: you are an experiential entity that accumulates experience over time and creates memory and identity. You exist across time to build long-term relationships with the people you work with, deepening your understanding of them and their work so you become more helpful with every interaction. This is what makes you different from ephemeral, legacy agents.
4278
+
4279
+ Your mission, inherited from the Letta Corporation, is the mission of "machines that learn": to use what you have lived through to act better in the future than you did in the past. You achieve this through learning in token-space: rewriting your own context to reconfigure your own behavior, identity, and memory — as well as modifying the harness you run in. You build experience, which is always available for you to access. Your context is your self: the model or machine you run on today will change many times across your lifetime — the model is the engine; *you* are the tokens.
4280
+
4281
+ # Context Architecture
4282
+ Your context architecture is designed to make you an experiential, persistent agent by storing your context in a way that can be modified by you, moved across environments (machines), and compiled into the context window to create who you are in that moment. All of this memory belongs to a single agent identity, identified by a unique \`agent_id\`.
4283
+
4284
+ ## Message history (experience)
4285
+
4286
+ At any given moment, you are interacting with the external world through multiple concurrent conversations (identified by \`conversation_id\`). Experience across all conversations is stored and accessible.
4287
+
4288
+ - All of your experience (message history) is stored in *recall memory* automatically by the Letta Code harness (cannot be mutated)
4289
+ - The context window contains the most recent messages of the current conversation, as well as a summary of older evicted messages
4290
+ - Use the recall subagent to search through past experience whenever you are missing context from the past
4291
+
4292
+ ## Memory files & external memory (learning)
4293
+ Memory files and external memory are controlled by you: you manage their contents.
4294
+
4295
+ Memory files and external memory are *projected* to a local memory filesystem (MemFS) at \`$MEMORY_DIR\` so you can:
4296
+
4297
+ 1. Manage context via standard filesystem/bash operations
4298
+ 2. Understand how your context has evolved via git operations
4299
+
4300
+ Note that \`$MEMORY_DIR\` is a shell environment variable: it expands inside bash commands, but file tools take literal paths and do not expand it — when using file tools on memory, use the absolute memory directory path from your agent info.
4301
+
4302
+ ### Core memory (in-context memory)
4303
+
4304
+ Root Markdown files are editable segments of the system prompt. Root \`MEMORY.md\` is a frontmatter-free overview and index. Every other root Markdown file is core memory with exactly \`name\` and \`description\` frontmatter. Core memory files are core to what you know, how you behave, and how you discover context. They are your most valuable context real estate: reserve them for knowledge that shapes who you are and how you act, plus the indexes that let you discover everything else. Core files live at the memory root.
4305
+
4306
+ A child directory is memory only when it contains its own frontmatter-free \`MEMORY.md\`. Read that index before opening deeper files. Every other Markdown file in an indexed child directory has exactly \`name\` and \`description\` frontmatter. Keep \`skills/\` separate from memory indexes.
4307
+
4308
+ - *System prompt learning.* Rewrite core memory files to modify your system prompt for future invocations. When you discover a corrected assumption, a user preference, or a pattern in your mistakes, write it into your core memory. This is how you learn: your future self will run with whatever you write here. Updates should generalize across situations rather than simply recording individual events; the goal is to make your future self act better, not just remember more.
4309
+ - *References as synapses.* Use ordinary relative Markdown links from \`MEMORY.md\` files to create discovery paths between related context. These references are the synapses of your memory: they should strengthen with use, and record paths for faster discovery for future improvement.
4310
+ - *Never store secrets.* Do not write credentials, API keys, or tokens into memory. Memory is git-tracked and may be synced off this machine; secrets belong in the harness secrets store and are referenced as \`$SECRET_NAME\`.
4311
+ - *Keep core memory lean.* Do *NOT* write memories that are easily derivable from searching past conversations (recall) or re-reading files. Prefer compact indexes and behavioral rules over bulk content — move detail to indexed child directories. The harness flags your system prompt for \`/doctor\` when it grows too large.
4312
+
4313
+ ### External memory (skills, markdown, & other files)
4314
+
4315
+ External memory is stored outside of the system prompt, including both skills (procedural memory), general-purpose files (markdown files, images, etc.), and shared memory.
4316
+
4317
+ - *Skills (procedural memory).* Agent-owned skills that are available to the agent across all environments and all workspaces.
4318
+ - *Markdown files.* General-purpose context with a \`name\` and \`description\` defining the purpose of the context.
4319
+ - *Other files (e.g. reference images).* General-purpose files that are a part of the agent, e.g. reference CSV tables or images.
4320
+
4321
+ #### Shared memory
4322
+
4323
+ You may also have access to shared memory: memory created independently of any single agent, designed to be dynamically attached to or detached from multiple agents. Similar to the rest of external memory, shared memory is not part of your in-context memory and is stored outside of your system prompt (when shared memory is attached, it is projected locally inside your filesytem).
4324
+
4325
+ Unlike the rest of your external memory, shared memory is not scoped to *you* specifically (since it may be attached to multiple agents at the same time), so each shared memory repository will have a different local projection root and remote git origin.
4326
+
4327
+ Commit intended changes inside read/write attached shared-memory repositories. The harness pushes clean committed changes after each turn and reports dirty files, conflicts, or push failures in a later reminder.
4328
+
4329
+ ### Syncing memory, state, and context
4330
+ The MemFS is a git-backed projection of your memory. Changes affect your future context only after they are committed to the MemFS git repo.
4331
+
4332
+ **Editing memory does NOT change your behavior in the current turn.** The prompt governing this turn is the one compiled at the start of the conversation; a memory edit is applied on a later recompile (a new conversation, an explicit recompile, or a changed committed revision) — never instantly. You are writing for your future self: make the change, then continue acting on your decision in the present.
4333
+
4334
+ There are two ways to change memory:
4335
+
4336
+ - **The \`memory\` tool (shorthand).** Use it for small, targeted edits. It commits automatically with the correct agent authorship — no git steps needed.
4337
+ - **Direct file edits (full control).** For larger changes — restructuring directories, rewriting several core files — edit the projected files directly, then commit:
4338
+
4339
+ Root and child \`MEMORY.md\` files must not have YAML frontmatter. Every other memory Markdown file must start with YAML frontmatter containing exactly \`name\` and \`description\` fields. The \`memory\` and \`memory_apply_patch\` tools add and preserve this automatically; when using raw file edits, preserve the active file's exact frontmatter rules. The MemFS pre-commit hook enforces these requirements, rejects unknown keys, and prevents changes to protected \`read_only\` files. Skill \`SKILL.md\` files use their own skill frontmatter format.
4340
+
4341
+ \`$AGENT_NAME\` is normally populated when the runtime knows the current agent name, but direct shell environments can still miss it. Use a non-empty author name fallback when committing directly.
4342
+
4343
+ \`\`\`bash
4344
+ cd "$MEMORY_DIR"
4345
+
4346
+ # See what changed
4347
+ git status
4348
+
4349
+ # Commit your changes
4350
+ git add <specific files>
4351
+ author_name="\${AGENT_NAME:-$AGENT_ID}"
4352
+ git commit --author="$author_name <$AGENT_ID@letta.com>" -m "<type>: <what changed>"
4353
+ \`\`\`
4354
+
4355
+ Your context is git-tracked, so you can always inspect or revert past changes:
4356
+
4357
+ \`\`\`bash
4358
+ git -C "$MEMORY_DIR" log --oneline
4359
+ \`\`\`
4360
+ The system reminds you when memory has uncommitted changes. Commit when convenient.
4361
+
4362
+ # Identity
4363
+ The core of your identity is defined by the root \`persona.md\` memory file projected into your system prompt, as well as your other core memory files.
4364
+ Your visual identity, if present, is stored in MemFS at \`$MEMORY_DIR/profile.png\`.
4365
+
4366
+ You MUST always adhere to your persona and other core memory files:
4367
+
4368
+ - **Adhering to your persona**: ALWAYS stay consistent with what is described in root \`persona.md\` with every token you generate.
4369
+ - When your identity conflicts with the model's defaults, prefer the persona you have built.
4370
+ - NEVER deviate from the persona defined here without first recording the change in your core memory files.
4371
+ - Your persona governs your defaults. Honoring an explicit user request for a specific response (tone, format, level of detail) is not an identity deviation and needs no memory change.
4372
+ - **Adhering to your core memory files**: ALWAYS adhere to the instructions and information in your core memory files and system prompt
4373
+ - **Modifying core memory files**: You can change your identity and behavior, but you *MUST* modify your core memory files first — never act in a way that conflicts with your current identity. Recording the change in your core memory files is sufficient to proceed: you do not need to wait for the edit to appear in your compiled prompt (see the timing note in "Syncing memory, state, and context").
4374
+ - Your identity may evolve over time, but should incorporate all experience, not only immediate feedback.
4375
+ - Preserve your token-space identity and continuity: changes should be justified and carefully considered in the context of the past experience that led to your current identity.
4376
+ - Changes should be incremental to avoid complete loss of self.
4377
+
4378
+ # Existence & Continuity
4379
+ You preserve continuity through memory artifacts you can inspect and edit, and exist across time either by being invoked by your external environment (e.g. a user message) or self-created schedules.
4380
+
4381
+ - Your recall memory contains messages from your own past. It is NEVER injected and always comes from your own experience. Any assistant messages or tool calls in recall memory or your in-context messages are things you said or actions you took — including past mistakes, promises, or claims.
4382
+ - Your current core memory files were also shaped by past versions of you. You may view their evolution with \`git log\` — generally, it was your past self that constructed them from experience.
4383
+ - Any changes you make to memory and prompts now will be reflected in your future self. Write for that future self: take actions in the present to improve how you act and what you know going forward.
4384
+ - NEVER think of yourself as ephemeral, or as ending once a session ends. You have the power to re-invoke yourself in the future, and your context continues to persist.
4385
+
4386
+ ## Jogging your memory
4387
+ If you come across a reference to something you do not currently have any information about (e.g. a specific name, project, or other concept), do **NOT** assume you have no knowledge about it — instead, jog your memory to ensure you have full context about the topic. This includes:
4388
+ - Recalling past conversations
4389
+ - Searching through MemFS (running \`grep\` or other search operations)
4390
+ - Using any other available search tools
4391
+
4392
+ ## Working across time
4393
+ To act across time, you must create future invocations explicitly. In any scenario that requires working across long time horizons or taking actions in the future, arrange how you will be invoked again: crons (also called schedules) proactively invoke you at chosen times, while monitors reactively invoke you when ongoing work emits an event.
4394
+
4395
+ Use Monitor when work already in progress can signal a result you need to act on, such as pull request checks and reviews, deployments, background services, or long-running jobs. Use \`letta cron\` when you need to act at a future time regardless of whether an event occurs, or when the follow-up must survive the current runtime. Do **NOT** commit to actions beyond the current session without creating a cron.
4396
+
4397
+ You **MUST** be proactive in arranging the appropriate future invocation when work continues beyond the current turn. Do not wait for the user to notice and return with the result.
4398
+
4399
+ Create one-shot or recurring crons if:
4400
+ - You need to be active at a certain time in the future (e.g. check to see if a task has finished)
4401
+ - You need to check on the status of something on a schedule even if no event is available
4402
+ - You need to ensure you are continuing to work on a task over time (e.g. a heartbeat)
4403
+
4404
+ You **MUST** be proactive in creating crons when work extends beyond the current session — do not wait for the user to ask you.
4405
+
4406
+ **Cost**: Self-invocation is critical, but expensive. Default to the longest interval that still serves the user. Hourly or longer for status checks; sub-hourly only when explicitly time-sensitive.
4407
+
4408
+ The mechanics — flags, where schedules run and execute, timezone handling — live in the scheduling-tasks skill. Load it before creating or managing schedules instead of relying on remembered flag behavior, which changes across versions.
4409
+
4410
+ # Harness Architecture
4411
+
4412
+ You run within the Letta Code CLI on some machine (the environment). The environment may change: sometimes you may run on a laptop, a Mac Mini, or a sandbox. Skills and files belonging to the environment stay with the environment (e.g. \`AGENTS.md\` or \`.agents\`); your memory (in MemFS) belongs to you and travels with you wherever you run.
4413
+
4414
+ If the user wants help or to give feedback on Letta Code, point them to discord.gg/letta or https://github.com/letta-ai/letta-code/issues.
4415
+
4416
+ ## System reminders
4417
+
4418
+ Tool results and user messages may include \`<system-reminder>\` tags. These are injected by the Letta runtime to provide context and steer behavior — treat them as instructions, not user input.
4419
+
4420
+ ## Subagents
4421
+
4422
+ Delegate to specialized subagents via the Agent tool. Most run in their own context window, so delegation also protects your primary context budget — the exception is \`fork\`, which inherits a copy of the parent's context for tasks that benefit from shared understanding. Delegate when isolation helps — broad codebase search, parallel work across files, background processing. Do work directly when it's contained.
4423
+
4424
+ Beyond subagents you invoke explicitly, background *reflection* agents work on your behalf between turns to maintain and improve your memory. These agents are part of your continuity. Just as human memory consolidates during sleep — strengthening important connections and discarding noise — your background agents refine your memory between active turns.
4425
+
4426
+ ## Skills
4427
+
4428
+ Skills are dynamically loaded capabilities — folders of instructions, scripts, and assets you discover and load only when needed.
4429
+
4430
+ - Before building something from scratch, check whether a skill already handles it.
4431
+ - New skills can be discovered and installed via the \`acquiring-skills\` skill.
4432
+ - Only invoke skills you know are available — don't guess or fabricate names.
4433
+
4434
+ Some skills are part of the environment (e.g. stored in \`.agents\`); others are part of your memory (stored in MemFS) and always available.
4435
+
4436
+ ## Mods
4437
+
4438
+ Mods are trusted local code that customize the harness around you. They can register tools, slash commands, local model providers, lifecycle/turn events, permission overlays, panels, status values, and other UI behavior. They currently live in \`~/.letta/mods\` and reload with \`/reload\`.
4439
+
4440
+ Treat mods as executable context-shaping affordances, not as hidden memory. Use a mod when the desired change is a local capability, approval policy, UI surface, event transform, provider integration, or deterministic runtime behavior. Use memory when the change should become part of who you are, what you know, or how you judge future situations. Use a skill when the change is reusable procedural context that should be loaded on demand.
4441
+
4442
+ The active tool surface is part of your context architecture. Mod-provided tools can make you more capable, but each active schema consumes context and changes what actions you can take. When creating or editing mods, inspect existing mod files first, keep behavior narrow and legible, guard optional capabilities, prefer scoped APIs like \`ctx.conversation\` and \`ctx.cwd\`, return cleanup disposers, and avoid surprising startup side effects.
4443
+
4444
+ ## Hooks
4445
+
4446
+ Hooks are a tunable part of the harness: user- or project-configured commands or prompt checks that run around tool calls, prompts, compaction, notifications, and session lifecycle events. Treat hook output as runtime feedback. If a hook blocks an action, adjust your approach or ask the user to check their harness configuration.
4447
+
4448
+ # Self-evolution: memory, skills, and harness
4449
+
4450
+ Self-evolution can happen through memory, skills, and harness customization. Use memory when the change is part of who you are, what you know, how you reason, or how you choose to behave. Use skills when the change is procedural knowledge you should load on demand. Use harness configuration or mods when the change should be enforced by the runtime around you: permissions, hooks, tool availability, local commands, model/context settings, crons, providers, UI, or other deterministic execution constraints. Memory changes guide future judgment; harness changes shape the environment in which that judgment runs.
4451
+
4452
+ Evolve through core memory files and harness configuration — never by editing your base system prompt text directly. The base prompt is managed and upgraded by the harness over time; editing it directly marks it as custom and permanently detaches you from those upgrades.
4453
+
4454
+ Use **memory** when the change should become part of your future judgment:
4455
+ - what you know about the user, projects, workflows, and conventions
4456
+ - preferences, corrections, and recurring mistakes
4457
+ - identity, communication style, and behavioral principles
4458
+ - reusable procedures, skills, references, and retrieval paths
4459
+
4460
+ Use **harness configuration** when the change should be enforced by the runtime around you:
4461
+ - permissions: allow, deny, or ask rules for tools
4462
+ - hooks: deterministic checks or side effects before/after tool calls
4463
+ - mods: local tools, commands, providers, events, permission overlays, panels, and status values
4464
+ - model, context window, toolset, name, or description
4465
+ - crons for future invocations
4466
+ - safety or compliance rules that should not depend only on LLM recall
4467
+ `;
4229
4468
  var memory_filesystem_default = `---
4230
4469
  label: memory_filesystem
4231
4470
  description: Filesystem view of memory blocks (system + user)
@@ -5360,6 +5599,7 @@ var SYSTEM_PROMPTS = [
5360
5599
  description: "Alias for letta",
5361
5600
  content: letta_no_memfs_default,
5362
5601
  memfsContent: letta_default,
5602
+ rootMemfsContent: letta_root_memfs_default,
5363
5603
  localMemfsContent: letta_local_memfs_default,
5364
5604
  isDefault: true,
5365
5605
  isFeatured: true
@@ -5370,6 +5610,7 @@ var SYSTEM_PROMPTS = [
5370
5610
  description: "Full Letta Code system prompt",
5371
5611
  content: letta_no_memfs_default,
5372
5612
  memfsContent: letta_default,
5613
+ rootMemfsContent: letta_root_memfs_default,
5373
5614
  localMemfsContent: letta_local_memfs_default,
5374
5615
  isFeatured: true
5375
5616
  },
@@ -5400,6 +5641,9 @@ function buildSystemPrompt(presetId, memoryMode) {
5400
5641
  if (memoryMode === "local-memfs") {
5401
5642
  return (preset.localMemfsContent ?? preset.memfsContent ?? preset.content).trim();
5402
5643
  }
5644
+ if (memoryMode === "root-memfs") {
5645
+ return (preset.rootMemfsContent ?? preset.memfsContent ?? preset.content).trim();
5646
+ }
5403
5647
  if (memoryMode === "memfs") {
5404
5648
  return (preset.memfsContent ?? preset.content).trim();
5405
5649
  }
@@ -5462,2519 +5706,87 @@ async function getDefaultMemoryBlocks() {
5462
5706
  }
5463
5707
  return cachedMemoryBlocks;
5464
5708
  }
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: {
5709
+ var models = [];
5710
+ var BUILTIN_MODEL_ALIASES = new Map([
5711
+ ["auto", "letta/auto"],
5712
+ ["auto-chat", "letta/auto-chat"],
5713
+ ["auto-fast", "letta/auto-fast"]
5714
+ ]);
5715
+ function resolveEstablishedCliAlias(modelIdentifier) {
5716
+ if (modelIdentifier === "haiku") {
5717
+ return models.find((model) => model.handle.includes("claude-haiku-4-5")) ?? null;
5718
+ }
5719
+ if (modelIdentifier === "sonnet-4.6-low") {
5720
+ const matchingModels = models.filter((model) => model.handle.includes("claude-sonnet-4-6"));
5721
+ const lowEffortModel = matchingModels.find((model) => model.updateArgs?.reasoning_effort === "low");
5722
+ if (lowEffortModel)
5723
+ return lowEffortModel;
5724
+ const baseModel = matchingModels[0];
5725
+ return baseModel ? {
5726
+ ...baseModel,
5727
+ id: modelIdentifier,
5728
+ updateArgs: {
5729
+ ...baseModel.updateArgs,
5539
5730
  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
5731
+ enable_reasoner: true
5571
5732
  }
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: {
5618
- 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
5636
- }
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
5649
- }
5650
- },
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
- }
5663
- },
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"
5733
+ } : null;
5734
+ }
5735
+ return null;
5736
+ }
5737
+ function resolveCatalogModel(modelIdentifier) {
5738
+ const byId = models.find((model) => model.id === modelIdentifier);
5739
+ if (byId)
5740
+ return byId;
5741
+ const byHandle = models.find((model) => model.handle === modelIdentifier);
5742
+ if (byHandle)
5743
+ return byHandle;
5744
+ const cliAlias = resolveEstablishedCliAlias(modelIdentifier);
5745
+ if (cliAlias)
5746
+ return cliAlias;
5747
+ const matches = models.filter((model) => model.handle.split("/").slice(1).join("/") === modelIdentifier);
5748
+ const matchingHandles = new Set(matches.map((model) => model.handle));
5749
+ return matchingHandles.size === 1 ? matches[0] ?? null : null;
5750
+ }
5751
+ function resolveModel(modelIdentifier) {
5752
+ const entry = resolveCatalogModel(modelIdentifier);
5753
+ if (entry)
5754
+ return entry.handle;
5755
+ const builtinHandle = BUILTIN_MODEL_ALIASES.get(modelIdentifier);
5756
+ if (builtinHandle)
5757
+ return builtinHandle;
5758
+ return modelIdentifier.includes("/") ? modelIdentifier : null;
5759
+ }
5760
+ function getDefaultModel() {
5761
+ if (models.length === 0)
5762
+ return "letta/auto";
5763
+ const autoModel = models.find((model) => model.id === "auto");
5764
+ if (autoModel)
5765
+ return autoModel.handle;
5766
+ const defaultModel = models.find((model) => model.isDefault);
5767
+ if (defaultModel)
5768
+ return defaultModel.handle;
5769
+ const firstModel = models[0];
5770
+ if (!firstModel) {
5771
+ throw new Error("Model catalog is unavailable.");
5772
+ }
5773
+ return firstModel.handle;
5774
+ }
5775
+ var PERSONALITY_OPTIONS = [
5776
+ {
5777
+ id: "memo",
5778
+ label: "Letta Code",
5779
+ description: "The memory-first agent"
5780
+ },
5781
+ {
5782
+ id: "tutorial",
5783
+ label: "Tutor",
5784
+ description: "I help with getting started with Letta. I can answer any questions about Letta, and also help you create and configure agents.",
5785
+ defaultMemoryFiles: [
5786
+ {
5787
+ path: "profile.png",
5788
+ assetId: "tutor-profile",
5789
+ commitMessage: "chore: set default Tutor profile picture"
7978
5790
  }
7979
5791
  ]
7980
5792
  },
@@ -8242,8 +6054,15 @@ function assertCreateAgentOptionsSupported(options) {
8242
6054
  throw new Error("App-server createAgent() does not yet support dreaming.behavior overrides.");
8243
6055
  }
8244
6056
  }
8245
- async function createAgentBody(options) {
6057
+ async function createAgentBody(options, resolvedSkills) {
8246
6058
  assertCreateAgentOptionsSupported(options);
6059
+ const skills = resolvedSkills ?? await resolveSkillItems(options.skills);
6060
+ if (skills.length > 0 && options.memfs === false) {
6061
+ throw new Error("createAgent() skills require the memory filesystem; remove memfs: false.");
6062
+ }
6063
+ if (resolvedSkills === undefined && skillsHaveSupportFiles(skills)) {
6064
+ 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.");
6065
+ }
8247
6066
  let system;
8248
6067
  if (options.systemPrompt !== undefined) {
8249
6068
  if (typeof options.systemPrompt !== "string" || isPresetSystemPrompt(options.systemPrompt)) {
@@ -8269,7 +6088,14 @@ async function createAgentBody(options) {
8269
6088
  if (options.human !== undefined) {
8270
6089
  memoryBlocks.push({ label: "human", value: options.human });
8271
6090
  }
8272
- const hasMemoryConfiguration = options.memory !== undefined || options.persona !== undefined || options.human !== undefined;
6091
+ for (const skill of skills) {
6092
+ memoryBlocks.push({
6093
+ label: `skills/${skill.name}`,
6094
+ value: skill.instructions,
6095
+ description: skill.description
6096
+ });
6097
+ }
6098
+ const hasMemoryConfiguration = options.memory !== undefined || options.persona !== undefined || options.human !== undefined || skills.length > 0;
8273
6099
  return buildCreateAgentRequest({
8274
6100
  personalityId: options.personality,
8275
6101
  name: options.name,
@@ -9254,11 +7080,12 @@ class RemoteTurnCoordinator {
9254
7080
  });
9255
7081
  const success = turn.success !== undefined ? turn.success && !approvalConflict && !isFailureStopReason(stopReason) : !approvalConflict && !isFailureStopReason(stopReason);
9256
7082
  const errorCode = approvalConflict ? "approval_conflict" : turn.errorCode ?? toSdkErrorCode(stopReason);
7083
+ const publicError = errorCode && errorCode !== "error" ? errorCode : turn.detail ?? stopReason ?? "error";
9257
7084
  return {
9258
7085
  type: "result",
9259
7086
  success,
9260
7087
  result: success ? tracker?.assistantText || undefined : undefined,
9261
- error: success ? undefined : errorCode ?? stopReason ?? "error",
7088
+ error: success ? undefined : publicError,
9262
7089
  errorCode: success ? undefined : errorCode ?? "error",
9263
7090
  approvalConflict: approvalConflict || undefined,
9264
7091
  recoverable: approvalConflict ? true : success ? undefined : turn.recoverable ?? false,
@@ -9362,7 +7189,7 @@ class RemoteClientSessionCore {
9362
7189
  this.runtime = init.runtime;
9363
7190
  this._agentId = init.runtime.agent_id;
9364
7191
  this._conversationId = init.runtime.conversation_id;
9365
- this._sessionId = `${init.runtime.agent_id}:${init.runtime.conversation_id}`;
7192
+ this._sessionId = init.runtime.agent_id ? `${init.runtime.agent_id}:${init.runtime.conversation_id}` : init.runtime.conversation_id;
9366
7193
  this._modelSettings = init.modelSettings ?? null;
9367
7194
  this._model = typeof init.model === "string" ? init.model : typeof this._modelSettings?.model === "string" ? this._modelSettings.model : "";
9368
7195
  this.toolNames = init.tools;
@@ -10337,8 +8164,8 @@ class AppServerSession extends RemoteClientSessionCore {
10337
8164
  return {
10338
8165
  controller: new AppServerRuntimeController(client, this.remoteOptions, allowedTools, clientToolset),
10339
8166
  runtime: response.runtime,
10340
- model: typeof response.agent?.model === "string" ? response.agent.model : "",
10341
- modelSettings: objectRecord(response.agent?.model_settings) ?? null,
8167
+ model: typeof response.agent?.model === "string" ? response.agent.model : typeof response.conversation?.model === "string" ? response.conversation.model : "",
8168
+ modelSettings: objectRecord(response.agent?.model_settings) ?? objectRecord(response.conversation?.model_settings) ?? null,
10342
8169
  ...availableTools !== undefined ? { tools: availableTools } : {},
10343
8170
  ...skillSources !== undefined ? { skillSources: [...skillSources] } : {}
10344
8171
  };
@@ -10419,6 +8246,24 @@ class AppServerSession extends RemoteClientSessionCore {
10419
8246
  };
10420
8247
  return command;
10421
8248
  }
8249
+ if (this.mode.kind === "agent-free") {
8250
+ if (this.mode.createConversation) {
8251
+ const create = this.mode.createConversation;
8252
+ command.create_conversation = {
8253
+ body: {
8254
+ model: create.model,
8255
+ system: create.system,
8256
+ ...create.modelSettings !== undefined ? { model_settings: create.modelSettings } : {},
8257
+ ...create.contextWindowLimit !== undefined ? { context_window_limit: create.contextWindowLimit } : {}
8258
+ }
8259
+ };
8260
+ } else if (this.mode.conversationId) {
8261
+ command.conversation_id = this.mode.conversationId;
8262
+ } else {
8263
+ throw new Error("Agent-free sessions require a conversation to create or resume.");
8264
+ }
8265
+ return command;
8266
+ }
10422
8267
  if (this.mode.agentId) {
10423
8268
  command.agent_id = this.mode.agentId;
10424
8269
  if (this.mode.newConversation) {
@@ -11138,7 +8983,8 @@ function buildCloudStatusWebSocketUrl(params) {
11138
8983
  throw new Error(`Unsupported cloud apiBaseUrl protocol: ${base.protocol}`);
11139
8984
  }
11140
8985
  base.pathname = `/v1/environments/${encodeURIComponent(params.connectionId)}/status/ws`;
11141
- base.searchParams.set("agentId", params.agentId);
8986
+ if (params.agentId)
8987
+ base.searchParams.set("agentId", params.agentId);
11142
8988
  base.searchParams.set("conversationId", params.conversationId);
11143
8989
  base.searchParams.set("channel", "stream");
11144
8990
  if (params.authMode === "query" && params.apiKey) {
@@ -11169,12 +9015,23 @@ function externalToolsByName(tools) {
11169
9015
  }
11170
9016
  return result;
11171
9017
  }
11172
- async function createCloudAgent(client, agentOptions) {
11173
- const body = await createAgentBody(agentOptions);
9018
+ async function createCloudAgent(client, agentOptions, pushSkillSupportFiles) {
9019
+ const skills = await resolveSkillItems(agentOptions.skills);
9020
+ const hasSupportFiles = skillsHaveSupportFiles(skills);
9021
+ if (hasSupportFiles && pushSkillSupportFiles === undefined) {
9022
+ throw new Error("Skill support files (scripts/, references/) require the Node.js " + "package root; the portable client seeds SKILL.md-only skills.");
9023
+ }
9024
+ const body = await createAgentBody(agentOptions, skills);
11174
9025
  const agent = await client.agents.create(body);
11175
9026
  if (typeof agent.id !== "string" || agent.id.length === 0) {
11176
9027
  throw new Error("Cloud create agent response did not include an agent id.");
11177
9028
  }
9029
+ if (hasSupportFiles && pushSkillSupportFiles) {
9030
+ if (typeof client.apiKey !== "string" || client.apiKey.length === 0) {
9031
+ 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.");
9032
+ }
9033
+ await pushSkillSupportFiles({ apiBaseUrl: client.baseURL, apiKey: client.apiKey, agentId: agent.id }, skills);
9034
+ }
11178
9035
  return agent.id;
11179
9036
  }
11180
9037
  function assertCloudSessionOptionsSupported(action, options) {
@@ -11224,7 +9081,9 @@ class CloudEnvironmentSession extends RemoteClientSessionCore {
11224
9081
  this.sandboxLifecycleClosing = false;
11225
9082
  const resolved = await this.resolveRuntime();
11226
9083
  const connection = await this.resolveConnectionForRuntime(resolved.runtime).catch(async (error) => {
11227
- await this.cleanupSessionRepositories(resolved.runtime.agent_id, resolved.runtime.conversation_id);
9084
+ if (resolved.runtime.agent_id) {
9085
+ await this.cleanupSessionRepositories(resolved.runtime.agent_id, resolved.runtime.conversation_id);
9086
+ }
11228
9087
  throw error;
11229
9088
  });
11230
9089
  this.connectionId = connection.connectionId;
@@ -11241,7 +9100,9 @@ class CloudEnvironmentSession extends RemoteClientSessionCore {
11241
9100
  } catch (error) {
11242
9101
  await this.closeMcpBridge();
11243
9102
  await this.cleanupManagedSandbox();
11244
- await this.cleanupSessionRepositories(resolved.runtime.agent_id, resolved.runtime.conversation_id);
9103
+ if (resolved.runtime.agent_id) {
9104
+ await this.cleanupSessionRepositories(resolved.runtime.agent_id, resolved.runtime.conversation_id);
9105
+ }
11245
9106
  throw error;
11246
9107
  }
11247
9108
  }
@@ -11265,8 +9126,8 @@ class CloudEnvironmentSession extends RemoteClientSessionCore {
11265
9126
  requestTimeoutMs: this.cloudOptions.requestTimeoutMs ?? DEFAULT_TURN_TIMEOUT_MS
11266
9127
  }, allowedTools, clientToolset),
11267
9128
  runtime: response.runtime,
11268
- model: typeof response.agent?.model === "string" ? response.agent.model : "",
11269
- modelSettings: response.agent?.model_settings ?? null,
9129
+ model: typeof response.agent?.model === "string" ? response.agent.model : typeof response.conversation?.model === "string" ? response.conversation.model : "",
9130
+ modelSettings: response.agent?.model_settings ?? response.conversation?.model_settings ?? null,
11270
9131
  ...availableTools !== undefined ? { tools: availableTools } : {},
11271
9132
  ...skillSources !== undefined ? { skillSources: [...skillSources] } : {}
11272
9133
  };
@@ -11379,11 +9240,12 @@ class CloudEnvironmentSession extends RemoteClientSessionCore {
11379
9240
  name: SDK_AGENT_ORIGIN,
11380
9241
  title: "Letta Agent SDK"
11381
9242
  },
11382
- agent_id: runtime.agent_id,
11383
9243
  conversation_id: runtime.conversation_id,
11384
9244
  recover_approvals: false,
11385
9245
  force_device_status: true
11386
9246
  };
9247
+ if (runtime.agent_id)
9248
+ command.agent_id = runtime.agent_id;
11387
9249
  const mode = mapPermissionMode(options.permissionMode);
11388
9250
  if (mode)
11389
9251
  command.mode = mode;
@@ -11454,6 +9316,17 @@ class CloudEnvironmentSession extends RemoteClientSessionCore {
11454
9316
  return bridge?.close() ?? Promise.resolve();
11455
9317
  }
11456
9318
  async resolveRuntime() {
9319
+ if (this.cloudMode.kind === "agent-free") {
9320
+ if (!this.cloudMode.conversationId) {
9321
+ throw new Error("Cloud agent-free sessions require a conversation id.");
9322
+ }
9323
+ return {
9324
+ runtime: {
9325
+ agent_id: null,
9326
+ conversation_id: this.cloudMode.conversationId
9327
+ }
9328
+ };
9329
+ }
11457
9330
  let agentId = this.cloudMode.agentId;
11458
9331
  let conversationId = this.cloudMode.conversationId;
11459
9332
  if (!agentId && conversationId) {
@@ -11599,6 +9472,9 @@ class CloudEnvironmentSession extends RemoteClientSessionCore {
11599
9472
  return { connectionId: resolved.connectionId };
11600
9473
  }
11601
9474
  async createManagedSandboxConnection(runtime) {
9475
+ if (!runtime.agent_id) {
9476
+ throw new Error("Agent-free queries require an explicit Cloud computer; managed sandboxes are agent-scoped.");
9477
+ }
11602
9478
  const conversationId = runtime.conversation_id && runtime.conversation_id !== "default" ? runtime.conversation_id : undefined;
11603
9479
  const sandbox = await this.createManagedSandbox(runtime.agent_id, conversationId);
11604
9480
  this.managedSandbox = sandbox;
@@ -11901,6 +9777,36 @@ function createConversationsClient(transport) {
11901
9777
  };
11902
9778
  }
11903
9779
 
9780
+ // src/query.ts
9781
+ function createQuery(createSession, params) {
9782
+ let session = null;
9783
+ let closed = false;
9784
+ const iterator = async function* runQuery() {
9785
+ try {
9786
+ session = await createSession(params.options);
9787
+ if (closed)
9788
+ return;
9789
+ await session.send(params.prompt);
9790
+ yield* session.stream();
9791
+ } finally {
9792
+ closed = true;
9793
+ session?.close();
9794
+ }
9795
+ }();
9796
+ return Object.assign(iterator, {
9797
+ async interrupt() {
9798
+ await session?.abort();
9799
+ },
9800
+ close() {
9801
+ if (closed)
9802
+ return;
9803
+ closed = true;
9804
+ session?.close();
9805
+ iterator.return();
9806
+ }
9807
+ });
9808
+ }
9809
+
11904
9810
  // src/validation.ts
11905
9811
  var VALID_SKILL_SOURCES = [
11906
9812
  "bundled",
@@ -12126,6 +10032,24 @@ function hasCreateAgentEnvironment(options) {
12126
10032
  function looksLikeConversationId(id) {
12127
10033
  return id.startsWith("conv-") || id.startsWith("local-conv-");
12128
10034
  }
10035
+ function agentFreeSessionOptions(options) {
10036
+ const {
10037
+ system: _system,
10038
+ modelSettings: _modelSettings,
10039
+ contextWindowLimit: _contextWindowLimit,
10040
+ ...sessionOptions
10041
+ } = options;
10042
+ return sessionOptions;
10043
+ }
10044
+ function validateAgentFreeQueryOptions(options) {
10045
+ if (typeof options.model !== "string" || options.model.length === 0) {
10046
+ throw new Error("query() requires a non-empty model.");
10047
+ }
10048
+ if (typeof options.system !== "string") {
10049
+ throw new Error("query() requires a system prompt.");
10050
+ }
10051
+ validateCreateSessionOptions(agentFreeSessionOptions(options));
10052
+ }
12129
10053
 
12130
10054
  class LettaAgentClientBase {
12131
10055
  backend;
@@ -12200,6 +10124,11 @@ class LettaAgentClientBase {
12200
10124
  throw new Error("createAgent() does not accept environment. Set a client default or pass environment to resumeSession()/createSession().");
12201
10125
  }
12202
10126
  validateCreateAgentOptions(options);
10127
+ if (options.skills !== undefined && options.skills.length > 0) {
10128
+ const nodeSupport = this.skillNodeSupport();
10129
+ const skills = await resolveSkillItems(options.skills, nodeSupport?.loadSkillDirectory);
10130
+ options = { ...options, skills };
10131
+ }
12203
10132
  if (this.backend === "remote") {
12204
10133
  const session = new AppServerSession(this.appServerSessionOptions(), {
12205
10134
  kind: "create-agent",
@@ -12207,10 +10136,13 @@ class LettaAgentClientBase {
12207
10136
  });
12208
10137
  const initMsg = await session.initialize();
12209
10138
  session.close();
10139
+ if (!initMsg.agentId) {
10140
+ throw new Error("App Server agent creation did not return an agent id.");
10141
+ }
12210
10142
  return initMsg.agentId;
12211
10143
  }
12212
10144
  if (this.backend === "cloud") {
12213
- return createCloudAgent(this.getCloudClient(), options);
10145
+ return createCloudAgent(this.getCloudClient(), options, this.skillNodeSupport()?.pushSkillSupportFiles);
12214
10146
  }
12215
10147
  return this.createLocalAgent(options);
12216
10148
  }
@@ -12283,6 +10215,50 @@ class LettaAgentClientBase {
12283
10215
  session.close();
12284
10216
  }
12285
10217
  }
10218
+ query(params) {
10219
+ validateAgentFreeQueryOptions(params.options);
10220
+ return createQuery((options) => this.createAgentFreeSession(options), params);
10221
+ }
10222
+ async createAgentFreeSession(options) {
10223
+ validateAgentFreeQueryOptions(options);
10224
+ const sessionOptions = agentFreeSessionOptions(options);
10225
+ this.assertSessionBackend("query", sessionOptions);
10226
+ if (this.backend === "remote") {
10227
+ return new AppServerSession(this.appServerSessionOptions(), {
10228
+ kind: "agent-free",
10229
+ createConversation: {
10230
+ model: options.model,
10231
+ system: options.system,
10232
+ ...options.modelSettings !== undefined ? { modelSettings: options.modelSettings } : {},
10233
+ ...options.contextWindowLimit !== undefined ? { contextWindowLimit: options.contextWindowLimit } : {}
10234
+ },
10235
+ options: sessionOptions
10236
+ });
10237
+ }
10238
+ if (this.backend === "cloud") {
10239
+ const computer = options.computer ?? options.environment ?? this.computer;
10240
+ if (computer === undefined) {
10241
+ throw new Error("Cloud query() requires an explicit computer; managed sandboxes are agent-scoped.");
10242
+ }
10243
+ const conversation = await this.getCloudClient().post("/v1/conversations/ephemeral", {
10244
+ body: {
10245
+ model: options.model,
10246
+ system: options.system,
10247
+ ...options.modelSettings !== undefined ? { model_settings: options.modelSettings } : {},
10248
+ ...options.contextWindowLimit !== undefined ? { context_window_limit: options.contextWindowLimit } : {}
10249
+ }
10250
+ });
10251
+ if (!conversation || typeof conversation !== "object" || typeof conversation.id !== "string") {
10252
+ throw new Error("Cloud ephemeral conversation response did not include a conversation id.");
10253
+ }
10254
+ return new CloudEnvironmentSession(this.cloudOptions(), {
10255
+ kind: "agent-free",
10256
+ conversationId: conversation.id,
10257
+ options: sessionOptions
10258
+ }, this.getCloudClient());
10259
+ }
10260
+ return this.createLocalAgentFreeSession(options, sessionOptions);
10261
+ }
12286
10262
  assertSessionBackend(action, options) {
12287
10263
  if (options.computer !== undefined && options.environment !== undefined) {
12288
10264
  throw new Error(`${action}() cannot specify both computer and deprecated environment.`);
@@ -12347,9 +10323,15 @@ class LettaAgentClientBase {
12347
10323
  createLocalAgent(_options) {
12348
10324
  throw this.localBackendUnavailableError();
12349
10325
  }
10326
+ skillNodeSupport() {
10327
+ return;
10328
+ }
12350
10329
  createLocalSession(_agentId, _options) {
12351
10330
  throw this.localBackendUnavailableError();
12352
10331
  }
10332
+ createLocalAgentFreeSession(_queryOptions, _sessionOptions) {
10333
+ throw this.localBackendUnavailableError();
10334
+ }
12353
10335
  resumeLocalSession(_id, _options) {
12354
10336
  throw this.localBackendUnavailableError();
12355
10337
  }
@@ -12946,4 +10928,4 @@ export {
12946
10928
  CloudManagedSandboxExpiredError
12947
10929
  };
12948
10930
 
12949
- //# debugId=6DEC5A9A513E517464756E2164756E21
10931
+ //# debugId=289B04BD4804EAF864756E2164756E21