streaming rewrite WIP

This commit is contained in:
Kosta Petan 2024-02-27 22:05:22 +01:00
parent b72442a58f
commit 125608e372
6 changed files with 57 additions and 27 deletions

View File

@ -67,6 +67,7 @@ builder.Host.UseOrleans(siloBuilder =>
.AddMemoryStreams("StreamProvider")
.AddMemoryGrainStorage("PubSubStore")
.AddMemoryGrainStorage("messages");
siloBuilder.UseInMemoryReminderService();
siloBuilder.UseDashboard(x => x.HostSelf = true);
});

View File

@ -65,8 +65,6 @@ public class AgentState
{
public List<ChatHistoryItem> History { get; set; }
public string Understanding { get; set; }
public long ParentIssueNumber { get; set; }
public int CommentId { get; set; }
}
public enum ChatUserType

View File

@ -50,16 +50,16 @@ public class AzureGenie : Agent
var issueNumber = long.Parse(item.Data["issueNumber"]);
await Store(item.Data["org"], item.Data["repo"], parentNumber, issueNumber, "run", "sh", "output", item.Message);
await RunInSandbox(item.Data["org"], item.Data["repo"], parentNumber, issueNumber);
// await PublishEvent(Consts.MainNamespace, this.GetPrimaryKeyString(), new Event
// {
// Type = EventType.CodeCreated,
// Data = new Dictionary<string, string> {
// { "org", item.Data["org"] },
// { "repo", item.Data["repo"] },
// { "issueNumber", item.Data["issueNumber"] },
// { "parentNumber", item.Data["parentNumber"] }
// }
// });
await PublishEvent(Consts.MainNamespace, this.GetPrimaryKeyString(), new Event
{
Type = EventType.SandboxRunCreated,
Data = new Dictionary<string, string> {
{ "org", item.Data["org"] },
{ "repo", item.Data["repo"] },
{ "issueNumber", item.Data["issueNumber"] },
{ "parentNumber", item.Data["parentNumber"] }
}
});
}
break;

View File

@ -51,8 +51,18 @@ public class Dev : AiAgent
});
break;
case EventType.CodeChainClosed:
await CloseImplementation();
// postEvent EventType.CodeFinished
var lastCode = _state.State.History.Last().Message;
await PublishEvent(Consts.MainNamespace, this.GetPrimaryKeyString(), new Event {
Type = EventType.CodeCreated,
Data = new Dictionary<string, string> {
{ "org", item.Data["org"] },
{ "repo", item.Data["repo"] },
{ "issueNumber", item.Data["issueNumber"] },
{ "code", lastCode },
{ "parentNumber", item.Data["parentNumber"] }
},
Message = lastCode
});
break;
default:
break;

View File

@ -1,25 +1,40 @@
using Orleans.Runtime;
using Orleans.Streams;
using Orleans.Timers;
namespace Microsoft.AI.DevTeam;
public class Sandbox : Grain, IRemindable
[ImplicitStreamSubscription(Consts.MainNamespace)]
public class Sandbox : Agent, IRemindable
{
private const string ReminderName = "SandboxRunReminder";
private readonly IManageGithub _ghService;
private readonly IManageAzure _azService;
private readonly IReminderRegistry _reminderRegistry;
private IGrainReminder? _reminder;
protected readonly IPersistentState<SandboxMetadata> _state;
public Sandbox([PersistentState("state", "messages")] IPersistentState<SandboxMetadata> state, IManageGithub ghService,
public Sandbox([PersistentState("state", "messages")] IPersistentState<SandboxMetadata> state,
IReminderRegistry reminderRegistry, IManageAzure azService)
{
_ghService = ghService;
_reminderRegistry = reminderRegistry;
_azService = azService;
_state = state;
}
public override async Task HandleEvent(Event item, StreamSequenceToken? token)
{
switch(item.Type)
{
case EventType.SandboxRunCreated:
var org = item.Data["org"];
var repo = item.Data["repo"];
var parentIssueNumber = long.Parse(item.Data["parentIssueNumber"]);
var issueNumber = long.Parse(item.Data["issueNumber"]);
await ScheduleCommitSandboxRun(org, repo, parentIssueNumber, issueNumber);
break;
default:
break;
}
}
public async Task ScheduleCommitSandboxRun(string org, string repo, long parentIssueNumber, long issueNumber)
{
await StoreState(org, repo, parentIssueNumber, issueNumber);
@ -38,8 +53,16 @@ public class Sandbox : Grain, IRemindable
if (await _azService.IsSandboxCompleted(sandboxId))
{
await _azService.DeleteSandbox(sandboxId);
await _ghService.CommitToBranch(_state.State.Org, _state.State.Repo, _state.State.ParentIssueNumber, _state.State.IssueNumber, _state.State.RootDir, _state.State.Branch);
await _ghService.MarkTaskComplete(_state.State.Org, _state.State.Repo, _state.State.CommentId);
await PublishEvent(Consts.MainNamespace, this.GetPrimaryKeyString(), new Event
{
Type = EventType.SandboxRunFinished,
Data = new Dictionary<string, string> {
{ "org", _state.State.Org },
{ "repo", _state.State.Repo },
{ "issueNumber", _state.State.IssueNumber.ToString() },
{ "parentIssueNumber", _state.State.ParentIssueNumber.ToString() }
}
});
await Cleanup();
}
}
@ -54,7 +77,7 @@ public class Sandbox : Grain, IRemindable
_state.State.Org = org;
_state.State.Repo = repo;
_state.State.ParentIssueNumber = parentIssueNumber;
// TODO: Add all of the state properties
_state.State.IssueNumber = issueNumber;
_state.State.IsCompleted = false;
await _state.WriteStateAsync();
}
@ -66,6 +89,8 @@ public class Sandbox : Grain, IRemindable
this.GetGrainId(), _reminder);
await _state.WriteStateAsync();
}
}
@ -75,9 +100,5 @@ public class SandboxMetadata
public string Repo { get; set; }
public long ParentIssueNumber { get; set; }
public long IssueNumber { get; set; }
public string RootDir { get; set; }
public string Branch { get; set; }
public int CommentId { get; set; }
public bool IsCompleted { get; set; }
}

View File

@ -13,7 +13,6 @@ public class Event
public enum EventType
{
NewAsk,
ChainClosed,
ReadmeChainClosed,
CodeChainClosed,
CodeGenerationRequested,
@ -27,5 +26,6 @@ public enum EventType
SandboxRunFinished,
ReadmeCreated,
CodeCreated,
DevPlanCreated
DevPlanCreated,
SandboxRunCreated
}