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/4] 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/4] 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)}")
+
From 1609e590860723846affa26bca05aa09d04f7773 Mon Sep 17 00:00:00 2001
From: "DESKTOP-RTLN3BA\\$punk"
Date: Wed, 9 Apr 2025 18:46:10 -0700
Subject: [PATCH 3/4] 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)}")
+
From 4a94164fe03d5b41bbb592446d4fb570bf84c30d Mon Sep 17 00:00:00 2001
From: "DESKTOP-RTLN3BA\\$punk"
Date: Wed, 9 Apr 2025 18:51:13 -0700
Subject: [PATCH 4/4] web: Added Discord Links
---
surfsense_web/components/Footer.tsx | 4 ++++
surfsense_web/components/ModernHeroWithGradients.tsx | 9 +++++----
2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/surfsense_web/components/Footer.tsx b/surfsense_web/components/Footer.tsx
index 0439b3540..3c8759d83 100644
--- a/surfsense_web/components/Footer.tsx
+++ b/surfsense_web/components/Footer.tsx
@@ -1,6 +1,7 @@
"use client";
import { cn } from "@/lib/utils";
import {
+ IconBrandDiscord,
IconBrandGithub,
IconBrandLinkedin,
IconBrandTwitter,
@@ -59,6 +60,9 @@ export function Footer() {
+
+
+
diff --git a/surfsense_web/components/ModernHeroWithGradients.tsx b/surfsense_web/components/ModernHeroWithGradients.tsx
index 649a7a9a5..c0bde3fe0 100644
--- a/surfsense_web/components/ModernHeroWithGradients.tsx
+++ b/surfsense_web/components/ModernHeroWithGradients.tsx
@@ -1,6 +1,6 @@
"use client";
import { cn } from "@/lib/utils";
-import { IconArrowRight, IconBrandGithub } from "@tabler/icons-react";
+import { IconArrowRight, IconBrandGithub, IconBrandDiscord } from "@tabler/icons-react";
import Link from "next/link";
import React from "react";
import { motion } from "framer-motion";
@@ -40,10 +40,11 @@ export function ModernHeroWithGradients() {
- Get Started
+
+ Discord