diffusers-workflow 0.4.0b5__tar.gz → 0.4.0b6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (387) hide show
  1. {diffusers_workflow-0.4.0b5/diffusers_workflow.egg-info → diffusers_workflow-0.4.0b6}/PKG-INFO +3 -2
  2. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6/diffusers_workflow.egg-info}/PKG-INFO +3 -2
  3. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/diffusers_workflow.egg-info/SOURCES.txt +42 -21
  4. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/diffusers_workflow.egg-info/requires.txt +2 -1
  5. diffusers_workflow-0.4.0b6/dw/adapter_compatibility.py +226 -0
  6. diffusers_workflow-0.4.0b6/dw/content_types.py +105 -0
  7. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/MCP.md +3 -3
  8. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/RECIPES_24GB.md +14 -3
  9. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/SERVER.md +59 -7
  10. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/WORKFLOW_GUIDE.md +129 -3
  11. diffusers_workflow-0.4.0b6/dw/elision.py +306 -0
  12. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/events.py +86 -2
  13. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/introspection.py +116 -8
  14. diffusers_workflow-0.4.0b6/dw/kernel_availability.py +208 -0
  15. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/pipeline_processors/pipeline.py +138 -0
  16. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/plan.py +93 -3
  17. diffusers_workflow-0.4.0b6/dw/reference_names.py +125 -0
  18. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/result.py +148 -0
  19. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/schema.py +3 -1
  20. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/security.py +83 -5
  21. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/app.py +474 -97
  22. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/catalog_shape.py +74 -2
  23. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/jobs.py +62 -2
  24. diffusers_workflow-0.4.0b6/dw/server/observed_cost.py +335 -0
  25. diffusers_workflow-0.4.0b5/dw/server/ui/assets/cssMode-BQ03gENP.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/cssMode-1t4O7A8b.js +1 -1
  26. diffusers_workflow-0.4.0b5/dw/server/ui/assets/editor.api-CzvLX8mb.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/editor.api-C2mqCHa9.js +1 -1
  27. diffusers_workflow-0.4.0b5/dw/server/ui/assets/freemarker2-C8c7lwsP.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/freemarker2-Cb6RGT42.js +1 -1
  28. diffusers_workflow-0.4.0b5/dw/server/ui/assets/handlebars-7APo_5hD.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/handlebars-LzK4_SEF.js +1 -1
  29. diffusers_workflow-0.4.0b5/dw/server/ui/assets/html-JgrkBemQ.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/html-Biz_qd50.js +1 -1
  30. diffusers_workflow-0.4.0b5/dw/server/ui/assets/htmlMode-BH9VsgGh.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/htmlMode-CP4Kjl0x.js +1 -1
  31. diffusers_workflow-0.4.0b6/dw/server/ui/assets/index-Bt8BlCkf.js +41 -0
  32. diffusers_workflow-0.4.0b6/dw/server/ui/assets/index-D9tEUhx5.css +1 -0
  33. diffusers_workflow-0.4.0b5/dw/server/ui/assets/javascript-BrFJ1H6j.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/javascript-DX4-t0BE.js +1 -1
  34. diffusers_workflow-0.4.0b5/dw/server/ui/assets/jsonMode-C10gRe-2.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/jsonMode-hZa_qOEa.js +1 -1
  35. diffusers_workflow-0.4.0b5/dw/server/ui/assets/liquid-CjfGWTAZ.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/liquid-BRkTuJ_A.js +1 -1
  36. diffusers_workflow-0.4.0b5/dw/server/ui/assets/lspLanguageFeatures-O-lB5SDv.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/lspLanguageFeatures-Dvt5tod9.js +1 -1
  37. diffusers_workflow-0.4.0b5/dw/server/ui/assets/mdx-D7b-hMTY.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/mdx-Bdet7qev.js +1 -1
  38. diffusers_workflow-0.4.0b5/dw/server/ui/assets/monaco-DBnxML20.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/monaco-QRyCMGAv.js +4 -4
  39. diffusers_workflow-0.4.0b5/dw/server/ui/assets/python-NfJjzkPL.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/python-DO0uJyUr.js +1 -1
  40. diffusers_workflow-0.4.0b5/dw/server/ui/assets/razor-CgQtwMBj.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/razor-CkfVe6oz.js +1 -1
  41. diffusers_workflow-0.4.0b5/dw/server/ui/assets/tsMode-BuMW6Qar.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/tsMode-z26QXNyE.js +1 -1
  42. diffusers_workflow-0.4.0b5/dw/server/ui/assets/typescript-Bfmxt754.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/typescript-DIdNc_uc.js +1 -1
  43. diffusers_workflow-0.4.0b5/dw/server/ui/assets/workers-BSu9lD5s.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/workers-Ce8CDVu5.js +1 -1
  44. diffusers_workflow-0.4.0b5/dw/server/ui/assets/xml-BJ2IwGRC.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/xml-Djj2U0Rl.js +1 -1
  45. diffusers_workflow-0.4.0b5/dw/server/ui/assets/yaml-Cq85tEmC.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/yaml-CePLO71e.js +1 -1
  46. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/index.html +2 -2
  47. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/task_domains.py +1 -0
  48. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/audio_utils.py +43 -1
  49. diffusers_workflow-0.4.0b6/dw/tasks/pair_audio.py +181 -0
  50. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/task.py +34 -0
  51. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/video_utils.py +50 -0
  52. diffusers_workflow-0.4.0b6/dw/variable_constraints.py +444 -0
  53. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/worker.py +38 -1
  54. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/workflow.py +172 -3
  55. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/workflow_schema.json +98 -23
  56. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/workspace.py +5 -2
  57. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/assets.py +5 -0
  58. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/authoring.py +28 -7
  59. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/catalog.py +30 -8
  60. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/diagnose.py +27 -11
  61. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/server.py +82 -20
  62. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/pyproject.toml +11 -2
  63. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_audio_utils.py +94 -0
  64. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_catalog_shape.py +1 -0
  65. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_catalog_structure.py +79 -8
  66. diffusers_workflow-0.4.0b6/tests/test_content_types.py +132 -0
  67. diffusers_workflow-0.4.0b6/tests/test_elision.py +499 -0
  68. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_events.py +144 -0
  69. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_examples.py +5 -0
  70. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_for_each.py +15 -2
  71. diffusers_workflow-0.4.0b6/tests/test_h3_adapters.py +195 -0
  72. diffusers_workflow-0.4.0b6/tests/test_h3_schedule.py +152 -0
  73. diffusers_workflow-0.4.0b6/tests/test_job_warnings.py +46 -0
  74. diffusers_workflow-0.4.0b6/tests/test_kernel_availability.py +255 -0
  75. diffusers_workflow-0.4.0b6/tests/test_lora_alpha.py +128 -0
  76. diffusers_workflow-0.4.0b6/tests/test_ltx2_diffusion_decode.py +97 -0
  77. diffusers_workflow-0.4.0b6/tests/test_ltx2_ic_loras.py +166 -0
  78. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_ltx_prompt_library.py +52 -1
  79. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_catalog.py +10 -0
  80. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_server.py +83 -0
  81. diffusers_workflow-0.4.0b6/tests/test_observed_cost.py +594 -0
  82. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_output_references.py +37 -0
  83. diffusers_workflow-0.4.0b6/tests/test_pair_audio_fit.py +149 -0
  84. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_pipeline_caching.py +207 -1
  85. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_pipeline_components.py +68 -0
  86. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_plan.py +153 -0
  87. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_plugin_skills.py +41 -21
  88. diffusers_workflow-0.4.0b6/tests/test_reference_names.py +103 -0
  89. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_result.py +275 -0
  90. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_server.py +301 -3
  91. diffusers_workflow-0.4.0b6/tests/test_server_downloads.py +283 -0
  92. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_server_exports.py +14 -0
  93. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_server_workspaces.py +30 -0
  94. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_task_discovery.py +12 -5
  95. diffusers_workflow-0.4.0b6/tests/test_task_signature_errors.py +146 -0
  96. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_validate_arguments.py +56 -0
  97. diffusers_workflow-0.4.0b6/tests/test_variable_constraints.py +566 -0
  98. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_video_utils.py +52 -1
  99. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_worker_execute.py +61 -4
  100. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_workflow.py +7 -1
  101. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_workflow_step_cache.py +5 -0
  102. diffusers_workflow-0.4.0b5/dw/server/ui/assets/index-B1DfbIuu.js +0 -37
  103. diffusers_workflow-0.4.0b5/dw/server/ui/assets/index-CRVAbEJ9.css +0 -1
  104. diffusers_workflow-0.4.0b5/dw/tasks/pair_audio.py +0 -81
  105. diffusers_workflow-0.4.0b5/tests/test_server_downloads.py +0 -123
  106. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/LICENSE +0 -0
  107. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/MANIFEST.in +0 -0
  108. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/README.md +0 -0
  109. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/diffusers_workflow.egg-info/dependency_links.txt +0 -0
  110. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/diffusers_workflow.egg-info/entry_points.txt +0 -0
  111. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/diffusers_workflow.egg-info/top_level.txt +0 -0
  112. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/__init__.py +0 -0
  113. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/arguments.py +0 -0
  114. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/assets.py +0 -0
  115. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/cache_blocks.json +0 -0
  116. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/cache_blocks.py +0 -0
  117. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/community_pipelines/pipeline_flux_rf_inversion.py +0 -0
  118. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/ACCELERATION.md +0 -0
  119. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/AGENT_LOOP.md +0 -0
  120. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/DEPENDENCIES.md +0 -0
  121. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/IP_ADAPTER.md +0 -0
  122. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/LORAS.md +0 -0
  123. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/PROMPT_WEIGHTING.md +0 -0
  124. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/QUANTIZATION.md +0 -0
  125. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/RELEASING.md +0 -0
  126. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/REMOTE.md +0 -0
  127. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/REPL_COMMANDS.md +0 -0
  128. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/REPL_WORKER_GUIDE.md +0 -0
  129. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/SECURITY.md +0 -0
  130. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/SECURITY_QUICKREF.md +0 -0
  131. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/TASKS.md +0 -0
  132. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/TESTING.md +0 -0
  133. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/WORKSPACES.md +0 -0
  134. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/for_each.py +0 -0
  135. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/host_memory.py +0 -0
  136. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/hub_cache.py +0 -0
  137. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/locations.py +0 -0
  138. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/log_setup.py +0 -0
  139. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/media_info.py +0 -0
  140. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/pipeline_processors/chain.py +0 -0
  141. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/pipeline_processors/config_objects.py +0 -0
  142. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/pipeline_processors/remote.py +0 -0
  143. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/previous_results.py +0 -0
  144. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/prompt_schema.json +0 -0
  145. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/prompt_weighting.py +0 -0
  146. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/prompts.py +0 -0
  147. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/realize.py +0 -0
  148. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/reference_limits.py +0 -0
  149. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/repl.py +0 -0
  150. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/repl_commands.py +0 -0
  151. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/repl_worker.py +0 -0
  152. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/run.py +0 -0
  153. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/runs.py +0 -0
  154. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/serve.py +0 -0
  155. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/__init__.py +0 -0
  156. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/enhancers.py +0 -0
  157. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/exports.py +0 -0
  158. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/guides.py +0 -0
  159. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/mcp_mount.py +0 -0
  160. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/netinfo.py +0 -0
  161. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/abap-08VXUWAP.js +0 -0
  162. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/apex-BWPQTe0t.js +0 -0
  163. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/azcli-Bc_sGQ0U.js +0 -0
  164. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/bat-i0X4ZdIN.js +0 -0
  165. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/bicep-B5-_aFwp.js +0 -0
  166. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/cameligo-DMUM7wLl.js +0 -0
  167. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/clojure-Cm7r79vr.js +0 -0
  168. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/codicon-Brq4_Ui5.ttf +0 -0
  169. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/coffee-Ba7i2nA0.js +0 -0
  170. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/cpp-C7h46wYY.js +0 -0
  171. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/csharp-BKxtCVv1.js +0 -0
  172. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/csp-bTuwJoIa.js +0 -0
  173. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/css-DIMkf-bt.js +0 -0
  174. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/css.worker-B3ciXF_0.js +0 -0
  175. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/cypher-CVaqCwHa.js +0 -0
  176. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/dart-onAF5SnQ.js +0 -0
  177. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/dockerfile-DZFCIeNp.js +0 -0
  178. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/ecl-D05T4iGw.js +0 -0
  179. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/editor-jjEx9u7D.css +0 -0
  180. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/editor.worker-q-txB4vs.js +0 -0
  181. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/elixir-6RTg0lbw.js +0 -0
  182. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/flow9-C5_-GSwl.js +0 -0
  183. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/fsharp-C8Ef5oNN.js +0 -0
  184. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/go-C-y9NEjX.js +0 -0
  185. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/graphql-fmXr3nnJ.js +0 -0
  186. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/hcl-CpzslTdj.js +0 -0
  187. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/html.worker-C93Ht9o9.js +0 -0
  188. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/ini-sBoK_t0W.js +0 -0
  189. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/java-BEtHBSE6.js +0 -0
  190. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/json.worker-B2V3pomh.js +0 -0
  191. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/julia-Bri6UV-V.js +0 -0
  192. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/kotlin-BOotOW0E.js +0 -0
  193. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/less-B9JPFI3C.js +0 -0
  194. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/lexon-CfSJPG6W.js +0 -0
  195. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/lua-CsQS60Ue.js +0 -0
  196. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/m3-D-oSqn_W.js +0 -0
  197. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/markdown-Cimd5fb3.js +0 -0
  198. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/mips-CIPQ_RoX.js +0 -0
  199. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/monaco--ixms01u.css +0 -0
  200. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/msdax-DauUninz.js +0 -0
  201. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/mysql-SOo6toE5.js +0 -0
  202. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/objective-c-FvmIjYaQ.js +0 -0
  203. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/pascal-DrH0SRf2.js +0 -0
  204. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/pascaligo-D-ptJ9y-.js +0 -0
  205. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/perl-oz_6vUea.js +0 -0
  206. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/pgsql-DTj74zXo.js +0 -0
  207. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/php-nr791fC2.js +0 -0
  208. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/pla-CopQ2nXW.js +0 -0
  209. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/postiats-43DmfD33.js +0 -0
  210. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/powerquery-D3hlyOfw.js +0 -0
  211. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/powershell-DmHpPYUd.js +0 -0
  212. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/protobuf-C531GsRP.js +0 -0
  213. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/pug-Z5eAx3Zn.js +0 -0
  214. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/qsharp-DkqhCAOL.js +0 -0
  215. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/r-BwWrilGY.js +0 -0
  216. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/redis-ClamHrr6.js +0 -0
  217. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/redshift-DT7zqm-g.js +0 -0
  218. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/restructuredtext-BYgofb2h.js +0 -0
  219. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/ruby-DezsRK8O.js +0 -0
  220. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/rust-DdL9SqIa.js +0 -0
  221. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/sb-CcwsVR0C.js +0 -0
  222. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/scala-DHpiXF5c.js +0 -0
  223. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/scheme-BeGwcela.js +0 -0
  224. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/scss-gp-XZpBa.js +0 -0
  225. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/shell-CC2rA5mh.js +0 -0
  226. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/solidity-BEEn4gHE.js +0 -0
  227. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/sophia-CRfGWb83.js +0 -0
  228. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/sparql-D_Lu-MrJ.js +0 -0
  229. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/sql-NEE52Syq.js +0 -0
  230. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/st-DbInun42.js +0 -0
  231. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/swift-Bxkupp3x.js +0 -0
  232. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/systemverilog-Bz4Y3fRF.js +0 -0
  233. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/tcl-DISqw1ZD.js +0 -0
  234. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/ts.worker-D7T1-Ig5.js +0 -0
  235. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/twig-De2hgUGE.js +0 -0
  236. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/typespec-B8J7ngcE.js +0 -0
  237. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/vb-DV3o63ZY.js +0 -0
  238. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/wgsl-DpFanUEy.js +0 -0
  239. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/updater.py +0 -0
  240. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/settings.py +0 -0
  241. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/step.py +0 -0
  242. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/step_cache.py +0 -0
  243. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/subfolders.py +0 -0
  244. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/background_remover.py +0 -0
  245. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/borders.py +0 -0
  246. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/compose_text.py +0 -0
  247. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/concat_videos.py +0 -0
  248. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/depth_estimator.py +0 -0
  249. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/diffusion_upscale.py +0 -0
  250. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/dissolve_videos.py +0 -0
  251. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/format_messages.py +0 -0
  252. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/gather.py +0 -0
  253. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/image_to_text.py +0 -0
  254. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/image_utils.py +0 -0
  255. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/interpolate_frames.py +0 -0
  256. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/model_cache.py +0 -0
  257. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/qr_code.py +0 -0
  258. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/restore_faces.py +0 -0
  259. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/rife_model.py +0 -0
  260. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/segment.py +0 -0
  261. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/speech_generation.py +0 -0
  262. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/stabilize.py +0 -0
  263. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/tensor_image.py +0 -0
  264. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/text_generation.py +0 -0
  265. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/text_sections.py +0 -0
  266. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/upscale.py +0 -0
  267. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/zoe_depth.py +0 -0
  268. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/teacache.py +0 -0
  269. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/teacache_models.json +0 -0
  270. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/test.py +0 -0
  271. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/type_helpers.py +0 -0
  272. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/validate.py +0 -0
  273. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/variables.py +0 -0
  274. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/workflow_sources.py +0 -0
  275. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/workflows/h3_context_ir.json +0 -0
  276. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/workflows/test.json +0 -0
  277. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/__init__.py +0 -0
  278. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/__main__.py +0 -0
  279. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/client.py +0 -0
  280. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/exports.py +0 -0
  281. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/guides.py +0 -0
  282. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/media.py +0 -0
  283. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/models.py +0 -0
  284. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/prompts.py +0 -0
  285. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/workspaces.py +0 -0
  286. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/setup.cfg +0 -0
  287. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_argument_updates.py +0 -0
  288. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_arguments.py +0 -0
  289. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_assets.py +0 -0
  290. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_borders.py +0 -0
  291. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_cache_blocks.py +0 -0
  292. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_chain.py +0 -0
  293. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_cli.py +0 -0
  294. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_component_pruning.py +0 -0
  295. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_compose_text.py +0 -0
  296. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_concat_videos.py +0 -0
  297. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_config_objects.py +0 -0
  298. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_configuration_schema.py +0 -0
  299. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_depth_estimator.py +0 -0
  300. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_device.py +0 -0
  301. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_device_helpers.py +0 -0
  302. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_device_portability.py +0 -0
  303. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_dialogue_short_voices.py +0 -0
  304. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_diffusion_upscale.py +0 -0
  305. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_dissolve_videos.py +0 -0
  306. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_docs_links.py +0 -0
  307. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_gather.py +0 -0
  308. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_h3_context_ir.py +0 -0
  309. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_hf_placement.py +0 -0
  310. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_host_memory.py +0 -0
  311. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_hub_cache.py +0 -0
  312. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_image_to_text.py +0 -0
  313. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_image_utils.py +0 -0
  314. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_integration.py +0 -0
  315. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_interpolate_frames.py +0 -0
  316. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_introspection.py +0 -0
  317. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_job_progress.py +0 -0
  318. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_jobs_listing.py +0 -0
  319. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_jobs_reused.py +0 -0
  320. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_library_sources.py +0 -0
  321. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_list_images.py +0 -0
  322. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_locations.py +0 -0
  323. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_assets.py +0 -0
  324. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_authoring.py +0 -0
  325. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_client.py +0 -0
  326. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_diagnose.py +0 -0
  327. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_exports.py +0 -0
  328. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_guides.py +0 -0
  329. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_main.py +0 -0
  330. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_media.py +0 -0
  331. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_models.py +0 -0
  332. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_prompts.py +0 -0
  333. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_workspaces.py +0 -0
  334. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_media_info.py +0 -0
  335. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mix_audio.py +0 -0
  336. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_model_cache.py +0 -0
  337. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_modular_pipeline.py +0 -0
  338. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_modular_progress.py +0 -0
  339. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_offload_placement.py +0 -0
  340. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_pair_audio.py +0 -0
  341. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_phase_events.py +0 -0
  342. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_previous_results.py +0 -0
  343. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_prompt_parser.py +0 -0
  344. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_prompt_references.py +0 -0
  345. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_prompt_weighting.py +0 -0
  346. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_prompts.py +0 -0
  347. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_realize.py +0 -0
  348. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_recenter_crop.py +0 -0
  349. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_reference_limits.py +0 -0
  350. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_repl_commands.py +0 -0
  351. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_repl_ergonomics.py +0 -0
  352. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_repl_hierarchical.py +0 -0
  353. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_repl_reorganization.py +0 -0
  354. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_repl_worker.py +0 -0
  355. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_rerun_new_seed.py +0 -0
  356. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_resize_bucket.py +0 -0
  357. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_result_output_naming.py +0 -0
  358. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_runs.py +0 -0
  359. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_scheduler_config.py +0 -0
  360. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_schema.py +0 -0
  361. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_security.py +0 -0
  362. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_segment.py +0 -0
  363. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_serve_main.py +0 -0
  364. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_server_guides.py +0 -0
  365. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_server_info.py +0 -0
  366. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_server_jobs.py +0 -0
  367. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_server_mcp.py +0 -0
  368. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_speech_generation.py +0 -0
  369. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_stabilize.py +0 -0
  370. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_step.py +0 -0
  371. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_step_cache.py +0 -0
  372. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_strip_exif_and_watermark.py +0 -0
  373. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_subfolders.py +0 -0
  374. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_task.py +0 -0
  375. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_task_domains.py +0 -0
  376. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_teacache.py +0 -0
  377. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_template_subfolders.py +0 -0
  378. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_tensor_image.py +0 -0
  379. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_text_generation.py +0 -0
  380. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_text_sections.py +0 -0
  381. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_type_helpers.py +0 -0
  382. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_updater.py +0 -0
  383. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_variables.py +0 -0
  384. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_worker.py +0 -0
  385. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_workflow_sources.py +0 -0
  386. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_workflow_trust.py +0 -0
  387. {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_workspace.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffusers-workflow
3
- Version: 0.4.0b5
3
+ Version: 0.4.0b6
4
4
  Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
5
5
  Author: dkackman
6
6
  License: Apache-2.0
@@ -19,7 +19,7 @@ License-File: LICENSE
19
19
  Requires-Dist: torch>=2.13.0
20
20
  Requires-Dist: torchvision>=0.28.0
21
21
  Requires-Dist: diffusers>=0.40.0
22
- Requires-Dist: transformers>=5.16.1
22
+ Requires-Dist: transformers!=5.17.0,>=5.16.1
23
23
  Requires-Dist: accelerate>=1.14.0
24
24
  Requires-Dist: peft>=0.20.0
25
25
  Requires-Dist: safetensors>=0.8.0
@@ -36,6 +36,7 @@ Requires-Dist: bitsandbytes>=0.50.2; sys_platform == "linux"
36
36
  Requires-Dist: controlnet-aux>=0.0.10
37
37
  Requires-Dist: opencv-python-headless>=5.0.0.93
38
38
  Requires-Dist: kornia>=0.8.3
39
+ Requires-Dist: kernels>=0.17.0
39
40
  Requires-Dist: spandrel>=0.4.2
40
41
  Requires-Dist: facexlib>=0.3.0
41
42
  Requires-Dist: numpy>=2.5.2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffusers-workflow
3
- Version: 0.4.0b5
3
+ Version: 0.4.0b6
4
4
  Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
5
5
  Author: dkackman
6
6
  License: Apache-2.0
@@ -19,7 +19,7 @@ License-File: LICENSE
19
19
  Requires-Dist: torch>=2.13.0
20
20
  Requires-Dist: torchvision>=0.28.0
21
21
  Requires-Dist: diffusers>=0.40.0
22
- Requires-Dist: transformers>=5.16.1
22
+ Requires-Dist: transformers!=5.17.0,>=5.16.1
23
23
  Requires-Dist: accelerate>=1.14.0
24
24
  Requires-Dist: peft>=0.20.0
25
25
  Requires-Dist: safetensors>=0.8.0
@@ -36,6 +36,7 @@ Requires-Dist: bitsandbytes>=0.50.2; sys_platform == "linux"
36
36
  Requires-Dist: controlnet-aux>=0.0.10
37
37
  Requires-Dist: opencv-python-headless>=5.0.0.93
38
38
  Requires-Dist: kornia>=0.8.3
39
+ Requires-Dist: kernels>=0.17.0
39
40
  Requires-Dist: spandrel>=0.4.2
40
41
  Requires-Dist: facexlib>=0.3.0
41
42
  Requires-Dist: numpy>=2.5.2
@@ -9,15 +9,19 @@ diffusers_workflow.egg-info/entry_points.txt
9
9
  diffusers_workflow.egg-info/requires.txt
10
10
  diffusers_workflow.egg-info/top_level.txt
11
11
  dw/__init__.py
12
+ dw/adapter_compatibility.py
12
13
  dw/arguments.py
13
14
  dw/assets.py
14
15
  dw/cache_blocks.json
15
16
  dw/cache_blocks.py
17
+ dw/content_types.py
18
+ dw/elision.py
16
19
  dw/events.py
17
20
  dw/for_each.py
18
21
  dw/host_memory.py
19
22
  dw/hub_cache.py
20
23
  dw/introspection.py
24
+ dw/kernel_availability.py
21
25
  dw/locations.py
22
26
  dw/log_setup.py
23
27
  dw/media_info.py
@@ -28,6 +32,7 @@ dw/prompt_weighting.py
28
32
  dw/prompts.py
29
33
  dw/realize.py
30
34
  dw/reference_limits.py
35
+ dw/reference_names.py
31
36
  dw/repl.py
32
37
  dw/repl_commands.py
33
38
  dw/repl_worker.py
@@ -47,6 +52,7 @@ dw/teacache_models.json
47
52
  dw/test.py
48
53
  dw/type_helpers.py
49
54
  dw/validate.py
55
+ dw/variable_constraints.py
50
56
  dw/variables.py
51
57
  dw/worker.py
52
58
  dw/workflow.py
@@ -87,6 +93,7 @@ dw/server/guides.py
87
93
  dw/server/jobs.py
88
94
  dw/server/mcp_mount.py
89
95
  dw/server/netinfo.py
96
+ dw/server/observed_cost.py
90
97
  dw/server/updater.py
91
98
  dw/server/ui/index.html
92
99
  dw/server/ui/assets/abap-08VXUWAP.js
@@ -103,45 +110,45 @@ dw/server/ui/assets/csharp-BKxtCVv1.js
103
110
  dw/server/ui/assets/csp-bTuwJoIa.js
104
111
  dw/server/ui/assets/css-DIMkf-bt.js
105
112
  dw/server/ui/assets/css.worker-B3ciXF_0.js
106
- dw/server/ui/assets/cssMode-BQ03gENP.js
113
+ dw/server/ui/assets/cssMode-1t4O7A8b.js
107
114
  dw/server/ui/assets/cypher-CVaqCwHa.js
108
115
  dw/server/ui/assets/dart-onAF5SnQ.js
109
116
  dw/server/ui/assets/dockerfile-DZFCIeNp.js
110
117
  dw/server/ui/assets/ecl-D05T4iGw.js
111
118
  dw/server/ui/assets/editor-jjEx9u7D.css
112
- dw/server/ui/assets/editor.api-CzvLX8mb.js
119
+ dw/server/ui/assets/editor.api-C2mqCHa9.js
113
120
  dw/server/ui/assets/editor.worker-q-txB4vs.js
114
121
  dw/server/ui/assets/elixir-6RTg0lbw.js
115
122
  dw/server/ui/assets/flow9-C5_-GSwl.js
116
- dw/server/ui/assets/freemarker2-C8c7lwsP.js
123
+ dw/server/ui/assets/freemarker2-Cb6RGT42.js
117
124
  dw/server/ui/assets/fsharp-C8Ef5oNN.js
118
125
  dw/server/ui/assets/go-C-y9NEjX.js
119
126
  dw/server/ui/assets/graphql-fmXr3nnJ.js
120
- dw/server/ui/assets/handlebars-7APo_5hD.js
127
+ dw/server/ui/assets/handlebars-LzK4_SEF.js
121
128
  dw/server/ui/assets/hcl-CpzslTdj.js
122
- dw/server/ui/assets/html-JgrkBemQ.js
129
+ dw/server/ui/assets/html-Biz_qd50.js
123
130
  dw/server/ui/assets/html.worker-C93Ht9o9.js
124
- dw/server/ui/assets/htmlMode-BH9VsgGh.js
125
- dw/server/ui/assets/index-B1DfbIuu.js
126
- dw/server/ui/assets/index-CRVAbEJ9.css
131
+ dw/server/ui/assets/htmlMode-CP4Kjl0x.js
132
+ dw/server/ui/assets/index-Bt8BlCkf.js
133
+ dw/server/ui/assets/index-D9tEUhx5.css
127
134
  dw/server/ui/assets/ini-sBoK_t0W.js
128
135
  dw/server/ui/assets/java-BEtHBSE6.js
129
- dw/server/ui/assets/javascript-BrFJ1H6j.js
136
+ dw/server/ui/assets/javascript-DX4-t0BE.js
130
137
  dw/server/ui/assets/json.worker-B2V3pomh.js
131
- dw/server/ui/assets/jsonMode-C10gRe-2.js
138
+ dw/server/ui/assets/jsonMode-hZa_qOEa.js
132
139
  dw/server/ui/assets/julia-Bri6UV-V.js
133
140
  dw/server/ui/assets/kotlin-BOotOW0E.js
134
141
  dw/server/ui/assets/less-B9JPFI3C.js
135
142
  dw/server/ui/assets/lexon-CfSJPG6W.js
136
- dw/server/ui/assets/liquid-CjfGWTAZ.js
137
- dw/server/ui/assets/lspLanguageFeatures-O-lB5SDv.js
143
+ dw/server/ui/assets/liquid-BRkTuJ_A.js
144
+ dw/server/ui/assets/lspLanguageFeatures-Dvt5tod9.js
138
145
  dw/server/ui/assets/lua-CsQS60Ue.js
139
146
  dw/server/ui/assets/m3-D-oSqn_W.js
140
147
  dw/server/ui/assets/markdown-Cimd5fb3.js
141
- dw/server/ui/assets/mdx-D7b-hMTY.js
148
+ dw/server/ui/assets/mdx-Bdet7qev.js
142
149
  dw/server/ui/assets/mips-CIPQ_RoX.js
143
150
  dw/server/ui/assets/monaco--ixms01u.css
144
- dw/server/ui/assets/monaco-DBnxML20.js
151
+ dw/server/ui/assets/monaco-QRyCMGAv.js
145
152
  dw/server/ui/assets/msdax-DauUninz.js
146
153
  dw/server/ui/assets/mysql-SOo6toE5.js
147
154
  dw/server/ui/assets/objective-c-FvmIjYaQ.js
@@ -156,10 +163,10 @@ dw/server/ui/assets/powerquery-D3hlyOfw.js
156
163
  dw/server/ui/assets/powershell-DmHpPYUd.js
157
164
  dw/server/ui/assets/protobuf-C531GsRP.js
158
165
  dw/server/ui/assets/pug-Z5eAx3Zn.js
159
- dw/server/ui/assets/python-NfJjzkPL.js
166
+ dw/server/ui/assets/python-DO0uJyUr.js
160
167
  dw/server/ui/assets/qsharp-DkqhCAOL.js
161
168
  dw/server/ui/assets/r-BwWrilGY.js
162
- dw/server/ui/assets/razor-CgQtwMBj.js
169
+ dw/server/ui/assets/razor-CkfVe6oz.js
163
170
  dw/server/ui/assets/redis-ClamHrr6.js
164
171
  dw/server/ui/assets/redshift-DT7zqm-g.js
165
172
  dw/server/ui/assets/restructuredtext-BYgofb2h.js
@@ -179,15 +186,15 @@ dw/server/ui/assets/swift-Bxkupp3x.js
179
186
  dw/server/ui/assets/systemverilog-Bz4Y3fRF.js
180
187
  dw/server/ui/assets/tcl-DISqw1ZD.js
181
188
  dw/server/ui/assets/ts.worker-D7T1-Ig5.js
182
- dw/server/ui/assets/tsMode-BuMW6Qar.js
189
+ dw/server/ui/assets/tsMode-z26QXNyE.js
183
190
  dw/server/ui/assets/twig-De2hgUGE.js
184
- dw/server/ui/assets/typescript-Bfmxt754.js
191
+ dw/server/ui/assets/typescript-DIdNc_uc.js
185
192
  dw/server/ui/assets/typespec-B8J7ngcE.js
186
193
  dw/server/ui/assets/vb-DV3o63ZY.js
187
194
  dw/server/ui/assets/wgsl-DpFanUEy.js
188
- dw/server/ui/assets/workers-BSu9lD5s.js
189
- dw/server/ui/assets/xml-BJ2IwGRC.js
190
- dw/server/ui/assets/yaml-Cq85tEmC.js
195
+ dw/server/ui/assets/workers-Ce8CDVu5.js
196
+ dw/server/ui/assets/xml-Djj2U0Rl.js
197
+ dw/server/ui/assets/yaml-CePLO71e.js
191
198
  dw/tasks/audio_utils.py
192
199
  dw/tasks/background_remover.py
193
200
  dw/tasks/borders.py
@@ -247,6 +254,7 @@ tests/test_compose_text.py
247
254
  tests/test_concat_videos.py
248
255
  tests/test_config_objects.py
249
256
  tests/test_configuration_schema.py
257
+ tests/test_content_types.py
250
258
  tests/test_depth_estimator.py
251
259
  tests/test_device.py
252
260
  tests/test_device_helpers.py
@@ -255,11 +263,14 @@ tests/test_dialogue_short_voices.py
255
263
  tests/test_diffusion_upscale.py
256
264
  tests/test_dissolve_videos.py
257
265
  tests/test_docs_links.py
266
+ tests/test_elision.py
258
267
  tests/test_events.py
259
268
  tests/test_examples.py
260
269
  tests/test_for_each.py
261
270
  tests/test_gather.py
271
+ tests/test_h3_adapters.py
262
272
  tests/test_h3_context_ir.py
273
+ tests/test_h3_schedule.py
263
274
  tests/test_hf_placement.py
264
275
  tests/test_host_memory.py
265
276
  tests/test_hub_cache.py
@@ -269,11 +280,16 @@ tests/test_integration.py
269
280
  tests/test_interpolate_frames.py
270
281
  tests/test_introspection.py
271
282
  tests/test_job_progress.py
283
+ tests/test_job_warnings.py
272
284
  tests/test_jobs_listing.py
273
285
  tests/test_jobs_reused.py
286
+ tests/test_kernel_availability.py
274
287
  tests/test_library_sources.py
275
288
  tests/test_list_images.py
276
289
  tests/test_locations.py
290
+ tests/test_lora_alpha.py
291
+ tests/test_ltx2_diffusion_decode.py
292
+ tests/test_ltx2_ic_loras.py
277
293
  tests/test_ltx_prompt_library.py
278
294
  tests/test_mcp_assets.py
279
295
  tests/test_mcp_authoring.py
@@ -293,9 +309,11 @@ tests/test_mix_audio.py
293
309
  tests/test_model_cache.py
294
310
  tests/test_modular_pipeline.py
295
311
  tests/test_modular_progress.py
312
+ tests/test_observed_cost.py
296
313
  tests/test_offload_placement.py
297
314
  tests/test_output_references.py
298
315
  tests/test_pair_audio.py
316
+ tests/test_pair_audio_fit.py
299
317
  tests/test_phase_events.py
300
318
  tests/test_pipeline_caching.py
301
319
  tests/test_pipeline_components.py
@@ -309,6 +327,7 @@ tests/test_prompts.py
309
327
  tests/test_realize.py
310
328
  tests/test_recenter_crop.py
311
329
  tests/test_reference_limits.py
330
+ tests/test_reference_names.py
312
331
  tests/test_repl_commands.py
313
332
  tests/test_repl_ergonomics.py
314
333
  tests/test_repl_hierarchical.py
@@ -341,6 +360,7 @@ tests/test_subfolders.py
341
360
  tests/test_task.py
342
361
  tests/test_task_discovery.py
343
362
  tests/test_task_domains.py
363
+ tests/test_task_signature_errors.py
344
364
  tests/test_teacache.py
345
365
  tests/test_template_subfolders.py
346
366
  tests/test_tensor_image.py
@@ -349,6 +369,7 @@ tests/test_text_sections.py
349
369
  tests/test_type_helpers.py
350
370
  tests/test_updater.py
351
371
  tests/test_validate_arguments.py
372
+ tests/test_variable_constraints.py
352
373
  tests/test_variables.py
353
374
  tests/test_video_utils.py
354
375
  tests/test_worker.py
@@ -1,7 +1,7 @@
1
1
  torch>=2.13.0
2
2
  torchvision>=0.28.0
3
3
  diffusers>=0.40.0
4
- transformers>=5.16.1
4
+ transformers!=5.17.0,>=5.16.1
5
5
  accelerate>=1.14.0
6
6
  peft>=0.20.0
7
7
  safetensors>=0.8.0
@@ -17,6 +17,7 @@ gguf>=0.19.0
17
17
  controlnet-aux>=0.0.10
18
18
  opencv-python-headless>=5.0.0.93
19
19
  kornia>=0.8.3
20
+ kernels>=0.17.0
20
21
  spandrel>=0.4.2
21
22
  facexlib>=0.3.0
22
23
  numpy>=2.5.2
@@ -0,0 +1,226 @@
1
+ """The LoRA a step loads has to be trained for the path that step runs.
2
+
3
+ MiniMax-H3 ships one repository holding two checkpoint partitions -
4
+ `transformer/` for the `t2va` and `fl2va` workflows, `transformer_ref/` for
5
+ `ref2va` - and a separate turbo adapter trained against each. Handing the
6
+ FL2VA adapter to a `ref2va` step is the one H3 misconfiguration that never
7
+ shows up as a failure: a `ref2va` step holds `transformer_ref` alone, so
8
+ diffusers loads whatever it is given straight onto it, the run succeeds, and
9
+ the only symptom is identity retention that quietly is not as good as it
10
+ should be. Four templates carried exactly that mistake and nothing ever
11
+ complained (#149, #155).
12
+
13
+ Everything a pipeline itself would refuse is refused by the pipeline. This
14
+ is the other kind: a request the pipeline accepts and answers wrongly, which
15
+ costs a whole render to discover and cannot be seen in the output. So it is
16
+ checked where it is free - `validation_errors`, so `POST /api/validate` and
17
+ the pre-queue check both refuse it, at the JSON path the value sits at.
18
+
19
+ What is *not* written here: the adapter file names. `lora_weight_name` is a
20
+ free string and a future reference-trained checkpoint cannot be predicted, so
21
+ an unrecognised name is a warning naming the rule rather than a refusal - the
22
+ default inverts from "anything passes" to "the one documented mistake is
23
+ caught", and someone testing `my-new-ref-lora.safetensors` still gets
24
+ through. What *is* written here is a vendor naming convention (`ref2v` /
25
+ `fl2v` in the file name) that no diffusers symbol declares; the workflow
26
+ names and the partition each one denoises against are diffusers' own, and
27
+ `tests/test_h3_adapters.py` pins them to it.
28
+ """
29
+
30
+ import logging
31
+
32
+ from .for_each import MEMBER_SEPARATOR, render_path
33
+
34
+ logger = logging.getLogger("dw")
35
+
36
+ # The `workflow=` values MiniMaxH3Blocks._workflow_map declares, split by the
37
+ # transformer partition each one denoises against - a `ref2va` step loads
38
+ # `transformer_ref` and nothing else, every other H3 workflow loads
39
+ # `transformer`. A workflow name not listed here is not checked
40
+ REFERENCE_WORKFLOWS = frozenset({"ref2va"})
41
+ KEYFRAME_WORKFLOWS = frozenset({"t2va", "fl2va"})
42
+ H3_WORKFLOWS = REFERENCE_WORKFLOWS | KEYFRAME_WORKFLOWS
43
+
44
+ # The token MiniMax puts in an adapter's file name to say which partition it
45
+ # was trained against. `ref2v` first: it is the longer match and a name
46
+ # carrying both is ambiguous rather than a keyframe adapter
47
+ REFERENCE_TOKEN = "ref2v"
48
+ KEYFRAME_TOKEN = "fl2v"
49
+
50
+ LORAS_KEY = "loras"
51
+ WEIGHT_NAME_KEY = "weight_name"
52
+ WORKFLOW_KEY = "workflow"
53
+ FROM_PRETRAINED_KEY = "from_pretrained_arguments"
54
+ VARIABLE_PREFIX = "variable:"
55
+ # Values another pass resolves; one still spelled out here is not this
56
+ # pass's complaint
57
+ _UNRESOLVED_PREFIXES = ("variable:", "item:", "previous_result:", "gather:")
58
+
59
+
60
+ def _trained_for(weight_name):
61
+ """Which partition an adapter's file name says it was trained against -
62
+ 'reference', 'keyframe', or None when the name says neither."""
63
+ lowered = weight_name.lower()
64
+ if REFERENCE_TOKEN in lowered:
65
+ return "reference"
66
+ if KEYFRAME_TOKEN in lowered:
67
+ return "keyframe"
68
+ return None
69
+
70
+
71
+ def _problem(workflow, weight_name):
72
+ """(severity, message) for one adapter on one step, or None when the
73
+ pairing is right."""
74
+ trained = _trained_for(weight_name)
75
+ wants = "reference" if workflow in REFERENCE_WORKFLOWS else "keyframe"
76
+ if trained == wants:
77
+ return None
78
+ if trained is None:
79
+ return (
80
+ "warning",
81
+ f"'{weight_name}' names neither '{REFERENCE_TOKEN}' nor "
82
+ f"'{KEYFRAME_TOKEN}', so it cannot be checked against this "
83
+ f"step's '{workflow}' workflow. A '{workflow}' step denoises "
84
+ f"against the "
85
+ f"'{'transformer_ref' if wants == 'reference' else 'transformer'}' "
86
+ f"partition, and an adapter trained against the other one loads "
87
+ f"onto it without error and only degrades the result",
88
+ )
89
+ return (
90
+ "error",
91
+ f"'{weight_name}' is trained against the "
92
+ f"'{'transformer_ref' if trained == 'reference' else 'transformer'}' "
93
+ f"partition and this step runs the '{workflow}' workflow, which "
94
+ f"denoises against "
95
+ f"'{'transformer_ref' if wants == 'reference' else 'transformer'}'. "
96
+ f"MiniMax-H3 loads it anyway and the run succeeds - the only symptom "
97
+ f"is a worse result - so it is refused here. Use an adapter trained "
98
+ f"for this workflow (its name carries "
99
+ f"'{REFERENCE_TOKEN if wants == 'reference' else KEYFRAME_TOKEN}')",
100
+ )
101
+
102
+
103
+ def _lora_problems(steps, source_indices, written=None, supplied=()):
104
+ """Every adapter/workflow mismatch in an expanded step list, as
105
+ (severity, path, message).
106
+
107
+ `written` is the definition as the author wrote it and `supplied` the
108
+ argument names the caller passed: when the value arrived through a
109
+ variable the caller set, the path reported is `arguments.<name>`, where
110
+ they wrote it, rather than the step it landed in.
111
+ """
112
+ written_steps = (written or {}).get("steps")
113
+ found = []
114
+ for index, step in enumerate(steps):
115
+ if not isinstance(step, dict):
116
+ continue
117
+ pipeline = step.get("pipeline")
118
+ if not isinstance(pipeline, dict):
119
+ continue
120
+ source = (
121
+ source_indices[index]
122
+ if source_indices is not None and index < len(source_indices)
123
+ else index
124
+ )
125
+ from_pretrained = pipeline.get(FROM_PRETRAINED_KEY)
126
+ workflow = (
127
+ from_pretrained.get(WORKFLOW_KEY)
128
+ if isinstance(from_pretrained, dict)
129
+ else None
130
+ )
131
+ if workflow not in H3_WORKFLOWS:
132
+ continue
133
+ loras = pipeline.get(LORAS_KEY)
134
+ if not isinstance(loras, list):
135
+ continue
136
+ name = step.get("name")
137
+ where = (
138
+ f" in member '{name}'"
139
+ if isinstance(name, str) and MEMBER_SEPARATOR in name
140
+ else ""
141
+ )
142
+ for position, lora in enumerate(loras):
143
+ if not isinstance(lora, dict):
144
+ continue
145
+ weight_name = lora.get(WEIGHT_NAME_KEY)
146
+ if not isinstance(weight_name, str) or weight_name.startswith(
147
+ _UNRESOLVED_PREFIXES
148
+ ):
149
+ continue
150
+ problem = _problem(workflow, weight_name)
151
+ if problem is None:
152
+ continue
153
+ severity, message = problem
154
+ found.append(
155
+ (
156
+ severity,
157
+ _path_for(written_steps, source, position, supplied)
158
+ or render_path(
159
+ (
160
+ "steps",
161
+ source,
162
+ "pipeline",
163
+ LORAS_KEY,
164
+ position,
165
+ WEIGHT_NAME_KEY,
166
+ )
167
+ ),
168
+ message + where,
169
+ )
170
+ )
171
+ return found
172
+
173
+
174
+ def _path_for(written_steps, source, position, supplied):
175
+ """`arguments.<name>` when the adapter came from a variable the caller
176
+ set, else None - the value is reported where it was written."""
177
+ if not isinstance(written_steps, list) or source >= len(written_steps):
178
+ return None
179
+ step = written_steps[source]
180
+ pipeline = step.get("pipeline") if isinstance(step, dict) else None
181
+ loras = pipeline.get(LORAS_KEY) if isinstance(pipeline, dict) else None
182
+ if not isinstance(loras, list) or position >= len(loras):
183
+ return None
184
+ entry = loras[position]
185
+ reference = entry.get(WEIGHT_NAME_KEY) if isinstance(entry, dict) else None
186
+ if not isinstance(reference, str) or not reference.startswith(VARIABLE_PREFIX):
187
+ return None
188
+ variable = reference.removeprefix(VARIABLE_PREFIX)
189
+ return f"arguments.{variable}" if variable in (supplied or ()) else None
190
+
191
+
192
+ def adapter_errors(workflow_definition, source_indices=None, written=None, supplied=()):
193
+ """Every adapter loaded onto the wrong checkpoint partition, as
194
+ [{path, message}]. The definition is the expanded, substituted one, so a
195
+ `for_each` member's own adapter is checked as it will run."""
196
+ return [
197
+ {"path": path, "message": message}
198
+ for severity, path, message in _lora_problems(
199
+ workflow_definition.get("steps") or [], source_indices, written, supplied
200
+ )
201
+ if severity == "error"
202
+ ]
203
+
204
+
205
+ def adapter_warnings(
206
+ workflow_definition, source_indices=None, written=None, supplied=()
207
+ ):
208
+ """Every adapter whose name says nothing about what it was trained for,
209
+ as messages - valid, and said out loud because nothing at run time will."""
210
+ return [
211
+ f"{path}: {message}"
212
+ for severity, path, message in _lora_problems(
213
+ workflow_definition.get("steps") or [], source_indices, written, supplied
214
+ )
215
+ if severity == "warning"
216
+ ]
217
+
218
+
219
+ def warn_adapters(workflow_definition):
220
+ """Say the unrecognised-adapter warning where whoever asked for the run
221
+ can read it - a run started from the CLI or a rerun never passed through
222
+ the validate route."""
223
+ from .events import emit_warning
224
+
225
+ for message in adapter_warnings(workflow_definition):
226
+ emit_warning(message, kind="adapter_unrecognized")
@@ -0,0 +1,105 @@
1
+ """A step's result 'content_type': the MIME type its writer is chosen by.
2
+
3
+ `content_type: "video"` validated clean and then died deep inside a writer,
4
+ in a traceback naming neither the field nor the value (#168) - the same
5
+ shape as #162 in a different field. The writer's own dispatch matches on
6
+ `content_type.startswith("video")`, so the bare word "video" took the video
7
+ branch anyway; having no real MIME type it also had no extension to write,
8
+ and the closest writer imageio could guess from an empty one was not a video
9
+ writer at all.
10
+
11
+ Audio and video each go through exactly one container this engine writes -
12
+ `AUDIO_FORMATS` in `dw/result.py`, and the single `video/mp4` mux - so
13
+ anything else in either family is refused here rather than accepted only to
14
+ mismatch its writer later. image/*, text/* and *.json values stay
15
+ permissive beyond the MIME-shape check: their writer dispatch is a generic
16
+ prefix/suffix match (PIL's own format inference, a literal text or JSON
17
+ write) with no narrower container to enforce a whitelist against.
18
+ """
19
+
20
+ from .for_each import MEMBER_SEPARATOR, render_path
21
+ from .result import AUDIO_FORMATS, MUXED_VIDEO_CONTENT_TYPE
22
+ from .security import InvalidInputError, validate_content_type
23
+
24
+ CONTENT_TYPE_KEY = "content_type"
25
+
26
+ # Reference prefixes substitution resolves before this pass runs. One still
27
+ # spelled out here is one nothing resolved, and that is the undeclared-
28
+ # variable pass's complaint rather than a shape error
29
+ _UNRESOLVED_PREFIXES = ("variable:", "item:")
30
+
31
+
32
+ def content_type_fault(value):
33
+ """Why this result 'content_type' is invalid, or None.
34
+
35
+ Raises nothing - callers that already have an InvalidInputError-raising
36
+ check (validate_content_type) can call that directly; this is the
37
+ string-message form `content_type_errors` collects.
38
+ """
39
+ try:
40
+ validate_content_type(value)
41
+ except InvalidInputError as e:
42
+ return str(e)
43
+
44
+ main_type = value.split("/", 1)[0]
45
+ if main_type == "audio" and value not in AUDIO_FORMATS:
46
+ return (
47
+ f"Invalid content_type: {value!r} - audio can be written as "
48
+ f"{', '.join(sorted(AUDIO_FORMATS))}"
49
+ )
50
+ if main_type == "video" and value != MUXED_VIDEO_CONTENT_TYPE:
51
+ return (
52
+ f"Invalid content_type: {value!r} - video is only written as "
53
+ f"'{MUXED_VIDEO_CONTENT_TYPE}'"
54
+ )
55
+ return None
56
+
57
+
58
+ def content_type_errors(workflow_definition, source_indices=None):
59
+ """Every result 'content_type' that no writer will accept, as
60
+ [{path, message}].
61
+
62
+ The definition handed here has already been substituted and expanded,
63
+ so every value in it is literal; a 'variable:' or 'item:' still spelled
64
+ out is left alone. `source_indices`, when given, is the source step
65
+ index of each step - a 'for_each' group turns one written step into
66
+ several, and the path an error carries has to be one the author can
67
+ find in the file they wrote; the member is named in the message.
68
+ """
69
+ steps = workflow_definition.get("steps")
70
+ if not isinstance(steps, list):
71
+ return []
72
+
73
+ errors = []
74
+ for index, step in enumerate(steps):
75
+ if not isinstance(step, dict):
76
+ continue
77
+ result = step.get("result")
78
+ if not isinstance(result, dict) or CONTENT_TYPE_KEY not in result:
79
+ continue
80
+ value = result[CONTENT_TYPE_KEY]
81
+ if isinstance(value, str) and value.startswith(_UNRESOLVED_PREFIXES):
82
+ continue
83
+ source = (
84
+ source_indices[index]
85
+ if source_indices is not None and index < len(source_indices)
86
+ else index
87
+ )
88
+ name = step.get("name")
89
+ where = (
90
+ f" in member '{name}'"
91
+ if isinstance(name, str) and MEMBER_SEPARATOR in name
92
+ else ""
93
+ )
94
+ fault = content_type_fault(value)
95
+ if fault is not None:
96
+ errors.append(
97
+ {
98
+ "path": render_path(("steps", source, "result", CONTENT_TYPE_KEY)),
99
+ "message": f"{fault}{where}",
100
+ }
101
+ )
102
+ return errors
103
+
104
+
105
+ __all__ = ["content_type_errors", "content_type_fault"]
@@ -226,7 +226,7 @@ when no single workflow covers it.
226
226
  | `get_health()` | — | Check that the server is alive, and which machine answered: `version`, `device`, whether the worker process is up, the job running now and the queue depth |
227
227
  | `get_server_info()` | — | What this installation can do and where it keeps things: `device` (the accelerator a run will use), `version`, the `workspace` this session is working in and the workflow/asset/output/prompt `directories` of *that* workspace, the bind address and port, whether a token is required, and whether MCP is mounted. Check the device before authoring - a CUDA-only choice (bitsandbytes, `torch.compile`, flash attention) is not available on an `mps` or `cpu` server |
228
228
  | `list_jobs(limit=20, status=None, workspace=None)` | optional `limit` (newest N), `status` (one state or a comma-separated set of `queued`, `running`, `succeeded`, `failed`, `cancelled`), `workspace` | List queued, running and recent jobs, **newest first**. Bounded by default: the unbounded listing was over a client's tool-result limit on a server with a few months of history, which made it a tool that could not be called at all. `total` says how many matched and `truncated`/`next` say so when the answer was cut - raise `limit` or narrow with `status`. Without `workspace`, a named workspace lists its own jobs and the default one lists every job the server holds |
229
- | `list_gallery(limit=50, subfolder=None, workspace=None)` | `limit`, `subfolder`, `workspace` | List generated output files, newest first. A name is `<workflow>/<run id>/<file>`, where `<file>` may sit in the subfolder the step chose (`final/episode.mp4`); each entry carries `folder` (the workflow) and `subfolder` (by convention `final` or `intermediate`, `''` when the step chose none, any path the workflow wrote otherwise), and `subfolder="final"` lists only deliverables. Each entry also carries a ready-made `url`, already scoped to the workspace that made it - a hand-built `/outputs/<name>` URL 404s for anything but the default workspace. `workspace` names the workspace for this one call without switching the session to it - the same pin `run_workflow` takes, so a job run into another workspace stays reachable from the session that queued it |
229
+ | `list_gallery(limit=50, subfolder=None, only_orphans=False, workspace=None)` | `limit`, `subfolder`, `only_orphans`, `workspace` | List generated output files, newest first. A name is `<workflow>/<run id>/<file>`, where `<file>` may sit in the subfolder the step chose (`final/episode.mp4`); each entry carries `folder` (the workflow) and `subfolder` (by convention `final` or `intermediate`, `''` when the step chose none, any path the workflow wrote otherwise), and `subfolder="final"` lists only deliverables. Each entry also carries a ready-made `url`, already scoped to the workspace that made it - a hand-built `/outputs/<name>` URL 404s for anything but the default workspace. `only_orphans=True` inverts the call: instead of files, it returns run directories with no media anywhere under them (`runs`, each `{name, mtime}`) - a run whose output was deleted before `delete_output` could remove it by name, or one that failed before writing anything; `subfolder` does not apply in this mode, and `name` is exactly what `delete_output` accepts (#170). `workspace` names the workspace for this one call without switching the session to it - the same pin `run_workflow` takes, so a job run into another workspace stays reachable from the session that queued it |
230
230
  | `get_gallery_metadata(name, envelope=False, workspace=None)` | `name`, `workspace` | Get the metadata embedded in a generated file — or, when `name` is an `asset:` reference, what an *input* asset holds (`source` says which; `job` is null for an asset). Reading an input's duration, frame count, fps and sample rate before a run is how a caller learns the `total_frames`, `fps` and `sample_rate` a workflow expects it to supply: the exact workflow and arguments that produced it, and, for audio/video, a `media` block (duration, rate, channels, fps, size, peak/mean dBFS). `envelope=true` adds `media.envelope` — `rms_dbfs` and `peak_dbfs` one entry per second — which is what locates something in a track rather than measuring the whole of it. `workspace` names the workspace for this one call without switching the session to it - the same pin `run_workflow` takes, so a job run into another workspace stays reachable from the session that queued it |
231
231
 
232
232
  ### Media
@@ -249,12 +249,12 @@ The session starts in `default` and stays there unless it is told otherwise.
249
249
 
250
250
  | Tool | Arguments | Purpose |
251
251
  | --- | --- | --- |
252
- | `validate_workflow(workflow=None, name=None, workspace=None, arguments=None)` | exactly one of `workflow` (inline definition) or `name` (a stored workflow, as `list_workflows` reports it), optional `workspace`, optional `arguments` | Check a workflow against the schema and against real pipeline signatures. Free and instant. Validating by name uses the workflow file's own directory as the base directory, so it sees what a run would. Returns every schema violation in `errors`, each with the JSON path it sits at, so a draft is fixed in one pass, and a `previous_result:` that names no earlier step is one of them. `warnings` covers what still runs but is probably wrong - a signature mismatch, and, for a list-driven variable, an entry key no step reads, at the entry's path. `workspace` names the workspace for this one call without switching the session to it - use it to pin a job whose `output:` or `asset:` references live in a workspace other than the session's. Pass the same `arguments` you will pass to `run_workflow` and they are checked too - an undeclared or renamed variable name, a value that will not coerce to the declared type, and an `asset:`, `prompt:` or `output:` reference that names nothing this workspace can reach, each reported at `arguments.<name>`. `checked_arguments` lists what was covered, so a `valid: true` about the stored defaults cannot be mistaken for one about your values. A reference set the model would refuse - too many images, videos or audio clips, or, for MiniMax-H3, audio as the only reference - is an error here too, rather than a failure minutes into a run you acknowledged. `run_workflow` makes the same check and refuses a bad argument rather than queuing a job that fails on its first step. A valid answer carries `plan` - the fingerprint, step count, list lengths, `downloads_required` and `estimate` (with `basis`) for the arguments given; quote from it |
252
+ | `validate_workflow(workflow=None, name=None, workspace=None, arguments=None)` | exactly one of `workflow` (inline definition) or `name` (a stored workflow, as `list_workflows` reports it), optional `workspace`, optional `arguments` | Check a workflow against the schema and against real pipeline signatures. Free and instant. Validating by name uses the workflow file's own directory as the base directory, so it sees what a run would. Returns every schema violation in `errors`, each with the JSON path it sits at, so a draft is fixed in one pass, and a `previous_result:` that names no earlier step is one of them. `warnings` covers what still runs but is probably wrong - a signature mismatch, and, for a list-driven variable, an entry key no step reads, at the entry's path. `workspace` names the workspace for this one call without switching the session to it - use it to pin a job whose `output:` or `asset:` references live in a workspace other than the session's. Pass the same `arguments` you will pass to `run_workflow` and they are checked too - an undeclared or renamed variable name, a value that will not coerce to the declared type, and an `asset:`, `prompt:` or `output:` reference that names nothing this workspace can reach, each reported at `arguments.<name>`. `checked_arguments` lists what was covered, so a `valid: true` about the stored defaults cannot be mistaken for one about your values. A reference set the model would refuse - too many images, videos or audio clips, or, for MiniMax-H3, audio as the only reference - is an error here too, rather than a failure minutes into a run you acknowledged. `run_workflow` makes the same check and refuses a bad argument rather than queuing a job that fails on its first step. A valid answer carries `plan` - the fingerprint, step count, list lengths, `downloads_required`, `estimate` (with `basis`) and `elided_steps` for the arguments given; quote from it. `steps` counts what will run: a step nothing reads and which saves no file does not run, and is named in `elided_steps` instead |
253
253
  | `list_workspaces()` | — | The server's workspaces and which one this session is using. Each has its own workflows, assets and outputs; the prompt library is shared by all of them |
254
254
  | `use_workspace(name)` | `name` | Work in that workspace for the rest of the session - every later call reads and writes there. This is how to keep your work out of another agent's namespace rather than sharing the default one. Checked against the server, so a typo fails here rather than scoping every later call to nothing |
255
255
  | `create_workspace(name, use=False)` | `name`, `use` | Create a workspace. Pass use=true to switch this session to it as well; otherwise the session stays where it was and the result says so |
256
256
  | `delete_workspace(name, acknowledged_cost=False)` | `name`, `acknowledged_cost` | Permanently delete a workspace and everything in it. Refuses without the acknowledgement, reporting what it would remove |
257
- | `list_assets()` | — | The input media on the server, each with the `asset:` reference a workflow argument carries. Look here before asking for a file - what a workflow needs may already be there |
257
+ | `list_assets()` | — | The input media on the server, each with the `asset:` reference a workflow argument carries. Look here before asking for a file - what a workflow needs may already be there. `libraries` names the roots searched and which are writable; `shadowed` lists names a nearer library hides |
258
258
  | `keep_output(name, asset_name=None, overwrite=False, shared=False, workspace=None)` | `name`, optional `asset_name`, `overwrite`, `shared`, `workspace` | Keep a generated file as an input asset under a stable `asset:` name, so a later workflow can rely on it. The copy happens on the server: nothing is downloaded or re-uploaded. `asset_name` may name a folder and takes the kept file's extension when it has none; `shared=true` keeps it in the library every workspace shares, which is where a recurring cast belongs. `workspace` names the workspace for this one call without switching the session to it - the same pin `run_workflow` takes, so a job run into another workspace stays reachable from the session that queued it |
259
259
  | `upload_asset(file_path, asset_name=None, shared=False)` | `file_path` | Push a local image, video or audio file into the server's asset library and get back its `asset:` reference. The file is read from the machine the MCP server runs on, so this is how an input reaches a dw.serve running somewhere else. `asset_name` stores it under a readable name (`cast/priya-voice.wav`) instead of a random one; `shared=true` puts it in the library every workspace shares |
260
260
  | `delete_asset(name)` | `name` | Permanently remove one file from the asset library, by the name `list_assets` reports. Deletes from whichever library holds it - this workspace's own before the shared one; one from a read-only examples library is refused. Any workflow still carrying that `asset:` reference stops loading |