Module: Legion::LLM::Tools::Interceptor
- Defined in:
- lib/legion/llm/tools/interceptor.rb
Class Method Summary collapse
- .intercept(tool_name, **args) ⇒ Object
- .load_defaults ⇒ Object
- .register(name, matcher:, &block) ⇒ Object
- .registered ⇒ Object
- .reset! ⇒ Object
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_defaults ⇒ Object
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 |
.registered ⇒ Object
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 |