diffusers-workflow 0.4.0b7__py3-none-any.whl → 0.6.0__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 (195) hide show
  1. {diffusers_workflow-0.4.0b7.dist-info → diffusers_workflow-0.6.0.dist-info}/METADATA +46 -14
  2. diffusers_workflow-0.6.0.dist-info/RECORD +296 -0
  3. {diffusers_workflow-0.4.0b7.dist-info → diffusers_workflow-0.6.0.dist-info}/entry_points.txt +0 -1
  4. dw/__init__.py +83 -14
  5. dw/adapter_compatibility.py +65 -21
  6. dw/argument_media.py +322 -0
  7. dw/argument_warnings.py +216 -0
  8. dw/arguments.py +211 -315
  9. dw/assessment_rules.py +193 -0
  10. dw/assets.py +33 -31
  11. dw/audio_qc.py +426 -0
  12. dw/cache_blocks.py +2 -1
  13. dw/content_types.py +113 -10
  14. dw/dissolve_frame_errors.py +117 -0
  15. dw/docs/ACCELERATION.md +11 -65
  16. dw/docs/AGENT_LOOP.md +9 -0
  17. dw/docs/DEPENDENCIES.md +2 -2
  18. dw/docs/MCP.md +22 -17
  19. dw/docs/RECIPES_24GB.md +12 -1
  20. dw/docs/RELEASING.md +437 -7
  21. dw/docs/REMOTE.md +21 -2
  22. dw/docs/SECURITY.md +61 -14
  23. dw/docs/SERVER.md +32 -9
  24. dw/docs/TASKS.md +537 -17
  25. dw/docs/TESTING.md +15 -6
  26. dw/docs/WORKER_GUIDE.md +46 -0
  27. dw/docs/WORKFLOW_GUIDE.md +329 -29
  28. dw/docs/WORKSPACES.md +36 -21
  29. dw/download_watch.py +335 -0
  30. dw/dsp.py +612 -0
  31. dw/elision.py +28 -9
  32. dw/events.py +54 -11
  33. dw/for_each.py +21 -34
  34. dw/host_memory_projection.py +72 -17
  35. dw/hub_cache.py +114 -0
  36. dw/introspection.py +192 -229
  37. dw/kernel_availability.py +5 -8
  38. dw/library.py +717 -0
  39. dw/locations.py +169 -39
  40. dw/log_setup.py +3 -2
  41. dw/media.py +851 -0
  42. dw/media_frames.py +104 -125
  43. dw/media_types.py +192 -0
  44. dw/output_extraction.py +249 -0
  45. dw/pipeline_ownership.py +308 -0
  46. dw/pipeline_processors/adapters.py +164 -0
  47. dw/pipeline_processors/chain.py +62 -20
  48. dw/pipeline_processors/components.py +828 -0
  49. dw/pipeline_processors/config_objects.py +50 -2
  50. dw/pipeline_processors/pipeline.py +83 -1519
  51. dw/pipeline_processors/placement.py +369 -0
  52. dw/pipeline_processors/progress.py +236 -0
  53. dw/pipeline_processors/remote.py +1 -1
  54. dw/plan.py +256 -183
  55. dw/previous_results.py +47 -42
  56. dw/probe_paths.py +66 -0
  57. dw/prompts.py +30 -25
  58. dw/realize.py +33 -21
  59. dw/reference_limits.py +13 -11
  60. dw/reference_names.py +3 -6
  61. dw/references.py +140 -0
  62. dw/result.py +344 -1081
  63. dw/run.py +221 -115
  64. dw/runs.py +498 -23
  65. dw/scalar_result_validation.py +69 -11
  66. dw/schema.py +1 -1
  67. dw/security.py +36 -139
  68. dw/serve.py +108 -51
  69. dw/server/admission.py +425 -0
  70. dw/server/app.py +143 -4065
  71. dw/server/assess.py +135 -0
  72. dw/server/catalog.py +434 -0
  73. dw/server/catalog_shape.py +9 -9
  74. dw/server/deps.py +189 -0
  75. dw/server/exports.py +21 -17
  76. dw/server/guides.py +60 -7
  77. dw/server/http_security.py +187 -0
  78. dw/server/job_history.py +437 -0
  79. dw/server/job_record.py +281 -0
  80. dw/server/jobs.py +257 -885
  81. dw/server/mcp_mount.py +2 -5
  82. dw/server/netinfo.py +9 -1
  83. dw/server/observed_cost.py +29 -1
  84. dw/server/outputs.py +400 -0
  85. dw/server/routes/__init__.py +46 -0
  86. dw/server/routes/assets.py +443 -0
  87. dw/server/routes/files.py +159 -0
  88. dw/server/routes/gallery.py +385 -0
  89. dw/server/routes/jobs.py +765 -0
  90. dw/server/routes/library.py +706 -0
  91. dw/server/routes/media.py +566 -0
  92. dw/server/routes/system.py +416 -0
  93. dw/server/ui/assets/{cssMode-xQCqMuag.js → cssMode-CjZLP_Pe.js} +1 -1
  94. dw/server/ui/assets/{editor.api-Bfiq9hmW.js → editor.api-DXlBngV6.js} +1 -1
  95. dw/server/ui/assets/{freemarker2-BwDnlSuz.js → freemarker2-CtKALOjK.js} +1 -1
  96. dw/server/ui/assets/{handlebars-Beb1we4G.js → handlebars-teGPbQUB.js} +1 -1
  97. dw/server/ui/assets/{html-Yw-qdTCH.js → html-DfSymt9C.js} +1 -1
  98. dw/server/ui/assets/{htmlMode-Dbp7eBPO.js → htmlMode-Cr3jQp_U.js} +1 -1
  99. dw/server/ui/assets/{index-CsXMC8a8.css → index-3Vw6WAPW.css} +1 -1
  100. dw/server/ui/assets/index-J5rsq_M9.js +43 -0
  101. dw/server/ui/assets/{javascript-BNzP7yQZ.js → javascript-BeSdrNYj.js} +1 -1
  102. dw/server/ui/assets/{jsonMode-DxIEESAg.js → jsonMode-DJLaxAu8.js} +1 -1
  103. dw/server/ui/assets/{liquid-CeQTai1N.js → liquid-D5XtXQ2P.js} +1 -1
  104. dw/server/ui/assets/{lspLanguageFeatures-DKVB_UCB.js → lspLanguageFeatures-BJkK4mNN.js} +1 -1
  105. dw/server/ui/assets/{mdx-Bczl_PHr.js → mdx-CIThOdKr.js} +1 -1
  106. dw/server/ui/assets/{monaco-Bu2OB6wI.js → monaco-CYXGxb41.js} +4 -4
  107. dw/server/ui/assets/{python-CeTsj82v.js → python-BlzkzsC6.js} +1 -1
  108. dw/server/ui/assets/{razor-CN7JaWqc.js → razor-DeSKNqSl.js} +1 -1
  109. dw/server/ui/assets/{tsMode-CoSEMx-L.js → tsMode-BCUw0fMr.js} +1 -1
  110. dw/server/ui/assets/{typescript-CcsolRTO.js → typescript-3N0ou1YS.js} +1 -1
  111. dw/server/ui/assets/{workers-DLaycdy4.js → workers-C91O0to6.js} +1 -1
  112. dw/server/ui/assets/{xml-QEwuyn1w.js → xml-DmIqin7X.js} +1 -1
  113. dw/server/ui/assets/{yaml-BB4U5D-R.js → yaml-BQg2lXI1.js} +1 -1
  114. dw/server/ui/index.html +2 -2
  115. dw/settings.py +9 -0
  116. dw/shot_span_preflight.py +118 -0
  117. dw/shots.py +420 -0
  118. dw/slice_preflight.py +173 -0
  119. dw/step.py +24 -1
  120. dw/step_cache.py +283 -30
  121. dw/step_value_checks.py +312 -0
  122. dw/subfolders.py +3 -6
  123. dw/task_domains.py +235 -16
  124. dw/tasks/assess.py +854 -0
  125. dw/tasks/audio_dynamics.py +423 -0
  126. dw/tasks/audio_transcription.py +53 -5
  127. dw/tasks/audio_utils.py +179 -955
  128. dw/tasks/compose_text.py +1 -1
  129. dw/tasks/concat_videos.py +272 -126
  130. dw/tasks/dissolve_videos.py +154 -60
  131. dw/tasks/gather.py +8 -4
  132. dw/tasks/grade.py +97 -0
  133. dw/tasks/image_utils.py +39 -1
  134. dw/tasks/interpolate_frames.py +10 -2
  135. dw/tasks/join_into_song.py +461 -0
  136. dw/tasks/joins.py +581 -0
  137. dw/tasks/loop_bed.py +850 -0
  138. dw/tasks/pair_audio.py +217 -39
  139. dw/tasks/segment.py +15 -4
  140. dw/tasks/select.py +14 -36
  141. dw/tasks/speech_generation.py +4 -2
  142. dw/tasks/stabilize.py +10 -2
  143. dw/tasks/task.py +187 -37
  144. dw/tasks/video_utils.py +127 -212
  145. dw/tasks/voice_attribution.py +811 -0
  146. dw/trust.py +277 -0
  147. dw/type_helpers.py +167 -12
  148. dw/type_references.py +267 -0
  149. dw/validate.py +2 -1
  150. dw/validation.py +835 -0
  151. dw/variable_constraints.py +63 -38
  152. dw/variables.py +79 -21
  153. dw/video_extensions.py +134 -0
  154. dw/video_size_errors.py +114 -0
  155. dw/vram_estimate.py +332 -35
  156. dw/vram_inheritance.py +159 -0
  157. dw/worker.py +278 -222
  158. dw/{repl_worker.py → worker_manager.py} +40 -4
  159. dw/worker_protocol.py +235 -0
  160. dw/workflow.py +574 -1352
  161. dw/workflow_run.py +972 -0
  162. dw/workflow_schema.json +15 -34
  163. dw/workflows/test.json +1 -1
  164. dw/workspace.py +16 -69
  165. dw/writers.py +376 -0
  166. dw_mcp/assets.py +122 -20
  167. dw_mcp/authoring.py +30 -38
  168. dw_mcp/catalog.py +90 -14
  169. dw_mcp/client.py +46 -5
  170. dw_mcp/diagnose.py +24 -11
  171. dw_mcp/exports.py +55 -14
  172. dw_mcp/guides.py +3 -1
  173. dw_mcp/media.py +78 -8
  174. dw_mcp/prompts.py +2 -1
  175. dw_mcp/server.py +126 -1254
  176. dw_mcp/tools_authoring.py +233 -0
  177. dw_mcp/tools_catalog.py +432 -0
  178. dw_mcp/tools_jobs.py +231 -0
  179. dw_mcp/tools_media.py +382 -0
  180. dw_mcp/workspaces.py +10 -5
  181. diffusers_workflow-0.4.0b7.dist-info/RECORD +0 -247
  182. dw/docs/REPL_COMMANDS.md +0 -121
  183. dw/docs/REPL_WORKER_GUIDE.md +0 -51
  184. dw/media_audio.py +0 -217
  185. dw/media_info.py +0 -256
  186. dw/repl.py +0 -338
  187. dw/repl_commands.py +0 -846
  188. dw/select_validation.py +0 -115
  189. dw/server/ui/assets/index-DqbiZNFq.js +0 -43
  190. dw/teacache.py +0 -381
  191. dw/teacache_models.json +0 -99
  192. dw/workflow_sources.py +0 -307
  193. {diffusers_workflow-0.4.0b7.dist-info → diffusers_workflow-0.6.0.dist-info}/WHEEL +0 -0
  194. {diffusers_workflow-0.4.0b7.dist-info → diffusers_workflow-0.6.0.dist-info}/licenses/LICENSE +0 -0
  195. {diffusers_workflow-0.4.0b7.dist-info → diffusers_workflow-0.6.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffusers-workflow
3
- Version: 0.4.0b7
3
+ Version: 0.6.0
4
4
  Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
5
5
  Author: dkackman
6
6
  License: Apache-2.0
@@ -47,7 +47,10 @@ Requires-Dist: imageio-ffmpeg>=0.6.0
47
47
  Requires-Dist: av>=18.1.0
48
48
  Requires-Dist: soundfile>=0.14.0
49
49
  Requires-Dist: matplotlib>=3.11.1
50
+ Requires-Dist: pyloudnorm>=0.2.0
51
+ Requires-Dist: scipy>=1.18.1
50
52
  Requires-Dist: speechbrain>=1.0.3
53
+ Requires-Dist: demucs>=4.1.0
51
54
  Requires-Dist: qrcode>=8.2
52
55
  Requires-Dist: requests>=2.34.2
53
56
  Requires-Dist: aiohttp>=3.14.3
@@ -56,12 +59,13 @@ Requires-Dist: jsonschema>=4.26.0
56
59
  Requires-Dist: concurrent-log-handler>=0.9.29
57
60
  Requires-Dist: python-dotenv>=1.2.3
58
61
  Requires-Dist: packaging>=26.3
62
+ Requires-Dist: filelock>=3.12
63
+ Requires-Dist: httpx>=0.28.1
59
64
  Provides-Extra: server
60
65
  Requires-Dist: fastapi>=0.141.1; extra == "server"
61
66
  Requires-Dist: uvicorn[standard]>=0.52.4; extra == "server"
62
67
  Provides-Extra: mcp
63
68
  Requires-Dist: mcp>=2.1.1; extra == "mcp"
64
- Requires-Dist: httpx>=0.28.1; extra == "mcp"
65
69
  Provides-Extra: dev
66
70
  Requires-Dist: pytest>=9.1.1; extra == "dev"
67
71
  Requires-Dist: pytest-cov>=7.1.0; extra == "dev"
@@ -73,6 +77,10 @@ Requires-Dist: httpx>=0.28.1; extra == "dev"
73
77
  Requires-Dist: ruff>=0.15.0; extra == "dev"
74
78
  Requires-Dist: build; extra == "dev"
75
79
  Requires-Dist: mcp>=2.1.1; extra == "dev"
80
+ Requires-Dist: pylint>=3.3; extra == "dev"
81
+ Requires-Dist: import-linter>=2.15; extra == "dev"
82
+ Requires-Dist: networkx>=3.0; extra == "dev"
83
+ Requires-Dist: pygount>=3.2; extra == "dev"
76
84
  Dynamic: license-file
77
85
 
78
86
  [![CodeQL](https://github.com/dkackman/diffusers-workflow/actions/workflows/github-code-scanning/codeql/badge.svg)](https://github.com/dkackman/diffusers-workflow/actions/workflows/github-code-scanning/codeql)
@@ -85,7 +93,7 @@ diffusers-workflow wraps the [Hugging Face Diffusers library](https://github.com
85
93
  in an engine that runs image, video and audio generation as jobs, and puts
86
94
  two front ends on it: an **MCP server**, so Claude Code (or any MCP client)
87
95
  can author, run and inspect generations; and a **web UI** for doing the same
88
- by hand. A CLI and REPL sit underneath for when you want neither.
96
+ by hand. A CLI sits underneath for when you want neither.
89
97
 
90
98
  **Python 3.10-3.14 | CUDA (NVIDIA) | MPS (Apple Silicon) | CPU**
91
99
 
@@ -109,8 +117,8 @@ source ./activate
109
117
  .\venv\scripts\activate
110
118
  ```
111
119
 
112
- `python -m dw.test` confirms torch and diffusers import and shows which
113
- accelerator was found.
120
+ `python -m dw.test` runs a small built-in workflow end to end - it downloads
121
+ SD 1.5 (a few GB) and generates one image on whichever accelerator was found.
114
122
 
115
123
  **2. Start the engine.** Leave it running; everything else talks to it.
116
124
 
@@ -160,7 +168,7 @@ once; without it the run fails partway through with a 401/403 from the Hub.
160
168
 
161
169
  ## Drive it from an agent
162
170
 
163
- Then just ask. The agent has 58 tools covering the whole surface — the
171
+ Then just ask. The agent has 59 tools covering the whole surface — the
164
172
  workflow catalog, the real diffusers pipeline signatures, the job queue, the
165
173
  gallery, the model cache:
166
174
 
@@ -199,6 +207,23 @@ and outputs — so two agents, or an agent and you in the browser, share the GPU
199
207
  without saving over each other. An agent calls `use_workspace` once and the
200
208
  rest of the session lands there.
201
209
 
210
+ **Feedback from a session.** At the end of a working session, ask the agent
211
+ what got in its way: bugs, gaps, misleading skill text, tools it reached for
212
+ and couldn't find. Have it file each one as an issue on
213
+ `dkackman/diffusers-workflow` with the `field-report` label, for example:
214
+
215
+ > File each bug or gap you hit as an issue on dkackman/diffusers-workflow
216
+ > with the label `field-report`.
217
+
218
+ The label marks a report as coming from real use, not from the automated test
219
+ loop. The agent loop (see [Agent Loop](docs/AGENT_LOOP.md)) picks the report up
220
+ like any other issue when you filed it yourself; a report filed under any
221
+ other GitHub login is parked for the maintainer to review first (relabelled
222
+ `owner:don` + `status:needs-approval`), since the loop must not act
223
+ unattended on third-party text in a public repo, and is only handed to the
224
+ loop, or not, after that review. The label is also what feature planning
225
+ reads as evidence of demand.
226
+
202
227
  The complete tool reference, client configuration for other MCP hosts, and the
203
228
  troubleshooting table: [MCP Server](docs/MCP.md). Workspaces in depth:
204
229
  [Workspaces](docs/WORKSPACES.md).
@@ -236,16 +261,24 @@ pages and the HTTP API.
236
261
 
237
262
  ## The command line
238
263
 
239
- The engine also runs standalone, with no server involved:
264
+ `dw.run` is a thin client of `dw.serve`: it queues a job over HTTP, prints
265
+ its progress, and reports the run directory the server wrote to - start the
266
+ server first.
240
267
 
241
268
  ```bash
269
+ python -m dw.serve
242
270
  python -m dw.run workflows/templates/text-to-image.json
243
271
  python -m dw.run workflows/templates/text-to-image.json prompt="a cat" num_images_per_prompt=4
244
272
  python -m dw.validate workflows/models/flux-dev.json
245
273
  ```
246
274
 
247
- An interactive REPL (`python -m dw.repl`) keeps models resident between runs
248
- for 2-4x faster iteration. See [REPL Commands](docs/REPL_COMMANDS.md).
275
+ `dw.run` takes `WORKFLOW [name=value ...] [--server URL] [--workspace NAME]
276
+ [--token TOKEN]` - `--server` defaults to `DW_MCP_URL`, else
277
+ `http://127.0.0.1:8765`; `--token` to `DW_API_TOKEN`. Where the output lands,
278
+ which workspace's `prompts:`/`asset:` references resolve, and the output
279
+ layout are all `dw.serve` flags now (`--workspace`, `--output-dir`,
280
+ `--prompt-dir`, `--asset-dir`, `--output-layout` on the server) - `dw.run`
281
+ only says which server and which of its workspaces to run in.
249
282
 
250
283
  ## What's underneath
251
284
 
@@ -264,8 +297,8 @@ file from someone else the way you'd treat a `.py` script — see
264
297
  [Trust model](docs/SECURITY.md#trust-model).
265
298
 
266
299
  Under the hood the engine also handles: quantization (BitsAndBytes, TorchAO,
267
- GGUF, SDNQ, optimum-quanto); inference acceleration (TeaCache,
268
- FirstBlockCache, FasterCache, MagCache, TaylorSeerCache); LoRA and IP-Adapter;
300
+ GGUF, SDNQ, optimum-quanto); inference acceleration
301
+ (FirstBlockCache, FasterCache, MagCache, TaylorSeerCache); LoRA and IP-Adapter;
269
302
  A1111-style prompt weighting; long-video chaining with audio-driven length;
270
303
  step-output caching, so re-running a fixed-seed workflow finishes instantly;
271
304
  and utility tasks for upscaling, face restoration, segmentation, captioning,
@@ -281,7 +314,7 @@ frame interpolation and more.
281
314
  - [Workspaces](docs/WORKSPACES.md) — Where your content lives, run directories, and several workspaces on one server
282
315
  - [Workflow Guide](docs/WORKFLOW_GUIDE.md) — JSON structure, variables, steps, data flow
283
316
  - [Quantization](docs/QUANTIZATION.md) — BitsAndBytes, TorchAO, GGUF, SDNQ
284
- - [Inference Acceleration](docs/ACCELERATION.md) — torch.compile, FirstBlockCache, MagCache, TaylorSeer, TeaCache
317
+ - [Inference Acceleration](docs/ACCELERATION.md) — torch.compile, FirstBlockCache, MagCache, TaylorSeer
285
318
  - [Fast on 24GB](docs/RECIPES_24GB.md) — Recommended speed/memory configurations per model family
286
319
  - [LoRA](docs/LORAS.md) — Loading and stacking LoRA adapters
287
320
  - [IP-Adapter](docs/IP_ADAPTER.md) — Image-prompt conditioning
@@ -291,8 +324,7 @@ frame interpolation and more.
291
324
 
292
325
  ### Reference
293
326
 
294
- - [REPL Commands](docs/REPL_COMMANDS.md) — Interactive REPL command reference
295
- - [Worker Guide](docs/REPL_WORKER_GUIDE.md) — GPU persistence and troubleshooting
327
+ - [Worker Guide](docs/WORKER_GUIDE.md) — GPU persistence and troubleshooting
296
328
  - [Dependencies](docs/DEPENDENCIES.md) — Installation details
297
329
  - [Security](docs/SECURITY.md) — Security model
298
330
  - [Testing](docs/TESTING.md) — Running the test suite
@@ -0,0 +1,296 @@
1
+ diffusers_workflow-0.6.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
2
+ dw/__init__.py,sha256=1x8tC7Gv4U22ocQfmnUb52W4VE__4zCu1wkDK1AMZd4,18760
3
+ dw/adapter_compatibility.py,sha256=ab50LoSfmXyDTAG4yeUthrNgCSkKDbqu8wLSCwymPpo,11383
4
+ dw/argument_media.py,sha256=BhWLeRn09X6lJMNBI8m6Ht6iqbzepxuYrcFY1s5eobg,12872
5
+ dw/argument_warnings.py,sha256=Kwy-gicCXOnsAEs_08p7X7g-HEjfzukVkP6qQFRHSak,10457
6
+ dw/arguments.py,sha256=4A8GAVR2fIO35J-YYU3i4r73Zfwn2x4EX_tkMhuLDzU,39178
7
+ dw/assessment_rules.py,sha256=MHfE1hYIYw3aeFoZvmLtFIKxYZD0MxHWxZZVrOtOEVk,7246
8
+ dw/assets.py,sha256=apgFNRDIkzDD7xktpFuJtRLfQF96V-swpCZBSeFJTHk,5303
9
+ dw/audio_qc.py,sha256=9HTb3s8tH0sC7mVRQDqfC70w80m8bNEcgti-TeSVQCs,19113
10
+ dw/cache_blocks.json,sha256=m7mJV7Pwv5LnwzW-2Daa71W3yKh6x7VdxFS7ShEiUG4,1633
11
+ dw/cache_blocks.py,sha256=A_S9pID6jqgheRg2DFFmIPLiS7XJUNT44eXk3W01SSg,5719
12
+ dw/content_types.py,sha256=lKEa-51I0rosYAlvrf49_WXHc_WQCWXVo0TuO1IkJ7s,7756
13
+ dw/dissolve_frame_errors.py,sha256=WrWxAkMAkNXtoeVXJPB9vaxzblAtUMvDSZXfipGr-zU,5071
14
+ dw/download_watch.py,sha256=x0RGfJy7t_ZQJ4FD3GcGcdJd-bjmllLLVCXKYhFE9JI,12656
15
+ dw/dsp.py,sha256=asxFCk2zFyO0qRnxMtY4rCZyfx3OELE_lk0J1X4iHH8,25268
16
+ dw/elision.py,sha256=3TqXusHEG3Y_OR0_MNgxv8Q3CscyhuUZg70cXTd_ReQ,13204
17
+ dw/events.py,sha256=isoEkfrKktNkZFFbe2wgtzQr2ITutJSOsFh8VtZdumk,12242
18
+ dw/for_each.py,sha256=ZRnAESDpCCHq811yrkvDki1GaZavd6FtjX4A_d-yUEQ,16442
19
+ dw/host_memory.py,sha256=Gfr-nwgMCSieZExLAhwX3iX78aswrw8h1VqQjJy6qGE,9723
20
+ dw/host_memory_projection.py,sha256=kGQ7hpmR_jsT66mWypmpZs0NYjQwZ8gVQIqI9Id3pEQ,10320
21
+ dw/hub_cache.py,sha256=PUxpajmh8WQActZT_jv7YEHHCMNhuEejlzBJOyisvIY,15627
22
+ dw/introspection.py,sha256=b9SuwVcz30MKoWat7lwOHPjSErnrrOoHMFp_sePQHo4,29804
23
+ dw/kernel_availability.py,sha256=LGsG9TSeHB9VEixiAmRSqowE6zWQ5lUCctQUY9w6kKw,8517
24
+ dw/library.py,sha256=b_Z64fKE-cIaEoD0d49GBKWiz8PrA0PDoVtI8rMogs8,31052
25
+ dw/locations.py,sha256=hH8MSHm6FUicQ2wpEIciB_bTOr5mgcIfRA6JC-xPyGw,27949
26
+ dw/log_setup.py,sha256=ATwSO0CCDtgEA-VoPsS8HVeuDwL2jBg--4QXSZwecQs,1478
27
+ dw/media.py,sha256=HR3wMloU7AWnQeomGYCutnETE6Jek-DQ4kDW1jxDIMQ,38217
28
+ dw/media_frames.py,sha256=2WLLU4Z1NgN4rTxSVDHDs5VZVQqbHXMtOz-ekvonoAA,12789
29
+ dw/media_types.py,sha256=to2bGLpfF__EJnXxis-t0SHlzgx_WzlK6t0roqLf24g,8045
30
+ dw/output_extraction.py,sha256=Q4OB2Lnz8yF9sK6H2svBDNuf4G8shEuQRExEaVieUXU,9610
31
+ dw/pipeline_ownership.py,sha256=sY90vQVLBXzAeyR6jVygGm4i_FqfSeGp7up_0SvNSYE,12944
32
+ dw/plan.py,sha256=Xq4M2APBV4Z5JBUSNzo744vp4cOTL0NOgP4mvaqF0FI,39109
33
+ dw/previous_results.py,sha256=PiTZkdgvOFypmIX99amG587aBPv_IWjQnsjROMAE4FQ,16101
34
+ dw/probe_paths.py,sha256=soeyFs2CdlwujRJle7Dl1ZJJNu3uvnTkjyDgKyid2Ds,2734
35
+ dw/prompt_schema.json,sha256=5e7NWgce28cf-YWEWwyDjQQ90ki0BcI4tczTyr_d8lQ,1934
36
+ dw/prompt_weighting.py,sha256=ttA_EUnkqmvHujRxP5Dgfm4hsemupQaNDiidpxsvMgc,13063
37
+ dw/prompts.py,sha256=tG11KOHFsOmxRqDViWEHqf5rp0lp9eSkPgrv6yz4zaU,6095
38
+ dw/realize.py,sha256=Bj3sE9yvk9ZwmzWQ9gqaIk7pCJvNpBOpZ1aDygZPNgM,10852
39
+ dw/reference_limits.py,sha256=99AGXf6epc_h5YPn9HXb19yObefgac2nsIlrkiix9xs,8174
40
+ dw/reference_names.py,sha256=ieix79kQQIWUN0t0dML8Ac7u29iyqgvJxst5JF_mF7Y,4515
41
+ dw/references.py,sha256=2dLiw4FBKkT38fw6OLCom2nMqQqmU_OwIn-hQW2Q2Os,5453
42
+ dw/result.py,sha256=-Xn3KMXJaOq6wOo0rMQY9HeBX6hltKhe5BUSQThCArU,37301
43
+ dw/run.py,sha256=dqTIkt1seh2Fs7yNZLUdg6aZHZCdErBaXxXE-gz0GrY,9304
44
+ dw/runs.py,sha256=dP2ifw42SIY0xBFHVzZ-VXm6E4H4LAjTblYbkV9_z8E,36431
45
+ dw/scalar_result_validation.py,sha256=vu-2dAIuipCpA2ajUs1hoM-j2Blc1IGCGnzQwCg3TGM,5612
46
+ dw/schema.py,sha256=QDMwcONbaGQqcaHNp9_gYXKPIRqm6qBGfdLHFDOijbM,10473
47
+ dw/security.py,sha256=gV1VfAMjH0sKDcD99nTqxxItCjlrK2RHa26yuVyFyYs,26099
48
+ dw/serve.py,sha256=IrTu9I0OP_JrvogBaKarR__q4jC4B7O96sxKjknjriU,12664
49
+ dw/settings.py,sha256=UPdnrZ9gw6tDktnf5rC7nw--MrDAdVwvSoe6EN0cJP8,3402
50
+ dw/shot_span_preflight.py,sha256=z20FExMyym1W2faT4g_A4yF3ymMJXgJy05-vTy12BDY,4707
51
+ dw/shots.py,sha256=yUUQu82y79Zyfoi8uAo-jLwHPun7ljpui7GJlDhyH7g,18221
52
+ dw/slice_preflight.py,sha256=2IbLQ3_tu-6pkd2pXlImTDlUAnKLpPXYysTNN3eU4hE,7752
53
+ dw/step.py,sha256=0nGm4ZQOTfMLoTHSdrp80VhkEXo-O9BBNKhvI1nSsHc,9329
54
+ dw/step_cache.py,sha256=zHybH_N8ZtzTA4c1vCSfTkFePVnirsvyLHoZHpbt5ns,27627
55
+ dw/step_value_checks.py,sha256=CTBhU6tw16nZWSKS6CeA7s_9BRbN45iIxfVDx8O74Qw,12815
56
+ dw/subfolders.py,sha256=PcBsNEm0hxO8SkHBunZ0ktqP6U3ZIqeE5Io35bGdVwA,3889
57
+ dw/task_domains.py,sha256=tui7IDS-JsnJel0NVopc4f_TlECXMq32oG61ZZGxtY4,18525
58
+ dw/test.py,sha256=P6JkCw1OjVh-xY_kS-STGlkEHpN9riToXV7A20WX5MA,582
59
+ dw/trust.py,sha256=YN_CFso36OK5PTjI663r9QPThzGsVT5j5VWwKNjdD-o,11778
60
+ dw/type_helpers.py,sha256=LlSi34q5k-Nrr3o7y65qWrNkHNikCKIRc42XfDr5yj4,9683
61
+ dw/type_references.py,sha256=tkbhLRrZIa3R8wRDfZib5ANDfpAVobpTzqqP2IDwbQQ,10906
62
+ dw/validate.py,sha256=qZO_j0Uah8CXNdO5BjTii6am3LbMn1hlgPACivm1Sz8,2223
63
+ dw/validation.py,sha256=tM91o8v-zW12QEyvIq1Tm9um0LB9t6hJWMe1_dXBns0,33542
64
+ dw/variable_constraints.py,sha256=4MEjOWU6n4T7nSa7YWUj8t5pPScevGrb8lwP8KvS1Mg,18968
65
+ dw/variables.py,sha256=IS9ToCUx1rIGjIEXkbsQoxhP1DdI51EIk7H1obX733I,19937
66
+ dw/video_extensions.py,sha256=GKCIPnWJu1fp8QcVAtFUudQwTlNbKLbBJ67BJ85_6V0,5550
67
+ dw/video_size_errors.py,sha256=i-L3UDNRao_iRE8KNaEVDLu_16J37xJn7IYWYZ9em9Y,4861
68
+ dw/vram_estimate.py,sha256=b-GbHUru533CMnP7Lb8A_MUS5P2Ghi8CFbcUmDvo1hQ,17027
69
+ dw/vram_inheritance.py,sha256=BDgJlLhgnoOUnbhcjcQLiTlrHmFS4aZ53m9IeJ5WitQ,6518
70
+ dw/worker.py,sha256=foHytouEriqhX9jjPBk6-4J8ebLO4sc8G_PZRKdVG_0,33758
71
+ dw/worker_manager.py,sha256=stggctseAljNQa3c-ts8Ah5gvWAmyZyBxaSlrnmhjN8,7858
72
+ dw/worker_protocol.py,sha256=Y9SQJRpE1xZI2a3D0cFx_qqxKN2zRZauOHGCnjcKqhg,6141
73
+ dw/workflow.py,sha256=H77WtfGsxS2ra4NsEKdjEKiOdkVMS-oZsxjYeaRZ4FM,47731
74
+ dw/workflow_run.py,sha256=uH8gfru2MLSqnlcZnNY6coVGry2jzaWwqQi6Rs2jjHQ,40777
75
+ dw/workflow_schema.json,sha256=hGp0bpV3JKUSKFXWNyXJe60-iGMMsj2IccXD22TE2LY,69298
76
+ dw/workspace.py,sha256=6X9bQdJ6fxt7lpAD9Ed2N69hK4EI27dxSZppR6cr8uY,25674
77
+ dw/writers.py,sha256=1ajMnU9mMvx4X62-Us4nODBeP-tk3_IkUoJYoRe2htY,14633
78
+ dw/community_pipelines/pipeline_flux_rf_inversion.py,sha256=XjLO58h5wQn16qP8wEIZKg2Y46mxzQ8qkUu29iQnrrA,50587
79
+ dw/docs/ACCELERATION.md,sha256=dLJjJody8rRxPNhyJ0PdPZ29kp-nvtscHHvhAZsGOBY,17258
80
+ dw/docs/AGENT_LOOP.md,sha256=rMb_c_r2ucsB7djwtQdp9_VVRagvhevWo-Iep7emmS8,4729
81
+ dw/docs/DEPENDENCIES.md,sha256=avxinFm52qDToYi2_C0M39OTXNo1ERqxZj6t_0HIUjE,4142
82
+ dw/docs/IP_ADAPTER.md,sha256=AAHaUIfbnOojHfT0noIeypbhdYPluR7sbZeVn5FpbjU,3730
83
+ dw/docs/LORAS.md,sha256=iyvoRmFJ94cdxYPMp6_jdIRRjCVpnfN2jwr2iQJPq6c,3605
84
+ dw/docs/MCP.md,sha256=5tQ62lA1RjfJ5a68Z2DshTUofXLsejo20etr98DZ6Yk,54875
85
+ dw/docs/PROMPT_WEIGHTING.md,sha256=Pvr25d3yvS8SlnYwX9qc61VvTa8yFMxK_1zMLvrEigI,3031
86
+ dw/docs/QUANTIZATION.md,sha256=NZCL-09bDM-JhzV1WqK2JGkL1la8VoH9fie1X39arsE,7678
87
+ dw/docs/RECIPES_24GB.md,sha256=j7CCtMCNg830o6xD7C1DPz7dXRHvBQkbJaViRnH8AR4,16035
88
+ dw/docs/RELEASING.md,sha256=1FpsV_qZUgCMr1SZFN02Yy8gaeUp0r_QWFiHt48q09Y,28200
89
+ dw/docs/REMOTE.md,sha256=1TVGxTbLjIg5RpkoxpASSncZW_E7_llDu6zPLarkDbg,6389
90
+ dw/docs/SECURITY.md,sha256=iaa8k_iQ-_fdS2ErguhHuU2fCPlOQ2UsweSV6DbK0iA,17728
91
+ dw/docs/SECURITY_QUICKREF.md,sha256=-xZNIV6j1oWcoy5B-oHKqh3ko2zJgB2fuNMiDV4f1zY,3537
92
+ dw/docs/SERVER.md,sha256=HJOXiRsxpvwzYhxYDmL-PZjTllwjjbI8rfSAGQEE-3s,49903
93
+ dw/docs/TASKS.md,sha256=7oMxuz6xLzwTfKn0nsD0uJoxUsUMctFNb84RSS5n0g4,108352
94
+ dw/docs/TESTING.md,sha256=D4zmQp0iVmREM9J1tq4RxTmmIxvxsp5dRtuRGovP96s,3973
95
+ dw/docs/WORKER_GUIDE.md,sha256=FqzXVuH91XtonpBeXj_7WhMVz5JiB4Rqu2lnGBHchE4,2065
96
+ dw/docs/WORKFLOW_GUIDE.md,sha256=vkgsB0j5RzDyWSPu3PJEvLvXmp-3mmDqWY9mZypMWU4,108940
97
+ dw/docs/WORKSPACES.md,sha256=vLzMxioNHkqexKj_41OPTrN84N6A1s6p6gR9gCcaY9k,16181
98
+ dw/pipeline_processors/adapters.py,sha256=HIDYa20vWTuD4XK8q4rntr9zZAHgbxkIPPQqeUVa0oQ,6638
99
+ dw/pipeline_processors/chain.py,sha256=73MovwXQjwcDg3KQ6Fwpnk9tk5YMN_JhwQsMsuHVCF0,31565
100
+ dw/pipeline_processors/components.py,sha256=6pwfAbzzWAlGMloVmYSDbeF5IeYQxSte-4G4mSs0uDs,35489
101
+ dw/pipeline_processors/config_objects.py,sha256=nQYKx00544UzJFlEZ-th45b-8sav1hz3tKJaaBDNJns,10911
102
+ dw/pipeline_processors/pipeline.py,sha256=yX7NiiSc2Av5-9AyYnhKs-Rs6XKEf-0r4ddNdanMiBs,37430
103
+ dw/pipeline_processors/placement.py,sha256=0_ZJogjtepZzSm_dxNcW-8oyId5DCUNNuvPpSpbHEhc,15900
104
+ dw/pipeline_processors/progress.py,sha256=uSKPsMug1AZqDoaFXsF5sRcJNiNLzbBuX3C3H3xVzms,9196
105
+ dw/pipeline_processors/remote.py,sha256=gvq6oOUASxx3WlEKRPSKMR72F7jeZrPii_tA15xdits,1651
106
+ dw/server/__init__.py,sha256=NGXV8LM6oYUZhEwWSDo3ihBvmzrC71az3Wc2gkGodcM,153
107
+ dw/server/admission.py,sha256=rZmFWiBfz7tId9LQn_zN7CYEUCc2t0OAhuKPwhhM6ss,18029
108
+ dw/server/app.py,sha256=PQejjfF5d0Dr3Ousne5-8XZqePGBufpCRqL-E19Tkvg,9352
109
+ dw/server/assess.py,sha256=2mPf68FTgkCkxeFqNd6WMrhAQhBeDSCaZyJglqKkLwg,4757
110
+ dw/server/catalog.py,sha256=_8B-DpTcRZH5tM6galIkB0a3nDHGJazwdFZN6oTcJxQ,18016
111
+ dw/server/catalog_shape.py,sha256=CCfjpLgHpALB9DMir_4KmT3AMvh2XUkecllxZvIFqe4,17929
112
+ dw/server/deps.py,sha256=BChMhuVcPl0HpZawho_KxwlgjyPHlZPi3pYxPaZ_WtM,7447
113
+ dw/server/enhancers.py,sha256=ltw3WJ1__S67STescHGHPEUXGvADHo3Y9k4KGyAarDE,4636
114
+ dw/server/exports.py,sha256=5IE0GEqJdBvwVVkO_EkFp1C62WxABxjuVZVInwFNJro,16405
115
+ dw/server/guides.py,sha256=FhgNGR1Jkr4vwTXSCu-1Dt26Kiw4NzyndZnQ06jsUOc,11986
116
+ dw/server/http_security.py,sha256=_WptoXRHBXEeyugBoy9sw-r4DHYIWfm-Z3l7GSf_bd8,8827
117
+ dw/server/job_history.py,sha256=Gl5mE644vnlO0jFuoO5xjSY26FoMm5-iyV6trFXtKEU,19929
118
+ dw/server/job_record.py,sha256=WKyjvSSkl8H1L1IT_0T-XwwuFsDeODOvqovtFwwXCDg,12821
119
+ dw/server/jobs.py,sha256=FcI56Sng-cy_Xjexisug5-Fxgj2S2esKVlt76tjUkgI,38978
120
+ dw/server/mcp_mount.py,sha256=XIjfqBzELFKesfHVmdFj69RHSTzr7aF4Ph1Bfz4oPeE,3620
121
+ dw/server/netinfo.py,sha256=_oo0NfnesQR0n8MlxGt15tTgLutaqNOYyYYuUIBdRB0,4941
122
+ dw/server/observed_cost.py,sha256=Tq4aepqZoAl_tmVVLVI2NY63_FkPMEdPZ3fL7MfLUQQ,15970
123
+ dw/server/outputs.py,sha256=AHQ0XROZbiXJi8Ecd4vt_DG_cWtsrpGrHz6hXwL-cRY,16908
124
+ dw/server/sysinfo.py,sha256=WiQeSpMNiIDOadcpYiyYTQSPQgPZc7qPvLSXx2WQHLA,2221
125
+ dw/server/updater.py,sha256=RYFcjd-oFcZxGC20veMPXpazRdN2JLRRsFAL6ON54d8,7191
126
+ dw/server/routes/__init__.py,sha256=okLA6aqxG3a-4oqtQoyuCE13uCZpy86kvADLv6RIY8U,1918
127
+ dw/server/routes/assets.py,sha256=1ojtAFvH4ijIWhW6aHN_7AW_FofouV9E-cedjPFc-7Y,17115
128
+ dw/server/routes/files.py,sha256=lcRB3QnqzVpFZvtLIUvv8BienYO1QnkFG2kzCVvZwLA,7128
129
+ dw/server/routes/gallery.py,sha256=D5hYSetsf7jYWe3zu_MUxkacLcVHr3O3aqqX5lNNSA4,15667
130
+ dw/server/routes/jobs.py,sha256=y0HUIOeAl2s1FFW8XDerhtDGbjy3bXf93JoMtFoSCUU,31582
131
+ dw/server/routes/library.py,sha256=Un6QKrHxnw4D-JtjW6QuhuwAK248-S9M7p-CQOosYDs,26729
132
+ dw/server/routes/media.py,sha256=GE0R2iqQ6lkSpWc1ika-lcIMfxT7KAo4XS4IKTjKrXU,22763
133
+ dw/server/routes/system.py,sha256=wp1DbpM7UBWfOtn6IK9oOHNA9e4QPfT0_jdMa1q-DNs,15655
134
+ dw/server/ui/index.html,sha256=MgvPd3vi3G4G42tfMJ4F8-aPa_kFbk0EAO5EHFB23Ks,826
135
+ dw/server/ui/assets/abap-08VXUWAP.js,sha256=v_s2iGszAEBUjgmnxo-oLx1BQTQAjswxiNzZ24fNZ3o,11690
136
+ dw/server/ui/assets/apex-BWPQTe0t.js,sha256=eUu2JicJ0pjmMYETgWVVuzFEJeyxEfievljL436Mt3Q,3469
137
+ dw/server/ui/assets/azcli-Bc_sGQ0U.js,sha256=LDRk2Ih2wJsTBkEl5yiESmbLMeMCGuNGu5aDZxaZzRA,707
138
+ dw/server/ui/assets/bat-i0X4ZdIN.js,sha256=HG8UIIyIPHkvLPfYHvwzPwmHwXBihFrl_AN34FfROP4,1696
139
+ dw/server/ui/assets/bicep-B5-_aFwp.js,sha256=LqSc3IjZ0R63GmMgaRbIxZGI9FM-IE7w_XAFzsEJgH0,2367
140
+ dw/server/ui/assets/cameligo-DMUM7wLl.js,sha256=-M-KapRTtKxkgsMtOTYOpIRACqGYx4Ou2kz89Yztc1A,1975
141
+ dw/server/ui/assets/clojure-Cm7r79vr.js,sha256=vFwfRrDOh4XHjcUSBrtsq7LEnk9gOAIHtSL9dMEvK0U,8211
142
+ dw/server/ui/assets/codicon-Brq4_Ui5.ttf,sha256=zCRy4jnhcGLndgr4f49Zl3IMwNlKoBSmFcQYuq9jM6g,140956
143
+ dw/server/ui/assets/coffee-Ba7i2nA0.js,sha256=5WkJBbYWZZuIZ5VST0NJs34Zr1rnJRmwY4TcT7Y0CaE,3364
144
+ dw/server/ui/assets/cpp-C7h46wYY.js,sha256=DxbP-fd4CvkTNwF_a-Jr1IcaUAXmwErbbQEEfiRkN_U,4743
145
+ dw/server/ui/assets/csharp-BKxtCVv1.js,sha256=tcK0xVr_gQziNy8CVDw-kMQEwehIe9ND34jF0kt8c34,4117
146
+ dw/server/ui/assets/csp-bTuwJoIa.js,sha256=pUYDwODPsXKr4shrxhfRg0_WRY3TLT8f5omX7nYPw7Y,1278
147
+ dw/server/ui/assets/css-DIMkf-bt.js,sha256=Nhs17Txzlhf5DumZtrz-bnBHwdMMUt9YQBxQSG9f2OQ,4361
148
+ dw/server/ui/assets/css.worker-B3ciXF_0.js,sha256=jLdCIshnrz3ctEpiWtKJNf9w21WMelZDM8zmm0iefQQ,1074885
149
+ dw/server/ui/assets/cssMode-CjZLP_Pe.js,sha256=iv3EwQrcRSvsajoLPoU8IkeESFzbvb4glHlb_DZir0c,2952
150
+ dw/server/ui/assets/cypher-CVaqCwHa.js,sha256=AYGtVhyMHJdRbOwpGLEfAPAyHAdwXc3J0D_mjN4oLVg,3048
151
+ dw/server/ui/assets/dart-onAF5SnQ.js,sha256=QWSf47NMFu2yUd9XFSGEuisDrfcp-gvscx9WznuMY2w,3931
152
+ dw/server/ui/assets/dockerfile-DZFCIeNp.js,sha256=hIFKl4QSK6zsn49CP3KacmKpiovwWnTZleepql5VAHo,1728
153
+ dw/server/ui/assets/ecl-D05T4iGw.js,sha256=8dy8B-9clhaDibzPszzXjx7c9Zj0t2pUw19rgIOlAkM,4623
154
+ dw/server/ui/assets/editor-jjEx9u7D.css,sha256=_dx8DZIGYqrSRp3hzX8InPqLbXi0KhgcLcmjFs4irOk,79503
155
+ dw/server/ui/assets/editor.api-DXlBngV6.js,sha256=GKGdnaUyJm4lUhwsewb8p0T0lfnxlhCs6aVQ8qN9Tdg,2654127
156
+ dw/server/ui/assets/editor.worker-q-txB4vs.js,sha256=--zE19Q9FbnLa1zNtUTy3y5oghXcyHADfB2cwmvmifo,300378
157
+ dw/server/ui/assets/elixir-6RTg0lbw.js,sha256=_AM20WhJvweAHmfSKZJwEaIeLg71t8jkSUJgRVz5P0w,10116
158
+ dw/server/ui/assets/flow9-C5_-GSwl.js,sha256=kUYiOodGRTZ6qJ5xielY8Ku5yBXlsEOb9kxSY4Fajb0,1669
159
+ dw/server/ui/assets/freemarker2-CtKALOjK.js,sha256=o-BbmDzcVvd50oa_E8_61FD88CPLczHZX9ZkIzZIAmM,15548
160
+ dw/server/ui/assets/fsharp-C8Ef5oNN.js,sha256=UTeoJ7rvyxEcL_h0e74Hkkyfnqjz1KegentufCX2nkU,2651
161
+ dw/server/ui/assets/go-C-y9NEjX.js,sha256=yiNuAvOl-CJdg1l7tlsDbqjKrl95VJ6jchO7KXm8sIU,2350
162
+ dw/server/ui/assets/graphql-fmXr3nnJ.js,sha256=pm47jqz4rUAXQDgl98x5ePvvxf0fgOpsBE-AWYSMUYY,2119
163
+ dw/server/ui/assets/handlebars-teGPbQUB.js,sha256=5HwjFnOrbzgxCzDfoXfAukd7XKu_W_4jYSB_JqQh5Gs,6284
164
+ dw/server/ui/assets/hcl-CpzslTdj.js,sha256=FTELtvUdJnCIa6x3jYwjNRaXvSqDk7_x4SlTYehMmdI,3449
165
+ dw/server/ui/assets/html-DfSymt9C.js,sha256=72ZudFs_YwkZzl15Q8-lxMx8pZpTmNHwT28gUieb7hc,4516
166
+ dw/server/ui/assets/html.worker-C93Ht9o9.js,sha256=8peg8haNK5qh51eN0fJ5PyFESQPNNUoyaGlSzaIa7l4,739943
167
+ dw/server/ui/assets/htmlMode-Cr3jQp_U.js,sha256=n8zfy3-Dvihja34PsAfjNIbniaq0QY8OHcuGHg3iJ94,3406
168
+ dw/server/ui/assets/index-3Vw6WAPW.css,sha256=pbXkt_MDKZH1CVgAn-RbKW4Oxxcb9uJskXQxmFn0gRU,73445
169
+ dw/server/ui/assets/index-J5rsq_M9.js,sha256=8kNg0DkGzVPymttII97KsTgwSKr4W4foDof14hxt_yM,319961
170
+ dw/server/ui/assets/ini-sBoK_t0W.js,sha256=6QF6Fp68pxwu26PuYuAa5XlpwDMMopXB8gHj4XgppU4,960
171
+ dw/server/ui/assets/java-BEtHBSE6.js,sha256=d9OpHur1TgBPjsMh5iCK_s6-JDUjIUa0H2gTU3OACVM,2906
172
+ dw/server/ui/assets/javascript-BeSdrNYj.js,sha256=HFE66aKKSTUv0Cks_cHryyTsbdX2_4ko6o4LFmqZh5M,688
173
+ dw/server/ui/assets/json.worker-B2V3pomh.js,sha256=4L2BlNu1xxbbzYuRRF1xDkui9bTCbXusXbJlZ5XonDc,429596
174
+ dw/server/ui/assets/jsonMode-DJLaxAu8.js,sha256=JacLaAvekr3mG742KkeocTQFCcx6j63b7B6YnMG8Sdc,12181
175
+ dw/server/ui/assets/julia-Bri6UV-V.js,sha256=GgHfKwkibx83YYASauJxey9COaeCnDC0-FO9DI5h1ww,6505
176
+ dw/server/ui/assets/kotlin-BOotOW0E.js,sha256=y9kKjKTUCkkgIf0XZrn0aW0M28yZaabvrArNjMhi9kM,3041
177
+ dw/server/ui/assets/less-B9JPFI3C.js,sha256=RK-lDgNqYLUdnolGcFtj5W5Nhdj2rhAQjegLMStkLbw,3749
178
+ dw/server/ui/assets/lexon-CfSJPG6W.js,sha256=3wceYal1Tl_3oIKlurT29e46CCwlH0DYXRxHyki6aAc,2288
179
+ dw/server/ui/assets/liquid-D5XtXQ2P.js,sha256=ocyGMEfBtZOG46vqwrxf4JVBRf8cRBoNa_Nxz0h7Cdo,3344
180
+ dw/server/ui/assets/lspLanguageFeatures-BJkK4mNN.js,sha256=GTabZAeqJDMHQFhO0CBLP86wi8cnNbI0aMqD1Y6nK2Q,28232
181
+ dw/server/ui/assets/lua-CsQS60Ue.js,sha256=T68zBfv8YbWQOUMOoKDHlS6ZLXQbvUoVzIqjfdKaN80,1982
182
+ dw/server/ui/assets/m3-D-oSqn_W.js,sha256=wiQpsc-ejuU-Nd_N1EEku70GvFxCKR2enx_4FMaLERU,2520
183
+ dw/server/ui/assets/markdown-Cimd5fb3.js,sha256=Yh5RI0xP6paio6bg3VkVHxwCFtfLSpYzYe4pqjAseXc,3639
184
+ dw/server/ui/assets/mdx-CIThOdKr.js,sha256=FvAIojc4nMgsE0msxoGKTrpAvEkSqlGEBMyW3khsCWo,4319
185
+ dw/server/ui/assets/mips-CIPQ_RoX.js,sha256=Mf9nhH4UiNv4cOxx9GbzZEwcanALyeX1nqZyeDVwn-8,2325
186
+ dw/server/ui/assets/monaco--ixms01u.css,sha256=kpYA88tuYJq8DuCa0gtgkNNGbd7cIKcfHgzkZ6FFLYQ,82320
187
+ dw/server/ui/assets/monaco-CYXGxb41.js,sha256=Rc8N0Ffhtg11PXlKYfmxCY9hNyibS-JlZvbcT_r74pw,1268717
188
+ dw/server/ui/assets/msdax-DauUninz.js,sha256=x-Ec1FvZQfNyIBufG3aF-nbhjtWWCb4trNEl2w7mORU,4270
189
+ dw/server/ui/assets/mysql-SOo6toE5.js,sha256=s0175vipA9oId7yWxl-u4jDQp6cAD1LlzIlQ94knUzE,9659
190
+ dw/server/ui/assets/objective-c-FvmIjYaQ.js,sha256=-06rJpDcN7p7YZ4HQ2hFDtAr48MLT-x4ITThLRR0pXM,2102
191
+ dw/server/ui/assets/pascal-DrH0SRf2.js,sha256=LzNJid31rToM1VfXEWLr-e6treFSYIPRs1eX8Qab87w,2639
192
+ dw/server/ui/assets/pascaligo-D-ptJ9y-.js,sha256=Ikz9BypZ4_9F83rc7IW1RIWLR-kLBhf1T-Pmq03oMq0,1859
193
+ dw/server/ui/assets/perl-oz_6vUea.js,sha256=xYDyXpfeizuwlkmJGVWKqlXg_Sdk1AjLc8ZuNwLMIkA,7352
194
+ dw/server/ui/assets/pgsql-DTj74zXo.js,sha256=2nMfJSoshlHJK7ELIrd6adZyNq7xrVi-2BGSEuSqagc,11913
195
+ dw/server/ui/assets/php-nr791fC2.js,sha256=pZLAtd7U2BNsHEXB_pHj0amroQ-6nNaQ3tvdV1yWDJc,7743
196
+ dw/server/ui/assets/pla-CopQ2nXW.js,sha256=F6qe-TaioEm-K31krqMkhvlhwe23zxxcJw8mEvL-9-8,1542
197
+ dw/server/ui/assets/postiats-43DmfD33.js,sha256=3l9CfSZ5CJOyFcupz4PHjdRAHRGY1v5sRnaRsSOWBYA,7364
198
+ dw/server/ui/assets/powerquery-D3hlyOfw.js,sha256=h7-yZyeDYpf8Vz7I-o-AdOXL673EDoRNelYwb-oAYnM,15343
199
+ dw/server/ui/assets/powershell-DmHpPYUd.js,sha256=fS-k4myYtbJ7I-nT4AOE2xWBU6BC4yBTsO8utRI2kYA,3057
200
+ dw/server/ui/assets/protobuf-C531GsRP.js,sha256=CE2QZMYH5tuK5qacJhFCN5Egq0ldACCn8ZMy7drCA_A,8897
201
+ dw/server/ui/assets/pug-Z5eAx3Zn.js,sha256=3W_Q5pw42PShvXTeZmdid5YpzS29ZEKItG3NbMZkZIY,4468
202
+ dw/server/ui/assets/python-BlzkzsC6.js,sha256=kL8Gdt7dXeN_CnZ010t0m0sXZwBgBtX-Alsd6ZaAyJU,3455
203
+ dw/server/ui/assets/qsharp-DkqhCAOL.js,sha256=72cTeKiuU6qRxzI9j4KVb-r2y5u7Yj9O-DppqJMrsw8,2722
204
+ dw/server/ui/assets/r-BwWrilGY.js,sha256=kjvwR-197La6WrPfRntvc5VS4GcVs7SVUIcq5brgDh4,2836
205
+ dw/server/ui/assets/razor-DeSKNqSl.js,sha256=Onhe8uigEAeVWabJ3HN1zgQYHqcFhKR38haf8J9RRsM,8113
206
+ dw/server/ui/assets/redis-ClamHrr6.js,sha256=P6KIG5bJRWvmyPzG14QO5RZJlmj49pzn-p4hDqSFQ5M,3032
207
+ dw/server/ui/assets/redshift-DT7zqm-g.js,sha256=PmLS8mPeeCIWu-NLw1SMU7nZp94WvW7aqKAG7TbJv3c,10331
208
+ dw/server/ui/assets/restructuredtext-BYgofb2h.js,sha256=UmiK7-mgglvXYqrOt4NCdx4oKNNoHilj1XfmVkRw7mA,3744
209
+ dw/server/ui/assets/ruby-DezsRK8O.js,sha256=chu7lEMIyOM4jvdJMPC14ZK5hyDxiJ9LMkoDPvCUoTA,8217
210
+ dw/server/ui/assets/rust-DdL9SqIa.js,sha256=MGorZkVQQnUKZl9zKaHF_rSjO0CN7A5UgCdV2uKWO4c,3661
211
+ dw/server/ui/assets/sb-CcwsVR0C.js,sha256=xAeclcpUX8AxEBGA28XlKeGIx_qhiBu_GL-HAbLS62c,1688
212
+ dw/server/ui/assets/scala-DHpiXF5c.js,sha256=yCwJbNFp3S5yBZLHcjaQw8dKJU-mSBfPAOlo3VyYMUo,7112
213
+ dw/server/ui/assets/scheme-BeGwcela.js,sha256=z8ItryrQzXFnc6PKH1pmoR4HupGMhgqjKcHpQNhwxK4,1626
214
+ dw/server/ui/assets/scss-gp-XZpBa.js,sha256=cRCostxVBB9GGZjPebFuLyXZeTsHFVRGy_yXtF-LjP0,6260
215
+ dw/server/ui/assets/shell-CC2rA5mh.js,sha256=k4DfJFQbqxqasJmdCMVC5tY5Bc_YEWphV55ols_tujw,2811
216
+ dw/server/ui/assets/solidity-BEEn4gHE.js,sha256=agaUW3oE0y6Sn8X4bNEJf8Kd-k_O4kozC0wOc7pD3fU,15992
217
+ dw/server/ui/assets/sophia-CRfGWb83.js,sha256=X1l2ec73453Mhohq6rpNx6pqHsuKvt3iyt4YVopwxjE,2481
218
+ dw/server/ui/assets/sparql-D_Lu-MrJ.js,sha256=3JeFBtGke-BBiCzU5nM83Diwu1ec1I-_7dRPEK1s2E8,2217
219
+ dw/server/ui/assets/sql-NEE52Syq.js,sha256=-k_pzP-IgukwKKn6aWGxpIW460gIgPpID99AV7DefNA,8840
220
+ dw/server/ui/assets/st-DbInun42.js,sha256=4uqmIq2AV5bOzp6YMrW7nKOYreDQNxtpNjOZB3jOX_4,6946
221
+ dw/server/ui/assets/swift-Bxkupp3x.js,sha256=PAoUaoj9w0C1Q8tOfBsDefytIxzaJLYxXo8dgwWE4LQ,4483
222
+ dw/server/ui/assets/systemverilog-Bz4Y3fRF.js,sha256=N8BJdmDPdAS3YSLf9-c6WjpeHiC8AUiPFC0b83QRu84,6850
223
+ dw/server/ui/assets/tcl-DISqw1ZD.js,sha256=tGDwrjRxtiwzHBQVX4aYHPx2tvnzyCbsk3MouRN8nGI,3271
224
+ dw/server/ui/assets/ts.worker-D7T1-Ig5.js,sha256=l5VlUGJBtGJhrRtzAlbC7iInUtA13foqlGA2sWIgvzE,6913951
225
+ dw/server/ui/assets/tsMode-BCUw0fMr.js,sha256=XFvuGvkuJ78AoBxS-MebnKHPTfbPiT0V4mCik4CbcJY,21859
226
+ dw/server/ui/assets/twig-De2hgUGE.js,sha256=7UK-mZY0t2AOG2upJFdhUfk_hN4jQxNO37xW_pXsYRk,5781
227
+ dw/server/ui/assets/typescript-3N0ou1YS.js,sha256=_IGJ4p25uslmqxdnLjYyHwpizqses25wuaspzcMbZCM,4675
228
+ dw/server/ui/assets/typespec-B8J7ngcE.js,sha256=4SiWGtYCn-n7DAFoQw3hFbXpXOEzUIVgPrFnMxeDL0A,2625
229
+ dw/server/ui/assets/vb-DV3o63ZY.js,sha256=g6FxShoSupLTGxKrGHUt31pO6FoCrY9npMMQpnSqtsM,5300
230
+ dw/server/ui/assets/wgsl-DpFanUEy.js,sha256=M1uSecn4lmt1G3mQyTCdxT4mfHC4g3AjJAw7cuUwAg4,7182
231
+ dw/server/ui/assets/workers-C91O0to6.js,sha256=vei9_GEooaFV3E-ALQYeLfTImn66mqOZQx7Edcl504w,1249
232
+ dw/server/ui/assets/xml-DmIqin7X.js,sha256=h-r3L0O01juBzogIzPPXALc559z1li29Jd4yT-uwARM,1923
233
+ dw/server/ui/assets/yaml-BQg2lXI1.js,sha256=SCCWPg42-Z7AZHvryf-K_V3pomnP_kZjic95uzXV2rc,3543
234
+ dw/tasks/assess.py,sha256=fQgj8Q8-Sf6CWXCWIB_sKS6C9RIDembzP378yy4VKd8,31765
235
+ dw/tasks/audio_dynamics.py,sha256=-dhNkBM3CkWGLbbd5fUExbWCb4FyLJp3mYkqIO4OeIg,18060
236
+ dw/tasks/audio_transcription.py,sha256=RNyrnz6irSzz6pY4H5pyEn3gwRLHOawUGI-GGbLeU4w,5523
237
+ dw/tasks/audio_utils.py,sha256=2d1NWgkdTMhie85xAjqIX7uxsbcb1PCbqdftYZEezEM,38233
238
+ dw/tasks/background_remover.py,sha256=lwRMBo1VALLVWwUQUOs-5EWtAvOKZOlrVwoAr6jrStQ,1205
239
+ dw/tasks/borders.py,sha256=ZFnvODeLnF4nMMogOAZKEKHPMM7qebW1A4GaZFyDKmI,4253
240
+ dw/tasks/compose_text.py,sha256=7N-9ti5XfhwECZIXzx7IgTbmm2Kt8GmcR8yK5mbEXEY,3127
241
+ dw/tasks/concat_videos.py,sha256=ZWidN8mVtfh01nhTcmrlrdwHPnkuTudP1YzT025gRZw,16008
242
+ dw/tasks/depth_estimator.py,sha256=uVsMueg6pZy-1NA_uY5PRMezl9jyUbSYmyQaV8o8sHY,1704
243
+ dw/tasks/diffusion_upscale.py,sha256=7kSkXaQZ9Ng93xizAksmOZbXgGVPCgDN8PgLqOlCOiA,3416
244
+ dw/tasks/dissolve_videos.py,sha256=3Wy9pM7UQOCliZeCHWPXAycqACNXIxW6z0FoEAWOreE,12938
245
+ dw/tasks/format_messages.py,sha256=LHEFWaIS0GsL0Dm7KGG_MfwlKO9gB62zWf3egxxDZwE,630
246
+ dw/tasks/gather.py,sha256=C0pYhr7EWZibDm8gOzjAVZARV1Gu7heHhfGuZIdq6oM,5933
247
+ dw/tasks/grade.py,sha256=QVVaENcgvABJdaS5kAoH5SUhdJ3PEsaQvbRSn5dZlZw,3808
248
+ dw/tasks/image_to_text.py,sha256=iNza67G5h24y6GIs22mCyLOFgqsAOfz9hf88jBn16iY,1616
249
+ dw/tasks/image_utils.py,sha256=4mAHIob7Yh8JEdekI5X5yI_dJSKia1PTrRDGjljAOfc,25397
250
+ dw/tasks/interpolate_frames.py,sha256=Jxp0GcETheu1SBwAP6QrCCRKRs9XfoF5SHzwfUkIwCk,9272
251
+ dw/tasks/join_into_song.py,sha256=54nr2-Q5MOUV4rTtBeWyJV-oK1misJ86LV2eRRV_BTo,17825
252
+ dw/tasks/joins.py,sha256=nV0wc7gmZAvMiNVngd7TOhRpOKF5YimOxL25arbxWV0,25171
253
+ dw/tasks/judge.py,sha256=fdT6a20x66tCCP37d2NnVFrZAPiuhduuBvg_bsAdtSg,2312
254
+ dw/tasks/loop_bed.py,sha256=GqFE2PpHNEryQK4OdJO-x30ztIFSY6KlfhRkL5pxHtg,35139
255
+ dw/tasks/model_cache.py,sha256=Bh97x5mFFFzT8M8_LiHo0a1izsaIqvsQyIURPkjKxTk,1879
256
+ dw/tasks/pair_audio.py,sha256=-FxrSzXJoK2nVO7kjL-lZgpmBgNDbUb9awDDfoNrlHk,17178
257
+ dw/tasks/qr_code.py,sha256=xyckWTixcMYasJPI5N7-co4jmyHwfScGWD2D1RbFzuM,548
258
+ dw/tasks/restore_faces.py,sha256=4DH7vKoCqQVaGXGG_Utvizq60ravlnHp9lbOuxX9930,6442
259
+ dw/tasks/rife_model.py,sha256=eO77oSH4OGY5pXBp6UDaXIDbGPlOHPIiXMrf1RMzYjo,6387
260
+ dw/tasks/segment.py,sha256=2g-jndKDlIcVMH4OApWNlWzt-8DzQvhK82_TNMSXoTI,4267
261
+ dw/tasks/select.py,sha256=HQlINdeyQXpVQr_9ccWvNEbGU85Gp5RbYKbCb7jvx_U,3518
262
+ dw/tasks/speech_generation.py,sha256=_rpj5o3-KTsvmvVcFuWCBzCO2UrUbvvKfQhIQH2giaM,10754
263
+ dw/tasks/stabilize.py,sha256=XtVCV87gmsd0Q24U4Do6CqXEt54zxe7Vg6AED6UDsNo,5018
264
+ dw/tasks/task.py,sha256=kI6ixKZ0oOG7X8SY7g3OCTfYi1GqsC8L5c9mfahZg_0,34436
265
+ dw/tasks/tensor_image.py,sha256=xJDo5-Bi7drP4LqXgg_qGeEbC8q9-KA84iVJolQURhE,2083
266
+ dw/tasks/text_generation.py,sha256=KeqXCYFTriMCigFSsm0mtF87ZUhBUCVG4DL4VznTiRI,6997
267
+ dw/tasks/text_sections.py,sha256=0eE7O0eLQCgxEooO3-RLuQSRwmeFwHttLqwhp71q3Lw,3260
268
+ dw/tasks/upscale.py,sha256=ginJbVIZBajTdMxejvkP66kn3rpEiTJu9X7_HdbPHuk,6854
269
+ dw/tasks/video_utils.py,sha256=2_89vQrVA4XnojR9hnhzkx82UFuzDJPdfQNs1hb0ams,19204
270
+ dw/tasks/voice_attribution.py,sha256=tw3-DHO0JTzX3wfjm1LjCaTm1FiMgfchOrSFG91p0_U,32098
271
+ dw/tasks/zoe_depth.py,sha256=s-otGgDA_wIfawzGWhHd9eDtHBiNsNosjCUH3qIr03c,1817
272
+ dw/workflows/h3_context_ir.json,sha256=nasb5JKFs6bkqYXuTvCyyiGAROBo8N0vDw_X-ec8SYM,13653
273
+ dw/workflows/test.json,sha256=XFvEH7_8F8MGoX5b1j0FnT8dJghYiuyukj2q0JSEfkU,937
274
+ dw_mcp/__init__.py,sha256=dyJEmHMBoLmz0qo0J_tHx-jJSrbl7Ac4pgQr0-mOZSY,223
275
+ dw_mcp/__main__.py,sha256=yqmbKF1AtJcc-c9Z7ykjOUG0WMee8CgXWMW4nbFzxGg,4366
276
+ dw_mcp/assets.py,sha256=2tQMl0m9gXeZY-dwCHVok434pMU0_3hxlcXyV-aaSSw,18292
277
+ dw_mcp/authoring.py,sha256=dNYjc1EtqlifozYRI6r1Mr92RThIAlBsOuDiiwGVmQA,6053
278
+ dw_mcp/catalog.py,sha256=vZa797mrqigU-OnP5JMhPlTBuIJGcwPCcHKkryRB10A,16218
279
+ dw_mcp/client.py,sha256=XhddOIQpHNbLgJ01u38fyTVG4dQS2dgD0b7T5DT_yf0,21285
280
+ dw_mcp/diagnose.py,sha256=xGG_sn-bNOi1XFbXAtxayDL60ITUT3YuRqhxyfKvkGU,17557
281
+ dw_mcp/exports.py,sha256=Txly4-pD_GCcKR0CxvfWAWmhbRrcbUsOcvAdO7dMTps,4137
282
+ dw_mcp/guides.py,sha256=QDvofzCO5FOXTNO5DW82UKqDn2IdvwNEr7rB91fHmxE,1762
283
+ dw_mcp/media.py,sha256=mAs-nEJiCv5P8o3lfATRD94RbS6OvfgejSzfiW2PfVo,28170
284
+ dw_mcp/models.py,sha256=uzsUY-CgiaP1LZLbdLnVRVXFSK2kcXs_tNquRKM6d9w,4220
285
+ dw_mcp/prompts.py,sha256=ZgbcATJbWUxHlebt8ssH2PlUc3nBD6rrVLdFLJSo8TM,3944
286
+ dw_mcp/server.py,sha256=o__FuMpBezeeWHNB3OMyB8TURpS1jDJR5L2aW1yKn0Q,7483
287
+ dw_mcp/tools_authoring.py,sha256=3he2TOvwU0Jwl0Q5CeXgcpSqBJTQ7OPXsJVotSttpMA,10824
288
+ dw_mcp/tools_catalog.py,sha256=Rd0qfBVSaX1A-aucerdZ8NwjJ7gjOabGqVAeH8zu5Zc,22221
289
+ dw_mcp/tools_jobs.py,sha256=IhzItLsok4QbwztgeQw5qr3z2KcELIhb954vEOVWAj4,12112
290
+ dw_mcp/tools_media.py,sha256=FgfBkpXxSpSDwNy5xqYaGzDSeuJ24OFEWZzAIbUB75I,16848
291
+ dw_mcp/workspaces.py,sha256=A8RvsaNkfOWK-3wyDuHxbF4IdTBECJrwaEK4ghu3muQ,8947
292
+ diffusers_workflow-0.6.0.dist-info/METADATA,sha256=PRtsaH8pUIAIFU29l83z636ZJFCm3sMBPyvafppJO58,14938
293
+ diffusers_workflow-0.6.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
294
+ diffusers_workflow-0.6.0.dist-info/entry_points.txt,sha256=Dem_AOzV-Kcpr9AASlSvJ-S5sn3f6TQu6ABb6BbApho,148
295
+ diffusers_workflow-0.6.0.dist-info/top_level.txt,sha256=o-uFAN_oUOrhXfMKO39HsMs2r19L9LykxoVKj2S9q7U,10
296
+ diffusers_workflow-0.6.0.dist-info/RECORD,,
@@ -1,6 +1,5 @@
1
1
  [console_scripts]
2
2
  dw-mcp = dw_mcp.__main__:main
3
- dw-repl = dw.repl:main
4
3
  dw-run = dw.run:main
5
4
  dw-serve = dw.serve:main
6
5
  dw-test = dw.test:main
dw/__init__.py CHANGED
@@ -1,8 +1,11 @@
1
1
  from .settings import resolve_path, load_settings
2
2
  from .log_setup import setup_logging
3
+ import functools
3
4
  import os
4
5
  import re
5
6
  import logging
7
+ import subprocess
8
+ import sys
6
9
  import warnings
7
10
  from dotenv import load_dotenv
8
11
 
@@ -20,14 +23,35 @@ if "PYTORCH_MPS_HIGH_WATERMARK_RATIO" not in os.environ:
20
23
  if "PYTORCH_CUDA_ALLOC_CONF" not in os.environ:
21
24
  os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "expandable_segments:True"
22
25
 
23
- # Load sharded checkpoints in parallel - a pure cold-start win
26
+
27
+ def _parallel_loading_default(platform):
28
+ """Whether diffusers loads a sharded checkpoint on several threads.
29
+
30
+ A pure cold-start win on CUDA. On MPS the loader threads each copy their
31
+ tensors onto the device at once, and that segfaulted LTX-2.5's SDNQ
32
+ transformer load (exit 139, four threads inside copy_ to mps) where the
33
+ serial load succeeded in 39s. diffusers reads the variable once at import,
34
+ before dw can ask torch for a device, so this goes by platform: macOS has
35
+ no CUDA, and its accelerator is always MPS."""
36
+ return "false" if platform == "darwin" else "true"
37
+
38
+
24
39
  if "HF_ENABLE_PARALLEL_LOADING" not in os.environ:
25
- os.environ["HF_ENABLE_PARALLEL_LOADING"] = "true"
40
+ os.environ["HF_ENABLE_PARALLEL_LOADING"] = _parallel_loading_default(sys.platform)
26
41
 
27
42
  # Suppress all common library warnings before any imports
28
43
  warnings.filterwarnings("ignore", category=FutureWarning)
29
44
  warnings.filterwarnings("ignore", category=UserWarning)
30
45
  warnings.filterwarnings("ignore", category=DeprecationWarning)
46
+ # ...except torch's notice that an op the MPS backend lacks ran on the CPU. With
47
+ # PYTORCH_ENABLE_MPS_FALLBACK set (the fp4-fp8-for-torch-mps autoload sets it)
48
+ # that is otherwise a step that got several times slower with nothing to say why.
49
+ # Later filters take precedence, so this one wins over the blanket ignore above
50
+ warnings.filterwarnings(
51
+ "default",
52
+ message=r".*not currently supported on the MPS backend and will fall back",
53
+ category=UserWarning,
54
+ )
31
55
 
32
56
  # Eager (but guarded) import of torch. This module's own top-level code needs
33
57
  # torch's exceptions/types unconditionally to detect its absence gracefully
@@ -299,10 +323,11 @@ def device_memory_stats():
299
323
  """
300
324
  Snapshot of allocator memory usage for the device dw is configured for.
301
325
 
302
- Only CUDA exposes free/total figures (via torch.cuda.mem_get_info); MPS
303
- has no equivalent API, so its snapshot reports zeroed, "known" values
304
- instead. CPU, or a CUDA/MPS backend that isn't actually available despite
305
- being the configured device type, results in an "unavailable" snapshot.
326
+ CUDA exposes free/total via torch.cuda.mem_get_info. MPS reports
327
+ allocated (tensors), reserved (everything the Metal driver holds) and
328
+ total (Metal's recommended working set); free is total minus reserved.
329
+ CPU, or a CUDA/MPS backend that isn't actually available despite being
330
+ the configured device type, results in an "unavailable" snapshot.
306
331
 
307
332
  Returns:
308
333
  dict with keys:
@@ -310,10 +335,10 @@ def device_memory_stats():
310
335
  device_name (str or None)
311
336
  allocated_mb (float)
312
337
  reserved_mb (float)
313
- free_mb (float or None): None only when CUDA's mem_get_info call
314
- itself fails
315
- total_mb (float or None): None only when CUDA's mem_get_info call
316
- itself fails
338
+ free_mb (float or None): None only when the backend's capacity
339
+ probe itself fails
340
+ total_mb (float or None): None only when the backend's capacity
341
+ probe itself fails
317
342
  """
318
343
  stats = {
319
344
  "available": False,
@@ -344,15 +369,59 @@ def device_memory_stats():
344
369
  and hasattr(torch.backends, "mps")
345
370
  and torch.backends.mps.is_available()
346
371
  ):
347
- # MPS doesn't provide detailed memory stats like CUDA
372
+ # Unified memory: 'reserved' is everything the Metal driver holds for
373
+ # this process, and the ceiling is Metal's recommended working set -
374
+ # the figure past which an allocation starts to page
348
375
  stats["available"] = True
349
- stats["device_name"] = "Apple Silicon (MPS)"
350
- stats["free_mb"] = 0.0
351
- stats["total_mb"] = 0.0
376
+ stats["device_name"] = f"{_apple_chip_name()} (MPS)"
377
+ stats["allocated_mb"] = torch.mps.current_allocated_memory() / 1024 / 1024
378
+ stats["reserved_mb"] = torch.mps.driver_allocated_memory() / 1024 / 1024
379
+ try:
380
+ total = torch.mps.recommended_max_memory() / 1024 / 1024
381
+ stats["total_mb"] = total
382
+ stats["free_mb"] = max(total - stats["reserved_mb"], 0.0)
383
+ except (RuntimeError, AttributeError):
384
+ pass
352
385
 
353
386
  return stats
354
387
 
355
388
 
389
+ @functools.lru_cache(maxsize=1)
390
+ def _apple_chip_name():
391
+ """The chip's marketing name ('Apple M5 Pro'), so a reading from an 8 GB M1
392
+ and one from a 128 GB M4 Max are not reported as the same device."""
393
+ try:
394
+ result = subprocess.run(
395
+ ["sysctl", "-n", "machdep.cpu.brand_string"],
396
+ capture_output=True,
397
+ text=True,
398
+ timeout=2,
399
+ check=True,
400
+ )
401
+ return result.stdout.strip() or "Apple Silicon"
402
+ except (OSError, subprocess.SubprocessError):
403
+ return "Apple Silicon"
404
+
405
+
406
+ def device_capacity_gb(device=None):
407
+ """How much memory the accelerator can hold, in GiB - Metal's recommended
408
+ working set on MPS, the card's total on CUDA - or None where there is no
409
+ accelerator or the probe fails. Used where a check needs a ceiling for a
410
+ device no curated 'cost' entry describes."""
411
+ if not _TORCH_AVAILABLE:
412
+ return None
413
+ try:
414
+ device_type = get_device_type(device)
415
+ if device_type == "mps":
416
+ return torch.mps.recommended_max_memory() / 1024**3
417
+ if device_type == "cuda":
418
+ index = torch.device(device or get_device()).index or 0
419
+ return torch.cuda.get_device_properties(index).total_memory / 1024**3
420
+ except (RuntimeError, AttributeError, AssertionError):
421
+ return None
422
+ return None
423
+
424
+
356
425
  def startup(log_level=None):
357
426
  if not _TORCH_AVAILABLE:
358
427
  raise ImportError(