Module: RubyLLM::Generators::GeneratorHelpers

Included in:
ChatUIGenerator, InstallGenerator, UpgradeToV17Generator, UpgradeToV19Generator
Defined in:
lib/generators/ruby_llm/generator_helpers.rb

Overview

Shared helpers for RubyLLM generators

Instance Method Summary collapse

Instance Method Details

#acts_as_chat_declarationObject



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

def acts_as_chat_declaration
  params = []

  add_association_params(params, :messages, message_table_name, message_model_name,
                         owner_table: chat_table_name, plural: true)
  add_association_params(params, :model, model_table_name, model_model_name,
                         owner_table: chat_table_name)

  "acts_as_chat#{" #{params.join(', ')}" if params.any?}"
end

#acts_as_message_declarationObject



63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/generators/ruby_llm/generator_helpers.rb', line 63

def acts_as_message_declaration
  params = []

  add_association_params(params, :chat, chat_table_name, chat_model_name,
                         owner_table: message_table_name)
  add_association_params(params, :tool_calls, tool_call_table_name, tool_call_model_name,
                         owner_table: message_table_name, plural: true)
  add_association_params(params, :model, model_table_name, model_model_name,
                         owner_table: message_table_name)

  "acts_as_message#{" #{params.join(', ')}" if params.any?}"
end

#acts_as_model_declarationObject



76
77
78
79
80
81
82
83
# File 'lib/generators/ruby_llm/generator_helpers.rb', line 76

def acts_as_model_declaration
  params = []

  add_association_params(params, :chats, chat_table_name, chat_model_name,
                         owner_table: model_table_name, plural: true)

  "acts_as_model#{" #{params.join(', ')}" if params.any?}"
end

#acts_as_tool_call_declarationObject



85
86
87
88
89
90
91
92
# File 'lib/generators/ruby_llm/generator_helpers.rb', line 85

def acts_as_tool_call_declaration
  params = []

  add_association_params(params, :message, message_table_name, message_model_name,
                         owner_table: tool_call_table_name)

  "acts_as_tool_call#{" #{params.join(', ')}" if params.any?}"
end

#create_namespace_modulesObject



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/generators/ruby_llm/generator_helpers.rb', line 94

def create_namespace_modules
  namespaces = []

  [chat_model_name, message_model_name, tool_call_model_name, model_model_name].each do |model_name|
    if model_name.include?('::')
      namespace = model_name.split('::').first
      namespaces << namespace unless namespaces.include?(namespace)
    end
  end

  namespaces.each do |namespace|
    module_path = "app/models/#{namespace.underscore}.rb"
    next if File.exist?(Rails.root.join(module_path))

    create_file module_path do
      <<~RUBY
        module #{namespace}
          def self.table_name_prefix
            "#{namespace.underscore}_"
          end
        end
      RUBY
    end
  end
end

#migration_versionObject



120
121
122
# File 'lib/generators/ruby_llm/generator_helpers.rb', line 120

def migration_version
  "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
end

#mysql?Boolean

Returns:

  • (Boolean)


130
131
132
133
134
# File 'lib/generators/ruby_llm/generator_helpers.rb', line 130

def mysql?
  ::ActiveRecord::Base.connection.adapter_name.downcase.include?('mysql')
rescue StandardError
  false
end

#parse_model_mappingsObject



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/generators/ruby_llm/generator_helpers.rb', line 7

def parse_model_mappings
  @model_names = {
    chat: 'Chat',
    message: 'Message',
    tool_call: 'ToolCall',
    model: 'Model'
  }

  model_mappings.each do |mapping|
    if mapping.include?(':')
      key, value = mapping.split(':', 2)
      @model_names[key.to_sym] = value.classify
    end
  end

  @model_names
end

#postgresql?Boolean

Returns:

  • (Boolean)


124
125
126
127
128
# File 'lib/generators/ruby_llm/generator_helpers.rb', line 124

def postgresql?
  ::ActiveRecord::Base.connection.adapter_name.downcase.include?('postgresql')
rescue StandardError
  false
end

#table_exists?(table_name) ⇒ Boolean

Returns:

  • (Boolean)


136
137
138
139
140
# File 'lib/generators/ruby_llm/generator_helpers.rb', line 136

def table_exists?(table_name)
  ::ActiveRecord::Base.connection.table_exists?(table_name)
rescue StandardError
  false
end