Skip to content

Provider-Level Model Bucketing for Model Selection #262

@zeus2611

Description

@zeus2611

What problem does this address?

Model selection is currently hardcoded in helpers.php via three static priority lists (get_preferred_models_for_text_generation(), get_preferred_image_models(), get_preferred_vision_models()). While this was an intentional design decision to prevent surprise model upgrades from breaking things or inflating costs, it creates a few pain points:

  • Users with multiple API keys configured have no visibility into which provider is actually handling their tasks.
  • There is no UI-level way to express a preference — customization is only possible via PHP filters, which is inaccessible to most users.
  • Hardcoding specific model names is brittle given how fast the AI landscape changes, and it forces the team to make opinionated model-tier recommendations that may quickly become outdated.

What is your proposed solution?

Introduce provider-level bucketing as a middle ground between full model selection and the current fully hardcoded approach:

  • Let users select a preferred provider (Anthropic, Google, or OpenAI) for text and image generation tasks, rather than picking a specific model.
  • The internal model priority order within each provider remains intact — preserving the stability guarantees that were the motivation for the original design.
  • Default provider values are pre-set based on the current priority logic, so behavior is unchanged for users who don't configure anything.
  • This gives users meaningful visibility and control without exposing them to the complexity of individual model names.

As a longer-term direction, a capability-tier bucketing approach (e.g. fast/cheap vs. high-reasoning) could complement this — borrowing from patterns used by tools like oh-my-opencode — with an escape hatch for users who disagree with a bucket's default assignment.

This work also has natural overlap with the Playground feature (#32), which will require dynamic model input regardless, and should be designed in alignment with whatever bucketing approach we land on here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status

    In discussion / Needs decision

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions