Build moderation OOTB scorers from NAT EvalBuilder judge LLMs.
Each custom NAT evaluator plugin should stay thin (config + evaluate_item).
This module centralizes how a workflow llm_name is resolved and mapped onto the
same scorer types used by moderation_config.yaml OOTB guards.
LitellmJudgeTarget
dataclass
litellm.acompletion model id and kwargs for in-process LLM judges.
Source code in datarobot_genai/dragent/eval/scorer_factory.py
| @dataclass(frozen=True)
class LitellmJudgeTarget:
"""``litellm.acompletion`` model id and kwargs for in-process LLM judges."""
model: str
completion_kwargs: dict[str, Any]
|
resolve_langchain_judge_llm
async
resolve_langchain_judge_llm(builder: EvalBuilder, llm_name: str) -> object
Resolve llm_name from the eval/workflow config to a LangChain chat model.
Source code in datarobot_genai/dragent/eval/scorer_factory.py
| async def resolve_langchain_judge_llm(builder: EvalBuilder, llm_name: str) -> object:
"""Resolve ``llm_name`` from the eval/workflow config to a LangChain chat model."""
from nat.builder.framework_enum import LLMFrameworkEnum
return await builder.get_llm(llm_name, wrapper_type=LLMFrameworkEnum.LANGCHAIN)
|
build_litellm_judge_target
async
build_litellm_judge_target(builder: EvalBuilder, llm_name: str) -> LitellmJudgeTarget
Map the workflow judge LLM to a litellm target (agent goal accuracy, etc.).
Source code in datarobot_genai/dragent/eval/scorer_factory.py
| async def build_litellm_judge_target(builder: EvalBuilder, llm_name: str) -> LitellmJudgeTarget:
"""Map the workflow judge LLM to a litellm target (agent goal accuracy, etc.)."""
llm = await resolve_langchain_judge_llm(builder, llm_name)
model, completion_kwargs = langchain_chat_model_to_litellm(llm)
return LitellmJudgeTarget(model=model, completion_kwargs=completion_kwargs)
|
build_faithfulness_evaluator
async
build_faithfulness_evaluator(builder: EvalBuilder, llm_name: str) -> FaithfulnessEvaluator
LlamaIndex faithfulness judge (same wiring as OOTBFaithfulnessGuard).
Source code in datarobot_genai/dragent/eval/scorer_factory.py
| async def build_faithfulness_evaluator(
builder: EvalBuilder, llm_name: str
) -> FaithfulnessEvaluator:
"""LlamaIndex faithfulness judge (same wiring as ``OOTBFaithfulnessGuard``)."""
from datarobot_dome._import_utils import require_extra
llm = await resolve_langchain_judge_llm(builder, llm_name)
try:
from llama_index.core import Settings
from llama_index.core.evaluation import FaithfulnessEvaluator
except ImportError as e:
raise require_extra("llama-index-core", "llm-eval", e) from e
llamaindex_llm = wrap_langchain_judge_for_llamaindex(llm)
Settings.llm = llamaindex_llm
Settings.embed_model = cast(Any, None)
return FaithfulnessEvaluator()
|
build_task_adherence_scorer
async
build_task_adherence_scorer(builder: EvalBuilder, llm_name: str) -> TaskCompletionMetric
DeepEval task completion judge (same wiring as OOTBTaskAdherenceGuard).
Source code in datarobot_genai/dragent/eval/scorer_factory.py
| async def build_task_adherence_scorer(builder: EvalBuilder, llm_name: str) -> TaskCompletionMetric:
"""DeepEval task completion judge (same wiring as ``OOTBTaskAdherenceGuard``)."""
from datarobot_dome._import_utils import require_extra
llm = await resolve_langchain_judge_llm(builder, llm_name)
try:
from datarobot_dome._deepeval_adapter import ModerationDeepEvalLLM
except ImportError as e:
raise require_extra("deepeval", "llm-eval", e) from e
try:
from deepeval.metrics import TaskCompletionMetric
except ImportError as e:
raise require_extra("deepeval", "llm-eval", e) from e
deepeval_llm = ModerationDeepEvalLLM(llm)
return TaskCompletionMetric(model=deepeval_llm, include_reason=True)
|
build_guideline_adherence_scorer
async
build_guideline_adherence_scorer(builder: EvalBuilder, llm_name: str, agent_guideline: str) -> GuidelineEvaluator
LlamaIndex guideline judge (same wiring as OOTBAgentGuidelineAdherence).
Source code in datarobot_genai/dragent/eval/scorer_factory.py
| async def build_guideline_adherence_scorer(
builder: EvalBuilder,
llm_name: str,
agent_guideline: str,
) -> GuidelineEvaluator:
"""LlamaIndex guideline judge (same wiring as ``OOTBAgentGuidelineAdherence``)."""
from datarobot_dome._import_utils import require_extra
if not agent_guideline.strip():
raise ValueError("agent_guideline is required for guideline adherence evaluation")
llm = await resolve_langchain_judge_llm(builder, llm_name)
try:
from llama_index.core.evaluation import GuidelineEvaluator
from llama_index.core.evaluation.guideline import EvaluationData
from llama_index.core.output_parsers import PydanticOutputParser
except ImportError as e:
raise require_extra("llama-index-core", "llm-eval", e) from e
class _FixedPydanticOutputParser(PydanticOutputParser):
def format(self, query: str) -> str:
return query + "\n\n" + self.get_format_string(escape_json=False)
langchain_llm = wrap_langchain_judge_for_llamaindex(llm)
return GuidelineEvaluator(
llm=langchain_llm,
guidelines=agent_guideline,
output_parser=_FixedPydanticOutputParser(output_cls=EvaluationData),
)
|