diff --git a/app/services/llm_formatter/conversation_llm_formatter.rb b/app/services/llm_formatter/conversation_llm_formatter.rb index 1444d75c1..a43471e5b 100644 --- a/app/services/llm_formatter/conversation_llm_formatter.rb +++ b/app/services/llm_formatter/conversation_llm_formatter.rb @@ -11,6 +11,13 @@ class LlmFormatter::ConversationLlmFormatter < LlmFormatter::DefaultLlmFormatter end sections << "Contact Details: #{@record.contact.to_llm_text}" if config[:include_contact_details] + + attributes = build_attributes + if attributes.present? + sections << 'Conversation Attributes:' + sections << attributes + end + sections.join("\n") end @@ -30,4 +37,11 @@ class LlmFormatter::ConversationLlmFormatter < LlmFormatter::DefaultLlmFormatter sender = message.message_type == 'incoming' ? 'User' : 'Support agent' "#{sender}: #{message.content}\n" end + + def build_attributes + attributes = @record.account.custom_attribute_definitions.with_attribute_model('conversation_attribute').map do |attribute| + "#{attribute.attribute_display_name}: #{@record.custom_attributes[attribute.attribute_key]}" + end + attributes.join("\n") + end end diff --git a/spec/services/llm_formatter/conversation_llm_formatter_spec.rb b/spec/services/llm_formatter/conversation_llm_formatter_spec.rb index 93fec14f7..49fcc1a18 100644 --- a/spec/services/llm_formatter/conversation_llm_formatter_spec.rb +++ b/spec/services/llm_formatter/conversation_llm_formatter_spec.rb @@ -61,5 +61,30 @@ RSpec.describe LlmFormatter::ConversationLlmFormatter do expect(formatter.format(include_contact_details: true)).to eq(expected_output) end end + + context 'when conversation has custom attributes' do + it 'includes formatted custom attributes in the output' do + create( + :custom_attribute_definition, + account: account, + attribute_display_name: 'Order ID', + attribute_key: 'order_id', + attribute_model: :conversation_attribute + ) + + conversation.update(custom_attributes: { 'order_id' => '12345' }) + + expected_output = [ + "Conversation ID: ##{conversation.display_id}", + "Channel: #{conversation.inbox.channel.name}", + 'Message History:', + 'No messages in this conversation', + 'Conversation Attributes:', + 'Order ID: 12345' + ].join("\n") + + expect(formatter.format).to eq(expected_output) + end + end end end