summaryrefslogtreecommitdiff
path: root/src/ollama_web/static/app.js
diff options
context:
space:
mode:
authortanaka takashi <isazaka@gmail.com>2026-06-24 18:11:10 +0900
committertanaka takashi <isazaka@gmail.com>2026-06-24 18:11:10 +0900
commitf7e2894856c10d8a1e2d429a7858d9f143c42404 (patch)
treefc916d63947acead39868968db26ecd80854579c /src/ollama_web/static/app.js
parent374ba05fe2a4022d95ed45322a13e9eef3ed59de (diff)
Web検索などのツール呼び出しによる応答不能を回避
Diffstat (limited to 'src/ollama_web/static/app.js')
-rw-r--r--src/ollama_web/static/app.js32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/ollama_web/static/app.js b/src/ollama_web/static/app.js
index 22fac53..f7a46a2 100644
--- a/src/ollama_web/static/app.js
+++ b/src/ollama_web/static/app.js
@@ -436,6 +436,11 @@ async function send() {
assistantBody.innerHTML = "";
placeholderCleared = true;
}
+ // Remove the "waiting" placeholder once actual content starts arriving.
+ const waiting = assistantBody.querySelector(".waiting-msg");
+ if (waiting) {
+ waiting.remove();
+ }
assistantText += content;
assistantBody.innerHTML = renderMarkdown(assistantText);
highlightIn(assistantBody);
@@ -472,6 +477,33 @@ async function send() {
b.result.textContent = (ev.result || "").slice(0, 2000);
chatEl.scrollTop = chatEl.scrollHeight;
}
+ // Show a placeholder while waiting for the next ollama response so
+ // the UI does not look frozen between tool execution and deltas.
+ if (!placeholderCleared) {
+ assistantBody.innerHTML = "";
+ placeholderCleared = true;
+ }
+ if (assistantBody.querySelector(".waiting-msg") === null) {
+ const waiting = document.createElement("span");
+ waiting.className = "waiting-msg";
+ waiting.style.color = "var(--muted)";
+ waiting.style.fontStyle = "italic";
+ waiting.textContent = "ollama が回答を生成中…";
+ assistantBody.appendChild(waiting);
+ }
+ } else if (ev.type === "status") {
+ if (!placeholderCleared) {
+ assistantBody.innerHTML = "";
+ placeholderCleared = true;
+ }
+ if (assistantBody.querySelector(".waiting-msg") === null) {
+ const waiting = document.createElement("span");
+ waiting.className = "waiting-msg";
+ waiting.style.color = "var(--muted)";
+ waiting.style.fontStyle = "italic";
+ waiting.textContent = ev.message || "処理中…";
+ assistantBody.appendChild(waiting);
+ }
} else if (ev.type === "thinking") {
if (!thinkingBody) thinkingBody = addThinkingBubble(assistantExtras);
thinkingBody.textContent += ev.content;