dream-decoder / app.py
samvlad's picture
Dream Decoder Space: app + requirements
44b7441
import gradio as gr
import numpy as np, pandas as pd
from huggingface_hub import hf_hub_download
from sentence_transformers import SentenceTransformer
DATASET_REPO = "samvlad/dream-decoder-dataset"
def _dl(name):
return hf_hub_download(repo_id=DATASET_REPO, filename=name, repo_type="dataset")
# Load embeddings + a table (meta if present, else full dataset)
emb_path = _dl("data/embeddings.npy")
try:
table_path = _dl("data/meta.parquet")
meta = pd.read_parquet(table_path)[["dream_text","interpretation"]]
except Exception:
table_path = _dl("data/dreams.parquet")
meta = pd.read_parquet(table_path)[["dream_text","interpretation"]]
emb = np.load(emb_path) # already normalized vectors
encoder = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
def top3_similar(text):
t = (text or "").strip()
if len(t) < 10:
return "Please paste a longer dream (>= 10 characters)."
q = encoder.encode([t], normalize_embeddings=True)
scores = (emb @ q.T).squeeze()
idx = np.argsort(-scores)[:3]
out = []
for i, j in enumerate(idx, 1):
row = meta.iloc[j]
out.append(
f"### #{i} • Similarity: {scores[j]:.3f}\n"
f"**Dream:** {row['dream_text']}\n\n"
f"**Interpretation:** {row['interpretation']}\n"
)
return "\n---\n".join(out)
with gr.Blocks(fill_height=True) as demo:
gr.Markdown("# 🌙 Dream Decoder\nPaste a dream. We’ll find the 3 most similar dreams and show their interpretations.")
dream = gr.Textbox(label="Your dream", lines=7, placeholder="I was on a rooftop, running from a shadow...")
btn = gr.Button("Find 3 similar dreams")
out = gr.Markdown()
gr.Examples(
examples=[
"I was in a school hallway, hiding from a teacher. A mirror cracked while I was waiting, and I felt anxious yet hopeful.",
"I was at a beach at night, searching for my phone. A storm rolled in and I felt excited yet confused.",
"I was in an old house, escaping a fire. A baby cried and I felt lonely yet relieved.",
],
inputs=[dream],
label="Try examples",
)
btn.click(top3_similar, dream, out)
if __name__ == "__main__":
demo.launch()