diff options
| author | tanaka takashi <isazaka@gmail.com> | 2026-06-24 18:11:10 +0900 |
|---|---|---|
| committer | tanaka takashi <isazaka@gmail.com> | 2026-06-24 18:11:10 +0900 |
| commit | f7e2894856c10d8a1e2d429a7858d9f143c42404 (patch) | |
| tree | fc916d63947acead39868968db26ecd80854579c /src/ollama_web/static | |
| parent | 374ba05fe2a4022d95ed45322a13e9eef3ed59de (diff) | |
Web検索などのツール呼び出しによる応答不能を回避
Diffstat (limited to 'src/ollama_web/static')
| -rw-r--r-- | src/ollama_web/static/app.js | 32 |
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; |
