model-compose 0.4.25__tar.gz → 0.4.26__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 (394) hide show
  1. {model_compose-0.4.25 → model_compose-0.4.26}/PKG-INFO +1 -1
  2. {model_compose-0.4.25 → model_compose-0.4.26}/pyproject.toml +1 -1
  3. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/cli/interrupt.py +3 -2
  4. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/compose/manager.py +2 -2
  5. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/base.py +2 -2
  6. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/runner/client.py +13 -1
  7. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/runner/http_client.py +15 -0
  8. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/runner/mcp_client.py +9 -0
  9. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/runner/runner.py +9 -0
  10. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/services/http_server.py +4 -6
  11. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/services/mcp_server.py +5 -5
  12. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/webui/gradio.py +116 -16
  13. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/webui/webui.py +4 -9
  14. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/workflow/interrupt.py +2 -2
  15. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/workflow/workflow.py +0 -3
  16. {model_compose-0.4.25 → model_compose-0.4.26}/src/model_compose.egg-info/PKG-INFO +1 -1
  17. {model_compose-0.4.25 → model_compose-0.4.26}/LICENSE +0 -0
  18. {model_compose-0.4.25 → model_compose-0.4.26}/README.md +0 -0
  19. {model_compose-0.4.25 → model_compose-0.4.26}/setup.cfg +0 -0
  20. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/__init__.py +0 -0
  21. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/cli/__init__.py +0 -0
  22. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/cli/compose.py +0 -0
  23. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/__init__.py +0 -0
  24. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/__init__.py +0 -0
  25. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/base.py +0 -0
  26. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/component.py +0 -0
  27. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/context.py +0 -0
  28. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/runtime/__init__.py +0 -0
  29. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/runtime/process_manager.py +0 -0
  30. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/runtime/process_worker.py +0 -0
  31. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/__init__.py +0 -0
  32. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/agent.py +0 -0
  33. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/datasets/__init__.py +0 -0
  34. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/datasets/datasets.py +0 -0
  35. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/datasets/providers/__init__.py +0 -0
  36. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/datasets/providers/common.py +0 -0
  37. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/datasets/providers/huggingface.py +0 -0
  38. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/datasets/providers/local.py +0 -0
  39. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/datasets/utils.py +0 -0
  40. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/http_client.py +0 -0
  41. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/http_server.py +0 -0
  42. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/image_processor.py +0 -0
  43. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/mcp_client.py +0 -0
  44. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/mcp_server.py +0 -0
  45. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/__init__.py +0 -0
  46. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/base/__init__.py +0 -0
  47. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/base/common.py +0 -0
  48. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/base/huggingface.py +0 -0
  49. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/base/huggingface_hub.py +0 -0
  50. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/base/unsloth.py +0 -0
  51. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/model.py +0 -0
  52. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/__init__.py +0 -0
  53. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/chat_completion/__init__.py +0 -0
  54. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/chat_completion/huggingface.py +0 -0
  55. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/face_embedding/__init__.py +0 -0
  56. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/face_embedding/common.py +0 -0
  57. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/face_embedding/custom.py +0 -0
  58. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/face_embedding/insightface.py +0 -0
  59. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/image_generation/__init__.py +0 -0
  60. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/image_generation/common.py +0 -0
  61. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/image_generation/custom.py +0 -0
  62. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/image_generation/flux.py +0 -0
  63. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/image_generation/hunyuan_image.py +0 -0
  64. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/image_generation/sdxl.py +0 -0
  65. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/image_to_text/__init__.py +0 -0
  66. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/image_to_text/huggingface.py +0 -0
  67. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/image_upscale/__init__.py +0 -0
  68. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/image_upscale/common.py +0 -0
  69. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/image_upscale/custom.py +0 -0
  70. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/image_upscale/esrgan.py +0 -0
  71. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/image_upscale/ldsr.py +0 -0
  72. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/image_upscale/real_esrgan.py +0 -0
  73. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/image_upscale/swinir.py +0 -0
  74. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/text_classification/__init__.py +0 -0
  75. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/text_classification/huggingface.py +0 -0
  76. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/text_embedding/__init__.py +0 -0
  77. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/text_embedding/huggingface.py +0 -0
  78. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/text_generation/__init__.py +0 -0
  79. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/text_generation/huggingface.py +0 -0
  80. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/text_to_speech/__init__.py +0 -0
  81. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/text_to_speech/common.py +0 -0
  82. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/text_to_speech/custom.py +0 -0
  83. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/model/tasks/text_to_speech/qwen.py +0 -0
  84. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/shell.py +0 -0
  85. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/text_splitter.py +0 -0
  86. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/vector_store/__init__.py +0 -0
  87. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/vector_store/base.py +0 -0
  88. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/vector_store/drivers/__init__.py +0 -0
  89. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/vector_store/drivers/chroma.py +0 -0
  90. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/vector_store/drivers/milvus.py +0 -0
  91. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/vector_store/vector_store.py +0 -0
  92. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/web_scraper.py +0 -0
  93. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/component/services/workflow.py +0 -0
  94. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/compose/__init__.py +0 -0
  95. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/compose/compose.py +0 -0
  96. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/compose/validator.py +0 -0
  97. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/__init__.py +0 -0
  98. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/controller.py +0 -0
  99. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/runner/__init__.py +0 -0
  100. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/runtime/__init__.py +0 -0
  101. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
  102. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/runtime/docker/context/Dockerfile +0 -0
  103. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/runtime/docker/docker.py +0 -0
  104. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/runtime/native/__init__.py +0 -0
  105. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/runtime/native/native.py +0 -0
  106. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/runtime/specs.py +0 -0
  107. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/services/__init__.py +0 -0
  108. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/controller/webui/__init__.py +0 -0
  109. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/evaluator/__init__.py +0 -0
  110. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/evaluator/condition.py +0 -0
  111. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/foundation/__init__.py +0 -0
  112. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/foundation/async_service.py +0 -0
  113. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/foundation/ipc_messages.py +0 -0
  114. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/foundation/process_manager.py +0 -0
  115. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/foundation/process_worker.py +0 -0
  116. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/gateway/__init__.py +0 -0
  117. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/gateway/base.py +0 -0
  118. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/gateway/gateway.py +0 -0
  119. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/gateway/services/__init__.py +0 -0
  120. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/gateway/services/http_tunnel/__init__.py +0 -0
  121. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/gateway/services/http_tunnel/base.py +0 -0
  122. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/gateway/services/http_tunnel/drivers/__init__.py +0 -0
  123. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/gateway/services/http_tunnel/drivers/cloudflare.py +0 -0
  124. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/gateway/services/http_tunnel/drivers/ngrok.py +0 -0
  125. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/gateway/services/http_tunnel/http_tunnel.py +0 -0
  126. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/gateway/services/ssh_tunnel.py +0 -0
  127. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/listener/__init__.py +0 -0
  128. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/listener/base.py +0 -0
  129. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/listener/listener.py +0 -0
  130. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/listener/services/__init__.py +0 -0
  131. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/listener/services/http_callback.py +0 -0
  132. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/listener/services/http_trigger.py +0 -0
  133. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/logger/__init__.py +0 -0
  134. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/logger/base.py +0 -0
  135. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/logger/logger.py +0 -0
  136. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/logger/logging.py +0 -0
  137. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/logger/services/__init__.py +0 -0
  138. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/logger/services/console.py +0 -0
  139. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/logger/services/file.py +0 -0
  140. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/runtime/__init__.py +0 -0
  141. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/runtime/docker/__init__.py +0 -0
  142. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/runtime/docker/docker.py +0 -0
  143. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/runtime/env.py +0 -0
  144. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/utils/__init__.py +0 -0
  145. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/utils/caching.py +0 -0
  146. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/utils/http_client.py +0 -0
  147. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/utils/http_request.py +0 -0
  148. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/utils/http_response.py +0 -0
  149. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/utils/http_status.py +0 -0
  150. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/utils/image.py +0 -0
  151. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/utils/mcp_client.py +0 -0
  152. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/utils/package.py +0 -0
  153. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/utils/renderers.py +0 -0
  154. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/utils/resolvers.py +0 -0
  155. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/utils/shell.py +0 -0
  156. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/utils/ssh_client.py +0 -0
  157. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/utils/streamer.py +0 -0
  158. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/utils/streaming.py +0 -0
  159. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/utils/time.py +0 -0
  160. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/utils/url.py +0 -0
  161. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/utils/websocket_client.py +0 -0
  162. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/utils/work_queue.py +0 -0
  163. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/workflow/__init__.py +0 -0
  164. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/workflow/context.py +0 -0
  165. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/workflow/job/__init__.py +0 -0
  166. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/workflow/job/base.py +0 -0
  167. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
  168. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/workflow/job/impl/action.py +0 -0
  169. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/workflow/job/impl/delay.py +0 -0
  170. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/workflow/job/impl/filter.py +0 -0
  171. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/workflow/job/impl/if_.py +0 -0
  172. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/workflow/job/impl/random_router.py +0 -0
  173. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/workflow/job/impl/switch.py +0 -0
  174. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/workflow/job/job.py +0 -0
  175. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/workflow/schema.py +0 -0
  176. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/core/workflow/tool.py +0 -0
  177. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/__init__.py +0 -0
  178. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/loader.py +0 -0
  179. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/__init__.py +0 -0
  180. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/__init__.py +0 -0
  181. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/action.py +0 -0
  182. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/__init__.py +0 -0
  183. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/agent.py +0 -0
  184. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/common.py +0 -0
  185. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/datasets/__init__.py +0 -0
  186. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/datasets/common.py +0 -0
  187. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/datasets/datasets.py +0 -0
  188. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/datasets/providers/__init__.py +0 -0
  189. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/datasets/providers/common.py +0 -0
  190. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/datasets/providers/huggingface.py +0 -0
  191. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/datasets/providers/local.py +0 -0
  192. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/http_client.py +0 -0
  193. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/http_server.py +0 -0
  194. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/image_processor.py +0 -0
  195. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
  196. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
  197. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
  198. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/__init__.py +0 -0
  199. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +0 -0
  200. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/common.py +0 -0
  201. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/__init__.py +0 -0
  202. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/face_embedding.py +0 -0
  203. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/__init__.py +0 -0
  204. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/common.py +0 -0
  205. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/dlib.py +0 -0
  206. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/facenet.py +0 -0
  207. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/insightface.py +0 -0
  208. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/__init__.py +0 -0
  209. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/image_generation.py +0 -0
  210. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/__init__.py +0 -0
  211. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/common.py +0 -0
  212. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/flux.py +0 -0
  213. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
  214. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/sdxl.py +0 -0
  215. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +0 -0
  216. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/__init__.py +0 -0
  217. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/image_upscale.py +0 -0
  218. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/__init__.py +0 -0
  219. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/common.py +0 -0
  220. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
  221. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
  222. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
  223. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/swinir.py +0 -0
  224. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +0 -0
  225. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +0 -0
  226. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +0 -0
  227. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/__init__.py +0 -0
  228. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/impl/__init__.py +0 -0
  229. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/impl/common.py +0 -0
  230. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/impl/qwen.py +0 -0
  231. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/text_to_speech.py +0 -0
  232. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model/model.py +0 -0
  233. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model_trainer/__init__.py +0 -0
  234. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model_trainer/impl/__init__.py +0 -0
  235. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model_trainer/impl/classification.py +0 -0
  236. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model_trainer/impl/common.py +0 -0
  237. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model_trainer/impl/sft.py +0 -0
  238. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/model_trainer/model_trainer.py +0 -0
  239. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
  240. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/text_splitter.py +0 -0
  241. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/vector_store/__init__.py +0 -0
  242. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/vector_store/impl/__init__.py +0 -0
  243. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/vector_store/impl/chroma.py +0 -0
  244. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/vector_store/impl/common.py +0 -0
  245. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/vector_store/impl/faiss.py +0 -0
  246. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/vector_store/impl/milvus.py +0 -0
  247. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/vector_store/impl/qdrant.py +0 -0
  248. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/vector_store/vector_store.py +0 -0
  249. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/web_scraper.py +0 -0
  250. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
  251. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/__init__.py +0 -0
  252. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/component.py +0 -0
  253. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/__init__.py +0 -0
  254. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/agent.py +0 -0
  255. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/common.py +0 -0
  256. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/datasets/__init__.py +0 -0
  257. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/datasets/datasets.py +0 -0
  258. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/http_client.py +0 -0
  259. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
  260. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/image_processor.py +0 -0
  261. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/mcp_client.py +0 -0
  262. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
  263. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
  264. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/__init__.py +0 -0
  265. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/chat_completion.py +0 -0
  266. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/common.py +0 -0
  267. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/__init__.py +0 -0
  268. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/face_embedding.py +0 -0
  269. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/__init__.py +0 -0
  270. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/common.py +0 -0
  271. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/dlib.py +0 -0
  272. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/facenet.py +0 -0
  273. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/insightface.py +0 -0
  274. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/__init__.py +0 -0
  275. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/image_generation.py +0 -0
  276. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/__init__.py +0 -0
  277. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/common.py +0 -0
  278. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/flux.py +0 -0
  279. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
  280. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/sdxl.py +0 -0
  281. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/image_to_text.py +0 -0
  282. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/__init__.py +0 -0
  283. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/image_upscale.py +0 -0
  284. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/__init__.py +0 -0
  285. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/common.py +0 -0
  286. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
  287. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
  288. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
  289. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/swinir.py +0 -0
  290. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +0 -0
  291. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +0 -0
  292. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +0 -0
  293. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/__init__.py +0 -0
  294. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/impl/__init__.py +0 -0
  295. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/impl/common.py +0 -0
  296. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/impl/qwen.py +0 -0
  297. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/text_to_speech.py +0 -0
  298. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model/model.py +0 -0
  299. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model_trainer/__init__.py +0 -0
  300. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model_trainer/impl/__init__.py +0 -0
  301. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model_trainer/impl/classification.py +0 -0
  302. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model_trainer/impl/common.py +0 -0
  303. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model_trainer/impl/sft.py +0 -0
  304. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/model_trainer/model_trainer.py +0 -0
  305. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
  306. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/text_splitter.py +0 -0
  307. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/types.py +0 -0
  308. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/vector_store/__init__.py +0 -0
  309. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/vector_store/impl/__init__.py +0 -0
  310. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/vector_store/impl/chroma.py +0 -0
  311. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/vector_store/impl/common.py +0 -0
  312. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/vector_store/impl/faiss.py +0 -0
  313. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/vector_store/impl/milvus.py +0 -0
  314. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +0 -0
  315. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/vector_store/vector_store.py +0 -0
  316. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/web_scraper.py +0 -0
  317. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
  318. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/compose.py +0 -0
  319. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/controller/__init__.py +0 -0
  320. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/controller/controller.py +0 -0
  321. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
  322. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/controller/impl/common.py +0 -0
  323. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/controller/impl/http_server.py +0 -0
  324. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/controller/impl/mcp_server.py +0 -0
  325. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/controller/impl/types.py +0 -0
  326. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/controller/webui/__init__.py +0 -0
  327. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/controller/webui/impl/__init__.py +0 -0
  328. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/controller/webui/impl/common.py +0 -0
  329. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +0 -0
  330. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/controller/webui/impl/gradio.py +0 -0
  331. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/controller/webui/impl/static.py +0 -0
  332. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/controller/webui/webui.py +0 -0
  333. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
  334. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
  335. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
  336. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/gateway/impl/common.py +0 -0
  337. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/gateway/impl/http_tunnel/__init__.py +0 -0
  338. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/gateway/impl/http_tunnel/http_tunnel.py +0 -0
  339. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/__init__.py +0 -0
  340. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/cloudflare.py +0 -0
  341. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/common.py +0 -0
  342. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/ngrok.py +0 -0
  343. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -0
  344. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
  345. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/job/__init__.py +0 -0
  346. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
  347. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/job/impl/action.py +0 -0
  348. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/job/impl/common.py +0 -0
  349. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
  350. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/job/impl/filter.py +0 -0
  351. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
  352. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/job/impl/random_router.py +0 -0
  353. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
  354. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/job/impl/types.py +0 -0
  355. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/job/job.py +0 -0
  356. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/listener/__init__.py +0 -0
  357. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/listener/impl/__init__.py +0 -0
  358. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/listener/impl/common.py +0 -0
  359. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/listener/impl/http_callback.py +0 -0
  360. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/listener/impl/http_trigger.py +0 -0
  361. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/listener/impl/types.py +0 -0
  362. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/listener/listener.py +0 -0
  363. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/logger/__init__.py +0 -0
  364. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
  365. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/logger/impl/common.py +0 -0
  366. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
  367. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/logger/impl/file.py +0 -0
  368. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
  369. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/logger/logger.py +0 -0
  370. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/operator/__init__.py +0 -0
  371. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/operator/condition.py +0 -0
  372. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
  373. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
  374. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/runtime/impl/common.py +0 -0
  375. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
  376. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/runtime/impl/embedded.py +0 -0
  377. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
  378. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/runtime/impl/process.py +0 -0
  379. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
  380. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
  381. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/transport/__init__.py +0 -0
  382. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/transport/http.py +0 -0
  383. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/transport/ssh.py +0 -0
  384. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/schema/workflow.py +0 -0
  385. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/utils/__init__.py +0 -0
  386. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/utils/annotation.py +0 -0
  387. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/utils/enum.py +0 -0
  388. {model_compose-0.4.25 → model_compose-0.4.26}/src/mindor/dsl/utils/path.py +0 -0
  389. {model_compose-0.4.25 → model_compose-0.4.26}/src/model_compose.egg-info/SOURCES.txt +0 -0
  390. {model_compose-0.4.25 → model_compose-0.4.26}/src/model_compose.egg-info/dependency_links.txt +0 -0
  391. {model_compose-0.4.25 → model_compose-0.4.26}/src/model_compose.egg-info/entry_points.txt +0 -0
  392. {model_compose-0.4.25 → model_compose-0.4.26}/src/model_compose.egg-info/requires.txt +0 -0
  393. {model_compose-0.4.25 → model_compose-0.4.26}/src/model_compose.egg-info/top_level.txt +0 -0
  394. {model_compose-0.4.25 → model_compose-0.4.26}/tests/test_cli.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: model-compose
3
- Version: 0.4.25
3
+ Version: 0.4.26
4
4
  Summary: model-compose: Declarative AI Workflow Orchestrator
5
5
  Author-email: Hanyeol Cho <hanyeol.cho@gmail.com>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "model-compose"
3
- version = "0.4.25"
3
+ version = "0.4.26"
4
4
  description = "model-compose: Declarative AI Workflow Orchestrator"
5
5
  authors = [
6
6
  { name = "Hanyeol Cho", email = "hanyeol.cho@gmail.com" }
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
- from typing import TYPE_CHECKING, Any
2
+ from typing import TYPE_CHECKING
3
3
 
4
+ from typing import Any
4
5
  import click
5
6
  import json
6
7
 
@@ -17,7 +18,7 @@ def prompt_for_interrupt(state: TaskState) -> Any:
17
18
  click.echo(json.dumps(interrupt.metadata, indent=2, ensure_ascii=False), err=True)
18
19
 
19
20
  click.echo("", err=True)
20
- click.echo("✋ Action required — press Enter to continue, or type a response (JSON or text):", err=True)
21
+ click.echo("✋ Action required — press Enter to continue, or type an answer (JSON or text):", err=True)
21
22
  raw = input()
22
23
 
23
24
  if not raw:
@@ -39,8 +39,8 @@ class ComposeManager:
39
39
 
40
40
  return state
41
41
 
42
- async def resume_workflow(self, task_id: str, job_id: str, data: Any = None) -> TaskState:
43
- await self.controller.resume_workflow(task_id, job_id, data)
42
+ async def resume_workflow(self, task_id: str, job_id: str, answer: Any = None) -> TaskState:
43
+ await self.controller.resume_workflow(task_id, job_id, answer)
44
44
  return await self.controller.wait_for_terminal_state(task_id)
45
45
 
46
46
  async def _save_output(self, output: Any, path: str) -> None:
@@ -191,7 +191,7 @@ class ControllerService(AsyncService):
191
191
 
192
192
  return state
193
193
 
194
- async def resume_workflow(self, task_id: str, job_id: str, data: Any = None) -> TaskState:
194
+ async def resume_workflow(self, task_id: str, job_id: str, answer: Any = None) -> TaskState:
195
195
  with self.task_states_lock:
196
196
  state = self.task_states.get(task_id)
197
197
 
@@ -208,7 +208,7 @@ class ControllerService(AsyncService):
208
208
  if not handler:
209
209
  raise ValueError(f"No active interrupt handler for task '{task_id}'")
210
210
 
211
- success = handler.resolve(task_id, job_id, data)
211
+ success = handler.resolve(task_id, job_id, answer)
212
212
  if not success:
213
213
  raise ValueError(f"No active interrupt found for task '{task_id}', job '{job_id}'")
214
214
 
@@ -8,7 +8,19 @@ class ControllerClient(ABC):
8
8
  self.config: ControllerConfig = config
9
9
 
10
10
  @abstractmethod
11
- async def run_workflow(self, workflow_id: Optional[str], input: Any) -> Any:
11
+ async def run_workflow(self, workflow_id: Optional[str], input: Any, workflow: WorkflowSchema) -> Any:
12
+ pass
13
+
14
+ @abstractmethod
15
+ async def resume_workflow(self, task_id: str, job_id: str, answer: Any = None) -> dict:
16
+ pass
17
+
18
+ @abstractmethod
19
+ async def wait_for_completion(self, task_id: str) -> dict:
20
+ pass
21
+
22
+ @abstractmethod
23
+ async def get_task_output(self, task_id: str) -> Any:
12
24
  pass
13
25
 
14
26
  @abstractmethod
@@ -4,6 +4,7 @@ from mindor.core.workflow.schema import WorkflowSchema
4
4
  from mindor.core.utils.http_client import HttpClient
5
5
  from .client import ControllerClient
6
6
  from starlette.datastructures import UploadFile
7
+ import asyncio
7
8
 
8
9
  class HttpControllerClient(ControllerClient):
9
10
  def __init__(self, config: ControllerConfig):
@@ -31,6 +32,20 @@ class HttpControllerClient(ControllerClient):
31
32
 
32
33
  return await self.client.request("/workflows/runs", "POST", None, body, headers)
33
34
 
35
+ async def resume_workflow(self, task_id: str, job_id: str, answer: Any = None) -> dict:
36
+ body = { "job_id": job_id, "answer": answer }
37
+ return await self.client.request(f"/tasks/{task_id}/resume", "POST", None, body, { "Content-Type": "application/json" })
38
+
39
+ async def wait_for_completion(self, task_id: str) -> dict:
40
+ while True:
41
+ result = await self.client.request(f"/tasks/{task_id}", "GET")
42
+ if isinstance(result, dict) and result.get("status") in ("interrupted", "completed", "failed"):
43
+ return result
44
+ await asyncio.sleep(0.5)
45
+
46
+ async def get_task_output(self, task_id: str) -> Any:
47
+ return await self.client.request(f"/tasks/{task_id}", "GET", params={ "output_only": "true" })
48
+
34
49
  async def close(self) -> None:
35
50
  await self.client.close()
36
51
 
@@ -17,6 +17,15 @@ class McpControllerClient(ControllerClient):
17
17
  async def run_workflow(self, workflow_id: Optional[str], input: Any, workflow: WorkflowSchema) -> Any:
18
18
  return await self._call_tool(workflow_id or "__workflow__", input, workflow)
19
19
 
20
+ async def resume_workflow(self, task_id: str, job_id: str, answer: Any = None) -> dict:
21
+ raise NotImplementedError("MCP client does not support workflow interrupts")
22
+
23
+ async def wait_for_completion(self, task_id: str) -> dict:
24
+ raise NotImplementedError("MCP client does not support workflow interrupts")
25
+
26
+ async def get_task_output(self, task_id: str) -> Any:
27
+ raise NotImplementedError("MCP client does not support workflow interrupts")
28
+
20
29
  async def close(self) -> None:
21
30
  await self.client.close()
22
31
 
@@ -27,5 +27,14 @@ class ControllerRunner:
27
27
  async def run_workflow(self, workflow_id: Optional[str], input: Any, schema: WorkflowSchema) -> Any:
28
28
  return await self.client.run_workflow(workflow_id, input, schema)
29
29
 
30
+ async def resume_workflow(self, task_id: str, job_id: str, answer: Any = None) -> dict:
31
+ return await self.client.resume_workflow(task_id, job_id, answer)
32
+
33
+ async def wait_for_completion(self, task_id: str) -> dict:
34
+ return await self.client.wait_for_completion(task_id)
35
+
36
+ async def get_task_output(self, task_id: str) -> Any:
37
+ return await self.client.get_task_output(task_id)
38
+
30
39
  async def close(self) -> None:
31
40
  await self.client.close()
@@ -29,7 +29,7 @@ class WorkflowRunRequestBody(BaseModel):
29
29
 
30
30
  class WorkflowResumeRequestBody(BaseModel):
31
31
  job_id: str
32
- data: Optional[Any] = None
32
+ answer: Optional[Any] = None
33
33
 
34
34
  class InterruptResult(BaseModel):
35
35
  job_id: str
@@ -43,9 +43,7 @@ class InterruptResult(BaseModel):
43
43
  job_id=instance.job_id,
44
44
  phase=instance.phase,
45
45
  message=instance.message,
46
- metadata=instance.metadata,
47
- input=instance.input,
48
- output=instance.output
46
+ metadata=instance.metadata
49
47
  )
50
48
 
51
49
  class TaskResult(BaseModel):
@@ -217,7 +215,7 @@ class HttpServerController(ControllerService):
217
215
  body: WorkflowResumeRequestBody = Body(...)
218
216
  ):
219
217
  try:
220
- state = await self.resume_workflow(task_id, body.job_id, body.data)
218
+ state = await self.resume_workflow(task_id, body.job_id, body.answer)
221
219
  return JSONResponse(content=TaskResult.to_dict(state))
222
220
  except ValueError as e:
223
221
  raise HTTPException(status_code=400, detail=str(e))
@@ -290,7 +288,7 @@ class HttpServerController(ControllerService):
290
288
 
291
289
  def _render_task_output(self, state: TaskState) -> Response:
292
290
  if state.status in [ TaskStatus.PENDING, TaskStatus.PROCESSING, TaskStatus.INTERRUPTED ]:
293
- raise HTTPException(status_code=202, detail="Task is still in progress.")
291
+ return JSONResponse(status_code=202, content=TaskResult.to_dict(state))
294
292
 
295
293
  if state.status == TaskStatus.FAILED:
296
294
  raise HTTPException(status_code=500, detail=str(state.error))
@@ -50,12 +50,12 @@ class McpServerController(ControllerService):
50
50
  self._configure_resume_tool()
51
51
 
52
52
  def _configure_resume_tool(self) -> None:
53
- async def resume_workflow(task_id: str, job_id: str, data: str = "") -> List[ContentBlock]:
54
- parsed_data = json.loads(data) if data else None
53
+ async def resume_workflow(task_id: str, job_id: str, answer: str = "") -> List[ContentBlock]:
54
+ parsed_answer = json.loads(answer) if answer else None
55
55
  try:
56
- await self.resume_workflow(task_id, job_id, parsed_data)
56
+ await self.resume_workflow(task_id, job_id, parsed_answer)
57
57
  except ValueError as e:
58
- return [TextContent(type="text", text=json.dumps({"error": str(e)}))]
58
+ return [ TextContent(type="text", text=json.dumps({"error": str(e)})) ]
59
59
 
60
60
  state = await self.wait_for_terminal_state(task_id)
61
61
  return await self._build_state_response(state)
@@ -64,7 +64,7 @@ class McpServerController(ControllerService):
64
64
  fn=resume_workflow,
65
65
  name="resume_workflow",
66
66
  title="Resume an interrupted workflow",
67
- description="Resume a workflow that was paused at a Human-in-the-Loop interrupt point.\n\nArgs:\n task_id (str): The task ID of the interrupted workflow\n job_id (str): The job ID where the interrupt occurred\n data (str): Optional JSON string with modified data to resume with",
67
+ description="Resume a workflow that was paused at a Human-in-the-Loop interrupt point.\n\nArgs:\n task_id (str): The task ID of the interrupted workflow\n job_id (str): The job ID where the interrupt occurred\n answer (str): Optional JSON string with answer to resume with",
68
68
  annotations=None
69
69
  )
70
70
 
@@ -1,6 +1,10 @@
1
- from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Awaitable, Any
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
3
+
4
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Any
2
5
  from mindor.dsl.schema.workflow import WorkflowVariableConfig, WorkflowVariableGroupConfig, WorkflowVariableType, WorkflowVariableFormat
3
6
  from mindor.core.workflow.schema import WorkflowSchema
7
+
4
8
  from mindor.core.utils.streaming import StreamResource, Base64StreamResource
5
9
  from mindor.core.utils.streaming import save_stream_to_temporary_file, BytesStreamResource
6
10
  from mindor.core.utils.http_request import create_upload_file
@@ -11,6 +15,9 @@ from PIL import Image as PILImage
11
15
  import gradio as gr
12
16
  import json, re
13
17
 
18
+ if TYPE_CHECKING:
19
+ from mindor.core.controller.runner import ControllerRunner
20
+
14
21
  _variable_name_regex = re.compile(r"^([^[]+)(?:\[(\w+)\])?$")
15
22
 
16
23
  class ComponentGroup:
@@ -22,40 +29,62 @@ class GradioWebUIBuilder:
22
29
  def __init__(self):
23
30
  self.field_resolver: FieldResolver = FieldResolver()
24
31
 
25
- def build(self, workflow_schemas: Dict[str, WorkflowSchema], workflow_runner: Callable[[Optional[str], Any], Awaitable[Any]]) -> gr.Blocks:
32
+ def build(self, workflow_schemas: Dict[str, WorkflowSchema], runner: Callable[[], ControllerRunner]) -> gr.Blocks:
26
33
  with gr.Blocks() as blocks:
27
34
  for workflow_id, workflow in workflow_schemas.items():
28
- async def _run_workflow(input: Any, workflow_id=workflow_id) -> Any:
29
- return await workflow_runner(workflow_id, input)
30
-
31
35
  if len(workflow_schemas) > 1:
32
36
  with gr.Tab(label=workflow.name or workflow_id):
33
- self._build_workflow_section(workflow, _run_workflow)
37
+ self._build_workflow_section(workflow_id, workflow, runner)
34
38
  else:
35
- self._build_workflow_section(workflow, _run_workflow)
39
+ self._build_workflow_section(workflow_id, workflow, runner)
36
40
 
37
41
  return blocks
38
42
 
39
- def _build_workflow_section(self, workflow: WorkflowSchema, runner: Callable[[Any], Awaitable[Any]]) -> gr.Column:
43
+ def _build_workflow_section(self,
44
+ workflow_id: str,
45
+ workflow: WorkflowSchema,
46
+ runner: Callable[[], ControllerRunner]
47
+ ) -> gr.Column:
40
48
  with gr.Column() as section:
41
49
  gr.Markdown(f"## **{workflow.title or 'Untitled Workflow'}**")
42
50
 
43
51
  if workflow.description:
44
52
  gr.Markdown(f"📝 {workflow.description}")
45
53
 
46
- gr.Markdown("#### 📥 Input Parameters")
54
+ gr.Markdown("#### Input Parameters")
47
55
  input_components = [ self._build_input_component(variable) for variable in workflow.input ]
56
+
48
57
  run_button = gr.Button("🚀 Run Workflow", variant="primary")
49
58
 
50
- gr.Markdown("#### 📤 Output Values")
59
+ # Interrupt panel (hidden by default)
60
+ interrupt_state = gr.State(value=None)
61
+ with gr.Column(visible=False) as interrupt_panel:
62
+ interrupt_message = gr.Markdown("")
63
+ interrupt_metadata = gr.JSON(label="Metadata", visible=False)
64
+ interrupt_answer = gr.Textbox(label="Answer", lines=2, placeholder="Press Resume to continue, or type an answer (JSON or text)")
65
+ resume_button = gr.Button("▶️ Resume", variant="primary")
66
+
67
+ interrupt_outputs = [ interrupt_state, interrupt_panel, interrupt_message, interrupt_metadata, interrupt_answer ]
68
+
69
+ gr.Markdown("#### Output Values")
51
70
  output_components = [ self._build_output_component(variable) for variable in workflow.output ]
52
71
 
53
72
  if not output_components:
54
73
  output_components = [ gr.Textbox(label="", lines=10, interactive=False, buttons=["copy"]) ]
55
74
 
75
+ output_components = self._flatten_output_components(output_components)
76
+
56
77
  async def _run_workflow(*args):
57
- input = await self._build_input_value(args, workflow.input)
58
- output = await runner(input)
78
+ input = await self._build_input_value(args, workflow.input)
79
+ output = await runner().run_workflow(workflow_id, input, workflow)
80
+
81
+ # Check if the result is an interrupted TaskResult
82
+ if isinstance(output, dict) and output.get("status") == "interrupted" and "task_id" in output:
83
+ yield self._build_interrupt_updates(output) + tuple(gr.update() for _ in output_components)
84
+ return
85
+
86
+ # Clear interrupt panel for normal results
87
+ clear_interrupt = self._clear_interrupt_updates()
59
88
 
60
89
  if len(workflow.output) == 1 and self._is_streaming_variable(workflow.output[0]):
61
90
  buffer = "" if workflow.output[0].type == WorkflowVariableType.TEXT else []
@@ -65,16 +94,64 @@ class GradioWebUIBuilder:
65
94
  buffer += chunk[0] or ""
66
95
  else:
67
96
  buffer.append(chunk[0])
68
- yield buffer
97
+ yield clear_interrupt + (buffer,)
69
98
  else:
70
99
  if workflow.output:
71
100
  output = await self._flatten_output_value(output, workflow.output)
72
- yield output[0] if len(output) == 1 else output
101
+ result = output[0] if len(output) == 1 else output
102
+ if isinstance(result, (list, tuple)):
103
+ yield clear_interrupt + tuple(result)
104
+ else:
105
+ yield clear_interrupt + (result,)
106
+
107
+ async def _resume_workflow(state: Optional[Dict[str, str]], answer_text: str):
108
+ task_id, job_id = state["task_id"], state["job_id"]
109
+
110
+ # Parse answer: try JSON first, fallback to string
111
+ answer = answer_text
112
+ if answer_text:
113
+ try:
114
+ answer = json.loads(answer_text)
115
+ except (json.JSONDecodeError, TypeError):
116
+ pass
117
+
118
+ await runner().resume_workflow(task_id, job_id, answer if answer_text else None)
119
+ result = await runner().wait_for_completion(task_id)
120
+
121
+ if result.get("status") == "interrupted":
122
+ yield self._build_interrupt_updates(result) + tuple(gr.update() for _ in output_components)
123
+ return
124
+
125
+ clear_interrupt = self._clear_interrupt_updates()
126
+
127
+ if result.get("status") == "failed":
128
+ raise gr.Error(str(result.get("error", "Workflow failed")))
129
+
130
+ # Completed — fetch output
131
+ output = await runner().get_task_output(task_id)
132
+ if workflow.output and output is not None:
133
+ output = await self._flatten_output_value(output, workflow.output)
134
+ result = output[0] if len(output) == 1 else output
135
+ else:
136
+ result = output
137
+
138
+ if result is None:
139
+ yield clear_interrupt + tuple(gr.update() for _ in output_components)
140
+ elif isinstance(result, (list, tuple)):
141
+ yield clear_interrupt + tuple(result)
142
+ else:
143
+ yield clear_interrupt + (result,)
73
144
 
74
145
  run_button.click(
75
146
  fn=_run_workflow,
76
147
  inputs=input_components,
77
- outputs=self._flatten_output_components(output_components)
148
+ outputs=interrupt_outputs + output_components
149
+ )
150
+
151
+ resume_button.click(
152
+ fn=_resume_workflow,
153
+ inputs=[interrupt_state, interrupt_answer],
154
+ outputs=interrupt_outputs + output_components
78
155
  )
79
156
 
80
157
  return section
@@ -148,6 +225,29 @@ class GradioWebUIBuilder:
148
225
 
149
226
  return value if value != "" else None
150
227
 
228
+ def _build_interrupt_updates(self, result: dict) -> tuple:
229
+ interrupt = result.get("interrupt", {})
230
+ state = { "task_id": result["task_id"], "job_id": interrupt.get("job_id") }
231
+ message = interrupt.get("message") or "The workflow is waiting for your input."
232
+ metadata = interrupt.get("metadata")
233
+
234
+ return (
235
+ state,
236
+ gr.update(visible=True),
237
+ gr.update(value=message),
238
+ gr.update(value=metadata, visible=metadata is not None),
239
+ gr.update(value=""),
240
+ )
241
+
242
+ def _clear_interrupt_updates(self) -> tuple:
243
+ return (
244
+ None,
245
+ gr.update(visible=False),
246
+ gr.update(value=""),
247
+ gr.update(value=None, visible=False),
248
+ gr.update(value=""),
249
+ )
250
+
151
251
  def _build_output_component(self, variable: Union[WorkflowVariableConfig, WorkflowVariableGroupConfig]) -> Union[gr.Component, List[ComponentGroup]]:
152
252
  if isinstance(variable, WorkflowVariableGroupConfig):
153
253
  groups: List[ComponentGroup] = []
@@ -196,7 +296,7 @@ class GradioWebUIBuilder:
196
296
  else:
197
297
  flattened.append(item)
198
298
  return flattened
199
-
299
+
200
300
  async def _flatten_output_value(self, output: Any, variables: List[Union[WorkflowVariableConfig, WorkflowVariableGroupConfig]]) -> Any:
201
301
  flattened = []
202
302
  for variable in variables:
@@ -1,4 +1,4 @@
1
- from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated
2
2
  from mindor.dsl.schema.controller import ControllerConfig
3
3
  from mindor.dsl.schema.controller.webui import ControllerWebUIConfig, ControllerWebUIDriver
4
4
  from mindor.dsl.schema.component import ComponentConfig
@@ -38,14 +38,14 @@ class ControllerWebUI(AsyncService):
38
38
  if self.config.driver == ControllerWebUIDriver.GRADIO:
39
39
  blocks = GradioWebUIBuilder().build(
40
40
  workflow_schemas=self.workflow_schemas,
41
- workflow_runner=self._run_workflow
41
+ runner=lambda: self.runner
42
42
  )
43
43
  self.app = mount_gradio_app(self.app, blocks, path="")
44
44
  return
45
45
 
46
46
  if self.config.driver == ControllerWebUIDriver.STATIC:
47
47
  static_files = StaticFiles(
48
- directory=Path(self.config.static_dir).resolve(),
48
+ directory=Path(self.config.static_dir).resolve(),
49
49
  html=True
50
50
  )
51
51
  self.app.mount("/", static_files, name="static")
@@ -65,12 +65,7 @@ class ControllerWebUI(AsyncService):
65
65
  await self.runner.close()
66
66
  self.server = None
67
67
  self.runner = None
68
-
68
+
69
69
  async def _shutdown(self) -> None:
70
70
  if self.server:
71
71
  self.server.should_exit = True
72
-
73
- async def _run_workflow(self, workflow_id: Optional[str], input: Any) -> Any:
74
- if self.runner:
75
- return await self.runner.run_workflow(workflow_id, input, self.workflow_schemas[workflow_id])
76
- return None
@@ -28,7 +28,7 @@ class InterruptHandler:
28
28
 
29
29
  return await point.future
30
30
 
31
- def resolve(self, task_id: str, job_id: str, data: Any) -> bool:
31
+ def resolve(self, task_id: str, job_id: str, answer: Any) -> bool:
32
32
  with self._lock:
33
33
  point = self._pop_point(task_id, job_id)
34
34
 
@@ -36,7 +36,7 @@ class InterruptHandler:
36
36
  return False
37
37
 
38
38
  loop = point.future.get_loop()
39
- loop.call_soon_threadsafe(point.future.set_result, data)
39
+ loop.call_soon_threadsafe(point.future.set_result, answer)
40
40
 
41
41
  return True
42
42
 
@@ -178,8 +178,5 @@ class Workflow:
178
178
  def validate(self) -> None:
179
179
  JobGraphValidator(self.config.jobs).validate()
180
180
 
181
- def uses_interrupts(self) -> bool:
182
- return any(getattr(job, "interrupt", None) for job in self.config.jobs)
183
-
184
181
  def create_workflow(id: str, config: WorkflowConfig, global_configs: ComponentGlobalConfigs) -> Workflow:
185
182
  return Workflow(id, config, global_configs)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: model-compose
3
- Version: 0.4.25
3
+ Version: 0.4.26
4
4
  Summary: model-compose: Declarative AI Workflow Orchestrator
5
5
  Author-email: Hanyeol Cho <hanyeol.cho@gmail.com>
6
6
  License-Expression: MIT
File without changes
File without changes
File without changes