VibecoderMcSwaggins commited on
Commit
95d2e29
·
1 Parent(s): d7e5abb

fix(tests): resolve mypy divergence and test failures

Browse files

- Add pydantic-ai to pre-commit mypy dependencies to fix divergence
between local mypy and CI (both now recognize Agent overloads)
- Fix JudgeHandler tests to mock get_model() which instantiates
OpenAIModel at import time (requires API key)

.pre-commit-config.yaml CHANGED
@@ -15,4 +15,5 @@ repos:
15
  - pydantic>=2.7
16
  - pydantic-settings>=2.2
17
  - tenacity>=8.2
 
18
  args: [--ignore-missing-imports]
 
15
  - pydantic>=2.7
16
  - pydantic-settings>=2.2
17
  - tenacity>=8.2
18
+ - pydantic-ai>=0.0.16
19
  args: [--ignore-missing-imports]
src/agent_factory/judges.py CHANGED
@@ -42,7 +42,7 @@ class JudgeHandler:
42
  model: Optional PydanticAI model. If None, uses config default.
43
  """
44
  self.model = model or get_model()
45
- self.agent = Agent(
46
  model=self.model,
47
  result_type=JudgeAssessment,
48
  system_prompt=SYSTEM_PROMPT,
 
42
  model: Optional PydanticAI model. If None, uses config default.
43
  """
44
  self.model = model or get_model()
45
+ self.agent = Agent( # type: ignore[call-overload]
46
  model=self.model,
47
  result_type=JudgeAssessment,
48
  system_prompt=SYSTEM_PROMPT,
tests/unit/agent_factory/test_judges.py CHANGED
@@ -36,7 +36,11 @@ class TestJudgeHandler:
36
  mock_result = MagicMock()
37
  mock_result.data = mock_assessment
38
 
39
- with patch("src.agent_factory.judges.Agent") as mock_agent_class:
 
 
 
 
40
  mock_agent = AsyncMock()
41
  mock_agent.run = AsyncMock(return_value=mock_result)
42
  mock_agent_class.return_value = mock_agent
@@ -86,7 +90,11 @@ class TestJudgeHandler:
86
  mock_result = MagicMock()
87
  mock_result.data = mock_assessment
88
 
89
- with patch("src.agent_factory.judges.Agent") as mock_agent_class:
 
 
 
 
90
  mock_agent = AsyncMock()
91
  mock_agent.run = AsyncMock(return_value=mock_result)
92
  mock_agent_class.return_value = mock_agent
@@ -103,7 +111,11 @@ class TestJudgeHandler:
103
  @pytest.mark.asyncio
104
  async def test_assess_handles_llm_failure(self):
105
  """JudgeHandler should return fallback on LLM failure."""
106
- with patch("src.agent_factory.judges.Agent") as mock_agent_class:
 
 
 
 
107
  mock_agent = AsyncMock()
108
  mock_agent.run = AsyncMock(side_effect=Exception("API Error"))
109
  mock_agent_class.return_value = mock_agent
 
36
  mock_result = MagicMock()
37
  mock_result.data = mock_assessment
38
 
39
+ with (
40
+ patch("src.agent_factory.judges.get_model") as mock_get_model,
41
+ patch("src.agent_factory.judges.Agent") as mock_agent_class,
42
+ ):
43
+ mock_get_model.return_value = MagicMock()
44
  mock_agent = AsyncMock()
45
  mock_agent.run = AsyncMock(return_value=mock_result)
46
  mock_agent_class.return_value = mock_agent
 
90
  mock_result = MagicMock()
91
  mock_result.data = mock_assessment
92
 
93
+ with (
94
+ patch("src.agent_factory.judges.get_model") as mock_get_model,
95
+ patch("src.agent_factory.judges.Agent") as mock_agent_class,
96
+ ):
97
+ mock_get_model.return_value = MagicMock()
98
  mock_agent = AsyncMock()
99
  mock_agent.run = AsyncMock(return_value=mock_result)
100
  mock_agent_class.return_value = mock_agent
 
111
  @pytest.mark.asyncio
112
  async def test_assess_handles_llm_failure(self):
113
  """JudgeHandler should return fallback on LLM failure."""
114
+ with (
115
+ patch("src.agent_factory.judges.get_model") as mock_get_model,
116
+ patch("src.agent_factory.judges.Agent") as mock_agent_class,
117
+ ):
118
+ mock_get_model.return_value = MagicMock()
119
  mock_agent = AsyncMock()
120
  mock_agent.run = AsyncMock(side_effect=Exception("API Error"))
121
  mock_agent_class.return_value = mock_agent