Umfangs-Umschalter: Checkbox "Auch bestehende Stundeninhalte anpassen" im AiAssistDialog steuert, ob die KI bestehende Stunden inhaltlich ändern darf oder die Einheit nur um neue Stunden erweitern soll. Zweifach durchgesetzt (Systemprompt + hartes client-seitiges Verwerfen in ApplyResponse), nicht nur der KI-Antwort vertraut. Dabei auch einen Bug gefixt: eine bereits "Durchgeführt" markierte Stunde wurde durch eine übernommene KI-Änderung stillschweigend auf "Geplant" zurückgesetzt. Prompt Caching: der Systemprompt ist jetzt vollständig statisch (Voraussetzung für Caching) und wird von AnthropicProvider.php als "cache_control: ephemeral" markiert — wiederholte Anfragen innerhalb der 5-Minuten-TTL zahlen nur den reduzierten Cache-Read-Preis. transactions-Tabelle und Preistabelle um Cache-Token-Spalten erweitert, Migration für bereits deployte Installationen beigelegt.
45 lines
2.2 KiB
PHP
45 lines
2.2 KiB
PHP
<?php
|
||
// Kopieren nach config.php und mit echten Werten füllen. config.php selbst ist in .gitignore
|
||
// eingetragen und darf nie committet werden.
|
||
|
||
return [
|
||
'db' => [
|
||
'host' => 'localhost',
|
||
'name' => 'lehrerapp_ai',
|
||
'user' => 'CHANGE_ME',
|
||
'pass' => 'CHANGE_ME',
|
||
],
|
||
|
||
// Nur für setup-user.php gebraucht (Web-Alternative zu scripts/create-user.php auf Hosting
|
||
// ohne PHP-CLI/SSH) — ein langer Zufallswert, z.B. per `openssl rand -hex 32` erzeugt.
|
||
// setup-user.php nach Gebrauch vom Server löschen, siehe README.md.
|
||
'setup_secret' => 'CHANGE_ME',
|
||
|
||
// Nur 'anthropic' ist aktuell fertig implementiert (siehe providers/AnthropicProvider.php).
|
||
// Die Provider-Schnittstelle ist so gebaut, dass ein OpenAiProvider später ergänzt werden
|
||
// kann — bewusst nicht in dieser Runde, da aktuelle OpenAI-Preise/API-Version zum Zeitpunkt
|
||
// der Implementierung nicht verifiziert wurden (siehe TODO.md, Nachtrag zu 4.5.9).
|
||
'llm_provider' => 'anthropic',
|
||
|
||
'anthropic' => [
|
||
'api_key' => 'sk-ant-CHANGE_ME',
|
||
'model' => 'claude-sonnet-5',
|
||
],
|
||
|
||
// Sicherheitsnetz gegen ausufernde Antworten (und damit Kosten) pro Anfrage.
|
||
'max_output_tokens' => 8000,
|
||
|
||
// USD je 1 Million Token, getrennt nach Input/Output/Prompt-Cache. Vor dem produktiven Einsatz
|
||
// gegen die aktuelle Anthropic-Preisseite gegenprüfen — Preise ändern sich.
|
||
// "cache_write" = Aufpreis beim ersten Aufruf, der den (jetzt vollständig statischen)
|
||
// Systemprompt neu in den Cache schreibt — Anthropic-Standard: 1,25× Input-Preis.
|
||
// "cache_read" = deutlich reduzierter Preis für jeden Folgeaufruf innerhalb der Cache-TTL
|
||
// (Anthropic-Standard: 5 Minuten), der den Systemprompt aus dem Cache liest statt neu zu
|
||
// verarbeiten — Anthropic-Standard: 0,1× Input-Preis.
|
||
'pricing' => [
|
||
'claude-sonnet-5' => ['input' => 3.00, 'output' => 15.00, 'cache_write' => 3.75, 'cache_read' => 0.30],
|
||
'claude-opus-5' => ['input' => 5.00, 'output' => 25.00, 'cache_write' => 6.25, 'cache_read' => 0.50],
|
||
'claude-haiku-4-5' => ['input' => 1.00, 'output' => 5.00, 'cache_write' => 1.25, 'cache_read' => 0.10],
|
||
],
|
||
];
|