# Interaja com Discussões e Pull Requests

A biblioteca `huggingface_hub` fornece uma interface em Python para interagir com Pull Requests e Discussões no Hub. Visite [a página de documentação dedicada](https://huggingface.co/docs/hub/repositories-pull-requests-discussions) para uma visão mais aprofundada do que são as Discussões e os Pull Requests no Hub e como eles funcionam por baixo dos panos.

## Recuperar Discussões e Pull Requests do Hub

A classe `HfApi` permite recuperar Discussões e Pull Requests em um repositório específico:

```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` suporta filtragem por autor, tipo (Pull Request ou Discussion) e status (`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` retorna um [generator](https://docs.python.org/3.7/howto/functional.html#generators) que produz objetos [Discussion](/docs/huggingface_hub/main/pt/package_reference/community#huggingface_hub.Discussion). Para obter todas as Discussões em uma única lista, execute:

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

O objeto [Discussion](/docs/huggingface_hub/main/pt/package_reference/community#huggingface_hub.Discussion) retornado por [HfApi.get_repo_discussions()](/docs/huggingface_hub/main/pt/package_reference/hf_api#huggingface_hub.HfApi.get_repo_discussions) contém uma visão geral de alto nível da Discussion ou Pull Request. Você também pode obter informações mais detalhadas usando [HfApi.get_discussion_details()](/docs/huggingface_hub/main/pt/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/pt/package_reference/hf_api#huggingface_hub.HfApi.get_discussion_details) retorna um objeto [DiscussionWithDetails](/docs/huggingface_hub/main/pt/package_reference/community#huggingface_hub.DiscussionWithDetails), que é uma subclasse de [Discussion](/docs/huggingface_hub/main/pt/package_reference/community#huggingface_hub.Discussion) com informações mais detalhadas sobre a Discussion ou Pull Request. As informações incluem todos os comentários, mudanças de status e renomeações da Discussion via `DiscussionWithDetails.events`.

No caso de um Pull Request, você pode recuperar o diff bruto do git com `DiscussionWithDetails.diff`. Todos os commits dos Pull Requests estão listados em `DiscussionWithDetails.events`.

## Crie e edite uma Discussion ou Pull Request programaticamente

A classe [HfApi](/docs/huggingface_hub/main/pt/package_reference/hf_api#huggingface_hub.HfApi) também oferece maneiras de criar e editar Discussões e Pull Requests. Você precisará de um [access token](https://huggingface.co/docs/hub/security-tokens) para criar e editar Discussões ou Pull Requests.

A maneira mais simples de propor alterações em um repositório no Hub é por meio da API [create_commit()](/docs/huggingface_hub/main/pt/package_reference/hf_api#huggingface_hub.HfApi.create_commit): basta definir o parâmetro `create_pr` como `True`. Este parâmetro também está disponível em outros métodos que envolvem [create_commit()](/docs/huggingface_hub/main/pt/package_reference/hf_api#huggingface_hub.HfApi.create_commit):

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

Você também pode usar [HfApi.create_discussion()](/docs/huggingface_hub/main/pt/package_reference/hf_api#huggingface_hub.HfApi.create_discussion) (respectivamente [HfApi.create_pull_request()](/docs/huggingface_hub/main/pt/package_reference/hf_api#huggingface_hub.HfApi.create_pull_request)) para criar uma Discussion (respectivamente uma Pull Request) em um repositório. Abrir uma Pull Request dessa forma pode ser útil se você precisar trabalhar em alterações localmente. Pull Requests abertas dessa forma ficarão no 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)
```

A gestão de Pull Requests e Discussões pode ser feita inteiramente com a classe [HfApi](/docs/huggingface_hub/main/pt/package_reference/hf_api#huggingface_hub.HfApi). Por exemplo:

    * [comment_discussion()](/docs/huggingface_hub/main/pt/package_reference/hf_api#huggingface_hub.HfApi.comment_discussion) para adicionar comentários
    * [edit_discussion_comment()](/docs/huggingface_hub/main/pt/package_reference/hf_api#huggingface_hub.HfApi.edit_discussion_comment) para editar comentários
    * [rename_discussion()](/docs/huggingface_hub/main/pt/package_reference/hf_api#huggingface_hub.HfApi.rename_discussion) para renomear uma Discussion ou Pull Request
    * [change_discussion_status()](/docs/huggingface_hub/main/pt/package_reference/hf_api#huggingface_hub.HfApi.change_discussion_status) para abrir ou fechar uma Discussion / Pull Request
    * [merge_pull_request()](/docs/huggingface_hub/main/pt/package_reference/hf_api#huggingface_hub.HfApi.merge_pull_request) para mesclar um Pull Request
    * [upload_attachment()](/docs/huggingface_hub/main/pt/package_reference/hf_api#huggingface_hub.HfApi.upload_attachment) para enviar uma imagem ou vídeo e incorporar sua URL em uma descrição ou comentário

Acesse a página de documentação do [HfApi](/docs/huggingface_hub/main/pt/package_reference/hf_api#huggingface_hub.HfApi) para uma referência exaustiva de todos os métodos disponíveis.

## Gerenciar discussões e pull requests pela CLI

Todas as operações acima também estão disponíveis pela linha de comando via `hf discussions`. Isso é útil para scripts, pipelines de CI ou interações rápidas sem escrever código 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 a lista completa de opções, execute `hf discussions --help` ou consulte a [referência da CLI](./cli#hf-discussions).

## Envie alterações para um Pull Request

*Em breve!*

## Veja também

Para uma referência mais detalhada, visite as [Discussões e Pull Requests](../package_reference/community) e a página de documentação do [hf_api](../package_reference/hf_api).

