from fastapi import FastAPI, UploadFile, HTTPException from typing import List from extractor import Entity, extract_entities_from_pdf import logging import uvicorn # Set up logging logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__) app = FastAPI( title="Medical Entity Extraction API", description="This API allows users to extract medically relevant entities from PDF documents using a pre-trained NER model.", version="1.0.0" ) from fastapi.middleware.cors import CORSMiddleware # Add CORS middleware app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"], ) # Rest of your existing code @app.post("/api/v1/extract", response_model=List[Entity]) async def extract_entities(file: UploadFile): logger.debug(f"Received request for file: {file.filename}") if not file: logger.error("No file provided") raise HTTPException(status_code=400, detail="No file provided") if not file.filename.lower().endswith('.pdf'): logger.error(f"Invalid file type: {file.filename}") raise HTTPException(status_code=415, detail="File must be a PDF") try: logger.debug("Starting entity extraction") result = extract_entities_from_pdf(file) logger.debug(f"Successfully extracted {len(result)} entities") return result except Exception as e: logger.error(f"Error during extraction: {str(e)}", exc_info=True) raise HTTPException(status_code=500, detail=str(e)) if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=7860)