2.7 KiB
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.pyTicketdataclass - WHAT: Add optional model override field
- HOW:
@dataclass class Ticket: # ... existing fields ... model_override: Optional[str] = None
- WHERE:
-
Task 1.3: Update serialization (
245653c)- WHERE:
src/models.pyTicket.to_dict()andfrom_dict() - WHAT: Include model_override
- HOW: Add field to dict conversion
- WHERE:
Phase 2: Model Dropdown UI
Focus: Add model selection to ticket display
-
Task 2.1: Get available models list
- WHERE:
src/gui_2.pyor 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"]
- WHERE:
-
Task 2.2: Add dropdown to ticket UI
- WHERE:
src/gui_2.pyticket 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()
- WHERE:
Phase 3: Visual Indicator
Focus: Show when override is active
- Task 3.1: Color-code override tickets
- WHERE:
src/gui_2.pyticket rendering - WHAT: Visual distinction for override
- HOW:
if ticket.model_override: imgui.text_colored(vec4(255, 200, 100, 255), f"[{ticket.model_override}]")
- WHERE:
Phase 4: Execution Integration
Focus: Use override in worker execution
- Task 4.1: Check override in ConductorEngine.run()
- WHERE:
src/multi_agent_conductor.pyrun() - 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]
- WHERE:
Phase 5: Testing
- Task 5.1: Write unit tests
- Task 5.2: Conductor - Phase Verification