|
import gradio as gr |
|
from huggingface_hub import ModelCard |
|
|
|
from compliance_checks import ( |
|
ComplianceSuite, |
|
ComplianceCheck, |
|
ModelProviderIdentityCheck, |
|
IntendedPurposeCheck, |
|
GeneralLimitationsCheck, |
|
ComputationalRequirementsCheck, |
|
) |
|
|
|
from bloom_card import bloom_card |
|
|
|
checks = [ |
|
ModelProviderIdentityCheck(), |
|
IntendedPurposeCheck(), |
|
GeneralLimitationsCheck(), |
|
ComputationalRequirementsCheck(), |
|
] |
|
suite = ComplianceSuite(checks=checks) |
|
|
|
|
|
def status_emoji(status: bool): |
|
return "β
" if status else "π" |
|
|
|
|
|
def run_compliance_check(model_card: str): |
|
results = suite.run(model_card) |
|
|
|
return [ |
|
*[gr.Accordion.update(label=f"{r.name} - {status_emoji(r.status)}") for r in results], |
|
*[gr.Markdown.update(value=r.to_string()) for r in results], |
|
] |
|
|
|
|
|
def fetch_and_run_compliance_check(model_id: str): |
|
model_card = ModelCard.load(repo_id_or_path=model_id).content |
|
return run_compliance_check(model_card=model_card) |
|
|
|
|
|
def compliance_result(compliance_check: ComplianceCheck): |
|
accordion = gr.Accordion(label=f"{compliance_check.name}", open=False) |
|
with accordion: |
|
description = gr.Markdown("Run an evaluation to see results...") |
|
|
|
return accordion, description |
|
|
|
|
|
with gr.Blocks(css="#reverse-row { flex-direction: row-reverse; }") as demo: |
|
gr.Markdown("""\ |
|
# Model Card Validator |
|
Following Article 13 of the EU AI Act |
|
""") |
|
|
|
with gr.Row(elem_id="reverse-row"): |
|
with gr.Tab(label="Results"): |
|
with gr.Column(): |
|
compliance_results = [compliance_result(c) for c in suite.checks] |
|
compliance_accordions = [c[0] for c in compliance_results] |
|
compliance_descriptions = [c[1] for c in compliance_results] |
|
|
|
with gr.Column(): |
|
with gr.Tab(label="Markdown"): |
|
model_card_box = gr.TextArea() |
|
populate_sample_card = gr.Button(value="Populate Sample") |
|
submit_markdown = gr.Button() |
|
with gr.Tab(label="Search for Model"): |
|
model_id_search = gr.Text() |
|
submit_model_search = gr.Button() |
|
gr.Examples( |
|
examples=["society-ethics/model-card-webhook-test"], |
|
inputs=[model_id_search], |
|
outputs=[*compliance_accordions, *compliance_descriptions], |
|
fn=fetch_and_run_compliance_check, |
|
|
|
) |
|
|
|
submit_markdown.click( |
|
fn=run_compliance_check, |
|
inputs=[model_card_box], |
|
outputs=[*compliance_accordions, *compliance_descriptions] |
|
) |
|
|
|
submit_model_search.click( |
|
fn=fetch_and_run_compliance_check, |
|
inputs=[model_id_search], |
|
outputs=[*compliance_accordions, *compliance_descriptions] |
|
) |
|
|
|
populate_sample_card.click( |
|
fn=lambda: bloom_card, |
|
inputs=[], |
|
outputs=[model_card_box] |
|
) |
|
|
|
demo.launch() |
|
|