module Lammy::Chat
def self.handle(klass, method_name, settings)
def self.handle(klass, method_name, settings) # Unbind the original method original_method = klass.instance_method(method_name) # Redefine the method klass.define_method(method_name) do |*args, &block| # Initialize context @system_message = nil # `context` sets the system message and is available within the instance define_singleton_method(:context) do |message| @system_message = message end define_singleton_method(:stream) do |proc| @stream = proc end # Call the original method to get the user message user_message = original_method.bind(self).call(*args, &block) model = settings[:model] || Lammy.configuration.model client = if OpenAI::MODELS.any? { |regex| model =~ regex } OpenAI.new(settings) elsif Claude::MODELS.any? { |regex| model =~ regex } Claude.new(settings) else raise "Unsupported model: #{model}" end if !settings[:async] || @_with_sync_lammy client.chat(user_message, @system_message, @stream) else ::Lammy::Job.perform_async(klass.name, self.id, method_name, *args) end end end