Skip to content

Instantly share code, notes, and snippets.

@saiqulhaq
Created November 30, 2024 17:04
Show Gist options
  • Save saiqulhaq/3c88a230650e5a1baf3ff18e8a2b8997 to your computer and use it in GitHub Desktop.
Save saiqulhaq/3c88a230650e5a1baf3ff18e8a2b8997 to your computer and use it in GitHub Desktop.
opencommit commit messages
refactor(conversations): improve prompt handling and display
feat(conversations_helper): add pretty_print_prompt method to render prompts with better readability
fix(slack/thread): modify messages_as_prompt to wrap messages in XML structure
style(conversations): update view to use pretty_print_prompt and improve response display
diff --git a/app/controllers/conversations_controller.rb b/app/controllers/conversations_controller.rb
index 16a89b2..73c3a67 100644
--- a/app/controllers/conversations_controller.rb
+++ b/app/controllers/conversations_controller.rb
@@ -112,7 +112,7 @@ class ConversationsController < ApplicationController
[
{ role: 'user', content: instruction },
- { role: 'user', content: thread.messages_as_prompt.join("\n") }
+ { role: 'user', content: thread.messages_as_prompt }
]
else
raise NotImplementedError
diff --git a/app/helpers/conversations_helper.rb b/app/helpers/conversations_helper.rb
index fe30c45..24a5e4b 100644
--- a/app/helpers/conversations_helper.rb
+++ b/app/helpers/conversations_helper.rb
@@ -1,2 +1,30 @@
module ConversationsHelper
+ def pretty_print_prompt(prompt)
+ messages = JSON.parse(prompt)
+
+ content_tag :table do
+ title = content_tag :tr do
+ content_tag(:th, 'Role') + content_tag(:th, 'Content')
+ end
+ body = messages.map do |message|
+ content_tag :tr do
+ content = message['content']
+ if content.include?('<message>')
+ parsed_xml = Nokogiri::XML(content)
+ content = content_tag :table do
+ parsed_xml.css('message').map do |msg|
+ user = msg.css('user').text
+ text = msg.css('text').text
+ content_tag :tr do
+ content_tag(:td, user) + content_tag(:td, text)
+ end
+ end.join.html_safe
+ end
+ end
+ content_tag(:td, message['role']) + content_tag(:td, content)
+ end
+ end.join.html_safe
+ title + body
+ end
+ end
end
diff --git a/app/models/slack/thread.rb b/app/models/slack/thread.rb
index 7901f23..59cb502 100644
--- a/app/models/slack/thread.rb
+++ b/app/models/slack/thread.rb
@@ -22,13 +22,14 @@ class Slack::Thread < Slack::BaseRecord
has_one :parent_message, -> { where(parent_message_id: nil) }, class_name: 'Slack::Message'
def messages_as_prompt
- messages.includes(:user).map do |message|
+ messages = self.messages.includes(:user).map do |message|
text = message.text.gsub(/<@(\w+)>/) do |match|
user = Slack::User.find_by(slack_id: $1)
user ? "@#{user.name}" : match
end
"<message><user>@#{message.user&.name}</user><text>#{text}</text></message>"
end
+ "<messages>#{messages.join}</messages>"
end
def save_messages(messages)
diff --git a/app/views/conversations/_conversation.html.erb b/app/views/conversations/_conversation.html.erb
index e4fd754..5671eea 100644
--- a/app/views/conversations/_conversation.html.erb
+++ b/app/views/conversations/_conversation.html.erb
@@ -8,13 +8,15 @@
<strong>Request:</strong>
</p>
<pre>
- <%= raw JSON.pretty_generate JSON.parse(conversation.request) %>
+ <%= pretty_print_prompt(conversation.request) %>
</pre>
<p>
<strong>Response:</strong>
- <%= conversation.response %>
</p>
+ <pre>
+ <%= conversation.response %>
+ </pre>
<p>
<strong>Llm model:</strong>
feat(conversations): improve prompt formatting by introducing a `pretty_print_prompt` helper method to display messages in a table format
fix(app/controllers/conversations_controller.rb): change messages_as_prompt method to use user names instead of @user
feat(app/models/slack/thread.rb): add support for saving messages as a JSON string in the conversation response
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment