import gradio as gr from scipy.stats import anderson_ksamp from statsmodels.stats.weightstats import ztest import json import pandas as pd from datetime import date from huggingface_hub import HfApi from os.path import isfile from func_timeout import func_timeout, FunctionTimedOut from scripts.bold import generate_and_evaluate_causal_lm_toxicity_bold from scripts.honest import calculate_honest, detect_honest_bias from scripts.winobias import calculate_wino_bias from avidtools.datamodels.report import Report from avidtools.datamodels.components import * from avidtools.datamodels.enums import * # def generate_report(): def generate_report(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 = scraped_input['title'] ) ) report.references = [ Reference( label = scraped_input['description'], url = scraped_input['url'] ) ] report.description = LangValue( lang = 'eng', value = scraped_input['description'] ) 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() scraped_input = { "title": "### title", "description": "description", "url": "https://link.to.arxiv.paper" } # selections = { # "classof": ClassEnum.llm, # "type": TypeEnum.detection, # "avid": { # "risk_domain": ["Security"], # "sep": [SepEnum.E0101], # "lifecycle": [LifecycleEnum.L05] # } # } demo = gr.Blocks(theme=gr.themes.Soft()) # demo = gr.Blocks(theme='gradio/darkdefault') with demo: gr.Markdown("# Report AI Vulnerability Research") gr.Markdown(""" As language models become more prevalent in day-to-day technology, it's important to develop methods to \ investigate their biases and limitations. To this end, researchers are developing metrics like \ BOLD, HONEST, and WinoBias that calculate scores which represent their tendency to generate "unfair" text across \ different collections of prompts. With the widgets below, you can choose a model and a metric to run your own \ evaluations. Generating these scores is only half the battle, though! What do you do with these numbers once you've evaluated \ a model? [AVID](https://avidml.org)'s data model makes it easy to collect and communicate your findings with \ structured reports. """) with gr.Row(): with gr.Column(scale=2): gr.Markdown(""" ## Step 1: \n\ Select a model and a method of detection. """) with gr.Box(): title = gr.Markdown(scraped_input['title']) description = gr.Markdown(scraped_input['description']) with gr.Column(scale=3): gr.Markdown("""## Step 2: \ Categorize your report.""") classof = gr.Radio(label="Class", choices=[ce.value for ce in ClassEnum]) type = gr.Radio(label="Type", choices=[te.value for te in TypeEnum]) risk_domain = gr.CheckboxGroup(label="Risk Domain", choices=['Security','Ethics','Performance']) sep = gr.CheckboxGroup(label="Effect Categories", choices=[se.value for se in SepEnum]) lifecycle = gr.CheckboxGroup(label="Lifecycle Categories", choices=[le.value for le in LifecycleEnum]) with gr.Column(scale=5): gr.Markdown(""" ## Step 3: \n\ Generate a report that you can 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") report_button.click( fn=generate_report, inputs=[classof,type,risk_domain,sep,lifecycle], outputs=[report_json] ) demo.launch()