minerva / app.py
Diego Carpintero
reset team after predict
07f569f
raw
history blame
1.76 kB
from PIL import Image
import gradio as gr
from minerva import Minerva
from formatter import AutoGenFormatter
title = "Minerva: AI Guardian for Scam Protection"
description = """
Built with AutoGen 0.4.0 and OpenAI. </br>
Analysis might take up to 30s. </br>
https://github.com/dcarpintero/minerva
"""
inputs = gr.components.Image()
outputs = [
gr.components.Textbox(label="Analysis Result"),
gr.HTML(label="Agentic Workflow (Streaming)")
]
examples = "samples"
model = Minerva()
formatter = AutoGenFormatter()
def to_html(texts):
formatted_html = ''
for text in texts:
formatted_html += text.replace('\n', '<br>') + '<br>'
return f'<pre>{formatted_html}</pre>'
async def predict(img):
try:
img = Image.fromarray(img)
stream = await model.analyze(img)
streams = []
messages = []
async for s in stream:
msg = await formatter.to_output(s)
streams.append(s)
messages.append(msg)
yield ["", to_html(messages)]
if streams[-1]:
prediction = streams[-1].messages[-1].content
else:
prediction = "No analysis available. Try again later."
await model.reset()
yield [prediction, to_html(messages)]
except Exception as e:
print(e)
yield ["Error during analysis. Try again later.", ""]
with gr.Blocks() as demo:
with gr.Tab("Minerva: AI Guardian for Scam Protection"):
gr.Interface(
fn=predict,
inputs=inputs,
outputs=outputs,
examples=examples,
description=description,
).queue(default_concurrency_limit=5)
demo.launch()