0.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)
- Add per-execution runId on all AI track event payloads for billing isolation (44ff485)
- Add ResumptionToken on ILdAiConfigTracker and ILdAiClient.CreateTracker(resumptionToken, context) for cross-process tracker reconstruction with the original runId (44ff485)
- Change CompletionConfig to return LdAiCompletionConfig instead of ILdAiConfigTracker — obtain a tracker via config.CreateTracker() (92f799f)
- Convert LdAiCompletionConfig and LdAiCompletionConfigDefault from records to classes — equality is reference-based instead of structural (92f799f)
- Default LdAiCompletionConfigDefault.Enabled to true per AISDK spec (was false on the LdAiConfig builder in 0.9.x) (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)
- Make LdAiConfigTracker SDK-constructed only — the public constructor is removed; obtain trackers via config.CreateTracker() or ILdAiClient.CreateTracker(resumptionToken, context) (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) (92f799f)
- Move Role from LaunchDarkly.Sdk.Server.Ai.DataModel into LdAiConfigTypes (ac7fd06)
- Move shared types nested in LdAiConfig into static LdAiConfigTypes — Message, ModelConfiguration, and ModelProvider (ac7fd06)
- Non-object variation handling — log an error and return the caller's default when the variation result is not an object (92f799f)
- Per-message interpolation fallback — a malformed Mustache template keeps raw content for that message rather than discarding the entire config (92f799f)
- Remove ILdAiConfigTracker.Config property — read config fields from the LdAiCompletionConfig the caller already holds (92f799f)
- Remove LaunchDarkly.Sdk.Server.Ai.DataModel namespace — delete unused AiConfig, Meta, Model, Provider, and Message JSON DTO classes (92f799f)
- Rename LdAiConfig.ModelConfiguration to LdAiConfigTypes.ModelConfig and LdAiConfig.ModelProvider to LdAiConfigTypes.ProviderConfig (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)
- Tolerant LdValue parsing — missing or wrong-typed fields degrade to typed defaults instead of discarding the whole config (92f799f)
This PR was generated with Release Please. See documentation.
<!-- CURSOR_SUMMARY -->