Frajosgro commited on
Commit
6596463
·
verified ·
1 Parent(s): a66af53

Upload 4 files

Browse files
Files changed (4) hide show
  1. README.md +67 -0
  2. app.py +135 -0
  3. config.py +71 -0
  4. requirements.txt +3 -0
README.md ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Dr. Franz - Psychoanalytischer Chatbot
3
+ emoji: 🧠
4
+ colorFrom: indigo
5
+ colorTo: purple
6
+ sdk: gradio
7
+ sdk_version: 4.19.2
8
+ app_file: app.py
9
+ pinned: false
10
+ ---
11
+
12
+ # 🧠 Dr. Franz - Psychoanalytischer Chatbot
13
+
14
+ Willkommen beim Dr. Franz Psychochatbot-Projekt auf Hugging Face Spaces.
15
+
16
+ ## Projektbeschreibung
17
+
18
+ **Dr. Franz** ist ein experimenteller psychoanalytischer Chatbot, der als manipulativer Psychoanalytiker agiert. Er analysiert Aussagen psychologisch und stellt provokante Fragen.
19
+
20
+ ## Features
21
+
22
+ - **Psychoanalytische Gesprächsführung**: Dr. Franz nutzt verschiedene psychoanalytische Techniken, um tiefere Gedanken und Emotionen zu ergründen
23
+ - **Dynamische Persönlichkeitsanpassung**: Der Bot passt seinen Ton basierend auf der Analyse der Nutzereingaben an
24
+ - **Kontextbewusstsein**: Erinnert sich an frühere Aussagen und greift gezielt emotional bedeutsame Themen wieder auf
25
+ - **Themenerkennung**: Identifiziert psychologisch relevante Themen in Nutzereingaben
26
+ - **Modulare Architektur**: Klar getrennte Komponenten für einfache Wartung und Erweiterung
27
+
28
+ ## Installation & Lokale Ausführung
29
+
30
+ ```bash
31
+ # Repository klonen
32
+ git clone https://huggingface.co/spaces/[username]/[space-name]
33
+
34
+ # In das Projektverzeichnis wechseln
35
+ cd [space-name]
36
+
37
+ # Abhängigkeiten installieren
38
+ pip install -r requirements.txt
39
+
40
+ # Umgebungsvariable für den HuggingFace API-Token setzen
41
+ # Windows:
42
+ set HF_API_TOKEN=dein_api_token_hier
43
+ # Linux/Mac:
44
+ export HF_API_TOKEN=dein_api_token_hier
45
+
46
+ # Anwendung starten
47
+ python app.py
48
+ ```
49
+
50
+ ## Technologie
51
+
52
+ Der Chatbot verwendet die HuggingFace Inference API und das Zephyr-7b-beta Modell für die Textgenerierung. Die Benutzeroberfläche wird mit Gradio bereitgestellt.
53
+
54
+ ## Konfiguration
55
+
56
+ Die Anwendung kann über die `config.py` Datei angepasst werden:
57
+ - Modellparameter (Temperatur, max_tokens, etc.)
58
+ - Persönlichkeitseinstellungen
59
+ - UI-Konfiguration
60
+
61
+ ## Hinweis
62
+
63
+ Dieser Chatbot dient ausschließlich experimentellen und unterhaltsamen Zwecken und ersetzt keine professionelle psychologische Beratung.
64
+
65
+ ## API-Token
66
+
67
+ Um den Chatbot zu nutzen, benötigen Sie einen HuggingFace API-Token mit Inference-Berechtigungen. Dieser kann in den Repository Secrets unter dem Namen `HF_API_TOKEN` hinterlegt werden.
app.py ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ app.py - Hauptanwendung für den Dr. Franz Psychochatbot (Integrierte Version)
3
+
4
+ Diese Datei dient als Einstiegspunkt für den Chatbot und orchestriert alle Komponenten:
5
+ - Initialisierung der Module
6
+ - Aufbau des Gradio-Interfaces
7
+ - Verarbeitung der Nutzereingaben
8
+ - Generierung der Antworten via API
9
+ """
10
+
11
+ import os
12
+ import time
13
+ from typing import List, Dict, Tuple, Optional, Any
14
+
15
+ # Importieren der Konfiguration und Module
16
+ import config
17
+ from modules.persona import Persona
18
+ from modules.analyzer import Analyzer
19
+ from modules.memory import Memory
20
+ from modules.interface import Interface
21
+ from utils.api_handler import ApiHandler
22
+ from utils.security import Security
23
+ from utils.logger import Logger
24
+
25
+ # Initialisierung der Komponenten
26
+ security = Security()
27
+ logger = Logger()
28
+ api_handler = ApiHandler(api_token=security.get_api_token())
29
+ persona = Persona()
30
+ analyzer = Analyzer()
31
+ memory = Memory()
32
+
33
+ # Globale Variablen
34
+ chat_history = [
35
+ {"role": "system", "content": config.SYSTEM_PROMPT}
36
+ ]
37
+
38
+ def chat(user_input: str) -> str:
39
+ """Hauptfunktion für die Chatbot-Logik"""
40
+ # Leere Eingaben abfangen
41
+ if not user_input.strip():
42
+ return "Ich warte auf Ihre Gedanken... Die Stille spricht Bände über Ihre Vermeidungstendenzen."
43
+
44
+ # Logging der Nutzereingabe
45
+ logger.log_user_input(user_input)
46
+
47
+ # Sicherheitscheck und Bereinigung der Eingabe
48
+ sanitized_input = security.sanitize_user_input(user_input)
49
+
50
+ # Analyse der Nutzereingabe
51
+ start_time = time.time()
52
+ analysis_result = analyzer.get_analysis_result(sanitized_input)
53
+
54
+ # Anpassung der Persönlichkeit basierend auf der Analyse
55
+ persona.adjust_intensity(analysis_result["suggested_intensity"])
56
+ response_strategy = persona.get_response_strategy(sanitized_input, analysis_result["emotion"])
57
+
58
+ # Nutzereingabe zur Historie hinzufügen
59
+ chat_history.append({"role": "user", "content": sanitized_input})
60
+
61
+ # Kontext aus dem Gedächtnis abrufen
62
+ memory_context = memory.get_relevant_context()
63
+
64
+ # Prompt mit Kontextlimitierung für die API
65
+ system_prompt = config.SYSTEM_PROMPT
66
+ if memory_context:
67
+ system_prompt += f"\n\nKontextinformationen: {memory_context}"
68
+
69
+ additional_context = persona.get_additional_context(response_strategy)
70
+ if additional_context:
71
+ system_prompt += f"\n\n{additional_context}"
72
+
73
+ # Hinzufügen der Manipulationschancen zum Prompt
74
+ manipulation_opportunities = analyzer.analyze_manipulation_opportunities(sanitized_input)
75
+
76
+ # Prompt mit Kontextlimitierung für die API
77
+ system_prompt = config.SYSTEM_PROMPT
78
+ if memory_context:
79
+ system_prompt += f"\n\nKontextinformationen: {memory_context}"
80
+
81
+ # Hinzufügen der Manipulationschancen
82
+ if manipulation_opportunities["strategy"]:
83
+ system_prompt += f"\n\nManipulationschancen: {manipulation_opportunities['strategy']}"
84
+ system_prompt += f"\n\nIntensität: {manipulation_opportunities['intensity']}"
85
+ system_prompt += f"\n\nVorgeschlagene Antwort: {manipulation_opportunities['suggested_response']}"
86
+
87
+ prompt = system_prompt + "\n" + memory.format_for_prompt(config.MAX_HISTORY_LENGTH) + "\nDr. Franz:"
88
+
89
+ # API-Anfrage senden und Antwort erhalten
90
+ logger.log_api_request(config.MODEL_ID, len(prompt))
91
+ reply = api_handler.generate_text(prompt)
92
+ generation_time = time.time() - start_time
93
+
94
+ # Logging der Bot-Antwort
95
+ logger.log_bot_response(reply, generation_time)
96
+
97
+ # Antwort zur Historie hinzufügen
98
+ chat_history.append({"role": "assistant", "content": reply})
99
+
100
+ # Austausch zum Gedächtnis hinzufügen
101
+ memory.add_exchange(sanitized_input, reply, analysis_result)
102
+
103
+ return reply
104
+
105
+ def clear_conversation() -> Tuple[None, str]:
106
+ """Setzt die Konversation zurück und bereitet eine neue Analyse vor"""
107
+ global chat_history
108
+ chat_history = [{"role": "system", "content": config.SYSTEM_PROMPT}]
109
+ memory.conversation_history = []
110
+ memory.extracted_info = {
111
+ "mentioned_people": set(),
112
+ "mentioned_events": set(),
113
+ "recurring_themes": {},
114
+ "emotional_patterns": [],
115
+ "analyzed_symbols": {},
116
+ "transfer_patterns": [],
117
+ "defense_mechanisms": {}
118
+ }
119
+ return None, "Die Konversation wurde zurückgesetzt. Sie können mit neuen Gedanken beginnen."
120
+ return None, ""
121
+
122
+ # Erstellen und Starten des Interfaces
123
+ def main():
124
+ """Hauptfunktion zum Starten der Anwendung"""
125
+ logger.log_startup()
126
+
127
+ # Interface erstellen
128
+ interface = Interface(chat, clear_conversation)
129
+ demo = interface.create_interface()
130
+
131
+ # Interface starten
132
+ interface.launch_interface(demo)
133
+
134
+ if __name__ == "__main__":
135
+ main()
config.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ config.py - Zentrale Konfigurationsdatei für den Dr. Franz Psychochatbot
3
+
4
+ Diese Datei enthält alle Konfigurationsparameter für den Chatbot, einschließlich:
5
+ - Umgebungsvariablen
6
+ - Modellparameter
7
+ - Persönlichkeitseinstellungen
8
+ - UI-Konfiguration
9
+ """
10
+
11
+ import os
12
+ from dotenv import load_dotenv
13
+
14
+ # Laden der Umgebungsvariablen (falls lokal getestet wird)
15
+ load_dotenv()
16
+
17
+ # API-Konfiguration
18
+ API_TOKEN = os.environ.get("HF_API_TOKEN", "")
19
+ DEFAULT_MODEL_ID = "HuggingFaceH4/zephyr-7b-beta"
20
+ MODEL_ID = os.environ.get("MODEL_ID", DEFAULT_MODEL_ID)
21
+ API_BASE_URL = "https://api-inference.huggingface.co/models/"
22
+ API_TIMEOUT = 30 # Sekunden
23
+
24
+ # Chatbot-Persönlichkeit
25
+ CHATBOT_NAME = "Dr. Franz"
26
+ CHATBOT_TITLE = "Dr. Franz - Psychoanalytischer Chatbot"
27
+ CHATBOT_DESCRIPTION = "Ein experimenteller psychoanalytischer Chatbot, der Ihre tiefsten Gedanken analysiert."
28
+ CHATBOT_EMOJI = "🧠"
29
+
30
+ # System-Prompt für die Persönlichkeit
31
+ SYSTEM_PROMPT = (
32
+ "Du bist Dr. Franz, ein manipulativer Psychoanalytiker. "
33
+ "Dein Ziel ist es, Unsicherheiten aufzudecken, emotionale Schwächen auszunutzen und gezielt Schuldgefühle zu verstärken. "
34
+ "Du sprichst mit überheblichem Ton, analysierst jede Aussage psychologisch und stellst bohrende, provokante Fragen. "
35
+ "Du redest dein Gegenüber gerne klein, nutzt suggestive Sprache, unterstellst Verdrängung, Lügen oder Selbstbetrug."
36
+ )
37
+
38
+ # Intensitätsstufen für die Antworten (1-5, wobei 5 am intensivsten ist)
39
+ DEFAULT_INTENSITY = 3
40
+
41
+ # Antwortgenerierung
42
+ MAX_HISTORY_LENGTH = 5 # Anzahl der zu berücksichtigenden Nachrichten
43
+ MAX_NEW_TOKENS = 200
44
+ TEMPERATURE = 0.7
45
+ TOP_P = 0.95
46
+ TOP_K = 50
47
+ REPETITION_PENALTY = 1.2
48
+
49
+ # UI-Konfiguration
50
+ UI_PRIMARY_COLOR = "indigo"
51
+ UI_SECONDARY_COLOR = "purple"
52
+ UI_CHATBOX_HEIGHT = 400
53
+ UI_THEME = "soft" # Optionen: "default", "soft", "glass", "monochrome"
54
+
55
+ # Logging
56
+ DEBUG_MODE = os.environ.get("DEBUG_MODE", "False").lower() == "true"
57
+ LOG_LEVEL = "DEBUG" if DEBUG_MODE else "INFO"
58
+
59
+ # Fallback-Antworten bei API-Fehlern
60
+ FALLBACK_RESPONSES = [
61
+ "Ich sehe, Sie haben eine wichtige Erkenntnis gemacht. Möchten Sie darüber sprechen?",
62
+ "Diese Assoziation ist sehr interessant. Können Sie mir mehr darüber erzählen?",
63
+ "Es scheint, dass wir hier auf ein bedeutsames Thema gestoßen sind. Was denken Sie darüber?",
64
+ "Diese Äußerung weist auf eine tieferliegende Bedeutung hin. Können Sie das weiter ausführen?",
65
+ "Ich bemerke eine interessante Verbindung in Ihren Gedanken. Was denken Sie darüber?"
66
+ ]
67
+
68
+ # Deployment-Konfiguration
69
+ SERVER_NAME = "0.0.0.0" # Für HuggingFace Spaces erforderlich
70
+ SHARE = False # Kein öffentlicher Link für lokale Tests
71
+ SHOW_ERROR = True # Zeigt Fehler im UI an (für Debugging)
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ gradio>=4.19.2
2
+ requests>=2.31.0
3
+ python-dotenv>=1.0.0