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

62 lines
2.3 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-07-25 01:24:14 +00:00
private const string AIAssistant = BuiltInAgentId.AIAssistant;
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)
{
2024-05-09 20:59:59 +00:00
var agentSettings = _services.GetRequiredService<AgentSettings>();
if (!agentSettings.EnableTranslator)
{
return;
}
2024-05-09 11:42:05 +00:00
// 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(StateConst.LANGUAGE, LanguageType.ENGLISH);
2024-05-09 11:42:05 +00:00
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);
}
}
}