archiving tracks

This commit is contained in:
2026-03-08 13:29:53 -04:00
parent b44c0f42cd
commit 66338b3ba0
83 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
# Per-Ticket Model Override
**Track ID:** per_ticket_model_20260306
**Status:** Planned
**See Also:**
- [Spec](./spec.md)
- [Plan](./plan.md)

View File

@@ -0,0 +1,9 @@
{
"id": "per_ticket_model_20260306",
"name": "Per-Ticket Model Override",
"status": "planned",
"created_at": "2026-03-06T00:00:00Z",
"updated_at": "2026-03-06T00:00:00Z",
"type": "feature",
"priority": "medium"
}

View File

@@ -0,0 +1,53 @@
# Implementation Plan: Per-Ticket Model Override (per_ticket_model_20260306)
> **Reference:** [Spec](./spec.md) | [Architecture Guide](../../../docs/guide_architecture.md)
## Phase 1: Model Override Field
Focus: Add field to Ticket dataclass
- [x] Task 1.1: Initialize MMA Environment
- [x] Task 1.2: Add model_override to Ticket (245653c)
- WHERE: `src/models.py` `Ticket` dataclass
- WHAT: Add optional model override field
- HOW:
```python
@dataclass
class Ticket:
# ... existing fields ...
model_override: Optional[str] = None
```
- [x] 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
- [x] Task 2.1: Get available models list (63d1b04)
- [x] Task 2.2: Add dropdown to ticket UI (63d1b04)
- [x] Task 3.1: Color-code override tickets (63d1b04)
## Phase 4: Execution Integration
Focus: Use override in worker execution
- [x] Task 4.1: Check override in ConductorEngine.run() (e20f8a1)
- WHERE: `src/multi_agent_conductor.py` `run()`
- WHAT: Use ticket.model_override if set
- HOW:
```python
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
- [x] Task 5.1: Write unit tests
- [x] Task 5.2: Conductor - Phase Verification

View File

@@ -0,0 +1,113 @@
# Track Specification: Per-Ticket Model Override (per_ticket_model_20260306)
## Overview
Allow user to manually select which model to use for a specific ticket, overriding the default tier model. Useful for forcing smarter model on hard tickets.
## Current State Audit
### Already Implemented (DO NOT re-implement)
#### Ticket Model (src/models.py)
- **`Ticket` dataclass**: Has `assigned_to` but no `model_override`
- **`status` field**: "todo" | "in_progress" | "completed" | "blocked"
- **No model selection per ticket**
#### Tier Usage (src/multi_agent_conductor.py)
- **`ConductorEngine.tier_usage`**: Has per-tier model assignment
```python
self.tier_usage = {
"Tier 1": {"input": 0, "output": 0, "model": "gemini-3.1-pro-preview"},
"Tier 2": {"input": 0, "output": 0, "model": "gemini-3-flash-preview"},
"Tier 3": {"input": 0, "output": 0, "model": "gemini-2.5-flash-lite"},
"Tier 4": {"input": 0, "output": 0, "model": "gemini-2.5-flash-lite"},
}
```
#### Model Escalation (src/multi_agent_conductor.py)
- **Already implemented in `run()`**: Escalation based on `retry_count`
```python
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]
```
### Gaps to Fill (This Track's Scope)
- No `model_override` field on Ticket
- No UI for model selection per ticket
- No override indicator in GUI
## Architectural Constraints
### Validation
- Selected model MUST be valid and available
- Model list from `cost_tracker.MODEL_PRICING` or config
### Clear Override
- Override MUST be visually distinct from default
- Reset option MUST return to tier default
## Architecture Reference
### Key Integration Points
| File | Lines | Purpose |
|------|-------|---------|
| `src/models.py` | 30-50 | `Ticket` dataclass - add field |
| `src/multi_agent_conductor.py` | 100-130 | Model selection logic |
| `src/gui_2.py` | 2650-2750 | Ticket UI - add dropdown |
### Proposed Ticket Enhancement
```python
@dataclass
class Ticket:
# ... existing fields ...
model_override: Optional[str] = None # None = use tier default
```
## Functional Requirements
### FR1: Model Override Field
- Add `model_override: Optional[str] = None` to Ticket dataclass
- Persist in track state
### FR2: Model Dropdown UI
- Dropdown in ticket node showing available models
- Options: None (default), gemini-2.5-flash-lite, gemini-2.5-flash, gemini-3.1-pro-preview, etc.
- Only show when ticket is "todo" status
### FR3: Override Indicator
- Visual indicator when override is set (different color or icon)
- Show "Using: {model_name}" in ticket display
### FR4: Execution Integration
- In `ConductorEngine.run()`, check `ticket.model_override` first
- If set, use override; otherwise use tier default
## Non-Functional Requirements
| Requirement | Constraint |
|-------------|------------|
| UI Response | Dropdown updates immediately |
| Persistence | Override saved to state.toml |
## Testing Requirements
### Unit Tests
- Test model_override field serialization
- Test override takes precedence at execution
### Integration Tests
- Set override, run ticket, verify correct model used
## Out of Scope
- Dynamic model list from API
- Cost estimation preview before execution
## Acceptance Criteria
- [ ] `model_override` field added to Ticket
- [ ] Model dropdown works in UI
- [ ] Override saves to track state
- [ ] Visual indicator shows override active
- [ ] Reset option clears override
- [ ] Override used during execution
- [ ] 1-space indentation maintained