2024-10-30 11:53:37 -07:00
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
// Developer.cs
|
|
|
|
|
2024-09-17 09:01:49 -04:00
|
|
|
using DevTeam.Shared;
|
2024-10-16 20:09:39 -07:00
|
|
|
using Microsoft.AutoGen.Agents;
|
2024-12-12 19:43:26 -08:00
|
|
|
using Microsoft.AutoGen.Contracts;
|
2024-12-13 11:55:43 -08:00
|
|
|
using Microsoft.AutoGen.Core;
|
2024-09-17 09:01:49 -04:00
|
|
|
using Microsoft.SemanticKernel;
|
|
|
|
using Microsoft.SemanticKernel.Memory;
|
|
|
|
|
|
|
|
namespace DevTeam.Agents;
|
|
|
|
|
|
|
|
[TopicSubscription("devteam")]
|
2024-12-17 13:04:37 -08:00
|
|
|
public class Dev(IAgentWorker worker, Kernel kernel, ISemanticTextMemory memory, [FromKeyedServices("EventTypes")] EventTypes typeRegistry, ILogger<Dev> logger)
|
|
|
|
: SKAiAgent<DeveloperState>(worker, memory, kernel, typeRegistry), IDevelopApps,
|
2024-09-17 09:01:49 -04:00
|
|
|
IHandle<CodeGenerationRequested>,
|
|
|
|
IHandle<CodeChainClosed>
|
|
|
|
{
|
|
|
|
public async Task Handle(CodeGenerationRequested item)
|
|
|
|
{
|
|
|
|
var code = await GenerateCode(item.Ask);
|
|
|
|
var evt = new CodeGenerated
|
|
|
|
{
|
2024-09-18 11:57:51 -07:00
|
|
|
Org = item.Org,
|
|
|
|
Repo = item.Repo,
|
|
|
|
IssueNumber = item.IssueNumber,
|
2024-09-17 09:01:49 -04:00
|
|
|
Code = code
|
2024-11-08 14:16:24 +00:00
|
|
|
};
|
|
|
|
await PublishMessageAsync(evt);
|
2024-09-17 09:01:49 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
public async Task Handle(CodeChainClosed item)
|
|
|
|
{
|
|
|
|
//TODO: Get code from state
|
|
|
|
var lastCode = ""; // _state.State.History.Last().Message
|
|
|
|
var evt = new CodeCreated
|
|
|
|
{
|
|
|
|
Code = lastCode
|
2024-11-08 14:16:24 +00:00
|
|
|
};
|
|
|
|
await PublishMessageAsync(evt);
|
2024-09-17 09:01:49 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
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);
|
|
|
|
}
|