11import importlib .util
2+ import logging
23import sys
34from pathlib import Path
45from typing import Any
56
67from pydantic import TypeAdapter
78
9+ logger = logging .getLogger (__name__ )
10+
811from uipath ._cli ._evals ._helpers import ( # type: ignore # Remove after gnarly fix
912 try_extract_file_and_class_name ,
1013)
@@ -106,12 +109,15 @@ def _prepare_evaluator_config(data: dict[str, Any]) -> dict[str, Any]:
106109
107110 @classmethod
108111 def create_evaluator (
109- cls , data : dict [str , Any ], evaluators_dir : Path | None = None
112+ cls ,
113+ data : dict [str , Any ],
114+ evaluators_dir : Path | None = None ,
115+ agent_model : str | None = None ,
110116 ) -> BaseEvaluator [Any , Any , Any ]:
111117 if data .get ("version" , None ) == "1.0" :
112118 return cls ._create_evaluator_internal (data , evaluators_dir )
113119 else :
114- return cls ._create_legacy_evaluator_internal (data )
120+ return cls ._create_legacy_evaluator_internal (data , agent_model )
115121
116122 @staticmethod
117123 def _create_evaluator_internal (
@@ -371,11 +377,14 @@ def _create_llm_judge_simulation_trajectory_evaluator(
371377 @staticmethod
372378 def _create_legacy_evaluator_internal (
373379 data : dict [str , Any ],
380+ agent_model : str | None = None ,
374381 ) -> LegacyBaseEvaluator [Any ]:
375382 """Create an evaluator instance from configuration data.
376383
377384 Args:
378385 data: Dictionary containing evaluator configuration from JSON file
386+ agent_model: Optional model name from agent settings for resolving
387+ 'same-as-agent' model configuration
379388
380389 Returns:
381390 Appropriate evaluator instance based on category
@@ -391,9 +400,13 @@ def _create_legacy_evaluator_internal(
391400 case JsonSimilarityEvaluatorParams ():
392401 return EvaluatorFactory ._create_legacy_json_similarity_evaluator (params )
393402 case LLMEvaluatorParams ():
394- return EvaluatorFactory ._create_legacy_llm_as_judge_evaluator (params )
403+ return EvaluatorFactory ._create_legacy_llm_as_judge_evaluator (
404+ params , agent_model
405+ )
395406 case TrajectoryEvaluatorParams ():
396- return EvaluatorFactory ._create_legacy_trajectory_evaluator (params )
407+ return EvaluatorFactory ._create_legacy_trajectory_evaluator (
408+ params , agent_model
409+ )
397410 case _:
398411 raise ValueError (f"Unknown evaluator category: { params } " )
399412
@@ -414,33 +427,59 @@ def _create_legacy_json_similarity_evaluator(
414427 @staticmethod
415428 def _create_legacy_llm_as_judge_evaluator (
416429 params : LLMEvaluatorParams ,
430+ agent_model : str | None = None ,
417431 ) -> LegacyLlmAsAJudgeEvaluator :
418432 """Create an LLM-as-a-judge evaluator."""
419433 if not params .prompt :
420434 raise ValueError ("LLM evaluator must include 'prompt' field" )
421435
422436 if not params .model :
423437 raise ValueError ("LLM evaluator must include 'model' field" )
438+
439+ # Resolve 'same-as-agent' to actual agent model
424440 if params .model == "same-as-agent" :
425- raise ValueError (
426- "'same-as-agent' model option is not supported by coded agents evaluations. Please select a specific model for the evaluator."
441+ if not agent_model :
442+ raise ValueError (
443+ "'same-as-agent' model option requires agent settings. "
444+ "Ensure agent.json contains valid model settings."
445+ )
446+ logger .info (
447+ f"Resolving 'same-as-agent' to agent model: { agent_model } "
448+ f"for evaluator '{ params .name } '"
427449 )
450+ params = params .model_copy (update = {"model" : agent_model })
428451
452+ logger .info (
453+ f"Creating LLM-as-judge evaluator '{ params .name } ' with model: { params .model } "
454+ )
429455 return LegacyLlmAsAJudgeEvaluator (** params .model_dump (), config = {})
430456
431457 @staticmethod
432458 def _create_legacy_trajectory_evaluator (
433459 params : TrajectoryEvaluatorParams ,
460+ agent_model : str | None = None ,
434461 ) -> LegacyTrajectoryEvaluator :
435462 """Create a trajectory evaluator."""
436463 if not params .prompt :
437464 raise ValueError ("Trajectory evaluator must include 'prompt' field" )
438465
439466 if not params .model :
440- raise ValueError ("LLM evaluator must include 'model' field" )
467+ raise ValueError ("Trajectory evaluator must include 'model' field" )
468+
469+ # Resolve 'same-as-agent' to actual agent model
441470 if params .model == "same-as-agent" :
442- raise ValueError (
443- "'same-as-agent' model option is not supported by coded agents evaluations. Please select a specific model for the evaluator."
471+ if not agent_model :
472+ raise ValueError (
473+ "'same-as-agent' model option requires agent settings. "
474+ "Ensure agent.json contains valid model settings."
475+ )
476+ logger .info (
477+ f"Resolving 'same-as-agent' to agent model: { agent_model } "
478+ f"for evaluator '{ params .name } '"
444479 )
480+ params = params .model_copy (update = {"model" : agent_model })
445481
482+ logger .info (
483+ f"Creating trajectory evaluator '{ params .name } ' with model: { params .model } "
484+ )
446485 return LegacyTrajectoryEvaluator (** params .model_dump (), config = {})
0 commit comments