File size: 3,346 Bytes
2d5ffb9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import streamlit as st
from persist import persist, load_widget_state
from modelcards import CardData, ModelCard
from huggingface_hub import create_repo


def is_float(value):
    try:
        float(value)
        return True
    except:
        return False

def get_card():
    languages=st.session_state.languages or None
    license=st.session_state.license or None
    library_name = st.session_state.library_name or None
    tags= [x.strip() for x in st.session_state.tags.split(',') if x.strip()]
    tags.append("autogenerated-modelcard")
    datasets= [x.strip() for x in st.session_state.datasets.split(',') if x.strip()] or None
    metrics=st.session_state.metrics or None
    model_name = st.session_state.model_name or None
    model_description = st.session_state.model_description or None
    #Model_details_text = st.session_state.Model_details_text or None
    #Model_how_to = st.session_state.Model_how_to or None
    authors = st.session_state.authors or None
    paper_url = st.session_state.paper_url or None
    github_url = st.session_state.github_url or None
    bibtex_citations = st.session_state.bibtex_citations or None
    emissions = float(st.session_state.emissions) if is_float(st.session_state.emissions) else None  # BUG

    # Handle any warnings...
    do_warn = False
    warning_msg = "Warning: The following fields are required but have not been filled in: "
    if not languages:
        warning_msg += "\n- Languages"
        do_warn = True
    if not license:
        warning_msg += "\n- License"
        do_warn = True
    if do_warn:
        st.error(warning_msg)
        st.stop()

    # Generate and display card
    card_data = CardData(
        language=languages,
        license=license,
        library_name=library_name,
        tags=tags,
        datasets=datasets,
        metrics=metrics,
    )
    if emissions:
        card_data.co2_eq_emissions = {'emissions': emissions}

    card = ModelCard.from_template(
        card_data,
        template_path='template.md',
        model_id=model_name,
        # Template kwargs:
        model_description=model_description,
        license=license,
        authors=authors,
        paper_url=paper_url,
        github_url=github_url,
        bibtex_citations=bibtex_citations,
        emissions=emissions
    )
    return card


def main():

    card = get_card()
    card.save('current_card.md')
    view_raw = st.sidebar.checkbox("View Raw")
    if view_raw:
        st.text(card)
    else:
        st.markdown(card.text, unsafe_allow_html=True)

    with st.sidebar:
        with st.form("Upload to 🤗 Hub"):
            st.markdown("Use a token with write access from [here](https://hf.co/settings/tokens)")
            token = st.text_input("Token", type='password')
            repo_id = st.text_input("Repo ID")
            submit = st.form_submit_button('Upload to 🤗 Hub')

        if submit:
            if len(repo_id.split('/')) == 2:
                repo_url = create_repo(repo_id, exist_ok=True, token=token)
                card.push_to_hub(repo_id, token=token)
                st.success(f"Pushed the card to the repo [here]({repo_url}!")
            else:
                st.error("Repo ID invalid. It should be username/repo-name. For example: nateraw/food")


if __name__ == "__main__":
    load_widget_state()
    main()