Hub Python Library documentation
Взаимодействие с обсуждениями и pull request
Взаимодействие с обсуждениями и pull request
Библиотека huggingface_hub предоставляет интерфейс на Python для работы с Pull Requests и Discussions на Hub.
Ознакомьтесь с специальной страницей документации, чтобы подробнее узнать, что такое Discussions и Pull Requests на Hub и как они работают.
Получение обсуждений и pull request'ов из Hub
Класс HfApi позволяет получать Discussions и Pull Requests для указанного репозитория:
>>> 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. Чтобы получить все Discussion в одном списке, выполните:
>>> from huggingface_hub import get_repo_discussions
>>> discussions_list = list(get_repo_discussions(repo_id="bert-base-uncased"))Объект Discussion, возвращаемый 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. В эту информацию входят все комментарии, изменения статуса и переименования Discussion, доступные через DiscussionWithDetails.events.
В случае Pull Request вы можете получить необработанный git diff с помощью DiscussionWithDetails.diff. Все коммиты Pull Requests перечислены в DiscussionWithDetails.events.
Создание и редактирование Discussion или Pull Request программно
Класс HfApi также предоставляет способы создания и редактирования Discussions и Pull Requests. Для создания и редактирования Discussions или Pull Requests вам потребуется access token.
Самый простой способ предложить изменения в репозитории на Hub — использовать API create_commit(): просто установите параметр 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 Requests, открытые таким образом, будут находиться в режиме "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 и обсуждениями можно выполнять полностью с помощью класса HfApi. Например:
- comment_discussion() для добавления комментариев
- edit_discussion_comment() для редактирования комментариев
- rename_discussion() для переименования Discussion или Pull Request
- change_discussion_status() для открытия или закрытия Discussion / Pull Request
- merge_pull_request() для слияния Pull Request
- upload_attachment() для загрузки изображения или видео и вставки его URL в описание или комментарий
Откройте страницу документации HfApi для полного справочника всех доступных методов.
Управление обсуждениями и pull request'ами из 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
Скоро!
См. также
Для более подробной справки посетите обсуждения и pull request'ы и страницу документации hf_api.
Update on GitHub