From 9171ea310cd85049f800b6a3030dcdb2507da048 Mon Sep 17 00:00:00 2001 From: Jicheng Lu Date: Sun, 22 Dec 2024 23:04:09 -0600 Subject: [PATCH] refine code --- .../Chat/GeminiChatCompletionProvider.cs | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/src/Plugins/BotSharp.Plugin.GoogleAI/Providers/Chat/GeminiChatCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.GoogleAI/Providers/Chat/GeminiChatCompletionProvider.cs index b94dd534..87286f77 100644 --- a/src/Plugins/BotSharp.Plugin.GoogleAI/Providers/Chat/GeminiChatCompletionProvider.cs +++ b/src/Plugins/BotSharp.Plugin.GoogleAI/Providers/Chat/GeminiChatCompletionProvider.cs @@ -102,11 +102,11 @@ public class GeminiChatCompletionProvider : IChatCompletion aiModel.UseGrounding = googleSettings.Gemini.UseGrounding; // Assembly messages - var prompt = string.Empty; var contents = new List(); var tools = new List(); var funcDeclarations = new List(); + var systemPrompts = new List(); if (!string.IsNullOrEmpty(agent.Instruction)) { var instruction = agentService.RenderedInstruction(agent); @@ -115,10 +115,10 @@ public class GeminiChatCompletionProvider : IChatCompletion Role = AgentRole.User }); - prompt += $"{instruction}\r\n"; + systemPrompts.Add(instruction); } - prompt += "\r\n[FUNCTIONS]\r\n"; + var funcPrompts = new List(); foreach (var function in agent.Functions) { if (!agentService.RenderFunction(agent, function)) continue; @@ -137,7 +137,7 @@ public class GeminiChatCompletionProvider : IChatCompletion } }); - prompt += $"{function.Name}: {function.Description} {def}\r\n\r\n"; + funcPrompts.Add($"{function.Name}: {function.Description} {def}"); } if (!funcDeclarations.IsNullOrEmpty()) @@ -145,7 +145,7 @@ public class GeminiChatCompletionProvider : IChatCompletion tools.Add(new Tool { FunctionDeclarations = funcDeclarations }); } - prompt += "\r\n[CONVERSATIONS]\r\n"; + var convPrompts = new List(); foreach (var message in conversations) { if (message.Role == AgentRole.Function) @@ -163,7 +163,7 @@ public class GeminiChatCompletionProvider : IChatCompletion } }); - prompt += $"{AgentRole.Assistant}: Call function {message.FunctionName}({message.FunctionArgs})\r\n"; + convPrompts.Add($"{AgentRole.Assistant}: Call function {message.FunctionName}({message.FunctionArgs})"); } else if (message.Role == AgentRole.User) { @@ -172,7 +172,7 @@ public class GeminiChatCompletionProvider : IChatCompletion { Role = AgentRole.User }); - prompt += $"{AgentRole.User}: {text}\r\n"; + convPrompts.Add($"{AgentRole.User}: {text}"); } else if (message.Role == AgentRole.Assistant) { @@ -180,7 +180,7 @@ public class GeminiChatCompletionProvider : IChatCompletion { Role = AgentRole.Model }); - prompt += $"{AgentRole.Assistant}: {message.Content}\r\n"; + convPrompts.Add($"{AgentRole.Assistant}: {message.Content}"); } } @@ -189,6 +189,29 @@ public class GeminiChatCompletionProvider : IChatCompletion Contents = contents, Tools = tools }; + + var prompt = GetPrompt(systemPrompts, funcPrompts, convPrompts); return (prompt, request); } + + private string GetPrompt(IEnumerable systemPrompts, IEnumerable funcPrompts, IEnumerable convPrompts) + { + var prompt = string.Empty; + + prompt = string.Join("\r\n\r\n", systemPrompts); + + if (!funcPrompts.IsNullOrEmpty()) + { + prompt += "\r\n[FUNCTIONS]\r\n"; + prompt += string.Join("\r\n", funcPrompts); + } + + if (!convPrompts.IsNullOrEmpty()) + { + prompt += "\r\n[CONVERSATION]\r\n"; + prompt += string.Join("\r\n", convPrompts); + } + + return prompt; + } }