Files
manual_slop/conductor/tracks/per_ticket_model_20260306/plan.md

2.7 KiB

Implementation Plan: Per-Ticket Model Override (per_ticket_model_20260306)

Reference: Spec | Architecture Guide

Phase 1: Model Override Field

Focus: Add field to Ticket dataclass

  • Task 1.1: Initialize MMA Environment

  • Task 1.2: Add model_override to Ticket (245653c)

    • WHERE: src/models.py Ticket dataclass
    • WHAT: Add optional model override field
    • HOW:
      @dataclass
      class Ticket:
       # ... existing fields ...
       model_override: Optional[str] = None
      
  • Task 1.3: Update serialization (245653c)

    • WHERE: src/models.py Ticket.to_dict() and from_dict()
    • WHAT: Include model_override
    • HOW: Add field to dict conversion

Phase 2: Model Dropdown UI

Focus: Add model selection to ticket display

  • Task 2.1: Get available models list

    • WHERE: src/gui_2.py or from cost_tracker
    • WHAT: List of available models
    • HOW:
      AVAILABLE_MODELS = ["gemini-2.5-flash-lite", "gemini-2.5-flash", "gemini-3.1-pro-preview", "claude-3-5-sonnet", "deepseek-v3"]
      
  • Task 2.2: Add dropdown to ticket UI

    • WHERE: src/gui_2.py ticket rendering
    • WHAT: Combo for model selection
    • HOW:
      current_model = ticket.model_override or "Default"
      if imgui.begin_combo("Model", current_model):
       if imgui.selectable("Default", ticket.model_override is None):
        ticket.model_override = None
       for model in AVAILABLE_MODELS:
        if imgui.selectable(model, ticket.model_override == model):
         ticket.model_override = model
       imgui.end_combo()
      

Phase 3: Visual Indicator

Focus: Show when override is active

  • Task 3.1: Color-code override tickets
    • WHERE: src/gui_2.py ticket rendering
    • WHAT: Visual distinction for override
    • HOW:
      if ticket.model_override:
       imgui.text_colored(vec4(255, 200, 100, 255), f"[{ticket.model_override}]")
      

Phase 4: Execution Integration

Focus: Use override in worker execution

  • Task 4.1: Check override in ConductorEngine.run()
    • WHERE: src/multi_agent_conductor.py run()
    • WHAT: Use ticket.model_override if set
    • HOW:
      if ticket.model_override:
       model_name = ticket.model_override
      else:
       # Use existing escalation logic
       models = ["gemini-2.5-flash-lite", "gemini-2.5-flash", "gemini-3.1-pro-preview"]
       model_idx = min(ticket.retry_count, len(models) - 1)
       model_name = models[model_idx]
      

Phase 5: Testing

  • Task 5.1: Write unit tests
  • Task 5.2: Conductor - Phase Verification