2023-10-26 22:09:18 +02:00
|
|
|
using Microsoft.AI.DevTeam.Skills;
|
2023-11-09 16:03:38 +00:00
|
|
|
using Microsoft.Extensions.Logging;
|
2023-10-11 21:40:35 +02:00
|
|
|
using Microsoft.SemanticKernel;
|
2023-11-10 15:30:24 +00:00
|
|
|
using Microsoft.SemanticKernel.Memory;
|
2023-10-11 21:40:35 +02:00
|
|
|
using Orleans.Runtime;
|
2024-01-12 20:06:35 +00:00
|
|
|
using Orleans.Streams;
|
2023-10-11 21:40:35 +02:00
|
|
|
|
2023-10-26 22:09:18 +02:00
|
|
|
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
|
2023-10-11 21:40:35 +02:00
|
|
|
{
|
|
|
|
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)
|
2023-10-11 21:40:35 +02:00
|
|
|
{
|
|
|
|
_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
|
|
|
|
2023-10-11 21:40:35 +02:00
|
|
|
public async Task<string> CreateReadme(string ask)
|
|
|
|
{
|
2023-11-09 16:03:38 +00:00
|
|
|
try
|
2023-10-11 21:40:35 +02:00
|
|
|
{
|
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-10-11 21:40:35 +02:00
|
|
|
{
|
2023-11-09 16:03:38 +00:00
|
|
|
_logger.LogError(ex, "Error creating readme");
|
|
|
|
return default;
|
|
|
|
}
|
2023-10-11 21:40:35 +02:00
|
|
|
}
|
|
|
|
}
|