File size: 4,537 Bytes
ede5511
3b24fc9
ac54ec5
 
 
 
3b24fc9
 
 
 
ac54ec5
 
 
 
3b24fc9
ac54ec5
3b24fc9
 
ac54ec5
3b24fc9
ac54ec5
3b24fc9
ac54ec5
 
3b24fc9
ac54ec5
 
 
 
 
 
 
 
 
 
3b24fc9
 
ac54ec5
 
 
3b24fc9
ac54ec5
 
 
 
 
 
 
 
ede5511
3b24fc9
e892728
 
 
ede5511
3b24fc9
e892728
ac54ec5
e892728
 
ede5511
e892728
 
 
 
ede5511
 
 
 
 
 
3b24fc9
ede5511
ac54ec5
3b24fc9
ede5511
 
 
3b24fc9
ede5511
 
 
e892728
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
document.addEventListener("DOMContentLoaded", () => {
    const workerUrl = "https://ctmresearchagent.aiagents.workers.dev"; // Replace with your worker URL if different
    const uploadForm = document.getElementById("uploadForm");
    const fileInput = document.getElementById("fileInput");
    const uploadStatus = document.getElementById("uploadStatus");
    const reportsList = document.getElementById("reportsList");
    const submitButton = document.getElementById("submitButton");
    const researchQueryInput = document.getElementById("researchQuery");
    const resultDisplay = document.getElementById("resultDisplay");
    const historyContainer = document.getElementById("historyContainer");

    async function handleFileUpload(event) {
        event.preventDefault();
        const file = fileInput.files[0];
        if (!file) { uploadStatus.textContent = 'Please select a file.'; return; }
        uploadStatus.textContent = `Uploading ${file.name}...`;
        const formData = new FormData();
        formData.append('file', file);
        try {
            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}!`;
            uploadForm.reset();
            await loadReportsList();
        } catch (error) {
            uploadStatus.textContent = `Error: ${error.message}`;
        }
    }

    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 = "";
            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) {
            reportsList.innerHTML = "<p>Could not load reports.</p>";
        }
    }

    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) {
            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('Failed to load history.');
            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) {
            historyContainer.innerHTML = "<p>Error loading research history.</p>";
        }
    }

    uploadForm.addEventListener("submit", handleFileUpload);
    submitButton.addEventListener("click", handleAiQuerySubmit);
    loadReportsList();
    loadResearchHistory();
});