Spaces:
Runtime error
Runtime error
| #!/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() |