Hub Python Library documentation
Interactuar con Discusiones y Pull Requests
Interactuar con Discusiones y Pull Requests
La biblioteca huggingface_hub proporciona una interfaz de Python para interactuar con las Pull Requests y las Discusiones en el Hub.
Visita la página de documentación dedicada para una visión más profunda de qué son las Discusiones y las Pull Requests en el Hub y cómo funcionan por debajo.
Obtener discusiones y solicitudes de extracción del Hub
La clase HfApi le permite recuperar Discusiones y Pull Requests en un repositorio dado:
>>> 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 admite filtrar por autor, tipo (Pull Request o Discussion) y estado (open o 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 devuelve un generator que produce objetos Discussion. Para obtener todas las Discusiones en una sola lista, ejecuta:
>>> from huggingface_hub import get_repo_discussions
>>> discussions_list = list(get_repo_discussions(repo_id="bert-base-uncased"))El objeto Discussion que devuelve HfApi.get_repo_discussions() contiene una visión general de alto nivel de la discusión o solicitud de extracción (Pull Request). También puede obtener información más detallada usando 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() devuelve un objeto DiscussionWithDetails, que es una subclase de Discussion con información más detallada sobre la Discussion o el Pull Request. La información incluye todos los comentarios, los cambios de estado y los renombrados de la Discussion a través de DiscussionWithDetails.events.
En el caso de una Pull Request, puedes obtener el diff de git en bruto con DiscussionWithDetails.diff. Todos los commits de las
Pull Requests están listados en DiscussionWithDetails.events.
Crear y editar una Discusión o Pull Request de forma programática
La clase HfApi también ofrece formas de crear y editar Discusiones y Pull Requests. Necesitarás un access token para crear y editar Discusiones o Pull Requests.
La forma más sencilla de proponer cambios en un repositorio en el Hub es a través de la API create_commit(): basta con establecer el parámetro create_pr en True. Este parámetro también está disponible en otros métodos que envuelven create_commit():
>>> from huggingface_hub import metadata_update
>>> metadata_update(
... repo_id="username/repo_name",
... metadata={"tags": ["computer-vision", "awesome-model"]},
... create_pr=True,
... )También puedes usar HfApi.create_discussion() (respectivamente HfApi.create_pull_request()) para crear una Discussion (respectivamente una Pull Request) en un repo.
Abrir una Pull Request de esta manera puede ser útil si necesitas trabajar en cambios localmente. Las Pull Requests abiertas de esta manera estarán en modo "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)La gestión de Pull Requests y Discusiones puede realizarse por completo con la clase HfApi. Por ejemplo:
- comment_discussion() para agregar comentarios
- edit_discussion_comment() para editar comentarios
- rename_discussion() para renombrar una Discussion o Pull Request
- change_discussion_status() para abrir o cerrar una Discusión / Pull Request
- merge_pull_request() para fusionar una Pull Request
- upload_attachment() para subir una imagen o un video e insertar su URL en una descripción o comentario
Visite la página de documentación de HfApi para obtener una referencia exhaustiva de todos los métodos disponibles.
Gestionar discusiones y solicitudes de extracción desde la CLI
Todas las operaciones anteriores también están disponibles desde la línea de comandos mediante hf discussions. Esto resulta útil para la creación de scripts, pipelines de CI o interacciones rápidas sin escribir código en 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 5Para obtener la lista completa de opciones, ejecute hf discussions --help o consulte la referencia de la CLI.
Enviar cambios a una Pull Request
¡Próximamente!
Véase también
Para una referencia más detallada, visite las Discussions and Pull Requests y la página de documentación de hf_api.
Update on GitHub