From cb1294bd4d0d4293bc0473db246dbf5e1374be72 Mon Sep 17 00:00:00 2001 From: kar Date: Mon, 21 Apr 2025 17:01:59 +0530 Subject: [PATCH] query --- app (1).py | 33 +++++++++++++++++++++++++++++++++ app.py | 36 ++++++++++++++++++++++++++++++------ 2 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 app (1).py diff --git a/app (1).py b/app (1).py new file mode 100644 index 0000000..76aa557 --- /dev/null +++ b/app (1).py @@ -0,0 +1,33 @@ +import os +from dotenv import load_dotenv +from fastapi import FastAPI, File, UploadFile, Form +from fastapi.responses import JSONResponse +from PIL import Image +import moondream as md +import io + +# Load environment variables +load_dotenv() +api_key = os.getenv("MOON_DREAM_KEY") + +# Initialize Moondream model +model = md.vl(api_key=api_key) + +# FastAPI app +app = FastAPI() + +@app.post("/caption") +async def generate_caption( + image: UploadFile = File(...), + length: str = Form("short") +): + try: + # Read the uploaded image + image_bytes = await image.read() + img = Image.open(io.BytesIO(image_bytes)) + + # Generate caption + response = model.caption(img, length=length) + return JSONResponse(content={"caption": response["caption"]}) + except Exception as e: + return JSONResponse(status_code=500, content={"error": str(e)}) diff --git a/app.py b/app.py index 76aa557..9936cd2 100644 --- a/app.py +++ b/app.py @@ -1,10 +1,10 @@ import os +import io from dotenv import load_dotenv -from fastapi import FastAPI, File, UploadFile, Form -from fastapi.responses import JSONResponse +from fastapi import FastAPI, File, UploadFile, Form, Query +from fastapi.responses import JSONResponse, StreamingResponse from PIL import Image import moondream as md -import io # Load environment variables load_dotenv() @@ -22,12 +22,36 @@ async def generate_caption( length: str = Form("short") ): try: - # Read the uploaded image image_bytes = await image.read() img = Image.open(io.BytesIO(image_bytes)) - - # Generate caption response = model.caption(img, length=length) return JSONResponse(content={"caption": response["caption"]}) except Exception as e: return JSONResponse(status_code=500, content={"error": str(e)}) + +@app.post("/query") +async def query_image( + image: UploadFile = File(...), + question: str = Form(...), + stream: bool = Form(False) +): + try: + image_bytes = await image.read() + img = Image.open(io.BytesIO(image_bytes)) + + if stream: + def generate(): + result = model.query(img, question, stream=True) + for chunk in result["chunk"]: + yield chunk + + return StreamingResponse(generate(), media_type="text/plain") + else: + result = model.query(img, question) + return JSONResponse(content={ + "answer": result["answer"], + "request_id": result["request_id"] + }) + + except Exception as e: + return JSONResponse(status_code=500, content={"error": str(e)})