commit
d83c7fb885
|
|
@ -41,7 +41,7 @@ public abstract class ConversationCompletionHookBase : IConversationCompletionHo
|
|||
return this;
|
||||
}
|
||||
|
||||
public virtual Task OnStateLoaded(ConversationState state, Action<Agent, string>? onAgentSwitched = null)
|
||||
public virtual Task OnStateLoaded(ConversationState state, Action<Agent>? onAgentSwitched = null)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ public interface IConversationCompletionHook
|
|||
IChatCompletion ChatCompletion { get; }
|
||||
IConversationCompletionHook SetChatCompletion(IChatCompletion chatCompletion);
|
||||
|
||||
Task OnStateLoaded(ConversationState state, Action<Agent, string>? onAgentSwitched = null);
|
||||
Task OnStateLoaded(ConversationState state, Action<Agent>? onAgentSwitched = null);
|
||||
Task BeforeCompletion();
|
||||
Task OnFunctionExecuting(string name, string args);
|
||||
Task AfterCompletion(RoleDialogModel message);
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
using BotSharp.Abstraction.Conversations;
|
||||
using BotSharp.Abstraction.Conversations.Models;
|
||||
using BotSharp.Abstraction.Functions;
|
||||
using BotSharp.Abstraction.Knowledges.Models;
|
||||
|
|
@ -118,9 +119,20 @@ public class ConversationService : IConversationService
|
|||
{
|
||||
var agent = await _services.GetRequiredService<IAgentService>()
|
||||
.GetAgent(agentId);
|
||||
|
||||
|
||||
var converation = await GetConversation(conversationId);
|
||||
|
||||
// Create conversation if this conversation not exists
|
||||
if (converation == null)
|
||||
{
|
||||
var sess = new Conversation
|
||||
{
|
||||
Id = conversationId,
|
||||
AgentId = agentId
|
||||
};
|
||||
converation = await NewConversation(sess);
|
||||
}
|
||||
|
||||
// load state
|
||||
var stateService = _services.GetRequiredService<IConversationStateService>();
|
||||
var state = stateService.Load(conversationId);
|
||||
|
|
@ -149,11 +161,7 @@ public class ConversationService : IConversationService
|
|||
.SetDialogs(wholeDialogs)
|
||||
.SetChatCompletion(chatCompletion);
|
||||
|
||||
await hook.OnStateLoaded(state, onAgentSwitched: (x, prompt) =>
|
||||
{
|
||||
agent = x;
|
||||
wholeDialogs.Add(new RoleDialogModel("user", prompt));
|
||||
});
|
||||
await hook.OnStateLoaded(state, onAgentSwitched: x => agent = x);
|
||||
await hook.BeforeCompletion();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -101,8 +101,12 @@ public class FileRepository : IBotSharpRepository
|
|||
_conversations = new List<ConversationRecord>();
|
||||
foreach (var d in Directory.GetDirectories(dir))
|
||||
{
|
||||
var json = File.ReadAllText(Path.Combine(d, "conversation.json"));
|
||||
_conversations.Add(JsonSerializer.Deserialize<ConversationRecord>(json, _options));
|
||||
var path = Path.Combine(d, "conversation.json");
|
||||
if (File.Exists(path))
|
||||
{
|
||||
var json = File.ReadAllText(path);
|
||||
_conversations.Add(JsonSerializer.Deserialize<ConversationRecord>(json, _options));
|
||||
}
|
||||
}
|
||||
return _conversations.AsQueryable();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -130,7 +130,10 @@ public class ChatCompletionProvider : IChatCompletion
|
|||
|
||||
_logger.LogInformation(message.Content);
|
||||
|
||||
await onMessageReceived(new RoleDialogModel(ChatRole.Assistant.ToString(), message.Content));
|
||||
if (!string.IsNullOrEmpty(message.Content))
|
||||
{
|
||||
await onMessageReceived(new RoleDialogModel(ChatRole.Assistant.ToString(), message.Content));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,18 +66,6 @@ public class ChatbotUiController : ControllerBase, IApiAdapter
|
|||
|
||||
var conversationService = _services.GetRequiredService<IConversationService>();
|
||||
|
||||
// Check if this conversation exists
|
||||
var converation = await conversationService.GetConversation(input.ConversationId);
|
||||
if(converation == null)
|
||||
{
|
||||
var sess = new Conversation
|
||||
{
|
||||
Id = input.ConversationId,
|
||||
AgentId = input.AgentId
|
||||
};
|
||||
converation = await conversationService.NewConversation(sess);
|
||||
}
|
||||
|
||||
var result = await conversationService.SendMessage(input.AgentId,
|
||||
input.ConversationId,
|
||||
conversations,
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ public class WebhookController : ControllerBase
|
|||
var conv = _services.GetRequiredService<IConversationService>();
|
||||
|
||||
string content = "";
|
||||
var sessionId = req.Entry[0].Messaging[0].Sender.Id;
|
||||
var senderId = req.Entry[0].Messaging[0].Sender.Id;
|
||||
var input = req.Entry[0].Messaging[0].Message.Text;
|
||||
|
||||
var setting = _services.GetRequiredService<MetaMessengerSetting>();
|
||||
|
|
@ -78,38 +78,38 @@ public class WebhookController : ControllerBase
|
|||
};
|
||||
|
||||
// Marking seen
|
||||
/*await messenger.SendMessage(setting.ApiVersion, setting.PageId, new SendingMessageRequest
|
||||
await messenger.SendMessage(setting.ApiVersion, setting.PageId, new SendingMessageRequest
|
||||
{
|
||||
AccessToken = setting.PageAccessToken,
|
||||
Recipient = JsonSerializer.Serialize(new { Id = sessionId }, jsonOpt),
|
||||
Recipient = JsonSerializer.Serialize(new { Id = senderId }, jsonOpt),
|
||||
SenderAction = SenderActionEnum.MarkSeen
|
||||
});*/
|
||||
});
|
||||
|
||||
// Typing on
|
||||
await messenger.SendMessage(setting.ApiVersion, setting.PageId, new SendingMessageRequest
|
||||
{
|
||||
AccessToken = setting.PageAccessToken,
|
||||
Recipient = JsonSerializer.Serialize(new { Id = sessionId }, jsonOpt),
|
||||
Recipient = JsonSerializer.Serialize(new { Id = senderId }, jsonOpt),
|
||||
SenderAction = SenderActionEnum.TypingOn
|
||||
});
|
||||
|
||||
// Go to LLM
|
||||
var result = await conv.SendMessage(agentId, sessionId, new RoleDialogModel("user", input), async msg =>
|
||||
var result = await conv.SendMessage(agentId, senderId, new RoleDialogModel("user", input), async msg =>
|
||||
{
|
||||
content = msg.Content;
|
||||
}, async fn =>
|
||||
{
|
||||
await messenger.SendMessage(setting.ApiVersion, setting.PageId, new SendingMessageRequest
|
||||
/*await messenger.SendMessage(setting.ApiVersion, setting.PageId, new SendingMessageRequest
|
||||
{
|
||||
AccessToken = setting.PageAccessToken,
|
||||
Recipient = JsonSerializer.Serialize(new { Id = sessionId }, jsonOpt),
|
||||
Message = JsonSerializer.Serialize(new { Text = "I'm pulling the relevent information, please wait a second ..." }, jsonOpt)
|
||||
});
|
||||
});*/
|
||||
|
||||
await messenger.SendMessage(setting.ApiVersion, setting.PageId, new SendingMessageRequest
|
||||
{
|
||||
AccessToken = setting.PageAccessToken,
|
||||
Recipient = JsonSerializer.Serialize(new { Id = sessionId }, jsonOpt),
|
||||
Recipient = JsonSerializer.Serialize(new { Id = senderId }, jsonOpt),
|
||||
SenderAction = SenderActionEnum.TypingOn
|
||||
});
|
||||
});
|
||||
|
|
@ -118,7 +118,7 @@ public class WebhookController : ControllerBase
|
|||
await messenger.SendMessage(setting.ApiVersion, setting.PageId, new SendingMessageRequest
|
||||
{
|
||||
AccessToken = setting.PageAccessToken,
|
||||
Recipient = JsonSerializer.Serialize(new { Id = sessionId }, jsonOpt),
|
||||
Recipient = JsonSerializer.Serialize(new { Id = senderId }, jsonOpt),
|
||||
Message = JsonSerializer.Serialize(new { Text = content }, jsonOpt)
|
||||
});
|
||||
|
||||
|
|
@ -126,7 +126,7 @@ public class WebhookController : ControllerBase
|
|||
await messenger.SendMessage(setting.ApiVersion, setting.PageId, new SendingMessageRequest
|
||||
{
|
||||
AccessToken = setting.PageAccessToken,
|
||||
Recipient = JsonSerializer.Serialize(new { Id = sessionId }, jsonOpt),
|
||||
Recipient = JsonSerializer.Serialize(new { Id = senderId }, jsonOpt),
|
||||
SenderAction = SenderActionEnum.TypingOff
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue