Harshavard21/FinRAG
2
1"""2scripts/verify_setup.py3=======================4Run this after pip install to verify everything is working correctly.5Usage: python scripts/verify_setup.py6"""7 8import sys9import os10 11# Add project root to path12sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))13 14from rich.console import Console15from rich.table import Table16from rich import print as rprint17 18console = Console()19 20 21def check(label: str, fn):22 """Run a check function and return (passed, message)."""23 try:24 result = fn()25 return True, result or "OK"26 except Exception as e:27 return False, str(e)28 29 30def main():31 console.rule("[bold cyan]RAG Environment Verification[/bold cyan]")32 console.print()33 34 results = []35 36 # 1. Python version37 passed, msg = check(38 "Python version",39 lambda: f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro} ✓"40 )41 results.append(("Python 3.12+", passed, msg))42 43 # 2. PyMuPDF44 def check_pymupdf():45 import fitz46 return f"PyMuPDF {fitz.version[0]} ✓"47 results.append(("PyMuPDF (PDF parsing)", *check("PyMuPDF", check_pymupdf)))48 49 # 3. pdfplumber50 def check_pdfplumber():51 import pdfplumber52 return f"pdfplumber {pdfplumber.__version__} ✓"53 results.append(("pdfplumber (tables)", *check("pdfplumber", check_pdfplumber)))54 55 # 4. sentence-transformers56 def check_st():57 import sentence_transformers58 return f"sentence-transformers {sentence_transformers.__version__} ✓"59 results.append(("sentence-transformers", *check("sentence-transformers", check_st)))60 61 # 5. PyTorch + CUDA62 def check_torch():63 import torch64 cuda = torch.cuda.is_available()65 if cuda:66 gpu = torch.cuda.get_device_name(0)67 vram = torch.cuda.get_device_properties(0).total_memory / 1e968 return f"PyTorch {torch.__version__} | CUDA ✓ | {gpu} ({vram:.1f}GB VRAM)"69 else:70 return f"PyTorch {torch.__version__} | CPU only (CUDA not detected)"71 results.append(("PyTorch + CUDA", *check("PyTorch", check_torch)))72 73 # 6. Qdrant client74 def check_qdrant():75 from qdrant_client import QdrantClient76 import qdrant_client77 return f"qdrant-client {qdrant_client.__version__} ✓"78 results.append(("Qdrant client", *check("Qdrant", check_qdrant)))79 80 # 7. rank-bm2581 def check_bm25():82 import rank_bm2583 return "rank-bm25 ✓"84 results.append(("rank-bm25 (sparse)", *check("BM25", check_bm25)))85 86 # 8. Groq87 def check_groq():88 import groq89 return f"groq {groq.__version__} ✓"90 results.append(("Groq SDK", *check("Groq", check_groq)))91 92 # 9. LangChain93 def check_langchain():94 import langchain95 return f"langchain {langchain.__version__} ✓"96 results.append(("LangChain", *check("LangChain", check_langchain)))97 98 # 10. Groq API key99 def check_api_key():100 from dotenv import load_dotenv101 load_dotenv()102 key = os.getenv("GROQ_API_KEY", "")103 if not key or key == "your_groq_api_key_here":104 raise ValueError("GROQ_API_KEY not set in .env file!")105 return f"Key found: {key[:8]}...{key[-4:]} ✓"106 results.append(("Groq API Key (.env)", *check("API Key", check_api_key)))107 108 # 11. Streamlit109 def check_streamlit():110 import streamlit111 return f"streamlit {streamlit.__version__} ✓"112 results.append(("Streamlit", *check("Streamlit", check_streamlit)))113 114 # 12. Plotly115 def check_plotly():116 import plotly117 return f"plotly {plotly.__version__} ✓"118 results.append(("Plotly", *check("Plotly", check_plotly)))119 120 # 13. RAGAS121 def check_ragas():122 import ragas123 return f"ragas {ragas.__version__} ✓"124 results.append(("RAGAS (evaluation)", *check("RAGAS", check_ragas)))125 126 # 14. Settings127 def check_settings():128 from config.settings import settings129 settings.ensure_dirs()130 device = settings.get_device()131 return f"Settings loaded | Device: {device} ✓"132 results.append(("Config/Settings", *check("Settings", check_settings)))133 134 # 15. Raw PDFs135 def check_pdfs():136 from config.settings import settings137 pdf_dir = settings.raw_pdfs_path138 if not pdf_dir.exists():139 raise FileNotFoundError(f"raw_pdfs/ directory not found at {pdf_dir}")140 pdfs = list(pdf_dir.glob("*.pdf"))141 if not pdfs:142 raise FileNotFoundError("No PDFs found in raw_pdfs/ directory")143 return f"{len(pdfs)} PDFs found in raw_pdfs/ ✓"144 results.append(("Raw PDFs", *check("PDFs", check_pdfs)))145 146 # ------------------------------------------------------------------ #147 # Print results table148 # ------------------------------------------------------------------ #149 console.print()150 table = Table(title="Setup Verification Results", show_lines=True)151 table.add_column("Component", style="cyan", no_wrap=True)152 table.add_column("Status", justify="center")153 table.add_column("Details", style="dim")154 155 all_passed = True156 for label, passed, msg in results:157 status = "[bold green]PASS ✓[/bold green]" if passed else "[bold red]FAIL ✗[/bold red]"158 table.add_row(label, status, msg)159 if not passed:160 all_passed = False161 162 console.print(table)163 console.print()164 165 if all_passed:166 console.print("[bold green]✨ All checks passed! Environment is ready.[/bold green]")167 console.print("[dim]Next step: run [cyan]python scripts/ingest_all.py[/cyan] to start the ingestion pipeline.[/dim]")168 else:169 console.print("[bold red]⚠ Some checks failed. Fix the issues above before proceeding.[/bold red]")170 console.print("[dim]Common fixes:[/dim]")171 console.print(" • Missing package? Run: [cyan]pip install -r requirements.txt[/cyan]")172 console.print(" • Missing GROQ_API_KEY? Copy [cyan].env.example → .env[/cyan] and add your key")173 console.print(" • CUDA not found? Run: [cyan]pip install torch --index-url https://download.pytorch.org/whl/cu121[/cyan]")174 175 console.print()176 return 0 if all_passed else 1177 178 179if __name__ == "__main__":180 sys.exit(main())181 