| |
| """ |
| Test script to demonstrate SHORT vs LONG response types. |
| Shows the difference between WhatsApp (brief) and PDF (comprehensive) outputs. |
| """ |
|
|
| import sys |
| from pathlib import Path |
| from rag_pipeline import RAGPipeline, DocumentStore |
|
|
|
|
| def test_response_types(): |
| """Test both SHORT and LONG response types with the same question.""" |
|
|
| print("=" * 80) |
| print("RESPONSE TYPE COMPARISON TEST") |
| print("=" * 80) |
|
|
| |
| print("\nInitializing RAG pipeline...") |
| vector_store_path = Path("vector_store") |
| doc_store = DocumentStore( |
| persist_dir=vector_store_path, |
| embedding_model="BAAI/bge-large-en-v1.5" |
| ) |
|
|
| src = Path("data") |
| pdfs = doc_store.discover_pdfs(src) |
| doc_store.build_vector_store(pdfs, force_rebuild=False) |
|
|
| rag = RAGPipeline( |
| doc_store=doc_store, |
| model="llama-3.3-70b-versatile", |
| temperature=0.1, |
| top_k=15, |
| ) |
|
|
| print("✓ RAG pipeline initialized\n") |
|
|
| |
| question = "What are the personal income tax rates in Nigeria?" |
|
|
| print("=" * 80) |
| print("TEST QUESTION:") |
| print(question) |
| print("=" * 80) |
|
|
| |
| print("\n" + "=" * 80) |
| print("SHORT RESPONSE (for WhatsApp)") |
| print("=" * 80) |
| print("\nExpected: 3-4 concise sentences, immediate answer, key facts only\n") |
|
|
| try: |
| short_answer = rag.query(question, verbose=False, response_type='short') |
| print(short_answer) |
|
|
| |
| print("\n" + "-" * 80) |
| print("SHORT RESPONSE QUALITY CHECKS:") |
| word_count = len(short_answer.split()) |
| sentence_count = short_answer.count('.') + short_answer.count('?') + short_answer.count('!') |
| has_numbers = any(char.isdigit() for char in short_answer) |
|
|
| print(f" Word count: {word_count} (target: 50-150 words for brief)") |
| print(f" Sentence count: ~{sentence_count}") |
| print(f" Contains numbers: {has_numbers}") |
|
|
| if word_count <= 200: |
| print(" ✓ PASS: Response is concise") |
| else: |
| print(" ⚠️ WARNING: Response may be too long for WhatsApp") |
|
|
| except Exception as e: |
| print(f"❌ ERROR: {e}") |
| import traceback |
| traceback.print_exc() |
|
|
| |
| print("\n\n" + "=" * 80) |
| print("LONG RESPONSE (for PDF Report)") |
| print("=" * 80) |
| print("\nExpected: Comprehensive with examples, calculations, tables, law references\n") |
|
|
| try: |
| long_answer = rag.query(question, verbose=False, response_type='long') |
| print(long_answer) |
|
|
| |
| print("\n" + "-" * 80) |
| print("LONG RESPONSE QUALITY CHECKS:") |
| word_count = len(long_answer.split()) |
| has_examples = 'example' in long_answer.lower() or 'instance' in long_answer.lower() |
| has_calculations = '×' in long_answer or 'calculate' in long_answer.lower() |
| has_law_refs = 'section' in long_answer.lower() or 'act' in long_answer.lower() |
| has_numbers = any(char.isdigit() for char in long_answer) |
|
|
| print(f" Word count: {word_count} (target: 300+ words for comprehensive)") |
| print(f" Contains examples: {has_examples}") |
| print(f" Contains calculations: {has_calculations}") |
| print(f" Contains law references: {has_law_refs}") |
| print(f" Contains numbers: {has_numbers}") |
|
|
| if word_count >= 300: |
| print(" ✓ PASS: Response is comprehensive") |
| else: |
| print(" ⚠️ WARNING: Response may be too brief for PDF report") |
|
|
| if has_examples and has_numbers: |
| print(" ✓ PASS: Response includes examples and numbers") |
| else: |
| print(" ⚠️ WARNING: Response may lack examples or numbers") |
|
|
| except Exception as e: |
| print(f"❌ ERROR: {e}") |
| import traceback |
| traceback.print_exc() |
|
|
| |
| print("\n\n" + "=" * 80) |
| print("COMPARISON SUMMARY") |
| print("=" * 80) |
| print("\nKEY DIFFERENCES:") |
| print(" SHORT (WhatsApp):") |
| print(" - 3-4 sentences") |
| print(" - Immediate answer") |
| print(" - Key facts only") |
| print(" - No examples or detailed calculations") |
| print("") |
| print(" LONG (PDF Report):") |
| print(" - Multiple paragraphs") |
| print(" - Detailed explanations") |
| print(" - Examples with step-by-step calculations") |
| print(" - Law references and edge cases") |
| print(" - Professional report format") |
| print("=" * 80) |
|
|
|
|
| if __name__ == "__main__": |
| test_response_types() |
|
|