Files
ai-agent/internal/builders/agent_run_log_builder.go
T

66 lines
2.4 KiB
Go

package builders
import (
"cs-agent/internal/models"
"cs-agent/internal/pkg/dto/response"
"strings"
)
func BuildAgentRunLog(item *models.AgentRunLog) response.AgentRunLogResponse {
if item == nil {
return response.AgentRunLogResponse{}
}
hitlStatus, hitlStatusName, hitlSummary := resolveAgentRunLogHITL(item)
return response.AgentRunLogResponse{
ID: item.ID,
ConversationID: item.ConversationID,
MessageID: item.MessageID,
AIAgentID: item.AIAgentID,
AIConfigID: item.AIConfigID,
UserMessage: item.UserMessage,
PlannedAction: item.PlannedAction,
PlannedSkillCode: item.PlannedSkillCode,
PlannedSkillName: item.PlannedSkillName,
SkillRouteTrace: item.SkillRouteTrace,
ToolSearchTrace: item.ToolSearchTrace,
GraphToolTrace: item.GraphToolTrace,
GraphToolCode: item.GraphToolCode,
HandoffReason: item.HandoffReason,
PlannedToolCode: item.PlannedToolCode,
PlanReason: item.PlanReason,
InterruptType: item.InterruptType,
ResumeSource: item.ResumeSource,
HitlStatus: hitlStatus,
HitlStatusName: hitlStatusName,
HitlSummary: hitlSummary,
FinalAction: item.FinalAction,
FinalStatus: item.FinalStatus,
ReplyText: item.ReplyText,
ErrorMessage: item.ErrorMessage,
LatencyMs: item.LatencyMs,
TraceData: item.TraceData,
CreatedAt: item.CreatedAt.Format("2006-01-02 15:04:05"),
}
}
func resolveAgentRunLogHITL(item *models.AgentRunLog) (status, statusName, summary string) {
if item == nil {
return "", "", ""
}
replyText := strings.TrimSpace(item.ReplyText)
switch {
case strings.TrimSpace(item.FinalStatus) == "interrupted":
return "pending", "等待确认", "Graph Tool 已发起确认,正在等待用户回复。"
case strings.TrimSpace(item.FinalStatus) == "expired":
return "expired", "已过期", "确认 checkpoint 已失效,需要重新发起。"
case strings.Contains(replyText, "已取消本次工单创建") || strings.Contains(replyText, "已取消本次转人工"):
return "cancelled", "已取消", "用户已明确取消,本次确认流程已终止。"
case strings.TrimSpace(item.ResumeSource) != "":
return "confirmed", "已确认", "用户确认后已恢复执行,并完成后续流程。"
case strings.TrimSpace(item.InterruptType) != "":
return "triggered", "已触发", "本次运行涉及确认式 HITL 流程。"
default:
return "", "", ""
}
}