KI-Backend: Antwortretten - Funktion
CI / build-and-test (push) Canceled after 0s

This commit is contained in:
2026-09-04 12:10:42 +02:00
parent 7ef0c95a73
commit fedfceb81d
10 changed files with 435 additions and 14 deletions
+2 -2
View File
@@ -69,11 +69,11 @@ function ai_backend_authenticate(PDO $pdo): array
}
/** Einheitliche Fehlerantwort als JSON, beendet danach das Skript. */
function ai_backend_fail(int $httpStatus, string $message): never
function ai_backend_fail(int $httpStatus, string $message, array $details = []): never
{
http_response_code($httpStatus);
header('Content-Type: application/json');
echo json_encode(['error' => $message]);
echo json_encode(['error' => $message] + $details, JSON_INVALID_UTF8_SUBSTITUTE);
exit;
}
+11 -2
View File
@@ -162,8 +162,17 @@ $result = ai_backend_call_and_charge($pdo, $config, $user, $systemPrompt, $userC
// Erst NACH der Abrechnung validieren: die Token wurden real verbraucht, das wird auch dann
// verrechnet, wenn die KI kein valides JSON geliefert hat (siehe Planungsdokument).
$parsed = ai_backend_decode_json_response($result['content']);
if (!is_array($parsed) || !isset($parsed['lessons'])) {
ai_backend_fail(502, 'Die KI hat kein gültiges JSON im erwarteten Schema zurückgegeben.');
if (!is_array($parsed) || !isset($parsed['lessons']) || !is_array($parsed['lessons'])) {
// Die bezahlte Modellantwort nicht wegwerfen: Der Desktop-Client kann sie in einem
// Rettungsdialog vollständig anzeigen und die Lehrkraft daraus gültiges JSON markieren bzw.
// von Hand korrigieren lassen. Nur dieser Planungsendpunkt bietet einen manuellen Import an.
ai_backend_fail(502, 'Die KI hat kein gültiges JSON im erwarteten Schema zurückgegeben.', [
'rawResponse' => $result['content'],
]);
}
// Auch bei syntaktisch gültigem JSON kann erst der streng typisierte Desktop-Client einen
// Feldfehler entdecken (z.B. ein unlesbares Datum). Deshalb reist die Originalantwort bis zum
// Client mit; dort wird sie nach erfolgreicher Verarbeitung sofort wieder verworfen.
$parsed['rawResponse'] = $result['content'];
echo json_encode($parsed);