From 7c6437eef6a582f12f0b13fe66f3bb783df04d1b Mon Sep 17 00:00:00 2001 From: Utkarsh-Patel-13 Date: Tue, 22 Jul 2025 20:36:52 -0700 Subject: [PATCH] Better layout for terminal and chat messages --- .../app/services/streaming_service.py | 12 +---- .../components/chat_v2/ChatInterface.tsx | 50 ++++++++++++++----- .../components/chat_v2/ChatTerminal.tsx | 42 +++++++--------- 3 files changed, 57 insertions(+), 47 deletions(-) diff --git a/surfsense_backend/app/services/streaming_service.py b/surfsense_backend/app/services/streaming_service.py index 08b31b7..cbd0e6d 100644 --- a/surfsense_backend/app/services/streaming_service.py +++ b/surfsense_backend/app/services/streaming_service.py @@ -43,17 +43,7 @@ class StreamingService: self.message_annotations[0]["content"].append(message) # Return only the delta annotation - # annotation = {"type": "TERMINAL_INFO", "content": [message]} - agent_data = { - "agent_name": "Terminal agent", - "events": [ - { - "status": message_type, - "result": message.get("text", ""), - } - ], - } - annotation = {"type": "agent_events", "data": agent_data} + annotation = {"type": "TERMINAL_INFO", "data": message} return f"8:[{json.dumps(annotation)}]\n" def format_sources_delta(self, sources: List[Dict[str, Any]]) -> str: diff --git a/surfsense_web/components/chat_v2/ChatInterface.tsx b/surfsense_web/components/chat_v2/ChatInterface.tsx index be3a85d..6a02ca7 100644 --- a/surfsense_web/components/chat_v2/ChatInterface.tsx +++ b/surfsense_web/components/chat_v2/ChatInterface.tsx @@ -7,6 +7,7 @@ import { ChatMessages, useChatUI, ChatMessage, + Message, } from "@llamaindex/chat-ui"; import { Document } from "@/hooks/use-documents"; import { CustomChatInput } from "@/components/chat_v2/ChatInputGroup"; @@ -26,23 +27,48 @@ interface ChatInterfaceProps { onResearchModeChange?: (mode: ResearchMode) => void; } -function ChatMessageDisplay() { +function ChatMessageDisplay({ + message, + isLast, +}: { + message: Message; + isLast: boolean; +}) { + return ( + + {message.role === "assistant" ? ( +
+ + + + + +
+ ) : ( + + + + )} +
+ ); +} + +function ChatMessagesDisplay() { const { messages } = useChatUI(); return ( {messages.map((message, index) => ( -
- {message.role === "assistant" && ( - - )} - -
+ ))}
@@ -64,7 +90,7 @@ export default function ChatInterface({ return (
- +
msg.role === "assistant") - .pop(); - - if (!lastAssistantMessage) { + if (!message) { return <>; } - const annotations = getAnnotationData(lastAssistantMessage, "agent_events"); - - if (annotations.length === 0) { - return <>; + interface TerminalInfo { + id: number; + text: string; + type: string; } - // Get all agent events and combine them - const events: any[] = []; - annotations.forEach((annotation: any) => { - if (annotation?.events && Array.isArray(annotation.events)) { - events.push(...annotation.events); - } - }); + const events = getAnnotationData( + message, + "TERMINAL_INFO" + ) as TerminalInfo[]; if (events.length === 0) { return <>; @@ -85,16 +78,17 @@ export default function TerminalDisplay({ messages }: { messages: Message[] }) { {!isCollapsed && (
{events.map((event, index) => ( -
+
$ - [{event.status || "completed"}] + [{event.type || ""}] + + + {event.text || ""}... - {event.result && ( - - {event.result.slice(0, 100)}... - - )}
))} {events.length === 0 && (