fix: no guarda ni reenvía turnos vacíos del asistente en el historial
Una sesión de widget que pegó contra un bug ya arreglado (ej. el thought_signature de Gemini) podía quedar con un turno "assistant" vacío guardado en umind_mensajes — como el widget mantiene la misma session_id en sessionStorage mientras no se cierra la pestaña, cada mensaje nuevo reenviaba ese historial roto y el modelo volvía a responder vacío en cascada. El chat de prueba del panel no lo sufría porque arranca session_id nueva en cada carga de página. Dos cambios: no se guarda un mensaje "assistant" con contenido vacío de acá en más, y al armar el prompt se descartan los que ya hayan quedado guardados así — una sesión vieja rota se autorepara sola en el próximo mensaje, sin que el visitante tenga que abrir una pestaña nueva. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
7c4bb8713b
commit
5febbd24d5
@@ -258,6 +258,15 @@ func ProcessWidgetMessage(agente *models.UmindAgente, sessionID, userText string
|
||||
historial, _ := models.GetUmindHistorial(agente.ID, sessionID, 6)
|
||||
messages := []agentMessage{{Role: "system", Content: umindSystemPrompt(agente, tenant.Nombre)}}
|
||||
for _, h := range historial {
|
||||
// Sesiones que pegaron contra un bug ya arreglado (ej. el thought_signature
|
||||
// de Gemini) pueden tener quedado un turno "assistant" vacío guardado — si
|
||||
// se reenvía tal cual, el modelo se confunde y vuelve a responder vacío en
|
||||
// cascada. Se descarta al armar el prompt, así una sesión vieja rota se
|
||||
// autorepara sola en el próximo mensaje, sin que el visitante tenga que
|
||||
// abrir una pestaña nueva para conseguir una session_id limpia.
|
||||
if h.Role == "assistant" && strings.TrimSpace(h.Content) == "" {
|
||||
continue
|
||||
}
|
||||
messages = append(messages, agentMessage{Role: h.Role, Content: h.Content})
|
||||
}
|
||||
messages = append(messages, agentMessage{Role: "user", Content: userText})
|
||||
@@ -286,7 +295,9 @@ func ProcessWidgetMessage(agente *models.UmindAgente, sessionID, userText string
|
||||
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)
|
||||
if strings.TrimSpace(content) != "" {
|
||||
_ = models.SaveUmindMensaje(agente.ID, sessionID, "assistant", content)
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user