Spaces:
Runtime error
Runtime error
| from huggingface_hub import HfApi | |
| import gradio as gr | |
| def clone_collection( | |
| source_slug, dest_namespace, dest_title, token, private=False, exist_ok=False | |
| ): | |
| api = HfApi(token=token) | |
| collection = api.get_collection(source_slug) | |
| if not collection: | |
| raise gr.Error( | |
| f"Collection {source_slug} does not exist or you do not have access to it." | |
| ) | |
| description = f"Copy of {collection.title}" | |
| new_collection = api.create_collection( | |
| dest_title, | |
| namespace=dest_namespace, | |
| exists_ok=exist_ok, | |
| private=private, | |
| description=description, | |
| token=token, | |
| ) | |
| for item in collection.items: | |
| api.add_collection_item( | |
| new_collection.slug, item.item_id, item_type=item.item_type | |
| ) | |
| return f"[Collection]({collection.url}) has been cloned into [new_collection.slug]({new_collection.url})" | |
| title = ( | |
| """<h1 style='text-align: center;'> 🧬 Collection Cloner 🧬</h1>""" | |
| ) | |
| with gr.Blocks() as demo: | |
| gr.HTML(title) | |
| gr.HTML( | |
| """<p style='text-align: center;'> | |
| This space allows you to clone a <a href="https://huggingface.co/docs/hub/collections">Collection</a> from the Hugging Face Hub into your own namespace. | |
| You can then edit the collection to your liking!</p>""" | |
| ) | |
| gr.Markdown("## Authentication") | |
| gr.Markdown( | |
| "Token is required to create a new collection and clone private collections. You can get your token from your [profile page](https://huggingface.co/settings/token)." | |
| ) | |
| with gr.Row(): | |
| token = gr.Textbox( | |
| label="Token", | |
| type="password", | |
| ) | |
| with gr.Column(): | |
| gr.Markdown("## Source Collection") | |
| source_slug = gr.Textbox( | |
| label="Source Collection Slug", placeholder="e.g. username/collection-slug" | |
| ) | |
| gr.Markdown("## Destination Collection info") | |
| dest_namespace = gr.Textbox( | |
| label="Destination Namespace", | |
| interactive=True, | |
| ) | |
| dest_title = gr.Textbox( | |
| label="Destination Title", | |
| ) | |
| with gr.Row(): | |
| private = gr.Checkbox( | |
| False, | |
| label="Make new collection private?", | |
| ) | |
| overwrite = gr.Checkbox( | |
| False, | |
| label="Overwrite any collection with same slug as the destination?", | |
| ) | |
| submit_btn = gr.Button("Clone Collection") | |
| response = gr.Markdown() | |
| submit_btn.click( | |
| clone_collection, | |
| [ | |
| source_slug, | |
| dest_namespace, | |
| dest_title, | |
| token, | |
| private, | |
| overwrite, | |
| ], | |
| response, | |
| ) | |
| demo.launch() | |