Support configuring effort alongside model

This commit is contained in:
Ian Gulliver
2026-10-23 08:40:00 -07:00
parent 6bbae3fffe
commit d6d9dd86d9
40 changed files with 805 additions and 541 deletions
+18 -4
View File
@@ -47,7 +47,7 @@ paths:
/api/me/default-model:
put:
operationId: updateDefaultModel
description: Sets the model the calling user's app starts new tasks on.
description: Sets the model and effort the calling user's app starts new tasks on.
requestBody:
required: true
content:
@@ -1583,7 +1583,7 @@ components:
User:
type: object
required: [login, display_name, git_name, git_email, notification_prefs, default_model, away, quick_run]
required: [login, display_name, git_name, git_email, notification_prefs, default_model, default_effort, away, quick_run]
properties:
login: { type: string }
display_name: { type: string }
@@ -1591,6 +1591,7 @@ components:
git_email: { type: string }
notification_prefs: { $ref: "#/components/schemas/NotificationPrefs" }
default_model: { type: string, description: The model the app starts new tasks on. }
default_effort: { type: string, description: "The effort the app starts new tasks on; empty means the vendor's default." }
away: { type: boolean, description: "While true, byre answers the questions agents ask in this user's tasks at once." }
quick_run: { $ref: "#/components/schemas/QuickRun" }
@@ -1610,9 +1611,10 @@ components:
DefaultModel:
type: object
required: [model]
required: [model, effort]
properties:
model: { type: string }
effort: { type: string }
NotificationPrefs:
type: object
@@ -1731,6 +1733,7 @@ components:
properties:
title: { type: string, description: The title of the item to start. }
model: { type: string }
effort: { type: string }
discuss: { type: boolean, description: "Tell the agent the human wants to discuss the item in chat before anything is built." }
MergeFacts:
@@ -1784,6 +1787,7 @@ components:
items: { type: string }
description: Blob ids of images attached to the first message; they start the agent like prompt does. Not with workflow.
model: { type: string, description: The agent's model when prompt or images are given. }
effort: { type: string, description: "The agent's effort when prompt or images are given; empty or absent means the vendor's default." }
workflow:
type: string
description: >
@@ -1823,6 +1827,7 @@ components:
properties:
stage: { type: string, x-go-type-skip-optional-pointer: true, description: "The stage's name, one line of 1 to 100 characters, unique within the workflow." }
model: { type: string, x-go-type-skip-optional-pointer: true, description: "The stage agent's model, which also picks its vendor: gpt-* models run on Codex, gemini-* models on Antigravity, every other model on Claude Code. Required without agents, refused with them." }
effort: { type: string, x-go-type-skip-optional-pointer: true, description: "The stage agent's effort (low, medium, high, xhigh, max; Codex models take low to xhigh); empty means the vendor's default. Refused with agents." }
prompt: { type: string, x-go-type-skip-optional-pointer: true, description: "The stage agent's instructions; with agents, the instructions every agent of the team gets before its own." }
order:
type: array
@@ -1856,6 +1861,7 @@ components:
properties:
name: { type: string, description: "The agent's name in the team, one line of 1 to 100 characters, unique within the team." }
model: { type: string, description: "The agent's model, which also picks its vendor." }
effort: { type: string, x-go-type-skip-optional-pointer: true, description: "The agent's effort; empty means the vendor's default." }
prompt: { type: string, description: "This agent's own instructions: its role in the team." }
TaskWorkflow:
@@ -2088,7 +2094,7 @@ components:
AgentSession:
type: object
required: [id, task_id, owner, vendor, model, vendor_session_id, state, role, member, created_by, created_at, subagents, paused]
required: [id, task_id, owner, vendor, model, effort, vendor_session_id, state, role, member, created_by, created_at, subagents, paused]
properties:
id: { type: string }
task_id: { type: string, description: Empty for a lead session. }
@@ -2096,6 +2102,7 @@ components:
owner: { type: string, description: "The login whose lead agent this is; empty for a task's session." }
vendor: { type: string, enum: [claude, codex, antigravity], description: "Follows from the model the session was created with: gpt-* models run on Codex, gemini-* models on Antigravity, every other model on Claude Code." }
model: { type: string, description: "Requested model; empty means the vendor's default. A session only switches between its own vendor's models." }
effort: { type: string, description: "Requested effort (low, medium, high, xhigh, max; Codex models take low to xhigh); empty means the vendor's default." }
vendor_session_id: { type: string, description: "Claude Code's session id, chosen by byre; or the Codex thread id or Antigravity conversation id, empty until the session first starts." }
state:
type: string
@@ -2114,6 +2121,7 @@ components:
properties:
prompt: { type: string }
model: { type: string }
effort: { type: string }
images:
type: array
items: { type: string }
@@ -2134,6 +2142,9 @@ components:
model:
type: string
description: Model for this turn and later ones. When it differs from the session's model, the session switches before the message is sent.
effort:
type: string
description: Effort for this turn and later ones, set together with model; empty means the vendor's default. Ignored without model, which keeps the session's model and effort.
send_id:
type: string
description: The caller's id for this send, carried on the user.queued and user.message events the message records.
@@ -2150,6 +2161,9 @@ components:
model:
type: string
description: Model for the new session, on either vendor. The old session still writes the handoff. Defaults to the old session's model.
effort:
type: string
description: Effort for the new session, set together with model; empty means the vendor's default. Without model, the new session keeps the old one's model and effort.
Blob:
type: object