Listen for kpaa-route postMessage from Open WebUI iframe -> auto clear refs
Browse files- src/kpaa/server.py +14 -3
src/kpaa/server.py
CHANGED
|
@@ -949,15 +949,26 @@ async function poll() {
|
|
| 949 |
setInterval(poll, 1000);
|
| 950 |
poll();
|
| 951 |
|
| 952 |
-
//
|
| 953 |
-
|
| 954 |
try {
|
| 955 |
await fetch("/api/clear-references", { method: "POST", cache: "no-store" });
|
| 956 |
} catch (_) {}
|
| 957 |
-
// 즉시 UI 비우기 (다음 polling 으로도 새 빈 데이터 도착)
|
| 958 |
refsEl.innerHTML = '<div class="refs-empty">새 검색 대기 중…</div>';
|
| 959 |
refsCountEl.textContent = "";
|
| 960 |
metaEl.textContent = "Open WebUI에서 질문하면 LLM이 본 근거가 여기에 표시됩니다.";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 961 |
});
|
| 962 |
</script>
|
| 963 |
</body></html>"""
|
|
|
|
| 949 |
setInterval(poll, 1000);
|
| 950 |
poll();
|
| 951 |
|
| 952 |
+
// 공통 비우기 동작 — 버튼 클릭 + iframe route 변경 메시지에서 사용.
|
| 953 |
+
async function clearRefsUI() {
|
| 954 |
try {
|
| 955 |
await fetch("/api/clear-references", { method: "POST", cache: "no-store" });
|
| 956 |
} catch (_) {}
|
|
|
|
| 957 |
refsEl.innerHTML = '<div class="refs-empty">새 검색 대기 중…</div>';
|
| 958 |
refsCountEl.textContent = "";
|
| 959 |
metaEl.textContent = "Open WebUI에서 질문하면 LLM이 본 근거가 여기에 표시됩니다.";
|
| 960 |
+
lastTs = 0; // 다음 polling 이 새 빈 데이터를 render 하도록 강제
|
| 961 |
+
}
|
| 962 |
+
|
| 963 |
+
// 초기화 버튼 — 백엔드의 _last_refs 를 비우고 우측 패널 즉시 비움.
|
| 964 |
+
document.getElementById("clear-btn").addEventListener("click", clearRefsUI);
|
| 965 |
+
|
| 966 |
+
// Open WebUI iframe 의 route 변경 자동 감지 — Dockerfile 에서 주입한
|
| 967 |
+
// postMessage polling 스크립트가 URL 변경 시 'kpaa-route' 메시지 전송.
|
| 968 |
+
window.addEventListener("message", (e) => {
|
| 969 |
+
if (e.data && e.data.type === "kpaa-route") {
|
| 970 |
+
clearRefsUI();
|
| 971 |
+
}
|
| 972 |
});
|
| 973 |
</script>
|
| 974 |
</body></html>"""
|