Merge branch 'master' of https://github.com/SciSharp/BotSharp into features/add-agent-user-role

This commit is contained in:
Jicheng Lu 2024-05-16 10:39:02 -05:00
commit c46ef5a4e2

View file

@ -1,4 +1,5 @@
using BotSharp.Abstraction.Agents.Models; using BotSharp.Abstraction.Agents.Models;
using BotSharp.Abstraction.Conversations.Models;
using BotSharp.Abstraction.Functions.Models; using BotSharp.Abstraction.Functions.Models;
using BotSharp.Abstraction.Loggers; using BotSharp.Abstraction.Loggers;
using BotSharp.Abstraction.Loggers.Enums; using BotSharp.Abstraction.Loggers.Enums;
@ -49,6 +50,8 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR
public override async Task OnMessageReceived(RoleDialogModel message) public override async Task OnMessageReceived(RoleDialogModel message)
{ {
var conversationId = _state.GetConversationId(); var conversationId = _state.GetConversationId();
if (string.IsNullOrEmpty(conversationId)) return;
var log = $"{GetMessageContent(message)}"; var log = $"{GetMessageContent(message)}";
var input = new ContentLogInputModel(conversationId, message) var input = new ContentLogInputModel(conversationId, message)
@ -63,6 +66,8 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR
public override async Task OnPostbackMessageReceived(RoleDialogModel message, PostbackMessageModel replyMsg) public override async Task OnPostbackMessageReceived(RoleDialogModel message, PostbackMessageModel replyMsg)
{ {
var conversationId = _state.GetConversationId(); var conversationId = _state.GetConversationId();
if (string.IsNullOrEmpty(conversationId)) return;
var log = $"{GetMessageContent(message)}"; var log = $"{GetMessageContent(message)}";
var replyContent = JsonSerializer.Serialize(replyMsg, _options.JsonSerializerOptions); var replyContent = JsonSerializer.Serialize(replyMsg, _options.JsonSerializerOptions);
log += $"\r\n```json\r\n{replyContent}\r\n```"; log += $"\r\n```json\r\n{replyContent}\r\n```";
@ -81,6 +86,7 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR
if (!_convSettings.ShowVerboseLog) return; if (!_convSettings.ShowVerboseLog) return;
var conversationId = _state.GetConversationId(); var conversationId = _state.GetConversationId();
if (string.IsNullOrEmpty(conversationId)) return;
var log = $"{agent.Name} is using template {name}"; var log = $"{agent.Name} is using template {name}";
var message = new RoleDialogModel(AgentRole.System, log) var message = new RoleDialogModel(AgentRole.System, log)
@ -104,12 +110,11 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR
public override async Task OnFunctionExecuting(RoleDialogModel message) public override async Task OnFunctionExecuting(RoleDialogModel message)
{ {
if (message.FunctionName == "route_to_agent")
{
return;
}
var conversationId = _state.GetConversationId(); var conversationId = _state.GetConversationId();
if (string.IsNullOrEmpty(conversationId)) return;
if (message.FunctionName == "route_to_agent") return;
var agent = await _agentService.LoadAgent(message.CurrentAgentId); var agent = await _agentService.LoadAgent(message.CurrentAgentId);
message.FunctionArgs = message.FunctionArgs ?? "{}"; message.FunctionArgs = message.FunctionArgs ?? "{}";
var args = JsonSerializer.Serialize(JsonDocument.Parse(message.FunctionArgs), _options.JsonSerializerOptions); var args = JsonSerializer.Serialize(JsonDocument.Parse(message.FunctionArgs), _options.JsonSerializerOptions);
@ -127,12 +132,11 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR
public override async Task OnFunctionExecuted(RoleDialogModel message) public override async Task OnFunctionExecuted(RoleDialogModel message)
{ {
if (message.FunctionName == "route_to_agent")
{
return;
}
var conversationId = _state.GetConversationId(); var conversationId = _state.GetConversationId();
if (string.IsNullOrEmpty(conversationId)) return;
if (message.FunctionName == "route_to_agent") return;
var agent = await _agentService.LoadAgent(message.CurrentAgentId); var agent = await _agentService.LoadAgent(message.CurrentAgentId);
message.FunctionArgs = message.FunctionArgs ?? "{}"; message.FunctionArgs = message.FunctionArgs ?? "{}";
// var args = JsonSerializer.Serialize(JsonDocument.Parse(message.FunctionArgs), _options.JsonSerializerOptions); // var args = JsonSerializer.Serialize(JsonDocument.Parse(message.FunctionArgs), _options.JsonSerializerOptions);
@ -159,6 +163,8 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR
if (!_convSettings.ShowVerboseLog) return; if (!_convSettings.ShowVerboseLog) return;
var conversationId = _state.GetConversationId(); var conversationId = _state.GetConversationId();
if (string.IsNullOrEmpty(conversationId)) return;
var agent = await _agentService.LoadAgent(message.CurrentAgentId); var agent = await _agentService.LoadAgent(message.CurrentAgentId);
var log = tokenStats.Prompt; var log = tokenStats.Prompt;
@ -180,8 +186,10 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR
/// <returns></returns> /// <returns></returns>
public override async Task OnResponseGenerated(RoleDialogModel message) public override async Task OnResponseGenerated(RoleDialogModel message)
{ {
var conv = _services.GetRequiredService<IConversationService>(); var conversationId = _state.GetConversationId();
if (string.IsNullOrEmpty(conversationId)) return;
var conv = _services.GetRequiredService<IConversationService>();
await _chatHub.Clients.User(_user.Id).SendAsync("OnConversateStateLogGenerated", BuildStateLog(conv.ConversationId, _state.GetStates(), message)); await _chatHub.Clients.User(_user.Id).SendAsync("OnConversateStateLogGenerated", BuildStateLog(conv.ConversationId, _state.GetStates(), message));
if (message.Role == AgentRole.Assistant) if (message.Role == AgentRole.Assistant)
@ -208,6 +216,8 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR
public override async Task OnTaskCompleted(RoleDialogModel message) public override async Task OnTaskCompleted(RoleDialogModel message)
{ {
var conversationId = _state.GetConversationId(); var conversationId = _state.GetConversationId();
if (string.IsNullOrEmpty(conversationId)) return;
var log = $"{GetMessageContent(message)}"; var log = $"{GetMessageContent(message)}";
var agent = await _agentService.LoadAgent(message.CurrentAgentId); var agent = await _agentService.LoadAgent(message.CurrentAgentId);
@ -223,6 +233,8 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR
public override async Task OnConversationEnding(RoleDialogModel message) public override async Task OnConversationEnding(RoleDialogModel message)
{ {
var conversationId = _state.GetConversationId(); var conversationId = _state.GetConversationId();
if (string.IsNullOrEmpty(conversationId)) return;
var log = $"Conversation ended"; var log = $"Conversation ended";
var agent = await _agentService.LoadAgent(message.CurrentAgentId); var agent = await _agentService.LoadAgent(message.CurrentAgentId);
@ -237,6 +249,8 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR
public override async Task OnBreakpointUpdated(string conversationId, bool resetStates) public override async Task OnBreakpointUpdated(string conversationId, bool resetStates)
{ {
if (string.IsNullOrEmpty(conversationId)) return;
var log = $"Conversation breakpoint is updated"; var log = $"Conversation breakpoint is updated";
if (resetStates) if (resetStates)
{ {
@ -263,6 +277,9 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR
public override async Task OnStateChanged(StateChangeModel stateChange) public override async Task OnStateChanged(StateChangeModel stateChange)
{ {
var conversationId = _state.GetConversationId();
if (string.IsNullOrEmpty(conversationId)) return;
if (stateChange == null) return; if (stateChange == null) return;
await _chatHub.Clients.User(_user.Id).SendAsync("OnStateChangeGenerated", BuildStateChangeLog(stateChange)); await _chatHub.Clients.User(_user.Id).SendAsync("OnStateChangeGenerated", BuildStateChangeLog(stateChange));
@ -273,6 +290,8 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR
public async Task OnAgentEnqueued(string agentId, string preAgentId, string? reason = null) public async Task OnAgentEnqueued(string agentId, string preAgentId, string? reason = null)
{ {
var conversationId = _state.GetConversationId(); var conversationId = _state.GetConversationId();
if (string.IsNullOrEmpty(conversationId)) return;
var agent = await _agentService.LoadAgent(agentId); var agent = await _agentService.LoadAgent(agentId);
// Agent queue log // Agent queue log
@ -298,6 +317,8 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR
public async Task OnAgentDequeued(string agentId, string currentAgentId, string? reason = null) public async Task OnAgentDequeued(string agentId, string currentAgentId, string? reason = null)
{ {
var conversationId = _state.GetConversationId(); var conversationId = _state.GetConversationId();
if (string.IsNullOrEmpty(conversationId)) return;
var agent = await _agentService.LoadAgent(agentId); var agent = await _agentService.LoadAgent(agentId);
var currentAgent = await _agentService.LoadAgent(currentAgentId); var currentAgent = await _agentService.LoadAgent(currentAgentId);
@ -324,6 +345,8 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR
public async Task OnAgentReplaced(string fromAgentId, string toAgentId, string? reason = null) public async Task OnAgentReplaced(string fromAgentId, string toAgentId, string? reason = null)
{ {
var conversationId = _state.GetConversationId(); var conversationId = _state.GetConversationId();
if (string.IsNullOrEmpty(conversationId)) return;
var fromAgent = await _agentService.LoadAgent(fromAgentId); var fromAgent = await _agentService.LoadAgent(fromAgentId);
var toAgent = await _agentService.LoadAgent(toAgentId); var toAgent = await _agentService.LoadAgent(toAgentId);
@ -350,6 +373,7 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR
public async Task OnAgentQueueEmptied(string agentId, string? reason = null) public async Task OnAgentQueueEmptied(string agentId, string? reason = null)
{ {
var conversationId = _state.GetConversationId(); var conversationId = _state.GetConversationId();
if (string.IsNullOrEmpty(conversationId)) return;
// Agent queue log // Agent queue log
var log = $"Agent queue is empty"; var log = $"Agent queue is empty";
@ -374,6 +398,8 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR
public async Task OnRoutingInstructionReceived(FunctionCallFromLlm instruct, RoleDialogModel message) public async Task OnRoutingInstructionReceived(FunctionCallFromLlm instruct, RoleDialogModel message)
{ {
var conversationId = _state.GetConversationId(); var conversationId = _state.GetConversationId();
if (string.IsNullOrEmpty(conversationId)) return;
var agent = await _agentService.LoadAgent(message.CurrentAgentId); var agent = await _agentService.LoadAgent(message.CurrentAgentId);
var log = JsonSerializer.Serialize(instruct, _options.JsonSerializerOptions); var log = JsonSerializer.Serialize(instruct, _options.JsonSerializerOptions);
log = $"```json\r\n{log}\r\n```"; log = $"```json\r\n{log}\r\n```";
@ -391,6 +417,8 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR
public async Task OnRoutingInstructionRevised(FunctionCallFromLlm instruct, RoleDialogModel message) public async Task OnRoutingInstructionRevised(FunctionCallFromLlm instruct, RoleDialogModel message)
{ {
var conversationId = _state.GetConversationId(); var conversationId = _state.GetConversationId();
if (string.IsNullOrEmpty(conversationId)) return;
var agent = await _agentService.LoadAgent(message.CurrentAgentId); var agent = await _agentService.LoadAgent(message.CurrentAgentId);
var log = $"Revised user goal agent to {instruct.OriginalAgent}"; var log = $"Revised user goal agent to {instruct.OriginalAgent}";