73 lines
2.6 KiB
C#
Raw Normal View History

using Microsoft.AI.DevTeam.Skills;
2023-11-09 16:03:38 +00:00
using Microsoft.Extensions.Logging;
using Microsoft.SemanticKernel;
2023-11-10 15:30:24 +00:00
using Microsoft.SemanticKernel.Memory;
using Orleans.Runtime;
2024-01-12 20:06:35 +00:00
using Orleans.Streams;
namespace Microsoft.AI.DevTeam;
2024-02-18 20:21:44 +00:00
2024-02-25 20:26:34 +01:00
[ImplicitStreamSubscription(Consts.MainNamespace)]
2024-02-23 15:49:46 +01:00
public class ProductManager : AiAgent
{
private readonly IKernel _kernel;
2023-11-10 15:30:24 +00:00
private readonly ISemanticTextMemory _memory;
2023-11-09 16:03:38 +00:00
private readonly ILogger<ProductManager> _logger;
2024-02-23 15:12:39 +01:00
public ProductManager([PersistentState("state", "messages")] IPersistentState<AgentState> state, IKernel kernel, ISemanticTextMemory memory, ILogger<ProductManager> logger) : base(state)
{
_kernel = kernel;
2023-11-10 15:30:24 +00:00
_memory = memory;
2023-11-09 16:03:38 +00:00
_logger = logger;
2024-02-01 21:03:33 +00:00
}
public async override Task HandleEvent(Event item, StreamSequenceToken? token)
{
switch (item.Type)
{
2024-02-22 13:09:48 +01:00
case EventType.ReadmeRequested:
2024-02-20 21:29:13 +01:00
var readme = await CreateReadme(item.Message);
2024-02-25 20:26:34 +01:00
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
});
2024-02-18 20:21:44 +00:00
break;
2024-02-26 21:09:58 +01:00
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
});
2024-02-18 20:21:44 +00:00
break;
2024-02-01 21:03:33 +00:00
default:
break;
}
}
2024-02-26 21:09:58 +01:00
public async Task<string> CreateReadme(string ask)
{
2023-11-09 16:03:38 +00:00
try
{
2024-02-25 20:26:34 +01:00
return await CallFunction(PM.Readme, ask, _kernel, _memory);
2023-11-09 16:03:38 +00:00
}
catch (Exception ex)
{
2023-11-09 16:03:38 +00:00
_logger.LogError(ex, "Error creating readme");
return default;
}
}
}