Skip to content

feat(agent): integrate complexity triage into agent loop with provider swap #2144

@bug-ops

Description

@bug-ops

Parent epic: #2141

Phase 3: Agent loop integration

Tasks

  • Insert triage check in process_user_message_inner() after prepare_context(), before process_response()
  • Pattern: similar to guardrail check (mod.rs:3118) — async pre-call gate
  • Pass context token count from ContextBudget to TriageRouter::assess()
  • On tier decision: swap provider via existing provider_override: Arc<RwLock<Option<AnyProvider>>> slot
  • Context window hard override: if accumulated tokens > target provider's context_window() × 0.8, auto-escalate
  • Status message via channel.send_status("evaluating complexity...")
  • Fallback: if triage call fails → use default provider, log warning
  • Reset provider_override after response (so next turn gets fresh triage)

Key files

  • crates/zeph-core/src/agent/mod.rs (process_user_message_inner)
  • crates/zeph-core/src/agent/builder.rs (triage provider injection)

Acceptance criteria

  • Simple prompt ("hello") routes to cheap provider in multi-provider setup
  • Complex prompt routes to expensive provider
  • Triage provider failure falls back to default without error to user
  • Context overflow auto-escalates to provider with larger window

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions