# main.py from fastapi import FastAPI, File, UploadFile, HTTPException from fastapi.responses import JSONResponse from typing import Dict, Any import io import base64 import logging from .annotations import analyze_pdf # Configure logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) app = FastAPI( title="PDF Language Issue Analyzer", description="An API to analyze PDFs for language issues and provide an annotated PDF.", version="1.0.0" ) @app.get("/", summary="Root Endpoint") def read_root(): """ Root endpoint to verify that the API is running. """ logger.info("Root endpoint accessed.") return {"message": "PDF Language Issue Analyzer API is running."} @app.post("/analyze", summary="Analyze PDF for Language Issues") async def analyze_pdf_endpoint(file: UploadFile = File(...)): """ Analyze an uploaded PDF file for language issues. - **file**: PDF file to be analyzed. """ if file.content_type != "application/pdf": logger.error("Invalid file type uploaded: %s", file.content_type) raise HTTPException(status_code=400, detail="Invalid file type. Only PDFs are supported.") try: contents = await file.read() file_stream = io.BytesIO(contents) language_issues, annotated_pdf = analyze_pdf(file_stream) response = { "language_issues": language_issues } if annotated_pdf: # Properly encode the annotated PDF in Base64 encoded_pdf = base64.b64encode(annotated_pdf).decode('utf-8') response["annotated_pdf"] = f"data:application/pdf;base64,{encoded_pdf}" logger.info("Annotated PDF generated and encoded.") logger.info("PDF analysis completed successfully.") return JSONResponse(content=response) except Exception as e: logger.exception("Error occurred during PDF analysis.") raise HTTPException(status_code=500, detail=str(e))