SwarmAudit / app /ui /gradio_app.py
Pranoy Mukherjee
Add Gradio UI polish and Spaces entrypoint
3bc3287
import os
import gradio as gr
from app.agents.graph import AuditGraph
from app.schemas import AuditReport
from app.services.report_formatter import format_report_markdown
EXAMPLE_REPOS = {
"Requests": "https://github.com/psf/requests",
"ItsDangerous": "https://github.com/pallets/itsdangerous",
"Flask": "https://github.com/pallets/flask",
}
async def analyze_repo(repo_url: str):
if not repo_url.strip():
yield "Paste a public GitHub repository URL to start.", ""
return
progress: list[str] = []
report_markdown = ""
try:
async for event in AuditGraph().run_with_progress(repo_url.strip()):
if isinstance(event, AuditReport):
report_markdown = format_report_markdown(event)
else:
progress.append(event)
yield "\n".join(progress), report_markdown
except Exception as exc:
progress.append(f"Audit failed: {exc}")
yield "\n".join(progress), report_markdown
def choose_example(example_name: str) -> str:
return EXAMPLE_REPOS.get(example_name, "")
def build_app() -> gr.Blocks:
with gr.Blocks(title="SwarmAudit") as demo:
gr.Markdown(
"# SwarmAudit\n"
"Paste a public GitHub URL and get a structured multi-agent audit report."
)
with gr.Row():
repo_url = gr.Textbox(
label="GitHub Repository URL",
placeholder="https://github.com/owner/repo",
scale=4,
)
analyze = gr.Button("Analyze", variant="primary", scale=1)
example = gr.Dropdown(
label="Example repos",
choices=list(EXAMPLE_REPOS.keys()),
value=None,
interactive=True,
)
example.change(choose_example, inputs=example, outputs=repo_url)
with gr.Row():
progress_output = gr.Textbox(
label="Agent Progress",
lines=10,
interactive=False,
)
report_output = gr.Markdown(label="Audit Report")
analyze.click(analyze_repo, inputs=repo_url, outputs=[progress_output, report_output])
return demo
def launch_app() -> None:
server_name = os.getenv("GRADIO_SERVER_NAME", "0.0.0.0")
server_port = int(os.getenv("PORT", os.getenv("GRADIO_SERVER_PORT", "7860")))
build_app().queue().launch(server_name=server_name, server_port=server_port)
if __name__ == "__main__":
launch_app()