// All comments are in English. // TODO: window.location = `/api/file/${file_id}/${original_name}` let conversationId = null; let conversations = []; async function login() { window.location = "/login"; // if (AUTH_MODE === "oauth") { ... } } function toggleTheme() { document.body.classList.toggle("dark"); } async function sendAsync() { const r = await fetch("/api/queue/generate", { method: "POST", headers: {"Content-Type": "application/json"}, body: JSON.stringify({ conversation_id: conversationId, model: "llama3.2", prompt: document.getElementById("prompt").value }) }); const { task_id } = await r.json(); pollTask(task_id); } async function pollTask(taskId) { const interval = setInterval(async () => { const r = await fetch(`/api/queue/status/${taskId}`); const data = await r.json(); if (data.state === "SUCCESS") { clearInterval(interval); await loadHistory(); } }, 1500); } function exportPPTX() { window.location = `/api/export/pptx/${conversationId}/conversa.pptx` } function exportODP() { window.location = `/api/export/odp/${conversationId}/conversa.odp` } async function importExcel() { const file = document.getElementById("excelFile").files[0]; const form = new FormData(); form.append("file", file); const r = await fetch(`/api/import_excel/${conversationId}`, { method: "POST", body: form }); const data = await r.json(); console.log("Imported sheets:", data.sheets); await loadHistory(); } async function loadConversations() { const r = await fetch("/api/conversations"); conversations = await r.json(); renderTabs(); } function renderTabs() { const tabs = document.getElementById("tabs"); tabs.innerHTML = ""; conversations.forEach(c => { const btn = document.createElement("button"); btn.textContent = c.title; btn.onclick = () => selectConversation(c.id); tabs.appendChild(btn); }); } async function sendAudio() { const file = document.getElementById("audioFile").files[0]; const form = new FormData(); form.append("file", file); await fetch(`/api/audio/transcribe/${conversationId}`, { method: "POST", body: form }); await loadHistory(); } async function sendImage() { const file = document.getElementById("visionFile").files[0]; const form = new FormData(); form.append("file", file); await fetch(`/api/vision/${conversationId}`, { method: "POST", body: form }); await loadHistory(); } async function newConversation() { const title = prompt("Conversation title:"); const r = await fetch("/api/new_conversation", { method: "POST", headers: {"Content-Type": "application/json"}, body: JSON.stringify({title}) }); const data = await r.json(); conversationId = data.conversation_id; await loadConversations(); await loadHistory(); } async function selectConversation(id) { conversationId = id; await loadHistory(); } async function loadHistory() { const r = await fetch(`/api/history/${conversationId}`); const msgs = await r.json(); const chat = document.getElementById("chat"); chat.innerHTML = ""; msgs.forEach(m => { const div = document.createElement("div"); div.className = "msg " + m.role; div.innerHTML = `