Class: Kreator::InteractiveCLI::ChatModel

Inherits:
Object
  • Object
show all
Defined in:
lib/kreator/interactive_cli.rb

Constant Summary collapse

CHAT_KEY_HANDLERS =
{
  "ctrl+c" => :quit_update,
  "esc" => :quit_update,
  "ctrl+m" => :open_model_picker_update,
  "ctrl+r" => :open_session_picker_update,
  "ctrl+t" => :toggle_next_tool_update,
  "ctrl+s" => :submit_prompt_update
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(runtime:) ⇒ ChatModel

Returns a new instance of ChatModel.



471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
# File 'lib/kreator/interactive_cli.rb', line 471

def initialize(runtime:)
  @runtime = runtime
  @lines = runtime.transcript
  @mode = :chat
  @model_list = nil
  @session_list = nil
  @textarea = Bubbles::TextArea.new(width: 80, height: 3)
  @textarea.placeholder = "Send a message..."
  @textarea.prompt = "> "
  @textarea.show_line_numbers = false
  @textarea.focus
  @viewport = Bubbles::Viewport.new(width: 88, height: 24)
  refresh_viewport
  @title_style = defined?(Lipgloss) ? Lipgloss::Style.new.bold(true).foreground("#2D7D9A") : nil
  @status_style = defined?(Lipgloss) ? Lipgloss::Style.new.foreground("#6B7280") : nil
end

Instance Method Details

#initObject



497
# File 'lib/kreator/interactive_cli.rb', line 497

def init = [self, @textarea.cursor.focus]

#update(message) ⇒ Object



499
500
501
502
503
504
# File 'lib/kreator/interactive_cli.rb', line 499

def update(message)
  return update_window(message) if message.is_a?(Bubbletea::WindowSizeMessage)
  return update_key(message) if message.is_a?(Bubbletea::KeyMessage)

  update_inputs(message)
end

#viewObject



506
507
508
509
510
511
512
# File 'lib/kreator/interactive_cli.rb', line 506

def view
  title = styled(@title_style, "Kreator")
  status = styled(@status_style, status_text)
  return [title, status, "", picker_view].join("\n") unless @mode == :chat

  [title, status, "", @viewport.view, "", @textarea.view].join("\n")
end