summaryrefslogtreecommitdiff
path: root/src/ollama_web/static/app.js
diff options
context:
space:
mode:
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;