From 75283b3f70f0ed77abfb58c82131ec59b1d1963c Mon Sep 17 00:00:00 2001 From: Ryan Sweet Date: Mon, 10 Jul 2023 18:34:46 -0700 Subject: [PATCH] Semantic Kernel Activity roudtrips when executing workflow but I cant get it to set the result in the workflow context. --- .../Activities/SemanticKernelSkillRequest.cs | 24 ++++++++++-------- Elsa.SemanticKernel/Config/PromptDefaults.cs | 7 +++++ WorkflowsApp/.env | 7 +++++ WorkflowsApp/elsa.sqlite.db | Bin 110592 -> 4096 bytes WorkflowsApp/elsa.sqlite.db-shm | Bin 0 -> 32768 bytes WorkflowsApp/elsa.sqlite.db-wal | Bin 0 -> 251352 bytes skills/Chat.cs | 21 +++++++++++++++ skills/SemanticFunctionConfig.cs | 1 + 8 files changed, 49 insertions(+), 11 deletions(-) create mode 100644 Elsa.SemanticKernel/Config/PromptDefaults.cs create mode 100644 WorkflowsApp/.env create mode 100644 WorkflowsApp/elsa.sqlite.db-shm create mode 100644 WorkflowsApp/elsa.sqlite.db-wal create mode 100644 skills/Chat.cs diff --git a/Elsa.SemanticKernel/Activities/SemanticKernelSkillRequest.cs b/Elsa.SemanticKernel/Activities/SemanticKernelSkillRequest.cs index b31429658..c8027c7d2 100644 --- a/Elsa.SemanticKernel/Activities/SemanticKernelSkillRequest.cs +++ b/Elsa.SemanticKernel/Activities/SemanticKernelSkillRequest.cs @@ -19,20 +19,20 @@ using skills; /// /// Invoke a Semantic Kernel skill. /// -[Activity("Elsa", "SemanticKernelSkill", "Invoke a Semantic Kernel skill. ", DisplayName = "Semantic Kernel Skill", Kind = ActivityKind.Task)] +[Activity("Elsa", "AI Chat", "Invoke a Semantic Kernel skill. ", DisplayName = "Semantic Kernel Skill", Kind = ActivityKind.Task)] [PublicAPI] public class SemanticKernelSkill : CodeActivity { [Input( - Description = "System Prompt.", - UIHint = InputUIHints.MultiText, - DefaultValue = new string[0])] - public Input SystemPrompt { get; set; } = default!; + Description = "System Prompt", + UIHint = InputUIHints.MultiLine, + DefaultValue = PromptDefaults.SystemPrompt)] + public Input SysPrompt { get; set; } = default!; [Input( - Description = "User Input Prompt.", - UIHint = InputUIHints.MultiText, - DefaultValue = new string[0])] + Description = "User Input Prompt", + UIHint = InputUIHints.MultiLine, + DefaultValue = PromptDefaults.UserPrompt)] public Input Prompt { get; set; } [Input( @@ -44,13 +44,13 @@ public class SemanticKernelSkill : CodeActivity [Input( Description = "The skill to invoke from the semantic kernel", UIHint = InputUIHints.SingleLine, - DefaultValue = "PM")] + DefaultValue = "Chat")] public Input SkillName { get; set; } [Input( Description = "The function to invoke from the skill", UIHint = InputUIHints.SingleLine, - DefaultValue = "README")] + DefaultValue = "ChatCompletion")] public Input FunctionName { get; set; } /// @@ -58,7 +58,7 @@ public class SemanticKernelSkill : CodeActivity { var skillName = SkillName.Get(context); var functionName = FunctionName.Get(context); - var systemPrompt = SystemPrompt.Get(context); + var systemPrompt = SysPrompt.Get(context); var prompt = Prompt.Get(context); var maxRetries = MaxRetries.Get(context); var result = await ChatCompletion(skillName, functionName, prompt, maxRetries); @@ -114,6 +114,8 @@ public class SemanticKernelSkill : CodeActivity var answer = await kernel.RunAsync(context, function).ConfigureAwait(false); var result = typeof(T) != typeof(string) ? JsonSerializer.Deserialize(answer.ToString()) : (T)(object)answer.ToString(); + //debug output to console + Console.WriteLine($"Skill: {skillName} Function: {functionName} Prompt: {prompt} Answer: {result}"); return result; } } \ No newline at end of file diff --git a/Elsa.SemanticKernel/Config/PromptDefaults.cs b/Elsa.SemanticKernel/Config/PromptDefaults.cs new file mode 100644 index 000000000..6f5a16c75 --- /dev/null +++ b/Elsa.SemanticKernel/Config/PromptDefaults.cs @@ -0,0 +1,7 @@ +internal static class PromptDefaults { + public const string SystemPrompt = @"You are fulfilling roles on a software development team. + Provide a response to the following prompt, do not provide any additional output."; + + public const string UserPrompt = @"Let's build a ToDoList Application!"; + + } \ No newline at end of file diff --git a/WorkflowsApp/.env b/WorkflowsApp/.env new file mode 100644 index 000000000..059289bb5 --- /dev/null +++ b/WorkflowsApp/.env @@ -0,0 +1,7 @@ +export EMBEDDINGDEPLOYMENTORMODELID=text-embedding-ada-002 +export SERVICEID=gpt-4 +export SERVICETYPE=AzureOpenAI +export ENDPOINT=https://lightspeed-team-shared-openai-eastus.openai.azure.com/ +export DEPLOYMENTORMODELID=gpt-4 +export APIKEY=3a6944607e2048668f61125aff47ba3f + diff --git a/WorkflowsApp/elsa.sqlite.db b/WorkflowsApp/elsa.sqlite.db index 4eec189fb07ba414ba29493fa7050b909a4136b3..ca2e1dcd41b5e054a089494f52adf9e106e36be2 100644 GIT binary patch delta 26 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

K#x10#}bI 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 (skillName, functionName) switch { + (nameof(Chat), nameof(Chat.ChatCompletion)) => Chat.ChatCompletion, (nameof(PM), nameof(PM.BootstrapProject)) => PM.BootstrapProject, (nameof(PM), nameof(PM.Readme)) => PM.Readme, (nameof(DevLead), nameof(DevLead.Plan)) => DevLead.Plan,