ruby_llm 1.13.2 → 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 (110) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -7
  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 +13 -6
  68. data/lib/ruby_llm/active_record/message_methods.rb +17 -0
  69. data/lib/ruby_llm/active_record/model_methods.rb +1 -1
  70. data/lib/ruby_llm/active_record/payload_helpers.rb +26 -0
  71. data/lib/ruby_llm/active_record/tool_call_methods.rb +15 -0
  72. data/lib/ruby_llm/agent.rb +11 -0
  73. data/lib/ruby_llm/aliases.json +34 -15
  74. data/lib/ruby_llm/attachment.rb +3 -0
  75. data/lib/ruby_llm/configuration.rb +54 -73
  76. data/lib/ruby_llm/connection.rb +1 -3
  77. data/lib/ruby_llm/error.rb +5 -0
  78. data/lib/ruby_llm/model/info.rb +14 -12
  79. data/lib/ruby_llm/models.json +7446 -10126
  80. data/lib/ruby_llm/models.rb +10 -3
  81. data/lib/ruby_llm/provider.rb +5 -0
  82. data/lib/ruby_llm/providers/anthropic/capabilities.rb +1 -133
  83. data/lib/ruby_llm/providers/anthropic/models.rb +2 -8
  84. data/lib/ruby_llm/providers/anthropic.rb +4 -0
  85. data/lib/ruby_llm/providers/azure.rb +4 -0
  86. data/lib/ruby_llm/providers/bedrock.rb +4 -0
  87. data/lib/ruby_llm/providers/deepseek/capabilities.rb +1 -119
  88. data/lib/ruby_llm/providers/deepseek.rb +4 -0
  89. data/lib/ruby_llm/providers/gemini/capabilities.rb +45 -215
  90. data/lib/ruby_llm/providers/gemini/models.rb +2 -4
  91. data/lib/ruby_llm/providers/gemini.rb +4 -0
  92. data/lib/ruby_llm/providers/gpustack.rb +4 -0
  93. data/lib/ruby_llm/providers/mistral.rb +4 -0
  94. data/lib/ruby_llm/providers/ollama.rb +4 -0
  95. data/lib/ruby_llm/providers/openai/capabilities.rb +95 -203
  96. data/lib/ruby_llm/providers/openai/models.rb +2 -4
  97. data/lib/ruby_llm/providers/openai.rb +10 -0
  98. data/lib/ruby_llm/providers/openrouter/images.rb +1 -1
  99. data/lib/ruby_llm/providers/openrouter.rb +4 -0
  100. data/lib/ruby_llm/providers/perplexity/capabilities.rb +34 -99
  101. data/lib/ruby_llm/providers/perplexity/models.rb +12 -14
  102. data/lib/ruby_llm/providers/perplexity.rb +4 -0
  103. data/lib/ruby_llm/providers/vertexai.rb +4 -0
  104. data/lib/ruby_llm/providers/xai.rb +4 -0
  105. data/lib/ruby_llm/version.rb +1 -1
  106. data/lib/tasks/release.rake +1 -1
  107. data/lib/tasks/ruby_llm.rake +6 -5
  108. data/lib/tasks/vcr.rake +1 -1
  109. metadata +49 -11
  110. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/_message.html.erb.tt +0 -13
@@ -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.1'
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.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
  - - ">="
@@ -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
@@ -322,7 +360,7 @@ metadata:
322
360
  funding_uri: https://github.com/sponsors/crmne
323
361
  rubygems_mfa_required: 'true'
324
362
  post_install_message: |
325
- 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
326
364
  --> https://rubyllm.com/upgrading/
327
365
  rdoc_options: []
328
366
  require_paths:
@@ -338,7 +376,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
338
376
  - !ruby/object:Gem::Version
339
377
  version: '0'
340
378
  requirements: []
341
- rubygems_version: 4.0.3
379
+ rubygems_version: 4.0.6
342
380
  specification_version: 4
343
381
  summary: One beautiful Ruby API for GPT, Claude, Gemini, and more.
344
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>