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
19
# File 'lib/legion/gaia/channels/cli_adapter.rb', line 15

def initialize
  super(channel_id: :cli, capabilities: CAPABILITIES)
  @output_buffer = []
  @mutex = Mutex.new
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



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

def deliver(rendered_content)
  @mutex.synchronize { @output_buffer << rendered_content }
  rendered_content
end

#drain_outputObject



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

def drain_output
  @mutex.synchronize do
    output = @output_buffer.dup
    @output_buffer.clear
    output
  end
end

#last_outputObject



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

def last_output
  @mutex.synchronize { @output_buffer.last }
end

#output_buffer_sizeObject



55
56
57
# File 'lib/legion/gaia/channels/cli_adapter.rb', line 55

def output_buffer_size
  @mutex.synchronize { @output_buffer.size }
end

#translate_inbound(raw_input) ⇒ Object



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

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



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

def translate_outbound(output_frame)
  output_frame.content.to_s
end