Spaces:
Running
Running
const chatbotToggler = document.querySelector(".chatbot-toggler"); | |
const closeBtn = document.querySelector(".close-btn"); | |
const chatbox = document.querySelector(".chatbox"); | |
const chatInput = document.querySelector(".chat-input textarea"); | |
const sendChatBtn = document.querySelector(".chat-input span"); | |
// Функция для получения или генерации session_id | |
//function getSessionId() { | |
// let sessionId = localStorage.getItem('session_id'); | |
// if (!sessionId) { | |
// sessionId = crypto.randomUUID(); | |
// localStorage.setItem('session_id', sessionId); | |
// } | |
// return sessionId; | |
let userMessage = null; // Variable to store user's message | |
//const API_KEY = "PASTE-YOUR-API-KEY"; // Paste your API key here | |
const inputInitHeight = chatInput.scrollHeight; | |
const createChatLi = (message, className) => { | |
// Create a chat <li> element with passed message and className | |
const chatLi = document.createElement("li"); | |
chatLi.classList.add("chat", `${className}`); | |
let chatContent = className === "outgoing" ? `<p></p>` : `<span class="material-symbols-outlined">smart_toy</span><p></p>`; | |
chatLi.innerHTML = chatContent; | |
chatLi.querySelector("p").textContent = message; | |
return chatLi; // return chat <li> element | |
} | |
const generateResponse = (chatElement) => { | |
const API_URL = "https://hgswdi5icult2y-8000.proxy.runpod.net/query"; | |
const messageElement = chatElement.querySelector("p"); | |
const sessionId = getSessionId(); | |
//const sessionId = getSessionId(); | |
//const sessionId = "1234567"; | |
// Define the properties and message for the API request | |
const requestOptions = { | |
method: "POST", | |
headers: { | |
'Content-Type': 'application/json', | |
'X-Session-ID': sessionId // Передача session_id через заголовок | |
}, | |
body: JSON.stringify(userMessage) | |
} | |
// Send POST request to API, get response and set the reponse as paragraph text | |
fetch(API_URL, requestOptions).then(res => res.text()).then(data => { | |
//messageElement.textContent = data.trim(); | |
//messageElement.textContent = data.replace(/"/g, '').replace(/\\n/g, '<br>'); | |
messageElement.textContent = data.replace(/"/g, '').replace(/\\n/g, ' ').trim(); | |
}).catch(() => { | |
messageElement.classList.add("error"); | |
messageElement.textContent = "Упс! Что-то пошло не так. Пожалуйста, попробуйте еще раз."; | |
}).finally(() => chatbox.scrollTo(0, chatbox.scrollHeight)); | |
} | |
const handleChat = () => { | |
userMessage = chatInput.value.trim(); // Get user entered message and remove extra whitespace | |
if(!userMessage) return; | |
// Clear the input textarea and set its height to default | |
chatInput.value = ""; | |
chatInput.style.height = `${inputInitHeight}px`; | |
// Append the user's message to the chatbox | |
chatbox.appendChild(createChatLi(userMessage, "outgoing")); | |
chatbox.scrollTo(0, chatbox.scrollHeight); | |
setTimeout(() => { | |
// Display "Thinking..." message while waiting for the response | |
const incomingChatLi = createChatLi("Думаю...", "incoming"); | |
chatbox.appendChild(incomingChatLi); | |
chatbox.scrollTo(0, chatbox.scrollHeight); | |
generateResponse(incomingChatLi); | |
}, 600); | |
} | |
chatInput.addEventListener("input", () => { | |
// Adjust the height of the input textarea based on its content | |
chatInput.style.height = `${inputInitHeight}px`; | |
chatInput.style.height = `${chatInput.scrollHeight}px`; | |
}); | |
chatInput.addEventListener("keydown", (e) => { | |
// If Enter key is pressed without Shift key and the window | |
// width is greater than 800px, handle the chat | |
if(e.key === "Enter" && !e.shiftKey && window.innerWidth > 800) { | |
e.preventDefault(); | |
handleChat(); | |
} | |
}); | |
sendChatBtn.addEventListener("click", handleChat); | |
closeBtn.addEventListener("click", () => document.body.classList.remove("show-chatbot")); | |
chatbotToggler.addEventListener("click", () => document.body.classList.toggle("show-chatbot")); |