# Interagir avec les Discussions et les Pull Requests

La bibliothèque `huggingface_hub` fournit une interface Python pour interagir avec les Pull Requests et les Discussions sur le Hub. Consultez [la page de documentation dédiée](https://huggingface.co/docs/hub/repositories-pull-requests-discussions) pour une vue plus approfondie de ce que sont les Discussions et les Pull Requests sur le Hub, et de leur fonctionnement en interne.

## Récupérer les discussions et les demandes de tirage du Hub

La classe `HfApi` vous permet de récupérer les Discussions et les Pull Requests d'un dépôt donné :

```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` prend en charge le filtrage par auteur, type (Pull Request ou Discussion) et statut (`open` ou `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` renvoie un [générateur](https://docs.python.org/3.7/howto/functional.html#generators) qui produit des objets [Discussion](/docs/huggingface_hub/v2.4.0/fr/package_reference/community#huggingface_hub.Discussion). Pour obtenir toutes les Discussions dans une seule liste, exécutez :

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

L'objet [Discussion](/docs/huggingface_hub/v2.4.0/fr/package_reference/community#huggingface_hub.Discussion) renvoyé par [HfApi.get_repo_discussions()](/docs/huggingface_hub/v2.4.0/fr/package_reference/hf_api#huggingface_hub.HfApi.get_repo_discussions) contient un aperçu général de la Discussion ou de la Pull Request. Vous pouvez également obtenir des informations plus détaillées à l'aide de [HfApi.get_discussion_details()](/docs/huggingface_hub/v2.4.0/fr/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/v2.4.0/fr/package_reference/hf_api#huggingface_hub.HfApi.get_discussion_details) renvoie un objet [DiscussionWithDetails](/docs/huggingface_hub/v2.4.0/fr/package_reference/community#huggingface_hub.DiscussionWithDetails), qui est une sous-classe de [Discussion](/docs/huggingface_hub/v2.4.0/fr/package_reference/community#huggingface_hub.Discussion) fournissant des informations plus détaillées sur la Discussion ou la Pull Request. Les informations incluent tous les commentaires, les changements de statut et les renommages de la Discussion via `DiscussionWithDetails.events`.

En cas de Pull Request, vous pouvez récupérer le diff git brut avec `DiscussionWithDetails.diff`. Tous les commits des Pull Requests sont répertoriés dans `DiscussionWithDetails.events`.

## Créer et modifier une Discussion ou une Pull Request de manière programmatique

La classe [HfApi](/docs/huggingface_hub/v2.4.0/fr/package_reference/hf_api#huggingface_hub.HfApi) propose également des méthodes pour créer et modifier des Discussions et des Pull Requests. Un [jeton d'accès](https://huggingface.co/docs/hub/security-tokens) est requis pour créer ou modifier des Discussions ou des Pull Requests.

La manière la plus simple de proposer des modifications sur un dépôt du Hub est de passer par l'API [create_commit()](/docs/huggingface_hub/v2.4.0/fr/package_reference/hf_api#huggingface_hub.HfApi.create_commit) : il suffit de définir le paramètre `create_pr` sur `True`. Ce paramètre est également disponible sur d'autres méthodes qui encapsulent [create_commit()](/docs/huggingface_hub/v2.4.0/fr/package_reference/hf_api#huggingface_hub.HfApi.create_commit) :

    * [upload_file()](/docs/huggingface_hub/v2.4.0/fr/package_reference/hf_api#huggingface_hub.HfApi.upload_file)
    * [upload_folder()](/docs/huggingface_hub/v2.4.0/fr/package_reference/hf_api#huggingface_hub.HfApi.upload_folder)
    * [delete_file()](/docs/huggingface_hub/v2.4.0/fr/package_reference/hf_api#huggingface_hub.HfApi.delete_file)
    * [delete_folder()](/docs/huggingface_hub/v2.4.0/fr/package_reference/hf_api#huggingface_hub.HfApi.delete_folder)
    * [metadata_update()](/docs/huggingface_hub/v2.4.0/fr/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,
... )
```

Vous pouvez également utiliser [HfApi.create_discussion()](/docs/huggingface_hub/v2.4.0/fr/package_reference/hf_api#huggingface_hub.HfApi.create_discussion) (respectivement [HfApi.create_pull_request()](/docs/huggingface_hub/v2.4.0/fr/package_reference/hf_api#huggingface_hub.HfApi.create_pull_request)) pour créer une Discussion (respectivement une Pull Request) sur un dépôt. Ouvrir une Pull Request de cette manière peut être utile si vous devez travailler sur des modifications localement. Les Pull Requests ouvertes de cette manière seront en mode `"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 gestion des Pull Requests et des Discussions peut être effectuée entièrement avec la classe [HfApi](/docs/huggingface_hub/v2.4.0/fr/package_reference/hf_api#huggingface_hub.HfApi). Par exemple :

    * [comment_discussion()](/docs/huggingface_hub/v2.4.0/fr/package_reference/hf_api#huggingface_hub.HfApi.comment_discussion) pour ajouter des commentaires
    * [edit_discussion_comment()](/docs/huggingface_hub/v2.4.0/fr/package_reference/hf_api#huggingface_hub.HfApi.edit_discussion_comment) pour modifier les commentaires
    * [rename_discussion()](/docs/huggingface_hub/v2.4.0/fr/package_reference/hf_api#huggingface_hub.HfApi.rename_discussion) pour renommer une Discussion ou une Pull Request
    * [change_discussion_status()](/docs/huggingface_hub/v2.4.0/fr/package_reference/hf_api#huggingface_hub.HfApi.change_discussion_status) pour ouvrir ou fermer une Discussion / Pull Request
    * [merge_pull_request()](/docs/huggingface_hub/v2.4.0/fr/package_reference/hf_api#huggingface_hub.HfApi.merge_pull_request) pour fusionner une Pull Request
    * [upload_attachment()](/docs/huggingface_hub/v2.4.0/fr/package_reference/hf_api#huggingface_hub.HfApi.upload_attachment) pour téléverser une image ou une vidéo et intégrer son URL dans une description ou un commentaire

Consultez la page de documentation de [HfApi](/docs/huggingface_hub/v2.4.0/fr/package_reference/hf_api#huggingface_hub.HfApi) pour une référence exhaustive de toutes les méthodes disponibles.

## Gérer les discussions et les demandes de tirage depuis l’interface en ligne de commande

Toutes les opérations décrites ci-dessus sont également disponibles en ligne de commande via `hf discussions`. C’est pratique pour l’écriture de scripts, les pipelines CI ou les interactions rapides sans avoir à rédiger de code 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
```

Pour la liste complète des options, exécutez `hf discussions --help` ou consultez la [référence CLI](./cli#hf-discussions).

## Pousser les modifications vers une Pull Request

*Bientôt disponible !*

## Voir aussi

Pour une référence plus détaillée, consultez les [Discussions et Pull Requests](../package_reference/community) et la page de documentation [hf_api](../package_reference/hf_api).

