This commit is contained in:
+2
-2
@@ -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
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user