fix: loguea la respuesta cruda del AI cuando no trae texto usable

Cuando el AI respondía sin error pero con un content que no era string
(o vacío), ProcessWidgetMessage caía en silencio al mensaje genérico de
"dame más detalle" sin dejar ningún rastro en el log — no había forma de
saber qué pasó. Ahora loguea el JSON crudo (agentMessage.Raw) en ese caso,
y también cuando se agotan las 3 rondas de tool-calling sin llegar a una
respuesta final.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-08-13 09:43:18 -05:00
co-authored by Claude Sonnet 5
parent f3f2f421d6
commit 7c4bb8713b
+8
View File
@@ -278,6 +278,13 @@ func ProcessWidgetMessage(agente *models.UmindAgente, sessionID, userText string
if s, ok := aiMsg.Content.(string); ok {
content = s
}
if strings.TrimSpace(content) == "" {
// El AI respondió sin error pero sin texto usable — antes esto se
// perdía en silencio y el visitante recibía el mensaje genérico de
// "dame más detalle" sin ninguna pista de qué pasó. Con .Raw (ver
// agentMessage.UnmarshalJSON) queda el JSON crudo para diagnosticar.
log.Printf("[UMIND] Respuesta del AI sin texto usable (agente %d) round %d: %s", agente.ID, round, string(aiMsg.Raw))
}
finalResponse = content
_ = models.SaveUmindMensaje(agente.ID, sessionID, "assistant", content)
break
@@ -298,6 +305,7 @@ func ProcessWidgetMessage(agente *models.UmindAgente, sessionID, userText string
}
if finalResponse == "" {
log.Printf("[UMIND] Agente %d: se agotaron las rondas de tool-calling sin una respuesta final", agente.ID)
finalResponse = "Un momento, por favor — dame un poco más de detalle sobre lo que necesitas."
}
return finalResponse, nil