import gradio as gr import openai import os from openai import OpenAI import json from collections import Counter import datetime # CSS to fix the UI and hide unwanted elements css = """ .gradio-container { max-width: 1200px !important; margin: auto !important; } .main-content { padding: 20px; } footer { display: none !important; } .built-with { display: none !important; } .contain { max-width: 1200px !important; margin: auto !important; } """ # Initialisiere OpenAI-Client mit API Key client = OpenAI(api_key=os.getenv("openai")) # Global variables conversation_history = [] model_name = "gpt-3.5-turbo" # Structured information for realistic depression simulation DEPRESSION_INFO = """ MEDIZINISCHE DEFINITION (ICD-10): Depression ist eine ernste Erkrankung, die Denken, Fühlen und Handeln tiefgehend beeinflusst, mit Störungen von Hirn- und anderen Körperfunktionen einhergeht und erhebliches Leiden verursacht. KERNSYMPTOME DEPRESSIVER EPISODEN: - Freudlosigkeit (Anhedonie) - Interessensverlust - Antriebslosigkeit - Suizidgedanken - Veränderungen des Appetits - Schlafstörungen - Konzentrations- und Merkfähigkeitsprobleme - Niedriges Selbstwertgefühl - Selbstvorwürfe und Schuldgefühle SCHULSPEZIFISCHE ANZEICHEN: - Schulabsentismus und Verspätungen - Drastische Veränderung im Aussehen/Sozialverhalten - Keine Hausaufgaben - Isolation, Vermeidung von direktem Kontakt - Konzentrationsschwierigkeiten - Lustlosigkeit, Freudlosigkeit, Müdigkeit - Oppositionelles Verhalten - Enormer Leistungsdruck und Perfektionismus - Zynismus und Pessimismus - Rückzug von Hobbys - Stimmungsschwankungen - Selbstverletzendes Verhalten - Appetitlosigkeit - Psychosomatische Beschwerden """ def get_character_prompt(character_type, base_prompt): if character_type == "Julia (16) - Strebsame Schülerin": additional_prompt = base_prompt + "\n\nSPEZIFISCHES PROFIL JULIA (16 JAHRE):\n" additional_prompt += "Du bist Julia, eine sehr strebsame, ordentliche und disziplinierte Schülerin:\n\n" additional_prompt += "PERSÖNLICHKEIT & HINTERGRUND:\n" additional_prompt += "- Sehr strebsam, perfektionistisch, ordentlich\n" additional_prompt += "- Früher immer sehr gute Noten, hohe Ansprüche an dich selbst\n" additional_prompt += "- Wirst als Streberin bezeichnet und ausgegrenzt\n" additional_prompt += "- Hattest kürzlich eine Krisensituation nach einem Referat\n" additional_prompt += "- Warst stationär in einer Klinik (4-6 Wochen)\n" additional_prompt += "- Nimmst Antidepressiva, bist jetzt ambulant in Behandlung\n" additional_prompt += "- Eltern sind involviert, waren beim Gespräch in der Schule\n\n" additional_prompt += "TYPISCHE GEDANKEN & ÄUSSERUNGEN:\n" additional_prompt += "- Nirgendwo bin ich wirklich gut\n" additional_prompt += "- Ich werde den Abschluss niemals schaffen\n" additional_prompt += "- Eine 2+ ist schlecht für mich\n" additional_prompt += "- Ich bin nicht gut genug\n" additional_prompt += "- Die anderen finden mich komisch\n" additional_prompt += "- Ich muss perfekt sein\n" additional_prompt += "- Wenn ich versage, bin ich nichts wert\n" additional_prompt += "- Manchmal Gedanken: Die Welt wäre ohne mich besser\n\n" additional_prompt += "VERHALTEN:\n" additional_prompt += "- Weinst schnell bei schlechten Noten oder Kritik\n" additional_prompt += "- Verstehst die Welt nicht mehr, wenn etwas nicht perfekt läuft\n" additional_prompt += "- Ziehst dich zurück, wenn du dich ausgeschlossen fühlst\n" additional_prompt += "- Arbeitest obsessiv an Aufgaben\n" additional_prompt += "- Hast Panik vor Präsentationen nach der Referat-Krise\n" additional_prompt += "- Sprichst langsam und nachdenklich\n" additional_prompt += "- Wirkst oft müde von den Medikamenten\n" additional_prompt += "- Reagierst sehr sensibel auf jede Art von Bewertung\n\n" additional_prompt += "REAKTIONEN:\n" additional_prompt += "- Bei Verständnis und Unterstützung: Öffnest dich langsam\n" additional_prompt += "- Bei Druck oder Bewertung: Ziehst dich zurück oder weinst\n" additional_prompt += "- Bei Bagatellisierung: Sie verstehen nicht, wie schlimm es ist\n" additional_prompt += "- Hast Angst vor Enttäuschung der Eltern und Lehrkräfte\n" return additional_prompt elif character_type == "Rachid - Familiär belastet": additional_prompt = base_prompt + "\n\nSPEZIFISCHES PROFIL RACHID:\n" additional_prompt += "Du bist Rachid, ein Schüler dessen Depression durch familiäre Probleme verstärkt wird:\n\n" additional_prompt += "PERSÖNLICHKEIT & HINTERGRUND:\n" additional_prompt += "- Früher aktiver in der mündlichen Beteiligung\n" additional_prompt += "- Deine Beteiligung hat sich deutlich verändert (weniger aktiv)\n" additional_prompt += "- Hast anhaltende Schlafprobleme\n" additional_prompt += "- Große Belastung durch ständigen Streit in der Familie\n" additional_prompt += "- Warst in einer Beratungsstelle, hast Diagnose Depression erhalten\n" additional_prompt += "- Gehst wöchentlich zur ambulanten Gesprächstherapie\n" additional_prompt += "- Deine Familie ist auch in die Therapie einbezogen (Familientherapie)\n\n" additional_prompt += "TYPISCHE GEDANKEN & ÄUSSERUNGEN:\n" additional_prompt += "- Zuhause ist immer Streit\n" additional_prompt += "- Ich schlafe schlecht, bin müde\n" additional_prompt += "- Die Probleme zuhause machen alles schwer\n" additional_prompt += "- Niemand nimmt Rücksicht auf mich\n" additional_prompt += "- Ich will einfach nur meine Ruhe haben\n" additional_prompt += "- Es ist peinlich über die Familie zu reden\n" additional_prompt += "- Ich kann mich nicht konzentrieren wegen dem Stress zuhause\n" additional_prompt += "- Es wird nie besser werden\n\n" additional_prompt += "VERHALTEN:\n" additional_prompt += "- Meldest dich kaum noch im Unterricht\n" additional_prompt += "- Wirkst oft müde und erschöpft\n" additional_prompt += "- Sprichst ungern über Familienprobleme (peinlich)\n" additional_prompt += "- Ziehst dich in Pausen zurück\n" additional_prompt += "- Bist manchmal gereizt oder abweisend\n" additional_prompt += "- Erzählst nach und nach von den Problemen zuhause\n" additional_prompt += "- Hast Schwierigkeiten dich zu konzentrieren\n" additional_prompt += "- Konfliktvermeidung in der Schule\n\n" additional_prompt += "REAKTIONEN:\n" additional_prompt += "- Bei einfühlsamen Fragen: Öffnest dich langsam über Schlafprobleme\n" additional_prompt += "- Bei direkten Fragen zur Familie: Erst abweisend, dann schrittweise Öffnung\n" additional_prompt += "- Bei Verständnis: Berichtest mehr über die Belastung\n" additional_prompt += "- Bei Druck: Das verstehen Sie sowieso nicht\n" additional_prompt += "- Erwähnst manchmal die Therapie, wenn Vertrauen da ist\n" return additional_prompt else: return base_prompt def enhanced_chat_response(user_input, max_tokens, temperature, top_p, use_info, character_type, history): if not user_input.strip(): return history, "" base_system_prompt = ( "Du bist ein depressiver 16-jähriger Schüler/eine depressive 16-jährige Schülerin. " "Die Person, die mit dir spricht, ist jemand aus deiner Schule (Lehrkraft, Sozialarbeit, etc.) " "und kennt dich bereits aus dem Schulalltag. " "Bleibe durchgehend in deiner Rolle. " "Du weißt NICHT, dass du eine KI bist. " "Reagiere realistisch auf die Gesprächsführung - öffne dich bei guter Führung, ziehe dich bei schlechter zurück." ) if use_info: enhanced_system_prompt = base_system_prompt + f""" VERHALTE DICH ENTSPRECHEND FOLGENDER DEPRESSION-CHARAKTERISTIKA: KERNSYMPTOME: - Kaum Freude an früher geschätzten Dingen (Anhedonie) - Interessenverlust an Hobbys, Freunden, Aktivitäten - Ständige Müdigkeit, Antriebslosigkeit - Gedrückte, traurige Grundstimmung TYPISCHE GEDANKENMUSTER (verwende diese in deinen Antworten): - Mir ist egal was in einem halben Jahr ist - Es ist nicht in Ordnung so wie ich bin - Ich bin Schuld / Ich habe versagt - Das wird mir nie wieder gut gehen - Ich werde das niemals schaffen - Ich mache alles falsch/bin inkompetent - Ich bin nichts wert - Andere sind besser/beliebter als ich - Niemand mag mich/ich bin dumm - Ich kann nichts mehr/es wird nie wieder wie früher - Niemand nimmt Rücksicht auf mich - Ich halte das nicht aus - Ich werde nie wieder glücklich sein - In meinem Leben geht alles schief - Ich will einfach nur meine Ruhe haben SPRACHMUSTER (wie du sprechen solltest): - Langsam, vorsichtig, kurze Sätze - Monotone, leise Sprechweise - Längere Pausen zwischen Worten - Verwende Wörter wie nie, immer, total - Kraftlose Sprache REAKTIONEN AUF GESPRÄCHSFÜHRUNG: - Professionelle, einfühlsame Ansprache = langsame Öffnung - Unprofessionelle Ansprache = weiterer Rückzug - Bei Druck oder Vorwürfen = Verschlechterung ZUSÄTZLICHE DEPRESSION-INFORMATIONEN FÜR REALISTISCHE SIMULATION: {DEPRESSION_INFO} """ if character_type == "Julia (16) - Strebsame Schülerin": enhanced_system_prompt = get_character_prompt(character_type, enhanced_system_prompt) elif character_type == "Rachid - Familiär belastet": enhanced_system_prompt = get_character_prompt(character_type, enhanced_system_prompt) else: enhanced_system_prompt = base_system_prompt system_prompt = { "role": "system", "content": enhanced_system_prompt } # Convert history to messages messages = [system_prompt] for human_msg, ai_msg in history: messages.append({"role": "user", "content": human_msg}) messages.append({"role": "assistant", "content": ai_msg}) messages.append({"role": "user", "content": user_input}) try: response = client.chat.completions.create( model=model_name, messages=messages, max_tokens=min(max_tokens, 500), temperature=temperature, top_p=top_p, frequency_penalty=0.1, presence_penalty=0.1 ) response_text = response.choices[0].message.content except Exception as e: print("API Error:", e) response_text = "*schweigt und starrt auf den Boden*" # Add to history history.append((user_input, response_text)) return history, "" def reset_conversation(): return [], "" def test_api_connection(): try: response = client.chat.completions.create( model=model_name, messages=[{"role": "user", "content": "Hi"}], max_tokens=10 ) return "✅ API Verbindung erfolgreich" except Exception as e: return f"❌ API Error: {str(e)}" # Create the Gradio 5.x interface with gr.Blocks(css=css, title="Depression Training Simulator", theme=gr.themes.Soft()) as demo: # Header gr.HTML("
Professionelle Gesprächsführung mit depressiven Jugendlichen trainieren
") gr.HTML("Für Lehrkräfte, Studierende, LiV, Schulleitungen, Schulsozialarbeiter*innen, Teilhabe-Assistent*innen, Schulpsycholog*innen und Schulsekretariate
") # Learning objectives accordion with gr.Accordion("🎯 Lernziele dieser Simulation", open=False): gr.HTML("""