#
Interaktion mit Diskussionen und Pull-Requests

Die `huggingface_hub`-Bibliothek bietet eine Python-Schnittstelle, um mit Pull-Requests und Diskussionen auf dem Hub zu interagieren. Besuchen Sie die spezielle Dokumentationsseite, um einen tieferen Einblick in Diskussionen und Pull-Requests auf dem Hub zu erhalten und zu erfahren, wie sie im Hintergrund funktionieren.

##
Diskussionen und Pull-Requests vom Hub abrufen

Die Klasse `HfApi` ermöglicht es Ihnen, Diskussionen und Pull-Requests zu einem gegebenen Repository abzurufen:

    >>> from huggingface_hub import get_repo_discussions
    >>> for discussion in get_repo_discussions(repo_id="bigscience/bloom-1b3"):
    ...     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` gibt einen Generator zurück, der `Diskussion`-Objekte liefert. Um alle Diskussionen in einer einzelnen Liste zu erhalten, führen Sie den folgenden Befehl aus:

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

Das von `HfApi.get_repo_discussions()` zurückgegebene `Diskussion`-Objekt enthält einen Überblick über die Diskussion oder Pull-Requests. Sie können auch detailliertere Informationen mit `HfApi.get_discussion_details()` abrufen:

    >>> 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()` gibt ein `DiskussionMitDetails`-Objekt zurück, das eine Unterklasse von `Diskussion` mit detaillierteren Informationen über die Diskussion oder Pull-Requests ist. Informationen beinhalten alle Kommentare, Statusänderungen und Umbenennungen der Diskussion mittels `DiskussionMitDetails.events`.

Im Fall eines Pull-Requests können Sie mit `DiskussionMitDetails.diff` den rohen git diff abrufen. Alle Commits des Pull-Requests sind in `DiskussionMitDetails.events` aufgelistet.

##
Diskussion oder Pull-Request programmatisch erstellen und bearbeiten

Die `HfApi`-Klasse bietet auch Möglichkeiten, Diskussionen und Pull-Requests zu erstellen und zu bearbeiten. Sie benötigen ein Access Token, um Diskussionen oder Pull-Requests zu erstellen und zu bearbeiten.

Die einfachste Möglichkeit, Änderungen an einem Repo auf dem Hub vorzuschlagen, ist über die `create_commit()`-API: Setzen Sie einfach das `create_pr`-Parameter auf `True`. Dieser Parameter ist auch bei anderen Methoden verfügbar, die `create_commit()` umfassen:

- `upload_file()`
- `upload_folder()`
- `delete_file()`
- `delete_folder()`
- `metadata_update()`

    >>> from huggingface_hub import metadata_update

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

Sie können auch `HfApi.create_discussion()` (bzw. `HfApi.create_pull_request()`) verwenden, um eine Diskussion (bzw. einen Pull-Request) für ein Repository zu erstellen. Das Öffnen eines Pull-Requests auf diese Weise kann nützlich sein, wenn Sie lokal an Änderungen arbeiten müssen. Auf diese Weise geöffnete Pull-Requests befinden sich im `"Entwurfs"`-Modus.

    >>> 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)

Das Verwalten von Pull-Requests und Diskussionen kann vollständig mit der `HfApi`-Klasse durchgeführt werden. Zum Beispiel:

- `comment_discussion()` zum Hinzufügen von Kommentaren
- `edit_discussion_comment()` zum Bearbeiten von Kommentaren
- `rename_discussion()` zum Umbenennen einer Diskussion oder eines Pull-Requests
- `change_discussion_status()` zum Öffnen oder Schließen einer Diskussion / eines Pull-Requests
- `merge_pull_request()` zum Zusammenführen eines Pull-Requests

Besuchen Sie die `HfApi`-Dokumentationsseite für eine vollständige Übersicht aller verfügbaren Methoden.

##
Änderungen an einen Pull-Request senden

Demnächst verfügbar !

##
Siehe auch

Für eine detailliertere Referenz besuchen Sie die Diskussionen und Pull-Requests und die hf_api-Dokumentationen.