spaces 0.50.dev0__tar.gz → 0.50.dev2__tar.gz

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 (71) hide show
  1. {spaces-0.50.dev0 → spaces-0.50.dev2}/PKG-INFO +1 -1
  2. {spaces-0.50.dev0 → spaces-0.50.dev2}/pyproject.toml +1 -1
  3. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/__init__.py +1 -1
  4. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/__init__.py +18 -2
  5. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/gradio.py +2 -2
  6. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/lifecycle.py +8 -0
  7. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/middleware.py +3 -3
  8. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/torch/patching.py +0 -4
  9. {spaces-0.50.dev0 → spaces-0.50.dev2}/README.md +0 -0
  10. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/__init__.py +0 -0
  11. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/asgiref/__init__.py +0 -0
  12. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/asgiref/typing.py +0 -0
  13. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/codefind/LICENSE +0 -0
  14. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/codefind/__init__.py +0 -0
  15. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/codefind/registry.py +0 -0
  16. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/codefind/version.py +0 -0
  17. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/jurigged/LICENSE +0 -0
  18. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/jurigged/__init__.py +0 -0
  19. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/jurigged/codetools.py +0 -0
  20. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/jurigged/parse.py +0 -0
  21. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/jurigged/register.py +0 -0
  22. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/jurigged/utils.py +0 -0
  23. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/jurigged/version.py +0 -0
  24. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/ovld/LICENSE +0 -0
  25. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/ovld/__init__.py +0 -0
  26. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/ovld/abc.py +0 -0
  27. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/ovld/codegen.py +0 -0
  28. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/ovld/core.py +0 -0
  29. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/ovld/dependent.py +0 -0
  30. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/ovld/medley.py +0 -0
  31. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/ovld/mro.py +0 -0
  32. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/ovld/py.typed +0 -0
  33. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/ovld/recode.py +0 -0
  34. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/ovld/signatures.py +0 -0
  35. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/ovld/typemap.py +0 -0
  36. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/ovld/types.py +0 -0
  37. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/ovld/utils.py +0 -0
  38. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/ovld/version.py +0 -0
  39. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/sse_starlette/LICENSE +0 -0
  40. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/sse_starlette/__init__.py +0 -0
  41. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/sse_starlette/event.py +0 -0
  42. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/sse_starlette/py.typed +0 -0
  43. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/sse_starlette/sse.py +0 -0
  44. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/sseclient/LICENSE +0 -0
  45. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/_vendor/sseclient/__init__.py +0 -0
  46. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/config.py +0 -0
  47. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/reloading/__init__.py +0 -0
  48. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/reloading/client.py +0 -0
  49. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/reloading/server.py +0 -0
  50. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/reloading/types.py +0 -0
  51. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/reloading/types.ts +0 -0
  52. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/utils.py +0 -0
  53. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/api.py +0 -0
  54. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/client.py +0 -0
  55. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/context.py +0 -0
  56. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/decorator.py +0 -0
  57. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/mmap.py +0 -0
  58. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/torch/__init__.py +0 -0
  59. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/torch/aoti.py +0 -0
  60. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/torch/bitsandbytes.py +0 -0
  61. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/torch/bitsandbytes_legacy.py +0 -0
  62. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/torch/cudart.py +0 -0
  63. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/torch/packing.py +0 -0
  64. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/torch/patching_legacy.py +0 -0
  65. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/torch/static.py +0 -0
  66. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/torch/types.py +0 -0
  67. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/torch/utils.py +0 -0
  68. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/tqdm.py +0 -0
  69. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/types.py +0 -0
  70. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/utils.py +0 -0
  71. {spaces-0.50.dev0 → spaces-0.50.dev2}/spaces/zero/wrappers.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: spaces
3
- Version: 0.50.dev0
3
+ Version: 0.50.dev2
4
4
  Summary: Utilities for Hugging Face Spaces
5
5
  Author: Charles Bensimon
6
6
  Author-email: Charles Bensimon <charles@huggingface.co>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "spaces"
3
- version = "0.50.dev0"
3
+ version = "0.50.dev2"
4
4
  description = "Utilities for Hugging Face Spaces"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10,<3.15"
@@ -8,7 +8,7 @@ from typing import TYPE_CHECKING
8
8
  from typing import Callable
9
9
 
10
10
 
11
- # Prevent gradio from importing spaces
11
+ # Prevent partially-imported gradio from importing spaces
12
12
  if (gr := sys.modules.get('gradio')) is not None: # pragma: no cover
13
13
  try:
14
14
  gr.Blocks
@@ -6,6 +6,10 @@ from importlib import metadata
6
6
  from packaging.version import Version
7
7
 
8
8
  from ..config import Config
9
+ from .context import ZeroGPUError
10
+ from .context import ZeroGPUErrorResponse
11
+ from .context import ZeroGPUException
12
+ from .context import ZeroGPULog
9
13
  from .middleware import ZeroGPUMiddleware
10
14
  from .lifecycle import zerogpu_mode_enable
11
15
  from .lifecycle import zerogpu_mode_enabled
@@ -18,11 +22,23 @@ def _maybe_enable_gradio_compat():
18
22
  except metadata.PackageNotFoundError: # pragma: no cover
19
23
  pass
20
24
  else:
21
- if Version(gradio_version) < Version('6.13'):
25
+ if Version(gradio_version) < Version('6.14'):
22
26
  from . import gradio
23
- gradio.patch(zerogpu_middleware_class=ZeroGPUMiddleware)
27
+ gradio.patch()
24
28
 
25
29
 
26
30
  if Config.zero_gpu:
27
31
  zerogpu_mode_enable()
28
32
  _maybe_enable_gradio_compat()
33
+
34
+
35
+ __all__ = [
36
+ 'ZeroGPUError',
37
+ 'ZeroGPUErrorResponse',
38
+ 'ZeroGPUException',
39
+ 'ZeroGPULog',
40
+ 'ZeroGPUMiddleware',
41
+ 'zerogpu_mode_enable',
42
+ 'zerogpu_mode_enabled',
43
+ 'zerogpu_startup',
44
+ ]
@@ -37,7 +37,7 @@ class WorkerContextualizer:
37
37
  LocalContext.progress.set(self.progress)
38
38
 
39
39
 
40
- def patch(zerogpu_middleware_class: Type[ZeroGPUMiddleware]):
40
+ def patch():
41
41
 
42
42
  try:
43
43
  Success = gr.Success # pyright: ignore[reportAttributeAccessIssue] (Gradio<5.10)
@@ -70,7 +70,7 @@ def patch(zerogpu_middleware_class: Type[ZeroGPUMiddleware]):
70
70
  def create_app(*args, **kwargs):
71
71
  app = orig_create_app(*args, **kwargs)
72
72
  app.add_middleware(
73
- zerogpu_middleware_class,
73
+ ZeroGPUMiddleware,
74
74
  exception_mapper=lambda err, exc: (
75
75
  setattr(exc, 'print_exception', False) or exc
76
76
  if isinstance(exc, gr.Error)
@@ -1,6 +1,12 @@
1
1
  """
2
2
  """
3
3
 
4
+ import shutil
5
+ from pathlib import Path
6
+
7
+ from ..config import Config
8
+
9
+
4
10
  BAD_FORK_EXCEPTION_MESSAGE = (
5
11
  "CUDA has been initialized before importing the `spaces` package. "
6
12
  "Try importing `spaces` before any other CUDA-related package."
@@ -16,6 +22,8 @@ def zerogpu_mode_enable():
16
22
  if torch.is_in_bad_fork():
17
23
  raise RuntimeError(BAD_FORK_EXCEPTION_MESSAGE)
18
24
  torch.patch()
25
+ shutil.rmtree(Config.zerogpu_offload_dir, ignore_errors=True)
26
+ Path(Config.zerogpu_offload_dir).mkdir(parents=True)
19
27
  _zerogpu_mode_enabled = True
20
28
 
21
29
 
@@ -1,7 +1,7 @@
1
1
  """
2
2
  """
3
- from abc import ABC
4
- from abc import abstractmethod
3
+
4
+ import asyncio.threads
5
5
  from typing import Any
6
6
  from typing import Awaitable
7
7
  from typing import Callable
@@ -61,7 +61,7 @@ class ZeroGPUMiddleware:
61
61
  async def wrapped_receive() -> ASGIReceiveEvent:
62
62
  message = await asgi_receive()
63
63
  if message['type'] == 'lifespan.startup':
64
- zerogpu_startup()
64
+ await asyncio.threads.to_thread(zerogpu_startup)
65
65
  return message
66
66
  await asgi_app(asgi_scope, wrapped_receive, asgi_send)
67
67
  return # pragma: no cover
@@ -5,13 +5,11 @@
5
5
  import gc
6
6
  import multiprocessing
7
7
  import os
8
- import shutil
9
8
  from collections import defaultdict
10
9
  from concurrent.futures import ProcessPoolExecutor
11
10
  from concurrent.futures import ThreadPoolExecutor
12
11
  from contextlib import nullcontext
13
12
  from contextvars import copy_context
14
- from pathlib import Path
15
13
  from typing import Any
16
14
  from typing import Callable
17
15
 
@@ -391,8 +389,6 @@ def _pack(offload_dir: str):
391
389
  def pack():
392
390
  if len(cuda_aliases) == 0:
393
391
  return 0
394
- shutil.rmtree(Config.zerogpu_offload_dir, ignore_errors=True)
395
- Path(Config.zerogpu_offload_dir).mkdir(parents=True)
396
392
  mmap_addrs = [tensor.data_ptr() for tensor in cuda_aliases.values() if tensor is not None]
397
393
  with unmap_capture(mmap_addrs) as unmapped_paths:
398
394
  total_size = _pack(Config.zerogpu_offload_dir)
File without changes
File without changes
File without changes