Spaces:
Running
Running
File size: 5,787 Bytes
ede5511 ac54ec5 ede5511 ac54ec5 ede5511 ac54ec5 ede5511 ac54ec5 ede5511 5d7163f ede5511 e892728 5d7163f ede5511 e892728 ede5511 e892728 ede5511 e892728 ac54ec5 e892728 ede5511 e892728 ede5511 e892728 ede5511 ac54ec5 ede5511 e892728 ede5511 ac54ec5 ede5511 ac54ec5 ede5511 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
document.addEventListener("DOMContentLoaded", () => {
const workerUrl = "https://ctmresearchagent.aiagents.workers.dev";
// Chat elements
const submitButton = document.getElementById("submitButton");
const researchQueryInput = document.getElementById("researchQuery");
const resultDisplay = document.getElementById("resultDisplay");
const historyContainer = document.getElementById("historyContainer");
// Document management elements
const uploadForm = document.getElementById("uploadForm");
const fileInput = document.getElementById("fileInput");
const uploadStatus = document.getElementById("uploadStatus");
const reportsList = document.getElementById("reportsList");
/**
* Handles file upload
*/
async function handleFileUpload(event) {
event.preventDefault();
const file = fileInput.files[0];
if (!file) {
uploadStatus.textContent = 'Please select a file to upload.';
uploadStatus.style.color = 'red';
return;
}
uploadStatus.textContent = `Uploading ${file.name}...`;
uploadStatus.style.color = 'blue';
try {
const formData = new FormData();
formData.append('file', file);
// Note: We're sending FormData, not JSON
const response = await fetch(`${workerUrl}/api/upload`, {
method: 'POST',
body: formData,
});
const data = await response.json();
if (!response.ok) {
throw new Error(data.error || 'Upload failed');
}
uploadStatus.textContent = `Successfully uploaded ${file.name}!`;
uploadStatus.style.color = 'green';
uploadForm.reset();
await loadReportsList(); // Refresh the list of reports
} catch (error) {
console.error("Upload error:", error);
uploadStatus.textContent = `Error: ${error.message}`;
uploadStatus.style.color = 'red';
}
}
/**
* Loads the list of available research reports
*/
async function loadReportsList() {
try {
const response = await fetch(`${workerUrl}/api/documents`);
if (!response.ok) throw new Error('Failed to fetch reports list.');
const documents = await response.json();
reportsList.innerHTML = ""; // Clear existing list
if (documents.length === 0) {
reportsList.innerHTML = "<p>No reports uploaded yet.</p>";
return;
}
documents.forEach(doc => {
const entryDiv = document.createElement("div");
entryDiv.className = "report-entry";
entryDiv.innerHTML = `
<span>${doc.filename}</span>
<span class="status ${doc.status.toLowerCase()}">${doc.status}</span>
`;
reportsList.appendChild(entryDiv);
});
} catch (error) {
console.error(error);
reportsList.innerHTML = "<p>Could not load reports.</p>";
}
}
// --- AI Chat Functions (from previous step, unchanged) ---
async function handleAiQuerySubmit() {
const query = researchQueryInput.value.trim();
if (!query) {
alert("Please enter a research query.");
return;
}
submitButton.disabled = true;
submitButton.innerText = "Thinking...";
resultDisplay.innerHTML = "<p>Generating response...</p>";
try {
const response = await fetch(`${workerUrl}/api/query`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ query: query }),
});
const data = await response.json();
if (!response.ok) throw new Error(data.error || "An unknown error occurred.");
resultDisplay.innerText = data.result;
await loadResearchHistory();
} catch (error) {
console.error("Error fetching AI response:", error);
resultDisplay.innerText = `Error: ${error.message}`;
} finally {
submitButton.disabled = false;
submitButton.innerText = "Submit";
}
}
async function loadResearchHistory() {
try {
const response = await fetch(`${workerUrl}/api/research`);
if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
const logs = await response.json();
historyContainer.innerHTML = "";
if (logs.length === 0) {
historyContainer.innerHTML = "<p>No research history found.</p>";
return;
}
logs.forEach(log => {
const entryDiv = document.createElement("div");
entryDiv.className = "history-entry";
entryDiv.innerHTML = `
<p><strong>Query:</strong> ${log.query}</p>
<p><strong>Result:</strong> ${log.result}</p>
<p><small><em>${new Date(log.timestamp).toLocaleString()}</em></small></p>
`;
historyContainer.appendChild(entryDiv);
});
} catch (error) {
console.error("Failed to load research history:", error);
historyContainer.innerHTML = "<p>Error loading research history.</p>";
}
}
// Event Listeners
uploadForm.addEventListener("submit", handleFileUpload);
submitButton.addEventListener("click", handleAiQuerySubmit);
// Initial load
loadReportsList();
loadResearchHistory();
}); |