ChatApi/Services/TextClassifier.cs
2024-12-22 15:49:43 -03:00

69 lines
2.2 KiB
C#

using ChatApi.Services.Classifier;
using ChatApi.Services.ClassifyHandlers;
namespace ChatApi.Services
{
public enum EnumClassification
{
Company=0,
Estimate=1,
BotRHCall = 2,
Chat = 3,
CantDetect=4
}
/// <summary>
/// enum
/// </summary>
public class TextClassifier
{
private readonly TextFilter _textFilter;
private readonly ClassifierPersistence _classifierPersistence;
private bool _needsRestart = false;
public bool NeedsRestart()
{
return _needsRestart;
}
public TextClassifier(TextFilter textFilter, ClassifierPersistence classifierPersistence)
{
_textFilter = textFilter;
_classifierPersistence = classifierPersistence;
}
public async Task<EnumClassification> ClassifyQuestion(string sessionId, string question)
{
var state = _classifierPersistence.GetState(sessionId);
if (state!=null && (state.ClassificationType == EnumClassificationType.Stay))
{
return state.Classification;
}
else
{
var classifyCompany = new ClassifyCompany();
var classifyChat = new ClassifyChat();
var botChat = new ClassifyBotRHCall();
classifyCompany
.SetNext(botChat)
.SetNext(classifyChat);
var classify = classifyCompany.Handle(question);
_needsRestart = state != null && classify == EnumClassification.BotRHCall && state.Classification != classify;
_classifierPersistence.SaveState(new ClassifierSate
{
Id = sessionId,
UsuarioId = sessionId,
Classification = classify,
LastClassification = state != null ? state.Classification : classify,
DhInicio = DateTime.Now,
ClassificationType = botChat.MyClassification == classify ? EnumClassificationType.Stay : EnumClassificationType.Free
});
return classify;
}
}
}
}