spaces 0.52.0.dev2__tar.gz → 0.52.0.dev3__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 (74) hide show
  1. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/PKG-INFO +1 -1
  2. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/pyproject.toml +1 -1
  3. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/__init__.py +6 -0
  4. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/client.py +4 -4
  5. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/context.py +21 -8
  6. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/gradio.py +74 -67
  7. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/middleware.py +3 -7
  8. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/wrappers.py +3 -3
  9. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/README.md +0 -0
  10. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/__init__.py +0 -0
  11. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/__init__.py +0 -0
  12. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/asgiref/__init__.py +0 -0
  13. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/asgiref/typing.py +0 -0
  14. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/codefind/LICENSE +0 -0
  15. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/codefind/__init__.py +0 -0
  16. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/codefind/registry.py +0 -0
  17. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/codefind/version.py +0 -0
  18. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/jurigged/LICENSE +0 -0
  19. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/jurigged/__init__.py +0 -0
  20. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/jurigged/codetools.py +0 -0
  21. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/jurigged/parse.py +0 -0
  22. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/jurigged/register.py +0 -0
  23. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/jurigged/utils.py +0 -0
  24. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/jurigged/version.py +0 -0
  25. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/ovld/LICENSE +0 -0
  26. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/ovld/__init__.py +0 -0
  27. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/ovld/abc.py +0 -0
  28. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/ovld/codegen.py +0 -0
  29. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/ovld/core.py +0 -0
  30. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/ovld/dependent.py +0 -0
  31. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/ovld/medley.py +0 -0
  32. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/ovld/mro.py +0 -0
  33. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/ovld/py.typed +0 -0
  34. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/ovld/recode.py +0 -0
  35. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/ovld/signatures.py +0 -0
  36. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/ovld/typemap.py +0 -0
  37. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/ovld/types.py +0 -0
  38. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/ovld/utils.py +0 -0
  39. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/ovld/version.py +0 -0
  40. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/sse_starlette/LICENSE +0 -0
  41. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/sse_starlette/__init__.py +0 -0
  42. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/sse_starlette/event.py +0 -0
  43. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/sse_starlette/py.typed +0 -0
  44. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/sse_starlette/sse.py +0 -0
  45. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/sseclient/LICENSE +0 -0
  46. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/_vendor/sseclient/__init__.py +0 -0
  47. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/config.py +0 -0
  48. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/reloading/__init__.py +0 -0
  49. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/reloading/client.py +0 -0
  50. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/reloading/server.py +0 -0
  51. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/reloading/types.py +0 -0
  52. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/reloading/types.ts +0 -0
  53. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/utils.py +0 -0
  54. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/api.py +0 -0
  55. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/config.py +0 -0
  56. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/configs.json +0 -0
  57. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/decorator.py +0 -0
  58. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/elf.py +0 -0
  59. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/lifecycle.py +0 -0
  60. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/mmap.py +0 -0
  61. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/torch/__init__.py +0 -0
  62. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/torch/aoti.py +0 -0
  63. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/torch/bitsandbytes.py +0 -0
  64. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/torch/bitsandbytes_legacy.py +0 -0
  65. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/torch/cudart.py +0 -0
  66. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/torch/packing.py +0 -0
  67. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/torch/patching.py +0 -0
  68. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/torch/patching_legacy.py +0 -0
  69. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/torch/static.py +0 -0
  70. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/torch/types.py +0 -0
  71. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/torch/utils.py +0 -0
  72. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/tqdm.py +0 -0
  73. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/types.py +0 -0
  74. {spaces-0.52.0.dev2 → spaces-0.52.0.dev3}/spaces/zero/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: spaces
3
- Version: 0.52.0.dev2
3
+ Version: 0.52.0.dev3
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.52.0.dev2"
3
+ version = "0.52.0.dev3"
4
4
  description = "Utilities for Hugging Face Spaces"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10,<3.15"
@@ -6,6 +6,7 @@ from importlib import metadata
6
6
  from packaging.version import Version
7
7
 
8
8
  from ..config import Config
9
+ from . import context
9
10
  from .context import ZeroGPUError
10
11
  from .context import ZeroGPUErrorResponse
11
12
  from .context import ZeroGPUException
@@ -26,6 +27,7 @@ def _maybe_enable_gradio_compat():
26
27
  if Version(gradio_version) < Version('7.0.0.dev0'):
27
28
  from . import gradio
28
29
  gradio.patch()
30
+ context.set_context_getter(gradio.get_zerogpu_context)
29
31
 
30
32
 
31
33
  if Config.zero_gpu:
@@ -33,6 +35,10 @@ if Config.zero_gpu:
33
35
  _maybe_enable_gradio_compat()
34
36
 
35
37
 
38
+ # Compat
39
+ startup = zerogpu_startup
40
+
41
+
36
42
  __all__ = [
37
43
  'ZeroGPUError',
38
44
  'ZeroGPUErrorResponse',
@@ -11,6 +11,7 @@ from typing_extensions import assert_never
11
11
 
12
12
  from ..config import Config
13
13
  from . import config
14
+ from . import context
14
15
  from . import default_gpu_size
15
16
  from . import utils
16
17
  from .api import APIClient
@@ -18,7 +19,6 @@ from .api import GPUSize
18
19
  from .api import AuthLevel
19
20
  from .api import QuotaInfos
20
21
  from .api import ScheduleResponse
21
- from .context import get_context
22
22
  from .context import ZeroGPUContext
23
23
 
24
24
 
@@ -104,7 +104,7 @@ def schedule(
104
104
  _first_attempt: bool = True,
105
105
  ) -> ScheduleResponse:
106
106
 
107
- ctx = get_context()
107
+ ctx = context.get()
108
108
  token, payload = _get_token_and_payload(ctx.headers)
109
109
  if token is not None and (token_error := payload.get('error')):
110
110
  message = f"Falling back to IP-based quotas ({token_error})"
@@ -287,7 +287,7 @@ def release(
287
287
  allow_404: bool = False,
288
288
  ) -> None:
289
289
 
290
- ctx = get_context()
290
+ ctx = context.get()
291
291
  res = api_client().release(
292
292
  allow_token=allow_token,
293
293
  fail=fail,
@@ -327,7 +327,7 @@ def _get_token_and_payload(headers: dict[str, str]) -> tuple[str | None, dict[st
327
327
 
328
328
 
329
329
  def duration_warning():
330
- get_context().warning(
330
+ context.get().warning(
331
331
  title="ZeroGPU duration",
332
332
  message="GPU task is exceeding its requested duration and might be aborted",
333
333
  )
@@ -1,6 +1,7 @@
1
1
  """
2
2
  """
3
3
 
4
+ from contextlib import contextmanager
4
5
  from contextvars import ContextVar
5
6
  from typing import Callable
6
7
  from typing import Literal
@@ -119,14 +120,26 @@ class ZeroGPUContext:
119
120
  return False
120
121
 
121
122
 
122
- ctx_var: ContextVar[ZeroGPUContext] = ContextVar('zerogpu_context', default=ZeroGPUContext())
123
+ _context_var: ContextVar[ZeroGPUContext] = ContextVar('zerogpu_context', default=ZeroGPUContext())
124
+ _context_getter: Callable[[], ZeroGPUContext | None] | None = None
123
125
 
124
126
 
125
- _context_resolver: Callable[[], ZeroGPUContext | None] | None = None
126
-
127
- def get_context() -> ZeroGPUContext:
128
- if _context_resolver is not None:
129
- ctx = _context_resolver()
130
- if ctx is not None:
127
+ def get():
128
+ if _context_getter is not None:
129
+ if (ctx := _context_getter()) is not None:
131
130
  return ctx
132
- return ctx_var.get()
131
+ return _context_var.get()
132
+
133
+
134
+ @contextmanager
135
+ def set_context_var(value: ZeroGPUContext):
136
+ token = _context_var.set(value)
137
+ try:
138
+ yield
139
+ finally:
140
+ _context_var.reset(token)
141
+
142
+
143
+ def set_context_getter(context_getter: Callable[[], ZeroGPUContext | None]):
144
+ global _context_getter
145
+ _context_getter = context_getter
@@ -18,7 +18,6 @@ from gradio.routes import App
18
18
 
19
19
  from ..utils import create_thread_daemon
20
20
  from ..utils import SimpleQueue
21
- from . import context
22
21
  from .context import ZeroGPUContext
23
22
  from .context import ZeroGPUErrorResponse
24
23
  from .context import ZeroGPULog
@@ -39,6 +38,55 @@ orig_queue_methods: dict[str, Any] = {
39
38
  }
40
39
 
41
40
 
41
+ try:
42
+ Success = gr.Success # pyright: ignore[reportAttributeAccessIssue] (Gradio<5.10)
43
+ except AttributeError: # pragma: no cover
44
+ Success = gr.Info
45
+
46
+
47
+ def info(title: str, message: str, level: Literal['success', 'info', 'warning'] = 'info'): # pragma: no cover
48
+ params = inspect.signature(gr.Info).parameters
49
+ kwargs: dict[str, Any] = {}
50
+ if 'title' in params:
51
+ kwargs = {**kwargs, 'title': title}
52
+ match level:
53
+ case 'info':
54
+ return gr.Info(message, **kwargs)
55
+ case 'success':
56
+ return Success(message, **kwargs)
57
+ case 'warning':
58
+ return gr.Warning(message, **kwargs)
59
+
60
+
61
+ def error(title: str, message: str): # pragma: no cover
62
+ params = inspect.signature(gr.Error).parameters
63
+ kwargs: dict[str, Any] = {}
64
+ if 'title' in params:
65
+ kwargs = {**kwargs, 'title': title}
66
+ if 'print_exception' in params:
67
+ kwargs = {**kwargs, 'print_exception': False}
68
+ return gr.Error(message, **kwargs)
69
+
70
+
71
+ def log_emitter(log: ZeroGPULog):
72
+ return info(
73
+ title=log['title'],
74
+ message=log['message'],
75
+ level=log['level'],
76
+ )
77
+
78
+
79
+ def exception_mapper(err: ZeroGPUErrorResponse, exc: Exception | None):
80
+ if isinstance(exc, gr.Error):
81
+ setattr(exc, 'print_exception', False)
82
+ return exc
83
+ detail = err['detail']
84
+ return error(
85
+ title=detail['title'],
86
+ message=detail['message'],
87
+ )
88
+
89
+
42
90
  class WorkerContextualizer:
43
91
  def __init__(self):
44
92
  self.event_id = LocalContext.event_id.get(None)
@@ -61,75 +109,33 @@ def disconnect_detector(): # pragma: no cover
61
109
  return False
62
110
 
63
111
 
64
- def patch():
65
-
66
- try:
67
- Success = gr.Success # pyright: ignore[reportAttributeAccessIssue] (Gradio<5.10)
68
- except AttributeError: # pragma: no cover
69
- Success = gr.Info
70
-
71
- def error(title: str, message: str): # pragma: no cover
72
- params = inspect.signature(gr.Error).parameters
73
- kwargs: dict[str, Any] = {}
74
- if 'title' in params:
75
- kwargs = {**kwargs, 'title': title}
76
- if 'print_exception' in params:
77
- kwargs = {**kwargs, 'print_exception': False}
78
- return gr.Error(message, **kwargs)
79
-
80
- def info(title: str, message: str, level: Literal['success', 'info', 'warning'] = 'info'): # pragma: no cover
81
- params = inspect.signature(gr.Info).parameters
82
- kwargs: dict[str, Any] = {}
83
- if 'title' in params:
84
- kwargs = {**kwargs, 'title': title}
85
- match level:
86
- case 'info':
87
- return gr.Info(message, **kwargs)
88
- case 'success':
89
- return Success(message, **kwargs)
90
- case 'warning':
91
- return gr.Warning(message, **kwargs)
92
-
93
- def exception_mapper(err: ZeroGPUErrorResponse, exc: Exception | None):
94
- if isinstance(exc, gr.Error):
95
- setattr(exc, 'print_exception', False)
96
- return exc
97
- detail = err['detail']
98
- return error(
99
- title=detail['title'],
100
- message=detail['message'],
112
+ def setup_middleware(app: FastAPI, *, skip_zerogpu_startup: bool = False):
113
+ mounted = any(middleware.cls is ZeroGPUMiddleware for middleware in app.user_middleware)
114
+ if not mounted:
115
+ app.add_middleware(
116
+ ZeroGPUMiddleware,
117
+ exception_mapper=exception_mapper,
118
+ log_emitter=log_emitter,
119
+ worker_contextualizer=WorkerContextualizer,
120
+ disconnect_detector=disconnect_detector,
121
+ skip_zerogpu_startup=skip_zerogpu_startup,
101
122
  )
102
123
 
103
- def log_emitter(log: ZeroGPULog):
104
- return info(
105
- title=log['title'],
106
- message=log['message'],
107
- level=log['level'],
124
+
125
+ def get_zerogpu_context():
126
+ if zerogpu_mode_enabled() and (request := LocalContext.request.get(None)) is not None:
127
+ scope = cast(ASGIScope | None, request.request.scope if request.request is not None else None)
128
+ return ZeroGPUContext(
129
+ exception_mapper=exception_mapper,
130
+ log_emitter=log_emitter,
131
+ worker_contextualizer=WorkerContextualizer,
132
+ disconnect_detector=disconnect_detector,
133
+ server_port=get_server_port(scope) if scope is not None else None,
134
+ headers={key.lower(): value for key, value in dict(getattr(request, 'headers', {})).items()},
108
135
  )
109
136
 
110
- def resolve_context():
111
- if zerogpu_mode_enabled() and (request := LocalContext.request.get(None)) is not None:
112
- scope = cast(ASGIScope | None, request.request.scope if request.request is not None else None)
113
- return ZeroGPUContext(
114
- exception_mapper=exception_mapper,
115
- log_emitter=log_emitter,
116
- worker_contextualizer=WorkerContextualizer,
117
- disconnect_detector=disconnect_detector,
118
- server_port=get_server_port(scope) if scope is not None else None,
119
- headers={key.lower(): value for key, value in dict(getattr(request, 'headers', {})).items()},
120
- )
121
-
122
- def setup_middleware(app: FastAPI, *, skip_zerogpu_startup: bool = False):
123
- mounted = any(middleware.cls is ZeroGPUMiddleware for middleware in app.user_middleware)
124
- if not mounted:
125
- app.add_middleware(
126
- ZeroGPUMiddleware,
127
- exception_mapper=exception_mapper,
128
- log_emitter=log_emitter,
129
- worker_contextualizer=WorkerContextualizer,
130
- disconnect_detector=disconnect_detector,
131
- skip_zerogpu_startup=skip_zerogpu_startup,
132
- )
137
+
138
+ def patch():
133
139
 
134
140
  @wraps(orig_create_app)
135
141
  def create_app(*args, **kwargs):
@@ -137,12 +143,14 @@ def patch():
137
143
  setup_middleware(app, skip_zerogpu_startup=True)
138
144
  return app
139
145
 
146
+
140
147
  @wraps(orig_mount_gradio_app)
141
148
  def mount_gradio_app(*args, **kwargs):
142
149
  app = orig_mount_gradio_app(*args, **kwargs)
143
150
  setup_middleware(app)
144
151
  return app
145
152
 
153
+
146
154
  @wraps(orig_start_server)
147
155
  def start_server(*args, **kwargs):
148
156
  if zerogpu_mode_enabled():
@@ -153,7 +161,6 @@ def patch():
153
161
  gr.mount_gradio_app = mount_gradio_app
154
162
  routes.mount_gradio_app = mount_gradio_app
155
163
  http_server.start_server = start_server
156
- context._context_resolver = resolve_context
157
164
  _patch_queue()
158
165
 
159
166
 
@@ -15,7 +15,7 @@ from .._vendor.asgiref.typing import ASGIReceiveEvent
15
15
  from .._vendor.asgiref.typing import ASGISendCallable
16
16
  from .._vendor.asgiref.typing import Scope as ASGIScope
17
17
 
18
- from .context import ctx_var
18
+ from . import context
19
19
  from .context import ConnectionState
20
20
  from .context import ZeroGPUErrorResponse
21
21
  from .context import ZeroGPUContext
@@ -81,7 +81,7 @@ class ZeroGPUMiddleware:
81
81
  connection_state.alive = False
82
82
  return message
83
83
 
84
- token = ctx_var.set(ZeroGPUContext(
84
+ with context.set_context_var(ZeroGPUContext(
85
85
  exception_mapper=self.exception_mapper,
86
86
  log_emitter=self.log_emitter,
87
87
  worker_contextualizer=self.worker_contextualizer,
@@ -89,12 +89,8 @@ class ZeroGPUMiddleware:
89
89
  connection_state=connection_state,
90
90
  server_port=get_server_port(asgi_scope),
91
91
  headers=_decode_headers(asgi_scope.get('headers', [])),
92
- ))
93
-
94
- try:
92
+ )):
95
93
  await asgi_app(asgi_scope, wrapped_receive, asgi_send)
96
- finally:
97
- ctx_var.reset(token)
98
94
 
99
95
 
100
96
  def get_server_port(scope: ASGIScope):
@@ -29,12 +29,12 @@ from ..utils import debug
29
29
  from ..utils import drop_params
30
30
  from ..utils import SimpleQueue as Queue
31
31
  from . import client
32
+ from . import context
32
33
  from . import torch
33
34
  from .api import AllowToken
34
35
  from .api import GPUSize
35
36
  from .api import NvidiaIndex
36
37
  from .api import NvidiaUUID
37
- from .context import get_context
38
38
  from .tqdm import remove_tqdm_multiprocessing_lock
39
39
  from .tqdm import tqdm
40
40
  from .utils import apply_cleanups
@@ -170,7 +170,7 @@ def regular_function_wrapper(
170
170
  if forked:
171
171
  return task(*args, **kwargs)
172
172
 
173
- ctx = get_context()
173
+ ctx = context.get()
174
174
  duration_ = static_duration(duration, *args, **kwargs)
175
175
  duration_ = process_duration(duration_)
176
176
  schedule_response = client.schedule(task_id=task_id, duration=duration_, gpu_size=gpu_size)
@@ -297,7 +297,7 @@ def generator_function_wrapper(
297
297
  yield from task(*args, **kwargs)
298
298
  return
299
299
 
300
- ctx = get_context()
300
+ ctx = context.get()
301
301
  duration_ = static_duration(duration, *args, **kwargs)
302
302
  duration_ = process_duration(duration_)
303
303
  schedule_response = client.schedule(task_id=task_id, duration=duration_, gpu_size=gpu_size)
File without changes