ruby_llm 1.12.0 → 1.14.1

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 (141) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -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 +2 -2
  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 +37 -17
  50. data/lib/generators/ruby_llm/install/install_generator.rb +22 -18
  51. data/lib/generators/ruby_llm/install/templates/create_chats_migration.rb.tt +1 -1
  52. data/lib/generators/ruby_llm/install/templates/create_messages_migration.rb.tt +1 -1
  53. data/lib/generators/ruby_llm/install/templates/create_models_migration.rb.tt +4 -10
  54. data/lib/generators/ruby_llm/install/templates/create_tool_calls_migration.rb.tt +2 -2
  55. data/lib/generators/ruby_llm/install/templates/initializer.rb.tt +2 -2
  56. data/lib/generators/ruby_llm/schema/schema_generator.rb +26 -0
  57. data/lib/generators/ruby_llm/schema/templates/schema.rb.tt +2 -0
  58. data/lib/generators/ruby_llm/tool/templates/tool.rb.tt +9 -0
  59. data/lib/generators/ruby_llm/tool/templates/tool_call.html.erb.tt +13 -0
  60. data/lib/generators/ruby_llm/tool/templates/tool_result.html.erb.tt +13 -0
  61. data/lib/generators/ruby_llm/tool/tool_generator.rb +96 -0
  62. data/lib/generators/ruby_llm/upgrade_to_v1_10/upgrade_to_v1_10_generator.rb +1 -1
  63. data/lib/generators/ruby_llm/upgrade_to_v1_14/templates/add_v1_14_tool_call_columns.rb.tt +7 -0
  64. data/lib/generators/ruby_llm/upgrade_to_v1_14/upgrade_to_v1_14_generator.rb +49 -0
  65. data/lib/generators/ruby_llm/upgrade_to_v1_7/upgrade_to_v1_7_generator.rb +2 -4
  66. data/lib/generators/ruby_llm/upgrade_to_v1_9/upgrade_to_v1_9_generator.rb +1 -1
  67. data/lib/ruby_llm/active_record/acts_as.rb +10 -4
  68. data/lib/ruby_llm/active_record/acts_as_legacy.rb +87 -20
  69. data/lib/ruby_llm/active_record/chat_methods.rb +80 -22
  70. data/lib/ruby_llm/active_record/message_methods.rb +17 -0
  71. data/lib/ruby_llm/active_record/model_methods.rb +1 -1
  72. data/lib/ruby_llm/active_record/payload_helpers.rb +26 -0
  73. data/lib/ruby_llm/active_record/tool_call_methods.rb +15 -0
  74. data/lib/ruby_llm/agent.rb +50 -8
  75. data/lib/ruby_llm/aliases.json +60 -21
  76. data/lib/ruby_llm/attachment.rb +4 -1
  77. data/lib/ruby_llm/chat.rb +113 -12
  78. data/lib/ruby_llm/configuration.rb +65 -66
  79. data/lib/ruby_llm/connection.rb +11 -7
  80. data/lib/ruby_llm/content.rb +6 -2
  81. data/lib/ruby_llm/error.rb +37 -1
  82. data/lib/ruby_llm/message.rb +5 -3
  83. data/lib/ruby_llm/model/info.rb +15 -13
  84. data/lib/ruby_llm/models.json +12279 -13517
  85. data/lib/ruby_llm/models.rb +16 -6
  86. data/lib/ruby_llm/provider.rb +10 -1
  87. data/lib/ruby_llm/providers/anthropic/capabilities.rb +5 -119
  88. data/lib/ruby_llm/providers/anthropic/chat.rb +22 -5
  89. data/lib/ruby_llm/providers/anthropic/models.rb +3 -9
  90. data/lib/ruby_llm/providers/anthropic/tools.rb +20 -0
  91. data/lib/ruby_llm/providers/anthropic.rb +5 -1
  92. data/lib/ruby_llm/providers/azure/chat.rb +1 -1
  93. data/lib/ruby_llm/providers/azure/embeddings.rb +1 -1
  94. data/lib/ruby_llm/providers/azure/models.rb +1 -1
  95. data/lib/ruby_llm/providers/azure.rb +92 -0
  96. data/lib/ruby_llm/providers/bedrock/chat.rb +50 -5
  97. data/lib/ruby_llm/providers/bedrock/models.rb +17 -1
  98. data/lib/ruby_llm/providers/bedrock/streaming.rb +8 -4
  99. data/lib/ruby_llm/providers/bedrock.rb +9 -1
  100. data/lib/ruby_llm/providers/deepseek/capabilities.rb +4 -114
  101. data/lib/ruby_llm/providers/deepseek.rb +5 -1
  102. data/lib/ruby_llm/providers/gemini/capabilities.rb +45 -207
  103. data/lib/ruby_llm/providers/gemini/chat.rb +20 -4
  104. data/lib/ruby_llm/providers/gemini/images.rb +1 -1
  105. data/lib/ruby_llm/providers/gemini/models.rb +2 -4
  106. data/lib/ruby_llm/providers/gemini/streaming.rb +2 -1
  107. data/lib/ruby_llm/providers/gemini/tools.rb +19 -0
  108. data/lib/ruby_llm/providers/gemini.rb +4 -0
  109. data/lib/ruby_llm/providers/gpustack/capabilities.rb +20 -0
  110. data/lib/ruby_llm/providers/gpustack.rb +8 -0
  111. data/lib/ruby_llm/providers/mistral/capabilities.rb +8 -0
  112. data/lib/ruby_llm/providers/mistral/chat.rb +2 -1
  113. data/lib/ruby_llm/providers/mistral.rb +4 -0
  114. data/lib/ruby_llm/providers/ollama/capabilities.rb +20 -0
  115. data/lib/ruby_llm/providers/ollama.rb +11 -1
  116. data/lib/ruby_llm/providers/openai/capabilities.rb +95 -195
  117. data/lib/ruby_llm/providers/openai/chat.rb +15 -5
  118. data/lib/ruby_llm/providers/openai/media.rb +4 -1
  119. data/lib/ruby_llm/providers/openai/models.rb +2 -4
  120. data/lib/ruby_llm/providers/openai/temperature.rb +2 -2
  121. data/lib/ruby_llm/providers/openai/tools.rb +27 -2
  122. data/lib/ruby_llm/providers/openai.rb +10 -0
  123. data/lib/ruby_llm/providers/openrouter/chat.rb +19 -5
  124. data/lib/ruby_llm/providers/openrouter/images.rb +69 -0
  125. data/lib/ruby_llm/providers/openrouter.rb +35 -1
  126. data/lib/ruby_llm/providers/perplexity/capabilities.rb +34 -99
  127. data/lib/ruby_llm/providers/perplexity/models.rb +12 -14
  128. data/lib/ruby_llm/providers/perplexity.rb +4 -0
  129. data/lib/ruby_llm/providers/vertexai/models.rb +1 -1
  130. data/lib/ruby_llm/providers/vertexai.rb +18 -6
  131. data/lib/ruby_llm/providers/xai.rb +4 -0
  132. data/lib/ruby_llm/stream_accumulator.rb +10 -5
  133. data/lib/ruby_llm/streaming.rb +7 -7
  134. data/lib/ruby_llm/tool.rb +48 -3
  135. data/lib/ruby_llm/version.rb +1 -1
  136. data/lib/tasks/models.rake +33 -7
  137. data/lib/tasks/release.rake +1 -1
  138. data/lib/tasks/ruby_llm.rake +9 -1
  139. data/lib/tasks/vcr.rake +1 -1
  140. metadata +56 -15
  141. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/_message.html.erb.tt +0 -13
@@ -144,12 +144,17 @@ def status(provider_sym)
144
144
  end
145
145
 
146
146
  def generate_models_markdown
147
+ models = RubyLLM.models.all
148
+ total_models = models.count
149
+ provider_count = models.map(&:provider).uniq.count
150
+ generated_on = Time.now.utc.strftime('%Y-%m-%d')
151
+
147
152
  <<~MARKDOWN
148
153
  ---
149
154
  layout: default
150
155
  title: Available Models
151
156
  nav_order: 1
152
- description: Browse hundreds of AI models from every major provider. Always up-to-date, automatically generated.
157
+ description: Browse #{total_models} AI models across #{provider_count} providers (not including local providers). Updated #{generated_on}.
153
158
  redirect_from:
154
159
  - /guides/available-models
155
160
  ---
@@ -170,11 +175,17 @@ def generate_models_markdown
170
175
 
171
176
  _Model information enriched by [models.dev](https://models.dev) and our custom code._
172
177
 
173
- ## Last Updated
174
- {: .d-inline-block }
178
+ Can't find a newly released model? Refresh your registry:
179
+
180
+ ```ruby
181
+ # Plain Ruby
182
+ RubyLLM.models.refresh!
175
183
 
176
- #{Time.now.utc.strftime('%Y-%m-%d')}
177
- {: .label .label-green }
184
+ # Rails
185
+ Model.refresh!
186
+ ```
187
+
188
+ See [Model Registry: Refreshing the Registry]({% link _advanced/models.md %}#refreshing-the-registry).
178
189
 
179
190
  ## Models by Provider
180
191
 
@@ -275,8 +286,8 @@ end
275
286
  def models_table(models)
276
287
  return '*No models found*' if models.none?
277
288
 
278
- headers = ['Model', 'Provider', 'Context', 'Max Output', 'Standard Pricing (per 1M tokens)']
279
- alignment = [':--', ':--', '--:', '--:', ':--']
289
+ headers = ['Model', 'Provider', 'I/O', 'Capabilities', 'Context', 'Max Output', 'Standard Pricing (per 1M tokens)']
290
+ alignment = [':--', ':--', ':--', ':--', '--:', '--:', ':--']
280
291
 
281
292
  rows = models.sort_by { |m| [m.provider, m.name] }.map do |model|
282
293
  pricing = standard_pricing_display(model)
@@ -284,6 +295,8 @@ def models_table(models)
284
295
  [
285
296
  model.id,
286
297
  model.provider,
298
+ modalities_display(model),
299
+ list_display(model.capabilities),
287
300
  model.context_window || '-',
288
301
  model.max_output_tokens || '-',
289
302
  pricing
@@ -301,6 +314,19 @@ def models_table(models)
301
314
  table.join("\n")
302
315
  end
303
316
 
317
+ def modalities_display(model)
318
+ input_modalities = list_display(model.modalities.input)
319
+ output_modalities = list_display(model.modalities.output)
320
+ "In: #{input_modalities}; Out: #{output_modalities}"
321
+ end
322
+
323
+ def list_display(values)
324
+ items = Array(values).compact.map(&:to_s).reject(&:empty?)
325
+ return '-' if items.empty?
326
+
327
+ items.join(', ')
328
+ end
329
+
304
330
  def standard_pricing_display(model)
305
331
  pricing_data = model.pricing.to_h[:text_tokens]&.dig(:standard) || {}
306
332
 
@@ -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
- system('bundle exec 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,5 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ def run_test_queue_rspec
4
+ workers = ENV.fetch('RSPEC_WORKERS', nil)
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')
9
+ end
10
+
3
11
  namespace :ruby_llm do
4
12
  desc 'Load models from models.json into the database'
5
13
  task load_models: :environment do
@@ -9,7 +17,7 @@ namespace :ruby_llm do
9
17
  model_class.save_to_database
10
18
  puts "✅ Loaded #{model_class.count} models into database"
11
19
  else
12
- puts 'Model registry not configured. Run rails generate ruby_llm:install'
20
+ puts 'Model registry not configured. Run bin/rails generate ruby_llm:install'
13
21
  end
14
22
  end
15
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
- system('bundle exec 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.12.0
4
+ version: 1.14.1
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
  - - ">="
@@ -99,28 +99,28 @@ dependencies:
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '1.0'
102
+ version: '1'
103
103
  type: :runtime
104
104
  prerelease: false
105
105
  version_requirements: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '1.0'
109
+ version: '1'
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: ruby_llm-schema
112
112
  requirement: !ruby/object:Gem::Requirement
113
113
  requirements:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: 0.2.1
116
+ version: '0'
117
117
  type: :runtime
118
118
  prerelease: false
119
119
  version_requirements: !ruby/object:Gem::Requirement
120
120
  requirements:
121
121
  - - "~>"
122
122
  - !ruby/object:Gem::Version
123
- version: 0.2.1
123
+ version: '0'
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: zeitwerk
126
126
  requirement: !ruby/object:Gem::Requirement
@@ -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,8 @@ 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/payload_helpers.rb
232
+ - lib/ruby_llm/active_record/tool_call_methods.rb
195
233
  - lib/ruby_llm/agent.rb
196
234
  - lib/ruby_llm/aliases.json
197
235
  - lib/ruby_llm/aliases.rb
@@ -252,6 +290,7 @@ files:
252
290
  - lib/ruby_llm/providers/gemini/tools.rb
253
291
  - lib/ruby_llm/providers/gemini/transcription.rb
254
292
  - lib/ruby_llm/providers/gpustack.rb
293
+ - lib/ruby_llm/providers/gpustack/capabilities.rb
255
294
  - lib/ruby_llm/providers/gpustack/chat.rb
256
295
  - lib/ruby_llm/providers/gpustack/media.rb
257
296
  - lib/ruby_llm/providers/gpustack/models.rb
@@ -261,6 +300,7 @@ files:
261
300
  - lib/ruby_llm/providers/mistral/embeddings.rb
262
301
  - lib/ruby_llm/providers/mistral/models.rb
263
302
  - lib/ruby_llm/providers/ollama.rb
303
+ - lib/ruby_llm/providers/ollama/capabilities.rb
264
304
  - lib/ruby_llm/providers/ollama/chat.rb
265
305
  - lib/ruby_llm/providers/ollama/media.rb
266
306
  - lib/ruby_llm/providers/ollama/models.rb
@@ -278,6 +318,7 @@ files:
278
318
  - lib/ruby_llm/providers/openai/transcription.rb
279
319
  - lib/ruby_llm/providers/openrouter.rb
280
320
  - lib/ruby_llm/providers/openrouter/chat.rb
321
+ - lib/ruby_llm/providers/openrouter/images.rb
281
322
  - lib/ruby_llm/providers/openrouter/models.rb
282
323
  - lib/ruby_llm/providers/openrouter/streaming.rb
283
324
  - lib/ruby_llm/providers/perplexity.rb
@@ -319,7 +360,7 @@ metadata:
319
360
  funding_uri: https://github.com/sponsors/crmne
320
361
  rubygems_mfa_required: 'true'
321
362
  post_install_message: |
322
- Upgrading from RubyLLM < 1.10.x? Check the upgrade guide for new features and migration instructions
363
+ Upgrading from RubyLLM < 1.14.x? Check the upgrade guide for new features and migration instructions
323
364
  --> https://rubyllm.com/upgrading/
324
365
  rdoc_options: []
325
366
  require_paths:
@@ -335,7 +376,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
335
376
  - !ruby/object:Gem::Version
336
377
  version: '0'
337
378
  requirements: []
338
- rubygems_version: 4.0.3
379
+ rubygems_version: 4.0.6
339
380
  specification_version: 4
340
381
  summary: One beautiful Ruby API for GPT, Claude, Gemini, and more.
341
382
  test_files: []
@@ -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>