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' => [
|
'generationConfig' => [
|
||||||
'temperature' => 0.3,
|
'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);
|
], 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'];
|
$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'] ?? [];
|
$usage = $gemini['usageMetadata'] ?? [];
|
||||||
$tokensEsta = (int)($usage['totalTokenCount'] ?? (int)((mb_strlen($pregunta) + mb_strlen($respuesta)) / 4));
|
$tokensEsta = (int)($usage['totalTokenCount'] ?? (int)((mb_strlen($pregunta) + mb_strlen($respuesta)) / 4));
|
||||||
$tokensUsados += $tokensEsta;
|
$tokensUsados += $tokensEsta;
|
||||||
@@ -224,6 +235,7 @@ $pdo->prepare("INSERT INTO lab_config (clave, valor) VALUES ('lia_tokens_usados'
|
|||||||
|
|
||||||
jsonOk([
|
jsonOk([
|
||||||
'respuesta' => $respuesta,
|
'respuesta' => $respuesta,
|
||||||
|
'truncada' => $truncada,
|
||||||
'tokens_usados' => $tokensUsados,
|
'tokens_usados' => $tokensUsados,
|
||||||
'tokens_restantes' => max(0, LIA_TOKENS_MAX - $tokensUsados),
|
'tokens_restantes' => max(0, LIA_TOKENS_MAX - $tokensUsados),
|
||||||
'tokens_max' => LIA_TOKENS_MAX,
|
'tokens_max' => LIA_TOKENS_MAX,
|
||||||
|
|||||||
Reference in New Issue
Block a user