mirror of
https://github.com/microsoft/autogen.git
synced 2025-10-14 01:18:55 +00:00
89 lines
3.5 KiB
C#
89 lines
3.5 KiB
C#
![]() |
using Orleans.Concurrency;
|
||
|
using Orleans.Runtime;
|
||
|
|
||
|
namespace MS.AI.DevTeam;
|
||
|
|
||
|
public class Conductor : Grain, IOrchestrateWorkflows
|
||
|
{
|
||
|
private readonly IManageGithub _ghService;
|
||
|
public Conductor( IManageGithub ghService)
|
||
|
{
|
||
|
_ghService = ghService;
|
||
|
}
|
||
|
public async Task InitialFlow(string input, string org, string repo, long parentNumber)
|
||
|
{
|
||
|
await _ghService.CreateBranch(new CreateBranchRequest
|
||
|
{
|
||
|
Org = org,
|
||
|
Repo = repo,
|
||
|
Branch = $"sk-{parentNumber}"
|
||
|
});
|
||
|
|
||
|
var pmIssue = await _ghService.CreateIssue(new CreateIssueRequest
|
||
|
{
|
||
|
Label = $"{nameof(PM)}.{nameof(PM.Readme)}",
|
||
|
Org = org,
|
||
|
Repo = repo,
|
||
|
Input = input,
|
||
|
ParentNumber = parentNumber
|
||
|
});
|
||
|
var devLeadIssue = await _ghService.CreateIssue(new CreateIssueRequest
|
||
|
{
|
||
|
Label = $"{nameof(DevLead)}.{nameof(DevLead.Plan)}",
|
||
|
Org = org,
|
||
|
Repo = repo,
|
||
|
Input = input,
|
||
|
ParentNumber = parentNumber
|
||
|
});
|
||
|
var suffix = $"{org}-{repo}";
|
||
|
var pm = GrainFactory.GetGrain<IManageProduct>(pmIssue.IssueNumber, suffix);
|
||
|
var devLead = GrainFactory.GetGrain<ILeadDevelopment>(devLeadIssue.IssueNumber, suffix);
|
||
|
var lookup = GrainFactory.GetGrain<ILookupMetadata>(suffix);
|
||
|
|
||
|
var metadataList = new List<StoreMetadataPairs>{
|
||
|
new StoreMetadataPairs
|
||
|
{
|
||
|
Key = pmIssue.IssueNumber,
|
||
|
Value = new NewIssueResponse { CommentId = pmIssue.CommentId, IssueNumber = (int)parentNumber}
|
||
|
},
|
||
|
new StoreMetadataPairs
|
||
|
{
|
||
|
Key = devLeadIssue.IssueNumber,
|
||
|
Value = new NewIssueResponse { CommentId = devLeadIssue.CommentId, IssueNumber = (int)parentNumber}
|
||
|
}
|
||
|
};
|
||
|
await lookup.StoreMetadata(metadataList);
|
||
|
|
||
|
// await githubActor.CreatePR(); // TODO: this should happen when all tasks are done?
|
||
|
}
|
||
|
public async Task ImplementationFlow(DevLeadPlanResponse plan, string org, string repo, int parentNumber)
|
||
|
{
|
||
|
var suffix = $"{org}-{repo}";
|
||
|
var prompts = plan.steps.SelectMany(s => s.subtasks.Select(st => st.prompt));
|
||
|
var lookup = GrainFactory.GetGrain<ILookupMetadata>(suffix);
|
||
|
var metadataList = new List<StoreMetadataPairs>();
|
||
|
foreach(var prompt in prompts)
|
||
|
{
|
||
|
var issue = await _ghService.CreateIssue(new CreateIssueRequest
|
||
|
{
|
||
|
Label = $"{nameof(Dev)}.{nameof(Dev.Implement)}",
|
||
|
Org = org,
|
||
|
Repo = repo,
|
||
|
Input = prompt,
|
||
|
ParentNumber = parentNumber
|
||
|
});
|
||
|
metadataList.Add(new StoreMetadataPairs
|
||
|
{
|
||
|
Key = issue.IssueNumber,
|
||
|
Value = new NewIssueResponse { CommentId = issue.CommentId, IssueNumber = (int)parentNumber}
|
||
|
});
|
||
|
}
|
||
|
await lookup.StoreMetadata(metadataList);
|
||
|
}
|
||
|
|
||
|
public Task ScheduleCommitSandboxRun(CommitRequest commitRequest, MarkTaskCompleteRequest markTaskCompleteRequest)
|
||
|
{
|
||
|
throw new NotImplementedException();
|
||
|
}
|
||
|
}
|