Module: Legion::LLM::Tools::Interceptor

Defined in:
lib/legion/llm/tools/interceptor.rb

Class Method Summary collapse

Class Method Details

.intercept(tool_name, **args) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/legion/llm/tools/interceptor.rb', line 16

def intercept(tool_name, **args)
  snapshot = @mutex.synchronize { @registry.dup }
  snapshot.each do |name, entry|
    next unless entry[:matcher].call(tool_name)

    rewritten_args = entry[:rewrite].call(tool_name, **args)
    unless rewritten_args.is_a?(Hash)
      raise ArgumentError,
            "interceptor #{name.inspect} must return a Hash, got #{rewritten_args.class}"
    end

    args = rewritten_args
  end
  args
end

.load_defaultsObject



40
41
42
43
# File 'lib/legion/llm/tools/interceptor.rb', line 40

def load_defaults
  require_relative 'interceptors/python_venv'
  Interceptors::PythonVenv.register!
end

.register(name, matcher:, &block) ⇒ Object



12
13
14
# File 'lib/legion/llm/tools/interceptor.rb', line 12

def register(name, matcher:, &block)
  @mutex.synchronize { @registry = @registry.merge(name.to_sym => { matcher: matcher, rewrite: block }) }
end

.registeredObject



32
33
34
# File 'lib/legion/llm/tools/interceptor.rb', line 32

def registered
  @mutex.synchronize { @registry.keys }
end

.reset!Object



36
37
38
# File 'lib/legion/llm/tools/interceptor.rb', line 36

def reset!
  @mutex.synchronize { @registry = {} }
end