Invoke provider with logging + token tracking.
(
self,
provider: ModelProvider,
client: Any,
conversation: List[Message],
timeline: List[Any],
call_options: Dict[str, Any],
tool_specs: List[ToolSpec] | None,
node: Node,
)
| 339 | return invoke |
| 340 | |
| 341 | def _invoke_provider( |
| 342 | self, |
| 343 | provider: ModelProvider, |
| 344 | client: Any, |
| 345 | conversation: List[Message], |
| 346 | timeline: List[Any], |
| 347 | call_options: Dict[str, Any], |
| 348 | tool_specs: List[ToolSpec] | None, |
| 349 | node: Node, |
| 350 | ) -> ModelResponse: |
| 351 | """Invoke provider with logging + token tracking.""" |
| 352 | self._ensure_not_cancelled() |
| 353 | if self.context.token_tracker: |
| 354 | self.context.token_tracker.current_node_id = node.id |
| 355 | |
| 356 | agent_config = node.as_config(AgentConfig) |
| 357 | retry_policy = self._resolve_retry_policy(node, agent_config) |
| 358 | |
| 359 | def _call_provider() -> ModelResponse: |
| 360 | return provider.call_model( |
| 361 | client, |
| 362 | conversation=conversation, |
| 363 | timeline=timeline, |
| 364 | tool_specs=tool_specs or None, |
| 365 | **call_options, |
| 366 | ) |
| 367 | |
| 368 | last_input = ''.join(msg.text_content() for msg in conversation) if conversation else "" |
| 369 | self._record_model_call(node, last_input, None, CallStage.BEFORE) |
| 370 | response = self._execute_with_retry(node, retry_policy, _call_provider) |
| 371 | self.log_manager.debug(response.str_raw_response()) |
| 372 | self._record_model_call(node, last_input, response, CallStage.AFTER) |
| 373 | return response |
| 374 | |
| 375 | def _record_model_call( |
| 376 | self, |
no test coverage detected