Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions pkgs/sdk/server-ai/src/Interfaces/ILdAiClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,11 @@ public interface ILdAiClient
/// </summary>
/// <param name="key">the AI Completion Config key</param>
/// <param name="context">the context</param>
/// <param name="defaultValue">the default config, if unable to retrieve from LaunchDarkly</param>
/// <param name="defaultValue">the default config, if unable to retrieve from LaunchDarkly. When not provided,
/// a disabled config is used as the fallback.</param>
/// <param name="variables">the list of variables used when interpolating the prompt</param>
/// <returns>an AI Completion Config tracker</returns>
public ILdAiConfigTracker CompletionConfig(string key, Context context, LdAiConfig defaultValue,
public ILdAiConfigTracker CompletionConfig(string key, Context context, LdAiConfig defaultValue = null,
IReadOnlyDictionary<string, object> variables = null);

/// <summary>
Expand All @@ -37,6 +38,6 @@ public ILdAiConfigTracker CompletionConfig(string key, Context context, LdAiConf
/// <param name="variables">the list of variables used when interpolating the prompt</param>
/// <returns>an AI Completion Config tracker</returns>
[Obsolete("Use CompletionConfig instead.")]
public ILdAiConfigTracker Config(string key, Context context, LdAiConfig defaultValue,
public ILdAiConfigTracker Config(string key, Context context, LdAiConfig defaultValue = null,
IReadOnlyDictionary<string, object> variables = null);
}
5 changes: 3 additions & 2 deletions pkgs/sdk/server-ai/src/LdAiClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,11 @@ public LdAiClient(ILaunchDarklyClient client)
private const string LdContextVariable = "ldctx";

/// <inheritdoc/>
public ILdAiConfigTracker CompletionConfig(string key, Context context, LdAiConfig defaultValue,
public ILdAiConfigTracker CompletionConfig(string key, Context context, LdAiConfig defaultValue = null,
IReadOnlyDictionary<string, object> variables = null)
{
_client.Track(TrackUsageCompletionConfig, context, LdValue.Of(key), 1);
defaultValue ??= LdAiConfig.Disabled;

return Evaluate(key, context, defaultValue, variables);
}
Expand Down Expand Up @@ -129,7 +130,7 @@ private ILdAiConfigTracker Evaluate(string key, Context context, LdAiConfig defa
/// <param name="variables">the list of variables used when interpolating the prompt</param>
/// <returns>an AI Completion Config tracker</returns>
[Obsolete("Use CompletionConfig instead.")]
public ILdAiConfigTracker Config(string key, Context context, LdAiConfig defaultValue,
public ILdAiConfigTracker Config(string key, Context context, LdAiConfig defaultValue = null,
IReadOnlyDictionary<string, object> variables = null)
{
return CompletionConfig(key, context, defaultValue, variables);
Expand Down
31 changes: 31 additions & 0 deletions pkgs/sdk/server-ai/test/LdAiClientTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -324,4 +324,35 @@ public void ProviderConfigIsParsed()

Assert.Equal("amazing-provider", tracker.Config.Provider.Name);
}

[Fact]
public void ConfigWithoutDefaultValueUsesDisabledConfig()
{
var mockClient = new Mock<ILaunchDarklyClient>();
var mockLogger = new Mock<ILogger>();

mockClient.Setup(x =>
x.JsonVariation("foo", It.IsAny<Context>(), It.IsAny<LdValue>())).Returns(LdValue.Null);
mockClient.Setup(x => x.GetLogger()).Returns(mockLogger.Object);

var client = new LdAiClient(mockClient.Object);
var tracker = client.Config("foo", Context.New(ContextKind.Default, "key"));

Assert.False(tracker.Config.Enabled);
}

[Fact]
public void DisabledMethodReturnsDisabledConfig()
{
var config = LdAiConfig.Disabled;
Assert.False(config.Enabled);
}

[Fact]
public void DisabledMethodReturnsNewInstanceEachCall()
{
var first = LdAiConfig.Disabled;
var second = LdAiConfig.Disabled;
Assert.NotSame(first, second);
}
}
Loading