diff --git a/src/Infrastructure/BotSharp.Abstraction/Agents/IAgentService.cs b/src/Infrastructure/BotSharp.Abstraction/Agents/IAgentService.cs
index e2905976b..c195df5e9 100644
--- a/src/Infrastructure/BotSharp.Abstraction/Agents/IAgentService.cs
+++ b/src/Infrastructure/BotSharp.Abstraction/Agents/IAgentService.cs
@@ -29,19 +29,18 @@ public interface IAgentService
///
Task InheritAgent(Agent agent);
- string RenderInstruction(Agent agent);
+ string RenderInstruction(Agent agent, Dictionary? renderData = null);
- string RenderTemplate(Agent agent, string templateName);
+ string RenderTemplate(Agent agent, string templateName, Dictionary? renderData = null);
- bool RenderFunction(Agent agent, FunctionDef def);
+ bool RenderFunction(Agent agent, FunctionDef def, Dictionary? renderData = null);
- FunctionParametersDef? RenderFunctionProperty(Agent agent, FunctionDef def);
+ FunctionParametersDef? RenderFunctionProperty(Agent agent, FunctionDef def, Dictionary? renderData = null);
- (string, IEnumerable) PrepareInstructionAndFunctions(Agent agent, StringComparer? comparer = null);
- IEnumerable FilterFunctions(string instruction, Agent agent, StringComparer? comparer = null);
- IEnumerable FilterFunctions(string instruction, IEnumerable functions, StringComparer? comparer = null);
+ (string, IEnumerable) PrepareInstructionAndFunctions(Agent agent, Dictionary? renderData = null, StringComparer? comparer = null);
bool RenderVisibility(string? visibilityExpression, Dictionary dict);
+ Dictionary CollectRenderData(Agent agent);
///
diff --git a/src/Infrastructure/BotSharp.Core/Agents/Hooks/BasicAgentHook.cs b/src/Infrastructure/BotSharp.Core/Agents/Hooks/BasicAgentHook.cs
index 2620765e3..a8bafdd25 100644
--- a/src/Infrastructure/BotSharp.Core/Agents/Hooks/BasicAgentHook.cs
+++ b/src/Infrastructure/BotSharp.Core/Agents/Hooks/BasicAgentHook.cs
@@ -63,17 +63,18 @@ public override void OnAgentUtilityLoaded(Agent agent)
var agentService = _services.GetRequiredService();
var innerUtilities = utilities!.Where(x => !string.IsNullOrEmpty(x.Name) && !x.Disabled).ToList();
+ var renderDict = agentService.CollectRenderData(agent);
var functionNames = new List();
var templateNames = new List();
foreach (var utility in innerUtilities)
{
- var isVisible = agentService.RenderVisibility(utility.VisibilityExpression, agent.TemplateDict);
+ var isVisible = agentService.RenderVisibility(utility.VisibilityExpression, renderDict);
if (!isVisible || utility.Items.IsNullOrEmpty()) continue;
foreach (var item in utility.Items)
{
- isVisible = agentService.RenderVisibility(item.VisibilityExpression, agent.TemplateDict);
+ isVisible = agentService.RenderVisibility(item.VisibilityExpression, renderDict);
if (!isVisible) continue;
if (item.FunctionName?.StartsWith(UTIL_PREFIX) == true)
diff --git a/src/Infrastructure/BotSharp.Core/Agents/Services/AgentService.Rendering.cs b/src/Infrastructure/BotSharp.Core/Agents/Services/AgentService.Rendering.cs
index 9675c5e69..00f50a1db 100644
--- a/src/Infrastructure/BotSharp.Core/Agents/Services/AgentService.Rendering.cs
+++ b/src/Infrastructure/BotSharp.Core/Agents/Services/AgentService.Rendering.cs
@@ -7,7 +7,7 @@ namespace BotSharp.Core.Agents.Services;
public partial class AgentService
{
- public string RenderInstruction(Agent agent)
+ public string RenderInstruction(Agent agent, Dictionary? renderData = null)
{
var render = _services.GetRequiredService();
var conv = _services.GetRequiredService();
@@ -18,19 +18,16 @@ public string RenderInstruction(Agent agent)
instructions.AddRange(secondaryInstructions);
// update states
- var renderDict = new Dictionary(agent.TemplateDict);
- foreach (var t in conv.States.GetStates())
- {
- renderDict[t.Key] = t.Value;
- }
-
+ var renderDict = renderData != null ? new Dictionary(renderData ?? []) : CollectRenderData(agent);
renderDict[TemplateRenderConstant.RENDER_AGENT] = agent;
+
var res = render.Render(string.Join("\r\n", instructions), renderDict);
return res;
}
- public bool RenderFunction(Agent agent, FunctionDef def)
+ public bool RenderFunction(Agent agent, FunctionDef def, Dictionary? renderData = null)
{
+ var renderDict = renderData ?? agent.TemplateDict;
var isRender = true;
var channels = def.Channels;
@@ -48,18 +45,19 @@ public bool RenderFunction(Agent agent, FunctionDef def)
if (!string.IsNullOrWhiteSpace(def.VisibilityExpression))
{
- isRender = RenderVisibility(def.VisibilityExpression, agent.TemplateDict);
+ isRender = RenderVisibility(def.VisibilityExpression, renderDict);
}
return isRender;
}
- public FunctionParametersDef? RenderFunctionProperty(Agent agent, FunctionDef def)
+ public FunctionParametersDef? RenderFunctionProperty(Agent agent, FunctionDef def, Dictionary? renderData = null)
{
var parameterDef = def?.Parameters;
var propertyDef = parameterDef?.Properties;
if (propertyDef == null) return null;
+ var renderDict = renderData ?? agent.TemplateDict;
var visibleExpress = "visibility_expression";
var root = propertyDef.RootElement;
var iterator = root.EnumerateObject();
@@ -73,7 +71,7 @@ public bool RenderFunction(Agent agent, FunctionDef def)
if (node.TryGetProperty(visibleExpress, out var element))
{
var expression = element.GetString();
- matched = RenderVisibility(expression, agent.TemplateDict);
+ matched = RenderVisibility(expression, renderDict);
}
if (matched)
@@ -107,37 +105,19 @@ public bool RenderFunction(Agent agent, FunctionDef def)
return parameterDef;
}
- public (string, IEnumerable) PrepareInstructionAndFunctions(Agent agent, StringComparer? comparer = null)
+ public (string, IEnumerable) PrepareInstructionAndFunctions(Agent agent, Dictionary? renderData = null, StringComparer ? comparer = null)
{
var text = string.Empty;
if (!string.IsNullOrEmpty(agent.Instruction) || !agent.SecondaryInstructions.IsNullOrEmpty())
{
- text = RenderInstruction(agent);
+ text = RenderInstruction(agent, renderData);
}
var functions = FilterFunctions(text, agent, comparer);
return (text, functions);
}
- public IEnumerable FilterFunctions(string instruction, Agent agent, StringComparer? comparer = null)
- {
- var functions = agent.Functions.Concat(agent.SecondaryFunctions ?? []);
- if (agent.FuncVisMode.IsEqualTo(AgentFuncVisMode.Auto) && !string.IsNullOrWhiteSpace(instruction))
- {
- functions = FilterFunctions(instruction, functions, comparer);
- }
- return functions;
- }
-
- public IEnumerable FilterFunctions(string instruction, IEnumerable functions, StringComparer? comparer = null)
- {
- comparer = comparer ?? StringComparer.OrdinalIgnoreCase;
- var matches = Regex.Matches(instruction, @"\b[A-Za-z0-9_-]+\b");
- var words = new HashSet(matches.Select(m => m.Value), comparer);
- return functions.Where(x => words.Contains(x.Name, comparer));
- }
-
- public string RenderTemplate(Agent agent, string templateName)
+ public string RenderTemplate(Agent agent, string templateName, Dictionary? renderData = null)
{
var conv = _services.GetRequiredService();
var render = _services.GetRequiredService();
@@ -145,14 +125,11 @@ public string RenderTemplate(Agent agent, string templateName)
var template = agent.Templates.FirstOrDefault(x => x.Name == templateName)?.Content ?? string.Empty;
// update states
- foreach (var t in conv.States.GetStates())
- {
- agent.TemplateDict[t.Key] = t.Value;
- }
+ var renderDict = renderData != null ? new Dictionary(renderData ?? []) : CollectRenderData(agent);
+ renderDict[TemplateRenderConstant.RENDER_AGENT] = agent;
// render liquid template
- agent.TemplateDict[TemplateRenderConstant.RENDER_AGENT] = agent;
- var content = render.Render(template, agent.TemplateDict);
+ var content = render.Render(template, renderDict);
HookEmitter.Emit(_services, async hook => await hook.OnRenderingTemplate(agent, templateName, content),
agent.Id).Wait();
@@ -175,4 +152,37 @@ public bool RenderVisibility(string? visibilityExpression, Dictionary CollectRenderData(Agent agent)
+ {
+ var state = _services.GetRequiredService();
+
+ var renderDict = new Dictionary(agent?.TemplateDict ?? []);
+ foreach (var t in state.GetStates())
+ {
+ renderDict[t.Key] = t.Value;
+ }
+
+ return renderDict;
+ }
+
+ #region Private methods
+ private IEnumerable FilterFunctions(string instruction, Agent agent, StringComparer? comparer = null)
+ {
+ var functions = agent.Functions.Concat(agent.SecondaryFunctions ?? []);
+ if (agent.FuncVisMode.IsEqualTo(AgentFuncVisMode.Auto) && !string.IsNullOrWhiteSpace(instruction))
+ {
+ functions = FilterFunctions(instruction, functions, comparer);
+ }
+ return functions;
+ }
+
+ private IEnumerable FilterFunctions(string instruction, IEnumerable functions, StringComparer? comparer = null)
+ {
+ comparer = comparer ?? StringComparer.OrdinalIgnoreCase;
+ var matches = Regex.Matches(instruction, @"\b[A-Za-z0-9_-]+\b");
+ var words = new HashSet(matches.Select(m => m.Value), comparer);
+ return functions.Where(x => words.Contains(x.Name, comparer));
+ }
+ #endregion
}
diff --git a/src/Plugins/BotSharp.Plugin.AnthropicAI/Providers/ChatCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.AnthropicAI/Providers/ChatCompletionProvider.cs
index 31c1e2300..676c182f1 100644
--- a/src/Plugins/BotSharp.Plugin.AnthropicAI/Providers/ChatCompletionProvider.cs
+++ b/src/Plugins/BotSharp.Plugin.AnthropicAI/Providers/ChatCompletionProvider.cs
@@ -108,7 +108,8 @@ public Task GetChatCompletionsStreamingAsync(Agent agent, List<
renderedInstructions = [];
// Prepare instruction and functions
- var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent);
+ var renderData = agentService.CollectRenderData(agent);
+ var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent, renderData);
if (!string.IsNullOrWhiteSpace(instruction))
{
renderedInstructions.Add(instruction);
diff --git a/src/Plugins/BotSharp.Plugin.AzureOpenAI/Providers/Chat/ChatCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.AzureOpenAI/Providers/Chat/ChatCompletionProvider.cs
index dcbe3e76c..8aaf043a4 100644
--- a/src/Plugins/BotSharp.Plugin.AzureOpenAI/Providers/Chat/ChatCompletionProvider.cs
+++ b/src/Plugins/BotSharp.Plugin.AzureOpenAI/Providers/Chat/ChatCompletionProvider.cs
@@ -372,7 +372,8 @@ public async Task GetChatCompletionsStreamingAsync(Agent agent,
var options = InitChatCompletionOption(agent);
// Prepare instruction and functions
- var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent);
+ var renderData = agentService.CollectRenderData(agent);
+ var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent, renderData);
if (!string.IsNullOrWhiteSpace(instruction))
{
renderedInstructions.Add(instruction);
@@ -384,9 +385,12 @@ public async Task GetChatCompletionsStreamingAsync(Agent agent,
{
foreach (var function in functions)
{
- if (!agentService.RenderFunction(agent, function)) continue;
+ if (!agentService.RenderFunction(agent, function, renderData))
+ {
+ continue;
+ }
- var property = agentService.RenderFunctionProperty(agent, function);
+ var property = agentService.RenderFunctionProperty(agent, function, renderData);
options.Tools.Add(ChatTool.CreateFunctionTool(
functionName: function.Name,
@@ -395,18 +399,6 @@ public async Task GetChatCompletionsStreamingAsync(Agent agent,
}
}
- foreach (var function in functions)
- {
- if (!agentService.RenderFunction(agent, function)) continue;
-
- var property = agentService.RenderFunctionProperty(agent, function);
-
- 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));
diff --git a/src/Plugins/BotSharp.Plugin.DeepSeekAI/Providers/Chat/ChatCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.DeepSeekAI/Providers/Chat/ChatCompletionProvider.cs
index 0ffdf5719..cb661aaae 100644
--- a/src/Plugins/BotSharp.Plugin.DeepSeekAI/Providers/Chat/ChatCompletionProvider.cs
+++ b/src/Plugins/BotSharp.Plugin.DeepSeekAI/Providers/Chat/ChatCompletionProvider.cs
@@ -345,7 +345,8 @@ public void SetModelName(string model)
var options = InitChatCompletionOption(agent);
// Prepare instruction and functions
- var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent);
+ var renderData = agentService.CollectRenderData(agent);
+ var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent, renderData);
if (!string.IsNullOrWhiteSpace(instruction))
{
renderedInstructions.Add(instruction);
@@ -357,9 +358,12 @@ public void SetModelName(string model)
{
foreach (var function in functions)
{
- if (!agentService.RenderFunction(agent, function)) continue;
+ if (!agentService.RenderFunction(agent, function, renderData))
+ {
+ continue;
+ }
- var property = agentService.RenderFunctionProperty(agent, function);
+ var property = agentService.RenderFunctionProperty(agent, function, renderData);
options.Tools.Add(ChatTool.CreateFunctionTool(
functionName: function.Name,
diff --git a/src/Plugins/BotSharp.Plugin.GoogleAI/Providers/Chat/GeminiChatCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.GoogleAI/Providers/Chat/GeminiChatCompletionProvider.cs
index bf6879421..85674a4b8 100644
--- a/src/Plugins/BotSharp.Plugin.GoogleAI/Providers/Chat/GeminiChatCompletionProvider.cs
+++ b/src/Plugins/BotSharp.Plugin.GoogleAI/Providers/Chat/GeminiChatCompletionProvider.cs
@@ -198,7 +198,8 @@ public void SetModelName(string model)
var funcPrompts = new List();
// Prepare instruction and functions
- var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent);
+ var renderData = agentService.CollectRenderData(agent);
+ var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent, renderData);
if (!string.IsNullOrWhiteSpace(instruction))
{
renderedInstructions.Add(instruction);
@@ -207,9 +208,12 @@ public void SetModelName(string model)
foreach (var function in functions)
{
- if (!agentService.RenderFunction(agent, function)) continue;
+ if (!agentService.RenderFunction(agent, function, renderData))
+ {
+ continue;
+ }
- var def = agentService.RenderFunctionProperty(agent, function);
+ var def = agentService.RenderFunctionProperty(agent, function, renderData);
var props = JsonSerializer.Serialize(def?.Properties);
var parameters = !string.IsNullOrWhiteSpace(props) && props != "{}" ? new Schema()
{
diff --git a/src/Plugins/BotSharp.Plugin.GoogleAI/Providers/Chat/PalmChatCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.GoogleAI/Providers/Chat/PalmChatCompletionProvider.cs
index 509ed5ba4..c37bb751c 100644
--- a/src/Plugins/BotSharp.Plugin.GoogleAI/Providers/Chat/PalmChatCompletionProvider.cs
+++ b/src/Plugins/BotSharp.Plugin.GoogleAI/Providers/Chat/PalmChatCompletionProvider.cs
@@ -101,7 +101,8 @@ public async Task GetChatCompletions(Agent agent, List();
// Prepare instruction and functions
- var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent);
+ var renderData = agentService.CollectRenderData(agent);
+ var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent, renderData);
if (!string.IsNullOrWhiteSpace(instruction))
{
renderedInstructions.Add(instruction);
@@ -501,9 +502,12 @@ await hook.AfterGenerated(new RoleDialogModel(AgentRole.Assistant, text)
foreach (var function in functions)
{
- if (!agentService.RenderFunction(agent, function)) continue;
+ if (!agentService.RenderFunction(agent, function, renderData))
+ {
+ continue;
+ }
- var def = agentService.RenderFunctionProperty(agent, function);
+ var def = agentService.RenderFunctionProperty(agent, function, renderData);
var props = JsonSerializer.Serialize(def?.Properties);
var parameters = !string.IsNullOrWhiteSpace(props) && props != "{}"
? new Schema()
diff --git a/src/Plugins/BotSharp.Plugin.MetaGLM/Providers/ChatCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.MetaGLM/Providers/ChatCompletionProvider.cs
index 20f59db21..f7831e1a9 100644
--- a/src/Plugins/BotSharp.Plugin.MetaGLM/Providers/ChatCompletionProvider.cs
+++ b/src/Plugins/BotSharp.Plugin.MetaGLM/Providers/ChatCompletionProvider.cs
@@ -94,7 +94,8 @@ private string PrepareOptions(Agent agent, List conversations,
renderedInstructions = [];
// Prepare instruction and functions
- var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent);
+ var renderData = agentService.CollectRenderData(agent);
+ var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent, renderData);
if (!string.IsNullOrWhiteSpace(instruction))
{
renderedInstructions.Add(instruction);
diff --git a/src/Plugins/BotSharp.Plugin.MicrosoftExtensionsAI/MicrosoftExtensionsAIChatCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.MicrosoftExtensionsAI/MicrosoftExtensionsAIChatCompletionProvider.cs
index 3394b514e..8440dc455 100644
--- a/src/Plugins/BotSharp.Plugin.MicrosoftExtensionsAI/MicrosoftExtensionsAIChatCompletionProvider.cs
+++ b/src/Plugins/BotSharp.Plugin.MicrosoftExtensionsAI/MicrosoftExtensionsAIChatCompletionProvider.cs
@@ -73,7 +73,8 @@ public async Task GetChatCompletions(Agent agent, List();
// Prepare instruction and functions
- var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent);
+ var renderData = agentService.CollectRenderData(agent);
+ var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent, renderData);
if (!string.IsNullOrWhiteSpace(instruction))
{
renderedInstructions.Add(instruction);
@@ -82,9 +83,9 @@ public async Task GetChatCompletions(Agent agent, List GetChatCompletionsStreamingAsync(Agent agent,
var options = InitChatCompletionOption(agent);
// Prepare instruction and functions
- var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent);
+ var renderData = agentService.CollectRenderData(agent);
+ var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent, renderData);
if (!string.IsNullOrWhiteSpace(instruction))
{
renderedInstructions.Add(instruction);
@@ -354,9 +355,12 @@ public async Task GetChatCompletionsStreamingAsync(Agent agent,
{
foreach (var function in functions)
{
- if (!agentService.RenderFunction(agent, function)) continue;
+ if (!agentService.RenderFunction(agent, function, renderData))
+ {
+ continue;
+ }
- var property = agentService.RenderFunctionProperty(agent, function);
+ var property = agentService.RenderFunctionProperty(agent, function, renderData);
options.Tools.Add(ChatTool.CreateFunctionTool(
functionName: function.Name,
diff --git a/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Realtime/RealTimeCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Realtime/RealTimeCompletionProvider.cs
index da5ef0b9c..890a8619c 100644
--- a/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Realtime/RealTimeCompletionProvider.cs
+++ b/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Realtime/RealTimeCompletionProvider.cs
@@ -568,7 +568,8 @@ private async Task OnUserAudioTranscriptionCompleted(RealtimeHu
};
// Prepare instruction and functions
- var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent);
+ var renderData = agentService.CollectRenderData(agent);
+ var (instruction, functions) = agentService.PrepareInstructionAndFunctions(agent, renderData);
if (!string.IsNullOrWhiteSpace(instruction))
{
messages.Add(new SystemChatMessage(instruction));
@@ -576,9 +577,12 @@ private async Task OnUserAudioTranscriptionCompleted(RealtimeHu
foreach (var function in functions)
{
- if (!agentService.RenderFunction(agent, function)) continue;
+ if (!agentService.RenderFunction(agent, function, renderData))
+ {
+ continue;
+ }
- var property = agentService.RenderFunctionProperty(agent, function);
+ var property = agentService.RenderFunctionProperty(agent, function, renderData);
options.Tools.Add(ChatTool.CreateFunctionTool(
functionName: function.Name,
diff --git a/src/Plugins/BotSharp.Plugin.SparkDesk/Providers/ChatCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.SparkDesk/Providers/ChatCompletionProvider.cs
index b8191c56c..59c43dc5f 100644
--- a/src/Plugins/BotSharp.Plugin.SparkDesk/Providers/ChatCompletionProvider.cs
+++ b/src/Plugins/BotSharp.Plugin.SparkDesk/Providers/ChatCompletionProvider.cs
@@ -235,7 +235,8 @@ public void SetModelName(string model)
renderedInstructions = [];
// Prepare instruction and functions
- var (instruction, agentFunctions) = agentService.PrepareInstructionAndFunctions(agent);
+ var renderData = agentService.CollectRenderData(agent);
+ var (instruction, agentFunctions) = agentService.PrepareInstructionAndFunctions(agent, renderData);
if (!string.IsNullOrWhiteSpace(instruction))
{
renderedInstructions.Add(instruction);
diff --git a/tests/BotSharp.LLM.Tests/Core/TestAgentService.cs b/tests/BotSharp.LLM.Tests/Core/TestAgentService.cs
index d46b7ca4f..45d6dc6d5 100644
--- a/tests/BotSharp.LLM.Tests/Core/TestAgentService.cs
+++ b/tests/BotSharp.LLM.Tests/Core/TestAgentService.cs
@@ -41,37 +41,27 @@ public Task InheritAgent(Agent agent)
return Task.CompletedTask;
}
- public string RenderInstruction(Agent agent)
+ public string RenderInstruction(Agent agent, Dictionary? renderData = null)
{
return "Fake Instruction";
}
- public string RenderTemplate(Agent agent, string templateName)
+ public string RenderTemplate(Agent agent, string templateName, Dictionary? renderData = null)
{
return $"Rendered template for {templateName}";
}
- public bool RenderFunction(Agent agent, FunctionDef def)
+ public bool RenderFunction(Agent agent, FunctionDef def, Dictionary? renderData = null)
{
return true;
}
- public (string, IEnumerable) PrepareInstructionAndFunctions(Agent agent, StringComparer? comparer = null)
+ public (string, IEnumerable) PrepareInstructionAndFunctions(Agent agent, Dictionary? renderData = null, StringComparer? comparer = null)
{
return (string.Empty, []);
}
- public IEnumerable FilterFunctions(string instruction, Agent agent, StringComparer? comparer = null)
- {
- return [];
- }
-
- public IEnumerable FilterFunctions(string instruction, IEnumerable functions, StringComparer? comparer = null)
- {
- return [];
- }
-
- public FunctionParametersDef? RenderFunctionProperty(Agent agent, FunctionDef def)
+ public FunctionParametersDef? RenderFunctionProperty(Agent agent, FunctionDef def, Dictionary? renderData = null)
{
return def.Parameters;
}
@@ -130,5 +120,10 @@ public Task> GetAgentUtilityOptions()
{
return Task.FromResult(Enumerable.Empty());
}
+
+ public Dictionary CollectRenderData(Agent agent)
+ {
+ return [];
+ }
}
}
\ No newline at end of file
diff --git a/tests/BotSharp.Plugin.SemanticKernel.UnitTests/SemanticKernelChatCompletionProviderTests.cs b/tests/BotSharp.Plugin.SemanticKernel.UnitTests/SemanticKernelChatCompletionProviderTests.cs
index 0472571c8..620163ac3 100644
--- a/tests/BotSharp.Plugin.SemanticKernel.UnitTests/SemanticKernelChatCompletionProviderTests.cs
+++ b/tests/BotSharp.Plugin.SemanticKernel.UnitTests/SemanticKernelChatCompletionProviderTests.cs
@@ -38,7 +38,7 @@ public async void GetChatCompletions_Returns_RoleDialogModel()
_servicesMock.Setup(x => x.GetService(typeof(IEnumerable)))
.Returns(new List());
var agentService = new Mock();
- agentService.Setup(x => x.RenderInstruction(agent)).Returns("How can I help you?");
+ agentService.Setup(x => x.RenderInstruction(agent, null)).Returns("How can I help you?");
_servicesMock.Setup(x => x.GetService(typeof(IAgentService)))
.Returns(agentService.Object);