Ajey95 commited on
Commit
830ce1c
·
1 Parent(s): 862d762

Fix: chat_history addition

Browse files
Files changed (3) hide show
  1. agents/agent_helpers.py +1 -1
  2. agents/router_agent.py +59 -33
  3. app.py +25 -27
agents/agent_helpers.py CHANGED
@@ -7,7 +7,7 @@ def format_history_for_prompt(chat_history: list = None) -> str:
7
 
8
  history_for_prompt = ""
9
  for turn in chat_history:
10
- # Ensure 'parts' is a list and not empty before accessing
11
  if turn.get('parts') and isinstance(turn.get('parts'), list):
12
  role = "User" if turn['role'] == 'user' else "AI"
13
  history_for_prompt += f"{role}: {turn['parts'][0]}\n"
 
7
 
8
  history_for_prompt = ""
9
  for turn in chat_history:
10
+ # Ensure 'parts' is a list and not empty before accessing
11
  if turn.get('parts') and isinstance(turn.get('parts'), list):
12
  role = "User" if turn['role'] == 'user' else "AI"
13
  history_for_prompt += f"{role}: {turn['parts'][0]}\n"
agents/router_agent.py CHANGED
@@ -294,46 +294,72 @@ class RouterAgent:
294
  self.quiz_agent = QuizAgent(gemini_model)
295
  self.viva_agent = VivaAgent(gemini_model)
296
  self.default_agent = self.academic_agent
297
-
298
  def route_query(self, query: str, file_context: str = "", viva_state: dict = None, chat_history: list = None):
 
 
 
299
  """
300
- Determines the user's intent and routes the query to the correct agent.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
301
 
302
- Args:
303
- query (str): The user's input query.
304
- file_context (str): Text content from any uploaded files.
305
- viva_state (dict): The current state of the viva session.
306
 
307
- Returns:
308
- dict: The response dictionary from the selected agent.
309
- """
310
- query_lower = query.lower()
311
 
312
- # --- Intent Detection Logic ---
313
 
314
- # 1. Viva Agent: High priority to catch session-based commands
315
- # If a viva session is active, or user wants to start/end one.
316
- if viva_state and viva_state.get('active'):
317
- # The VivaAgent itself handles all logic when a session is active
318
- return self.viva_agent.process_query(query, file_context, viva_state)
319
- if any(cmd in query_lower for cmd in ["viva", "interview"]):
320
- return self.viva_agent.process_query(query, file_context, viva_state)
321
 
322
- # 2. Mnemonic Agent
323
- if any(cmd in query_lower for cmd in ["mnemonic", "memory aid", "remember"]):
324
- return self.mnemonic_agent.process_query(query, file_context,chat_history)
325
 
326
- # 3. Quiz Agent
327
- if any(cmd in query_lower for cmd in ["quiz", "test me", "flashcard"]):
328
- return self.quiz_agent.process_query(query, file_context,chat_history)
329
 
330
- # 4. Drug Info Agent
331
- # Uses keywords and also checks for common drug endings like 'ol', 'in', 'am'
332
- if any(cmd in query_lower for cmd in ["drug", "medicine", "medication", "side effect", "dosage", "interaction"]):
333
- return self.drug_info_agent.process_query(query, file_context,chat_history)
334
- if re.search(r'\b(paracetamol|ibuprofen|metformin|aspirin|amoxicillin)\b', query_lower):
335
- return self.drug_info_agent.process_query(query, file_context)
336
 
337
- # 5. Default to Academic Agent
338
- # If no other intent is detected, it's likely a general academic question.
339
- return self.academic_agent.process_query(query, file_context,chat_history)
 
294
  self.quiz_agent = QuizAgent(gemini_model)
295
  self.viva_agent = VivaAgent(gemini_model)
296
  self.default_agent = self.academic_agent
297
+
298
  def route_query(self, query: str, file_context: str = "", viva_state: dict = None, chat_history: list = None):
299
+ """
300
+ Determines the user's intent and routes the query with all necessary
301
+ context to the correct specialist agent.
302
  """
303
+ query_lower = query.lower()
304
+
305
+ # --- Intent Detection Logic ---
306
+ if viva_state and viva_state.get('active'):
307
+ return self.viva_agent.process_query(query, file_context, viva_state)
308
+ if any(cmd in query_lower for cmd in ["viva", "interview", "start viva"]):
309
+ return self.viva_agent.process_query(query, file_context, viva_state)
310
+
311
+ if any(cmd in query_lower for cmd in ["mnemonic", "memory aid", "remember"]):
312
+ return self.mnemonic_agent.process_query(query, file_context, chat_history)
313
+
314
+ if any(cmd in query_lower for cmd in ["quiz", "test me", "flashcard"]):
315
+ return self.quiz_agent.process_query(query, file_context, chat_history)
316
+
317
+ if any(cmd in query_lower for cmd in ["drug", "medicine", "medication", "side effect", "dosage"]):
318
+ return self.drug_info_agent.process_query(query, file_context, chat_history)
319
+
320
+ # Default to Academic Agent for general queries, passing all context
321
+ return self.academic_agent.process_query(query, file_context, chat_history)
322
+
323
+
324
+ # def route_query(self, query: str, file_context: str = "", viva_state: dict = None, chat_history: list = None):
325
+ # """
326
+ # Determines the user's intent and routes the query to the correct agent.
327
 
328
+ # Args:
329
+ # query (str): The user's input query.
330
+ # file_context (str): Text content from any uploaded files.
331
+ # viva_state (dict): The current state of the viva session.
332
 
333
+ # Returns:
334
+ # dict: The response dictionary from the selected agent.
335
+ # """
336
+ # query_lower = query.lower()
337
 
338
+ # # --- Intent Detection Logic ---
339
 
340
+ # # 1. Viva Agent: High priority to catch session-based commands
341
+ # # If a viva session is active, or user wants to start/end one.
342
+ # if viva_state and viva_state.get('active'):
343
+ # # The VivaAgent itself handles all logic when a session is active
344
+ # return self.viva_agent.process_query(query, file_context, viva_state)
345
+ # if any(cmd in query_lower for cmd in ["viva", "interview"]):
346
+ # return self.viva_agent.process_query(query, file_context, viva_state)
347
 
348
+ # # 2. Mnemonic Agent
349
+ # if any(cmd in query_lower for cmd in ["mnemonic", "memory aid", "remember"]):
350
+ # return self.mnemonic_agent.process_query(query, file_context,chat_history)
351
 
352
+ # # 3. Quiz Agent
353
+ # if any(cmd in query_lower for cmd in ["quiz", "test me", "flashcard"]):
354
+ # return self.quiz_agent.process_query(query, file_context,chat_history)
355
 
356
+ # # 4. Drug Info Agent
357
+ # # Uses keywords and also checks for common drug endings like 'ol', 'in', 'am'
358
+ # if any(cmd in query_lower for cmd in ["drug", "medicine", "medication", "side effect", "dosage", "interaction"]):
359
+ # return self.drug_info_agent.process_query(query, file_context,chat_history)
360
+ # if re.search(r'\b(paracetamol|ibuprofen|metformin|aspirin|amoxicillin)\b', query_lower):
361
+ # return self.drug_info_agent.process_query(query, file_context)
362
 
363
+ # # 5. Default to Academic Agent
364
+ # # If no other intent is detected, it's likely a general academic question.
365
+ # return self.academic_agent.process_query(query, file_context,chat_history)
app.py CHANGED
@@ -443,36 +443,34 @@ class MyPharmaAI:
443
  self.quotes = load_quotes()
444
  self.file_processor = FileProcessor()
445
 
446
- def process_query(self, query, user_name="Student", viva_state=None, uploaded_files=None,chat_history=None):
447
- """Routes a user's query to the appropriate agent, handling context."""
448
- try:
449
- file_context = ""
450
- if uploaded_files:
451
- file_context = self.get_file_context(uploaded_files)
452
-
453
- # --- ADD THIS LINE FOR DEBUGGING ---
454
- print(f"--- DEBUG: Here is the text extracted from the file ---\n{file_context[:1000]}\n--- END DEBUG ---")
455
-
456
- # Pass all context to the router
457
- response_data = self.router.route_query(query, file_context, viva_state, chat_history)
458
-
459
- return {
460
- 'success': True,
461
- **response_data # Unpack the dictionary from the agent
462
- }
463
- except Exception as e:
464
- print(f"Error in MyPharmaAI.process_query: {e}")
465
- return {
466
- 'success': False,
467
- 'message': f"माफ करें (Sorry), a critical error occurred: {str(e)}",
468
- 'agent_used': 'error'
469
- }
470
 
471
  def get_file_context(self, uploaded_files_session):
472
  """Extracts text from the most recent files to use as context."""
473
  context = ""
474
- # Limit context to the last 3 uploaded files to manage token size
475
- for file_info in uploaded_files_session[-3:]:
476
  file_path = file_info.get('path')
477
  if file_path and os.path.exists(file_path):
478
  try:
@@ -523,7 +521,7 @@ def chat():
523
  uploaded_files = session.get('uploaded_files', None)
524
 
525
  # Process the query through the main orchestrator
526
- result = pharma_ai.process_query(query, viva_state=viva_state, uploaded_files=uploaded_files,chat_history=chat_history)
527
  # If the query was successful, update the history
528
  if result.get('success'):
529
  # Add the user's query and the AI's message to the history
 
443
  self.quotes = load_quotes()
444
  self.file_processor = FileProcessor()
445
 
446
+ def process_query(self, query, user_name="Student", viva_state=None, uploaded_files=None, chat_history=None):
447
+ """Routes a user's query to the appropriate agent, handling context."""
448
+ try:
449
+ # This block correctly gets the file content from the session data
450
+ file_context = ""
451
+ if uploaded_files:
452
+ file_context = self.get_file_context(uploaded_files)
453
+
454
+ # This passes the file content and chat history to the router
455
+ response_data = self.router.route_query(query, file_context, viva_state, chat_history)
456
+
457
+ return {
458
+ 'success': True,
459
+ **response_data
460
+ }
461
+ except Exception as e:
462
+ print(f"Error in MyPharmaAI.process_query: {e}")
463
+ return {
464
+ 'success': False,
465
+ 'message': f"Sorry, a critical error occurred: {str(e)}",
466
+ 'agent_used': 'error'
467
+ }
468
+
 
469
 
470
  def get_file_context(self, uploaded_files_session):
471
  """Extracts text from the most recent files to use as context."""
472
  context = ""
473
+ for file_info in uploaded_files_session[-3:]: # Limit to last 3 files
 
474
  file_path = file_info.get('path')
475
  if file_path and os.path.exists(file_path):
476
  try:
 
521
  uploaded_files = session.get('uploaded_files', None)
522
 
523
  # Process the query through the main orchestrator
524
+ result = pharma_ai.process_query(query, viva_state=viva_state, uploaded_files=uploaded_files,chathistory=chat_history)
525
  # If the query was successful, update the history
526
  if result.get('success'):
527
  # Add the user's query and the AI's message to the history