Ram-090's picture
Restructure project with FastAPI + React frontend and Railway deployment
1bbe15b
"""
VDHF - Verification-Driven Hallucination Firewall
==================================================
Single entry point to run the complete project.
Usage:
python run.py # Run full demo and tests
python run.py --demo # Interactive demo only
python run.py --test # Run comprehensive tests only
python run.py --quick # Quick verification test
"""
import os
import sys
import argparse
from datetime import datetime
# Add project root to path
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
# Output directory
OUTPUT_DIR = os.path.join(os.path.dirname(__file__), "output")
os.makedirs(OUTPUT_DIR, exist_ok=True)
# Data directory
DATA_DIR = os.path.join(os.path.dirname(__file__), "data", "sample_docs")
def print_header(title):
"""Print a formatted header."""
print("\n" + "=" * 80)
print(f" {title}")
print("=" * 80)
def print_section(title):
"""Print a section header."""
print("\n" + "-" * 60)
print(f" {title}")
print("-" * 60)
def check_requirements():
"""Check if required packages are installed."""
print_section("Checking Requirements")
required = ['sentence_transformers', 'chromadb', 'torch', 'transformers', 'numpy']
missing = []
for package in required:
try:
__import__(package.replace('-', '_'))
print(f" [OK] {package}")
except ImportError:
print(f" [X] {package} - NOT FOUND")
missing.append(package)
if missing:
print(f"\n [!] Missing packages: {', '.join(missing)}")
print(" [!] Run: pip install -r requirements.txt")
return False
print("\n [OK] All requirements satisfied!")
return True
def load_documents(pipeline):
"""Load all sample documents."""
print_section("Loading Documents")
if not os.path.exists(DATA_DIR):
print(f" [!] Sample docs directory not found: {DATA_DIR}")
return 0
doc_count = 0
for filename in os.listdir(DATA_DIR):
if filename.endswith('.txt'):
filepath = os.path.join(DATA_DIR, filename)
pipeline.ingest_file(filepath)
doc_count += 1
print(f" [OK] Loaded: {filename}")
print(f"\n [OK] Loaded {doc_count} documents, {pipeline.document_count} chunks")
return doc_count
def run_demo_mode(pipeline):
"""Run interactive demo mode."""
from core.pipeline import interactive_mode
interactive_mode(pipeline)
def run_quick_test(pipeline):
"""Run a quick verification test."""
print_section("Running Quick Test")
test_queries = [
"When was Python released and who created it?",
"What are the key features of Python?",
"When did Python 3.0 come out?"
]
for query in test_queries:
print(f"\n Query: {query}")
result = pipeline.query(query, verbose=False)
status = "VERIFIED" if result.is_verified else "NEEDS REVIEW"
print(f" Status: {status} | Support: {result.support_ratio:.1%} | Claims: {result.supported_claims}/{result.total_claims}")
print(f" Response: {result.final_response[:100]}...")
def main():
"""Main entry point."""
parser = argparse.ArgumentParser(description='VDHF - Hallucination Firewall')
parser.add_argument('--demo', action='store_true', help='Run interactive demo only')
parser.add_argument('--test', action='store_true', help='Run comprehensive tests only')
parser.add_argument('--quick', action='store_true', help='Run quick verification test')
args = parser.parse_args()
print_header("VERIFICATION-DRIVEN HALLUCINATION FIREWALL (VDHF)")
print(f" Started: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
# Check requirements
if not check_requirements():
return
# Import pipeline (after requirements check)
from core.pipeline import VDHFPipeline
# Initialize pipeline
print_section("Initializing Pipeline")
pipeline = VDHFPipeline()
# Load documents
doc_count = load_documents(pipeline)
if doc_count == 0:
print(" [!] No documents loaded. Please check data/sample_docs folder.")
return
# Run based on mode
if args.demo:
run_demo_mode(pipeline)
elif args.test or args.quick:
run_quick_test(pipeline)
else:
# Full run - both test and demo
print("\n [1/2] Running Quick Tests...")
run_quick_test(pipeline)
print("\n [2/2] Starting Interactive Demo...")
print(" (Type '/quit' to exit)\n")
run_demo_mode(pipeline)
print_header("VDHF COMPLETED")
print(f" Finished: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print(f" Output: {OUTPUT_DIR}")
if __name__ == "__main__":
main()