Class: RubyLLM::Generators::InstallGenerator
- Inherits:
-
Rails::Generators::Base
- Object
- Rails::Generators::Base
- RubyLLM::Generators::InstallGenerator
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
#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_initializer ⇒ Object
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_files ⇒ Object
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
migration_template 'create_messages_migration.rb.tt',
"db/migrate/create_#{message_table_name}.rb"
sleep 1
migration_template 'create_tool_calls_migration.rb.tt',
"db/migrate/create_#{tool_call_table_name}.rb"
sleep 1
migration_template 'create_models_migration.rb.tt',
"db/migrate/create_#{model_table_name}.rb"
sleep 1
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_files ⇒ Object
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_storage ⇒ Object
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_info ⇒ Object
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
|