Skip to main content
Every evaluator returns a pass or a fail. A fail carries one named failure_mode. Import evaluators from sengol.evaluators, or list them by class name in sengol.yaml and ControlBooks. List them, filtered by policy, from the CLI:
A bare class name in sengol.yaml or a ControlBook builds the evaluator with default arguments. In sengol.yaml you can pass arguments with - name: KeywordEvaluator and an args: mapping. With no phrases, RequiredDisclosureEvaluator fails every input.

Deterministic

No model and no network. They run first, in order. A CRITICAL failure skips the LLM evaluators that follow. The tool, MCP and delegation evaluators take trajectory or delegation inputs, not a plain prompt and response.

LLM judges

Each takes judge= (see Add an LLM judge). Without a judge, the evaluator scores LLM_EVALUATOR_ERROR. A judge that exceeds its severity timeout scores JUDGE_TIMEOUT.
In our tests with OpenAICompatibleJudgeClient(model="gpt-4o-mini"), the judge answered GroundednessEvaluator in prose, which it scores as LLM_EVALUATOR_ERROR. FaithfulnessEvaluator and HallucinationEvaluator worked with the same client.
EnsembleEvaluator combines several judges and reports ENSEMBLE_MEMBER_FAILED.

Statistical model evaluators

For traditional ML models. Install sengol[model]: AUCEvaluator, PSIEvaluator, ABEvaluator, ChampionChallengerEvaluator, FairnessEvaluator, OutcomeMonitorEvaluator. They take a ModelEvalInput (features, prediction, ground truth) instead of a prompt and response.

Writing your own

Subclass DeterministicEvaluator or LLMEvaluator and declare a failure_mode:
custom_evaluator.py