Class: Kreator::InteractiveCLI::ChatModel
- Inherits:
-
Object
- Object
- Kreator::InteractiveCLI::ChatModel
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
#init ⇒ Object
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
|
#view ⇒ Object
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
|