import gradio as gr import os from huggingface_hub import InferenceClient # ---------------- CONFIG ---------------- HF_TOKEN = os.environ.get("HF_TOKEN") client = InferenceClient( provider="hf-inference", api_key=HF_TOKEN, ) print("HF TOKEN:", HF_TOKEN) # ---------------- MOOD DETECTION ---------------- def detect_mood(text): text = text.lower() if any(w in text for w in ["sad", "down", "upset"]): return "sad" elif any(w in text for w in ["bored", "nothing to do"]): return "bored" elif any(w in text for w in ["stress", "tired", "overwhelmed"]): return "stressed" elif any(w in text for w in ["happy", "excited", "great"]): return "happy" else: return "neutral" # ---------------- SUGGESTION ---------------- def suggest_activity(mood): suggestions = { "bored": "Try a quick 5-minute coding challenge.", "sad": "Go for a short walk or listen to music.", "stressed": "Take 5 deep breaths and focus on one small task.", "happy": "Channel this energy into something exciting!", "neutral": "Try organizing a small task or learning something new." } return suggestions.get(mood, suggestions["neutral"]) # ---------------- PERSONALITY ---------------- def apply_personality(text, personality): if personality == "Motivational Coach": return f"💪 You got this! {text}" elif personality == "Sarcastic Friend": return f"😏 Oh wow, emotions again. Anyway—{text}" elif personality == "Zen Monk": return f"🧘 Peace comes from within. {text}" return text # ---------------- MODEL CALL ---------------- def query_model(prompt): try: response = client.chat.completions.create( model="bartowski/Qwen2.5-7B-Instruct-GGUF", messages=[ {"role": "user", "content": prompt} ], max_tokens=60, temperature=0.7, ) return response.choices[0].message["content"] except Exception as e: print("MODEL ERROR:", str(e)) return "⚠️ Model is temporarily unavailable. Please try again." # ---------------- CHAT FUNCTION ---------------- def respond(message, history, personality): mood = detect_mood(message) activity = suggest_activity(mood) prompt = f""" You are a friendly and helpful assistant. User mood: {mood} User message: {message} Respond naturally like a human in 1-2 sentences. """ model_reply = query_model(prompt) model_reply = apply_personality(model_reply, personality) final_reply = f"{model_reply}\n\n👉 Suggestion: {activity}" history = history or [] history.append({"role": "user", "content": message}) history.append({"role": "assistant", "content": final_reply}) return history # ---------------- UI ---------------- with gr.Blocks() as demo: gr.Markdown("# 🧠 Mood-Based Life Assistant") personality = gr.Dropdown( ["Motivational Coach", "Sarcastic Friend", "Zen Monk"], value="Motivational Coach", label="Choose Personality" ) chatbot = gr.Chatbot(type="messages") msg = gr.Textbox(placeholder="How are you feeling?") msg.submit(respond, [msg, chatbot, personality], [chatbot]) demo.launch()