--- title: Dream Customs emoji: 🌤️ colorFrom: green colorTo: yellow sdk: gradio sdk_version: 4.44.1 python_version: "3.10" app_file: app.py pinned: false license: mit short_description: Guided dream Q&A with one gentle today tip. models: - openbmb/MiniCPM5-1B - openbmb/MiniCPM-V-4.6 tags: - gradio - minicpm - build-small-hackathon - dream-journal --- # Dream QA / 梦境问答台 A Build Small Hackathon Gradio app that helps users unpack a dream step by step and leave with one grounded tip for today. The Hugging Face Space may still be named `Dream Customs` for continuity, but the current product direction is Dream QA: record a dream, answer or skip gentle follow-up questions, read a grounded interpretation draft, and receive a `今日小 Tips`. The public hackathon demo is English-first for international judges. A visible in-app language toggle keeps the Chinese experience available as `中文`. ## Concept Dream QA accepts dream fragments by text, image, or voice. It turns those fragments into a shared dream intake, asks a grounded follow-up question, and returns a Today Tip card: one practical or caring suggestion first, an optional tiny action, and a short non-certain supporting reflection. This is not a therapy, diagnosis, or prophecy product. ## Models - `openbmb/MiniCPM-V-4.6` for image/sketch/note understanding. - `openbmb/MiniCPM5-1B` for dream summary, follow-up questions, interpretation, and Today Tip generation. - A small ASR adapter may be used only for voice transcription. - The app defaults to a stable demo backend so the local Gradio flow always works. - Optional Ollama adapters are included for local MiniCPM testing. - MiniCPM prompts are language-aware: English by default, Chinese when the user chooses `中文`. ## User Flow 1. Enter a dream by text, image, voice, or a mix. 2. State or let the app infer the main question. 3. Answer or skip one or more follow-up questions. 4. Receive one Today Tip tied to concrete dream details and the user's answer. 5. Read the supporting reflection if the user wants more context. ## Language - Default public UI: English. - Toggle: `English / 中文`. - English mode translates or paraphrases non-English dream anchors into natural English, so an international judge does not see mixed UI/model language. - Chinese mode keeps the warm `梦境问答台` wording. - Today Tips should be small and optional: "write the first sentence" beats "handle it immediately." ## Current Direction References - Product spec: `docs/spec.md` - PRD: `docs/prd.md` - Handoff: `docs/handoff.md` - Design system: `DESIGN.md` - Prototype images: - `docs/prototypes/2026-06-08-dream-qa-mobile-flow.png` - `docs/prototypes/2026-06-08-dream-qa-desktop-workbench.png` - `docs/prototypes/2026-06-08-dream-qa-tips-card.png` ## Run ```bash python3 -m venv .venv source .venv/bin/activate python -m pip install -r requirements.txt python app.py ``` Open `http://127.0.0.1:7860`. ## Optional Ollama Models ```bash ollama pull hf.co/openbmb/MiniCPM5-1B-GGUF:Q8_0 ollama pull openbmb/minicpm-v4.6 ``` Then switch the UI engine controls from `demo` to `ollama`. Local smoke notes from this Mac mini: - Memory/size is fine: 16 GB RAM handled the local model downloads. - `hf.co/openbmb/MiniCPM5-1B-GGUF:Q8_0` loads in Ollama, but current output was malformed for JSON prompts. - `openbmb/minicpm-v4.6` pulled successfully, but current Ollama runner returned `unable to load model`. - Because of that, the MVP keeps Ollama optional and falls back to deterministic demo behavior. ## Optional Hosted MiniCPM Routes The public Space stays lightweight and can call private Modal endpoints through runtime secrets: - `DREAM_CUSTOMS_TEXT_ENDPOINT`: Modal text route for `openbmb/MiniCPM5-1B`. - `DREAM_CUSTOMS_VISION_ENDPOINT`: Modal vision route for `openbmb/MiniCPM-V-4.6`. - `DREAM_CUSTOMS_HOSTED_TOKEN`: shared bearer token checked by Modal and sent by the Space. Set these only as Hugging Face Space repository secrets or local shell variables. Do not store values in `.env`, docs, logs, screenshots, or git. Missing endpoints or route failures fall back to deterministic demo behavior. The Gradio UI defaults to `model` for both text and vision backends, so a configured Space calls Modal by default. The `demo` backend remains available in developer settings as the deterministic fallback path. The Hugging Face Space may run on ZeroGPU for hackathon hardware eligibility. `dream_customs.zerogpu` registers a lightweight `@spaces.GPU` startup probe so ZeroGPU accepts the app, but real MiniCPM inference still happens on the private Modal backend. Token-safe text smoke: ```bash python - <<'PY' import os from dream_customs.models import HostedMiniCPMTextClient client = HostedMiniCPMTextClient( endpoint=os.environ["DREAM_CUSTOMS_TEXT_ENDPOINT"], token=os.getenv("DREAM_CUSTOMS_HOSTED_TOKEN", ""), ) result = client.generate_negotiation("I missed an elevator in a foggy dream.") print(result) PY ``` Token-safe vision smoke: ```bash python - <<'PY' import os from dream_customs.models import HostedMiniCPMVisionClient client = HostedMiniCPMVisionClient( endpoint=os.environ["DREAM_CUSTOMS_VISION_ENDPOINT"], token=os.getenv("DREAM_CUSTOMS_HOSTED_TOKEN", ""), ) print(client.extract_clues(os.environ["DREAM_CUSTOMS_SMOKE_IMAGE"])) PY ``` ## Test ```bash python -m pytest -q python scripts/evaluate_today_tip_quality.py ``` ## Deployment Smoke Status Latest local Dream QA refactor smoke: - `docs/smoke/2026-06-08-dream-qa-refactor-smoke.md` - `docs/smoke/2026-06-08-post-refactor-polish-smoke.md` Historical smoke notes under `docs/smoke/` describe earlier pact/customs UI passes. They remain useful deployment history, but the current implementation target is the Dream QA flow documented in `docs/handoff.md`, `docs/spec.md`, and `docs/prd.md`. ## Safety This is not a therapy or diagnosis product. It gives playful reflection, one small today tip, and escalation copy for severe distress.