Skip to content

feat(AIC-3449): refactor AI Config reference into a dataclass - #113

Merged
aknight-ld merged 1 commit into
mainfrom
AIC-3449-refine-config-defs
Sep 28, 2026
Merged

aknight-ld merged 1 commit into
mainfrom
AIC-3449-refine-config-defs

Conversation

@aknight-ld

@aknight-ld aknight-ld commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor

Making the relationship between config and variation keys explicit for easier validation. No functional changes beyond this minor refactor.


Note

Overview
Breaking API change: EvaluationsModule.run() no longer accepts separate ai_config and variation string arguments. Callers must pass a single AIConfig(key=..., variation=...) frozen dataclass when seeding a run from an existing AI Config variation.

The new type is exported from launchdarkly_ai_server and launchdarkly_ai_server.evaluations. Validation now checks ai_config.key and ai_config.variation for blank values (replacing the old paired-parameter errors). Fetching, merging with generation, tools, judges, and logging behavior are unchanged aside from using the struct’s fields.

Reviewed by Cursor Bugbot for commit 2bb40bb. Bugbot is set up for automated code reviews on this repo. Configure here.

@aknight-ld
aknight-ld requested a review from donei003 September 25, 2026 19:13

@donei003 donei003 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Just had a commenting regarding the ability to re-use a dataclass if one exists.



@dataclass(frozen=True)
class AIConfig:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have ways to evaluate an AI Config in the SDK already. Is there anywhere in the SDK that returns an AI Config object? If so, we should re-use that class if possible.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

none that I could find in searching. if we move forward with the proposed UX changes we can refine/consolidate

@aknight-ld
aknight-ld merged commit 3ac06b4 into main Sep 28, 2026
8 checks passed
@aknight-ld
aknight-ld deleted the AIC-3449-refine-config-defs branch September 28, 2026 15:23
@github-actions github-actions Bot mentioned this pull request Sep 28, 2026
donei003 added a commit that referenced this pull request Sep 30, 2026
🤖 I have created a release *beep* *boop*
---


<details><summary>launchdarkly-ai-server: 0.2.4</summary>

##
[0.2.4](launchdarkly-ai-server-0.2.3...launchdarkly-ai-server-0.2.4)
(2026-09-30)


### Features

* **AIC-3210:** support graph().stream() in the Python AI SDK
([#104](#104))
([25a345a](25a345a))
* **AIC-3211:** record each graph node as its own tracking event
([#114](#114))
([c3c439e](c3c439e))
* **AIC-3449:** refactor AI Config reference into a dataclass
([#113](#113))
([3ac06b4](3ac06b4))
* **AIC-3449:** Support pulling in configs for evals from code
([#108](#108))
([fa374e2](fa374e2))
* **evaluations:** preserve the tool trajectory for judges
([#89](#89))
([bcaa8c8](bcaa8c8))


### Bug Fixes

* **graph:** rename the graph span back to launchdarkly.graph, thread
trajectory into stream judges
([79c9eeb](79c9eeb))
* **judges:** bound recorded values in memory, and show config's full
tool catalog
([25fafef](25fafef))
* **judges:** exclude native tools from the config's available-tool list
([245a0a5](245a0a5))
* **judges:** keep trajectory recording total and observational
([57386b6](57386b6))
</details>

<details><summary>launchdarkly-ai-python: 0.1.8</summary>

##
[0.1.8](launchdarkly-ai-python-0.1.7...launchdarkly-ai-python-0.1.8)
(2026-09-30)


### Features

* **evaluations:** preserve the tool trajectory for judges
([#89](#89))
([bcaa8c8](bcaa8c8))
</details>

<details><summary>launchdarkly-ai-claude-agents: 0.2.4</summary>

##
[0.2.4](launchdarkly-ai-claude-agents-0.2.3...launchdarkly-ai-claude-agents-0.2.4)
(2026-09-30)


### Features

* **AIC-3211:** record each graph node as its own tracking event
([#114](#114))
([c3c439e](c3c439e))
</details>

<details><summary>launchdarkly-ai-openai-agents: 0.2.4</summary>

##
[0.2.4](launchdarkly-ai-openai-agents-0.2.3...launchdarkly-ai-openai-agents-0.2.4)
(2026-09-30)


### Features

* **AIC-3211:** record each graph node as its own tracking event
([#114](#114))
([c3c439e](c3c439e))


### Bug Fixes

* **openai-agents:** accept sync tool handlers
([0ac9231](0ac9231))
* **openai-agents:** accept sync tool handlers
([#119](#119))
([656d922](656d922))
</details>

<details><summary>launchdarkly-ai-langchain-agents: 0.2.4</summary>

##
[0.2.4](launchdarkly-ai-langchain-agents-0.2.3...launchdarkly-ai-langchain-agents-0.2.4)
(2026-09-30)


### Features

* **AIC-3211:** record each graph node as its own tracking event
([#114](#114))
([c3c439e](c3c439e))
</details>

---
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]
> **Overview**
> **Release Please** bumps monorepo package versions and adds changelog
entries; there is no new application source in the diff—only
`.release-please-manifest.json`, `pyproject.toml`, `__version__`, and
`CHANGELOG.md` updates.
> 
> **`launchdarkly-ai-server` 0.2.4** (and aligned **claude / openai /
langchain-agents** 0.2.4, **`launchdarkly-ai-python`** 0.1.8) documents
already-merged work: **`graph().stream()`**, **per-graph-node tracking
events**, **AI Config as a dataclass** and **eval configs from code**,
**tool trajectory preserved for judges**, plus judge/graph telemetry
fixes (e.g. `launchdarkly.graph` span, bounded trajectory memory, native
tools excluded from available-tool lists) and **openai-agents**
accepting **sync tool handlers**.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
27fba0e. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants