|
import requests |
|
from server_config import server_config |
|
from fastapi import FastAPI |
|
from pydantic import BaseModel |
|
|
|
guruzee = FastAPI() |
|
|
|
|
|
class SingleImageData(BaseModel): |
|
data: str |
|
|
|
|
|
def __analyze_single_image(image_data: str): |
|
""" |
|
Sends the user supplied image with system instructions to GPT-4, returns the |
|
received response in JSON format. |
|
""" |
|
image_data = {"url": f"data:image/jpeg;base64,{image_data}"} |
|
headers = { |
|
"Content-Type": "application/json", |
|
"Authorization": f"Bearer {server_config.OPENAI_KEY}", |
|
} |
|
payload = { |
|
"model": "gpt-4-vision-preview", |
|
"temperature": 0.2, |
|
"messages": [ |
|
{"role": "system", "content": server_config.solver_persona}, |
|
{ |
|
"role": "user", |
|
"content": [ |
|
{"type": "text", "text": server_config.solver_instruction}, |
|
{ |
|
"type": "image_url", |
|
"image_url": image_data, |
|
}, |
|
], |
|
}, |
|
], |
|
"max_tokens": 600, |
|
} |
|
|
|
response = requests.post( |
|
server_config.OPENAI_API_ENDPOINT, headers=headers, json=payload |
|
) |
|
return response.json() |
|
|
|
|
|
@guruzee.post("/solve") |
|
async def solve(image: SingleImageData): |
|
""" |
|
Invokes the OpenAI API passing the raw image bytes and returns the |
|
response to client |
|
""" |
|
output = __analyze_single_image(image.data) |
|
return output["choices"][0]["message"]["content"] |
|
|
|
|
|
@guruzee.get("/health") |
|
async def health(): |
|
return {"Message": "Healthy and kicking!"} |
|
|