Skip to content

Commit ae5d752

Browse files
jsonbaileyclaude
andcommitted
fix: Update provider packages for tracker factory pattern
Migrate langchain and openai provider packages from config.tracker to config.create_tracker() and fix test signatures to match. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 08da63a commit ae5d752

8 files changed

Lines changed: 23 additions & 24 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ def flush(self, graph: AgentGraphDefinition) -> None:
200200
node = graph.get_node(node_key)
201201
if not node:
202202
continue
203-
config_tracker = node.get_config().tracker
203+
config_tracker = node.get_config().create_tracker()
204204
if not config_tracker:
205205
continue
206206

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,6 @@ def sync_tool(x: str = '') -> str:
536536
),
537537
provider=ProviderConfig(name='openai'),
538538
instructions='',
539-
tracker=MagicMock(),
540539
)
541540
tools = build_structured_tools(cfg, {'my_tool': sync_tool})
542541
assert len(tools) == 1
@@ -559,7 +558,6 @@ async def async_tool(x: str = '') -> str:
559558
),
560559
provider=ProviderConfig(name='openai'),
561560
instructions='',
562-
tracker=MagicMock(),
563561
)
564562
tools = build_structured_tools(cfg, {'my_tool': async_tool})
565563
assert len(tools) == 1

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ def _make_graph(enabled: bool = True) -> AgentGraphDefinition:
1717
model=ModelConfig(name='gpt-4'),
1818
provider=ProviderConfig(name='openai'),
1919
instructions='You are a helpful assistant.',
20-
tracker=MagicMock(),
2120
)
2221
graph_config = AIAgentGraphConfig(
2322
key='test-graph',

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def _make_graph(mock_ld_client: MagicMock, node_key: str = 'root-agent', graph_k
5151
model=ModelConfig(name='gpt-4', parameters={}),
5252
provider=ProviderConfig(name='openai'),
5353
instructions='Be helpful.',
54-
tracker=node_tracker,
54+
create_tracker=lambda: node_tracker,
5555
)
5656
graph_config = AIAgentGraphConfig(
5757
key=graph_key,
@@ -411,7 +411,7 @@ def test_flush_with_no_graph_key_on_node_tracker():
411411
model=ModelConfig(name='gpt-4', parameters={}),
412412
provider=ProviderConfig(name='openai'),
413413
instructions='Be helpful.',
414-
tracker=node_tracker,
414+
create_tracker=lambda: node_tracker,
415415
)
416416
graph_config = AIAgentGraphConfig(
417417
key='test-graph',
@@ -465,7 +465,6 @@ def test_flush_skips_node_without_tracker():
465465
model=ModelConfig(name='gpt-4', parameters={}),
466466
provider=ProviderConfig(name='openai'),
467467
instructions='',
468-
tracker=None,
469468
)
470469
graph_config = AIAgentGraphConfig(
471470
key='g', root_config_key='no-track', edges=[], enabled=True

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

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def _make_graph(
6969
model=ModelConfig(name='gpt-4', parameters={'tools': tool_defs} if tool_defs else {}),
7070
provider=ProviderConfig(name='openai'),
7171
instructions='You are a helpful assistant.',
72-
tracker=node_tracker,
72+
create_tracker=lambda: node_tracker,
7373
)
7474

7575
graph_config = AIAgentGraphConfig(
@@ -171,15 +171,15 @@ def _make_two_node_graph(mock_ld_client: MagicMock) -> 'AgentGraphDefinition':
171171
model=ModelConfig(name='gpt-4', parameters={}),
172172
provider=ProviderConfig(name='openai'),
173173
instructions='You are root.',
174-
tracker=root_tracker,
174+
create_tracker=lambda: root_tracker,
175175
)
176176
child_config = AIAgentConfig(
177177
key='child-agent',
178178
enabled=True,
179179
model=ModelConfig(name='gpt-4', parameters={}),
180180
provider=ProviderConfig(name='openai'),
181181
instructions='You are child.',
182-
tracker=child_tracker,
182+
create_tracker=lambda: child_tracker,
183183
)
184184

185185
edge = Edge(key='root-to-child', source_config='root-agent', target_config='child-agent')
@@ -517,6 +517,7 @@ def _make_multi_child_graph(mock_ld_client: MagicMock) -> 'AgentGraphDefinition'
517517
def _node_tracker(key: str) -> LDAIConfigTracker:
518518
return LDAIConfigTracker(
519519
ld_client=mock_ld_client,
520+
run_id='test-run-id',
520521
variation_key='test-variation',
521522
config_key=key,
522523
version=1,
@@ -541,23 +542,23 @@ def _node_tracker(key: str) -> LDAIConfigTracker:
541542
model=ModelConfig(name='gpt-4', parameters={}),
542543
provider=ProviderConfig(name='openai'),
543544
instructions='Route to the appropriate specialist agent.',
544-
tracker=_node_tracker('orchestrator'),
545+
create_tracker=lambda: _node_tracker('orchestrator'),
545546
),
546547
'agent-a': AIAgentConfig(
547548
key='agent-a',
548549
enabled=True,
549550
model=ModelConfig(name='gpt-4', parameters={}),
550551
provider=ProviderConfig(name='openai'),
551552
instructions='You handle topic A.',
552-
tracker=_node_tracker('agent-a'),
553+
create_tracker=lambda: _node_tracker('agent-a'),
553554
),
554555
'agent-b': AIAgentConfig(
555556
key='agent-b',
556557
enabled=True,
557558
model=ModelConfig(name='gpt-4', parameters={}),
558559
provider=ProviderConfig(name='openai'),
559560
instructions='You handle topic B.',
560-
tracker=_node_tracker('agent-b'),
561+
create_tracker=lambda: _node_tracker('agent-b'),
561562
),
562563
}
563564

@@ -628,6 +629,7 @@ def _make_multi_child_graph_with_tools(mock_ld_client: MagicMock, tool_names: li
628629
def _node_tracker(key: str) -> LDAIConfigTracker:
629630
return LDAIConfigTracker(
630631
ld_client=mock_ld_client,
632+
run_id='test-run-id',
631633
variation_key='test-variation',
632634
config_key=key,
633635
version=1,
@@ -653,23 +655,23 @@ def _node_tracker(key: str) -> LDAIConfigTracker:
653655
model=ModelConfig(name='gpt-4', parameters={'tools': tool_defs}),
654656
provider=ProviderConfig(name='openai'),
655657
instructions='Route to a specialist after gathering info.',
656-
tracker=_node_tracker('orchestrator'),
658+
create_tracker=lambda: _node_tracker('orchestrator'),
657659
),
658660
'agent-a': AIAgentConfig(
659661
key='agent-a',
660662
enabled=True,
661663
model=ModelConfig(name='gpt-4', parameters={}),
662664
provider=ProviderConfig(name='openai'),
663665
instructions='You handle topic A.',
664-
tracker=_node_tracker('agent-a'),
666+
create_tracker=lambda: _node_tracker('agent-a'),
665667
),
666668
'agent-b': AIAgentConfig(
667669
key='agent-b',
668670
enabled=True,
669671
model=ModelConfig(name='gpt-4', parameters={}),
670672
provider=ProviderConfig(name='openai'),
671673
instructions='You handle topic B.',
672-
tracker=_node_tracker('agent-b'),
674+
create_tracker=lambda: _node_tracker('agent-b'),
673675
),
674676
}
675677

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ def _build_agents(self, path: List[str], state: _RunState) -> Any:
148148

149149
def build_node(node: AgentGraphNode, ctx: dict) -> Any:
150150
node_config = node.get_config()
151-
config_tracker = node_config.tracker
151+
config_tracker = node_config.create_tracker()
152152
model = node_config.model
153153

154154
if not model:
@@ -266,7 +266,7 @@ def _flush_final_segment(
266266
node = self._graph.get_node(state.last_node_key)
267267
if node is None:
268268
return
269-
config_tracker = node.get_config().tracker
269+
config_tracker = node.get_config().create_tracker()
270270
if config_tracker is None:
271271
return
272272

@@ -296,6 +296,6 @@ def _track_tool_calls(self, result: Any) -> None:
296296
node = self._graph.get_node(agent_key)
297297
if node is None:
298298
continue
299-
config_tracker = node.get_config().tracker
299+
config_tracker = node.get_config().create_tracker()
300300
if config_tracker is not None:
301301
config_tracker.track_tool_call(tool_name)

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,14 @@
1212

1313
def _make_graph(enabled: bool = True) -> AgentGraphDefinition:
1414
"""Build a minimal single-node AgentGraphDefinition for testing."""
15+
node_tracker = MagicMock()
1516
root_config = AIAgentConfig(
1617
key='root-agent',
1718
enabled=enabled,
1819
model=ModelConfig(name='gpt-4'),
1920
provider=ProviderConfig(name='openai'),
2021
instructions='You are a helpful assistant.',
21-
tracker=MagicMock(),
22+
create_tracker=lambda: node_tracker,
2223
)
2324
graph_config = AIAgentGraphConfig(
2425
key='test-graph',
@@ -136,7 +137,7 @@ async def test_openai_agent_graph_runner_run_success():
136137
tracker.track_path.assert_called_once()
137138
tracker.track_latency.assert_called_once()
138139

139-
root_tracker = graph.get_node('root-agent').get_config().tracker
140+
root_tracker = graph.get_node('root-agent').get_config().create_tracker()
140141
root_tracker.track_duration.assert_called_once()
141142
root_tracker.track_tokens.assert_called_once()
142143
root_tracker.track_success.assert_called_once()

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def _make_graph(
6464
model=ModelConfig(name='gpt-4', parameters={'tools': tool_defs} if tool_defs else {}),
6565
provider=ProviderConfig(name='openai'),
6666
instructions='You are a helpful assistant.',
67-
tracker=node_tracker,
67+
create_tracker=lambda: node_tracker,
6868
)
6969

7070
graph_config = AIAgentGraphConfig(
@@ -208,15 +208,15 @@ def _make_two_node_graph(mock_ld_client: MagicMock) -> AgentGraphDefinition:
208208
model=ModelConfig(name='gpt-4', parameters={}),
209209
provider=ProviderConfig(name='openai'),
210210
instructions='You are root.',
211-
tracker=root_tracker,
211+
create_tracker=lambda: root_tracker,
212212
)
213213
child_config = AIAgentConfig(
214214
key='child-agent',
215215
enabled=True,
216216
model=ModelConfig(name='gpt-4', parameters={}),
217217
provider=ProviderConfig(name='openai'),
218218
instructions='You are child.',
219-
tracker=child_tracker,
219+
create_tracker=lambda: child_tracker,
220220
)
221221

222222
edge = Edge(key='root-to-child', source_config='root-agent', target_config='child-agent')

0 commit comments

Comments
 (0)