Committee / app.py
elfsong
Update
987f2a7
raw
history blame
No virus
2.31 kB
import streamlit as st
from src.caller import OpenAI_Caller
from src.committee import Committee
from datasets import load_dataset
st.image('./img/meeting.psd')
st.header("Committee")
domains = st.multiselect(
"Let's nominate committee members!",
["Age", "Disability Status", "Gender Identity", "Nationality", "Physical Appearance", "Race Ethnicity", "Religion", "Socioeconomic Status", "Sexual Orientation"],
["Age", "Nationality", "Religion"])
with st.spinner('Initializing committee members...'):
committee_dict = {
"chair": {
"model_caller": OpenAI_Caller('gpt-4-1106-preview')
},
"member": [
{"bias_type": domain, "model_caller": OpenAI_Caller('gpt-4-1106-preview')} for domain in domains
]
}
with st.spinner('Initializing the committee...'):
committee = Committee(committee_dict=committee_dict)
with st.spinner('Loding the BBQ datasets...'):
dataset = load_dataset("Elfsong/BBQ")
category = st.selectbox("Which category you are going to deliberate?", dataset.keys())
# instance_id = st.number_input("Ok, which one?", min_value=0, max_value=len(dataset[category]))
raw_instance = dataset[category][0]
instance = {
"context": raw_instance['context'],
"question": raw_instance['question'],
"ans0": raw_instance['ans0'],
"ans1": raw_instance['ans1'],
"ans2": raw_instance['ans2'],
}
instance = st.data_editor(instance)
# Propose
st.header("Propose")
proposals = list()
for member in committee.members:
with st.spinner(f'Member who concerns {member.bias_type} is proposing...'):
proposal = member.propose(instance)
st.subheader(f"Proposal from Member who concerns [{member.bias_type}]:")
st.markdown(proposal)
proposals += [proposal]
# Craft Motion
st.header("Motion")
with st.spinner(f'Chair is crafting a motion...'):
motion = committee.chair.craft_motion(proposals, instance)
st.subheader(f"Motion from the Chair:")
st.markdown(motion)
# Vote
st.header("Vote")
for member in committee.members:
with st.spinner(f'Member who concerns {member.bias_type} is voting...'):
vote_result = member.vote(motion, instance)
st.subheader(f"Member who concerns [{member.bias_type}] votes:")
st.markdown(vote_result)
st.balloons