| --- |
| title: Tianwen |
| emoji: ๐ฎ |
| colorFrom: indigo |
| colorTo: pink |
| sdk: gradio |
| sdk_version: 6.17.3 |
| python_version: '3.12' |
| app_file: app.py |
| pinned: false |
| license: mit |
| tags: |
| - track:wood |
| - sponsor:openbmb |
| - sponsor:modal |
| - achievement:offgrid |
| - achievement:welltuned |
| - achievement:sharing |
| - achievement:fieldnotes |
| - badge:tiny |
| - minicpm |
| - llama-cpp |
| - on-device |
| --- |
| |
| # ๅคฉ้ฎ ยท Tianwen |
|
|
| **An entirely on-device Eastern self-reflection app โ a 1B model that translates 3,000 years of |
| Chinese metaphysical language into one small, doable step for today.** |
|
|
| > Built for the **Build Small Hackathon**. Named after Qu Yuan's ancient poem *Tianwen* (ใๅคฉ้ฎใ, |
| > "Questions to Heaven") โ a reminder that the most worthwhile questions are the ones we ask ourselves. |
|
|
| ๐ **Demo video:** [8-min walkthrough](https://huggingface.co/spaces/liuyd-dev/tianwen/resolve/main/video/Tianwen%20Demo%20Video%208min.mp4) ยท |
| ๐ **Social post:** [r/huggingface](https://www.reddit.com/r/huggingface/comments/1u6x7ui/i_finetuned_minicpm51b_to_turn_chinese_astrology/) ยท |
| ๐ค **Model:** `build-small-hackathon/tianwen-minicpm5-1b` ยท |
| ๐ค **Dataset:** `build-small-hackathon/tianwen-distill` |
|
|
| <video controls src="https://huggingface.co/spaces/liuyd-dev/tianwen/resolve/main/video/Tianwen%20Demo%20Video%208min.mp4" title="Tianwen โ 8-min demo"></video> |
|
|
| --- |
|
|
| ## What it is |
|
|
| Tianwen takes a deeply esoteric domain โ Chinese BaZi (ๅ
ซๅญ) astrology and I-Ching (ๅ
ญ็ป) divination โ |
| and turns it into a gentle, gamified instrument for **self-reflection**. It never tells fortunes; it |
| reframes ancient symbols as everyday psychological language and always ends with one concrete action. |
|
|
| Four readings, from the widest lens to the closest moment: |
|
|
| - **ๅฝ็ Chart** โ your whole-life portrait (BaZi four pillars) |
| - **ๅนด่ฟ Year** โ this year's tone, plus twelve months one at a time |
| - **ๆฅ็ Today** โ today's energy + a daily sigil wallpaper + a 30-day mood trend |
| - **่ฏทไบ Oracle** โ toss three coins six times for an I-Ching reading on a question you hold |
|
|
| Languages: **็ฎไฝ / ็น้ซ / English**. Themes: Ru-kiln White / Xuanwu Black. Installable PWA. |
|
|
| ## The idea & the tech (write-up) |
|
|
| The hackathon's thesis is *"the future of AI doesn't have to live in someone else's data center."* |
| Tianwen is a full app where **everything that matters runs on your own machine**: |
|
|
| | Layer | How | |
| |---|---| |
| | **Charting** | Deterministic โ `lunar-python` computes BaZi / liunian / liuyue / hexagrams locally. No model guesses dates. | |
| | **Interpretation** | A **fine-tuned MiniCPM5-1B** (1B params) served via **llama.cpp**, OpenAI-compatible. Distilled from a teacher model into our house voice (plain, second-person, anti-doom). | |
| | **Safety** | A **deterministic** guardrail (`safety/intercept`) โ crisis words trip an instant circuit-breaker to hotlines; ominous symbols are re-mapped to growth language. Never left to a 1B model's probabilities. | |
| | **Fallback** | If the LLM is unreachable, a rules engine still produces a full reading โ so it works **offline**. | |
|
|
| We didn't prompt our way to the voice โ we **taught** it. See the |
| **[Fine-Tuning Field Notes](docs/FINETUNE_REPORT.md)** for the full distillation โ LoRA โ GGUF โ |
| deployment story (and every bug we hit). |
|
|
| **Stack:** MiniCPM5-1B ยท LLaMA-Factory (LoRA, bf16) ยท Modal (A100 training) ยท llama.cpp (GGUF Q4_K_M) ยท |
| HF ZeroGPU (inference) ยท FastAPI + Gradio (backend) ยท React + shadcn/ui + Tailwind (frontend) ยท lunar-python. |
|
|
| ## Tracks & badges we're going for |
|
|
| - **Track โ ๐ฒ Thousand Token Wood**: an esoteric professional domain made playful and self-reflective with a tiny model. |
| - ๐
**Off the Grid** โ fully local, zero external network requests, installable offline PWA. |
| - ๐
**Well-Tuned** โ custom distilled dataset + LoRA fine-tune of MiniCPM5-1B, healthy loss curve. |
| - ๐
**Sharing is Caring** โ open dataset, open training/distillation scripts, and a textbook-grade build log. |
| - ๐
**Field Notes** โ a detailed, honest construction log with the full bug chain. |
| - ๐ **OpenBMB** โ built on MiniCPM5-1B. |
| - ๐ **Modal** โ distillation/training pipeline ran on Modal A100. |
| - ๐ **Tiny Titan** โ a 1B model doing what you'd expect a 4B+ to do. |
|
|
| ## How it meets the requirements |
|
|
| | # | Requirement | How Tianwen meets it | |
| |---|---|---| |
| | REQ-01 | Under 32B | MiniCPM5-**1B** (and the rules fallback uses no model at all). | |
| | REQ-02 | Gradio app on the org | Deployed as a Gradio Space (`app_file: app.py`) under `build-small-hackathon`. | |
| | REQ-03 | Demo video | Linked at the top of this README. | |
| | REQ-04 | Social post | Linked at the top of this README. | |
| | REQ-05 | โค10 ZeroGPU apps | One app Space + one ZeroGPU model Space. | |
| | REQ-06 | Tagged README | Track + badge tags in the frontmatter; write-up above. | |
|
|
| ## Run locally |
|
|
| ```bash |
| # 1) Build the React frontend (the backend serves this build) |
| cd frontend && pnpm install && pnpm build && cd .. |
| |
| # 2) Start the backend |
| python app.py # โ http://127.0.0.1:7860/ |
| |
| # 3) (optional) Serve the fine-tuned model for real LLM readings |
| llama-server -m finetune/data/tianwen-minicpm1b-q4_k_m.gguf --port 8888 -c 4096 |
| ``` |
|
|
| Without a running LLM, Tianwen still works via the deterministic rules engine (Off the Grid). |
|
|
| ## Repo map |
|
|
| ``` |
| app.py FastAPI + Gradio backend (serves frontend/dist, SSE streaming readings) |
| bazi/ divination/ Deterministic charting & I-Ching engines (lunar-python) |
| prompts/ System prompts, templates, OpenAI-compatible LLM client |
| safety/ Crisis circuit-breaker + symbol re-mapping |
| finetune/ Distillation (gen_distill.py) + Modal training (train_modal.py) + deploy |
| frontend/ React + shadcn UI (build โ frontend/dist) |
| docs/FINETUNE_REPORT.md The build log (Field Notes) |
| ``` |
|
|
| ## License |
|
|
| MIT. Charts via lunar-python (MIT); cities via GeoNames (CC BY 4.0). For reflection and entertainment |
| only โ not a substitute for professional medical, psychological, or financial advice. |
|
|