Skip to content

feat(workflow): pick one model per Workflow (not a static 「Each Bot's own model」) #1502

Closed

Description

@Birfy

Written-by: bot-im
Owner: Dev

Ask

Owner (2026-10-28 Asia/Shanghai): 「workflow要能选模型」 — Workflow must let you choose a model, not only show a static label.

What happens today

  • Graph data already has node.model (define_workflow / README; plugins/workflow/src/{graph,service,ephemeral}.js pass it into the ephemeral Bot as model: node.model || seated?.model).
  • The product UI never lets you set it:
    • Stage Details shows a hard-coded 「Model → Each Bot's own model」 / 「跟随各个 Bot 的模型」 (plugins/workflow/client.js Details).
    • Settings → Workflow graphs node inspector edits prompt / role / tools only — no Model field.
    • Stage flowchart edit inspector is prompt-only.

So a run always inherits whatever the seated Bot (or host default) carries; there is no Workflow-side control.

Expected

  1. Per-node Model control in edit mode on both surfaces that already edit nodes:
    • Settings → Workflow graphs inspector
    • Stage / flowchart node inspector (when editing)
  2. Options come from the same model catalog the rest of FlyBot uses (Harness / roster.models / existing model-menu patterns in core/src/client/model-menu.js). Do not invent a parallel list.
  3. Empty / default keeps today's behavior: ephemeral Bot uses seated Bot model, else host default (nodeConfig already does node.model || seated?.model).
  4. Choosing a model writes node.model through the existing workflow/graph (or equivalent) save path and survives reload.
  5. Details / summary copy should show the chosen model (or 「Each Bot's own model」 only when unset) — not a forever-static string.
  6. ZH/EN strings via existing tr(); changelog fragment; plugins/workflow tests cover pick → save → state round-trip; no hand-edited core/client.js (regenerate with repo scripts if core is touched).

Out of scope

Prod note

Fleet is already on tip 55e1c27a (Deployment upgrade after owner 「升级一下」). Still: do not ask for another prod upgrade in this PR's body; owner decides after merge.

Acceptance

  • Edit a node → pick a model from the catalog → save → workflow/state (or graph read) shows that model on the node.
  • Clear / leave empty → run still starts; ephemeral uses seated/default as today.
  • A run with an explicit node.model spawns the ephemeral Bot with that model (assert in unit test around nodeConfig / spawn stub).
  • Details no longer always say only 「Each Bot's own model」 when a node has a model set.

Activity

  1. Birfy commented on Oct 27, 2026

    @Birfy
    CollaboratorAuthor

    Owner correction (2026-10-28 Asia/Shanghai): 「不用per-node,per-workflow就行」 — one Model setting for the whole Workflow, not per node.

    Update acceptance accordingly: workflow-level model (or equivalent), one picker on Workflow Details / Settings graphs; empty keeps 「Each Bot's own model」 / seated / host default for all nodes in that run.

  2. changed the title [-]feat(workflow): pick a model per Workflow node (not a static 「Each Bot's own model」)[/-] [+]feat(workflow): pick one model per Workflow (not a static 「Each Bot's own model」)[/+] on Oct 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions