Hub Python Library documentation
与讨论和拉取请求进行交互
与讨论和拉取请求进行交互
huggingface_hub 库提供了一个 Python 接口,用于与 Hub 上的 Pull Requests 和 Discussions 进行交互。
请访问专用文档页面,深入了解 Hub 上的 Discussions 和 Pull Requests 是什么,以及其底层工作原理。
从 Hub 获取讨论和拉取请求
HfApi 类允许你获取指定仓库中的讨论和拉取请求:
>>> from huggingface_hub import get_repo_discussions
>>> for discussion in get_repo_discussions(repo_id="bigscience/bloom"):
... print(f"{discussion.num} - {discussion.title}, pr: {discussion.is_pull_request}")
# 11 - Add Flax weights, pr: True
# 10 - Update README.md, pr: True
# 9 - Training languages in the model card, pr: True
# 8 - Update tokenizer_config.json, pr: True
# 7 - Slurm training script, pr: False
[...]HfApi.get_repo_discussions 支持按作者、类型(Pull Request 或 Discussion)以及状态(open 或 closed)进行筛选:
>>> from huggingface_hub import get_repo_discussions
>>> for discussion in get_repo_discussions(
... repo_id="bigscience/bloom",
... author="ArthurZ",
... discussion_type="pull_request",
... discussion_status="open",
... ):
... print(f"{discussion.num} - {discussion.title} by {discussion.author}, pr: {discussion.is_pull_request}")
# 19 - Add Flax weights by ArthurZ, pr: TrueHfApi.get_repo_discussions 返回一个 generator,用于生成 Discussion 对象。若要获取包含所有 Discussion 的单个列表,请运行:
>>> from huggingface_hub import get_repo_discussions
>>> discussions_list = list(get_repo_discussions(repo_id="bert-base-uncased"))HfApi.get_repo_discussions() 返回的 Discussion 对象包含讨论或 Pull Request 的高层概览。你也可以使用 HfApi.get_discussion_details() 获取更详细的信息:
>>> from huggingface_hub import get_discussion_details
>>> get_discussion_details(
... repo_id="bigscience/bloom-1b3",
... discussion_num=2
... )
DiscussionWithDetails(
num=2,
author='cakiki',
title='Update VRAM memory for the V100s',
status='open',
is_pull_request=True,
events=[
DiscussionComment(type='comment', author='cakiki', ...),
DiscussionCommit(type='commit', author='cakiki', summary='Update VRAM memory for the V100s', oid='1256f9d9a33fa8887e1c1bf0e09b4713da96773a', ...),
],
conflicting_files=[],
target_branch='refs/heads/main',
merge_commit_oid=None,
diff='diff --git a/README.md b/README.md\nindex a6ae3b9294edf8d0eda0d67c7780a10241242a7e..3a1814f212bc3f0d3cc8f74bdbd316de4ae7b9e3 100644\n--- a/README.md\n+++ b/README.md\n@@ -132,7 +132,7 [...]',
)HfApi.get_discussion_details() 返回一个 DiscussionWithDetails 对象,它是 Discussion 的子类,包含关于该 Discussion 或 Pull Request 的更详细信息。这些信息包括通过 DiscussionWithDetails.events 获取的所有评论、状态更改以及 Discussion 的重命名记录。
对于 Pull Request,您可以通过 DiscussionWithDetails.diff 获取原始的 git diff。Pull Request 的所有提交都列在 DiscussionWithDetails.events 中。
以编程方式创建和编辑讨论或拉取请求
HfApi 类还提供了创建和编辑 Discussions 和 Pull Requests 的方法。 创建或编辑 Discussions 或 Pull Requests 时,您需要一个 access token。
在 Hub 上提议对仓库进行更改的最简单方式是通过 create_commit() API:只需将 create_pr 参数设置为 True。此参数也可用于其他封装了 create_commit() 的方法:
>>> from huggingface_hub import metadata_update
>>> metadata_update(
... repo_id="username/repo_name",
... metadata={"tags": ["computer-vision", "awesome-model"]},
... create_pr=True,
... )您还可以使用 HfApi.create_discussion()(或 HfApi.create_pull_request())在仓库中创建 Discussion(或 Pull Request)。
如果需要本地处理更改,以这种方式打开 Pull Request 会很有用。以这种方式打开的 Pull Request 将处于 "draft" 模式。
>>> from huggingface_hub import create_discussion, create_pull_request
>>> create_discussion(
... repo_id="username/repo-name",
... title="Hi from the huggingface_hub library!",
... token="<insert your access token here>",
... )
DiscussionWithDetails(...)
>>> create_pull_request(
... repo_id="username/repo-name",
... title="Hi from the huggingface_hub library!",
... token="<insert your access token here>",
... )
DiscussionWithDetails(..., is_pull_request=True)使用 HfApi 类即可完全管理 Pull Requests 和 Discussions。例如:
- 使用 comment_discussion() 添加评论
- 使用 edit_discussion_comment() 编辑评论
- 使用 rename_discussion() 重命名讨论或 Pull Request
- 使用 change_discussion_status() 打开或关闭 Discussion / Pull Request
- 使用 merge_pull_request() 合并 Pull Request
- 使用 upload_attachment() 上传图片或视频,并将其 URL 嵌入到描述或评论中
请访问 HfApi 文档页面,以获取所有可用方法的详尽参考。
通过 CLI 管理讨论和拉取请求
上述所有操作也可以通过命令行中的 hf discussions 来执行。这在编写脚本、CI 流水线或无需编写 Python 代码的快速交互场景中非常有用。
# List open discussions and PRs on a repo
hf discussions list bigscience/bloom
# List discussions on a dataset repo
hf discussions list nebius/SWE-rebench-V2 --type dataset
# Get info for a specific discussion, including its comment thread
hf discussions info bigscience/bloom 2
# Create a new discussion
hf discussions create username/repo-name --title "Bug report" --body "Description here"
# Create a pull request
hf discussions create username/repo-name --title "Fix typo" --pull-request
# Comment on a discussion or PR
hf discussions comment username/repo-name 5 --body "LGTM!"
# Attach a screenshot to a comment
hf discussions comment username/repo-name 5 --body "Here is the fix:" --attach screenshot.png
# Merge a pull request
hf discussions merge username/repo-name 5 --yes
# Show the diff of a pull request
hf discussions diff username/repo-name 5要查看完整的选项列表,请运行 hf discussions --help 或参阅 CLI 参考。
将更改推送到 Pull Request
即将推出!
另请参阅
如需更详细的参考,请访问讨论和拉取请求以及hf_api文档页面。
Update on GitHub