Girish Jeswani commited on
Commit
ddd6f63
·
1 Parent(s): 625853d

bug fixes

Browse files
multi_llm_chatbot_backend/app/api/routes/debug.py CHANGED
@@ -1,10 +1,11 @@
1
  from fastapi import APIRouter, Request, Query
2
  from app.core.session_manager import get_session_manager
3
  from app.core.rag_manager import get_rag_manager
4
- from app.api.utils import get_or_create_session_for_request
5
  from app.core.bootstrap import chat_orchestrator
6
  import logging
7
 
 
 
8
  logger = logging.getLogger(__name__)
9
 
10
  router = APIRouter()
 
1
  from fastapi import APIRouter, Request, Query
2
  from app.core.session_manager import get_session_manager
3
  from app.core.rag_manager import get_rag_manager
 
4
  from app.core.bootstrap import chat_orchestrator
5
  import logging
6
 
7
+ from app.api.old_routes import get_or_create_session_for_request
8
+
9
  logger = logging.getLogger(__name__)
10
 
11
  router = APIRouter()
multi_llm_chatbot_backend/app/api/routes/documents.py CHANGED
@@ -3,12 +3,11 @@ from fastapi import Query
3
  from app.utils.document_extractor import extract_text_from_file
4
  from app.core.session_manager import get_session_manager
5
  from app.core.rag_manager import get_rag_manager
6
- from app.api.utils import get_or_create_session_for_request
7
  from fastapi.responses import StreamingResponse
8
  from app.utils.chat_summary import generate_summary_from_messages, parse_summary_to_blocks, format_summary_for_text_export
9
  from app.utils.file_export import prepare_export_response, generate_pdf_file_from_blocks
10
  from app.core.session_manager import get_session_manager
11
- from app.api.utils import get_or_create_session_for_request
12
  from app.core.bootstrap import chat_orchestrator
13
  from app.core.auth import get_current_active_user
14
  from app.core.database import get_database
@@ -167,7 +166,7 @@ async def upload_document(
167
  logger.info(f"Uploading document to specific chat session: {session_id}")
168
  else:
169
  # For new/temporary chats, use regular session management
170
- session_id = get_or_create_session_for_request(request)
171
  logger.info(f"Uploading document to new session: {session_id}")
172
 
173
  session = session_manager.get_session(session_id)
@@ -235,7 +234,7 @@ async def upload_document(
235
  @router.post("/search-documents")
236
  async def search_documents(request: Request, query: str = Body(..., embed=True), persona: str = Body("", embed=True)):
237
  try:
238
- session_id = get_or_create_session_for_request(request)
239
  rag_manager = get_rag_manager()
240
 
241
  persona_contexts = {
@@ -267,7 +266,7 @@ async def search_documents(request: Request, query: str = Body(..., embed=True),
267
  @router.get("/document-stats")
268
  async def get_document_stats(request: Request):
269
  try:
270
- session_id = get_or_create_session_for_request(request)
271
  rag_manager = get_rag_manager()
272
  return rag_manager.get_document_stats(session_id)
273
  except Exception as e:
@@ -278,7 +277,7 @@ async def get_document_stats(request: Request):
278
  @router.get("/uploaded-files")
279
  async def get_uploaded_filenames(request: Request):
280
  try:
281
- session_id = get_or_create_session_for_request(request)
282
  session = session_manager.get_session(session_id)
283
  return {"files": session.uploaded_files}
284
  except Exception as e:
@@ -289,7 +288,7 @@ async def get_uploaded_filenames(request: Request):
289
  @router.get("/document-insights/{filename}")
290
  async def get_document_insights(filename: str, request: Request):
291
  try:
292
- session_id = get_or_create_session_for_request(request)
293
  rag_manager = get_rag_manager()
294
  stats = rag_manager.get_document_stats(session_id)
295
  document_info = next((doc for doc in stats.get("documents", []) if doc["filename"] == filename), None)
@@ -370,7 +369,7 @@ async def export_chat(
370
  messages = convert_messages_for_export(raw_messages)
371
  else:
372
  # Export current in-memory session (existing behavior)
373
- session_id = get_or_create_session_for_request(request)
374
  session = session_manager.get_session(session_id)
375
  # In-memory messages might already be in the right format, but convert to be safe
376
  messages = convert_messages_for_export(session.messages)
@@ -450,7 +449,7 @@ async def chat_summary(
450
  messages = convert_messages_for_export(raw_messages)
451
  else:
452
  # Summarize current in-memory session (existing behavior)
453
- session_id = get_or_create_session_for_request(request)
454
  session = session_manager.get_session(session_id)
455
  # Convert in-memory messages
456
  messages = convert_messages_for_export(session.messages)
@@ -521,5 +520,4 @@ async def chat_summary(
521
  raise HTTPException(
522
  status_code=500,
523
  detail=f"Summary generation failed: {str(e)}"
524
- )
525
-
 
3
  from app.utils.document_extractor import extract_text_from_file
4
  from app.core.session_manager import get_session_manager
5
  from app.core.rag_manager import get_rag_manager
6
+ from app.api.utils import get_or_create_session_for_request_async
7
  from fastapi.responses import StreamingResponse
8
  from app.utils.chat_summary import generate_summary_from_messages, parse_summary_to_blocks, format_summary_for_text_export
9
  from app.utils.file_export import prepare_export_response, generate_pdf_file_from_blocks
10
  from app.core.session_manager import get_session_manager
 
11
  from app.core.bootstrap import chat_orchestrator
12
  from app.core.auth import get_current_active_user
13
  from app.core.database import get_database
 
166
  logger.info(f"Uploading document to specific chat session: {session_id}")
167
  else:
168
  # For new/temporary chats, use regular session management
169
+ session_id = await get_or_create_session_for_request_async(request) # FIXED: Added await
170
  logger.info(f"Uploading document to new session: {session_id}")
171
 
172
  session = session_manager.get_session(session_id)
 
234
  @router.post("/search-documents")
235
  async def search_documents(request: Request, query: str = Body(..., embed=True), persona: str = Body("", embed=True)):
236
  try:
237
+ session_id = await get_or_create_session_for_request_async(request) # FIXED: Added await
238
  rag_manager = get_rag_manager()
239
 
240
  persona_contexts = {
 
266
  @router.get("/document-stats")
267
  async def get_document_stats(request: Request):
268
  try:
269
+ session_id = await get_or_create_session_for_request_async(request) # FIXED: Added await
270
  rag_manager = get_rag_manager()
271
  return rag_manager.get_document_stats(session_id)
272
  except Exception as e:
 
277
  @router.get("/uploaded-files")
278
  async def get_uploaded_filenames(request: Request):
279
  try:
280
+ session_id = await get_or_create_session_for_request_async(request) # FIXED: Added await
281
  session = session_manager.get_session(session_id)
282
  return {"files": session.uploaded_files}
283
  except Exception as e:
 
288
  @router.get("/document-insights/{filename}")
289
  async def get_document_insights(filename: str, request: Request):
290
  try:
291
+ session_id = await get_or_create_session_for_request_async(request) # FIXED: Added await
292
  rag_manager = get_rag_manager()
293
  stats = rag_manager.get_document_stats(session_id)
294
  document_info = next((doc for doc in stats.get("documents", []) if doc["filename"] == filename), None)
 
369
  messages = convert_messages_for_export(raw_messages)
370
  else:
371
  # Export current in-memory session (existing behavior)
372
+ session_id = await get_or_create_session_for_request_async(request) # FIXED: Added await
373
  session = session_manager.get_session(session_id)
374
  # In-memory messages might already be in the right format, but convert to be safe
375
  messages = convert_messages_for_export(session.messages)
 
449
  messages = convert_messages_for_export(raw_messages)
450
  else:
451
  # Summarize current in-memory session (existing behavior)
452
+ session_id = await get_or_create_session_for_request_async(request) # FIXED: Added await
453
  session = session_manager.get_session(session_id)
454
  # Convert in-memory messages
455
  messages = convert_messages_for_export(session.messages)
 
520
  raise HTTPException(
521
  status_code=500,
522
  detail=f"Summary generation failed: {str(e)}"
523
+ )
 
multi_llm_chatbot_backend/app/api/utils.py CHANGED
@@ -82,48 +82,6 @@ async def load_chat_session_into_context(chat_session_id: str, user_id: str) ->
82
  logger.error(f"Error loading chat session into context: {e}")
83
  return None
84
 
85
- def get_or_create_session_for_request(
86
- request: Request,
87
- session_id_override: Optional[str] = None,
88
- chat_session_id: Optional[str] = None,
89
- user_id: Optional[str] = None
90
- ) -> str:
91
- """
92
- Enhanced session management that properly handles chat switching
93
-
94
- Args:
95
- request: FastAPI request object
96
- session_id_override: Explicit session ID to use
97
- chat_session_id: MongoDB chat session ID (for existing chats)
98
- user_id: User ID (for loading existing chats)
99
- """
100
-
101
- # Case 1: Loading an existing chat session
102
- if chat_session_id and user_id:
103
- try:
104
- # We need to handle this in the calling function since this isn't async
105
- # Return a special identifier that the calling function can handle
106
- return f"load_chat_{chat_session_id}"
107
-
108
- except Exception as e:
109
- logger.error(f"Error handling chat session load: {e}")
110
- # Fall through to create new session
111
-
112
- # Case 2: Explicit session ID provided
113
- if session_id_override:
114
- return session_id_override
115
-
116
- # Case 3: Check for session header
117
- session_header = request.headers.get("X-Session-ID")
118
- if session_header:
119
- return session_header
120
-
121
- # Case 4: Create a truly new session (don't fall back to IP)
122
- # This ensures each new chat gets its own context
123
- new_session_id = session_manager.create_session()
124
- logger.info(f"Created new session: {new_session_id}")
125
- return new_session_id
126
-
127
  async def get_or_create_session_for_request_async(
128
  request: Request,
129
  session_id_override: Optional[str] = None,
 
82
  logger.error(f"Error loading chat session into context: {e}")
83
  return None
84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  async def get_or_create_session_for_request_async(
86
  request: Request,
87
  session_id_override: Optional[str] = None,
phd-advisor-frontend/src/components/EnhancedChatInput.js CHANGED
@@ -100,8 +100,8 @@ const EnhancedChatInput = ({
100
  {showUpload && (
101
  <div className="floating-upload-section">
102
  <FileUpload
103
- onFileUploaded={onFileUploaded}
104
- isUploading={isLoading}
105
  currentChatSessionId={currentChatSessionId}
106
  authToken={authToken}
107
  onUploadStart={handleUploadStart}
 
100
  {showUpload && (
101
  <div className="floating-upload-section">
102
  <FileUpload
103
+ onFileUploaded={handleFileUploaded}
104
+ isUploading={isUploading}
105
  currentChatSessionId={currentChatSessionId}
106
  authToken={authToken}
107
  onUploadStart={handleUploadStart}