test-api / app.py
LalitMahale
modified
3b0a769
raw
history blame
4.33 kB
from fastapi import FastAPI, HTTPException,UploadFile,File,Request
from pydantic import BaseModel
from deep_translator import GoogleTranslator
from fastapi.responses import JSONResponse
from fastapi.middleware.cors import CORSMiddleware
import os
# from main import process,audio_process
from dotenv import load_dotenv
import base64
from pathlib import Path
from process import Response
import uuid
load_dotenv()
# Create the FastAPI app instance
os.makedirs("/tmp/huggingface_cache", exist_ok=True)
os.environ["HF_HOME"] = "/tmp/huggingface_cache"
app = FastAPI()
# Allow all CORS (for local testing)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
uploaded_docs = {}
class UploadRequest(BaseModel):
filename: str
filedata: str
class ChatRequest(BaseModel):
session_id: str
message: str
class ChatBot(BaseModel):
text :str
token:str
# Root endpoint
@app.get("/")
async def home():
return {"message": "Test ok"}
# Token verification function
def verify_token(token: str):
print("token: ",token)
if token != os.getenv("TOKEN"):
raise HTTPException(status_code=401, detail="Token not matched")
# Translate endpoint that accepts a query parameter 'text'
# @app.get("/translate")
# async def translate(text: str = "", token: str = ""):
# if not text or not token:
# raise HTTPException(status_code=400, detail="No text or token provided")
# verify_token(token)
# translator = GoogleTranslator(source="auto", target="mr")
# result = translator.translate(text)
# return {"result": result}
@app.post("/chatbot")
async def chatbot(req:ChatBot):
query = req.text
token = req.token
print("query : ",query)
if not query or not token:
raise HTTPException(status_code=400, detail="No text provided")
verify_token(token=token)
res = Response().chatbot(query=query)
return {"result":res}
# @app.get("/chatbot")
# async def chatbot(text: str = "", token: str = ""):
# if not text or not token:
# raise HTTPException(status_code=400, detail="No text provided")
# verify_token(token)
# print("User_input :- ",text)
# result = process(user_query=text)
# return {"result": result}
@app.post("/audio_chat")
async def audio_chat(audio: UploadFile = File(...), token: str = ""):
if not audio or not token:
raise HTTPException(status_code=400, detail="No audio file provided")
verify_token(token)
try:
result = audio_process(audio.file) # Replace with actual audio processing logic
return {"result": result}
except Exception as e:
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
# Request model
class FileUploadRequest(BaseModel):
filename: str
content_type: str
base64_file: str
UPLOAD_DIR = "/tmp/uploads"
Path(UPLOAD_DIR).mkdir(parents=True, exist_ok=True)
@app.post("/summarizer")
async def upload_base64(file_data: FileUploadRequest):
try:
print(file_data.filename)
file_path = os.path.join(UPLOAD_DIR, file_data.filename)
with open(file_path, "wb") as f:
f.write(base64.b64decode(file_data.base64_file))
extracted_text = f"Saved file: {file_path}\nContent-Type: {file_data.content_type}\n"
extracted_text += f"(First 100 bytes shown)\n\n"
with open(file_path, "rb") as f:
extracted_text += repr(f.read(100))
return {"text": "api under development"}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.post("/upload")
async def upload_file(req: UploadRequest):
session_id = str(uuid.uuid4())
decoded_data = base64.b64decode(req.filedata)
# Save to disk or memory (or pass to RAG pipeline)
uploaded_docs[session_id] = decoded_data
print(session_id)
return {"success": True, "session_id": session_id}
@app.post("/chat")
async def chat(req: ChatRequest):
pdf_data = uploaded_docs.get(req.session_id)
if not pdf_data:
return {"reply": "Session not found."}
# TODO: RAG logic here (e.g., extract text, run through embedding + LLM)
dummy_answer = f" Nice Mocked answer for: '{req.message}'"
return {"reply": dummy_answer}