From ea3e081bd3e10de8e8ecc24435ca23b693684885 Mon Sep 17 00:00:00 2001 From: "Niraj Chaudhari (Persistent Systems Inc)" Date: Fri, 17 Oct 2025 16:25:23 +0530 Subject: [PATCH 1/5] added clean_citation method in response_handlers.py --- src/backend/v3/callbacks/response_handlers.py | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/backend/v3/callbacks/response_handlers.py b/src/backend/v3/callbacks/response_handlers.py index fb91dd9c0..e630f08a1 100644 --- a/src/backend/v3/callbacks/response_handlers.py +++ b/src/backend/v3/callbacks/response_handlers.py @@ -6,7 +6,7 @@ import asyncio import logging import time - +import re from semantic_kernel.contents import ChatMessageContent, StreamingChatMessageContent from v3.config.settings import connection_config from v3.models.messages import ( @@ -17,6 +17,22 @@ WebsocketMessageType, ) +def clean_citations(text: str) -> str: + """Remove citation markers from agent responses while preserving formatting.""" + if not text: + return text + + # Remove citation patterns like [9:0|source], [9:1|source], etc. + text = re.sub(r'\[\d+:\d+\|source\]', '', text) + + #Remove other common citation pattern + text = re.sub(r'\[\s*source\s*\]', '', text, flags=re.IGNORECASE) + text = re.sub(r'\[\d+\]', '', text) + text = re.sub(r'【[^】]*】', '', text) # Unicode brackets + text = re.sub(r'\(source:[^)]*\)', '', text, flags=re.IGNORECASE) + text = re.sub(r'\[source:[^\]]*\]', '', text, flags=re.IGNORECASE) + + return text def agent_response_callback(message: ChatMessageContent, user_id: str = None) -> None: """Observer function to print detailed information about streaming messages.""" @@ -55,7 +71,7 @@ def agent_response_callback(message: ChatMessageContent, user_id: str = None) -> final_message = AgentMessage( agent_name=agent_name, timestamp=time.time() or "", - content=message.content or "", + content=clean_citations(message.content) or "", ) asyncio.create_task( @@ -80,7 +96,7 @@ async def streaming_agent_response_callback( try: message = AgentMessageStreaming( agent_name=streaming_message.name or "Unknown Agent", - content=streaming_message.content, + content=clean_citations(streaming_message.content), is_final=is_final, ) await connection_config.send_status_update_async( From 21a0973ae09a0f18ac2cddb06ed099288ae7b4cf Mon Sep 17 00:00:00 2001 From: "Niraj Chaudhari (Persistent Systems Inc)" Date: Fri, 17 Oct 2025 17:00:27 +0530 Subject: [PATCH 2/5] remove pylint issues --- src/backend/v3/callbacks/response_handlers.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/backend/v3/callbacks/response_handlers.py b/src/backend/v3/callbacks/response_handlers.py index e630f08a1..ccf11e05f 100644 --- a/src/backend/v3/callbacks/response_handlers.py +++ b/src/backend/v3/callbacks/response_handlers.py @@ -17,21 +17,23 @@ WebsocketMessageType, ) + def clean_citations(text: str) -> str: """Remove citation markers from agent responses while preserving formatting.""" if not text: return text - + # Remove citation patterns like [9:0|source], [9:1|source], etc. text = re.sub(r'\[\d+:\d+\|source\]', '', text) - - #Remove other common citation pattern + + # Remove other common citation pattern text = re.sub(r'\[\s*source\s*\]', '', text, flags=re.IGNORECASE) text = re.sub(r'\[\d+\]', '', text) text = re.sub(r'【[^】]*】', '', text) # Unicode brackets text = re.sub(r'\(source:[^)]*\)', '', text, flags=re.IGNORECASE) text = re.sub(r'\[source:[^\]]*\]', '', text, flags=re.IGNORECASE) - + + return text def agent_response_callback(message: ChatMessageContent, user_id: str = None) -> None: @@ -96,7 +98,7 @@ async def streaming_agent_response_callback( try: message = AgentMessageStreaming( agent_name=streaming_message.name or "Unknown Agent", - content=clean_citations(streaming_message.content), + content=clean_citations(streaming_message.content) or "", is_final=is_final, ) await connection_config.send_status_update_async( From d5079e00af8ec0c19633f7908e2c93a67419c0c8 Mon Sep 17 00:00:00 2001 From: "Niraj Chaudhari (Persistent Systems Inc)" Date: Fri, 17 Oct 2025 17:03:15 +0530 Subject: [PATCH 3/5] remove pylint issues-1 --- src/backend/v3/callbacks/response_handlers.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/backend/v3/callbacks/response_handlers.py b/src/backend/v3/callbacks/response_handlers.py index ccf11e05f..41ca10188 100644 --- a/src/backend/v3/callbacks/response_handlers.py +++ b/src/backend/v3/callbacks/response_handlers.py @@ -33,7 +33,6 @@ def clean_citations(text: str) -> str: text = re.sub(r'\(source:[^)]*\)', '', text, flags=re.IGNORECASE) text = re.sub(r'\[source:[^\]]*\]', '', text, flags=re.IGNORECASE) - return text def agent_response_callback(message: ChatMessageContent, user_id: str = None) -> None: From 4f3a2c7b7aebd327fb61c2e1c482fb113c4ff4cd Mon Sep 17 00:00:00 2001 From: "Niraj Chaudhari (Persistent Systems Inc)" Date: Fri, 17 Oct 2025 17:05:40 +0530 Subject: [PATCH 4/5] remove pylint issues-2 --- src/backend/v3/callbacks/response_handlers.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/backend/v3/callbacks/response_handlers.py b/src/backend/v3/callbacks/response_handlers.py index 41ca10188..f1bacc10b 100644 --- a/src/backend/v3/callbacks/response_handlers.py +++ b/src/backend/v3/callbacks/response_handlers.py @@ -35,6 +35,7 @@ def clean_citations(text: str) -> str: return text + def agent_response_callback(message: ChatMessageContent, user_id: str = None) -> None: """Observer function to print detailed information about streaming messages.""" # import sys From 9319c1e49a0c7b275f3121c496c35937c9fcc8e6 Mon Sep 17 00:00:00 2001 From: "Niraj Chaudhari (Persistent Systems Inc)" Date: Fri, 17 Oct 2025 17:17:28 +0530 Subject: [PATCH 5/5] remove unnecessary "" --- src/backend/v3/callbacks/response_handlers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/v3/callbacks/response_handlers.py b/src/backend/v3/callbacks/response_handlers.py index f1bacc10b..51a4e2e84 100644 --- a/src/backend/v3/callbacks/response_handlers.py +++ b/src/backend/v3/callbacks/response_handlers.py @@ -98,7 +98,7 @@ async def streaming_agent_response_callback( try: message = AgentMessageStreaming( agent_name=streaming_message.name or "Unknown Agent", - content=clean_citations(streaming_message.content) or "", + content=clean_citations(streaming_message.content), is_final=is_final, ) await connection_config.send_status_update_async(