From 0a568244fd0ea91c9d71c960311b7d5d3ca2f27d Mon Sep 17 00:00:00 2001 From: sabaimran Date: Wed, 18 Sep 2024 20:34:04 -0700 Subject: [PATCH] Revert "Convert conversationId int to string before making api request to bulk update file filters" This reverts commit c9665fb20b059664ba5456d6334ec34fb581d644. Revert "Fix handling for new conversation in agents page" This reverts commit 3466f0499272874c36d3671521577898c9e76347. Revert "Add a unique_id field for identifiying conversations (#914)" This reverts commit ece2ec2d90df29df23fb18d19cca5ea09f625bd7. --- src/interface/web/app/agents/page.tsx | 12 +++--- src/interface/web/app/chat/page.tsx | 38 +------------------ src/interface/web/app/common/chatFunctions.ts | 19 +++------- .../sidePanel/chatHistorySidePanel.tsx | 33 +++++----------- .../components/suggestions/suggestionsData.ts | 2 +- src/interface/web/app/page.tsx | 9 ++--- src/khoj/database/adapters/__init__.py | 4 -- .../0063_conversation_add_unique_id_field.py | 19 ---------- .../migrations/0064_populate_unique_id.py | 20 ---------- ...0065_add_unique_constraint_to_unique_id.py | 17 --------- src/khoj/database/models/__init__.py | 1 - src/khoj/routers/api_chat.py | 33 +--------------- 12 files changed, 29 insertions(+), 178 deletions(-) delete mode 100644 src/khoj/database/migrations/0063_conversation_add_unique_id_field.py delete mode 100644 src/khoj/database/migrations/0064_populate_unique_id.py delete mode 100644 src/khoj/database/migrations/0065_add_unique_constraint_to_unique_id.py diff --git a/src/interface/web/app/agents/page.tsx b/src/interface/web/app/agents/page.tsx index c06ac129c..e0449c093 100644 --- a/src/interface/web/app/agents/page.tsx +++ b/src/interface/web/app/agents/page.tsx @@ -38,7 +38,6 @@ import { getIconFromIconName } from "../common/iconUtils"; import { convertColorToTextClass } from "../common/colorUtils"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { useIsMobileWidth } from "../common/utils"; -import { createNewConversation } from "../common/chatFunctions"; export interface AgentData { slug: string; @@ -56,10 +55,13 @@ async function openChat(slug: string, userData: UserProfile | null) { return; } - try { - const response = await createNewConversation(slug); - window.location.href = `/chat?v=${response.conversationUniqueId}`; - } catch (error) { + const response = await fetch(`/api/chat/sessions?agent_slug=${slug}`, { method: "POST" }); + const data = await response.json(); + if (response.status == 200) { + window.location.href = `/chat?conversationId=${data.conversation_id}`; + } else if (response.status == 403 || response.status == 401) { + window.location.href = unauthenticatedRedirectUrl; + } else { alert("Failed to start chat session"); } } diff --git a/src/interface/web/app/chat/page.tsx b/src/interface/web/app/chat/page.tsx index 49e0df4a3..8a22dc5a1 100644 --- a/src/interface/web/app/chat/page.tsx +++ b/src/interface/web/app/chat/page.tsx @@ -32,8 +32,7 @@ interface ChatBodyDataProps { function ChatBodyData(props: ChatBodyDataProps) { const searchParams = useSearchParams(); - const conversationUniqueId = searchParams.get("v"); - const [conversationId, setConversationId] = useState(""); + const conversationId = searchParams.get("conversationId"); const [message, setMessage] = useState(""); const [image, setImage] = useState(null); const [processingMessage, setProcessingMessage] = useState(false); @@ -61,11 +60,6 @@ function ChatBodyData(props: ChatBodyDataProps) { setProcessingMessage(true); setQueryToProcess(storedMessage); } - - const conversationId = localStorage.getItem("conversationId"); - if (conversationId) { - setConversationId(conversationId); - } }, [setQueryToProcess]); useEffect(() => { @@ -75,30 +69,6 @@ function ChatBodyData(props: ChatBodyDataProps) { } }, [message, setQueryToProcess]); - useEffect(() => { - if (!conversationUniqueId) { - return; - } - - fetch( - `/api/chat/metadata?conversation_unique_id=${encodeURIComponent(conversationUniqueId)}`, - ) - .then((response) => { - if (!response.ok) { - throw new Error(response.statusText); - } - return response.json(); - }) - .then((data) => { - setConversationId(data.conversationId); - }) - .catch((err) => { - console.error(err); - setConversationId(null); - return; - }); - }); - useEffect(() => { if (conversationId) { onConversationIdChange?.(conversationId); @@ -117,15 +87,11 @@ function ChatBodyData(props: ChatBodyDataProps) { } }, [props.streamedMessages]); - if (!conversationUniqueId || conversationId === null) { + if (!conversationId) { window.location.href = "/"; return; } - if (!conversationId) { - return ; - } - return ( <>
diff --git a/src/interface/web/app/common/chatFunctions.ts b/src/interface/web/app/common/chatFunctions.ts index 0e4db2c30..8a6f5d1e5 100644 --- a/src/interface/web/app/common/chatFunctions.ts +++ b/src/interface/web/app/common/chatFunctions.ts @@ -163,7 +163,7 @@ export function modifyFileFilterForConversation( const method = mode === "add" ? "POST" : "DELETE"; const body = { - conversation_id: String(conversationId), + conversation_id: conversationId, filenames: filenames, }; const addUrl = `/api/chat/conversation/file-filters/bulk`; @@ -177,6 +177,7 @@ export function modifyFileFilterForConversation( }) .then((response) => response.json()) .then((data) => { + console.log("ADDEDFILES DATA: ", data); setAddedFiles(data); }) .catch((err) => { @@ -185,11 +186,6 @@ export function modifyFileFilterForConversation( }); } -interface NewConversationMetadata { - conversationId: string; - conversationUniqueId: string; -} - export async function createNewConversation(slug: string) { try { const response = await fetch(`/api/chat/sessions?client=web&agent_slug=${slug}`, { @@ -198,14 +194,9 @@ export async function createNewConversation(slug: string) { if (!response.ok) throw new Error(`Failed to fetch chat sessions with status: ${response.status}`); const data = await response.json(); - const uniqueId = data.unique_id; - const conversationId = data.conversation_id; - if (!uniqueId) throw new Error("Unique ID not found in response"); - if (!conversationId) throw new Error("Conversation ID not found in response"); - return { - conversationId: conversationId, - conversationUniqueId: uniqueId, - } as NewConversationMetadata; + const conversationID = data.conversation_id; + if (!conversationID) throw new Error("Conversation ID not found in response"); + return conversationID; } catch (error) { console.error("Error creating new conversation:", error); throw error; diff --git a/src/interface/web/app/components/sidePanel/chatHistorySidePanel.tsx b/src/interface/web/app/components/sidePanel/chatHistorySidePanel.tsx index ac6bda853..a0bee3569 100644 --- a/src/interface/web/app/components/sidePanel/chatHistorySidePanel.tsx +++ b/src/interface/web/app/components/sidePanel/chatHistorySidePanel.tsx @@ -67,9 +67,7 @@ interface ChatHistory { compressed: boolean; created: string; updated: string; - unique_id: string; showSidePanel: (isEnabled: boolean) => void; - selectedConversationId: string | null; } import { @@ -400,7 +398,6 @@ interface SessionsAndFilesProps { conversationId: string | null; uploadedFiles: string[]; isMobileWidth: boolean; - selectedConversationId: string | null; } function SessionsAndFiles(props: SessionsAndFilesProps) { @@ -438,10 +435,6 @@ function SessionsAndFiles(props: SessionsAndFilesProps) { agent_avatar={chatHistory.agent_avatar} agent_name={chatHistory.agent_name} showSidePanel={props.setEnabled} - unique_id={chatHistory.unique_id} - selectedConversationId={ - props.selectedConversationId - } /> ), )} @@ -453,7 +446,6 @@ function SessionsAndFiles(props: SessionsAndFilesProps) { )}
@@ -648,18 +640,20 @@ function ChatSessionActionMenu(props: ChatSessionActionMenuProps) { function ChatSession(props: ChatHistory) { const [isHovered, setIsHovered] = useState(false); const [title, setTitle] = useState(props.slug || "New Conversation 🌱"); - var currConversationId = - props.conversation_id && - props.selectedConversationId && - parseInt(props.conversation_id) === parseInt(props.selectedConversationId); + var currConversationId = parseInt( + new URLSearchParams(window.location.search).get("conversationId") || "-1", + ); return (
setIsHovered(true)} onMouseLeave={() => setIsHovered(false)} key={props.conversation_id} - className={`${styles.session} ${props.compressed ? styles.compressed : "!max-w-full"} ${isHovered ? `${styles.sessionHover}` : ""} ${currConversationId ? "dark:bg-neutral-800 bg-white" : ""}`} + className={`${styles.session} ${props.compressed ? styles.compressed : "!max-w-full"} ${isHovered ? `${styles.sessionHover}` : ""} ${currConversationId === parseInt(props.conversation_id) && currConversationId != -1 ? "dark:bg-neutral-800 bg-white" : ""}`} > - props.showSidePanel(false)}> + props.showSidePanel(false)} + >

{title}

@@ -670,14 +664,9 @@ function ChatSession(props: ChatHistory) { interface ChatSessionsModalProps { data: GroupedChatHistory | null; showSidePanel: (isEnabled: boolean) => void; - selectedConversationId: string | null; } -function ChatSessionsModal({ - data, - showSidePanel, - selectedConversationId, -}: ChatSessionsModalProps) { +function ChatSessionsModal({ data, showSidePanel }: ChatSessionsModalProps) { return ( @@ -709,8 +698,6 @@ function ChatSessionsModal({ agent_avatar={chatHistory.agent_avatar} agent_name={chatHistory.agent_name} showSidePanel={showSidePanel} - unique_id={chatHistory.unique_id} - selectedConversationId={selectedConversationId} /> ))}
@@ -832,7 +819,6 @@ export default function SidePanel(props: SidePanelProps) { userProfile={authenticatedData} conversationId={props.conversationId} isMobileWidth={props.isMobileWidth} - selectedConversationId={props.conversationId} /> ) : ( @@ -901,7 +887,6 @@ export default function SidePanel(props: SidePanelProps) { userProfile={authenticatedData} conversationId={props.conversationId} isMobileWidth={props.isMobileWidth} - selectedConversationId={props.conversationId} /> )} diff --git a/src/interface/web/app/components/suggestions/suggestionsData.ts b/src/interface/web/app/components/suggestions/suggestionsData.ts index 709d18c6f..47ba44dea 100644 --- a/src/interface/web/app/components/suggestions/suggestionsData.ts +++ b/src/interface/web/app/components/suggestions/suggestionsData.ts @@ -408,7 +408,7 @@ export const suggestionsData: Suggestion[] = [ link: "", }, { - type: SuggestionType.Interviewing, + type: SuggestionType.Code, color: suggestionToColorMap[SuggestionType.Interviewing] || DEFAULT_COLOR, description: "Provide tips for writing an effective resume.", link: "", diff --git a/src/interface/web/app/page.tsx b/src/interface/web/app/page.tsx index e6627c285..fdb686b45 100644 --- a/src/interface/web/app/page.tsx +++ b/src/interface/web/app/page.tsx @@ -147,13 +147,10 @@ function ChatBodyData(props: ChatBodyDataProps) { if (message && !processingMessage) { setProcessingMessage(true); try { - const newConversationMetadata = await createNewConversation( - selectedAgent || "khoj", - ); - onConversationIdChange?.(newConversationMetadata.conversationId); - window.location.href = `/chat?v=${newConversationMetadata.conversationUniqueId}`; + const newConversationId = await createNewConversation(selectedAgent || "khoj"); + onConversationIdChange?.(newConversationId); + window.location.href = `/chat?conversationId=${newConversationId}`; localStorage.setItem("message", message); - localStorage.setItem("conversationId", newConversationMetadata.conversationId); if (image) { localStorage.setItem("image", image); } diff --git a/src/khoj/database/adapters/__init__.py b/src/khoj/database/adapters/__init__.py index 4e4825a30..4ca3fe9ce 100644 --- a/src/khoj/database/adapters/__init__.py +++ b/src/khoj/database/adapters/__init__.py @@ -679,10 +679,6 @@ def get_conversation_by_user( return conversation - @staticmethod - def get_conversation_by_unique_id(user: KhojUser, unique_id: str): - return Conversation.objects.filter(unique_id=unique_id, user=user).first() - @staticmethod def get_conversation_sessions(user: KhojUser, client_application: ClientApplication = None): return ( diff --git a/src/khoj/database/migrations/0063_conversation_add_unique_id_field.py b/src/khoj/database/migrations/0063_conversation_add_unique_id_field.py deleted file mode 100644 index b9ae66a3f..000000000 --- a/src/khoj/database/migrations/0063_conversation_add_unique_id_field.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 5.0.8 on 2024-09-16 04:12 - -import uuid - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("database", "0062_merge_20240913_0222"), - ] - - operations = [ - migrations.AddField( - model_name="conversation", - name="unique_id", - field=models.UUIDField(default=None, editable=False, null=True), - ), - ] diff --git a/src/khoj/database/migrations/0064_populate_unique_id.py b/src/khoj/database/migrations/0064_populate_unique_id.py deleted file mode 100644 index 962b04449..000000000 --- a/src/khoj/database/migrations/0064_populate_unique_id.py +++ /dev/null @@ -1,20 +0,0 @@ -import uuid - -from django.db import migrations - - -def populate_unique_id(apps, schema_editor): - Conversation = apps.get_model("database", "Conversation") - for conversation in Conversation.objects.all(): - conversation.unique_id = uuid.uuid4() - conversation.save() - - -class Migration(migrations.Migration): - dependencies = [ - ("database", "0063_conversation_add_unique_id_field"), - ] - - operations = [ - migrations.RunPython(populate_unique_id), - ] diff --git a/src/khoj/database/migrations/0065_add_unique_constraint_to_unique_id.py b/src/khoj/database/migrations/0065_add_unique_constraint_to_unique_id.py deleted file mode 100644 index e4be70aa5..000000000 --- a/src/khoj/database/migrations/0065_add_unique_constraint_to_unique_id.py +++ /dev/null @@ -1,17 +0,0 @@ -import uuid - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("database", "0064_populate_unique_id"), - ] - - operations = [ - migrations.AlterField( - model_name="conversation", - name="unique_id", - field=models.UUIDField(default=uuid.uuid4, editable=False, unique=True), - ), - ] diff --git a/src/khoj/database/models/__init__.py b/src/khoj/database/models/__init__.py index 498326ef2..4029cf3c9 100644 --- a/src/khoj/database/models/__init__.py +++ b/src/khoj/database/models/__init__.py @@ -350,7 +350,6 @@ class Conversation(BaseModel): title = models.CharField(max_length=200, default=None, null=True, blank=True) agent = models.ForeignKey(Agent, on_delete=models.SET_NULL, default=None, null=True, blank=True) file_filters = models.JSONField(default=list) - unique_id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True) class PublicConversation(BaseModel): diff --git a/src/khoj/routers/api_chat.py b/src/khoj/routers/api_chat.py index f967f9827..181593e82 100644 --- a/src/khoj/routers/api_chat.py +++ b/src/khoj/routers/api_chat.py @@ -224,7 +224,6 @@ def chat_history( "conversation_id": conversation.id, "slug": conversation.title if conversation.title else conversation.slug, "agent": agent_metadata, - "unique_id": conversation.unique_id, } ) @@ -246,33 +245,6 @@ def chat_history( return {"status": "ok", "response": meta_log} -@api_chat.get("/metadata") -def get_chat_metadata( - request: Request, - common: CommonQueryParams, - conversation_unique_id: str, -): - user = request.user.object - - # Load Conversation Metadata - conversation = ConversationAdapters.get_conversation_by_unique_id(user, conversation_unique_id) - - if conversation is None: - return Response( - content=json.dumps({"status": "error", "message": f"Conversation: {conversation_unique_id} not found"}), - status_code=404, - ) - - update_telemetry_state( - request=request, - telemetry_type="api", - api="chat_metadata", - **common.__dict__, - ) - - return {"status": "ok", "conversationId": conversation.id} - - @api_chat.get("/share/history") def get_shared_chat( request: Request, @@ -446,7 +418,7 @@ def chat_sessions( conversations = conversations[:8] sessions = conversations.values_list( - "id", "slug", "title", "agent__slug", "agent__name", "agent__avatar", "created_at", "updated_at", "unique_id" + "id", "slug", "title", "agent__slug", "agent__name", "agent__avatar", "created_at", "updated_at" ) session_values = [ @@ -457,7 +429,6 @@ def chat_sessions( "agent_avatar": session[5], "created": session[6].strftime("%Y-%m-%d %H:%M:%S"), "updated": session[7].strftime("%Y-%m-%d %H:%M:%S"), - "unique_id": str(session[8]), } for session in sessions ] @@ -484,7 +455,7 @@ async def create_chat_session( # Create new Conversation Session conversation = await ConversationAdapters.acreate_conversation_session(user, request.user.client_app, agent_slug) - response = {"conversation_id": conversation.id, "unique_id": str(conversation.unique_id)} + response = {"conversation_id": conversation.id} conversation_metadata = { "agent": agent_slug,