Skip to content

Commit 81f8345

Browse files
chore(main): release LaunchDarkly.ServerSdk.Ai 0.10.0 (#278)
🤖 I have created a release *beep* *boop* --- ## [0.10.0](LaunchDarkly.ServerSdk.Ai-v0.9.4...LaunchDarkly.ServerSdk.Ai-v0.10.0) (2026-06-05) ### ⚠ BREAKING CHANGES * Move Role from LaunchDarkly.Sdk.Server.Ai.DataModel into LdAiConfigTypes * Rename LdAiConfig.ModelConfiguration to LdAiConfigTypes.ModelConfig and LdAiConfig.ModelProvider to LdAiConfigTypes.ProviderConfig * Move shared types nested in LdAiConfig into static LdAiConfigTypes — Message, ModelConfiguration, and ModelProvider * Enforce at-most-once tracking — each metric type (duration, tokens, feedback, success/error, time-to-first-token) records once per tracker; duplicates are dropped with a warning * Add ResumptionToken on ILdAiConfigTracker and ILdAiClient.CreateTracker(resumptionToken, context) for cross-process tracker reconstruction with the original runId * Add per-execution runId on all AI track event payloads for billing isolation * Change CompletionConfig to return LdAiCompletionConfig instead of ILdAiConfigTracker — obtain a tracker via config.CreateTracker() * Default LdAiCompletionConfigDefault.Enabled to true per AISDK spec (was false on the LdAiConfig builder in 0.9.x) * Remove ILdAiConfigTracker.Config property — read config fields from the LdAiCompletionConfig the caller already holds * Make LdAiConfigTracker SDK-constructed only — the public constructor is removed; obtain trackers via config.CreateTracker() or ILdAiClient.CreateTracker(resumptionToken, context) * Convert LdAiCompletionConfig and LdAiCompletionConfigDefault from records to classes — equality is reference-based instead of structural * Remove LaunchDarkly.Sdk.Server.Ai.DataModel namespace — delete unused AiConfig, Meta, Model, Provider, and Message JSON DTO classes * Split unified LdAiConfig into LdAiCompletionConfig (SDK output) and LdAiCompletionConfigDefault (user input) — Builder, New(), and Disabled move to the Default type; introduce abstract LdAiConfig and LdAiConfigDefault base types for future agent/judge modes ### Features * Add MetricSummary property on ILdAiConfigTracker summarizing recorded metrics ([44ff485](44ff485)) * Add per-execution runId on all AI track event payloads for billing isolation ([44ff485](44ff485)) * Add ResumptionToken on ILdAiConfigTracker and ILdAiClient.CreateTracker(resumptionToken, context) for cross-process tracker reconstruction with the original runId ([44ff485](44ff485)) * Change CompletionConfig to return LdAiCompletionConfig instead of ILdAiConfigTracker — obtain a tracker via config.CreateTracker() ([92f799f](92f799f)) * Convert LdAiCompletionConfig and LdAiCompletionConfigDefault from records to classes — equality is reference-based instead of structural ([92f799f](92f799f)) * Default LdAiCompletionConfigDefault.Enabled to true per AISDK spec (was false on the LdAiConfig builder in 0.9.x) ([92f799f](92f799f)) * Enforce at-most-once tracking — each metric type (duration, tokens, feedback, success/error, time-to-first-token) records once per tracker; duplicates are dropped with a warning ([44ff485](44ff485)) * Make LdAiConfigTracker SDK-constructed only — the public constructor is removed; obtain trackers via config.CreateTracker() or ILdAiClient.CreateTracker(resumptionToken, context) ([92f799f](92f799f)) * Mode-mismatch detection — log a warning and return the caller's default when the flag's _ldMeta.mode does not match the requested mode (per sdk-specs[#229](#229)) ([92f799f](92f799f)) * Move Role from LaunchDarkly.Sdk.Server.Ai.DataModel into LdAiConfigTypes ([ac7fd06](ac7fd06)) * Move shared types nested in LdAiConfig into static LdAiConfigTypes — Message, ModelConfiguration, and ModelProvider ([ac7fd06](ac7fd06)) * Non-object variation handling — log an error and return the caller's default when the variation result is not an object ([92f799f](92f799f)) * Per-message interpolation fallback — a malformed Mustache template keeps raw content for that message rather than discarding the entire config ([92f799f](92f799f)) * Remove ILdAiConfigTracker.Config property — read config fields from the LdAiCompletionConfig the caller already holds ([92f799f](92f799f)) * Remove LaunchDarkly.Sdk.Server.Ai.DataModel namespace — delete unused AiConfig, Meta, Model, Provider, and Message JSON DTO classes ([92f799f](92f799f)) * Rename LdAiConfig.ModelConfiguration to LdAiConfigTypes.ModelConfig and LdAiConfig.ModelProvider to LdAiConfigTypes.ProviderConfig ([ac7fd06](ac7fd06)) * Split unified LdAiConfig into LdAiCompletionConfig (SDK output) and LdAiCompletionConfigDefault (user input) — Builder, New(), and Disabled move to the Default type; introduce abstract LdAiConfig and LdAiConfigDefault base types for future agent/judge modes ([92f799f](92f799f)) * Tolerant LdValue parsing — missing or wrong-typed fields degrade to typed defaults instead of discarding the whole config ([92f799f](92f799f)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **High Risk** > The tagged release ships extensive breaking public API and telemetry/billing semantics; this PR is low-risk mechanically but merging it publishes high consumer upgrade risk. > > **Overview** > **Release Please PR** that publishes **LaunchDarkly.ServerSdk.Ai 0.10.0** by bumping `0.9.4` → `0.10.0` in `.release-please-manifest.json`, `LaunchDarkly.ServerSdk.Ai.csproj`, `SdkInfo.Version`, and `PROVENANCE.md`, and adding the **0.10.0** section to `CHANGELOG.md`. > > The changelog documents a **breaking** AI SDK realignment with the AISDK spec: split `LdAiConfig` into **`LdAiCompletionConfig`** (evaluation output) vs **`LdAiCompletionConfigDefault`** (caller input); **`CompletionConfig` returns config, not a tracker** (`config.CreateTracker()` / `ILdAiClient.CreateTracker(resumptionToken, context)`); tracker construction is SDK-only with **`runId`**, **resumption tokens**, **at-most-once metrics**, and **`MetricSummary`**; shared types move to **`LdAiConfigTypes`** and **`DataModel` is removed**; completion defaults default **`Enabled` to true**; config/records become **classes** (reference equality). Non-breaking behavior called out includes tolerant **`LdValue` parsing**, mode-mismatch and non-object variation fallbacks, and per-message Mustache fallback. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 82deb10. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY --> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent ac7fd06 commit 81f8345

5 files changed

Lines changed: 44 additions & 4 deletions

File tree

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"pkgs/sdk/server": "8.14.0",
66
"pkgs/sdk/client": "5.8.0",
77
"pkgs/telemetry": "1.5.1",
8-
"pkgs/sdk/server-ai": "0.9.4",
8+
"pkgs/sdk/server-ai": "0.10.0",
99
"pkgs/shared/common": "7.2.0",
1010
"pkgs/shared/common-json-net": "7.0.2"
1111
}

pkgs/sdk/server-ai/CHANGELOG.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,45 @@
11
# Changelog
22

3+
## [0.10.0](https://github.com/launchdarkly/dotnet-core/compare/LaunchDarkly.ServerSdk.Ai-v0.9.4...LaunchDarkly.ServerSdk.Ai-v0.10.0) (2026-06-05)
4+
5+
6+
### ⚠ BREAKING CHANGES
7+
8+
* Move Role from LaunchDarkly.Sdk.Server.Ai.DataModel into LdAiConfigTypes
9+
* Rename LdAiConfig.ModelConfiguration to LdAiConfigTypes.ModelConfig and LdAiConfig.ModelProvider to LdAiConfigTypes.ProviderConfig
10+
* Move shared types nested in LdAiConfig into static LdAiConfigTypes — Message, ModelConfiguration, and ModelProvider
11+
* Enforce at-most-once tracking — each metric type (duration, tokens, feedback, success/error, time-to-first-token) records once per tracker; duplicates are dropped with a warning
12+
* Add ResumptionToken on ILdAiConfigTracker and ILdAiClient.CreateTracker(resumptionToken, context) for cross-process tracker reconstruction with the original runId
13+
* Add per-execution runId on all AI track event payloads for billing isolation
14+
* Change CompletionConfig to return LdAiCompletionConfig instead of ILdAiConfigTracker — obtain a tracker via config.CreateTracker()
15+
* Default LdAiCompletionConfigDefault.Enabled to true per AISDK spec (was false on the LdAiConfig builder in 0.9.x)
16+
* Remove ILdAiConfigTracker.Config property — read config fields from the LdAiCompletionConfig the caller already holds
17+
* Make LdAiConfigTracker SDK-constructed only — the public constructor is removed; obtain trackers via config.CreateTracker() or ILdAiClient.CreateTracker(resumptionToken, context)
18+
* Convert LdAiCompletionConfig and LdAiCompletionConfigDefault from records to classes — equality is reference-based instead of structural
19+
* Remove LaunchDarkly.Sdk.Server.Ai.DataModel namespace — delete unused AiConfig, Meta, Model, Provider, and Message JSON DTO classes
20+
* Split unified LdAiConfig into LdAiCompletionConfig (SDK output) and LdAiCompletionConfigDefault (user input) — Builder, New(), and Disabled move to the Default type; introduce abstract LdAiConfig and LdAiConfigDefault base types for future agent/judge modes
21+
22+
### Features
23+
24+
* Add MetricSummary property on ILdAiConfigTracker summarizing recorded metrics ([44ff485](https://github.com/launchdarkly/dotnet-core/commit/44ff485fcc3095b3adea81d142bc865cd0904d12))
25+
* Add per-execution runId on all AI track event payloads for billing isolation ([44ff485](https://github.com/launchdarkly/dotnet-core/commit/44ff485fcc3095b3adea81d142bc865cd0904d12))
26+
* Add ResumptionToken on ILdAiConfigTracker and ILdAiClient.CreateTracker(resumptionToken, context) for cross-process tracker reconstruction with the original runId ([44ff485](https://github.com/launchdarkly/dotnet-core/commit/44ff485fcc3095b3adea81d142bc865cd0904d12))
27+
* Change CompletionConfig to return LdAiCompletionConfig instead of ILdAiConfigTracker — obtain a tracker via config.CreateTracker() ([92f799f](https://github.com/launchdarkly/dotnet-core/commit/92f799f6681772eb1b34dd808517ce98845f70c6))
28+
* Convert LdAiCompletionConfig and LdAiCompletionConfigDefault from records to classes — equality is reference-based instead of structural ([92f799f](https://github.com/launchdarkly/dotnet-core/commit/92f799f6681772eb1b34dd808517ce98845f70c6))
29+
* Default LdAiCompletionConfigDefault.Enabled to true per AISDK spec (was false on the LdAiConfig builder in 0.9.x) ([92f799f](https://github.com/launchdarkly/dotnet-core/commit/92f799f6681772eb1b34dd808517ce98845f70c6))
30+
* Enforce at-most-once tracking — each metric type (duration, tokens, feedback, success/error, time-to-first-token) records once per tracker; duplicates are dropped with a warning ([44ff485](https://github.com/launchdarkly/dotnet-core/commit/44ff485fcc3095b3adea81d142bc865cd0904d12))
31+
* Make LdAiConfigTracker SDK-constructed only — the public constructor is removed; obtain trackers via config.CreateTracker() or ILdAiClient.CreateTracker(resumptionToken, context) ([92f799f](https://github.com/launchdarkly/dotnet-core/commit/92f799f6681772eb1b34dd808517ce98845f70c6))
32+
* Mode-mismatch detection — log a warning and return the caller's default when the flag's _ldMeta.mode does not match the requested mode (per sdk-specs[#229](https://github.com/launchdarkly/dotnet-core/issues/229)) ([92f799f](https://github.com/launchdarkly/dotnet-core/commit/92f799f6681772eb1b34dd808517ce98845f70c6))
33+
* Move Role from LaunchDarkly.Sdk.Server.Ai.DataModel into LdAiConfigTypes ([ac7fd06](https://github.com/launchdarkly/dotnet-core/commit/ac7fd06ffa078b701f19b2eb16982103207633ff))
34+
* Move shared types nested in LdAiConfig into static LdAiConfigTypes — Message, ModelConfiguration, and ModelProvider ([ac7fd06](https://github.com/launchdarkly/dotnet-core/commit/ac7fd06ffa078b701f19b2eb16982103207633ff))
35+
* Non-object variation handling — log an error and return the caller's default when the variation result is not an object ([92f799f](https://github.com/launchdarkly/dotnet-core/commit/92f799f6681772eb1b34dd808517ce98845f70c6))
36+
* Per-message interpolation fallback — a malformed Mustache template keeps raw content for that message rather than discarding the entire config ([92f799f](https://github.com/launchdarkly/dotnet-core/commit/92f799f6681772eb1b34dd808517ce98845f70c6))
37+
* Remove ILdAiConfigTracker.Config property — read config fields from the LdAiCompletionConfig the caller already holds ([92f799f](https://github.com/launchdarkly/dotnet-core/commit/92f799f6681772eb1b34dd808517ce98845f70c6))
38+
* Remove LaunchDarkly.Sdk.Server.Ai.DataModel namespace — delete unused AiConfig, Meta, Model, Provider, and Message JSON DTO classes ([92f799f](https://github.com/launchdarkly/dotnet-core/commit/92f799f6681772eb1b34dd808517ce98845f70c6))
39+
* Rename LdAiConfig.ModelConfiguration to LdAiConfigTypes.ModelConfig and LdAiConfig.ModelProvider to LdAiConfigTypes.ProviderConfig ([ac7fd06](https://github.com/launchdarkly/dotnet-core/commit/ac7fd06ffa078b701f19b2eb16982103207633ff))
40+
* Split unified LdAiConfig into LdAiCompletionConfig (SDK output) and LdAiCompletionConfigDefault (user input) — Builder, New(), and Disabled move to the Default type; introduce abstract LdAiConfig and LdAiConfigDefault base types for future agent/judge modes ([92f799f](https://github.com/launchdarkly/dotnet-core/commit/92f799f6681772eb1b34dd808517ce98845f70c6))
41+
* Tolerant LdValue parsing — missing or wrong-typed fields degrade to typed defaults instead of discarding the whole config ([92f799f](https://github.com/launchdarkly/dotnet-core/commit/92f799f6681772eb1b34dd808517ce98845f70c6))
42+
343
## [0.9.4](https://github.com/launchdarkly/dotnet-core/compare/LaunchDarkly.ServerSdk.Ai-v0.9.3...LaunchDarkly.ServerSdk.Ai-v0.9.4) (2026-05-27)
444

545

pkgs/sdk/server-ai/PROVENANCE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ To verify build provenance attestations, we recommend using the [GitHub CLI `att
99
<!-- x-release-please-start-version -->
1010
```
1111
# Set the version of the SDK to verify
12-
SDK_VERSION=0.9.4
12+
SDK_VERSION=0.10.0
1313
```
1414
<!-- x-release-please-end -->
1515

pkgs/sdk/server-ai/src/LaunchDarkly.ServerSdk.Ai.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
33
<!--x-release-please-start-version-->
4-
<Version>0.9.4</Version>
4+
<Version>0.10.0</Version>
55
<!--x-release-please-end-->
66
<!-- The BUILDFRAMEWORKS variable allows us to override the target frameworks with a
77
single framework that we are testing; this allows us to test with older SDK

pkgs/sdk/server-ai/src/SdkInfo.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public static class SdkInfo
1313
/// <summary>
1414
/// The version of the AI SDK package.
1515
/// </summary>
16-
public const string Version = "0.9.4"; // x-release-please-version
16+
public const string Version = "0.10.0"; // x-release-please-version
1717

1818
/// <summary>
1919
/// The implementation language.

0 commit comments

Comments
 (0)