mirror of
https://github.com/microsoft/autogen.git
synced 2025-10-13 17:10:40 +00:00
73 lines
2.6 KiB
C#
73 lines
2.6 KiB
C#
using Microsoft.AI.DevTeam.Skills;
|
|
using Microsoft.Extensions.Logging;
|
|
using Microsoft.SemanticKernel;
|
|
using Microsoft.SemanticKernel.Memory;
|
|
using Orleans.Runtime;
|
|
using Orleans.Streams;
|
|
|
|
namespace Microsoft.AI.DevTeam;
|
|
|
|
[ImplicitStreamSubscription(Consts.MainNamespace)]
|
|
public class ProductManager : AiAgent
|
|
{
|
|
private readonly IKernel _kernel;
|
|
private readonly ISemanticTextMemory _memory;
|
|
private readonly ILogger<ProductManager> _logger;
|
|
|
|
public ProductManager([PersistentState("state", "messages")] IPersistentState<AgentState> state, IKernel kernel, ISemanticTextMemory memory, ILogger<ProductManager> logger) : base(state)
|
|
{
|
|
_kernel = kernel;
|
|
_memory = memory;
|
|
_logger = logger;
|
|
}
|
|
|
|
public async override Task HandleEvent(Event item, StreamSequenceToken? token)
|
|
{
|
|
switch (item.Type)
|
|
{
|
|
case EventType.ReadmeRequested:
|
|
var readme = await CreateReadme(item.Message);
|
|
await PublishEvent(Consts.MainNamespace, this.GetPrimaryKeyString(), new Event {
|
|
Type = EventType.ReadmeGenerated,
|
|
Data = new Dictionary<string, string> {
|
|
{ "org", item.Data["org"] },
|
|
{ "repo", item.Data["repo"] },
|
|
{ "issueNumber", item.Data["issueNumber"] },
|
|
{ "readme", readme }
|
|
},
|
|
Message = readme
|
|
});
|
|
break;
|
|
case EventType.ReadmeChainClosed:
|
|
var lastReadme = _state.State.History.Last().Message;
|
|
await PublishEvent(Consts.MainNamespace, this.GetPrimaryKeyString(), new Event {
|
|
Type = EventType.ReadmeCreated,
|
|
Data = new Dictionary<string, string> {
|
|
{ "org", item.Data["org"] },
|
|
{ "repo", item.Data["repo"] },
|
|
{ "issueNumber", item.Data["issueNumber"] },
|
|
{ "readme", lastReadme },
|
|
{ "parentNumber", item.Data["parentNumber"] }
|
|
},
|
|
Message = lastReadme
|
|
});
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
public async Task<string> CreateReadme(string ask)
|
|
{
|
|
try
|
|
{
|
|
return await CallFunction(PM.Readme, ask, _kernel, _memory);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "Error creating readme");
|
|
return default;
|
|
}
|
|
}
|
|
}
|