5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/lammy/chat.rb', line 5
def self.handle(klass, method_name, settings)
original_method = klass.instance_method(method_name)
klass.define_method(method_name) do |*args, &block|
@system_message = nil
define_singleton_method(:context) do |message|
@system_message = message
end
define_singleton_method(:stream) do |proc|
@stream = proc
end
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
|