Model or dataset
agentscope-ai/OpenJudge avatar
agentscope-ai/OpenJudge

OpenJudge: A Grader Library and Rubric Generator for AI Application Evaluation

OpenJudge: A Unified Framework for Holistic Evaluation and Quality Rewards

836 stars72 forksPythonApache-2.0

At a glance

What is it?
OpenJudge packages over 50 LLM-based graders plus rubric generation into one Python framework, with an online playground and a Streamlit UI. It is Apache-2.0 and aimed at teams that need repeatable scoring for agents, chatbots and multimodal outputs.
Who is it for?
Adopt OpenJudge if you already have test data and want a packaged grader library or an LLM-generated rubric instead of writing every scoring prompt yourself. Skip it if you need a hosted evaluation service with guaranteed uptime or if your scoring logic is deterministic and cheap to express in plain unit tests.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 5 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The evaluation workflow OpenJudge tries to standardise

The README describes a four-step loop: collect test data, define graders, run evaluation at scale, analyze weaknesses, iterate. Most teams already do this, but they do it with a pile of ad hoc scripts. Each new AI feature gets its own scoring prompt, its own output parser, and its own definition of what a good answer looks like. OpenJudge's pitch is that the middle two steps should be a library call rather than a bespoke script.

The target user is an engineer shipping an AI agent or chatbot who needs a number they can track over time. The README frames this as driving "continuous application optimization" and converting grading results into reward signals for fine-tuning. That second use is the more interesting one: the same grader that scores a response in CI can, in principle, produce the reward used in an RLHF-style loop. Whether that works in practice depends on whether the grader's scores are stable enough to train against, which the README does not quantify.

What is actually in the grader library

The README lists more than 50 graders under three broad families. The General family covers semantic relevance, text similarity, code syntax validation and JSON structure matching. The Agent family targets the agent lifecycle: tool selection accuracy, memory and context preservation, plan feasibility, and trajectory quality. The Multimodal family covers image-text coherence, text-to-image generation quality and image helpfulness.

The Agent graders are the part that distinguishes this from a generic LLM-as-judge wrapper. Scoring a final answer is easy. Scoring whether the agent chose the right tool, remembered the right context, or took a sensible path is harder, and the README says the project assesses "trajectories, Memory, Reflection, and Tool Use" rather than only outcomes. That implies the grader inputs include intermediate steps, not just the final message, though the README excerpt does not show the exact input schema.

The README also states that every grader ships with benchmark datasets and pytest integration for validation, with datasets hosted on Hugging Face. That is a claim about the project's own testing, not about your results. It is still a useful signal: a grader library without regression tests drifts silently when the underlying model changes.

Three ways to get a grader, and when each applies

The README lays out three build paths. If you have explicit rules or logic, you write a custom grader through Python interfaces or prompt templates. If you have no labeled data and no clear criteria, you give the system a task description and optional sample queries, and the LLM generates rubrics for you (zero-shot). If you have a few annotated examples, the GraderGenerator summarises rubrics from that data and produces an LLM-based grader (data-driven).

The zero-shot path is the one to be sceptical about. Generated rubrics reflect what the model thinks matters, which is not necessarily what your product team thinks matters. The README itself positions it as "ideal for rapid prototyping", which is the right framing. The data-driven path is more defensible because the criteria are grounded in examples you supplied, but it only works if those examples are representative and consistently labelled.

The custom path is the least glamorous and probably the most used in production. If your acceptance criteria can be written as a rule, a rule-based grader is cheaper, faster and more predictable than an LLM call. OpenJudge's value there is the surrounding harness, not the grader itself.

Getting it running: install, playground, and the local UI

The package is published on PyPI as py-openjudge, requires Python 3.10 or later, and installs with pip install py-openjudge. The README does not reproduce a full evaluation script in the excerpt provided, so the exact API surface for running a grader is not verifiable from this material alone. The documentation site at agentscope-ai.github.io/OpenJudge/ is where the grader-level examples live.

Two paths avoid installation entirely. The online playground at openjudge.me/app lets you test built-in graders and build custom rubrics in a browser. For local use, the README gives the command streamlit run ui/app.py, which starts the Streamlit-based OpenJudge UI for grader testing and Auto Arena. That command assumes the repository is checked out locally and Streamlit is installed.

The licence is Apache-2.0. That permits commercial use and modification, and it includes an explicit patent grant, but it also means you carry the obligation to preserve notices and state changes. This is not legal advice; if you plan to redistribute a modified version, read the licence text and your own legal review.

Where the framework is thin

The README does not state a cost model. Every LLM-based grader is an inference call, and an agent-lifecycle evaluation that inspects trajectories, memory and tool use implies multiple calls per test case. At scale that is a real bill, and the framework does not appear to offer a caching or sampling layer in the material provided. Teams evaluating thousands of interactions per day should budget for this before adopting.

Determinism is the second gap. LLM-based graders vary run to run, and the README does not describe temperature controls, majority voting, or calibration procedures. If your team needs a pass/fail gate in CI, a generated rubric that scores the same input differently on consecutive runs will be a problem. The pytest integration suggests the project takes regression testing seriously for its own graders, but that does not transfer automatically to rubrics you generate.

Finally, the framework is opinionated about using LLMs as judges. If your evaluation is mostly exact-match, schema validation or unit-testable behaviour, OpenJudge adds a dependency layer without adding much. The JSON Match and Syntax Check graders exist, but a plain assertion would do the same job with less machinery.

How it compares to writing your own judge harness

The obvious alternative is a homegrown LLM-as-judge script: a prompt template, a model call, and a parser, wired into your test suite. That approach is free, fully transparent, and you control every token. Its weakness is duplication. Every team writes the same relevance prompt slightly differently, and nobody validates whether the prompt still works after a model upgrade.

OpenJudge's difference is the taxonomy and the validation layer. Instead of one generic judge prompt, you pick from named graders with documented scope, and the project maintains benchmark datasets for them. That is a maintenance commitment you would otherwise own. The trade-off is that you inherit the project's definitions. If your notion of "relevance" differs from the Relevance grader's, you are either writing a custom grader anyway or accepting a mismatch.

A second alternative is a hosted evaluation platform. Those usually offer dashboards, human annotation workflows and managed scaling, which OpenJudge does not claim to provide beyond the Streamlit UI. The difference is control versus convenience: OpenJudge runs in your environment against your model endpoints, so data does not leave your infrastructure, but you operate it.

Maintenance, releases and what to verify before adopting

The release history shows v0.2.1 in January 2026 and v0.2.2 in February 2026, with the last push to the repository dated September 2026. That is a pre-1.0 version line, which means the API can change between minor releases. The README excerpt does not include a deprecation policy or a stability guarantee, so pinning py-openjudge in your requirements file is the practical move.

The ecosystem around the project is broader than the library itself. PawBench is a separate repository for model and harness co-evaluation, and the news entries mention Skill Graders for AI Agent Skill packages, a Reference Hallucination Arena, and a paper review application. Those are adjacent tools, not core library features, and adopting OpenJudge does not require adopting any of them.

Before committing, the concrete checks are: install py-openjudge on Python 3.10+, run one built-in grader such as Relevance against a sample of your own data, and compare its scores against your team's manual judgement. If the agreement is poor, a generated rubric will inherit the same problem. If it is good, the next step is deciding whether you need the data-driven GraderGenerator path or whether a custom rule-based grader covers your criteria.

Editorial conclusion

Adopt OpenJudge if you already have test data and want a packaged grader library or an LLM-generated rubric instead of writing every scoring prompt yourself. Skip it if you need a hosted evaluation service with guaranteed uptime or if your scoring logic is deterministic and cheap to express in plain unit tests. Before committing, install py-openjudge, run the pytest validation for one grader such as Relevance on your own samples, and check that the GraderGenerator output matches the criteria your team actually cares about.

Official sources

  1. agentscope-ai/OpenJudge on GitHub
  2. License: Apache-2.0
  3. Project website
  4. README
  5. Releases
Community notes

Community notes