--- title: Dempster's Court emoji: ⚖️ colorFrom: red colorTo: yellow sdk: docker pinned: false license: apache-2.0 app_port: 7860 short_description: Pick the rule. Combine the testimony. Deliver the verdict. tags: - build-small-hackathon - dempster-shafer - courtroom-game - gothic - inference-providers - llama.cpp - off-brand - track:wood - achievement:offbrand - achievement:fieldnotes - achievement:sharing --- # Dempster's Court A courtroom puzzle game where the player is the Judge, AI witnesses each believe a different version of the truth, and **the choice of evidence-combination rule decides who hangs.** - **Play it:** https://huggingface.co/spaces/build-small-hackathon/dempsters-court - **Witness trace dataset (Sharing-is-Caring):** https://huggingface.co/datasets/thangvip/dempsters-court-witness-traces - **Field Notes (blog):** `docs/blog/2026-06-15-mapping-conflict-to-motion.md` - **Game design (GDD):** `Dempsters_Court_GDD.md` - **Architecture spec:** `docs/superpowers/specs/2026-06-06-dempsters-court-design.md` - **Implementation plan:** `docs/superpowers/plans/2026-06-06-dempsters-court-implementation.md` - **Demo:** https://youtu.be/DsrdlaRrnIc - **Public Post link:** https://huggingface.co/blog/build-small-hackathon/dempster-court ## What it does You preside over a murder. You call AI witnesses, they speak in character (and sometimes lie). You "take their deposition" — a snapshot of their belief over the suspects. Then on the **Fusion Bench** you pick a **Method** to combine all the depositions: - **Dempster (the Zealot)** — manufactures certainty under conflict; can crown an innocent. - **Yager (the Agnostic)** — pours conflict into doubt; refuses to convict when accusers contradict. - **PCR5 (the Diplomat)** — redistributes conflict fairly to the accused. - **Cautious (the Skeptic)** — idempotent; immune to two voices saying the same lie. Pull a different lever, watch the bars rearrange, deliver a verdict. The Reveal shows which Methods would have convicted whom on the same evidence. ## Badges - ⚖️ **Tiny Titan** — Qwen2.5-3B-Instruct (≤ 4 B parameters) in the local llama.cpp build; Qwen2.5-7B-Instruct via providers in the hosted Space - 🎨 **Off-Brand** — FastAPI mount + custom HTML/JS courtroom (no Gradio default UI) - 📡 **Sharing is Caring** — synthetic witness interrogation traces published as a public HF dataset - 📓 **Field Notes** — `docs/blog/2026-06-15-mapping-conflict-to-motion.md` - 🔌 **Off the Grid** *(local mode)* — `WITNESS_BACKEND=llama_cpp` + GGUF on disk, no cloud calls - 🦙 **Llama Champion** *(local mode)* — llama-cpp-python runtime under the local backend ## Run locally Two backends. Pick one with `WITNESS_BACKEND`: ```sh pip install -e ".[dev]" # Option A — Off the Grid (local llama.cpp, no network at runtime): pip install llama-cpp-python==0.3.2 python scripts/download_model.py # pulls Qwen2.5-3B-Instruct GGUF WITNESS_BACKEND=llama_cpp python -m dempsters_court.server # Option B — same code, hosted inference (matches the public Space): export HF_TOKEN=hf_... # https://huggingface.co/settings/tokens WITNESS_BACKEND=providers python -m dempsters_court.server ``` Both serve at http://localhost:7860. ## Run the tests ```sh python -m pytest -v ``` All 33 tests should pass: belief engine GDD §B numbers, case balance, witness engine, FastAPI routes, procedural generator.