From 434b7a68e7cf4b8e763ac0a7bee43aca3a3695de Mon Sep 17 00:00:00 2001 From: Haiping Chen Date: Mon, 13 May 2024 08:57:39 -0500 Subject: [PATCH 1/2] Upgrade LLamaSharp to v0.12 --- .../BotSharp.OpenAPI/BotSharp.OpenAPI.csproj | 8 +++++--- .../BotSharp.OpenAPI/BotSharpOpenApiExtensions.cs | 14 ++++++++++++++ .../BotSharp.Plugin.LLamaSharp.csproj | 2 +- src/WebStarter/WebStarter.csproj | 4 ++-- src/WebStarter/appsettings.json | 4 ++++ 5 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/Infrastructure/BotSharp.OpenAPI/BotSharp.OpenAPI.csproj b/src/Infrastructure/BotSharp.OpenAPI/BotSharp.OpenAPI.csproj index f3495bb9..22fcc9e0 100644 --- a/src/Infrastructure/BotSharp.OpenAPI/BotSharp.OpenAPI.csproj +++ b/src/Infrastructure/BotSharp.OpenAPI/BotSharp.OpenAPI.csproj @@ -22,17 +22,19 @@ - + - - + + + + diff --git a/src/Infrastructure/BotSharp.OpenAPI/BotSharpOpenApiExtensions.cs b/src/Infrastructure/BotSharp.OpenAPI/BotSharpOpenApiExtensions.cs index 63a9bc92..eabdba84 100644 --- a/src/Infrastructure/BotSharp.OpenAPI/BotSharpOpenApiExtensions.cs +++ b/src/Infrastructure/BotSharp.OpenAPI/BotSharpOpenApiExtensions.cs @@ -126,6 +126,20 @@ public static class BotSharpOpenApiExtensions }); } + // Wexin OAuth + if (!string.IsNullOrWhiteSpace(config["OAuth:Wexin:ClientId"]) && !string.IsNullOrWhiteSpace(config["OAuth:Wexin:ClientSecret"])) + { + builder = builder.AddWeixin(options => + { + options.ClientId = config["OAuth:GitHub:ClientId"]; + options.ClientSecret = config["OAuth:GitHub:ClientSecret"]; + options.Scope.Add("user:email"); + options.Backchannel = builder.Services.BuildServiceProvider() + .GetRequiredService() + .CreateClient(); + }); + } + // Add services to the container. services.AddControllers() .AddJsonOptions(options => diff --git a/src/Plugins/BotSharp.Plugin.LLamaSharp/BotSharp.Plugin.LLamaSharp.csproj b/src/Plugins/BotSharp.Plugin.LLamaSharp/BotSharp.Plugin.LLamaSharp.csproj index cb9087e9..722dfa41 100644 --- a/src/Plugins/BotSharp.Plugin.LLamaSharp/BotSharp.Plugin.LLamaSharp.csproj +++ b/src/Plugins/BotSharp.Plugin.LLamaSharp/BotSharp.Plugin.LLamaSharp.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/WebStarter/WebStarter.csproj b/src/WebStarter/WebStarter.csproj index 89b09482..bef66c67 100644 --- a/src/WebStarter/WebStarter.csproj +++ b/src/WebStarter/WebStarter.csproj @@ -1,4 +1,4 @@ - + $(TargetFramework) @@ -22,7 +22,7 @@ - + diff --git a/src/WebStarter/appsettings.json b/src/WebStarter/appsettings.json index c6555f32..5482e6b1 100644 --- a/src/WebStarter/appsettings.json +++ b/src/WebStarter/appsettings.json @@ -33,6 +33,10 @@ "ClientId": "", "ClientSecret": "", "Version": 22 + }, + "Weixin": { + "AppId": "", + "AppSecret": "" } }, From d12954824b1920377314574d80d4ca409af29c3d Mon Sep 17 00:00:00 2001 From: Haiping Chen Date: Mon, 13 May 2024 08:58:26 -0500 Subject: [PATCH 2/2] All exclude some states when cleaning states. --- .../Conversations/IConversationStateService.cs | 2 +- .../Infrastructures/Enums/StateConst.cs | 2 ++ .../Services/ConversationService.UpdateBreakpoint.cs | 5 ++++- .../Conversations/Services/ConversationStateService.cs | 8 +++++++- .../BotSharp.Core/Routing/RoutingService.cs | 2 +- .../BotSharp.Core/Translation/TranslationResponseHook.cs | 2 +- .../BotSharp.Core/Translation/TranslationService.cs | 6 +++--- 7 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/Infrastructure/BotSharp.Abstraction/Conversations/IConversationStateService.cs b/src/Infrastructure/BotSharp.Abstraction/Conversations/IConversationStateService.cs index fe3f9193..5663e9a5 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Conversations/IConversationStateService.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Conversations/IConversationStateService.cs @@ -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(); } diff --git a/src/Infrastructure/BotSharp.Abstraction/Infrastructures/Enums/StateConst.cs b/src/Infrastructure/BotSharp.Abstraction/Infrastructures/Enums/StateConst.cs index 8b7fc37c..442c8ef8 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Infrastructures/Enums/StateConst.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Infrastructures/Enums/StateConst.cs @@ -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"; } diff --git a/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.UpdateBreakpoint.cs b/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.UpdateBreakpoint.cs index 6a3397fc..7453a202 100644 --- a/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.UpdateBreakpoint.cs +++ b/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.UpdateBreakpoint.cs @@ -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(); - states.CleanStates(); + // keep language state + states.CleanStates(StateConst.LANGUAGE); } var hooks = _services.GetServices() diff --git a/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationStateService.cs b/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationStateService.cs index 636d622e..4901a7c6 100644 --- a/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationStateService.cs +++ b/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationStateService.cs @@ -270,7 +270,7 @@ public class ConversationStateService : IConversationStateService, IDisposable return true; } - public void CleanStates() + public void CleanStates(params string[] keepStates) { var routingCtx = _services.GetRequiredService(); 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; diff --git a/src/Infrastructure/BotSharp.Core/Routing/RoutingService.cs b/src/Infrastructure/BotSharp.Core/Routing/RoutingService.cs index 885728a1..5e0ca8ac 100644 --- a/src/Infrastructure/BotSharp.Core/Routing/RoutingService.cs +++ b/src/Infrastructure/BotSharp.Core/Routing/RoutingService.cs @@ -88,7 +88,7 @@ public partial class RoutingService : IRoutingService { var translator = _services.GetRequiredService(); - var language = states.GetState("language", LanguageType.UNKNOWN); + var language = states.GetState(StateConst.LANGUAGE, LanguageType.UNKNOWN); if (language != LanguageType.ENGLISH) { message.SecondaryContent = message.Content; diff --git a/src/Infrastructure/BotSharp.Core/Translation/TranslationResponseHook.cs b/src/Infrastructure/BotSharp.Core/Translation/TranslationResponseHook.cs index d79c73a0..755aa110 100644 --- a/src/Infrastructure/BotSharp.Core/Translation/TranslationResponseHook.cs +++ b/src/Infrastructure/BotSharp.Core/Translation/TranslationResponseHook.cs @@ -31,7 +31,7 @@ namespace BotSharp.Logger.Hooks var agentService = _services.GetRequiredService(); var router = await agentService.LoadAgent(AIAssistant); var translator = _services.GetRequiredService(); - 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) diff --git a/src/Infrastructure/BotSharp.Core/Translation/TranslationService.cs b/src/Infrastructure/BotSharp.Core/Translation/TranslationService.cs index 07c2c973..4f23ade1 100644 --- a/src/Infrastructure/BotSharp.Core/Translation/TranslationService.cs +++ b/src/Infrastructure/BotSharp.Core/Translation/TranslationService.cs @@ -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(); - 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 { { "text_list", texts }, - { "language", language } + { StateConst.LANGUAGE, language } } };