"""BAN YARO — KI Routes""" from fastapi import APIRouter, Depends, HTTPException, Request from pydantic import BaseModel from typing import Optional import ki as ki_module from auth import get_current_user from ratelimit import check as rl_check router = APIRouter() class TrainingRequest(BaseModel): problem: str rasse: Optional[str] = None alter: Optional[str] = None @router.post("/training") async def ki_training(req: TrainingRequest, request: Request, user=Depends(get_current_user)): """KI-Trainingsberatung für individuelle Verhaltens- und Trainingsprobleme.""" rl_check(request, max_requests=10, window_seconds=3600, key="ki_training") if not req.problem or len(req.problem.strip()) < 10: raise HTTPException(400, "Bitte beschreibe das Problem genauer.") if len(req.problem) > 1000: raise HTTPException(400, "Beschreibung zu lang (max. 1000 Zeichen).") rasse = req.rasse or "unbekannt" alter = req.alter or "unbekannt" system = ( "Du bist ein erfahrener, zertifizierter Hundetrainer mit Schwerpunkt " "auf positiver Verstärkung und gewaltfreier Erziehung. " "Antworte immer auf Deutsch, konkret, verständlich und motivierend. " "Gib keine Ratschläge die Schmerz oder Zwang beinhalten. " "Wenn das Problem schwerwiegend ist (Aggression, starke Angst), " "empfehle professionellen Hundetrainer vor Ort zusätzlich." ) prompt = f"""Hund: {rasse}, {alter} alt. Problem: {req.problem.strip()} Bitte gib: 1. Eine kurze Einschätzung des Problems (1-2 Sätze) 2. 3-5 konkrete Trainingsschritte die ich heute starten kann 3. Was ich vermeiden sollte 4. Wann ich einen Profi hinzuziehen sollte (falls relevant) Schreibe klar und strukturiert, ohne unnötigen Fachjargon.""" try: result = await ki_module.complete( prompt=prompt, system=system, max_tokens=600, requires_premium=False, ) return {"antwort": result} except ki_module.KIUnavailableError as e: raise HTTPException(503, str(e)) except Exception as e: raise HTTPException(500, "KI momentan nicht verfügbar.")