Spaces:
Sleeping
Sleeping
import os | |
import uuid | |
from fastapi import UploadFile, HTTPException | |
from typing import Dict, Any | |
from backend.services.PDFQuestionService import PDFQuestionService # AI logic class | |
from backend.models.AIResponseModel import AIResponseModel # AI response model | |
class PDFService: | |
def __init__(self): | |
self.upload_dir = "uploaded_files" | |
os.makedirs(self.upload_dir, exist_ok=True) | |
self.question_service = PDFQuestionService() | |
def list_items(self): | |
# Your existing list logic | |
return [] | |
async def process_uploaded_pdf(self, file: UploadFile) -> AIResponseModel: | |
ext = os.path.splitext(file.filename)[1].lower() | |
if ext not in [".pdf", ".txt", ".docx"]: | |
raise HTTPException(status_code=400, detail="Unsupported file format") | |
contents = await file.read() | |
# Generate unique filename with original extension | |
unique_filename = f"{uuid.uuid4()}{ext}" | |
file_path = os.path.join(self.upload_dir, unique_filename) | |
with open(file_path, "wb") as f: | |
f.write(contents) | |
# Call the AI processing logic | |
try: | |
result = self.question_service.react_generate_questions(file_path) | |
responsemodel = AIResponseModel( | |
OriginalFileName=file.filename, | |
StoredFileName=unique_filename, | |
ContentSize=len(contents), | |
SavedTo=file_path, | |
AIResult=result | |
) | |
except Exception as e: | |
raise HTTPException(status_code=500, detail=f"Error during AI processing: {str(e)}") | |
return responsemodel | |