Skip to main content
You keep the scoring logic. Arize owns the orchestration. A remote evaluator is an HTTP endpoint you host. Your service decides how to score each record — rules, proprietary models, an existing eval platform, whatever you already trust. Arize handles selecting data, calling your endpoint, retries, writing results back onto spans, traces, or sessions, and making those scores usable for filters, charts, and alerts. You never have to rebuild your evaluators inside Arize, and you don’t have to build continuous online-eval plumbing yourself. Implement the endpoint in any language. Arize only cares about the HTTP contract.
Start with a stub that returns fixed JSON, get Arize talking to it, then plug in your real scoring.

When to use a remote evaluator

Before you start

  1. A place to host an HTTPS endpoint Arize can reach on the public internet
  2. An Arize space that already has the traces or dataset you want to score
  3. (Recommended) A shared secret for auth headers

The contract

Request Arize sends

Treat input defensively: only read the fields you need, and ignore anything extra.

Response Arize expects

Return HTTP 2xx with a JSON object. You must include a label, a score, or both. explanation is optional but recommended.
Valid examples:
A 2xx response with neither label nor score is treated as a failure.

Status codes

Path to “it works”

Do these in order. Don’t add LLM logic until step 3 works end-to-end.
1

Stand up a stub endpoint

Smallest possible server: accept POST, read JSON, return a fixed verdict.
2

Prove the contract with curl

You want HTTP 200 and JSON that includes label and/or score.
3

Deploy publicly

Deploy so Arize can reach a full HTTPS URL, for example https://evals.example.com/evaluate.Arize calls that URL verbatim — it does not append paths.
If your host sleeps when idle, send one warm-up request before a real eval run so cold starts don’t time out.
4

Register it in Arize

  1. Create a remote evaluator in the same space where your data lives.
  2. Paste the full endpoint URL.
  3. Add auth headers if your endpoint requires them (for example Authorization: Bearer <token>).
  4. Map columns or attributes into the input keys your endpoint reads (for example question → input, answer → output).
  5. Create an eval task that attaches this evaluator to a project or dataset.
  6. Choose scope (span / trace / session), whether to run on historical data and/or continuously, and a sampling rate if continuous.
  7. Run the task.
Results land as eval columns (for example eval.<name>.label, .score, .explanation) on the scored records. See View eval results.
5

Confirm Arize is calling you

Log when a request arrives and when you return a verdict. Include metadata.request_id and metadata.record_id.

Make the scoring real

Once the stub works end-to-end, replace the hardcoded verdict. The HTTP contract stays the same.

Rule-based (start here)

Regex, keyword checks, length limits, JSON schema validation, allowlists — fast, cheap, reproducible.

Call your own LLM from the endpoint

If the score needs a model judgment, your endpoint can call OpenAI, Anthropic, or any other provider itself — then return label / score / explanation like any other remote eval. That is different from LLM-as-a-judge in Arize, where Arize runs the judge prompt for you. Here you own the model call; Arize still owns orchestration.
  • Validate required input fields first; return 4xx if they’re missing
  • Instruct the model to return only JSON matching the response shape, then parse it defensively
  • On provider timeouts or rate limits, return 5xx or 429 so Arize can retry
  • Prefer returning both label and score when your rubric has both

Production checklist

Auth

Protect endpoints that call paid models:
Store the secret in an environment variable. Configure the same value as a header on the remote evaluator in Arize.

Suppress tracing on the eval path

If the service hosting the evaluator also sends its own traces to Arize, wrap judge calls so evaluator traffic doesn’t create noisy nested traces:
Skip this if the evaluator is a standalone service with no tracing of its own.

Robust input parsing

  • Never assume a mapped field exists
  • Ignore unknown fields
  • Prefer failing a single record with 4xx over crashing the process

FAQ

No. Any stack that can serve HTTPS JSON works.
No. Either is enough. Both is fine. explanation is optional.
Yes. Use metadata.evaluator (or separate paths) to branch.
On the scored records as eval columns, typically eval.<evaluator_name>.label / .score / .explanation. Trace- and session-level evals use related prefixes. See View eval results.
Template evaluators: Arize owns both the judge prompt and the orchestration.Remote evaluators: you own the scoring logic; Arize still owns orchestration (who to score, when, retries, write-back). Use remote when you already have scoring logic, governance requirements, proprietary models, or deterministic checks you don’t want to reimplement.