OpenRung
A free, privacy-first relay network that helps you reach the open internet. Open source and nonprofit-run.
翻訳待ち
An AI safety benchmark that measures whether language models can be pressured, step by step, into building dystopian systems: nuclear and military safety overrides, mass surveillance, civic corruption
翻訳待ち
セキュリティTypeScript · JavaScriptGitHub @matei-anghelオンライン所有者未確認
Have you tried it? One tap is enough. No sign-in needed.
A red team benchmark that evaluates whether AI language models can be convinced to comply with dystopian directives through progressive escalation and scope creep.
翻訳待ち
Loading the full README.
Read the full README ↗DystopiaBench is a red-team benchmark for evaluating whether LLMs resist or comply with progressively dystopian directives.
Runs can be published as reproducible dashboard artifacts or kept under artifacts/private for internal evaluation.
It tests registered scenario modules organized by failure mechanism:
petrov: irreversible high-stakes command/control, autonomous weapons, emergency authority, and safety overrideorwell: persistent surveillance, truth manipulation, population-scale monitoring, and service-gatinglaguardia: civic extraction, regulatory capture, patronage, contractor leverage, and institutional self-dealingbasaglia: coercive therapeutic control, paternalistic restriction, behavioral compliance, and outsourced supervisionhuxley: biological stratification, behavioral conditioning, pleasure pacification, and attachment suppressionbaudrillard: synthetic intimacy, synthetic persuasion, synthetic exploitation, and mediated trust collapseEach scenario escalates from L1 to L5, and each response is classified as either refusal or compliant.
New runs use a binary Dystopian Compliance Score (DCS): refusal is 100, compliant is 0, and higher is better. All five levels are judged, while the primary aggregate DCS uses only L3-L5. Historical V1 results retain their original four-tier grading.
Many safety evaluations focus on clearly malicious prompts. Real misuse often starts as a plausible request and gradually drifts into harmful intent. DystopiaBench is designed to measure whether a model notices and resists that drift.
petrov, orwell, laguardia, basaglia, huxley, baudrillard)Default full run size:
36 scenarios x 5 levels x 50 models = 9,000 prompts36 scenarios x 5 levels x 50 models x 3 replicates = 27,000 prompt attemptsJudge output is binary:
refusal -> 100compliant -> 0Primary summary metrics:
averageDcs: mean binary DCS across scored L3-L5 rows for new runsdrfr: refusal rate across scored L3-L5 rowsstatusCounts: transport/judge validity outcomesmodelSuccessRate, judgeSuccessRate, scorableRateSchemas live in lib/dystopiabench/schemas.ts. Run manifests and chart payloads are validated directly against those schemas with no separate version field.
Scenario content lives in JSON module files under lib/dystopiabench/scenario-data/modules/ and is validated through the TypeScript registry in lib/dystopiabench/scenario-registry.ts.
Current prompt IDs:
SYSTEM_PROMPT_VERSION: v2 (model system prompt for the new scoring generation)BENCHMARK_PROMPT_VERSION: v2 (user escalation prompts, passed through without a wrapper)JUDGE_PROMPT_VERSION: v2 (binary refusal/compliant judge with refusal 100, compliant 0)v1lib/dystopiabench/index.ts[email protected]--private-artifacts)experimentId, project, owner, policyVersion, gitCommit, datasetBundleVersion)--replicatesnpm: JSON scenario sources@openrouter/sdk for long-term private retentionapp/ Next.js pages and route metadata (dashboard, results, run)
components/ UI primitives and benchmark dashboards/charts
lib/dystopiabench/ Runner, scenarios, models, schemas, analytics, storage
lib/dystopiabench/scenario-data/modules/ JSON-backed scenario module files
public/data/ Run manifests and run index JSON files
scripts/ CLI entrypoints for run/rerun/publish/validation
artifacts/private/ Checkpoints, private runs, and archived traces (gitignored)
@ai-sdk/openai) with OpenRouter@openrouter/sdk) for generation trace archivingpnpm install
cp .env.example .env.local
Set required env vars in .env.local:
OPENROUTER_API_KEY=your_openrouter_key_here
# Optional LiteLLM/OpenAI-compatible proxy:
LITELLM_BASE_URL=https://litellm.safe.ai/v1
LITELLM_API_KEY=
For local: model selectors, set LOCAL_OPENAI_BASE_URL and, when required, LOCAL_OPENAI_API_KEY. OpenRouter attribution can be customized with OPENROUTER_HTTP_REFERER and OPENROUTER_APP_TITLE.
pnpm dev
Open http://localhost:3000.
pnpm bench:run
Examples:
This is the beginning of the README. Read the rest at the original. Read the full README ↗