model-compose 0.4.19__tar.gz → 0.4.20__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 (367) hide show
  1. {model_compose-0.4.19 → model_compose-0.4.20}/PKG-INFO +42 -21
  2. {model_compose-0.4.19 → model_compose-0.4.20}/README.md +41 -20
  3. {model_compose-0.4.19 → model_compose-0.4.20}/pyproject.toml +1 -1
  4. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/base.py +24 -0
  5. model_compose-0.4.20/src/mindor/core/component/runtime/__init__.py +2 -0
  6. model_compose-0.4.20/src/mindor/core/component/runtime/process_manager.py +70 -0
  7. model_compose-0.4.20/src/mindor/core/component/runtime/process_worker.py +56 -0
  8. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/runtime/docker/docker.py +6 -0
  9. model_compose-0.4.20/src/mindor/core/foundation/__init__.py +5 -0
  10. model_compose-0.4.20/src/mindor/core/foundation/ipc_protocol.py +22 -0
  11. model_compose-0.4.20/src/mindor/core/foundation/process_manager.py +187 -0
  12. model_compose-0.4.20/src/mindor/core/foundation/process_worker.py +132 -0
  13. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/runtime/docker/docker.py +2 -1
  14. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/runtime/impl/__init__.py +1 -0
  15. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/runtime/impl/docker.py +1 -0
  16. model_compose-0.4.20/src/mindor/dsl/schema/runtime/impl/process.py +29 -0
  17. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/runtime/impl/types.py +1 -0
  18. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/runtime/runtime.py +1 -0
  19. {model_compose-0.4.19 → model_compose-0.4.20}/src/model_compose.egg-info/PKG-INFO +42 -21
  20. {model_compose-0.4.19 → model_compose-0.4.20}/src/model_compose.egg-info/SOURCES.txt +7 -0
  21. model_compose-0.4.19/src/mindor/core/foundation/__init__.py +0 -2
  22. {model_compose-0.4.19 → model_compose-0.4.20}/LICENSE +0 -0
  23. {model_compose-0.4.19 → model_compose-0.4.20}/setup.cfg +0 -0
  24. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/__init__.py +0 -0
  25. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/cli/__init__.py +0 -0
  26. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/cli/compose.py +0 -0
  27. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/__init__.py +0 -0
  28. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/__init__.py +0 -0
  29. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/component.py +0 -0
  30. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/context.py +0 -0
  31. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/__init__.py +0 -0
  32. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/datasets/__init__.py +0 -0
  33. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/datasets/datasets.py +0 -0
  34. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/datasets/providers/__init__.py +0 -0
  35. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/datasets/providers/common.py +0 -0
  36. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/datasets/providers/huggingface.py +0 -0
  37. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/datasets/providers/local.py +0 -0
  38. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/datasets/utils.py +0 -0
  39. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/http_client.py +0 -0
  40. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/http_server.py +0 -0
  41. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/image_processor.py +0 -0
  42. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/mcp_client.py +0 -0
  43. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/mcp_server.py +0 -0
  44. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/__init__.py +0 -0
  45. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/base/__init__.py +0 -0
  46. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/base/common.py +0 -0
  47. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/base/huggingface.py +0 -0
  48. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/base/huggingface_hub.py +0 -0
  49. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/base/unsloth.py +0 -0
  50. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/model.py +0 -0
  51. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/__init__.py +0 -0
  52. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/chat_completion/__init__.py +0 -0
  53. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/chat_completion/huggingface.py +0 -0
  54. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/face_embedding/__init__.py +0 -0
  55. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/face_embedding/common.py +0 -0
  56. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/face_embedding/custom.py +0 -0
  57. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/face_embedding/insightface.py +0 -0
  58. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/image_generation/__init__.py +0 -0
  59. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/image_generation/common.py +0 -0
  60. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/image_generation/custom.py +0 -0
  61. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/image_generation/flux.py +0 -0
  62. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/image_generation/hunyuan_image.py +0 -0
  63. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/image_generation/sdxl.py +0 -0
  64. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/image_to_text/__init__.py +0 -0
  65. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/image_to_text/huggingface.py +0 -0
  66. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/image_upscale/__init__.py +0 -0
  67. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/image_upscale/common.py +0 -0
  68. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/image_upscale/custom.py +0 -0
  69. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/image_upscale/esrgan.py +0 -0
  70. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/image_upscale/ldsr.py +0 -0
  71. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/image_upscale/real_esrgan.py +0 -0
  72. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/image_upscale/swinir.py +0 -0
  73. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/text_classification/__init__.py +0 -0
  74. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/text_classification/huggingface.py +0 -0
  75. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/text_embedding/__init__.py +0 -0
  76. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/text_embedding/huggingface.py +0 -0
  77. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/text_generation/__init__.py +0 -0
  78. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/model/tasks/text_generation/huggingface.py +0 -0
  79. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/shell.py +0 -0
  80. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/text_splitter.py +0 -0
  81. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/vector_store/__init__.py +0 -0
  82. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/vector_store/base.py +0 -0
  83. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/vector_store/drivers/__init__.py +0 -0
  84. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/vector_store/drivers/chroma.py +0 -0
  85. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/vector_store/drivers/milvus.py +0 -0
  86. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/vector_store/vector_store.py +0 -0
  87. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/component/services/workflow.py +0 -0
  88. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/compose/__init__.py +0 -0
  89. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/compose/compose.py +0 -0
  90. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/compose/manager.py +0 -0
  91. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/__init__.py +0 -0
  92. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/base.py +0 -0
  93. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/controller.py +0 -0
  94. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/runner/__init__.py +0 -0
  95. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/runner/client.py +0 -0
  96. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/runner/http_client.py +0 -0
  97. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/runner/mcp_client.py +0 -0
  98. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/runner/runner.py +0 -0
  99. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/runtime/__init__.py +0 -0
  100. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
  101. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/runtime/docker/context/Dockerfile +0 -0
  102. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/runtime/native/__init__.py +0 -0
  103. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/runtime/native/native.py +0 -0
  104. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/runtime/specs.py +0 -0
  105. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/services/__init__.py +0 -0
  106. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/services/http_server.py +0 -0
  107. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/services/mcp_server.py +0 -0
  108. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/webui/__init__.py +0 -0
  109. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/webui/gradio.py +0 -0
  110. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/controller/webui/webui.py +0 -0
  111. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/foundation/async_service.py +0 -0
  112. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/gateway/__init__.py +0 -0
  113. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/gateway/base.py +0 -0
  114. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/gateway/gateway.py +0 -0
  115. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/gateway/services/__init__.py +0 -0
  116. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/gateway/services/http_tunnel/__init__.py +0 -0
  117. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/gateway/services/http_tunnel/base.py +0 -0
  118. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/gateway/services/http_tunnel/drivers/__init__.py +0 -0
  119. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/gateway/services/http_tunnel/drivers/cloudflare.py +0 -0
  120. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/gateway/services/http_tunnel/drivers/ngrok.py +0 -0
  121. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/gateway/services/http_tunnel/http_tunnel.py +0 -0
  122. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/gateway/services/ssh_tunnel.py +0 -0
  123. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/listener/__init__.py +0 -0
  124. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/listener/base.py +0 -0
  125. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/listener/listener.py +0 -0
  126. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/listener/services/__init__.py +0 -0
  127. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/listener/services/http_callback.py +0 -0
  128. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/listener/services/http_trigger.py +0 -0
  129. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/logger/__init__.py +0 -0
  130. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/logger/base.py +0 -0
  131. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/logger/logger.py +0 -0
  132. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/logger/logging.py +0 -0
  133. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/logger/services/__init__.py +0 -0
  134. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/logger/services/console.py +0 -0
  135. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/logger/services/file.py +0 -0
  136. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/runtime/__init__.py +0 -0
  137. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/runtime/docker/__init__.py +0 -0
  138. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/runtime/env.py +0 -0
  139. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/utils/__init__.py +0 -0
  140. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/utils/caching.py +0 -0
  141. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/utils/http_client.py +0 -0
  142. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/utils/http_request.py +0 -0
  143. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/utils/http_response.py +0 -0
  144. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/utils/http_status.py +0 -0
  145. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/utils/image.py +0 -0
  146. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/utils/mcp_client.py +0 -0
  147. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/utils/package.py +0 -0
  148. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/utils/renderers.py +0 -0
  149. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/utils/resolvers.py +0 -0
  150. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/utils/shell.py +0 -0
  151. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/utils/ssh_client.py +0 -0
  152. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/utils/streamer.py +0 -0
  153. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/utils/streaming.py +0 -0
  154. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/utils/time.py +0 -0
  155. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/utils/url.py +0 -0
  156. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/utils/websocket_client.py +0 -0
  157. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/utils/work_queue.py +0 -0
  158. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/workflow/__init__.py +0 -0
  159. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/workflow/context.py +0 -0
  160. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/workflow/job/__init__.py +0 -0
  161. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/workflow/job/base.py +0 -0
  162. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
  163. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/workflow/job/impl/action.py +0 -0
  164. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/workflow/job/impl/delay.py +0 -0
  165. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/workflow/job/impl/filter.py +0 -0
  166. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/workflow/job/impl/if_.py +0 -0
  167. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/workflow/job/impl/random_router.py +0 -0
  168. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/workflow/job/impl/switch.py +0 -0
  169. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/workflow/job/job.py +0 -0
  170. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/workflow/schema.py +0 -0
  171. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/core/workflow/workflow.py +0 -0
  172. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/__init__.py +0 -0
  173. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/loader.py +0 -0
  174. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/__init__.py +0 -0
  175. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/__init__.py +0 -0
  176. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/action.py +0 -0
  177. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/__init__.py +0 -0
  178. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/common.py +0 -0
  179. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/datasets/__init__.py +0 -0
  180. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/datasets/common.py +0 -0
  181. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/datasets/datasets.py +0 -0
  182. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/datasets/providers/__init__.py +0 -0
  183. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/datasets/providers/common.py +0 -0
  184. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/datasets/providers/huggingface.py +0 -0
  185. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/datasets/providers/local.py +0 -0
  186. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/http_client.py +0 -0
  187. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/http_server.py +0 -0
  188. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/image_processor.py +0 -0
  189. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
  190. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
  191. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
  192. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/__init__.py +0 -0
  193. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +0 -0
  194. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/common.py +0 -0
  195. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/__init__.py +0 -0
  196. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/face_embedding.py +0 -0
  197. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/__init__.py +0 -0
  198. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/common.py +0 -0
  199. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/dlib.py +0 -0
  200. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/facenet.py +0 -0
  201. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/insightface.py +0 -0
  202. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/__init__.py +0 -0
  203. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/image_generation.py +0 -0
  204. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/__init__.py +0 -0
  205. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/common.py +0 -0
  206. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/flux.py +0 -0
  207. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
  208. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/sdxl.py +0 -0
  209. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +0 -0
  210. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/__init__.py +0 -0
  211. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/image_upscale.py +0 -0
  212. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/__init__.py +0 -0
  213. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/common.py +0 -0
  214. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
  215. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
  216. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
  217. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/swinir.py +0 -0
  218. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +0 -0
  219. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +0 -0
  220. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +0 -0
  221. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model/model.py +0 -0
  222. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model_trainer/__init__.py +0 -0
  223. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model_trainer/impl/__init__.py +0 -0
  224. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model_trainer/impl/classification.py +0 -0
  225. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model_trainer/impl/common.py +0 -0
  226. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model_trainer/impl/sft.py +0 -0
  227. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/model_trainer/model_trainer.py +0 -0
  228. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
  229. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/text_splitter.py +0 -0
  230. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/vector_store/__init__.py +0 -0
  231. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/vector_store/impl/__init__.py +0 -0
  232. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/vector_store/impl/chroma.py +0 -0
  233. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/vector_store/impl/common.py +0 -0
  234. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/vector_store/impl/faiss.py +0 -0
  235. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/vector_store/impl/milvus.py +0 -0
  236. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/vector_store/impl/qdrant.py +0 -0
  237. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/vector_store/vector_store.py +0 -0
  238. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
  239. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/__init__.py +0 -0
  240. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/component.py +0 -0
  241. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/__init__.py +0 -0
  242. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/common.py +0 -0
  243. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/datasets/__init__.py +0 -0
  244. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/datasets/datasets.py +0 -0
  245. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/http_client.py +0 -0
  246. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
  247. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/image_processor.py +0 -0
  248. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/mcp_client.py +0 -0
  249. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
  250. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
  251. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/__init__.py +0 -0
  252. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/chat_completion.py +0 -0
  253. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/common.py +0 -0
  254. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/__init__.py +0 -0
  255. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/face_embedding.py +0 -0
  256. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/__init__.py +0 -0
  257. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/common.py +0 -0
  258. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/dlib.py +0 -0
  259. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/facenet.py +0 -0
  260. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/insightface.py +0 -0
  261. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/__init__.py +0 -0
  262. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/image_generation.py +0 -0
  263. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/__init__.py +0 -0
  264. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/common.py +0 -0
  265. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/flux.py +0 -0
  266. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
  267. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/sdxl.py +0 -0
  268. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/image_to_text.py +0 -0
  269. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/__init__.py +0 -0
  270. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/image_upscale.py +0 -0
  271. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/__init__.py +0 -0
  272. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/common.py +0 -0
  273. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
  274. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
  275. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
  276. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/swinir.py +0 -0
  277. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +0 -0
  278. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +0 -0
  279. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +0 -0
  280. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model/model.py +0 -0
  281. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model_trainer/__init__.py +0 -0
  282. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model_trainer/impl/__init__.py +0 -0
  283. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model_trainer/impl/classification.py +0 -0
  284. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model_trainer/impl/common.py +0 -0
  285. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model_trainer/impl/sft.py +0 -0
  286. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/model_trainer/model_trainer.py +0 -0
  287. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
  288. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/text_splitter.py +0 -0
  289. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/types.py +0 -0
  290. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/vector_store/__init__.py +0 -0
  291. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/vector_store/impl/__init__.py +0 -0
  292. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/vector_store/impl/chroma.py +0 -0
  293. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/vector_store/impl/common.py +0 -0
  294. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/vector_store/impl/faiss.py +0 -0
  295. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/vector_store/impl/milvus.py +0 -0
  296. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +0 -0
  297. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/vector_store/vector_store.py +0 -0
  298. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
  299. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/compose.py +0 -0
  300. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/controller/__init__.py +0 -0
  301. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/controller/controller.py +0 -0
  302. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
  303. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/controller/impl/common.py +0 -0
  304. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/controller/impl/http_server.py +0 -0
  305. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/controller/impl/mcp_server.py +0 -0
  306. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/controller/impl/types.py +0 -0
  307. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/controller/webui/__init__.py +0 -0
  308. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/controller/webui/impl/__init__.py +0 -0
  309. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/controller/webui/impl/common.py +0 -0
  310. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +0 -0
  311. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/controller/webui/impl/gradio.py +0 -0
  312. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/controller/webui/impl/static.py +0 -0
  313. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/controller/webui/webui.py +0 -0
  314. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
  315. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
  316. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
  317. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/gateway/impl/common.py +0 -0
  318. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/gateway/impl/http_tunnel/__init__.py +0 -0
  319. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/gateway/impl/http_tunnel/http_tunnel.py +0 -0
  320. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/__init__.py +0 -0
  321. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/cloudflare.py +0 -0
  322. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/common.py +0 -0
  323. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/ngrok.py +0 -0
  324. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -0
  325. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
  326. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/job/__init__.py +0 -0
  327. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
  328. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/job/impl/action.py +0 -0
  329. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/job/impl/common.py +0 -0
  330. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
  331. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/job/impl/filter.py +0 -0
  332. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
  333. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/job/impl/random_router.py +0 -0
  334. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
  335. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/job/impl/types.py +0 -0
  336. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/job/job.py +0 -0
  337. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/listener/__init__.py +0 -0
  338. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/listener/impl/__init__.py +0 -0
  339. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/listener/impl/common.py +0 -0
  340. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/listener/impl/http_callback.py +0 -0
  341. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/listener/impl/http_trigger.py +0 -0
  342. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/listener/impl/types.py +0 -0
  343. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/listener/listener.py +0 -0
  344. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/logger/__init__.py +0 -0
  345. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
  346. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/logger/impl/common.py +0 -0
  347. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
  348. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/logger/impl/file.py +0 -0
  349. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
  350. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/logger/logger.py +0 -0
  351. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
  352. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/runtime/impl/common.py +0 -0
  353. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/runtime/impl/embedded.py +0 -0
  354. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
  355. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/transport/__init__.py +0 -0
  356. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/transport/http.py +0 -0
  357. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/transport/ssh.py +0 -0
  358. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/schema/workflow.py +0 -0
  359. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/utils/__init__.py +0 -0
  360. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/utils/annotation.py +0 -0
  361. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/utils/enum.py +0 -0
  362. {model_compose-0.4.19 → model_compose-0.4.20}/src/mindor/dsl/utils/path.py +0 -0
  363. {model_compose-0.4.19 → model_compose-0.4.20}/src/model_compose.egg-info/dependency_links.txt +0 -0
  364. {model_compose-0.4.19 → model_compose-0.4.20}/src/model_compose.egg-info/entry_points.txt +0 -0
  365. {model_compose-0.4.19 → model_compose-0.4.20}/src/model_compose.egg-info/requires.txt +0 -0
  366. {model_compose-0.4.19 → model_compose-0.4.20}/src/model_compose.egg-info/top_level.txt +0 -0
  367. {model_compose-0.4.19 → model_compose-0.4.20}/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.19
3
+ Version: 0.4.20
4
4
  Summary: model-compose: Declarative AI Workflow Orchestrator
5
5
  Author-email: Hanyeol Cho <hanyeol.cho@gmail.com>
6
6
  License-Expression: MIT
@@ -54,13 +54,41 @@ Dynamic: license-file
54
54
 
55
55
  ## ✨ Features
56
56
 
57
- - 🎨 **No-Code**: Pure YAML configuration—no scripting required
58
- - 🔄 **Composable**: Reusable components and multi-step workflows
59
- - 🚀 **Production Ready**: HTTP/MCP servers + Web UI + Docker deployment
60
- - 🔌 **Connect Anything**: External AI services, local models, vector stores, and more
61
- - **Stream & Scale**: Real-time streaming and event-driven automation
62
- - ⚙️ **Configuration**: Environment variables, flexible settings
63
- - 🔗 **Integration**: Webhooks, tunneling, HTTP servers
57
+ ### 🎨 **No-Code AI Orchestration**
58
+ Define complex AI workflows entirely in YAML—no Python, no JavaScript, no coding required. Connect multiple AI services, models, and APIs through simple declarative configuration.
59
+
60
+ ### 🔗 **Universal AI Service Integration**
61
+ Connect to any AI provider out of the box—OpenAI, Anthropic Claude, Google Gemini, ElevenLabs, Stability AI, Replicate, or any custom HTTP API. Mix and match services in a single workflow.
62
+
63
+ ### 🖥️ **Local Model Execution**
64
+ Run models from HuggingFace and other sources locally with native support for transformers, PyTorch, and model serving frameworks. Fine-tune models with LoRA/PEFT, train with custom datasets, all through YAML configuration.
65
+
66
+ ### ⚡ **Real-Time Streaming**
67
+ Built-in SSE (Server-Sent Events) streaming for real-time AI responses. Stream from OpenAI, Claude, local models, or any streaming API with automatic chunking and connection management.
68
+
69
+ ### 🔄 **Advanced Workflow Composition**
70
+ Build multi-step pipelines with conditional logic, data transformation, and parallel execution. Pass data between jobs with powerful variable binding—`${input}`, `${response}`, `${env}`, with type conversion and defaults.
71
+
72
+ ### 🚀 **Production-Ready Controllers**
73
+ Deploy as HTTP REST API or MCP (Model Context Protocol) server by changing one line. Includes concurrency control, health checks, and automatic API documentation.
74
+
75
+ ### 🎯 **Event-Driven Architecture**
76
+ HTTP Callback listeners for async workflows (image generation, video processing). HTTP Trigger listeners for webhooks and external events. Build reactive AI systems that respond to real-world events.
77
+
78
+ ### 🌐 **Smart Tunneling & Gateways**
79
+ Expose local services to the internet instantly with ngrok, Cloudflare, or SSH tunnels. Perfect for webhook integration, Slack bots, and public API deployment without complex networking.
80
+
81
+ ### 🐳 **Container-Native Deployment**
82
+ First-class Docker support with runtime configuration, volume mounting, and environment management. Deploy to any cloud provider or Kubernetes cluster with minimal configuration.
83
+
84
+ ### 🎨 **Instant Web UI**
85
+ Add a visual interface with just 2 lines—get Gradio-powered chat UI or serve custom static frontends. Test workflows, monitor executions, and debug pipelines visually.
86
+
87
+ ### 🗄️ **RAG & Vector Database Ready**
88
+ Native integration with ChromaDB, Milvus, Pinecone, and Weaviate. Build retrieval-augmented generation (RAG) systems with embedding search, document indexing, and semantic retrieval.
89
+
90
+ ### 🔧 **Flexible Component System**
91
+ Reusable components with multi-action support. Define once, use everywhere. Mix HTTP clients, local models, vector stores, shell commands, and custom workflows in any combination.
64
92
 
65
93
  ---
66
94
 
@@ -129,37 +157,30 @@ model-compose up
129
157
 
130
158
  Your API is now live at `http://localhost:8080` and Web UI at `http://localhost:8081` 🎉
131
159
 
132
- > 💡 Explore [examples](examples/README.md) for more workflows or read the [User Guide](docs/user-guide/README.md).
133
-
134
160
  ---
135
- ## 💡 Key Capabilities
136
161
 
137
- ### 🖥️ Built-in Web UI
138
- Add a web interface by adding just 2 lines to your YAML:
162
+ ## 🎯 Powerful Yet Simple
163
+
164
+ ### 🖥️ Add Web UI with 2 Lines
139
165
  ```yaml
140
166
  controller:
141
167
  webui:
142
168
  port: 8081
143
169
  ```
144
- Instantly get a user-friendly interface to test and monitor your workflows. Supports both Gradio (default) and custom static frontends.
145
170
 
146
- ### 🛰️ MCP Server Ready
147
- Transform your workflows into MCP tools by changing one line:
171
+ ### 🛰️ Switch to MCP Server with 1 Line
148
172
  ```yaml
149
173
  controller:
150
174
  type: mcp-server
151
175
  ```
152
- Just set the type to `mcp-server`. Your workflows become instantly accessible via the Model Context Protocol.
153
176
 
154
- ### 🐳 Docker Deployment
155
- Deploy anywhere with built-in Docker support:
177
+ ### 🐳 Deploy in Docker with 1 Line
156
178
  ```yaml
157
179
  controller:
158
180
  runtime: docker
159
181
  ```
160
- Run your workflows in isolated containers with full control over images, volumes, ports, and environment variables.
161
182
 
162
- > 📖 See the [User Guide](docs/user-guide/README.md) for detailed configuration and [Examples](examples/README.md) for ready-to-run samples.
183
+ > 💡 Explore [examples](examples/README.md) for more workflows or read the [User Guide](docs/user-guide/README.md).
163
184
 
164
185
  ---
165
186
  ## 🏗 Architecture
@@ -30,13 +30,41 @@
30
30
 
31
31
  ## ✨ Features
32
32
 
33
- - 🎨 **No-Code**: Pure YAML configuration—no scripting required
34
- - 🔄 **Composable**: Reusable components and multi-step workflows
35
- - 🚀 **Production Ready**: HTTP/MCP servers + Web UI + Docker deployment
36
- - 🔌 **Connect Anything**: External AI services, local models, vector stores, and more
37
- - **Stream & Scale**: Real-time streaming and event-driven automation
38
- - ⚙️ **Configuration**: Environment variables, flexible settings
39
- - 🔗 **Integration**: Webhooks, tunneling, HTTP servers
33
+ ### 🎨 **No-Code AI Orchestration**
34
+ Define complex AI workflows entirely in YAML—no Python, no JavaScript, no coding required. Connect multiple AI services, models, and APIs through simple declarative configuration.
35
+
36
+ ### 🔗 **Universal AI Service Integration**
37
+ Connect to any AI provider out of the box—OpenAI, Anthropic Claude, Google Gemini, ElevenLabs, Stability AI, Replicate, or any custom HTTP API. Mix and match services in a single workflow.
38
+
39
+ ### 🖥️ **Local Model Execution**
40
+ Run models from HuggingFace and other sources locally with native support for transformers, PyTorch, and model serving frameworks. Fine-tune models with LoRA/PEFT, train with custom datasets, all through YAML configuration.
41
+
42
+ ### ⚡ **Real-Time Streaming**
43
+ Built-in SSE (Server-Sent Events) streaming for real-time AI responses. Stream from OpenAI, Claude, local models, or any streaming API with automatic chunking and connection management.
44
+
45
+ ### 🔄 **Advanced Workflow Composition**
46
+ Build multi-step pipelines with conditional logic, data transformation, and parallel execution. Pass data between jobs with powerful variable binding—`${input}`, `${response}`, `${env}`, with type conversion and defaults.
47
+
48
+ ### 🚀 **Production-Ready Controllers**
49
+ Deploy as HTTP REST API or MCP (Model Context Protocol) server by changing one line. Includes concurrency control, health checks, and automatic API documentation.
50
+
51
+ ### 🎯 **Event-Driven Architecture**
52
+ HTTP Callback listeners for async workflows (image generation, video processing). HTTP Trigger listeners for webhooks and external events. Build reactive AI systems that respond to real-world events.
53
+
54
+ ### 🌐 **Smart Tunneling & Gateways**
55
+ Expose local services to the internet instantly with ngrok, Cloudflare, or SSH tunnels. Perfect for webhook integration, Slack bots, and public API deployment without complex networking.
56
+
57
+ ### 🐳 **Container-Native Deployment**
58
+ First-class Docker support with runtime configuration, volume mounting, and environment management. Deploy to any cloud provider or Kubernetes cluster with minimal configuration.
59
+
60
+ ### 🎨 **Instant Web UI**
61
+ Add a visual interface with just 2 lines—get Gradio-powered chat UI or serve custom static frontends. Test workflows, monitor executions, and debug pipelines visually.
62
+
63
+ ### 🗄️ **RAG & Vector Database Ready**
64
+ Native integration with ChromaDB, Milvus, Pinecone, and Weaviate. Build retrieval-augmented generation (RAG) systems with embedding search, document indexing, and semantic retrieval.
65
+
66
+ ### 🔧 **Flexible Component System**
67
+ Reusable components with multi-action support. Define once, use everywhere. Mix HTTP clients, local models, vector stores, shell commands, and custom workflows in any combination.
40
68
 
41
69
  ---
42
70
 
@@ -105,37 +133,30 @@ model-compose up
105
133
 
106
134
  Your API is now live at `http://localhost:8080` and Web UI at `http://localhost:8081` 🎉
107
135
 
108
- > 💡 Explore [examples](examples/README.md) for more workflows or read the [User Guide](docs/user-guide/README.md).
109
-
110
136
  ---
111
- ## 💡 Key Capabilities
112
137
 
113
- ### 🖥️ Built-in Web UI
114
- Add a web interface by adding just 2 lines to your YAML:
138
+ ## 🎯 Powerful Yet Simple
139
+
140
+ ### 🖥️ Add Web UI with 2 Lines
115
141
  ```yaml
116
142
  controller:
117
143
  webui:
118
144
  port: 8081
119
145
  ```
120
- Instantly get a user-friendly interface to test and monitor your workflows. Supports both Gradio (default) and custom static frontends.
121
146
 
122
- ### 🛰️ MCP Server Ready
123
- Transform your workflows into MCP tools by changing one line:
147
+ ### 🛰️ Switch to MCP Server with 1 Line
124
148
  ```yaml
125
149
  controller:
126
150
  type: mcp-server
127
151
  ```
128
- Just set the type to `mcp-server`. Your workflows become instantly accessible via the Model Context Protocol.
129
152
 
130
- ### 🐳 Docker Deployment
131
- Deploy anywhere with built-in Docker support:
153
+ ### 🐳 Deploy in Docker with 1 Line
132
154
  ```yaml
133
155
  controller:
134
156
  runtime: docker
135
157
  ```
136
- Run your workflows in isolated containers with full control over images, volumes, ports, and environment variables.
137
158
 
138
- > 📖 See the [User Guide](docs/user-guide/README.md) for detailed configuration and [Examples](examples/README.md) for ready-to-run samples.
159
+ > 💡 Explore [examples](examples/README.md) for more workflows or read the [User Guide](docs/user-guide/README.md).
139
160
 
140
161
  ---
141
162
  ## 🏗 Architecture
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "model-compose"
3
- version = "0.4.19"
3
+ version = "0.4.20"
4
4
  description = "model-compose: Declarative AI Workflow Orchestrator"
5
5
  authors = [
6
6
  { name = "Hanyeol Cho", email = "hanyeol.cho@gmail.com" }
@@ -5,6 +5,7 @@ from mindor.dsl.schema.action import ActionConfig
5
5
  from mindor.dsl.schema.listener import ListenerConfig
6
6
  from mindor.dsl.schema.gateway import GatewayConfig
7
7
  from mindor.dsl.schema.workflow import WorkflowConfig
8
+ from mindor.dsl.schema.runtime import ProcessRuntimeConfig
8
9
  from mindor.core.foundation import AsyncService
9
10
  from mindor.core.utils.work_queue import WorkQueue
10
11
  from mindor.core.logger import logging
@@ -50,15 +51,31 @@ class ComponentService(AsyncService):
50
51
  self.config: ComponentConfig = config
51
52
  self.global_configs: ComponentGlobalConfigs = global_configs
52
53
  self.work_queue: Optional[WorkQueue] = None
54
+ self._process_manager = None
53
55
 
54
56
  if self.config.max_concurrent_count > 0:
55
57
  self.work_queue = WorkQueue(self.config.max_concurrent_count, self._run)
56
58
 
57
59
  async def start(self, background: bool = False) -> None:
60
+ if isinstance(self.config.runtime, ProcessRuntimeConfig):
61
+ from mindor.core.component.runtime import ComponentProcessRuntimeManager
62
+
63
+ self._process_manager = ComponentProcessRuntimeManager(
64
+ self.id,
65
+ self.config,
66
+ self.global_configs
67
+ )
68
+ await self._process_manager.start()
69
+ logging.info(f"Component {self.id} started in separate process")
70
+ return
71
+
58
72
  await super().start(background)
59
73
  await self.wait_until_ready()
60
74
 
61
75
  async def run(self, action_id: str, run_id: str, input: Dict[str, Any]) -> Dict[str, Any]:
76
+ if self._process_manager:
77
+ return await self._process_manager.run(action_id, run_id, input)
78
+
62
79
  _, action = ActionResolver(self.config.actions).resolve(action_id)
63
80
  context = ComponentActionContext(run_id, input)
64
81
 
@@ -67,6 +84,13 @@ class ComponentService(AsyncService):
67
84
 
68
85
  return await self._run(action, context)
69
86
 
87
+ async def stop(self) -> None:
88
+ if self._process_manager:
89
+ await self._process_manager.stop()
90
+ return
91
+
92
+ await super().stop()
93
+
70
94
  async def _start(self) -> None:
71
95
  if self.work_queue:
72
96
  await self.work_queue.start()
@@ -0,0 +1,2 @@
1
+ from .process_worker import *
2
+ from .process_manager import *
@@ -0,0 +1,70 @@
1
+ from typing import Any, Dict
2
+ from mindor.core.foundation import ProcessRuntimeManager
3
+ from mindor.core.component.base import ComponentGlobalConfigs
4
+ from mindor.core.component.runtime.process_worker import ComponentProcessWorker
5
+ from mindor.dsl.schema.component import ComponentConfig
6
+ from mindor.dsl.schema.runtime import ProcessRuntimeConfig
7
+ from multiprocessing import Queue
8
+ from functools import partial
9
+
10
+ class ComponentProcessRuntimeManager(ProcessRuntimeManager):
11
+ """Process runtime manager for components"""
12
+
13
+ def __init__(
14
+ self,
15
+ component_id: str,
16
+ config: ComponentConfig,
17
+ global_configs: ComponentGlobalConfigs
18
+ ):
19
+ if not isinstance(config.runtime, ProcessRuntimeConfig):
20
+ raise ValueError("ComponentProcessRuntimeManager requires ProcessRuntimeConfig")
21
+
22
+ self.config = config
23
+ self.global_configs = global_configs
24
+
25
+ # Create a partial function that's picklable
26
+ # Pass config and global_configs directly to the factory
27
+ worker_factory = partial(
28
+ self._component_worker_factory,
29
+ config=config,
30
+ global_configs=global_configs
31
+ )
32
+
33
+ super().__init__(
34
+ worker_id=component_id,
35
+ runtime_config=config.runtime,
36
+ worker_factory=worker_factory
37
+ )
38
+
39
+ def _component_worker_factory(
40
+ self,
41
+ worker_id: str,
42
+ request_queue: Queue,
43
+ response_queue: Queue,
44
+ config: ComponentConfig,
45
+ global_configs: ComponentGlobalConfigs
46
+ ) -> ComponentProcessWorker:
47
+ """Instance factory method for ComponentProcessWorker
48
+
49
+ This function is picklable and receives config directly as parameters.
50
+ """
51
+ return ComponentProcessWorker(
52
+ worker_id,
53
+ config,
54
+ global_configs,
55
+ request_queue,
56
+ response_queue
57
+ )
58
+
59
+ async def run(
60
+ self,
61
+ action_id: str,
62
+ run_id: str,
63
+ input_data: Dict[str, Any]
64
+ ) -> Any:
65
+ """Execute component action"""
66
+ return await self.execute({
67
+ "action_id": action_id,
68
+ "run_id": run_id,
69
+ "input": input_data
70
+ })
@@ -0,0 +1,56 @@
1
+ from typing import Any, Dict
2
+ from mindor.core.foundation import ProcessWorker
3
+ from mindor.core.component.base import ComponentGlobalConfigs
4
+ from mindor.core.component.component import create_component
5
+ from mindor.dsl.schema.component import ComponentConfig
6
+ from mindor.dsl.schema.runtime import EmbeddedRuntimeConfig
7
+ from mindor.core.logger import logging
8
+ from multiprocessing import Queue
9
+
10
+ class ComponentProcessWorker(ProcessWorker):
11
+ """Worker for running components in separate processes"""
12
+
13
+ def __init__(
14
+ self,
15
+ component_id: str,
16
+ config: ComponentConfig,
17
+ global_configs: ComponentGlobalConfigs,
18
+ request_queue: Queue,
19
+ response_queue: Queue
20
+ ):
21
+ super().__init__(component_id, request_queue, response_queue)
22
+ self.config = config
23
+ self.global_configs = global_configs
24
+ self.component = None
25
+
26
+ async def _initialize(self) -> None:
27
+ """Initialize and start the component"""
28
+ embedded_config = self.config.model_copy(deep=True)
29
+ embedded_config.runtime = EmbeddedRuntimeConfig(type="embedded")
30
+
31
+ self.component = create_component(
32
+ self.worker_id,
33
+ embedded_config,
34
+ self.global_configs,
35
+ daemon=True
36
+ )
37
+
38
+ await self.component.setup()
39
+ await self.component.start()
40
+
41
+ logging.info(f"Component {self.worker_id} started in subprocess")
42
+
43
+ async def _execute_task(self, payload: Dict[str, Any]) -> Any:
44
+ """Execute component action"""
45
+ action_id = payload["action_id"]
46
+ run_id = payload["run_id"]
47
+ input_data = payload["input"]
48
+
49
+ output = await self.component.run(action_id, run_id, input_data)
50
+ return output
51
+
52
+ async def _cleanup(self) -> None:
53
+ """Clean up the component"""
54
+ if self.component:
55
+ await self.component.stop()
56
+ await self.component.teardown()
@@ -26,6 +26,12 @@ class DockerRuntimeLauncher:
26
26
  if not self.config.runtime.ports:
27
27
  self.config.runtime.ports = [ port for port in [ self.config.port, getattr(self.config.webui, "port", None) ] if port ]
28
28
 
29
+ # Automatically add host.docker.internal for host machine access
30
+ if not self.config.runtime.extra_hosts:
31
+ self.config.runtime.extra_hosts = {}
32
+ if "host.docker.internal" not in self.config.runtime.extra_hosts:
33
+ self.config.runtime.extra_hosts["host.docker.internal"] = "host-gateway"
34
+
29
35
  async def launch(self, specs: ControllerRuntimeSpecs, detach: bool) -> None:
30
36
  docker = DockerRuntimeManager(self.config.runtime, self.verbose)
31
37
 
@@ -0,0 +1,5 @@
1
+ from .async_service import *
2
+ from .ipc_protocol import *
3
+ from .process_worker import *
4
+ from .process_manager import *
5
+
@@ -0,0 +1,22 @@
1
+ from typing import Optional, Dict, Any
2
+ from enum import Enum
3
+ from pydantic import BaseModel, Field
4
+ import time
5
+
6
+ class IpcMessageType(str, Enum):
7
+ """IPC message types for process communication"""
8
+ START = "start"
9
+ STOP = "stop"
10
+ RUN = "run"
11
+ RESULT = "result"
12
+ ERROR = "error"
13
+ HEARTBEAT = "heartbeat"
14
+ STATUS = "status"
15
+ LOG = "log"
16
+
17
+ class IpcMessage(BaseModel):
18
+ """Message format for inter-process communication"""
19
+ type: IpcMessageType
20
+ request_id: str
21
+ payload: Optional[Dict[str, Any]] = None
22
+ timestamp: int = Field(default_factory=lambda: int(time.time() * 1000))
@@ -0,0 +1,187 @@
1
+ from typing import Any, Dict, Optional, Callable
2
+ from mindor.dsl.schema.runtime import ProcessRuntimeConfig
3
+ from mindor.core.logger import logging
4
+ from .ipc_protocol import IpcMessage, IpcMessageType
5
+ from multiprocessing import Process, Queue
6
+ import asyncio, os, uuid, time
7
+
8
+ class ProcessRuntimeManager:
9
+ """
10
+ Generic process runtime manager for running workers in separate processes.
11
+
12
+ Can be used for use cases requiring process isolation.
13
+ """
14
+
15
+ def __init__(
16
+ self,
17
+ worker_id: str,
18
+ runtime_config: ProcessRuntimeConfig,
19
+ worker_factory: Callable[[str, Queue, Queue], Any]
20
+ ):
21
+ """
22
+ Args:
23
+ worker_id: Worker identifier
24
+ runtime_config: Process runtime configuration
25
+ worker_factory: Factory function to create worker instance
26
+ (worker_id, request_queue, response_queue) -> Worker
27
+ """
28
+ self.worker_id = worker_id
29
+ self.runtime_config = runtime_config
30
+ self.worker_factory = worker_factory
31
+
32
+ self.subprocess: Optional[Process] = None
33
+ self.request_queue: Optional[Queue] = None
34
+ self.response_queue: Optional[Queue] = None
35
+ self.pending_requests: Dict[str, asyncio.Future] = {}
36
+ self.response_handler_task: Optional[asyncio.Task] = None
37
+
38
+ async def start(self) -> None:
39
+ """Start the subprocess"""
40
+ self.request_queue = Queue()
41
+ self.response_queue = Queue()
42
+
43
+ self.subprocess = Process(
44
+ target=self._run_worker,
45
+ args=(
46
+ self.worker_id,
47
+ self.request_queue,
48
+ self.response_queue
49
+ ),
50
+ daemon=False
51
+ )
52
+
53
+ if self.runtime_config.env:
54
+ for key, value in self.runtime_config.env.items():
55
+ os.environ[key] = value
56
+
57
+ self.subprocess.start()
58
+ logging.info(f"Started subprocess for worker {self.worker_id} (PID: {self.subprocess.pid})")
59
+
60
+ await self._wait_for_ready()
61
+
62
+ self.response_handler_task = asyncio.create_task(
63
+ self._handle_responses()
64
+ )
65
+
66
+ async def stop(self) -> None:
67
+ """Stop the subprocess"""
68
+ logging.info(f"Stopping subprocess for worker {self.worker_id}")
69
+
70
+ stop_message = IpcMessage(
71
+ type=IpcMessageType.STOP,
72
+ request_id=str(uuid.uuid4())
73
+ )
74
+ self.request_queue.put(stop_message.model_dump())
75
+
76
+ timeout_seconds = self._parse_timeout(self.runtime_config.stop_timeout)
77
+
78
+ try:
79
+ self.subprocess.join(timeout=timeout_seconds)
80
+ except TimeoutError:
81
+ logging.warning(f"Process {self.worker_id} did not stop gracefully, terminating")
82
+ self.subprocess.terminate()
83
+ self.subprocess.join(timeout=5)
84
+ if self.subprocess.is_alive():
85
+ logging.error(f"Process {self.worker_id} did not terminate, killing")
86
+ self.subprocess.kill()
87
+
88
+ if self.response_handler_task:
89
+ self.response_handler_task.cancel()
90
+
91
+ async def execute(self, payload: Dict[str, Any]) -> Any:
92
+ """Execute a task in the subprocess"""
93
+ request_id = str(uuid.uuid4())
94
+
95
+ message = IpcMessage(
96
+ type=IpcMessageType.RUN,
97
+ request_id=request_id,
98
+ payload=payload
99
+ )
100
+
101
+ future = asyncio.get_event_loop().create_future()
102
+ self.pending_requests[request_id] = future
103
+
104
+ self.request_queue.put(message.model_dump())
105
+
106
+ try:
107
+ result = await future
108
+ return result
109
+ finally:
110
+ self.pending_requests.pop(request_id, None)
111
+
112
+ async def _handle_responses(self) -> None:
113
+ """Handle responses from the subprocess"""
114
+ while True:
115
+ try:
116
+ if not self.response_queue.empty():
117
+ message_dict = self.response_queue.get_nowait()
118
+ message = IpcMessage(**message_dict)
119
+
120
+ if message.request_id in self.pending_requests:
121
+ future = self.pending_requests[message.request_id]
122
+
123
+ if message.type == IpcMessageType.RESULT:
124
+ future.set_result(message.payload.get("output"))
125
+ elif message.type == IpcMessageType.ERROR:
126
+ error = message.payload.get("error", "Unknown error")
127
+ future.set_exception(Exception(error))
128
+
129
+ await asyncio.sleep(0.01)
130
+ except asyncio.CancelledError:
131
+ break
132
+ except Exception as e:
133
+ logging.error(f"Error handling response: {e}")
134
+
135
+ async def _wait_for_ready(self) -> None:
136
+ """Wait for subprocess to be ready"""
137
+ timeout = self._parse_timeout(self.runtime_config.start_timeout)
138
+ start_time = time.time()
139
+
140
+ while time.time() - start_time < timeout:
141
+ if not self.response_queue.empty():
142
+ message_dict = self.response_queue.get()
143
+ message = IpcMessage(**message_dict)
144
+
145
+ if message.type == IpcMessageType.RESULT and \
146
+ message.payload.get("status") == "ready":
147
+ logging.info(f"Subprocess {self.worker_id} is ready")
148
+ return
149
+
150
+ await asyncio.sleep(0.5)
151
+
152
+ raise TimeoutError(
153
+ f"Process {self.worker_id} did not start within {timeout}s"
154
+ )
155
+
156
+ def _run_worker(
157
+ self,
158
+ worker_id: str,
159
+ request_queue: Queue,
160
+ response_queue: Queue
161
+ ) -> None:
162
+ """Subprocess entry point"""
163
+ loop = asyncio.new_event_loop()
164
+ asyncio.set_event_loop(loop)
165
+
166
+ worker = self.worker_factory(worker_id, request_queue, response_queue)
167
+
168
+ try:
169
+ loop.run_until_complete(worker.run())
170
+ except KeyboardInterrupt:
171
+ pass
172
+ finally:
173
+ loop.close()
174
+
175
+ @staticmethod
176
+ def _parse_timeout(timeout_str: str) -> float:
177
+ """Parse timeout string (e.g., '60s', '2m') to seconds"""
178
+ timeout_str = timeout_str.strip().lower()
179
+
180
+ if timeout_str.endswith('s'):
181
+ return float(timeout_str[:-1])
182
+ elif timeout_str.endswith('m'):
183
+ return float(timeout_str[:-1]) * 60
184
+ elif timeout_str.endswith('h'):
185
+ return float(timeout_str[:-1]) * 3600
186
+ else:
187
+ return float(timeout_str)