Repository: huggingface/huggingface_hub
Pull request #2189 (2024-04-02 15:37:00)

🌐 [i18n-KO] Translated `reference/repository.md` to Korean
<!-- PR의 제목은 "🌐 [i18n-KO] Translated `<your_file>.md` to Korean" 으로 부탁드립니다 -->
# What does this PR do?

Translated the `reference/repository.md` file of the documentation to Korean.
Thank you in advance for your review.

Part of https://github.com/huggingface/huggingface_hub/issues/1626

## Before reviewing
- [x] Check for missing / redundant translations (번역 누락/중복 검사)
- [x] Grammar Check (맞춤법 검사)
- [x] Review or Add new terms to glossary (용어 확인 및 추가)
- [x] Check Inline TOC (e.g. `[[lowercased-header]]`)
- [x] Check live-preview for gotchas (live-preview로 정상작동 확인)

## Who can review? (Initial)

<!-- 1. 위 체크가 모두 완료된 뒤에만 가짜연구소 팀원들에게 리뷰 요청하는 아래 주석을 노출해주세요! -->
<!-- Team Hugging Face KREW, may you please review this PR? 
@harheem, @cjfghk5697, @seoulsky-field, @nuatmochoi, @boyunJang, @SeungAhSon, @seoyoung-3060, @junejae, @usr-bin-ksh, @fabxoe -->

## Before submitting
- [x] This PR fixes a typo or improves the docs (you can dismiss the other checks if that's the case).
- [x] Did you read the [contributor guideline](https://github.com/huggingface/transformers/blob/main/CONTRIBUTING.md#start-contributing-pull-requests),
      Pull Request section?
- [ ] Was this discussed/approved via a Github issue or the [forum](https://discuss.huggingface.co/)? Please add a link
      to it if that's the case.
- [x] Did you make sure to update the documentation with your changes? Here are the
      [documentation guidelines](https://github.com/huggingface/transformers/tree/main/docs), and
      [here are tips on formatting docstrings](https://github.com/huggingface/transformers/tree/main/docs#writing-source-documentation).
- [ ] Did you write any new necessary tests?

## Who can review? (Final)

<!-- 2. 가짜연구소 팀원들과 리뷰가 끝난 후에만 허깅페이스 직원들에게 리뷰 요청하는 아래 주석을 노출해주세요! -->
@jungnerd, @heuristicwave May you please review this PR?

HuggingFaceDocBuilderDev: The docs for this PR live [here](https://moon-ci-docs.huggingface.co/docs/huggingface_hub/pr_2189). All of your documentation changes will be reflected on that endpoint. The docs are available until 30 days after the last update.

Patch:
diff --git a/docs/source/ko/_toctree.yml b/docs/source/ko/_toctree.yml
index a9e81fb1..15f1f6c9 100644
--- a/docs/source/ko/_toctree.yml
+++ b/docs/source/ko/_toctree.yml
@@ -12,8 +12,8 @@
       title: 개요
     - local: guides/download
       title: 파일 다운로드하기
-    - local: in_translation
-      title: (번역 중) Upload files
+    - local: guides/upload
+      title: 파일 업로드하기
     - local: guides/cli
       title: 명령줄 인터페이스(CLI) 사용하기
     - local: in_translation
@@ -34,8 +34,8 @@
       title: (번역 중) Manage your Space
     - local: in_translation
       title: (번역 중) Integrate a library
-    - local: in_translation
-      title: (번역 중) Webhooks server
+    - local: guides/webhooks_server
+      title: 웹훅 서버
 - title: "(번역 중) 개념 가이드"
   sections:
     - local: concepts/git_vs_http
@@ -44,33 +44,39 @@
   sections:
     - local: package_reference/overview
       title: 개요
-    - local: in_translation
-      title: (번역 중) Login and logout
+    - local: package_reference/login
+      title: 로그인 및 로그아웃
     - local: in_translation
       title: (번역 중) Environment variables
-    - local: in_translation
-      title: (번역 중) Managing local and online repositories
+    - local: package_reference/repository
+      title: 로컬 및 온라인 리포지토리 관리
     - local: in_translation
       title: (번역 중) Hugging Face Hub API
-    - local: in_translation
-      title: (번역 중) Downloading files
+    - local: package_reference/file_download
+      title: 파일 다운로드하기
     - local: in_translation
       title: (번역 중) Mixins & serialization methods
-    - local: in_translation
-      title: (번역 중) Inference Client
+    - local: package_reference/inference_types
+      title: 추론 타입
+    - local: package_reference/inference_client
+      title: 추론 클라이언트
+    - local: package_reference/inference_endpoints
+      title: 추론 엔드포인트
     - local: in_translation
       title: (번역 중) HfFileSystem
     - local: in_translation
       title: (번역 중) Utilities
     - local: in_translation
       title: (번역 중) Discussions and Pull Requests
-    - local: in_translation
-      title: (번역 중) Cache-system reference
+    - local: package_reference/cache
+      title: 캐시 시스템 참조
     - local: in_translation
       title: (번역 중) Repo Cards and Repo Card Data
     - local: in_translation
       title: (번역 중) Space runtime
-    - local: in_translation
-      title: (번역 중) TensorBoard logger
+    - local: package_reference/collections
+      title: 컬렉션 관리
+    - local: package_reference/tensorboard
+      title: TensorBoard 로거
     - local: in_translation
       title: (번역 중) Webhooks server
diff --git a/docs/source/ko/guides/upload.md b/docs/source/ko/guides/upload.md
new file mode 100644
index 00000000..e097870b
--- /dev/null
+++ b/docs/source/ko/guides/upload.md
@@ -0,0 +1,552 @@
+<!--⚠️ Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be
+rendered properly in your Markdown viewer.
+-->
+
+# Hub에 파일 업로드하기[[upload-files-to-the-hub]]
+
+파일과 작업물을 공유하는 것은 Hub의 주요 특성 중 하나입니다. `huggingface_hub`는 Hub에 파일을 업로드하기 위한 몇 가지 옵션을 제공합니다. 이러한 기능을 단독으로 사용하거나 라이브러리에 통합하여 해당 라이브러리의 사용자가 Hub와 더 편리하게 상호작용할 수 있도록 도울 수 있습니다. 이 가이드에서는 파일을 푸시하는 다양한 방법에 대해 설명합니다:
+
+- Git을 사용하지 않고 푸시하기.
+- [Git LFS](https://git-lfs.github.com/)를 사용하여 매우 큰 파일을 푸시하기.
+- `commit` 컨텍스트 매니저를 사용하여 푸시하기.
+- [`~Repository.push_to_hub`] 함수를 사용하여 푸시하기.
+
+Hub에 파일을 업로드 하려면 허깅페이스 계정으로 로그인해야 합니다. 인증에 대한 자세한 내용은 [이 페이지](../quick-start#authentication)를 참조해 주세요.
+
+## 파일 업로드하기[[upload-a-file]]
+
+[`create_repo`]로 리포지토리를 생성했다면, [`upload_file`]을 사용하여 해당 리포지토리에 파일을 업로드할 수 있습니다.
+
+업로드할 파일의 본 경로, 리포지토리에서 파일을 업로드할 위치, 대상 리포지토리의 이름을 지정합니다. 리포지토리의 유형을 `dataset`, `model`, `space`로 선택적으로 설정할 수 있습니다.
+
+
+```py
+>>> from huggingface_hub import HfApi
+>>> api = HfApi()
+>>> api.upload_file(
+...     path_or_fileobj="/path/to/local/folder/README.md",
+...     path_in_repo="README.md",
+...     repo_id="username/test-dataset",
+...     repo_type="dataset",
+... )
+```
+
+## 폴더 업로드[[upload-a-folder]]
+
+로컬 폴더를 리포지토리에 업로드하려면 [`upload_folder`] 함수를 사용합니다.
+업로드할 로컬 폴더의 본 경로, 리포지토리에서 폴더를 업로드할 위치, 대상 리포지토리의 이름을 지정합니다. 리포지토리의 유형을 `dataset`, `model`, `space`로 선택적으로 설정할 수 있습니다.
+
+```py
+>>> from huggingface_hub import HfApi
+>>> api = HfApi()
+
+# 로컬 폴더에 있는 모든 콘텐츠를 원격 Space에 업로드 합니다.
+# 파일은 기본적으로 리포지토리의 루트 디렉토리에 업로드 됩니다.
+>>> api.upload_folder(
+...     folder_path="/path/to/local/space",
+...     repo_id="username/my-cool-space",
+...     repo_type="space",
+... )
+```
+
+기본적으로 어떤 파일을 커밋할지 여부를 알기 위해 `.gitignore` 파일을 참조하게 됩니다. 기본적으로 커밋에 `.gitignore` 파일이 있는지 확인하고, 없는 경우 Hub에 파일이 있는지 확인합니다. 디렉터리의 루트 경로에 있는 `.gitignore` 파일만 사용된다는 점을 주의하세요. 하위 경로에는 `.gitignore` 파일이 있는지 확인하지 않습니다.
+
+하드코딩된 `.gitignore` 파일을 사용하지 않으려면 `allow_patterns` 와 `ignore_patterns` 인수를 사용하여 업로드할 파일을 필터링할 수 있습니다. 이 매개변수들은 단일 패턴 또는 패턴 리스트를 허용합니다. 패턴의 형식은 [이 문서](https://tldp.org/LDP/GNU-Linux-Tools-Summary/html/x11655.htm)에 설명된 대로 표준 와일드카드(글로빙 패턴)입니다. `allow_patterns`과 `ignore_patterns`을 모두 사용하면 두 가지 설정이 모두 적용됩니다.
+
+`.gitignore` 파일과 allow/ignore 패턴 외에 하위 경로 있는 모든 `.git/` 폴더는 무시됩니다.
+
+```py
+>>> api.upload_folder(
+...     folder_path="/path/to/local/folder",
+...     path_in_repo="my-dataset/train", # 특정 폴더에 업로드
+...     repo_id="username/test-dataset",
+...     repo_type="dataset",
+...     ignore_patterns="**/logs/*.txt", # 모든 로그 텍스트 파일을 무시
+... )
+```
+
+`delete_patterns` 인수를 사용하여 동일한 커밋에서 리포지토리에서 삭제할 파일을 지정할 수도 있습니다.
+이 방법은 파일을 푸시하기 전에 원격 폴더를 정리하고 싶은데 어떤 파일이 이미 존재하는지 모르는 경우에 유용합니다.
+
+다음은 로컬 `./logs` 폴더를 원격 `/experiment/logs/` 폴더에 업로드하는 예시입니다.
+폴더 내의 txt 파일만을 업로드 하게 되며 그 전에 리포지토리에 있던 모든 이전 txt 파일이 삭제됩니다. 이 모든 과정이 단 한 번의 커밋으로 이루어집니다.
+```py
+>>> api.upload_folder(
+...     folder_path="/path/to/local/folder/logs",
+...     repo_id="username/trained-model",
+...     path_in_repo="experiment/logs/",
+...     allow_patterns="*.txt", # 모든 로컬 텍스트 파일을 업로드
+...     delete_patterns="*.txt", # 모든 이전 텍스트 파일을 삭제
+... )
+```
+
+## CLI에서 업로드[[upload-from-the-cli]]
+
+터미널에서 `huggingface-cli upload` 명령어를 사용하여 Hub에 파일을 직접 업로드할 수 있습니다. 내부적으로는 위에서 설명한 것과 동일한 [`upload_file`] 와 [`upload_folder`] 함수를 사용합니다.
+
+다음과 같이 단일 파일 또는 전체 폴더를 업로드할 수 있습니다:
+
+```bash
+# 사용례:  huggingface-cli upload [repo_id] [local_path] [path_in_repo]
+>>> huggingface-cli upload Wauplin/my-cool-model ./models/model.safetensors model.safetensors
+https://huggingface.co/Wauplin/my-cool-model/blob/main/model.safetensors
+
+>>> huggingface-cli upload Wauplin/my-cool-model ./models .
+https://huggingface.co/Wauplin/my-cool-model/tree/main
+```
+
+`local_path` 와 `path_in_repo`는 선택 사항이며 주어지지 않을 시 임의로 추정됩니다.
+`local_path`가 설정되지 않은 경우, 이 툴은 로컬 폴더나 파일에 `repo_id`와 같은 이름이 있는지 확인하며, 발견된 경우 해당 폴더나 파일이 업로드됩니다.
+같은 이름의 폴더나 파일을 찾지 못한다면 사용자에게 `local_path`를 명시하도록 요청하는 예외 처리가 발생합니다.
+어떤 경우든 `path_in_repo`가 설정되어 있지 않으면 파일이 리포지토리의 루트 디렉터리에 업로드됩니다.
+
+CLI 업로드 명령어에 대한 자세한 내용은 [CLI 가이드](./cli#huggingface-cli-upload)를 참조하세요.
+
+## 고급 기능[[advanced-features]]
+
+대부분의 경우, Hub에 파일을 업로드하는 데 [`upload_file`]과 [`upload_folder`] 이상이 필요하지 않습니다.
+하지만 `huggingface_hub`에는 작업을 더 쉽게 할 수 있는 고급 기능이 있습니다. 그 기능들을 살펴봅시다!
+
+
+### 논블로킹 업로드[[non-blocking-uploads]]
+
+메인 스레드를 멈추지 않고 데이터를 푸시하고 싶은 경우가 있습니다.
+이는 모델 학습을 계속 진행하면서 로그와 아티팩트를 업로드할 때 특히 유용합니다.
+이렇게 하려면 [`upload_file`]과 [[`upload_folder`] 에 `run_as_future` 인수를 사용하고 [`concurrent.futures.Future`](https://docs.python.org/3/library/concurrent.futures.html#future-objects)객체를 반환받아 업로드 상태를 확인하는 데 사용할 수 있습니다.
+
+```py
+>>> from huggingface_hub import HfApi
+>>> api = HfApi()
+>>> future = api.upload_folder( # 백그라운드에서 업로드 작업 수행 (논블로킹)
+...     repo_id="username/my-model",
+...     folder_path="checkpoints-001",
+...     run_as_future=True,
+... )
+>>> future
+Future(...)
+>>> future.done()
+False
+>>> future.result() # 업로드가 완료될 때까지 대기 (블로킹)
+...
+```
+
+<Tip>
+
+`run_as_future=True`를 사용하면 백그라운드 작업이 큐에 대기됩니다. 이는 작업이 올바른 순서로 실행된다는 것을 의미합니다.
+
+</Tip>
+
+백그라운드 작업은 주로 데이터를 업로드하거나 커밋을 생성하는 데 유용하지만, 이 외에도 [`run_as_future`]를 사용하여 원하는 메소드를 대기열에 넣을 수 있습니다.
+예를 들어, 해당 기능을 사용하여 백그라운드에서 리포지토리를 만든 다음 그대로 데이터를 업로드할 수 있습니다.
+업로드 메소드에 내장된 `run_as_future` 인수는 본 기능의 별칭입니다.
+
+```py
+>>> from huggingface_hub import HfApi
+>>> api = HfApi()
+>>> api.run_as_future(api.create_repo, "username/my-model", exists_ok=True)
+Future(...)
+>>> api.upload_file(
+...     repo_id="username/my-model",
+...     path_in_repo="file.txt",
+...     path_or_fileobj=b"file content",
+...     run_as_future=True,
+... )
+Future(...)
+```
+
+### 청크 단위로 폴더 업로드하기[[upload-a-folder-by-chunks]]
+
+[`upload_folder`]를 사용하면 전체 폴더를 Hub에 쉽게 업로드할 수 있지만, 대용량 폴더(수천 개의 파일 또는 수백 GB의 용량)의 경우 문제가 될 수 있습니다.
+파일이 많은 폴더가 있는 경우 여러 커밋에 걸쳐 업로드하는 것이 좋습니다.
+업로드 중에 오류나 연결 문제가 발생해도 처음부터 다시 시작할 필요는 없습니다.
+
+여러 커밋으로 폴더를 업로드하려면 `multi_commits=True`를 인수로 전달하면 됩니다.
+내부적으로 `huggingface_hub`는 업로드/삭제할 파일을 나열하고 여러 커밋으로 분할합니다.
+커밋을 분할하는 전략은 업로드할 파일의 수와 크기에 따라 결정됩니다.
+모든 커밋을 푸시하기 위해 Hub에 PR이 열리게 되며, PR이 준비되면 여러 커밋이 단일 커밋으로 뭉쳐집니다.
+완료하기 전에 프로세스가 중단된 경우 스크립트를 다시 실행하여 업로드를 재개할 수 있습니다. 생성된 PR이 자동으로 감지되고 업로드가 중단된 지점부터 업로드가 재개됩니다.
+업로드 진행 상황을 더 잘 이해하고 싶다면 `multi_commits_verbose=True`를 인수로 전달하면 됩니다.
+
+다음은 여러 커밋으로 체크포인트 폴더를 데이터셋에 업로드하는 예제입니다.
+Hub에 PR이 생성되고 업로드가 완료되면 자동으로 병합됩니다.
+PR을 계속 열어두고 수동으로 검토하려면 `create_pr=True`를 인수로 전달하면 됩니다.
+
+```py
+>>> upload_folder(
+...     folder_path="local/checkpoints",
+...     repo_id="username/my-dataset",
+...     repo_type="dataset",
+...     multi_commits=True,
+...     multi_commits_verbose=True,
+... )
+```
+
+업로드 전략(즉, 생성되는 커밋)을 더 잘 제어하고 싶으면 로우 레벨의 [`plan_multi_commits`] 와 [`create_commits_on_pr`] 메서드를 살펴보세요.
+
+<Tip warning={true}>
+
+`multi_commits`은 아직 실험적인 기능입니다.
+해당 API와 동작은 향후 사전 고지 없이 변경될 수 있습니다.
+
+</Tip>
+
+### 예약된 업로드[[scheduled-uploads]]
+
+허깅 페이스 Hub를 사용하면 데이터를 쉽게 저장하고 버전업할 수 있지만, 동일한 파일을 수천 번 업데이트할 때는 몇 가지 제한이 있습니다.
+예를 들어, 배포된 Space에 대한 교육 프로세스 또는 사용자 로그를 저장하고 싶을 때 Hub에 데이터 집합으로 데이터를 업로드하는 것이 좋아 보이지만, 이를 제대로 하기 어려울 수 있습니다.
+데이터의 모든 업데이트를 버전으로 만들게 되면 git 리포지토리를 사용할 수 없는 상태로 만들어 버리기 때문입니다.
+[`CommitScheduler`] 클래스는 이 문제에 대한 해결책을 제공합니다.
+
+이 클래스는 로컬 폴더를 Hub에 정기적으로 푸시하는 백그라운드 작업을 실행합니다.
+일부 텍스트를 입력으로 받아 두 개의 번역을 생성한 다음, 사용자가 선호하는 번역을 선택할 수 있는 라디오 스페이스가 있다고 가정해 보겠습니다.
+이 스페이스의 각 실행에 대해 입력, 출력 및 사용자 기본 설정을 저장하여 결과를 분석하려고 하는데, 이것은 [`CommitScheduler`]의 완벽한 사용 사례가 될 수 있습니다.
+Hub에 데이터(잠재적으로 수백만 개의 사용자 피드백)를 저장하고 싶지만, 굳이 각 사용자의 입력을 _실시간_ 으로 저장할 필요는 없으니 데이터를 로컬 JSON 파일에 저장한 다음 10분마다 업로드하면 됩니다.
+예제 코드는 다음과 같습니다:
+
+```py
+>>> import json
+>>> import uuid
+>>> from pathlib import Path
+>>> import gradio as gr
+>>> from huggingface_hub import CommitScheduler
+
+# 데이터를 저장할 파일을 선언합니다. UUID를 이용하여 중복을 방지합니다.
+>>> feedback_file = Path("user_feedback/") / f"data_{uuid.uuid4()}.json"
+>>> feedback_folder = feedback_file.parent
+
+# 정기 업로드를 예약합니다. 원격 리포지토리와 로컬 폴더가 없을시 생성합니다.
+>>> scheduler = CommitScheduler(
+...     repo_id="report-translation-feedback",
+...     repo_type="dataset",
+...     folder_path=feedback_folder,
+...     path_in_repo="data",
+...     every=10,
+... )
+
+# 사용자가 피드백을 제출할 때 호출받을 함수를 정의합니다. (Gradio 안에서 호출받게 됩니다)
+>>> def save_feedback(input_text:str, output_1: str, output_2:str, user_choice: int) -> None:
+...     """
+...     JSON Lines 파일에 입/출력과 사용자 피드백을 추가합니다. 타 사용자에 의한 동시적인 쓰기를 지양하기 위해 스레드 락을 사용합니다.
+...     """
+...     with scheduler.lock:
+...         with feedback_file.open("a") as f:
+...             f.write(json.dumps({"input": input_text, "output_1": output_1, "output_2": output_2, "user_choice": user_choice}))
+...             f.write("\n")
+
+# Gradio를 시작합니다.
+>>> with gr.Blocks() as demo:
+>>>     ... # Gradio 데모를 정의하고 `save_feedback`을 사용합니다
+>>> demo.launch()
+```
+
+사용자 입력/출력 및 피드백은 Hub에서 데이터 세트의 형태로 사용할 수 있습니다.
+고유한 JSON 파일 이름을 사용하면 이전 실행이나 다른 스페이스/복제본이 동일한 리포지토리에 동시에 푸시하는 경우의 데이터를 덮어쓰지 않도록 보장할 수 있습니다.
+
+[`CommitScheduler`]에 대한 상세 사항은 다음과 같습니다:
+- **추가 전용:**
+    스케줄러는 폴더에 콘텐츠를 추가만 한다고 가정합니다. 기존 파일에 데이터를 추가하거나 새 파일을 만들 때만 사용하여야 합니다.
+    파일을 삭제하거나 덮어쓰면 리포지토리가 손상될 수 있습니다.
+- **git 히스토리**:
+    기본적으로 스케줄러는 `매 분마다`  폴더를 커밋합니다.
+    git 리포지토리를 너무 많이 오염시키지 않으려면 최소값을 5분으로 설정하는 것이 좋습니다.
+    또한 스케줄러는 빈 커밋을 피하도록 설계되었는데, 만약 폴더에서 새 콘텐츠가 감지되지 않으면 예약된 커밋을 삭제합니다.
+- **에러:**
+    스케줄러는 백그라운드 스레드로 실행되고, 이는 클래스를 인스턴스화할 때 시작되며 절대 멈추지 않습니다.
+    만약 업로드 중에 오류가 발생하면(예: 연결 문제), 스케줄러는 이를 아무 말 없이 무시하고 다음 예약된 커밋에서 재시도 합니다.
+- **스레드 안전:**
+    대부분의 경우 파일 락에 대해 걱정할 필요 없이 파일에 쓰기 작업을 수행 할 수 있습니다.
+    스케줄러는 업로드하는 동안 대상 폴더에 콘텐츠를 쓰더라도 충돌하거나 손상되지 않습니다.
+    그러나, 부하가 많은 앱의 경우 이런 작업에서 _동시성 문제_ 가 발생할 수 있습니다.
+    이 경우, `scheduler.lock`을 사용하여 스레드 안전을 보장하는 것이 좋습니다.
+    이 락은 스케줄러가 폴더에서 변경 사항을 검색할 때만 차단되며, 데이터를 업로드할 때는 차단되지 않습니다.
+    따라서 Space의 사용자 환경에는 영향을 미치지 않습니다.
+
+#### 스페이스 지속성 데모[[space-persistence-demo]]
+
+스페이스에서 Hub의 데이터셋으로 데이터를 영속하는 것이 [`CommitScheduler`]의 주요 사용 사례입니다.
+각 사용 사례에 따라 데이터 구조를 다르게 설정해야 할 수도 있습니다.
+데이터 구조는 동시 사용자와 재시작에 대해 견고해야 하며, 이는 대개 UUID를 생성 해야 함을 의미합니다. 
+견고함 뿐만 아니라, 재사용성을 위해 🤗 데이터 세트 라이브러리에서 읽을 수 있는 형식으로 데이터를 업로드해야 합니다.
+이 [스페이스](https://huggingface.co/spaces/Wauplin/space_to_dataset_saver)
+예제에서 여러 가지 데이터 형식을 저장하는 방법을 보여줍니다(각자의 필요에 맞게 조정해야 할 수도 있습니다).
+
+#### 사용자 지정 업로드[[custom-uploads]]
+
+[`CommitScheduler`]는 데이터가 추가 전용이며 "있는 그대로" 업로드해야 한다고 가정합니다.
+그러나 데이터 업로드 방식을 사용자 스스로 정의하고 싶을 때도 있는데, [`CommitScheduler`]를 상속받는 클래스를 생성하고 `push_to_hub` 메서드를 덮어쓰면 됩니다(원하는 방식으로 자유롭게 덮어쓰세요).
+이렇게 하면 해당 클래스가 백그라운드 스레드에서 `매 분마다` 호출됩니다.
+동시성 및 오류에 대해 걱정할 필요는 없지만 빈 커밋이나 중복된 데이터를 푸시하는 것과 같은 케이스들에 주의해야 합니다.
+
+아래의 (단순화된) 예제에서는 `push_to_hub`를 덮어써서 모든 PNG 파일을 단일 아카이브에 압축하여 Hub의 리포지토리에 과부하가 걸리는 것을 방지합니다:.
+
+```py
+class ZipScheduler(CommitScheduler):
+    def push_to_hub(self):
+        # 1. PNG 파일들을 나열합니다.
+          png_files = list(self.folder_path.glob("*.png"))
+          if len(png_files) == 0:
+              return None  # 커밋할 것이 없다면 일찍 리턴합니다.
+
+        # 2. png 파일들을 단일 Zip 파일로 압축합니다.
+        with tempfile.TemporaryDirectory() as tmpdir:
+            archive_path = Path(tmpdir) / "train.zip"
+            with zipfile.ZipFile(archive_path, "w", zipfile.ZIP_DEFLATED) as zip:
+                for png_file in png_files:
+                    zip.write(filename=png_file, arcname=png_file.name)
+
+            # 3. 압축된 파일을 업로드 합니다.
+            self.api.upload_file(..., path_or_fileobj=archive_path)
+
+        # 4. 로컬 png 파일을 삭제하여 다음에 다시 업로드 되는 일을 방지합니다.
+        for png_file in png_files:
+            png_file.unlink()
+```
+
+`push_to_hub`를 덮어쓰면 다음과 같은 [`CommitScheduler`]의 속성에 접근할 수 있습니다:
+- [`HfApi`] 클라이언트: `api`
+- 폴더 매개변수: `folder_path` 및 `path_in_repo`
+- 리포지토리 매개변수: `repo_id`, `repo_type`, `revision`
+- 스레드 락: `lock`
+
+<Tip>
+
+사용자 정의 스케줄러의 더 많은 예제는 사용 사례에 따른 다양한 구현이 포함된 [데모 스페이스](https://huggingface.co/spaces/Wauplin/space_to_dataset_saver)를 참조하세요.
+
+</Tip>
+
+### create_commit[[createcommit]]
+
+[`upload_file`] 및 [`upload_folder`] 함수는 일반적으로 사용하기 편리한 하이 레벨 API입니다.
+로우 레벨에서 작업할 필요가 없다면 이 함수들을 먼저 사용해 볼 것을 권장합니다.
+만약 커밋 레벨에서 작업하고 싶다면 [`create_commit`] 함수를 직접 사용할 수 있습니다.
+
+[`create_commit`]이 지원하는 작업 유형은 세 가지입니다:
+
+- [`CommitOperationAdd`] 는 파일을 Hub에 업로드합니다. 파일이 이미 있는 경우 파일 내용을 덮어씁니다. 이 작업은 두 개의 인수를 받습니다:
+
+  - `path_in_repo`: 파일을 업로드할 리포지토리 경로.
+  - `path_or_fileobj`: Hub에 업로드할 파일의 파일 시스템상 파일 경로 또는 파일 스타일 객체.
+
+- [`CommitOperationDelete`]는 리포지토리에서 파일 또는 폴더를 제거합니다. 이 작업은 `path_in_repo`를 인수로 받습니다.
+
+- [`CommitOperationCopy`]는 리포지토리 내의 파일을 복사합니다. 이 작업은 세 가지 인수를 받습니다:
+
+  - `src_path_in_repo`: 복사할 파일의 리포지토리 경로.
+  - `path_in_repo`: 파일 붙여넣기를 수행할 리포지토리 경로.
+  - `src_revision`: 선택 사항 - 다른 브랜치/리비전에서 파일을 복사하려는 경우 필요한 복사할 파일의 리비전.
+
+예를 들어, Hub 리포지토리에서 두 개의 파일을 업로드하고 한 개의 파일을 삭제하려는 경우:
+
+1. 파일을 추가하거나 삭제하고 폴더를 삭제하기 위해 적절한 `CommitOperation`을 사용합니다:
+
+```py
+>>> from huggingface_hub import HfApi, CommitOperationAdd, CommitOperationDelete
+>>> api = HfApi()
+>>> operations = [
+...     CommitOperationAdd(path_in_repo="LICENSE.md", path_or_fileobj="~/repo/LICENSE.md"),
+...     CommitOperationAdd(path_in_repo="weights.h5", path_or_fileobj="~/repo/weights-final.h5"),
+...     CommitOperationDelete(path_in_repo="old-weights.h5"),
+...     CommitOperationDelete(path_in_repo="logs/"),
+...     CommitOperationCopy(src_path_in_repo="image.png", path_in_repo="duplicate_image.png"),
+... ]
+```
+
+2. 작업을 [`create_commit`]에 전달합니다:
+
+```py
+>>> api.create_commit(
+...     repo_id="lysandre/test-model",
+...     operations=operations,
+...     commit_message="Upload my model weights and license",
+... )
+```
+
+다음 함수들은 [`upload_file`] 및 [`upload_folder`] 외에도 내부적으로 [`create_commit`]을 사용합니다:
+
+- [`delete_file`]은 Hub의 리포지토리에서 단일 파일을 삭제합니다.
+- [`delete_folder`]는 Hub의 리포지토리에서 전체 폴더를 삭제합니다.
+- [`metadata_update`]는 리포지토리의 메타데이터를 업데이트합니다.
+
+자세한 내용은 [`HfApi`] 의 레퍼런스를 참조하세요.
+
+### 커밋하기 전에 LFS 파일 미리 업로드하기[[preupload-lfs-files-before-commit]]
+
+경우에 따라 커밋 호출을 **하기 전에** 대용량 파일을 S3에 업로드해야 할 수도 있습니다.
+예를 들어 인메모리에 생성된 여러 개의 샤드에 있는 데이터 세트를 커밋하는 경우, 샤드를 하나씩 업로드해야 메모리 부족 문제를 피할 수 있을 것입니다.
+이 문제에 대한 해결책은 각 샤드를 리포지토리에 별도의 커밋으로 업로드하는 것입니다.
+이 방법은 완벽하게 유효하지만, 수십 개의 커밋을 생성하여 잠재적으로 git 히스토리를 엉망으로 만들 수 있다는 단점이 있습니다.
+이 문제를 극복하기 위해 파일을 하나씩 S3에 업로드한 다음 마지막에 하나의 커밋을 생성할 수 있습니다.
+이는 [`preupload_lfs_files`]와 [`create_commit`]을 함께 사용하면 됩니다.
+
+<Tip warning={true}>
+
+이 방법은 고급 사용자를 위한 방식입니다.
+사전에 파일을 미리 업로드하는 로우 레벨 로직을 처리하는 대신 [`upload_file`], [`upload_folder`] 또는 [`create_commit`]을 직접 사용하는 것이 대부분의 경우에 적합합니다.
+[`preupload_lfs_files`]의 주요 주의 사항은 커밋이 실제로 이루어질 때까지는 Hub의 리포지토리에서 업로드 파일에 액세스할 수 없다는 것입니다.
+궁금한 점이 있으면 언제든지 Discord나 GitHub 이슈로 문의해 주세요.
+
+</Tip>
+
+다음은 파일을 미리 업로드하는 방법을 보여주는 간단한 예시입니다:
+
+```py
+>>> from huggingface_hub import CommitOperationAdd, preupload_lfs_files, create_commit, create_repo
+
+>>> repo_id = create_repo("test_preupload").repo_id
+
+>>> operations = [] # 생성될 모든 `CommitOperationAdd` 객체를 나열합니다.
+>>> for i in range(5):
+...     content = ... # bin 자료를 생성합니다.
+...     addition = CommitOperationAdd(path_in_repo=f"shard_{i}_of_5.bin", path_or_fileobj=content)
+...     preupload_lfs_files(repo_id, additions=[addition])
+...     operations.append(addition)
+
+>>> # 커밋을 생성합니다.
+>>> create_commit(repo_id, operations=operations, commit_message="Commit all shards")
+```
+
+먼저, [`CommitOperationAdd`] 오브젝트를 하나씩 생성합니다. 실전을 상정한 예제에서는, 여기에 생성된 샤드를 포함합니다.
+각 파일은 다음 파일을 생성하기 전에 업로드됩니다.
+[`preupload_lfs_files`] 단계에서는 **`CommitOperationAdd` 오브젝트가 변경됩니다.** 따라서[`create_commit`]에 직접 전달할 때만 사용해야 합니다.
+오브젝트의 주요 업데이트는 **바이너리 콘텐츠가 제거**된다는 것인데, 이는 따로 레퍼런스를 저장하지 않으면 가비지 콜렉팅 됨을 의미합니다. 이미 업로드된 콘텐츠를 메모리상에 남기고 싶지 않기 때문입니다.
+마지막으로 모든 작업을 [`create_commit`]에 전달하여 커밋을 생성합니다.
+아직 처리되지 않은 추가 작업(추가, 삭제 또는 복사)도 전달하면 올바르게 처리됩니다.
+
+## 대용량 업로드를 위한 팁과 요령[[tips-and-tricks-for-large-uploads]]
+
+리포지토리에 있는 대량의 데이터를 처리할 때 주의해야 할 몇 가지 제한 사항이 있습니다.
+데이터를 스트리밍하는 데 걸리는 시간을 고려하면, 프로세스 마지막에 업로드/푸시가 실패하거나 hf.co에서 또는 로컬에서 작업할 때 성능 저하가 발생하는 것은 매우 성가신 일이 될 수 있습니다.
+
+Hub에서 리포지토리를 구성하는 방법에 대한 모범 사례는 [리포지토리 제한 사항 및 권장 사항](https://huggingface.co/docs/hub/repositories-recommendations) 가이드를 참조하세요.
+다음으로 업로드 프로세스를 최대한 원활하게 진행할 수 있는 몇 가지 실용적인 팁을 살펴보겠습니다.
+
+- **작게 시작하세요**: 업로드 스크립트를 테스트할 때는 소량의 데이터로 시작하는 것이 좋습니다. 소량의 데이터를 처리하는데 적은 시간이 들기 때문에 스크립트를 반복하는 것이 더 쉽습니다.
+- **실패를 예상하세요**: 대량의 데이터를 스트리밍하는 것은 어려운 일입니다. 어떤 일이 일어날지 알 수 없지만, 항상 컴퓨터, 연결, 서버 등 어떤 이유로든 한 번쯤은 실패할 수 있다는 점을 고려하는 것이 가장 좋습니다. 예를 들어, 많은 양의 파일을 업로드할 계획이라면 다음 파일을 업로드하기 전에 이미 업로드한 파일을 로컬에서 추적하는 것이 가장 좋습니다. 이미 커밋된 LFS 파일은 절대 두 번 다시 업로드되지 않지만 클라이언트 측에서 이를 확인하면 시간을 절약할 수 있습니다.
+- **`hf_transfer`를 사용하세요**: [`hf_transfer`](https://github.com/huggingface/hf_transfer)는 대역폭이 매우 높은 컴퓨터에서 업로드 속도를 높이기 위한 Rust 기반 라이브러리입니다. `hf_transfer`를 사용하려면:
+
+    1. `huggingface_hub`를 설치할 때 `hf_transfer`를 추가로 지정합니다.
+       (예: `pip install huggingface_hub[hf_transfer]`).
+    2. 환경 변수로 `HF_HUB_ENABLE_HF_TRANSFER=1`을 설정합니다.
+
+<Tip warning={true}>
+
+`hf_transfer`는 고급 사용자 도구입니다!
+테스트 및 프로덕션 준비가 완료되었지만, 고급 오류 처리나 프록시와 같은 사용자 친화적인 기능이 부족합니다.
+자세한 내용은 [이 섹션](https://huggingface.co/docs/huggingface_hub/hf_transfer)을 참조하세요.
+
+</Tip>
+
+## (레거시) Git LFS로 파일 업로드하기[[legacy-upload-files-with-git-lfs]]
+
+위에서 설명한 모든 방법은 Hub의 API를 사용하여 파일을 업로드하며, 이는 Hub에 파일을 업로드하는 데 권장되는 방법입니다.
+이뿐만 아니라 로컬 리포지토리를 관리하기 위하여 git 도구의 래퍼인 [`Repository`]또한 제공합니다.
+
+<Tip warning={true}>
+
+[`Repository`]는 공식적으로 지원 종료된 것은 아니지만, 가급적이면 위에서 설명한 HTTP 기반 방법들을 사용할 것을 권장합니다.
+이 권장 사항에 대한 자세한 내용은 HTTP 기반 방식과 Git 기반 방식 간의 핵심적인 차이점을 설명하는 [이 가이드](../concepts/git_vs_http)를 참조하세요.
+
+</Tip>
+
+Git LFS는 10MB보다 큰 파일을 자동으로 처리합니다. 하지만 매우 큰 파일(5GB 이상)의 경우, Git LFS용 사용자 지정 전송 에이전트를 설치해야 합니다:
+
+```bash
+huggingface-cli lfs-enable-largefiles
+```
+
+매우 큰 파일이 있는 각 리포지토리에 대해 이 옵션을 설치해야 합니다.
+설치가 완료되면 5GB보다 큰 파일을 푸시할 수 있습니다.
+
+### 커밋 컨텍스트 관리자[[commit-context-manager]]
+
+`commit` 컨텍스트 관리자는 가장 일반적인 네 가지 Git 명령인 pull, add, commit, push를 처리합니다. 
+`git-lfs`는 10MB보다 큰 파일을 자동으로 추적합니다.
+다음 예제에서는 `commit` 컨텍스트 관리자가 다음과 같은 작업을 수행합니다:
+
+1. `text-files` 리포지토리에서 pull.
+2. `file.txt`에 변경 내용을 add.
+3. 변경 내용을 commit.
+4. 변경 내용을 `text-files` 리포지토리에 push.
+
+```python
+>>> from huggingface_hub import Repository
+>>> with Repository(local_dir="text-files", clone_from="<user>/text-files").commit(commit_message="My first file :)"):
+...     with open("file.txt", "w+") as f:
+...         f.write(json.dumps({"hey": 8}))
+```
+
+다음은 `commit` 컨텍스트 관리자를 사용하여 파일을 저장하고 리포지토리에 업로드하는 방법의 또 다른 예입니다:
+
+```python
+>>> import torch
+>>> model = torch.nn.Transformer()
+>>> with Repository("torch-model", clone_from="<user>/torch-model", token=True).commit(commit_message="My cool model :)"):
+...     torch.save(model.state_dict(), "model.pt")
+```
+
+커밋을 비동기적으로 푸시하려면 `blocking=False`를 설정하세요.
+커밋을 푸시하는 동안 스크립트를 계속 실행하고 싶을 때 논 블로킹 동작이 유용합니다.
+
+```python
+>>> with repo.commit(commit_message="My cool model :)", blocking=False)
+```
+
+`command_queue` 메서드로 푸시 상태를 확인할 수 있습니다:
+
+```python
+>>> last_command = repo.command_queue[-1]
+>>> last_command.status
+```
+
+가능한 상태는 아래 표를 참조하세요:
+
+| 상태      | 설명                          |
+| -------- | ----------------------------- |
+| -1       | 푸시가 진행 중입니다.           |
+| 0        | 푸시가 성공적으로 완료되었습니다.|
+| Non-zero | 오류가 발생했습니다.            |
+
+`blocking=False`인 경우, 명령이 추적되며 스크립트에서 다른 오류가 발생하더라도 모든 푸시가 완료된 경우에만 스크립트가 종료됩니다.
+푸시 상태를 확인하는 데 유용한 몇 가지 추가 명령은 다음과 같습니다:
+
+```python
+# 오류를 검사합니다.
+>>> last_command.stderr
+
+# 푸시 진행여부를 확인합니다.
+>>> last_command.is_done
+
+# 푸시 명령의 에러여부를 파악합니다.
+>>> last_command.failed
+```
+
+### push_to_hub[[pushtohub]]
+
+[`Repository`] 클래스에는 파일을 추가하고 커밋한 후 리포지토리로 푸시하는 [`~Repository.push_to_hub`] 함수가 있습니다. [`~Repository.push_to_hub`]는 `commit` 컨텍스트 관리자와는 달리 호출하기 전에 먼저 리포지토리에서 업데이트(pull) 작업을 수행 해야 합니다.
+
+예를 들어 Hub에서 리포지토리를 이미 복제했다면 로컬 디렉터리에서 `repo`를 초기화할 수 있습니다:
+
+```python
+>>> from huggingface_hub import Repository
+>>> repo = Repository(local_dir="path/to/local/repo")
+```
+
+로컬 클론을 [`~Repository.git_pull`]로 업데이트한 다음 파일을 Hub로 푸시합니다:
+
+```py
+>>> repo.git_pull()
+>>> repo.push_to_hub(commit_message="Commit my-awesome-file to the Hub")
+```
+
+그러나 아직 파일을 푸시할 준비가 되지 않았다면 [`~Repository.git_add`] 와 [`~Repository.git_commit`]을 사용하여 파일만 추가하고 커밋할 수 있습니다:
+
+```py
+>>> repo.git_add("path/to/file")
+>>> repo.git_commit(commit_message="add my first model config file :)")
+```
+
+준비가 완료되면 [`~Repository.git_push`]를 사용하여 파일을 리포지토리에 푸시합니다:
+
+```py
+>>> repo.git_push()
+```
diff --git a/docs/source/ko/guides/webhooks_server.md b/docs/source/ko/guides/webhooks_server.md
new file mode 100644
index 00000000..adc94e18
--- /dev/null
+++ b/docs/source/ko/guides/webhooks_server.md
@@ -0,0 +1,199 @@
+<!--⚠️ Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be
+rendered properly in your Markdown viewer.
+-->
+
+# 웹훅 서버[[webhooks-server]]
+
+웹훅은 MLOps 관련 기능의 기반이 됩니다. 이를 통해 특정 저장소의 새로운 변경 사항을 수신하거나,
+관심 있는 특정 사용자/조직에 속한 모든 저장소의 변경 사항을 받아볼 수 있습니다.
+이 가이드에서는 `huggingface_hub`를 활용하여 웹훅을 수신하는 서버를 만들고 Space에 배포하는 방법을 설명합니다. 
+이를 위해서는 Huggingface Hub의 웹훅 개념에 대해 익숙해야 합니다. 
+웹훅 자체에 대해 더 자세히 알아보려면 이 [가이드](https://huggingface.co/docs/hub/webhooks)를 먼저 읽어보세요.  
+
+이 가이드에서 사용할 기본 클래스는 [`WebhooksServer`]입니다. 
+이 클래스는 Huggingface Hub에서 웹훅을 받을 수 있는 서버를 쉽게 구성할 수 있습니다. 서버는 [Gradio](https://gradio.app/) 앱을 기반으로 합니다. 
+이 서버에는 사용자를 위한 지침을 표시하는 UI와 웹훅을 수신하는 API가 있습니다.
+
+<Tip>
+
+웹훅 서버의 실행 예시를 보려면 [Spaces CI Bot](https://huggingface.co/spaces/spaces-ci-bot/webhook)을 확인하세요. 
+이것은 Space의 PR이 열릴 때마다 임시 환경을 실행하는 Space입니다.
+
+</Tip>
+
+<Tip warning={true}>
+
+이것은 [실험적 기능](../package_reference/environment_variables#hfhubdisableexperimentalwarning)입니다. 
+본 API는 현재 개선 작업 중이며, 향후 사전 통지 없이 주요 변경 사항이 도입될 수 있습니다. 
+requirements에서 `huggingface_hub`의 버전을 고정하는 것을 권장합니다.
+
+</Tip>
+
+
+## 엔드포인트 생성[[create-an-endpoint]]
+
+웹훅 엔드포인트를 구현하는 것은 함수에 데코레이터를 추가하는 것만큼 간단합니다. 
+주요 개념을 설명하기 위해 첫 번째 예시를 살펴보겠습니다:
+
+```python
+# app.py
+from huggingface_hub import webhook_endpoint, WebhookPayload
+
+@webhook_endpoint
+async def trigger_training(payload: WebhookPayload) -> None:
+    if payload.repo.type == "dataset" and payload.event.action == "update":
+        # 데이터 세트가 업데이트되면 학습 작업을 트리거합니다.
+        ...
+```
+
+이 코드 스니펫을 `'app.py'`라는 파일에 저장하고 `'python app.py'`로 실행하면 다음과 같은 메시지가 표시될 것입니다:
+
+```text
+Webhook secret is not defined. This means your webhook endpoints will be open to everyone.
+To add a secret, set `WEBHOOK_SECRET` as environment variable or pass it at initialization:
+        `app = WebhooksServer(webhook_secret='my_secret', ...)`
+For more details about webhook secrets, please refer to https://huggingface.co/docs/hub/webhooks#webhook-secret.
+Running on local URL:  http://127.0.0.1:7860
+Running on public URL: https://1fadb0f52d8bf825fc.gradio.live
+
+This share link expires in 72 hours. For free permanent hosting and GPU upgrades (NEW!), check out Spaces: https://huggingface.co/spaces
+
+Webhooks are correctly setup and ready to use:
+  - POST https://1fadb0f52d8bf825fc.gradio.live/webhooks/trigger_training
+Go to https://huggingface.co/settings/webhooks to setup your webhooks.
+```
+
+축하합니다! 웹훅 서버를 실행했습니다! 정확히 어떤 일이 일어났는지 살펴보겠습니다:
+
+1. [`webhook_endpoint`]로 함수에 데코레이터를 추가하면 백그라운드에서 [`WebhooksServer`] 객체가 생성됩니다. 
+볼 수 있듯이 이 서버는 http://127.0.0.1:7860 에서 실행되는 Gradio 앱입니다. 
+이 URL을 브라우저에서 열면 등록된 웹훅에 대한 지침이 있는 랜딩 페이지를 볼 수 있습니다.
+2. Gradio 앱은 내부적으로 FastAPI 서버입니다. 새로운 POST 경로 `/webhooks/trigger_training`이 추가되었습니다. 
+이 경로는 웹훅을 수신하고 트리거될 때 `trigger_training` 함수를 실행합니다. 
+FastAPI는 자동으로 페이로드를 구문 분석하고 [`WebhookPayload`] 객체로 함수에 전달합니다. 
+이 `pydantic` 객체에는 웹훅을 트리거한 이벤트에 대한 모든 정보가 포함되어 있습니다.
+3. Gradio 앱은 인터넷에서 요청을 받을 수 있는 터널도 열었습니다. 
+이것은 흥미로운 부분으로, https://huggingface.co/settings/webhooks 에서 로컬 머신을 가리키는 웹훅을 구성할 수 있습니다. 
+이를 통해 웹훅 서버를 디버깅하고 Space에 배포하기 전에 빠르게 반복할 수 있습니다.
+4. 마지막으로 로그에는 서버가 현재 비밀로 보호되지 않는다고 알려줍니다. 
+이것은 로컬 디버깅에는 문제가 되지 않지만 나중에 고려해야 할 사항입니다.
+
+<Tip warning={true}>
+
+기본적으로 서버는 스크립트 끝에서 시작됩니다. 
+주피터 노트북에서 실행 중이라면 `decorated_function.run()`을 호출하여 서버를 수동으로 시작할 수 있습니다. 
+고유한 서버를 사용하기 때문에 여러 엔드포인트가 있더라도 서버를 한 번만 시작하면 됩니다.
+
+</Tip>
+
+
+## 웹훅 설정하기[[configure-a-webhook]]
+
+웹훅 서버를 실행하고 있으므로, 이제 메시지를 수신하기 위해 웹훅을 구성해야 합니다.
+https://huggingface.co/settings/webhooks 로 이동하여 "Add a new webhook"을 클릭하고 웹훅을 구성하세요. 
+모니터링할 대상 저장소와 웹훅 URL `https://1fadb0f52d8bf825fc.gradio.live/webhooks/trigger_training`을 설정하세요.
+
+<div class="flex justify-center">
+<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/hub/configure_webhook.png"/>
+</div>
+
+이걸로 끝입니다! 이제 대상 저장소를 업데이트하면 웹훅을 트리거할 수 있습니다. 예를 들면, 커밋 푸시가 그 방법이 될 수 있습니다.
+웹훅의 Activity 탭에서 트리거된 이벤트를 확인할 수 있습니다. 이제 작동하는 구성이 있으므로 테스트하고 빠르게 반복할 수 있습니다. 
+코드를 수정하고 서버를 다시 시작하면 공개 URL이 변경될 수 있습니다. 
+필요한 경우 Hub에서 웹훅 구성을 업데이트하세요.
+
+## Space에 배포하기[[deploy-to-a-space]]
+
+이제 작동하는 웹훅 서버가 마련되었으므로, 다음 목표는 이를 Space에 배포하는 것입니다. https://huggingface.co/new-space 에 가서 Space를 생성합니다. 
+이름을 지정하고, Gradio SDK를 선택한 다음 "Create Space"를 클릭합니다. 코드를 `app.py` 파일로 Space에 업로드합니다.
+Space가 자동으로 시작됩니다!
+Space에 대한 자세한 내용은 이 [가이드](https://huggingface.co/docs/hub/spaces-overview)를 참조하세요.
+
+웹훅 서버가 이제 공개 Space에서 실행 중입니다. 대부분의 경우 비밀번호로 보안을 설정하고 싶을 것입니다.
+Space 설정 > "Repository secrets" 섹션 > "Add a secret" 로 이동합니다. `WEBHOOK_SECRET` 환경 변수에 원하는 값을 설정합니다. 
+[Webhooks 설정](https://huggingface.co/settings/webhooks)으로 돌아가서 웹훅 구성에 비밀번호를 설정합니다. 
+이제 올바른 비밀번호가 있는 요청만 서버에서 허용됩니다.
+
+이게 전부입니다! Space가 이제 Hub의 웹훅을 수신할 준비가 되었습니다.
+무료 하드웨어인 'cpu-basic'에서 Space를 실행 시, 48시간 동안 비활성화되면 종료된다는 점을 유념하세요. 
+영구적인 Space가 필요한 경우 [업그레이드된 하드웨어](https://huggingface.co/docs/hub/spaces-gpus#hardware-specs)를 설정해야 합니다.
+
+## 고급 사용법[[advanced-usage]]
+
+위의 가이드에서는 [`WebhooksServer`]를 설정하는 가장 빠른 방법에 대해 설명했습니다. 
+이 섹션에서는 이를 더욱 사용자 정의하는 방법을 살펴보겠습니다.
+
+### 다중 엔드포인트[[multiple-endpoints]]
+
+동일한 서버에 여러 엔드포인트를 등록할 수 있습니다. 
+예를 들어, 하나의 엔드포인트는 학습 작업을 트리거하고 다른 엔드포인트는 모델 평가를 트리거하도록 할 수 있습니다. 
+이를 위해 여러 개의 `@webhook_endpoint` 데코레이터를 추가하면 됩니다:
+
+```python
+# app.py
+from huggingface_hub import webhook_endpoint, WebhookPayload
+
+@webhook_endpoint
+async def trigger_training(payload: WebhookPayload) -> None:
+    if payload.repo.type == "dataset" and payload.event.action == "update":
+        # 데이터 세트가 업데이트되면 학습 작업을 트리거합니다.
+        ...
+
+@webhook_endpoint
+async def trigger_evaluation(payload: WebhookPayload) -> None:
+    if payload.repo.type == "model" and payload.event.action == "update":
+        # 모델이 업데이트되면 평가 작업을 트리거합니다. 
+        ...
+```
+
+이렇게 하면 두 개의 엔드포인트가 생성됩니다:
+
+```text
+(...)
+Webhooks are correctly setup and ready to use:
+  - POST https://1fadb0f52d8bf825fc.gradio.live/webhooks/trigger_training
+  - POST https://1fadb0f52d8bf825fc.gradio.live/webhooks/trigger_evaluation
+```
+
+### 사용자 정의 서버[[custom-server]]
+
+더 많은 유연성을 얻기 위해 [`WebhooksServer`] 객체를 직접 생성할 수도 있습니다. 
+이것은 서버의 랜딩 페이지를 사용자 정의하고자 할 때 유용합니다. 
+기본 페이지를 덮어쓸 [Gradio UI](https://gradio.app/docs/#blocks)를 전달하여 이를 수행할 수 있습니다. 
+예를 들어, 사용자를 위한 지침을 추가하거나 웹훅을 수동으로 트리거하는 양식을 추가할 수 있습니다. 
+[`WebhooksServer`]를 생성할 때, [`~WebhooksServer.add_webhook`] 데코레이터를 사용하여 새로운 웹훅을 등록할 수 있습니다.
+
+전체 예제는 다음과 같습니다:
+
+```python
+import gradio as gr
+from fastapi import Request
+from huggingface_hub import WebhooksServer, WebhookPayload
+
+# 1. UI 정의
+with gr.Blocks() as ui:
+    ...
+
+# 2. 사용자 정의 UI와 시크릿으로 WebhooksServer 생성
+app = WebhooksServer(ui=ui, webhook_secret="my_secret_key")
+
+# 3. 명시적 이름으로 웹훅 등록
+@app.add_webhook("/say_hello")
+async def hello(payload: WebhookPayload):
+    return {"message": "hello"}
+
+# 4. 암시적 이름으로 웹훅 등록
+@app.add_webhook
+async def goodbye(payload: WebhookPayload):
+    return {"message": "goodbye"}
+
+# 5. 서버 시작 (선택 사항)
+app.run()
+```
+
+1. Gradio 블록을 사용하여 사용자 정의 UI를 정의합니다. 이 UI는 서버의 랜딩 페이지에 표시됩니다.
+2. 사용자 정의 UI와 시크릿으로 [`WebhooksServer`] 객체를 생성합니다. 
+시크릿은 선택 사항이며 `WEBHOOK_SECRET` 환경 변수로 설정할 수 있습니다. 
+3. 명시적 이름으로 웹훅을 등록합니다. 이렇게 하면 `/webhooks/say_hello` 엔드포인트가 생성됩니다.
+4. 암시적 이름으로 웹훅을 등록합니다. 이렇게 하면 `/webhooks/goodbye` 엔드포인트가 생성됩니다.
+5. 서버를 시작합니다. 이것은 선택 사항이며 스크립트 끝에서 자동으로 서버가 시작됩니다.
diff --git a/docs/source/ko/package_reference/cache.md b/docs/source/ko/package_reference/cache.md
new file mode 100644
index 00000000..2e155c7f
--- /dev/null
+++ b/docs/source/ko/package_reference/cache.md
@@ -0,0 +1,57 @@
+<!--⚠️ Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be
+rendered properly in your Markdown viewer.
+-->
+
+# 캐시 시스템 참조[[cache-system-reference]]
+
+버전 0.8.0에서의 업데이트로, 캐시 시스템은 Hub에 의존하는 라이브러리 전체에서 공유되는 중앙 캐시 시스템으로 발전하였습니다. Hugging Face 캐싱에 대한 자세한 설명은 [캐시 시스템 가이드](../guides/manage-cache)를 참조하세요.
+
+## 도우미 함수[[helpers]]
+
+### try_to_load_from_cache[[huggingface_hub.try_to_load_from_cache]]
+
+[[autodoc]] huggingface_hub.try_to_load_from_cache
+
+### cached_assets_path[[huggingface_hub.cached_assets_path]]
+
+[[autodoc]] huggingface_hub.cached_assets_path
+
+### scan_cache_dir[[huggingface_hub.scan_cache_dir]]
+
+[[autodoc]] huggingface_hub.scan_cache_dir
+
+## 데이터 구조[[data-structures]]
+
+모든 구조체는 [`scan_cache_dir`]에 의해 생성되고 반환되며, 불변(immutable)입니다.
+
+### HFCacheInfo[[huggingface_hub.HFCacheInfo]]
+
+[[autodoc]] huggingface_hub.HFCacheInfo
+
+### CachedRepoInfo[[huggingface_hub.CachedRepoInfo]]
+
+[[autodoc]] huggingface_hub.CachedRepoInfo
+    - size_on_disk_str
+    - refs
+
+### CachedRevisionInfo[[huggingface_hub.CachedRevisionInfo]]
+
+[[autodoc]] huggingface_hub.CachedRevisionInfo
+    - size_on_disk_str
+    - nb_files
+
+### CachedFileInfo[[huggingface_hub.CachedFileInfo]]
+
+[[autodoc]] huggingface_hub.CachedFileInfo
+    - size_on_disk_str
+
+### DeleteCacheStrategy[[huggingface_hub.DeleteCacheStrategy]]
+
+[[autodoc]] huggingface_hub.DeleteCacheStrategy
+    - expected_freed_size_str
+
+## 예외[[exceptions]]
+
+### CorruptedCacheException[[huggingface_hub.CorruptedCacheException]]
+
+[[autodoc]] huggingface_hub.CorruptedCacheException
diff --git a/docs/source/ko/package_reference/collections.md b/docs/source/ko/package_reference/collections.md
new file mode 100644
index 00000000..3b7bec48
--- /dev/null
+++ b/docs/source/ko/package_reference/collections.md
@@ -0,0 +1,24 @@
+<!--⚠️ Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be
+rendered properly in your Markdown viewer.
+-->
+
+# 컬렉션 관리[[managing-collections]]
+
+Hub에서 Space를 관리하는 메소드에 대한 자세한 설명은 [`HfApi`] 페이지를 확인하세요.
+
+- 컬렉션 내용 가져오기: [`get_collection`]
+- 새로운 컬렉션 생성: [`create_collection`]
+- 컬렉션 업데이트: [`update_collection_metadata`]
+- 컬렉션 삭제: [`delete_collection`]
+- 컬렉션에 항목 추가: [`add_collection_item`]
+- 컬렉션의 항목 업데이트: [`update_collection_item`]
+- 컬렉션에서 항목 제거: [`delete_collection_item`]
+
+
+### Collection[[huggingface_hub.Collection]]
+
+[[autodoc]] Collection
+
+### CollectionItem[[huggingface_hub.CollectionItem]]
+
+[[autodoc]] CollectionItem
diff --git a/docs/source/ko/package_reference/file_download.md b/docs/source/ko/package_reference/file_download.md
new file mode 100644
index 00000000..82e67a83
--- /dev/null
+++ b/docs/source/ko/package_reference/file_download.md
@@ -0,0 +1,35 @@
+<!--⚠️ Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be
+rendered properly in your Markdown viewer.
+-->
+
+# 파일 다운로드 하기[[downloading-files]]
+
+## 단일 파일 다운로드하기[[download-a-single-file]]
+
+### hf_hub_download[[huggingface_hub.hf_hub_download]]
+
+[[autodoc]]huggingface_hub.hf_hub_download
+
+### hf_hub_url[[huggingface_hub.hf_hub_url]]
+
+[[autodoc]]huggingface_hub.hf_hub_url
+
+## 리포지토리의 스냅샷 다운로드하기[[huggingface_hub.snapshot_download]]
+
+[[autodoc]]huggingface_hub.snapshot_download
+
+## 파일에 대한 메타데이터 가져오기[[get-metadata-about-a-file]]
+
+### get_hf_file_metadata[[huggingface_hub.get_hf_file_metadata]]
+
+[[autodoc]]huggingface_hub.get_hf_file_metadata
+
+### HfFileMetadata[[huggingface_hub.HfFileMetadata]]
+
+[[autodoc]]huggingface_hub.HfFileMetadata
+
+## 캐싱[[caching]]
+
+위에 나열된 메소드들은 파일을 재다운로드하지 않도록 하는 캐싱 시스템과 함께 작동하도록 설계되었습니다. v0.8.0에서의 업데이트로, 캐싱 시스템은 Hub를 기반으로 하는 다양한 라이브러리 간의 공유 중앙 캐시 시스템으로 발전했습니다.
+
+Hugging Face에서의 캐싱에 대한 자세한 설명은[캐시 시스템 가이드](../guides/manage-cache)를 참조하세요.
diff --git a/docs/source/ko/package_reference/inference_client.md b/docs/source/ko/package_reference/inference_client.md
new file mode 100644
index 00000000..b66200dd
--- /dev/null
+++ b/docs/source/ko/package_reference/inference_client.md
@@ -0,0 +1,58 @@
+<!--⚠️ Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be
+rendered properly in your Markdown viewer.
+-->
+
+# 추론[[inference]]
+
+추론은 학습된 모델을 사용하여 새로운 데이터를 예측하는 과정입니다. 이 과정은 계산량이 많을 수 있기 때문에, 전용 서버에서 실행하는 것이 흥미로운 옵션이 될 수 있습니다. `huggingface_hub` 라이브러리는 호스팅된 모델에 대한 추론을 실행하는 간단한 방법을 제공합니다. 연결할 수 있는 서비스는 여러가지가 있습니다:
+
+- [추론 API](https://huggingface.co/docs/api-inference/index): Hugging Face의 인프라에서 가속화된 추론을 무료로 실행할 수 있는 서비스입니다. 이 서비스는 시작하기 위한 빠른 방법이며, 다양한 모델을 테스트하고 AI 제품을 프로토타입화하는 데에도 유용합니다.
+- [추론 엔드포인트](https://huggingface.co/inference-endpoints): 모델을 쉽게 운영 환경으로 배포할 수 있는 제품입니다. 추론은 여러분이 선택한 클라우드 제공업체의 전용 및 완전히 관리되는 인프라에서 Hugging Face에 의해 실행됩니다.
+
+이러한 서비스는 [`InferenceClient`] 객체를 사용하여 호출할 수 있습니다. 자세한 사용 방법에 대해서는 [이 가이드](../guides/inference)를 참조해주세요.
+
+## 추론 클라이언트[[huggingface_hub.InferenceClient]]
+
+[[autodoc]] InferenceClient
+
+## 비동기 추론 클라이언트[[huggingface_hub.AsyncInferenceClient]]
+
+비동기 버전의 클라이언트도 제공되며, 이는 `asyncio`와 `aiohttp`를 기반으로 작동합니다. 
+이를 사용하려면 `aiohttp`를 직접 설치하거나 `[inference]` 추가 기능을 사용할 수 있습니다:
+
+```sh
+pip install --upgrade huggingface_hub[inference]
+# 또는
+# pip install aiohttp
+```
+
+[[autodoc]] AsyncInferenceClient
+
+## 추론 시간 초과 오류[[huggingface_hub.InferenceTimeoutError]]
+
+[[autodoc]] InferenceTimeoutError
+
+## 반환 유형[[return-types]]
+
+대부분의 작업에 대해, 반환 값은 내장된 유형(string, list, image...)을 갖습니다. 보다 복잡한 유형을 위한 목록은 다음과 같습니다.
+
+### 대화형 출력 대화[[huggingface_hub.inference._types.ConversationalOutputConversation]]
+
+[[autodoc]] huggingface_hub.inference._types.ConversationalOutputConversation
+
+### 대화형 출력[[huggingface_hub.inference._types.ConversationalOutput]]
+
+[[autodoc]] huggingface_hub.inference._types.ConversationalOutput
+
+### 모델 상태[[huggingface_hub.inference._common.ModelStatus]]
+
+[[autodoc]] huggingface_hub.inference._common.ModelStatus
+
+## 추론 API[[huggingface_hub.InferenceApi]]
+
+[`InferenceAPI`]는 추론 API를 호출하는 레거시 방식입니다. 이 인터페이스는 더 간단하며 각 작업의 입력 매개변수와 출력 형식을 알아야 합니다. 또한 추론 엔드포인트나 AWS SageMaker와 같은 다른 서비스에 연결할 수 있는 기능이 없습니다. [`InferenceAPI`]는 곧 폐지될 예정이므로 가능한 경우 [`InferenceClient`]를 사용하는 것을 권장합니다. 스크립트에서 [`InferenceAPI`]를 [`InferenceClient`]로 전환하는 방법에 대해 알아보려면 [이 가이드](../guides/inference#legacy-inferenceapi-client)를 참조하세요.
+
+[[autodoc]] InferenceApi
+    - __init__
+    - __call__
+    - all
diff --git a/docs/source/ko/package_reference/inference_endpoints.md b/docs/source/ko/package_reference/inference_endpoints.md
new file mode 100644
index 00000000..472a452d
--- /dev/null
+++ b/docs/source/ko/package_reference/inference_endpoints.md
@@ -0,0 +1,42 @@
+# 추론 엔드포인트 [[inference-endpoints]]
+
+Hugging Face가 관리하는 추론 엔드포인트는 우리가 모델을 쉽고 안전하게 배포할 수 있게 해주는 도구입니다. 이러한 추론 엔드포인트는 [Hub](https://huggingface.co/models)에 있는 모델을 기반으로 설계되었습니다. 이 문서는 `huggingface_hub`와 추론 엔드포인트 통합에 관한 참조 페이지이며, 더욱 자세한 정보는 [공식 문서](https://huggingface.co/docs/inference-endpoints/index)를 통해 확인할 수 있습니다.
+
+<Tip>
+
+'huggingface_hub'를 사용하여 추론 엔드포인트를 프로그래밍 방식으로 관리하는 방법을 알고 싶다면, [관련 가이드](../guides/inference_endpoints)를 확인해 보세요.
+
+</Tip>
+
+추론 엔드포인트는 API로 쉽게 접근할 수 있습니다. 이 엔드포인트들은 [Swagger](https://api.endpoints.huggingface.cloud/)를 통해 문서화되어 있고, [`InferenceEndpoint`] 클래스는 이 API를 사용해 만든 간단한 래퍼입니다.
+
+## 매소드 [[methods]]
+
+다음과 같은 추론 엔드포인트의 기능이 [`HfApi`]안에 구현되어 있습니다:
+
+- [`get_inference_endpoint`]와 [`list_inference_endpoints`]를 사용해 엔드포인트 정보를 조회할 수 있습니다.
+- [`create_inference_endpoint`], [`update_inference_endpoint`], [`delete_inference_endpoint`]로 엔드포인트를 배포하고 관리할 수 있습니다.
+- [`pause_inference_endpoint`]와 [`resume_inference_endpoint`]로 엔드포인트를 잠시 멈추거나 다시 시작할 수 있습니다.
+- [`scale_to_zero_inference_endpoint`]로 엔드포인트의 복제본을 0개로 설정할 수 있습니다.
+
+## InferenceEndpoint [[huggingface_hub.InferenceEndpoint]]
+
+기본 데이터 클래스는 [`InferenceEndpoint`]입니다. 여기에는 구성 및 현재 상태를 가지고 있는 배포된 `InferenceEndpoint`에 대한 정보가 포함되어 있습니다. 배포 후에는 [`InferenceEndpoint.client`]와 [`InferenceEndpoint.async_client`]를 사용해 엔드포인트에서 추론 작업을 할 수 있고, 이때 [`InferenceClient`]와 [`AsyncInferenceClient`] 객체를 반환합니다.
+
+[[autodoc]] InferenceEndpoint
+  - from_raw
+  - client
+  - async_client
+  - all
+
+## InferenceEndpointStatus [[huggingface_hub.InferenceEndpointStatus]]
+
+[[autodoc]] InferenceEndpointStatus
+
+## InferenceEndpointType [[huggingface_hub.InferenceEndpointType]]
+
+[[autodoc]] InferenceEndpointType
+
+## InferenceEndpointError [[huggingface_hub.InferenceEndpointError]]
+
+[[autodoc]] InferenceEndpointError
diff --git a/docs/source/ko/package_reference/inference_types.md b/docs/source/ko/package_reference/inference_types.md
new file mode 100644
index 00000000..643b85ee
--- /dev/null
+++ b/docs/source/ko/package_reference/inference_types.md
@@ -0,0 +1,345 @@
+
+<!--⚠️ Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be
+rendered properly in your Markdown viewer.
+-->
+<!--⚠️ Note that this file is auto-generated by `utils/generate_inference_types.py`. Do not modify it manually.-->
+
+
+# 추론 타입[[inference-types]]
+
+이 페이지에는 Hugging Face Hub에서 지원하는 타입(예: 데이터 클래스)이 나열되어 있습니다.
+각 작업은 JSON 스키마를 사용하여 지정되며, 이러한 스키마에 의해서 타입이 생성됩니다. 이때 Python 요구 사항으로 인해 일부 사용자 정의가 있을 수 있습니다.
+ 
+각 작업의 JSON 스키마를 확인하려면 [@huggingface.js/tasks](https://github.com/huggingface/huggingface.js/tree/main/packages/tasks/src/tasks)를 확인하세요.
+
+라이브러리에서 이 부분은 아직 개발 중이며, 향후 릴리즈에서 개선될 예정입니다.
+
+
+
+## audio_classification[[huggingface_hub.AudioClassificationInput]]
+
+[[autodoc]] huggingface_hub.AudioClassificationInput
+
+[[autodoc]] huggingface_hub.AudioClassificationOutputElement
+
+[[autodoc]] huggingface_hub.AudioClassificationParameters
+
+
+
+## audio_to_audio[[huggingface_hub.AudioToAudioInput]]
+
+[[autodoc]] huggingface_hub.AudioToAudioInput
+
+[[autodoc]] huggingface_hub.AudioToAudioOutputElement
+
+
+
+## automatic_speech_recognition[[huggingface_hub.AutomaticSpeechRecognitionGenerationParameters]]
+
+[[autodoc]] huggingface_hub.AutomaticSpeechRecognitionGenerationParameters
+
+[[autodoc]] huggingface_hub.AutomaticSpeechRecognitionInput
+
+[[autodoc]] huggingface_hub.AutomaticSpeechRecognitionOutput
+
+[[autodoc]] huggingface_hub.AutomaticSpeechRecognitionOutputChunk
+
+[[autodoc]] huggingface_hub.AutomaticSpeechRecognitionParameters
+
+
+
+## chat_completion[[huggingface_hub.ChatCompletionInput]]
+
+[[autodoc]] huggingface_hub.ChatCompletionInput
+
+[[autodoc]] huggingface_hub.ChatCompletionInputMessage
+
+[[autodoc]] huggingface_hub.ChatCompletionOutput
+
+[[autodoc]] huggingface_hub.ChatCompletionOutputChoice
+
+[[autodoc]] huggingface_hub.ChatCompletionOutputChoiceMessage
+
+[[autodoc]] huggingface_hub.ChatCompletionStreamOutput
+
+[[autodoc]] huggingface_hub.ChatCompletionStreamOutputChoice
+
+[[autodoc]] huggingface_hub.ChatCompletionStreamOutputDelta
+
+
+
+## depth_estimation[[huggingface_hub.DepthEstimationInput]]
+
+[[autodoc]] huggingface_hub.DepthEstimationInput
+
+[[autodoc]] huggingface_hub.DepthEstimationOutput
+
+
+
+## document_question_answering[[huggingface_hub.DocumentQuestionAnsweringInput]]
+
+[[autodoc]] huggingface_hub.DocumentQuestionAnsweringInput
+
+[[autodoc]] huggingface_hub.DocumentQuestionAnsweringInputData
+
+[[autodoc]] huggingface_hub.DocumentQuestionAnsweringOutputElement
+
+[[autodoc]] huggingface_hub.DocumentQuestionAnsweringParameters
+
+
+
+## feature_extraction[[huggingface_hub.FeatureExtractionInput]]
+
+[[autodoc]] huggingface_hub.FeatureExtractionInput
+
+
+
+## fill_mask[[huggingface_hub.FillMaskInput]]
+
+[[autodoc]] huggingface_hub.FillMaskInput
+
+[[autodoc]] huggingface_hub.FillMaskOutputElement
+
+[[autodoc]] huggingface_hub.FillMaskParameters
+
+
+
+## image_classification[[huggingface_hub.ImageClassificationInput]]
+
+[[autodoc]] huggingface_hub.ImageClassificationInput
+
+[[autodoc]] huggingface_hub.ImageClassificationOutputElement
+
+[[autodoc]] huggingface_hub.ImageClassificationParameters
+
+
+
+## image_segmentation[[huggingface_hub.ImageSegmentationInput]]
+
+[[autodoc]] huggingface_hub.ImageSegmentationInput
+
+[[autodoc]] huggingface_hub.ImageSegmentationOutputElement
+
+[[autodoc]] huggingface_hub.ImageSegmentationParameters
+
+
+
+## image_to_image[[huggingface_hub.ImageToImageInput]]
+
+[[autodoc]] huggingface_hub.ImageToImageInput
+
+[[autodoc]] huggingface_hub.ImageToImageOutput
+
+[[autodoc]] huggingface_hub.ImageToImageParameters
+
+[[autodoc]] huggingface_hub.ImageToImageTargetSize
+
+
+
+## image_to_text[[huggingface_hub.ImageToTextGenerationParameters]]
+
+[[autodoc]] huggingface_hub.ImageToTextGenerationParameters
+
+[[autodoc]] huggingface_hub.ImageToTextInput
+
+[[autodoc]] huggingface_hub.ImageToTextOutput
+
+[[autodoc]] huggingface_hub.ImageToTextParameters
+
+
+
+## object_detection[[huggingface_hub.ObjectDetectionBoundingBox]]
+
+[[autodoc]] huggingface_hub.ObjectDetectionBoundingBox
+
+[[autodoc]] huggingface_hub.ObjectDetectionInput
+
+[[autodoc]] huggingface_hub.ObjectDetectionOutputElement
+
+[[autodoc]] huggingface_hub.ObjectDetectionParameters
+
+
+
+## question_answering[[huggingface_hub.QuestionAnsweringInput]]
+
+[[autodoc]] huggingface_hub.QuestionAnsweringInput
+
+[[autodoc]] huggingface_hub.QuestionAnsweringInputData
+
+[[autodoc]] huggingface_hub.QuestionAnsweringOutputElement
+
+[[autodoc]] huggingface_hub.QuestionAnsweringParameters
+
+
+
+## sentence_similarity[[huggingface_hub.SentenceSimilarityInput]]
+
+[[autodoc]] huggingface_hub.SentenceSimilarityInput
+
+[[autodoc]] huggingface_hub.SentenceSimilarityInputData
+
+
+
+## summarization[[huggingface_hub.SummarizationGenerationParameters]]
+
+[[autodoc]] huggingface_hub.SummarizationGenerationParameters
+
+[[autodoc]] huggingface_hub.SummarizationInput
+
+[[autodoc]] huggingface_hub.SummarizationOutput
+
+
+
+## table_question_answering[[huggingface_hub.TableQuestionAnsweringInput]]
+
+[[autodoc]] huggingface_hub.TableQuestionAnsweringInput
+
+[[autodoc]] huggingface_hub.TableQuestionAnsweringInputData
+
+[[autodoc]] huggingface_hub.TableQuestionAnsweringOutputElement
+
+
+
+## text2text_generation[[huggingface_hub.Text2TextGenerationInput]]
+
+[[autodoc]] huggingface_hub.Text2TextGenerationInput
+
+[[autodoc]] huggingface_hub.Text2TextGenerationOutput
+
+[[autodoc]] huggingface_hub.Text2TextGenerationParameters
+
+
+
+## text_classification[[huggingface_hub.TextClassificationInput]]
+
+[[autodoc]] huggingface_hub.TextClassificationInput
+
+[[autodoc]] huggingface_hub.TextClassificationOutputElement
+
+[[autodoc]] huggingface_hub.TextClassificationParameters
+
+
+
+## text_generation[[huggingface_hub.TextGenerationInput]]
+
+[[autodoc]] huggingface_hub.TextGenerationInput
+
+[[autodoc]] huggingface_hub.TextGenerationOutput
+
+[[autodoc]] huggingface_hub.TextGenerationOutputDetails
+
+[[autodoc]] huggingface_hub.TextGenerationOutputSequenceDetails
+
+[[autodoc]] huggingface_hub.TextGenerationOutputToken
+
+[[autodoc]] huggingface_hub.TextGenerationParameters
+
+[[autodoc]] huggingface_hub.TextGenerationPrefillToken
+
+[[autodoc]] huggingface_hub.TextGenerationStreamDetails
+
+[[autodoc]] huggingface_hub.TextGenerationStreamOutput
+
+
+
+## text_to_audio[[huggingface_hub.TextToAudioGenerationParameters]]
+
+[[autodoc]] huggingface_hub.TextToAudioGenerationParameters
+
+[[autodoc]] huggingface_hub.TextToAudioInput
+
+[[autodoc]] huggingface_hub.TextToAudioOutput
+
+[[autodoc]] huggingface_hub.TextToAudioParameters
+
+
+
+## text_to_image[[huggingface_hub.TextToImageInput]]
+
+[[autodoc]] huggingface_hub.TextToImageInput
+
+[[autodoc]] huggingface_hub.TextToImageOutput
+
+[[autodoc]] huggingface_hub.TextToImageParameters
+
+[[autodoc]] huggingface_hub.TextToImageTargetSize
+
+
+
+## token_classification[[huggingface_hub.TokenClassificationInput]]
+
+[[autodoc]] huggingface_hub.TokenClassificationInput
+
+[[autodoc]] huggingface_hub.TokenClassificationOutputElement
+
+[[autodoc]] huggingface_hub.TokenClassificationParameters
+
+
+
+## translation[[huggingface_hub.TranslationGenerationParameters]]
+
+[[autodoc]] huggingface_hub.TranslationGenerationParameters
+
+[[autodoc]] huggingface_hub.TranslationInput
+
+[[autodoc]] huggingface_hub.TranslationOutput
+
+
+
+## video_classification[[huggingface_hub.VideoClassificationInput]]
+
+[[autodoc]] huggingface_hub.VideoClassificationInput
+
+[[autodoc]] huggingface_hub.VideoClassificationOutputElement
+
+[[autodoc]] huggingface_hub.VideoClassificationParameters
+
+
+
+## visual_question_answering[[huggingface_hub.VisualQuestionAnsweringInput]]
+
+[[autodoc]] huggingface_hub.VisualQuestionAnsweringInput
+
+[[autodoc]] huggingface_hub.VisualQuestionAnsweringInputData
+
+[[autodoc]] huggingface_hub.VisualQuestionAnsweringOutputElement
+
+[[autodoc]] huggingface_hub.VisualQuestionAnsweringParameters
+
+
+
+## zero_shot_classification[[huggingface_hub.ZeroShotClassificationInput]]
+
+[[autodoc]] huggingface_hub.ZeroShotClassificationInput
+
+[[autodoc]] huggingface_hub.ZeroShotClassificationInputData
+
+[[autodoc]] huggingface_hub.ZeroShotClassificationOutputElement
+
+[[autodoc]] huggingface_hub.ZeroShotClassificationParameters
+
+
+
+## zero_shot_image_classification[[huggingface_hub.ZeroShotImageClassificationInput]]
+
+[[autodoc]] huggingface_hub.ZeroShotImageClassificationInput
+
+[[autodoc]] huggingface_hub.ZeroShotImageClassificationInputData
+
+[[autodoc]] huggingface_hub.ZeroShotImageClassificationOutputElement
+
+[[autodoc]] huggingface_hub.ZeroShotImageClassificationParameters
+
+
+
+## zero_shot_object_detection[[huggingface_hub.ZeroShotObjectDetectionBoundingBox]]
+
+[[autodoc]] huggingface_hub.ZeroShotObjectDetectionBoundingBox
+
+[[autodoc]] huggingface_hub.ZeroShotObjectDetectionInput
+
+[[autodoc]] huggingface_hub.ZeroShotObjectDetectionInputData
+
+[[autodoc]] huggingface_hub.ZeroShotObjectDetectionOutputElement
+
+
diff --git a/docs/source/ko/package_reference/login.md b/docs/source/ko/package_reference/login.md
new file mode 100644
index 00000000..8ab39c22
--- /dev/null
+++ b/docs/source/ko/package_reference/login.md
@@ -0,0 +1,25 @@
+<!--⚠️ Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be
+rendered properly in your Markdown viewer.
+-->
+
+# 로그인 및 로그아웃[[login-and-logout]]
+
+`huggingface_hub` 라이브러리를 사용하면 사용자의 기기를 Hub에 프로그래밍적으로 로그인/로그아웃할 수 있습니다.
+
+인증에 대한 자세한 내용은 [이 섹션](../quick-start#authentication)을 확인하세요.
+
+## 로그인[[login]]
+
+[[autodoc]] login
+
+## 인터프리터_로그인[[interpreter_login]]
+
+[[autodoc]] interpreter_login
+
+## 노트북_로그인[[notebook_login]]
+
+[[autodoc]] notebook_login
+
+## 로그아웃[[logout]]
+
+[[autodoc]] logout
diff --git a/docs/source/ko/package_reference/repository.md b/docs/source/ko/package_reference/repository.md
new file mode 100644
index 00000000..b513137c
--- /dev/null
+++ b/docs/source/ko/package_reference/repository.md
@@ -0,0 +1,49 @@
+<!--⚠️ Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be
+rendered properly in your Markdown viewer.
+-->
+
+# 로컬 및 온라인 리포지토리 관리[[managing-local-and-online-repositories]]
+
+`Repository` 클래스는 `git` 및 `git-lfs` 명령을 감싸는 도우미 클래스로, 매우 큰 리포지토리를 관리하는 데 적합한 툴링을 제공합니다.
+
+`git` 작업이 포함되거나 리포지토리에서의 협업이 중점이 될 때 권장되는 도구입니다.
+
+## 리포지토리 클래스[[the-repository-class]]
+
+[[autodoc]] Repository
+    - __init__
+    - current_branch
+    - all
+
+## 도우미 메소드[[helper-methods]]
+
+[[autodoc]] huggingface_hub.repository.is_git_repo
+
+[[autodoc]] huggingface_hub.repository.is_local_clone
+
+[[autodoc]] huggingface_hub.repository.is_tracked_with_lfs
+
+[[autodoc]] huggingface_hub.repository.is_git_ignored
+
+[[autodoc]] huggingface_hub.repository.files_to_be_staged
+
+[[autodoc]] huggingface_hub.repository.is_tracked_upstream
+
+[[autodoc]] huggingface_hub.repository.commits_to_push
+
+## 후속 비동기 명령[[following-asynchronous-commands]]
+
+`Repository` 유틸리티는 비동기적으로 시작할 수 있는 여러 메소드를 제공합니다.
+- `git_push`
+- `git_pull`
+- `push_to_hub`
+- `commit` 컨텍스트 관리자
+
+이러한 비동기 메소드를 관리하는 유틸리티는 아래를 참조하세요.
+
+[[autodoc]] Repository
+    - commands_failed
+    - commands_in_progress
+    - wait_for_commands
+
+[[autodoc]] huggingface_hub.repository.CommandInProgress
diff --git a/docs/source/ko/package_reference/tensorboard.md b/docs/source/ko/package_reference/tensorboard.md
new file mode 100644
index 00000000..395a7337
--- /dev/null
+++ b/docs/source/ko/package_reference/tensorboard.md
@@ -0,0 +1,18 @@
+<!--⚠️ Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be
+rendered properly in your Markdown viewer.
+-->
+
+# TensorBoard 로거[[tensorboard-logger]]
+
+TensorBoard는 기계학습 실험을 위한 시각화 도구입니다. 주로 손실 및 정확도와 같은 지표를 추적 및 시각화하고, 모델 그래프와 
+히스토그램을 보여주고, 이미지를 표시하는 등 다양한 기능을 제공합니다. 또한 TensorBoard는 Hugging Face Hub와 잘 통합되어 있습니다. 
+`tfevents` 같은 TensorBoard 추적을 Hub에 푸시하면 Hub는 이를 자동으로 감지하여 시각화 인스턴스를 시작합니다.
+TensorBoard와 Hub의 통합에 대한 자세한 정보는 [가이드](https://huggingface.co/docs/hub/tensorboard)를 확인하세요.
+
+이 통합을 위해, `huggingface_hub`는 로그를 Hub로 푸시하기 위한 사용자 정의 로거를 제공합니다. 
+이 로거는 추가적인 코드 없이 [SummaryWriter](https://tensorboardx.readthedocs.io/en/latest/tensorboard.html)의 대체제로 사용될 수 있습니다. 
+추적은 계속해서 로컬에 저장되며 백그라운드 작업이 일정한 시간마다 Hub에 푸시하는 형태로 동작합니다.
+
+## HFSummaryWriter[[huggingface_hub.HFSummaryWriter]]
+
+[[autodoc]] HFSummaryWriter
diff --git a/src/huggingface_hub/__init__.py b/src/huggingface_hub/__init__.py
index 456ad71d..991ac71d 100644
--- a/src/huggingface_hub/__init__.py
+++ b/src/huggingface_hub/__init__.py
@@ -500,15 +500,15 @@ def _attach(package_name, submodules=None, submod_attrs=None):
     def __dir__():
         return __all__
 
-    if os.environ.get("EAGER_IMPORT", ""):
-        for attr in set(attr_to_modules.keys()) | submodules:
-            __getattr__(attr)
-
     return __getattr__, __dir__, list(__all__)
 
 
 __getattr__, __dir__, __all__ = _attach(__name__, submodules=[], submod_attrs=_SUBMOD_ATTRS)
 
+if os.environ.get("EAGER_IMPORT", ""):
+    for attr in __all__:
+        __getattr__(attr)
+
 # WARNING: any content below this statement is generated automatically. Any manual edit
 # will be lost when re-generating this file !
 #
diff --git a/src/huggingface_hub/_commit_api.py b/src/huggingface_hub/_commit_api.py
index b807106b..b25a8e95 100644
--- a/src/huggingface_hub/_commit_api.py
+++ b/src/huggingface_hub/_commit_api.py
@@ -15,14 +15,13 @@ from typing import TYPE_CHECKING, Any, BinaryIO, Dict, Iterable, Iterator, List,
 
 from tqdm.contrib.concurrent import thread_map
 
-from huggingface_hub import get_session
-
 from .constants import ENDPOINT, HF_HUB_ENABLE_HF_TRANSFER
 from .file_download import hf_hub_url
 from .lfs import UploadInfo, lfs_upload, post_lfs_batch_info
 from .utils import (
     EntryNotFoundError,
     chunk_iterable,
+    get_session,
     hf_raise_for_status,
     logging,
     tqdm_stream_file,
diff --git a/src/huggingface_hub/_inference_endpoints.py b/src/huggingface_hub/_inference_endpoints.py
index 3b2f2541..1fd2116d 100644
--- a/src/huggingface_hub/_inference_endpoints.py
+++ b/src/huggingface_hub/_inference_endpoints.py
@@ -8,7 +8,7 @@ from huggingface_hub.errors import InferenceEndpointError, InferenceEndpointTime
 
 from .inference._client import InferenceClient
 from .inference._generated._async_client import AsyncInferenceClient
-from .utils import logging, parse_datetime
+from .utils import get_session, logging, parse_datetime
 
 
 if TYPE_CHECKING:
@@ -194,10 +194,6 @@ class InferenceEndpoint:
             [`InferenceEndpointTimeoutError`]
                 If the Inference Endpoint is not deployed after `timeout` seconds.
         """
-        if self.url is not None:  # Means the endpoint is deployed
-            logger.info("Inference Endpoint is ready to be used.")
-            return self
-
         if timeout is not None and timeout < 0:
             raise ValueError("`timeout` cannot be negative.")
         if refresh_every <= 0:
@@ -205,10 +201,12 @@ class InferenceEndpoint:
 
         start = time.time()
         while True:
-            self.fetch()
-            if self.url is not None:  # Means the endpoint is deployed
-                logger.info("Inference Endpoint is ready to be used.")
-                return self
+            if self.url is not None:
+                # Means the URL is provisioned => check if the endpoint is reachable
+                response = get_session().get(self.url, headers=self._api._build_hf_headers(token=self._token))
+                if response.status_code == 200:
+                    logger.info("Inference Endpoint is ready to be used.")
+                    return self
             if self.status == InferenceEndpointStatus.FAILED:
                 raise InferenceEndpointError(
                     f"Inference Endpoint {self.name} failed to deploy. Please check the logs for more information."
@@ -218,6 +216,7 @@ class InferenceEndpoint:
                     raise InferenceEndpointTimeoutError("Timeout while waiting for Inference Endpoint to be deployed.")
             logger.info(f"Inference Endpoint is not deployed yet ({self.status}). Waiting {refresh_every}s...")
             time.sleep(refresh_every)
+            self.fetch()
 
     def fetch(self) -> "InferenceEndpoint":
         """Fetch latest information about the Inference Endpoint.
diff --git a/src/huggingface_hub/_webhooks_payload.py b/src/huggingface_hub/_webhooks_payload.py
index 296e4251..288f4b08 100644
--- a/src/huggingface_hub/_webhooks_payload.py
+++ b/src/huggingface_hub/_webhooks_payload.py
@@ -16,7 +16,21 @@
 
 from typing import List, Literal, Optional
 
-from pydantic import BaseModel
+from .utils import is_pydantic_available
+
+
+if is_pydantic_available():
+    from pydantic import BaseModel
+else:
+    # Define a dummy BaseModel to avoid import errors when pydantic is not installed
+    # Import error will be raised when trying to use the class
+
+    class BaseModel:  # type: ignore [no-redef]
+        def __init__(self, *args, **kwargs) -> None:
+            raise ImportError(
+                "You must have `pydantic` installed to use `WebhookPayload`. This is an optional dependency that"
+                " should be installed separately. Please run `pip install --upgrade pydantic` and retry."
+            )
 
 
 # This is an adaptation of the ReportV3 interface implemented in moon-landing. V0, V1 and V2 have been ignored as they
diff --git a/src/huggingface_hub/_webhooks_server.py b/src/huggingface_hub/_webhooks_server.py
index 222f0962..9f925281 100644
--- a/src/huggingface_hub/_webhooks_server.py
+++ b/src/huggingface_hub/_webhooks_server.py
@@ -20,15 +20,19 @@ import os
 from functools import wraps
 from typing import TYPE_CHECKING, Any, Callable, Dict, Optional
 
-from .utils import experimental, is_gradio_available
+from .utils import experimental, is_fastapi_available, is_gradio_available
 
 
 if TYPE_CHECKING:
     import gradio as gr
+    from fastapi import Request
 
-
-from fastapi import FastAPI, Request
-from fastapi.responses import JSONResponse
+if is_fastapi_available():
+    from fastapi import FastAPI, Request
+    from fastapi.responses import JSONResponse
+else:
+    # Will fail at runtime if FastAPI is not available
+    FastAPI = Request = JSONResponse = None  # type: ignore [misc, assignment]
 
 
 _global_app: Optional["WebhooksServer"] = None
@@ -96,6 +100,11 @@ class WebhooksServer:
                 "You must have `gradio` installed to use `WebhooksServer`. Please run `pip install --upgrade gradio`"
                 " first."
             )
+        if not is_fastapi_available():
+            raise ImportError(
+                "You must have `fastapi` installed to use `WebhooksServer`. Please run `pip install --upgrade fastapi`"
+                " first."
+            )
         return super().__new__(cls)
 
     def __init__(
diff --git a/src/huggingface_hub/hub_mixin.py b/src/huggingface_hub/hub_mixin.py
index da1d98ee..2dbbe79b 100644
--- a/src/huggingface_hub/hub_mixin.py
+++ b/src/huggingface_hub/hub_mixin.py
@@ -44,8 +44,8 @@ DEFAULT_MODEL_CARD = """
 {{ card_data }}
 ---
 
-This model has been pushed to the Hub using **{{ library_name }}**:
-- Repo: {{ repo_url | default("[More Information Needed]", true) }}
+This model has been pushed to the Hub using the [PytorchModelHubMixin](https://huggingface.co/docs/huggingface_hub/package_reference/mixins#huggingface_hub.PyTorchModelHubMixin) integration:
+- Library: {{ repo_url | default("[More Information Needed]", true) }}
 - Docs: {{ docs_url | default("[More Information Needed]", true) }}
 """
 
@@ -53,6 +53,7 @@ This model has been pushed to the Hub using **{{ library_name }}**:
 @dataclass
 class MixinInfo:
     library_name: Optional[str] = None
+    pipeline_tag: Optional[str] = None
     tags: Optional[List[str]] = None
     repo_url: Optional[str] = None
     docs_url: Optional[str] = None
@@ -75,6 +76,8 @@ class ModelHubMixin:
             Name of the library integrating ModelHubMixin. Used to generate model card.
         tags (`List[str]`, *optional*):
             Tags to be added to the model card. Used to generate model card.
+        pipeline_tag (`str`, *optional*):
+            Tag of the pipeline. Used to generate model card. e.g. "text-classification".
         repo_url (`str`, *optional*):
             URL of the library repository. Used to generate model card.
         docs_url (`str`, *optional*):
@@ -156,6 +159,7 @@ class ModelHubMixin:
         cls,
         *,
         library_name: Optional[str] = None,
+        pipeline_tag: Optional[str] = None,
         tags: Optional[List[str]] = None,
         repo_url: Optional[str] = None,
         docs_url: Optional[str] = None,
@@ -169,6 +173,7 @@ class ModelHubMixin:
         cls._hub_mixin_info = MixinInfo(
             library_name=library_name,
             tags=tags,
+            pipeline_tag=pipeline_tag,
             repo_url=repo_url,
             docs_url=docs_url,
         )
@@ -257,6 +262,8 @@ class ModelHubMixin:
                 not provided.
             kwargs:
                 Additional key word arguments passed along to the [`~ModelHubMixin.push_to_hub`] method.
+        Returns:
+            `str` or `None`: url of the commit on the Hub if `push_to_hub=True`, `None` otherwise.
         """
         save_directory = Path(save_directory)
         save_directory.mkdir(parents=True, exist_ok=True)
diff --git a/src/huggingface_hub/utils/__init__.py b/src/huggingface_hub/utils/__init__.py
index 511709e8..e51b274a 100644
--- a/src/huggingface_hub/utils/__init__.py
+++ b/src/huggingface_hub/utils/__init__.py
@@ -68,6 +68,7 @@ from ._runtime import (
     dump_environment_info,
     get_aiohttp_version,
     get_fastai_version,
+    get_fastapi_version,
     get_fastcore_version,
     get_gradio_version,
     get_graphviz_version,
@@ -85,6 +86,7 @@ from ._runtime import (
     get_torch_version,
     is_aiohttp_available,
     is_fastai_available,
+    is_fastapi_available,
     is_fastcore_available,
     is_google_colab,
     is_gradio_available,
diff --git a/src/huggingface_hub/utils/_runtime.py b/src/huggingface_hub/utils/_runtime.py
index 21f85273..8dab5476 100644
--- a/src/huggingface_hub/utils/_runtime.py
+++ b/src/huggingface_hub/utils/_runtime.py
@@ -30,6 +30,7 @@ _package_versions = {}
 _CANDIDATES = {
     "aiohttp": {"aiohttp"},
     "fastai": {"fastai"},
+    "fastapi": {"fastapi"},
     "fastcore": {"fastcore"},
     "gradio": {"gradio"},
     "graphviz": {"graphviz"},
@@ -105,6 +106,15 @@ def get_fastai_version() -> str:
     return _get_version("fastai")
 
 
+# FastAPI
+def is_fastapi_available() -> bool:
+    return is_package_available("fastapi")
+
+
+def get_fastapi_version() -> str:
+    return _get_version("fastapi")
+
+
 # Fastcore
 def is_fastcore_available() -> bool:
     return is_package_available("fastcore")


Test patch:
diff --git a/tests/test_hub_mixin_pytorch.py b/tests/test_hub_mixin_pytorch.py
index 317b0a00..3d1afdf5 100644
--- a/tests/test_hub_mixin_pytorch.py
+++ b/tests/test_hub_mixin_pytorch.py
@@ -34,7 +34,13 @@ if is_torch_available():
         def forward(self, x):
             return self.l1(x)
 
-    class DummyModelWithTags(nn.Module, PyTorchModelHubMixin, tags=["tag1", "tag2"], library_name="my-dummy-lib"):
+    class DummyModelWithTags(
+        nn.Module,
+        PyTorchModelHubMixin,
+        tags=["tag1", "tag2"],
+        pipeline_tag="text-classification",
+        library_name="my-dummy-lib",
+    ):
         def __init__(self, linear_layer: int = 4):
             super().__init__()
             self.l1 = nn.Linear(linear_layer, linear_layer)
@@ -265,6 +271,7 @@ class PytorchHubMixinTest(unittest.TestCase):
         model = DummyModelWithTags()
         card = model.generate_model_card()
         assert card.data.tags == ["tag1", "tag2", "pytorch_model_hub_mixin", "model_hub_mixin"]
+        assert card.data.pipeline_tag == "text-classification"
 
         model.save_pretrained(self.cache_dir)
         card_reloaded = ModelCard.load(self.cache_dir / "README.md")
diff --git a/tests/test_inference_endpoints.py b/tests/test_inference_endpoints.py
index 319535ba..edcf2d4d 100644
--- a/tests/test_inference_endpoints.py
+++ b/tests/test_inference_endpoints.py
@@ -183,8 +183,9 @@ def test_fetch(mock_get: Mock):
     assert endpoint.url == "https://vksrvs8pc1xnifhq.us-east-1.aws.endpoints.huggingface.cloud"
 
 
+@patch("huggingface_hub._inference_endpoints.get_session")
 @patch("huggingface_hub.hf_api.HfApi.get_inference_endpoint")
-def test_wait_until_running(mock_get: Mock):
+def test_wait_until_running(mock_get: Mock, mock_session: Mock):
     """Test waits waits until the endpoint is ready."""
     endpoint = InferenceEndpoint.from_raw(MOCK_INITIALIZING, namespace="foo")
 
@@ -194,11 +195,18 @@ def test_wait_until_running(mock_get: Mock):
         InferenceEndpoint.from_raw(MOCK_INITIALIZING, namespace="foo"),
         InferenceEndpoint.from_raw(MOCK_INITIALIZING, namespace="foo"),
         InferenceEndpoint.from_raw(MOCK_RUNNING, namespace="foo"),
+        InferenceEndpoint.from_raw(MOCK_RUNNING, namespace="foo"),
+    ]
+    mock_session.return_value = Mock()
+    mock_session.return_value.get.side_effect = [
+        Mock(status_code=400),  # url is provisioned but not yet ready
+        Mock(status_code=200),  # endpoint is ready
     ]
+
     endpoint.wait(refresh_every=0.01)
 
     assert endpoint.status == "running"
-    assert len(mock_get.call_args_list) == 5
+    assert len(mock_get.call_args_list) == 6
 
 
 @patch("huggingface_hub.hf_api.HfApi.get_inference_endpoint")
@@ -216,7 +224,7 @@ def test_wait_timeout(mock_get: Mock):
         endpoint.wait(timeout=0.1, refresh_every=0.05)
 
     assert endpoint.status == "pending"
-    assert len(mock_get.call_args_list) == 3
+    assert len(mock_get.call_args_list) == 2
 
 
 @patch("huggingface_hub.hf_api.HfApi.get_inference_endpoint")