from fastapi import FastAPI, Request from fastapi.responses import HTMLResponse from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates import os from huggingface_hub import InferenceClient app = FastAPI() # Statische Dateien (CSS, JS) einbinden app.mount("/static", StaticFiles(directory="static"), name="static") templates = Jinja2Templates(directory="templates") # HF-Token aus Umgebungsvariable HF_TOKEN = os.environ.get("HF_TOKEN", "") @app.get("/", response_class=HTMLResponse) async def root(request: Request): return templates.TemplateResponse("index.html", {"request": request}) @app.post("/analyze") async def analyze_text(request: Request): data = await request.json() user_text = data.get("text", "") # Sentiment-Analyse durchführen client = InferenceClient(token=HF_TOKEN) sentiment = client.text_classification( text=user_text, model="cardiffnlp/twitter-roberta-base-sentiment" ) # Chat-Antwort generieren messages = data.get("history", []) messages.append({"role": "user", "content": user_text}) # System-Prompt basierend auf Stimmung best_sentiment = sorted(sentiment, key=lambda x: x["score"], reverse=True)[0] if best_sentiment["label"] == "NEGATIVE" and best_sentiment["score"] > 0.6: messages.append({"role": "system", "content": "Der Patient zeigt starke negative Emotionen – schlage Schuldprojektion oder Verdrängung vor."}) elif best_sentiment["label"] == "POSITIVE" and best_sentiment["score"] > 0.6: messages.append({"role": "system", "content": "Der Patient wirkt übertrieben positiv – möglicherweise Abwehrmechanismus durch Kompensation."}) # Chat-Antwort generieren response = client.chat_completion( model="gpt-3.5-turbo", messages=messages ) return { "reply": response.generated_text, "toneLabel": best_sentiment["label"], "toneScore": best_sentiment["score"] }