Fix FileRepository bug.

This commit is contained in:
hchen 2023-08-10 17:17:55 -05:00
parent d4f4e1e805
commit 4306358876
7 changed files with 37 additions and 34 deletions

View file

@ -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;
}

View file

@ -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);

View file

@ -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();
}

View file

@ -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();
}

View file

@ -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;
}

View file

@ -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,

View file

@ -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
});
}