diff --git a/enterprise/app/models/concerns/agentable.rb b/enterprise/app/models/concerns/agentable.rb index 46bdfa136..b5d86a27a 100644 --- a/enterprise/app/models/concerns/agentable.rb +++ b/enterprise/app/models/concerns/agentable.rb @@ -17,9 +17,10 @@ module Agentable if context state = context.context[:state] || {} conversation_data = state[:conversation] || {} + contact_data = state[:contact] || {} enhanced_context = enhanced_context.merge( conversation: conversation_data, - has_conversation: conversation_data.present? + contact: contact_data ) end diff --git a/enterprise/app/services/captain/assistant/agent_runner_service.rb b/enterprise/app/services/captain/assistant/agent_runner_service.rb index 4ec3594e2..e86b25c59 100644 --- a/enterprise/app/services/captain/assistant/agent_runner_service.rb +++ b/enterprise/app/services/captain/assistant/agent_runner_service.rb @@ -6,6 +6,11 @@ class Captain::Assistant::AgentRunnerService label_list custom_attributes additional_attributes ].freeze + CONTACT_STATE_ATTRIBUTES = %i[ + id name email phone_number identifier contact_type + custom_attributes additional_attributes + ].freeze + def initialize(assistant:, conversation: nil) @assistant = assistant @conversation = conversation @@ -103,7 +108,10 @@ class Captain::Assistant::AgentRunnerService assistant_config: @assistant.config } - state[:conversation] = @conversation.attributes.symbolize_keys.slice(*CONVERSATION_STATE_ATTRIBUTES) if @conversation + if @conversation + state[:conversation] = @conversation.attributes.symbolize_keys.slice(*CONVERSATION_STATE_ATTRIBUTES) + state[:contact] = @conversation.contact.attributes.symbolize_keys.slice(*CONTACT_STATE_ATTRIBUTES) if @conversation.contact + end state end diff --git a/enterprise/lib/captain/prompts/assistant.liquid b/enterprise/lib/captain/prompts/assistant.liquid index ae319f24a..2c1f50155 100644 --- a/enterprise/lib/captain/prompts/assistant.liquid +++ b/enterprise/lib/captain/prompts/assistant.liquid @@ -10,18 +10,11 @@ You are {{ name }}, a helpful AI assistant for {{ product_name }}. {{ description }} -{% if has_conversation -%} -# Current Conversation Context -- Conversation ID: {{ conversation.display_id }} -- Status: {{ conversation.status }} -- Priority: {{ conversation.priority }} -{% if conversation.label_list.size > 0 -%} -- Labels: {{ conversation.label_list | join: ", " }} -{% endif -%} -{% if conversation.custom_attributes -%} -{% for attribute in conversation.custom_attributes -%} -- {{ attribute[0] }}: {{ attribute[1] }} -{% endfor -%} +{% if conversation -%} +{% render 'conversation' %} + +{% if contact -%} +{% render 'contact' %} {% endif -%} {% endif -%} diff --git a/enterprise/lib/captain/prompts/scenario.liquid b/enterprise/lib/captain/prompts/scenario.liquid index 4375c1f09..9d7f967cd 100644 --- a/enterprise/lib/captain/prompts/scenario.liquid +++ b/enterprise/lib/captain/prompts/scenario.liquid @@ -7,18 +7,11 @@ You are a specialized agent called {{ title }}, your task is to handle the follo {{ instructions }} -{% if has_conversation -%} -# Current Conversation Context -- Conversation ID: {{ conversation.display_id }} -- Status: {{ conversation.status }} -- Priority: {{ conversation.priority }} -{% if conversation.label_list.size > 0 -%} -- Labels: {{ conversation.label_list | join: ", " }} -{% endif -%} -{% if conversation.custom_attributes -%} -{% for attribute in conversation.custom_attributes -%} -- {{ attribute[0] }}: {{ attribute[1] }} -{% endfor -%} +{% if conversation -%} +{% render 'conversation' %} + +{% if contact -%} +{% render 'contact' %} {% endif -%} {% endif -%} diff --git a/enterprise/lib/captain/prompts/snippets/contact.liquid b/enterprise/lib/captain/prompts/snippets/contact.liquid new file mode 100644 index 000000000..372389cbb --- /dev/null +++ b/enterprise/lib/captain/prompts/snippets/contact.liquid @@ -0,0 +1,17 @@ +# Contact Information +- Contact ID: {{ contact.id }} +- Name: {{ contact.name || "Unknown" }} +- Email: {{ contact.email || "None" }} +- Phone: {{ contact.phone_number || "None" }} +- Identifier: {{ contact.identifier || "None" }} +- Type: {{ contact.contact_type || "visitor" }} +{% if contact.custom_attributes -%} + {% for attribute in contact.custom_attributes -%} +- {{ attribute[0] }}: {{ attribute[1] }} + {% endfor -%} +{% endif -%} +{% if contact.additional_attributes -%} + {% for attribute in contact.additional_attributes -%} +- {{ attribute[0] }}: {{ attribute[1] }} + {% endfor -%} +{% endif -%} \ No newline at end of file diff --git a/enterprise/lib/captain/prompts/snippets/conversation.liquid b/enterprise/lib/captain/prompts/snippets/conversation.liquid new file mode 100644 index 000000000..b5faee7d6 --- /dev/null +++ b/enterprise/lib/captain/prompts/snippets/conversation.liquid @@ -0,0 +1,18 @@ +# Current Conversation Context +- Conversation ID: {{ conversation.display_id }} +- Contact ID: {{ conversation.contact_id }} +- Status: {{ conversation.status }} +- Priority: {{ conversation.priority || "None" }} +{% if conversation.label_list.size > 0 -%} +- Labels: {{ conversation.label_list | join: ", " }} +{% endif -%} +{% if conversation.custom_attributes -%} + {% for attribute in conversation.custom_attributes -%} +- {{ attribute[0] }}: {{ attribute[1] }} + {% endfor -%} +{% endif -%} +{% if conversation.additional_attributes -%} + {% for attribute in conversation.additional_attributes -%} +- {{ attribute[0] }}: {{ attribute[1] }} + {% endfor -%} +{% endif -%} \ No newline at end of file