diff --git a/deepsearch/model/__init__.py b/deepsearch/model/__init__.py index e69de29b..5becc17c 100644 --- a/deepsearch/model/__init__.py +++ b/deepsearch/model/__init__.py @@ -0,0 +1 @@ +__version__ = "1.0.0" diff --git a/deepsearch/model/server/deepsearch_annotator_app.py b/deepsearch/model/server/deepsearch_annotator_app.py index b6574cc7..b53773f6 100644 --- a/deepsearch/model/server/deepsearch_annotator_app.py +++ b/deepsearch/model/server/deepsearch_annotator_app.py @@ -8,6 +8,7 @@ from datetime import datetime from typing import Coroutine, Dict, Union +import packaging.version import uvicorn from anyio import CapacityLimiter from anyio.lowlevel import RunVar @@ -17,6 +18,7 @@ from fastapi.responses import JSONResponse from starlette import status +from deepsearch.model import __version__ as MODEL_API_VERSION from deepsearch.model.base.base_annotator import BaseAnnotator from deepsearch.model.server.request_schemas import AnnotateRequestModel @@ -29,7 +31,7 @@ def __init__(self): # Start the fast API app self.app = FastAPI() self.annotate_controller = self.AnnotateController(self.annotators_list) - _log = logging.getLogger(__name__) + print(f"Model API version: {MODEL_API_VERSION}") @self.app.on_event("startup") async def startup_event(): @@ -84,6 +86,8 @@ async def annotator_process( # TODO pydantic models for return request_body = request.dict() + validate_version(req_api_version=request_body.get("apiVersion", "")) + request_arrival_time = time.time() failure_headers = { "X-Request-Arrival-Time": str(request_arrival_time), @@ -185,6 +189,16 @@ def annotate_process( headers["X-request-id"] = str(request["id"]) return JSONResponse(content=result, headers=headers) + def validate_version(req_api_version: str) -> None: + supported_versions = [ + f"api/v{packaging.version.parse(MODEL_API_VERSION).major}", + ] + if req_api_version not in supported_versions: + raise HTTPException( + status_code=400, + detail=f"Unsupported API version '{req_api_version}'", + ) + def register_annotator( self, cls: BaseAnnotator, name: Union[str, None] = None ) -> None: