Add LLM tutor API endpoints
This commit is contained in:
@@ -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.
|
||||
Reference in New Issue
Block a user