diff --git a/pkg/services/umind_agent_service.go b/pkg/services/umind_agent_service.go index b154629..c0b9b56 100644 --- a/pkg/services/umind_agent_service.go +++ b/pkg/services/umind_agent_service.go @@ -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 }