Class FunctionToolsLoader

java.lang.Object
org.machanism.machai.ai.tools.FunctionToolsLoader

public class FunctionToolsLoader extends Object
Discovers and applies FunctionTools implementations using Java's ServiceLoader mechanism.

This class acts as the entry point for registering a curated set of local capabilities (such as file access, command execution, and HTTP retrieval) with a Genai provider. Implementations are discovered from the classpath (typically via META-INF/services provider configuration) and then applied to the provider in discovery order.

Usage Example

 Genai provider = ...;
 Class<?> appClass = ...;
 FunctionToolsLoader loader = new FunctionToolsLoader();
 loader.applyTools(provider, appClass);
 

The loader maintains a list of discovered FunctionTools instances and applies them to the provider, filtered by application class compatibility.

Author:
Viktor Tovstyi
  • Field Details

    • logger

      private static final org.slf4j.Logger logger
      Logger for debug output during tool discovery and application.
    • functionTools

      private final List<FunctionTools> functionTools
      List of discovered FunctionTools instances, loaded from the classpath.
  • Constructor Details

    • FunctionToolsLoader

      public FunctionToolsLoader()
      Constructs a new FunctionToolsLoader and discovers available FunctionTools implementations using ServiceLoader.

      Each discovered tool is added to the internal list and logged for debugging.

  • Method Details

    • applyTools

      public void applyTools(Genai provider, Class<?> appClass)
      Applies all discovered FunctionTools installers to the given provider, filtered by application class compatibility.

      For each compatible tool, both tool functions and prompts are registered with the provider.

      Parameters:
      provider - the Genai provider instance to augment with tool functions
      appClass - the application class requesting tool assignment; only tools compatible with this class are applied
      Throws:
      IllegalArgumentException - if a discovered installer cannot be instantiated
    • isSupportedFor

      private boolean isSupportedFor(Class<?> appClass, Class<? extends FunctionTools> functionToolsClass)
      Checks whether the given FunctionTools implementation supports assignment to the specified application class.

      If the SupportedFor annotation is present, only classes listed in its value are considered compatible. If the annotation is absent, compatibility is assumed.

      Parameters:
      appClass - the application class requesting tool assignment
      functionToolsClass - the FunctionTools implementation class
      Returns:
      true if the tool is compatible with the application class, false otherwise