Hub Python Library documentation
ディスカッションとプルリクエストとのやり取り
ディスカッションとプルリクエストとのやり取り
huggingface_hub ライブラリは、Hub 上の Pull Requests と Discussions を操作するための Python インターフェースを提供します。
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 は Discussion オブジェクトを生成する generator を返します。すべての Discussion を単一のリストとして取得するには、以下を実行します:
>>> from huggingface_hub import get_repo_discussions
>>> discussions_list = list(get_repo_discussions(repo_id="bert-base-uncased"))HfApi.get_repo_discussions() が返す Discussion オブジェクトには、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() は、Discussion または Pull Request に関するより詳細な情報を持つ Discussion のサブクラスである DiscussionWithDetails オブジェクトを返します。この情報には、DiscussionWithDetails.events による Discussion のすべてのコメント、ステータス変更、およびリネームが含まれます。
Pull Request の場合、DiscussionWithDetails.diff で生の git diff を取得できます。Pull Request のすべてのコミットは、DiscussionWithDetails.events にリストされています。
DiscussionまたはPull Requestをプログラムで作成・編集する
HfApi クラスは、Discussion と Pull Request の作成および編集を行う方法も提供しています。 Discussion または Pull Request を作成・編集するには、アクセストークンが必要です。
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)Pull RequestとDiscussionの管理は、HfApiクラスだけで完全に実行できます。例えば:
- コメントを追加するにはcomment_discussion()を使用します
- コメントを編集するにはedit_discussion_comment()を使用します
- Discussion または Pull Request をリネームするには rename_discussion() を使用します
- Discussion / Pull Request を開くまたは閉じるには、change_discussion_status() を使用します
- Pull Request をマージするには merge_pull_request() を使用します
- 画像や動画をアップロードし、そのURLを説明やコメントに埋め込むためのupload_attachment()
利用可能なすべてのメソッドの詳細なリファレンスについては、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