x / app.py
gojossatoru's picture
Update app.py
63afc5d verified
raw
history blame
No virus
3.02 kB
from fastapi import FastAPI, UploadFile, File, HTTPException
from fastapi.responses import JSONResponse, PlainTextResponse
from pyngrok import ngrok
import base64
import requests
from io import BytesIO
from PIL import Image
import gradio as gr
app = FastAPI()
API_URL = "https://api.hyperbolic.xyz/v1/chat/completions"
API_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJnb2pvNzk0ODRAZ21haWwuY29tIn0.J4bPeGA4-6tHXYNz1FHi9WSJ0gY_7MW2E9m28aGBh6g"
@app.post("/upload-image/")
async def upload_image(file: UploadFile = File(...)):
try:
# Read and convert the image to base64
img = Image.open(BytesIO(await file.read()))
buffered = BytesIO()
img.save(buffered, format="PNG") # Save in PNG format
encoded_string = base64.b64encode(buffered.getvalue()).decode("utf-8")
# Send request to the API
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}",
}
payload = {
"messages": [
{
"role": "user",
"content": [
{"type": "text", "text": "Toplam ödeme tutarı ne kadardır?"},
{
"type": "image_url",
"image_url": {"url": f"data:image/png;base64,{encoded_string}"},
},
],
}
],
"model": "Qwen/Qwen2-VL-72B-Instruct",
"max_tokens": 2048,
"temperature": 0.7,
"top_p": 0.9,
}
response = requests.post(API_URL, headers=headers, json=payload)
if response.status_code == 200:
content = response.json()["choices"][0]["message"]["content"]
return PlainTextResponse(content) # Return as plain text
else:
return JSONResponse(content={"error": response.json()}, status_code=response.status_code)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
def process_image(image):
# Convert the Gradio image input to a format suitable for FastAPI
buffered = BytesIO()
image.save(buffered, format="PNG")
buffered.seek(0)
# Create an UploadFile-like object
file_like = UploadFile(
filename="image.png",
file=buffered,
content_type="image/png"
)
return upload_image(file_like)
# Gradio interface
gr_interface = gr.Interface(
fn=process_image,
inputs=gr.Image(type="pil"), # Updated to use gr.Image
outputs="text",
title="Image Upload",
description="Upload an image to get information about the payment amount."
)
if __name__ == "__main__":
ngrok.set_auth_token("2m46ThDvL9VaQVxeVKs47yt9VRb_66BX7RzbfnQwWUj1cQeoV")
public_url = ngrok.connect(8000)
print(f"Ngrok URL: {public_url}")
# Launch Gradio app
gr_interface.launch(share=True)
# Start FastAPI
import uvicorn
uvicorn.run(app, port=8000)