#!/usr/bin/env python3 """ Startup test script for Hugging Face Spaces deployment This script helps debug model loading issues """ import os import sys import time import logging import traceback # Configure logging logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__) def test_imports(): """Test if all required packages can be imported""" logger.info("Testing imports...") try: import torch logger.info(f"PyTorch version: {torch.__version__}") except ImportError as e: logger.error(f"Failed to import torch: {e}") return False try: import transformers logger.info(f"Transformers version: {transformers.__version__}") except ImportError as e: logger.error(f"Failed to import transformers: {e}") return False try: import peft logger.info(f"PEFT version: {peft.__version__}") except ImportError as e: logger.error(f"Failed to import peft: {e}") return False try: import fastapi logger.info(f"FastAPI version: {fastapi.__version__}") except ImportError as e: logger.error(f"Failed to import fastapi: {e}") return False return True def test_model_files(): """Test if model files exist""" logger.info("Testing model files...") model_dir = "./final-model" required_files = [ "adapter_config.json", "adapter_model.safetensors", "tokenizer.json", "tokenizer_config.json", "vocab.json" ] if not os.path.exists(model_dir): logger.error(f"Model directory {model_dir} does not exist") return False missing_files = [] for file in required_files: file_path = os.path.join(model_dir, file) if not os.path.exists(file_path): missing_files.append(file) else: size = os.path.getsize(file_path) logger.info(f"✓ {file} exists ({size} bytes)") if missing_files: logger.error(f"Missing required files: {missing_files}") return False return True def test_model_loading(): """Test model loading with timeout""" logger.info("Testing model loading...") try: from model_utils import get_model start_time = time.time() model = get_model() load_time = time.time() - start_time logger.info(f"Model loaded successfully in {load_time:.2f} seconds") # Test a simple prediction test_question = "How many records are there?" test_headers = ["id", "name", "age"] start_time = time.time() result = model.predict(test_question, test_headers) predict_time = time.time() - start_time logger.info(f"Test prediction successful in {predict_time:.2f} seconds") logger.info(f"Generated SQL: {result}") return True except Exception as e: logger.error(f"Model loading failed: {e}") logger.error(traceback.format_exc()) return False def main(): """Run all tests""" logger.info("Starting Hugging Face Spaces deployment tests...") # Test 1: Imports if not test_imports(): logger.error("Import test failed") sys.exit(1) # Test 2: Model files if not test_model_files(): logger.error("Model files test failed") sys.exit(1) # Test 3: Model loading if not test_model_loading(): logger.error("Model loading test failed") sys.exit(1) logger.info("All tests passed! Ready for deployment.") if __name__ == "__main__": main()