|
|
|
const themeToggle = document.getElementById("themeToggle"); |
|
const toggleConfig = document.getElementById("toggleConfig"); |
|
const configPanel = document.getElementById("configPanel"); |
|
const html = document.documentElement; |
|
|
|
function setInitialTheme() { |
|
const savedTheme = localStorage.getItem("theme"); |
|
if (savedTheme === "dark") { |
|
html.classList.add("dark"); |
|
} else if (savedTheme === "light") { |
|
html.classList.remove("dark"); |
|
} else { |
|
const prefersDark = window.matchMedia( |
|
"(prefers-color-scheme: dark)", |
|
).matches; |
|
if (prefersDark) html.classList.add("dark"); |
|
else html.classList.remove("dark"); |
|
} |
|
} |
|
|
|
setInitialTheme(); |
|
|
|
themeToggle.addEventListener("click", () => { |
|
const isDark = html.classList.toggle("dark"); |
|
localStorage.setItem("theme", isDark ? "dark" : "light"); |
|
}); |
|
|
|
toggleConfig.addEventListener("click", () => { |
|
configPanel.classList.toggle("hidden"); |
|
}); |
|
|
|
|
|
const chatForm = document.getElementById("chatForm"); |
|
const userInput = document.getElementById("userInput"); |
|
const chatContainer = document.getElementById("chatContainer"); |
|
|
|
const modelA = document.getElementById("modelA"); |
|
const modelB = document.getElementById("modelB"); |
|
const modelC = document.getElementById("modelC"); |
|
|
|
function appendMessage(role, text) { |
|
const div = document.createElement("div"); |
|
div.className = `p-3 rounded shadow max-w-2xl ${role === "user" ? "bg-blue text-fg0 self-end" : "bg-green text-fg0 self-start"}`; |
|
div.innerText = text; |
|
chatContainer.appendChild(div); |
|
chatContainer.scrollTop = chatContainer.scrollHeight; |
|
} |
|
|
|
chatForm.addEventListener("submit", async (e) => { |
|
e.preventDefault(); |
|
const prompt = userInput.value.trim(); |
|
if (!prompt) return; |
|
|
|
appendMessage("user", prompt); |
|
userInput.value = ""; |
|
|
|
appendMessage("bot", "Thinking..."); |
|
|
|
const settings = { |
|
models: { |
|
"LLM-A": modelA.value, |
|
"LLM-B": modelB.value, |
|
"LLM-C": modelC.value, |
|
}, |
|
}; |
|
|
|
const response = await fetch("/chat", { |
|
method: "POST", |
|
headers: { "Content-Type": "application/json" }, |
|
body: JSON.stringify({ prompt, settings }), |
|
}); |
|
|
|
chatContainer.lastChild.remove(); |
|
|
|
if (response.ok) { |
|
const data = await response.json(); |
|
appendMessage("bot", data.response); |
|
} else { |
|
appendMessage( |
|
"bot", |
|
"An error occurred. Please check your model selections.", |
|
); |
|
} |
|
}); |
|
|