Spaces:
Sleeping
Sleeping
| from fastapi import FastAPI, UploadFile, File, Form, BackgroundTasks, HTTPException | |
| from fastapi.responses import JSONResponse | |
| from uuid import uuid4 | |
| from vector_handler import create_vector_store, delete_vector_store, query_vector_store | |
| from pdf_utils import extract_text_from_pdfs, split_text | |
| import os | |
| from dotenv import load_dotenv | |
| from datetime import datetime, timedelta | |
| from pinecone.openapi_support.exceptions import NotFoundException | |
| load_dotenv() | |
| app = FastAPI() | |
| async def upload_pdfs(background_tasks: BackgroundTasks, files: list[UploadFile] = File(...)): | |
| session_id = str(uuid4()) | |
| raw_text = await extract_text_from_pdfs(files) | |
| chunks = split_text(raw_text) | |
| create_vector_store(session_id, chunks) | |
| created_at = datetime.utcnow() | |
| will_be_removed_at = created_at + timedelta(minutes=15) | |
| # Schedule deletion after 15 minutes | |
| background_tasks.add_task(delete_vector_store, session_id, delay=900) | |
| return { | |
| "session_id": session_id, | |
| "message": "PDF uploaded and processed.", | |
| "created_at": created_at.isoformat() + "Z", | |
| "will_be_removed_at": will_be_removed_at.isoformat() + "Z" | |
| } | |
| async def query_pdf(session_id: str = Form(...), question: str = Form(...)): | |
| try: | |
| response = query_vector_store(session_id, question) | |
| return JSONResponse(content={"answer": response}) | |
| except NotFoundException: | |
| raise HTTPException(status_code=404, detail=f"Session '{session_id}' does not exist or has expired.") | |
| except Exception as e: | |
| raise HTTPException(status_code=500, detail=str(e)) | |
| async def clear_session(session_id: str = Form(...)): | |
| try: | |
| delete_vector_store(session_id) | |
| return {"message": f"Session '{session_id}' has been cleared."} | |
| except NotFoundException: | |
| raise HTTPException(status_code=404, detail=f"Session '{session_id}' does not exist.") | |
| except Exception as e: | |
| raise HTTPException(status_code=500, detail=str(e)) | |