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)
|
historial, _ := models.GetUmindHistorial(agente.ID, sessionID, 6)
|
||||||
messages := []agentMessage{{Role: "system", Content: umindSystemPrompt(agente, tenant.Nombre)}}
|
messages := []agentMessage{{Role: "system", Content: umindSystemPrompt(agente, tenant.Nombre)}}
|
||||||
for _, h := range historial {
|
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: h.Role, Content: h.Content})
|
||||||
}
|
}
|
||||||
messages = append(messages, agentMessage{Role: "user", Content: userText})
|
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))
|
log.Printf("[UMIND] Respuesta del AI sin texto usable (agente %d) round %d: %s", agente.ID, round, string(aiMsg.Raw))
|
||||||
}
|
}
|
||||||
finalResponse = content
|
finalResponse = content
|
||||||
_ = models.SaveUmindMensaje(agente.ID, sessionID, "assistant", content)
|
if strings.TrimSpace(content) != "" {
|
||||||
|
_ = models.SaveUmindMensaje(agente.ID, sessionID, "assistant", content)
|
||||||
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user