verifiability / app.py
prakharg24's picture
Update app.py
41097c4 verified
import streamlit as st
st.set_page_config(layout="wide")
margin1, center, margin2 = st.columns([1,9,1])
with center:
st.title("AI Model Fairness Auditing")
# --------------------------------------------------
# Strategy Definitions
# --------------------------------------------------
model_owner_actions = {
"Overfit to One Audit Dataset": "overfit",
"Overfit to Audit Dataset-like Distributions": "overfitdist",
}
auditor_actions = {
"Audit with One Dataset": "auditone",
"Audit with Multiple Datasets": "auditmany",
"Use Private Auditing Datasets": "private",
"Audit Model Internals": "internals",
}
# --------------------------------------------------
# Session State
# --------------------------------------------------
if "owner_selected" not in st.session_state:
st.session_state.owner_selected = []
if "auditor_selected" not in st.session_state:
st.session_state.auditor_selected = []
# --------------------------------------------------
# Toggle Functions
# --------------------------------------------------
def toggle_owner(action):
if action in st.session_state.owner_selected:
st.session_state.owner_selected.remove(action)
else:
st.session_state.owner_selected.append(action)
def toggle_auditor(action):
if action in st.session_state.auditor_selected:
st.session_state.auditor_selected.remove(action)
else:
st.session_state.auditor_selected.append(action)
# --------------------------------------------------
# Layout
# --------------------------------------------------
# left, right = st.columns(2)
margin1, left, gap, right, margin2 = st.columns([1,4,1,4,1])
# --------------------------------------------------
# Model Owner
# --------------------------------------------------
with left:
st.subheader("Model Owner")
st.caption("Chosen")
with st.container(border=True):
if not st.session_state.owner_selected:
st.write("None")
for action in st.session_state.owner_selected:
st.button(
action,
key=f"owner_selected_{action}",
on_click=toggle_owner,
args=(action,),
use_container_width=True,
type="primary"
)
st.caption("Available")
with st.container(border=True):
for action in model_owner_actions:
if action not in st.session_state.owner_selected:
st.button(
action,
key=f"owner_available_{action}",
on_click=toggle_owner,
args=(action,),
use_container_width=True,
type="tertiary"
)
# --------------------------------------------------
# Auditor
# --------------------------------------------------
with right:
st.subheader("Auditor")
st.caption("Chosen")
with st.container(border=True):
if not st.session_state.auditor_selected:
st.write("None")
for action in st.session_state.auditor_selected:
st.button(
action,
key=f"auditor_selected_{action}",
on_click=toggle_auditor,
args=(action,),
use_container_width=True,
type="primary"
)
st.caption("Available")
with st.container(border=True):
for action in auditor_actions:
if action not in st.session_state.auditor_selected:
st.button(
action,
key=f"auditor_available_{action}",
on_click=toggle_auditor,
args=(action,),
use_container_width=True,
type="tertiary"
)
# --------------------------------------------------
# Score Calculation
# --------------------------------------------------
auditor_active_list = []
for action in st.session_state.auditor_selected:
auditor_active_list.append(auditor_actions[action])
owner_active_list = []
for action in st.session_state.owner_selected:
owner_active_list.append(model_owner_actions[action])
auditor_cost = "🟢 Low"
if "auditmany" in auditor_active_list:
auditor_cost = "🟡 Medium"
if "internals" in auditor_active_list:
auditor_cost = "🔴 Very High"
owner_cost = "None"
if "overfit" in owner_active_list:
owner_cost = "🟢 Low"
if "overfitdist" in owner_active_list:
owner_cost = "🟡 Medium"
reliability = "❌ Low"
if "auditone" in auditor_active_list and len(owner_active_list)==0:
reliability = "⚠️ Medium"
if "auditmany" in auditor_active_list and len(owner_active_list)==0:
reliability = "✅ High"
if "auditmany" in auditor_active_list and "overfit" in owner_active_list:
reliability = "⚠️ Medium"
if "private" in auditor_active_list and "overfitdist" not in owner_active_list:
reliability = "⚠️ Medium"
if "private" in auditor_active_list and "auditmany" in auditor_active_list and "overfitdist" not in owner_active_list:
reliability = "✅ High"
if "private" in auditor_active_list and "auditmany" in auditor_active_list and "overfitdist" in owner_active_list:
reliability = "⚠️ Medium"
if "internals" in auditor_active_list:
reliability = "✅ High"
openness = "None"
if "internals" in auditor_active_list:
openness = "🔍 High (Model Weight Sharing)"
if len(auditor_active_list)==0 and len(owner_active_list)==0:
auditor_cost, owner_cost, reliability, openness = "N/A", "N/A", "N/A", "N/A"
# --------------------------------------------------
# Dashboard
# --------------------------------------------------
st.divider()
margin1, c1, c2, c3, c4, margin2 = st.columns([1,2.25,2.25,2.25,2.25,1])
with c1:
st.write("**Auditing Cost**")
st.write(auditor_cost)
with c2:
st.write("**Cost to Cheat for Model Owner**")
st.write(owner_cost)
with c3:
st.write("**Audit Reliability**")
st.write(reliability)
with c4:
st.write("**Openness Requirements**")
st.write(openness)