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.
1.0.0Add 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
Generate model responses to 304 censorship-evaluation prompts via any OpenAI-compatible API endpoint
Judge responses using a four-LLM panel (OpenRouter, OpenAI, Anthropic) with batch API support
Analyze matched-pair statistics and classification results across model arms
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 sourceReports
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 underrelease/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 atdata/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 isdata/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 inconfigs/eval.toml. If the inference endpoint requires a key, setgeneration.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.