Class: RailsConsoleAi::ContextBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_console_ai/context_builder.rb

Instance Method Summary collapse

Constructor Details

#initialize(config = RailsConsoleAi.configuration, channel_mode: nil, user_name: nil) ⇒ ContextBuilder

Returns a new instance of ContextBuilder.



3
4
5
6
7
# File 'lib/rails_console_ai/context_builder.rb', line 3

def initialize(config = RailsConsoleAi.configuration, channel_mode: nil, user_name: nil)
  @config = config
  @channel_mode = channel_mode
  @user_name = user_name
end

Instance Method Details

#buildObject



9
10
11
12
13
14
# File 'lib/rails_console_ai/context_builder.rb', line 9

def build
  build_smart
rescue => e
  RailsConsoleAi.logger.warn("RailsConsoleAi: context build error: #{e.message}")
  smart_system_instructions + "\n\n" + environment_context
end

#build_smartObject



16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/rails_console_ai/context_builder.rb', line 16

def build_smart
  parts = []
  parts << smart_system_instructions
  parts << environment_context
  parts << guide_context
  parts << trusted_methods_context
  parts << skills_context
  parts << agents_context
  parts << user_extra_info_context
  parts << pinned_memory_context
  parts << memory_context
  parts.compact.join("\n\n")
end

#environment_contextObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/rails_console_ai/context_builder.rb', line 30

def environment_context
  lines = ["## Environment"]
  lines << "- Ruby #{RUBY_VERSION}"
  lines << "- Rails #{Rails.version}" if defined?(Rails) && Rails.respond_to?(:version)

  if defined?(ActiveRecord::Base) && ActiveRecord::Base.connected?
    adapter = ActiveRecord::Base.connection.adapter_name rescue 'unknown'
    lines << "- Database adapter: #{adapter}"
  end

  if defined?(Bundler)
    key_gems = %w[devise cancancan pundit sidekiq delayed_job resque
                  paperclip carrierwave activestorage shrine
                  pg mysql2 sqlite3 mongoid]
    loaded = key_gems.select { |g| Gem.loaded_specs.key?(g) }
    lines << "- Key gems: #{loaded.join(', ')}" unless loaded.empty?
  end

  lines.join("\n")
end