Spaces:
Running
Running
| 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() |