plot-explainer / app.py
pgurazada1's picture
Update app.py
2c30d89 verified
raw
history blame
2.2 kB
import os
import base64
import gradio as gr
from openai import AzureOpenAI
def generate_data_uri(png_file_path):
with open(png_file_path, 'rb') as image_file:
image_data = image_file.read()
# Encode the binary image data to base64
base64_encoded_data = base64.b64encode(image_data).decode('utf-8')
# Construct the data URI
data_uri = f"data:image/png;base64,{base64_encoded_data}"
return data_uri
def decision(png_file_path, client, lmm: str) -> str:
image_data = generate_data_uri(png_file_path)
system_message = """
You are an expert in describing images and plots presented in company annual reports.
For plots, ensure that you describe the plot and also the key trends/findings observed in the plot.
Be detailed in your exposition.
"""
decision_prompt = [
{
'role': 'system',
'content': system_message
},
{
'role': 'user',
'content': [
{"type": "image_url", "image_url": {"url": image_data}}
]
}
]
try:
response = client.chat.completions.create(
model=lmm,
messages=decision_prompt,
temperature=0
)
decision = response.choices[0].message.content
decision = decision.replace('```json\n', '')
decision = decision.replace('```', '')
except Exception as e:
decision = e
return decision
def predict(image):
lmm = "gpt-4o-mini"
client = AzureOpenAI(
api_key = os.environ["AZURE_OPENAI_KEY"],
azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"],
api_version = "2024-02-01"
)
verdict = decision(image, client, lmm)
return verdict
demo = gr.Interface(
fn=predict,
inputs=gr.Image(type="filepath", label="Upload your image"),
outputs=gr.Text(label="Verdict"),
title="Plot Explainer",
description="This web API presents an interface to explain plots in detail.",
examples='images',
cache_examples=False,
theme=gr.themes.Base(),
concurrency_limit=16
)
demo.queue()
demo.launch(auth=("demouser", os.getenv('PASSWD')))