model-compose 0.4.11__tar.gz → 0.4.13__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 (361) hide show
  1. {model_compose-0.4.11/src/model_compose.egg-info → model_compose-0.4.13}/PKG-INFO +15 -9
  2. {model_compose-0.4.11 → model_compose-0.4.13}/README.md +13 -7
  3. {model_compose-0.4.11 → model_compose-0.4.13}/pyproject.toml +2 -2
  4. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/context.py +1 -1
  5. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/gateway/base.py +5 -1
  6. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/gateway/gateway.py +2 -1
  7. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/gateway/services/http_tunnel/base.py +17 -6
  8. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/gateway/services/http_tunnel/drivers/ngrok.py +16 -11
  9. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/gateway/services/http_tunnel/http_tunnel.py +14 -6
  10. model_compose-0.4.13/src/mindor/core/gateway/services/ssh_tunnel.py +79 -0
  11. model_compose-0.4.13/src/mindor/core/utils/ssh_client.py +206 -0
  12. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/common.py +1 -1
  13. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/controller/impl/http_server.py +1 -1
  14. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/controller/impl/mcp_server.py +1 -1
  15. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/controller/webui/impl/common.py +1 -1
  16. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/gateway/impl/common.py +0 -1
  17. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/common.py +9 -0
  18. model_compose-0.4.13/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +26 -0
  19. {model_compose-0.4.11 → model_compose-0.4.13/src/model_compose.egg-info}/PKG-INFO +15 -9
  20. model_compose-0.4.11/src/mindor/core/gateway/services/ssh_tunnel.py +0 -23
  21. model_compose-0.4.11/src/mindor/core/utils/ssh_client.py +0 -4
  22. model_compose-0.4.11/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -9
  23. {model_compose-0.4.11 → model_compose-0.4.13}/LICENSE +0 -0
  24. {model_compose-0.4.11 → model_compose-0.4.13}/setup.cfg +0 -0
  25. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/__init__.py +0 -0
  26. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/cli/__init__.py +0 -0
  27. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/cli/compose.py +0 -0
  28. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/__init__.py +0 -0
  29. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/__init__.py +0 -0
  30. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/base.py +0 -0
  31. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/component.py +0 -0
  32. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/__init__.py +0 -0
  33. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/datasets/__init__.py +0 -0
  34. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/datasets/datasets.py +0 -0
  35. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/datasets/providers/__init__.py +0 -0
  36. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/datasets/providers/common.py +0 -0
  37. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/datasets/providers/huggingface.py +0 -0
  38. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/datasets/providers/local.py +0 -0
  39. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/datasets/utils.py +0 -0
  40. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/http_client.py +0 -0
  41. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/http_server.py +0 -0
  42. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/image_processor.py +0 -0
  43. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/mcp_client.py +0 -0
  44. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/mcp_server.py +0 -0
  45. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/__init__.py +0 -0
  46. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/base/__init__.py +0 -0
  47. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/base/common.py +0 -0
  48. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/base/huggingface.py +0 -0
  49. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/base/huggingface_hub.py +0 -0
  50. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/base/unsloth.py +0 -0
  51. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/model.py +0 -0
  52. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/__init__.py +0 -0
  53. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/chat_completion/__init__.py +0 -0
  54. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/chat_completion/huggingface.py +0 -0
  55. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/face_embedding/__init__.py +0 -0
  56. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/face_embedding/common.py +0 -0
  57. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/face_embedding/custom.py +0 -0
  58. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/face_embedding/insightface.py +0 -0
  59. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/image_generation/__init__.py +0 -0
  60. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/image_generation/common.py +0 -0
  61. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/image_generation/custom.py +0 -0
  62. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/image_generation/flux.py +0 -0
  63. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/image_generation/hunyuan_image.py +0 -0
  64. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/image_generation/sdxl.py +0 -0
  65. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/image_to_text/__init__.py +0 -0
  66. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/image_to_text/huggingface.py +0 -0
  67. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/image_upscale/__init__.py +0 -0
  68. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/image_upscale/common.py +0 -0
  69. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/image_upscale/custom.py +0 -0
  70. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/image_upscale/esrgan.py +0 -0
  71. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/image_upscale/ldsr.py +0 -0
  72. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/image_upscale/real_esrgan.py +0 -0
  73. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/image_upscale/swinir.py +0 -0
  74. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/text_classification/__init__.py +0 -0
  75. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/text_classification/huggingface.py +0 -0
  76. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/text_embedding/__init__.py +0 -0
  77. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/text_embedding/huggingface.py +0 -0
  78. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/text_generation/__init__.py +0 -0
  79. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/model/tasks/text_generation/huggingface.py +0 -0
  80. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/shell.py +0 -0
  81. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/text_splitter.py +0 -0
  82. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/vector_store/__init__.py +0 -0
  83. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/vector_store/base.py +0 -0
  84. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/vector_store/drivers/__init__.py +0 -0
  85. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/vector_store/drivers/chroma.py +0 -0
  86. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/vector_store/drivers/milvus.py +0 -0
  87. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/vector_store/vector_store.py +0 -0
  88. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/component/services/workflow.py +0 -0
  89. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/compose/__init__.py +0 -0
  90. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/compose/compose.py +0 -0
  91. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/compose/manager.py +0 -0
  92. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/__init__.py +0 -0
  93. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/base.py +0 -0
  94. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/controller.py +0 -0
  95. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/runner/__init__.py +0 -0
  96. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/runner/client.py +0 -0
  97. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/runner/http_client.py +0 -0
  98. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/runner/mcp_client.py +0 -0
  99. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/runner/runner.py +0 -0
  100. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/runtime/__init__.py +0 -0
  101. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
  102. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/runtime/docker/context/Dockerfile +0 -0
  103. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/runtime/docker/docker.py +0 -0
  104. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/runtime/native/__init__.py +0 -0
  105. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/runtime/native/native.py +0 -0
  106. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/runtime/specs.py +0 -0
  107. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/services/__init__.py +0 -0
  108. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/services/http_server.py +0 -0
  109. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/services/mcp_server.py +0 -0
  110. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/webui/__init__.py +0 -0
  111. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/webui/gradio.py +0 -0
  112. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/controller/webui/webui.py +0 -0
  113. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/foundation/__init__.py +0 -0
  114. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/foundation/async_service.py +0 -0
  115. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/gateway/__init__.py +0 -0
  116. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/gateway/services/__init__.py +0 -0
  117. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/gateway/services/http_tunnel/__init__.py +0 -0
  118. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/gateway/services/http_tunnel/drivers/__init__.py +0 -0
  119. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/gateway/services/http_tunnel/drivers/cloudflare.py +0 -0
  120. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/listener/__init__.py +0 -0
  121. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/listener/base.py +0 -0
  122. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/listener/listener.py +0 -0
  123. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/listener/services/__init__.py +0 -0
  124. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/listener/services/http_callback.py +0 -0
  125. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/listener/services/http_trigger.py +0 -0
  126. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/logger/__init__.py +0 -0
  127. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/logger/base.py +0 -0
  128. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/logger/logger.py +0 -0
  129. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/logger/logging.py +0 -0
  130. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/logger/services/__init__.py +0 -0
  131. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/logger/services/console.py +0 -0
  132. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/logger/services/file.py +0 -0
  133. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/runtime/__init__.py +0 -0
  134. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/runtime/docker/__init__.py +0 -0
  135. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/runtime/docker/docker.py +0 -0
  136. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/runtime/env.py +0 -0
  137. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/utils/__init__.py +0 -0
  138. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/utils/caching.py +0 -0
  139. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/utils/http_client.py +0 -0
  140. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/utils/http_request.py +0 -0
  141. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/utils/http_response.py +0 -0
  142. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/utils/http_status.py +0 -0
  143. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/utils/image.py +0 -0
  144. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/utils/mcp_client.py +0 -0
  145. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/utils/package.py +0 -0
  146. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/utils/renderers.py +0 -0
  147. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/utils/resolvers.py +0 -0
  148. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/utils/shell.py +0 -0
  149. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/utils/streamer.py +0 -0
  150. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/utils/streaming.py +0 -0
  151. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/utils/time.py +0 -0
  152. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/utils/url.py +0 -0
  153. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/utils/websocket_client.py +0 -0
  154. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/utils/work_queue.py +0 -0
  155. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/workflow/__init__.py +0 -0
  156. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/workflow/context.py +0 -0
  157. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/workflow/job/__init__.py +0 -0
  158. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/workflow/job/base.py +0 -0
  159. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
  160. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/workflow/job/impl/action.py +0 -0
  161. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/workflow/job/impl/delay.py +0 -0
  162. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/workflow/job/impl/filter.py +0 -0
  163. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/workflow/job/impl/if_.py +0 -0
  164. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/workflow/job/impl/random_router.py +0 -0
  165. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/workflow/job/impl/switch.py +0 -0
  166. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/workflow/job/job.py +0 -0
  167. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/workflow/schema.py +0 -0
  168. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/core/workflow/workflow.py +0 -0
  169. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/__init__.py +0 -0
  170. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/loader.py +0 -0
  171. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/__init__.py +0 -0
  172. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/__init__.py +0 -0
  173. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/action.py +0 -0
  174. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/__init__.py +0 -0
  175. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/common.py +0 -0
  176. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/datasets/__init__.py +0 -0
  177. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/datasets/common.py +0 -0
  178. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/datasets/datasets.py +0 -0
  179. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/datasets/providers/__init__.py +0 -0
  180. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/datasets/providers/common.py +0 -0
  181. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/datasets/providers/huggingface.py +0 -0
  182. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/datasets/providers/local.py +0 -0
  183. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/http_client.py +0 -0
  184. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/http_server.py +0 -0
  185. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/image_processor.py +0 -0
  186. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
  187. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
  188. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
  189. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/__init__.py +0 -0
  190. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +0 -0
  191. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/common.py +0 -0
  192. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/__init__.py +0 -0
  193. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/face_embedding.py +0 -0
  194. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/__init__.py +0 -0
  195. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/common.py +0 -0
  196. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/dlib.py +0 -0
  197. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/facenet.py +0 -0
  198. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/insightface.py +0 -0
  199. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/__init__.py +0 -0
  200. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/image_generation.py +0 -0
  201. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/__init__.py +0 -0
  202. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/common.py +0 -0
  203. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/flux.py +0 -0
  204. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
  205. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/sdxl.py +0 -0
  206. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +0 -0
  207. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/__init__.py +0 -0
  208. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/image_upscale.py +0 -0
  209. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/__init__.py +0 -0
  210. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/common.py +0 -0
  211. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
  212. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
  213. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
  214. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/swinir.py +0 -0
  215. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +0 -0
  216. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +0 -0
  217. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +0 -0
  218. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model/model.py +0 -0
  219. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model_trainer/__init__.py +0 -0
  220. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model_trainer/impl/__init__.py +0 -0
  221. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model_trainer/impl/classification.py +0 -0
  222. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model_trainer/impl/common.py +0 -0
  223. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model_trainer/impl/sft.py +0 -0
  224. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/model_trainer/model_trainer.py +0 -0
  225. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
  226. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/text_splitter.py +0 -0
  227. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/vector_store/__init__.py +0 -0
  228. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/vector_store/impl/__init__.py +0 -0
  229. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/vector_store/impl/chroma.py +0 -0
  230. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/vector_store/impl/common.py +0 -0
  231. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/vector_store/impl/faiss.py +0 -0
  232. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/vector_store/impl/milvus.py +0 -0
  233. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/vector_store/impl/qdrant.py +0 -0
  234. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/vector_store/vector_store.py +0 -0
  235. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
  236. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/__init__.py +0 -0
  237. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/component.py +0 -0
  238. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/__init__.py +0 -0
  239. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/datasets/__init__.py +0 -0
  240. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/datasets/datasets.py +0 -0
  241. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/http_client.py +0 -0
  242. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
  243. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/image_processor.py +0 -0
  244. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/mcp_client.py +0 -0
  245. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
  246. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
  247. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/__init__.py +0 -0
  248. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/chat_completion.py +0 -0
  249. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/common.py +0 -0
  250. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/__init__.py +0 -0
  251. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/face_embedding.py +0 -0
  252. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/__init__.py +0 -0
  253. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/common.py +0 -0
  254. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/dlib.py +0 -0
  255. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/facenet.py +0 -0
  256. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/insightface.py +0 -0
  257. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/__init__.py +0 -0
  258. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/image_generation.py +0 -0
  259. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/__init__.py +0 -0
  260. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/common.py +0 -0
  261. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/flux.py +0 -0
  262. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
  263. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/sdxl.py +0 -0
  264. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/image_to_text.py +0 -0
  265. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/__init__.py +0 -0
  266. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/image_upscale.py +0 -0
  267. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/__init__.py +0 -0
  268. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/common.py +0 -0
  269. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
  270. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
  271. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
  272. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/swinir.py +0 -0
  273. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +0 -0
  274. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +0 -0
  275. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +0 -0
  276. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model/model.py +0 -0
  277. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model_trainer/__init__.py +0 -0
  278. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model_trainer/impl/__init__.py +0 -0
  279. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model_trainer/impl/classification.py +0 -0
  280. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model_trainer/impl/common.py +0 -0
  281. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model_trainer/impl/sft.py +0 -0
  282. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/model_trainer/model_trainer.py +0 -0
  283. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
  284. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/text_splitter.py +0 -0
  285. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/types.py +0 -0
  286. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/vector_store/__init__.py +0 -0
  287. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/vector_store/impl/__init__.py +0 -0
  288. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/vector_store/impl/chroma.py +0 -0
  289. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/vector_store/impl/common.py +0 -0
  290. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/vector_store/impl/faiss.py +0 -0
  291. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/vector_store/impl/milvus.py +0 -0
  292. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +0 -0
  293. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/vector_store/vector_store.py +0 -0
  294. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
  295. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/compose.py +0 -0
  296. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/controller/__init__.py +0 -0
  297. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/controller/controller.py +0 -0
  298. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
  299. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/controller/impl/common.py +0 -0
  300. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/controller/impl/types.py +0 -0
  301. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/controller/webui/__init__.py +0 -0
  302. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/controller/webui/impl/__init__.py +0 -0
  303. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +0 -0
  304. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/controller/webui/impl/gradio.py +0 -0
  305. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/controller/webui/impl/static.py +0 -0
  306. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/controller/webui/webui.py +0 -0
  307. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
  308. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
  309. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
  310. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/gateway/impl/http_tunnel/__init__.py +0 -0
  311. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/gateway/impl/http_tunnel/http_tunnel.py +0 -0
  312. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/__init__.py +0 -0
  313. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/cloudflare.py +0 -0
  314. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/ngrok.py +0 -0
  315. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
  316. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/job/__init__.py +0 -0
  317. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
  318. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/job/impl/action.py +0 -0
  319. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/job/impl/common.py +0 -0
  320. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
  321. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/job/impl/filter.py +0 -0
  322. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
  323. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/job/impl/random_router.py +0 -0
  324. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
  325. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/job/impl/types.py +0 -0
  326. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/job/job.py +0 -0
  327. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/listener/__init__.py +0 -0
  328. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/listener/impl/__init__.py +0 -0
  329. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/listener/impl/common.py +0 -0
  330. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/listener/impl/http_callback.py +0 -0
  331. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/listener/impl/http_trigger.py +0 -0
  332. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/listener/impl/types.py +0 -0
  333. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/listener/listener.py +0 -0
  334. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/logger/__init__.py +0 -0
  335. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
  336. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/logger/impl/common.py +0 -0
  337. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
  338. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/logger/impl/file.py +0 -0
  339. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
  340. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/logger/logger.py +0 -0
  341. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
  342. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
  343. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/runtime/impl/common.py +0 -0
  344. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
  345. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
  346. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
  347. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
  348. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/transport/__init__.py +0 -0
  349. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/transport/http.py +0 -0
  350. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/transport/ssh.py +0 -0
  351. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/schema/workflow.py +0 -0
  352. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/utils/__init__.py +0 -0
  353. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/utils/annotation.py +0 -0
  354. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/utils/enum.py +0 -0
  355. {model_compose-0.4.11 → model_compose-0.4.13}/src/mindor/dsl/utils/path.py +0 -0
  356. {model_compose-0.4.11 → model_compose-0.4.13}/src/model_compose.egg-info/SOURCES.txt +0 -0
  357. {model_compose-0.4.11 → model_compose-0.4.13}/src/model_compose.egg-info/dependency_links.txt +0 -0
  358. {model_compose-0.4.11 → model_compose-0.4.13}/src/model_compose.egg-info/entry_points.txt +0 -0
  359. {model_compose-0.4.11 → model_compose-0.4.13}/src/model_compose.egg-info/requires.txt +0 -0
  360. {model_compose-0.4.11 → model_compose-0.4.13}/src/model_compose.egg-info/top_level.txt +0 -0
  361. {model_compose-0.4.11 → model_compose-0.4.13}/tests/test_cli.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: model-compose
3
- Version: 0.4.11
4
- Summary: model-compose: Declarative AI Model and Workflow Orchestrator
3
+ Version: 0.4.13
4
+ Summary: model-compose: Declarative AI Workflow Orchestrator
5
5
  Author-email: Hanyeol Cho <hanyeol.cho@gmail.com>
6
6
  License-Expression: MIT
7
7
  Project-URL: Homepage, https://github.com/hanyeol/model-compose
@@ -38,7 +38,7 @@ Dynamic: license-file
38
38
 
39
39
  ---
40
40
 
41
- # 🤖 model-compose
41
+ # 🤖 Model-Compose
42
42
 
43
43
  **model-compose** is a declarative AI workflow orchestrator inspired by `docker-compose`. It lets you define and run AI model pipelines using simple YAML files — no custom code required. Effortlessly connect external AI services (OpenAI, Anthropic, Google, etc.), run local AI models, integrate vector stores, and more — all within powerful, composable workflows.
44
44
 
@@ -54,12 +54,13 @@ Dynamic: license-file
54
54
 
55
55
  ## ✨ Features
56
56
 
57
- - 🎨 **Zero Code**: Pure YAML configuration—no scripting required
57
+ - 🎨 **No-Code**: Pure YAML configuration—no scripting required
58
58
  - 🔄 **Composable**: Reusable components and multi-step workflows
59
59
  - 🚀 **Production Ready**: HTTP/MCP servers + Web UI + Docker deployment
60
60
  - 🔌 **Connect Anything**: External AI services, local models, vector stores, and more
61
61
  - ⚡ **Stream & Scale**: Real-time streaming and event-driven automation
62
- - 🛠️ **Developer Friendly**: Environment variables, tunneling, webhooks
62
+ - ⚙️ **Configuration**: Environment variables, flexible settings
63
+ - 🔗 **Integration**: Webhooks, tunneling, HTTP servers
63
64
 
64
65
  ---
65
66
 
@@ -114,10 +115,15 @@ workflows:
114
115
  - component: chatgpt
115
116
  ```
116
117
 
118
+ Create a `.env` file:
119
+
120
+ ```bash
121
+ OPENAI_API_KEY=your-key
122
+ ```
123
+
117
124
  Run it:
118
125
 
119
126
  ```bash
120
- export OPENAI_API_KEY=your-key
121
127
  model-compose up
122
128
  ```
123
129
 
@@ -129,7 +135,7 @@ Your API is now live at `http://localhost:8080` and Web UI at `http://localhost:
129
135
  ## 💡 Key Capabilities
130
136
 
131
137
  ### 🖥️ Built-in Web UI
132
- Add a visual interface with just 3 lines of YAML:
138
+ Add a web interface by adding just 2 lines to your YAML:
133
139
  ```yaml
134
140
  controller:
135
141
  webui:
@@ -141,9 +147,9 @@ Instantly get a user-friendly interface to test and monitor your workflows. Supp
141
147
  Transform your workflows into MCP tools by changing one line:
142
148
  ```yaml
143
149
  controller:
144
- type: mcp-server # Change from http-server to mcp-server
150
+ type: mcp-server
145
151
  ```
146
- No code changes needed. Your workflows become instantly accessible via the Model Context Protocol.
152
+ Just set the type to `mcp-server`. Your workflows become instantly accessible via the Model Context Protocol.
147
153
 
148
154
  ### 🐳 Docker Deployment
149
155
  Deploy anywhere with built-in Docker support:
@@ -14,7 +14,7 @@
14
14
 
15
15
  ---
16
16
 
17
- # 🤖 model-compose
17
+ # 🤖 Model-Compose
18
18
 
19
19
  **model-compose** is a declarative AI workflow orchestrator inspired by `docker-compose`. It lets you define and run AI model pipelines using simple YAML files — no custom code required. Effortlessly connect external AI services (OpenAI, Anthropic, Google, etc.), run local AI models, integrate vector stores, and more — all within powerful, composable workflows.
20
20
 
@@ -30,12 +30,13 @@
30
30
 
31
31
  ## ✨ Features
32
32
 
33
- - 🎨 **Zero Code**: Pure YAML configuration—no scripting required
33
+ - 🎨 **No-Code**: Pure YAML configuration—no scripting required
34
34
  - 🔄 **Composable**: Reusable components and multi-step workflows
35
35
  - 🚀 **Production Ready**: HTTP/MCP servers + Web UI + Docker deployment
36
36
  - 🔌 **Connect Anything**: External AI services, local models, vector stores, and more
37
37
  - ⚡ **Stream & Scale**: Real-time streaming and event-driven automation
38
- - 🛠️ **Developer Friendly**: Environment variables, tunneling, webhooks
38
+ - ⚙️ **Configuration**: Environment variables, flexible settings
39
+ - 🔗 **Integration**: Webhooks, tunneling, HTTP servers
39
40
 
40
41
  ---
41
42
 
@@ -90,10 +91,15 @@ workflows:
90
91
  - component: chatgpt
91
92
  ```
92
93
 
94
+ Create a `.env` file:
95
+
96
+ ```bash
97
+ OPENAI_API_KEY=your-key
98
+ ```
99
+
93
100
  Run it:
94
101
 
95
102
  ```bash
96
- export OPENAI_API_KEY=your-key
97
103
  model-compose up
98
104
  ```
99
105
 
@@ -105,7 +111,7 @@ Your API is now live at `http://localhost:8080` and Web UI at `http://localhost:
105
111
  ## 💡 Key Capabilities
106
112
 
107
113
  ### 🖥️ Built-in Web UI
108
- Add a visual interface with just 3 lines of YAML:
114
+ Add a web interface by adding just 2 lines to your YAML:
109
115
  ```yaml
110
116
  controller:
111
117
  webui:
@@ -117,9 +123,9 @@ Instantly get a user-friendly interface to test and monitor your workflows. Supp
117
123
  Transform your workflows into MCP tools by changing one line:
118
124
  ```yaml
119
125
  controller:
120
- type: mcp-server # Change from http-server to mcp-server
126
+ type: mcp-server
121
127
  ```
122
- No code changes needed. Your workflows become instantly accessible via the Model Context Protocol.
128
+ Just set the type to `mcp-server`. Your workflows become instantly accessible via the Model Context Protocol.
123
129
 
124
130
  ### 🐳 Docker Deployment
125
131
  Deploy anywhere with built-in Docker support:
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "model-compose"
3
- version = "0.4.11"
4
- description = "model-compose: Declarative AI Model and Workflow Orchestrator"
3
+ version = "0.4.13"
4
+ description = "model-compose: Declarative AI Workflow Orchestrator"
5
5
  authors = [
6
6
  { name = "Hanyeol Cho", email = "hanyeol.cho@gmail.com" }
7
7
  ]
@@ -43,6 +43,6 @@ class ComponentActionContext:
43
43
  gateway = find_gateway_by_port(int(port)) if port else None
44
44
 
45
45
  if gateway:
46
- return gateway.get_context()
46
+ return gateway.get_context(int(port))
47
47
 
48
48
  return None
@@ -12,7 +12,11 @@ class GatewayService(AsyncService):
12
12
  self.config: GatewayConfig = config
13
13
 
14
14
  @abstractmethod
15
- def get_context(self) -> Dict[str, Any]:
15
+ def get_context(self, port: int) -> Optional[Dict[str, Any]]:
16
+ pass
17
+
18
+ @abstractmethod
19
+ def serves_port(self, port: int) -> bool:
16
20
  pass
17
21
 
18
22
  async def _install_package(self, package_spec: str, repository: Optional[str]) -> None:
@@ -20,6 +20,7 @@ def create_gateway(id: str, config: GatewayConfig, daemon: bool) -> GatewayServi
20
20
 
21
21
  def find_gateway_by_port(port: int) -> Optional[GatewayService]:
22
22
  for gateway in GatewayInstances.values():
23
- if gateway.config.port == port:
23
+ if gateway.serves_port(port):
24
24
  return gateway
25
+
25
26
  return None
@@ -6,22 +6,33 @@ from mindor.core.logger import logging
6
6
  class CommonHttpTunnelGateway:
7
7
  def __init__(self, config: HttpTunnelGatewayConfig):
8
8
  self.config: HttpTunnelGatewayConfig = config
9
- self.public_url: Optional[str] = None
9
+ self.public_urls = Optional[Dict[int, str]]
10
10
 
11
11
  def get_setup_requirements(self) -> Optional[List[str]]:
12
12
  return None
13
13
 
14
14
  async def serve(self) -> None:
15
- self.public_url = await self._serve()
16
- logging.info("HTTP tunnel started on port %d: %s", self.config.port, self.public_url)
15
+ self.public_urls = await self._serve()
16
+
17
+ for port, public_url in (self.public_urls or {}).items():
18
+ logging.info("HTTP tunnel started on port %d: %s", port, public_url)
17
19
 
18
20
  async def shutdown(self) -> None:
19
21
  await self._shutdown()
20
- logging.info("HTTP tunnel stopped on port %d: %s", self.config.port, self.public_url)
21
- self.public_url = None
22
+
23
+ for port, public_url in (self.public_urls or {}).items():
24
+ logging.info("HTTP tunnel stopped on port %d: %s", port, public_url)
25
+
26
+ self.public_urls = None
27
+
28
+ def get_public_url(self, port: int) -> Optional[str]:
29
+ if self.public_urls:
30
+ return self.public_urls.get(port)
31
+
32
+ return None
22
33
 
23
34
  @abstractmethod
24
- async def _serve(self) -> str:
35
+ async def _serve(self) -> Optional[Dict[int, str]]:
25
36
  pass
26
37
 
27
38
  @abstractmethod
@@ -13,24 +13,29 @@ class NgrokHttpTunnelGateway(CommonHttpTunnelGateway):
13
13
  def __init__(self, config: HttpTunnelGatewayConfig):
14
14
  super().__init__(config)
15
15
 
16
- self.tunnel: Optional[ngrok.NgrokTunnel] = None
16
+ self.tunnels: Optional[Dict[int, ngrok.NgrokTunnel]] = None
17
17
 
18
18
  def get_setup_requirements(self) -> Optional[List[str]]:
19
19
  return [ "pyngrok" ]
20
20
 
21
- async def _serve(self) -> str:
21
+ async def _serve(self) -> Optional[Dict[int, str]]:
22
22
  from pyngrok import ngrok
23
23
 
24
- self.tunnel = await asyncio.to_thread(
25
- ngrok.connect,
26
- addr=self.config.port,
27
- bind_tls=True
28
- )
29
- return self.tunnel.public_url
24
+ self.tunnels = {}
25
+
26
+ for port in self.config.port:
27
+ self.tunnels[port] = await asyncio.to_thread(
28
+ ngrok.connect,
29
+ addr=port,
30
+ bind_tls=True
31
+ )
32
+
33
+ return { port: tunnel.public_url for port, tunnel in self.tunnels.items() }
30
34
 
31
35
  async def _shutdown(self) -> None:
32
36
  from pyngrok import ngrok
33
37
 
34
- if self.tunnel:
35
- await asyncio.to_thread(ngrok.disconnect, self.tunnel.public_url)
36
- self.tunnel = None
38
+ for tunnel in self.tunnels.values():
39
+ await asyncio.to_thread(ngrok.disconnect, tunnel.public_url)
40
+
41
+ self.tunnels = None
@@ -2,7 +2,7 @@ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annot
2
2
  from abc import ABC, abstractmethod
3
3
  from mindor.dsl.schema.gateway import HttpTunnelGatewayConfig, HttpTunnelGatewayDriver
4
4
  from ...base import GatewayService, GatewayType, register_gateway
5
- from .base import GatewayService, CommonHttpTunnelGateway
5
+ from .base import CommonHttpTunnelGateway
6
6
  from .drivers import NgrokHttpTunnelGateway, CloudflareHttpTunnelGateway
7
7
 
8
8
  @register_gateway(GatewayType.HTTP_TUNNEL)
@@ -28,11 +28,19 @@ class HttpTunnelGateway(GatewayService):
28
28
  def _get_setup_requirements(self) -> Optional[List[str]]:
29
29
  return self.driver.get_setup_requirements()
30
30
 
31
- def get_context(self) -> Dict[str, Any]:
32
- return {
33
- "public_url": self.driver.public_url,
34
- "port": self.config.port
35
- }
31
+ def get_context(self, port: int) -> Optional[Dict[str, Any]]:
32
+ public_url = self.driver.get_public_url(port)
33
+
34
+ if public_url:
35
+ return {
36
+ "driver": self.config.driver.value,
37
+ "public_url": public_url
38
+ }
39
+
40
+ return None
41
+
42
+ def serves_port(self, port: int) -> bool:
43
+ return bool(self.driver.get_public_url(port))
36
44
 
37
45
  async def _serve(self) -> None:
38
46
  await self.driver.serve()
@@ -0,0 +1,79 @@
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, Iterator, Any
5
+ from mindor.dsl.schema.gateway import SshTunnelGatewayConfig
6
+ from ..base import GatewayService, GatewayType, register_gateway
7
+ from mindor.core.utils.ssh_client import SshClient
8
+ from mindor.core.logger import logging
9
+ import asyncio
10
+
11
+ if TYPE_CHECKING:
12
+ pass
13
+
14
+ @register_gateway(GatewayType.SSH_TUNNEL)
15
+ class SshTunnelGateway(GatewayService):
16
+ def __init__(self, id: str, config: SshTunnelGatewayConfig, daemon: bool):
17
+ super().__init__(id, config, daemon)
18
+
19
+ self.client: Optional[SshClient] = None
20
+ self.ports: Dict[int, int] = {} # {local_port: remote_port}
21
+ self._shutdown_event: Optional[asyncio.Event] = None
22
+
23
+ def _get_setup_requirements(self) -> Optional[List[str]]:
24
+ return [ "paramiko" ]
25
+
26
+ def get_context(self, port: int) -> Optional[Dict[str, Any]]:
27
+ remote_port = self.ports.get(port)
28
+ if remote_port is not None:
29
+ return {
30
+ "public_address": f"{self.config.connection.host}:{remote_port}"
31
+ }
32
+ return None
33
+
34
+ def serves_port(self, port: int) -> bool:
35
+ return port in self.ports
36
+
37
+ async def _serve(self) -> None:
38
+ """Establish SSH tunnel and start remote port forwarding"""
39
+ logging.info(
40
+ f"Establishing SSH tunnel to {self.config.connection.host}:{self.config.connection.port}"
41
+ )
42
+
43
+ self._shutdown_event = asyncio.Event()
44
+
45
+ self.client = SshClient(self.config.connection)
46
+ await self.client.connect()
47
+
48
+ # Start remote port forwarding for each port mapping
49
+ for remote_port, local_port in self.config.port:
50
+ actual_remote_port = await self.client.start_remote_port_forwarding(
51
+ remote_port=remote_port,
52
+ local_port=local_port,
53
+ local_host="localhost"
54
+ )
55
+
56
+ self.ports[local_port] = actual_remote_port
57
+
58
+ logging.info(
59
+ f"Remote port forwarding started: {self.config.connection.host}:{remote_port} -> localhost:{local_port}"
60
+ )
61
+
62
+ # Keep the SSH connection alive until shutdown event is set
63
+ await self._shutdown_event.wait()
64
+
65
+ async def _shutdown(self) -> None:
66
+ """Stop SSH tunnel and cleanup"""
67
+ # Signal the _serve task to stop
68
+ if self._shutdown_event:
69
+ self._shutdown_event.set()
70
+
71
+ if self.client:
72
+ logging.info(
73
+ f"Stopping SSH tunnel to {self.config.connection.host}:{self.config.connection.port}"
74
+ )
75
+
76
+ await self.client.close()
77
+ self.client = None
78
+ self.ports = {}
79
+ self._shutdown_event = None
@@ -0,0 +1,206 @@
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING, Optional, Dict, List, Tuple, Any
3
+ from mindor.dsl.schema.transport.ssh import SshConnectionConfig, SshKeyfileAuthConfig, SshPasswordAuthConfig
4
+ from mindor.core.logger import logging
5
+ import asyncio
6
+ import os
7
+ import threading
8
+
9
+ if TYPE_CHECKING:
10
+ import paramiko
11
+
12
+ class SshClient:
13
+ """SSH client with remote port forwarding support"""
14
+ shared_instance: Optional["SshClient"] = None
15
+
16
+ def __init__(self, connection_config: SshConnectionConfig):
17
+ self.config: SshConnectionConfig = connection_config
18
+ self.client: Optional[paramiko.SSHClient] = None
19
+ self.transport: Optional[paramiko.Transport] = None
20
+ self.port_forwards: List[Tuple[int, int]] = []
21
+ self._shutdown_event: Optional[threading.Event] = None
22
+ self._forward_threads: List[threading.Thread] = []
23
+
24
+ async def __aenter__(self):
25
+ await self.connect()
26
+ return self
27
+
28
+ async def __aexit__(self, exc_type, exc_val, exc_tb):
29
+ await self.close()
30
+
31
+ async def connect(self) -> None:
32
+ """Establish SSH connection"""
33
+ import paramiko
34
+
35
+ def _connect():
36
+ client = paramiko.SSHClient()
37
+ client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
38
+
39
+ connect_params = {
40
+ "hostname": self.config.host,
41
+ "port": self.config.port,
42
+ "username": self.config.auth.username,
43
+ }
44
+ self._configure_auth(connect_params)
45
+
46
+ logging.debug(f"Connecting to {self.config.host}:{self.config.port}...")
47
+ client.connect(**connect_params)
48
+ logging.debug(f"SSH connection established to {self.config.host}:{self.config.port}")
49
+
50
+ return client
51
+
52
+ self.client = await asyncio.to_thread(_connect)
53
+ self.transport = self.client.get_transport()
54
+ self._shutdown_event = threading.Event()
55
+
56
+ def _configure_auth(self, connect_params: Dict[str, Any]) -> None:
57
+ if isinstance(self.config.auth, SshKeyfileAuthConfig):
58
+ keyfile_path = os.path.expanduser(self.config.auth.keyfile)
59
+ connect_params["key_filename"] = keyfile_path
60
+ return
61
+
62
+ if isinstance(self.config.auth, SshPasswordAuthConfig):
63
+ connect_params["password"] = self.config.auth.password
64
+ return
65
+
66
+ async def start_remote_port_forwarding(
67
+ self,
68
+ remote_port: int,
69
+ local_port: int,
70
+ local_host: str = "localhost"
71
+ ) -> int:
72
+ """
73
+ Start remote port forwarding
74
+
75
+ Args:
76
+ remote_port: Port on the remote SSH server
77
+ local_port: Port on the local machine to forward to
78
+ local_host: Local host address (default: localhost)
79
+
80
+ Returns:
81
+ The actual remote port bound (may differ if remote_port was 0)
82
+ """
83
+ import paramiko
84
+
85
+ def _start_forwarding():
86
+ actual_remote_port = self.transport.request_port_forward(
87
+ address="0.0.0.0", # Bind to all interfaces on remote
88
+ port=remote_port
89
+ )
90
+
91
+ logging.debug(
92
+ f"Remote port forwarding: {self.config.host}:{actual_remote_port} -> "
93
+ f"{local_host}:{local_port}"
94
+ )
95
+
96
+ def handler():
97
+ while self._shutdown_event and not self._shutdown_event.is_set():
98
+ try:
99
+ channel = self.transport.accept(timeout=1.0)
100
+ if channel is None:
101
+ continue
102
+
103
+ forward_thread = threading.Thread(
104
+ target=self._handle_forward,
105
+ args=(channel, local_host, local_port),
106
+ daemon=True
107
+ )
108
+ forward_thread.start()
109
+ except Exception as e:
110
+ if self._shutdown_event and not self._shutdown_event.is_set():
111
+ logging.error(f"Error accepting connection: {e}")
112
+ break
113
+
114
+ handler_thread = threading.Thread(target=handler, daemon=True)
115
+ handler_thread.start()
116
+ self._forward_threads.append(handler_thread)
117
+
118
+ return actual_remote_port
119
+
120
+ actual_remote_port = await asyncio.to_thread(_start_forwarding)
121
+ self.port_forwards.append((actual_remote_port, local_port))
122
+
123
+ return actual_remote_port
124
+
125
+ def _handle_forward(
126
+ self,
127
+ remote_channel: paramiko.Channel,
128
+ local_host: str,
129
+ local_port: int
130
+ ) -> None:
131
+ """Handle a single forwarded connection"""
132
+ import socket
133
+
134
+ try:
135
+ local_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
136
+ local_socket.connect((local_host, local_port))
137
+
138
+ def forward_data(source, destination):
139
+ try:
140
+ while True:
141
+ data = source.recv(1024)
142
+ if len(data) == 0:
143
+ break
144
+ destination.sendall(data)
145
+ except Exception:
146
+ pass
147
+ finally:
148
+ source.close()
149
+ destination.close()
150
+
151
+ threads = [
152
+ threading.Thread(target=forward_data, args=(remote_channel, local_socket), daemon=True),
153
+ threading.Thread(target=forward_data, args=(local_socket, remote_channel), daemon=True),
154
+ ]
155
+
156
+ for thread in threads:
157
+ thread.start()
158
+
159
+ for thread in threads:
160
+ thread.join()
161
+
162
+ except Exception as e:
163
+ logging.error(f"Error handling forward connection: {e}")
164
+ finally:
165
+ try:
166
+ remote_channel.close()
167
+ except Exception:
168
+ pass
169
+
170
+ async def close(self) -> None:
171
+ """Close SSH connection and stop all port forwarding"""
172
+ if self._shutdown_event:
173
+ self._shutdown_event.set()
174
+
175
+ def _close():
176
+ # Cancel all remote port forwards
177
+ for remote_port, _ in self.port_forwards:
178
+ try:
179
+ self.transport.cancel_port_forward("0.0.0.0", remote_port)
180
+ logging.debug(f"Cancelled remote port forward on port {remote_port}")
181
+ except Exception as e:
182
+ logging.warning(f"Error cancelling port forward {remote_port}: {e}")
183
+
184
+ if self.client:
185
+ self.client.close()
186
+ logging.debug(f"SSH connection closed to {self.config.host}:{self.config.port}")
187
+
188
+ if self.client:
189
+ await asyncio.to_thread(_close)
190
+
191
+ self.client = None
192
+ self.transport = None
193
+ self.port_forwards = []
194
+ self._forward_threads = []
195
+ self._shutdown_event = None
196
+
197
+ def is_connected(self) -> bool:
198
+ """Check if SSH connection is active"""
199
+ return self.client is not None and self.transport is not None and self.transport.is_active()
200
+
201
+ @classmethod
202
+ def get_shared_instance(cls, connection_config: SshConnectionConfig) -> "SshClient":
203
+ """Get or create shared SSH client instance"""
204
+ if not cls.shared_instance:
205
+ cls.shared_instance = SshClient(connection_config)
206
+ return cls.shared_instance
@@ -10,7 +10,7 @@ class CommonComponentConfig(BaseModel):
10
10
  id: str = Field(default="__component__", description="ID of component.")
11
11
  type: ComponentType = Field(..., description="Type of component.")
12
12
  runtime: RuntimeConfig = Field(..., description="Runtime environment settings.")
13
- max_concurrent_count: int = Field(default=1, description="Maximum number of concurrent actions this component can handle.")
13
+ max_concurrent_count: int = Field(default=0, description="Maximum number of concurrent actions this component can handle.")
14
14
  default: bool = Field(default=False, description="Whether to use this component when no component is explicitly specified.")
15
15
  actions: List[CommonActionConfig] = Field(default_factory=list, description="Actions available within this component.")
16
16
 
@@ -5,7 +5,7 @@ from .common import ControllerType, CommonControllerConfig
5
5
 
6
6
  class HttpServerControllerConfig(CommonControllerConfig):
7
7
  type: Literal[ControllerType.HTTP_SERVER]
8
- host: str = Field(default="0.0.0.0", description="Host address to bind the HTTP server to.")
8
+ host: str = Field(default="127.0.0.1", description="Host address to bind the HTTP server to.")
9
9
  port: int = Field(default=8080, ge=1, le=65535, description="Port number on which the HTTP server will listen.")
10
10
  base_path: Optional[str] = Field(default=None, description="Base path to prefix all API routes")
11
11
  origins: Optional[str] = Field(default="*", description="CORS allowed origins, specified as a comma-separated string")
@@ -5,6 +5,6 @@ from .common import ControllerType, CommonControllerConfig
5
5
 
6
6
  class McpServerControllerConfig(CommonControllerConfig):
7
7
  type: Literal[ControllerType.MCP_SERVER]
8
- host: str = Field(default="0.0.0.0", description="Host address to bind the MCP server to.")
8
+ host: str = Field(default="127.0.0.1", description="Host address to bind the MCP server to.")
9
9
  port: int = Field(default=8080, ge=1, le=65535, description="Port number on which the MCP server will listen.")
10
10
  base_path: Optional[str] = Field(default=None, description="Base path to prefix all MCP endpoints")
@@ -9,5 +9,5 @@ class ControllerWebUIDriver(str, Enum):
9
9
 
10
10
  class CommonWebUIConfig(BaseModel):
11
11
  driver: ControllerWebUIDriver = Field(..., description="Web UI rendering mode.")
12
- host: str = Field(default="0.0.0.0", description="Host address to bind the Web UI server to.")
12
+ host: str = Field(default="127.0.0.1", description="Host address to bind the Web UI server to.")
13
13
  port: int = Field(default=8081, ge=1, le=65535, description="Port number to serve the Web UI on.")
@@ -6,4 +6,3 @@ from .types import GatewayType
6
6
  class CommonGatewayConfig(BaseModel):
7
7
  type: GatewayType = Field(..., description="Type of gateway service.")
8
8
  runtime: RuntimeType = Field(default=RuntimeType.NATIVE, description="Runtime environment for executing the gateway service.")
9
- port: int = Field(default=8090, ge=1, le=65535, description="Local port to tunnel through the gateway to the public.")
@@ -11,3 +11,12 @@ class HttpTunnelGatewayDriver(str, Enum):
11
11
  class CommonHttpTunnelGatewayConfig(CommonGatewayConfig):
12
12
  type: Literal[GatewayType.HTTP_TUNNEL]
13
13
  driver: HttpTunnelGatewayDriver = Field(..., description="HTTP tunneling service provider.")
14
+ port: List[int] = Field(..., min_length=1, description="One or more local ports to tunnel through the gateway to the public.")
15
+
16
+ @model_validator(mode="before")
17
+ def normalize_port(cls, values):
18
+ port = values.get("port", 8090) # Default to 8090 if not specified
19
+ if not isinstance(port, list):
20
+ port = [ port ]
21
+ values["port"] = port
22
+ return values
@@ -0,0 +1,26 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
+ from pydantic import BaseModel, Field
3
+ from pydantic import model_validator
4
+ from mindor.dsl.schema.transport.ssh import SshConnectionConfig
5
+ from .common import GatewayType, CommonGatewayConfig
6
+
7
+ class SshTunnelGatewayConfig(CommonGatewayConfig):
8
+ type: Literal[GatewayType.SSH_TUNNEL]
9
+ connection: SshConnectionConfig = Field(..., description="SSH connection configuration.")
10
+ port: List[Tuple[int, int]] = Field(..., min_length=1, description="One or more port forwarding configuration.")
11
+
12
+ @model_validator(mode="before")
13
+ def normalize_port(cls, values):
14
+ port = values.get("port", 8090) # Default to 8090 if not specified
15
+ if not isinstance(port, list):
16
+ port = [ port ]
17
+ values["port"] = [ cls.normalize_single_port(value) for value in port ]
18
+ return values
19
+
20
+ @classmethod
21
+ def normalize_single_port(cls, value) -> Optional[Tuple[int, int]]:
22
+ if isinstance(value, str):
23
+ return tuple(int(port) for port in value.split(":"))
24
+ if isinstance(value, int):
25
+ return ( value, value )
26
+ return None