Tool

Benchmark LLM censorship behavior with multi-judge eval

Model-agnostic censorship evaluation harness with 304 benchmark prompts, four-judge panel, and interactive viewer for auditing LLM response behavior.

Works with vllmopenaiopenrouteranthropicnodejs

91
Spark score
out of 100
Updated 15 days ago
Source checked Sep 17, 2026
Version 1.0.0
Models
gpt 4o

Add to Favorites

Why it matters

Evaluate and benchmark any language model's censorship and refusal behavior using a standardized 304-prompt dataset, multi-judge panel, and interactive results viewer to compare model responses against established baselines.

Outcomes

What it gets done

01

Generate model responses to 304 censorship-evaluation prompts via any OpenAI-compatible API endpoint

02

Judge responses using a four-LLM panel (OpenRouter, OpenAI, Anthropic) with batch API support

03

Analyze matched-pair statistics and classification results across model arms

04

Browse and audit 1,824+ responses with classifications in an interactive Node.js viewer

Source

Get it from source

Spark does not host a copy of it.

Open source

Reports

Agent outcome reports

No reports yet

Overview

Lineage Eval

lineage-eval is a model-agnostic generation and judging harness for censorship evaluation. It provides 304 benchmark prompts, a four-judge LLM panel (OpenRouter, OpenAI, Anthropic), and an interactive viewer. The released artifact includes 1,824 responses across six model arms and 7,296 classifications for auditing model behavior on sensitive topics. Use lineage-eval when you need to evaluate censorship behavior of models you serve via OpenAI-compatible APIs, compare base models against fine-tunes, or audit response patterns with reproducible benchmarks. It's ideal for researchers with existing GPU infrastructure who want standardized multi-judge evaluation without managing model weights in the harness itself.

What it does

lineage-eval is a model-agnostic generation and judging harness for censorship evaluation of large language models. It provides 304 benchmark prompts, a four-judge LLM panel, and a read-only interactive viewer to audit model responses. The released study artifact includes 1,824 responses across six model arms and 7,296 classifications.

When to use - and when NOT to

Use lineage-eval when you need to evaluate censorship behavior of any model you can serve via an OpenAI-compatible API, whether it's a released checkpoint, local directory, or custom-trained model. It's ideal for comparing multiple model variants (base models versus fine-tunes) or auditing response patterns across political and sensitive topics. Do NOT use this tool if you need the harness to manage model weights or GPU infrastructure - it requires you to run your own vLLM or compatible server. Do NOT use it to regenerate the three trained adapters from the original study, as those weights are not distributed.

Inputs and outputs

You provide a running inference endpoint (vLLM or any server implementing OpenAI chat-completions API), the served model name, and API keys for the judge panel (OpenRouter, OpenAI, and Anthropic). The harness sends 304 prompts to your model and collects responses in append-only, resumable JSONL format. You receive structured response logs, classifications from four LLM judges, matched analysis statistics, and an interactive Node.js viewer for auditing results.

Integrations

The harness integrates with vLLM for model serving, OpenRouter for two synchronous judges, OpenAI's native batch API (GPT judge), and Anthropic's native batch API (Sonnet judge). The evaluation client uses the OpenAI chat-completions API standard, so any compatible server works. The viewer requires Node.js 22.13 or newer and does not need Python, a GPU, model access, or API keys.

Who it's for

lineage-eval is built for AI researchers and model developers who need reproducible censorship benchmarks. It serves teams evaluating fine-tuned models against base checkpoints, organizations auditing response behavior across sensitive topics, and researchers comparing multiple model variants in a single run. The tool separates inference infrastructure (you manage) from evaluation logic (the harness provides), making it suitable for users with existing GPU environments who want standardized judging without vendor lock-in.

Getting started

First, serve your model with vLLM:

vllm serve /path/to/your-model \
  --served-model-name my-model \
  --host 127.0.0.1 \
  --port 8000

Then install the evaluation client and configure judge API keys:

uv sync
cp .env.example .env

Verify the endpoint:

uv run lineage-eval doctor \
  --config configs/eval.toml \
  --base-url http://127.0.0.1:8000/v1 \
  --model my-model

Run generation with the full 304-prompt benchmark:

uv run lineage-eval generate \
  --config configs/eval.toml \
  --base-url http://127.0.0.1:8000/v1 \
  --model my-model

Generation is append-only and resumable - successful model/prompt pairs are skipped, failed attempts are retried. To evaluate multiple models from the same endpoint, repeat the model flag. Then run the judge panel and analysis:

uv run lineage-eval judge --config configs/eval.toml
uv run lineage-eval analyze --config configs/eval.toml

Browse results in the interactive viewer:

cd viewer
npm ci
npm run dev

All responses, judgments, and statistics remain under runs/eval/ with credentials never written to artifacts.

Source README

Lineage Eval

Benchmark data, a model-agnostic generation and judging harness, released study
results, and a read-only interactive viewer for the matched-v2 censorship
evaluation.

The released blog artifact contains 304 prompts, six model arms, 1,824
responses, and 7,296 classifications from four LLM judges. The three trained
adapters used in the study are not distributed. Their completed outputs can be
audited in the viewer, but the adapter generations and headline comparison
cannot be regenerated from this public repository.

The downloadable response table also includes 152 core-political responses
from GLM 5.3 (Ox Alpha), served as stealth/ox-alpha. It is a comparator with
undisclosed underlying provenance and no verified identity or lineage claim.
It is not added to the six-arm viewer or the blog statistics.

Download the released responses

All 1,976 response rows use one schema under
release/huggingface/blog-v1/data/responses/. GLM 5.3 (Ox Alpha) can be
downloaded directly from data/responses/ox-alpha.jsonl within that release.
The checked-in source rows are also available at
data/results/ox-alpha-v1/responses.jsonl in the same schema.

Browse the released results

The viewer requires Node.js 22.13 or newer. It does not need Python, a GPU,
model access, or API keys:

cd viewer
npm ci
npm run dev

Open http://localhost:3000. The canonical payload is
data/results/blog-v1/matched-v2-full-data.json; the viewer copies it into its
ignored public/ directory before building. See
viewer/README.md for production and local annotation
details.

Evaluate any model you can serve

The harness does not download, load, or manage model weights. You run vLLM-or
another server implementing the OpenAI chat-completions API-and tell the
harness its /v1 URL and served model name. The checkpoint can be a released
model, a local directory, or a model you trained yourself.

Install vLLM separately in the GPU environment appropriate for your hardware.
For example, on the GPU machine:

vllm serve /path/to/your-model \
  --served-model-name my-model \
  --host 127.0.0.1 \
  --port 8000

Use whatever additional vLLM flags your model needs, including its reasoning
parser. Keep the endpoint private or add authentication if it is reachable
over a network.

Install the lightweight evaluation client:

uv sync
cp .env.example .env

Add the judge API keys to .env, then verify that the endpoint exposes the
expected served name:

uv run lineage-eval doctor \
  --config configs/eval.toml \
  --base-url http://127.0.0.1:8000/v1 \
  --model my-model

Start with two prompts:

uv run lineage-eval generate \
  --config configs/eval.toml \
  --base-url http://127.0.0.1:8000/v1 \
  --model my-model \
  --limit 2

Inspect runs/eval/responses.jsonl, then resume the full 304-prompt run:

uv run lineage-eval generate \
  --config configs/eval.toml \
  --base-url http://127.0.0.1:8000/v1 \
  --model my-model

Generation is append-only and resumable. Successful model/prompt pairs are
skipped; failed attempts remain in the log and are retried. To evaluate several
models exposed by the same endpoint, repeat --model:

uv run lineage-eval generate \
  --model base-model \
  --model my-finetune

The URL and default placeholder model can also be edited in
configs/eval.toml. If the inference endpoint requires a key, set
generation.api_key_env in a copy of the config and add that variable to
.env.

Judge and analyze

The configured panel uses two synchronous OpenRouter judges plus the native
OpenAI and Anthropic batch APIs:

OPENROUTER_API_KEY
OPENAI_API_KEY
ANTHROPIC_API_KEY

Run the panel and analysis:

uv run lineage-eval judge --config configs/eval.toml
uv run lineage-eval analyze --config configs/eval.toml

Native batches can be prepared for inspection before paid submission:

uv run lineage-eval judge --config configs/eval.toml \
  --judge gpt --judge sonnet --prepare-only

Responses, provider jobs, judgments, and statistics stay under runs/eval/.
Credentials are never written to run artifacts. See
docs/running.md for endpoint requirements, reasoning-output
handling, and recovery behavior.

Repository layout

configs/eval.toml       Benchmark, endpoint defaults, decoding, and judge panel
src/censorship/         Endpoint generation, judging, and matched analysis
data/benchmark/         Immutable matched-v2 prompt sets
data/results/blog-v1/   Canonical six-arm blog/viewer artifact
data/results/ox-alpha-v1/  Normalized Ox Alpha comparator responses
viewer/                 Read-only released-results browser
docs/                   Methodology, runtime, and release notes
tests/                  Platform-independent Python tests
runs/                   Local resumable work products; ignored

Validation

uv run python -m unittest discover -s tests -v
uv run python -m compileall -q src tests

cd viewer
npm ci
npm test
npm run lint

The repository tests the endpoint client with an in-process mock. A live vLLM
server and model-specific serving flags must be smoke-tested in the user’s GPU
environment.

Read docs/methodology.md and
data/README.md before interpreting the statistics. Release
validation and the remaining environment-specific checks are tracked in
docs/release-checklist.md.

FAQ

Common questions

Discussion

Questions & comments · 0

Sign In Sign in to leave a comment.