2026-07-25 12:04:06 +08:00
|
|
|
package builders
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"time"
|
|
|
|
|
|
2026-08-21 00:41:07 +08:00
|
|
|
"code.tczkiot.com/wlw/ai-agent/internal/models"
|
|
|
|
|
"code.tczkiot.com/wlw/ai-agent/internal/pkg/dto/response"
|
2026-07-25 12:04:06 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func BuildAgentRun(item *models.AgentRun) response.AgentRunResponse {
|
|
|
|
|
if item == nil {
|
|
|
|
|
return response.AgentRunResponse{}
|
|
|
|
|
}
|
|
|
|
|
return response.AgentRunResponse{
|
|
|
|
|
ID: item.ID,
|
|
|
|
|
ConversationID: item.ConversationID,
|
|
|
|
|
AIAgentID: item.AIAgentID,
|
|
|
|
|
AgentRevisionID: item.AgentRevisionID,
|
|
|
|
|
SourceMessageID: item.SourceMessageID,
|
|
|
|
|
Status: item.Status,
|
|
|
|
|
PromptTokens: item.PromptTokens,
|
|
|
|
|
CompletionTokens: item.CompletionTokens,
|
|
|
|
|
StartedAt: formatAgentRunTime(item.StartedAt),
|
|
|
|
|
EndedAt: formatAgentRunTimePtr(item.EndedAt),
|
|
|
|
|
DurationMS: agentRunDurationMS(item.StartedAt, item.EndedAt),
|
|
|
|
|
ErrorMessage: item.ErrorMessage,
|
|
|
|
|
TraceData: item.TraceData,
|
|
|
|
|
CreatedAt: formatAgentRunTime(item.CreatedAt),
|
|
|
|
|
UpdatedAt: formatAgentRunTime(item.UpdatedAt),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func BuildAgentRunDetail(item *models.AgentRun, steps []models.AgentStep, toolCalls []models.AgentToolCall, feedback *models.AgentRunQualityFeedback) response.AgentRunResponse {
|
|
|
|
|
ret := BuildAgentRun(item)
|
|
|
|
|
ret.Steps = BuildAgentStepList(steps)
|
|
|
|
|
ret.ToolCalls = BuildAgentToolCallList(toolCalls)
|
|
|
|
|
ret.QualityFeedback = BuildAgentRunQualityFeedback(feedback)
|
|
|
|
|
return ret
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func BuildAgentRunQualityFeedback(item *models.AgentRunQualityFeedback) *response.AgentRunQualityFeedbackResponse {
|
|
|
|
|
if item == nil {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
return &response.AgentRunQualityFeedbackResponse{
|
|
|
|
|
ID: item.ID,
|
|
|
|
|
AgentRunID: item.AgentRunID,
|
|
|
|
|
ResolutionStatus: item.ResolutionStatus,
|
|
|
|
|
EvidenceStatus: item.EvidenceStatus,
|
|
|
|
|
Comment: item.Comment,
|
|
|
|
|
UpdateUserName: item.UpdateUserName,
|
|
|
|
|
UpdatedAt: formatAgentRunTime(item.UpdatedAt),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func BuildAgentRunList(list []models.AgentRun) []response.AgentRunResponse {
|
|
|
|
|
ret := make([]response.AgentRunResponse, 0, len(list))
|
|
|
|
|
for i := range list {
|
|
|
|
|
ret = append(ret, BuildAgentRun(&list[i]))
|
|
|
|
|
}
|
|
|
|
|
return ret
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func BuildAgentStep(item *models.AgentStep) response.AgentStepResponse {
|
|
|
|
|
if item == nil {
|
|
|
|
|
return response.AgentStepResponse{}
|
|
|
|
|
}
|
|
|
|
|
return response.AgentStepResponse{
|
|
|
|
|
ID: item.ID,
|
|
|
|
|
AgentRunID: item.AgentRunID,
|
|
|
|
|
StepType: item.StepType,
|
|
|
|
|
StepCode: item.StepCode,
|
|
|
|
|
Status: item.Status,
|
|
|
|
|
InputPreview: item.InputPreview,
|
|
|
|
|
OutputPreview: item.OutputPreview,
|
|
|
|
|
ErrorMessage: item.ErrorMessage,
|
|
|
|
|
StartedAt: formatAgentRunTime(item.StartedAt),
|
|
|
|
|
EndedAt: formatAgentRunTimePtr(item.EndedAt),
|
|
|
|
|
DurationMS: item.DurationMS,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func BuildAgentStepList(list []models.AgentStep) []response.AgentStepResponse {
|
|
|
|
|
ret := make([]response.AgentStepResponse, 0, len(list))
|
|
|
|
|
for i := range list {
|
|
|
|
|
ret = append(ret, BuildAgentStep(&list[i]))
|
|
|
|
|
}
|
|
|
|
|
return ret
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func BuildAgentToolCall(item *models.AgentToolCall) response.AgentToolCallResponse {
|
|
|
|
|
if item == nil {
|
|
|
|
|
return response.AgentToolCallResponse{}
|
|
|
|
|
}
|
|
|
|
|
return response.AgentToolCallResponse{
|
|
|
|
|
ID: item.ID,
|
|
|
|
|
AgentRunID: item.AgentRunID,
|
|
|
|
|
AgentStepID: item.AgentStepID,
|
|
|
|
|
ToolCode: item.ToolCode,
|
|
|
|
|
RiskLevel: item.RiskLevel,
|
|
|
|
|
RequireConfirm: item.RequireConfirm,
|
|
|
|
|
Status: item.Status,
|
|
|
|
|
ArgumentsPreview: item.ArgumentsPreview,
|
|
|
|
|
ResultPreview: item.ResultPreview,
|
|
|
|
|
ErrorMessage: item.ErrorMessage,
|
|
|
|
|
DurationMS: item.DurationMS,
|
|
|
|
|
CreatedAt: formatAgentRunTime(item.CreatedAt),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func BuildAgentToolCallList(list []models.AgentToolCall) []response.AgentToolCallResponse {
|
|
|
|
|
ret := make([]response.AgentToolCallResponse, 0, len(list))
|
|
|
|
|
for i := range list {
|
|
|
|
|
ret = append(ret, BuildAgentToolCall(&list[i]))
|
|
|
|
|
}
|
|
|
|
|
return ret
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func formatAgentRunTime(value time.Time) string {
|
|
|
|
|
if value.IsZero() {
|
|
|
|
|
return ""
|
|
|
|
|
}
|
|
|
|
|
return value.Format("2006-01-02 15:04:05")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func formatAgentRunTimePtr(value *time.Time) string {
|
|
|
|
|
if value == nil {
|
|
|
|
|
return ""
|
|
|
|
|
}
|
|
|
|
|
return formatAgentRunTime(*value)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func agentRunDurationMS(startedAt time.Time, endedAt *time.Time) int64 {
|
|
|
|
|
if startedAt.IsZero() || endedAt == nil || endedAt.IsZero() {
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
duration := endedAt.Sub(startedAt).Milliseconds()
|
|
|
|
|
if duration < 0 {
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
return duration
|
|
|
|
|
}
|