Skip to content

Commit

Permalink
.Net: Fix KernelFunctionFromMethod.ToString (#6221)
Browse files Browse the repository at this point in the history
It currently fails to call ToString (throws a JSON serialization
exception). Change KernelFunction.ToString to just print out the name.
  • Loading branch information
stephentoub committed May 15, 2024
1 parent 4c130c6 commit cf91bc6
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,11 @@ await using (enumerator.ConfigureAwait(false))
/// </remarks>
public abstract KernelFunction Clone(string pluginName);

/// <inheritdoc/>
public override string ToString() => string.IsNullOrWhiteSpace(this.PluginName) ?
this.Name :
$"{this.PluginName}.{this.Name}";

/// <summary>
/// Invokes the <see cref="KernelFunction"/>.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.SemanticKernel.Text;

namespace Microsoft.SemanticKernel;

Expand Down Expand Up @@ -166,11 +165,6 @@ public override KernelFunction Clone(string pluginName)
this.Metadata.AdditionalProperties);
}

/// <summary>
/// JSON serialized string representation of the function.
/// </summary>
public override string ToString() => JsonSerializer.Serialize(this, JsonOptionsCache.WriteIndented);

/// <summary>Delegate used to invoke the underlying delegate.</summary>
private delegate ValueTask<FunctionResult> ImplementationFunc(
Kernel kernel,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -232,11 +232,6 @@ public override KernelFunction Clone(string pluginName)
this._logger);
}

/// <summary>
/// JSON serialized string representation of the function.
/// </summary>
public override string ToString() => JsonSerializer.Serialize(this);

private KernelFunctionFromPrompt(
IPromptTemplate template,
PromptTemplateConfig promptConfig,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,13 @@ public void ItRoundTripsCtorArguments()
{
KernelFunctionFactory.CreateFromMethod(() => { }, "Function1"),
KernelFunctionFactory.CreateFromMethod(() => { }, "Function2"),
KernelFunctionFactory.CreateFromMethod(() => { }, "Function3"),
KernelFunctionFactory.CreateFromPrompt("some prompt", functionName: "Function3"),
};

Assert.Equal("Function1", functions[0].ToString());
Assert.Equal("Function2", functions[1].ToString());
Assert.Equal("Function3", functions[2].ToString());

plugin = KernelPluginFactory.CreateFromFunctions("name", null, null);
Assert.Equal("name", plugin.Name);
Assert.Equal("", plugin.Description);
Expand All @@ -34,6 +38,10 @@ public void ItRoundTripsCtorArguments()
Assert.Equal(3, plugin.FunctionCount);
Assert.All(functions, f => Assert.True(plugin.Contains(f)));

Assert.Equal("name.Function1", plugin["Function1"].ToString());
Assert.Equal("name.Function2", plugin["Function2"].ToString());
Assert.Equal("name.Function3", plugin["Function3"].ToString());

plugin = KernelPluginFactory.CreateFromFunctions("name", "description");
Assert.Equal("name", plugin.Name);
Assert.Equal("description", plugin.Description);
Expand All @@ -44,6 +52,10 @@ public void ItRoundTripsCtorArguments()
Assert.Equal("description", plugin.Description);
Assert.Equal(3, plugin.FunctionCount);
Assert.All(functions, f => Assert.True(plugin.Contains(f)));

Assert.Equal("name.Function1", plugin["Function1"].ToString());
Assert.Equal("name.Function2", plugin["Function2"].ToString());
Assert.Equal("name.Function3", plugin["Function3"].ToString());
}

[Fact]
Expand Down

0 comments on commit cf91bc6

Please sign in to comment.