Spaces:
Sleeping
Sleeping
import streamlit as st | |
from textblob import TextBlob | |
# The transformers import is here in case you want to integrate a pre-trained model later. | |
# from transformers import pipeline | |
def get_roast(user_text): | |
""" | |
Generates a roast based on the user's input. | |
(You can replace or extend this logic by integrating a model like Mixtral-8x7B.) | |
""" | |
if "procrastinate" in user_text.lower(): | |
return "Ah, the art of doing nothing! Do you charge Netflix for your couch imprint? ποΈ" | |
elif "always" in user_text.lower() or "never" in user_text.lower(): | |
return "Wow, painting your world in extremes? Maybe it's time to add some shades of gray!" | |
else: | |
return "Is that a problem or a lifestyle choice? Time to get serious... or maybe not." | |
def analyze_text(user_text): | |
""" | |
Analyzes the input text for sentiment and detects basic cognitive distortions. | |
For now, it counts occurrences of words like 'always' or 'never'. | |
""" | |
blob = TextBlob(user_text) | |
sentiment = blob.sentiment.polarity # Ranges from -1 (negative) to 1 (positive) | |
distortions = sum(word in user_text.lower() for word in ["always", "never"]) | |
return sentiment, distortions | |
def calculate_resilience_score(sentiment, distortions): | |
""" | |
Calculates a resilience score based on sentiment and the number of detected distortions. | |
The score is capped between 0 and 100. | |
""" | |
score = 100 | |
# Adjust score by sentiment (scaled) | |
score += int(sentiment * 20) | |
# Penalize for cognitive distortions | |
score -= distortions * 10 | |
# Ensure score stays within bounds | |
score = max(0, min(score, 100)) | |
return score | |
def get_reframe_tips(score): | |
""" | |
Provides reframe tips based on the resilience score. | |
""" | |
if score < 50: | |
return "Remember: small steps lead to big changes. Try breaking tasks into manageable chunks and celebrate every little victory!" | |
elif score < 75: | |
return "You're on your way! Consider setting specific goals and challenge those negative thoughts with evidence." | |
else: | |
return "Keep up the great work! Your resilience is inspiring β maybe share some of that energy with someone who needs it!" | |
def main(): | |
st.title("π€ Roast Master Therapist Bot") | |
st.write("Share your problem, and let the roast and resilience tips begin!") | |
# User input | |
user_input = st.text_area("What's troubling you?", placeholder="e.g., I procrastinate on everything...") | |
if st.button("Get Roast and Tips"): | |
if user_input.strip(): | |
# Generate roast response | |
roast = get_roast(user_input) | |
st.markdown("### Roast:") | |
st.write(roast) | |
# Analyze user input | |
sentiment, distortions = analyze_text(user_input) | |
resilience_score = calculate_resilience_score(sentiment, distortions) | |
tips = get_reframe_tips(resilience_score) | |
# Display analysis and tips | |
st.markdown("### Resilience Analysis:") | |
st.write(f"**Resilience Score:** {resilience_score}/100") | |
st.write(tips) | |
# Fun Streamlit animation! | |
st.balloons() | |
else: | |
st.warning("Please share something so we can get roasting!") | |
if __name__ == '__main__': | |
main() | |