Skip to content

Surface model thinking controls in Chat and Agent Mode #775

Description

@AnthonyRonning

Context

Once OpenSecret exposes authoritative per-model thinking metadata and accepts a normalized thinking level on initial and follow-up requests, Maple should make that control available in both of its chat surfaces. Maple should consume OpenSecret's capability metadata rather than maintaining its own hard-coded list of reasoning models or provider-specific parameters.

Dependency

Scope

  • Add a compact thinking control (button, segmented control, or dropdown as appropriate to the existing composer UI) to:
    • the standard Maple chat composer;
    • the Maple Agent chat composer backed by Goose.
  • Populate the available choices and default from OpenSecret model metadata for the selected model.
  • Hide or disable the control for models that do not support configurable thinking.
  • Support the normalized options advertised by the backend, expected to include combinations such as off, low, high, and max depending on the model.
  • Send the selected value on initial requests and every user-initiated follow-up request.
  • Wire Agent Mode through Maple's custom Goose provider so it sends the OpenSecret-supported setting without relying on Goose model-name heuristics or duplicating provider-specific translation in Maple.
  • Keep the normal chat and Agent Mode behavior consistent.

Preference persistence

  • Persist the user's selection similarly to Maple's current model preferences.
  • Key the preference by model so a level selected for one model does not leak into an unsupported or differently configured model.
  • Use the model's advertised default when no user preference exists.
  • Reconcile stale stored values safely if backend metadata changes and a previously selected level is no longer supported.
  • Use the same model-specific preference across both chat surfaces unless there is a concrete product reason to keep them separate.

UX considerations

  • Make the current setting visible without overcrowding the composer.
  • Clearly distinguish non-thinking/off from active thinking levels.
  • Avoid implying that every reasoning-capable model supports every level.
  • Preserve the selected setting as the user switches conversations, models, and between standard Chat and Agent Mode, subject to each model's advertised capabilities.

Acceptance criteria

  • Both composers render controls from backend metadata rather than hard-coded model IDs.
  • Unsupported models do not show an actionable thinking selector.
  • Supported selections are included on initial and follow-up requests in standard Chat and Agent Mode.
  • Model-specific selections persist across application restarts and do not leak between models.
  • A removed or changed backend capability falls back to the advertised default without breaking message submission.
  • Tests cover capability loading, model switching, preference persistence, follow-up requests, and both provider paths.
  • Existing conversations and models without configurable thinking remain backward compatible.

Activity

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