Skip to content

Commit fa936cf

Browse files
committed
reset metics for each run
1 parent 49cb245 commit fa936cf

2 files changed

Lines changed: 41 additions & 0 deletions

File tree

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ async def run(self, input: Any) -> AgentGraphRunnerResult:
7474
:param input: The string prompt to send to the agent graph
7575
:return: AgentGraphRunnerResult with the final content and GraphMetrics
7676
"""
77+
self._node_metrics = {}
7778
path: List[str] = []
7879
root_node = self._graph.root()
7980
root_key = root_node.get_key() if root_node else ''

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

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,3 +184,43 @@ async def test_openai_agent_graph_runner_run_success():
184184
# Runner accumulates per-node metrics in _node_metrics
185185
assert 'root-agent' in runner._node_metrics
186186
assert runner._node_metrics['root-agent'].success is True
187+
188+
189+
@pytest.mark.asyncio
190+
async def test_openai_agent_graph_runner_run_resets_node_metrics_between_runs():
191+
"""Successive runs do not leak stale node metrics from a previous run."""
192+
graph = _make_graph()
193+
194+
mock_result = MagicMock()
195+
mock_result.final_output = "answer"
196+
mock_result.new_items = []
197+
mock_result.context_wrapper.usage.request_usage_entries = []
198+
199+
mock_agents = MagicMock()
200+
mock_agents.Runner.run = AsyncMock(
201+
side_effect=[RuntimeError("boom"), mock_result]
202+
)
203+
mock_agents.Agent = MagicMock(return_value=MagicMock())
204+
mock_agents.Handoff = MagicMock()
205+
mock_agents.handoff = MagicMock()
206+
207+
mock_agents_ext = MagicMock()
208+
mock_agents_ext.RECOMMENDED_PROMPT_PREFIX = '[PREFIX]'
209+
210+
with patch.dict('sys.modules', {
211+
'agents': mock_agents,
212+
'agents.extensions': MagicMock(),
213+
'agents.extensions.handoff_prompt': mock_agents_ext,
214+
'agents.tool_context': MagicMock(),
215+
}):
216+
runner = OpenAIAgentGraphRunner(graph, {})
217+
218+
first = await runner.run("attempt 1")
219+
assert first.metrics.success is False
220+
assert first.metrics.node_metrics['root-agent'].success is False
221+
failed_metrics = first.metrics.node_metrics['root-agent']
222+
223+
second = await runner.run("attempt 2")
224+
assert second.metrics.success is True
225+
assert second.metrics.node_metrics['root-agent'].success is True
226+
assert second.metrics.node_metrics['root-agent'] is not failed_metrics

0 commit comments

Comments
 (0)