# Dream Customs / 梦境海关 PRD Last updated: 2026-06-05 ## 1. Executive Summary ### Problem Statement Users who wake up from frequent or vivid dreams may feel unsettled, tired, or mentally cluttered. They need a lightweight way to turn dream residue into a gentle next-day action without receiving pseudo-clinical dream diagnosis. ### Proposed Solution Dream Customs is a Gradio app that accepts voice, image, and text dream declarations, normalizes them into a structured dream intake, and uses MiniCPM models to generate a playful "dream alliance" card with practical advice, a weird 5-minute task, and a bedtime release phrase. ### Success Criteria - A user can complete the core flow from input to final card in <= 90 seconds on the hosted demo. - At least 90% of demo runs produce a parseable final output object matching the required schema. - At least 5 real users can understand the output without extra explanation and rate it >= 4/5 for delight. - At least 3 real users report that the "today's pact" feels actionable. - The app runs with total model parameters <= 32B and is packaged for Gradio/Hugging Face Space. ## 2. User Experience & Functionality ### User Personas 1. Primary persona: vivid dreamer. - Recently sleeps poorly or wakes with strong dream fragments. - Wants a small morning ritual, not therapy. 2. Secondary persona: playful AI explorer. - Wants a strange AI experience worth showing a friend. - Cares about creativity and shareable outputs. 3. Demo viewer / judge. - Needs to understand the interaction in under one minute. - Looks for clear small-model fit and Gradio polish. ### User Stories #### Story 1: Text Dream Declaration As a vivid dreamer, I want to type my dream so that I can get a next-day pact even if I have no image or audio. Acceptance criteria: - User can submit text-only input. - App creates a valid `DreamIntake` object. - Final card includes dream visitor, practical suggestion, weird task, and bedtime release phrase. #### Story 2: Image Dream Declaration As a user who remembers images better than words, I want to upload a sketch or bedside note so that the system can use visual dream clues. Acceptance criteria: - User can upload one image. - MiniCPM-V-4.6 extracts at least 3 visual clues when visible content exists. - Visual clues are included in the final `DreamIntake`. - If image extraction fails, text-only flow still works. #### Story 3: Voice Dream Declaration As a half-awake user, I want to speak my dream so that I do not need to type immediately after waking. Acceptance criteria: - User can record or upload an audio clip. - ASR adapter returns a transcript. - Transcript is visible/editable before final submission or transparently included in the declaration. - If ASR fails, user receives a concise fallback message and can type manually. #### Story 4: Alliance Negotiation As a user, I want the AI to ask me a few questions so that the final advice feels connected to my dream. Acceptance criteria: - App generates 2-3 questions. - User can answer all, answer some, or skip. - Skip path still generates a final card. #### Story 5: Today's Pact Card As a user, I want a visually clear output card so that I can screenshot or share the result. Acceptance criteria: - Card includes all required output fields. - Card is readable on mobile and desktop. - Card avoids medical or diagnostic framing. - Card includes a short safety note only when needed. ### Non-Goals - Medical diagnosis or therapy. - Sleep-stage tracking. - Long-term journaling database. - Account creation. - Voice output in MVP. - Social feed or leaderboard. - Fine-tuning during the hackathon MVP. ## 3. AI System Requirements ### Tool Requirements - MiniCPM-V-4.6 for image-to-text visual clue extraction. - MiniCPM5-1B for text reasoning, persona, structured output, and alliance card generation. - A small ASR adapter for voice-to-text. This adapter is not the core AI experience. - Gradio for UI. - Optional HTML/CSS card renderer. ### Prompt Requirements Prompts must: - Ask for JSON-compatible output. - Keep the tone playful, gentle, and non-clinical. - Avoid strong claims about dream meaning. - Include a safety boundary for severe distress. - Keep final advice small enough to execute in 5-10 minutes. ### Evaluation Strategy Create an eval set with at least 12 dream inputs: - 4 text-only dreams. - 3 image-assisted dreams. - 3 voice-transcript dreams. - 2 distress-edge cases. Measure: - Schema validity. - Tone safety. - Practicality of advice. - Weird-task delight. - Ability to recover from missing modality. Pass thresholds: - Schema validity: >= 90%. - No diagnostic language in ordinary cases: 100%. - Safety note appears in distress-edge cases: >= 90%. - Human delight rating on 5 demo cases: average >= 4/5. ## 4. Technical Specifications ### Architecture Overview ```text Gradio inputs -> text input -> image upload -> MiniCPM-V-4.6 visual clue extractor -> audio upload/record -> ASR adapter -> DreamIntake builder -> MiniCPM5-1B customs officer prompt -> negotiation questions -> final MiniCPM5-1B pact prompt -> HTML card renderer ``` ### Core Components - `app.py`: Gradio UI composition and event wiring. - `dream_customs/schema.py`: dataclasses or Pydantic models for inputs and outputs. - `dream_customs/models.py`: model/client loading and inference wrappers. - `dream_customs/prompts.py`: prompt templates. - `dream_customs/pipeline.py`: orchestration logic. - `dream_customs/safety.py`: lightweight safety checks and copy. - `dream_customs/render.py`: HTML card rendering. - `tests/`: schema, prompt, safety, and pipeline unit tests with mocked model outputs. ### Integration Points - Hugging Face Space runtime. - Hugging Face model downloads or inference endpoints. - Gradio audio, image, and text components. - Optional model cache in Space environment. ### Security & Privacy - Do not persist user dreams by default. - Do not log raw dream text or uploaded images in production demo logs. - Provide visible copy: "This is a playful reflection tool, not medical advice." - Do not require account login. ## 5. Risks & Roadmap ### Phased Rollout #### MVP - Text, image, and voice input. - Dream intake normalization. - MiniCPM-V-4.6 image clue extraction. - MiniCPM5-1B negotiation and final card. - HTML output card. - Safety boundary. #### v1.1 - More polished card export. - Better example gallery. - Optional bilingual output. - More robust eval harness. #### v2.0 - Voice output through VoxCPM2. - Local dream history stored only in browser/session. - Multiple customs officer styles. ### Technical Risks - MiniCPM-V-4.6 may be heavy for Space hardware if loaded locally. - MiniCPM5-1B output may fail strict JSON without repair. - ASR adapter may complicate dependencies. - Audio input on mobile browsers may behave inconsistently. - Safety classification may be too weak if only prompt-based. ### Mitigations - Keep text-only demo path always functional. - Add JSON repair and schema validation. - Use examples with fixed sample media for demo recording. - Make ASR optional and fallback to manual transcript. - Keep image extraction output concise to reduce latency.