Spaces:
Configuration error
Configuration error
| const chatMessages = document.getElementById('chat-messages'); | |
| const userInput = document.getElementById('user-input'); | |
| const sendButton = document.getElementById('send-button'); | |
| let conversationHistory = []; | |
| let isProcessing = false; | |
| async function checkServerConnection() { | |
| const statusDiv = document.getElementById('connection-status'); | |
| try { | |
| const response = await fetch('http://localhost:5001/'); | |
| if (response.ok) { | |
| statusDiv.style.display = 'none'; | |
| return true; | |
| } | |
| } catch (error) { | |
| console.error('Server connection error:', error); | |
| statusDiv.style.display = 'block'; | |
| return false; | |
| } | |
| } | |
| document.addEventListener('DOMContentLoaded', () => { | |
| checkServerConnection(); | |
| setInterval(checkServerConnection, 5000); | |
| }); | |
| function addMessage(content, isUser = false) { | |
| const messageDiv = document.createElement('div'); | |
| messageDiv.className = `message ${isUser ? 'user-message' : 'bot-message'}`; | |
| if (!isUser) { | |
| const hasCodeBlock = content.includes('```'); | |
| if (hasCodeBlock) { | |
| const blocks = content.split('```'); | |
| blocks.forEach((block, index) => { | |
| if (index % 2 === 0) { | |
| if (block.trim()) { | |
| const textDiv = document.createElement('p'); | |
| textDiv.textContent = block.trim(); | |
| messageDiv.appendChild(textDiv); | |
| } | |
| } else { | |
| const codeContainer = document.createElement('div'); | |
| codeContainer.className = 'code-block-container'; | |
| const preBlock = document.createElement('pre'); | |
| const codeBlock = document.createElement('code'); | |
| const codeText = block.trim(); | |
| codeBlock.textContent = codeText; | |
| preBlock.appendChild(codeBlock); | |
| const copyButton = document.createElement('button'); | |
| copyButton.className = 'copy-btn'; | |
| copyButton.textContent = 'Copy'; | |
| copyButton.addEventListener('click', async () => { | |
| try { | |
| await navigator.clipboard.writeText(codeText); | |
| copyButton.textContent = 'Copied!'; | |
| setTimeout(() => { | |
| copyButton.textContent = 'Copy'; | |
| }, 2000); | |
| } catch (err) { | |
| console.error('Failed to copy:', err); | |
| // Fallback for older browsers | |
| const textarea = document.createElement('textarea'); | |
| textarea.value = codeText; | |
| document.body.appendChild(textarea); | |
| textarea.select(); | |
| document.execCommand('copy'); | |
| document.body.removeChild(textarea); | |
| copyButton.textContent = 'Copied!'; | |
| setTimeout(() => { | |
| copyButton.textContent = 'Copy'; | |
| }, 2000); | |
| } | |
| }); | |
| codeContainer.appendChild(preBlock); | |
| codeContainer.appendChild(copyButton); | |
| messageDiv.appendChild(codeContainer); | |
| } | |
| }); | |
| } else { | |
| messageDiv.textContent = content; | |
| } | |
| } else { | |
| messageDiv.textContent = content; | |
| } | |
| chatMessages.appendChild(messageDiv); | |
| chatMessages.scrollTop = chatMessages.scrollHeight; | |
| } | |
| async function sendMessage() { | |
| if (isProcessing) return; | |
| const message = userInput.value.trim(); | |
| if (!message) return; | |
| isProcessing = true; | |
| sendButton.disabled = true; | |
| addMessage(message, true); | |
| userInput.value = ''; | |
| conversationHistory.push({"role": "user", "content": message}); | |
| try { | |
| const response = await fetch('http://your-docker-ip:5001/chat', { | |
| method: 'POST', | |
| headers: { | |
| 'Content-Type': 'application/json', | |
| }, | |
| body: JSON.stringify({ | |
| message: message, | |
| history: conversationHistory | |
| }) | |
| }); | |
| const data = await response.json(); | |
| if (data.error) { | |
| console.error('API Error:', data.error); | |
| addMessage('Error: ' + data.error); | |
| return; | |
| } | |
| if (!data.response) { | |
| throw new Error('No response from API'); | |
| } | |
| addMessage(data.response); | |
| conversationHistory.push({"role": "assistant", "content": data.response}); | |
| } catch (error) { | |
| console.error('Error:', error); | |
| addMessage('Error: ' + error.message); | |
| } finally { | |
| isProcessing = false; | |
| sendButton.disabled = false; | |
| } | |
| } | |
| // Event listeners | |
| sendButton.addEventListener('click', sendMessage); | |
| userInput.addEventListener('keypress', (e) => { | |
| if (e.key === 'Enter' && !e.shiftKey) { | |
| e.preventDefault(); | |
| sendMessage(); | |
| } | |
| }); | |
| // Focus input on load | |
| userInput.focus(); | |