diffusers-workflow 0.4.0b6__tar.gz → 0.4.0b7__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.
- {diffusers_workflow-0.4.0b6/diffusers_workflow.egg-info → diffusers_workflow-0.4.0b7}/PKG-INFO +3 -2
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/README.md +1 -1
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7/diffusers_workflow.egg-info}/PKG-INFO +3 -2
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/diffusers_workflow.egg-info/SOURCES.txt +42 -21
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/diffusers_workflow.egg-info/requires.txt +1 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/arguments.py +9 -2
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/MCP.md +53 -23
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/RELEASING.md +15 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/REMOTE.md +7 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/SERVER.md +72 -27
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/TASKS.md +211 -11
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/WORKFLOW_GUIDE.md +65 -4
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/WORKSPACES.md +23 -12
- diffusers_workflow-0.4.0b7/dw/host_memory_projection.py +175 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/introspection.py +152 -7
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/locations.py +10 -4
- diffusers_workflow-0.4.0b7/dw/media_audio.py +217 -0
- diffusers_workflow-0.4.0b7/dw/media_frames.py +340 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/media_info.py +67 -9
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/plan.py +347 -19
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/prompt_schema.json +1 -1
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/result.py +363 -55
- diffusers_workflow-0.4.0b7/dw/scalar_result_validation.py +78 -0
- diffusers_workflow-0.4.0b7/dw/select_validation.py +115 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/app.py +529 -22
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/catalog_shape.py +11 -3
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/guides.py +34 -3
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/jobs.py +192 -26
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/observed_cost.py +22 -6
- diffusers_workflow-0.4.0b7/dw/server/sysinfo.py +71 -0
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/cssMode-1t4O7A8b.js → diffusers_workflow-0.4.0b7/dw/server/ui/assets/cssMode-xQCqMuag.js +1 -1
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/editor.api-C2mqCHa9.js → diffusers_workflow-0.4.0b7/dw/server/ui/assets/editor.api-Bfiq9hmW.js +1 -1
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/freemarker2-Cb6RGT42.js → diffusers_workflow-0.4.0b7/dw/server/ui/assets/freemarker2-BwDnlSuz.js +1 -1
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/handlebars-LzK4_SEF.js → diffusers_workflow-0.4.0b7/dw/server/ui/assets/handlebars-Beb1we4G.js +1 -1
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/html-Biz_qd50.js → diffusers_workflow-0.4.0b7/dw/server/ui/assets/html-Yw-qdTCH.js +1 -1
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/htmlMode-CP4Kjl0x.js → diffusers_workflow-0.4.0b7/dw/server/ui/assets/htmlMode-Dbp7eBPO.js +1 -1
- diffusers_workflow-0.4.0b7/dw/server/ui/assets/index-CsXMC8a8.css +1 -0
- diffusers_workflow-0.4.0b7/dw/server/ui/assets/index-DqbiZNFq.js +43 -0
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/javascript-DX4-t0BE.js → diffusers_workflow-0.4.0b7/dw/server/ui/assets/javascript-BNzP7yQZ.js +1 -1
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/jsonMode-hZa_qOEa.js → diffusers_workflow-0.4.0b7/dw/server/ui/assets/jsonMode-DxIEESAg.js +1 -1
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/liquid-BRkTuJ_A.js → diffusers_workflow-0.4.0b7/dw/server/ui/assets/liquid-CeQTai1N.js +1 -1
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/lspLanguageFeatures-Dvt5tod9.js → diffusers_workflow-0.4.0b7/dw/server/ui/assets/lspLanguageFeatures-DKVB_UCB.js +1 -1
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/mdx-Bdet7qev.js → diffusers_workflow-0.4.0b7/dw/server/ui/assets/mdx-Bczl_PHr.js +1 -1
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/monaco-QRyCMGAv.js → diffusers_workflow-0.4.0b7/dw/server/ui/assets/monaco-Bu2OB6wI.js +4 -4
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/python-DO0uJyUr.js → diffusers_workflow-0.4.0b7/dw/server/ui/assets/python-CeTsj82v.js +1 -1
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/razor-CkfVe6oz.js → diffusers_workflow-0.4.0b7/dw/server/ui/assets/razor-CN7JaWqc.js +1 -1
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/tsMode-z26QXNyE.js → diffusers_workflow-0.4.0b7/dw/server/ui/assets/tsMode-CoSEMx-L.js +1 -1
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/typescript-DIdNc_uc.js → diffusers_workflow-0.4.0b7/dw/server/ui/assets/typescript-CcsolRTO.js +1 -1
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/workers-Ce8CDVu5.js → diffusers_workflow-0.4.0b7/dw/server/ui/assets/workers-DLaycdy4.js +1 -1
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/xml-Djj2U0Rl.js → diffusers_workflow-0.4.0b7/dw/server/ui/assets/xml-QEwuyn1w.js +1 -1
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/yaml-CePLO71e.js → diffusers_workflow-0.4.0b7/dw/server/ui/assets/yaml-BB4U5D-R.js +1 -1
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/index.html +2 -2
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/step.py +17 -3
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/step_cache.py +94 -7
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/task_domains.py +59 -14
- diffusers_workflow-0.4.0b7/dw/tasks/audio_transcription.py +88 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/audio_utils.py +744 -54
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/concat_videos.py +19 -3
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/dissolve_videos.py +57 -8
- diffusers_workflow-0.4.0b7/dw/tasks/judge.py +68 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/pair_audio.py +11 -3
- diffusers_workflow-0.4.0b7/dw/tasks/select.py +111 -0
- diffusers_workflow-0.4.0b7/dw/tasks/speech_generation.py +228 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/task.py +177 -15
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/video_utils.py +156 -3
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/variables.py +27 -0
- diffusers_workflow-0.4.0b7/dw/vram_estimate.py +116 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/worker.py +55 -8
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/workflow.py +71 -2
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/workflow_schema.json +18 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw_mcp/assets.py +126 -20
- diffusers_workflow-0.4.0b7/dw_mcp/authoring.py +135 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw_mcp/catalog.py +23 -6
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw_mcp/client.py +40 -8
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw_mcp/diagnose.py +36 -7
- diffusers_workflow-0.4.0b7/dw_mcp/media.py +578 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw_mcp/prompts.py +15 -3
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw_mcp/server.py +368 -156
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw_mcp/workspaces.py +84 -7
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/pyproject.toml +12 -3
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_assets.py +13 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_audio_utils.py +508 -3
- diffusers_workflow-0.4.0b7/tests/test_best_of_n_template.py +66 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_cache_blocks.py +26 -15
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_catalog_shape.py +51 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_catalog_structure.py +13 -2
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_cli.py +1 -1
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_concat_videos.py +82 -1
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_content_types.py +3 -3
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_dissolve_videos.py +43 -2
- diffusers_workflow-0.4.0b7/tests/test_host_memory_projection.py +122 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_integration.py +5 -4
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_introspection.py +113 -0
- diffusers_workflow-0.4.0b7/tests/test_job_history_wal.py +14 -0
- diffusers_workflow-0.4.0b7/tests/test_judge.py +105 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_ltx_prompt_library.py +1 -1
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_mcp_assets.py +78 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_mcp_authoring.py +59 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_mcp_client.py +62 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_mcp_diagnose.py +126 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_mcp_media.py +601 -1
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_mcp_prompts.py +45 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_mcp_server.py +400 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_mcp_workspaces.py +55 -0
- diffusers_workflow-0.4.0b7/tests/test_media_audio.py +343 -0
- diffusers_workflow-0.4.0b7/tests/test_media_frames.py +521 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_media_info.py +20 -4
- diffusers_workflow-0.4.0b7/tests/test_mix_audio.py +152 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_observed_cost.py +131 -6
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_pair_audio_fit.py +9 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_plan.py +471 -5
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_plugin_skills.py +61 -0
- diffusers_workflow-0.4.0b7/tests/test_prompt_library.py +71 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_reference_names.py +2 -2
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_result.py +398 -18
- diffusers_workflow-0.4.0b7/tests/test_scalar_result_validation.py +103 -0
- diffusers_workflow-0.4.0b7/tests/test_select.py +119 -0
- diffusers_workflow-0.4.0b7/tests/test_select_validation.py +185 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_server.py +731 -7
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_server_guides.py +39 -3
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_server_jobs.py +51 -0
- diffusers_workflow-0.4.0b7/tests/test_speech_generation.py +481 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_step_cache.py +118 -5
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_subfolders.py +4 -4
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_task.py +25 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_task_signature_errors.py +6 -2
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_template_subfolders.py +20 -16
- diffusers_workflow-0.4.0b7/tests/test_transcribe_audio.py +104 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_updater.py +9 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_variables.py +73 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_video_utils.py +172 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_workflow.py +41 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_workflow_step_cache.py +1 -0
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/index-Bt8BlCkf.js +0 -41
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/index-D9tEUhx5.css +0 -1
- diffusers_workflow-0.4.0b6/dw/tasks/speech_generation.py +0 -105
- diffusers_workflow-0.4.0b6/dw_mcp/authoring.py +0 -69
- diffusers_workflow-0.4.0b6/dw_mcp/media.py +0 -278
- diffusers_workflow-0.4.0b6/tests/test_mix_audio.py +0 -67
- diffusers_workflow-0.4.0b6/tests/test_speech_generation.py +0 -163
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/LICENSE +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/MANIFEST.in +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/diffusers_workflow.egg-info/dependency_links.txt +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/diffusers_workflow.egg-info/entry_points.txt +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/diffusers_workflow.egg-info/top_level.txt +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/__init__.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/adapter_compatibility.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/assets.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/cache_blocks.json +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/cache_blocks.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/community_pipelines/pipeline_flux_rf_inversion.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/content_types.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/ACCELERATION.md +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/AGENT_LOOP.md +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/DEPENDENCIES.md +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/IP_ADAPTER.md +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/LORAS.md +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/PROMPT_WEIGHTING.md +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/QUANTIZATION.md +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/RECIPES_24GB.md +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/REPL_COMMANDS.md +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/REPL_WORKER_GUIDE.md +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/SECURITY.md +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/SECURITY_QUICKREF.md +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/docs/TESTING.md +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/elision.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/events.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/for_each.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/host_memory.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/hub_cache.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/kernel_availability.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/log_setup.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/pipeline_processors/chain.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/pipeline_processors/config_objects.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/pipeline_processors/pipeline.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/pipeline_processors/remote.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/previous_results.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/prompt_weighting.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/prompts.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/realize.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/reference_limits.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/reference_names.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/repl.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/repl_commands.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/repl_worker.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/run.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/runs.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/schema.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/security.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/serve.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/__init__.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/enhancers.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/exports.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/mcp_mount.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/netinfo.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/abap-08VXUWAP.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/apex-BWPQTe0t.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/azcli-Bc_sGQ0U.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/bat-i0X4ZdIN.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/bicep-B5-_aFwp.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/cameligo-DMUM7wLl.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/clojure-Cm7r79vr.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/codicon-Brq4_Ui5.ttf +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/coffee-Ba7i2nA0.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/cpp-C7h46wYY.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/csharp-BKxtCVv1.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/csp-bTuwJoIa.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/css-DIMkf-bt.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/css.worker-B3ciXF_0.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/cypher-CVaqCwHa.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/dart-onAF5SnQ.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/dockerfile-DZFCIeNp.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/ecl-D05T4iGw.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/editor-jjEx9u7D.css +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/editor.worker-q-txB4vs.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/elixir-6RTg0lbw.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/flow9-C5_-GSwl.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/fsharp-C8Ef5oNN.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/go-C-y9NEjX.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/graphql-fmXr3nnJ.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/hcl-CpzslTdj.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/html.worker-C93Ht9o9.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/ini-sBoK_t0W.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/java-BEtHBSE6.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/json.worker-B2V3pomh.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/julia-Bri6UV-V.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/kotlin-BOotOW0E.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/less-B9JPFI3C.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/lexon-CfSJPG6W.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/lua-CsQS60Ue.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/m3-D-oSqn_W.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/markdown-Cimd5fb3.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/mips-CIPQ_RoX.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/monaco--ixms01u.css +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/msdax-DauUninz.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/mysql-SOo6toE5.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/objective-c-FvmIjYaQ.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/pascal-DrH0SRf2.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/pascaligo-D-ptJ9y-.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/perl-oz_6vUea.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/pgsql-DTj74zXo.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/php-nr791fC2.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/pla-CopQ2nXW.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/postiats-43DmfD33.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/powerquery-D3hlyOfw.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/powershell-DmHpPYUd.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/protobuf-C531GsRP.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/pug-Z5eAx3Zn.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/qsharp-DkqhCAOL.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/r-BwWrilGY.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/redis-ClamHrr6.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/redshift-DT7zqm-g.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/restructuredtext-BYgofb2h.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/ruby-DezsRK8O.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/rust-DdL9SqIa.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/sb-CcwsVR0C.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/scala-DHpiXF5c.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/scheme-BeGwcela.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/scss-gp-XZpBa.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/shell-CC2rA5mh.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/solidity-BEEn4gHE.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/sophia-CRfGWb83.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/sparql-D_Lu-MrJ.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/sql-NEE52Syq.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/st-DbInun42.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/swift-Bxkupp3x.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/systemverilog-Bz4Y3fRF.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/tcl-DISqw1ZD.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/ts.worker-D7T1-Ig5.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/twig-De2hgUGE.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/typespec-B8J7ngcE.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/vb-DV3o63ZY.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/ui/assets/wgsl-DpFanUEy.js +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/server/updater.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/settings.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/subfolders.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/background_remover.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/borders.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/compose_text.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/depth_estimator.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/diffusion_upscale.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/format_messages.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/gather.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/image_to_text.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/image_utils.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/interpolate_frames.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/model_cache.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/qr_code.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/restore_faces.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/rife_model.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/segment.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/stabilize.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/tensor_image.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/text_generation.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/text_sections.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/upscale.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/tasks/zoe_depth.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/teacache.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/teacache_models.json +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/test.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/type_helpers.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/validate.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/variable_constraints.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/workflow_sources.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/workflows/h3_context_ir.json +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/workflows/test.json +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw/workspace.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw_mcp/__init__.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw_mcp/__main__.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw_mcp/exports.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw_mcp/guides.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/dw_mcp/models.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/setup.cfg +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_argument_updates.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_arguments.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_borders.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_chain.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_component_pruning.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_compose_text.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_config_objects.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_configuration_schema.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_depth_estimator.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_device.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_device_helpers.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_device_portability.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_dialogue_short_voices.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_diffusion_upscale.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_docs_links.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_elision.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_events.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_examples.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_for_each.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_gather.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_h3_adapters.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_h3_context_ir.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_h3_schedule.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_hf_placement.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_host_memory.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_hub_cache.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_image_to_text.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_image_utils.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_interpolate_frames.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_job_progress.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_job_warnings.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_jobs_listing.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_jobs_reused.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_kernel_availability.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_library_sources.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_list_images.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_locations.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_lora_alpha.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_ltx2_diffusion_decode.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_ltx2_ic_loras.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_mcp_catalog.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_mcp_exports.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_mcp_guides.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_mcp_main.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_mcp_models.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_model_cache.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_modular_pipeline.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_modular_progress.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_offload_placement.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_output_references.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_pair_audio.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_phase_events.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_pipeline_caching.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_pipeline_components.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_previous_results.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_prompt_parser.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_prompt_references.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_prompt_weighting.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_prompts.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_realize.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_recenter_crop.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_reference_limits.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_repl_commands.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_repl_ergonomics.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_repl_hierarchical.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_repl_reorganization.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_repl_worker.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_rerun_new_seed.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_resize_bucket.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_result_output_naming.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_runs.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_scheduler_config.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_schema.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_security.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_segment.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_serve_main.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_server_downloads.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_server_exports.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_server_info.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_server_mcp.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_server_workspaces.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_stabilize.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_step.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_strip_exif_and_watermark.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_task_discovery.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_task_domains.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_teacache.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_tensor_image.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_text_generation.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_text_sections.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_type_helpers.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_validate_arguments.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_variable_constraints.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_worker.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_worker_execute.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_workflow_sources.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_workflow_trust.py +0 -0
- {diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/tests/test_workspace.py +0 -0
{diffusers_workflow-0.4.0b6/diffusers_workflow.egg-info → diffusers_workflow-0.4.0b7}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: diffusers-workflow
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.0b7
|
|
4
4
|
Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
|
|
5
5
|
Author: dkackman
|
|
6
6
|
License: Apache-2.0
|
|
@@ -47,6 +47,7 @@ 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: speechbrain>=1.0.3
|
|
50
51
|
Requires-Dist: qrcode>=8.2
|
|
51
52
|
Requires-Dist: requests>=2.34.2
|
|
52
53
|
Requires-Dist: aiohttp>=3.14.3
|
|
@@ -159,7 +160,7 @@ once; without it the run fails partway through with a 401/403 from the Hub.
|
|
|
159
160
|
|
|
160
161
|
## Drive it from an agent
|
|
161
162
|
|
|
162
|
-
Then just ask. The agent has
|
|
163
|
+
Then just ask. The agent has 58 tools covering the whole surface — the
|
|
163
164
|
workflow catalog, the real diffusers pipeline signatures, the job queue, the
|
|
164
165
|
gallery, the model cache:
|
|
165
166
|
|
|
@@ -83,7 +83,7 @@ once; without it the run fails partway through with a 401/403 from the Hub.
|
|
|
83
83
|
|
|
84
84
|
## Drive it from an agent
|
|
85
85
|
|
|
86
|
-
Then just ask. The agent has
|
|
86
|
+
Then just ask. The agent has 58 tools covering the whole surface — the
|
|
87
87
|
workflow catalog, the real diffusers pipeline signatures, the job queue, the
|
|
88
88
|
gallery, the model cache:
|
|
89
89
|
|
{diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7/diffusers_workflow.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: diffusers-workflow
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.0b7
|
|
4
4
|
Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
|
|
5
5
|
Author: dkackman
|
|
6
6
|
License: Apache-2.0
|
|
@@ -47,6 +47,7 @@ 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: speechbrain>=1.0.3
|
|
50
51
|
Requires-Dist: qrcode>=8.2
|
|
51
52
|
Requires-Dist: requests>=2.34.2
|
|
52
53
|
Requires-Dist: aiohttp>=3.14.3
|
|
@@ -159,7 +160,7 @@ once; without it the run fails partway through with a 401/403 from the Hub.
|
|
|
159
160
|
|
|
160
161
|
## Drive it from an agent
|
|
161
162
|
|
|
162
|
-
Then just ask. The agent has
|
|
163
|
+
Then just ask. The agent has 58 tools covering the whole surface — the
|
|
163
164
|
workflow catalog, the real diffusers pipeline signatures, the job queue, the
|
|
164
165
|
gallery, the model cache:
|
|
165
166
|
|
{diffusers_workflow-0.4.0b6 → diffusers_workflow-0.4.0b7}/diffusers_workflow.egg-info/SOURCES.txt
RENAMED
|
@@ -19,11 +19,14 @@ dw/elision.py
|
|
|
19
19
|
dw/events.py
|
|
20
20
|
dw/for_each.py
|
|
21
21
|
dw/host_memory.py
|
|
22
|
+
dw/host_memory_projection.py
|
|
22
23
|
dw/hub_cache.py
|
|
23
24
|
dw/introspection.py
|
|
24
25
|
dw/kernel_availability.py
|
|
25
26
|
dw/locations.py
|
|
26
27
|
dw/log_setup.py
|
|
28
|
+
dw/media_audio.py
|
|
29
|
+
dw/media_frames.py
|
|
27
30
|
dw/media_info.py
|
|
28
31
|
dw/plan.py
|
|
29
32
|
dw/previous_results.py
|
|
@@ -39,8 +42,10 @@ dw/repl_worker.py
|
|
|
39
42
|
dw/result.py
|
|
40
43
|
dw/run.py
|
|
41
44
|
dw/runs.py
|
|
45
|
+
dw/scalar_result_validation.py
|
|
42
46
|
dw/schema.py
|
|
43
47
|
dw/security.py
|
|
48
|
+
dw/select_validation.py
|
|
44
49
|
dw/serve.py
|
|
45
50
|
dw/settings.py
|
|
46
51
|
dw/step.py
|
|
@@ -54,6 +59,7 @@ dw/type_helpers.py
|
|
|
54
59
|
dw/validate.py
|
|
55
60
|
dw/variable_constraints.py
|
|
56
61
|
dw/variables.py
|
|
62
|
+
dw/vram_estimate.py
|
|
57
63
|
dw/worker.py
|
|
58
64
|
dw/workflow.py
|
|
59
65
|
dw/workflow_schema.json
|
|
@@ -94,6 +100,7 @@ dw/server/jobs.py
|
|
|
94
100
|
dw/server/mcp_mount.py
|
|
95
101
|
dw/server/netinfo.py
|
|
96
102
|
dw/server/observed_cost.py
|
|
103
|
+
dw/server/sysinfo.py
|
|
97
104
|
dw/server/updater.py
|
|
98
105
|
dw/server/ui/index.html
|
|
99
106
|
dw/server/ui/assets/abap-08VXUWAP.js
|
|
@@ -110,45 +117,45 @@ dw/server/ui/assets/csharp-BKxtCVv1.js
|
|
|
110
117
|
dw/server/ui/assets/csp-bTuwJoIa.js
|
|
111
118
|
dw/server/ui/assets/css-DIMkf-bt.js
|
|
112
119
|
dw/server/ui/assets/css.worker-B3ciXF_0.js
|
|
113
|
-
dw/server/ui/assets/cssMode-
|
|
120
|
+
dw/server/ui/assets/cssMode-xQCqMuag.js
|
|
114
121
|
dw/server/ui/assets/cypher-CVaqCwHa.js
|
|
115
122
|
dw/server/ui/assets/dart-onAF5SnQ.js
|
|
116
123
|
dw/server/ui/assets/dockerfile-DZFCIeNp.js
|
|
117
124
|
dw/server/ui/assets/ecl-D05T4iGw.js
|
|
118
125
|
dw/server/ui/assets/editor-jjEx9u7D.css
|
|
119
|
-
dw/server/ui/assets/editor.api-
|
|
126
|
+
dw/server/ui/assets/editor.api-Bfiq9hmW.js
|
|
120
127
|
dw/server/ui/assets/editor.worker-q-txB4vs.js
|
|
121
128
|
dw/server/ui/assets/elixir-6RTg0lbw.js
|
|
122
129
|
dw/server/ui/assets/flow9-C5_-GSwl.js
|
|
123
|
-
dw/server/ui/assets/freemarker2-
|
|
130
|
+
dw/server/ui/assets/freemarker2-BwDnlSuz.js
|
|
124
131
|
dw/server/ui/assets/fsharp-C8Ef5oNN.js
|
|
125
132
|
dw/server/ui/assets/go-C-y9NEjX.js
|
|
126
133
|
dw/server/ui/assets/graphql-fmXr3nnJ.js
|
|
127
|
-
dw/server/ui/assets/handlebars-
|
|
134
|
+
dw/server/ui/assets/handlebars-Beb1we4G.js
|
|
128
135
|
dw/server/ui/assets/hcl-CpzslTdj.js
|
|
129
|
-
dw/server/ui/assets/html-
|
|
136
|
+
dw/server/ui/assets/html-Yw-qdTCH.js
|
|
130
137
|
dw/server/ui/assets/html.worker-C93Ht9o9.js
|
|
131
|
-
dw/server/ui/assets/htmlMode-
|
|
132
|
-
dw/server/ui/assets/index-
|
|
133
|
-
dw/server/ui/assets/index-
|
|
138
|
+
dw/server/ui/assets/htmlMode-Dbp7eBPO.js
|
|
139
|
+
dw/server/ui/assets/index-CsXMC8a8.css
|
|
140
|
+
dw/server/ui/assets/index-DqbiZNFq.js
|
|
134
141
|
dw/server/ui/assets/ini-sBoK_t0W.js
|
|
135
142
|
dw/server/ui/assets/java-BEtHBSE6.js
|
|
136
|
-
dw/server/ui/assets/javascript-
|
|
143
|
+
dw/server/ui/assets/javascript-BNzP7yQZ.js
|
|
137
144
|
dw/server/ui/assets/json.worker-B2V3pomh.js
|
|
138
|
-
dw/server/ui/assets/jsonMode-
|
|
145
|
+
dw/server/ui/assets/jsonMode-DxIEESAg.js
|
|
139
146
|
dw/server/ui/assets/julia-Bri6UV-V.js
|
|
140
147
|
dw/server/ui/assets/kotlin-BOotOW0E.js
|
|
141
148
|
dw/server/ui/assets/less-B9JPFI3C.js
|
|
142
149
|
dw/server/ui/assets/lexon-CfSJPG6W.js
|
|
143
|
-
dw/server/ui/assets/liquid-
|
|
144
|
-
dw/server/ui/assets/lspLanguageFeatures-
|
|
150
|
+
dw/server/ui/assets/liquid-CeQTai1N.js
|
|
151
|
+
dw/server/ui/assets/lspLanguageFeatures-DKVB_UCB.js
|
|
145
152
|
dw/server/ui/assets/lua-CsQS60Ue.js
|
|
146
153
|
dw/server/ui/assets/m3-D-oSqn_W.js
|
|
147
154
|
dw/server/ui/assets/markdown-Cimd5fb3.js
|
|
148
|
-
dw/server/ui/assets/mdx-
|
|
155
|
+
dw/server/ui/assets/mdx-Bczl_PHr.js
|
|
149
156
|
dw/server/ui/assets/mips-CIPQ_RoX.js
|
|
150
157
|
dw/server/ui/assets/monaco--ixms01u.css
|
|
151
|
-
dw/server/ui/assets/monaco-
|
|
158
|
+
dw/server/ui/assets/monaco-Bu2OB6wI.js
|
|
152
159
|
dw/server/ui/assets/msdax-DauUninz.js
|
|
153
160
|
dw/server/ui/assets/mysql-SOo6toE5.js
|
|
154
161
|
dw/server/ui/assets/objective-c-FvmIjYaQ.js
|
|
@@ -163,10 +170,10 @@ dw/server/ui/assets/powerquery-D3hlyOfw.js
|
|
|
163
170
|
dw/server/ui/assets/powershell-DmHpPYUd.js
|
|
164
171
|
dw/server/ui/assets/protobuf-C531GsRP.js
|
|
165
172
|
dw/server/ui/assets/pug-Z5eAx3Zn.js
|
|
166
|
-
dw/server/ui/assets/python-
|
|
173
|
+
dw/server/ui/assets/python-CeTsj82v.js
|
|
167
174
|
dw/server/ui/assets/qsharp-DkqhCAOL.js
|
|
168
175
|
dw/server/ui/assets/r-BwWrilGY.js
|
|
169
|
-
dw/server/ui/assets/razor-
|
|
176
|
+
dw/server/ui/assets/razor-CN7JaWqc.js
|
|
170
177
|
dw/server/ui/assets/redis-ClamHrr6.js
|
|
171
178
|
dw/server/ui/assets/redshift-DT7zqm-g.js
|
|
172
179
|
dw/server/ui/assets/restructuredtext-BYgofb2h.js
|
|
@@ -186,15 +193,16 @@ dw/server/ui/assets/swift-Bxkupp3x.js
|
|
|
186
193
|
dw/server/ui/assets/systemverilog-Bz4Y3fRF.js
|
|
187
194
|
dw/server/ui/assets/tcl-DISqw1ZD.js
|
|
188
195
|
dw/server/ui/assets/ts.worker-D7T1-Ig5.js
|
|
189
|
-
dw/server/ui/assets/tsMode-
|
|
196
|
+
dw/server/ui/assets/tsMode-CoSEMx-L.js
|
|
190
197
|
dw/server/ui/assets/twig-De2hgUGE.js
|
|
191
|
-
dw/server/ui/assets/typescript-
|
|
198
|
+
dw/server/ui/assets/typescript-CcsolRTO.js
|
|
192
199
|
dw/server/ui/assets/typespec-B8J7ngcE.js
|
|
193
200
|
dw/server/ui/assets/vb-DV3o63ZY.js
|
|
194
201
|
dw/server/ui/assets/wgsl-DpFanUEy.js
|
|
195
|
-
dw/server/ui/assets/workers-
|
|
196
|
-
dw/server/ui/assets/xml-
|
|
197
|
-
dw/server/ui/assets/yaml-
|
|
202
|
+
dw/server/ui/assets/workers-DLaycdy4.js
|
|
203
|
+
dw/server/ui/assets/xml-QEwuyn1w.js
|
|
204
|
+
dw/server/ui/assets/yaml-BB4U5D-R.js
|
|
205
|
+
dw/tasks/audio_transcription.py
|
|
198
206
|
dw/tasks/audio_utils.py
|
|
199
207
|
dw/tasks/background_remover.py
|
|
200
208
|
dw/tasks/borders.py
|
|
@@ -208,12 +216,14 @@ dw/tasks/gather.py
|
|
|
208
216
|
dw/tasks/image_to_text.py
|
|
209
217
|
dw/tasks/image_utils.py
|
|
210
218
|
dw/tasks/interpolate_frames.py
|
|
219
|
+
dw/tasks/judge.py
|
|
211
220
|
dw/tasks/model_cache.py
|
|
212
221
|
dw/tasks/pair_audio.py
|
|
213
222
|
dw/tasks/qr_code.py
|
|
214
223
|
dw/tasks/restore_faces.py
|
|
215
224
|
dw/tasks/rife_model.py
|
|
216
225
|
dw/tasks/segment.py
|
|
226
|
+
dw/tasks/select.py
|
|
217
227
|
dw/tasks/speech_generation.py
|
|
218
228
|
dw/tasks/stabilize.py
|
|
219
229
|
dw/tasks/task.py
|
|
@@ -243,6 +253,7 @@ tests/test_argument_updates.py
|
|
|
243
253
|
tests/test_arguments.py
|
|
244
254
|
tests/test_assets.py
|
|
245
255
|
tests/test_audio_utils.py
|
|
256
|
+
tests/test_best_of_n_template.py
|
|
246
257
|
tests/test_borders.py
|
|
247
258
|
tests/test_cache_blocks.py
|
|
248
259
|
tests/test_catalog_shape.py
|
|
@@ -273,16 +284,19 @@ tests/test_h3_context_ir.py
|
|
|
273
284
|
tests/test_h3_schedule.py
|
|
274
285
|
tests/test_hf_placement.py
|
|
275
286
|
tests/test_host_memory.py
|
|
287
|
+
tests/test_host_memory_projection.py
|
|
276
288
|
tests/test_hub_cache.py
|
|
277
289
|
tests/test_image_to_text.py
|
|
278
290
|
tests/test_image_utils.py
|
|
279
291
|
tests/test_integration.py
|
|
280
292
|
tests/test_interpolate_frames.py
|
|
281
293
|
tests/test_introspection.py
|
|
294
|
+
tests/test_job_history_wal.py
|
|
282
295
|
tests/test_job_progress.py
|
|
283
296
|
tests/test_job_warnings.py
|
|
284
297
|
tests/test_jobs_listing.py
|
|
285
298
|
tests/test_jobs_reused.py
|
|
299
|
+
tests/test_judge.py
|
|
286
300
|
tests/test_kernel_availability.py
|
|
287
301
|
tests/test_library_sources.py
|
|
288
302
|
tests/test_list_images.py
|
|
@@ -304,6 +318,8 @@ tests/test_mcp_models.py
|
|
|
304
318
|
tests/test_mcp_prompts.py
|
|
305
319
|
tests/test_mcp_server.py
|
|
306
320
|
tests/test_mcp_workspaces.py
|
|
321
|
+
tests/test_media_audio.py
|
|
322
|
+
tests/test_media_frames.py
|
|
307
323
|
tests/test_media_info.py
|
|
308
324
|
tests/test_mix_audio.py
|
|
309
325
|
tests/test_model_cache.py
|
|
@@ -320,6 +336,7 @@ tests/test_pipeline_components.py
|
|
|
320
336
|
tests/test_plan.py
|
|
321
337
|
tests/test_plugin_skills.py
|
|
322
338
|
tests/test_previous_results.py
|
|
339
|
+
tests/test_prompt_library.py
|
|
323
340
|
tests/test_prompt_parser.py
|
|
324
341
|
tests/test_prompt_references.py
|
|
325
342
|
tests/test_prompt_weighting.py
|
|
@@ -338,10 +355,13 @@ tests/test_resize_bucket.py
|
|
|
338
355
|
tests/test_result.py
|
|
339
356
|
tests/test_result_output_naming.py
|
|
340
357
|
tests/test_runs.py
|
|
358
|
+
tests/test_scalar_result_validation.py
|
|
341
359
|
tests/test_scheduler_config.py
|
|
342
360
|
tests/test_schema.py
|
|
343
361
|
tests/test_security.py
|
|
344
362
|
tests/test_segment.py
|
|
363
|
+
tests/test_select.py
|
|
364
|
+
tests/test_select_validation.py
|
|
345
365
|
tests/test_serve_main.py
|
|
346
366
|
tests/test_server.py
|
|
347
367
|
tests/test_server_downloads.py
|
|
@@ -366,6 +386,7 @@ tests/test_template_subfolders.py
|
|
|
366
386
|
tests/test_tensor_image.py
|
|
367
387
|
tests/test_text_generation.py
|
|
368
388
|
tests/test_text_sections.py
|
|
389
|
+
tests/test_transcribe_audio.py
|
|
369
390
|
tests/test_type_helpers.py
|
|
370
391
|
tests/test_updater.py
|
|
371
392
|
tests/test_validate_arguments.py
|
|
@@ -116,7 +116,7 @@ def realize_args(arg, base_dir=None):
|
|
|
116
116
|
# library, and does it first: what it stands for is a path, so
|
|
117
117
|
# everything below - the media conventions, an object's
|
|
118
118
|
# 'from_file' - then handles it as the path it always was
|
|
119
|
-
if is_path_reference(v) or isinstance(v, list):
|
|
119
|
+
if is_path_reference(v) or isinstance(v, (list, dict)):
|
|
120
120
|
v = arg[k] = resolve_path_references(v, base_dir)
|
|
121
121
|
# A constant resolves under any argument name, and before the
|
|
122
122
|
# conventions below - what it holds is the value, not a file to load
|
|
@@ -212,7 +212,12 @@ def resolve_path_references(value, base_dir=None):
|
|
|
212
212
|
A list is walked in place, because an 'image' argument may be a list of
|
|
213
213
|
references and the key conventions hand the whole list to the loader at
|
|
214
214
|
once - by then it is too late for a reference to be recognized.
|
|
215
|
-
|
|
215
|
+
A {"location": ...} dict is walked the same way, for the same reason: the
|
|
216
|
+
media conventions hand the whole dict to the loader, which reads the
|
|
217
|
+
location out of it and joins it onto the workflow directory - so
|
|
218
|
+
{"location": "asset:x.png"} passed validation (which sees every string)
|
|
219
|
+
and then failed the run on a path that was never resolved. Other
|
|
220
|
+
dictionaries are left alone: realize_args recurses into those itself,
|
|
216
221
|
and each of their values reaches this on the way through.
|
|
217
222
|
"""
|
|
218
223
|
if is_asset_reference(value):
|
|
@@ -222,6 +227,8 @@ def resolve_path_references(value, base_dir=None):
|
|
|
222
227
|
if isinstance(value, list):
|
|
223
228
|
for index, item in enumerate(value):
|
|
224
229
|
value[index] = resolve_path_references(item, base_dir)
|
|
230
|
+
elif isinstance(value, dict) and is_path_reference(value.get("location")):
|
|
231
|
+
value["location"] = resolve_path_references(value["location"], base_dir)
|
|
225
232
|
return value
|
|
226
233
|
|
|
227
234
|
|
|
@@ -187,7 +187,7 @@ Nothing in this sequence costs GPU time.
|
|
|
187
187
|
|
|
188
188
|
## Tool reference
|
|
189
189
|
|
|
190
|
-
|
|
190
|
+
58 tools in six groups. Names and arguments below are transcribed from
|
|
191
191
|
`dw_mcp/server.py` — nothing here is renamed or reshaped for the docs.
|
|
192
192
|
|
|
193
193
|
### Catalog (read-only)
|
|
@@ -223,8 +223,8 @@ when no single workflow covers it.
|
|
|
223
223
|
| `get_task(command)` | `command` | Get a task command's argument schema |
|
|
224
224
|
| `list_models()` | — | List what the Hugging Face model cache holds, largest first |
|
|
225
225
|
| `get_memory()` | — | Get the worker's VRAM and RAM statistics. `gpu_*` is the card; `host_memory_rss_mb` / `host_memory_peak_rss_mb` are the worker process's resident and high-water host memory, beside the machine's `host_memory_total_mb` / `host_memory_available_mb` - read both, since an offloading workflow keeps its weights in host RAM and the card says little about what it holds (a host field is absent, not null, where the platform cannot measure it). `host_pinned_reserved_mb` / `host_pinned_allocated_mb`, when present, are torch's pinned-host cache - the staging buffers group offloading moves weights through, part of `host_memory_rss_mb` and invisible in every `gpu_*` figure, which is what a worker holding GB after releasing every model is usually holding (#98). `live: true` means `info` was measured now and is the worker's own memory; only live readings are comparable with each other. `live: false` with `info: null` (and `stale: false`) means nothing has been measured because nothing is resident; `live: false` with a populated `info` is a cached earlier reading, with `reason` (`job_running`, `worker_stopped`, `worker_busy`, `worker_unreachable`) and `age_seconds` - one cached while a job loads a model understates what is resident, so ask again when the server is idle rather than comparing it with a live figure |
|
|
226
|
-
| `get_health()` | — | Check that the server is alive, and which machine answered: `version`, `device`, whether
|
|
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 |
|
|
226
|
+
| `get_health()` | — | Check that the server is alive, and which machine answered: `version`, `device`, whether a model process is currently resident (`worker_alive`), the job running now and the queue depth. `worker_alive: false` is the normal idle state on a server that has not run a job since startup or the last memory clear - not a fault - the on-demand worker starts with the next job (#206) |
|
|
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. `runtime` (#222) reports the Python version, torch version and the CUDA version torch was built against, the NVIDIA driver version (when `nvidia-smi` is reachable), and the installed versions of diffusers, transformers, accelerate, bitsandbytes, peft, safetensors and sentencepiece (`null` for one not installed) - for diagnosing an environment mismatch between boxes without shelling in |
|
|
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
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 |
|
|
@@ -233,10 +233,12 @@ when no single workflow covers it.
|
|
|
233
233
|
|
|
234
234
|
| Tool | Arguments | Purpose |
|
|
235
235
|
| --- | --- | --- |
|
|
236
|
-
| `get_output_image(name, max_dimension=768, workspace=None)` | `name`, `max_dimension`, `workspace` | Look at a generated image, downscaled to `max_dimension` on its longest side. Returns the image plus a text part reporting `original_size`, `returned_size` and `bytes`, so a downscale is never silent. `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 |
|
|
236
|
+
| `get_output_image(name, max_dimension=768, workspace=None, crop=None)` | `name`, `max_dimension`, `workspace`, `crop` | Look at a generated image, downscaled to `max_dimension` on its longest side. Returns the image plus a text part reporting `original_size`, `returned_size` and `bytes`, so a downscale is never silent. `crop` is `[x, y, width, height]` in the original's pixels, cut before the downscale and reported back clamped - the way to see a region of a 2K still at 100%, where the whole would be shrunk past what a small element or a decode-tiling seam can be judged at. `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 |
|
|
237
|
+
| `get_output_audio(name, start=None, duration=None, workspace=None)` | `name`, `start`, `duration`, `workspace` | Listen to a generated soundtrack as base64 - an audio output, or the track muxed into a video (#193) - in its own encoding when served whole, WAV when extracted or excerpted. No downscale exists for audio, so a whole clip over the 4MB budget is refused rather than cut (#204); ask for the part instead with `start` and `duration` in seconds, and the text part names what was cut (`excerpt: 2.0s from 10.0s of 240.0s`) so a slice is never mistaken for the whole. `get_gallery_metadata`'s envelope says where in a track to look. `workspace` names the workspace for this one call without switching the session to it |
|
|
238
|
+
| `get_output_frames(name, at=None, seams=None, count=None, boundaries=None, names=None, max_dimension=512, hear=None, workspace=None)` | `name`, `at`, `seams`, `count`, `boundaries`, `names`, `max_dimension`, `hear`, `workspace` | See a generated video as frames, since there is no video content type over MCP (#193). One selector per call: `count` for an evenly spaced contact sheet, `at` for moments (seconds or `"frame:N"`), `seams` (true, or seam numbers from 1) for the last frame before and first frame after each join side by side (each pair carries `difference`, the mean pixel change across the join, 0-255 - rank seams by it and look at the worst) - `boundaries` is each later shot's first frame - the running sum of the shots' `frame_count` from `get_gallery_metadata` on their own `intermediate/` files - and `names` names them. Tiles are fitted to `max_dimension` and, when the set would exceed the 4MB budget, shrunk together rather than dropped; the text part lists each tile and says so. `hear=N` also returns N seconds of soundtrack centred on each `at` moment, after its image - the way to check a hit point or lip-sync without reconciling two clocks; a mute clip keeps its frames and says `no soundtrack` |
|
|
237
239
|
| `get_output_text(name, max_characters=20000, workspace=None)` | `name`, `max_characters`, `workspace` | Read a text output — a prompt enhancement, or any step whose result is `text/plain` or JSON. Reports the file's real length and whether it was truncated. `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 |
|
|
238
240
|
| `download_output(name, destination=None, overwrite=False, workspace=None)` | `name`, `destination`, `overwrite`, `workspace` | Save one output file to local disk, of any content type. `destination` may be a full path, a directory, or omitted to save under the output's own name in the current working directory; `~` expands and missing parent directories are created. `overwrite=True` is required to replace a file already at the resolved path. Over a `dw.serve --mcp` endpoint the file lands on the server, so the destination is confined to that workspace and a relative one is joined onto it. Returns nothing to the conversation but where the file landed — unlike the other media tools, the point is a file on disk, not a payload in context. Writes on the machine running the MCP server - over `dw.serve --mcp` that is the GPU box. A write that fails there (a path that exists only on the client, for instance) comes back as an error naming the server-side write and the client-side alternatives, not as an anonymous tool failure. `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 |
|
|
239
|
-
| `delete_output(name, workspace=None)` | `name`, `workspace` | Permanently remove one generated file from the output directory. `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 |
|
|
241
|
+
| `delete_output(name=None, workspace=None, job_id=None)` | exactly one of `name` / `job_id`, `workspace` | Permanently remove one generated file from the output directory, or - with `name` a `<workflow>/<run id>` run directory, or with `job_id` - a whole run. By `job_id` the run directory is read from the job record (`run_dir`) and the reply adds `job_id` and the resolved `run_dir` to the usual `name` / `deleted` / `run_swept`; a job that never wrote a run directory, or an unknown one, is an error. `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; a `job_id` delete with no `workspace` goes to the workspace the job ran in |
|
|
240
242
|
|
|
241
243
|
### Authoring, assets and workspaces
|
|
242
244
|
|
|
@@ -247,16 +249,33 @@ of its life. That is how two agents work against one GPU without saving over
|
|
|
247
249
|
each other; see [Workspaces](WORKSPACES.md#several-workspaces-on-one-server).
|
|
248
250
|
The session starts in `default` and stays there unless it is told otherwise.
|
|
249
251
|
|
|
252
|
+
The pin above is per-*process* state on `client.py`'s `DwClient`, which is
|
|
253
|
+
one session for the local stdio `dw-mcp`, but `dw.serve --mcp` (see
|
|
254
|
+
[REMOTE.md](REMOTE.md#claude-code-no-local-install)) builds a single client
|
|
255
|
+
for every agent it serves - so on that mounted surface the pin is shared by
|
|
256
|
+
every concurrently connected caller, not scoped to any one of them (#298).
|
|
257
|
+
A second client's `use_workspace`/`create_workspace(use=true)` can switch
|
|
258
|
+
what your session reads and writes without your session calling either. This
|
|
259
|
+
server is single-user by design, so nothing tracks distinct MCP sessions to
|
|
260
|
+
fix that; `use_workspace`/`create_workspace` add a `warning` field to their
|
|
261
|
+
result when the pin they are about to overwrite was already pointed
|
|
262
|
+
somewhere other than `default` (a sign another client may depend on it), but
|
|
263
|
+
they cannot warn the *other* session whose pin just moved out from under it.
|
|
264
|
+
A caller that needs real isolation on a mounted server - the tester and
|
|
265
|
+
regression harnesses among them - must pass `workspace=` on every call that
|
|
266
|
+
accepts it (`validate_workflow`, `run_workflow`, and most of the read/media
|
|
267
|
+
tools) rather than relying on the session pin.
|
|
268
|
+
|
|
250
269
|
| Tool | Arguments | Purpose |
|
|
251
270
|
| --- | --- | --- |
|
|
252
271
|
| `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
272
|
| `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
|
-
| `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
|
-
| `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 |
|
|
273
|
+
| `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. On a `dw.serve --mcp` endpoint the pin is shared by every connected client (#298, see the note above the table) - a `warning` field appears when this call overwrote a pin already pointed away from `default` |
|
|
274
|
+
| `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. `use=true` carries the same mounted-server caveat and `warning` field as `use_workspace` |
|
|
256
275
|
| `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
276
|
| `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
277
|
| `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
|
-
| `upload_asset(file_path, asset_name=None, shared=False)` | `file_path` | Push
|
|
278
|
+
| `upload_asset(file_path=None, content=None, asset_name=None, shared=False)` | exactly one of `file_path` or `content` (base64), optional `asset_name`, `shared` | Push an image, video or audio file into the server's asset library and get back its `asset:` reference. `file_path` is read from the machine the MCP server runs on, so this is how an input reaches a dw.serve running somewhere else - but only when the caller shares a filesystem with that machine. `content` is the alternative for an agent that does not: the bytes travel inline, base64-encoded, in the tool call itself, capped at 4MB (well under `file_path`'s 200MB) because inline bytes compete with the calling agent's own context budget rather than being a bulk-transfer path (#203). `asset_name` is required with `content` (there is no file name to infer one from) and, either way, 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
279
|
| `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 |
|
|
261
280
|
| `save_workflow(name, workflow)` | `name`, `workflow` | Save a workflow into the server's writable workflow directory, overwriting any existing workflow of that name there. A name that currently resolves to a read-only source (an examples directory) is not overwritten - the copy lands in the writable directory and shadows it |
|
|
262
281
|
| `delete_workflow(name)` | `name` | Permanently delete a stored workflow |
|
|
@@ -270,7 +289,7 @@ references written in the same session.
|
|
|
270
289
|
|
|
271
290
|
| Tool | Arguments | Purpose |
|
|
272
291
|
| --- | --- | --- |
|
|
273
|
-
| `list_prompts()` |
|
|
292
|
+
| `list_prompts(tag=None, intended_model=None, include_text=False)` | optional `tag`, `intended_model`, `include_text` | List the stored prompts - description, intended model, tags and `text_chars`, bodies left out; `get_prompt` for one body |
|
|
274
293
|
| `get_prompt(name)` | `name` | Get one stored prompt's full definition |
|
|
275
294
|
| `get_prompt_schema()` | — | Get the JSON schema every stored prompt must satisfy. Its own route rather than a name under `/api/prompts`, so a prompt called `schema` cannot shadow it |
|
|
276
295
|
| `save_prompt(name, prompt)` | `name`, `prompt` | Save a prompt, overwriting any prompt of that name. The server validates first, and refuses a `text` that itself begins with a reference prefix (`variable:`, `previous_result:`, `constant:`, `asset:`, `output:`, `prompt:`) |
|
|
@@ -282,13 +301,14 @@ references written in the same session.
|
|
|
282
301
|
|
|
283
302
|
| Tool | Arguments | Purpose |
|
|
284
303
|
| --- | --- | --- |
|
|
285
|
-
| `run_workflow(workflow_path=None, inline_workflow=None, arguments=None, acknowledged_cost=False, workspace=None)` | exactly one of `workflow_path` (a catalog name from `list_workflows`, with or without `.json`, or a path to a workflow file on the server) or `inline_workflow`, optional `arguments`, `acknowledged_cost`, `workspace` | Queue a workflow for generation. Returns as soon as the job is queued. `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 - `acknowledged_cost` is `true` or the bound `{fingerprint, minutes, downloads}` from the validate plan; a 409 means the plan changed and the message carries the new estimate |
|
|
304
|
+
| `run_workflow(workflow_path=None, inline_workflow=None, arguments=None, acknowledged_cost=False, workspace=None, wait_seconds=0)` | exactly one of `workflow_path` (a catalog name from `list_workflows`, with or without `.json`, or a path to a workflow file on the server) or `inline_workflow`, optional `arguments`, `acknowledged_cost`, `workspace`, `wait_seconds` | Queue a workflow for generation. Returns as soon as the job is queued - unless `wait_seconds` is above 0, in which case the call then waits on the queued job exactly as `wait_for_job(job_id, timeout_seconds=wait_seconds)` would (same 55 s cap per call, clamped not honoured) and the result carries the queued-job fields plus that wait's (`status`, `still_running`, `waited_seconds`, `timeout_requested_seconds`, `timeout_applied_seconds`, `timeout_capped`, the slim `job`); when the cap covers the job's runtime one call is the run and the wait, and a `still_running: true` result is followed with `wait_for_job` as before. `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 - `acknowledged_cost` is `true` or the bound `{fingerprint, minutes, downloads}` from the validate plan; a 409 means the plan changed and the message carries the new estimate, and nothing is waited on |
|
|
286
305
|
| `get_job(job_id)` | `job_id` | Get a job's status, warnings, output manifest, error and traceback; each manifest entry's `subfolder` is the in-run subfolder the step declared - by convention `final` for the deliverable, `intermediate` for scratch, `''` for none. A running job also carries `progress` (below) |
|
|
287
|
-
| `get_job_workflow(job_id)` | `job_id` | The workflow the job actually ran. `realized: true` means every mutable input is pinned (arguments, seed, prompts, `output:latest`); `false` means the job predates run tracking and this is the definition as submitted. Pass it to `save_workflow` to keep it under a name |
|
|
306
|
+
| `get_job_workflow(job_id)` | `job_id` | The REST equivalent is `GET /api/jobs/{id}/workflow` (see [SERVER.md](SERVER.md#jobs-api)). The workflow the job actually ran. `realized: true` means every mutable input is pinned (arguments, seed, prompts, `output:latest`); `false` means the job predates run tracking and this is the definition as submitted. Pass it to `save_workflow` to keep it under a name |
|
|
288
307
|
| `export_job(job_id, overwrite=False)` | `job_id`, `overwrite` | Gather one finished job into `<workspace>/exports/<job id>/` on the server: the realized workflow, the run's manifest, the job row, a README, and copies of the assets, earlier-run inputs and outputs. Returns the directory, a zip URL, the file list with sizes and the total. The three JSON files are in the zip, not repeated here - get_job_workflow and get_job serve them individually. **The directory is on the machine running the server**, like `download_output`'s destination - fetch the zip URL and unpack it into `exports/` under the session's working directory (a deliverable, not a temp file); the archive already unpacks into one folder named after the job id |
|
|
289
308
|
| `get_job_events(job_id, after=-1, limit=200)` | `job_id`, `after`, `limit` | Get a page of a job's progress events |
|
|
290
309
|
| `wait_for_job(job_id, timeout_seconds=20)` | `job_id`, `timeout_seconds` | Block until a job reaches a terminal status, or `timeout_seconds` elapses. **One call blocks for at most 55 seconds** — a larger `timeout_seconds` is clamped, not honoured, because no MCP client holds a tool call open for a generation's real runtime, so budget one call per ~55s of the job. Every reply carries `waited_seconds`, `timeout_requested_seconds`, `timeout_applied_seconds` and `timeout_capped`, so a capped return is distinguishable from an elapsed one. Use instead of hand-polling `get_job`/`get_job_events` in a loop; if it returns `still_running: true`, call it again. Returns a slim job - status, warnings, error, and the manifest once finished - without the arguments; `get_job` has those. A running job also carries `progress` (below) |
|
|
291
310
|
| `cancel_job(job_id)` | `job_id` | Ask a queued or running job to stop |
|
|
311
|
+
| `clear_memory()` | — | Drop every loaded pipeline and the step cache, freeing VRAM/RAM immediately instead of waiting for the next job to evict one model for another. Also drops the step cache, so a seeded workflow that would otherwise reuse cached results regenerates on its next run. Refused with a 409 while a job is running or queued - the queue is FIFO, so wait for it to finish and retry rather than expecting this call to block until it does (#221) |
|
|
292
312
|
| `rerun_job(job_id, acknowledged_cost=False, new_seed=False)` | `job_id`, `acknowledged_cost`, `new_seed` | Queue a fresh job from a previous job's stored specification. Costs GPU time, so it passes the same gate as `run_workflow`. `new_seed=true` draws a fresh seed into the workflow's seed variable — without it a seeded workflow's rerun repeats its arguments exactly and the step cache serves the whole run from the earlier one's files (`reused: true`), generating nothing. `get_job_workflow`'s `seed_variable` says whether there is one - `acknowledged_cost` is `true` or the bound `{fingerprint, minutes, downloads}` from the validate plan; a 409 means the plan changed and the message carries the new estimate |
|
|
293
313
|
| `move_job(job_id, direction)` | `job_id`, `direction` (`up`\|`down`\|`front`\|`back`) | Reorder a queued job |
|
|
294
314
|
|
|
@@ -372,6 +392,8 @@ The intended loop:
|
|
|
372
392
|
4. `get_job(job_id)` for the finished manifest (or the error and traceback,
|
|
373
393
|
if it failed)
|
|
374
394
|
5. `get_output_image(name)` to look at a result image
|
|
395
|
+
6. `get_output_frames(name, count=12)` to look at a result video, and
|
|
396
|
+
`get_output_audio(name, start, duration)` to hear it
|
|
375
397
|
|
|
376
398
|
While a job runs, `get_job` and `wait_for_job` carry a `progress` block -
|
|
377
399
|
the step being run, the phase (`loading`, `generating`, `decoding`,
|
|
@@ -451,18 +473,26 @@ default) for any server an MCP client can reach.
|
|
|
451
473
|
events of a finished job (`MAX_PERSISTED_EVENTS` in the job history store).
|
|
452
474
|
A job that ran before this feature existed returns an empty event list
|
|
453
475
|
with a `note` explaining why.
|
|
454
|
-
- **Images
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
the
|
|
465
|
-
|
|
476
|
+
- **Images, sound and frames.** `get_output_image` returns an image,
|
|
477
|
+
`get_output_audio` a soundtrack (an audio file's, or the one muxed into a
|
|
478
|
+
video) whole or as a named excerpt, and `get_output_frames` frames of a
|
|
479
|
+
video as images - there is no video content type over MCP, so a video is
|
|
480
|
+
seen as frames and heard as its track. `get_output_audio` refuses a whole
|
|
481
|
+
clip whose base64 size would exceed the same 4MB budget; ask for an
|
|
482
|
+
excerpt instead.
|
|
483
|
+
- **Uploads read the MCP server's disk, unless sent inline.**
|
|
484
|
+
`upload_asset(file_path)` pushes a local file into the asset library, but
|
|
485
|
+
"local" means the machine `dw-mcp` runs on. Over `dw.serve --mcp` that is
|
|
486
|
+
the GPU box, so a file sitting on the client's laptop is not reachable that
|
|
487
|
+
way - put it on the server, give the workflow a URL (the arguments that
|
|
488
|
+
take a path take a URL too), or use `upload_asset(content=..., asset_name=...)`
|
|
489
|
+
to send the bytes inline instead, base64-encoded in the call itself, capped
|
|
490
|
+
at 4MB (#203). On a `--mcp` endpoint `file_path` is also *confined* to the
|
|
491
|
+
directories the server works in (its workspace, workflows, assets, outputs
|
|
492
|
+
and prompts), and the refusal comes before the file is looked for, so the
|
|
493
|
+
tool cannot be used to probe which paths exist on the box (#138); `content`
|
|
494
|
+
reads no path and is not subject to this confinement, since no file on
|
|
495
|
+
either machine is ever named.
|
|
466
496
|
`download_output` has the same asymmetry in the other direction: on a
|
|
467
497
|
`--mcp` endpoint it writes on the GPU box, not the client's machine, and is
|
|
468
498
|
confined to the workspace there.
|
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Releasing
|
|
2
2
|
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
This project has no standing release-notes file - GitHub auto-generates
|
|
6
|
+
notes from commits at tag time (see below). This section is a scratch pad
|
|
7
|
+
for items a branch's author wants the next release note to name; clear it
|
|
8
|
+
when a release ships.
|
|
9
|
+
|
|
10
|
+
- `get_output_audio` now reads `GET /api/gallery/{name}/audio`, extracts a
|
|
11
|
+
video's soundtrack, and takes `start`/`duration` (moved off the
|
|
12
|
+
`/outputs` mount, which used to refuse `video/mp4`).
|
|
13
|
+
- New tool `get_output_frames` (route `GET /api/gallery/{name}/frames`):
|
|
14
|
+
a video seen as moments, a contact sheet, or seam pairs.
|
|
15
|
+
- `get_output_frames` takes `hear` (soundtrack around each `at` moment) and
|
|
16
|
+
reports `difference` per seam pair.
|
|
17
|
+
|
|
3
18
|
Releases are cut by pushing a `v<semver>` tag. CI does the rest.
|
|
4
19
|
|
|
5
20
|
```bash
|
|
@@ -59,6 +59,13 @@ Two things differ from the local stdio setup:
|
|
|
59
59
|
result, or open `http://<box>:8765/outputs/<name>` in the browser.
|
|
60
60
|
- The connection is a plain HTTP call per tool invocation; there is no
|
|
61
61
|
subprocess to restart.
|
|
62
|
+
- `use_workspace`/`create_workspace` pin *this box's* one MCP client, shared
|
|
63
|
+
by every agent connected to it - this server is single-user, so there is
|
|
64
|
+
no per-session isolation. If you and another agent are both against the
|
|
65
|
+
same box, either one's `use_workspace` call can move what the other reads
|
|
66
|
+
and writes next (#298). Pass `workspace=` on each call that takes it
|
|
67
|
+
(`validate_workflow`, `run_workflow`, most read/media tools) instead of
|
|
68
|
+
relying on the session pin when that matters.
|
|
62
69
|
|
|
63
70
|
## Claude Code with a local install (stdio)
|
|
64
71
|
|