add CodeScript in ProgramCodeTemplateMessage

This commit is contained in:
Jicheng Lu 2025-10-13 11:53:36 -05:00
parent e92d97f8b4
commit 96262c35d2
17 changed files with 46 additions and 41 deletions

View file

@ -141,7 +141,7 @@ public class RoleDialogModel : ITrackableMessage
public bool IsFromAssistant => Role == AgentRole.Assistant || Role == AgentRole.Model;
[JsonIgnore(Condition = JsonIgnoreCondition.Always)]
public string RoleContent
public string LlmContent
{
get
{

View file

@ -8,6 +8,9 @@ public class ProgramCodeTemplateMessage : IRichMessage, ITemplateMessage
[JsonPropertyName("text")]
public string Text { get; set; } = string.Empty;
[JsonPropertyName("code_script")]
public string? CodeScript { get; set; }
[JsonPropertyName("template_type")]
public virtual string TemplateType { get; set; } = TemplateTypeEnum.ProgramCode;

View file

@ -140,11 +140,11 @@ public class ChatCompletionProvider : IChatCompletion
{
if (message.Role == AgentRole.User)
{
messages.Add(new Message(RoleType.User, message.RoleContent));
messages.Add(new Message(RoleType.User, message.LlmContent));
}
else if (message.Role == AgentRole.Assistant)
{
messages.Add(new Message(RoleType.Assistant, message.RoleContent));
messages.Add(new Message(RoleType.Assistant, message.LlmContent));
}
else if (message.Role == AgentRole.Function)
{
@ -170,7 +170,7 @@ public class ChatCompletionProvider : IChatCompletion
new ToolResultContent()
{
ToolUseId = message.ToolCallId,
Content = [new TextContent() { Text = message.RoleContent }]
Content = [new TextContent() { Text = message.LlmContent }]
}
}
});

View file

@ -432,11 +432,11 @@ public class ChatCompletionProvider : IChatCompletion
ChatToolCall.CreateFunctionToolCall(message.ToolCallId.IfNullOrEmptyAs(message.FunctionName), message.FunctionName, BinaryData.FromString(message.FunctionArgs ?? "{}"))
}));
messages.Add(new ToolChatMessage(message.ToolCallId.IfNullOrEmptyAs(message.FunctionName), message.RoleContent));
messages.Add(new ToolChatMessage(message.ToolCallId.IfNullOrEmptyAs(message.FunctionName), message.LlmContent));
}
else if (message.Role == AgentRole.User)
{
var text = message.RoleContent;
var text = message.LlmContent;
var textPart = ChatMessageContentPart.CreateTextPart(text);
var contentParts = new List<ChatMessageContentPart> { textPart };
@ -448,7 +448,7 @@ public class ChatCompletionProvider : IChatCompletion
}
else if (message.Role == AgentRole.Assistant)
{
var text = message.RoleContent;
var text = message.LlmContent;
var textPart = ChatMessageContentPart.CreateTextPart(text);
var contentParts = new List<ChatMessageContentPart> { textPart };

View file

@ -83,6 +83,7 @@ public class PlotChartFn : IFunctionCallback
Message = new ProgramCodeTemplateMessage
{
Text = ret?.JsCode ?? string.Empty,
CodeScript = ret?.JsCode,
Language = "javascript"
}
};

View file

@ -399,11 +399,11 @@ public class ChatCompletionProvider : IChatCompletion
ChatToolCall.CreateFunctionToolCall(message.ToolCallId.IfNullOrEmptyAs(message.FunctionName), message.FunctionName, BinaryData.FromString(message.FunctionArgs ?? "{}"))
}));
messages.Add(new ToolChatMessage(message.ToolCallId.IfNullOrEmptyAs(message.FunctionName), message.RoleContent));
messages.Add(new ToolChatMessage(message.ToolCallId.IfNullOrEmptyAs(message.FunctionName), message.LlmContent));
}
else if (message.Role == AgentRole.User)
{
var text = message.RoleContent;
var text = message.LlmContent;
var textPart = ChatMessageContentPart.CreateTextPart(text);
var contentParts = new List<ChatMessageContentPart> { textPart };
@ -415,7 +415,7 @@ public class ChatCompletionProvider : IChatCompletion
}
else if (message.Role == AgentRole.Assistant)
{
var text = message.RoleContent;
var text = message.LlmContent;
var textPart = ChatMessageContentPart.CreateTextPart(text);
var contentParts = new List<ChatMessageContentPart> { textPart };

View file

@ -263,17 +263,17 @@ public class GeminiChatCompletionProvider : IChatCompletion
Name = message.FunctionName,
Response = new JsonObject()
{
["result"] = message.RoleContent ?? string.Empty
["result"] = message.LlmContent ?? string.Empty
}
}
}
], AgentRole.Function));
convPrompts.Add($"{AgentRole.Assistant}: Call function {message.FunctionName}({message.FunctionArgs}) => {message.RoleContent}");
convPrompts.Add($"{AgentRole.Assistant}: Call function {message.FunctionName}({message.FunctionArgs}) => {message.LlmContent}");
}
else if (message.Role == AgentRole.User)
{
var text = message.RoleContent;
var text = message.LlmContent;
var contentParts = new List<Part> { new() { Text = text } };
if (allowMultiModal && !message.Files.IsNullOrEmpty())
@ -285,7 +285,7 @@ public class GeminiChatCompletionProvider : IChatCompletion
}
else if (message.Role == AgentRole.Assistant)
{
var text = message.RoleContent;
var text = message.LlmContent;
var contentParts = new List<Part> { new() { Text = text } };
if (allowMultiModal && !message.Files.IsNullOrEmpty())

View file

@ -108,7 +108,7 @@ public class PalmChatCompletionProvider : IChatCompletion
renderedInstructions.Add(prompt);
}
var messages = conversations.Select(c => new PalmChatMessage(c.RoleContent, c.Role == AgentRole.User ? "user" : "AI"))
var messages = conversations.Select(c => new PalmChatMessage(c.LlmContent, c.Role == AgentRole.User ? "user" : "AI"))
.ToList();
if (!functions.IsNullOrEmpty())
@ -124,8 +124,8 @@ public class PalmChatCompletionProvider : IChatCompletion
foreach (var dialog in conversations)
{
prompt += dialog.Role == AgentRole.Function ?
$"{dialog.Role}: {dialog.FunctionName} => {dialog.RoleContent}\r\n" :
$"{dialog.Role}: {dialog.RoleContent}\r\n";
$"{dialog.Role}: {dialog.FunctionName} => {dialog.LlmContent}\r\n" :
$"{dialog.Role}: {dialog.LlmContent}\r\n";
}
prompt += "\r\n\r\n" + router.Templates.FirstOrDefault(x => x.Name == "response_with_function").Content;

View file

@ -567,25 +567,25 @@ public class GoogleRealTimeProvider : IRealTimeCompletion
Name = message.FunctionName ?? string.Empty,
Response = new JsonObject()
{
["result"] = message.RoleContent ?? string.Empty
["result"] = message.LlmContent ?? string.Empty
}
}
}
], AgentRole.Function));
convPrompts.Add(
$"{AgentRole.Assistant}: Call function {message.FunctionName}({message.FunctionArgs}) => {message.RoleContent}");
$"{AgentRole.Assistant}: Call function {message.FunctionName}({message.FunctionArgs}) => {message.LlmContent}");
}
else if (message.Role == AgentRole.User)
{
var text = message.RoleContent;
var text = message.LlmContent;
contents.Add(new Content(text, AgentRole.User));
convPrompts.Add($"{AgentRole.User}: {text}");
}
else if (message.Role == AgentRole.Assistant)
{
contents.Add(new Content(message.RoleContent, AgentRole.Model));
convPrompts.Add($"{AgentRole.Assistant}: {message.RoleContent}");
contents.Add(new Content(message.LlmContent, AgentRole.Model));
convPrompts.Add($"{AgentRole.Assistant}: {message.LlmContent}");
}
}

View file

@ -42,7 +42,7 @@ public class ChatCompletionProvider : IChatCompletion
await hook.BeforeGenerating(agent, conversations);
}
var content = string.Join("\r\n", conversations.Select(x => $"{x.Role}: {x.RoleContent}")).Trim();
var content = string.Join("\r\n", conversations.Select(x => $"{x.Role}: {x.LlmContent}")).Trim();
content += $"\r\n{AgentRole.Assistant}: ";
var llama = _services.GetRequiredService<LlamaAiModel>();
@ -118,7 +118,7 @@ public class ChatCompletionProvider : IChatCompletion
Func<RoleDialogModel, Task> onMessageReceived,
Func<RoleDialogModel, Task> onFunctionExecuting)
{
var content = string.Join("\r\n", conversations.Select(x => $"{x.Role}: {x.RoleContent}")).Trim();
var content = string.Join("\r\n", conversations.Select(x => $"{x.Role}: {x.LlmContent}")).Trim();
content += $"\r\n{AgentRole.Assistant}: ";
var state = _services.GetRequiredService<IConversationStateService>();

View file

@ -41,7 +41,7 @@ namespace BotSharp.Plugin.VertexAI.Providers
var client = new VertexAIProvider(_config);
var model = new VertexAIChatModel(client, _model);
var messages = conversations
.Select(c => new Message(c.RoleContent, c.Role == AgentRole.User ? MessageRole.Human : MessageRole.Ai)).ToList();
.Select(c => new Message(c.LlmContent, c.Role == AgentRole.User ? MessageRole.Human : MessageRole.Ai)).ToList();
var response = await model.GenerateAsync(new ChatRequest { Messages = messages }, _settings);

View file

@ -111,8 +111,8 @@ public class ChatCompletionProvider : IChatCompletion
foreach (var message in samples)
{
messages.Add(message.Role == AgentRole.User ?
new MessageItem("user", message.RoleContent) :
new MessageItem("assistant", message.RoleContent));
new MessageItem("user", message.LlmContent) :
new MessageItem("assistant", message.LlmContent));
}
foreach (var function in functions)
@ -129,13 +129,13 @@ public class ChatCompletionProvider : IChatCompletion
}
else if (message.Role == "user")
{
var userMessage = new MessageItem("user",message.RoleContent);
var userMessage = new MessageItem("user",message.LlmContent);
messages.Add(userMessage);
}
else if (message.Role == "assistant")
{
messages.Add(new MessageItem("assistant", message.RoleContent));
messages.Add(new MessageItem("assistant", message.LlmContent));
}
}

View file

@ -109,16 +109,16 @@ public sealed class MicrosoftExtensionsAIChatCompletionProvider : IChatCompletio
messages.Add(new(ChatRole.Assistant,
[
new FunctionCallContent(x.FunctionName, x.FunctionName, JsonSerializer.Deserialize<Dictionary<string, object?>>(x.FunctionArgs ?? "{}")),
new FunctionResultContent(x.FunctionName, x.RoleContent)
new FunctionResultContent(x.FunctionName, x.LlmContent)
]));
}
else if (x.Role == AgentRole.System || x.Role == AgentRole.Assistant)
{
messages.Add(new(x.Role == AgentRole.System ? ChatRole.System : ChatRole.Assistant, x.RoleContent));
messages.Add(new(x.Role == AgentRole.System ? ChatRole.System : ChatRole.Assistant, x.LlmContent));
}
else if (x.Role == AgentRole.User)
{
List<AIContent> contents = [new TextContent(x.RoleContent)];
List<AIContent> contents = [new TextContent(x.LlmContent)];
if (allowMultiModal)
{
foreach (var file in x.Files)

View file

@ -402,11 +402,11 @@ public class ChatCompletionProvider : IChatCompletion
ChatToolCall.CreateFunctionToolCall(message.ToolCallId.IfNullOrEmptyAs(message.FunctionName), message.FunctionName, BinaryData.FromString(message.FunctionArgs ?? "{}"))
}));
messages.Add(new ToolChatMessage(message.ToolCallId.IfNullOrEmptyAs(message.FunctionName), message.RoleContent));
messages.Add(new ToolChatMessage(message.ToolCallId.IfNullOrEmptyAs(message.FunctionName), message.LlmContent));
}
else if (message.Role == AgentRole.User)
{
var text = message.RoleContent;
var text = message.LlmContent;
var textPart = ChatMessageContentPart.CreateTextPart(text);
var contentParts = new List<ChatMessageContentPart> { textPart };
@ -418,7 +418,7 @@ public class ChatCompletionProvider : IChatCompletion
}
else if (message.Role == AgentRole.Assistant)
{
var text = message.RoleContent;
var text = message.LlmContent;
var textPart = ChatMessageContentPart.CreateTextPart(text);
var contentParts = new List<ChatMessageContentPart> { textPart };

View file

@ -621,15 +621,15 @@ public class RealTimeCompletionProvider : IRealTimeCompletion
ChatToolCall.CreateFunctionToolCall(message.ToolCallId.IfNullOrEmptyAs(message.FunctionName), message.FunctionName, BinaryData.FromString(message.FunctionArgs ?? "{}"))
}));
messages.Add(new ToolChatMessage(message.ToolCallId.IfNullOrEmptyAs(message.FunctionName), message.RoleContent));
messages.Add(new ToolChatMessage(message.ToolCallId.IfNullOrEmptyAs(message.FunctionName), message.LlmContent));
}
else if (message.Role == AgentRole.User)
{
messages.Add(new UserChatMessage(message.RoleContent));
messages.Add(new UserChatMessage(message.LlmContent));
}
else if (message.Role == AgentRole.Assistant)
{
messages.Add(new AssistantChatMessage(message.RoleContent));
messages.Add(new AssistantChatMessage(message.LlmContent));
}
}

View file

@ -75,7 +75,8 @@ public class PyProgrammerFn : IFunctionCallback
Recipient = new Recipient { Id = convService.ConversationId },
Message = new ProgramCodeTemplateMessage
{
Text = ret.PythonCode ?? string.Empty,
Text = result,
CodeScript = ret.PythonCode,
Language = "python"
}
};

View file

@ -269,13 +269,13 @@ public class ChatCompletionProvider : IChatCompletion
}
else if (message.Role == "user")
{
var userMessage = ChatMessage.FromUser(message.RoleContent);
var userMessage = ChatMessage.FromUser(message.LlmContent);
messages.Add(userMessage);
}
else if (message.Role == "assistant")
{
messages.Add(ChatMessage.FromAssistant(message.RoleContent));
messages.Add(ChatMessage.FromAssistant(message.LlmContent));
}
}