YUVALON's picture
try5 app.py
d38a338 verified
import gradio as gr
from transformers import pipeline
# In-memory memory store
memory_db = {}
# Load the model
interpreter = pipeline("text2text-generation", model="google/flan-t5-base")
# Few-shot examples to guide the model
few_shot_examples = """
Example 1:
"sure. whatever you want"
→ Passive-aggressive, likely annoyed but masking it with false agreement.
Example 2:
"we’ll see"
→ Avoidant, doesn’t want to commit or say no directly.
Example 3:
"it's fine, don't worry about it"
→ Likely masking frustration or disappointment, doesn’t want to express upset directly.
"""
# Interpret message and return explanation + memory log
def interpret_message(msg, name, closeness, traits, relation, past_events, feelings, use_memory):
if not msg.strip() or not name.strip():
return "Please enter both a message and a person’s name.", ""
name = name.strip().title()
if use_memory:
if name in memory_db:
existing = memory_db[name]
closeness = closeness or existing.get("closeness")
traits = traits or existing.get("personality")
relation = relation or existing.get("relationship")
else:
memory_db[name] = {
"closeness": closeness,
"personality": traits,
"relationship": relation,
"history": []
}
prompt = f"""{few_shot_examples}
New message from {name}: "{msg}"
Known context:
- Closeness: {closeness}
- Personality: {traits}
- Relationship: {relation}
- Similar Past Events: {past_events}
- Your Feelings: {feelings}
Based on the message and context, explain what the person is *really thinking* or feeling but not saying directly.
Infer their hidden intention, emotional state, and subtext. Then suggest how I should respond.
"""
if use_memory:
memory_db[name]["closeness"] = closeness
memory_db[name]["personality"] = traits
memory_db[name]["relationship"] = relation
memory_db[name]["history"].append({
"message": msg,
"prompt_used": prompt,
"interpretation": "TO BE FILLED"
})
result = interpreter(prompt, max_new_tokens=80)[0]["generated_text"]
if use_memory:
memory_db[name]["history"][-1]["interpretation"] = result
memory_log = ""
if use_memory and memory_db[name]["history"]:
memory_log = "\n\n".join(
[f"• \"{entry['message']}\"\n → {entry['interpretation']}" for entry in memory_db[name]["history"]]
)
return result, memory_log
# Memory Advisor chatbot
def memory_chat(user_input, person_name):
name = person_name.strip().title()
if name not in memory_db:
return "There's no memory for this person yet. Try interpreting a message first."
history = memory_db[name]["history"]
past_text = "\n\n".join([f"- {h['message']}\n → {h['interpretation']}" for h in history])
chat_prompt = f"""You are a relationship and social communication expert trained in human behavior.
Here is what you know about {name}'s recent messages and past behavior:
{past_text}
The user now asks: {user_input}
Respond with a supportive and emotionally intelligent answer based on past messages.
Avoid repeating the user's input. Be specific. If {name} is likely upset, say it.
If the user should give space or check in, say so.
Only output your advice in 2–4 sentences. No explanation of what you’re doing.
"""
response = interpreter(chat_prompt, max_new_tokens=80)[0]["generated_text"]
return response
# Gradio UI
with gr.Blocks(title="Textual Chemistry") as app:
gr.Markdown("## 💬 Textual Chemistry\n_What do they really mean?_")
with gr.Row():
person_name = gr.Textbox(label="Person’s Name", placeholder="e.g., Alex")
message = gr.Textbox(label="Message Received", placeholder="Paste the message here...", lines=3)
with gr.Row():
closeness = gr.Dropdown(
choices=["Stranger", "Acquaintance", "Friend", "Close Friend", "Partner", "Ex", "Boss", "Teacher"],
label="Closeness Level")
use_memory = gr.Checkbox(label="Use memory for this person?", value=True)
sender_traits = gr.Textbox(label="Background on the Sender", placeholder="e.g., Sarcastic, hates small talk...")
relationship = gr.Textbox(label="Relationship History", placeholder="e.g., We used to date, now friends")
past_events = gr.Textbox(label="Similar Past Situations", placeholder="e.g., Last time I canceled they acted cold")
user_feelings = gr.Textbox(label="Your Current Feelings", placeholder="e.g., I feel confused or anxious")
output = gr.Textbox(label="🧠 Interpretation", lines=6)
history_output = gr.Textbox(label="🧠 Memory Log for This Person", lines=10)
submit_btn = gr.Button("Interpret Message")
submit_btn.click(
fn=interpret_message,
inputs=[message, person_name, closeness, sender_traits, relationship, past_events, user_feelings, use_memory],
outputs=[output, history_output]
)
gr.Markdown("---")
gr.Markdown("## 🧠 Memory Advisor Chatbot")
with gr.Row():
chatbot_input = gr.Textbox(label="Ask a follow-up question about this person")
chatbot_output = gr.Textbox(label="🤖 Advisor Response", lines=6)
chatbot_btn = gr.Button("Ask Memory Bot")
chatbot_btn.click(fn=memory_chat, inputs=[chatbot_input, person_name], outputs=chatbot_output)
app.launch()