Class: AIA::Adapter::ToolLoader

Inherits:
Object
  • Object
show all
Defined in:
lib/aia/adapter/tool_loader.rb

Instance Method Summary collapse

Constructor Details

#initialize(mcp_connector) ⇒ ToolLoader

Returns a new instance of ToolLoader.



7
8
9
# File 'lib/aia/adapter/tool_loader.rb', line 7

def initialize(mcp_connector)
  @mcp_connector = mcp_connector
end

Instance Method Details

#load_toolsObject



11
12
13
14
15
16
17
# File 'lib/aia/adapter/tool_loader.rb', line 11

def load_tools
  tools = []

  tools += scan_local_tools
  @mcp_connector.support_mcp(tools)
  tools
end

#scan_local_toolsObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/aia/adapter/tool_loader.rb', line 19

def scan_local_tools
  tools = []

  # First, load any required libraries specified in config
  load_require_libs

  # Then, load tool files from tools.paths
  load_tool_files

  # Now scan ObjectSpace for RubyLLM::Tool subclasses
  tool_classes = ObjectSpace.each_object(Class).select do |klass|
    next false unless klass < RubyLLM::Tool

    # Filter out tools that can't be instantiated without arguments
    # RubyLLM calls tool.new without args, so we must verify each tool works
    begin
      klass.new
      true
    rescue ArgumentError, LoadError, StandardError
      # Skip tools that require arguments or have missing dependencies
      false
    end
  end

  tools + tool_classes
end