All exclude some states when cleaning states.

This commit is contained in:
Haiping Chen 2024-05-13 08:58:26 -05:00
parent 434b7a68e7
commit d12954824b
7 changed files with 19 additions and 8 deletions

View file

@ -17,6 +17,6 @@ public interface IConversationStateService
int activeRounds = -1, string valueType = StateDataType.String, string source = StateSource.User, bool readOnly = false);
void SaveStateByArgs(JsonDocument args);
bool RemoveState(string name);
void CleanStates();
void CleanStates(params string[] keepStates);
void Save();
}

View file

@ -7,4 +7,6 @@ public class StateConst
public const string NEXT_ACTION_AGENT = "next_action_agent";
public const string NEXT_ACTION_REASON = "next_action_reason";
public const string USER_GOAL_AGENT = "user_goal_agent";
public const string LANGUAGE = "language";
}

View file

@ -1,3 +1,5 @@
using BotSharp.Abstraction.Infrastructures.Enums;
namespace BotSharp.Core.Conversations.Services;
public partial class ConversationService : IConversationService
@ -19,7 +21,8 @@ public partial class ConversationService : IConversationService
if (resetStates)
{
var states = _services.GetRequiredService<IConversationStateService>();
states.CleanStates();
// keep language state
states.CleanStates(StateConst.LANGUAGE);
}
var hooks = _services.GetServices<IConversationHook>()

View file

@ -270,7 +270,7 @@ public class ConversationStateService : IConversationStateService, IDisposable
return true;
}
public void CleanStates()
public void CleanStates(params string[] keepStates)
{
var routingCtx = _services.GetRequiredService<IRoutingContext>();
var curMsgId = routingCtx.MessageId;
@ -278,6 +278,12 @@ public class ConversationStateService : IConversationStateService, IDisposable
foreach (var key in _curStates.Keys)
{
// skip state
if (keepStates.Contains(key))
{
continue;
}
var value = _curStates[key];
if (value == null || !value.Versioning || value.Values.IsNullOrEmpty()) continue;

View file

@ -88,7 +88,7 @@ public partial class RoutingService : IRoutingService
{
var translator = _services.GetRequiredService<ITranslationService>();
var language = states.GetState("language", LanguageType.UNKNOWN);
var language = states.GetState(StateConst.LANGUAGE, LanguageType.UNKNOWN);
if (language != LanguageType.ENGLISH)
{
message.SecondaryContent = message.Content;

View file

@ -31,7 +31,7 @@ namespace BotSharp.Logger.Hooks
var agentService = _services.GetRequiredService<IAgentService>();
var router = await agentService.LoadAgent(AIAssistant);
var translator = _services.GetRequiredService<ITranslationService>();
var language = _states.GetState("language", LanguageType.ENGLISH);
var language = _states.GetState(StateConst.LANGUAGE, LanguageType.ENGLISH);
if (language != LanguageType.UNKNOWN && language != LanguageType.ENGLISH)
{
if (message.RichContent != null)

View file

@ -61,10 +61,10 @@ public class TranslationService : ITranslationService
{
// Override language if it's Unknown, it's used to output the corresponding language.
var states = _services.GetRequiredService<IConversationStateService>();
if (!states.ContainsState("language"))
if (!states.ContainsState(StateConst.LANGUAGE))
{
var inputLanguage = string.IsNullOrEmpty(translatedStringList.InputLanguage) ? LanguageType.ENGLISH : translatedStringList.InputLanguage;
states.SetState("language", inputLanguage, activeRounds: 1);
states.SetState(StateConst.LANGUAGE, inputLanguage, activeRounds: 1);
}
var translatedTexts = translatedStringList.Texts;
@ -302,7 +302,7 @@ public class TranslationService : ITranslationService
TemplateDict = new Dictionary<string, object>
{
{ "text_list", texts },
{ "language", language }
{ StateConst.LANGUAGE, language }
}
};