commit
6bcb0ae7a6
|
|
@ -5,6 +5,7 @@ public class AgentSettings
|
||||||
public string DataDir { get; set; } = string.Empty;
|
public string DataDir { get; set; } = string.Empty;
|
||||||
public string TemplateFormat { get; set; } = "liquid";
|
public string TemplateFormat { get; set; } = "liquid";
|
||||||
public string HostAgentId { get; set; } = string.Empty;
|
public string HostAgentId { get; set; } = string.Empty;
|
||||||
|
public bool EnableTranslator { get; set; } = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This is the default LLM config for agent
|
/// This is the default LLM config for agent
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
namespace BotSharp.Abstraction.Translation.Models;
|
||||||
|
|
||||||
|
public class TranslationOutput
|
||||||
|
{
|
||||||
|
[JsonPropertyName("input_lang")]
|
||||||
|
public string InputLanguage { get; set; } = null!;
|
||||||
|
|
||||||
|
[JsonPropertyName("output_lang")]
|
||||||
|
public string OutputLanguage { get; set; } = LanguageType.ENGLISH;
|
||||||
|
|
||||||
|
[JsonPropertyName("texts")]
|
||||||
|
public string[] Texts { get; set; } = Array.Empty<string>();
|
||||||
|
}
|
||||||
|
|
@ -28,10 +28,7 @@ public class RouteToAgentRoutingHandler : RoutingHandlerBase, IRoutingHandler
|
||||||
required: true),
|
required: true),
|
||||||
new ParameterPropertyDef("is_new_task",
|
new ParameterPropertyDef("is_new_task",
|
||||||
"whether the user is requesting a new task that is different from the previous topic.",
|
"whether the user is requesting a new task that is different from the previous topic.",
|
||||||
type: "boolean"),
|
type: "boolean")
|
||||||
new ParameterPropertyDef("language",
|
|
||||||
"User preferred language, considering the whole conversation. Language could be English, Spanish or Chinese.",
|
|
||||||
required: true)
|
|
||||||
};
|
};
|
||||||
|
|
||||||
public RouteToAgentRoutingHandler(IServiceProvider services, ILogger<RouteToAgentRoutingHandler> logger, RoutingSettings settings)
|
public RouteToAgentRoutingHandler(IServiceProvider services, ILogger<RouteToAgentRoutingHandler> logger, RoutingSettings settings)
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ public partial class RoutingService
|
||||||
role = agent.Name;
|
role = agent.Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
conversation += $"{role}: {dialog.Payload ?? dialog.SecondaryContent ?? dialog.Content}\r\n";
|
conversation += $"{role}: {dialog.Payload ?? dialog.Content}\r\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
return conversation;
|
return conversation;
|
||||||
|
|
|
||||||
|
|
@ -82,26 +82,29 @@ public partial class RoutingService : IRoutingService
|
||||||
|
|
||||||
_context.Push(_router.Id);
|
_context.Push(_router.Id);
|
||||||
|
|
||||||
|
// Handle multi-language for input
|
||||||
|
var agentSettings = _services.GetRequiredService<AgentSettings>();
|
||||||
|
if (agentSettings.EnableTranslator)
|
||||||
|
{
|
||||||
|
var translator = _services.GetRequiredService<ITranslationService>();
|
||||||
|
|
||||||
|
var language = states.GetState("language", LanguageType.UNKNOWN);
|
||||||
|
if (language != LanguageType.ENGLISH)
|
||||||
|
{
|
||||||
|
message.SecondaryContent = message.Content;
|
||||||
|
message.Content = await translator.Translate(_router, message.MessageId, message.Content,
|
||||||
|
language: LanguageType.ENGLISH,
|
||||||
|
clone: false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dialogs.Add(message);
|
dialogs.Add(message);
|
||||||
|
storage.Append(convService.ConversationId, message);
|
||||||
|
|
||||||
// Get first instruction
|
// Get first instruction
|
||||||
_router.TemplateDict["conversation"] = await GetConversationContent(dialogs);
|
_router.TemplateDict["conversation"] = await GetConversationContent(dialogs);
|
||||||
var inst = await planner.GetNextInstruction(_router, message.MessageId, dialogs);
|
var inst = await planner.GetNextInstruction(_router, message.MessageId, dialogs);
|
||||||
|
|
||||||
// Handle multi-language for input
|
|
||||||
var translator = _services.GetRequiredService<ITranslationService>();
|
|
||||||
|
|
||||||
var language = states.GetState("language", inst.Language);
|
|
||||||
if (language != LanguageType.UNKNOWN && language != LanguageType.ENGLISH)
|
|
||||||
{
|
|
||||||
message.SecondaryContent = message.Content;
|
|
||||||
message.Content = await translator.Translate(_router, message.MessageId, message.Content,
|
|
||||||
language: LanguageType.ENGLISH,
|
|
||||||
clone: false);
|
|
||||||
}
|
|
||||||
|
|
||||||
storage.Append(convService.ConversationId, message);
|
|
||||||
|
|
||||||
int loopCount = 1;
|
int loopCount = 1;
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,12 @@ namespace BotSharp.Logger.Hooks
|
||||||
}
|
}
|
||||||
public override async Task OnResponseGenerated(RoleDialogModel message)
|
public override async Task OnResponseGenerated(RoleDialogModel message)
|
||||||
{
|
{
|
||||||
|
var agentSettings = _services.GetRequiredService<AgentSettings>();
|
||||||
|
if (!agentSettings.EnableTranslator)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Handle multi-language for output
|
// Handle multi-language for output
|
||||||
var agentService = _services.GetRequiredService<IAgentService>();
|
var agentService = _services.GetRequiredService<IAgentService>();
|
||||||
var router = await agentService.LoadAgent(AIAssistant);
|
var router = await agentService.LoadAgent(AIAssistant);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
|
using BotSharp.Abstraction.Infrastructures.Enums;
|
||||||
using BotSharp.Abstraction.MLTasks;
|
using BotSharp.Abstraction.MLTasks;
|
||||||
using BotSharp.Abstraction.Options;
|
using BotSharp.Abstraction.Options;
|
||||||
using BotSharp.Abstraction.Templating;
|
using BotSharp.Abstraction.Templating;
|
||||||
|
using BotSharp.Abstraction.Translation.Models;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
|
|
@ -57,7 +59,13 @@ public class TranslationService : ITranslationService
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var translatedTexts = translatedStringList.JsonArrayContent<string>();
|
// Override language if it's Unknown, it's used to output the corresponding language.
|
||||||
|
var states = _services.GetRequiredService<IConversationStateService>();
|
||||||
|
var inputLanguage = string.IsNullOrEmpty(translatedStringList.InputLanguage) ? LanguageType.ENGLISH : translatedStringList.InputLanguage;
|
||||||
|
var languageState = states.GetState("language", inputLanguage);
|
||||||
|
states.SetState("language", languageState, activeRounds: 1);
|
||||||
|
|
||||||
|
var translatedTexts = translatedStringList.Texts;
|
||||||
var map = new Dictionary<string, string>();
|
var map = new Dictionary<string, string>();
|
||||||
|
|
||||||
for (var i = 0; i < texts.Length; i++)
|
for (var i = 0; i < texts.Length; i++)
|
||||||
|
|
@ -283,7 +291,7 @@ public class TranslationService : ITranslationService
|
||||||
/// <param name="list"></param>
|
/// <param name="list"></param>
|
||||||
/// <param name="language"></param>
|
/// <param name="language"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private async Task<string> InnerTranslate(string texts, string language, string template)
|
private async Task<TranslationOutput> InnerTranslate(string texts, string language, string template)
|
||||||
{
|
{
|
||||||
var translator = new Agent
|
var translator = new Agent
|
||||||
{
|
{
|
||||||
|
|
@ -308,7 +316,7 @@ public class TranslationService : ITranslationService
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
var response = await _completion.GetChatCompletions(translator, translationDialogs);
|
var response = await _completion.GetChatCompletions(translator, translationDialogs);
|
||||||
return response.Content;
|
return response.Content.JsonContent<TranslationOutput>();
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Type methods
|
#region Type methods
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
{{ text_list }}
|
{{ text_list }}
|
||||||
|
|
||||||
=====
|
=====
|
||||||
Translate the above sentences in the list into {{ language }}, output the translated text in JSON array [""].
|
Translate the above sentences in the list into {{ language }}.
|
||||||
|
Output the translated text in JSON {"input_lang":"", "output_lang":"{{ language }}", "texts":[""]}, input_lang is based on the original sentences.
|
||||||
Loading…
Reference in a new issue