BotSharp/src/Infrastructure/BotSharp.OpenAPI/Controllers/ConversationController.cs

78 lines
2.5 KiB
C#
Raw Normal View History

2023-08-19 00:15:02 +00:00
using BotSharp.Abstraction.ApiAdapters;
using BotSharp.Abstraction.Conversations.Models;
using BotSharp.OpenAPI.ViewModels.Conversations;
namespace BotSharp.OpenAPI.Controllers;
[Authorize]
[ApiController]
public class ConversationController : ControllerBase, IApiAdapter
{
private readonly IServiceProvider _services;
private readonly IUserIdentity _user;
public ConversationController(IServiceProvider services,
IUserIdentity user)
{
_services = services;
_user = user;
}
[HttpPost("/conversation/{agentId}")]
public async Task<ConversationViewModel> NewConversation([FromRoute] string agentId)
{
var service = _services.GetRequiredService<IConversationService>();
var sess = new Conversation
{
UserId = _user.Id,
AgentId = agentId
};
sess = await service.NewConversation(sess);
return ConversationViewModel.FromSession(sess);
}
[HttpDelete("/conversation/{agentId}/{conversationId}")]
public async Task DeleteConversation([FromRoute] string agentId, [FromRoute] string conversationId)
{
var service = _services.GetRequiredService<IConversationService>();
}
[HttpPost("/conversation/{agentId}/{conversationId}")]
public async Task<MessageResponseModel> SendMessage([FromRoute] string agentId,
[FromRoute] string conversationId,
2023-09-09 15:37:38 +00:00
[FromBody] NewMessageModel input)
2023-08-19 00:15:02 +00:00
{
var conv = _services.GetRequiredService<IConversationService>();
2023-09-09 15:37:38 +00:00
conv.SetConversationId(conversationId, input.Channel);
2023-09-06 03:19:36 +00:00
input.States.ForEach(x => conv.States.SetState(x.Split('=')[0], x.Split('=')[1]));
2023-08-19 00:15:02 +00:00
var response = new MessageResponseModel();
var stackMsg = new List<RoleDialogModel>();
2023-09-06 03:19:36 +00:00
await conv.SendMessage(agentId,
2023-08-20 22:53:53 +00:00
new RoleDialogModel("user", input.Text)
{
2023-09-09 15:37:38 +00:00
Channel = input.Channel,
ModelName = input.ModelName,
Temperature = input.Temperature,
SamplingFactor = input.SamplingFactor
2023-08-20 22:53:53 +00:00
},
2023-08-19 00:15:02 +00:00
async msg =>
{
stackMsg.Add(msg);
},
async fnExecuting =>
{
},
async fnExecuted =>
{
2023-08-20 20:20:16 +00:00
response.Function = fnExecuted.FunctionName;
response.Data = fnExecuted.ExecutionData;
});
2023-08-19 00:15:02 +00:00
response.Text = string.Join("\r\n", stackMsg.Select(x => x.Content));
return response;
}
}