From 0cd4e32f23dd778c972f97743f1cec506101bebf Mon Sep 17 00:00:00 2001 From: Kosta Petan Date: Thu, 16 Nov 2023 19:59:35 +0000 Subject: [PATCH] simple dev understanding --- .../Actors/Developer/Developer.cs | 30 +++++++++++++++---- .../Actors/Ingester/Ingester.cs | 1 + .../Actors/SemanticPersona.cs | 9 +++++- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/libs/Microsoft.AI.DevTeam/Actors/Developer/Developer.cs b/src/libs/Microsoft.AI.DevTeam/Actors/Developer/Developer.cs index 4e1d5afdc..e215318d0 100644 --- a/src/libs/Microsoft.AI.DevTeam/Actors/Developer/Developer.cs +++ b/src/libs/Microsoft.AI.DevTeam/Actors/Developer/Developer.cs @@ -16,7 +16,7 @@ public class Dev : SemanticPersona, IDevelopCode protected override string MemorySegment => "dev-memory"; - public Dev([PersistentState("state", "messages")] IPersistentState state,IKernel kernel,ISemanticTextMemory memory, ILogger logger) : base(state) + public Dev([PersistentState("state", "messages")] IPersistentState state, IKernel kernel, ISemanticTextMemory memory, ILogger logger) : base(state) { _kernel = kernel; _memory = memory; @@ -51,7 +51,7 @@ public class Dev : SemanticPersona, IDevelopCode return resultMessage; } - catch(Exception ex) + catch (Exception ex) { _logger.LogError(ex, "Error generating code"); return default; @@ -65,8 +65,28 @@ public class Dev : SemanticPersona, IDevelopCode throw new NotImplementedException(); } - public Task BuildUnderstanding(string content) + public async Task BuildUnderstanding(string content) { - throw new NotImplementedException(); + var explainFunction = _kernel.CreateSemanticFunction(Developer.Explain, new OpenAIRequestSettings { MaxTokens = 15000, Temperature = 0.8, TopP = 1 }); + var consolidateFunction = _kernel.CreateSemanticFunction(Developer.ConsolidateUnderstanding, new OpenAIRequestSettings { MaxTokens = 15000, Temperature = 0.8, TopP = 1 }); + var explainContext = new ContextVariables(); + explainContext.Set("input", content); + var explainResult = await _kernel.RunAsync(explainContext, explainFunction); + var explainMesage = explainResult.ToString(); + + var consolidateContext = new ContextVariables(); + consolidateContext.Set("input", _state.State.Understanding); + consolidateContext.Set("newUnderstanding", explainMesage); + + var consolidateResult = await _kernel.RunAsync(consolidateContext, consolidateFunction); + var consolidateMessage = consolidateResult.ToString(); + + _state.State.Understanding = consolidateMessage; + await _state.WriteStateAsync(); + + return new UnderstandingResult { + NewUnderstanding = consolidateMessage, + Explanation = explainMesage + }; } -} +} \ No newline at end of file diff --git a/src/libs/Microsoft.AI.DevTeam/Actors/Ingester/Ingester.cs b/src/libs/Microsoft.AI.DevTeam/Actors/Ingester/Ingester.cs index 6fd2d003a..74faa6be4 100644 --- a/src/libs/Microsoft.AI.DevTeam/Actors/Ingester/Ingester.cs +++ b/src/libs/Microsoft.AI.DevTeam/Actors/Ingester/Ingester.cs @@ -34,6 +34,7 @@ public class Ingester : SemanticPersona, IIngestRepo codeAnalysis.ToList().ForEach(async c => await _memory.SaveInformationAsync(MemorySegment, c.CodeBlock, Guid.NewGuid().ToString(), c.Meaning)); + // TODO: do something with the result await dev.BuildUnderstanding(file.Content); } } diff --git a/src/libs/Microsoft.AI.DevTeam/Actors/SemanticPersona.cs b/src/libs/Microsoft.AI.DevTeam/Actors/SemanticPersona.cs index 392b02e2a..340e06798 100644 --- a/src/libs/Microsoft.AI.DevTeam/Actors/SemanticPersona.cs +++ b/src/libs/Microsoft.AI.DevTeam/Actors/SemanticPersona.cs @@ -41,9 +41,16 @@ public interface IChatHistory public interface IUnderstand { - Task BuildUnderstanding(string content); + Task BuildUnderstanding(string content); } +[GenerateSerializer] +public class UnderstandingResult { + [Id(0)] + public string NewUnderstanding { get; set; } + [Id(1)] + public string Explanation { get; set; } +} [Serializable] public class ChatHistoryItem