Skip to content

Commit a74233f

Browse files
Display tool calls in message template (#416)
## Summary - Added visualization of tool calls in the chat UI message partial - Tool calls are displayed with function name and arguments in JSON format - Styled with monospace font and gray background for better readability ## Test plan - [ ] Generate a chat UI with the updated template - [ ] Verify tool calls are displayed correctly in messages - [ ] Check that messages without tool calls render normally <img width="730" height="554" alt="CleanShot 2025-09-21 at 22 21 23@2x" src="https://github.com/user-attachments/assets/058c0923-4081-4399-96c0-4a4e025f7244" /> 🤖 Generated with [Claude Code](https://claude.ai/code) --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 46ac613 commit a74233f

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

lib/generators/ruby_llm/chat_ui/chat_ui_generator.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def parse_model_mappings
3333
@model_names
3434
end
3535

36-
%i[chat message model].each do |type|
36+
%i[chat message model tool_call].each do |type|
3737
define_method("#{type}_model_name") do
3838
@model_names ||= parse_model_mappings
3939
@model_names[type]
@@ -56,6 +56,8 @@ def create_views
5656
# Message views
5757
template 'views/messages/_message.html.erb',
5858
"app/views/#{message_table_name}/_#{message_model_name.underscore}.html.erb"
59+
template 'views/messages/_tool_calls.html.erb',
60+
"app/views/#{message_table_name}/_#{tool_call_model_name.tableize}.html.erb"
5961
template 'views/messages/_content.html.erb', "app/views/#{message_table_name}/_content.html.erb"
6062
template 'views/messages/_form.html.erb', "app/views/#{message_table_name}/_form.html.erb"
6163
template 'views/messages/create.turbo_stream.erb',

lib/generators/ruby_llm/chat_ui/templates/views/messages/_message.html.erb.tt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
<%%= <%= message_model_name.underscore %>.role&.capitalize %>
55
</div>
66
<div id="<%%= dom_id(<%= message_model_name.underscore %>) %>_content" style="white-space: pre-wrap;"><%%= <%= message_model_name.underscore %>.content %></div>
7+
<%% if <%= message_model_name.underscore %>.<%= tool_call_model_name.tableize %>.any? %>
8+
<%%= render "<%= message_table_name %>/<%= tool_call_model_name.tableize %>", <%= message_model_name.underscore %>: <%= message_model_name.underscore %> %>
9+
<%% end %>
710
<div style="font-size: 0.85em; color: #666; margin-top: 5px;">
811
<%%= <%= message_model_name.underscore %>.created_at&.strftime("%I:%M %p") %>
912
</div>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<div style="display: flex; flex-direction: column; gap: 3px; align-items: flex-start; font-family: monospace;">
2+
<%% <%= message_model_name.underscore %>.tool_calls.each do |tool_call| %>
3+
<div style="background: #eee; padding: 5px; border-radius: 4px;">
4+
<%%= tool_call.name %>(<%%= tool_call.arguments.map { |k, v| "#{k}: #{v.inspect}" }.join(", ") %>)
5+
</div>
6+
<%% end %>
7+
</div>

0 commit comments

Comments
 (0)