Class DefaultToolExecutor

java.lang.Object
dev.langchain4j.service.tool.DefaultToolExecutor
All Implemented Interfaces:
ToolExecutor

public class DefaultToolExecutor extends Object implements ToolExecutor
  • Constructor Details

    • DefaultToolExecutor

      public DefaultToolExecutor(DefaultToolExecutor.Builder builder)
    • DefaultToolExecutor

      public DefaultToolExecutor(Object object, Method method)
    • DefaultToolExecutor

      public DefaultToolExecutor(Object object, ToolExecutionRequest toolExecutionRequest)
    • DefaultToolExecutor

      public DefaultToolExecutor(Object object, Method originalMethod, Method methodToInvoke)
      When methods annotated with @Tool are wrapped into proxies (AOP), the parameters of the proxied method do not retain their original names. Therefore, access to the original method is required to retrieve those names.
      Parameters:
      object - the object on which the method should be invoked
      originalMethod - the original method, used to retrieve parameter names and prepare arguments
      methodToInvoke - the method that should actually be invoked
  • Method Details

    • originalMethod

      public Method originalMethod()
    • executeWithContext

      public ToolExecutionResult executeWithContext(ToolExecutionRequest request, InvocationContext context)
      Description copied from interface: ToolExecutor
      Executes a tool request. Override this method if you wish to:
      - access the InvocationParameters when passing extra data into the tool
      - propagate the tool result object (ToolExecutionResult.result()) into the ToolExecution
      
      Specified by:
      executeWithContext in interface ToolExecutor
      Parameters:
      request - The tool execution request. Contains tool name and arguments.
      context - The AI Service invocation context, contains ChatMemory ID (see MemoryId for more details), and InvocationParameters.
      Returns:
      The result of the tool execution that will be sent to the LLM.
    • executeAsync

      Non-blocking counterpart of ToolExecutor.executeWithContext(ToolExecutionRequest, InvocationContext), invoked by the asynchronous AI Service tool loop (AI Service methods returning CompletableFuture or CompletionStage), which composes the returned future instead of waiting on a thread.

      The default implementation returns a failed future carrying AsyncNotSupportedException: asynchronous AI Services are opt-in, and silently executing a tool synchronously there would block the thread delivering model responses without any visible signal. This failure is not passed to the tool error handlers (and thus never reaches the LLM) — it fails the AI Service invocation, making the gap visible.

      Override this method to use this tool with an asynchronous AI Service. If the tool performs I/O that can be initiated without holding a thread (e.g. it delegates to an asynchronous client), return that future. If blocking execution is acceptable, it can simply return CompletableFuture.completedFuture(executeWithContext(request, context)).

      Errors may be signaled either synchronously (thrown from this method) or via a failed future; the AI Service applies the configured tool error handlers to both identically.

      When the @Tool method returns a single-value asynchronous type (CompletableFuture, CompletionStage, or a type handled by a CompletableFutureAdapter such as Mutiny Uni or Reactor Mono), the returned value is composed instead of waited on: the tool can perform truly asynchronous work without holding a thread. Other return types execute synchronously on the calling thread, like the default implementation.

      Specified by:
      executeAsync in interface ToolExecutor
      Parameters:
      request - The tool execution request. Contains tool name and arguments.
      context - The AI Service invocation context, contains ChatMemory ID (see MemoryId for more details), and InvocationParameters.
      Returns:
      a CompletableFuture of the result of the tool execution that will be sent to the LLM
    • execute

      public String execute(ToolExecutionRequest request, Object memoryId)
      Description copied from interface: ToolExecutor
      Executes a tool request.
      Specified by:
      execute in interface ToolExecutor
      Parameters:
      request - The tool execution request. Contains tool name and arguments.
      memoryId - The ID of the chat memory. .
      Returns:
      The result of the tool execution that will be sent to the LLM.
    • getBoundedLongValue

      public static long getBoundedLongValue(Object argument, String parameterName, Class<?> parameterType, long minValue, long maxValue)
    • builder

      public static DefaultToolExecutor.Builder builder()