Files
ai-agent/internal/ai/application/runtime/workflow_runtime.go
T

49 lines
1.4 KiB
Go
Raw Normal View History

2026-06-22 00:26:16 +08:00
package runtime
import (
"encoding/json"
"strings"
"agent-desk/internal/ai/workflow/compiler"
"agent-desk/internal/ai/workflow/dsl"
"agent-desk/internal/models"
"agent-desk/internal/pkg/enums"
"agent-desk/internal/pkg/errorsx"
2026-06-22 00:26:16 +08:00
"agent-desk/internal/repositories"
"github.com/mlogclub/simple/sqls"
)
func resolveAgentWorkflow(aiAgent models.AIAgent) (compiler.Result, error) {
if aiAgent.WorkflowVersionID <= 0 {
return compiler.Result{}, errorsx.InvalidParam("workflow version is required")
2026-06-22 00:26:16 +08:00
}
version := repositories.AIWorkflowVersionRepository.Get(sqls.DB(), aiAgent.WorkflowVersionID)
if version == nil || version.Status != enums.StatusOk {
return compiler.Result{}, errorsx.InvalidParam("workflow version does not exist")
2026-06-22 00:26:16 +08:00
}
var def dsl.Definition
if err := json.Unmarshal([]byte(version.Definition), &def); err != nil {
return compiler.Result{}, errorsx.InvalidParam("workflow definition is invalid")
2026-06-22 00:26:16 +08:00
}
return compiler.Compile(def), nil
2026-06-22 00:26:16 +08:00
}
func prepareWorkflowAgent(aiAgent models.AIAgent) (models.AIAgent, error) {
result, err := resolveAgentWorkflow(aiAgent)
if err != nil {
return aiAgent, err
}
if strings.TrimSpace(result.Appendix) == "" {
return aiAgent, nil
2026-06-22 00:26:16 +08:00
}
prompt := strings.TrimSpace(aiAgent.SystemPrompt)
appendix := strings.TrimSpace(result.Appendix)
if prompt == "" {
aiAgent.SystemPrompt = appendix
return aiAgent, nil
2026-06-22 00:26:16 +08:00
}
aiAgent.SystemPrompt = prompt + "\n\n" + appendix
return aiAgent, nil
2026-06-22 00:26:16 +08:00
}