CityQuest-AI / README.md
Bhargav Malasani
Update README with additional tags
8267fa1 unverified
|
Raw
History Blame Contribute Delete
8.68 kB
---
title: CityQuest AI
emoji: 🗺️
colorFrom: pink
colorTo: blue
sdk: gradio
sdk_version: 6.16.0
python_version: '3.12'
app_file: app.py
pinned: false
license: apache-2.0
short_description: AI-generated multiplayer real-world city games
tags:
- track:wood
- sponsor:openbmb
- sponsor:nvidia
- sponsor:modal
- achievement:welltuned
- achievement:offbrand
- achievement:llama
- achievement:fieldnotes
---
# 🗺️ CityQuest AI
**Turn any city into a multiplayer real-world game.** CityQuest AI generates complete,
playable adventures — **Scavenger Hunt, Hide & Seek, and Tag** — tailored to a real
location, your group size, age range, difficulty, and theme. It grounds every quest in
the actual city (real districts, landmarks and parks), runs a live multiplayer room with
proof-gated tasks and scoring, lets players record **voice journals** during play, and
wraps the session up with an **AI narrative recap** and a generated **poster**.
> Built for the **[Build Small Hackathon](https://huggingface.co/build-small-hackathon)**
> by Gradio × Hugging Face (June 5–15, 2026). Small models, big adventures — everything
> runs on models **≤ 4B parameters** through **llama.cpp**, orchestrated on a single GPU.
---
## 🔗 Links
| | |
| --- | --- |
| 🎮 **Live App (HF Space)** | https://huggingface.co/spaces/build-small-hackathon/CityQuest-AI |
| 💻 **GitHub** | https://github.com/NANInithin/CityQuest-AI |
| 🤖 **Fine-tuned model** | https://huggingface.co/NANI-Nithin/CityQuest-Nemotron-3-Nano-4B-GGUF |
| 🏕️ **Hackathon** | https://huggingface.co/build-small-hackathon |
| 𝕏 **Social Media Post|https://x.com/mnbhargav8/status/2066632722664010144?s=20|
|🏃 **Demo game run**|https://www.youtube.com/watch?v=QtjaA9YZHOc|
|🏃 **Demo game recording**|https://youtu.be/wyrfTrp68yw|
---
## 🏆 Hackathon at a glance
# Trail: An Adventure in Thousand Token Wood
**Constraints met**
-**Gradio app hosted on a Hugging Face Space**
-**All models ≤ 32B** — in fact **≤ 4B** (NVIDIA Nemotron 3 Nano **4B** + OpenBMB MiniCPM5 **1B**)
-**Load-bearing AI** — the entire game (rules, tasks, hints, safety, scoring, recap, poster) is model-generated, not scripted
**Track:** primarily **Thousand Token Wood** (a delightful, original AI experience that
gamifies real-world exploration), with strong **Backyard AI** relevance — it solves a real
problem for friends/family: planning a fun, safe group outing in minutes.
### Sponsor tech we build on
| Sponsor | How we use it |
| --- | --- |
| **NVIDIA Nemotron** | `Nemotron-3-Nano-4B` (GGUF) is our core game generator |
| **OpenBMB** | `MiniCPM5-1B` (GGUF) powers the episode-recap path |
| **Modal** | Full LoRA fine-tuning + GGUF conversion pipeline runs on Modal A100s |
| **Cohere** | `cohere-transcribe-03-2026` transcribes in-game voice journals |
### Bonus Quests
| Badge | Status | Evidence |
| --- | --- | --- |
| 🦙 **Llama Champion** (llama.cpp runtime) | ✅ Earned | Nemotron **and** MiniCPM run via `llama-cpp-python` |
| 🪙 **Tiny Titan** (≤4B models) | ✅ Eligible | Both LLMs are ≤4B; runs on modest hardware |
| 🎛️ **Well-Tuned** (fine-tuned model on HF) | ✅ Eligible | LoRA fine-tune **published** at [`NANI-Nithin/CityQuest-Nemotron-3-Nano-4B-GGUF`](https://huggingface.co/NANI-Nithin/CityQuest-Nemotron-3-Nano-4B-GGUF) with a full reproducible Modal pipeline (see [`training/`](training/README.md)); under active development for location grounding |
| 📓 **Field Notes** (dev report) | ✅ Eligible | **published** at [Teaching a 4B Model to Run a City-Wide Scavenger Hunt — Without Naming a Single Street](https://huggingface.co/blog/build-small-hackathon/cityquest-ai) |
---
## ✨ Features
- **City-grounded generation** — live **Wikipedia** city context injects real districts,
landmarks and parks so quests reference actual places, not generic ones.
- **Three game types** — Scavenger Hunt, Hide & Seek, Tag, each with type-appropriate
rules, tasks/zones, hints, and scoring.
- **Schema-guaranteed output** — every generated game is validated against a strict JSON
schema, auto-**repaired** on failure, with a safe fallback — so the app never breaks.
- **Multiplayer rooms** — create/join with a 6-character room code; synchronized state via
adaptive `gr.Timer` polling (1.5s when active, eases to ~3s when idle).
- **Proof-gated tasks** — complete tasks with **photo / observation / text** proof; live
leaderboard, points, hints (with penalties), and a countdown timer.
- **Ask-the-Guide** — per-task AI helper for clues and clarifications during play.
- **Voice journals** — record audio during the quest; auto-transcribed (14 languages) with
a typed-input fallback.
- **AI recap + poster** — a streamed narrative episode recap of how the game played out,
plus a cinematic poster image.
- **Safety-first** — generated games include allowed zones, forbidden behaviors, adult-
supervision flags and stop conditions.
---
## 🧠 AI architecture — small models, orchestrated
Everything is built around **small, efficient models** sequenced on a single GPU (each is
loaded for its stage and unloaded to free VRAM for the next — appropriate model sizing by design):
| Stage | Model | Runtime | Notes |
| --- | --- | --- | --- |
| 🎯 Game generation | `nvidia/NVIDIA-Nemotron-3-Nano-4B-GGUF` | **llama.cpp** | Retrieval-grounded + Wikipedia city context; JSON-schema validated & repaired |
| 🗣️ Voice journal ASR | `CohereLabs/cohere-transcribe-03-2026` | 🤗 Transformers | 14 languages, lazy-loaded; typed fallback |
| 📖 Episode recap | `openbmb/MiniCPM5-1B-GGUF` | **llama.cpp** | Narrative recap (deterministic template fallback for reliability) |
| 🖼️ Poster | `black-forest-labs/FLUX.1-schnell` | 🤗 Diffusers | Cinematic recap poster |
| 📍 Location context | **Wikipedia API** | — | Real landmarks/districts/parks per city |
`CITYQUEST_FAST_TEST=1` runs the full pipeline without downloading any model weights.
---
## 🎛️ Fine-tuning (Well-Tuned quest)
We built a complete, reproducible pipeline to **LoRA fine-tune Nemotron 3 Nano 4B on the
CityQuest dataset** and ship it as a GGUF — all on **Modal**:
```
app/data/<game>/dataset.json
│ prepare_dataset.py — serve-matched SFT prompts + game_schema targets (leave-one-out retrieval)
training/data/*.jsonl
│ train_modal.py — transformers + PEFT LoRA on A100 (native nemotron_h + mamba kernels,
│ checkpoint/resume) → merge → GGUF Q4_K_M → upload to HF
🤗 NANI-Nithin/CityQuest-Nemotron-3-Nano-4B-GGUF
│ eval_gguf.py — schema-pass evaluation vs the stock base
```
**Honest status:** the fine-tune is **published on Hugging Face** and the pipeline is fully
reproducible. On evaluation it matched the base on structure but **regressed on location
grounding** (the synthetic training targets used generic descriptions, so it under-used the
real-city context) — so the live app currently serves the **stock Nemotron base** for the best
player experience. The next iteration regenerates the training targets grounded in real
landmarks. Full details in **[`training/README.md`](training/README.md)**. The fine-tuned model
can be enabled with a one-line change in `app/services/generator.py`.
---
## 🚀 Run locally
```bash
pip install -r requirements.txt
python app.py # launches the Gradio app
# Fast smoke test (no model downloads):
CITYQUEST_FAST_TEST=1 python app.py
```
llama.cpp setup: see [`NEMOTRON_GGUF_SETUP.md`](NEMOTRON_GGUF_SETUP.md).
Voice-journal ASR setup: see [`COHERE_ASR_SETUP.md`](COHERE_ASR_SETUP.md).
---
## 🛠️ Tech stack
- **Gradio** app on **Hugging Face Spaces** (ZeroGPU-ready)
- **llama.cpp** (`llama-cpp-python`) for LLM inference
- **🤗 Transformers / Diffusers** for ASR and image generation
- **Modal** for cloud-GPU fine-tuning
- **PEFT / TRL-free Trainer** LoRA training; **GGUF Q4_K_M** quantization
- Strict **JSON-Schema** validation + repair around all generations
---
## 👥 Team
| Member | Hugging Face | Email |
| --- | --- | --- |
| **Nithin Sai Kumar Kopparapu** | [@NANI-Nithin](https://huggingface.co/NANI-Nithin) | naniknsk2002@gmail.com |
| **Bhargav Malasani Nagaraj** | [@MNbalu](https://huggingface.co/MNbalu) | mnbhargavfr@gmail.com |
---
## 🙏 Acknowledgements
Built for the **Build Small Hackathon** (Gradio × Hugging Face). Thanks to sponsors
**NVIDIA** (Nemotron), **OpenBMB** (MiniCPM), **Cohere** (Transcribe), and **Modal** for the
models, tooling and compute that made CityQuest possible.
_License: Apache-2.0_