Skip to content

Commit

Permalink
fix: Fixed warnings in latest PR.
Browse files Browse the repository at this point in the history
  • Loading branch information
HavenDV committed Jan 10, 2024
1 parent 67dedc9 commit 991aa87
Show file tree
Hide file tree
Showing 6 changed files with 158 additions and 66 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -160,25 +160,44 @@ public async Task<IChainValues> Run(StackableChainHook? hook=null)
///
/// </summary>
/// <param name="resultKey"></param>
/// <param name="hook"></param>
/// <returns></returns>
public async Task<string?> Run(string resultKey, StackableChainHook? hook = null)
public async Task<string?> 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();
}

/// <summary>
///
/// </summary>
/// <param name="resultKey"></param>
/// <param name="hook"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public async Task<T> Run<T>(string resultKey, StackableChainHook? hook = null)
public async Task<T> Run<T>(
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];
}

/// <summary>
///
/// </summary>
/// <param name="resultKey"></param>
/// <returns></returns>
public Task<string?> Run(string resultKey)
{
return Run(resultKey, null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,53 +3,72 @@

namespace LangChain.Chains.StackableChains.Context;

/// <summary>
///
/// </summary>
public class ConsoleTraceHook: StackableChainHook
{
public bool UseColors { get; set; }=true;
/// <summary>
///
/// </summary>
public bool UseColors { get; set; } = true;

/// <summary>
///
/// </summary>
public int ValuesLength { get; set; } = 40;

/// <inheritdoc/>
public override void ChainStart(StackableChainValues values)
{
Console.WriteLine();
}
public override void LinkEnter(BaseStackableChain chain, StackableChainValues values)

/// <inheritdoc/>
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<string, ConsoleColor> _colorMap = new Dictionary<string, ConsoleColor>();
private readonly Dictionary<string, ConsoleColor> _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));
Expand All @@ -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)
/// <inheritdoc/>
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();
}
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,34 @@

namespace LangChain.Chains.StackableChains.Context;

/// <summary>
///
/// </summary>
public class StackableChainHook
{
/// <summary>
///
/// </summary>
/// <param name="values"></param>
public virtual void ChainStart(StackableChainValues values)
{

}

/// <summary>
///
/// </summary>
/// <param name="chain"></param>
/// <param name="values"></param>
public virtual void LinkEnter(BaseStackableChain chain, StackableChainValues values)
{

}

/// <summary>
///
/// </summary>
/// <param name="chain"></param>
/// <param name="values"></param>
public virtual void LinkExit(BaseStackableChain chain, StackableChainValues values)
{

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@

namespace LangChain.Chains.StackableChains.Context;

/// <summary>
///
/// </summary>
public class StackableChainValues : ChainValues
{
/// <summary>
///
/// </summary>
public StackableChainHook? Hook { get; set; }
}
44 changes: 32 additions & 12 deletions src/libs/LangChain.Core/Chains/StackableChains/StackChain.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using LangChain.Abstractions.Schema;
using LangChain.Chains.StackableChains.Context;
using LangChain.Schema;

namespace LangChain.Chains.HelperChains;

Expand Down Expand Up @@ -55,39 +54,60 @@ public StackChain AsIsolated(
protected override async Task<IChainValues> 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)
{
foreach (var key in IsolatedOutputKeys)
{
originalValues.Value[key] = values.Value[key];
}

}

return originalValues;
}

Expand Down
2 changes: 1 addition & 1 deletion src/libs/LangChain.Core/LangChain.Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFrameworks>net4.6.2;netstandard2.0;net6.0;net7.0;net8.0</TargetFrameworks>
<RootNamespace>LangChain</RootNamespace>
<NoWarn>$(NoWarn);CA1031;CA1822;CA1307;CA1002</NoWarn>
<NoWarn>$(NoWarn);CA1031;CA1822;CA1307;CA1002;CA1303</NoWarn>
<NoWarn>$(NoWarn);CA2227;CA2214;CA1040;CA1812;CA1720;CS9107</NoWarn>
<NoWarn>$(NoWarn);CA1308;CA1862;CA1510;CA1850;CA1305;CA1725</NoWarn>
</PropertyGroup>
Expand Down

0 comments on commit 991aa87

Please sign in to comment.