Spaces:
Runtime error
Runtime error
import streamlit as st | |
def add_back_button(key): | |
def fn(): | |
st.session_state.screen.state = "start" | |
st.button( | |
"Back", help="Get back to the start screen", on_click=fn, key=key | |
) | |
help_md = """# Create a Hugging Face model repository for scikit learn models | |
This page aims to provide a simple interface to use the | |
[`skops`](https://skops.readthedocs.io/) model card and HF Hub creation | |
utilities. | |
Below, we will explain the steps involved to create your own model repository to | |
host your scikit-learn model: | |
1. Prepare the model repository | |
2. Edit the model card | |
3. Create the model repository on Hugging Face Hub | |
## Step 1: Prepare the model repository | |
In this step, you do the necessary preparation work to create a [model | |
repository on Hugging Face Hub](https://huggingface.co/docs/hub/models). | |
### Upload a model | |
Here you should upload the sklearn model we want to present in the model | |
repository. The model should be stored either as a ``pickle`` file or it should | |
use the [secure skops persistence | |
format](https://skops.readthedocs.io/en/stable/persistence.html). Later, this | |
model will be uploaded to the model repository so that you can share it with | |
others. | |
The uploaded model should be a scikit-learn model or a model that is compatible | |
with the sklearn API, e.g. using [XGBoost sklearn | |
wrapper](https://xgboost.readthedocs.io/en/stable/python/python_api.html#module-xgboost.sklearn) | |
when it's an XGBoost model. | |
If you just want to test out the application and don't want to upload a model, a | |
dummy model will be used instead. | |
### Upload input data | |
It's possible to upload input data as a csv file. If that is done, the first few | |
rows of the input data will be used as sample data for the model, e.g. when | |
trying out the [inference API](https://huggingface.co/inference-api). | |
### Choose the task type | |
Choose the type of task that the model is intended to solve. It can be either | |
classification or regression, with input data being either tabular in nature or | |
text. | |
### Requirements | |
This is the list of Python requirements needed to run the model. | |
### Choose the model card template | |
This is the final step and choosing one of the options will bring you to the | |
editing step. | |
#### Create a new skops model card | |
This is the recommended way of getting started. The skops model card template | |
prefills the model card with some [useful | |
contents](https://skops.readthedocs.io/en/stable/model_card.html#model-card-content) | |
that you probably want to have in most model cards. Don't worry: If you don't | |
like part of the content, you can always edit or delete it later. | |
#### Create a new empty model card | |
If you want to start the model card completely from scratch, that's also | |
possible by choosing this option. It will generate a completely empty model card | |
for you that you can fashion to your liking. | |
#### Load existing model card from HF Hub | |
If you want to use an existing model card and edit it, that's also possible. | |
Please enter the Hugging Face Hub repository ID here and the corresponding model | |
card will be loaded. The repo ID is typically someting like `username/reponame`, | |
e.g. `openai/whisper-small`. Some models also omit the user name, e.g. `gpt2`. | |
Note that when you choose an existing model card, a couple of files will be | |
downloaded, because they may be required to render the model card (e.g. images). | |
Therefore, depending on the repository, this step may take a bit. | |
If you notice any problems when rendering the existing model card, please let us | |
know by [creating an issue](https://github.com/skops-dev/skops/issues). | |
## Step 2: Edit the model card | |
Before creating the model repository, it is crucial to ensure that the [model | |
card](https://huggingface.co/blog/model-cards) is edited to best represent the | |
model you're working on. This can be achieved in the editing step, which is | |
described in more detail below. | |
### Editing sidbar | |
In the left sidebar, you will be able to edit the model card, whereas the main | |
screen is reserved for rendering the model card so that you see what you will | |
get. We will start by describing the editing sidebar. | |
Tip: You should increase the width of the side bar if it is too narrow for your | |
taste. | |
#### Undo, redo & reset | |
On top of the side bar, you have the option to undo, redo, and reset the last | |
operation you did. Say, you accidentally made a change, just press the `Undo` | |
button to undo this change. Similarly, if you want to undo your undo operation, | |
press the `Redo` button. Finally, if you press `Reset`, all your operations will | |
be undone (but don't worry if you click the button accidentally, you can redo | |
all of them if you want). | |
#### Save, create repo & delete | |
These buttons are intended for when you finished editing the model card. When | |
you click on `Save`, you will get the option to download the model card as a | |
markdown file. | |
When clicking the `Create Repo` button, you will be taken to the next screen, | |
which offers you to create a model repository on Hugging Face Hub. This step | |
will be explained in more detail further below. | |
Finally, you can click on `Delete` to completely discard all the changes you | |
made and be taken back to the start screen of the app. Be careful, any change | |
you made will be lost. It is thus advised to first save the model card before | |
pressing `Delete`. | |
#### Edit a section | |
Each section has its own form field, which allows you to make edits. Change the | |
name of the section or change the content (or both), then click `Update` to see | |
a preview of your change. As with all other operations, you can undo the change | |
by clicking on `Undo`. | |
#### Delete a section | |
Below the form field for editing the section, you will find a `Delete` button | |
(including the name of the section to make it clear which section it refers to). | |
If you click that button, the whole section, _including its subsections_, will | |
be deleted. Again, click on `Undo` if you accidentally deleted something that | |
you want to keep. | |
#### Add section below | |
If you click on this button, a new subsection wil be created under the current | |
section. This will create a section with a dummy title and dummy content, which | |
you can then edit. | |
Note that this will create a new _subsection_. If there are already existing | |
subsections in the current section, the new subsection will be created _below_ | |
those existing subsections. So the new subsection you create might not appear | |
exactly where you expect it to appear. To illustrate this, assume that we have | |
the following sections and subsections: | |
- Section A | |
- Subsection A.1 | |
- Subsection A.2 | |
- Section B | |
If you create a new section below "Section A", it will be created on the same | |
level, and below of, "Subsection A.2", resulting in the following structure: | |
- Section A | |
- Subsection A.1 | |
- Subsection A.2 | |
- NEW SUBSECTION | |
- Section B | |
If you create a new section below the "Subsection A.1", you will actually create | |
a sub-subsection, resulting in the following structure instead: | |
- Section A | |
- Subsection A.1 | |
- NEW SUB-SUBSECTION | |
- Subsection A.2 | |
- Section B | |
Hopefully, this clarifies things. Unfortunately, there is no possibility (yet) | |
to re-order sections. | |
#### Add figure below | |
This button works quite similarly to adding a new section. The main difference | |
is that instead of having a text area to enter content, you will be asked to | |
upload an image file. By default, a dummy image will be shown in the preview. | |
#### Add metrics (only skops template) | |
If you have chosen the skops template, you will see an additional field called | |
`Add metrics` near the top of the side bar. Here you can choose metrics you want | |
to be shown in the model card, e.g. the accuracy the model achieved on a | |
specific dataset. Please enter one metric per line, with the metric name on the | |
left, then an `=` sign, and the value on the right, e.g. `accuracy on test set = | |
0.85`. | |
After pressing `update`, the metrics will be shown in a table in the section | |
`Model description/Evaluation Results`. You can always add or remove metrics | |
from this field later. If you want to delete this section completely, look for | |
its edit form further below and press `Delete`. There, you can also edit the | |
table in a more fine grained way, e.g. by changing the alignment. | |
If you don't use the skops template and still want to add a table, it is | |
possible to do that, but it's requires a bit more work. Add a new section as | |
described above, then, in the text area, create a table using the [markdown | |
table | |
syntax](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables#creating-a-table). | |
### Model card visualization | |
The main part of the page will show you what the final model card will look | |
like. | |
#### Metadata | |
On the very top, you can see the metadata of the model card (it is collapsed by | |
default). The metadata can be very useful for features on the HF Hub, e.g. | |
allowing other users to find your model by a given tag. | |
Right now, it is not possible to edit the metadata directly from here. But don't | |
worry, once you have created the model card repository, you can easily edit the | |
metadata there. | |
#### Table of Contents | |
For your convenience, a table of contents is also shown at the top (collapsed by | |
default). This is useful if you have a bigger model card and want to see the | |
overview of all its contents. | |
#### Markdown preview | |
Finally, the model card itself is shown. This is how the model card will look | |
like once it is saved as markdown and then rendered. | |
## Step 3: Creating a model repository | |
After you have finished editing the model card, it is time to create a model | |
repository on Hugging Face Hub. Click on `Create Repo` and you will be taken to | |
the final step of the process. | |
### Back & Delete | |
If you find yourself wanting to make more edits to the model card, just click on | |
the `Back` button and you'll be brought back to the editing step. | |
You can also click `Delete`, which will discard all your changes and bring you | |
back to the start page. Be careful: This step cannot be undone and all your | |
progress will be lost. | |
### Files included in the repository | |
For your convenience, this will show a preview of all the files included in the | |
repository, as well as their sizes. Don't create a repository if you see files | |
there that you don't want to be uploaded. | |
### Privacy settings | |
By default, a private repository will be created. If you untick this box, it | |
will be public instead. More information on what that implies can be found in | |
the [docs on repository | |
settings](https://huggingface.co/docs/hub/repositories-settings). | |
### Name of the repository | |
Here you have to enter the name of the repository. Typically, that's something | |
like `username/reponame` or `organame/reponame`. This field is mandatory and you | |
should ensure that the corresponding repository ID does not exist yet. | |
### Enter your Hugging Face token | |
Here you need to paste your Hugging Face token, which is used for | |
authentication. The token can be found [here](https://hf.co/settings/token) and | |
it always starts with "hf_". Entering a token is necessary to create a | |
repository. | |
Note that if you don't already have an account on Hugging Face, you need to | |
create one to get a token. It's free. | |
### Create a new repository | |
Once all the required fields are filled, click on this button to create the | |
repository. Depending on the size, it may take a couple of seconds to finish. | |
Once it is created, you will see a success notification that includes the link | |
to the repository. Congratulations, you're done! | |
## Troubleshooting | |
### Not all skops features available | |
This app is based on the [skops model card | |
feature](https://skops.readthedocs.io/en/stable/model_card.html#model-card-content). | |
However, it does not support all the options that are available there. If you | |
want to use all those options in a programmatic fashion, please follow the link | |
and read up on what it takes to create a model card with skops. The full power | |
of the `Card` class is documented | |
[here](https://skops.readthedocs.io/en/stable/modules/classes.html#skops.card.Card). | |
### Strange behavior | |
If the app behaves strangely, shows error messages, or renders incorrectly, it | |
may be necessary to refresh the browser tab. This will take you back to the | |
start page, with all progress being lost. If you can reproduce that behavior, | |
please [creating an issue](https://github.com/skops-dev/skops/issues) and let us | |
know. | |
### Contact | |
If you want to contact us, you can join our discord channel. To do that, follow | |
[these | |
instructions](https://skops.readthedocs.io/en/stable/community.html#discord). | |
""" | |
def add_help_content(): | |
# This is the exact same text as in the README.md of this space | |
st.markdown(help_md) | |
def help_page(): | |
add_back_button(key="help_get_back") | |
add_help_content() | |
add_back_button(key="help_get_back2") # names must be unique | |