# Interactuar con Discusiones y Pull Requests

La biblioteca `huggingface_hub` ofrece una interfaz de Python para interactuar con las Pull Requests y las Discusiones en el Hub. Visita [la página de documentación dedicada](https://huggingface.co/docs/hub/repositories-pull-requests-discussions) 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:

```python
>>> 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`):

```python
>>> 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` devuelve un [generator](https://docs.python.org/3.7/howto/functional.html#generators) que produce objetos [Discussion](/docs/huggingface_hub/main/es/package_reference/community#huggingface_hub.Discussion). Para obtener todas las Discusiones en una sola lista, ejecuta:

```python
>>> from huggingface_hub import get_repo_discussions
>>> discussions_list = list(get_repo_discussions(repo_id="bert-base-uncased"))
```

El objeto [Discussion](/docs/huggingface_hub/main/es/package_reference/community#huggingface_hub.Discussion) que devuelve [HfApi.get_repo_discussions()](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.HfApi.get_repo_discussions) contiene una visión general de alto nivel de la Discussion o Pull Request. También puede obtener información más detallada usando [HfApi.get_discussion_details()](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.HfApi.get_discussion_details):

```python
>>> 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()](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.HfApi.get_discussion_details) devuelve un objeto [DiscussionWithDetails](/docs/huggingface_hub/main/es/package_reference/community#huggingface_hub.DiscussionWithDetails), que es una subclase de [Discussion](/docs/huggingface_hub/main/es/package_reference/community#huggingface_hub.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](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.HfApi) también ofrece formas de crear y editar Discusiones y Pull Requests. Necesitarás un [access token](https://huggingface.co/docs/hub/security-tokens) 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()](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.HfApi.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()](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.HfApi.create_commit):

    * [upload_file()](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.HfApi.upload_file)
    * [upload_folder()](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.HfApi.upload_folder)
    * [delete_file()](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.HfApi.delete_file)
    * [delete_folder()](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.HfApi.delete_folder)
    * [metadata_update()](/docs/huggingface_hub/main/es/package_reference/cards#huggingface_hub.metadata_update)

```python
>>> from huggingface_hub import metadata_update

>>> metadata_update(
...     repo_id="username/repo_name",
...     metadata={"tags": ["computer-vision", "awesome-model"]},
...     create_pr=True,
... )
```

También puede usar [HfApi.create_discussion()](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.HfApi.create_discussion) (respectivamente [HfApi.create_pull_request()](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.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 necesita trabajar en cambios localmente. Las Pull Requests abiertas de esta manera estarán en modo `"draft"`.

```python
>>> 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](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.HfApi). Por ejemplo:

    * [comment_discussion()](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.HfApi.comment_discussion) para agregar comentarios
    * [edit_discussion_comment()](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.HfApi.edit_discussion_comment) para editar comentarios
    * [rename_discussion()](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.HfApi.rename_discussion) para renombrar una Discussion o Pull Request
    * [change_discussion_status()](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.HfApi.change_discussion_status) para abrir o cerrar una Discusión / Pull Request
    * [merge_pull_request()](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.HfApi.merge_pull_request) para fusionar una Pull Request
    * [upload_attachment()](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.HfApi.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](/docs/huggingface_hub/main/es/package_reference/hf_api#huggingface_hub.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.

```bash
# 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
```

Para obtener la lista completa de opciones, ejecute `hf discussions --help` o consulte la [referencia de la CLI](./cli#hf-discussions).

## Enviar cambios a una Pull Request

*¡Próximamente!*

## Véase también

Para una referencia más detallada, visite las [Discussions and Pull Requests](../package_reference/community) y la página de documentación de [hf_api](../package_reference/hf_api).

