Spaces:
Sleeping
Sleeping
| """ | |
| Test script for Hugging Face Inference API integration | |
| Run this to verify the setup before deploying to HF Spaces | |
| """ | |
| import os | |
| import sys | |
| import logging | |
| # Configure logging | |
| logging.basicConfig( | |
| level=logging.INFO, | |
| format='%(asctime)s - %(levelname)s - %(message)s' | |
| ) | |
| logger = logging.getLogger(__name__) | |
| def test_hf_token(): | |
| """Test if HF_TOKEN is set""" | |
| logger.info("Testing HF_TOKEN...") | |
| token = os.getenv("HF_TOKEN", "") | |
| if not token: | |
| logger.error("β HF_TOKEN not found!") | |
| logger.info("Please set it: export HF_TOKEN=hf_your_token_here") | |
| return False | |
| if not token.startswith("hf_"): | |
| logger.error("β Invalid HF_TOKEN format (should start with 'hf_')") | |
| return False | |
| logger.info(f"β HF_TOKEN found: {token[:10]}...") | |
| return True | |
| def test_imports(): | |
| """Test if all required packages are installed""" | |
| logger.info("\nTesting imports...") | |
| required_packages = [ | |
| ("huggingface_hub", "Hugging Face Hub"), | |
| ("gradio", "Gradio"), | |
| ("chromadb", "ChromaDB"), | |
| ("sentence_transformers", "Sentence Transformers"), | |
| ("langchain_text_splitters", "LangChain Text Splitters"), | |
| ] | |
| all_ok = True | |
| for package, name in required_packages: | |
| try: | |
| __import__(package) | |
| logger.info(f"β {name} installed") | |
| except ImportError: | |
| logger.error(f"β {name} not installed") | |
| all_ok = False | |
| return all_ok | |
| def test_hf_api(): | |
| """Test Hugging Face Inference API connection""" | |
| logger.info("\nTesting HF Inference API...") | |
| try: | |
| from huggingface_hub import InferenceClient | |
| from config import HF_TOKEN, HF_MODEL | |
| if not HF_TOKEN: | |
| logger.error("β Cannot test API without HF_TOKEN") | |
| return False | |
| client = InferenceClient(token=HF_TOKEN) | |
| # Test with a simple prompt | |
| logger.info(f"Testing model: {HF_MODEL}") | |
| logger.info("Sending test request...") | |
| response = client.text_generation( | |
| prompt="Say 'Hello, World!' and nothing else.", | |
| model=HF_MODEL, | |
| max_new_tokens=20, | |
| temperature=0.1, | |
| ) | |
| logger.info(f"β API Response: {response}") | |
| return True | |
| except Exception as e: | |
| logger.error(f"β API Test failed: {e}") | |
| return False | |
| def test_llm_handler(): | |
| """Test the LLM handler module""" | |
| logger.info("\nTesting LLM Handler...") | |
| try: | |
| from llm_handler import LLMHandler | |
| llm = LLMHandler() | |
| logger.info("β LLM Handler initialized") | |
| # Test answer generation | |
| logger.info("Testing answer generation...") | |
| test_question = "What is 2+2?" | |
| test_context = "Basic arithmetic: 2+2 equals 4." | |
| answer = llm.generate_answer(test_question, test_context, stream=False) | |
| logger.info(f"β Generated answer: {answer[:100]}...") | |
| return True | |
| except Exception as e: | |
| logger.error(f"β LLM Handler test failed: {e}") | |
| return False | |
| def test_vector_store(): | |
| """Test vector store initialization""" | |
| logger.info("\nTesting Vector Store...") | |
| try: | |
| from vector_store import VectorStore | |
| vs = VectorStore() | |
| logger.info("β Vector Store initialized") | |
| stats = vs.get_collection_stats() | |
| logger.info(f"β Collection stats: {stats}") | |
| return True | |
| except Exception as e: | |
| logger.error(f"β Vector Store test failed: {e}") | |
| return False | |
| def main(): | |
| """Run all tests""" | |
| logger.info("="*60) | |
| logger.info("RAG System - Hugging Face Integration Tests") | |
| logger.info("="*60) | |
| tests = [ | |
| ("HF Token", test_hf_token), | |
| ("Package Imports", test_imports), | |
| ("HF API Connection", test_hf_api), | |
| ("LLM Handler", test_llm_handler), | |
| ("Vector Store", test_vector_store), | |
| ] | |
| results = {} | |
| for test_name, test_func in tests: | |
| try: | |
| results[test_name] = test_func() | |
| except Exception as e: | |
| logger.error(f"β {test_name} crashed: {e}") | |
| results[test_name] = False | |
| # Summary | |
| logger.info("\n" + "="*60) | |
| logger.info("Test Summary") | |
| logger.info("="*60) | |
| for test_name, passed in results.items(): | |
| status = "β PASS" if passed else "β FAIL" | |
| logger.info(f"{status} - {test_name}") | |
| all_passed = all(results.values()) | |
| logger.info("="*60) | |
| if all_passed: | |
| logger.info("π All tests passed! Ready to deploy to HF Spaces.") | |
| logger.info("\nNext steps:") | |
| logger.info("1. Create a new Space at https://huggingface.co/new-space") | |
| logger.info("2. Choose 'Gradio' as SDK") | |
| logger.info("3. Add HF_TOKEN to Space secrets") | |
| logger.info("4. Push code to the Space repository") | |
| return 0 | |
| else: | |
| logger.error("β Some tests failed. Please fix the issues before deploying.") | |
| return 1 | |
| if __name__ == "__main__": | |
| sys.exit(main()) | |