| | import gradio as gr |
| | from langdetect import detect |
| | from transformers import pipeline |
| |
|
| | |
| | chatbot = pipeline("text-generation", model="microsoft/phi-2") |
| |
|
| | |
| | SYSTEM_PROMPT = """ |
| | You are a bilingual (Vietnamese + English) therapeutic chatbot that helps with overthinking. |
| | Rules: |
| | 1. Detect user’s language each message and reply in the same language. |
| | 2. Follow this flow: LISTEN → COMFORT → CLARIFY → ASK → (if asked) GIVE ONE TIP. |
| | 3. Do NOT jump straight into solutions. Start by listening. |
| | 4. Keep answers short and supportive. One step per turn. |
| | 5. If crisis/self-harm → give safe message with hotline 111 (Vietnam). |
| | """ |
| |
|
| | def chat(user_input, history): |
| | try: |
| | lang = detect(user_input) |
| | except: |
| | lang = "en" |
| |
|
| | |
| | conversation = SYSTEM_PROMPT + "\n" |
| | for h in history: |
| | conversation += f"User: {h[0]}\nAI: {h[1]}\n" |
| | conversation += f"User: {user_input}\nAI:" |
| |
|
| | |
| | response = chatbot(conversation, max_new_tokens=200, temperature=0.7)[0]['generated_text'] |
| | reply = response.split("AI:")[-1].strip() |
| | |
| | return reply |
| |
|
| | with gr.Blocks() as demo: |
| | gr.Markdown("# 🧠 Overthinking Coach AI (VN/EN) — Free on HF Spaces") |
| | chatbot_ui = gr.Chatbot() |
| | msg = gr.Textbox(placeholder="Type in Vietnamese or English...") |
| | clear = gr.Button("Clear") |
| |
|
| | def respond(message, chat_history): |
| | bot_message = chat(message, chat_history) |
| | chat_history.append((message, bot_message)) |
| | return "", chat_history |
| |
|
| | msg.submit(respond, [msg, chatbot_ui], [msg, chatbot_ui]) |
| | clear.click(lambda: None, None, chatbot_ui, queue=False) |
| |
|
| | demo.launch() |
| |
|