Class: Legion::Gaia::Channels::CliAdapter

Inherits:
Legion::Gaia::ChannelAdapter show all
Defined in:
lib/legion/gaia/channels/cli_adapter.rb

Constant Summary collapse

CAPABILITIES =
%i[rich_text inline_code file_attachment syntax_highlighting].freeze

Constants inherited from Legion::Gaia::ChannelAdapter

Legion::Gaia::ChannelAdapter::DIRECT_ADDRESS_PATTERN

Instance Attribute Summary

Attributes inherited from Legion::Gaia::ChannelAdapter

#capabilities, #channel_id

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Legion::Gaia::ChannelAdapter

inherited, register_adapter, #start, #started?, #stop, #supports?

Constructor Details

#initializeCliAdapter

Returns a new instance of CliAdapter.



15
16
17
18
# File 'lib/legion/gaia/channels/cli_adapter.rb', line 15

def initialize
  super(channel_id: :cli, capabilities: CAPABILITIES)
  @output_buffer = []
end

Class Method Details

.from_settings(settings) ⇒ Object



9
10
11
12
13
# File 'lib/legion/gaia/channels/cli_adapter.rb', line 9

def self.from_settings(settings)
  return nil if settings&.dig(:channels, :cli, :enabled) == false

  new
end

Instance Method Details

#deliver(rendered_content) ⇒ Object



37
38
39
40
# File 'lib/legion/gaia/channels/cli_adapter.rb', line 37

def deliver(rendered_content)
  @output_buffer << rendered_content
  rendered_content
end

#drain_outputObject



42
43
44
45
46
# File 'lib/legion/gaia/channels/cli_adapter.rb', line 42

def drain_output
  output = @output_buffer.dup
  @output_buffer.clear
  output
end

#last_outputObject



48
49
50
# File 'lib/legion/gaia/channels/cli_adapter.rb', line 48

def last_output
  @output_buffer.last
end

#output_buffer_sizeObject



52
53
54
# File 'lib/legion/gaia/channels/cli_adapter.rb', line 52

def output_buffer_size
  @output_buffer.size
end

#translate_inbound(raw_input) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/legion/gaia/channels/cli_adapter.rb', line 20

def translate_inbound(raw_input)
  text = raw_input.is_a?(String) ? raw_input : raw_input.to_s

  InputFrame.new(
    content: text,
    channel_id: :cli,
    content_type: :text,
    channel_capabilities: CAPABILITIES,
    device_context: { platform: :desktop, input_method: :keyboard },
    metadata: { source_type: :human_direct, salience: 0.9, direct_address: direct_address?(text) }
  )
end

#translate_outbound(output_frame) ⇒ Object



33
34
35
# File 'lib/legion/gaia/channels/cli_adapter.rb', line 33

def translate_outbound(output_frame)
  output_frame.content.to_s
end