Skip to content

Commit b2e624f

Browse files
authored
Merge branch 'main' into jb/aic-1628/make-defaults-optional
2 parents b0e70b1 + ea0c109 commit b2e624f

8 files changed

Lines changed: 284 additions & 7 deletions

File tree

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"packages/sdk/server-ai": "0.14.2",
2+
"packages/sdk/server-ai": "0.15.0",
33
"packages/ai-providers/server-ai-langchain": "0.3.1",
44
"packages/ai-providers/server-ai-openai": "0.1.1"
55
}

packages/sdk/server-ai/CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33
All notable changes to the LaunchDarkly Python AI package will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org).
44

5+
## [0.15.0](https://github.com/launchdarkly/python-server-sdk-ai/compare/launchdarkly-server-sdk-ai-0.14.2...launchdarkly-server-sdk-ai-0.15.0) (2026-03-02)
6+
7+
8+
### Features
9+
10+
* add agent graph tracker ([#89](https://github.com/launchdarkly/python-server-sdk-ai/issues/89)) ([9d371fa](https://github.com/launchdarkly/python-server-sdk-ai/commit/9d371faa43c3028062e32f44f8693ede685cb7c6))
11+
512
## [0.14.2](https://github.com/launchdarkly/python-server-sdk-ai/compare/launchdarkly-server-sdk-ai-0.14.1...launchdarkly-server-sdk-ai-0.14.2) (2026-02-25)
613

714

packages/sdk/server-ai/PROVENANCE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ To verify SLSA provenance attestations, we recommend using [slsa-verifier](https
1010

1111
```
1212
# Set the version of the library to verify
13-
VERSION=0.14.2
13+
VERSION=0.15.0
1414
```
1515

1616
<!-- x-release-please-end -->

packages/sdk/server-ai/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "launchdarkly-server-sdk-ai"
3-
version = "0.14.2"
3+
version = "0.15.0"
44
description = "LaunchDarkly SDK for AI"
55
authors = ["LaunchDarkly <dev@launchdarkly.com>"]
66
license = "Apache-2.0"

packages/sdk/server-ai/src/ldai/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
__version__ = "0.14.2" # x-release-please-version
1+
__version__ = "0.15.0" # x-release-please-version
22

33
from ldclient import log
44

@@ -13,6 +13,7 @@
1313
Edge, JudgeConfiguration, LDAIAgent, LDAIAgentConfig, LDAIAgentDefaults,
1414
LDMessage, ModelConfig, ProviderConfig)
1515
from ldai.providers.types import EvalScore, JudgeResponse
16+
from ldai.tracker import AIGraphTracker
1617

1718
__all__ = [
1819
'LDAIClient',
@@ -21,6 +22,7 @@
2122
'AIAgentConfigRequest',
2223
'AIAgents',
2324
'AIAgentGraphConfig',
25+
'AIGraphTracker',
2426
'Edge',
2527
'AICompletionConfig',
2628
'AICompletionConfigDefault',

packages/sdk/server-ai/src/ldai/agent_graph/__init__.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
"""Graph implementation for managing AI agent graphs."""
22

3-
from dataclasses import dataclass
43
from typing import Any, Callable, Dict, List, Optional, Set
54

65
from ldclient import Context
76

87
from ldai.models import AIAgentConfig, AIAgentGraphConfig, Edge
8+
from ldai.tracker import AIGraphTracker
99

1010
DEFAULT_FALSE = AIAgentConfig(key="", enabled=False)
1111

@@ -54,11 +54,21 @@ def __init__(
5454
nodes: Dict[str, AgentGraphNode],
5555
context: Context,
5656
enabled: bool,
57+
tracker: Optional[AIGraphTracker] = None,
5758
):
5859
self._agent_graph = agent_graph
5960
self._context = context
6061
self._nodes = nodes
6162
self.enabled = enabled
63+
self._tracker = tracker
64+
65+
def get_tracker(self) -> Optional[AIGraphTracker]:
66+
"""
67+
Get the graph tracker for this graph definition.
68+
69+
:return: The AIGraphTracker instance, or None if not available.
70+
"""
71+
return self._tracker
6272

6373
def is_enabled(self) -> bool:
6474
"""Check if the graph is enabled."""

packages/sdk/server-ai/src/ldai/client.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
ProviderConfig)
1717
from ldai.providers.ai_provider_factory import AIProviderFactory
1818
from ldai.sdk_info import AI_SDK_LANGUAGE, AI_SDK_NAME, AI_SDK_VERSION
19-
from ldai.tracker import LDAIConfigTracker
19+
from ldai.tracker import AIGraphTracker, LDAIConfigTracker
2020

2121
_TRACK_SDK_INFO = '$ld:ai:sdk:info'
2222
_TRACK_USAGE_COMPLETION_CONFIG = '$ld:ai:usage:completion-config'
@@ -485,6 +485,19 @@ def agent_graph(
485485
"""
486486
variation = self._client.variation(key, context, {})
487487

488+
# Extract variation metadata for tracker
489+
variation_key = variation.get("_ldMeta", {}).get("variationKey", "")
490+
version = int(variation.get("_ldMeta", {}).get("version", 1))
491+
492+
# Create graph tracker
493+
tracker = AIGraphTracker(
494+
self._client,
495+
variation_key,
496+
key,
497+
version,
498+
context,
499+
)
500+
488501
if not variation.get("root"):
489502
log.debug(f"Agent graph {key} is disabled, no root config key found")
490503
return AgentGraphDefinition(
@@ -497,6 +510,7 @@ def agent_graph(
497510
nodes={},
498511
context=context,
499512
enabled=False,
513+
tracker=tracker,
500514
)
501515

502516
edge_keys = list[str](variation.get("edges", {}).keys())
@@ -524,6 +538,7 @@ def agent_graph(
524538
nodes={},
525539
context=context,
526540
enabled=False,
541+
tracker=tracker,
527542
)
528543

529544
try:
@@ -554,6 +569,7 @@ def agent_graph(
554569
nodes={},
555570
context=context,
556571
enabled=False,
572+
tracker=tracker,
557573
)
558574

559575
nodes = AgentGraphDefinition.build_nodes(
@@ -566,6 +582,7 @@ def agent_graph(
566582
nodes=nodes,
567583
context=context,
568584
enabled=agent_graph_config.enabled,
585+
tracker=tracker,
569586
)
570587

571588
def agents(

0 commit comments

Comments
 (0)