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_migration_class_name, #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_convention_directories ⇒ Object
58
59
60
61
62
63
|
# File 'lib/generators/ruby_llm/install/install_generator.rb', line 58
def create_convention_directories
%w[agents tools schemas prompts].each do |name|
empty_directory "app/#{name}"
create_file "app/#{name}/.gitkeep" unless File.exist?(Rails.root.join("app/#{name}/.gitkeep"))
end
end
|
#create_initializer ⇒ Object
54
55
56
|
# File 'lib/generators/ruby_llm/install/install_generator.rb', line 54
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
|
# 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"
migration_template 'create_messages_migration.rb.tt',
"db/migrate/create_#{message_table_name}.rb"
migration_template 'create_tool_calls_migration.rb.tt',
"db/migrate/create_#{tool_call_table_name}.rb"
migration_template 'create_models_migration.rb.tt',
"db/migrate/create_#{model_table_name}.rb"
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
44
45
46
47
48
49
50
51
52
|
# File 'lib/generators/ruby_llm/install/install_generator.rb', line 44
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
65
66
67
68
69
70
|
# File 'lib/generators/ruby_llm/install/install_generator.rb', line 65
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
72
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
|
# File 'lib/generators/ruby_llm/install/install_generator.rb', line 72
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: bin/rails db:migrate'
say ' 2. Run: bin/rails ruby_llm:load_models'
say ' 3. Set your API keys in config/initializers/ruby_llm.rb'
say " 4. Start chatting: #{chat_model_name}.create!(model: 'gpt-5-nano').ask('Hello!')"
say " 5. Optional UI: #{chat_ui_generator_command}"
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: bin/rails active_storage:install && bin/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
|