agritech-api / src /api /main.py
github-actions
Deploy API from GitHub Actions
42dfbed
Raw
History Blame Contribute Delete
1.47 kB
from contextlib import asynccontextmanager
import mlflow
from fastapi import FastAPI
from fastapi.responses import RedirectResponse
from src.config import (
MLFLOW_TRACKING_URI,
MODEL_SOURCE,
FINAL_MODEL_PATH,
HF_MODEL_REPO,
HF_TOKEN,
)
from src.recommendations.loader import load_model
from src.api.monitoring.metadata import load_crops_by_area_from_db
from src.api.routes.prediction import router as prediction_router
from src.api.routes.recommendation import router as recommendation_router
from src.api.routes.metadata import router as metadata_router
from src.api.monitoring.routes import router as monitoring_router
@asynccontextmanager
async def lifespan(app: FastAPI):
mlflow.set_tracking_uri(MLFLOW_TRACKING_URI)
mlflow.set_registry_uri(MLFLOW_TRACKING_URI)
app.state.model = load_model(
model_source=MODEL_SOURCE,
local_path=FINAL_MODEL_PATH,
hf_repo=HF_MODEL_REPO,
hf_token=HF_TOKEN,
)
app.state.crops_by_area = load_crops_by_area_from_db()
yield
app = FastAPI(
title="API de Prédiction de Rendement et Recommandation de Cultures",
lifespan=lifespan,
)
@app.get("/")
def root():
return RedirectResponse(url="/docs")
@app.get("/health", tags=["Health"])
def health():
return {"status": "ok"}
app.include_router(prediction_router)
app.include_router(recommendation_router)
app.include_router(metadata_router)
app.include_router(monitoring_router)