import streamlit as st from llama_cpp import Llama from gtts import gTTS from io import BytesIO import random import requests import yt_dlp # Initialize the empathy bot using llama_cpp llm = Llama.from_pretrained( repo_id="featherless-ai-quants/HyunCello-KULLM3-empathy-v1.0-GGUF", filename="HyunCello-KULLM3-empathy-v1.0-IQ4_XS.gguf", ) # Function to process the user's input and generate a dynamic response def generate_dynamic_response(user_input): # Generate an empathetic response using the Llama model response = llm.create_chat_completion( messages=[{"role": "user", "content": user_input}] ) empathetic_response = response['choices'][0]['message']['content'] # Possible activities to suggest activities = { "relaxation": [ "Deep Breathing Exercises", "Guided Meditation", "Mindfulness Breathing" ], "creative": [ "Journaling your thoughts", "Drawing or doodling", "Writing a poem" ], "exercise": [ "Try some yoga", "Go for a walk outside", "Stretching exercises to release tension" ], "self-care": [ "Take a warm bath", "Listen to calming music", "Treat yourself with some relaxation time" ] } # Logic to determine context of user input (e.g., stress, sadness, etc.) if "sad" in user_input or "overwhelmed" in user_input: suggested_activity = random.choice(activities["relaxation"]) elif "bored" in user_input or "unmotivated" in user_input: suggested_activity = random.choice(activities["creative"]) elif "stressed" in user_input or "tired" in user_input: suggested_activity = random.choice(activities["exercise"]) else: suggested_activity = random.choice(activities["self-care"]) # Search YouTube for relevant videos based on the activity suggestion video_keywords = suggested_activity video_results = search_youtube_videos(video_keywords) return empathetic_response, suggested_activity, video_results def search_youtube_videos(query): ydl_opts = { 'quiet': True, 'extract_flat': True, 'noplaylist': True, 'max_results': 3, } with yt_dlp.YoutubeDL(ydl_opts) as ydl: result = ydl.extract_info(f"ytsearch:{query}", download=False) videos = result.get("entries", []) video_links = [(video['title'], video['url']) for video in videos] return video_links # Streamlit UI st.title("Grief and Loss Support Bot 🌿") st.markdown("Your compassionate companion in tough times 💚") user_input = st.text_input("Share what's on your mind...") if user_input: empathetic_response, suggested_activity, video_results = generate_dynamic_response(user_input) # Display the empathetic response st.write(f"**Bot's Response:**") st.write(empathetic_response) # Suggest an activity st.write(f"Here's a suggestion to help you cope:") st.write(f"**Activity to try:** {suggested_activity}") # Display YouTube video suggestions if video_results: st.write("Here are some YouTube videos that may help:") for title, link in video_results: st.write(f"[{title}]({link})") # Generate and play an audio response using gTTS tts = gTTS(empathetic_response, lang='en') audio_file = BytesIO() tts.save(audio_file) audio_file.seek(0) st.audio(audio_file, format="audio/mp3", use_container_width=True)