| {% extends "layout.html" %}
|
|
|
| {% block content %}
|
| <div class="text-2xl font-bold text-gray-800">
|
| Welcome to NeuroML 🚀
|
| </div>
|
|
|
| <p class="mt-4 text-gray-600">
|
| Ask anything about Machine Learning using the chat button.
|
| </p>
|
|
|
|
|
| <button id="chat-btn"
|
| class="fixed bottom-6 right-6 bg-indigo-600 text-white w-14 h-14 rounded-full shadow-xl text-xl z-50">
|
| 🤖
|
| </button>
|
|
|
|
|
| <div id="chat-box"
|
| class="hidden fixed bottom-24 right-6 w-80 bg-white rounded-xl shadow-2xl border z-50">
|
|
|
| <div class="p-3 bg-indigo-600 text-white rounded-t-xl font-semibold">
|
| Qwen ML Tutor
|
| </div>
|
|
|
| <div id="chat-messages"
|
| class="p-3 h-64 overflow-y-auto text-sm space-y-2">
|
| </div>
|
|
|
| <div class="p-3 flex gap-2 border-t">
|
| <input id="chat-input"
|
| class="border flex-1 p-2 rounded text-sm"
|
| placeholder="Ask ML question..." />
|
| <button id="send-btn"
|
| class="bg-indigo-600 text-white px-4 rounded">
|
| Send
|
| </button>
|
| </div>
|
| </div>
|
|
|
|
|
| <script>
|
| const chatBtn = document.getElementById("chat-btn");
|
| const chatBox = document.getElementById("chat-box");
|
| const sendBtn = document.getElementById("send-btn");
|
| const input = document.getElementById("chat-input");
|
| const messages = document.getElementById("chat-messages");
|
|
|
| chatBtn.addEventListener("click", () => {
|
| chatBox.classList.toggle("hidden");
|
| });
|
|
|
| sendBtn.addEventListener("click", sendMessage);
|
|
|
| input.addEventListener("keydown", (e) => {
|
| if (e.key === "Enter") {
|
| sendMessage();
|
| }
|
| });
|
|
|
| function addMessage(text, sender) {
|
| const div = document.createElement("div");
|
|
|
| if (sender === "user") {
|
| div.className = "text-right";
|
| div.innerHTML = `
|
| <span class="inline-block bg-indigo-500 text-white px-3 py-2 rounded-lg max-w-[85%]">
|
| ${text}
|
| </span>
|
| `;
|
| } else {
|
| div.className = "text-left";
|
| div.innerHTML = `
|
| <span class="inline-block bg-gray-200 text-gray-800 px-3 py-2 rounded-lg max-w-[85%]">
|
| ${text}
|
| </span>
|
| `;
|
| }
|
|
|
| messages.appendChild(div);
|
| messages.scrollTop = messages.scrollHeight;
|
| }
|
|
|
| async function sendMessage() {
|
| const text = input.value.trim();
|
| if (!text) return;
|
|
|
| addMessage(text, "user");
|
| input.value = "";
|
|
|
| try {
|
| const response = await fetch("/chat", {
|
| method: "POST",
|
| headers: {
|
| "Content-Type": "application/json"
|
| },
|
| body: JSON.stringify({ message: text })
|
| });
|
|
|
| const data = await response.json();
|
| addMessage(data.reply, "bot");
|
|
|
| } catch (error) {
|
| addMessage("Server error. Please try again.", "bot");
|
| }
|
| }
|
| </script>
|
|
|
| {% endblock %}
|
|
|