| | import time |
| | from fastapi import APIRouter, status, Body, Response |
| | from fastapi.responses import JSONResponse |
| | from loguru import logger |
| | from src.misc.settings import ApiSettings |
| | from src.misc.schemas import ProductNamedEntityExtractionSchema |
| | from src.models import ModelBuilder |
| | from src.misc.logger_handlers import FileHandler |
| | from src.misc.create_unique_id import create_unique_user_id |
| |
|
| |
|
| | settings = ApiSettings() |
| | print(settings.duckling_host, settings.duckling_port) |
| |
|
| | price_extractor_router = APIRouter(prefix=f"/price_extractor") |
| |
|
| | model = ModelBuilder.build_model(settings=settings) |
| |
|
| |
|
| | @price_extractor_router.get("/healthcheck", tags=["Healthcheck"]) |
| | async def healthcheck(): |
| | return JSONResponse({"message": "I am alive"}, status_code=status.HTTP_200_OK) |
| |
|
| |
|
| | @price_extractor_router.post("/predict", tags=["Predict"]) |
| | async def ner_predict( |
| | response: Response, |
| | input_query: str = Body(description="input query from the search bar"), |
| | ) -> ProductNamedEntityExtractionSchema: |
| | request_tic = time.time() |
| | request_unique_id = create_unique_user_id() |
| | session_logger = logger.bind(user_unique_id=request_unique_id) |
| | session_logger.add(sink=FileHandler(user_unique_id=request_unique_id)) |
| |
|
| | session_logger.info(f"REQUEST ID -> {request_unique_id} : Request Recieved") |
| | session_logger.info( |
| | f"REQUEST ID -> {request_unique_id} : Request body is '{input_query}'" |
| | ) |
| | pred_tic = time.time() |
| | product_extraction_result: ProductNamedEntityExtractionSchema = model( |
| | input_query=input_query |
| | ) |
| | pred_toc = time.time() |
| | session_logger.info( |
| | f"REQUEST ID -> {request_unique_id} : Model output is {product_extraction_result.model_dump_json()}" |
| | ) |
| | request_toc = time.time() |
| | response.headers["model-inference-time"] = str(pred_toc - pred_tic) |
| | response.headers["request-time"] = str(request_toc - request_tic) |
| | return product_extraction_result |
| |
|