summaryrefslogtreecommitdiffhomepage
path: root/packages/frontend/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'packages/frontend/src/lib')
-rw-r--r--packages/frontend/src/lib/components/ChatInput.svelte11
-rw-r--r--packages/frontend/src/lib/tabs.svelte.ts13
2 files changed, 23 insertions, 1 deletions
diff --git a/packages/frontend/src/lib/components/ChatInput.svelte b/packages/frontend/src/lib/components/ChatInput.svelte
index 3bbc4ab..f9c9546 100644
--- a/packages/frontend/src/lib/components/ChatInput.svelte
+++ b/packages/frontend/src/lib/components/ChatInput.svelte
@@ -5,6 +5,7 @@ let inputEl: HTMLInputElement | undefined;
let inputValue = $state("");
const agentStatus = $derived(tabStore.activeTab?.agentStatus ?? "idle");
+const tabId = $derived(tabStore.activeTab?.id ?? "");
$effect(() => {
inputEl?.focus();
@@ -27,7 +28,15 @@ function submit() {
<div class="flex items-center gap-2 p-3">
{#if agentStatus === "running"}
- <span class="loading loading-spinner loading-sm text-primary"></span>
+ <button
+ type="button"
+ class="btn btn-ghost gap-1 btn-sm lg:btn-xs"
+ onclick={() => tabStore.stopGeneration(tabId)}
+ title="Stop generation"
+ >
+ <span class="loading loading-spinner loading-sm text-primary"></span>
+ <span class="text-xs">Stop</span>
+ </button>
{:else if agentStatus === "idle"}
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="w-5 h-5 text-success">
<polyline points="20 6 9 17 4 12"></polyline>
diff --git a/packages/frontend/src/lib/tabs.svelte.ts b/packages/frontend/src/lib/tabs.svelte.ts
index ccdd587..f96a35e 100644
--- a/packages/frontend/src/lib/tabs.svelte.ts
+++ b/packages/frontend/src/lib/tabs.svelte.ts
@@ -1595,6 +1595,18 @@ export function createTabStore() {
}
}
+ async function stopGeneration(tabId: string): Promise<void> {
+ try {
+ await fetch(`${config.apiBase}/chat/stop`, {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({ tabId }),
+ });
+ } catch {
+ // ignore
+ }
+ }
+
function copyConversation(): string {
const tab = getActiveTab();
if (!tab) return "";
@@ -1738,6 +1750,7 @@ export function createTabStore() {
closeTab,
sendMessage,
cancelQueuedMessage,
+ stopGeneration,
changeModel,
setKey,
setAgent,