Ryan Sweet bf407d99b4
rysweet-adopt .NET Microsoft.Extensions.AI abstractions (#3790)
adopts the new Microsoft.Extensions.AI abstractions
adds a base InferenceAgent
fixes a lot of pain points in the runtime wrt startup/shutdown
fixes some uncaught exceptions in the grpc stream reading
adds an example for running the backend service in its own process
adds an example of an agent that connects to OpenAI/Ollama
adds an example of wrapping an agent app in .NET Aspire
upgrades some dependencies and removes some others
Known bugs: #3922
2024-10-23 14:23:36 -07:00

60 lines
1.8 KiB
C#

using DevTeam.Shared;
using Microsoft.AutoGen.Abstractions;
using Microsoft.AutoGen.Agents;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Memory;
namespace DevTeam.Agents;
[TopicSubscription("devteam")]
public class Dev(IAgentContext context, Kernel kernel, ISemanticTextMemory memory, [FromKeyedServices("EventTypes")] EventTypes typeRegistry, ILogger<Dev> logger)
: SKAiAgent<DeveloperState>(context, memory, kernel, typeRegistry), IDevelopApps,
IHandle<CodeGenerationRequested>,
IHandle<CodeChainClosed>
{
public async Task Handle(CodeGenerationRequested item)
{
var code = await GenerateCode(item.Ask);
var evt = new CodeGenerated
{
Org = item.Org,
Repo = item.Repo,
IssueNumber = item.IssueNumber,
Code = code
}.ToCloudEvent(this.AgentId.Key);
await PublishEvent(evt);
}
public async Task Handle(CodeChainClosed item)
{
//TODO: Get code from state
var lastCode = ""; // _state.State.History.Last().Message
var evt = new CodeCreated
{
Code = lastCode
}.ToCloudEvent(this.AgentId.Key);
await PublishEvent(evt);
}
public async Task<string> GenerateCode(string ask)
{
try
{
var context = new KernelArguments { ["input"] = AppendChatHistory(ask) };
var instruction = "Consider the following architectural guidelines:!waf!";
var enhancedContext = await AddKnowledge(instruction, "waf", context);
return await CallFunction(DeveloperSkills.Implement, enhancedContext);
}
catch (Exception ex)
{
logger.LogError(ex, "Error generating code");
return "";
}
}
}
public interface IDevelopApps
{
public Task<string> GenerateCode(string ask);
}