diff --git a/docker/compose_dev.yaml b/docker/compose_dev.yaml index e2ef793..683b497 100644 --- a/docker/compose_dev.yaml +++ b/docker/compose_dev.yaml @@ -57,6 +57,9 @@ services: - ../nginx/sites-enabled:/etc/nginx/sites-enabled - ../nginx/static:/etc/nginx/static - ../nginx/public:/etc/nginx/public + - ../integrations/Wordpress/eveai-chat-widget/css/eveai-chat-style.css:/etc/nginx/static/css/eveai-chat-style.css + - ../integrations/Wordpress/eveai-chat-widget/js/eveai-chat-widget.js:/etc/nginx/static/js/eveai-chat-widget.js + - ../integrations/Wordpress/eveai-chat-widget/js/eveai-sdk.js:/etc/nginx/static/js/eveai-sdk.js - ./logs/nginx:/var/log/nginx depends_on: - eveai_app diff --git a/docker/nginx/Dockerfile b/docker/nginx/Dockerfile index 7328492..608e80d 100644 --- a/docker/nginx/Dockerfile +++ b/docker/nginx/Dockerfile @@ -10,6 +10,9 @@ COPY ../../nginx/mime.types /etc/nginx/mime.types # Copy static & public files RUN mkdir -p /etc/nginx/static /etc/nginx/public COPY ../../nginx/static /etc/nginx/static +COPY ../../integrations/Wordpress/eveai-chat-widget/css/eveai-chat-style.css /etc/nginx/static/css/ +COPY ../../integrations/Wordpress/eveai-chat-widget/js/eveai-chat-widget.js /etc/nginx/static/js/ +COPY ../../integrations/Wordpress/eveai-chat-widget/js/eveai-sdk.js /etc/nginx/static/js COPY ../../nginx/public /etc/nginx/public # Copy site-specific configurations diff --git a/eveai_app/templates/interaction/view_chat_session.html b/eveai_app/templates/interaction/view_chat_session.html index 48d0c34..ef80a60 100644 --- a/eveai_app/templates/interaction/view_chat_session.html +++ b/eveai_app/templates/interaction/view_chat_session.html @@ -1,126 +1,80 @@ {% extends "base.html" %} +{% from "macros.html" import render_field %} + +{% block title %}Session Overview{% endblock %} + +{% block content_title %}Session Overview{% endblock %} +{% block content_description %}An overview of the chat session.{% endblock %} {% block content %}
Session ID: {{ chat_session.session_id }}
+User: {{ chat_session.user.user_name if chat_session.user else 'Anonymous' }}
+Start: {{ chat_session.session_start | to_local_time(chat_session.timezone) }}
+End: {{ chat_session.session_end | to_local_time(chat_session.timezone) if chat_session.session_end else 'Ongoing' }}
Question: {{ interaction.question }}
-Answer: {{ interaction.answer }}
-- Algorithm Used: - - fingerprint - {{ interaction.algorithm_used }} -
-- Appreciation: - - {{ 'thumb_up' if interaction.appreciation == 1 else 'thumb_down' }} - -
-Embeddings: - {% if interaction.embeddings %} - {% for embedding in interaction.embeddings %} - - {{ embedding.embedding_id }} - - {% endfor %} - {% else %} - None - {% endif %} -
-{{ interaction.detailed_question }}
+${text}
`; - this.messagesArea.appendChild(message); - this.messagesArea.scrollTop = this.messagesArea.scrollHeight; - } - - handleFeedback(feedback, interactionId) { - // Send feedback to the backend - console.log('handleFeedback called'); - if (!this.socket) { - console.error('Socket is not initialized'); - return; - } - if (!this.jwtToken) { - console.error('JWT token is not available'); - return; - } - console.log('Sending message to backend'); - console.log(`Feedback for ${interactionId}: ${feedback}`); - this.socket.emit('feedback', { tenantId: this.tenantId, token: this.jwtToken, feedback, interactionId }); - this.setStatusMessage('Feedback sent.'); - } - - addBotMessage(text, interactionId, algorithm = 'default', citations = []) { - const message = document.createElement('div'); - message.classList.add('message', 'bot'); - - let content = marked.parse(text); - let citationsHtml = citations.map(url => `${url}`).join('${content}
- ${citationsHtml ? `${citationsHtml}
` : ''} - - `; - this.messagesArea.appendChild(message); - - // Add event listeners for feedback buttons - const thumbsUp = message.querySelector('i[data-feedback="up"]'); - const thumbsDown = message.querySelector('i[data-feedback="down"]'); - thumbsUp.addEventListener('click', () => this.toggleFeedback(thumbsUp, thumbsDown, 'up', interactionId)); - thumbsDown.addEventListener('click', () => this.toggleFeedback(thumbsUp, thumbsDown, 'down', interactionId)); - - this.messagesArea.scrollTop = this.messagesArea.scrollHeight; - } - -toggleFeedback(thumbsUp, thumbsDown, feedback, interactionId) { - console.log('feedback called'); - this.idleTime = 0; // Reset idle time - if (feedback === 'up') { - thumbsUp.textContent = 'thumb_up'; // Change to filled icon - thumbsUp.classList.remove('outlined'); - thumbsUp.classList.add('filled'); - thumbsDown.textContent = 'thumb_down_off_alt'; // Keep the other icon outlined - thumbsDown.classList.add('outlined'); - thumbsDown.classList.remove('filled'); - } else { - thumbsDown.textContent = 'thumb_down'; // Change to filled icon - thumbsDown.classList.remove('outlined'); - thumbsDown.classList.add('filled'); - thumbsUp.textContent = 'thumb_up_off_alt'; // Keep the other icon outlined - thumbsUp.classList.add('outlined'); - thumbsUp.classList.remove('filled'); - } - - // Send feedback to the backend - this.handleFeedback(feedback, interactionId); - } - - handleSendMessage() { - console.log('handleSendMessage called'); - this.idleTime = 0; // Reset idle time - const message = this.questionInput.value.trim(); - if (message) { - this.addUserMessage(message); - this.questionInput.value = ''; - this.sendMessageToBackend(message); - this.toggleSendButton(true); // Disable and change send button to filled version - } - } - - sendMessageToBackend(message) { - console.log('sendMessageToBackend called'); - if (!this.socket) { - console.error('Socket is not initialized'); - return; - } - if (!this.jwtToken) { - console.error('JWT token is not available'); - return; - } - - const selectedLanguage = this.languageSelect.value; - - console.log('Sending message to backend'); - this.socket.emit('user_message', { - tenantId: this.tenantId, - token: this.jwtToken, - message, - language: selectedLanguage, - timezone: this.userTimezone - }); - this.setStatusMessage('Processing started ...') - } - - toggleSendButton(isProcessing) { - if (isProcessing) { - this.sendButton.textContent = 'send'; // Filled send icon - this.sendButton.classList.remove('outlined'); - this.sendButton.classList.add('filled'); - this.sendButton.classList.add('disabled'); // Add disabled class for styling - this.sendButton.style.pointerEvents = 'none'; // Disable click events - } else { - this.sendButton.textContent = 'send'; // Outlined send icon - this.sendButton.classList.add('outlined'); - this.sendButton.classList.remove('filled'); - this.sendButton.classList.remove('disabled'); // Remove disabled class - this.sendButton.style.pointerEvents = 'auto'; // Re-enable click events - } - } -} - -customElements.define('eveai-chat-widget', EveAIChatWidget); - diff --git a/nginx/static/js/eveai-sdk.js b/nginx/static/js/eveai-sdk.js deleted file mode 100644 index 1e9ccb8..0000000 --- a/nginx/static/js/eveai-sdk.js +++ /dev/null @@ -1,29 +0,0 @@ -// static/js/eveai-sdk.js -class EveAI { - constructor(tenantId, apiKey, domain, language, languages) { - this.tenantId = tenantId; - this.apiKey = apiKey; - this.domain = domain; - this.language = language; - this.languages = languages; - - console.log('EveAI constructor:', { tenantId, apiKey, domain, language, languages }); - } - - initializeChat(containerId) { - const container = document.getElementById(containerId); - if (container) { - container.innerHTML = '