| from fastapi import FastAPI ,File, UploadFile,Form |
| from pydantic import BaseModel |
| from typing import List,Optional |
| from components.mongoconnection import provideClient |
| from components.checkaccountexists import checkAccount |
| from components.filechecker import checkFile |
| from components.getproblems import GetProblems |
| from components.getdeep import GetDeepDive |
| from components.getbreakdown import GetBreakdown |
|
|
|
|
|
|
| from components.legal_points_agent import LegalKeyPoints |
| from components.legal_deepdive_agent import LegalDeepDive |
| from components.legal_breakdown_agent import LegalBreakdown |
|
|
|
|
| from components.medical_points_agent import MedicalKeyPoints |
| from components.medical_deepdive_agent import MedicalDeepDive |
| from components.medical_breakdown_agent import MedicalBreakdown |
|
|
|
|
|
|
| from components.research_deepdive_agent import ResearchDeepDive |
| from components.research_points_agent import ResearchKeyPoints |
| from components.research_breakdown_agent import ResearchBreakdown |
|
|
|
|
| from fastapi.middleware.cors import CORSMiddleware |
| from PyPDF2 import PdfReader |
| import io |
| import time |
|
|
| origins=[ |
| "http://localhost:3000", |
| "https://askmydocs-three.vercel.app" |
| ] |
|
|
|
|
| app = FastAPI() |
| app.add_middleware( |
| CORSMiddleware, |
| allow_origins=origins, |
| allow_credentials=True, |
| allow_methods=["*"], |
| allow_headers=["*"], |
| ) |
|
|
|
|
|
|
| mclient=provideClient() |
|
|
| db=mclient["askmydoc_db"] |
| coll=db["askmydoc_col"] |
|
|
| class Item(BaseModel): |
| owner:str |
|
|
| class Item2(BaseModel): |
| owner: str |
| filetype:str |
|
|
| class QAI(BaseModel): |
| owner:str |
| files:List[str] |
| question:str |
| msg_type:str |
|
|
| class QA2(BaseModel): |
| owner:str |
| files:List[str] |
|
|
| class QA3(BaseModel): |
| owner:str |
| msg_type:str |
|
|
|
|
| class QA4(BaseModel): |
| owner:str |
| msg_type:str |
| files:List[str] |
| |
|
|
| @app.get("/") |
| def read_root(): |
| return {"Hello": "World"} |
|
|
|
|
| @app.post("/setupaccount") |
| def create_item(data: Item): |
| print(data.owner) |
| payload={ |
|
|
| "owner":data.owner, |
| "app_id":"askmydoc_v1", |
| "files":[], |
| "keypoints":[], |
| "deepdive":[], |
| "breakdown":[] |
|
|
| } |
| inserted=coll.insert_one(payload) |
| if inserted.inserted_id: |
| return {"status":True} |
| else: |
|
|
| return {"status":False} |
|
|
| |
|
|
| @app.post("/checkaccount") |
| def checkaccount(data:Item): |
| status=checkAccount(data.owner) |
| print(data) |
| if status==True: |
| return {'status':True} |
| else: |
| return {"status":False} |
|
|
|
|
|
|
|
|
| |
| |
|
|
| @app.post("/checkfile") |
| def checkfileexistence(data:Item2): |
| filechecksresponse=checkFile(data.owner,data.filetype) |
| return filechecksresponse |
|
|
|
|
| |
|
|
|
|
|
|
| @app.post("/checkproblems") |
| def checkProblems(data:QA4): |
| problems=GetProblems(data.owner,data.msg_type,data.files) |
| return problems |
|
|
|
|
|
|
| |
|
|
|
|
| @app.post("/checkdive") |
| def checkProblems(data:QA4): |
| DIVE=GetDeepDive(data.owner,data.msg_type,data.files) |
| return DIVE |
|
|
|
|
|
|
|
|
|
|
| @app.post("/checkbreakdown") |
| def checkProblems(data:QA4): |
| DIVE=GetBreakdown(data.owner,data.msg_type,files=data.files) |
| return DIVE |
|
|
|
|
|
|
|
|
| @app.post("/upload-files") |
| async def upload_files( |
| files: List[UploadFile] = File(...), |
| owner: Optional[str] = Form(None), |
| filetype:Optional[str]=Form(None) |
| ): |
|
|
|
|
| MAX_FILE_SIZE = 5 * 1024 * 1024 |
| results = [] |
| if len(files) > 2: |
| return {"error":"maximum 2 files allowed"} |
| try: |
| for file in files: |
| contents = await file.read() |
| if len(contents) > MAX_FILE_SIZE: |
| return { |
| "error": f"File '{file.filename}' exceeds 5MB limit", |
| "max_size": "5MB" |
| } |
| file_info = { |
| "filename": file.filename, |
| "content_type": file.content_type, |
| "size": len(contents), |
| "filetype":filetype |
| } |
| if file.content_type == "text/plain": |
| |
| text_content = contents.decode("utf-8") |
| file_info["content"] = text_content |
| elif file.content_type == "application/pdf": |
| |
| try: |
| pdf_file = io.BytesIO(contents) |
| pdf_reader = PdfReader(pdf_file) |
| text_content = "" |
| for page in pdf_reader.pages: |
| text_content += page.extract_text() + "\n" |
| file_info["content"] = text_content |
| file_info["pages"] = len(pdf_reader.pages) |
| except Exception as e: |
| file_info["error"] = f"Failed to read PDF: {str(e)}" |
|
|
| |
| results.append(file_info) |
| coll.update_one( |
| {"owner": owner}, |
| {"$push": {"files": {"$each": results}}} |
| ) |
| |
|
|
| return {"status":True} |
| except Exception as e: |
| return {"status":False} |
|
|
|
|
|
|
|
|
| |
| @app.post("/legalproblems") |
| def LegalProblems(data:QA2): |
| documents=coll.find_one({"owner":data.owner}) |
| print(data) |
| content=[] |
| if documents: |
| |
| checkifalreadypresent=GetProblems(data.owner,"legal",data.files) |
|
|
| |
| if len(checkifalreadypresent["problems"]) !=0: |
| return checkifalreadypresent["problems"] |
| |
| for file in documents["files"]: |
| if file["filename"] in data.files: |
| content_payload=f""" |
| |
| FILENAME :{file["filename"]} |
| CONTENT : {file["content"]} |
| """ |
| content.append(content_payload) |
| problems=LegalKeyPoints(content=content) |
| payload={"type":"legal","problems":problems,"files":data.files} |
| |
| coll.update_one( |
| {"owner": data.owner}, |
| {"$push": {"keypoints": payload}} |
| ) |
|
|
| return {"problems":problems} |
| else: |
|
|
| return {"problems":None} |
| |
|
|
|
|
| @app.post("/legaldeepdive") |
| def LegalDDive(data:QA2): |
| documents=coll.find_one({"owner":data.owner}) |
| content=[] |
| if documents: |
|
|
| checkifalreadypresent=GetDeepDive(data.owner,"legal",data.files) |
|
|
| |
| if len(checkifalreadypresent["dive"]) !=0: |
| return checkifalreadypresent["dive"] |
| |
| for file in documents["files"]: |
| if file["filename"] in data.files: |
| content_payload=f""" |
| |
| FILENAME :{file["filename"]} |
| CONTENT : {file["content"]} |
| """ |
| content.append(content_payload) |
| dive=LegalDeepDive(content=content) |
| payload={"type":"legal","dive":dive,"files":data.files} |
| |
| coll.update_one( |
| {"owner": data.owner}, |
| {"$push": {"deepdive": payload}} |
| ) |
| return {"deepdive":dive} |
| else: |
|
|
| return {"deepdive":None} |
|
|
|
|
|
|
|
|
|
|
|
|
| @app.post("/legalbreakdown") |
| def LegalB(data:QA2): |
| documents=coll.find_one({"owner":data.owner}) |
| print(data) |
| content=[] |
| if documents: |
|
|
| checkifalreadypresent=GetBreakdown(data.owner,"legal",data.files) |
|
|
|
|
| if len(checkifalreadypresent["breakdown"])!=0: |
| return checkifalreadypresent["breakdown"] |
|
|
| for file in documents["files"]: |
| if file["filename"] in data.files: |
| content_payload=f""" |
| |
| FILENAME :{file["filename"]} |
| CONTENT : {file["content"]} |
| """ |
| content.append(content_payload) |
| breakdown=LegalBreakdown(content=content) |
| payload={"type":"legal","breakdown":breakdown,"files":data.files} |
| |
| coll.update_one( |
| {"owner": data.owner}, |
| {"$push": {"breakdown": payload}} |
| ) |
|
|
| return {"problems":breakdown} |
| else: |
|
|
| return {"problems":None} |
|
|
|
|
|
|
|
|
|
|
|
|
| @app.post("/medicalproblems") |
| def MedicalProblems(data:QA2): |
| documents=coll.find_one({"owner":data.owner}) |
| content=[] |
| if documents: |
|
|
| checkifalreadypresent=GetProblems(data.owner,"medical",data.files) |
|
|
| |
| if len(checkifalreadypresent["problems"]) !=0: |
| return checkifalreadypresent["problems"] |
| |
| for file in documents["files"]: |
| if file["filename"] in data.files: |
| content_payload=f""" |
| |
| FILENAME :{file["filename"]} |
| CONTENT : {file["content"]} |
| """ |
| content.append(content_payload) |
| problems=MedicalKeyPoints(content=content) |
| payload={"type":"medical","problems":problems,"files":data.files} |
| |
| coll.update_one( |
| {"owner": data.owner}, |
| {"$push": {"keypoints": payload}} |
| ) |
|
|
| return {"problems":problems} |
| else: |
|
|
| return {"problems":None} |
|
|
|
|
|
|
|
|
| @app.post("/medicaldeepdive") |
| def MedicalDDive(data:QA2): |
| documents=coll.find_one({"owner":data.owner}) |
| content=[] |
| if documents: |
|
|
| checkifalreadypresent=GetDeepDive(data.owner,"medical",data.files) |
|
|
| |
| if len(checkifalreadypresent["dive"]) !=0: |
| return checkifalreadypresent["dive"] |
| |
| for file in documents["files"]: |
| if file["filename"] in data.files: |
| content_payload=f""" |
| |
| FILENAME :{file["filename"]} |
| CONTENT : {file["content"]} |
| """ |
| content.append(content_payload) |
| dive=MedicalDeepDive(content=content) |
| payload={"type":"medical","dive":dive,"files":data.files} |
| |
| coll.update_one( |
| {"owner": data.owner}, |
| {"$push": {"deepdive": payload}} |
| ) |
|
|
| return {"deepdive":dive} |
| else: |
|
|
| return {"deepdive":None} |
|
|
|
|
|
|
|
|
| @app.post("/medicalbreakdown") |
| def MedicalB(data:QA2): |
| documents=coll.find_one({"owner":data.owner}) |
| print(data) |
| content=[] |
| if documents: |
|
|
| checkifalreadypresent=GetBreakdown(data.owner,"medical",data.files) |
|
|
| |
| if len(checkifalreadypresent["breakdown"]) !=0: |
| return checkifalreadypresent["breakdown"] |
|
|
|
|
|
|
| for file in documents["files"]: |
| if file["filename"] in data.files: |
| content_payload=f""" |
| |
| FILENAME :{file["filename"]} |
| CONTENT : {file["content"]} |
| """ |
| content.append(content_payload) |
| breakdown=MedicalBreakdown(content=content) |
| payload={"type":"medical","breakdown":breakdown,"files":data.files} |
| |
| coll.update_one( |
| {"owner": data.owner}, |
| {"$push": {"breakdown": payload}} |
| ) |
|
|
| return {"problems":breakdown} |
| else: |
|
|
| return {"problems":None} |
|
|
|
|
|
|
|
|
|
|
| @app.post("/researchproblems") |
| def ResearchProblems(data:QA2): |
| documents=coll.find_one({"owner":data.owner}) |
| content=[] |
| if documents: |
|
|
| checkifalreadypresent=GetProblems(data.owner,"research",data.files) |
|
|
| |
| if len(checkifalreadypresent["problems"])!=0: |
| return checkifalreadypresent["problems"] |
| |
| for file in documents["files"]: |
| if file["filename"] in data.files: |
| content_payload=f""" |
| |
| FILENAME :{file["filename"]} |
| CONTENT : {file["content"]} |
| """ |
| content.append(content_payload) |
| problems=ResearchKeyPoints(content=content) |
| payload={"type":"research","problems":problems,"files":data.files} |
| |
| coll.update_one( |
| {"owner": data.owner}, |
| {"$push": {"keypoints": payload}} |
| ) |
|
|
| return {"problems":problems} |
| else: |
|
|
| return {"problems":None} |
|
|
|
|
|
|
|
|
| @app.post("/researchbreakdown") |
| def ResearchB(data:QA2): |
| documents=coll.find_one({"owner":data.owner}) |
| print(data) |
| content=[] |
| if documents: |
|
|
|
|
| checkifalreadypresent=GetBreakdown(data.owner,"research",data.files) |
|
|
| |
| if len(checkifalreadypresent["breakdown"]) !=0: |
| return checkifalreadypresent["breakdown"] |
|
|
| for file in documents["files"]: |
| if file["filename"] in data.files: |
| content_payload=f""" |
| |
| FILENAME :{file["filename"]} |
| CONTENT : {file["content"]} |
| """ |
| content.append(content_payload) |
| breakdown=ResearchBreakdown(content=content) |
| payload={"type":"research","breakdown":breakdown,"files":data.files} |
| |
| coll.update_one( |
| {"owner": data.owner}, |
| {"$push": {"breakdown": payload}} |
| ) |
|
|
| return {"problems":breakdown} |
| else: |
|
|
| return {"problems":None} |
|
|
|
|
| @app.post("/researchdeepdive") |
| def ResearchDDive(data:QA2): |
| documents=coll.find_one({"owner":data.owner}) |
| content=[] |
| if documents: |
|
|
|
|
|
|
| checkifalreadypresent=GetDeepDive(data.owner,"research",data.files) |
|
|
| |
| if len(checkifalreadypresent["dive"]) !=0: |
| return checkifalreadypresent["dive"] |
| |
| for file in documents["files"]: |
| if file["filename"] in data.files: |
| content_payload=f""" |
| |
| FILENAME :{file["filename"]} |
| CONTENT : {file["content"]} |
| """ |
| content.append(content_payload) |
| dive=ResearchDeepDive(content=content) |
| payload={"type":"research","dive":dive,"files":data.files} |
| |
| coll.update_one( |
| {"owner": data.owner}, |
| {"$push": {"deepdive": payload}} |
| ) |
|
|
| return {"deepdive":dive} |
| else: |
|
|
| return {"deepdive":None} |
|
|
|
|
|
|
|
|