Merge pull request #445 from yileicn/optimize/translation

optimize translation
This commit is contained in:
C. Oceania 2024-05-09 07:28:18 -05:00 committed by GitHub
commit 6f200c4a50
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 54 additions and 24 deletions

View file

@ -144,30 +144,6 @@ public partial class RoutingService : IRoutingService
loopCount++;
}
// Handle multi-language for output
if (language != LanguageType.UNKNOWN && language != LanguageType.ENGLISH)
{
if (response.RichContent != null)
{
if (string.IsNullOrEmpty(response.RichContent.Message.Text))
{
response.RichContent.Message.Text = response.Content;
}
response.SecondaryRichContent = await translator.Translate(_router,
message.MessageId,
response.RichContent,
language: language);
}
else
{
response.SecondaryContent = await translator.Translate(_router,
message.MessageId,
response.Content,
language: language);
}
}
return response;
}

View file

@ -14,6 +14,7 @@ public static class BotSharpLoggerExtensions
services.AddScoped<IContentGeneratingHook, TokenStatsConversationHook>();
services.AddScoped<IContentGeneratingHook, VerboseLogHook>();
services.AddScoped<IConversationHook, RateLimitConversationHook>();
services.AddScoped<IConversationHook, TranslationResponseHook>();
return services;
}
}

View file

@ -0,0 +1,53 @@
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;
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>();
var router = await agentService.LoadAgent(message.CurrentAgentId);
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);
}
else
{
message.SecondaryContent = await translator.Translate(router,
message.MessageId,
message.Content,
language: language);
}
}
await base.OnResponseGenerated(message);
}
}
}