LIA: subir maxOutputTokens a 2048 y avisar cuando Gemini corta la respuesta
El límite de salida estaba en 600 tokens (~450 palabras), que truncaba a media frase las respuestas largas — listados de turnos del día, comparativas por bacteriólogo. Gemini Flash admite hasta 8192; 2048 cubre esos casos sin inflar el consumo del presupuesto. Además el código nunca leía finishReason, así que una respuesta cortada por MAX_TOKENS llegaba al usuario indistinguible de una completa. Ahora se marca en el texto y se expone el flag `truncada` en la respuesta JSON. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
f6d4ee9bdd
commit
b1a8b1abf8
@@ -189,7 +189,9 @@ $payload = json_encode([
|
||||
],
|
||||
'generationConfig' => [
|
||||
'temperature' => 0.3,
|
||||
'maxOutputTokens' => 600,
|
||||
// 600 cortaba a media frase las respuestas largas (listados de turnos,
|
||||
// comparativas por bacteriólogo). Gemini Flash admite hasta 8192.
|
||||
'maxOutputTokens' => 2048,
|
||||
],
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
|
||||
@@ -215,6 +217,15 @@ if ($code !== 200 || empty($gemini['candidates'][0]['content']['parts'][0]['text
|
||||
}
|
||||
|
||||
$respuesta = $gemini['candidates'][0]['content']['parts'][0]['text'];
|
||||
|
||||
// Gemini corta la respuesta y avisa con finishReason; sin esto el usuario recibe
|
||||
// un texto truncado a media frase sin saber que faltó contenido.
|
||||
$finishReason = $gemini['candidates'][0]['finishReason'] ?? null;
|
||||
$truncada = ($finishReason === 'MAX_TOKENS');
|
||||
if ($truncada) {
|
||||
$respuesta .= "\n\n_(respuesta cortada por longitud — pide el detalle por partes)_";
|
||||
}
|
||||
|
||||
$usage = $gemini['usageMetadata'] ?? [];
|
||||
$tokensEsta = (int)($usage['totalTokenCount'] ?? (int)((mb_strlen($pregunta) + mb_strlen($respuesta)) / 4));
|
||||
$tokensUsados += $tokensEsta;
|
||||
@@ -224,6 +235,7 @@ $pdo->prepare("INSERT INTO lab_config (clave, valor) VALUES ('lia_tokens_usados'
|
||||
|
||||
jsonOk([
|
||||
'respuesta' => $respuesta,
|
||||
'truncada' => $truncada,
|
||||
'tokens_usados' => $tokensUsados,
|
||||
'tokens_restantes' => max(0, LIA_TOKENS_MAX - $tokensUsados),
|
||||
'tokens_max' => LIA_TOKENS_MAX,
|
||||
|
||||
Reference in New Issue
Block a user