Update main/chatbot.py
Browse files- main/chatbot.py +53 -7
main/chatbot.py
CHANGED
@@ -366,6 +366,38 @@ Nội dung: {content}
|
|
366 |
"""Answer a legal question using RAG with enhanced negative response handling and question refinement"""
|
367 |
print(f"Processing question: {query}")
|
368 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
369 |
# Step 1: Refine the question if enabled
|
370 |
original_query = query
|
371 |
refinement_result = None
|
@@ -405,7 +437,9 @@ Nội dung: {content}
|
|
405 |
'search_results_html': self.google_search.format_search_results_for_display(search_results),
|
406 |
'original_question': original_query,
|
407 |
'refined_question': query,
|
408 |
-
'question_refinement': refinement_result
|
|
|
|
|
409 |
}
|
410 |
else:
|
411 |
return {
|
@@ -417,7 +451,9 @@ Nội dung: {content}
|
|
417 |
'search_results_html': "",
|
418 |
'original_question': original_query,
|
419 |
'refined_question': query,
|
420 |
-
'question_refinement': refinement_result
|
|
|
|
|
421 |
}
|
422 |
elif not retrieved_docs:
|
423 |
return {
|
@@ -429,7 +465,9 @@ Nội dung: {content}
|
|
429 |
'search_results_html': "",
|
430 |
'original_question': original_query,
|
431 |
'refined_question': query,
|
432 |
-
'question_refinement': refinement_result
|
|
|
|
|
433 |
}
|
434 |
|
435 |
# Format context
|
@@ -466,7 +504,9 @@ Nội dung: {content}
|
|
466 |
'search_triggered': True,
|
467 |
'original_question': original_query,
|
468 |
'refined_question': query,
|
469 |
-
'question_refinement': refinement_result
|
|
|
|
|
470 |
}
|
471 |
else:
|
472 |
# Google search found nothing useful
|
@@ -480,7 +520,9 @@ Nội dung: {content}
|
|
480 |
'search_triggered': True,
|
481 |
'original_question': original_query,
|
482 |
'refined_question': query,
|
483 |
-
'question_refinement': refinement_result
|
|
|
|
|
484 |
}
|
485 |
else:
|
486 |
# Google search disabled
|
@@ -493,7 +535,9 @@ Nội dung: {content}
|
|
493 |
'search_results_html': "",
|
494 |
'original_question': original_query,
|
495 |
'refined_question': query,
|
496 |
-
'question_refinement': refinement_result
|
|
|
|
|
497 |
}
|
498 |
|
499 |
# Return successful result
|
@@ -506,7 +550,9 @@ Nội dung: {content}
|
|
506 |
'search_results_html': "",
|
507 |
'original_question': original_query,
|
508 |
'refined_question': query,
|
509 |
-
'question_refinement': refinement_result
|
|
|
|
|
510 |
}
|
511 |
|
512 |
def get_system_status(self) -> Dict[str, Any]:
|
|
|
366 |
"""Answer a legal question using RAG with enhanced negative response handling and question refinement"""
|
367 |
print(f"Processing question: {query}")
|
368 |
|
369 |
+
# Initialize legal_check variable
|
370 |
+
legal_check = None
|
371 |
+
|
372 |
+
# Step 0: Legal domain filtering (if enabled)
|
373 |
+
if Config.ENABLE_LEGAL_DOMAIN_FILTER:
|
374 |
+
print("🔍 Checking if question is legal-related...")
|
375 |
+
legal_check = self.question_refiner.is_legal_question(
|
376 |
+
query,
|
377 |
+
use_llm=Config.USE_LLM_FOR_LEGAL_DETECTION
|
378 |
+
)
|
379 |
+
|
380 |
+
print(f"Legal detection result: {legal_check}")
|
381 |
+
|
382 |
+
# If question is not legal-related, return early
|
383 |
+
if not legal_check["is_legal"] or legal_check["confidence"] < Config.LEGAL_DOMAIN_CONFIDENCE_THRESHOLD:
|
384 |
+
print(f"Question rejected: Not legal-related (confidence: {legal_check['confidence']:.2f})")
|
385 |
+
return {
|
386 |
+
'answer': Config.NON_LEGAL_RESPONSE_MESSAGE,
|
387 |
+
'retrieved_documents': [],
|
388 |
+
'fallback_used': False,
|
389 |
+
'context': "",
|
390 |
+
'search_results': [],
|
391 |
+
'search_results_html': "",
|
392 |
+
'original_question': query,
|
393 |
+
'refined_question': query,
|
394 |
+
'question_refinement': None,
|
395 |
+
'legal_domain_check': legal_check,
|
396 |
+
'rejected_non_legal': True
|
397 |
+
}
|
398 |
+
else:
|
399 |
+
print(f"Question accepted: Legal-related (confidence: {legal_check['confidence']:.2f})")
|
400 |
+
|
401 |
# Step 1: Refine the question if enabled
|
402 |
original_query = query
|
403 |
refinement_result = None
|
|
|
437 |
'search_results_html': self.google_search.format_search_results_for_display(search_results),
|
438 |
'original_question': original_query,
|
439 |
'refined_question': query,
|
440 |
+
'question_refinement': refinement_result,
|
441 |
+
'legal_domain_check': legal_check if Config.ENABLE_LEGAL_DOMAIN_FILTER else None,
|
442 |
+
'rejected_non_legal': False
|
443 |
}
|
444 |
else:
|
445 |
return {
|
|
|
451 |
'search_results_html': "",
|
452 |
'original_question': original_query,
|
453 |
'refined_question': query,
|
454 |
+
'question_refinement': refinement_result,
|
455 |
+
'legal_domain_check': legal_check if Config.ENABLE_LEGAL_DOMAIN_FILTER else None,
|
456 |
+
'rejected_non_legal': False
|
457 |
}
|
458 |
elif not retrieved_docs:
|
459 |
return {
|
|
|
465 |
'search_results_html': "",
|
466 |
'original_question': original_query,
|
467 |
'refined_question': query,
|
468 |
+
'question_refinement': refinement_result,
|
469 |
+
'legal_domain_check': legal_check if Config.ENABLE_LEGAL_DOMAIN_FILTER else None,
|
470 |
+
'rejected_non_legal': False
|
471 |
}
|
472 |
|
473 |
# Format context
|
|
|
504 |
'search_triggered': True,
|
505 |
'original_question': original_query,
|
506 |
'refined_question': query,
|
507 |
+
'question_refinement': refinement_result,
|
508 |
+
'legal_domain_check': legal_check if Config.ENABLE_LEGAL_DOMAIN_FILTER else None,
|
509 |
+
'rejected_non_legal': False
|
510 |
}
|
511 |
else:
|
512 |
# Google search found nothing useful
|
|
|
520 |
'search_triggered': True,
|
521 |
'original_question': original_query,
|
522 |
'refined_question': query,
|
523 |
+
'question_refinement': refinement_result,
|
524 |
+
'legal_domain_check': legal_check if Config.ENABLE_LEGAL_DOMAIN_FILTER else None,
|
525 |
+
'rejected_non_legal': False
|
526 |
}
|
527 |
else:
|
528 |
# Google search disabled
|
|
|
535 |
'search_results_html': "",
|
536 |
'original_question': original_query,
|
537 |
'refined_question': query,
|
538 |
+
'question_refinement': refinement_result,
|
539 |
+
'legal_domain_check': legal_check if Config.ENABLE_LEGAL_DOMAIN_FILTER else None,
|
540 |
+
'rejected_non_legal': False
|
541 |
}
|
542 |
|
543 |
# Return successful result
|
|
|
550 |
'search_results_html': "",
|
551 |
'original_question': original_query,
|
552 |
'refined_question': query,
|
553 |
+
'question_refinement': refinement_result,
|
554 |
+
'legal_domain_check': legal_check if Config.ENABLE_LEGAL_DOMAIN_FILTER else None,
|
555 |
+
'rejected_non_legal': False
|
556 |
}
|
557 |
|
558 |
def get_system_status(self) -> Dict[str, Any]:
|