11from typing import Any , Dict
22
3+ from pydantic import TypeAdapter
4+
5+ from uipath ._cli ._evals ._models ._evaluator import (
6+ EqualsEvaluatorParams ,
7+ Evaluator ,
8+ JsonSimilarityEvaluatorParams ,
9+ LLMEvaluatorParams ,
10+ TrajectoryEvaluatorParams ,
11+ )
312from uipath ._cli ._evals ._models ._evaluator_base_params import EvaluatorBaseParams
413from uipath .eval .evaluators import (
514 BaseEvaluator ,
817 LlmAsAJudgeEvaluator ,
918 TrajectoryEvaluator ,
1019)
11- from uipath .eval .models .models import EvaluatorCategory , EvaluatorType
1220
1321
1422class EvaluatorFactory :
@@ -35,110 +43,64 @@ def create_evaluator(cls, data: Dict[str, Any]) -> BaseEvaluator[Any]:
3543 if not id :
3644 raise ValueError ("Evaluator configuration must include 'id' field" )
3745
38- category = EvaluatorCategory .from_int (data .get ("category" ))
39- evaluator_type = EvaluatorType .from_int (data .get ("type" , EvaluatorType .Unknown ))
40- description = data .get ("description" , "" )
41- created_at = data .get ("createdAt" , "" )
42- updated_at = data .get ("updatedAt" , "" )
43- target_output_key = data .get ("targetOutputKey" , "" )
44-
45- # Create base parameters
46- base_params = EvaluatorBaseParams (
47- id = id ,
48- category = category ,
49- evaluator_type = evaluator_type ,
50- name = name ,
51- description = description ,
52- created_at = created_at ,
53- updated_at = updated_at ,
54- target_output_key = target_output_key ,
55- )
56-
57- match category :
58- case EvaluatorCategory .Deterministic :
59- if evaluator_type == evaluator_type .Equals :
60- return EvaluatorFactory ._create_exact_match_evaluator (
61- base_params , data
62- )
63- elif evaluator_type == evaluator_type .JsonSimilarity :
64- return EvaluatorFactory ._create_json_similarity_evaluator (
65- base_params , data
66- )
67- else :
68- raise ValueError (
69- f"Unknown evaluator type { evaluator_type } for category { category } "
70- )
71- case EvaluatorCategory .LlmAsAJudge :
72- return EvaluatorFactory ._create_llm_as_judge_evaluator (
73- base_params , data
74- )
75- case EvaluatorCategory .AgentScorer :
76- raise NotImplementedError ()
77- case EvaluatorCategory .Trajectory :
78- return EvaluatorFactory ._create_trajectory_evaluator (base_params , data )
46+ params : EvaluatorBaseParams = TypeAdapter (Evaluator ).validate_python (data )
47+
48+ match params :
49+ case EqualsEvaluatorParams ():
50+ return EvaluatorFactory ._create_exact_match_evaluator (params )
51+ case JsonSimilarityEvaluatorParams ():
52+ return EvaluatorFactory ._create_json_similarity_evaluator (params )
53+ case LLMEvaluatorParams ():
54+ return EvaluatorFactory ._create_llm_as_judge_evaluator (params )
55+ case TrajectoryEvaluatorParams ():
56+ return EvaluatorFactory ._create_trajectory_evaluator (params )
7957 case _:
80- raise ValueError (f"Unknown evaluator category: { category } " )
58+ raise ValueError (f"Unknown evaluator category: { params } " )
8159
8260 @staticmethod
8361 def _create_exact_match_evaluator (
84- base_params : EvaluatorBaseParams , data : Dict [ str , Any ]
62+ params : EqualsEvaluatorParams ,
8563 ) -> ExactMatchEvaluator :
8664 """Create a deterministic evaluator."""
87- return ExactMatchEvaluator (
88- ** base_params .model_dump (),
89- )
65+ return ExactMatchEvaluator (** params .model_dump ())
9066
9167 @staticmethod
9268 def _create_json_similarity_evaluator (
93- base_params : EvaluatorBaseParams , data : Dict [ str , Any ]
69+ params : JsonSimilarityEvaluatorParams ,
9470 ) -> JsonSimilarityEvaluator :
9571 """Create a deterministic evaluator."""
96- return JsonSimilarityEvaluator (
97- ** base_params .model_dump (),
98- )
72+ return JsonSimilarityEvaluator (** params .model_dump ())
9973
10074 @staticmethod
10175 def _create_llm_as_judge_evaluator (
102- base_params : EvaluatorBaseParams , data : Dict [ str , Any ]
76+ params : LLMEvaluatorParams ,
10377 ) -> LlmAsAJudgeEvaluator :
10478 """Create an LLM-as-a-judge evaluator."""
105- prompt = data .get ("prompt" , "" )
106- if not prompt :
79+ if not params .prompt :
10780 raise ValueError ("LLM evaluator must include 'prompt' field" )
10881
109- model = data .get ("model" , "" )
110- if not model :
82+ if not params .model :
11183 raise ValueError ("LLM evaluator must include 'model' field" )
112- if model == "same-as-agent" :
84+ if params . model == "same-as-agent" :
11385 raise ValueError (
11486 "'same-as-agent' model option is not supported by coded agents evaluations. Please select a specific model for the evaluator."
11587 )
11688
117- return LlmAsAJudgeEvaluator (
118- ** base_params .model_dump (),
119- prompt = prompt ,
120- model = model ,
121- )
89+ return LlmAsAJudgeEvaluator (** params .model_dump ())
12290
12391 @staticmethod
12492 def _create_trajectory_evaluator (
125- base_params : EvaluatorBaseParams , data : Dict [ str , Any ]
93+ params : TrajectoryEvaluatorParams ,
12694 ) -> TrajectoryEvaluator :
12795 """Create a trajectory evaluator."""
128- prompt = data .get ("prompt" , "" )
129- if not prompt :
96+ if not params .prompt :
13097 raise ValueError ("Trajectory evaluator must include 'prompt' field" )
13198
132- model = data .get ("model" , "" )
133- if not model :
99+ if not params .model :
134100 raise ValueError ("LLM evaluator must include 'model' field" )
135- if model == "same-as-agent" :
101+ if params . model == "same-as-agent" :
136102 raise ValueError (
137103 "'same-as-agent' model option is not supported by coded agents evaluations. Please select a specific model for the evaluator."
138104 )
139105
140- return TrajectoryEvaluator (
141- ** base_params .model_dump (),
142- prompt = prompt ,
143- model = model ,
144- )
106+ return TrajectoryEvaluator (** params .model_dump ())
0 commit comments