/ tests / entities / test_assessment_source.py
test_assessment_source.py
 1  import pytest
 2  
 3  from mlflow.entities.assessment_source import AssessmentSource
 4  from mlflow.exceptions import MlflowException
 5  
 6  
 7  def test_assessment_source_equality():
 8      source1 = AssessmentSource(source_type="HUMAN", source_id="user_1")
 9      source2 = AssessmentSource(source_type="HUMAN", source_id="user_1")
10      source3 = AssessmentSource(source_type="LLM_JUDGE", source_id="ai_1")
11      source5 = AssessmentSource(source_type="HUMAN", source_id="user_2")
12  
13      assert source1 == source2  # Same type and ID
14      assert source1 != source3  # Different type
15      assert source1 != source5  # Different ID
16  
17  
18  def test_assessment_source_properties():
19      source = AssessmentSource(source_type="HUMAN", source_id="user_1")
20  
21      assert source.source_type == "HUMAN"
22      assert source.source_id == "user_1"
23  
24  
25  def test_assessment_source_to_from_dictionary():
26      source = AssessmentSource(source_type="HUMAN", source_id="user_1")
27      source_dict = source.to_dictionary()
28  
29      expected_dict = {
30          "source_type": "HUMAN",
31          "source_id": "user_1",
32      }
33      assert source_dict == expected_dict
34  
35      recreated_source = AssessmentSource.from_dictionary(source_dict)
36      assert recreated_source == source
37  
38  
39  def test_assessment_source_type_validation():
40      # Valid source types
41      AssessmentSource(source_type="HUMAN", source_id="user_1")
42      AssessmentSource(source_type="LLM_JUDGE", source_id="judge_1")
43  
44      # Deprecated source type for backward compatibility
45      source = AssessmentSource(source_type="AI_JUDGE", source_id="ai_1")
46      assert source.source_type == "LLM_JUDGE"
47  
48      # Invalid source type
49      with pytest.raises(MlflowException, match="Invalid assessment source type"):
50          AssessmentSource(source_type="ROBOT", source_id="robot_1")
51  
52  
53  def test_assessment_source_case_insensitivity():
54      # Valid source types with different cases
55      source_1 = AssessmentSource(source_type="human", source_id="user_1")
56      source_2 = AssessmentSource(source_type="Human", source_id="user_2")
57      source_3 = AssessmentSource(source_type="HUMAN", source_id="user_3")
58      source_4 = AssessmentSource(source_type="llm_judge", source_id="judge_1")
59      source_5 = AssessmentSource(source_type="Llm_Judge", source_id="judge_2")
60      source_6 = AssessmentSource(source_type="LLM_JUDGE", source_id="judge_3")
61  
62      # Verify that the source type is normalized to uppercase
63      assert source_1.source_type == "HUMAN"
64      assert source_2.source_type == "HUMAN"
65      assert source_3.source_type == "HUMAN"
66      assert source_4.source_type == "LLM_JUDGE"
67      assert source_5.source_type == "LLM_JUDGE"
68      assert source_6.source_type == "LLM_JUDGE"
69  
70  
71  def test_ai_judge_deprecation_warning():
72      with pytest.warns(FutureWarning, match="AI_JUDGE is deprecated. Use LLM_JUDGE instead."):
73          source = AssessmentSource(source_type="AI_JUDGE", source_id="ai_1")
74  
75      assert source.source_type == "LLM_JUDGE"
76      assert source.source_id == "ai_1"