收藏
收藏是 Hub 上相关项目(模型、数据集、空间、论文)的集合,它们在同一页面上组织在一起。收藏对创建自己的作品集、按类别收藏内容或展示您想要分享的精选项目列表很有用。查看此 指南,更详细地了解什么是收藏以及它们在 Hub 上的显示方式。
您可以在浏览器中直接管理收藏,但本指南将重点介绍如何在代码中管理它。
获取收藏
使用 get_collection() 获取您的收藏或任何公开收藏。您必须拥有收藏的slug才能检索收藏。slug 是基于标题和唯一 ID 的收藏标识符。您可以在收藏页面 URL 中找到 slug。
让我们获取收藏,"TheBloke/recent-models-64f9a55bb3115b4f513ec026"
>>> from huggingface_hub import get_collection
>>> collection = get_collection("TheBloke/recent-models-64f9a55bb3115b4f513ec026")
>>> collection
Collection(
slug='TheBloke/recent-models-64f9a55bb3115b4f513ec026',
title='Recent models',
owner='TheBloke',
items=[...],
last_updated=datetime.datetime(2023, 10, 2, 22, 56, 48, 632000, tzinfo=datetime.timezone.utc),
position=1,
private=False,
theme='green',
upvotes=90,
description="Models I've recently quantized. Please note that currently this list has to be updated manually, and therefore is not guaranteed to be up-to-date."
)
>>> collection.items[0]
CollectionItem(
item_object_id='651446103cd773a050bf64c2',
item_id='TheBloke/U-Amethyst-20B-AWQ',
item_type='model',
position=88,
note=None
)
Collection 对象由 get_collection() 返回,包含
- 高级元数据:
slug
、owner
、title
、description
等。 - 一个 CollectionItem 对象列表;每个项目代表一个模型、数据集、空间或论文。
所有收藏项目都保证具有
- 一个唯一的
item_object_id
:这是收藏项目在数据库中的 ID - 一个
item_id
:这是 Hub 上基础项目的 ID(模型、数据集、空间、论文);它不一定是唯一的,只有item_id
/item_type
对是唯一的 - 一个
item_type
:模型、数据集、空间、论文 - 项目在收藏中的
position
,可以更新以重新组织您的收藏(请参阅下面的 update_collection_item())。
一个 note
也可以附加到项目中。这对于添加有关项目的附加信息(评论、博客文章链接等)很有用。如果项目没有注释,则该属性的值仍为 None
。
除了这些基本属性之外,返回的项目可能会根据其类型具有其他属性:author
、private
、lastModified
、gated
、title
、likes
、upvotes
等。无法保证返回所有这些属性。
列出收藏
我们也可以使用 list_collections() 来检索收藏。收藏可以使用一些参数进行过滤。让我们列出用户 teknium
的所有收藏。
>>> from huggingface_hub import list_collections
>>> collections = list_collections(owner="teknium")
这将返回一个 Collection
对象的可迭代对象。我们可以遍历它们,例如打印每个收藏的点赞数。
>>> for collection in collections:
... print("Number of upvotes:", collection.upvotes)
Number of upvotes: 1
Number of upvotes: 5
列出收藏时,每个收藏的项目列表最多截断为 4 个项目。要检索收藏中的所有项目,您必须使用 get_collection()。
可以进行更高级的过滤。让我们获取包含模型 TheBloke/OpenHermes-2.5-Mistral-7B-GGUF 的所有收藏,按趋势排序,并将计数限制为 5 个。
>>> collections = list_collections(item="models/TheBloke/OpenHermes-2.5-Mistral-7B-GGUF", sort="trending", limit=5):
>>> for collection in collections:
... print(collection.slug)
teknium/quantized-models-6544690bb978e0b0f7328748
AmeerH/function-calling-65560a2565d7a6ef568527af
PostArchitekt/7bz-65479bb8c194936469697d8c
gnomealone/need-to-test-652007226c6ce4cdacf9c233
Crataco/favorite-7b-models-651944072b4fffcb41f8b568
参数 sort
必须是 "last_modified"
、"trending"
或 "upvotes"
之一。参数 item
接受任何特定项目。例如
"models/teknium/OpenHermes-2.5-Mistral-7B"
"spaces/julien-c/open-gpt-rhyming-robot"
"datasets/squad"
"papers/2311.12983"
有关更多详细信息,请查看 list_collections() 参考文档。
创建新的收藏
既然我们已经了解了如何获取 Collection,让我们创建自己的收藏!使用 create_collection() 以及标题和描述。要在一个组织页面上创建收藏,在创建收藏时传递 namespace="my-cool-org"
。最后,您也可以通过传递 private=True
来创建私有收藏。
>>> from huggingface_hub import create_collection
>>> collection = create_collection(
... title="ICCV 2023",
... description="Portfolio of models, papers and demos I presented at ICCV 2023",
... )
它将返回一个 Collection 对象,其中包含高级元数据(标题、描述、所有者等)和一个空项目列表。现在您可以使用它的 slug
来引用这个收藏。
>>> collection.slug
'owner/iccv-2023-15e23b46cb98efca45'
>>> collection.title
"ICCV 2023"
>>> collection.owner
"username"
>>> collection.url
'https://huggingface.co/collections/owner/iccv-2023-15e23b46cb98efca45'
管理收藏中的项目
现在我们已经拥有一个 Collection,我们想要向其中添加项目并对其进行组织。
添加项目
项目必须使用 add_collection_item() 一一添加。您只需要知道 collection_slug
、item_id
和 item_type
。可选地,您还可以向项目添加 note
(最多 500 个字符)。
>>> from huggingface_hub import create_collection, add_collection_item
>>> collection = create_collection(title="OS Week Highlights - Sept 18 - 24", namespace="osanseviero")
>>> collection.slug
"osanseviero/os-week-highlights-sept-18-24-650bfed7f795a59f491afb80"
>>> add_collection_item(collection.slug, item_id="coqui/xtts", item_type="space")
>>> add_collection_item(
... collection.slug,
... item_id="warp-ai/wuerstchen",
... item_type="model",
... note="Würstchen is a new fast and efficient high resolution text-to-image architecture and model"
... )
>>> add_collection_item(collection.slug, item_id="lmsys/lmsys-chat-1m", item_type="dataset")
>>> add_collection_item(collection.slug, item_id="warp-ai/wuerstchen", item_type="space") # same item_id, different item_type
如果项目已经存在于收藏中(相同的 item_id
/item_type
对),将引发 HTTP 409 错误。您可以选择通过设置 exists_ok=True
来忽略此错误。
向现有项目添加笔记
您可以修改现有项目,以使用 update_collection_item() 添加或修改附加到它的笔记。让我们重用上面的示例
>>> from huggingface_hub import get_collection, update_collection_item
# Fetch collection with newly added items
>>> collection_slug = "osanseviero/os-week-highlights-sept-18-24-650bfed7f795a59f491afb80"
>>> collection = get_collection(collection_slug)
# Add note the `lmsys-chat-1m` dataset
>>> update_collection_item(
... collection_slug=collection_slug,
... item_object_id=collection.items[2].item_object_id,
... note="This dataset contains one million real-world conversations with 25 state-of-the-art LLMs.",
... )
重新排序项目
收藏中的项目是有序的。顺序由每个项目的 position
属性决定。默认情况下,项目按在收藏末尾附加新项目来排序。您可以使用 update_collection_item() 更新顺序,方法与添加笔记相同。
让我们重用上面的示例
>>> from huggingface_hub import get_collection, update_collection_item
# Fetch collection
>>> collection_slug = "osanseviero/os-week-highlights-sept-18-24-650bfed7f795a59f491afb80"
>>> collection = get_collection(collection_slug)
# Reorder to place the two `Wuerstchen` items together
>>> update_collection_item(
... collection_slug=collection_slug,
... item_object_id=collection.items[3].item_object_id,
... position=2,
... )
删除项目
最后,您也可以使用 delete_collection_item() 删除项目。
>>> from huggingface_hub import get_collection, update_collection_item
# Fetch collection
>>> collection_slug = "osanseviero/os-week-highlights-sept-18-24-650bfed7f795a59f491afb80"
>>> collection = get_collection(collection_slug)
# Remove `coqui/xtts` Space from the list
>>> delete_collection_item(collection_slug=collection_slug, item_object_id=collection.items[0].item_object_id)
删除收藏
可以使用 delete_collection() 删除收藏。
这是一个不可逆的操作。删除的收藏无法恢复。
>>> from huggingface_hub import delete_collection
>>> collection = delete_collection("username/useless-collection-64f9a55bb3115b4f513ec026", missing_ok=True)