diff --git a/src/Infrastructure/BotSharp.Abstraction/Functions/Models/FunctionExecutionResult.cs b/src/Infrastructure/BotSharp.Abstraction/Functions/Models/FunctionExecutionResult.cs deleted file mode 100644 index 5cf77f75..00000000 --- a/src/Infrastructure/BotSharp.Abstraction/Functions/Models/FunctionExecutionResult.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Text.Json.Serialization; - -namespace BotSharp.Abstraction.Functions.Models; - -public class FunctionExecutionResult where T : new() -{ - private readonly string _name; - - public FunctionExecutionResult(string name) - { - _name = name; - } - - [JsonPropertyName("function_name")] - public string Name => _name; - - [JsonPropertyName("execution_result")] - public T Result { get; set; } = new T(); -} diff --git a/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationStorage.cs b/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationStorage.cs index d30fe413..873a5a6a 100644 --- a/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationStorage.cs +++ b/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationStorage.cs @@ -1,6 +1,5 @@ using BotSharp.Abstraction.Conversations.Models; using System.IO; -using Tensorflow; namespace BotSharp.Core.Conversations.Services; @@ -16,7 +15,7 @@ public class ConversationStorage : IConversationStorage { var conversationFile = GetStorageFile(agentId, conversationId); var sb = new StringBuilder(); - sb.AppendLine($"{dialog.Role}|{dialog.CreatedAt}"); + sb.AppendLine($"{dialog.Role}|{dialog.CreatedAt}|{dialog.FunctionName}"); sb.AppendLine($" - {dialog.Content}"); var conversation = sb.ToString(); File.AppendAllText(conversationFile, conversation); @@ -35,8 +34,10 @@ public class ConversationStorage : IConversationStorage var role = meta.Split('|')[0]; var createdAt = DateTime.Parse(meta.Split('|')[1]); var text = dialog.Substring(4); + var funcName = meta.Split('|')[2]; results.Add(new RoleDialogModel(role, text) { + FunctionName = funcName, CreatedAt = createdAt }); } diff --git a/src/Plugins/BotSharp.Plugin.AzureOpenAI/Providers/ChatCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.AzureOpenAI/Providers/ChatCompletionProvider.cs index 3b172314..1738611c 100644 --- a/src/Plugins/BotSharp.Plugin.AzureOpenAI/Providers/ChatCompletionProvider.cs +++ b/src/Plugins/BotSharp.Plugin.AzureOpenAI/Providers/ChatCompletionProvider.cs @@ -8,6 +8,7 @@ using BotSharp.Plugin.AzureOpenAI.Settings; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; +using System.Linq; using System.Text.Json; using System.Threading.Tasks; @@ -118,9 +119,7 @@ public class ChatCompletionProvider : IChatCompletion await onMessageReceived(funcContextIn); // After function is executed, pass the result to LLM - var fnResult = JsonSerializer.Deserialize>(funcContextIn.ExecutionResult); - var fnJsonResult = JsonSerializer.Serialize(fnResult.Result); - chatCompletionsOptions.Messages.Add(new ChatMessage(ChatRole.Function, fnJsonResult) + chatCompletionsOptions.Messages.Add(new ChatMessage(ChatRole.Function, funcContextIn.ExecutionResult) { Name = funcContextIn.FunctionName }); @@ -216,10 +215,9 @@ public class ChatCompletionProvider : IChatCompletion { if (message.Role == ChatRole.Function) { - var funcContext = JsonSerializer.Deserialize>(message.Content); chatCompletionsOptions.Messages.Add(new ChatMessage(message.Role, message.Content) { - Name = funcContext.Name + Name = message.FunctionName }); } else @@ -228,6 +226,7 @@ public class ChatCompletionProvider : IChatCompletion } } + _logger.LogInformation(string.Join("\n", chatCompletionsOptions.Messages.Select(x => $"{x.Role}: {x.Content}"))); return chatCompletionsOptions; } }