diff --git a/src/models.py b/src/models.py index e87075f..a892c20 100644 --- a/src/models.py +++ b/src/models.py @@ -75,6 +75,7 @@ class Ticket: step_mode: bool = False retry_count: int = 0 manual_block: bool = False + model_override: Optional[str] = None def mark_blocked(self, reason: str) -> None: self.status = "blocked" @@ -112,6 +113,7 @@ class Ticket: "step_mode": self.step_mode, "retry_count": self.retry_count, "manual_block": self.manual_block, + "model_override": self.model_override, } @classmethod @@ -130,6 +132,7 @@ class Ticket: step_mode=data.get("step_mode", False), retry_count=data.get("retry_count", 0), manual_block=data.get("manual_block", False), + model_override=data.get("model_override"), ) diff --git a/tests/test_per_ticket_model.py b/tests/test_per_ticket_model.py new file mode 100644 index 0000000..5357e79 --- /dev/null +++ b/tests/test_per_ticket_model.py @@ -0,0 +1,22 @@ +import pytest +from src.models import Ticket + +def test_ticket_has_model_override_field(): + t = Ticket(id="T-001", description="Test") + assert hasattr(t, 'model_override'), "Ticket must have model_override field" + assert t.model_override is None, "model_override should default to None" + +def test_model_override_serialization(): + t = Ticket(id="T-001", description="Test", model_override="gemini-3.1-pro-preview") + d = t.to_dict() + assert d.get('model_override') == "gemini-3.1-pro-preview", "to_dict should include model_override" + +def test_model_override_deserialization(): + d = {"id": "T-001", "description": "Test", "model_override": "gemini-2.5-flash"} + t = Ticket.from_dict(d) + assert t.model_override == "gemini-2.5-flash", "from_dict should restore model_override" + +def test_model_override_default_on_deserialize(): + d = {"id": "T-001", "description": "Test"} + t = Ticket.from_dict(d) + assert t.model_override is None, "Missing model_override should default to None"