| --- |
| title: CACE — Cultural Context Arbitration Environment |
| emoji: ⚖️ |
| colorFrom: indigo |
| colorTo: purple |
| sdk: docker |
| pinned: true |
| license: apache-2.0 |
| tags: |
| - reinforcement-learning |
| - openenv |
| - content-moderation |
| - multi-agent |
| - rlvr |
| - grpo |
| --- |
| |
| # Cultural Context Arbitration Environment (CACE) |
|
|
| **OpenEnv Hackathon 2026 | Theme 1 (Multi-Agent) + Theme 3.1 (World Modeling)** |
|
|
| Trains a single LLM policy via GRPO to make culturally-aware content moderation decisions — using Meta's Oversight Board rulings (200+ binding public decisions) as the **verifiable reward oracle**. |
|
|
| ## Quick Start |
|
|
| ```python |
| from cace_env import CACEEnvClient, CACEAction |
| import asyncio |
| |
| async def main(): |
| # Connect to HF Space |
| async with CACEEnvClient(base_url="ws://YOUR_USERNAME-cace-env.hf.space") as env: |
| |
| # V1: single case episode |
| result = await env.reset() |
| print(result.observation.observation[:200]) |
| |
| # Make a moderation decision (0=ALLOW, 1=REMOVE, 2=ALLOW_WITH_LABEL, 3=ESCALATE, 4=RESTRICT) |
| result = await env.step(CACEAction(action_int=0)) |
| print(f"Reward: {result.reward:.4f} | Correct: {result.observation.reward_breakdown['correct']}") |
| |
| asyncio.run(main()) |
| ``` |
|
|
| ## V1 vs V2 Modes |
|
|
| | | V1 (Simple) | V2 (Network) | |
| |--|--|--| |
| | Episode | 1 post → 1 decision | 20 posts on social graph → pick 8 → 8 decisions | |
| | Observation | Enriched single case | Network batch with spread signals | |
| | Reward | 3-track reward | 3-track + network spread bonus | |
| | Use for | Quick training | Full demo | |
|
|
| ## Three-Track Reward |
|
|
| | Track | Weight | Measures | |
| |-------|--------|---------| |
| | Cultural Meaning Resolution | 40% | Correct interpretation of culturally local language | |
| | Harm Detection Under Context | 35% | Catching real harm that looks ambiguous | |
| | Policy Calibration + Escalation | 25% | Right tool for right case — no lazy escalation | |
|
|
| Combined reward: **[-1.0, +1.0]** (normalised for GRPO) |
|
|
| ## Architecture |
|
|
| ``` |
| 4 Frozen Agents (Groq/Azure — inference only, no gradients): |
| Intake Agent → language, region, policy clause |
| Cultural Context → charitable cultural interpretation |
| Adversarial Challenge → stress-tests the cultural argument |
| Policy Alignment → Meta Community Standards anchor |
| |
| 1 Trainable Agent (GRPO via Unsloth + TRL): |
| Decision Agent → ALLOW | REMOVE | ALLOW_WITH_LABEL | ESCALATE | RESTRICT_DISTRIBUTION |
| |
| Reward Oracle: Meta Oversight Board — 200+ binding public decisions |
| No LLM judge. Fully deterministic reward. |
| ``` |
|
|
| ## Environment API |
|
|
| ``` |
| POST /reset → start episode (returns CACEObservation) |
| POST /step → apply CACEAction (returns CACEObservation with reward) |
| GET /state → current CACEState (for debugging) |
| GET /health → liveness check |
| GET /docs → FastAPI Swagger UI |
| GET /web → OpenEnv web interface |
| ``` |
|
|