Skip to content

Commit e5b7cd1

Browse files
jsonbaileyclaude
andcommitted
fix: Update provider packages for graph_key-on-init refactor
Remove graph_key kwarg from tracker method calls in langchain and openai provider packages. Fix line length in client.py. Update test helpers to pass graph_key at node tracker construction. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 2237bce commit e5b7cd1

6 files changed

Lines changed: 58 additions & 20 deletions

File tree

packages/ai-providers/server-ai-langchain/src/ldai_langchain/langgraph_callback_handler.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,6 @@ def flush(self, graph: AgentGraphDefinition, graph_tracker: Any) -> None:
197197
:param graph: The AgentGraphDefinition whose nodes hold the LD config trackers.
198198
:param graph_tracker: The AIGraphTracker for the overall graph (may be None).
199199
"""
200-
gk = graph_tracker.graph_key if graph_tracker is not None else None
201200
for node_key in self._path:
202201
node = graph.get_node(node_key)
203202
if not node:
@@ -208,13 +207,13 @@ def flush(self, graph: AgentGraphDefinition, graph_tracker: Any) -> None:
208207

209208
usage = self._node_tokens.get(node_key)
210209
if usage:
211-
config_tracker.track_tokens(usage, graph_key=gk)
210+
config_tracker.track_tokens(usage)
212211

213212
duration = self._node_duration_ms.get(node_key)
214213
if duration is not None:
215-
config_tracker.track_duration(duration, graph_key=gk)
214+
config_tracker.track_duration(duration)
216215

217-
config_tracker.track_success(graph_key=gk)
216+
config_tracker.track_success()
218217

219218
for tool_key in self._node_tool_calls.get(node_key, []):
220-
config_tracker.track_tool_call(tool_key, graph_key=gk)
219+
config_tracker.track_tool_call(tool_key)

packages/ai-providers/server-ai-langchain/tests/test_langgraph_callback_handler.py

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ def _make_graph(mock_ld_client: MagicMock, node_key: str = 'root-agent', graph_k
3535
model_name='gpt-4',
3636
provider_name='openai',
3737
context=context,
38+
graph_key=graph_key,
3839
)
3940
graph_tracker = AIGraphTracker(
4041
ld_client=mock_ld_client,
@@ -389,16 +390,47 @@ def test_flush_includes_graph_key_in_node_events():
389390
assert token_data.get('graphKey') == 'my-graph'
390391

391392

392-
def test_flush_with_none_tracker_uses_no_graph_key():
393-
"""flush() with graph_tracker=None does not fail and omits graphKey."""
393+
def test_flush_with_no_graph_key_on_node_tracker():
394+
"""When node tracker has no graph_key, events omit graphKey."""
394395
mock_ld_client = MagicMock()
395-
graph = _make_graph(mock_ld_client)
396+
context = MagicMock()
397+
node_tracker = LDAIConfigTracker(
398+
ld_client=mock_ld_client,
399+
variation_key='v1',
400+
config_key='root-agent',
401+
version=1,
402+
model_name='gpt-4',
403+
provider_name='openai',
404+
context=context,
405+
)
406+
node_config = AIAgentConfig(
407+
key='root-agent',
408+
enabled=True,
409+
model=ModelConfig(name='gpt-4', parameters={}),
410+
provider=ProviderConfig(name='openai'),
411+
instructions='Be helpful.',
412+
tracker=node_tracker,
413+
)
414+
graph_config = AIAgentGraphConfig(
415+
key='test-graph',
416+
root_config_key='root-agent',
417+
edges=[],
418+
enabled=True,
419+
)
420+
nodes = AgentGraphDefinition.build_nodes(graph_config, {'root-agent': node_config})
421+
graph = AgentGraphDefinition(
422+
agent_graph=graph_config,
423+
nodes=nodes,
424+
context=context,
425+
enabled=True,
426+
tracker=None,
427+
)
396428

397429
handler = LDMetricsCallbackHandler({'root-agent'}, {})
398430
node_run_id = uuid4()
399431
handler.on_chain_start({}, {}, run_id=node_run_id, name='root-agent')
400432
handler.on_llm_end(_llm_result(5, 3, 2), run_id=uuid4(), parent_run_id=node_run_id)
401-
handler.flush(graph, None) # graph_tracker=None
433+
handler.flush(graph, None)
402434

403435
ev = _events(mock_ld_client)
404436
token_data = ev['$ld:ai:tokens:total'][0][0]

packages/ai-providers/server-ai-langchain/tests/test_tracking_langgraph.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ def _make_graph(
4545
model_name='gpt-4',
4646
provider_name='openai',
4747
context=context,
48+
graph_key=graph_key,
4849
)
4950

5051
graph_tracker = AIGraphTracker(
@@ -141,6 +142,7 @@ def _make_two_node_graph(mock_ld_client: MagicMock) -> 'AgentGraphDefinition':
141142
model_name='gpt-4',
142143
provider_name='openai',
143144
context=context,
145+
graph_key='two-node-graph',
144146
)
145147
child_tracker = LDAIConfigTracker(
146148
ld_client=mock_ld_client,
@@ -150,6 +152,7 @@ def _make_two_node_graph(mock_ld_client: MagicMock) -> 'AgentGraphDefinition':
150152
model_name='gpt-4',
151153
provider_name='openai',
152154
context=context,
155+
graph_key='two-node-graph',
153156
)
154157
graph_tracker = AIGraphTracker(
155158
ld_client=mock_ld_client,
@@ -517,6 +520,7 @@ def _node_tracker(key: str) -> LDAIConfigTracker:
517520
model_name='gpt-4',
518521
provider_name='openai',
519522
context=context,
523+
graph_key='multi-child-graph',
520524
)
521525

522526
graph_tracker = AIGraphTracker(
@@ -627,6 +631,7 @@ def _node_tracker(key: str) -> LDAIConfigTracker:
627631
model_name='gpt-4',
628632
provider_name='openai',
629633
context=context,
634+
graph_key='multi-child-tools-graph',
630635
)
631636

632637
graph_tracker = AIGraphTracker(

packages/ai-providers/server-ai-openai/src/ldai_openai/openai_agent_graph_runner.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -248,13 +248,12 @@ def _handle_handoff(
248248
except Exception:
249249
pass
250250

251-
gk = tracker.graph_key if tracker is not None else None
252251
if config_tracker is not None:
253252
if usage is not None:
254-
config_tracker.track_tokens(usage, graph_key=gk)
253+
config_tracker.track_tokens(usage)
255254
if duration_ms is not None:
256-
config_tracker.track_duration(int(duration_ms), graph_key=gk)
257-
config_tracker.track_success(graph_key=gk)
255+
config_tracker.track_duration(int(duration_ms))
256+
config_tracker.track_success()
258257

259258
def _flush_final_segment(
260259
self,
@@ -283,15 +282,13 @@ def _flush_final_segment(
283282
except Exception:
284283
pass
285284

286-
gk = tracker.graph_key if tracker is not None else None
287285
if usage is not None:
288-
config_tracker.track_tokens(usage, graph_key=gk)
289-
config_tracker.track_duration(int(duration_ms), graph_key=gk)
290-
config_tracker.track_success(graph_key=gk)
286+
config_tracker.track_tokens(usage)
287+
config_tracker.track_duration(int(duration_ms))
288+
config_tracker.track_success()
291289

292290
def _track_tool_calls(self, result: Any, tracker: Any) -> None:
293291
"""Track all tool calls from the run result, attributed to the node that called them."""
294-
gk = tracker.graph_key if tracker is not None else None
295292
for agent_name, tool_fn_name in get_tool_calls_from_run_items(result.new_items):
296293
agent_key = self._agent_name_map.get(agent_name, agent_name)
297294
tool_name = self._tool_name_map.get(tool_fn_name)
@@ -302,4 +299,4 @@ def _track_tool_calls(self, result: Any, tracker: Any) -> None:
302299
continue
303300
config_tracker = node.get_config().tracker
304301
if config_tracker is not None:
305-
config_tracker.track_tool_call(tool_name, graph_key=gk)
302+
config_tracker.track_tool_call(tool_name)

packages/ai-providers/server-ai-openai/tests/test_tracking_openai_agents.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ def _make_graph(
4040
model_name='gpt-4',
4141
provider_name='openai',
4242
context=context,
43+
graph_key=graph_key,
4344
)
4445

4546
graph_tracker = AIGraphTracker(
@@ -178,6 +179,7 @@ def _make_two_node_graph(mock_ld_client: MagicMock) -> AgentGraphDefinition:
178179
model_name='gpt-4',
179180
provider_name='openai',
180181
context=context,
182+
graph_key='two-node-graph',
181183
)
182184
child_tracker = LDAIConfigTracker(
183185
ld_client=mock_ld_client,
@@ -187,6 +189,7 @@ def _make_two_node_graph(mock_ld_client: MagicMock) -> AgentGraphDefinition:
187189
model_name='gpt-4',
188190
provider_name='openai',
189191
context=context,
192+
graph_key='two-node-graph',
190193
)
191194
graph_tracker = AIGraphTracker(
192195
ld_client=mock_ld_client,

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,9 @@ def agent_graph(
608608

609609
graph_key_value = key
610610
agent_configs = {
611-
agent_key: self.__evaluate_agent(agent_key, context, AIAgentConfigDefault(enabled=False), graph_key=graph_key_value)
611+
agent_key: self.__evaluate_agent(
612+
agent_key, context, AIAgentConfigDefault(enabled=False), graph_key=graph_key_value
613+
)
612614
for agent_key in all_agent_keys
613615
}
614616

0 commit comments

Comments
 (0)