diff --git a/lib/generators/ruby_llm/chat_ui/chat_ui_generator.rb b/lib/generators/ruby_llm/chat_ui/chat_ui_generator.rb index b420b41e1..a67c6b1cd 100644 --- a/lib/generators/ruby_llm/chat_ui/chat_ui_generator.rb +++ b/lib/generators/ruby_llm/chat_ui/chat_ui_generator.rb @@ -61,6 +61,7 @@ def create_views template 'views/messages/_tool_calls.html.erb', "app/views/#{message_view_path}/_tool_calls.html.erb" template 'views/messages/_content.html.erb', "app/views/#{message_view_path}/_content.html.erb" + template 'views/messages/_content_raw.html.erb', "app/views/#{message_view_path}/_content_raw.html.erb" template 'views/messages/_form.html.erb', "app/views/#{message_view_path}/_form.html.erb" template 'views/messages/create.turbo_stream.erb', "app/views/#{message_view_path}/create.turbo_stream.erb" diff --git a/lib/generators/ruby_llm/chat_ui/templates/views/messages/_content_raw.html.erb.tt b/lib/generators/ruby_llm/chat_ui/templates/views/messages/_content_raw.html.erb.tt new file mode 100644 index 000000000..26cde1fb8 --- /dev/null +++ b/lib/generators/ruby_llm/chat_ui/templates/views/messages/_content_raw.html.erb.tt @@ -0,0 +1,28 @@ +
+ + + <%%= begin + keys = content.keys + shown = keys.first(4).map do |k| + v = content[k] + pv = + case v + when Hash then "{…}" + when Array then v.all? { |e| e.is_a?(Hash) } ? "[{…}, …]" : "[…]" + when NilClass then "nil" + when String then v.length > 30 ? %("#{v.truncate(30, omission: "…")}") : v.inspect + else v.to_s + end + "#{k}: #{pv}" + end + shown << "…" if keys.size > 4 + "{ " + shown.join(", ") + " }" + rescue StandardError => e + "{…}" + end + %> + + + +
<%%= JSON.pretty_generate(content) -%>
+
diff --git a/lib/generators/ruby_llm/chat_ui/templates/views/messages/_message.html.erb.tt b/lib/generators/ruby_llm/chat_ui/templates/views/messages/_message.html.erb.tt index 2c3f2e88c..e1e106155 100644 --- a/lib/generators/ruby_llm/chat_ui/templates/views/messages/_message.html.erb.tt +++ b/lib/generators/ruby_llm/chat_ui/templates/views/messages/_message.html.erb.tt @@ -3,7 +3,13 @@
<%%= <%= message_model_name.demodulize.underscore %>.role&.capitalize %>
-
<%%= <%= message_model_name.demodulize.underscore %>.content %>
+ <%% if <%= message_model_name.demodulize.underscore %>.content.present? %> +
<%%= <%= message_model_name.demodulize.underscore %>.content %>
+ <%% elsif <%= message_model_name.demodulize.underscore %>.content_raw.present? && <%= message_model_name.demodulize.underscore %>.content_raw.is_a?(Hash) %> +
+ <%%= render "<%= message_model_name.underscore.pluralize %>/content_raw", content: <%= message_model_name.demodulize.underscore %>.content_raw %> +
+ <%% end %> <%% if <%= message_model_name.demodulize.underscore %>.tool_call? %> <%%= render "<%= message_model_name.underscore.pluralize %>/tool_calls", <%= message_model_name.demodulize.underscore %>: <%= message_model_name.demodulize.underscore %> %> <%% end %> diff --git a/spec/ruby_llm/generators/chat_ui_generator_spec.rb b/spec/ruby_llm/generators/chat_ui_generator_spec.rb index 40dc313e5..4d0420b91 100644 --- a/spec/ruby_llm/generators/chat_ui_generator_spec.rb +++ b/spec/ruby_llm/generators/chat_ui_generator_spec.rb @@ -47,6 +47,7 @@ # Message views expect(File.exist?('app/views/messages/_message.html.erb')).to be true expect(File.exist?('app/views/messages/_content.html.erb')).to be true + expect(File.exist?('app/views/messages/_content_raw.html.erb')).to be true expect(File.exist?('app/views/messages/_form.html.erb')).to be true expect(File.exist?('app/views/messages/create.turbo_stream.erb')).to be true @@ -168,6 +169,7 @@ # Message views expect(File.exist?('app/views/llm/messages/_message.html.erb')).to be true expect(File.exist?('app/views/llm/messages/_content.html.erb')).to be true + expect(File.exist?('app/views/llm/messages/_content_raw.html.erb')).to be true expect(File.exist?('app/views/llm/messages/_form.html.erb')).to be true expect(File.exist?('app/views/llm/messages/create.turbo_stream.erb')).to be true