feat: add AI chat for repports

This commit is contained in:
2026-04-28 07:19:49 +02:00
parent 087bcab16b
commit 490a364c00
10 changed files with 340 additions and 5 deletions

View File

@ -69,6 +69,79 @@ func (h *Handler) GetGeneratingStatus(c *gin.Context) {
httputil.OK(c, gin.H{"generating": h.pipeline.IsGenerating()})
}
func (h *Handler) ListReportMessages(c *gin.Context) {
userID := c.GetString("userID")
reportID := c.Param("id")
report, err := h.repo.GetReport(reportID, userID)
if err != nil {
httputil.InternalError(c, err)
return
}
if report == nil {
c.Status(http.StatusNotFound)
return
}
msgs, err := h.repo.ListReportMessages(reportID)
if err != nil {
httputil.InternalError(c, err)
return
}
httputil.OK(c, msgs)
}
func (h *Handler) CreateReportMessage(c *gin.Context) {
userID := c.GetString("userID")
reportID := c.Param("id")
var req struct {
Content string `json:"content" binding:"required"`
}
if err := c.ShouldBindJSON(&req); err != nil {
httputil.BadRequest(c, err)
return
}
report, err := h.repo.GetReport(reportID, userID)
if err != nil {
httputil.InternalError(c, err)
return
}
if report == nil || report.Status != "done" {
c.Status(http.StatusNotFound)
return
}
// Récupérer l'historique pour le contexte IA
history, err := h.repo.ListReportMessages(reportID)
if err != nil {
httputil.InternalError(c, err)
return
}
// Persister le message utilisateur
userMsg, err := h.repo.CreateReportMessage(reportID, "user", req.Content, "done")
if err != nil {
httputil.InternalError(c, err)
return
}
// Créer le message assistant en attente
assistantMsg, err := h.repo.CreateReportMessage(reportID, "assistant", "", "generating")
if err != nil {
httputil.InternalError(c, err)
return
}
// Ajouter le message utilisateur à l'historique avant de lancer la génération
history = append(history, *userMsg)
h.pipeline.GenerateReportMessageAsync(assistantMsg.ID, report, history, h.reportManager)
c.JSON(http.StatusCreated, assistantMsg)
}
func buildExcerptContext(excerpts []string) string {
if len(excerpts) == 1 {
return excerpts[0]