Update static/script.js
Browse files- static/script.js +22 -5
static/script.js
CHANGED
|
@@ -13,7 +13,7 @@ const MODEL_LIST = [
|
|
| 13 |
{ id: "deepseek/deepseek-r1:free", name: "DeepSeek R1" }
|
| 14 |
];
|
| 15 |
|
| 16 |
-
// ===
|
| 17 |
function createDropdown(dropdownId) {
|
| 18 |
const dropdown = document.getElementById(dropdownId);
|
| 19 |
const selected = dropdown.querySelector(".selected");
|
|
@@ -39,7 +39,6 @@ function createDropdown(dropdownId) {
|
|
| 39 |
options.classList.toggle("hidden");
|
| 40 |
});
|
| 41 |
|
| 42 |
-
// Close dropdowns if clicking outside
|
| 43 |
document.addEventListener("click", () => {
|
| 44 |
options.classList.add("hidden");
|
| 45 |
});
|
|
@@ -48,6 +47,7 @@ function createDropdown(dropdownId) {
|
|
| 48 |
// === Theme Toggle ===
|
| 49 |
const themeToggle = document.getElementById("themeToggle");
|
| 50 |
const toggleConfig = document.getElementById("toggleConfig");
|
|
|
|
| 51 |
const configPanel = document.getElementById("configPanel");
|
| 52 |
const html = document.documentElement;
|
| 53 |
|
|
@@ -55,12 +55,19 @@ function setInitialTheme() {
|
|
| 55 |
const savedTheme = localStorage.getItem("theme");
|
| 56 |
if (savedTheme === "dark") {
|
| 57 |
html.classList.add("dark");
|
|
|
|
| 58 |
} else if (savedTheme === "light") {
|
| 59 |
html.classList.remove("dark");
|
|
|
|
| 60 |
} else {
|
| 61 |
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
| 62 |
-
if (prefersDark)
|
| 63 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 64 |
}
|
| 65 |
}
|
| 66 |
|
|
@@ -69,21 +76,29 @@ setInitialTheme();
|
|
| 69 |
themeToggle.addEventListener("click", () => {
|
| 70 |
const isDark = html.classList.toggle("dark");
|
| 71 |
localStorage.setItem("theme", isDark ? "dark" : "light");
|
|
|
|
| 72 |
});
|
| 73 |
|
| 74 |
toggleConfig.addEventListener("click", () => {
|
| 75 |
configPanel.classList.toggle("hidden");
|
| 76 |
});
|
| 77 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 78 |
// === Chat Handling ===
|
| 79 |
const chatForm = document.getElementById("chatForm");
|
| 80 |
const userInput = document.getElementById("userInput");
|
| 81 |
const chatContainer = document.getElementById("chatContainer");
|
| 82 |
|
|
|
|
| 83 |
createDropdown("modelA");
|
| 84 |
createDropdown("modelB");
|
| 85 |
createDropdown("modelC");
|
|
|
|
| 86 |
|
|
|
|
| 87 |
function appendMessage(role, text) {
|
| 88 |
const div = document.createElement("div");
|
| 89 |
div.className = `p-3 rounded shadow max-w-2xl ${role === "user" ? "bg-blue text-fg0 self-end" : "bg-green text-fg0 self-start"}`;
|
|
@@ -92,6 +107,7 @@ function appendMessage(role, text) {
|
|
| 92 |
chatContainer.scrollTop = chatContainer.scrollHeight;
|
| 93 |
}
|
| 94 |
|
|
|
|
| 95 |
chatForm.addEventListener("submit", async (e) => {
|
| 96 |
e.preventDefault();
|
| 97 |
const prompt = userInput.value.trim();
|
|
@@ -107,7 +123,8 @@ chatForm.addEventListener("submit", async (e) => {
|
|
| 107 |
"LLM-A": document.getElementById("modelA").dataset.value,
|
| 108 |
"LLM-B": document.getElementById("modelB").dataset.value,
|
| 109 |
"LLM-C": document.getElementById("modelC").dataset.value,
|
| 110 |
-
}
|
|
|
|
| 111 |
};
|
| 112 |
|
| 113 |
const response = await fetch("/chat", {
|
|
|
|
| 13 |
{ id: "deepseek/deepseek-r1:free", name: "DeepSeek R1" }
|
| 14 |
];
|
| 15 |
|
| 16 |
+
// === Create Custom Dropdowns ===
|
| 17 |
function createDropdown(dropdownId) {
|
| 18 |
const dropdown = document.getElementById(dropdownId);
|
| 19 |
const selected = dropdown.querySelector(".selected");
|
|
|
|
| 39 |
options.classList.toggle("hidden");
|
| 40 |
});
|
| 41 |
|
|
|
|
| 42 |
document.addEventListener("click", () => {
|
| 43 |
options.classList.add("hidden");
|
| 44 |
});
|
|
|
|
| 47 |
// === Theme Toggle ===
|
| 48 |
const themeToggle = document.getElementById("themeToggle");
|
| 49 |
const toggleConfig = document.getElementById("toggleConfig");
|
| 50 |
+
const docsButton = document.getElementById("docsButton");
|
| 51 |
const configPanel = document.getElementById("configPanel");
|
| 52 |
const html = document.documentElement;
|
| 53 |
|
|
|
|
| 55 |
const savedTheme = localStorage.getItem("theme");
|
| 56 |
if (savedTheme === "dark") {
|
| 57 |
html.classList.add("dark");
|
| 58 |
+
themeToggle.textContent = "π";
|
| 59 |
} else if (savedTheme === "light") {
|
| 60 |
html.classList.remove("dark");
|
| 61 |
+
themeToggle.textContent = "βοΈ";
|
| 62 |
} else {
|
| 63 |
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
| 64 |
+
if (prefersDark) {
|
| 65 |
+
html.classList.add("dark");
|
| 66 |
+
themeToggle.textContent = "π";
|
| 67 |
+
} else {
|
| 68 |
+
html.classList.remove("dark");
|
| 69 |
+
themeToggle.textContent = "βοΈ";
|
| 70 |
+
}
|
| 71 |
}
|
| 72 |
}
|
| 73 |
|
|
|
|
| 76 |
themeToggle.addEventListener("click", () => {
|
| 77 |
const isDark = html.classList.toggle("dark");
|
| 78 |
localStorage.setItem("theme", isDark ? "dark" : "light");
|
| 79 |
+
themeToggle.textContent = isDark ? "π" : "βοΈ";
|
| 80 |
});
|
| 81 |
|
| 82 |
toggleConfig.addEventListener("click", () => {
|
| 83 |
configPanel.classList.toggle("hidden");
|
| 84 |
});
|
| 85 |
|
| 86 |
+
docsButton.addEventListener("click", () => {
|
| 87 |
+
window.location.href = "/docs";
|
| 88 |
+
});
|
| 89 |
+
|
| 90 |
// === Chat Handling ===
|
| 91 |
const chatForm = document.getElementById("chatForm");
|
| 92 |
const userInput = document.getElementById("userInput");
|
| 93 |
const chatContainer = document.getElementById("chatContainer");
|
| 94 |
|
| 95 |
+
// Create all dropdowns
|
| 96 |
createDropdown("modelA");
|
| 97 |
createDropdown("modelB");
|
| 98 |
createDropdown("modelC");
|
| 99 |
+
createDropdown("aggregator");
|
| 100 |
|
| 101 |
+
// Append Message Function
|
| 102 |
function appendMessage(role, text) {
|
| 103 |
const div = document.createElement("div");
|
| 104 |
div.className = `p-3 rounded shadow max-w-2xl ${role === "user" ? "bg-blue text-fg0 self-end" : "bg-green text-fg0 self-start"}`;
|
|
|
|
| 107 |
chatContainer.scrollTop = chatContainer.scrollHeight;
|
| 108 |
}
|
| 109 |
|
| 110 |
+
// Form Submit Event
|
| 111 |
chatForm.addEventListener("submit", async (e) => {
|
| 112 |
e.preventDefault();
|
| 113 |
const prompt = userInput.value.trim();
|
|
|
|
| 123 |
"LLM-A": document.getElementById("modelA").dataset.value,
|
| 124 |
"LLM-B": document.getElementById("modelB").dataset.value,
|
| 125 |
"LLM-C": document.getElementById("modelC").dataset.value,
|
| 126 |
+
},
|
| 127 |
+
aggregator: document.getElementById("aggregator").dataset.value,
|
| 128 |
};
|
| 129 |
|
| 130 |
const response = await fetch("/chat", {
|