streaming rewrite WIP

This commit is contained in:
Kosta Petan
2024-02-22 13:09:48 +01:00
parent c76c35e669
commit 4877bd8b4b
5 changed files with 30 additions and 93 deletions

View File

@@ -1,7 +1,6 @@
using Orleans.Concurrency;
using Orleans.Runtime;
using Orleans.Streams;
using Orleans.Timers;
namespace Microsoft.AI.DevTeam;
@@ -25,26 +24,21 @@ public class AzureGenie : Grain, IGrainWithStringKey
await stream.SubscribeAsync(HandleEvent);
}
// -> AzureOps
// -> ReadmeFinished
// -> store
// -> CodeFinished
// -> store
// -> run in sandbox
public async Task HandleEvent(Event item, StreamSequenceToken? token)
{
switch (item.Type)
{
case EventType.NewAsk:
case EventType.ReadmeChainClosed:
//_azureService.Store();
break;
case EventType.NewAskReadme:
break;
case EventType.ChainClosed:
case EventType.CodeChainClosed:
// _azureService.Store();
// _azureService.RunInSandbox();
break;
default:
break;
}
}
}

View File

@@ -35,16 +35,6 @@ public class DeveloperLead : SemanticPersona
await stream.SubscribeAsync(HandleEvent);
}
public async Task CreateIssue(string org, string repo, long parentNumber, string input)
{
var function = $"{nameof(DevLead)}.{nameof(DevLead.Plan)}";
var devLeadIssue = await _ghService.CreateIssue(org, repo, input, function, parentNumber);
_state.State.ParentIssueNumber = parentNumber;
_state.State.CommentId = devLeadIssue.CommentId;
await _state.WriteStateAsync();
}
public async Task<string> CreatePlan(string ask)
{
try
@@ -117,24 +107,18 @@ public class DeveloperLead : SemanticPersona
var response = JsonSerializer.Deserialize<DevLeadPlanResponse>(plan);
return Task.FromResult(response);
}
// -> DevLead
// -> DevPlanRequested
// -> DevPlanGenerated
// -> ChainClosed
// -> DevPlanFinished
public async override Task HandleEvent(Event item, StreamSequenceToken? token)
{
switch (item.Type)
{
case EventType.NewAsk:
await CreateIssue(item.Data["org"], item.Data["repo"], long.Parse(item.Data["issueNumber"]) , item.Message);
break;
case EventType.NewAskPlan:
case EventType.DevPlanRequested:
var plan = await CreatePlan(item.Message);
await _ghService.PostComment(item.Data["org"], item.Data["repo"], long.Parse(item.Data["issueNumber"]), plan);
// postEvent EventType.DevPlanGenerated
break;
case EventType.ChainClosed:
await ClosePlan(item.Data["org"], item.Data["repo"], long.Parse(item.Data["issueNumber"]), long.Parse(item.Data["parentNumber"]));
// postEvent EventType.DevPlanFinished
break;
default:
break;

View File

@@ -27,16 +27,6 @@ public class Dev : SemanticPersona
_logger = logger;
_ghService = ghService;
}
public async Task CreateIssue(string org, string repo, long parentNumber, string input)
{
var function = $"{nameof(Developer)}.{nameof(Developer.Implement)}";
var devIssue = await _ghService.CreateIssue(org, repo, input, function, parentNumber);
_state.State.ParentIssueNumber = parentNumber;
_state.State.CommentId = devIssue.CommentId;
await _state.WriteStateAsync();
}
public async Task<string> GenerateCode(string ask)
{
try
@@ -71,24 +61,19 @@ public class Dev : SemanticPersona
return default;
}
}
// -> Dev
// -> CodeGenerationRequested
// -> CodeGenerated
// -> ChainClosed
// -> CodeFinished
public async override Task HandleEvent(Event item, StreamSequenceToken? token)
{
switch (item.Type)
{
case EventType.NewAsk:
await CreateIssue(item.Data["org"], item.Data["repo"], long.Parse(item.Data["parentNumber"]) , item.Message);
break;
case EventType.NewAskImplement:
case EventType.CodeGenerationRequested:
var code = await GenerateCode(item.Message);
await _ghService.PostComment(item.Data["org"], item.Data["repo"], long.Parse(item.Data["issueNumber"]), code);
// postEvent EventType.CodeGenerated
break;
case EventType.ChainClosed:
await CloseImplementation();
// postEvent EventType.CodeFinished
break;
default:
break;

View File

@@ -24,19 +24,6 @@ public class Hubber : Grain, IGrainWithStringKey
await stream.SubscribeAsync(HandleEvent);
}
// -> Hubber
// -> NewAsk
// -> create PM issue
// -> create DevLead issue
// -> ReadmeGenerated
// -> post comment
// -> DevPlanGenerated
// -> post comment
// -> DevPlanFinished
// -> for each step, create Dev issue
// -> CodeGenerated
// -> post comment
public async Task HandleEvent(Event item, StreamSequenceToken? token)
{
switch (item.Type)
@@ -48,19 +35,26 @@ public class Hubber : Grain, IGrainWithStringKey
var parentNumber = long.Parse(item.Data["parentNumber"]);
var pmIssue = await CreateIssue(org, repo, input, "", parentNumber);
var devLeadIssue = await CreateIssue(org, repo, input, "", parentNumber);
// TODO: store the mapping of parent/child?
break;
case EventType.NewAskReadme:
case EventType.ReadmeGenerated:
// _ghService.PostComment(item.Data["org"], item.Data["repo"], long.Parse(item.Data["issueNumber"]), item.Message);
break;
case EventType.ChainClosed:
case EventType.DevPlanGenerated:
// _ghService.PostComment(item.Data["org"], item.Data["repo"], long.Parse(item.Data["issueNumber"]), item.Message);
break;
case EventType.CodeGenerated:
// _ghService.PostComment(item.Data["org"], item.Data["repo"], long.Parse(item.Data["issueNumber"]), item.Message);
break;
case EventType.DevPlanChainClosed:
// for each step, create Dev issue
//var devIssues = await CreateIssue(org, repo, input, "", parentNumber);
break;
default:
break;
}
}
public async Task<NewIssueResponse> CreateIssue(string org, string repo, string input, string function, long parentNumber)
{
return await _ghService.CreateIssue(org, repo,input,function,parentNumber);

View File

@@ -36,43 +36,23 @@ public class ProductManager : SemanticPersona
await stream.SubscribeAsync(HandleEvent);
}
// -> PM
// -> ReadmeRequested
// -> ReadmeGenerated
// -> ChainClosed
// -> ReadmeFinished
public async override Task HandleEvent(Event item, StreamSequenceToken? token)
{
switch (item.Type)
{
case EventType.NewAsk:
await CreateIssue(item.Data["org"], item.Data["repo"], long.Parse(item.Data["issueNumber"]) , item.Message);
break;
case EventType.NewAskReadme:
case EventType.ReadmeRequested:
var readme = await CreateReadme(item.Message);
await _ghService.PostComment(item.Data["org"], item.Data["repo"], long.Parse(item.Data["issueNumber"]), readme);
// postEvent ReadmeGenerated
break;
case EventType.ChainClosed:
await CloseReadme();
// postEvent ReadmeFinished
break;
default:
break;
}
}
public async Task CreateIssue(string org, string repo, long parentNumber, string input)
{
//TODO: Create branch and PR
var function = $"{nameof(PM)}.{nameof(PM.Readme)}";
var pmIssue = await _ghService.CreateIssue(org, repo, input, function, parentNumber);
_state.State.ParentIssueNumber = parentNumber;
_state.State.CommentId = pmIssue.CommentId;
await _state.WriteStateAsync();
}
public async Task<string> CreateReadme(string ask)
{
try