1+ import os
2+ from pathlib import Path
13from typing import Any , Dict
24
3- from .._models import EvaluatorCategory , EvaluatorType
4- from ._evaluator_base import EvaluatorBase , EvaluatorBaseParams
5- from ._exact_match_evaluator import ExactMatchEvaluator
6- from ._json_similarity_evaluator import JsonSimilarityEvaluator
7- from ._llm_as_judge_evaluator import LlmAsAJudgeEvaluator
8- from ._trajectory_evaluator import TrajectoryEvaluator
5+ from uipath ._cli ._evals ._models ._evaluator_base_params import EvaluatorBaseParams
6+ from uipath .eval .evaluators import (
7+ BaseEvaluator ,
8+ ExactMatchEvaluator ,
9+ JsonSimilarityEvaluator ,
10+ LlmAsAJudgeEvaluator ,
11+ TrajectoryEvaluator ,
12+ )
13+ from uipath .eval .models .models import EvaluatorCategory , EvaluatorType
914
1015
1116class EvaluatorFactory :
1217 """Factory class for creating evaluator instances based on configuration."""
1318
14- @staticmethod
15- def create_evaluator (data : Dict [str , Any ]) -> EvaluatorBase :
19+ coded_evals_dir_path : Path = os .path .join ("evals" , "evaluators" , "coded" )
20+
21+ @classmethod
22+ def create_evaluator (cls , data : Dict [str , Any ]) -> BaseEvaluator :
1623 """Create an evaluator instance from configuration data.
1724
1825 Args:
@@ -25,21 +32,23 @@ def create_evaluator(data: Dict[str, Any]) -> EvaluatorBase:
2532 ValueError: If category is unknown or required fields are missing
2633 """
2734 # Extract common fields
28- evaluator_id = data .get ("id" )
29- if not evaluator_id :
35+ name = data .get ("name" , "" )
36+ if not name :
37+ raise ValueError ("Evaluator configuration must include 'name' field" )
38+ id = data .get ("id" , "" )
39+ if not id :
3040 raise ValueError ("Evaluator configuration must include 'id' field" )
3141
3242 category = EvaluatorCategory .from_int (data .get ("category" ))
3343 evaluator_type = EvaluatorType .from_int (data .get ("type" , EvaluatorType .Unknown ))
34- name = data .get ("name" , "" )
3544 description = data .get ("description" , "" )
3645 created_at = data .get ("createdAt" , "" )
3746 updated_at = data .get ("updatedAt" , "" )
3847 target_output_key = data .get ("targetOutputKey" , "" )
3948
4049 # Create base parameters
4150 base_params = EvaluatorBaseParams (
42- evaluator_id = evaluator_id ,
51+ id = id ,
4352 category = category ,
4453 evaluator_type = evaluator_type ,
4554 name = name ,
@@ -49,7 +58,6 @@ def create_evaluator(data: Dict[str, Any]) -> EvaluatorBase:
4958 target_output_key = target_output_key ,
5059 )
5160
52- # Create evaluator based on category
5361 match category :
5462 case EvaluatorCategory .Deterministic :
5563 if evaluator_type == evaluator_type .Equals :
@@ -81,8 +89,7 @@ def _create_exact_match_evaluator(
8189 ) -> ExactMatchEvaluator :
8290 """Create a deterministic evaluator."""
8391 return ExactMatchEvaluator .from_params (
84- base_params ,
85- target_output_key = data .get ("targetOutputKey" , "*" ),
92+ ** base_params .model_dump (),
8693 )
8794
8895 @staticmethod
@@ -91,8 +98,7 @@ def _create_json_similarity_evaluator(
9198 ) -> JsonSimilarityEvaluator :
9299 """Create a deterministic evaluator."""
93100 return JsonSimilarityEvaluator .from_params (
94- base_params ,
95- target_output_key = data .get ("targetOutputKey" , "*" ),
101+ ** base_params .model_dump (),
96102 )
97103
98104 @staticmethod
@@ -113,10 +119,9 @@ def _create_llm_as_judge_evaluator(
113119 )
114120
115121 return LlmAsAJudgeEvaluator .from_params (
116- base_params ,
122+ ** base_params . model_dump () ,
117123 prompt = prompt ,
118124 model = model ,
119- target_output_key = data .get ("targetOutputKey" , "*" ),
120125 )
121126
122127 @staticmethod
0 commit comments