innerspace / ui /examples.py
Codex
Refactor UI examples, add multi-turn and deflection dataset examples, and implement context checks
fe43097
from __future__ import annotations
from html import escape
import gradio as gr
# Examples to demonstrate the app
EXAMPLE_CARDS = [
{
"title": "Launch-Day Spiral",
"distress": 8,
"text": "I demoed my hackathon app and the button froze right when everyone was watching. My face got hot, I joked awkwardly, and now I keep thinking the whole project looks amateur.",
},
{
"title": "Group Chat Ghost",
"distress": 6,
"text": "I posted a meme in the group chat and nobody reacted. Now I feel like I misread the vibe and everyone secretly thinks I am annoying.",
},
{
"title": "Side-Quest Overload",
"distress": 7,
"text": "I opened my todo list and somehow started reorganizing my desk, updating app icons, and reading docs. The main task is still untouched, so maybe I have zero discipline.",
},
{
"title": "Coffee Shop Fumble",
"distress": 4,
"text": "I dropped my coffee at a crowded cafe and everyone looked over. It was over in ten seconds, but my brain keeps replaying it like a public trial.",
},
{
"title": "Calendar Chaos",
"distress": 7,
"text": "I missed a meeting because I read the time zone wrong. My manager said it was okay, but I am convinced this proves I cannot be trusted with real responsibility.",
},
{
"title": "Creative Blank Screen",
"distress": 5,
"text": "I sat down to write something fun and produced one terrible sentence in forty minutes. Maybe I only like the idea of being creative and not the actual work.",
},
{
"title": "Fitness App Shame",
"distress": 6,
"text": "My fitness app congratulated me for a three-minute walk, and somehow that made me feel worse. Everyone else is doing real workouts while I am celebrating crumbs.",
},
{
"title": "Roommate Sink Saga",
"distress": 5,
"text": "The dishes are in the sink again, and I am rehearsing a dramatic speech in my head. If I say something, I will sound petty; if I do not, I will explode.",
},
{
"title": "Tiny Typo Doom",
"distress": 8,
"text": "I sent a project update with a typo in the headline. Nobody mentioned it, but I keep imagining everyone questioning whether I pay attention to details.",
},
{
"title": "Overcooked Dinner",
"distress": 3,
"text": "I tried making dinner for friends and burned the garlic immediately. They laughed kindly, but I felt embarrassed and wanted to order takeout and disappear.",
},
{
"title": "Unread Email Mountain",
"distress": 7,
"text": "My inbox has become a haunted forest. Every unread email feels like proof I am behind, irresponsible, and about to miss something important.",
},
{
"title": "Presentation Freeze",
"distress": 9,
"text": "I have a presentation tomorrow and I keep picturing myself forgetting everything. I know the slides, but my brain is acting like I am walking into disaster.",
},
{
"title": "Birthday Overthink",
"distress": 5,
"text": "A friend replied to my birthday invite with just 'maybe.' I know people are busy, but now I am wondering if nobody actually wants to come.",
},
{
"title": "Comparison Scroll",
"distress": 6,
"text": "I saw someone online ship a polished AI demo in one weekend. My app suddenly feels tiny, late, and kind of embarrassing.",
},
{
"title": "Budget Oops",
"distress": 6,
"text": "I ordered delivery twice this week even though I said I would save money. It feels like one small choice proves I cannot stick to anything.",
},
{
"title": "New Hobby Wobble",
"distress": 4,
"text": "I went to a beginner pottery class and made a bowl that looks like a tired pancake. Everyone else seemed naturally good, and I felt silly for trying.",
},
{
"title": "Reply-All Panic",
"distress": 8,
"text": "I accidentally replied-all with a question that was meant for one person. It was harmless, but my stomach dropped and now I want to avoid email forever.",
},
{
"title": "Weekend Reset Guilt",
"distress": 5,
"text": "I spent most of Sunday resting instead of being productive. Now it is evening and I feel like I wasted the whole weekend and fell behind my life.",
},
{
"title": "Tiny Win Suspicion",
"distress": 3,
"text": "Something actually went well today, and instead of enjoying it I keep waiting for the catch. Calm feels suspicious, like I missed a problem somewhere.",
},
{
"title": "Bug Fix Whiplash",
"distress": 8,
"text": "I fixed one bug in my app and two new weird things appeared. I am starting to think I am just moving the problem around instead of actually improving it.",
},
]
def _example_card_html(title: str, distress: int, text: str) -> str:
"""Builds a compact example preview with distress shown on the right."""
return (
'<div class="nd-example-copy">'
'<div class="nd-example-head">'
f"<span>{escape(title)}</span>"
f"<strong>{distress}/10</strong>"
"</div>"
f"<p>{escape(text)}</p>"
"</div>"
)
def _select_example(text: str, distress: int) -> tuple[None, str, int]:
"""Populates the journal form from an example card."""
return None, text, distress
def render_examples(
file_input: gr.File, notes_input: gr.Textbox, distress_slider: gr.Slider
) -> gr.Column:
"""Renders the examples section and sets up click handlers."""
with gr.Column(elem_classes=["nd-examples-section"]) as section:
gr.Markdown("## Try a Scenario 🎲")
with gr.Row(elem_classes=["nd-example-grid"]):
for example in EXAMPLE_CARDS:
with gr.Column(elem_classes=["nd-example-card"]):
gr.HTML(
_example_card_html(
str(example["title"]),
int(example["distress"]),
str(example["text"]),
)
)
use_example = gr.Button(
"Use example",
size="sm",
elem_classes=["nd-example-btn"],
)
use_example.click(
fn=lambda text=str(example["text"]), distress=int(example["distress"]): (
_select_example(text, distress)
),
inputs=[],
outputs=[file_input, notes_input, distress_slider],
queue=False,
)
return section