| # app.md β Gradio Interface Reference |
|
|
| `app.py` β Gradio multi-tab interactive interface for LifeStack. |
|
|
| --- |
|
|
| ## Overview |
|
|
| `app.py` is the entry point for the demo. It wires together all LifeStack modules into |
| a single Gradio `Blocks` application served on `http://127.0.0.1:7860`. |
|
|
| --- |
|
|
| ## Module-level Singletons |
|
|
| These are instantiated once at import time: |
|
|
| | Variable | Type | Purpose | |
| |---|---|---| |
| | `MEMORY` | `LifeStackMemory` | ChromaDB trajectory + feedback store | |
| | `AGENT` | `LifeStackAgent` | LLM-backed decision agent | |
| | `INTAKE` | `LifeIntake` | NL β structured conflict parser | |
| | `DEMO_CONFLICT` | `ConflictEvent` | Fixed "Friday 6PM" conflict for tab 1 | |
| | `DEMO_PREDICTOR` | `TrajectoryPredictor` | 7-day risk score tracker | |
| | `LONG_DEMO` | `LongitudinalDemo` | Arjun's multi-week journey | |
| | `GMAIL` | `GmailSignalExtractor` | Optional Gmail stress signal extractor | |
|
|
| --- |
|
|
| ## Tabs |
|
|
| | Tab | Label | Key Function | |
| |---|---|---| |
| | 1 | π― Live Demo | `run_demo(person_label, conflict_label)` | |
| | 2 | π Try Your Situation | `run_custom(situation, sliders..., gmail_signals)` | |
| | 3 | π Training Results | `load_training_tab()` | |
| | 4 | ποΈ Arjun's Journey | `LONG_DEMO.show_longitudinal_comparison()` | |
| | 5 | πΊοΈ Task Explorer | `load_demo_task()` | |
| | 6 | π¬ Follow-up | `submit_outcome_feedback(...)` | |
|
|
| --- |
|
|
| ## Key Functions |
|
|
| ### `submit_outcome_feedback(ep_id, score, domains_up, domains_down, notes, time_spent)` |
|
|
| Stores real-world outcome data into ChromaDB via `MEMORY.store_feedback(feedback)`. |
|
|
| > **Note:** Uses `MEMORY` (the module-level `LifeStackMemory` instance). The previously |
| > undefined `AGENT_MEMORY` reference was corrected to `MEMORY` on 2026-04-23. |
| |
| ### `run_demo(person_label, conflict_label)` |
|
|
| Generator β yields `(pred_html, before_html, narrative, decision_html)` tuples for each |
| animation frame. Runs cascade animation then agent intervention. |
|
|
| ### `run_custom(situation, ...)` |
| |
| Calls `INTAKE.full_intake()` to parse NL input, then `AGENT.get_action()`, steps the env, |
| returns `(life_html, after_html, plan_html)`. |
|
|
| --- |
|
|
| ## Running |
|
|
| ```bash |
| python app.py |
| ``` |
|
|
| Starts on port `7860` with `share=False`. Edit `__main__` block to change port/theme. |
|
|
| --- |
|
|
| ## Change Log |
|
|
| | Date | Change | |
| |---|---| |
| | 2026-04-23 | `AGENT_MEMORY` undefined crash fixed β replaced with `MEMORY` in `submit_outcome_feedback` | |
|
|