Skip to content

Commit b65dd04

Browse files
jsonbaileyclaude
andcommitted
fix: remove unnecessary tracker guards, forward variables and default_ai_provider
- Remove if-tracker guards in both runners since create_tracker is always set on enabled graphs (disabled graphs are filtered before runner creation), also fixing token_usage NameError when tracker=None - Forward variables through _build_evaluator to _initialize_judges so judge templates can interpolate user-provided variables - Add default_ai_provider param to agent_graph() and forward it to __evaluate_agent so graph node evaluators use the correct provider; propagate from create_agent_graph() as well Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 64d8060 commit b65dd04

3 files changed

Lines changed: 26 additions & 26 deletions

File tree

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

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ async def run(self, input: Any) -> AgentGraphResult:
304304
"""
305305
pending_eval_tasks: Dict[str, List[asyncio.Task]] = {}
306306
token = _run_eval_tasks.set(pending_eval_tasks)
307-
tracker = self._graph.create_tracker() if self._graph.create_tracker is not None else None
307+
tracker = self._graph.create_tracker()
308308
start_ns = time.perf_counter_ns()
309309

310310
try:
@@ -325,12 +325,10 @@ async def run(self, input: Any) -> AgentGraphResult:
325325
# Flush per-node metrics to LD trackers
326326
await handler.flush(self._graph, pending_eval_tasks)
327327

328-
# Graph-level metrics
329-
if tracker:
330-
tracker.track_path(handler.path)
331-
tracker.track_duration(duration)
332-
tracker.track_invocation_success()
333-
tracker.track_total_tokens(sum_token_usage_from_messages(messages))
328+
tracker.track_path(handler.path)
329+
tracker.track_duration(duration)
330+
tracker.track_invocation_success()
331+
tracker.track_total_tokens(sum_token_usage_from_messages(messages))
334332

335333
return AgentGraphResult(
336334
output=output,
@@ -347,9 +345,8 @@ async def run(self, input: Any) -> AgentGraphResult:
347345
else:
348346
log.warning(f'LangGraphAgentGraphRunner run failed: {exc}')
349347
duration = (time.perf_counter_ns() - start_ns) // 1_000_000
350-
if tracker:
351-
tracker.track_duration(duration)
352-
tracker.track_invocation_failure()
348+
tracker.track_duration(duration)
349+
tracker.track_invocation_failure()
353350
return AgentGraphResult(
354351
output='',
355352
raw=None,

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

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ async def run(self, input: Any) -> AgentGraphResult:
7676
:param input: The string prompt to send to the agent graph
7777
:return: AgentGraphResult with the final output and metrics
7878
"""
79-
tracker = self._graph.create_tracker() if self._graph.create_tracker is not None else None
79+
tracker = self._graph.create_tracker()
8080
path: List[str] = []
8181
root_node = self._graph.root()
8282
root_key = root_node.get_key() if root_node else ''
@@ -99,14 +99,13 @@ async def run(self, input: Any) -> AgentGraphResult:
9999
self._track_tool_calls(result)
100100

101101
duration = (time.perf_counter_ns() - start_ns) // 1_000_000
102+
token_usage = get_ai_usage_from_response(result)
102103

103-
if tracker:
104-
tracker.track_path(path)
105-
tracker.track_duration(duration)
106-
tracker.track_invocation_success()
107-
token_usage = get_ai_usage_from_response(result)
108-
if token_usage is not None:
109-
tracker.track_total_tokens(token_usage)
104+
tracker.track_path(path)
105+
tracker.track_duration(duration)
106+
tracker.track_invocation_success()
107+
if token_usage is not None:
108+
tracker.track_total_tokens(token_usage)
110109

111110
return AgentGraphResult(
112111
output=str(result.final_output),
@@ -122,9 +121,8 @@ async def run(self, input: Any) -> AgentGraphResult:
122121
else:
123122
log.warning(f'OpenAIAgentGraphRunner run failed: {exc}')
124123
duration = (time.perf_counter_ns() - start_ns) // 1_000_000
125-
if tracker:
126-
tracker.track_duration(duration)
127-
tracker.track_invocation_failure()
124+
tracker.track_duration(duration)
125+
tracker.track_invocation_failure()
128126
return AgentGraphResult(
129127
output='',
130128
raw=None,

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ def _completion_config(
9595
key, context, default.to_dict(), variables
9696
)
9797

98-
evaluator = self._build_evaluator(judge_configuration, context, default_ai_provider)
98+
evaluator = self._build_evaluator(judge_configuration, context, default_ai_provider, variables)
9999

100100
config = AICompletionConfig(
101101
key=key,
@@ -327,20 +327,23 @@ def _build_evaluator(
327327
judge_configuration: Optional[JudgeConfiguration],
328328
context: Context,
329329
default_ai_provider: Optional[str] = None,
330+
variables: Optional[Dict[str, Any]] = None,
330331
) -> Evaluator:
331332
"""
332333
Build an Evaluator for the given judge configuration.
333334
334335
:param judge_configuration: The judge configuration listing judges to initialize
335336
:param context: Standard Context used when evaluating flags
336337
:param default_ai_provider: Optional default AI provider to use
338+
:param variables: Optional variables for judge instruction interpolation
337339
:return: Evaluator wrapping the initialized judges, or a no-op Evaluator if
338340
judge_configuration is None or has no judges
339341
"""
340342
if not judge_configuration or not judge_configuration.judges:
341343
return Evaluator.noop()
342344
judges = self._initialize_judges(
343-
judge_configuration.judges, context, default_ai_provider=default_ai_provider
345+
judge_configuration.judges, context, default_ai_provider=default_ai_provider,
346+
variables=variables,
344347
)
345348
return Evaluator(judges, judge_configuration)
346349

@@ -604,6 +607,7 @@ def agent_graph(
604607
self,
605608
key: str,
606609
context: Context,
610+
default_ai_provider: Optional[str] = None,
607611
) -> AgentGraphDefinition:
608612
"""`
609613
Retrieve an AI agent graph.
@@ -648,7 +652,8 @@ def graph_tracker_factory() -> AIGraphTracker:
648652
graph_key_value = key
649653
agent_configs = {
650654
agent_key: self.__evaluate_agent(
651-
agent_key, context, AIAgentConfigDefault.disabled(), graph_key=graph_key_value
655+
agent_key, context, AIAgentConfigDefault.disabled(), graph_key=graph_key_value,
656+
default_ai_provider=default_ai_provider,
652657
)
653658
for agent_key in all_agent_keys
654659
}
@@ -756,7 +761,7 @@ async def create_agent_graph(
756761
self._client.track(_TRACK_USAGE_CREATE_AGENT_GRAPH, context, key, 1)
757762
log.debug(f"Creating managed agent graph for key: {key}")
758763

759-
graph = self.agent_graph(key, context)
764+
graph = self.agent_graph(key, context, default_ai_provider)
760765
if not graph.enabled:
761766
return None
762767

@@ -916,7 +921,7 @@ def __evaluate_agent(
916921

917922
effective_judge_configuration = judge_configuration or JudgeConfiguration(judges=[])
918923

919-
evaluator = self._build_evaluator(effective_judge_configuration, context, default_ai_provider)
924+
evaluator = self._build_evaluator(effective_judge_configuration, context, default_ai_provider, variables)
920925

921926
return AIAgentConfig(
922927
key=key,

0 commit comments

Comments
 (0)