From f7e2894856c10d8a1e2d429a7858d9f143c42404 Mon Sep 17 00:00:00 2001 From: tanaka takashi Date: Wed, 24 Jun 2026 18:11:10 +0900 Subject: Web検索などのツール呼び出しによる応答不能を回避 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ollama_web/static/app.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/ollama_web/static/app.js') 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; -- cgit v1.2.3