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

85 lines
3.2 KiB
C#
Raw Normal View History

2023-08-19 00:15:02 +00:00
using BotSharp.Abstraction.Knowledges.Models;
2024-08-06 21:02:02 +00:00
using BotSharp.OpenAPI.ViewModels.Knowledges;
2023-08-19 00:15:02 +00:00
namespace BotSharp.OpenAPI.Controllers;
[Authorize]
[ApiController]
2023-12-30 03:54:41 +00:00
public class KnowledgeBaseController : ControllerBase
2023-08-19 00:15:02 +00:00
{
private readonly IKnowledgeService _knowledgeService;
2023-08-28 15:24:43 +00:00
private readonly IServiceProvider _services;
2023-12-30 03:54:41 +00:00
public KnowledgeBaseController(IKnowledgeService knowledgeService, IServiceProvider services)
2023-08-19 00:15:02 +00:00
{
_knowledgeService = knowledgeService;
2023-08-28 15:24:43 +00:00
_services = services;
2023-08-19 00:15:02 +00:00
}
2023-12-30 03:54:41 +00:00
2024-08-13 18:26:57 +00:00
[HttpGet("knowledge/collections")]
public async Task<IEnumerable<string>> GetKnowledgeCollections()
{
return await _knowledgeService.GetKnowledgeCollections();
}
2024-08-09 22:39:54 +00:00
[HttpPost("/knowledge/{collection}/search")]
2024-08-09 23:12:34 +00:00
public async Task<IEnumerable<KnowledgeRetrivalViewModel>> SearchKnowledge([FromRoute] string collection, [FromBody] SearchKnowledgeModel model)
2023-08-19 00:15:02 +00:00
{
2024-08-09 22:39:54 +00:00
var options = new KnowledgeRetrievalOptions
2023-08-19 00:15:02 +00:00
{
Text = model.Text,
Fields = model.Fields,
Limit = model.Limit ?? 5,
Confidence = model.Confidence ?? 0.5f,
WithVector = model.WithVector
};
2023-08-19 00:15:02 +00:00
2024-08-09 22:39:54 +00:00
var results = await _knowledgeService.SearchKnowledge(collection, options);
return results.Select(x => KnowledgeRetrivalViewModel.From(x)).ToList();
2023-08-19 00:15:02 +00:00
}
2024-08-06 21:02:02 +00:00
2024-08-07 16:50:23 +00:00
[HttpPost("/knowledge/{collection}/data")]
public async Task<StringIdPagedItems<KnowledgeCollectionDataViewModel>> GetKnowledgeCollectionData([FromRoute] string collection, [FromBody] KnowledgeFilter filter)
2024-08-08 22:15:51 +00:00
{
2024-08-07 16:50:23 +00:00
var data = await _knowledgeService.GetKnowledgeCollectionData(collection, filter);
var items = data.Items?.Select(x => KnowledgeCollectionDataViewModel.From(x))?
2024-08-06 22:43:11 +00:00
.ToList() ?? new List<KnowledgeCollectionDataViewModel>();
2024-08-07 14:57:07 +00:00
return new StringIdPagedItems<KnowledgeCollectionDataViewModel>
2024-08-06 22:43:11 +00:00
{
Count = data.Count,
NextId = data.NextId,
Items = items
};
}
2024-08-08 22:15:51 +00:00
[HttpDelete("/knowledge/{collection}/data/{id}")]
public async Task<bool> DeleteKnowledgeCollectionData([FromRoute] string collection, [FromRoute] string id)
{
return await _knowledgeService.DeleteKnowledgeCollectionData(collection, id);
}
2024-08-09 22:39:54 +00:00
[HttpPost("/knowledge/{collection}/upload")]
2024-08-11 19:44:57 +00:00
public async Task<IActionResult> UploadKnowledge([FromRoute] string collection, IFormFile file, [FromForm] int? startPageNum, [FromForm] int? endPageNum)
{
2024-08-09 21:06:48 +00:00
var setttings = _services.GetRequiredService<FileCoreSettings>();
var textConverter = _services.GetServices<IPdf2TextConverter>().FirstOrDefault(x => x.Name == setttings.Pdf2TextConverter);
var filePath = Path.GetTempFileName();
using (var stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None))
{
await file.CopyToAsync(stream);
await stream.FlushAsync();
}
var content = await textConverter.ConvertPdfToText(filePath, startPageNum, endPageNum);
2024-08-09 22:39:54 +00:00
await _knowledgeService.FeedKnowledge(collection, new KnowledgeCreationModel
{
Content = content
});
System.IO.File.Delete(filePath);
return Ok(new { count = 1, file.Length });
}
2023-08-19 00:15:02 +00:00
}