From 298687f61d0565424b70053b740d272a30c1bb37 Mon Sep 17 00:00:00 2001 From: "DESKTOP-RTLN3BA\\$punk" Date: Wed, 9 Apr 2025 18:44:45 -0700 Subject: [PATCH 1/2] Added Discord --- CHANGELOG.md | 31 ------------------------------- README.md | 11 +++++++++-- 2 files changed, 9 insertions(+), 33 deletions(-) delete mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index ee7a03c58..000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,31 +0,0 @@ -## CHANGELOG ---- - -**UPDATE 11 NOVEMBER 2024:** -- Too many changes just fully rebranded it for better direction. -- SurfSense is now A Personal NotebookLM and Perplexity-like AI Assistant for Everyone. - - -**UPDATE 24 OCTOBER 2024:** -- SurfSense now uses custom gpt-researcher agent to format responses. -- Added better markdown rendering to UI. - - -**UPDATE 8 OCTOBER 2024:** -- SurfSense now lets you upload your own files such as pdfs, docx, images etc into your SurfSense Knowledge Base. -- SurfSense uses [Unstructured-IO](https://github.com/Unstructured-IO/unstructured) to support files. - - -**UPDATE 25 SEPTEMBER 2024:** - - Thanks [@hnico21](https://github.com/hnico21) for adding Docker Support - - -**UPDATE 20 SEPTEMBER 2024:** - - - SurfSense now works on Hierarchical Indices. - - Knowledge Graph dependency is removed for now until I find some better Graph RAG solutions. - - Added support for Local LLMs - -Until I find a good host for my backend you need to setup SurfSense locally for now. - ---- \ No newline at end of file diff --git a/README.md b/README.md index 4b7f70da8..14aa5692c 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,15 @@ Open source and easy to deploy locally. - The SurfSense Podcast feature is currently being reworked for better UI and stability. Expect it soon. +## FEATURE REQUESTS AND FUTURE + + +**SurfSense is actively being developed.** While it's not yet production-ready, you can help us speed up the process. + +Join the [SurfSense Discord](https://discord.gg/ejRNvftDp9) and help shape the future of SurfSense! + + + ## How to get started? ### PRE-START CHECKS @@ -260,8 +269,6 @@ After filling in your SurfSense API key you should be able to use extension now. - Basic keyword search page for saved sessions **[Done]** - Multi & Single Document Chat **[Done]** -## CHANGELOG - https://github.com/MODSetter/SurfSense/blob/main/CHANGELOG.md ## Contribute From 73a4a39cb65146da65e823d9629a413b6ddf540b Mon Sep 17 00:00:00 2001 From: "DESKTOP-RTLN3BA\\$punk" Date: Wed, 9 Apr 2025 18:44:45 -0700 Subject: [PATCH 2/2] YouTube video processing utils --- surfsense_backend/app/db.py | 1 + .../app/routes/documents_routes.py | 103 +++++++++++------- 2 files changed, 65 insertions(+), 39 deletions(-) diff --git a/surfsense_backend/app/db.py b/surfsense_backend/app/db.py index 631154399..b0fb2f03f 100644 --- a/surfsense_backend/app/db.py +++ b/surfsense_backend/app/db.py @@ -39,6 +39,7 @@ class DocumentType(str, Enum): FILE = "FILE" SLACK_CONNECTOR = "SLACK_CONNECTOR" NOTION_CONNECTOR = "NOTION_CONNECTOR" + YOUTUBE_VIDEO = "YOUTUBE_VIDEO" class SearchSourceConnectorType(str, Enum): SERPER_API = "SERPER_API" diff --git a/surfsense_backend/app/routes/documents_routes.py b/surfsense_backend/app/routes/documents_routes.py index 17e6b0739..76e550bc7 100644 --- a/surfsense_backend/app/routes/documents_routes.py +++ b/surfsense_backend/app/routes/documents_routes.py @@ -46,6 +46,13 @@ async def create_documents( url, request.search_space_id ) + elif request.document_type == DocumentType.YOUTUBE_VIDEO: + for url in request.content: + fastapi_background_tasks.add_task( + process_youtube_video_with_new_session, + url, + request.search_space_id + ) else: raise HTTPException( status_code=400, @@ -117,44 +124,6 @@ async def create_documents( detail=f"Failed to upload files: {str(e)}" ) -async def process_extension_document_with_new_session( - individual_document, - search_space_id: int -): - """Create a new session and process extension document.""" - from app.db import async_session_maker - - async with async_session_maker() as session: - try: - await add_extension_received_document(session, individual_document, search_space_id) - except Exception as e: - import logging - logging.error(f"Error processing extension document: {str(e)}") - -async def process_crawled_url_with_new_session( - url: str, - search_space_id: int -): - """Create a new session and process crawled URL.""" - from app.db import async_session_maker - - async with async_session_maker() as session: - try: - await add_crawled_url_document(session, url, search_space_id) - except Exception as e: - import logging - logging.error(f"Error processing crawled URL: {str(e)}") - -async def process_file_in_background_with_new_session( - file_path: str, - filename: str, - search_space_id: int -): - """Create a new session and process file.""" - from app.db import async_session_maker - - async with async_session_maker() as session: - await process_file_in_background(file_path, filename, search_space_id, session) async def process_file_in_background( file_path: str, @@ -348,4 +317,60 @@ async def delete_document( raise HTTPException( status_code=500, detail=f"Failed to delete document: {str(e)}" - ) \ No newline at end of file + ) + + +async def process_extension_document_with_new_session( + individual_document, + search_space_id: int +): + """Create a new session and process extension document.""" + from app.db import async_session_maker + + async with async_session_maker() as session: + try: + await add_extension_received_document(session, individual_document, search_space_id) + except Exception as e: + import logging + logging.error(f"Error processing extension document: {str(e)}") + +async def process_crawled_url_with_new_session( + url: str, + search_space_id: int +): + """Create a new session and process crawled URL.""" + from app.db import async_session_maker + + async with async_session_maker() as session: + try: + await add_crawled_url_document(session, url, search_space_id) + except Exception as e: + import logging + logging.error(f"Error processing crawled URL: {str(e)}") + +async def process_file_in_background_with_new_session( + file_path: str, + filename: str, + search_space_id: int +): + """Create a new session and process file.""" + from app.db import async_session_maker + + async with async_session_maker() as session: + await process_file_in_background(file_path, filename, search_space_id, session) + +async def process_youtube_video_with_new_session( + url: str, + search_space_id: int +): + """Create a new session and process YouTube video.""" + from app.db import async_session_maker + + async with async_session_maker() as session: + try: + # TODO: Implement YouTube video processing + print("Processing YouTube video with new session") + except Exception as e: + import logging + logging.error(f"Error processing YouTube video: {str(e)}") +