Hub Python Library documentation

与讨论和拉取请求进行交互

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v2.4.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

与讨论和拉取请求进行交互

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: True

HfApi.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。例如:

请访问 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