BotSharp/src/Infrastructure/BotSharp.Core/Translation/TranslationResponseHook.cs

56 lines
2.1 KiB
C#
Raw Normal View History

2024-05-09 11:42:05 +00:00
using BotSharp.Abstraction.Agents;
using BotSharp.Abstraction.Infrastructures.Enums;
using BotSharp.Abstraction.Translation;
using System;
using System.Collections.Generic;
using System.Text;
namespace BotSharp.Logger.Hooks
{
public class TranslationResponseHook : ConversationHookBase
{
private readonly IServiceProvider _services;
private readonly IConversationStateService _states;
2024-05-09 15:05:21 +00:00
private const string AIAssistant = "01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a";
2024-05-09 11:42:05 +00:00
public TranslationResponseHook(IServiceProvider services,
IConversationStateService states)
{
_services = services;
_states = states;
}
public override async Task OnResponseGenerated(RoleDialogModel message)
{
// Handle multi-language for output
var agentService = _services.GetRequiredService<IAgentService>();
2024-05-09 15:05:21 +00:00
var router = await agentService.LoadAgent(AIAssistant);
2024-05-09 11:42:05 +00:00
var translator = _services.GetRequiredService<ITranslationService>();
var language = _states.GetState("language", LanguageType.ENGLISH);
if (language != LanguageType.UNKNOWN && language != LanguageType.ENGLISH)
{
if (message.RichContent != null)
{
if (string.IsNullOrEmpty(message.RichContent.Message.Text))
{
message.RichContent.Message.Text = message.Content;
}
message.SecondaryRichContent = await translator.Translate(router,
message.MessageId,
message.RichContent,
language: language);
2024-05-09 17:11:30 +00:00
message.SecondaryContent = message.SecondaryRichContent.Message.Text;
2024-05-09 11:42:05 +00:00
}
else
{
message.SecondaryContent = await translator.Translate(router,
message.MessageId,
message.Content,
language: language);
}
}
await base.OnResponseGenerated(message);
}
}
}