15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# File 'lib/vsm/roles/operations.rb', line 15
def handle(message, bus:, children:, **)
return false unless message.kind == :tool_call
name = message.payload[:tool].to_s
tool_capsule = children.fetch(name) { raise "unknown tool capsule: #{name}" }
mode = tool_capsule.respond_to?(:execution_mode) ? tool_capsule.execution_mode : :fiber
executor = EXECUTORS.fetch(mode)
Async do
result = executor.call(tool_capsule, message.payload[:args])
bus.emit Message.new(kind: :tool_result, payload: result, corr_id: message.corr_id, meta: message.meta)
rescue => e
bus.emit Message.new(kind: :tool_result, payload: "ERROR: #{e.class}: #{e.message}", corr_id: message.corr_id, meta: message.meta)
end
true
end
|