From 991aa87b6b08d7414e4ed839884c1746162c7929 Mon Sep 17 00:00:00 2001 From: HavenDV Date: Wed, 10 Jan 2024 14:10:26 +0400 Subject: [PATCH] fix: Fixed warnings in latest PR. --- .../StackableChains/BaseStackableChain.cs | 31 ++++- .../StackableChains/Hooks/ConsoleTraceHook.cs | 121 +++++++++++------- .../Hooks/StackableChainHook.cs | 20 ++- .../Hooks/StackableChainValues.cs | 6 + .../Chains/StackableChains/StackChain.cs | 44 +++++-- src/libs/LangChain.Core/LangChain.Core.csproj | 2 +- 6 files changed, 158 insertions(+), 66 deletions(-) diff --git a/src/libs/LangChain.Core/Chains/StackableChains/BaseStackableChain.cs b/src/libs/LangChain.Core/Chains/StackableChains/BaseStackableChain.cs index 9a771e32..6cfde1fa 100644 --- a/src/libs/LangChain.Core/Chains/StackableChains/BaseStackableChain.cs +++ b/src/libs/LangChain.Core/Chains/StackableChains/BaseStackableChain.cs @@ -160,25 +160,44 @@ public async Task Run(StackableChainHook? hook=null) /// /// /// + /// /// - public async Task Run(string resultKey, StackableChainHook? hook = null) + public async Task Run( + string resultKey, + StackableChainHook? hook = null) { - var res = await CallAsync(new StackableChainValues() { Hook = hook }).ConfigureAwait(false); - return res.Value[resultKey].ToString(); + var values = await CallAsync(new StackableChainValues + { + Hook = hook, + }).ConfigureAwait(false); + + return values.Value[resultKey].ToString(); } /// /// /// /// + /// /// /// - public async Task Run(string resultKey, StackableChainHook? hook = null) + public async Task Run( + string resultKey, + StackableChainHook? hook = null) { - var res = await CallAsync(new StackableChainValues() { Hook = hook }).ConfigureAwait(false); - return (T)res.Value[resultKey]; + var values = await CallAsync(new StackableChainValues + { + Hook = hook, + }).ConfigureAwait(false); + + return (T)values.Value[resultKey]; } + /// + /// + /// + /// + /// public Task Run(string resultKey) { return Run(resultKey, null); diff --git a/src/libs/LangChain.Core/Chains/StackableChains/Hooks/ConsoleTraceHook.cs b/src/libs/LangChain.Core/Chains/StackableChains/Hooks/ConsoleTraceHook.cs index b7dd86c0..884b4e63 100644 --- a/src/libs/LangChain.Core/Chains/StackableChains/Hooks/ConsoleTraceHook.cs +++ b/src/libs/LangChain.Core/Chains/StackableChains/Hooks/ConsoleTraceHook.cs @@ -3,53 +3,72 @@ namespace LangChain.Chains.StackableChains.Context; +/// +/// +/// public class ConsoleTraceHook: StackableChainHook { - public bool UseColors { get; set; }=true; + /// + /// + /// + public bool UseColors { get; set; } = true; + + /// + /// + /// public int ValuesLength { get; set; } = 40; + + /// public override void ChainStart(StackableChainValues values) { Console.WriteLine(); } - public override void LinkEnter(BaseStackableChain chain, StackableChainValues values) + + /// + public override void LinkEnter( + BaseStackableChain chain, + StackableChainValues values) { - + chain = chain ?? throw new ArgumentNullException(nameof(chain)); + values = values ?? throw new ArgumentNullException(nameof(values)); + Console.Write("|"); Console.Write(chain.GetType().Name); Console.WriteLine(); - if (chain.InputKeys.Count > 0) + + if (chain.InputKeys.Count <= 0) + { + return; + } + + Console.Write("|"); + Console.Write(" "); + Console.Write("\u2514"); + Console.Write("Input:"); + Console.WriteLine(); + foreach (var inputKey in chain.InputKeys) { Console.Write("|"); - Console.Write(" "); + Console.Write(" "); Console.Write("\u2514"); - Console.Write("Input:"); + var value = values.Value[inputKey]; + var oldColor = Console.ForegroundColor; + Console.ForegroundColor = GetColorForKey(inputKey); + Console.Write($" {inputKey}={ShortenString(value.ToString() ?? "", ValuesLength)}"); + Console.ForegroundColor = oldColor; Console.WriteLine(); - foreach (string inputKey in chain.InputKeys) - { - Console.Write("|"); - Console.Write(" "); - Console.Write("\u2514"); - var value = values.Value[inputKey]; - var oldColor = Console.ForegroundColor; - Console.ForegroundColor = GetColorForKey(inputKey); - Console.Write($" {inputKey}={ShortenString(value.ToString() ?? "", ValuesLength)}"); - Console.ForegroundColor = oldColor; - Console.WriteLine(); - } } - - } - Dictionary _colorMap = new Dictionary(); + private readonly Dictionary _colorMap = new(); - ConsoleColor GetColorForKey(string key) + private ConsoleColor GetColorForKey(string key) { if(!UseColors) return Console.ForegroundColor; // if key is not in map, get unique color(except black and white) // if there no unique colors left, return white - if (!_colorMap.ContainsKey(key)) + if (!_colorMap.TryGetValue(key, out var value)) { var color = ConsoleColor.White; var colors = Enum.GetValues(typeof(ConsoleColor)); @@ -63,40 +82,54 @@ ConsoleColor GetColorForKey(string key) break; } } - _colorMap.Add(key, color); + + value = color; + _colorMap.Add(key, value); } - return _colorMap[key]; + + return value; } - string ShortenString(string str, int length) + private static string ShortenString(string str, int length) { if (str.Length <= length) + { return str; - return str.Substring(0, length - 3) + "..."; + } + + return str[..(length - 3)] + "..."; } - public override void LinkExit(BaseStackableChain chain, StackableChainValues values) + /// + public override void LinkExit( + BaseStackableChain chain, + StackableChainValues values) { - if (chain.OutputKeys.Count > 0) + chain = chain ?? throw new ArgumentNullException(nameof(chain)); + values = values ?? throw new ArgumentNullException(nameof(values)); + + if (chain.OutputKeys.Count <= 0) + { + return; + } + + Console.Write("|"); + Console.Write(" "); + Console.Write("\u2514"); + Console.Write("Output:"); + Console.WriteLine(); + + foreach (var outputKey in chain.OutputKeys) { Console.Write("|"); - Console.Write(" "); + Console.Write(" "); Console.Write("\u2514"); - Console.Write("Output:"); + var value = values.Value[outputKey]; + var oldColor = Console.ForegroundColor; + Console.ForegroundColor = GetColorForKey(outputKey); + Console.Write($" {outputKey}={ShortenString(value.ToString() ?? "", ValuesLength)}"); + Console.ForegroundColor = oldColor; Console.WriteLine(); - foreach (string outputKey in chain.OutputKeys) - { - Console.Write("|"); - Console.Write(" "); - Console.Write("\u2514"); - var value = values.Value[outputKey]; - var oldColor = Console.ForegroundColor; - Console.ForegroundColor = GetColorForKey(outputKey); - Console.Write($" {outputKey}={ShortenString(value.ToString() ?? "", ValuesLength)}"); - Console.ForegroundColor = oldColor; - Console.WriteLine(); - } } - } } \ No newline at end of file diff --git a/src/libs/LangChain.Core/Chains/StackableChains/Hooks/StackableChainHook.cs b/src/libs/LangChain.Core/Chains/StackableChains/Hooks/StackableChainHook.cs index a1a699c2..7a338c9b 100644 --- a/src/libs/LangChain.Core/Chains/StackableChains/Hooks/StackableChainHook.cs +++ b/src/libs/LangChain.Core/Chains/StackableChains/Hooks/StackableChainHook.cs @@ -2,20 +2,34 @@ namespace LangChain.Chains.StackableChains.Context; +/// +/// +/// public class StackableChainHook { + /// + /// + /// + /// public virtual void ChainStart(StackableChainValues values) { - } + /// + /// + /// + /// + /// public virtual void LinkEnter(BaseStackableChain chain, StackableChainValues values) { - } + /// + /// + /// + /// + /// public virtual void LinkExit(BaseStackableChain chain, StackableChainValues values) { - } } \ No newline at end of file diff --git a/src/libs/LangChain.Core/Chains/StackableChains/Hooks/StackableChainValues.cs b/src/libs/LangChain.Core/Chains/StackableChains/Hooks/StackableChainValues.cs index 11c88cf0..9b58300b 100644 --- a/src/libs/LangChain.Core/Chains/StackableChains/Hooks/StackableChainValues.cs +++ b/src/libs/LangChain.Core/Chains/StackableChains/Hooks/StackableChainValues.cs @@ -2,7 +2,13 @@ namespace LangChain.Chains.StackableChains.Context; +/// +/// +/// public class StackableChainValues : ChainValues { + /// + /// + /// public StackableChainHook? Hook { get; set; } } \ No newline at end of file diff --git a/src/libs/LangChain.Core/Chains/StackableChains/StackChain.cs b/src/libs/LangChain.Core/Chains/StackableChains/StackChain.cs index 0d69dce0..f58b50f7 100644 --- a/src/libs/LangChain.Core/Chains/StackableChains/StackChain.cs +++ b/src/libs/LangChain.Core/Chains/StackableChains/StackChain.cs @@ -1,6 +1,5 @@ using LangChain.Abstractions.Schema; using LangChain.Chains.StackableChains.Context; -using LangChain.Schema; namespace LangChain.Chains.HelperChains; @@ -55,30 +54,51 @@ public StackChain AsIsolated( protected override async Task InternalCall(IChainValues values) { values = values ?? throw new ArgumentNullException(nameof(values)); - + + var stackableChainValues = values as StackableChainValues; + var hook = stackableChainValues?.Hook; // since it is reference type, the values would be changed anyhow var originalValues = values; if (IsolatedInputKeys.Count > 0) { - var res = new StackableChainValues(){Hook = (values as StackableChainValues)?.Hook}; + var res = new StackableChainValues + { + Hook = hook, + }; foreach (var key in IsolatedInputKeys) { res.Value[key] = values.Value[key]; } values = res; } - if(a is not StackChain) - (values as StackableChainValues)?.Hook?.LinkEnter(a, (values as StackableChainValues)); + + if (a is not StackChain && + stackableChainValues != null) + { + hook?.LinkEnter(a, stackableChainValues); + } + await a.CallAsync(values).ConfigureAwait(false); - if (a is not StackChain) - (values as StackableChainValues)?.Hook?.LinkExit(a, (values as StackableChainValues)); + + if (a is not StackChain && + stackableChainValues != null) + { + hook?.LinkExit(a, stackableChainValues); + } + if (b is not StackChain && + stackableChainValues != null) + { + hook?.LinkEnter(b, stackableChainValues); + } - if (b is not StackChain) - (values as StackableChainValues)?.Hook?.LinkEnter(b, (values as StackableChainValues)); await b.CallAsync(values).ConfigureAwait(false); - if (b is not StackChain) - (values as StackableChainValues)?.Hook?.LinkExit(b, (values as StackableChainValues)); + + if (b is not StackChain && + stackableChainValues != null) + { + hook?.LinkExit(b, stackableChainValues); + } if (IsolatedOutputKeys.Count > 0) { @@ -86,8 +106,8 @@ protected override async Task InternalCall(IChainValues values) { originalValues.Value[key] = values.Value[key]; } - } + return originalValues; } diff --git a/src/libs/LangChain.Core/LangChain.Core.csproj b/src/libs/LangChain.Core/LangChain.Core.csproj index 9762ab6d..51995e1b 100644 --- a/src/libs/LangChain.Core/LangChain.Core.csproj +++ b/src/libs/LangChain.Core/LangChain.Core.csproj @@ -3,7 +3,7 @@ net4.6.2;netstandard2.0;net6.0;net7.0;net8.0 LangChain - $(NoWarn);CA1031;CA1822;CA1307;CA1002 + $(NoWarn);CA1031;CA1822;CA1307;CA1002;CA1303 $(NoWarn);CA2227;CA2214;CA1040;CA1812;CA1720;CS9107 $(NoWarn);CA1308;CA1862;CA1510;CA1850;CA1305;CA1725