feat: add default workflow definition endpoint and related functionality
This commit is contained in:
@@ -230,6 +230,7 @@ func registerDashboardAIAgentRoutes(group *gin.RouterGroup) {
|
||||
|
||||
func registerDashboardAIWorkflowRoutes(group *gin.RouterGroup) {
|
||||
group.GET("/node-spec/list", dashboard.AIWorkflowGetNodeSpecList)
|
||||
group.GET("/default-definition", dashboard.AIWorkflowGetDefaultDefinition)
|
||||
group.POST("/validate", dashboard.AIWorkflowPostValidate)
|
||||
group.Any("/run/list", dashboard.AIWorkflowAnyRunList)
|
||||
group.GET("/run/:id", dashboard.AIWorkflowGetRunBy)
|
||||
|
||||
@@ -41,6 +41,7 @@ func TestNewServerRegistersGinRoutes(t *testing.T) {
|
||||
http.MethodGet + " /api/dashboard/user/:id",
|
||||
http.MethodPost + " /api/dashboard/user/create",
|
||||
http.MethodPost + " /api/dashboard/conversation/send_message",
|
||||
http.MethodGet + " /api/dashboard/ai-workflow/default-definition",
|
||||
http.MethodGet + " /api/dashboard/ai-workflow/run/list",
|
||||
http.MethodGet + " /api/dashboard/ai-workflow/run/:id",
|
||||
http.MethodGet + " /api/ws/dashboard",
|
||||
|
||||
@@ -108,6 +108,14 @@ func AIWorkflowGetNodeSpecList(ctx *gin.Context) {
|
||||
httpx.WriteJSON(ctx, builders.BuildAIWorkflowNodeSpecs(services.AIWorkflowService.ListNodeSpecs()))
|
||||
}
|
||||
|
||||
func AIWorkflowGetDefaultDefinition(ctx *gin.Context) {
|
||||
if _, err := services.AuthService.RequirePermission(ctx, constants.PermissionAIAgentView); err != nil {
|
||||
httpx.WriteJSON(ctx, err)
|
||||
return
|
||||
}
|
||||
httpx.WriteJSON(ctx, services.AIWorkflowService.DefaultAgentWorkflowDefinition())
|
||||
}
|
||||
|
||||
func AIWorkflowPostValidate(ctx *gin.Context) {
|
||||
if _, err := services.AuthService.RequirePermission(ctx, constants.PermissionAIAgentView); err != nil {
|
||||
httpx.WriteJSON(ctx, err)
|
||||
|
||||
@@ -82,6 +82,26 @@ func TestAIAgentServiceCreatesDefaultWorkflow(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestAIWorkflowServiceDefaultAgentWorkflowDefinitionIsValid(t *testing.T) {
|
||||
definition := AIWorkflowService.DefaultAgentWorkflowDefinition()
|
||||
if definition.EntryNodeID == "" {
|
||||
t.Fatalf("expected default workflow definition")
|
||||
}
|
||||
validation := workflowvalidator.ValidateDefinition(definition, workflowregistry.DefaultRegistry())
|
||||
if !validation.Valid {
|
||||
t.Fatalf("expected default workflow definition to be valid, got %#v", validation.Errors)
|
||||
}
|
||||
if nodeTypeByID(definition, "route_intent_1") != workflowregistry.NodeTypeCondition {
|
||||
t.Fatalf("expected default workflow to include intent router, got nodes: %#v", definition.Nodes)
|
||||
}
|
||||
if !workflowHasNodeType(definition, workflowregistry.NodeTypeHandoffToHuman) {
|
||||
t.Fatalf("expected default workflow to include human handoff node")
|
||||
}
|
||||
if !workflowHasNodeType(definition, workflowregistry.NodeTypeCreateTicket) {
|
||||
t.Fatalf("expected default workflow to include ticket creation node")
|
||||
}
|
||||
}
|
||||
|
||||
func TestAIWorkflowServicePublishAgentWorkflowBindsAgentVersion(t *testing.T) {
|
||||
setupAIAgentWorkflowTestDB(t)
|
||||
operator := aiAgentWorkflowTestOperator()
|
||||
|
||||
@@ -190,6 +190,10 @@ func (s *aiWorkflowService) ListNodeSpecs() []workflowregistry.NodeSpec {
|
||||
return s.registry.List()
|
||||
}
|
||||
|
||||
func (s *aiWorkflowService) DefaultAgentWorkflowDefinition() dsl.Definition {
|
||||
return defaultAgentWorkflowDefinition()
|
||||
}
|
||||
|
||||
func (s *aiWorkflowService) ValidateDefinition(def dsl.Definition) workflowvalidator.Result {
|
||||
return workflowvalidator.ValidateDefinition(def, s.registry)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user