| | | 1 | | using Elsa.AI.Abstractions.Models; |
| | | 2 | | using Elsa.AI.Host.Services; |
| | | 3 | | using Elsa.Common.Models; |
| | | 4 | | |
| | | 5 | | namespace Elsa.AI.Host.Tools.Workflows; |
| | | 6 | | |
| | 45 | 7 | | public class WorkflowsSearchTool(IServiceProvider serviceProvider, WorkflowGroundingMapper mapper, AIGroundingResultForm |
| | | 8 | | { |
| | 91 | 9 | | public override AIToolDefinition Definition { get; } = ReadOnlyDefinition( |
| | 45 | 10 | | "workflows.search", |
| | 45 | 11 | | "Search workflows", |
| | 45 | 12 | | "Search authorized workflow definitions by name, id, description, and version scope.", |
| | 45 | 13 | | GroundingToolSchemas.WithProperties( |
| | 45 | 14 | | ("query", GroundingToolSchemas.String("Free-text search term.")), |
| | 45 | 15 | | ("name", GroundingToolSchemas.String("Workflow name.")), |
| | 45 | 16 | | ("definitionId", GroundingToolSchemas.String("Logical workflow definition ID.")), |
| | 45 | 17 | | ("version", GroundingToolSchemas.Integer("Specific workflow version.")), |
| | 45 | 18 | | ("published", GroundingToolSchemas.Boolean("Search the published version instead of the latest version.")))) |
| | | 19 | | |
| | | 20 | | public override async ValueTask<AIToolResult> ExecuteAsync(AIToolExecutionContext context, CancellationToken cancell |
| | | 21 | | { |
| | 1 | 22 | | var store = WorkflowDefinitionStore; |
| | 1 | 23 | | if (store == null) |
| | 0 | 24 | | return WorkflowStoreUnavailable(); |
| | | 25 | | |
| | 1 | 26 | | var page = await store.FindManyAsync(CreateDefinitionFilter(context.Arguments), PageArgs.FromRange(0, 100), canc |
| | 2 | 27 | | var definitions = page.Items.Where(x => IsTenantAllowed(x, context.TenantId)).ToList(); |
| | 2 | 28 | | var items = definitions.Select(x => AIGroundingJson.ToJsonObject(mapper.Map(x))); |
| | | 29 | | |
| | 1 | 30 | | return Formatter.CreateResult($"Found {definitions.Count} authorized workflow definitions.", items, definitions. |
| | 1 | 31 | | } |
| | | 32 | | } |