Class: Kreator::InteractiveCLI::ChatModel

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

Defined Under Namespace

Classes: SubmissionCompleteMessage, SubmissionPollMessage, SubmissionProgressMessage

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" => :save_draft_update,
  "enter" => :submit_prompt_update,
  "alt+enter" => :insert_newline_update
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(runtime:, async_submissions: true) ⇒ ChatModel

Returns a new instance of ChatModel.



670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
# File 'lib/kreator/interactive_cli.rb', line 670

def initialize(runtime:, async_submissions: true)
  @runtime = runtime
  @async_submissions = async_submissions
  @lines = [runtime.welcome_panel, *runtime.transcript]
  @mode = :chat
  @model_list = nil
  @session_list = nil
  @draft_buffer = nil
  @autocomplete_index = 0
  @autocomplete_completed = false
  @submission_sequence = 0
  @active_submission = nil
  @submission_queue = Queue.new
  @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



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

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

#update(message) ⇒ Object



707
708
709
710
711
712
713
714
715
# File 'lib/kreator/interactive_cli.rb', line 707

def update(message)
  return update_window(message) if message.is_a?(Bubbletea::WindowSizeMessage)
  return update_key(message) if message.is_a?(Bubbletea::KeyMessage)
  return update_submission_progress(message) if message.is_a?(SubmissionProgressMessage)
  return update_submission_complete(message) if message.is_a?(SubmissionCompleteMessage)
  return update_submission_poll(message) if message.is_a?(SubmissionPollMessage)

  update_inputs(message)
end

#viewObject



717
718
719
720
721
722
723
# File 'lib/kreator/interactive_cli.rb', line 717

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, autocomplete_panel, context_bar].compact.join("\n")
end