Why use Code Evals?
When your evaluation criteria is deterministic and clear, code-based evaluators provide a consistent and efficient way to assess results. They are useful when you need to check for objective conditions, such as whether a keyword appears, a URL is valid, or a format follows a rule. Arize offers off-the-shelf code evaluators for common evaluation tasks. When you need more control, you can create custom evaluators that align with your unique business logic or quality criteria.Code evaluators are defined inline when creating a task. Reusable code evaluators in the Eval Hub are coming soon.
Create a Code Eval
To create a code evaluator, choose Code Evaluator when creating a new Evaluation Task. Now, the evaluator can be created in just 3 steps:- Name the task and define the data it will be run on.
More Task Configuration Details
More Task Configuration Details
- Sampling Rate (%): Define the percentage of data the task should run on (0–100).
- Sampling is applied at the highest evaluator scope in the task:
session > trace > span - Lower-level evaluators will run on all matching data within that sampled set
- Sampling is applied at the highest evaluator scope in the task:
- Task Filters allow you to specify the data this task will run on. This matches spans, or traces/sessions that contain matching spans.
- When running on historical data, the maximum number of items is based on the highest eval scope
- Provide a unique Eval Column Name for the evaluator in plaintext. Ensure that this name is distinct from other evaluators across all tasks. Here, you can also set Evaluator Scope and Filters.
- Define any required parameters for the selected Code Evaluator

Arize Managed Code Evals
Arize manages a set of off-the-shelf code evaluators on your behalf. Simply select the evaluator name from a drop-down and the evaluator code will be provided. Users can customize the evaluators by specifying the arguments that should be passed in as parameters. Currently, we support all of the evaluators below and new evaluators can be added upon request.| Evaluator | What it’s Used For | Parameters |
|---|---|---|
| Matches Regex | Checks whether the text matches a specified regex pattern |
|
| Eval | Description | Parameters |
|---|---|---|
| Matches Regex | Checks whether the text matches a specified regex pattern |
|
| JSON Parseable | Checks whether the LLM data is a valid JSON-parsable string |
|
| Contains any Keyword | Checks whether any specified keywords are present in the LLM data |
|
| Contains all Keywords | checks that all keywords are present |
|
Custom Code Evaluators
Custom Code Evaluators are only available in Arize AX Enterprise. Request a demo here.

Writing a Custom Code Evaluator
A custom code evaluator is a Python class that extendsCodeEvaluator and implements a single evaluate method. Below is a complete example followed by a step-by-step breakdown.
Complete Example
This evaluator checks whether the LLM output contains the word “hello”:Step-by-Step Breakdown
Step 1: Imports Every custom evaluator needs these three imports from the Arize SDK:CodeEvaluator and implements the evaluate method. The method signature must match exactly:
- The
*forces all arguments to be keyword-only. dataset_rowis a dictionary containing the span attributes for the row being evaluated.- The method must return an
EvaluationResult.
dataset_row
The dataset_row dictionary contains span attributes. Common keys include:
| Key | Description |
|---|---|
attributes.output.value | The LLM output text |
attributes.input.value | The LLM input text |
attributes.llm.token_count.total | Total token count |
.get() to handle missing keys gracefully:
EvaluationResult
Your evaluate method must return an EvaluationResult with these fields:
| Field | Type | Description |
|---|---|---|
label | str | A category label (e.g., "pass", "fail", "error") |
score | Optional[float] | A numeric score (e.g., 1.0 for pass, 0.0 for fail), or None |
explanation | str | A human-readable explanation of the result |
Testing Locally
While it’s possible to write the code directly in the UI, it’s typically easier to iterate in a Python script or Colab notebook. Use the Test in Code button in the task creation interface to get starter code that includes your span attributes, evaluator class, and imports.