Module: AiCli::Helpers::Context
- Defined in:
- lib/aicli/helpers/context.rb
Constant Summary collapse
- MAX_MESSAGES =
Keep the last N user/assistant messages across sessions.
40- CONTEXT_FILENAME =
'context'
Class Method Summary collapse
- .apply_to_chat(chat) ⇒ Object
- .load_messages ⇒ Object
- .path ⇒ Object
- .save_from_chat(chat) ⇒ Object
- .save_messages(messages) ⇒ Object
- .seed_prompt_history(prompt) ⇒ Object
- .user_prompts ⇒ Object
Class Method Details
.apply_to_chat(chat) ⇒ Object
55 56 57 58 59 |
# File 'lib/aicli/helpers/context.rb', line 55 def apply_to_chat(chat) .each do || chat.(role: ['role'].to_sym, content: ['content']) end end |
.load_messages ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/aicli/helpers/context.rb', line 20 def Config.ensure_home! return [] unless File.file?(path) data = JSON.parse(File.read(path)) Array(data['messages']) .select { |m| m.is_a?(Hash) && %w[user assistant].include?(m['role'].to_s) } .map { |m| { 'role' => m['role'].to_s, 'content' => m['content'].to_s } } .reject { |m| m['content'].strip.empty? } .last(MAX_MESSAGES) rescue StandardError [] end |
.path ⇒ Object
16 17 18 |
# File 'lib/aicli/helpers/context.rb', line 16 def path File.join(Config.home_dir, CONTEXT_FILENAME) end |
.save_from_chat(chat) ⇒ Object
51 52 53 |
# File 'lib/aicli/helpers/context.rb', line 51 def save_from_chat(chat) (chat.) end |
.save_messages(messages) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/aicli/helpers/context.rb', line 34 def () Config.ensure_home! normalized = Array() .map { |m| (m) } .compact .last(MAX_MESSAGES) payload = { 'version' => 1, 'updated_at' => Time.now.utc.iso8601, 'messages' => normalized } File.write(path, "#{JSON.pretty_generate(payload)}\n") rescue StandardError # Ignore persistence failures; chat should still work. end |
.seed_prompt_history(prompt) ⇒ Object
65 66 67 68 69 70 71 72 73 |
# File 'lib/aicli/helpers/context.rb', line 65 def seed_prompt_history(prompt) return unless prompt.respond_to?(:reader) user_prompts.each do |line| prompt.reader.add_to_history(line) end rescue StandardError nil end |
.user_prompts ⇒ Object
61 62 63 |
# File 'lib/aicli/helpers/context.rb', line 61 def user_prompts .select { |m| m['role'] == 'user' }.map { |m| m['content'] } end |