Spaces:
Sleeping
Sleeping
import streamlit as st | |
import time | |
def create_repository_form(): | |
"""Form for creating a new model repository""" | |
st.subheader("Create a New Model Repository") | |
with st.form("create_repo_form"): | |
# Repository name input | |
st.markdown("#### Repository Name") | |
repo_name = st.text_input( | |
"Enter a name for your repository", | |
help="This will be part of the URL: huggingface.co/username/repository-name", | |
placeholder="my-awesome-model", | |
key="repo_name_input", | |
) | |
# Repository visibility | |
st.markdown("#### Repository Visibility") | |
is_private = st.checkbox( | |
"Make repository private", | |
value=False, | |
help="Private repositories are only visible to you and collaborators", | |
) | |
# Repository type | |
st.markdown("#### Repository Type") | |
repo_type = st.selectbox( | |
"Select repository type", | |
options=["model", "dataset", "space"], | |
index=0, | |
help="The type of content you'll be storing in this repository", | |
) | |
# Model tags | |
st.markdown("#### Model Tags") | |
if "client" in st.session_state: | |
available_tags = st.session_state.client.get_model_tags() | |
selected_tags = st.multiselect( | |
"Select tags for your model", | |
options=available_tags, | |
help="Tags help others discover your model", | |
) | |
# Model description | |
st.markdown("#### Description") | |
description = st.text_area( | |
"Provide a brief description of your model", | |
placeholder="This model is designed for...", | |
help="This will appear on your model card and help others understand your model's purpose", | |
) | |
# Submit button | |
submitted = st.form_submit_button("Create Repository", use_container_width=True) | |
if submitted: | |
if not repo_name: | |
st.error("Repository name is required") | |
return False, None | |
# Validate repository name (alphanumeric with hyphens only) | |
if not all(c.isalnum() or c == "-" for c in repo_name): | |
st.error( | |
"Repository name can only contain letters, numbers, and hyphens" | |
) | |
return False, None | |
# Create the repository | |
with st.spinner("Creating repository..."): | |
try: | |
# Format the repo_id with username | |
username = st.session_state.username | |
repo_id = f"{username}/{repo_name}" | |
# Create the repository | |
success, response = st.session_state.client.create_model_repository( | |
repo_name=repo_id, | |
is_private=is_private, | |
exist_ok=False, | |
repo_type=repo_type, | |
) | |
if success: | |
# Create a basic model card with description and tags | |
model_card_content = f"""--- | |
tags: | |
{chr(10).join(['- ' + tag for tag in selected_tags])} | |
--- | |
# {repo_name} | |
{description} | |
## Model description | |
Add more details about your model here. | |
## Intended uses & limitations | |
Describe the intended uses of your model and any limitations. | |
## Training and evaluation data | |
Describe the data you used to train and evaluate your model. | |
## Training procedure | |
Describe the training procedure. | |
## Evaluation results | |
Provide evaluation results. | |
""" | |
# Update the model card | |
card_success, _ = st.session_state.client.update_model_card( | |
repo_id, model_card_content | |
) | |
if card_success: | |
st.success(f"Repository '{repo_id}' created successfully!") | |
# Update the models list | |
time.sleep(1) # Wait briefly for the API to update | |
st.session_state.models = ( | |
st.session_state.client.get_user_models() | |
) | |
return True, repo_id | |
else: | |
st.warning( | |
"Repository created but failed to update model card." | |
) | |
return True, repo_id | |
else: | |
st.error(f"Failed to create repository: {response}") | |
return False, None | |
except Exception as e: | |
st.error(f"Error creating repository: {str(e)}") | |
return False, None | |
return False, None | |