diff --git a/surfsense_backend/alembic/versions/55_rename_google_drive_connector_to_file.py b/surfsense_backend/alembic/versions/55_rename_google_drive_connector_to_file.py new file mode 100644 index 000000000..137274b16 --- /dev/null +++ b/surfsense_backend/alembic/versions/55_rename_google_drive_connector_to_file.py @@ -0,0 +1,74 @@ +"""Rename GOOGLE_DRIVE_CONNECTOR document type to GOOGLE_DRIVE_FILE + +Revision ID: 55 +Revises: 54 +Create Date: 2025-12-29 12:00:00.000000 + +""" + +from collections.abc import Sequence + +from alembic import op + +# revision identifiers, used by Alembic. +revision: str = "55" +down_revision: str | None = "54" +branch_labels: str | Sequence[str] | None = None +depends_on: str | Sequence[str] | None = None + + +def upgrade() -> None: + from sqlalchemy import text + + connection = op.get_bind() + + connection.execute( + text( + """ + DO $$ + BEGIN + IF NOT EXISTS ( + SELECT 1 FROM pg_type t + JOIN pg_enum e ON t.oid = e.enumtypid + WHERE t.typname = 'documenttype' AND e.enumlabel = 'GOOGLE_DRIVE_FILE' + ) THEN + ALTER TYPE documenttype ADD VALUE IF NOT EXISTS 'GOOGLE_DRIVE_FILE'; + END IF; + END + $$; + """ + ) + ) + + connection.commit() + + connection.execute( + text( + """ + UPDATE documents + SET document_type = 'GOOGLE_DRIVE_FILE' + WHERE document_type = 'GOOGLE_DRIVE_CONNECTOR'; + """ + ) + ) + + connection.commit() + + +def downgrade() -> None: + from sqlalchemy import text + + connection = op.get_bind() + + connection.execute( + text( + """ + UPDATE documents + SET document_type = 'GOOGLE_DRIVE_CONNECTOR' + WHERE document_type = 'GOOGLE_DRIVE_FILE'; + """ + ) + ) + + connection.commit() + diff --git a/surfsense_backend/app/agents/new_chat/tools/knowledge_base.py b/surfsense_backend/app/agents/new_chat/tools/knowledge_base.py index 98c363513..ecaff6f2f 100644 --- a/surfsense_backend/app/agents/new_chat/tools/knowledge_base.py +++ b/surfsense_backend/app/agents/new_chat/tools/knowledge_base.py @@ -36,7 +36,7 @@ _ALL_CONNECTORS: list[str] = [ "CLICKUP_CONNECTOR", "GOOGLE_CALENDAR_CONNECTOR", "GOOGLE_GMAIL_CONNECTOR", - "GOOGLE_DRIVE_CONNECTOR", + "GOOGLE_DRIVE_FILE", "DISCORD_CONNECTOR", "AIRTABLE_CONNECTOR", "TAVILY_API", @@ -426,7 +426,7 @@ async def search_knowledge_base_async( ) all_documents.extend(chunks) - elif connector == "GOOGLE_DRIVE_CONNECTOR": + elif connector == "GOOGLE_DRIVE_FILE": _, chunks = await connector_service.search_google_drive( user_query=query, search_space_id=search_space_id, @@ -572,7 +572,7 @@ def create_search_knowledge_base_tool( - CLICKUP_CONNECTOR: "ClickUp tasks and project data" (personal task management) - GOOGLE_CALENDAR_CONNECTOR: "Google Calendar events, meetings, and schedules" (personal calendar and time management) - GOOGLE_GMAIL_CONNECTOR: "Google Gmail emails and conversations" (personal emails and communications) - - GOOGLE_DRIVE_CONNECTOR: "Google Drive files and documents" (personal cloud storage and file management) + - GOOGLE_DRIVE_FILE: "Google Drive files and documents" (personal cloud storage and file management) - DISCORD_CONNECTOR: "Discord server conversations and shared content" (personal community communications) - AIRTABLE_CONNECTOR: "Airtable records, tables, and database content" (personal data management and organization) - TAVILY_API: "Tavily search API results" (personalized search results) diff --git a/surfsense_backend/app/connectors/google_drive/content_extractor.py b/surfsense_backend/app/connectors/google_drive/content_extractor.py index f8c5d39d5..1246d9e43 100644 --- a/surfsense_backend/app/connectors/google_drive/content_extractor.py +++ b/surfsense_backend/app/connectors/google_drive/content_extractor.py @@ -84,7 +84,7 @@ async def download_and_process_file( from app.db import DocumentType connector_info = { - "type": DocumentType.GOOGLE_DRIVE_CONNECTOR, + "type": DocumentType.GOOGLE_DRIVE_FILE, "metadata": { "google_drive_file_id": file_id, "google_drive_file_name": file_name, diff --git a/surfsense_backend/app/db.py b/surfsense_backend/app/db.py index a6bc3b938..c761561b5 100644 --- a/surfsense_backend/app/db.py +++ b/surfsense_backend/app/db.py @@ -46,7 +46,7 @@ class DocumentType(str, Enum): CLICKUP_CONNECTOR = "CLICKUP_CONNECTOR" GOOGLE_CALENDAR_CONNECTOR = "GOOGLE_CALENDAR_CONNECTOR" GOOGLE_GMAIL_CONNECTOR = "GOOGLE_GMAIL_CONNECTOR" - GOOGLE_DRIVE_CONNECTOR = "GOOGLE_DRIVE_CONNECTOR" + GOOGLE_DRIVE_FILE = "GOOGLE_DRIVE_FILE" AIRTABLE_CONNECTOR = "AIRTABLE_CONNECTOR" LUMA_CONNECTOR = "LUMA_CONNECTOR" ELASTICSEARCH_CONNECTOR = "ELASTICSEARCH_CONNECTOR" diff --git a/surfsense_backend/app/services/connector_service.py b/surfsense_backend/app/services/connector_service.py index b3d970dae..cf0a83dc8 100644 --- a/surfsense_backend/app/services/connector_service.py +++ b/surfsense_backend/app/services/connector_service.py @@ -1834,7 +1834,7 @@ class ConnectorService: drive_docs = await self._combined_rrf_search( query_text=user_query, search_space_id=search_space_id, - document_type="GOOGLE_DRIVE_CONNECTOR", + document_type="GOOGLE_DRIVE_FILE", top_k=top_k, start_date=start_date, end_date=end_date, @@ -1845,7 +1845,7 @@ class ConnectorService: return { "id": 33, "name": "Google Drive Files", - "type": "GOOGLE_DRIVE_CONNECTOR", + "type": "GOOGLE_DRIVE_FILE", "sources": [], }, [] @@ -1902,7 +1902,7 @@ class ConnectorService: result_object = { "id": 33, # Assign a unique ID for the Google Drive connector "name": "Google Drive Files", - "type": "GOOGLE_DRIVE_CONNECTOR", + "type": "GOOGLE_DRIVE_FILE", "sources": sources_list, } diff --git a/surfsense_backend/app/tasks/connector_indexers/google_drive_indexer.py b/surfsense_backend/app/tasks/connector_indexers/google_drive_indexer.py index cd862e372..5695c084d 100644 --- a/surfsense_backend/app/tasks/connector_indexers/google_drive_indexer.py +++ b/surfsense_backend/app/tasks/connector_indexers/google_drive_indexer.py @@ -396,7 +396,7 @@ async def _remove_document( ): """Remove a document that was deleted in Drive.""" unique_identifier_hash = generate_unique_identifier_hash( - DocumentType.GOOGLE_DRIVE_CONNECTOR, file_id, search_space_id + DocumentType.GOOGLE_DRIVE_FILE, file_id, search_space_id ) existing_document = await check_document_by_unique_identifier( diff --git a/surfsense_backend/app/tasks/document_processors/file_processors.py b/surfsense_backend/app/tasks/document_processors/file_processors.py index cda4ec88b..6a01db6a9 100644 --- a/surfsense_backend/app/tasks/document_processors/file_processors.py +++ b/surfsense_backend/app/tasks/document_processors/file_processors.py @@ -473,7 +473,7 @@ async def process_file_in_background( session: AsyncSession, task_logger: TaskLoggingService, log_entry: Log, - connector: dict | None = None, # Optional: {"type": "GOOGLE_DRIVE_CONNECTOR", "metadata": {...}} + connector: dict | None = None, # Optional: {"type": "GOOGLE_DRIVE_FILE", "metadata": {...}} ): try: # Check if the file is a markdown or text file diff --git a/surfsense_web/contracts/types/document.types.ts b/surfsense_web/contracts/types/document.types.ts index b2cdb79c3..94ff27940 100644 --- a/surfsense_web/contracts/types/document.types.ts +++ b/surfsense_web/contracts/types/document.types.ts @@ -15,7 +15,7 @@ export const documentTypeEnum = z.enum([ "CLICKUP_CONNECTOR", "GOOGLE_CALENDAR_CONNECTOR", "GOOGLE_GMAIL_CONNECTOR", - "GOOGLE_DRIVE_CONNECTOR", + "GOOGLE_DRIVE_FILE", "AIRTABLE_CONNECTOR", "LUMA_CONNECTOR", "ELASTICSEARCH_CONNECTOR",