Skip to content

Commit 30fdb94

Browse files
authored
Merge pull request #60 from elsa-workflows/codex/add-get-/ai/service-providers-endpoint
Elsa Agents: Add service provider discovery endpoint
2 parents 73ca92a + ffe8caf commit 30fdb94

File tree

4 files changed

+53
-3
lines changed

4 files changed

+53
-3
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using Elsa.Abstractions;
2+
using Elsa.Agents;
3+
using Elsa.Models;
4+
using JetBrains.Annotations;
5+
6+
namespace Elsa.Agents.Api.Endpoints.ServiceProviders.List;
7+
8+
/// <summary>
9+
/// Lists all registered service providers.
10+
/// </summary>
11+
[UsedImplicitly]
12+
public class Endpoint(IServiceDiscoverer serviceDiscoverer) : ElsaEndpointWithoutRequest<ListResponse<string>>
13+
{
14+
/// <inheritdoc />
15+
public override void Configure()
16+
{
17+
Get("/ai/service-providers");
18+
ConfigurePermissions("ai/services:read");
19+
}
20+
21+
/// <inheritdoc />
22+
public override Task<ListResponse<string>> ExecuteAsync(CancellationToken ct)
23+
{
24+
var providers = serviceDiscoverer.Discover().Select(x => x.Name).ToList();
25+
return Task.FromResult(new ListResponse<string>(providers));
26+
}
27+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using Elsa.Api.Client.Shared.Models;
2+
using Refit;
3+
4+
namespace Elsa.Studio.Agents.Client;
5+
6+
/// Represents a client API for retrieving available service providers.
7+
public interface IServiceProvidersApi
8+
{
9+
/// Lists all service providers.
10+
[Get("/ai/service-providers")]
11+
Task<ListResponse<string>> ListAsync(CancellationToken cancellationToken = default);
12+
}

src/modules/agents/Elsa.Studio.Agents/UI/Pages/Service.razor

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,10 @@
3131
Label="@Localizer["Type"]"
3232
Variant="Variant.Outlined"
3333
HelperText="@Localizer["The type of the service."]">
34-
<MudSelectItem T="string" Value="@("OpenAIChatCompletion")">@Localizer["OpenAIChatCompletion"]</MudSelectItem>
35-
<MudSelectItem T="string" Value="@("OpenAIEmbeddingGenerator")">@Localizer["OpenAIEmbeddingGenerator"]</MudSelectItem>
36-
<MudSelectItem T="string" Value="@("OpenAITextToImage")">@Localizer["OpenAITextToImage"]</MudSelectItem>
34+
@foreach (var provider in _serviceProviders)
35+
{
36+
<MudSelectItem T="string" Value="@provider">@Localizer[provider]</MudSelectItem>
37+
}
3738
</MudSelect>
3839

3940
<MudTextField @bind-Value="_entity.Settings"

src/modules/agents/Elsa.Studio.Agents/UI/Pages/Service.razor.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,16 @@ public partial class Service : StudioComponentBase
2222
private MudForm _form = null!;
2323
private ServiceInputModelValidator _validator = null!;
2424
private ServiceModel _entity = new();
25+
private ICollection<string> _serviceProviders = [];
26+
27+
/// <inheritdoc />
28+
protected override async Task OnInitializedAsync()
29+
{
30+
await base.OnInitializedAsync();
31+
var providersApi = await ApiClientProvider.GetApiAsync<IServiceProvidersApi>();
32+
var response = await providersApi.ListAsync();
33+
_serviceProviders = response.Items;
34+
}
2535

2636
/// <inheritdoc />
2737
protected override async Task OnParametersSetAsync()

0 commit comments

Comments
 (0)