Skip to content

feat(llm): add ComplexityTier enum and TriageRouter with structured output #2142

@bug-ops

Description

@bug-ops

Parent epic: #2141

Phase 1: Core types + triage prompt

Tasks

  • Add ComplexityTier enum (Simple, Medium, Complex, Expert) to zeph-llm/src/router/triage.rs
  • Add TriageVerdict struct (tier, reason, large_context) with Deserialize + JsonSchema
  • Implement TriageRouter struct with assess() method that sends a minimal prompt to a cheap model
  • Use chat_typed::<TriageVerdict>() for structured JSON output
  • Triage prompt: ~150 input tokens, includes user message + conversation stats (msg_count, total_tokens, tool_count)
  • Unit tests with MockProvider

Key files

  • crates/zeph-llm/src/router/triage.rs (new)
  • crates/zeph-llm/src/router/mod.rs (re-export)

Acceptance criteria

  • TriageRouter::assess() returns TriageVerdict from mock provider
  • Handles provider errors gracefully (fallback to Medium tier)
  • Proptest: assess() never panics on arbitrary input

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestllmzeph-llm crate (Ollama, Claude)

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions