diffusers-workflow 0.4.0b7__py3-none-any.whl → 0.5.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 (123) hide show
  1. {diffusers_workflow-0.4.0b7.dist-info → diffusers_workflow-0.5.0.dist-info}/METADATA +24 -4
  2. {diffusers_workflow-0.4.0b7.dist-info → diffusers_workflow-0.5.0.dist-info}/RECORD +122 -105
  3. dw/__init__.py +83 -14
  4. dw/adapter_compatibility.py +64 -12
  5. dw/arguments.py +193 -20
  6. dw/assessment_rules.py +192 -0
  7. dw/cache_blocks.py +2 -1
  8. dw/content_types.py +46 -1
  9. dw/dissolve_frame_errors.py +121 -0
  10. dw/docs/ACCELERATION.md +9 -5
  11. dw/docs/AGENT_LOOP.md +9 -0
  12. dw/docs/DEPENDENCIES.md +1 -1
  13. dw/docs/MCP.md +12 -8
  14. dw/docs/RECIPES_24GB.md +8 -0
  15. dw/docs/RELEASING.md +250 -7
  16. dw/docs/REMOTE.md +21 -2
  17. dw/docs/SECURITY.md +55 -8
  18. dw/docs/SERVER.md +17 -2
  19. dw/docs/TASKS.md +301 -12
  20. dw/docs/TESTING.md +1 -1
  21. dw/docs/WORKFLOW_GUIDE.md +226 -9
  22. dw/download_watch.py +335 -0
  23. dw/events.py +50 -7
  24. dw/host_memory_projection.py +72 -17
  25. dw/hub_cache.py +114 -0
  26. dw/introspection.py +436 -23
  27. dw/locations.py +147 -15
  28. dw/loudness.py +82 -0
  29. dw/media_frames.py +37 -10
  30. dw/media_info.py +53 -12
  31. dw/null_media.py +99 -0
  32. dw/pipeline_processors/chain.py +55 -3
  33. dw/pipeline_processors/config_objects.py +50 -2
  34. dw/pipeline_processors/pipeline.py +97 -26
  35. dw/plan.py +92 -25
  36. dw/previous_results.py +23 -3
  37. dw/probe_paths.py +59 -0
  38. dw/realize.py +12 -6
  39. dw/reference_limits.py +10 -5
  40. dw/repl_commands.py +2 -12
  41. dw/result.py +213 -24
  42. dw/result_fps.py +82 -0
  43. dw/runs.py +354 -5
  44. dw/scalar_result_validation.py +67 -6
  45. dw/security.py +164 -0
  46. dw/serve.py +9 -1
  47. dw/server/app.py +594 -101
  48. dw/server/assess.py +135 -0
  49. dw/server/exports.py +12 -0
  50. dw/server/guides.py +60 -7
  51. dw/server/jobs.py +51 -8
  52. dw/server/observed_cost.py +29 -1
  53. dw/server/ui/assets/{cssMode-xQCqMuag.js → cssMode-DRY1oIAQ.js} +1 -1
  54. dw/server/ui/assets/{editor.api-Bfiq9hmW.js → editor.api-C_Q9knYh.js} +1 -1
  55. dw/server/ui/assets/{freemarker2-BwDnlSuz.js → freemarker2-CoeF3Y-p.js} +1 -1
  56. dw/server/ui/assets/{handlebars-Beb1we4G.js → handlebars-ClJeebFA.js} +1 -1
  57. dw/server/ui/assets/{html-Yw-qdTCH.js → html-Bp7ECOGB.js} +1 -1
  58. dw/server/ui/assets/{htmlMode-Dbp7eBPO.js → htmlMode-DWzbYXCs.js} +1 -1
  59. dw/server/ui/assets/{index-CsXMC8a8.css → index-3Vw6WAPW.css} +1 -1
  60. dw/server/ui/assets/index-Bv4OgazC.js +43 -0
  61. dw/server/ui/assets/{javascript-BNzP7yQZ.js → javascript-B6Cbtyg8.js} +1 -1
  62. dw/server/ui/assets/{jsonMode-DxIEESAg.js → jsonMode-dg5n9059.js} +1 -1
  63. dw/server/ui/assets/{liquid-CeQTai1N.js → liquid-CAyPEpMs.js} +1 -1
  64. dw/server/ui/assets/{lspLanguageFeatures-DKVB_UCB.js → lspLanguageFeatures-BGj-zQOH.js} +1 -1
  65. dw/server/ui/assets/{mdx-Bczl_PHr.js → mdx-B5EuIkzP.js} +1 -1
  66. dw/server/ui/assets/{monaco-Bu2OB6wI.js → monaco-ULLHC90E.js} +4 -4
  67. dw/server/ui/assets/{python-CeTsj82v.js → python-C5D4i8ni.js} +1 -1
  68. dw/server/ui/assets/{razor-CN7JaWqc.js → razor-DL9EVLH-.js} +1 -1
  69. dw/server/ui/assets/{tsMode-CoSEMx-L.js → tsMode-BtDRLqfW.js} +1 -1
  70. dw/server/ui/assets/{typescript-CcsolRTO.js → typescript-DYpkXm7y.js} +1 -1
  71. dw/server/ui/assets/{workers-DLaycdy4.js → workers-B4R84wCs.js} +1 -1
  72. dw/server/ui/assets/{xml-QEwuyn1w.js → xml-CQNiPADm.js} +1 -1
  73. dw/server/ui/assets/{yaml-BB4U5D-R.js → yaml-iWBPUkB-.js} +1 -1
  74. dw/server/ui/index.html +2 -2
  75. dw/settings.py +9 -0
  76. dw/shot_span_preflight.py +116 -0
  77. dw/shots.py +392 -0
  78. dw/slice_preflight.py +148 -0
  79. dw/step_cache.py +98 -12
  80. dw/task_domains.py +56 -9
  81. dw/tasks/assess.py +910 -0
  82. dw/tasks/audio_transcription.py +46 -3
  83. dw/tasks/audio_utils.py +523 -29
  84. dw/tasks/concat_videos.py +100 -19
  85. dw/tasks/dissolve_videos.py +160 -22
  86. dw/tasks/gather.py +7 -3
  87. dw/tasks/grade.py +97 -0
  88. dw/tasks/image_utils.py +38 -0
  89. dw/tasks/interpolate_frames.py +9 -1
  90. dw/tasks/pair_audio.py +150 -35
  91. dw/tasks/segment.py +15 -4
  92. dw/tasks/stabilize.py +9 -1
  93. dw/tasks/task.py +154 -3
  94. dw/tasks/video_utils.py +100 -22
  95. dw/tasks/voice_attribution.py +781 -0
  96. dw/type_helpers.py +163 -12
  97. dw/variables.py +46 -4
  98. dw/video_extensions.py +141 -0
  99. dw/video_size_errors.py +107 -0
  100. dw/vram_estimate.py +244 -34
  101. dw/vram_inheritance.py +195 -0
  102. dw/worker.py +47 -14
  103. dw/workflow.py +363 -28
  104. dw/workflow_schema.json +13 -9
  105. dw/workflow_sources.py +86 -10
  106. dw/workflows/test.json +1 -1
  107. dw/workspace.py +5 -1
  108. dw_mcp/assets.py +117 -15
  109. dw_mcp/authoring.py +30 -38
  110. dw_mcp/catalog.py +88 -14
  111. dw_mcp/client.py +38 -3
  112. dw_mcp/diagnose.py +24 -11
  113. dw_mcp/exports.py +55 -14
  114. dw_mcp/guides.py +3 -1
  115. dw_mcp/media.py +66 -6
  116. dw_mcp/prompts.py +2 -1
  117. dw_mcp/server.py +284 -272
  118. dw_mcp/workspaces.py +10 -5
  119. dw/server/ui/assets/index-DqbiZNFq.js +0 -43
  120. {diffusers_workflow-0.4.0b7.dist-info → diffusers_workflow-0.5.0.dist-info}/WHEEL +0 -0
  121. {diffusers_workflow-0.4.0b7.dist-info → diffusers_workflow-0.5.0.dist-info}/entry_points.txt +0 -0
  122. {diffusers_workflow-0.4.0b7.dist-info → diffusers_workflow-0.5.0.dist-info}/licenses/LICENSE +0 -0
  123. {diffusers_workflow-0.4.0b7.dist-info → diffusers_workflow-0.5.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.5.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
@@ -109,8 +112,8 @@ source ./activate
109
112
  .\venv\scripts\activate
110
113
  ```
111
114
 
112
- `python -m dw.test` confirms torch and diffusers import and shows which
113
- accelerator was found.
115
+ `python -m dw.test` runs a small built-in workflow end to end - it downloads
116
+ SD 1.5 (a few GB) and generates one image on whichever accelerator was found.
114
117
 
115
118
  **2. Start the engine.** Leave it running; everything else talks to it.
116
119
 
@@ -160,7 +163,7 @@ once; without it the run fails partway through with a 401/403 from the Hub.
160
163
 
161
164
  ## Drive it from an agent
162
165
 
163
- Then just ask. The agent has 58 tools covering the whole surface — the
166
+ Then just ask. The agent has 59 tools covering the whole surface — the
164
167
  workflow catalog, the real diffusers pipeline signatures, the job queue, the
165
168
  gallery, the model cache:
166
169
 
@@ -199,6 +202,23 @@ and outputs — so two agents, or an agent and you in the browser, share the GPU
199
202
  without saving over each other. An agent calls `use_workspace` once and the
200
203
  rest of the session lands there.
201
204
 
205
+ **Feedback from a session.** At the end of a working session, ask the agent
206
+ what got in its way: bugs, gaps, misleading skill text, tools it reached for
207
+ and couldn't find. Have it file each one as an issue on
208
+ `dkackman/diffusers-workflow` with the `field-report` label, for example:
209
+
210
+ > File each bug or gap you hit as an issue on dkackman/diffusers-workflow
211
+ > with the label `field-report`.
212
+
213
+ The label marks a report as coming from real use, not from the automated test
214
+ loop. The agent loop (see [Agent Loop](docs/AGENT_LOOP.md)) picks the report up
215
+ like any other issue when you filed it yourself; a report filed under any
216
+ other GitHub login is parked for the maintainer to review first (relabelled
217
+ `owner:don` + `status:needs-approval`), since the loop must not act
218
+ unattended on third-party text in a public repo, and is only handed to the
219
+ loop, or not, after that review. The label is also what feature planning
220
+ reads as evidence of demand.
221
+
202
222
  The complete tool reference, client configuration for other MCP hosts, and the
203
223
  troubleshooting table: [MCP Server](docs/MCP.md). Workspaces in depth:
204
224
  [Workspaces](docs/WORKSPACES.md).
@@ -1,99 +1,113 @@
1
- diffusers_workflow-0.4.0b7.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
2
- dw/__init__.py,sha256=Gu5zq4_FIKel5FXylGaNoAEEUjVwllJq3kUz-W5o7EI,15724
3
- dw/adapter_compatibility.py,sha256=IUPOmQ0j__VshHF4o8r-tgRBenSbWqFRRBRMbfbGRO8,9455
4
- dw/arguments.py,sha256=qX4BpqrQaVvT6CUXfq0lthCWhS9meffBhK1dyTnVYSw,43751
1
+ diffusers_workflow-0.5.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
2
+ dw/__init__.py,sha256=1x8tC7Gv4U22ocQfmnUb52W4VE__4zCu1wkDK1AMZd4,18760
3
+ dw/adapter_compatibility.py,sha256=5Z5E34nzL2xNVwfux1F2aBeYWHbMfgBXOz24N5XgfJk,11604
4
+ dw/arguments.py,sha256=5aU2ch5DVgd_W3mTAZa-pvGvOzFOwSv0XBZ1mCzDfv4,51791
5
+ dw/assessment_rules.py,sha256=utim5S8XwFdA3fWp7CgHy5ZcfGVtFWvQklCtOVwEIF8,7174
5
6
  dw/assets.py,sha256=wmtmANjC3nBDJ9_neXlE8fMBWnRlcllgVJPCTxjkUpA,5209
6
7
  dw/cache_blocks.json,sha256=m7mJV7Pwv5LnwzW-2Daa71W3yKh6x7VdxFS7ShEiUG4,1633
7
- dw/cache_blocks.py,sha256=ycYc0b1tjo_t4fja9cLI8-rZTC9Ls8kRMzzBzaKZVQM,5626
8
- dw/content_types.py,sha256=LolqoiMpFzs3fvw0gw_xcP9eMqB4jB83Anp7Lp3GbpI,4186
8
+ dw/cache_blocks.py,sha256=A_S9pID6jqgheRg2DFFmIPLiS7XJUNT44eXk3W01SSg,5719
9
+ dw/content_types.py,sha256=6VVa2Xq8tzdYxkBiLQMIc_5TTMviHktu5OY4wKmk9jE,5949
10
+ dw/dissolve_frame_errors.py,sha256=0kB_mec2jhZK5AJfcB_FbgaXqeX6FZ1dFhAJL3XrNf0,5111
11
+ dw/download_watch.py,sha256=x0RGfJy7t_ZQJ4FD3GcGcdJd-bjmllLLVCXKYhFE9JI,12656
9
12
  dw/elision.py,sha256=eMfasDCqO4FMQSLJGK4Dijg5ie-Ass5TzlzI3eAAcBM,12582
10
- dw/events.py,sha256=rd5Ij5JhsPVZJC2X4RpeFDkS2gML7T3JSQUic_6RtWM,9825
13
+ dw/events.py,sha256=i6y1Kf89onrNVGCB4drQm87nFvtZWlMMVWysc_IPCVU,12274
11
14
  dw/for_each.py,sha256=j5PJVcHQfC4RRBazilPX1HMP2yCCzoE7jsIDkcPFsxg,16599
12
15
  dw/host_memory.py,sha256=Gfr-nwgMCSieZExLAhwX3iX78aswrw8h1VqQjJy6qGE,9723
13
- dw/host_memory_projection.py,sha256=46yBUEy-1MG1GawPYEtEp2_5WtfTWDbjceFZ30daItg,7838
14
- dw/hub_cache.py,sha256=rdyQKOxBxNvUWAmzIvYEXLrk-S_hbOgNfn5wqG8rv5k,11125
15
- dw/introspection.py,sha256=nLvH0lN9VEf2CrHxrxsqXA1YNRpt-3gcT6gI-ZDANzA,32318
16
+ dw/host_memory_projection.py,sha256=2bfaYy3mIzACpBdbIpp4vxUY4PPuWkX5YYC_fyULmAs,10314
17
+ dw/hub_cache.py,sha256=PUxpajmh8WQActZT_jv7YEHHCMNhuEejlzBJOyisvIY,15627
18
+ dw/introspection.py,sha256=7NYHtVFWpBfVe8_AkGvcW8S5AUALivgEwDFrzYQAl7M,49265
16
19
  dw/kernel_availability.py,sha256=9wiBNJAGBKmvUSpdaiJUfjKOU0e1QuRJl59kcQMrtMw,8600
17
- dw/locations.py,sha256=01zXanixI_h6Sf97cd8kYQp_cuv21ZcdW6RV8sXTO6s,21434
20
+ dw/locations.py,sha256=tZQmdslHPDAvft3RtFGV26xdxnMlNVcp2YJG-SOncoU,27464
18
21
  dw/log_setup.py,sha256=05YCkVQREt8WnpP2qh2zK325olODSGpIBO4RW-avbBs,1423
22
+ dw/loudness.py,sha256=zwEahJPKaYL83nE9DOxgwzc60AVQ9D1yiuiMGJGzdw4,3055
19
23
  dw/media_audio.py,sha256=PVDGXkUcHR4zDeHJA1Xu2jzvB3aCVxLmkCVnGSIRgTQ,9370
20
- dw/media_frames.py,sha256=CfkFm7LgvF04d0WmKyEYXQj7_FBAz9lH2T8C_Y7diO0,14792
21
- dw/media_info.py,sha256=lXSbYYamF6sQqm6b9ruN1L1NusKd-HFhPWWSnKNbZsw,11724
22
- dw/plan.py,sha256=doMtOFl2aGf3RbU5cjxRLrUjS18W0BrdjSCC7Y4HgEw,35932
23
- dw/previous_results.py,sha256=-lZeCElJZ6cu8Mi6b2IWrOVIbdz6ReZ2k-nFjmAPQ9U,15833
24
+ dw/media_frames.py,sha256=ndWUmFExZI5afqnS8AyPug34UbYDquCAXoE56VSO9A8,15803
25
+ dw/media_info.py,sha256=_qT4jio1ntYy9ukqHTw9l4Boa-eTY05nYzK02rUImOs,14456
26
+ dw/null_media.py,sha256=VPmQj-XZmYKrtsCwwF6zCRZA5i_Os80dDdXz-2GwkFM,3861
27
+ dw/plan.py,sha256=gIMdGBM8yysnX1YxmXV8HZA6JuglMEhCYxkpLY5q-EQ,39496
28
+ dw/previous_results.py,sha256=7ZxwCi6veDmX9Az-GzC-6d4CX6Sueokh4AlWn1A8chc,16840
29
+ dw/probe_paths.py,sha256=L2HSEiTbGLkpT1xlpAis-spznr-lqUYk-mWsYRMgfs0,2484
24
30
  dw/prompt_schema.json,sha256=5e7NWgce28cf-YWEWwyDjQQ90ki0BcI4tczTyr_d8lQ,1934
25
31
  dw/prompt_weighting.py,sha256=ttA_EUnkqmvHujRxP5Dgfm4hsemupQaNDiidpxsvMgc,13063
26
32
  dw/prompts.py,sha256=Z7tQsBVMSAHKAdR0Fhr_ktrHtqQNu2MsXSwzph9YL9s,5859
27
- dw/realize.py,sha256=6-L2ZfmbxQu82GgjSdn8IlS9LjNBfFa2f4CbnAxRvNo,10108
28
- dw/reference_limits.py,sha256=aVtE5NxVYuJu1ZyQDwgDpOfxYDBkKqc287Jbu5uzgJc,8043
33
+ dw/realize.py,sha256=5ruQNT3XU01ePP64c9QUV8oNdQn83QNBHhRXSvXi4j8,10357
34
+ dw/reference_limits.py,sha256=cg6zAUMrKxv93Y6TER-xaygTJ6iMs-QjTrjDwPgcT8s,8277
29
35
  dw/reference_names.py,sha256=JbRwxOKVYLxbaxU-GKTp6wkhi-j7raDnzEA9lQ191Ws,4618
30
36
  dw/repl.py,sha256=8xfYKqfOtozy5S3mNfTyre5gr-qGJremQ1pKEXEebXM,13382
31
- dw/repl_commands.py,sha256=YvvceQMOuBlXRrdzd2jVJhBJoqJ4vM0OYxvlTFkqEXE,33667
37
+ dw/repl_commands.py,sha256=V8Ke7Mp07FzkGw8Fojp4jgSYAhCrrWKe017pf3Ra_lE,33264
32
38
  dw/repl_worker.py,sha256=UNW4bkrxOmjeCC8yCrts1FFzJk_m_PV0o_t1uH5gweY,6171
33
- dw/result.py,sha256=M1Du52peHtWr4Gi7ftdN1nz4QxNjtUMcuNgF_cD6HVI,68452
39
+ dw/result.py,sha256=W6k3tgKtqQfp4Mw96zaAsup-ZEBxPNGjHK91S8n3DeU,79287
40
+ dw/result_fps.py,sha256=RdaiNqP9LkvKJYM1ru091k39zrlRwm_0wLhvi0IZHl0,3486
34
41
  dw/run.py,sha256=xu5G0CMAsUW_RmpiWLcQN0KmXOmaDPL32_U5R8lGv4o,5778
35
- dw/runs.py,sha256=uVfC7s5bRecxGTypCTNNH321pv5KYnG2_EfBn8EyxEA,16379
36
- dw/scalar_result_validation.py,sha256=Oks9y4NEwaVA5dWptn_p0zurzRD5XaWE4hzM7l-wp9c,2801
42
+ dw/runs.py,sha256=17P8OHiHEk4NRdmvzp8IFP98fD7GytwSxlzyOSac99E,30677
43
+ dw/scalar_result_validation.py,sha256=mmS3xEyTc0rbpU-ZhHeVMwbGZTUd7wJKXacqAxE_stI,5682
37
44
  dw/schema.py,sha256=qSzQ5qjh0_5uFIsHqb-lzEFcAzY-cXww_6HHp6C6Rkk,10485
38
- dw/security.py,sha256=amTzTpxGQ5Glbvc81UJ6pX5QUcAlIaYGP6-WL3OmRJ8,29696
45
+ dw/security.py,sha256=wyXX6nNZsjRY1ZMGvc39mQLXoYiYW_9s3Za603lrup8,37439
39
46
  dw/select_validation.py,sha256=v7ZnGeMfDrwymTS2r6RPW9wcDyBns32c0nZPKMkfqT4,4503
40
- dw/serve.py,sha256=E2O2auB0QNo2_nyVhyFw_zsvyptPJ9VTZXVoriEY2Tg,11187
41
- dw/settings.py,sha256=UGg4uWfT9h-5FsV8qRkDMyIH_tVZ090RB3-AkxKOAAg,2943
47
+ dw/serve.py,sha256=A14hq8-1lFAFiCo4G5UcZobpbPzzY3otPGVxS1iNwo8,11422
48
+ dw/settings.py,sha256=UPdnrZ9gw6tDktnf5rC7nw--MrDAdVwvSoe6EN0cJP8,3402
49
+ dw/shot_span_preflight.py,sha256=aNtxZ_DdqhFVp5KWakAprObQUYJBJfZZPR11WPcYAGA,4579
50
+ dw/shots.py,sha256=S9ufhYuUOWd_t6SkiZ5jC7vVpxE0xRgbmf3l-H5KpT0,17171
51
+ dw/slice_preflight.py,sha256=UTaElfjQITC7NTuafoR6datcYisfni4pioKbjc9vFAc,6144
42
52
  dw/step.py,sha256=HuTpAzT_nV_q_yaBi60rRCPd-FyUs7tzAw2jWMxZNV4,8049
43
- dw/step_cache.py,sha256=h29j4deLmmLcKBg1msKjzax8xKzey5uP1uN8AjFjfe8,16054
53
+ dw/step_cache.py,sha256=49xxvtlVYtPzlrRbKLqcVwlvkrTCxsuv2BZV21RncUQ,19810
44
54
  dw/subfolders.py,sha256=Bd3Vt71UHeUlYR0HaWtkletAxamDlexhHOTOjKrnSPg,3960
45
- dw/task_domains.py,sha256=jXKVVLSLprU-DK9T25qdXtR7zf-3eUBkJXKX9wQULdg,9771
55
+ dw/task_domains.py,sha256=67ckYvgO-f7e9cNCnH0bbB5NiwYQltRRApms7gBb57I,11562
46
56
  dw/teacache.py,sha256=tqoBnA8w33g0NK3ioSnjDMbq9w6vGNol0z74W-BXeDw,14964
47
57
  dw/teacache_models.json,sha256=dRuI_niSF1ZXloqElqPjIQC-RF_qkqMGbuAHuEEB8is,5065
48
58
  dw/test.py,sha256=P6JkCw1OjVh-xY_kS-STGlkEHpN9riToXV7A20WX5MA,582
49
- dw/type_helpers.py,sha256=ZyEp0XIYRsCT3TOZ73HZ3_LbRYheLLdrCGXEGRLjEf0,2523
59
+ dw/type_helpers.py,sha256=wlMugaZ9l7X1p-OkvVQX-Drq_Stpor5ru2iyR7nfyfY,9459
50
60
  dw/validate.py,sha256=ASYAaHsJqCataWoAEhYFO4-Ljg5z-i98tJcrdQc5lVk,2205
51
61
  dw/variable_constraints.py,sha256=pT1IFvZeMo3SpVK7HjzUhwNZumYMjt9PS9nVPfEapvo,17808
52
- dw/variables.py,sha256=QkuB5BM9wrVI_OPLcqq8QeiVzQCytsDfewhBw9z3yAk,16769
53
- dw/vram_estimate.py,sha256=Z5EBlH_kqgE7j5eivnORtbmE9LsheAIsuXEf5fLebkQ,4547
54
- dw/worker.py,sha256=srECx3sQl1WIpgWdCCfubzYZAaFpbK83A3oEF7l-6zo,31161
55
- dw/workflow.py,sha256=66H6bZpBlKKqy-Yju1heqtyAzVcsn620oCkqTyLfP6c,84522
56
- dw/workflow_schema.json,sha256=3BqdqvkTIMqKd7dnW3cZwvxuiM4NDWnjvymSObqDa7I,68969
57
- dw/workflow_sources.py,sha256=B-SQG47prXUx2fQmptbOINOQODQolVC8asYJZ7ZCfow,11968
58
- dw/workspace.py,sha256=UsqghQUY-0Oz9hxw4AbpIIHtJkl1lTKoo6MA_Xqnu4E,27566
62
+ dw/variables.py,sha256=Q9n5PVUzPe1Ugi7M3Z5N_1PJdxYLr1JOaGTtSKjaTOE,19151
63
+ dw/video_extensions.py,sha256=cVyXgO9vXWuRL_yFj2YI6PTGlXUlukHNbSaGxzOSuG4,5694
64
+ dw/video_size_errors.py,sha256=NNv18OY4u4ETg-f7tLhHafI3z3cPW8tv1-SIBxYn5bA,4261
65
+ dw/vram_estimate.py,sha256=qJZm7pXM1Jaf2Z_eaGCUpfOc4BEMf8gCPUSMzrNng40,12964
66
+ dw/vram_inheritance.py,sha256=pysQQEF20vXD_poCkCWiZBrsB14Tub1Ar3kAK523oUs,7924
67
+ dw/worker.py,sha256=reNPcwDjMJDOsUCGKlR-ztj3AqNOjDuO7OqDIAKNhXo,33126
68
+ dw/workflow.py,sha256=kDPToPInAYp1BhyoziHrQbzo6051pUx5Li6htjPNPFc,101301
69
+ dw/workflow_schema.json,sha256=WKy1FoHAvRixE8O0OXLYrgt5sn1kXz9LnryOZUfKJas,70831
70
+ dw/workflow_sources.py,sha256=-V0WZCj7xbCMB_W7eHi0AD-u2CwWX50d9CwGJ_jIT0w,15503
71
+ dw/workspace.py,sha256=bt0fNBEVM_xGfZcOpNZaPOs2uUI_25AeKvZypYbwnz4,27742
59
72
  dw/community_pipelines/pipeline_flux_rf_inversion.py,sha256=XjLO58h5wQn16qP8wEIZKg2Y46mxzQ8qkUu29iQnrrA,50587
60
- dw/docs/ACCELERATION.md,sha256=GRuHixscBx9MkZ_H28xw-5bQ0_MHC460OoCdMaxF9V4,17956
61
- dw/docs/AGENT_LOOP.md,sha256=_ZPutZ9SeQVrB_tkASxUgHGoDk0uDhSGDmlF02rW_4k,4321
62
- dw/docs/DEPENDENCIES.md,sha256=eSlXi8shTxRQGkMHNRW9uQ2paf4-oX43eGqfE_81iWQ,3995
73
+ dw/docs/ACCELERATION.md,sha256=cXEEh1Gl4_lkjpELuVNx-ak5oJTTuEiBr6EvlMAkmDg,19453
74
+ dw/docs/AGENT_LOOP.md,sha256=rMb_c_r2ucsB7djwtQdp9_VVRagvhevWo-Iep7emmS8,4729
75
+ dw/docs/DEPENDENCIES.md,sha256=hDN-vnMds6CjCB2c9fsXN9QWm74xQFA_SzbYpez2A3Q,4140
63
76
  dw/docs/IP_ADAPTER.md,sha256=AAHaUIfbnOojHfT0noIeypbhdYPluR7sbZeVn5FpbjU,3730
64
77
  dw/docs/LORAS.md,sha256=iyvoRmFJ94cdxYPMp6_jdIRRjCVpnfN2jwr2iQJPq6c,3605
65
- dw/docs/MCP.md,sha256=yjrbyb9T78oYGKbbOw__HwkB_vQpvoamO1D0PpiBJmI,50800
78
+ dw/docs/MCP.md,sha256=iXsdHxec1hkk9h4mZKxwOktA3QumPUaAbY-uYWhKCp0,54181
66
79
  dw/docs/PROMPT_WEIGHTING.md,sha256=Pvr25d3yvS8SlnYwX9qc61VvTa8yFMxK_1zMLvrEigI,3031
67
80
  dw/docs/QUANTIZATION.md,sha256=NZCL-09bDM-JhzV1WqK2JGkL1la8VoH9fie1X39arsE,7678
68
- dw/docs/RECIPES_24GB.md,sha256=TCJjYtl313hxiwykYDPgxfW8S-0fXIBHf6Vh0d25D-M,15218
69
- dw/docs/RELEASING.md,sha256=_6zJQoe-To82tAbxdBq6EYXSJZpx3vw6nbmwpM0gobg,3688
70
- dw/docs/REMOTE.md,sha256=1y1x9_Ob_ZTncG4Jb5q6VDTfp2zTorvCx_H262eDeVw,5291
81
+ dw/docs/RECIPES_24GB.md,sha256=Iy-XBx61HuTmEal6Mai7tBG-T98aVWgLS3HS_dcpAjI,15821
82
+ dw/docs/RELEASING.md,sha256=JrV7VRchCt8pJw5EEHF1aXQG5IGktKWrtfl3p2SpVP0,16968
83
+ dw/docs/REMOTE.md,sha256=1TVGxTbLjIg5RpkoxpASSncZW_E7_llDu6zPLarkDbg,6389
71
84
  dw/docs/REPL_COMMANDS.md,sha256=6xSiFOJZjb2Ry9B2ao1xo991XE0iI3ArlhCdC6yz5zM,4554
72
85
  dw/docs/REPL_WORKER_GUIDE.md,sha256=tvNzt339fX_XGjD3IhBuF2jTmdS0dWLswdwa9sHu6ag,2418
73
- dw/docs/SECURITY.md,sha256=P_szJ1dpWrhz1aKl-dPTmiCYyRx7RzcfGArRQWquQLU,13643
86
+ dw/docs/SECURITY.md,sha256=q4p9qlwuhqnGRczt7iTRD5P-lHonfix2wImLOfWEYfs,17674
74
87
  dw/docs/SECURITY_QUICKREF.md,sha256=-xZNIV6j1oWcoy5B-oHKqh3ko2zJgB2fuNMiDV4f1zY,3537
75
- dw/docs/SERVER.md,sha256=9ORgFHZyZXfGjR9SvDhCxLnAfvBumznKudQlWeFzdKw,48333
76
- dw/docs/TASKS.md,sha256=Z9K1b2XmlfZoIUyBGfO0KX6UQp9n2NALUsBDqxrjYTU,74213
77
- dw/docs/TESTING.md,sha256=8rffuyYjtnSF9H0E-snFd5OfYgQJeNTk9e6iH9JKE64,3514
78
- dw/docs/WORKFLOW_GUIDE.md,sha256=6tAJesWUaNriBoW6ERHeDk4m5M0y2D5PF7gPxu9k8aA,90804
88
+ dw/docs/SERVER.md,sha256=yPB51QZHEgdJCL92CAjzFIdJ1gibAYB8MDBH3XN8sQs,49340
89
+ dw/docs/TASKS.md,sha256=5-FgDK3-adIbN4TdihNr3KFzR_QmeSxPKT657odXRCc,94128
90
+ dw/docs/TESTING.md,sha256=sX1ZuXz0SDUydmktyZpAkz8zyPJeq8uIh9cd-vDqoSk,3534
91
+ dw/docs/WORKFLOW_GUIDE.md,sha256=1JGa8_OiMDKHBNSGc3nBZaT7yL42aCmTT8MDaLJVTYE,104667
79
92
  dw/docs/WORKSPACES.md,sha256=KpurdsEzQkVsK9thQhsyXSnzsgMXJZuVRtL7Ph_lB-w,15408
80
- dw/pipeline_processors/chain.py,sha256=OzCwX77xnuHx5wuv7RnjwJ5MjLz7A7dmnkb3V_tTKMI,29497
81
- dw/pipeline_processors/config_objects.py,sha256=Rrd3urLkZ_CVk9xkzpxRcEFIBw9TaG_yrSSlcWguiW0,8626
82
- dw/pipeline_processors/pipeline.py,sha256=bsCWte0WUEQz8lhzI-p5VxGc8aXVqk4QYdqKU_-JutE,98688
93
+ dw/pipeline_processors/chain.py,sha256=vjVrGCMTboP0atS0_5eQOT-E189oo-3QRIiLEBcIm7Y,31624
94
+ dw/pipeline_processors/config_objects.py,sha256=nQYKx00544UzJFlEZ-th45b-8sav1hz3tKJaaBDNJns,10911
95
+ dw/pipeline_processors/pipeline.py,sha256=xCDskjimgYFr0sJ9qY6IEjxAchhMTobt7ZxF-MJUdMM,101863
83
96
  dw/pipeline_processors/remote.py,sha256=detYlnjIGEI5q4YJTSF59Qq10Rd99c0QkQCVUUHC6yI,1654
84
97
  dw/server/__init__.py,sha256=NGXV8LM6oYUZhEwWSDo3ihBvmzrC71az3Wc2gkGodcM,153
85
- dw/server/app.py,sha256=AxsRw0SqcVarQjuk-0ZqJAfT5Lo0IxenDQYopCakZWE,185287
98
+ dw/server/app.py,sha256=awYCYhJGB2Nv_tiI-BKE_eu0N1eu9iIKNhdDFL0S6ZA,210289
99
+ dw/server/assess.py,sha256=2mPf68FTgkCkxeFqNd6WMrhAQhBeDSCaZyJglqKkLwg,4757
86
100
  dw/server/catalog_shape.py,sha256=RJhr9tDtU87_R_5QWyhKQsfNP-l4WMZLTQae11O6Df4,17937
87
101
  dw/server/enhancers.py,sha256=ltw3WJ1__S67STescHGHPEUXGvADHo3Y9k4KGyAarDE,4636
88
- dw/server/exports.py,sha256=lzvA5UeFgOHI3q_sRMWzbDlzEjJMcN0RmkEgj4FNL4o,16319
89
- dw/server/guides.py,sha256=xUbh8PWT6ItOAfw9spWTckrtJwbrw6PXmGAo8ENPXHc,9881
90
- dw/server/jobs.py,sha256=jqNkc6SRU-nNL9mHy-JQSO6DEG6v6fqtUtprEoEe0mM,69272
102
+ dw/server/exports.py,sha256=8tWVXzcUmie5hmbnVMPGDB8d1gyDRZ5ASAJmzDHv8F4,16649
103
+ dw/server/guides.py,sha256=FhgNGR1Jkr4vwTXSCu-1Dt26Kiw4NzyndZnQ06jsUOc,11986
104
+ dw/server/jobs.py,sha256=m0S-XUS2B9uaW93LP7_2xTOsQ5Drt0PcnZjvojqUHTc,71651
91
105
  dw/server/mcp_mount.py,sha256=zwjucRm5Gq7QWAUyJDMYCNnBzqfj4VgvcAwfOIUMd1c,3794
92
106
  dw/server/netinfo.py,sha256=yGu1pZrAf0V8xSyhEkKUibDsJSQ-nWg-hDMezHg8YV0,4480
93
- dw/server/observed_cost.py,sha256=3bB2XCdSyKzj4YFG16m1YNOrQKhBuTf8it4Y5-pFjCo,14715
107
+ dw/server/observed_cost.py,sha256=Tq4aepqZoAl_tmVVLVI2NY63_FkPMEdPZ3fL7MfLUQQ,15970
94
108
  dw/server/sysinfo.py,sha256=WiQeSpMNiIDOadcpYiyYTQSPQgPZc7qPvLSXx2WQHLA,2221
95
109
  dw/server/updater.py,sha256=RYFcjd-oFcZxGC20veMPXpazRdN2JLRRsFAL6ON54d8,7191
96
- dw/server/ui/index.html,sha256=xy-xofnM3uPuRELETtGHcPBX4aQAZNvooyHSa4ao4Yo,826
110
+ dw/server/ui/index.html,sha256=3y8g6_-kkLVk6ibPPVQO1ejKjubBYC0j3IrUIIAtk8M,826
97
111
  dw/server/ui/assets/abap-08VXUWAP.js,sha256=v_s2iGszAEBUjgmnxo-oLx1BQTQAjswxiNzZ24fNZ3o,11690
98
112
  dw/server/ui/assets/apex-BWPQTe0t.js,sha256=eUu2JicJ0pjmMYETgWVVuzFEJeyxEfievljL436Mt3Q,3469
99
113
  dw/server/ui/assets/azcli-Bc_sGQ0U.js,sha256=LDRk2Ih2wJsTBkEl5yiESmbLMeMCGuNGu5aDZxaZzRA,707
@@ -108,45 +122,45 @@ dw/server/ui/assets/csharp-BKxtCVv1.js,sha256=tcK0xVr_gQziNy8CVDw-kMQEwehIe9ND34
108
122
  dw/server/ui/assets/csp-bTuwJoIa.js,sha256=pUYDwODPsXKr4shrxhfRg0_WRY3TLT8f5omX7nYPw7Y,1278
109
123
  dw/server/ui/assets/css-DIMkf-bt.js,sha256=Nhs17Txzlhf5DumZtrz-bnBHwdMMUt9YQBxQSG9f2OQ,4361
110
124
  dw/server/ui/assets/css.worker-B3ciXF_0.js,sha256=jLdCIshnrz3ctEpiWtKJNf9w21WMelZDM8zmm0iefQQ,1074885
111
- dw/server/ui/assets/cssMode-xQCqMuag.js,sha256=69FksbP7lGMgX3Y1Gdf9pNevRlPaBTaOkphFW6tTpj8,2952
125
+ dw/server/ui/assets/cssMode-DRY1oIAQ.js,sha256=kYLwriRWKOP6M64WPCZ804oaTtGfNUGcqcClZqwy3AY,2952
112
126
  dw/server/ui/assets/cypher-CVaqCwHa.js,sha256=AYGtVhyMHJdRbOwpGLEfAPAyHAdwXc3J0D_mjN4oLVg,3048
113
127
  dw/server/ui/assets/dart-onAF5SnQ.js,sha256=QWSf47NMFu2yUd9XFSGEuisDrfcp-gvscx9WznuMY2w,3931
114
128
  dw/server/ui/assets/dockerfile-DZFCIeNp.js,sha256=hIFKl4QSK6zsn49CP3KacmKpiovwWnTZleepql5VAHo,1728
115
129
  dw/server/ui/assets/ecl-D05T4iGw.js,sha256=8dy8B-9clhaDibzPszzXjx7c9Zj0t2pUw19rgIOlAkM,4623
116
130
  dw/server/ui/assets/editor-jjEx9u7D.css,sha256=_dx8DZIGYqrSRp3hzX8InPqLbXi0KhgcLcmjFs4irOk,79503
117
- dw/server/ui/assets/editor.api-Bfiq9hmW.js,sha256=qMJsfKE1FKBG0MpVwBEbB5s4MmCuM6ObQx3VTvPY1B8,2654127
131
+ dw/server/ui/assets/editor.api-C_Q9knYh.js,sha256=XAwPuKmkq_7OaKSktyA9jEQE6I05ZMStuLuvYHI-Vio,2654127
118
132
  dw/server/ui/assets/editor.worker-q-txB4vs.js,sha256=--zE19Q9FbnLa1zNtUTy3y5oghXcyHADfB2cwmvmifo,300378
119
133
  dw/server/ui/assets/elixir-6RTg0lbw.js,sha256=_AM20WhJvweAHmfSKZJwEaIeLg71t8jkSUJgRVz5P0w,10116
120
134
  dw/server/ui/assets/flow9-C5_-GSwl.js,sha256=kUYiOodGRTZ6qJ5xielY8Ku5yBXlsEOb9kxSY4Fajb0,1669
121
- dw/server/ui/assets/freemarker2-BwDnlSuz.js,sha256=zkLtFed-ZTHDU1oMGZ-OR8NoA3mUbrpcJZb3X33nyRc,15548
135
+ dw/server/ui/assets/freemarker2-CoeF3Y-p.js,sha256=gWQJDf4NYlCMeKSlIIC1v65LoXMaMvuXWKA-J047Xuk,15548
122
136
  dw/server/ui/assets/fsharp-C8Ef5oNN.js,sha256=UTeoJ7rvyxEcL_h0e74Hkkyfnqjz1KegentufCX2nkU,2651
123
137
  dw/server/ui/assets/go-C-y9NEjX.js,sha256=yiNuAvOl-CJdg1l7tlsDbqjKrl95VJ6jchO7KXm8sIU,2350
124
138
  dw/server/ui/assets/graphql-fmXr3nnJ.js,sha256=pm47jqz4rUAXQDgl98x5ePvvxf0fgOpsBE-AWYSMUYY,2119
125
- dw/server/ui/assets/handlebars-Beb1we4G.js,sha256=fpijFriWD5A0ivL8AJNU8mqCVWQbp9Y9DzFlvOLyKW8,6284
139
+ dw/server/ui/assets/handlebars-ClJeebFA.js,sha256=nFgKNHwjHZ98HBanLfJ-cRI0XUPYAMy4-B7Uu7TtZ5o,6284
126
140
  dw/server/ui/assets/hcl-CpzslTdj.js,sha256=FTELtvUdJnCIa6x3jYwjNRaXvSqDk7_x4SlTYehMmdI,3449
127
- dw/server/ui/assets/html-Yw-qdTCH.js,sha256=j-j047csuPpmlZssAq6SGahvPdLBeb6ABp50SuOA1Yk,4516
141
+ dw/server/ui/assets/html-Bp7ECOGB.js,sha256=mnsf9WyYkxGbUWgd6ytWiXw-4n5wrmUGOQXEWKlOX08,4516
128
142
  dw/server/ui/assets/html.worker-C93Ht9o9.js,sha256=8peg8haNK5qh51eN0fJ5PyFESQPNNUoyaGlSzaIa7l4,739943
129
- dw/server/ui/assets/htmlMode-Dbp7eBPO.js,sha256=TopthoSCkTerIPdQi8Dn7Y5E8F8RFFRHJ1vc5oRuiOE,3406
130
- dw/server/ui/assets/index-CsXMC8a8.css,sha256=KwkM1vxamWli-BsWJVQzJpImOv_r2gTORttRqMDItfM,73229
131
- dw/server/ui/assets/index-DqbiZNFq.js,sha256=v-UvFQLCp9R2DHDSvBWHUs1P_nqajP0uKlftEGf88cM,318793
143
+ dw/server/ui/assets/htmlMode-DWzbYXCs.js,sha256=2sz6aJXJwVHu3xOa_X5gDFAsxqgwXLghMBDKNnnDdwk,3406
144
+ dw/server/ui/assets/index-3Vw6WAPW.css,sha256=pbXkt_MDKZH1CVgAn-RbKW4Oxxcb9uJskXQxmFn0gRU,73445
145
+ dw/server/ui/assets/index-Bv4OgazC.js,sha256=LkNLKwrQzYZH_iAFwwoZ2hnva5NJUdSU6TyTVrkLvAI,319889
132
146
  dw/server/ui/assets/ini-sBoK_t0W.js,sha256=6QF6Fp68pxwu26PuYuAa5XlpwDMMopXB8gHj4XgppU4,960
133
147
  dw/server/ui/assets/java-BEtHBSE6.js,sha256=d9OpHur1TgBPjsMh5iCK_s6-JDUjIUa0H2gTU3OACVM,2906
134
- dw/server/ui/assets/javascript-BNzP7yQZ.js,sha256=G440BG5kmf1pLYpZEdSERSIgCCKor19IqnMGh4MhQw8,688
148
+ dw/server/ui/assets/javascript-B6Cbtyg8.js,sha256=lOj9abqRGdA7X4WrbZ2RywfmTDx8286vzqugvcewPw0,688
135
149
  dw/server/ui/assets/json.worker-B2V3pomh.js,sha256=4L2BlNu1xxbbzYuRRF1xDkui9bTCbXusXbJlZ5XonDc,429596
136
- dw/server/ui/assets/jsonMode-DxIEESAg.js,sha256=zObfSBIbiefnVNSexpBjKV3jq9CTRQUdFMir3mHi5qE,12181
150
+ dw/server/ui/assets/jsonMode-dg5n9059.js,sha256=Lvb8hc6x769ojM4iP-LiEfm1BDReOBofyeKEyCRPkpI,12181
137
151
  dw/server/ui/assets/julia-Bri6UV-V.js,sha256=GgHfKwkibx83YYASauJxey9COaeCnDC0-FO9DI5h1ww,6505
138
152
  dw/server/ui/assets/kotlin-BOotOW0E.js,sha256=y9kKjKTUCkkgIf0XZrn0aW0M28yZaabvrArNjMhi9kM,3041
139
153
  dw/server/ui/assets/less-B9JPFI3C.js,sha256=RK-lDgNqYLUdnolGcFtj5W5Nhdj2rhAQjegLMStkLbw,3749
140
154
  dw/server/ui/assets/lexon-CfSJPG6W.js,sha256=3wceYal1Tl_3oIKlurT29e46CCwlH0DYXRxHyki6aAc,2288
141
- dw/server/ui/assets/liquid-CeQTai1N.js,sha256=2qqgrfOGki4pZU_UonDuY41K_pWADKMx_WBSwahE8MM,3344
142
- dw/server/ui/assets/lspLanguageFeatures-DKVB_UCB.js,sha256=m3c5Bm5r8ALB5dawm49EdKZXSMgV5fNDKMlYp3O26L0,28232
155
+ dw/server/ui/assets/liquid-CAyPEpMs.js,sha256=reZgI9BJ-uxwH1VRSu_7MshWKiKLtodlPJJNS0Zj0b8,3344
156
+ dw/server/ui/assets/lspLanguageFeatures-BGj-zQOH.js,sha256=UBhDjb1sDCPbGkS1sCFhcejFWHA0BFNeEuhXzKRt1nA,28232
143
157
  dw/server/ui/assets/lua-CsQS60Ue.js,sha256=T68zBfv8YbWQOUMOoKDHlS6ZLXQbvUoVzIqjfdKaN80,1982
144
158
  dw/server/ui/assets/m3-D-oSqn_W.js,sha256=wiQpsc-ejuU-Nd_N1EEku70GvFxCKR2enx_4FMaLERU,2520
145
159
  dw/server/ui/assets/markdown-Cimd5fb3.js,sha256=Yh5RI0xP6paio6bg3VkVHxwCFtfLSpYzYe4pqjAseXc,3639
146
- dw/server/ui/assets/mdx-Bczl_PHr.js,sha256=tlJK5EJ4Z6Rj0XViBNj05hdWouPdM1PGTI3Jg4maTxY,4319
160
+ dw/server/ui/assets/mdx-B5EuIkzP.js,sha256=rb3tklGXkzhGaAFWDpuSc3szOSio-LCUu3AGyw9KL-s,4319
147
161
  dw/server/ui/assets/mips-CIPQ_RoX.js,sha256=Mf9nhH4UiNv4cOxx9GbzZEwcanALyeX1nqZyeDVwn-8,2325
148
162
  dw/server/ui/assets/monaco--ixms01u.css,sha256=kpYA88tuYJq8DuCa0gtgkNNGbd7cIKcfHgzkZ6FFLYQ,82320
149
- dw/server/ui/assets/monaco-Bu2OB6wI.js,sha256=WedZVUpmMa3mapIZ-3xWCSopHxGaTdzjsMl2_DY1F78,1268717
163
+ dw/server/ui/assets/monaco-ULLHC90E.js,sha256=ol4Bfbt6kY7z50xEVFF7OHr_r2uAHqMySor8ChG-U84,1268717
150
164
  dw/server/ui/assets/msdax-DauUninz.js,sha256=x-Ec1FvZQfNyIBufG3aF-nbhjtWWCb4trNEl2w7mORU,4270
151
165
  dw/server/ui/assets/mysql-SOo6toE5.js,sha256=s0175vipA9oId7yWxl-u4jDQp6cAD1LlzIlQ94knUzE,9659
152
166
  dw/server/ui/assets/objective-c-FvmIjYaQ.js,sha256=-06rJpDcN7p7YZ4HQ2hFDtAr48MLT-x4ITThLRR0pXM,2102
@@ -161,10 +175,10 @@ dw/server/ui/assets/powerquery-D3hlyOfw.js,sha256=h7-yZyeDYpf8Vz7I-o-AdOXL673EDo
161
175
  dw/server/ui/assets/powershell-DmHpPYUd.js,sha256=fS-k4myYtbJ7I-nT4AOE2xWBU6BC4yBTsO8utRI2kYA,3057
162
176
  dw/server/ui/assets/protobuf-C531GsRP.js,sha256=CE2QZMYH5tuK5qacJhFCN5Egq0ldACCn8ZMy7drCA_A,8897
163
177
  dw/server/ui/assets/pug-Z5eAx3Zn.js,sha256=3W_Q5pw42PShvXTeZmdid5YpzS29ZEKItG3NbMZkZIY,4468
164
- dw/server/ui/assets/python-CeTsj82v.js,sha256=9m9qCCoCQSowVkOtkem51ygXlB9g_TGNoyMVL42XqeI,3455
178
+ dw/server/ui/assets/python-C5D4i8ni.js,sha256=6ON4BE-tprCG9vNIyrequvHMM_0jZK1DThEmiq6eREw,3455
165
179
  dw/server/ui/assets/qsharp-DkqhCAOL.js,sha256=72cTeKiuU6qRxzI9j4KVb-r2y5u7Yj9O-DppqJMrsw8,2722
166
180
  dw/server/ui/assets/r-BwWrilGY.js,sha256=kjvwR-197La6WrPfRntvc5VS4GcVs7SVUIcq5brgDh4,2836
167
- dw/server/ui/assets/razor-CN7JaWqc.js,sha256=tvw5iu4X9DqM58kZuRNJ6tFHx3lsA6IhUHyXOxhHLjE,8113
181
+ dw/server/ui/assets/razor-DL9EVLH-.js,sha256=eblWXYlO6N36VlTzb_A2gkWGrdbZlK8lsxrtgHGXikU,8113
168
182
  dw/server/ui/assets/redis-ClamHrr6.js,sha256=P6KIG5bJRWvmyPzG14QO5RZJlmj49pzn-p4hDqSFQ5M,3032
169
183
  dw/server/ui/assets/redshift-DT7zqm-g.js,sha256=PmLS8mPeeCIWu-NLw1SMU7nZp94WvW7aqKAG7TbJv3c,10331
170
184
  dw/server/ui/assets/restructuredtext-BYgofb2h.js,sha256=UmiK7-mgglvXYqrOt4NCdx4oKNNoHilj1XfmVkRw7mA,3744
@@ -184,64 +198,67 @@ dw/server/ui/assets/swift-Bxkupp3x.js,sha256=PAoUaoj9w0C1Q8tOfBsDefytIxzaJLYxXo8
184
198
  dw/server/ui/assets/systemverilog-Bz4Y3fRF.js,sha256=N8BJdmDPdAS3YSLf9-c6WjpeHiC8AUiPFC0b83QRu84,6850
185
199
  dw/server/ui/assets/tcl-DISqw1ZD.js,sha256=tGDwrjRxtiwzHBQVX4aYHPx2tvnzyCbsk3MouRN8nGI,3271
186
200
  dw/server/ui/assets/ts.worker-D7T1-Ig5.js,sha256=l5VlUGJBtGJhrRtzAlbC7iInUtA13foqlGA2sWIgvzE,6913951
187
- dw/server/ui/assets/tsMode-CoSEMx-L.js,sha256=KYVdrNXczzY1Vy2FFMrVpuIFMaQqRb7jq6Qi7Owqiq8,21859
201
+ dw/server/ui/assets/tsMode-BtDRLqfW.js,sha256=MsA8bAsGsg0jF4XEYZ4d4h_aAFUHNOZNxfQH8nf3pqo,21859
188
202
  dw/server/ui/assets/twig-De2hgUGE.js,sha256=7UK-mZY0t2AOG2upJFdhUfk_hN4jQxNO37xW_pXsYRk,5781
189
- dw/server/ui/assets/typescript-CcsolRTO.js,sha256=FPvBIQ30Owh91jYdAGhxGv9UaggUKitJr19YxvwMukk,4675
203
+ dw/server/ui/assets/typescript-DYpkXm7y.js,sha256=Xpgwm29RopRE4XVF1A3PLK4wFckykYTXjmhfUceoC3A,4675
190
204
  dw/server/ui/assets/typespec-B8J7ngcE.js,sha256=4SiWGtYCn-n7DAFoQw3hFbXpXOEzUIVgPrFnMxeDL0A,2625
191
205
  dw/server/ui/assets/vb-DV3o63ZY.js,sha256=g6FxShoSupLTGxKrGHUt31pO6FoCrY9npMMQpnSqtsM,5300
192
206
  dw/server/ui/assets/wgsl-DpFanUEy.js,sha256=M1uSecn4lmt1G3mQyTCdxT4mfHC4g3AjJAw7cuUwAg4,7182
193
- dw/server/ui/assets/workers-DLaycdy4.js,sha256=Sk_0S6HKOob7E6vM7z7nJ4iQrBU6w2myuEsJaJ0pVrk,1249
194
- dw/server/ui/assets/xml-QEwuyn1w.js,sha256=UH3iy8-_EA2EQioI9ID-otjEsvgZarJWeVB4quUiUK0,1923
195
- dw/server/ui/assets/yaml-BB4U5D-R.js,sha256=puFfC3-tn_SowXyT2LPmc84itghdSMyFtOj-coixk0Q,3543
196
- dw/tasks/audio_transcription.py,sha256=tDxniE2GTSmVmM-c_18Dqnjvk-eFq_hFiFrOTZecik4,3056
197
- dw/tasks/audio_utils.py,sha256=qD4FDuD7bd2gSHawS9pekWML7MMvww_WyLoH1QI-SRA,70453
207
+ dw/server/ui/assets/workers-B4R84wCs.js,sha256=XFbpHgJMfAVaUM_oVY9srSsVZvKjdPzDw-aI8ZKkd9M,1249
208
+ dw/server/ui/assets/xml-CQNiPADm.js,sha256=B5HM0FIm2EUkeIJZdqUF4I97dRNAfCvBddmb05PUeDY,1923
209
+ dw/server/ui/assets/yaml-iWBPUkB-.js,sha256=XU8kMGgjdHBM3kh6d3ydbLN191AOl9EnTceE4UE2Zm8,3543
210
+ dw/tasks/assess.py,sha256=b4MAIAxBVpCVKY1SSJmvZ4cLoxdwVFauWWFDItHfP8w,33813
211
+ dw/tasks/audio_transcription.py,sha256=GICLXPcY0XAg9WkQZmjYwF42Yeus-_GmGCHqlgiHZ-o,5196
212
+ dw/tasks/audio_utils.py,sha256=os7943Q-oiOR8beTKd_cSVZQ7-ISvtMm0_wBjferYl8,93241
198
213
  dw/tasks/background_remover.py,sha256=lwRMBo1VALLVWwUQUOs-5EWtAvOKZOlrVwoAr6jrStQ,1205
199
214
  dw/tasks/borders.py,sha256=ZFnvODeLnF4nMMogOAZKEKHPMM7qebW1A4GaZFyDKmI,4253
200
215
  dw/tasks/compose_text.py,sha256=UeY_43VQ4k6eoT0wdqeVIqSBy1EqYUkuqmL719flhu8,3127
201
- dw/tasks/concat_videos.py,sha256=eR-Vb1ffxx49LzXB00L-WvrfoTubNGrQeVXRjXJyXeI,10476
216
+ dw/tasks/concat_videos.py,sha256=wMNeZY11X6qyUJUjhA92Pt8YFraLnfYBj4XUiD6Lh60,14124
202
217
  dw/tasks/depth_estimator.py,sha256=uVsMueg6pZy-1NA_uY5PRMezl9jyUbSYmyQaV8o8sHY,1704
203
218
  dw/tasks/diffusion_upscale.py,sha256=7kSkXaQZ9Ng93xizAksmOZbXgGVPCgDN8PgLqOlCOiA,3416
204
- dw/tasks/dissolve_videos.py,sha256=scXQ6bYZygFdxBP147WC7T6TUUvRuUBFglkQiLwxnNo,9122
219
+ dw/tasks/dissolve_videos.py,sha256=Xjkv4gQjgpzAoe_QHnLD-0N_UzpxSjqyU1Rka0efV0k,14639
205
220
  dw/tasks/format_messages.py,sha256=LHEFWaIS0GsL0Dm7KGG_MfwlKO9gB62zWf3egxxDZwE,630
206
- dw/tasks/gather.py,sha256=w-N2kRNLeCQiYGfrxDsBBf1SS5Da35wWWxuaLbheUuE,5739
221
+ dw/tasks/gather.py,sha256=ZG0SCMThJUl2snaO_LiXKvs8OPz0Jz52B_qfTjv--10,5928
222
+ dw/tasks/grade.py,sha256=QVVaENcgvABJdaS5kAoH5SUhdJ3PEsaQvbRSn5dZlZw,3808
207
223
  dw/tasks/image_to_text.py,sha256=iNza67G5h24y6GIs22mCyLOFgqsAOfz9hf88jBn16iY,1616
208
- dw/tasks/image_utils.py,sha256=ucQCxnSewE3-SM5h-sS97AnXJz4qQoeXHJTRnfkSFzQ,23507
209
- dw/tasks/interpolate_frames.py,sha256=1q-TlnfvUh1f5m2hc6YLoHuI_gJITctPIbFQ_42oPlc,8989
224
+ dw/tasks/image_utils.py,sha256=--BiZmFm9MIhT_V2wHmqq4sbUrD14K0GW9SY1KWBbDA,25394
225
+ dw/tasks/interpolate_frames.py,sha256=dNiUlBMQbj6D4V10gGHVwE7_30xvTv-JkgN_6fySM8M,9267
210
226
  dw/tasks/judge.py,sha256=fdT6a20x66tCCP37d2NnVFrZAPiuhduuBvg_bsAdtSg,2312
211
227
  dw/tasks/model_cache.py,sha256=Bh97x5mFFFzT8M8_LiHo0a1izsaIqvsQyIURPkjKxTk,1879
212
- dw/tasks/pair_audio.py,sha256=okB4B16tRJK1EuXJqD6bFPw5oTEgftiIiO-HM_H7YOI,8378
228
+ dw/tasks/pair_audio.py,sha256=4ROiyyAHfJtRRyYkWomjM-HDj_mpPc8Sf4W8U4hjbd0,14006
213
229
  dw/tasks/qr_code.py,sha256=xyckWTixcMYasJPI5N7-co4jmyHwfScGWD2D1RbFzuM,548
214
230
  dw/tasks/restore_faces.py,sha256=4DH7vKoCqQVaGXGG_Utvizq60ravlnHp9lbOuxX9930,6442
215
231
  dw/tasks/rife_model.py,sha256=eO77oSH4OGY5pXBp6UDaXIDbGPlOHPIiXMrf1RMzYjo,6387
216
- dw/tasks/segment.py,sha256=yMZzQ61UacAt07YKtQprJzkt8RjhQRdeXTNqicPreJo,3714
232
+ dw/tasks/segment.py,sha256=2g-jndKDlIcVMH4OApWNlWzt-8DzQvhK82_TNMSXoTI,4267
217
233
  dw/tasks/select.py,sha256=jbMnb1tPvARRxwyl0k56tb_FM6BE2dMzycCpte7A1qo,4128
218
234
  dw/tasks/speech_generation.py,sha256=nyziwq1s4TmvAN7Ls19BbszFfE2Et47MInKuTu-05x4,10715
219
- dw/tasks/stabilize.py,sha256=03sJWSosIcyMKeNgB5-lWxwJDN4SpL2297NxijTC0Zw,4810
220
- dw/tasks/task.py,sha256=hfeWKhRSmkb9cUIQZZbJqLEEISTVWC7aokBmMBUtEMo,29533
235
+ dw/tasks/stabilize.py,sha256=u48u_tXR4K3uf_WbnFsJJEdz8nNTQzjpJlJ0uQMuccI,5013
236
+ dw/tasks/task.py,sha256=hI27YBCle8m3UNPfNb--9XsxVklNQsSogGLHK6Uf4is,34876
221
237
  dw/tasks/tensor_image.py,sha256=xJDo5-Bi7drP4LqXgg_qGeEbC8q9-KA84iVJolQURhE,2083
222
238
  dw/tasks/text_generation.py,sha256=KeqXCYFTriMCigFSsm0mtF87ZUhBUCVG4DL4VznTiRI,6997
223
239
  dw/tasks/text_sections.py,sha256=0eE7O0eLQCgxEooO3-RLuQSRwmeFwHttLqwhp71q3Lw,3260
224
240
  dw/tasks/upscale.py,sha256=ginJbVIZBajTdMxejvkP66kn3rpEiTJu9X7_HdbPHuk,6854
225
- dw/tasks/video_utils.py,sha256=eTqLsj3ESVHtXB140Qni6zdOkU6E1dFagNicIXXoQZ8,21450
241
+ dw/tasks/video_utils.py,sha256=wXtbX9gubycmFuZML2SWppLUCSu7iW75meTwVelH8kQ,25332
242
+ dw/tasks/voice_attribution.py,sha256=C5Q01SLSVlU_ybnJvPhnmP-G4jzXaKBmutFroUpT2I4,31188
226
243
  dw/tasks/zoe_depth.py,sha256=s-otGgDA_wIfawzGWhHd9eDtHBiNsNosjCUH3qIr03c,1817
227
244
  dw/workflows/h3_context_ir.json,sha256=nasb5JKFs6bkqYXuTvCyyiGAROBo8N0vDw_X-ec8SYM,13653
228
- dw/workflows/test.json,sha256=4PZ5ksXO9cavzStI_R07HT0BLMAKJQNRJAYJxhDQEVc,936
245
+ dw/workflows/test.json,sha256=XFvEH7_8F8MGoX5b1j0FnT8dJghYiuyukj2q0JSEfkU,937
229
246
  dw_mcp/__init__.py,sha256=dyJEmHMBoLmz0qo0J_tHx-jJSrbl7Ac4pgQr0-mOZSY,223
230
247
  dw_mcp/__main__.py,sha256=yqmbKF1AtJcc-c9Z7ykjOUG0WMee8CgXWMW4nbFzxGg,4366
231
- dw_mcp/assets.py,sha256=B-iZR_oFFWsD1pWiU5PKnp2xgCVdM0j1T1MaHM7etz0,13674
232
- dw_mcp/authoring.py,sha256=D2sD6pt2Gn6TERso66YEn4io3lK-pI8aKVsIMaABUnY,6106
233
- dw_mcp/catalog.py,sha256=K2iaqv-y0ys_rUAVDyTkMhVq2kIBfUFa9CsoYelFOog,12719
234
- dw_mcp/client.py,sha256=mrINLwiyBv2pCzcAFOdb2fnPjWpXa9PBq2CeYdwJwmU,19440
235
- dw_mcp/diagnose.py,sha256=n-cP4dmynhuzk3edIaMhwSyXF8Eg2rV6DdoZOu_ntJs,16883
236
- dw_mcp/exports.py,sha256=wIbXteYLV1mNswcn6z3wwmllLZQUaHMGBJZ9BYvVpWg,2116
237
- dw_mcp/guides.py,sha256=My7Q7t1nOQe6VSnY9tWi85ZH5te6LoLiNqHFua7gE7c,1641
238
- dw_mcp/media.py,sha256=yU_u8pIV-WKeXg1iXEkcExmP6a2l-HgL77hEkWxWHYo,24854
248
+ dw_mcp/assets.py,sha256=xtsp6NOBakls3v9Jxe1MXEpfDvRPxrKsSEmE4ep7NmM,18299
249
+ dw_mcp/authoring.py,sha256=dNYjc1EtqlifozYRI6r1Mr92RThIAlBsOuDiiwGVmQA,6053
250
+ dw_mcp/catalog.py,sha256=OXumcX333r4in9Q9dDRh3y9f1rrlJ05l8Z8S9a8_yg0,16082
251
+ dw_mcp/client.py,sha256=HazcTjCiZ_e3j4VxKs0a8c91oR61fFOy79nAKnAlD30,21027
252
+ dw_mcp/diagnose.py,sha256=xGG_sn-bNOi1XFbXAtxayDL60ITUT3YuRqhxyfKvkGU,17557
253
+ dw_mcp/exports.py,sha256=Txly4-pD_GCcKR0CxvfWAWmhbRrcbUsOcvAdO7dMTps,4137
254
+ dw_mcp/guides.py,sha256=QDvofzCO5FOXTNO5DW82UKqDn2IdvwNEr7rB91fHmxE,1762
255
+ dw_mcp/media.py,sha256=rrwu8pU5cDb_0sYS2-vKSTZ4GDBQos773cYWej8yEmE,27570
239
256
  dw_mcp/models.py,sha256=uzsUY-CgiaP1LZLbdLnVRVXFSK2kcXs_tNquRKM6d9w,4220
240
- dw_mcp/prompts.py,sha256=no8oP7HQq-sUNO7-SXasS5tmXFVoQsCSonXVRSoGYWs,3874
241
- dw_mcp/server.py,sha256=wmSm8urlL8H7Vl4kUhBHni3eAMErCDBjCxlJQxg2U-A,66841
242
- dw_mcp/workspaces.py,sha256=a3WDfqQx8VdbdxAOifjLcuOc0C0WEOSqTFeXZqf9onY,8650
243
- diffusers_workflow-0.4.0b7.dist-info/METADATA,sha256=aN6HQjUSziYfIQKmnS80E8-GfXUJDCwGHmZAWXkA4D8,13288
244
- diffusers_workflow-0.4.0b7.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
245
- diffusers_workflow-0.4.0b7.dist-info/entry_points.txt,sha256=BOZnhV8D4wn_exqgZ1GZmOpz3QSygN-MP0fbbzFwXJo,171
246
- diffusers_workflow-0.4.0b7.dist-info/top_level.txt,sha256=o-uFAN_oUOrhXfMKO39HsMs2r19L9LykxoVKj2S9q7U,10
247
- diffusers_workflow-0.4.0b7.dist-info/RECORD,,
257
+ dw_mcp/prompts.py,sha256=ZgbcATJbWUxHlebt8ssH2PlUc3nBD6rrVLdFLJSo8TM,3944
258
+ dw_mcp/server.py,sha256=JuTNgKq0HzTZn_89Z43kxK0oBZnZqUDmC4nV5ie6_CM,66262
259
+ dw_mcp/workspaces.py,sha256=A8RvsaNkfOWK-3wyDuHxbF4IdTBECJrwaEK4ghu3muQ,8947
260
+ diffusers_workflow-0.5.0.dist-info/METADATA,sha256=tq0G_pwJjnlfLdJw0_uRvPS82U92KoK_6psYmZX3xMY,14383
261
+ diffusers_workflow-0.5.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
262
+ diffusers_workflow-0.5.0.dist-info/entry_points.txt,sha256=BOZnhV8D4wn_exqgZ1GZmOpz3QSygN-MP0fbbzFwXJo,171
263
+ diffusers_workflow-0.5.0.dist-info/top_level.txt,sha256=o-uFAN_oUOrhXfMKO39HsMs2r19L9LykxoVKj2S9q7U,10
264
+ diffusers_workflow-0.5.0.dist-info/RECORD,,
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(