Live demo: https://mirror-world.onrender.com · Code: https://github.com/Sajidhussain19/Mirror-World · Video: https://youtu.be/eV12yJtuzk0
Inspiration
Facebook's Free Basics died in a nationwide backlash. Food apps learned how far a ₹2 platform fee could stretch. Every big decision in India is a bet on how 1.4 billion very different people will react, and teams usually find out after launch. Focus groups are slow, expensive, urban-biased and come in sample sizes of 12. We wanted a 1,000-person stress test you can run in minutes.
What it does
Type any proposal: a policy, a price change, a product launch. Mirror World creates a society of up to 1,000 grounded Indian personas, sampled from Census-of-India–style distributions of state, urban/rural setting, age, income, occupation, language and values, and connects them in a social graph.
- NVIDIA Nemotron 3 Nano agents react in character, in parallel. Over several rounds they hear what their contacts said and update their views. You watch opinion spread across a live map of India.
- Nemotron 3 Super writes a live-news brief from Tavily search results for agents to read first, and later mines themes from every voice.
- Nemotron 3 Ultra (thinking on) reasons over the full society: the verdict, the drivers backed by segment numbers, who is at risk, the say/do gap (what people say vs. what they'll actually do), and the single change most likely to flip the opposition, written out as a full rewrite.
- One click reruns the same people on the rewrite, with an A/B comparison per segment.
- Backtests replay real history with the outcome hidden from every model.
- Interviews: click any person and ask them why.
Backtest results (live, 300 agents, 3 rounds)
| Decision | Society did | Ultra verdict | Reality |
|---|---|---|---|
| Facebook Free Basics (Dec 2015) | ✓ Rejected | ✓ Rejected | Rejected (TRAI ban, Feb 2016) |
| Zomato ₹2 platform fee (Aug 2023) | ✓ Grudgingly accepted (15% support, 45% keep ordering) | ✓ Accepted | Accepted (raised to ₹10 by Oct 2024) |
| Instagram Reels after TikTok ban (Jul 2020) | ✓ Embraced (71% adopt) | ✗ Accepted | Embraced |
Three cases is a sanity check, not a validation study, and we show Ultra's miss openly.
How we built it
A FastAPI + asyncio backend streams Server-Sent Events into a zero-build canvas front end. A model router sends each task to the smallest Nemotron tier that can do it well on Nebius Token Factory (OpenAI-compatible): nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B handles about 900 persona calls per run with 96-way concurrency, nvidia/nemotron-3-super-120b-a12b handles synthesis, and nvidia/Nemotron-3-Ultra-550b-a55b handles reasoning. It includes robust JSON repair for reasoning models and a live usage meter (the Engine room). Completed runs are cached, so examples replay instantly for free. Deployed on Render with Docker.
Challenges
- LLM herd behaviour. Early runs drifted toward agreement (opposition fell from 40% to 5% over rounds). We added opinion inertia: at most one step of change per round.
- The say/do gap. Agents said they'd quit Zomato over ₹2. We changed "adopt" to ask what people would do, with realistic habit and switching costs, and that matched history.
- Getting non-diplomatic, in-character reactions, parsing JSON from reasoning models, and avoiding hindsight leakage in backtests.
What we learned
Small, fast models at massive scale plus one large reasoning model over the aggregate beats any single model alone. Social structure matters: the same people give different answers once they talk to each other.
What's next
Calibrating against public survey data (CSDS, NFHS). Voice interviews in Indian languages. Uploading your own customer segments. A "pre-mortem" API for teams to run before a pricing change ships.
Feedback on Nebius & NVIDIA
The OpenAI-compatible API meant zero integration friction, and /v1/models auto-discovered the Nemotron IDs. Token Factory handled 96-way concurrent Nano calls steadily, and having Nano, Super and Ultra behind one endpoint made per-task routing trivial. Things we'd love: clearer docs on toggling Nemotron thinking per request, a batch endpoint for agent-simulation workloads with shared prefixes, and rate-limit headers so clients can tune concurrency.
Built With
- fastapi
- javascript
- nebius-token-factory
- nvidia-nemotron
- python
- tavily