autogen/dotnet/samples/Greeter/Greeter.AgentWorker/Program.cs

63 lines
2.1 KiB
C#

using Agents;
using Greeter.AgentWorker;
using Microsoft.AI.Agents.Worker.Client;
using AgentId = Microsoft.AI.Agents.Worker.Client.AgentId;
var builder = WebApplication.CreateBuilder(args);
// Add service defaults & Aspire components.
builder.AddServiceDefaults();
var agentBuilder = builder.AddAgentWorker("https://agenthost");
agentBuilder.AddAgent<GreetingAgent>("greeter");
builder.Services.AddHostedService<MyBackgroundService>();
builder.Services.AddSingleton<Client>();
var app = builder.Build();
app.MapDefaultEndpoints();
app.Run();
internal sealed class GreetingAgent(IAgentContext context, ILogger<GreetingAgent> logger) : AgentBase(context)
{
protected override Task HandleEvent(Microsoft.AI.Agents.Abstractions.Event @event)
{
logger.LogInformation("[{Id}] Received event: '{Event}'.", AgentId, @event);
return base.HandleEvent(@event);
}
protected override Task<RpcResponse> HandleRequest(RpcRequest request)
{
logger.LogInformation("[{Id}] Received request: '{Request}'.", AgentId, request);
return Task.FromResult(new RpcResponse() { Result = "Okay!" });
}
}
internal sealed class MyBackgroundService(ILogger<MyBackgroundService> logger, Client client) : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
try
{
var generatedCodeId = Guid.NewGuid().ToString();
var instanceId = Guid.NewGuid().ToString();
var response = await client.RequestAsync(
new AgentId("greeter", "foo"),
"echo",
new Dictionary<string, string> { ["message"] = "Hello, agents!" }).ConfigureAwait(false);
logger.LogInformation("Received response: {Response}", response);
}
catch (Exception exception)
{
logger.LogError(exception, "Error invoking request.");
}
await Task.Delay(TimeSpan.FromMinutes(2), stoppingToken).ConfigureAwait(false);
}
}
}