ruby_llm 1.13.2 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -5
  3. data/lib/generators/ruby_llm/agent/agent_generator.rb +36 -0
  4. data/lib/generators/ruby_llm/agent/templates/agent.rb.tt +6 -0
  5. data/lib/generators/ruby_llm/agent/templates/instructions.txt.erb.tt +0 -0
  6. data/lib/generators/ruby_llm/chat_ui/chat_ui_generator.rb +110 -41
  7. data/lib/generators/ruby_llm/chat_ui/templates/controllers/chats_controller.rb.tt +14 -15
  8. data/lib/generators/ruby_llm/chat_ui/templates/controllers/messages_controller.rb.tt +8 -11
  9. data/lib/generators/ruby_llm/chat_ui/templates/controllers/models_controller.rb.tt +2 -2
  10. data/lib/generators/ruby_llm/chat_ui/templates/helpers/messages_helper.rb.tt +25 -0
  11. data/lib/generators/ruby_llm/chat_ui/templates/jobs/chat_response_job.rb.tt +1 -1
  12. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/chats/_chat.html.erb.tt +16 -0
  13. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/chats/_form.html.erb.tt +31 -0
  14. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/chats/index.html.erb.tt +31 -0
  15. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/chats/new.html.erb.tt +9 -0
  16. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/chats/show.html.erb.tt +27 -0
  17. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_assistant.html.erb.tt +14 -0
  18. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_content.html.erb.tt +1 -0
  19. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_error.html.erb.tt +13 -0
  20. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_form.html.erb.tt +23 -0
  21. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_system.html.erb.tt +10 -0
  22. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_tool.html.erb.tt +2 -0
  23. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_tool_calls.html.erb.tt +4 -0
  24. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_user.html.erb.tt +14 -0
  25. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/tool_calls/_default.html.erb.tt +13 -0
  26. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/tool_results/_default.html.erb.tt +21 -0
  27. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/models/_model.html.erb.tt +17 -0
  28. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/models/index.html.erb.tt +40 -0
  29. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/models/show.html.erb.tt +27 -0
  30. data/lib/generators/ruby_llm/chat_ui/templates/views/chats/_chat.html.erb.tt +2 -2
  31. data/lib/generators/ruby_llm/chat_ui/templates/views/chats/_form.html.erb.tt +2 -2
  32. data/lib/generators/ruby_llm/chat_ui/templates/views/chats/index.html.erb.tt +19 -7
  33. data/lib/generators/ruby_llm/chat_ui/templates/views/chats/new.html.erb.tt +1 -1
  34. data/lib/generators/ruby_llm/chat_ui/templates/views/chats/show.html.erb.tt +5 -3
  35. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/_assistant.html.erb.tt +9 -0
  36. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/_content.html.erb.tt +1 -1
  37. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/_error.html.erb.tt +8 -0
  38. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/_form.html.erb.tt +1 -1
  39. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/_system.html.erb.tt +6 -0
  40. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/_tool.html.erb.tt +2 -0
  41. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/_tool_calls.html.erb.tt +4 -7
  42. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/_user.html.erb.tt +9 -0
  43. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/create.turbo_stream.erb.tt +5 -7
  44. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/tool_calls/_default.html.erb.tt +8 -0
  45. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/tool_results/_default.html.erb.tt +16 -0
  46. data/lib/generators/ruby_llm/chat_ui/templates/views/models/_model.html.erb.tt +11 -12
  47. data/lib/generators/ruby_llm/chat_ui/templates/views/models/index.html.erb.tt +27 -17
  48. data/lib/generators/ruby_llm/chat_ui/templates/views/models/show.html.erb.tt +3 -4
  49. data/lib/generators/ruby_llm/generator_helpers.rb +33 -17
  50. data/lib/generators/ruby_llm/install/install_generator.rb +21 -18
  51. data/lib/generators/ruby_llm/install/templates/create_models_migration.rb.tt +3 -4
  52. data/lib/generators/ruby_llm/install/templates/create_tool_calls_migration.rb.tt +1 -1
  53. data/lib/generators/ruby_llm/install/templates/initializer.rb.tt +2 -2
  54. data/lib/generators/ruby_llm/schema/schema_generator.rb +26 -0
  55. data/lib/generators/ruby_llm/schema/templates/schema.rb.tt +2 -0
  56. data/lib/generators/ruby_llm/tool/templates/tool.rb.tt +9 -0
  57. data/lib/generators/ruby_llm/tool/templates/tool_call.html.erb.tt +13 -0
  58. data/lib/generators/ruby_llm/tool/templates/tool_result.html.erb.tt +13 -0
  59. data/lib/generators/ruby_llm/tool/tool_generator.rb +96 -0
  60. data/lib/generators/ruby_llm/upgrade_to_v1_10/upgrade_to_v1_10_generator.rb +1 -1
  61. data/lib/generators/ruby_llm/upgrade_to_v1_14/templates/add_v1_14_tool_call_columns.rb.tt +7 -0
  62. data/lib/generators/ruby_llm/upgrade_to_v1_14/upgrade_to_v1_14_generator.rb +49 -0
  63. data/lib/generators/ruby_llm/upgrade_to_v1_7/upgrade_to_v1_7_generator.rb +2 -4
  64. data/lib/generators/ruby_llm/upgrade_to_v1_9/upgrade_to_v1_9_generator.rb +1 -1
  65. data/lib/ruby_llm/active_record/acts_as.rb +2 -0
  66. data/lib/ruby_llm/active_record/acts_as_legacy.rb +2 -0
  67. data/lib/ruby_llm/active_record/chat_methods.rb +1 -1
  68. data/lib/ruby_llm/active_record/message_methods.rb +28 -0
  69. data/lib/ruby_llm/active_record/model_methods.rb +1 -1
  70. data/lib/ruby_llm/active_record/tool_call_methods.rb +28 -0
  71. data/lib/ruby_llm/agent.rb +11 -0
  72. data/lib/ruby_llm/aliases.json +15 -5
  73. data/lib/ruby_llm/attachment.rb +3 -0
  74. data/lib/ruby_llm/configuration.rb +54 -73
  75. data/lib/ruby_llm/connection.rb +1 -3
  76. data/lib/ruby_llm/error.rb +5 -0
  77. data/lib/ruby_llm/model/info.rb +14 -12
  78. data/lib/ruby_llm/models.json +2693 -2160
  79. data/lib/ruby_llm/models.rb +10 -3
  80. data/lib/ruby_llm/provider.rb +5 -0
  81. data/lib/ruby_llm/providers/anthropic.rb +4 -0
  82. data/lib/ruby_llm/providers/azure.rb +4 -0
  83. data/lib/ruby_llm/providers/bedrock.rb +4 -0
  84. data/lib/ruby_llm/providers/deepseek.rb +4 -0
  85. data/lib/ruby_llm/providers/gemini.rb +4 -0
  86. data/lib/ruby_llm/providers/gpustack.rb +4 -0
  87. data/lib/ruby_llm/providers/mistral.rb +4 -0
  88. data/lib/ruby_llm/providers/ollama.rb +4 -0
  89. data/lib/ruby_llm/providers/openai.rb +10 -0
  90. data/lib/ruby_llm/providers/openrouter/images.rb +1 -1
  91. data/lib/ruby_llm/providers/openrouter.rb +4 -0
  92. data/lib/ruby_llm/providers/perplexity.rb +4 -0
  93. data/lib/ruby_llm/providers/vertexai.rb +4 -0
  94. data/lib/ruby_llm/providers/xai.rb +4 -0
  95. data/lib/ruby_llm/version.rb +1 -1
  96. data/lib/tasks/release.rake +1 -1
  97. data/lib/tasks/ruby_llm.rake +6 -5
  98. data/lib/tasks/vcr.rake +1 -1
  99. metadata +47 -10
  100. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/_message.html.erb.tt +0 -13
@@ -47,7 +47,8 @@ module RubyLLM
47
47
 
48
48
  def read_from_json(file = RubyLLM.config.model_registry_file)
49
49
  data = File.exist?(file) ? File.read(file) : '[]'
50
- JSON.parse(data, symbolize_names: true).map { |model| Model::Info.new(model) }
50
+ models = JSON.parse(data, symbolize_names: true).map { |model| Model::Info.new(model) }
51
+ filter_models(models)
51
52
  rescue JSON::ParserError
52
53
  []
53
54
  end
@@ -232,7 +233,13 @@ module RubyLLM
232
233
  end
233
234
  end
234
235
 
235
- models.sort_by { |m| [m.provider, m.id] }
236
+ filter_models(models).sort_by { |m| [m.provider, m.id] }
237
+ end
238
+
239
+ def filter_models(models)
240
+ models.reject do |model|
241
+ model.provider.to_s == 'vertexai' && model.id.to_s.include?('/')
242
+ end
236
243
  end
237
244
 
238
245
  def find_models_dev_model(key, models_dev_by_key)
@@ -401,7 +408,7 @@ module RubyLLM
401
408
  end
402
409
 
403
410
  def initialize(models = nil)
404
- @models = models || self.class.load_models
411
+ @models = self.class.filter_models(models || self.class.load_models)
405
412
  end
406
413
 
407
414
  def load_from_json!(file = RubyLLM.config.model_registry_file)
@@ -164,6 +164,10 @@ module RubyLLM
164
164
  []
165
165
  end
166
166
 
167
+ def configuration_options
168
+ []
169
+ end
170
+
167
171
  def local?
168
172
  false
169
173
  end
@@ -182,6 +186,7 @@ module RubyLLM
182
186
 
183
187
  def register(name, provider_class)
184
188
  providers[name.to_sym] = provider_class
189
+ RubyLLM::Configuration.register_provider_options(provider_class.configuration_options)
185
190
  end
186
191
 
187
192
  def resolve(name)
@@ -27,6 +27,10 @@ module RubyLLM
27
27
  Anthropic::Capabilities
28
28
  end
29
29
 
30
+ def configuration_options
31
+ %i[anthropic_api_key anthropic_api_base]
32
+ end
33
+
30
34
  def configuration_requirements
31
35
  %i[anthropic_api_key]
32
36
  end
@@ -44,6 +44,10 @@ module RubyLLM
44
44
  end
45
45
 
46
46
  class << self
47
+ def configuration_options
48
+ %i[azure_api_base azure_api_key azure_ai_auth_token]
49
+ end
50
+
47
51
  def configuration_requirements
48
52
  %i[azure_api_base]
49
53
  end
@@ -53,6 +53,10 @@ module RubyLLM
53
53
  end
54
54
 
55
55
  class << self
56
+ def configuration_options
57
+ %i[bedrock_api_key bedrock_secret_key bedrock_region bedrock_session_token]
58
+ end
59
+
56
60
  def configuration_requirements
57
61
  %i[bedrock_api_key bedrock_secret_key bedrock_region]
58
62
  end
@@ -21,6 +21,10 @@ module RubyLLM
21
21
  DeepSeek::Capabilities
22
22
  end
23
23
 
24
+ def configuration_options
25
+ %i[deepseek_api_key deepseek_api_base]
26
+ end
27
+
24
28
  def configuration_requirements
25
29
  %i[deepseek_api_key]
26
30
  end
@@ -28,6 +28,10 @@ module RubyLLM
28
28
  Gemini::Capabilities
29
29
  end
30
30
 
31
+ def configuration_options
32
+ %i[gemini_api_key gemini_api_base]
33
+ end
34
+
31
35
  def configuration_requirements
32
36
  %i[gemini_api_key]
33
37
  end
@@ -21,6 +21,10 @@ module RubyLLM
21
21
  end
22
22
 
23
23
  class << self
24
+ def configuration_options
25
+ %i[gpustack_api_base gpustack_api_key]
26
+ end
27
+
24
28
  def local?
25
29
  true
26
30
  end
@@ -23,6 +23,10 @@ module RubyLLM
23
23
  Mistral::Capabilities
24
24
  end
25
25
 
26
+ def configuration_options
27
+ %i[mistral_api_key]
28
+ end
29
+
26
30
  def configuration_requirements
27
31
  %i[mistral_api_key]
28
32
  end
@@ -19,6 +19,10 @@ module RubyLLM
19
19
  end
20
20
 
21
21
  class << self
22
+ def configuration_options
23
+ %i[ollama_api_base ollama_api_key]
24
+ end
25
+
22
26
  def configuration_requirements
23
27
  %i[ollama_api_base]
24
28
  end
@@ -35,6 +35,16 @@ module RubyLLM
35
35
  OpenAI::Capabilities
36
36
  end
37
37
 
38
+ def configuration_options
39
+ %i[
40
+ openai_api_key
41
+ openai_api_base
42
+ openai_organization_id
43
+ openai_project_id
44
+ openai_use_system_role
45
+ ]
46
+ end
47
+
38
48
  def configuration_requirements
39
49
  %i[openai_api_key]
40
50
  end
@@ -14,7 +14,7 @@ module RubyLLM
14
14
  end
15
15
 
16
16
  def render_image_payload(prompt, model:, size:)
17
- RubyLLM.logger.debug "Ignoring size #{size}. OpenRouter image generation does not support size parameter."
17
+ RubyLLM.logger.debug { "Ignoring size #{size}. OpenRouter image generation does not support size parameter." }
18
18
  {
19
19
  model: model,
20
20
  messages: [
@@ -49,6 +49,10 @@ module RubyLLM
49
49
  end
50
50
 
51
51
  class << self
52
+ def configuration_options
53
+ %i[openrouter_api_key openrouter_api_base]
54
+ end
55
+
52
56
  def configuration_requirements
53
57
  %i[openrouter_api_key]
54
58
  end
@@ -23,6 +23,10 @@ module RubyLLM
23
23
  Perplexity::Capabilities
24
24
  end
25
25
 
26
+ def configuration_options
27
+ %i[perplexity_api_key]
28
+ end
29
+
26
30
  def configuration_requirements
27
31
  %i[perplexity_api_key]
28
32
  end
@@ -40,6 +40,10 @@ module RubyLLM
40
40
  end
41
41
 
42
42
  class << self
43
+ def configuration_options
44
+ %i[vertexai_project_id vertexai_location vertexai_service_account_key]
45
+ end
46
+
43
47
  def configuration_requirements
44
48
  %i[vertexai_project_id vertexai_location]
45
49
  end
@@ -19,6 +19,10 @@ module RubyLLM
19
19
  end
20
20
 
21
21
  class << self
22
+ def configuration_options
23
+ %i[xai_api_key]
24
+ end
25
+
22
26
  def configuration_requirements
23
27
  %i[xai_api_key]
24
28
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyLLM
4
- VERSION = '1.13.2'
4
+ VERSION = '1.14.0'
5
5
  end
@@ -26,7 +26,7 @@ namespace :release do # rubocop:disable Metrics/BlockLength
26
26
  if stale_count.positive?
27
27
  puts "\n🗑️ Removed #{stale_count} stale cassettes"
28
28
  puts '🔄 Re-recording cassettes...'
29
- run_parallel_rspec || exit(1)
29
+ run_test_queue_rspec || exit(1)
30
30
  puts '✅ Cassettes refreshed!'
31
31
  else
32
32
  puts '✅ No stale cassettes found'
@@ -1,10 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- def run_parallel_rspec
3
+ def run_test_queue_rspec
4
4
  workers = ENV.fetch('RSPEC_WORKERS', nil)
5
- cmd = %w[bundle exec parallel_rspec]
6
- cmd += ['-n', workers] if workers && !workers.empty?
7
- system(*cmd)
5
+ env = {}
6
+ env['TEST_QUEUE_WORKERS'] = workers if workers && !workers.empty? && ENV.fetch('TEST_QUEUE_WORKERS', '').empty?
7
+
8
+ system(env, 'bundle', 'exec', 'bin/rspec-queue')
8
9
  end
9
10
 
10
11
  namespace :ruby_llm do
@@ -16,7 +17,7 @@ namespace :ruby_llm do
16
17
  model_class.save_to_database
17
18
  puts "✅ Loaded #{model_class.count} models into database"
18
19
  else
19
- puts 'Model registry not configured. Run rails generate ruby_llm:install'
20
+ puts 'Model registry not configured. Run bin/rails generate ruby_llm:install'
20
21
  end
21
22
  end
22
23
  end
data/lib/tasks/vcr.rake CHANGED
@@ -71,7 +71,7 @@ def delete_cassettes(cassettes)
71
71
  end
72
72
 
73
73
  def run_tests
74
- run_parallel_rspec || abort('Tests failed')
74
+ run_test_queue_rspec || abort('Tests failed')
75
75
  end
76
76
 
77
77
  def retimestamp_cassettes(cassette_dir)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_llm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.13.2
4
+ version: 1.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carmine Paolino
@@ -43,30 +43,30 @@ dependencies:
43
43
  requirements:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: '2.0'
46
+ version: 1.10.0
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: '2.0'
53
+ version: 1.10.0
54
54
  - !ruby/object:Gem::Dependency
55
- name: faraday-retry
55
+ name: faraday-multipart
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
- version: '2.0'
60
+ version: '1'
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - ">="
66
66
  - !ruby/object:Gem::Version
67
- version: '2.0'
67
+ version: '1'
68
68
  - !ruby/object:Gem::Dependency
69
- name: faraday-multipart
69
+ name: faraday-net_http
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - ">="
@@ -80,7 +80,7 @@ dependencies:
80
80
  - !ruby/object:Gem::Version
81
81
  version: '1'
82
82
  - !ruby/object:Gem::Dependency
83
- name: faraday-net_http
83
+ name: faraday-retry
84
84
  requirement: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - ">="
@@ -150,21 +150,49 @@ extra_rdoc_files: []
150
150
  files:
151
151
  - LICENSE
152
152
  - README.md
153
+ - lib/generators/ruby_llm/agent/agent_generator.rb
154
+ - lib/generators/ruby_llm/agent/templates/agent.rb.tt
155
+ - lib/generators/ruby_llm/agent/templates/instructions.txt.erb.tt
153
156
  - lib/generators/ruby_llm/chat_ui/chat_ui_generator.rb
154
157
  - lib/generators/ruby_llm/chat_ui/templates/controllers/chats_controller.rb.tt
155
158
  - lib/generators/ruby_llm/chat_ui/templates/controllers/messages_controller.rb.tt
156
159
  - lib/generators/ruby_llm/chat_ui/templates/controllers/models_controller.rb.tt
160
+ - lib/generators/ruby_llm/chat_ui/templates/helpers/messages_helper.rb.tt
157
161
  - lib/generators/ruby_llm/chat_ui/templates/jobs/chat_response_job.rb.tt
162
+ - lib/generators/ruby_llm/chat_ui/templates/tailwind/views/chats/_chat.html.erb.tt
163
+ - lib/generators/ruby_llm/chat_ui/templates/tailwind/views/chats/_form.html.erb.tt
164
+ - lib/generators/ruby_llm/chat_ui/templates/tailwind/views/chats/index.html.erb.tt
165
+ - lib/generators/ruby_llm/chat_ui/templates/tailwind/views/chats/new.html.erb.tt
166
+ - lib/generators/ruby_llm/chat_ui/templates/tailwind/views/chats/show.html.erb.tt
167
+ - lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_assistant.html.erb.tt
168
+ - lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_content.html.erb.tt
169
+ - lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_error.html.erb.tt
170
+ - lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_form.html.erb.tt
171
+ - lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_system.html.erb.tt
172
+ - lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_tool.html.erb.tt
173
+ - lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_tool_calls.html.erb.tt
174
+ - lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_user.html.erb.tt
175
+ - lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/tool_calls/_default.html.erb.tt
176
+ - lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/tool_results/_default.html.erb.tt
177
+ - lib/generators/ruby_llm/chat_ui/templates/tailwind/views/models/_model.html.erb.tt
178
+ - lib/generators/ruby_llm/chat_ui/templates/tailwind/views/models/index.html.erb.tt
179
+ - lib/generators/ruby_llm/chat_ui/templates/tailwind/views/models/show.html.erb.tt
158
180
  - lib/generators/ruby_llm/chat_ui/templates/views/chats/_chat.html.erb.tt
159
181
  - lib/generators/ruby_llm/chat_ui/templates/views/chats/_form.html.erb.tt
160
182
  - lib/generators/ruby_llm/chat_ui/templates/views/chats/index.html.erb.tt
161
183
  - lib/generators/ruby_llm/chat_ui/templates/views/chats/new.html.erb.tt
162
184
  - lib/generators/ruby_llm/chat_ui/templates/views/chats/show.html.erb.tt
185
+ - lib/generators/ruby_llm/chat_ui/templates/views/messages/_assistant.html.erb.tt
163
186
  - lib/generators/ruby_llm/chat_ui/templates/views/messages/_content.html.erb.tt
187
+ - lib/generators/ruby_llm/chat_ui/templates/views/messages/_error.html.erb.tt
164
188
  - lib/generators/ruby_llm/chat_ui/templates/views/messages/_form.html.erb.tt
165
- - lib/generators/ruby_llm/chat_ui/templates/views/messages/_message.html.erb.tt
189
+ - lib/generators/ruby_llm/chat_ui/templates/views/messages/_system.html.erb.tt
190
+ - lib/generators/ruby_llm/chat_ui/templates/views/messages/_tool.html.erb.tt
166
191
  - lib/generators/ruby_llm/chat_ui/templates/views/messages/_tool_calls.html.erb.tt
192
+ - lib/generators/ruby_llm/chat_ui/templates/views/messages/_user.html.erb.tt
167
193
  - lib/generators/ruby_llm/chat_ui/templates/views/messages/create.turbo_stream.erb.tt
194
+ - lib/generators/ruby_llm/chat_ui/templates/views/messages/tool_calls/_default.html.erb.tt
195
+ - lib/generators/ruby_llm/chat_ui/templates/views/messages/tool_results/_default.html.erb.tt
168
196
  - lib/generators/ruby_llm/chat_ui/templates/views/models/_model.html.erb.tt
169
197
  - lib/generators/ruby_llm/chat_ui/templates/views/models/index.html.erb.tt
170
198
  - lib/generators/ruby_llm/chat_ui/templates/views/models/show.html.erb.tt
@@ -180,8 +208,16 @@ files:
180
208
  - lib/generators/ruby_llm/install/templates/message_model.rb.tt
181
209
  - lib/generators/ruby_llm/install/templates/model_model.rb.tt
182
210
  - lib/generators/ruby_llm/install/templates/tool_call_model.rb.tt
211
+ - lib/generators/ruby_llm/schema/schema_generator.rb
212
+ - lib/generators/ruby_llm/schema/templates/schema.rb.tt
213
+ - lib/generators/ruby_llm/tool/templates/tool.rb.tt
214
+ - lib/generators/ruby_llm/tool/templates/tool_call.html.erb.tt
215
+ - lib/generators/ruby_llm/tool/templates/tool_result.html.erb.tt
216
+ - lib/generators/ruby_llm/tool/tool_generator.rb
183
217
  - lib/generators/ruby_llm/upgrade_to_v1_10/templates/add_v1_10_message_columns.rb.tt
184
218
  - lib/generators/ruby_llm/upgrade_to_v1_10/upgrade_to_v1_10_generator.rb
219
+ - lib/generators/ruby_llm/upgrade_to_v1_14/templates/add_v1_14_tool_call_columns.rb.tt
220
+ - lib/generators/ruby_llm/upgrade_to_v1_14/upgrade_to_v1_14_generator.rb
185
221
  - lib/generators/ruby_llm/upgrade_to_v1_7/templates/migration.rb.tt
186
222
  - lib/generators/ruby_llm/upgrade_to_v1_7/upgrade_to_v1_7_generator.rb
187
223
  - lib/generators/ruby_llm/upgrade_to_v1_9/templates/add_v1_9_message_columns.rb.tt
@@ -192,6 +228,7 @@ files:
192
228
  - lib/ruby_llm/active_record/chat_methods.rb
193
229
  - lib/ruby_llm/active_record/message_methods.rb
194
230
  - lib/ruby_llm/active_record/model_methods.rb
231
+ - lib/ruby_llm/active_record/tool_call_methods.rb
195
232
  - lib/ruby_llm/agent.rb
196
233
  - lib/ruby_llm/aliases.json
197
234
  - lib/ruby_llm/aliases.rb
@@ -322,7 +359,7 @@ metadata:
322
359
  funding_uri: https://github.com/sponsors/crmne
323
360
  rubygems_mfa_required: 'true'
324
361
  post_install_message: |
325
- Upgrading from RubyLLM < 1.10.x? Check the upgrade guide for new features and migration instructions
362
+ Upgrading from RubyLLM < 1.14.x? Check the upgrade guide for new features and migration instructions
326
363
  --> https://rubyllm.com/upgrading/
327
364
  rdoc_options: []
328
365
  require_paths:
@@ -1,13 +0,0 @@
1
- <div id="<%= message_variable_name %>_<%%= <%= message_model_name.demodulize.underscore %>.id %>" class="<%= message_variable_name %>"
2
- style="margin-bottom: 20px; padding: 10px; border-left: 3px solid <%%= <%= message_model_name.demodulize.underscore %>.role == 'user' ? '#007bff' : '#28a745' %>">
3
- <div style="font-weight: bold; margin-bottom: 5px;">
4
- <%%= <%= message_model_name.demodulize.underscore %>.role&.capitalize %>
5
- </div>
6
- <div id="<%= message_variable_name %>_<%%= <%= message_model_name.demodulize.underscore %>.id %>_content" style="white-space: pre-wrap;"><%%= <%= message_model_name.demodulize.underscore %>.content %></div>
7
- <%% if <%= message_model_name.demodulize.underscore %>.tool_call? %>
8
- <%%= render "<%= message_model_name.underscore.pluralize %>/tool_calls", <%= message_model_name.demodulize.underscore %>: <%= message_model_name.demodulize.underscore %> %>
9
- <%% end %>
10
- <div style="font-size: 0.85em; color: #666; margin-top: 5px;">
11
- <%%= <%= message_model_name.demodulize.underscore %>.created_at&.strftime("%I:%M %p") %>
12
- </div>
13
- </div>