Skip to content

refactor: replace hardcoded model names in pipelines with adapter-agnostic tiers (cheapest/fastest/strongest) #704

@nextlevelshit

Description

@nextlevelshit

Summary

Pipelines and personas currently reference adapter-specific model names (e.g. claude-sonnet-4-5-20250514). This couples pipeline definitions to a single adapter. Instead, steps should declare a model tiercheapest, fastest, or strongest — and the runtime should resolve the tier to a concrete model based on the active adapter's configuration in wave.yaml.

Original Description

i want pipelines and personas to be adapter agnostic, this means for each step we just choose from "cheapest, fastest or strongest" and this adapts to the three categories in the wave manifest file

so when choosing to run with --adapter opencode, the pipeline should change to those three models (depending on the users preferences)

Current Behavior

  • Pipeline YAML and persona definitions use hardcoded model names tied to a specific adapter (e.g. Claude model IDs).
  • Switching adapters via --adapter does not remap models; the pipeline fails or uses wrong models.

Desired Behavior

  • Pipeline steps and personas declare a tier (cheapest, fastest, or strongest) instead of a concrete model name.
  • The wave.yaml manifest maps each tier to a concrete model per adapter.
  • At runtime, the executor resolves the tier to the correct model for the active adapter.
  • Users can override tier→model mappings in their manifest.

Acceptance Criteria

  • Define a model_tier enum (cheapest, fastest, strongest) in pipeline/persona schema
  • Add tier→model mapping section to wave.yaml adapter configuration
  • Pipeline executor resolves tier to concrete model at step execution time
  • All built-in pipelines and personas use tiers instead of hardcoded model names
  • --adapter <name> flag correctly resolves tiers for the selected adapter
  • Backward compatibility: raw model names still work if specified directly
  • Documentation updated for manifest tier configuration

Implementation Notes

  • The manifest already has adapter sections — tier mappings could nest under each adapter config.
  • Consider a sensible default mapping so users don't need to configure every tier for every adapter.
  • Persona model field should accept both tier keywords and raw model strings.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions