Sprint 12: UI-Vereinheitlichung + Läufigkeits-Tracker
- by-tabs/by-tab: einheitliche Tab/Pill-Navigation in allen Seiten - by-section-label, by-toolbar: einheitliche Section-Labels und Toolbars - Design-Tokens: fehlende --c-amber, --c-primary-soft ergänzt, Fallback-Werte entfernt - sitting.js: sitting-layout für konsistentes flush-Layout (wie walks) - Läufigkeits-Tracker: neuer Health-Tab für Hündinnen mit Zyklusvorhersage, Timeline vergangener Läufigkeiten, Erinnerungen und auto-berechnetem Nächst-Datum - emptyState-Bug: icon-Parameter muss SVG sein, nicht Icon-Name (dog/bell/warning gefixt) - SW-Cache: by-v103, APP_VER: 79
This commit is contained in:
parent
32d630d5a1
commit
b58789373c
30 changed files with 4344 additions and 523 deletions
|
|
@ -1,3 +1,62 @@
|
|||
"""BAN YARO — ki Routes (Stub, wird ausgebaut)"""
|
||||
from fastapi import APIRouter
|
||||
"""BAN YARO — KI Routes"""
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel
|
||||
from typing import Optional
|
||||
import ki as ki_module
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
class TrainingRequest(BaseModel):
|
||||
problem: str
|
||||
rasse: Optional[str] = None
|
||||
alter: Optional[str] = None
|
||||
|
||||
|
||||
@router.post("/training")
|
||||
async def ki_training(req: TrainingRequest):
|
||||
"""
|
||||
KI-Trainingsberatung für individuelle Verhaltens- und Trainingsprobleme.
|
||||
Kostenlos für alle (nutzt lokales Modell).
|
||||
"""
|
||||
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.")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue