feat: add AgentRunGraphSummary and related functionality for graph summary retrieval

This commit is contained in:
mlogclub
2026-04-12 14:08:16 +08:00
parent e2d2a951a9
commit c3ac4c3e28
5 changed files with 211 additions and 0 deletions
@@ -2,6 +2,7 @@ package services
import (
"cs-agent/internal/models"
"cs-agent/internal/pkg/toolx"
"cs-agent/internal/repositories"
"strings"
@@ -17,6 +18,18 @@ func newAgentRunLogService() *agentRunLogService {
type agentRunLogService struct{}
type AgentRunGraphSummary struct {
TriageCount int64
TriagePrepareTicket int64
TriagePrepareTicketReady int64
TriageHandoff int64
TriageContinueAnswering int64
AnalyzeCount int64
PrepareDraftCount int64
CreateTicketCount int64
HandoffCount int64
}
func (s *agentRunLogService) Get(id int64) *models.AgentRunLog {
return repositories.AgentRunLogRepository.Get(sqls.DB(), id)
}
@@ -83,3 +96,37 @@ func (s *agentRunLogService) ApplyHITLStatusFilter(cnd *sqls.Cnd, hitlStatus str
}
return cnd
}
func (s *agentRunLogService) BuildGraphSummary(aiAgentID int64) *AgentRunGraphSummary {
buildBaseCnd := func() *sqls.Cnd {
cnd := sqls.NewCnd()
if aiAgentID > 0 {
cnd.Eq("ai_agent_id", aiAgentID)
}
return cnd
}
return &AgentRunGraphSummary{
TriageCount: s.countByGraphTool(buildBaseCnd(), toolx.GraphTriageServiceRequestToolCode),
TriagePrepareTicket: s.countByGraphToolAndPlanReason(buildBaseCnd(), toolx.GraphTriageServiceRequestToolCode, "%prepare_ticket%"),
TriagePrepareTicketReady: s.countByGraphToolAndPlanReason(buildBaseCnd(), toolx.GraphTriageServiceRequestToolCode, "%prepare_ticket with ready ticket draft%"),
TriageHandoff: s.countByGraphToolAndPlanReason(buildBaseCnd(), toolx.GraphTriageServiceRequestToolCode, "%handoff_to_human%"),
TriageContinueAnswering: s.countByGraphToolAndPlanReason(buildBaseCnd(), toolx.GraphTriageServiceRequestToolCode, "%continue_answering%"),
AnalyzeCount: s.countByGraphTool(buildBaseCnd(), toolx.GraphAnalyzeConversationToolCode),
PrepareDraftCount: s.countByGraphTool(buildBaseCnd(), toolx.GraphPrepareTicketDraftToolCode),
CreateTicketCount: s.countByGraphTool(buildBaseCnd(), toolx.GraphCreateTicketConfirmToolCode),
HandoffCount: s.countByGraphTool(buildBaseCnd(), toolx.GraphHandoffConversationToolCode),
}
}
func (s *agentRunLogService) countByGraphTool(baseCnd *sqls.Cnd, graphToolCode string) int64 {
cnd := baseCnd
cnd.Eq("graph_tool_code", strings.TrimSpace(graphToolCode))
return s.Count(cnd)
}
func (s *agentRunLogService) countByGraphToolAndPlanReason(baseCnd *sqls.Cnd, graphToolCode string, planReasonLike string) int64 {
cnd := baseCnd
cnd.Eq("graph_tool_code", strings.TrimSpace(graphToolCode))
cnd.Where("plan_reason LIKE ?", strings.TrimSpace(planReasonLike))
return s.Count(cnd)
}