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.
39 lines
1.3 KiB
PHP
39 lines
1.3 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
require_once __DIR__ . '/ProviderInterface.php';
|
|
|
|
/**
|
|
* Für lokale Smoke-Tests ohne echten API-Key (siehe README.md) — liefert eine feste,
|
|
* valide AiPlanningResponse-JSON zurück statt einen echten LLM-Aufruf zu machen. Niemals als
|
|
* Standard-Provider in config.php eintragen, nur über eine explizite lokale Umgebungsvariable
|
|
* (siehe plan.php) für Entwicklungszwecke aktivieren.
|
|
*/
|
|
class FakeProvider implements ProviderInterface
|
|
{
|
|
public function sendMessage(string $systemPrompt, string $userContent, int $maxTokens): array
|
|
{
|
|
return [
|
|
'content' => json_encode([
|
|
'lessons' => [
|
|
[
|
|
'id' => null,
|
|
'date' => null,
|
|
'lessonNumber' => null,
|
|
'topic' => 'Fake-Vorschlag zum Testen',
|
|
'startTime' => null,
|
|
'phases' => [],
|
|
'homework' => null,
|
|
'reflection' => null,
|
|
],
|
|
],
|
|
'summary' => 'Antwort des FakeProvider (kein echter KI-Aufruf).',
|
|
]),
|
|
'inputTokens' => 42,
|
|
'outputTokens' => 17,
|
|
'cacheCreationInputTokens' => 0,
|
|
'cacheReadInputTokens' => 0,
|
|
];
|
|
}
|
|
}
|