-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathConsoleExtensions.cs
More file actions
47 lines (41 loc) 路 1.85 KB
/
Copy pathConsoleExtensions.cs
File metadata and controls
47 lines (41 loc) 路 1.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
锘縰sing Devlooped.Agents.AI;
using Devlooped.Extensions.AI;
using Microsoft.Agents.AI.Hosting;
using Microsoft.Extensions.AI;
using Newtonsoft.Json;
using Spectre.Console;
using Spectre.Console.Json;
public static class ConsoleExtensions
{
public static async ValueTask RenderAgentsAsync(this IServiceProvider services, IServiceCollection collection)
{
var catalog = services.GetRequiredService<AgentCatalog>();
var settings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Include,
DefaultValueHandling = DefaultValueHandling.Ignore
};
// List configured clients
foreach (var description in collection.AsEnumerable().Where(x => x.ServiceType == typeof(IChatClient) && x.IsKeyedService && x.ServiceKey is string))
{
var client = services.GetKeyedService<IChatClient>(description.ServiceKey);
if (client is null)
continue;
var metadata = client.GetService<ConfigurableChatClientMetadata>();
var chatopt = (client as ConfigurableChatClient)?.Options;
AnsiConsole.Write(new Panel(new JsonText(JsonConvert.SerializeObject(new { Metadata = metadata, Options = chatopt }, settings)))
{
Header = new PanelHeader($"| 馃挰 {metadata?.Id} from {metadata?.ConfigurationSection} |"),
});
}
// List configured agents
await foreach (var agent in catalog.GetAgentsAsync())
{
var metadata = agent.GetService<ConfigurableAIAgentMetadata>();
AnsiConsole.Write(new Panel(new JsonText(JsonConvert.SerializeObject(new { Agent = agent, Metadata = metadata }, settings)))
{
Header = new PanelHeader($"| 馃 {agent.DisplayName} from {metadata?.ConfigurationSection} |"),
});
}
}
}