Spaces:
Running
Running
| from contextlib import asynccontextmanager | |
| import json | |
| from fastapi import FastAPI | |
| from starlette.exceptions import HTTPException as StarletteHTTPException | |
| from core.config import HOST, PORT, DEBUG_MODE | |
| from core.exceptions import custom_404_handler | |
| from api.router import api_router | |
| from services.model_manager import model_manager, DEVICE | |
| # Load metadata from config file | |
| with open("config/metadata.json", "r") as f: | |
| METADATA = json.load(f) | |
| async def lifespan(app: FastAPI): | |
| print("Downloading/Loading models into VRAM (this takes a moment on first run)...") | |
| try: | |
| with open("config/models.json", "r") as f: | |
| models_config = json.load(f) | |
| for model_info in models_config: | |
| model_manager.load_hf_model_pipeline( | |
| model_info["id"], | |
| model_info["repo_id"], | |
| model_info=model_info | |
| ) | |
| except FileNotFoundError: | |
| print("⚠️ models.json not found in config/. No models loaded automatically.") | |
| yield | |
| print("Shutting down API and releasing resources...") | |
| model_manager.models.clear() | |
| model_manager.transforms_dict.clear() | |
| if hasattr(model_manager, "model_configs"): | |
| model_manager.model_configs.clear() | |
| app = FastAPI( | |
| title=METADATA["api_name"], | |
| description=METADATA["description"], | |
| version=METADATA["version"], | |
| debug=DEBUG_MODE, | |
| lifespan=lifespan, | |
| ) | |
| print(f"API Engine initialized on: {DEVICE.upper()}") | |
| # Register exception handlers | |
| app.add_exception_handler(StarletteHTTPException, custom_404_handler) | |
| # Include routers | |
| app.include_router(api_router) | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run(app, host=HOST, port=PORT) |