muhammadjalaludin
Implement service layers for backup, model management, file handling, tokenization, and training
1424118 Download api/admin.py from kota101/ta_ml: direct link, hf CLI and curl.
- Browser
- Download file 3.66 kB
-
https://huggingface.co/spaces/kota101/ta_ml/resolve/main/api/admin.py
- Command line
-
hf download hf://spaces/kota101/ta_ml/api/admin.py
-
curl -L -o admin.py https://huggingface.co/spaces/kota101/ta_ml/resolve/main/api/admin.py
3.66 kB
| # ta_ml/api/admin.py | |
| """ | |
| API endpoints for administrative tasks. | |
| """ | |
| import logging | |
| from fastapi import APIRouter, Depends, HTTPException, Request | |
| from api.dependencies import get_model_manager | |
| from models.api import ReloadResponse | |
| from services.model_manager import ModelManager | |
| from services.prediction_service import PredictionService | |
| from services.tokenization_service import TokenizationService | |
| from services.training_service import TrainingService | |
| logger = logging.getLogger(__name__) | |
| router = APIRouter(prefix="/admin", tags=["Admin"]) | |
| def _reinitalize_ml_services(request: Request, model_manager: ModelManager): | |
| """ | |
| Re-initializes all services that depend on the ModelManager's components. | |
| This must be called after a model reload to ensure services use the new models. | |
| """ | |
| logger.info("Re-initializing ML-dependent services...") | |
| # Prediction Service | |
| request.app.state.prediction_service = PredictionService( | |
| tokenizer=model_manager.tokenizer, | |
| base_model=model_manager.base_model, | |
| classifier=model_manager.classifier, | |
| label_encoder=model_manager.label_encoder, | |
| device=model_manager.device, | |
| ) | |
| # Tokenization Service | |
| request.app.state.tokenization_service = TokenizationService( | |
| tokenizer=model_manager.tokenizer) | |
| # Training Service | |
| request.app.state.training_service = TrainingService( | |
| settings=request.app.state.settings, | |
| tokenizer=model_manager.tokenizer, | |
| base_model=model_manager.base_model, | |
| device=model_manager.device, | |
| ) | |
| logger.info("ML-dependent services re-initialized successfully.") | |
| def reload_models( | |
| request: Request, | |
| model_manager: ModelManager = Depends(get_model_manager), | |
| ): | |
| """ | |
| Triggers a hot-reload of all models and tokenizers from disk or the Hub. | |
| This allows updating the model artifacts without restarting the API service. | |
| After the models are reloaded, all dependent services are re-initialized | |
| to use the new model instances. | |
| """ | |
| try: | |
| model_manager.reload_models() | |
| _reinitalize_ml_services(request, model_manager) | |
| return ReloadResponse(status="Models reloaded successfully") | |
| except Exception as e: | |
| logger.exception("Error during model reload.", exc_info=e) | |
| raise HTTPException( | |
| status_code=500, detail=f"Error reloading models: {e}" | |
| ) | |