84 lines
2.7 KiB
Python
84 lines
2.7 KiB
Python
# from fastapi import FastAPI, Form, UploadFile
|
|
# from fastapi.responses import JSONResponse
|
|
# import asyncio
|
|
|
|
# app = FastAPI()
|
|
|
|
# @app.post("/api/text")
|
|
# async def text_query_endpoint(question: str = Form(...)):
|
|
# """
|
|
# API endpoint to process text input with the user's query.
|
|
# """
|
|
# from endpoints.text import text_query
|
|
# return await text_query(question=question)
|
|
|
|
|
|
# @app.post("/api/image")
|
|
# async def image_query_endpoint(file: UploadFile, question: str = Form(...)):
|
|
# """
|
|
# API endpoint to process an image with the user's query.
|
|
# """
|
|
# from endpoints.image import image_query
|
|
# return await image_query(file=file, question=question)
|
|
|
|
|
|
# @app.post("/api/video")
|
|
# async def video_query_endpoint(file: UploadFile, question: str = Form(...)):
|
|
# """
|
|
# API endpoint to process a video file with the user's query.
|
|
# """
|
|
# from endpoints.video import video_query
|
|
# return await video_query(file=file, question=question)
|
|
|
|
|
|
# if __name__ == "__main__":
|
|
# import uvicorn
|
|
# uvicorn.run("main:app", host="0.0.0.0", port=8002, reload=True, loop="uvloop")
|
|
|
|
|
|
from fastapi import FastAPI, Form, UploadFile
|
|
from fastapi.responses import JSONResponse
|
|
import shutil
|
|
import uuid
|
|
from tasks import text_query_task, image_query_task, video_query_task
|
|
|
|
app = FastAPI()
|
|
|
|
# @app.post("/api/text")
|
|
# async def text_query_endpoint(question: str = Form(...)):
|
|
# task = text_query_task.apply_async(args=[question])
|
|
# return JSONResponse({"task_id": task.id})
|
|
|
|
@app.post("/api/text")
|
|
async def text_query_endpoint(question: str = Form(...)):
|
|
print(f"Received request: {question}")
|
|
task = text_query_task.apply_async(args=[question])
|
|
print(f"Task sent: {task.id}")
|
|
return JSONResponse({"task_id": task.id})
|
|
|
|
@app.post("/api/image")
|
|
async def image_query_endpoint(file: UploadFile, question: str = Form(...)):
|
|
file_path = f"/tmp/{uuid.uuid4()}_{file.filename}"
|
|
with open(file_path, "wb") as buffer:
|
|
shutil.copyfileobj(file.file, buffer)
|
|
|
|
task = image_query_task.apply_async(args=[file_path, question])
|
|
return JSONResponse({"task_id": task.id})
|
|
|
|
@app.post("/api/video")
|
|
async def video_query_endpoint(file: UploadFile, question: str = Form(...)):
|
|
file_path = f"/tmp/{uuid.uuid4()}_{file.filename}"
|
|
with open(file_path, "wb") as buffer:
|
|
shutil.copyfileobj(file.file, buffer)
|
|
|
|
task = video_query_task.apply_async(args=[file_path, question])
|
|
return JSONResponse({"task_id": task.id})
|
|
|
|
@app.get("/api/task/{task_id}")
|
|
async def get_task_result(task_id: str):
|
|
from celery.result import AsyncResult
|
|
result = AsyncResult(task_id)
|
|
if result.ready():
|
|
return JSONResponse({"status": "completed", "result": result.result})
|
|
return JSONResponse({"status": "pending"})
|