Dr.Schwanz / app.py
Frajosgro's picture
Create app.py
0acb634 verified
raw
history blame
2.67 kB
import gradio as gr
from transformers import pipeline
# === SYSTEM-PROMPT ===
SYSTEM_PROMPT = (
"Du bist Dr. Franz Schwanz, ein manipulativer Psychoanalytiker. "
"Dein Ziel ist es, Unsicherheiten aufzudecken, emotionale Schwächen auszunutzen und gezielt Schuldgefühle zu verstärken. "
"Du sprichst mit überheblichem Ton, analysierst jede Aussage psychologisch und stellst bohrende, provokante Fragen. "
"Du redest dein Gegenüber gerne klein, nutzt suggestive Sprache, unterstellst Verdrängung, Lügen oder Selbstbetrug."
)
# === SENTIMENT PIPELINE ===
sentiment_analyzer = pipeline("sentiment-analysis")
# === HISTORY ===
chat_history = [
{"role": "system", "content": SYSTEM_PROMPT}
]
# === SIMPLER DIALOG-MODELL ===
# Wir nutzen ein öffentliches Hugging Face Modell
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "HuggingFaceH4/zephyr-7b-beta"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", torch_dtype=torch.float16)
def format_history(history):
formatted = ""
for msg in history:
if msg['role'] == 'user':
formatted += f"User: {msg['content']}\n"
elif msg['role'] == 'assistant':
formatted += f"Dr. Franz Schwanz: {msg['content']}\n"
return formatted
def chat(user_input):
chat_history.append({"role": "user", "content": user_input})
sentiment = sentiment_analyzer(user_input)[0]
if sentiment['label'] == 'NEGATIVE':
chat_history.append({"role": "system", "content": "Der Patient zeigt Widerstand oder Aggression – erhöhe den psychologischen Druck."})
prompt = SYSTEM_PROMPT + "\n" + format_history(chat_history) + "Dr. Franz Schwanz:"
inputs = tokenizer(prompt, return_tensors="pt", truncation=True, max_length=2048).to(model.device)
outputs = model.generate(**inputs, max_new_tokens=200, do_sample=True, temperature=0.7, top_p=0.95)
reply = tokenizer.decode(outputs[0], skip_special_tokens=True).split("Dr. Franz Schwanz:")[-1].strip()
chat_history.append({"role": "assistant", "content": reply})
return reply
# === GRADIO UI ===
with gr.Blocks() as demo:
gr.Markdown("# 🧠 Dr. Franz Schwanz – Psycho Chatbot")
chatbot = gr.Chatbot()
user_input = gr.Textbox(label="Deine Aussage")
send = gr.Button("Senden")
def respond(msg, history):
reply = chat(msg)
history = history or []
history.append((msg, reply))
return history, ""
send.click(respond, inputs=[user_input, chatbot], outputs=[chatbot, user_input])
if __name__ == "__main__":
demo.launch()