From e0007a31bbc9d890906fcab71c7c6b32b69cb92e Mon Sep 17 00:00:00 2001 From: Debanjum Date: Mon, 18 Aug 2025 23:26:37 -0700 Subject: [PATCH] Update web UX when server side error or hit stop + no task running - Ack websocket interrupt even when no task running Otherwise chat UX isn't updated to indicate query has stopped processing for this edge case - Mark chat request as not being procesed on server side error --- src/interface/web/app/chat/page.tsx | 1 + src/khoj/routers/api_chat.py | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/interface/web/app/chat/page.tsx b/src/interface/web/app/chat/page.tsx index 666726af..e273455e 100644 --- a/src/interface/web/app/chat/page.tsx +++ b/src/interface/web/app/chat/page.tsx @@ -359,6 +359,7 @@ export default function Chat() { return; } else if (controlMessage.error) { console.error("WebSocket error:", controlMessage.error); + setProcessQuerySignal(false); return; } } catch { diff --git a/src/khoj/routers/api_chat.py b/src/khoj/routers/api_chat.py index 411cb73a..88035e9d 100644 --- a/src/khoj/routers/api_chat.py +++ b/src/khoj/routers/api_chat.py @@ -1526,6 +1526,8 @@ async def chat_ws( ack_type = "interrupt_acknowledged" await websocket.send_text(json.dumps({"type": ack_type})) else: + ack_type = "interrupt_acknowledged" + await websocket.send_text(json.dumps({"type": ack_type})) logger.info(f"No ongoing task to interrupt for user {websocket.scope['user'].object.id}") continue @@ -1704,8 +1706,8 @@ async def process_chat_request( logger.debug(f"Chat request cancelled for user {websocket.scope['user'].object.id}") raise except Exception as e: - logger.error(f"Error processing chat request: {e}", exc_info=True) await websocket.send_text(json.dumps({"error": "Internal server error"})) + logger.error(f"Error processing chat request: {e}", exc_info=True) raise