Module: DSPy::Module::ForwardOverrideHooks

Defined in:
lib/dspy/module.rb

Overview

Hook to wrap forward methods with instrumentation. Uses a Set-based guard (not boolean) to prevent re-wrapping when other hooks (like Callbacks) also use define_method.

Instance Method Summary collapse

Instance Method Details

#method_added(method_name) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/dspy/module.rb', line 32

def method_added(method_name)
  super

  return unless method_name == :forward
  return if self == DSPy::Module

  # Use Set-based guard - persists across hook invocations
  @_forward_instrumented ||= Set.new
  return if @_forward_instrumented.include?(object_id)
  @_forward_instrumented << object_id

  original = instance_method(:forward)
  define_method(:forward) do |*args, **kwargs, &block|
    instrument_forward_call(args, kwargs) do
      original.bind(self).call(*args, **kwargs, &block)
    end
  end
end