Team Ai
Apppublic

GEM/DatasetCardForm

sourceHugging Faceupdated 4y agoView on Hugging Face
9likes
app.py168 linesDownload Raw Back to root
1import json2import re3 4from datetime import datetime5 6import datacards7 8from datacards import (9    considerations_page,10    considerations_summary,11    context_page,12    context_summary,13    curation_page,14    curation_summary,15    gem_page,16    gem_summary,17    overview_page,18    overview_summary,19    results_page,20    results_summary,21)22 23import streamlit as st24 25##################26## streamlit27##################28st.set_page_config(29    page_title="GEM Data Card Input Form",30    page_icon="https://avatars.githubusercontent.com/u/72612128",31    layout="wide",32    initial_sidebar_state="auto",33)34 35page_description = """36# GEM Data Card Input Form37 38This application was designed for GEM.39 40It allows users to fill out all of the information going into the data documentation when submitting a new dataset.41 42Use the left sidebar to navigate:43- "**Dataset at a Glance**" shows selected information and tracks progress44- Each of the "**Section:**" pages opens a form for a specific section of the card45- Go to "**Review and Save**" when you are done to save your data card46 47Please use **markdown** formatting for each field.48"""49 50_N_FIELDS = datacards.considerations.N_FIELDS + \51    datacards.context.N_FIELDS + \52    datacards.curation.N_FIELDS + \53    datacards.gem.N_FIELDS + \54    datacards.overview.N_FIELDS + \55    datacards.results.N_FIELDS56 57def main():58    if "save_state" not in st.session_state:59        st.session_state.save_state = {}60 61    if "card_dict" not in st.session_state:62        st.session_state.card_dict = {}63 64    st.sidebar.markdown(page_description, unsafe_allow_html=True)65    pages = {66        "Dataset at a Glance": glance_page,67        "Section: Dataset Overview": overview_page,68        "Section: Dataset Curation": curation_page,69        "Section: Dataset in GEM": gem_page,70        "Section: Previous Results": results_page,71        "Section: Considerations for Using Data": considerations_page,72        "Section: Broader Social Context": context_page,73        "Review and Save": review_page,74    }75    app_mode = st.sidebar.radio(76        label="Navigation menu:",77        options=list(pages.keys()),78        index=0,79    )80    with st.sidebar.expander("Save or Load your work"):81        # Save intermediary state82        current_date = datetime.now().strftime(83            "%m/%d/%Y, %H:%M:%S"84        )85        friendly_date = re.sub(86            r"[^\w\s]", "_", current_date87        ).replace(" ", "_").replace("__", "_").replace("-", "")88        st.download_button(89            label="Save Intermediary Card State",90            data=json.dumps(st.session_state.get("card_dict", {}), indent=2),91            file_name=f"data_card_{friendly_date}.json",92        )93        # load from file94        uploaded_file = st.file_uploader(95            label=f"Load Intermediary Card State",96        )97        if uploaded_file is not None:98            pre_card_dict = json.load(uploaded_file, encoding="utf-8")99            def save_dict_to_save_state(saved, prefix=None):100                prefix = [] if prefix is None else prefix101                if isinstance(saved, dict):102                    for k, v in saved.items():103                        save_dict_to_save_state(v, prefix + [k])104                else:105                    if not st.session_state.save_state.get("_".join(prefix) + "_filled", False):106                        st.session_state.save_state["_".join(prefix)] = saved107            # TODO: don't overwrite by default108            st.session_state.card_dict = pre_card_dict109            save_dict_to_save_state(st.session_state.card_dict)110            # TODO: delete file after use111    st.markdown("#### GEM Data Card Input Form")112    pages[app_mode]()113 114def glance_page():115    with st.expander("Dataset at a Glance", expanded=True):116        dataset_summary = ""117        dataset_summary += f"- **Dataset Website**: {st.session_state.save_state.get('overview_where_website', '*Go to `Section: Dataset Overview` to fill in*')}\n"118        dataset_summary += f"- **Dataset Contact**: {st.session_state.save_state.get('overview_where_contact-name', '*Go to `Section: Dataset Overview` to fill in*')}\n"119        dataset_summary += f"- **Dataset License**: {st.session_state.save_state.get('overview_languages_license', '*Go to `Section: Dataset Overview` to fill in*')}\n"120        dataset_summary += f"- **Multilingual Dataset**: {st.session_state.save_state.get('overview_languages_is-multilingual', '*Go to `Section: Dataset Overview` to fill in*')}\n"121        dataset_summary += f"- **Dataset Languages**: {st.session_state.save_state.get('overview_languages_language-names', '*Go to `Section: Dataset Overview` to fill in*')}\n"122        dataset_summary += f"- **Dataset Supported Task**: {st.session_state.save_state.get('overview_languages_task',  '*Go to `Section: Dataset Overview` to fill in*')}\n"123        dataset_summary += f"- **Communicative Goal**: {st.session_state.save_state.get('overview_languages_communicative',  '*Go to `Section: Dataset Overview` to fill in*')}\n"124        dataset_summary += f"- **Language Data Origin**: {st.session_state.save_state.get('curation_language_obtained',  '*Go to `Section: Dataset Curation` to fill in*')}\n"125        dataset_summary += f"- **Annotation Data Origin**: {st.session_state.save_state.get('curation_annotations_obtained',  '*Go to `Section: Dataset Curation` to fill in*')}\n"126        dataset_summary += f"- **Likelihood of PII**: {st.session_state.save_state.get('curation_pii_has-pii',  '*Go to `Section: Dataset Curation` to fill in*')}\n"127        st.markdown(dataset_summary + "---\n")128        num_fields = sum([len(dct) for k in st.session_state.get("card_dict", {}) for dct in st.session_state.card_dict.get(k, {}).values()])129        st.markdown(f"You have currently filled out **{num_fields} of {_N_FIELDS} required fields** in the data card.")130    left_col, right_col = st.columns(2)131    with left_col:132        overview_summary()133        curation_summary()134        gem_summary()135    with right_col:136        results_summary()137        considerations_summary()138        context_summary()139 140def review_page():141    dataset_name = st.text_input(142        label="Enter dataset name here",143    )144    if dataset_name != "":145        friendly_name = re.sub(146            r"[^\w\s]", " ", dataset_name.lower()147        ).strip().replace(" ", "_")148        current_date = datetime.now().strftime(149            "%m/%d/%Y, %H:%M:%S"150        )151        friendly_date = re.sub(152            r"[^\w\s]", "_", current_date153        ).replace(" ", "_").replace("__", "_").replace("-", "")154        dataset_file_name = f"{friendly_name}-{friendly_date}.json"155        st.download_button(156            label=f"Download the Dataset Card below as {dataset_file_name}",157            data=json.dumps(st.session_state.get("card_dict", {}), indent=2),158            file_name=dataset_file_name,159        )160    else:161        st.markdown("##### Enter a dataset name above to be able to download the card!")162    st.markdown("---\n")163    st.write(st.session_state.get("card_dict", {}))164    # TODO add buttons to save and download165 166if __name__ == "__main__":167    main()168