Add LLM tutor API endpoints

This commit is contained in:
stefan-kp
2025-12-04 10:30:23 +01:00
parent cab02cfefd
commit 32f93b9305
4 changed files with 298 additions and 0 deletions
+32
View File
@@ -0,0 +1,32 @@
# LLM Tutor API (v1)
Die mobile App soll dieselben Tutor-Funktionen wie das Web nutzen, ohne eigene Prompts zu pflegen. Die API stellt deshalb zwei Endpunkte bereit:
## `GET /api/v1/personalities`
- Liefert die verfügbaren, vordefinierten Tutor-Charaktere.
- Response: `{ personalities: [{ id, name, description, image }] }`
## `POST /api/v1/llm/chat`
- Baut den System Prompt serverseitig (auf Basis der ausgewählten Personality) und sendet die Anfrage an Gemini.
- Body:
- `apiKey` (**string**, Pflicht): Nutzer-Gemini-Key (Server erzeugt den System Prompt, nicht die App).
- `personalityId` (**string**, Pflicht): Eine `id` aus `/api/v1/personalities`.
- `language` (**string**, Pflicht): Sprache, z.B. `en`, `de`, `fr` (muss zu `SupportedLanguage` passen).
- `playerColor` (**"white" | "black"**, Pflicht): Spielerfarbe des Users; der Tutor übernimmt die Gegenseite.
- `message` (**string**, Pflicht): Nutzereingabe oder systemischer Trigger-Text.
- `context` (optional): Zusätzliche Positions- und Analyseinfos, damit das LLM konkrete Hinweise geben kann.
- **Move-Exchange-Modus** (`{ type: "move_exchange", ... }`):
- `userMoveSan`, `tutorMoveSan`: SAN-Notation der letzten Züge.
- `fenBeforeUser`, `fenAfterUser`, `fenAfterTutor`: Stellungs-FENs (vor/nach den Zügen).
- `preEvaluation`, `postEvaluation`: Stockfish-Bewertungen (Score/Mate aus Weiß-Perspektive).
- `openingCandidates`: Liste möglicher Eröffnungen (`{ name, eco? }`).
- `missedTactics`: String-Liste zu erkannten taktischen Themen.
- **Allgemeiner Modus**: `{ currentFen?, evaluation?, openingCandidates?, missedTactics? }`
- `history` (optional): Bisherige Unterhaltung `{ role: "user" | "model", text }[]`; der Server ergänzt immer den System Prompt.
- `modelName` (optional): Overrides des Default-Modells `gemini-2.5-flash`.
- Response: `{ reply: string }`
### Warum serverseitiger System Prompt?
- Nur vordefinierte Charaktere sind erlaubt (keine generischen Chats).
- Der Prompt erzwingt die Tutor-Rolle (Gegner + Coach), Sprache und Verhaltensregeln.
- Die App übergibt nur Zustand (FEN, Bewertungen, Taktiken) und User-Text; der Server kapselt die Instruktionen.