huggingface-hub 0.29.0rc2__py3-none-any.whl → 1.1.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. huggingface_hub/__init__.py +160 -46
  2. huggingface_hub/_commit_api.py +277 -71
  3. huggingface_hub/_commit_scheduler.py +15 -15
  4. huggingface_hub/_inference_endpoints.py +33 -22
  5. huggingface_hub/_jobs_api.py +301 -0
  6. huggingface_hub/_local_folder.py +18 -3
  7. huggingface_hub/_login.py +31 -63
  8. huggingface_hub/_oauth.py +460 -0
  9. huggingface_hub/_snapshot_download.py +241 -81
  10. huggingface_hub/_space_api.py +18 -10
  11. huggingface_hub/_tensorboard_logger.py +15 -19
  12. huggingface_hub/_upload_large_folder.py +196 -76
  13. huggingface_hub/_webhooks_payload.py +3 -3
  14. huggingface_hub/_webhooks_server.py +15 -25
  15. huggingface_hub/{commands → cli}/__init__.py +1 -15
  16. huggingface_hub/cli/_cli_utils.py +173 -0
  17. huggingface_hub/cli/auth.py +147 -0
  18. huggingface_hub/cli/cache.py +841 -0
  19. huggingface_hub/cli/download.py +189 -0
  20. huggingface_hub/cli/hf.py +60 -0
  21. huggingface_hub/cli/inference_endpoints.py +377 -0
  22. huggingface_hub/cli/jobs.py +772 -0
  23. huggingface_hub/cli/lfs.py +175 -0
  24. huggingface_hub/cli/repo.py +315 -0
  25. huggingface_hub/cli/repo_files.py +94 -0
  26. huggingface_hub/{commands/env.py → cli/system.py} +10 -13
  27. huggingface_hub/cli/upload.py +294 -0
  28. huggingface_hub/cli/upload_large_folder.py +117 -0
  29. huggingface_hub/community.py +20 -12
  30. huggingface_hub/constants.py +83 -59
  31. huggingface_hub/dataclasses.py +609 -0
  32. huggingface_hub/errors.py +99 -30
  33. huggingface_hub/fastai_utils.py +30 -41
  34. huggingface_hub/file_download.py +606 -346
  35. huggingface_hub/hf_api.py +2445 -1132
  36. huggingface_hub/hf_file_system.py +269 -152
  37. huggingface_hub/hub_mixin.py +61 -66
  38. huggingface_hub/inference/_client.py +501 -630
  39. huggingface_hub/inference/_common.py +133 -121
  40. huggingface_hub/inference/_generated/_async_client.py +536 -722
  41. huggingface_hub/inference/_generated/types/__init__.py +6 -1
  42. huggingface_hub/inference/_generated/types/automatic_speech_recognition.py +5 -6
  43. huggingface_hub/inference/_generated/types/base.py +10 -7
  44. huggingface_hub/inference/_generated/types/chat_completion.py +77 -31
  45. huggingface_hub/inference/_generated/types/depth_estimation.py +2 -2
  46. huggingface_hub/inference/_generated/types/document_question_answering.py +2 -2
  47. huggingface_hub/inference/_generated/types/feature_extraction.py +2 -2
  48. huggingface_hub/inference/_generated/types/fill_mask.py +2 -2
  49. huggingface_hub/inference/_generated/types/image_to_image.py +8 -2
  50. huggingface_hub/inference/_generated/types/image_to_text.py +2 -3
  51. huggingface_hub/inference/_generated/types/image_to_video.py +60 -0
  52. huggingface_hub/inference/_generated/types/sentence_similarity.py +3 -3
  53. huggingface_hub/inference/_generated/types/summarization.py +2 -2
  54. huggingface_hub/inference/_generated/types/table_question_answering.py +5 -5
  55. huggingface_hub/inference/_generated/types/text2text_generation.py +2 -2
  56. huggingface_hub/inference/_generated/types/text_generation.py +11 -11
  57. huggingface_hub/inference/_generated/types/text_to_audio.py +1 -2
  58. huggingface_hub/inference/_generated/types/text_to_speech.py +1 -2
  59. huggingface_hub/inference/_generated/types/text_to_video.py +2 -2
  60. huggingface_hub/inference/_generated/types/token_classification.py +2 -2
  61. huggingface_hub/inference/_generated/types/translation.py +2 -2
  62. huggingface_hub/inference/_generated/types/zero_shot_classification.py +2 -2
  63. huggingface_hub/inference/_generated/types/zero_shot_image_classification.py +2 -2
  64. huggingface_hub/inference/_generated/types/zero_shot_object_detection.py +1 -3
  65. huggingface_hub/inference/_mcp/__init__.py +0 -0
  66. huggingface_hub/inference/_mcp/_cli_hacks.py +88 -0
  67. huggingface_hub/inference/_mcp/agent.py +100 -0
  68. huggingface_hub/inference/_mcp/cli.py +247 -0
  69. huggingface_hub/inference/_mcp/constants.py +81 -0
  70. huggingface_hub/inference/_mcp/mcp_client.py +395 -0
  71. huggingface_hub/inference/_mcp/types.py +45 -0
  72. huggingface_hub/inference/_mcp/utils.py +128 -0
  73. huggingface_hub/inference/_providers/__init__.py +149 -20
  74. huggingface_hub/inference/_providers/_common.py +160 -37
  75. huggingface_hub/inference/_providers/black_forest_labs.py +12 -9
  76. huggingface_hub/inference/_providers/cerebras.py +6 -0
  77. huggingface_hub/inference/_providers/clarifai.py +13 -0
  78. huggingface_hub/inference/_providers/cohere.py +32 -0
  79. huggingface_hub/inference/_providers/fal_ai.py +231 -22
  80. huggingface_hub/inference/_providers/featherless_ai.py +38 -0
  81. huggingface_hub/inference/_providers/fireworks_ai.py +22 -1
  82. huggingface_hub/inference/_providers/groq.py +9 -0
  83. huggingface_hub/inference/_providers/hf_inference.py +143 -33
  84. huggingface_hub/inference/_providers/hyperbolic.py +9 -5
  85. huggingface_hub/inference/_providers/nebius.py +47 -5
  86. huggingface_hub/inference/_providers/novita.py +48 -5
  87. huggingface_hub/inference/_providers/nscale.py +44 -0
  88. huggingface_hub/inference/_providers/openai.py +25 -0
  89. huggingface_hub/inference/_providers/publicai.py +6 -0
  90. huggingface_hub/inference/_providers/replicate.py +46 -9
  91. huggingface_hub/inference/_providers/sambanova.py +37 -1
  92. huggingface_hub/inference/_providers/scaleway.py +28 -0
  93. huggingface_hub/inference/_providers/together.py +34 -5
  94. huggingface_hub/inference/_providers/wavespeed.py +138 -0
  95. huggingface_hub/inference/_providers/zai_org.py +17 -0
  96. huggingface_hub/lfs.py +33 -100
  97. huggingface_hub/repocard.py +34 -38
  98. huggingface_hub/repocard_data.py +79 -59
  99. huggingface_hub/serialization/__init__.py +0 -1
  100. huggingface_hub/serialization/_base.py +12 -15
  101. huggingface_hub/serialization/_dduf.py +8 -8
  102. huggingface_hub/serialization/_torch.py +69 -69
  103. huggingface_hub/utils/__init__.py +27 -8
  104. huggingface_hub/utils/_auth.py +7 -7
  105. huggingface_hub/utils/_cache_manager.py +92 -147
  106. huggingface_hub/utils/_chunk_utils.py +2 -3
  107. huggingface_hub/utils/_deprecation.py +1 -1
  108. huggingface_hub/utils/_dotenv.py +55 -0
  109. huggingface_hub/utils/_experimental.py +7 -5
  110. huggingface_hub/utils/_fixes.py +0 -10
  111. huggingface_hub/utils/_git_credential.py +5 -5
  112. huggingface_hub/utils/_headers.py +8 -30
  113. huggingface_hub/utils/_http.py +399 -237
  114. huggingface_hub/utils/_pagination.py +6 -6
  115. huggingface_hub/utils/_parsing.py +98 -0
  116. huggingface_hub/utils/_paths.py +5 -5
  117. huggingface_hub/utils/_runtime.py +74 -22
  118. huggingface_hub/utils/_safetensors.py +21 -21
  119. huggingface_hub/utils/_subprocess.py +13 -11
  120. huggingface_hub/utils/_telemetry.py +4 -4
  121. huggingface_hub/{commands/_cli_utils.py → utils/_terminal.py} +4 -4
  122. huggingface_hub/utils/_typing.py +25 -5
  123. huggingface_hub/utils/_validators.py +55 -74
  124. huggingface_hub/utils/_verification.py +167 -0
  125. huggingface_hub/utils/_xet.py +235 -0
  126. huggingface_hub/utils/_xet_progress_reporting.py +162 -0
  127. huggingface_hub/utils/insecure_hashlib.py +3 -5
  128. huggingface_hub/utils/logging.py +8 -11
  129. huggingface_hub/utils/tqdm.py +33 -4
  130. {huggingface_hub-0.29.0rc2.dist-info → huggingface_hub-1.1.3.dist-info}/METADATA +94 -82
  131. huggingface_hub-1.1.3.dist-info/RECORD +155 -0
  132. {huggingface_hub-0.29.0rc2.dist-info → huggingface_hub-1.1.3.dist-info}/WHEEL +1 -1
  133. huggingface_hub-1.1.3.dist-info/entry_points.txt +6 -0
  134. huggingface_hub/commands/delete_cache.py +0 -428
  135. huggingface_hub/commands/download.py +0 -200
  136. huggingface_hub/commands/huggingface_cli.py +0 -61
  137. huggingface_hub/commands/lfs.py +0 -200
  138. huggingface_hub/commands/repo_files.py +0 -128
  139. huggingface_hub/commands/scan_cache.py +0 -181
  140. huggingface_hub/commands/tag.py +0 -159
  141. huggingface_hub/commands/upload.py +0 -299
  142. huggingface_hub/commands/upload_large_folder.py +0 -129
  143. huggingface_hub/commands/user.py +0 -304
  144. huggingface_hub/commands/version.py +0 -37
  145. huggingface_hub/inference_api.py +0 -217
  146. huggingface_hub/keras_mixin.py +0 -500
  147. huggingface_hub/repository.py +0 -1477
  148. huggingface_hub/serialization/_tensorflow.py +0 -95
  149. huggingface_hub/utils/_hf_folder.py +0 -68
  150. huggingface_hub-0.29.0rc2.dist-info/RECORD +0 -131
  151. huggingface_hub-0.29.0rc2.dist-info/entry_points.txt +0 -6
  152. {huggingface_hub-0.29.0rc2.dist-info → huggingface_hub-1.1.3.dist-info/licenses}/LICENSE +0 -0
  153. {huggingface_hub-0.29.0rc2.dist-info → huggingface_hub-1.1.3.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,162 @@
1
+ from collections import OrderedDict
2
+ from typing import List
3
+
4
+ from hf_xet import PyItemProgressUpdate, PyTotalProgressUpdate
5
+
6
+ from . import is_google_colab, is_notebook
7
+ from .tqdm import tqdm
8
+
9
+
10
+ class XetProgressReporter:
11
+ """
12
+ Reports on progress for Xet uploads.
13
+
14
+ Shows summary progress bars when running in notebooks or GUIs, and detailed per-file progress in console environments.
15
+ """
16
+
17
+ def __init__(self, n_lines: int = 10, description_width: int = 30):
18
+ self.n_lines = n_lines
19
+ self.description_width = description_width
20
+
21
+ self.per_file_progress = is_google_colab() or not is_notebook()
22
+
23
+ self.tqdm_settings = {
24
+ "unit": "B",
25
+ "unit_scale": True,
26
+ "leave": True,
27
+ "unit_divisor": 1000,
28
+ "nrows": n_lines + 3 if self.per_file_progress else 3,
29
+ "miniters": 1,
30
+ "bar_format": "{l_bar}{bar}| {n_fmt:>5}B / {total_fmt:>5}B{postfix:>12}",
31
+ }
32
+
33
+ # Overall progress bars
34
+ self.data_processing_bar = tqdm(
35
+ total=0, desc=self.format_desc("Processing Files (0 / 0)", False), position=0, **self.tqdm_settings
36
+ )
37
+
38
+ self.upload_bar = tqdm(
39
+ total=0, desc=self.format_desc("New Data Upload", False), position=1, **self.tqdm_settings
40
+ )
41
+
42
+ self.known_items: set[str] = set()
43
+ self.completed_items: set[str] = set()
44
+
45
+ # Item bars (scrolling view)
46
+ self.item_state: OrderedDict[str, PyItemProgressUpdate] = OrderedDict()
47
+ self.current_bars: List = [None] * self.n_lines
48
+
49
+ def format_desc(self, name: str, indent: bool) -> str:
50
+ """
51
+ if name is longer than width characters, prints ... at the start and then the last width-3 characters of the name, otherwise
52
+ the whole name right justified into description_width characters. Also adds some padding.
53
+ """
54
+
55
+ if not self.per_file_progress:
56
+ # Here we just use the defaults.
57
+ return name
58
+
59
+ padding = " " if indent else ""
60
+ width = self.description_width - len(padding)
61
+
62
+ if len(name) > width:
63
+ name = f"...{name[-(width - 3) :]}"
64
+
65
+ return f"{padding}{name.ljust(width)}"
66
+
67
+ def update_progress(self, total_update: PyTotalProgressUpdate, item_updates: list[PyItemProgressUpdate]):
68
+ # Update all the per-item values.
69
+ for item in item_updates:
70
+ item_name = item.item_name
71
+
72
+ self.known_items.add(item_name)
73
+
74
+ # Only care about items where the processing has already started.
75
+ if item.bytes_completed == 0:
76
+ continue
77
+
78
+ # Overwrite the existing value in there.
79
+ self.item_state[item_name] = item
80
+
81
+ bar_idx = 0
82
+ new_completed = []
83
+
84
+ # Now, go through and update all the bars
85
+ for name, item in self.item_state.items():
86
+ # Is this ready to be removed on the next update?
87
+ if item.bytes_completed == item.total_bytes:
88
+ self.completed_items.add(name)
89
+ new_completed.append(name)
90
+
91
+ # If we're only showing summary information, then don't update the individual bars
92
+ if not self.per_file_progress:
93
+ continue
94
+
95
+ # If we've run out of bars to use, then collapse the last ones together.
96
+ if bar_idx >= len(self.current_bars):
97
+ bar = self.current_bars[-1]
98
+ in_final_bar_mode = True
99
+ final_bar_aggregation_count = bar_idx + 1 - len(self.current_bars)
100
+ else:
101
+ bar = self.current_bars[bar_idx]
102
+ in_final_bar_mode = False
103
+
104
+ if bar is None:
105
+ self.current_bars[bar_idx] = tqdm(
106
+ desc=self.format_desc(name, True),
107
+ position=2 + bar_idx, # Set to the position past the initial bars.
108
+ total=item.total_bytes,
109
+ initial=item.bytes_completed,
110
+ **self.tqdm_settings,
111
+ )
112
+
113
+ elif in_final_bar_mode:
114
+ bar.n += item.bytes_completed
115
+ bar.total += item.total_bytes
116
+ bar.set_description(self.format_desc(f"[+ {final_bar_aggregation_count} files]", True), refresh=False)
117
+ else:
118
+ bar.set_description(self.format_desc(name, True), refresh=False)
119
+ bar.n = item.bytes_completed
120
+ bar.total = item.total_bytes
121
+
122
+ bar_idx += 1
123
+
124
+ # Remove all the completed ones from the ordered dictionary
125
+ for name in new_completed:
126
+ # Only remove ones from consideration to make room for more items coming in.
127
+ if len(self.item_state) <= self.n_lines:
128
+ break
129
+
130
+ del self.item_state[name]
131
+
132
+ if self.per_file_progress:
133
+ # Now manually refresh each of the bars
134
+ for bar in self.current_bars:
135
+ if bar:
136
+ bar.refresh()
137
+
138
+ # Update overall bars
139
+ def postfix(speed):
140
+ s = tqdm.format_sizeof(speed) if speed is not None else "???"
141
+ return f"{s}B/s ".rjust(10, " ")
142
+
143
+ self.data_processing_bar.total = total_update.total_bytes
144
+ self.data_processing_bar.set_description(
145
+ self.format_desc(f"Processing Files ({len(self.completed_items)} / {len(self.known_items)})", False),
146
+ refresh=False,
147
+ )
148
+ self.data_processing_bar.set_postfix_str(postfix(total_update.total_bytes_completion_rate), refresh=False)
149
+ self.data_processing_bar.update(total_update.total_bytes_completion_increment)
150
+
151
+ self.upload_bar.total = total_update.total_transfer_bytes
152
+ self.upload_bar.set_postfix_str(postfix(total_update.total_transfer_bytes_completion_rate), refresh=False)
153
+ self.upload_bar.update(total_update.total_transfer_bytes_completion_increment)
154
+
155
+ def close(self, _success):
156
+ self.data_processing_bar.close()
157
+ self.upload_bar.close()
158
+
159
+ if self.per_file_progress:
160
+ for bar in self.current_bars:
161
+ if bar:
162
+ bar.close()
@@ -25,10 +25,8 @@
25
25
  # ```
26
26
  import functools
27
27
  import hashlib
28
- import sys
29
28
 
30
29
 
31
- _kwargs = {"usedforsecurity": False} if sys.version_info >= (3, 9) else {}
32
- md5 = functools.partial(hashlib.md5, **_kwargs)
33
- sha1 = functools.partial(hashlib.sha1, **_kwargs)
34
- sha256 = functools.partial(hashlib.sha256, **_kwargs)
30
+ md5 = functools.partial(hashlib.md5, usedforsecurity=False)
31
+ sha1 = functools.partial(hashlib.sha1, usedforsecurity=False)
32
+ sha256 = functools.partial(hashlib.sha256, usedforsecurity=False)
@@ -109,17 +109,14 @@ def get_verbosity() -> int:
109
109
  Logging level, e.g., `huggingface_hub.logging.DEBUG` and
110
110
  `huggingface_hub.logging.INFO`.
111
111
 
112
- <Tip>
113
-
114
- HuggingFace Hub has following logging levels:
115
-
116
- - `huggingface_hub.logging.CRITICAL`, `huggingface_hub.logging.FATAL`
117
- - `huggingface_hub.logging.ERROR`
118
- - `huggingface_hub.logging.WARNING`, `huggingface_hub.logging.WARN`
119
- - `huggingface_hub.logging.INFO`
120
- - `huggingface_hub.logging.DEBUG`
121
-
122
- </Tip>
112
+ > [!TIP]
113
+ > HuggingFace Hub has following logging levels:
114
+ >
115
+ > - `huggingface_hub.logging.CRITICAL`, `huggingface_hub.logging.FATAL`
116
+ > - `huggingface_hub.logging.ERROR`
117
+ > - `huggingface_hub.logging.WARNING`, `huggingface_hub.logging.WARN`
118
+ > - `huggingface_hub.logging.INFO`
119
+ > - `huggingface_hub.logging.DEBUG`
123
120
  """
124
121
  return _get_library_root_logger().getEffectiveLevel()
125
122
 
@@ -84,9 +84,9 @@ import io
84
84
  import logging
85
85
  import os
86
86
  import warnings
87
- from contextlib import contextmanager
87
+ from contextlib import contextmanager, nullcontext
88
88
  from pathlib import Path
89
- from typing import Dict, Iterator, Optional, Union
89
+ from typing import ContextManager, Iterator, Optional, Union
90
90
 
91
91
  from tqdm.auto import tqdm as old_tqdm
92
92
 
@@ -102,7 +102,7 @@ from ..constants import HF_HUB_DISABLE_PROGRESS_BARS
102
102
  # progress bar visibility through code. By default, progress bars are turned on.
103
103
 
104
104
 
105
- progress_bar_states: Dict[str, bool] = {}
105
+ progress_bar_states: dict[str, bool] = {}
106
106
 
107
107
 
108
108
  def disable_progress_bars(name: Optional[str] = None) -> None:
@@ -248,7 +248,7 @@ def tqdm_stream_file(path: Union[Path, str]) -> Iterator[io.BufferedReader]:
248
248
  Example:
249
249
  ```py
250
250
  >>> with tqdm_stream_file("config.json") as f:
251
- >>> requests.put(url, data=f)
251
+ >>> httpx.put(url, data=f)
252
252
  config.json: 100%|█████████████████████████| 8.19k/8.19k [00:02<00:00, 3.72kB/s]
253
253
  ```
254
254
  """
@@ -277,3 +277,32 @@ def tqdm_stream_file(path: Union[Path, str]) -> Iterator[io.BufferedReader]:
277
277
  yield f
278
278
 
279
279
  pbar.close()
280
+
281
+
282
+ def _get_progress_bar_context(
283
+ *,
284
+ desc: str,
285
+ log_level: int,
286
+ total: Optional[int] = None,
287
+ initial: int = 0,
288
+ unit: str = "B",
289
+ unit_scale: bool = True,
290
+ name: Optional[str] = None,
291
+ tqdm_class: Optional[type[old_tqdm]] = None,
292
+ _tqdm_bar: Optional[tqdm] = None,
293
+ ) -> ContextManager[tqdm]:
294
+ if _tqdm_bar is not None:
295
+ return nullcontext(_tqdm_bar)
296
+ # ^ `contextlib.nullcontext` mimics a context manager that does nothing
297
+ # Makes it easier to use the same code path for both cases but in the later
298
+ # case, the progress bar is not closed when exiting the context manager.
299
+
300
+ return (tqdm_class or tqdm)( # type: ignore[return-value]
301
+ unit=unit,
302
+ unit_scale=unit_scale,
303
+ total=total,
304
+ initial=initial,
305
+ desc=desc,
306
+ disable=is_tqdm_disabled(log_level=log_level),
307
+ name=name,
308
+ )
@@ -1,13 +1,12 @@
1
- Metadata-Version: 2.1
2
- Name: huggingface-hub
3
- Version: 0.29.0rc2
1
+ Metadata-Version: 2.4
2
+ Name: huggingface_hub
3
+ Version: 1.1.3
4
4
  Summary: Client library to download and publish models, datasets and other repos on the huggingface.co hub
5
5
  Home-page: https://github.com/huggingface/huggingface_hub
6
6
  Author: Hugging Face, Inc.
7
7
  Author-email: julien@huggingface.co
8
8
  License: Apache
9
9
  Keywords: model-hub machine-learning models natural-language-processing deep-learning pytorch pretrained-models
10
- Platform: UNKNOWN
11
10
  Classifier: Intended Audience :: Developers
12
11
  Classifier: Intended Audience :: Education
13
12
  Classifier: Intended Audience :: Science/Research
@@ -15,132 +14,147 @@ Classifier: License :: OSI Approved :: Apache Software License
15
14
  Classifier: Operating System :: OS Independent
16
15
  Classifier: Programming Language :: Python :: 3
17
16
  Classifier: Programming Language :: Python :: 3 :: Only
18
- Classifier: Programming Language :: Python :: 3.8
19
17
  Classifier: Programming Language :: Python :: 3.9
20
18
  Classifier: Programming Language :: Python :: 3.10
21
19
  Classifier: Programming Language :: Python :: 3.11
22
20
  Classifier: Programming Language :: Python :: 3.12
23
21
  Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Programming Language :: Python :: 3.14
24
23
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
25
- Requires-Python: >=3.8.0
24
+ Requires-Python: >=3.9.0
26
25
  Description-Content-Type: text/markdown
27
26
  License-File: LICENSE
28
27
  Requires-Dist: filelock
29
28
  Requires-Dist: fsspec>=2023.5.0
29
+ Requires-Dist: hf-xet<2.0.0,>=1.2.0; platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "arm64" or platform_machine == "aarch64"
30
+ Requires-Dist: httpx<1,>=0.23.0
30
31
  Requires-Dist: packaging>=20.9
31
32
  Requires-Dist: pyyaml>=5.1
32
- Requires-Dist: requests
33
+ Requires-Dist: shellingham
33
34
  Requires-Dist: tqdm>=4.42.1
35
+ Requires-Dist: typer-slim
34
36
  Requires-Dist: typing-extensions>=3.7.4.3
37
+ Provides-Extra: oauth
38
+ Requires-Dist: authlib>=1.3.2; extra == "oauth"
39
+ Requires-Dist: fastapi; extra == "oauth"
40
+ Requires-Dist: httpx; extra == "oauth"
41
+ Requires-Dist: itsdangerous; extra == "oauth"
42
+ Provides-Extra: torch
43
+ Requires-Dist: torch; extra == "torch"
44
+ Requires-Dist: safetensors[torch]; extra == "torch"
45
+ Provides-Extra: fastai
46
+ Requires-Dist: toml; extra == "fastai"
47
+ Requires-Dist: fastai>=2.4; extra == "fastai"
48
+ Requires-Dist: fastcore>=1.3.27; extra == "fastai"
49
+ Provides-Extra: hf-xet
50
+ Requires-Dist: hf-xet<2.0.0,>=1.1.3; extra == "hf-xet"
51
+ Provides-Extra: mcp
52
+ Requires-Dist: mcp>=1.8.0; extra == "mcp"
53
+ Provides-Extra: testing
54
+ Requires-Dist: authlib>=1.3.2; extra == "testing"
55
+ Requires-Dist: fastapi; extra == "testing"
56
+ Requires-Dist: httpx; extra == "testing"
57
+ Requires-Dist: itsdangerous; extra == "testing"
58
+ Requires-Dist: jedi; extra == "testing"
59
+ Requires-Dist: Jinja2; extra == "testing"
60
+ Requires-Dist: pytest>=8.4.2; extra == "testing"
61
+ Requires-Dist: pytest-cov; extra == "testing"
62
+ Requires-Dist: pytest-env; extra == "testing"
63
+ Requires-Dist: pytest-xdist; extra == "testing"
64
+ Requires-Dist: pytest-vcr; extra == "testing"
65
+ Requires-Dist: pytest-asyncio; extra == "testing"
66
+ Requires-Dist: pytest-rerunfailures<16.0; extra == "testing"
67
+ Requires-Dist: pytest-mock; extra == "testing"
68
+ Requires-Dist: urllib3<2.0; extra == "testing"
69
+ Requires-Dist: soundfile; extra == "testing"
70
+ Requires-Dist: Pillow; extra == "testing"
71
+ Requires-Dist: numpy; extra == "testing"
72
+ Requires-Dist: fastapi; extra == "testing"
73
+ Provides-Extra: typing
74
+ Requires-Dist: typing-extensions>=4.8.0; extra == "typing"
75
+ Requires-Dist: types-PyYAML; extra == "typing"
76
+ Requires-Dist: types-simplejson; extra == "typing"
77
+ Requires-Dist: types-toml; extra == "typing"
78
+ Requires-Dist: types-tqdm; extra == "typing"
79
+ Requires-Dist: types-urllib3; extra == "typing"
80
+ Provides-Extra: quality
81
+ Requires-Dist: ruff>=0.9.0; extra == "quality"
82
+ Requires-Dist: mypy==1.15.0; extra == "quality"
83
+ Requires-Dist: libcst>=1.4.0; extra == "quality"
84
+ Requires-Dist: ty; extra == "quality"
35
85
  Provides-Extra: all
36
- Requires-Dist: InquirerPy==0.3.4; extra == "all"
37
- Requires-Dist: aiohttp; extra == "all"
86
+ Requires-Dist: authlib>=1.3.2; extra == "all"
87
+ Requires-Dist: fastapi; extra == "all"
88
+ Requires-Dist: httpx; extra == "all"
89
+ Requires-Dist: itsdangerous; extra == "all"
38
90
  Requires-Dist: jedi; extra == "all"
39
91
  Requires-Dist: Jinja2; extra == "all"
40
- Requires-Dist: pytest<8.2.2,>=8.1.1; extra == "all"
92
+ Requires-Dist: pytest>=8.4.2; extra == "all"
41
93
  Requires-Dist: pytest-cov; extra == "all"
42
94
  Requires-Dist: pytest-env; extra == "all"
43
95
  Requires-Dist: pytest-xdist; extra == "all"
44
96
  Requires-Dist: pytest-vcr; extra == "all"
45
97
  Requires-Dist: pytest-asyncio; extra == "all"
46
- Requires-Dist: pytest-rerunfailures; extra == "all"
98
+ Requires-Dist: pytest-rerunfailures<16.0; extra == "all"
47
99
  Requires-Dist: pytest-mock; extra == "all"
48
100
  Requires-Dist: urllib3<2.0; extra == "all"
49
101
  Requires-Dist: soundfile; extra == "all"
50
102
  Requires-Dist: Pillow; extra == "all"
51
- Requires-Dist: gradio>=4.0.0; extra == "all"
52
103
  Requires-Dist: numpy; extra == "all"
53
104
  Requires-Dist: fastapi; extra == "all"
54
105
  Requires-Dist: ruff>=0.9.0; extra == "all"
55
- Requires-Dist: mypy==1.5.1; extra == "all"
56
- Requires-Dist: libcst==1.4.0; extra == "all"
106
+ Requires-Dist: mypy==1.15.0; extra == "all"
107
+ Requires-Dist: libcst>=1.4.0; extra == "all"
108
+ Requires-Dist: ty; extra == "all"
57
109
  Requires-Dist: typing-extensions>=4.8.0; extra == "all"
58
110
  Requires-Dist: types-PyYAML; extra == "all"
59
- Requires-Dist: types-requests; extra == "all"
60
111
  Requires-Dist: types-simplejson; extra == "all"
61
112
  Requires-Dist: types-toml; extra == "all"
62
113
  Requires-Dist: types-tqdm; extra == "all"
63
114
  Requires-Dist: types-urllib3; extra == "all"
64
- Provides-Extra: cli
65
- Requires-Dist: InquirerPy==0.3.4; extra == "cli"
66
115
  Provides-Extra: dev
67
- Requires-Dist: InquirerPy==0.3.4; extra == "dev"
68
- Requires-Dist: aiohttp; extra == "dev"
116
+ Requires-Dist: authlib>=1.3.2; extra == "dev"
117
+ Requires-Dist: fastapi; extra == "dev"
118
+ Requires-Dist: httpx; extra == "dev"
119
+ Requires-Dist: itsdangerous; extra == "dev"
69
120
  Requires-Dist: jedi; extra == "dev"
70
121
  Requires-Dist: Jinja2; extra == "dev"
71
- Requires-Dist: pytest<8.2.2,>=8.1.1; extra == "dev"
122
+ Requires-Dist: pytest>=8.4.2; extra == "dev"
72
123
  Requires-Dist: pytest-cov; extra == "dev"
73
124
  Requires-Dist: pytest-env; extra == "dev"
74
125
  Requires-Dist: pytest-xdist; extra == "dev"
75
126
  Requires-Dist: pytest-vcr; extra == "dev"
76
127
  Requires-Dist: pytest-asyncio; extra == "dev"
77
- Requires-Dist: pytest-rerunfailures; extra == "dev"
128
+ Requires-Dist: pytest-rerunfailures<16.0; extra == "dev"
78
129
  Requires-Dist: pytest-mock; extra == "dev"
79
130
  Requires-Dist: urllib3<2.0; extra == "dev"
80
131
  Requires-Dist: soundfile; extra == "dev"
81
132
  Requires-Dist: Pillow; extra == "dev"
82
- Requires-Dist: gradio>=4.0.0; extra == "dev"
83
133
  Requires-Dist: numpy; extra == "dev"
84
134
  Requires-Dist: fastapi; extra == "dev"
85
135
  Requires-Dist: ruff>=0.9.0; extra == "dev"
86
- Requires-Dist: mypy==1.5.1; extra == "dev"
87
- Requires-Dist: libcst==1.4.0; extra == "dev"
136
+ Requires-Dist: mypy==1.15.0; extra == "dev"
137
+ Requires-Dist: libcst>=1.4.0; extra == "dev"
138
+ Requires-Dist: ty; extra == "dev"
88
139
  Requires-Dist: typing-extensions>=4.8.0; extra == "dev"
89
140
  Requires-Dist: types-PyYAML; extra == "dev"
90
- Requires-Dist: types-requests; extra == "dev"
91
141
  Requires-Dist: types-simplejson; extra == "dev"
92
142
  Requires-Dist: types-toml; extra == "dev"
93
143
  Requires-Dist: types-tqdm; extra == "dev"
94
144
  Requires-Dist: types-urllib3; extra == "dev"
95
- Provides-Extra: fastai
96
- Requires-Dist: toml; extra == "fastai"
97
- Requires-Dist: fastai>=2.4; extra == "fastai"
98
- Requires-Dist: fastcore>=1.3.27; extra == "fastai"
99
- Provides-Extra: hf_transfer
100
- Requires-Dist: hf-transfer>=0.1.4; extra == "hf-transfer"
101
- Provides-Extra: inference
102
- Requires-Dist: aiohttp; extra == "inference"
103
- Provides-Extra: quality
104
- Requires-Dist: ruff>=0.9.0; extra == "quality"
105
- Requires-Dist: mypy==1.5.1; extra == "quality"
106
- Requires-Dist: libcst==1.4.0; extra == "quality"
107
- Provides-Extra: tensorflow
108
- Requires-Dist: tensorflow; extra == "tensorflow"
109
- Requires-Dist: pydot; extra == "tensorflow"
110
- Requires-Dist: graphviz; extra == "tensorflow"
111
- Provides-Extra: tensorflow-testing
112
- Requires-Dist: tensorflow; extra == "tensorflow-testing"
113
- Requires-Dist: keras<3.0; extra == "tensorflow-testing"
114
- Provides-Extra: testing
115
- Requires-Dist: InquirerPy==0.3.4; extra == "testing"
116
- Requires-Dist: aiohttp; extra == "testing"
117
- Requires-Dist: jedi; extra == "testing"
118
- Requires-Dist: Jinja2; extra == "testing"
119
- Requires-Dist: pytest<8.2.2,>=8.1.1; extra == "testing"
120
- Requires-Dist: pytest-cov; extra == "testing"
121
- Requires-Dist: pytest-env; extra == "testing"
122
- Requires-Dist: pytest-xdist; extra == "testing"
123
- Requires-Dist: pytest-vcr; extra == "testing"
124
- Requires-Dist: pytest-asyncio; extra == "testing"
125
- Requires-Dist: pytest-rerunfailures; extra == "testing"
126
- Requires-Dist: pytest-mock; extra == "testing"
127
- Requires-Dist: urllib3<2.0; extra == "testing"
128
- Requires-Dist: soundfile; extra == "testing"
129
- Requires-Dist: Pillow; extra == "testing"
130
- Requires-Dist: gradio>=4.0.0; extra == "testing"
131
- Requires-Dist: numpy; extra == "testing"
132
- Requires-Dist: fastapi; extra == "testing"
133
- Provides-Extra: torch
134
- Requires-Dist: torch; extra == "torch"
135
- Requires-Dist: safetensors[torch]; extra == "torch"
136
- Provides-Extra: typing
137
- Requires-Dist: typing-extensions>=4.8.0; extra == "typing"
138
- Requires-Dist: types-PyYAML; extra == "typing"
139
- Requires-Dist: types-requests; extra == "typing"
140
- Requires-Dist: types-simplejson; extra == "typing"
141
- Requires-Dist: types-toml; extra == "typing"
142
- Requires-Dist: types-tqdm; extra == "typing"
143
- Requires-Dist: types-urllib3; extra == "typing"
145
+ Dynamic: author
146
+ Dynamic: author-email
147
+ Dynamic: classifier
148
+ Dynamic: description
149
+ Dynamic: description-content-type
150
+ Dynamic: home-page
151
+ Dynamic: keywords
152
+ Dynamic: license
153
+ Dynamic: license-file
154
+ Dynamic: provides-extra
155
+ Dynamic: requires-dist
156
+ Dynamic: requires-python
157
+ Dynamic: summary
144
158
 
145
159
  <p align="center">
146
160
  <picture>
@@ -168,9 +182,10 @@ Requires-Dist: types-urllib3; extra == "typing"
168
182
  <p>
169
183
  <b>English</b> |
170
184
  <a href="https://github.com/huggingface/huggingface_hub/blob/main/i18n/README_de.md">Deutsch</a> |
185
+ <a href="https://github.com/huggingface/huggingface_hub/blob/main/i18n/README_fr.md">Français</a> |
171
186
  <a href="https://github.com/huggingface/huggingface_hub/blob/main/i18n/README_hi.md">हिंदी</a> |
172
187
  <a href="https://github.com/huggingface/huggingface_hub/blob/main/i18n/README_ko.md">한국어</a> |
173
- <a href="https://github.com/huggingface/huggingface_hub/blob/main/i18n/README_cn.md">中文(简体)</a>
188
+ <a href="https://github.com/huggingface/huggingface_hub/blob/main/i18n/README_cn.md">中文 (简体)</a>
174
189
  <p>
175
190
  </h4>
176
191
 
@@ -206,10 +221,10 @@ pip install huggingface_hub
206
221
 
207
222
  If you prefer, you can also install it with [conda](https://huggingface.co/docs/huggingface_hub/en/installation#install-with-conda).
208
223
 
209
- In order to keep the package minimal by default, `huggingface_hub` comes with optional dependencies useful for some use cases. For example, if you want have a complete experience for Inference, run:
224
+ In order to keep the package minimal by default, `huggingface_hub` comes with optional dependencies useful for some use cases. For example, if you want to use the MCP module, run:
210
225
 
211
226
  ```bash
212
- pip install huggingface_hub[inference]
227
+ pip install "huggingface_hub[mcp]"
213
228
  ```
214
229
 
215
230
  To learn more installation and optional dependencies, check out the [installation guide](https://huggingface.co/docs/huggingface_hub/en/installation).
@@ -241,9 +256,9 @@ Files will be downloaded in a local cache folder. More details in [this guide](h
241
256
  The Hugging Face Hub uses tokens to authenticate applications (see [docs](https://huggingface.co/docs/hub/security-tokens)). To log in your machine, run the following CLI:
242
257
 
243
258
  ```bash
244
- huggingface-cli login
259
+ hf auth login
245
260
  # or using an environment variable
246
- huggingface-cli login --token $HUGGINGFACE_TOKEN
261
+ hf auth login --token $HUGGINGFACE_TOKEN
247
262
  ```
248
263
 
249
264
  ### Create a repository
@@ -290,7 +305,6 @@ The advantages are:
290
305
 
291
306
  - Free model or dataset hosting for libraries and their users.
292
307
  - Built-in file versioning, even with very large files, thanks to a git-based approach.
293
- - Serverless inference API for all models publicly available.
294
308
  - In-browser widgets to play with the uploaded models.
295
309
  - Anyone can upload a new model for your library, they just need to add the corresponding tag for the model to be discoverable.
296
310
  - Fast downloads! We use Cloudfront (a CDN) to geo-replicate downloads so they're blazing fast from anywhere on the globe.
@@ -304,5 +318,3 @@ Everyone is welcome to contribute, and we value everybody's contribution. Code i
304
318
  Answering questions, helping others, reaching out and improving the documentations are immensely valuable to the community.
305
319
  We wrote a [contribution guide](https://github.com/huggingface/huggingface_hub/blob/main/CONTRIBUTING.md) to summarize
306
320
  how to get started to contribute to this repository.
307
-
308
-