Team Ai
Apppublic

GEM/DatasetCardForm

sourceHugging Faceupdated 4y agoView on Hugging Face
9likes
streamlit_utils.py140 linesDownload Raw Back to datacards
1import streamlit as st2 3 4# Streamlit widgets with persistence5def is_filled(key_list):6    state_filled_key = "_".join(key_list) + "_filled"7 8    def on_change_action():9        st.session_state.save_state[state_filled_key] = True10 11    return on_change_action12 13 14def update_card_dict(key_list, use_default=None):15    state_key = "_".join(key_list)16    if st.session_state.save_state.get(state_key + "_filled", False) or use_default:17        card_key = key_list[-1]18        current_dict = st.session_state.card_dict19        for key in key_list[:-1]:20            current_dict = current_dict[key]21        current_dict[card_key] = st.session_state.save_state.get(state_key, use_default)22 23 24def make_multiselect(25    key_list, label, options, format_func=lambda x: x, help="", default=None26):27    key = "_".join(key_list)28    if key in st.session_state:29        st.session_state.save_state[key] = st.session_state[key]30    elif default is not None:31        st.session_state.save_state[key] = default32    res = st.multiselect(33        label=label,34        options=options,35        format_func=format_func,36        key=key,37        default=st.session_state.save_state.get(key, []),38        on_change=is_filled(key_list),39        help=help,40    )41    update_card_dict(key_list)42    return res43 44 45def make_selectbox(46    key_list, label, options, format_func=lambda x: x, help="", index=None47):48    key = "_".join(key_list)49    if key in st.session_state:50        st.session_state.save_state[key] = st.session_state[key]51    elif index is not None:52        st.session_state.save_state[key] = options[index]53    res = st.selectbox(54        label=label,55        options=options,56        format_func=format_func,57        key=key,58        index=options.index(59            st.session_state.save_state.get(key, options[0])60        ),  # if st.session_state.save_state.get(key, options[0]) in options else 0,61        on_change=is_filled(key_list),62        help=help,63    )64    update_card_dict(65        key_list, use_default=st.session_state.save_state.get(key, options[0])66    )  # use the default value even without interactions67    return res68 69 70def make_radio(key_list, label, options, format_func=lambda x: x, help="", index=None):71    key = "_".join(key_list)72    if key in st.session_state:73        st.session_state.save_state[key] = st.session_state[key]74    elif index is not None:75        st.session_state.save_state[key] = options[index]76    res = st.radio(77        label=label,78        options=options,79        format_func=format_func,80        key=key,81        index=options.index(st.session_state.save_state.get(key, options[0])),82        on_change=is_filled(key_list),83        help=help,84    )85    update_card_dict(86        key_list, use_default=st.session_state.save_state.get(key, options[0])87    )  # use the default value even without interactions88    return res89 90 91def make_text_input(key_list, label, help="", value=None):92    key = "_".join(key_list)93    if key in st.session_state:94        st.session_state.save_state[key] = st.session_state[key]95    elif value is not None:96        st.session_state.save_state[key] = value97    res = st.text_input(98        label=label,99        key=key,100        value=st.session_state.save_state.get(key, ""),101        on_change=is_filled(key_list),102        help=help,103    )104    update_card_dict(key_list)105    return res106 107 108def make_text_area(key_list, label, help="", value=None):109    key = "_".join(key_list)110    if key in st.session_state:111        st.session_state.save_state[key] = st.session_state[key]112    elif value is not None:113        st.session_state.save_state[key] = value114    res = st.text_area(115        label=label,116        key=key,117        value=st.session_state.save_state.get(key, ""),118        on_change=is_filled(key_list),119        help=help,120    )121    update_card_dict(key_list)122    return res123 124 125def make_checkbox(key_list, label, help="", value=None):126    key = "_".join(key_list)127    if key in st.session_state:128        st.session_state.save_state[key] = st.session_state[key]129    elif value is not None:130        st.session_state.save_state[key] = value131    res = st.checkbox(132        label=label,133        key=key,134        value=st.session_state.save_state.get(key, False),135        on_change=is_filled(key_list),136        help=help,137    )138    update_card_dict(key_list)139    return res140