Class: VSM::Operations

Inherits:
Object
  • Object
show all
Defined in:
lib/vsm/roles/operations.rb

Constant Summary collapse

EXECUTORS =
{
  fiber:  Executors::FiberExecutor,
  thread: Executors::ThreadExecutor
}.freeze

Instance Method Summary collapse

Instance Method Details

#handle(message, bus:, children:) ⇒ Object



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

#observe(bus) ⇒ Object



13
# File 'lib/vsm/roles/operations.rb', line 13

def observe(bus); end