MCPcopy
hub / github.com/langchain-ai/langchain / arun

Method arun

libs/core/langchain_core/tools.py:457–562  ·  view source on GitHub ↗

Run the tool asynchronously.

(
        self,
        tool_input: Union[str, Dict],
        verbose: Optional[bool] = None,
        start_color: Optional[str] = "green",
        color: Optional[str] = "green",
        callbacks: Callbacks = None,
        *,
        tags: Optional[List[str]] = None,
        metadata: Optional[Dict[str, Any]] = None,
        run_name: Optional[str] = None,
        run_id: Optional[uuid.UUID] = None,
        config: Optional[RunnableConfig] = None,
        **kwargs: Any,
    )

Source from the content-addressed store, hash-verified

455 return observation
456
457 async def arun(
458 self,
459 tool_input: Union[str, Dict],
460 verbose: Optional[bool] = None,
461 start_color: Optional[str] = "green",
462 color: Optional[str] = "green",
463 callbacks: Callbacks = None,
464 *,
465 tags: Optional[List[str]] = None,
466 metadata: Optional[Dict[str, Any]] = None,
467 run_name: Optional[str] = None,
468 run_id: Optional[uuid.UUID] = None,
469 config: Optional[RunnableConfig] = None,
470 **kwargs: Any,
471 ) -> Any:
472 """Run the tool asynchronously."""
473 if not self.verbose and verbose is not None:
474 verbose_ = verbose
475 else:
476 verbose_ = self.verbose
477 callback_manager = AsyncCallbackManager.configure(
478 callbacks,
479 self.callbacks,
480 verbose_,
481 tags,
482 self.tags,
483 metadata,
484 self.metadata,
485 )
486 new_arg_supported = signature(self._arun).parameters.get("run_manager")
487 run_manager = await callback_manager.on_tool_start(
488 {"name": self.name, "description": self.description},
489 tool_input if isinstance(tool_input, str) else str(tool_input),
490 color=start_color,
491 name=run_name,
492 inputs=tool_input,
493 run_id=run_id,
494 **kwargs,
495 )
496 try:
497 parsed_input = self._parse_input(tool_input)
498 # We then call the tool on the tool input to get an observation
499 tool_args, tool_kwargs = self._to_args_and_kwargs(parsed_input)
500 child_config = patch_config(
501 config,
502 callbacks=run_manager.get_child(),
503 )
504 context = copy_context()
505 context.run(_set_config_context, child_config)
506 coro = (
507 context.run(
508 self._arun, *tool_args, run_manager=run_manager, **tool_kwargs
509 )
510 if new_arg_supported
511 else context.run(self._arun, *tool_args, **tool_kwargs)
512 )
513 if accepts_context(asyncio.create_task):
514 observation = await asyncio.create_task(coro, context=context) # type: ignore

Calls 12

_parse_inputMethod · 0.95
_to_args_and_kwargsMethod · 0.95
patch_configFunction · 0.90
accepts_contextFunction · 0.90
create_taskMethod · 0.80
configureMethod · 0.45
getMethod · 0.45
on_tool_startMethod · 0.45
get_childMethod · 0.45
runMethod · 0.45
on_tool_errorMethod · 0.45
on_tool_endMethod · 0.45