File size: 2,832 Bytes
fd1472e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
627c291
 
fd1472e
 
 
 
 
 
 
627c291
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
"""Tests for JudgeHandler domain support."""

from unittest.mock import MagicMock, patch

from src.agent_factory.judges import JudgeHandler
from src.config.domain import ResearchDomain
from src.utils.models import AssessmentDetails, JudgeAssessment


class TestJudgeHandlerDomain:
    @patch("src.agent_factory.judges.get_model")
    @patch("src.agent_factory.judges.Agent")
    def test_judge_handler_accepts_domain(self, mock_agent_cls, mock_get_model):
        # Mock get_model to avoid API key requirement
        mock_get_model.return_value = MagicMock()
        # Test init with domain
        handler = JudgeHandler(domain=ResearchDomain.SEXUAL_HEALTH)
        assert handler.domain == ResearchDomain.SEXUAL_HEALTH

    @patch("src.agent_factory.judges.get_model")
    @patch("src.agent_factory.judges.Agent")
    @patch("src.agent_factory.judges.format_user_prompt")
    @patch("src.agent_factory.judges.select_evidence_for_judge")
    async def test_judge_handler_passes_domain_to_prompt(
        self, mock_select, mock_format, mock_agent_cls, mock_get_model
    ):
        # Setup mocks
        mock_get_model.return_value = MagicMock()
        mock_agent_instance = MagicMock()
        mock_agent_cls.return_value = mock_agent_instance

        mock_assessment = JudgeAssessment(
            details=AssessmentDetails(
                mechanism_score=0,
                mechanism_reasoning="Insufficient evidence to determine mechanism.",
                clinical_evidence_score=0,
                clinical_reasoning="Insufficient evidence to determine clinical viability.",
                drug_candidates=[],
                key_findings=[],
            ),
            sufficient=False,
            confidence=0.0,
            recommendation="continue",
            next_search_queries=[],
            reasoning=("Insufficient evidence collected so far to form a conclusion."),
        )

        # Use async return value for run()
        async def mock_run(*args, **kwargs):
            return MagicMock(output=mock_assessment)

        mock_agent_instance.run.side_effect = mock_run

        mock_select.return_value = []  # mock select returns empty list
        # Wait, if evidence is empty, format_empty_evidence_prompt is called.
        # We want format_user_prompt to be called.

        evidence = [MagicMock()]  # Provide some evidence
        mock_select.return_value = evidence

        # Test with sexual health domain
        handler = JudgeHandler(domain=ResearchDomain.SEXUAL_HEALTH)
        await handler.assess("query", evidence)

        # Verify format_user_prompt called with domain
        mock_format.assert_called_once()
        call_kwargs = mock_format.call_args.kwargs

        # Check if domain was passed in kwargs
        assert call_kwargs.get("domain") == ResearchDomain.SEXUAL_HEALTH