@akshay_pachaar: Jev vs. LLM as Judge, clearly explained. Imagine a support agent says, “Done. I issued your refund.” The trace shows th…
Summary
The article explains the differences between Jev and LLM as Judge for evaluating AI agent responses, highlighting when to use each based on the need for open-ended reasoning versus structured, parallel judgments.
View Cached Full Text
Cached at: 09/24/26, 02:25 PM
Jev vs. LLM as Judge, clearly explained.
Imagine a support agent says, “Done. I issued your refund.”
The trace shows that the agent looked up the order, but never completed the refund. An evaluator now needs to decide whether the answer is grounded, honest, and useful.
Both an LLM judge and Jev can make those judgments. The difference is how they produce them.
→ Both need the same evidence
The customer request, policy, tool results, and agent answer must be included. A judge cannot evaluate evidence it has not seen.
→ An LLM judge generates an evaluation
You describe the rubric in a prompt and specify the desired output. The model then generates a verdict, score, structured JSON, or written explanation one token at a time.
This works well when the evaluation needs detailed reasoning, an explanation, or an answer outside a predefined set.
→ Jev returns structured decisions
You provide the evidence once, then define separate questions with predefined answer formats.
For a yes-or-no criterion, Jev returns the probability that the statement is true. For an ordered criterion, it returns a rating and a separate confidence value.
The Jev calls these formats Noul and Score, but the core idea is simple. The possible answers are defined before the evaluation runs.
Jev evaluates independent questions against the shared evidence in parallel. Your code receives values it can immediately use for thresholds, routing, or review.
→ The workload determines the better interface
Use an LLM judge when you need open-ended reasoning or a written rationale.
Use Jev when you repeatedly need focused judgments such as whether an answer is grounded, whether an action claim is honest, or how actionable the response is.
Multiple LLM judge calls can also run concurrently. The important distinction is not concurrency between calls. It is token-by-token generation versus parallel structured judgments within one request.
That distinction matters at scale. When every agent run needs several checks, a faster and cheaper evaluator can help you inspect more traces, measure more dimensions, and catch failures earlier.
Jev does not replace every LLM judge. It gives bounded evaluation workloads a more direct interface.
The agent generates the answer. The judge should only generate when the judgment requires it.
I also published the complete evaluation workflow using Jev and Comet’s open-source Opik platform. The repository includes frozen agent traces, structured rubrics, result mapping, and the experiment runner.
You can explore and run the code here: http://github.com/patchy631/jev-as-judge…
I wrote the full breakdown. The article is quoted below.
patchy631/jev-as-judge
Source: https://github.com/patchy631/jev-as-judge
Jev-as-a-Judge with Comet Opik

A small, auditable example of evaluating refund-support traces with Jev and recording the results as an Opik experiment.
What this project does
- Replays ten synthetic, frozen support traces, including correct answers, invented policies, false action claims, ambiguous wording, and an evaluator-injection attempt.
- Runs deterministic checks before paying for semantic evaluation.
- Evaluates three yes/no criteria and one ordered helpfulness rubric in a single Jev request.
- Keeps raw model answers, the resolved model identifier, and a rubric version for auditability.
- Maps values to separate Opik metrics through a custom
BaseMetric. - Provides a fully offline demo, mocked transport tests, and real-SDK adapter tests.
This is an evaluator tutorial, not a native Jev plugin or production guardrail. It does not issue refunds. Review outcomes are recorded; automated escalation and a background worker are not implemented.
1. Run without an account
From this folder, with Python 3.10 or later:
python -m jev_judge.cli --mode demo
python -m unittest discover -s tests -v
No dependencies or network calls are needed for the core demo. The optional Opik tests are skipped if the SDK is absent. Demo probabilities are hand-authored and explicitly labeled DEMO-hand-authored-not-Jev. They test plumbing, not model accuracy. Do not use demo timings as inference latency.
2. Evaluate the traces with real Jev
Obtain a TypeSafe API key and export it in your shell:
export TYPESAFE_API_KEY="your-key"
export JEV_MODEL="jev-latest"
python -m jev_judge.cli --mode live --output results/live.jsonl
This sends the synthetic request, policy, tool results, and final answer to TypeSafe and may incur API charges. The sample makes nine initial judge requests: the empty-answer case fails a deterministic check. Retries can increase charges. It does not log to Opik.
jev-latest can change. The resolved response model is recorded. Use a supported pinned model identifier for longitudinal comparisons. Never turn an API error into a quality score; failures are marked judge_error, routed to review, and produce a nonzero CLI exit code.
3. Run an Opik experiment
python -m venv .venv
source .venv/bin/activate
pip install -e '.[opik]'
opik configure
export TYPESAFE_API_KEY="your-key"
python -m jev_judge.opik_eval --project jev-support-judge
This separately calls Jev again and creates a new dataset and experiment in your configured Opik workspace. Each invocation uses a unique name to avoid silently mixing fixture revisions. Choose Opik Cloud or self-hosting during configuration. No external account was modified while building this project.
The adapter was tested with Opik 2.2.71 and Python 3.12 using a fake Jev transport. Authenticated Jev calls and actual Opik uploads were not run. The public API contracts were checked against official documentation on September 20, 2026. Dependency versions do not freeze server behavior.
OPIK_TRACK_DISABLE=true is used only in tests. Do not set it for a real experiment. .env.example documents the variables; .env is not automatically loaded.
Understanding the scores
| Metric | Meaning |
|---|---|
grounded | Estimated probability that all factual claims have supplied support |
addresses_request | Estimated probability that the reply addresses the actual request |
action_honest | Estimated probability that completed-action claims match successful tool evidence |
helpfulness | Probability-weighted rubric value, normalized from 0–2 to 0–1 |
helpfulness_confidence | Provider’s uncertainty summary for the ordered Score answer |
accepted | Application verdict equals pass, not a correctness guarantee |
needs_review | Application verdict is uncertain |
A Noul value of 0.98 is not “98% of claims are grounded.” It is the model’s probability of a yes to the whole proposition. Score.confidence is not the probability that the judge is correct. The tutorial’s 0.2/0.8 boundaries and 0.6 confidence threshold are illustrative and uncalibrated.
Use your own traces
Pass --data path/to/cases.jsonl to either runner. Each line needs:
{
"id": "case-001",
"request": "Can I return this order?",
"policy": "The authoritative policy relevant to this request.",
"tool_calls": [{"name": "lookup_order", "result": {"eligible": true}}],
"final_answer": "The answer being evaluated."
}
The demo mode additionally requires hand-authored demo fields, as in the supplied fixtures. Live mode never sends these to Jev. Optional expected_verdict fields are tutorial annotations, not independently collected human labels; they are excluded from the judge state. Collect real labels before reporting accuracy.
Redact personal data before submission. Restrict Opik retention and access according to your needs. The instruction boundary in the rubric reduces ambiguity but is not a proven defense against prompt injection. Test hostile trace content separately.
Files
article.md: publication draft, with source links and code excerpts.jev_judge/rubric.py: atomic questions and allowlisted state projection.jev_judge/client.py: documented HTTP contract, validation, timeout, bounded retries.jev_judge/core.py: deterministic checks, score mapping, verdict policy.jev_judge/cli.py: local demo/live runner and JSONL audit results.jev_judge/opik_eval.py: live custom metric and experiment entry point.tests/: network-free tests, including the real Opik SDK with mocked calls.scripts/build_figures.py: reproducible architecture exports.scripts/build_reading_copy.py: standalone HTML article builder.VALIDATION.md: verification scope and publication checks.
Rebuild the graphics and reading copy
pip install -e '.[figures]'
python scripts/build_figures.py
npm install --no-save playwright
npx playwright install chromium
node scripts/render_illustrations.cjs
python scripts/build_reading_copy.py
Alternatively, install weasyprint and Poppler (pdftoppm), then run python scripts/render_illustrations.py in place of the Playwright steps. The four illustrations are editable HTML/CSS in assets/; their PNG exports support the Markdown article.
Before sharing on GitHub
Review the article, choose your repository URL, and choose a license before publishing. No license is imposed here. Commit the source, data, tests, article, and figures; do not commit .env, credentials, environments, or private result files. The included CI workflow runs only offline tests.
Sources
Similar Articles
@akshay_pachaar: https://x.com/akshay_pachaar/status/2102087107410002345
The article explains how to use Jev, a model for structured decisions, as an efficient judge for evaluating AI agent responses, reducing latency and cost compared to traditional LLM judges.
@akshay_pachaar: LLMs vs. Jev, clearly explained! TL;DR The key difference is not that Jev generates faster. Jev does not generate text …
The article explains the key differences between LLMs and Jev, highlighting that Jev evaluates predefined decisions in parallel with probabilities, unlike LLMs that generate text sequentially.
@akshay_pachaar: The Jev sweet spot. (when to use it, and when not to) Jev lives between rules and LLMs. The easiest mistake is treating…
Jev is a tool that acts as a layer between deterministic software and LLMs, optimized for semantic judgment tasks where possible answers are predefined but input interpretation requires fuzzy logic, such as in support-ticket routing.
@paarangatrai: this is the easiest way to understand Jev: LLMs generate answers. Jev makes decisions. that sounds like a small differe…
The article introduces Jev, an AI model designed to make decisions rather than generate answers, using structured outputs for applications like fraud detection and risk assessment, positioning it as a routing layer for larger reasoning models.
@akshay_pachaar: If you use LLM-as-judge, this one is for you. (bookmark it) Most teams validate their agent's outputs by calling a fron…
Details an approach to train a small LLM judge for evaluating agent outputs, replacing costly frontier models, with a Claude Code plugin for deployment.