Class: AIA::Session

Inherits:
Object
  • Object
show all
Defined in:
lib/aia/session.rb

Constant Summary collapse

KW_HISTORY_MAX =

Maximum number of history entries per keyword

5
TERSE_PROMPT =
"\nKeep your response short and to the point.\n"

Instance Method Summary collapse

Constructor Details

#initialize(prompt_handler) ⇒ Session

Returns a new instance of Session.



22
23
24
25
26
27
28
29
30
# File 'lib/aia/session.rb', line 22

def initialize(prompt_handler)
  @prompt_handler = prompt_handler
  @chat_prompt_id = nil
  @include_context_flag = true
  
  setup_prompt_and_history_manager
  initialize_components
  setup_output_file
end

Instance Method Details

#initialize_componentsObject



46
47
48
49
50
51
52
53
# File 'lib/aia/session.rb', line 46

def initialize_components
  # RubyLLM's Chat instances maintain conversation history internally
  # via @messages array. No separate context manager needed.
  # Checkpoint/restore directives access Chat.@messages directly via AIA.client.chats
  @ui_presenter = UIPresenter.new
  @directive_processor = DirectiveProcessor.new
  @chat_processor = ChatProcessorService.new(@ui_presenter, @directive_processor)
end

#setup_output_fileObject



55
56
57
58
59
# File 'lib/aia/session.rb', line 55

def setup_output_file
  if AIA.config.out_file && !AIA.config.out_file.nil? && !AIA.append? && File.exist?(AIA.config.out_file)
    File.open(AIA.config.out_file, "w") { } # Truncate the file
  end
end

#setup_prompt_and_history_managerObject



32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/aia/session.rb', line 32

def setup_prompt_and_history_manager
  # Special handling for chat mode with context files but no prompt ID
  if AIA.chat? && (AIA.config.prompt_id.nil? || AIA.config.prompt_id.empty?) && AIA.config.context_files && !AIA.config.context_files.empty?
    prompt_instance = nil
    @history_manager = nil
  elsif AIA.chat? && (AIA.config.prompt_id.nil? || AIA.config.prompt_id.empty?)
    prompt_instance = nil
    @history_manager = nil
  else
    prompt_instance = @prompt_handler.get_prompt(AIA.config.prompt_id)
    @history_manager = HistoryManager.new(prompt: prompt_instance)
  end
end

#startObject

Starts the session, processing all prompts in the pipeline and then optionally starting an interactive chat session.



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/aia/session.rb', line 63

def start
  # Handle special chat-only cases first
  if should_start_chat_immediately?
    AIA::Utility.robot
    start_chat
    return
  end

  # Process all prompts in the pipeline
  process_all_prompts

  # Start chat mode after all prompts are processed
  if AIA.chat?
    AIA::Utility.robot
    @ui_presenter.display_separator
    start_chat(skip_context_files: true)
  end
end