diff --git a/surfsense_backend/app/agents/researcher/nodes.py b/surfsense_backend/app/agents/researcher/nodes.py index 9e5d6d7..03430b0 100644 --- a/surfsense_backend/app/agents/researcher/nodes.py +++ b/surfsense_backend/app/agents/researcher/nodes.py @@ -1708,7 +1708,7 @@ async def handle_qna_workflow( ) # Use a reasonable top_k for QNA - not too many documents to avoid overwhelming the LLM - top_k = 15 + top_k = 20 relevant_documents = [] user_selected_documents = [] diff --git a/surfsense_backend/app/agents/researcher/utils.py b/surfsense_backend/app/agents/researcher/utils.py index 21969e6..53a08bf 100644 --- a/surfsense_backend/app/agents/researcher/utils.py +++ b/surfsense_backend/app/agents/researcher/utils.py @@ -91,7 +91,7 @@ def format_document_for_citation(document: dict[str, Any]) -> str: """Format a single document for citation in the standard XML format.""" content = document.get("content", "") doc_info = document.get("document", {}) - document_id = doc_info.get("id", "") + document_id = document.get("chunk_id", "") document_type = doc_info.get("document_type", "CRAWLED_URL") return f""" diff --git a/surfsense_backend/app/services/connector_service.py b/surfsense_backend/app/services/connector_service.py index 20ad351..14ea42c 100644 --- a/surfsense_backend/app/services/connector_service.py +++ b/surfsense_backend/app/services/connector_service.py @@ -109,7 +109,7 @@ class ConnectorService: # Create a source entry source = { - "id": document.get("id", self.source_id_counter), + "id": chunk.get("chunk_id", self.source_id_counter), "title": document.get("title", "Untitled Document"), "description": metadata.get( "og:description", @@ -183,7 +183,7 @@ class ConnectorService: # Create a source entry source = { - "id": document.get("id", self.source_id_counter), + "id": chunk.get("chunk_id", self.source_id_counter), "title": document.get("title", "Untitled Document"), "description": metadata.get( "og:description", @@ -312,7 +312,7 @@ class ConnectorService: documents = [] async with self.counter_lock: - for i, result in enumerate(tavily_results): + for _i, result in enumerate(tavily_results): # Create a source entry source = { "id": self.source_id_counter, @@ -324,7 +324,7 @@ class ConnectorService: # Create a document entry document = { - "chunk_id": f"tavily_chunk_{i}", + "chunk_id": self.source_id_counter, "content": result.get("content", ""), "score": result.get("score", 0.0), "document": { @@ -432,7 +432,7 @@ class ConnectorService: url = f"https://slack.com/app_redirect?channel={channel_id}" source = { - "id": document.get("id", self.source_id_counter), + "id": chunk.get("chunk_id", self.source_id_counter), "title": title, "description": description, "url": url, @@ -529,7 +529,7 @@ class ConnectorService: url = f"https://notion.so/{page_id.replace('-', '')}" source = { - "id": document.get("id", self.source_id_counter), + "id": chunk.get("chunk_id", self.source_id_counter), "title": title, "description": description, "url": url, @@ -650,7 +650,7 @@ class ConnectorService: pass source = { - "id": document.get("id", self.source_id_counter), + "id": chunk.get("chunk_id", self.source_id_counter), "title": title, "description": description, "url": webpage_url, @@ -747,7 +747,7 @@ class ConnectorService: url = f"https://www.youtube.com/watch?v={video_id}" if video_id else "" source = { - "id": document.get("id", self.source_id_counter), + "id": chunk.get("chunk_id", self.source_id_counter), "title": title, "description": description, "url": url, @@ -820,7 +820,7 @@ class ConnectorService: # Create a source entry source = { - "id": document.get("id", self.source_id_counter), + "id": chunk.get("chunk_id", self.source_id_counter), "title": document.get( "title", "GitHub Document" ), # Use specific title if available @@ -930,7 +930,7 @@ class ConnectorService: url = f"https://linear.app/issue/{issue_identifier}" source = { - "id": document.get("id", self.source_id_counter), + "id": chunk.get("chunk_id", self.source_id_counter), "title": title, "description": description, "url": url, @@ -1049,7 +1049,7 @@ class ConnectorService: url = f"{metadata.get('base_url')}/browse/{issue_key}" source = { - "id": document.get("id", self.source_id_counter), + "id": chunk.get("chunk_id", self.source_id_counter), "title": title, "description": description, "url": url, @@ -1183,7 +1183,7 @@ class ConnectorService: url = f"https://calendar.google.com/calendar/event?eid={event_id}" source = { - "id": document.get("id", self.source_id_counter), + "id": chunk.get("chunk_id", self.source_id_counter), "title": title, "description": description, "url": url, @@ -1310,7 +1310,7 @@ class ConnectorService: url = f"https://mail.google.com/mail/u/0/#inbox/{message_id}" source = { - "id": document.get("id", self.source_id_counter), + "id": chunk.get("chunk_id", self.source_id_counter), "title": title, "description": description, "url": url, @@ -1412,7 +1412,7 @@ class ConnectorService: url = f"{metadata.get('base_url')}/pages/{page_id}" source = { - "id": document.get("id", self.source_id_counter), + "id": chunk.get("chunk_id", self.source_id_counter), "title": title, "description": description, "url": url, @@ -1521,7 +1521,7 @@ class ConnectorService: ) source = { - "id": document.get("id", self.source_id_counter), + "id": chunk.get("chunk_id", self.source_id_counter), "title": task_name, "description": description, "url": task_url, @@ -1604,7 +1604,7 @@ class ConnectorService: documents = [] async with self.counter_lock: - for i, result in enumerate(linkup_results): + for _i, result in enumerate(linkup_results): # Only process results that have content if not hasattr(result, "content") or not result.content: continue @@ -1624,7 +1624,7 @@ class ConnectorService: # Create a document entry document = { - "chunk_id": f"linkup_chunk_{i}", + "chunk_id": self.source_id_counter, "content": result.content if hasattr(result, "content") else "", "score": 1.0, # Default score since not provided by Linkup "document": { @@ -1745,7 +1745,7 @@ class ConnectorService: url = f"https://discord.com/channels/@me/{channel_id}" source = { - "id": document.get("id", self.source_id_counter), + "id": chunk.get("chunk_id", self.source_id_counter), "title": title, "description": description, "url": url, diff --git a/surfsense_web/app/dashboard/page.tsx b/surfsense_web/app/dashboard/page.tsx index 8e0e291..484b959 100644 --- a/surfsense_web/app/dashboard/page.tsx +++ b/surfsense_web/app/dashboard/page.tsx @@ -266,29 +266,29 @@ const DashboardPage = () => { {searchSpaces && searchSpaces.length > 0 && searchSpaces.map((space) => ( - - - + + - -
-
+ /> +
+
+ {space.name} { height={248} />
-
-
- - - + + + + Delete Search Space + + Are you sure you want to delete "{space.name}"? This + action cannot be undone. All documents, chats, and podcasts in + this search space will be permanently deleted. + + + + Cancel + handleDeleteSearchSpace(space.id)} + className="bg-destructive hover:bg-destructive/90" > - - - - - - Delete Search Space - - Are you sure you want to delete "{space.name}"? This - action cannot be undone. All documents, chats, and podcasts in - this search space will be permanently deleted. - - - - Cancel - handleDeleteSearchSpace(space.id)} - className="bg-destructive hover:bg-destructive/90" - > - Delete - - - - -
+ Delete + + + +
- +
+

{space.name}

@@ -345,10 +346,10 @@ const DashboardPage = () => { Created {formatDate(space.created_at)}
-
- - - + +
+ + ))} {searchSpaces.length === 0 && (