salvirezwan's picture
Initial commit: Academic Research RAG project
8ec547b
Raw
History Blame Contribute Delete
1.89 kB
from fastapi.responses import JSONResponse
from fastapi import Request
class BaseAppException(Exception):
status_code = 500
message = "An error occurred"
def __init__(self, message: str = None):
self.message = message or self.message
super().__init__(self.message)
class InvalidFileTypeError(BaseAppException):
status_code = 415
message = "Invalid file type. Only PDF files are allowed."
class FileSizeExceededError(BaseAppException):
status_code = 400
message = "File size exceeds maximum allowed size."
class DuplicateDocumentError(BaseAppException):
status_code = 409
message = "Document with this file hash already exists."
class ProcessingError(BaseAppException):
status_code = 500
message = "Document processing failed."
class ParsingError(BaseAppException):
status_code = 500
message = "PDF parsing failed."
class IndexingError(BaseAppException):
status_code = 500
message = "Indexing to vector database failed."
class EmbeddingError(BaseAppException):
status_code = 500
message = "Embedding generation failed."
class DocumentNotFoundError(BaseAppException):
status_code = 404
message = "Document not found."
class PaperFetchError(BaseAppException):
status_code = 502
message = "Failed to fetch paper from external source."
async def global_exception_handler(request: Request, exc: Exception):
if isinstance(exc, BaseAppException):
return JSONResponse(
status_code=exc.status_code,
content={
"error": exc.__class__.__name__,
"message": exc.message,
}
)
return JSONResponse(
status_code=500,
content={
"error": "Internal Server Error",
"details": str(exc) if request.app.debug else "An unexpected error occurred",
}
)