diff --git a/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Chat/ChatCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Chat/ChatCompletionProvider.cs index 660722ddb..9cd11ef4e 100644 --- a/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Chat/ChatCompletionProvider.cs +++ b/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Chat/ChatCompletionProvider.cs @@ -367,42 +367,8 @@ public async Task GetChatCompletionsStreamingAsync(Agent agent, // Prepare instruction and functions var renderData = agentService.CollectRenderData(agent); var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent, renderData); - if (!string.IsNullOrWhiteSpace(instruction)) - { - renderedInstructions.Add(instruction); - messages.Add(new SystemChatMessage(instruction)); - } - - // Render functions - if (options.WebSearchOptions == null) - { - foreach (var function in functions) - { - if (!agentService.RenderFunction(agent, function, renderData)) - { - continue; - } - - var property = agentService.RenderFunctionProperty(agent, function, renderData); - - options.Tools.Add(ChatTool.CreateFunctionTool( - functionName: function.Name, - functionDescription: function.Description, - functionParameters: BinaryData.FromObjectAsJson(property))); - } - } - - if (!string.IsNullOrEmpty(agent.Knowledges)) - { - messages.Add(new SystemChatMessage(agent.Knowledges)); - } - - var samples = ProviderHelper.GetChatSamples(agent.Samples); - foreach (var sample in samples) - { - messages.Add(sample.Role == AgentRole.User ? new UserChatMessage(sample.Content) : new AssistantChatMessage(sample.Content)); - } + // Build messages var filteredMessages = conversations.Select(x => x).ToList(); var firstUserMsgIdx = filteredMessages.FindIndex(x => x.Role == AgentRole.User); if (firstUserMsgIdx > 0) @@ -453,6 +419,43 @@ public async Task GetChatCompletionsStreamingAsync(Agent agent, } } + // Build system messages + if (!string.IsNullOrWhiteSpace(instruction)) + { + renderedInstructions.Add(instruction); + messages.Add(new SystemChatMessage(instruction)); + } + + if (!string.IsNullOrEmpty(agent.Knowledges)) + { + messages.Add(new SystemChatMessage(agent.Knowledges)); + } + + var samples = ProviderHelper.GetChatSamples(agent.Samples); + foreach (var sample in samples) + { + messages.Add(sample.Role == AgentRole.User ? new UserChatMessage(sample.Content) : new AssistantChatMessage(sample.Content)); + } + + // Render functions + if (options.WebSearchOptions == null) + { + foreach (var function in functions) + { + if (!agentService.RenderFunction(agent, function, renderData)) + { + continue; + } + + var property = agentService.RenderFunctionProperty(agent, function, renderData); + + options.Tools.Add(ChatTool.CreateFunctionTool( + functionName: function.Name, + functionDescription: function.Description, + functionParameters: BinaryData.FromObjectAsJson(property))); + } + } + var prompt = GetPrompt(messages, options); return (prompt, messages, options); } diff --git a/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Realtime/RealTimeCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Realtime/RealTimeCompletionProvider.cs index b023f94d5..4baf42b62 100644 --- a/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Realtime/RealTimeCompletionProvider.cs +++ b/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Realtime/RealTimeCompletionProvider.cs @@ -575,37 +575,8 @@ private async Task OnUserAudioTranscriptionCompleted(RealtimeHu // Prepare instruction and functions var renderData = agentService.CollectRenderData(agent); var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent, renderData); - if (!string.IsNullOrWhiteSpace(instruction)) - { - messages.Add(new SystemChatMessage(instruction)); - } - - foreach (var function in functions) - { - if (!agentService.RenderFunction(agent, function, renderData)) - { - continue; - } - - var property = agentService.RenderFunctionProperty(agent, function, renderData); - - options.Tools.Add(ChatTool.CreateFunctionTool( - functionName: function.Name, - functionDescription: function.Description, - functionParameters: BinaryData.FromObjectAsJson(property))); - } - - if (!string.IsNullOrEmpty(agent.Knowledges)) - { - messages.Add(new SystemChatMessage(agent.Knowledges)); - } - - var samples = ProviderHelper.GetChatSamples(agent.Samples); - foreach (var sample in samples) - { - messages.Add(sample.Role == AgentRole.User ? new UserChatMessage(sample.Content) : new AssistantChatMessage(sample.Content)); - } - + + // Build messages var filteredMessages = conversations.Select(x => x).ToList(); var firstUserMsgIdx = filteredMessages.FindIndex(x => x.Role == AgentRole.User); if (firstUserMsgIdx > 0) @@ -634,6 +605,39 @@ private async Task OnUserAudioTranscriptionCompleted(RealtimeHu } } + // Build system messages + if (!string.IsNullOrWhiteSpace(instruction)) + { + messages.Add(new SystemChatMessage(instruction)); + } + + if (!string.IsNullOrEmpty(agent.Knowledges)) + { + messages.Add(new SystemChatMessage(agent.Knowledges)); + } + + var samples = ProviderHelper.GetChatSamples(agent.Samples); + foreach (var sample in samples) + { + messages.Add(sample.Role == AgentRole.User ? new UserChatMessage(sample.Content) : new AssistantChatMessage(sample.Content)); + } + + // Build functions + foreach (var function in functions) + { + if (!agentService.RenderFunction(agent, function, renderData)) + { + continue; + } + + var property = agentService.RenderFunctionProperty(agent, function, renderData); + + options.Tools.Add(ChatTool.CreateFunctionTool( + functionName: function.Name, + functionDescription: function.Description, + functionParameters: BinaryData.FromObjectAsJson(property))); + } + var prompt = GetPrompt(messages, options); return (prompt, messages, options); }