Class: RubyLLM::Generators::InstallGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Includes:
Rails::Generators::Migration, GeneratorHelpers
Defined in:
lib/generators/ruby_llm/install/install_generator.rb

Overview

Generator for RubyLLM Rails models and migrations

Class Method Summary collapse

Instance Method Summary collapse

Methods included from GeneratorHelpers

#acts_as_chat_declaration, #acts_as_message_declaration, #acts_as_model_declaration, #acts_as_tool_call_declaration, #create_namespace_modules, #migration_version, #mysql?, #parse_model_mappings, #postgresql?, #table_exists?

Class Method Details

.next_migration_number(dirname) ⇒ Object



26
27
28
# File 'lib/generators/ruby_llm/install/install_generator.rb', line 26

def self.next_migration_number(dirname)
  ::ActiveRecord::Generators::Base.next_migration_number(dirname)
end

Instance Method Details

#create_initializerObject



62
63
64
# File 'lib/generators/ruby_llm/install/install_generator.rb', line 62

def create_initializer
  template 'initializer.rb.tt', 'config/initializers/ruby_llm.rb'
end

#create_migration_filesObject



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

def create_migration_files
  migration_template 'create_chats_migration.rb.tt',
                     "db/migrate/create_#{chat_table_name}.rb"

  sleep 1 # Ensure different timestamp
  migration_template 'create_messages_migration.rb.tt',
                     "db/migrate/create_#{message_table_name}.rb"

  sleep 1 # Ensure different timestamp
  migration_template 'create_tool_calls_migration.rb.tt',
                     "db/migrate/create_#{tool_call_table_name}.rb"

  sleep 1 # Ensure different timestamp
  migration_template 'create_models_migration.rb.tt',
                     "db/migrate/create_#{model_table_name}.rb"

  sleep 1 # Ensure different timestamp
  migration_template 'add_references_to_chats_tool_calls_and_messages_migration.rb.tt',
                     'db/migrate/add_references_to_' \
                     "#{chat_table_name}_#{tool_call_table_name}_and_#{message_table_name}.rb"
end

#create_model_filesObject



52
53
54
55
56
57
58
59
60
# File 'lib/generators/ruby_llm/install/install_generator.rb', line 52

def create_model_files
  create_namespace_modules

  template 'chat_model.rb.tt', "app/models/#{chat_model_name.underscore}.rb"
  template 'message_model.rb.tt', "app/models/#{message_model_name.underscore}.rb"
  template 'tool_call_model.rb.tt', "app/models/#{tool_call_model_name.underscore}.rb"

  template 'model_model.rb.tt', "app/models/#{model_model_name.underscore}.rb"
end

#install_active_storageObject



66
67
68
69
70
71
# File 'lib/generators/ruby_llm/install/install_generator.rb', line 66

def install_active_storage
  return if options[:skip_active_storage]

  say '  Installing ActiveStorage for file attachments...', :cyan
  rails_command 'active_storage:install'
end

#show_install_infoObject



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/generators/ruby_llm/install/install_generator.rb', line 73

def show_install_info
  say "\n  ✅ RubyLLM installed!", :green

  say '  ✅ ActiveStorage configured for file attachments support', :green unless options[:skip_active_storage]

  say "\n  Next steps:", :yellow
  say '     1. Run: rails db:migrate'
  say '     2. Set your API keys in config/initializers/ruby_llm.rb'

  say "     3. Start chatting: #{chat_model_name}.create!(model: 'gpt-4.1-nano').ask('Hello!')"

  say "\n  🚀 Model registry is database-backed!", :cyan
  say '     Models automatically load from the database'
  say '     Pass model names as strings - RubyLLM handles the rest!'
  say "     Specify provider when needed: Chat.create!(model: 'gemini-2.5-flash', provider: 'vertexai')"

  if options[:skip_active_storage]
    say "\n  📎 Note: ActiveStorage was skipped", :yellow
    say '     File attachments won\'t work without ActiveStorage.'
    say '     To enable later:'
    say '       1. Run: rails active_storage:install && rails db:migrate'
    say "       2. Add to your #{message_model_name} model: has_many_attached :attachments"
  end

  say "\n  📚 Documentation: https://rubyllm.com", :cyan

  say "\n  ❤️  Love RubyLLM?", :magenta
  say '     • ⭐ Star on GitHub: https://github.com/crmne/ruby_llm'
  say '     • 🐦 Follow for updates: https://x.com/paolino'
  say "\n"
end