98 lines
3.3 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-09 11:23:58 +00:00
using Microsoft.SemanticKernel.Connectors.AI.OpenAI;
2023-11-10 15:30:24 +00:00
using Microsoft.SemanticKernel.Memory;
using Microsoft.SemanticKernel.Orchestration;
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
[ImplicitStreamSubscription("DevPersonas")]
2024-02-22 16:30:56 +01:00
public class ProductManager : Agent
{
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
}
2024-02-18 20:21:44 +00:00
public async override Task OnActivateAsync(CancellationToken cancellationToken)
{
var streamProvider = this.GetStreamProvider("StreamProvider");
2024-02-19 14:48:17 +00:00
var streamId = StreamId.Create("DevPersonas", this.GetPrimaryKeyString());
2024-02-18 20:21:44 +00:00
var stream = streamProvider.GetStream<Event>(streamId);
await stream.SubscribeAsync(HandleEvent);
}
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-23 15:12:39 +01:00
//await _ghService.PostComment(item.Data["org"], item.Data["repo"], long.Parse(item.Data["issueNumber"]), readme);
2024-02-22 13:09:48 +01:00
// postEvent ReadmeGenerated
2024-02-18 20:21:44 +00:00
break;
case EventType.ChainClosed:
await CloseReadme();
2024-02-22 13:09:48 +01:00
// postEvent ReadmeFinished
2024-02-18 20:21:44 +00:00
break;
2024-02-01 21:03:33 +00:00
default:
break;
}
}
public async Task<string> CreateReadme(string ask)
{
2023-11-09 16:03:38 +00:00
try
{
2024-02-23 15:12:39 +01:00
return await CallFunction(DevLead.Plan, 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;
}
}
2024-01-12 20:06:35 +00:00
2024-02-01 21:03:33 +00:00
public async Task CloseReadme()
2024-01-12 20:06:35 +00:00
{
2024-02-01 21:03:33 +00:00
// var pm = _grains.GetGrain<IManageProduct>(issueNumber, suffix);
// var readme = await pm.GetLastMessage();
// var lookup = _grains.GetGrain<ILookupMetadata>(suffix);
// var parentIssue = await lookup.GetMetadata((int)issueNumber);
// await _azService.Store(new SaveOutputRequest
// {
// ParentIssueNumber = parentIssue.IssueNumber,
// IssueNumber = (int)issueNumber,
// Output = readme,
// Extension = "md",
// Directory = "output",
// FileName = "readme",
// Org = org,
// Repo = repo
// });
// await _ghService.CommitToBranch(new CommitRequest
// {
// Dir = "output",
// Org = org,
// Repo = repo,
// ParentNumber = parentIssue.IssueNumber,
// Number = (int)issueNumber,
// Branch = $"sk-{parentIssue.IssueNumber}"
// });
// await _ghService.MarkTaskComplete(new MarkTaskCompleteRequest
// {
// Org = org,
// Repo = repo,
// CommentId = parentIssue.CommentId
// });
2024-01-12 20:06:35 +00:00
}
}