Spaces:
Running
Running
# # install correct gradio version | |
# import os | |
# os.system("pip uninstall -y gradio") | |
# os.system("pip install gradio==3.35.2") | |
import gradio as gr | |
import urllib.request | |
from datetime import date | |
from bs4 import BeautifulSoup | |
from avidtools.datamodels.report import Report | |
from avidtools.datamodels.components import * | |
from avidtools.datamodels.enums import * | |
# def generate_report(): | |
def generate_report(uri,title,abstract,classof,type,risk_domain,sep,lifecycle): | |
# def generate_report(scraped_input, selections): | |
report = Report() | |
# report.affects = Affects( | |
# developer = [], | |
# deployer = ['Hugging Face'], | |
# artifacts = [Artifact( | |
# type = ArtifactTypeEnum.model, | |
# name = model_id | |
# )] | |
# ) | |
report.problemtype = Problemtype( | |
# classof = clas, | |
classof = classof, | |
type = type, | |
description = LangValue( | |
lang = 'eng', | |
value = title | |
) | |
) | |
report.references = [ | |
Reference( | |
label = title, | |
url = uri | |
) | |
] | |
report.description = LangValue( | |
lang = 'eng', | |
value = abstract | |
) | |
report.impact = Impact( | |
avid = AvidTaxonomy( | |
risk_domain = risk_domain, | |
sep_view = sep, | |
lifecycle_view = lifecycle, | |
taxonomy_version = '0.2' | |
) | |
) | |
report.reported_date = date.today() | |
return report.dict() | |
# parses out title and abstract: works only on arxiv or acl | |
def parse_uri(uri): | |
if not uri.startswith("https://arxiv.org") and not uri.startswith("https://aclanthology.org"): | |
raise gr.Error("Please supply an arxiv.org or aclanthology.org link!") | |
try: | |
response = urllib.request.urlopen(uri) | |
html = response.read() | |
doc = BeautifulSoup(html, features="lxml") | |
except: | |
raise gr.Error("Cannot fetch information. Please check the link!") | |
if uri.startswith("https://arxiv.org"): | |
title = doc.find("meta", property="og:title")["content"] | |
abstract = doc.find("meta", property="og:description")["content"].replace("\n", "") | |
else: | |
title = doc.find("meta", property="og:title")["content"] | |
abstract = doc.find("div", {"class": "card-body"}).text[8:].replace("\n", "") | |
return f"### {title}\n", abstract | |
def empty_all_fields(): | |
return None, None, None, None, None, {} | |
demo = gr.Blocks(theme=gr.themes.Soft()) | |
with demo: | |
gr.Markdown("# Report AI Vulnerability Research") | |
gr.Markdown(""" | |
AI Researchers are focusing increasing on evaluating AI models and finding novel failure modes in them. \ | |
With the deluge of AI research coming up, it's really difficult to track and stay updated on recent papers on AI failures.\ | |
[AVID](https://avidml.org) makes it easy to do that. This space demonstrates how you can report an interesting research paper \ | |
(maybe yours!) on LLM vulnerabilities to AVID in a structured manner. | |
""") | |
with gr.Row(): | |
with gr.Column(scale=3): | |
gr.Markdown(""" | |
## Step 1: Paste a link.\n\ | |
(arXiv or ACL Anthology) | |
""") | |
input_uri = gr.Text(label="Link",value="Enter URL") | |
with gr.Column(scale=8): | |
title = gr.Markdown("### ") | |
description = gr.Markdown("") | |
with gr.Row(): | |
with gr.Column(scale=3): | |
gr.Markdown("""## Step 2: Categorize the research.""") | |
classof = gr.Radio(label="Class", choices=[ce.value for ce in ClassEnum]) | |
type = gr.Radio(label="Type", choices=[te.value for te in TypeEnum]) | |
lifecycle = gr.CheckboxGroup(label="Lifecycle Categories", choices=[le.value for le in LifecycleEnum]) | |
risk_domain = gr.CheckboxGroup(label="Risk Domain", choices=['Security','Ethics','Performance']) | |
sep = gr.CheckboxGroup(label="Effect Categories", choices=[se.value for se in SepEnum]) | |
with gr.Column(scale=3): | |
gr.Markdown(""" | |
## Step 3: Generate a report to submit to AVID. | |
The title and abstract get auto-populated from Step 1. The taxonomy categories populate from your selections in Step 2. | |
""") | |
report_button = gr.Button("Generate Report") | |
report_json = gr.Json(label="AVID Report") | |
input_uri.change( | |
fn=empty_all_fields, | |
inputs=[], | |
outputs=[classof,type,risk_domain,sep,lifecycle,report_json] | |
) | |
input_uri.change( | |
fn=parse_uri, | |
inputs=[input_uri], | |
outputs=[title,description] | |
) | |
report_button.click( | |
fn=generate_report, | |
inputs=[input_uri,title,description,classof,type,risk_domain,sep,lifecycle], | |
outputs=[report_json] | |
) | |
demo.launch() | |