SIRIUS
Multi-Agent LLM Evaluation Platform
Grades a chatbot's answers with a panel of three judges, then measures how much the judges actually agreed.
Active development
Verdict space
- current state: TRUEverified against evidence the agent gathered
- FALSEcontradicted by an external source or by the chatbot itself
- UNSUREno reliable evidence found — refusing to guess is the correct outcome
0.90
Krippendorff's α
chance-corrected agreement across 3 judges, 263 evaluations
91%
Mean inter-judge agreement
fraction of judges landing on the same score, pooled across dimensions
263
Evaluations run
789
Judge calls
three judges per evaluation, no retries counted
What this is
SIRIUS measures how good a chatbot's answers really are. It sends each response to a panel of three independent AI judges, has them score it across four quality dimensions, reconciles their verdicts by majority vote, and then measures how much the judges actually agreed with one another.
It also breaks a response down into individual factual claims and verifies each one — including a reasoning agent that checks flagged claims against external sources before deciding whether they're true, false, or unverifiable.
Anyone building on a language model eventually hits the same question: is this thing's output actually any good? A single quality score from a single model is easy to produce and easy to distrust — one judge can be biased, lenient, or simply wrong, and you'd never know.
SIRIUS grades AI answers the way a panel of expert reviewers would — and then tells you how much to trust the grade.
What it does
A score, and a measure of how much to trust the score.
The output of an evaluation isn't a number. It's a number accompanied by per-judge breakdowns, agreement statistics, claim-by-claim fact checks, and — where verification ran — a traceable chain of evidence. That's the difference between a score and a defensible score.
- Judges with a panel
- Three independent judge models each score a response, so no single model's bias decides the outcome.
- Four quality dimensions
- Each response is assessed on distinct axes of quality rather than reduced to one blurry good/bad number.
- Reconciles disagreement in the open
- Verdicts are combined by majority vote, and every judge's individual scores stay visible.
- Measures its own reliability
- Inter-rater reliability statistics, implemented from the ground up, report how much consensus stood behind every score.
- Profiles the judges themselves
- Strictness profiling surfaces whether one judge is systematically more lenient or harsher than the others, rather than hiding grader bias.
- Detects hallucinations per claim
- A response is decomposed into atomic factual claims; each claim is verified independently by the panel and flagged only by consensus.
- Verifies flagged claims with an agent
- A ReAct-style agent investigates flagged claims step by step — looking facts up and re-questioning the chatbot — before committing to TRUE, FALSE, or UNSURE with evidence attached.
Stack
| Backend | Python 3.13FastAPISQLAlchemy over SQLitePydantic |
|---|---|
| Orchestration | LangGraph — multi-agent orchestration as an explicit state graph |
| Models | Three independent judge models via Together AIOpenAI SDK pointed at Together's OpenAI-compatible endpoint |
| Verification | Wikipedia REST APIReAct agent with a hard step limit |
| Frontend | React 19ViteReact Router |
| Interface | 12 REST endpoints |
A layered monorepo with a plugin-oriented core. Evaluators, chatbot connectors, and consensus strategies each sit behind a small abstract interface, so any one of them can be swapped without touching the orchestration around it.
How it works
7 sectionsThe evaluation pipeline, as a graph
At the heart of SIRIUS is an orchestration graph built with LangGraph. Rather than a single linear script, the evaluation is expressed as a state graph: a shared, typed state object flows through a set of nodes, each node reads from it and contributes its part, and the framework merges those contributions safely.
When a response comes in for evaluation, the graph fans out to three judge nodes that run concurrently — one per judge model. Because they have no dependencies on one another, they execute in parallel. Each judge independently produces a schema-constrained, validated verdict. Their results then fan back in to a consensus node, which combines them.
A subtle but important property lives here. Because the three judges run concurrently, their results can arrive in any order. SIRIUS assigns each judge a fixed position and sorts results by that position before any aggregation, so the outcome is identical no matter which judge happens to answer first. Consensus is deterministic with respect to arrival order — a prerequisite for repeatable scoring.
Constrained, validated judging
Every judge is asked for structured output — scores within fixed numeric ranges and a confidence value — and that output is validated against a strict schema before it is ever used. Requests are issued at temperature 0 to make sampling as deterministic as the provider allows.
Crucially, there are no silent fallbacks. If a judge returns something that can't be parsed or validated, SIRIUS fails loudly rather than quietly substituting a default. A score you see is a score a judge actually produced and the system actually validated.
Consensus and reliability
Three judges will not always agree, and that disagreement is information, not noise. SIRIUS combines the three verdicts by majority vote and, separately, quantifies how much they agreed.
- Inter-judge agreement
- the fraction of judges landing on the same score, pooled across every scored dimension.
- Krippendorff's α
- a standard inter-rater reliability coefficient, implemented from scratch, measuring agreement corrected for chance.
- Evaluator-strictness profiling
- measures whether any single judge is systematically more lenient or harsher than the others, surfacing grader bias directly. It identified a systematic 0.13-point leniency bias across judges on a 1–5 scale.
Claim-level hallucination detection
Scoring answers is one thing; catching fabricated facts is another. SIRIUS handles hallucination detection as a two-stage process.
Stage one — canonical decomposition. A response is broken down into a list of atomic factual claims. This decomposition is grounding-constrained: the system is explicitly instructed to extract only assertions actually present in the response, and never to introduce entities, names, or facts the response didn't contain. The number of claims per response is capped so verification cost stays bounded.
Stage two — panel verification. All three judges then verify the same canonical claim list. Because every judge is verifying an identical set of claims, per-claim consensus becomes well-defined: each claim gets three verdicts, and it is flagged only when at least two of the three judges agree it is false. This is genuine claim-level consensus — not one model's opinion, and not a response-level guess.
This two-stage design runs alongside the original response-level detection rather than replacing it, so the platform gains claim-by-claim attribution without disturbing its established response-level signals.
The ReAct verification agent
Flagging a claim as probably false is useful; proving it is better. For claims the panel flags, SIRIUS runs a ReAct agent — an agent that interleaves reasoning, action, and observation in a loop.
Unlike a single-shot prompt, the agent's next move depends on what it just observed. It can look a fact up in an external source (the Wikipedia REST API), and it can re-question the chatbot under test to check whether it contradicts itself.
A typical loop: the agent reasons about what it needs, calls a tool, reads the result, and — if that result was a dead end — reformulates its approach and tries a different angle rather than repeating itself. It continues until it can conclude, bounded by a hard step limit so it always terminates. When it concludes, it returns TRUE, FALSE, or UNSURE together with the evidence it gathered.
- It never fabricates
- if every avenue fails and it has no reliable evidence, it returns UNSURE rather than inventing a confident answer. Refusing to guess is treated as correct behaviour, not as a failure.
- Reasoning private, evidence public
- the agent's internal chain of thought is retained server-side for auditing and debugging, but never exposed in the API response. What reaches the user is the auditable trail — the actions taken, what was observed, and the verdict — without the raw reasoning.
Reliability of the platform itself
SIRIUS is engineered so that its own behaviour is verifiable, not just its subjects'.
- Record and replay
- a record-and-replay layer captures real model responses as fixtures, so the platform's logic can be tested exhaustively and deterministically without live model calls — and, by extension, without cost during testing.
- Keyed, validated fixtures
- every recorded interaction is keyed to its exact inputs, and the system refuses to record an unusable response (an empty answer, or an external-source error), so a broken interaction can never quietly poison the test corpus.
- Proven-equivalence migration
- the orchestration was moved onto the graph architecture under a proven-equivalence guarantee: the new graph-based path was verified to reproduce the previous path's output exactly, unit for unit, before it became the default. Behaviour was preserved through the refactor rather than assumed.
Extensible by design
The core is built around small abstract interfaces for its three main extension points — the evaluator, the chatbot connector, and the consensus strategy. Because the model layer speaks the OpenAI-compatible protocol, swapping the underlying model provider is a minimal change rather than a rewrite.
New judges, new chatbot targets, or new ways of combining verdicts can be added without rewriting the orchestration that ties them together, across 12 REST endpoints and the React frontend.
Demo
Recording in progress
A walkthrough of an evaluation — panel scoring, agreement statistics, and a flagged claim going through the ReAct agent.
What's next
RoadmapAutomated benchmarking at scale
Beyond evaluating single responses, SIRIUS will run full benchmark suites across large question sets — currently marked Coming Soon in the interface while it's finalised.
Asynchronous deep verification
Claim-level verification and the ReAct agent are thorough but deliberate. The next iteration moves them into background jobs: the primary quality score returns immediately while deeper claim-by-claim verification completes asynchronously and streams into the interface as it finishes — with progress tracking, safe handling of partial failures, and safeguards against redundant or runaway work.
Live deployment
A public, hosted demonstration of the platform, packaged as a single self-contained deployment.
Broader verification sources
The reasoning agent's toolset is designed to grow; additional external knowledge sources beyond the current lookup can be added behind the same agent loop.
Everything above is built. Everything here isn't yet — listed as work, not as a promise.