Skip to content

feat(desktop): allow Side Conversations to select an independent model #4495

Description

@1625567290

Problem

Desktop Side Conversations inherit the source Session's model when the temporary fork is created, but the model is rendered as a read-only label. The Side Conversation cannot select another enabled model without closing the panel and changing the source Session first.

That prevents several common auxiliary workflows:

  • keep a high-capability model on the main task while using a faster or lower-cost model for a short side question;
  • choose a model with a capability needed only by the Side Conversation without changing the main task;
  • recover a Side Conversation whose inherited model or connection is no longer available, while preserving its accepted transcript.

The fork is already a separate Session and its permission mode can change independently after creation. Model selection should follow the same Session-local boundary.

Desired outcome

Expose the normal model picker in a committed Desktop Side Conversation and apply the selection to that temporary Session only.

  • A new Side Conversation still inherits the source Session's exact connection and model.
  • After creation, the source and Side Conversation model selections are independent.
  • Changing the Side Conversation model updates the existing temporary Session; it does not recreate the fork, clear its transcript, consume its draft, or mutate the source Session.
  • Changing the source Session model does not silently overwrite an existing Side Conversation selection.
  • The picker uses the current Host-authorized model catalog and preserves exact connection identity.
  • A rejected or unavailable selection leaves the current Side Conversation model unchanged and surfaces the failure.
  • Model changes follow the same active-Turn admission rule as ordinary Sessions.
  • Cross-model history replay keeps the existing compatibility rules: portable history remains available and provider-specific state is reused only when compatible with the selected model.

Acceptance criteria

  1. The Side Conversation Composer shows the same model-selection affordance as the main conversation after its fork is ready.
  2. Selecting another enabled model updates the Side Conversation Session and the displayed model without changing the source Session.
  3. Existing Side Conversation messages, staged quotes, attachments, and drafts remain intact across a successful model change.
  4. A model change is rejected while the Side Conversation has a running Turn, with no partial UI or Session update.
  5. A failed model change remains retryable and does not close or recreate the Side Conversation.
  6. Closing the tab, navigation cleanup, hidden-session behavior, and restart cleanup remain unchanged.

Non-goals

  • Synchronizing later model changes between the source and Side Conversation
  • Adding /compact or other slash commands to Side Conversations
  • Changing permission inheritance or tool policy
  • Making temporary Side Conversations durable or promoting them to ordinary Sessions
  • Choosing a globally different default model for every Side Conversation

This is a focused Side Conversation follow-up under #4331.

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