model-compose 0.4.9__tar.gz → 0.4.10__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 (357) hide show
  1. {model_compose-0.4.9/src/model_compose.egg-info → model_compose-0.4.10}/PKG-INFO +22 -30
  2. {model_compose-0.4.9 → model_compose-0.4.10}/README.md +21 -29
  3. {model_compose-0.4.9 → model_compose-0.4.10}/pyproject.toml +1 -1
  4. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/cli/compose.py +27 -21
  5. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/base.py +14 -1
  6. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/services/http_server.py +20 -4
  7. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/listener/services/__init__.py +1 -0
  8. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/listener/services/http_callback.py +10 -12
  9. model_compose-0.4.10/src/mindor/core/listener/services/http_trigger.py +129 -0
  10. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/datasets/providers/common.py +2 -2
  11. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/common.py +1 -1
  12. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/controller/impl/common.py +1 -1
  13. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/listener/impl/__init__.py +1 -0
  14. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/listener/impl/http_callback.py +1 -1
  15. model_compose-0.4.10/src/mindor/dsl/schema/listener/impl/http_trigger.py +27 -0
  16. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/listener/impl/types.py +1 -0
  17. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/listener/listener.py +2 -1
  18. {model_compose-0.4.9 → model_compose-0.4.10/src/model_compose.egg-info}/PKG-INFO +22 -30
  19. {model_compose-0.4.9 → model_compose-0.4.10}/src/model_compose.egg-info/SOURCES.txt +2 -0
  20. {model_compose-0.4.9 → model_compose-0.4.10}/LICENSE +0 -0
  21. {model_compose-0.4.9 → model_compose-0.4.10}/setup.cfg +0 -0
  22. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/__init__.py +0 -0
  23. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/cli/__init__.py +0 -0
  24. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/__init__.py +0 -0
  25. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/__init__.py +0 -0
  26. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/base.py +0 -0
  27. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/component.py +0 -0
  28. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/context.py +0 -0
  29. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/__init__.py +0 -0
  30. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/datasets/__init__.py +0 -0
  31. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/datasets/datasets.py +0 -0
  32. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/datasets/providers/__init__.py +0 -0
  33. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/datasets/providers/common.py +0 -0
  34. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/datasets/providers/huggingface.py +0 -0
  35. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/datasets/providers/local.py +0 -0
  36. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/datasets/utils.py +0 -0
  37. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/http_client.py +0 -0
  38. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/http_server.py +0 -0
  39. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/image_processor.py +0 -0
  40. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/mcp_client.py +0 -0
  41. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/mcp_server.py +0 -0
  42. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/__init__.py +0 -0
  43. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/base/__init__.py +0 -0
  44. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/base/common.py +0 -0
  45. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/base/huggingface.py +0 -0
  46. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/base/huggingface_hub.py +0 -0
  47. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/base/unsloth.py +0 -0
  48. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/model.py +0 -0
  49. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/__init__.py +0 -0
  50. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/chat_completion/__init__.py +0 -0
  51. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/chat_completion/huggingface.py +0 -0
  52. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/face_embedding/__init__.py +0 -0
  53. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/face_embedding/common.py +0 -0
  54. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/face_embedding/custom.py +0 -0
  55. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/face_embedding/insightface.py +0 -0
  56. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/image_generation/__init__.py +0 -0
  57. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/image_generation/common.py +0 -0
  58. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/image_generation/custom.py +0 -0
  59. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/image_generation/flux.py +0 -0
  60. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/image_generation/hunyuan_image.py +0 -0
  61. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/image_generation/sdxl.py +0 -0
  62. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/image_to_text/__init__.py +0 -0
  63. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/image_to_text/huggingface.py +0 -0
  64. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/image_upscale/__init__.py +0 -0
  65. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/image_upscale/common.py +0 -0
  66. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/image_upscale/custom.py +0 -0
  67. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/image_upscale/esrgan.py +0 -0
  68. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/image_upscale/ldsr.py +0 -0
  69. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/image_upscale/real_esrgan.py +0 -0
  70. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/image_upscale/swinir.py +0 -0
  71. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/text_classification/__init__.py +0 -0
  72. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/text_classification/huggingface.py +0 -0
  73. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/text_embedding/__init__.py +0 -0
  74. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/text_embedding/huggingface.py +0 -0
  75. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/text_generation/__init__.py +0 -0
  76. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/model/tasks/text_generation/huggingface.py +0 -0
  77. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/shell.py +0 -0
  78. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/text_splitter.py +0 -0
  79. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/vector_store/__init__.py +0 -0
  80. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/vector_store/base.py +0 -0
  81. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/vector_store/drivers/__init__.py +0 -0
  82. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/vector_store/drivers/chroma.py +0 -0
  83. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/vector_store/drivers/milvus.py +0 -0
  84. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/vector_store/vector_store.py +0 -0
  85. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/component/services/workflow.py +0 -0
  86. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/compose/__init__.py +0 -0
  87. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/compose/compose.py +0 -0
  88. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/compose/manager.py +0 -0
  89. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/__init__.py +0 -0
  90. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/controller.py +0 -0
  91. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/runner/__init__.py +0 -0
  92. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/runner/client.py +0 -0
  93. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/runner/http_client.py +0 -0
  94. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/runner/mcp_client.py +0 -0
  95. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/runner/runner.py +0 -0
  96. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/runtime/__init__.py +0 -0
  97. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
  98. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/runtime/docker/context/Dockerfile +0 -0
  99. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/runtime/docker/docker.py +0 -0
  100. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/runtime/native/__init__.py +0 -0
  101. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/runtime/native/native.py +0 -0
  102. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/runtime/specs.py +0 -0
  103. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/services/__init__.py +0 -0
  104. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/services/mcp_server.py +0 -0
  105. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/webui/__init__.py +0 -0
  106. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/webui/gradio.py +0 -0
  107. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/controller/webui/webui.py +0 -0
  108. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/foundation/__init__.py +0 -0
  109. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/foundation/async_service.py +0 -0
  110. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/gateway/__init__.py +0 -0
  111. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/gateway/base.py +0 -0
  112. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/gateway/gateway.py +0 -0
  113. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/gateway/services/__init__.py +0 -0
  114. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/gateway/services/http_tunnel/__init__.py +0 -0
  115. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/gateway/services/http_tunnel/base.py +0 -0
  116. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/gateway/services/http_tunnel/drivers/__init__.py +0 -0
  117. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/gateway/services/http_tunnel/drivers/cloudflare.py +0 -0
  118. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/gateway/services/http_tunnel/drivers/ngrok.py +0 -0
  119. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/gateway/services/http_tunnel/http_tunnel.py +0 -0
  120. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/gateway/services/ssh_tunnel.py +0 -0
  121. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/listener/__init__.py +0 -0
  122. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/listener/base.py +0 -0
  123. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/listener/listener.py +0 -0
  124. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/logger/__init__.py +0 -0
  125. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/logger/base.py +0 -0
  126. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/logger/logger.py +0 -0
  127. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/logger/logging.py +0 -0
  128. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/logger/services/__init__.py +0 -0
  129. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/logger/services/console.py +0 -0
  130. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/logger/services/file.py +0 -0
  131. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/runtime/__init__.py +0 -0
  132. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/runtime/docker/__init__.py +0 -0
  133. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/runtime/docker/docker.py +0 -0
  134. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/runtime/env.py +0 -0
  135. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/utils/__init__.py +0 -0
  136. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/utils/caching.py +0 -0
  137. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/utils/http_client.py +0 -0
  138. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/utils/http_request.py +0 -0
  139. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/utils/http_response.py +0 -0
  140. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/utils/http_status.py +0 -0
  141. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/utils/image.py +0 -0
  142. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/utils/mcp_client.py +0 -0
  143. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/utils/package.py +0 -0
  144. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/utils/renderers.py +0 -0
  145. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/utils/resolvers.py +0 -0
  146. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/utils/shell.py +0 -0
  147. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/utils/ssh_client.py +0 -0
  148. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/utils/streamer.py +0 -0
  149. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/utils/streaming.py +0 -0
  150. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/utils/time.py +0 -0
  151. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/utils/websocket_client.py +0 -0
  152. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/utils/work_queue.py +0 -0
  153. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/workflow/__init__.py +0 -0
  154. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/workflow/context.py +0 -0
  155. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/workflow/job/__init__.py +0 -0
  156. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/workflow/job/base.py +0 -0
  157. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
  158. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/workflow/job/impl/action.py +0 -0
  159. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/workflow/job/impl/delay.py +0 -0
  160. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/workflow/job/impl/filter.py +0 -0
  161. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/workflow/job/impl/if_.py +0 -0
  162. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/workflow/job/impl/random_router.py +0 -0
  163. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/workflow/job/impl/switch.py +0 -0
  164. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/workflow/job/job.py +0 -0
  165. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/workflow/schema.py +0 -0
  166. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/core/workflow/workflow.py +0 -0
  167. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/__init__.py +0 -0
  168. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/loader.py +0 -0
  169. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/__init__.py +0 -0
  170. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/__init__.py +0 -0
  171. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/action.py +0 -0
  172. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/__init__.py +0 -0
  173. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/common.py +0 -0
  174. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/datasets/__init__.py +0 -0
  175. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/datasets/common.py +0 -0
  176. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/datasets/datasets.py +0 -0
  177. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/datasets/providers/__init__.py +0 -0
  178. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/datasets/providers/huggingface.py +0 -0
  179. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/datasets/providers/local.py +0 -0
  180. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/http_client.py +0 -0
  181. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/http_server.py +0 -0
  182. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/image_processor.py +0 -0
  183. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
  184. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
  185. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
  186. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/__init__.py +0 -0
  187. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +0 -0
  188. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/__init__.py +0 -0
  189. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/face_embedding.py +0 -0
  190. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/__init__.py +0 -0
  191. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/common.py +0 -0
  192. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/dlib.py +0 -0
  193. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/facenet.py +0 -0
  194. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/insightface.py +0 -0
  195. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/__init__.py +0 -0
  196. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/image_generation.py +0 -0
  197. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/__init__.py +0 -0
  198. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/common.py +0 -0
  199. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/flux.py +0 -0
  200. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
  201. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/sdxl.py +0 -0
  202. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +0 -0
  203. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/__init__.py +0 -0
  204. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/image_upscale.py +0 -0
  205. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/__init__.py +0 -0
  206. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/common.py +0 -0
  207. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
  208. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
  209. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
  210. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/swinir.py +0 -0
  211. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +0 -0
  212. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +0 -0
  213. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +0 -0
  214. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model/model.py +0 -0
  215. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model_trainer/__init__.py +0 -0
  216. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model_trainer/impl/__init__.py +0 -0
  217. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model_trainer/impl/classification.py +0 -0
  218. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model_trainer/impl/common.py +0 -0
  219. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model_trainer/impl/sft.py +0 -0
  220. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/model_trainer/model_trainer.py +0 -0
  221. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
  222. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/text_splitter.py +0 -0
  223. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/vector_store/__init__.py +0 -0
  224. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/vector_store/impl/__init__.py +0 -0
  225. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/vector_store/impl/chroma.py +0 -0
  226. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/vector_store/impl/common.py +0 -0
  227. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/vector_store/impl/faiss.py +0 -0
  228. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/vector_store/impl/milvus.py +0 -0
  229. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/vector_store/impl/qdrant.py +0 -0
  230. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/vector_store/vector_store.py +0 -0
  231. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
  232. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/__init__.py +0 -0
  233. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/component.py +0 -0
  234. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/__init__.py +0 -0
  235. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/common.py +0 -0
  236. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/datasets/__init__.py +0 -0
  237. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/datasets/datasets.py +0 -0
  238. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/http_client.py +0 -0
  239. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
  240. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/image_processor.py +0 -0
  241. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/mcp_client.py +0 -0
  242. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
  243. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
  244. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/__init__.py +0 -0
  245. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/chat_completion.py +0 -0
  246. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/common.py +0 -0
  247. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/__init__.py +0 -0
  248. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/face_embedding.py +0 -0
  249. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/__init__.py +0 -0
  250. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/common.py +0 -0
  251. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/dlib.py +0 -0
  252. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/facenet.py +0 -0
  253. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/insightface.py +0 -0
  254. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/__init__.py +0 -0
  255. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/image_generation.py +0 -0
  256. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/__init__.py +0 -0
  257. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/common.py +0 -0
  258. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/flux.py +0 -0
  259. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
  260. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/sdxl.py +0 -0
  261. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/image_to_text.py +0 -0
  262. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/__init__.py +0 -0
  263. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/image_upscale.py +0 -0
  264. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/__init__.py +0 -0
  265. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/common.py +0 -0
  266. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
  267. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
  268. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
  269. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/swinir.py +0 -0
  270. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +0 -0
  271. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +0 -0
  272. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +0 -0
  273. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model/model.py +0 -0
  274. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model_trainer/__init__.py +0 -0
  275. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model_trainer/impl/__init__.py +0 -0
  276. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model_trainer/impl/classification.py +0 -0
  277. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model_trainer/impl/common.py +0 -0
  278. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model_trainer/impl/sft.py +0 -0
  279. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/model_trainer/model_trainer.py +0 -0
  280. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
  281. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/text_splitter.py +0 -0
  282. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/types.py +0 -0
  283. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/vector_store/__init__.py +0 -0
  284. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/vector_store/impl/__init__.py +0 -0
  285. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/vector_store/impl/chroma.py +0 -0
  286. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/vector_store/impl/common.py +0 -0
  287. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/vector_store/impl/faiss.py +0 -0
  288. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/vector_store/impl/milvus.py +0 -0
  289. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +0 -0
  290. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/vector_store/vector_store.py +0 -0
  291. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
  292. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/compose.py +0 -0
  293. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/controller/__init__.py +0 -0
  294. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/controller/controller.py +0 -0
  295. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
  296. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/controller/impl/http_server.py +0 -0
  297. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/controller/impl/mcp_server.py +0 -0
  298. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/controller/impl/types.py +0 -0
  299. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/controller/webui/__init__.py +0 -0
  300. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/controller/webui/impl/__init__.py +0 -0
  301. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/controller/webui/impl/common.py +0 -0
  302. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +0 -0
  303. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/controller/webui/impl/gradio.py +0 -0
  304. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/controller/webui/impl/static.py +0 -0
  305. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/controller/webui/webui.py +0 -0
  306. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
  307. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
  308. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
  309. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/gateway/impl/common.py +0 -0
  310. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/gateway/impl/http_tunnel/__init__.py +0 -0
  311. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/gateway/impl/http_tunnel/http_tunnel.py +0 -0
  312. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/__init__.py +0 -0
  313. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/cloudflare.py +0 -0
  314. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/common.py +0 -0
  315. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/ngrok.py +0 -0
  316. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -0
  317. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
  318. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/job/__init__.py +0 -0
  319. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
  320. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/job/impl/action.py +0 -0
  321. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/job/impl/common.py +0 -0
  322. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
  323. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/job/impl/filter.py +0 -0
  324. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
  325. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/job/impl/random_router.py +0 -0
  326. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
  327. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/job/impl/types.py +0 -0
  328. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/job/job.py +0 -0
  329. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/listener/__init__.py +0 -0
  330. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/listener/impl/common.py +0 -0
  331. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/logger/__init__.py +0 -0
  332. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
  333. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/logger/impl/common.py +0 -0
  334. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
  335. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/logger/impl/file.py +0 -0
  336. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
  337. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/logger/logger.py +0 -0
  338. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
  339. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
  340. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/runtime/impl/common.py +0 -0
  341. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
  342. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
  343. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
  344. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
  345. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/transport/__init__.py +0 -0
  346. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/transport/http.py +0 -0
  347. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/transport/ssh.py +0 -0
  348. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/schema/workflow.py +0 -0
  349. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/utils/__init__.py +0 -0
  350. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/utils/annotation.py +0 -0
  351. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/utils/enum.py +0 -0
  352. {model_compose-0.4.9 → model_compose-0.4.10}/src/mindor/dsl/utils/path.py +0 -0
  353. {model_compose-0.4.9 → model_compose-0.4.10}/src/model_compose.egg-info/dependency_links.txt +0 -0
  354. {model_compose-0.4.9 → model_compose-0.4.10}/src/model_compose.egg-info/entry_points.txt +0 -0
  355. {model_compose-0.4.9 → model_compose-0.4.10}/src/model_compose.egg-info/requires.txt +0 -0
  356. {model_compose-0.4.9 → model_compose-0.4.10}/src/model_compose.egg-info/top_level.txt +0 -0
  357. {model_compose-0.4.9 → model_compose-0.4.10}/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.9
3
+ Version: 0.4.10
4
4
  Summary: model-compose: Declarative AI Model and Workflow Orchestrator
5
5
  Author-email: Hanyeol Cho <hanyeol.cho@gmail.com>
6
6
  License-Expression: MIT
@@ -65,6 +65,26 @@ pip install -e .
65
65
 
66
66
  ---
67
67
 
68
+ ## 📚 Documentation
69
+
70
+ **📖 [Complete User Guide](docs/user-guide/00-table-of-contents.md)**
71
+
72
+ Need help getting started or want to explore advanced features? Check out our comprehensive user guide:
73
+
74
+ - **🌍 English**: [User Guide](docs/user-guide/00-table-of-contents.md)
75
+ - **🇰🇷 한국어**: [사용자 가이드](docs/user-guide/ko/00-table-of-contents.md)
76
+
77
+ The guide covers everything from basic concepts to advanced workflows, including:
78
+ - Getting started with model-compose
79
+ - Component and workflow configuration
80
+ - Local AI models and training
81
+ - Streaming mode and variable binding
82
+ - System integration with listeners and gateways
83
+ - Deployment strategies
84
+ - Practical examples and troubleshooting
85
+
86
+ ---
87
+
68
88
  ## 🚀 How to Run
69
89
 
70
90
  **model-compose** provides a CLI interface to launch and manage your AI workflows — inspired by `docker-compose`.
@@ -194,35 +214,7 @@ This minimal example defines a simple workflow that calls the OpenAI ChatGPT API
194
214
 
195
215
  You can easily expand this example by adding more components (e.g., text-to-speech, image generation) and connecting them through additional jobs.
196
216
 
197
- #### 📡 Listener Example
198
-
199
- ```
200
- listener:
201
- type: http-callback
202
- port: 8090
203
- base_path: /callbacks
204
- callbacks:
205
- - path: /chat-ai
206
- method: POST
207
- item: ${body.data}
208
- identify_by: ${item.task_id}
209
- result: ${item.choices[0].message.content}
210
- ```
211
-
212
- This listener sets up an HTTP callback endpoint at `http://localhost:8090/callbacks/chat-ai` to handle asynchronous responses from an external service that behaves like ChatGPT but supports delayed or push-based results. This is useful when integrating with services that notify results via webhook-style callbacks.
213
-
214
- #### 🌐 Gateway Example
215
-
216
- ```
217
- gateway:
218
- type: http-tunnel
219
- driver: ngrok
220
- port: 8090
221
- ```
222
-
223
- This gateway configuration exposes the local listener defined above to the public internet using an HTTP tunnel powered by ngrok. It forwards incoming traffic from a secure, public URL (e.g., `https://abc123.ngrok.io`) directly to your local callback endpoint at `http://localhost:8090`. This is essential when integrating with third-party services that need to push data back to your workflow via webhooks or asynchronous callbacks.
224
-
225
- > 📁 For more example model-compose.yml configurations, check the [examples directory](examples) in the source code.
217
+ > 📁 For more example configurations including listeners, gateways, and advanced workflows, check the [examples directory](examples) or refer to the [User Guide](docs/user-guide/00-table-of-contents.md).
226
218
 
227
219
  ---
228
220
  ## 🖥 Web UI
@@ -41,6 +41,26 @@ pip install -e .
41
41
 
42
42
  ---
43
43
 
44
+ ## 📚 Documentation
45
+
46
+ **📖 [Complete User Guide](docs/user-guide/00-table-of-contents.md)**
47
+
48
+ Need help getting started or want to explore advanced features? Check out our comprehensive user guide:
49
+
50
+ - **🌍 English**: [User Guide](docs/user-guide/00-table-of-contents.md)
51
+ - **🇰🇷 한국어**: [사용자 가이드](docs/user-guide/ko/00-table-of-contents.md)
52
+
53
+ The guide covers everything from basic concepts to advanced workflows, including:
54
+ - Getting started with model-compose
55
+ - Component and workflow configuration
56
+ - Local AI models and training
57
+ - Streaming mode and variable binding
58
+ - System integration with listeners and gateways
59
+ - Deployment strategies
60
+ - Practical examples and troubleshooting
61
+
62
+ ---
63
+
44
64
  ## 🚀 How to Run
45
65
 
46
66
  **model-compose** provides a CLI interface to launch and manage your AI workflows — inspired by `docker-compose`.
@@ -170,35 +190,7 @@ This minimal example defines a simple workflow that calls the OpenAI ChatGPT API
170
190
 
171
191
  You can easily expand this example by adding more components (e.g., text-to-speech, image generation) and connecting them through additional jobs.
172
192
 
173
- #### 📡 Listener Example
174
-
175
- ```
176
- listener:
177
- type: http-callback
178
- port: 8090
179
- base_path: /callbacks
180
- callbacks:
181
- - path: /chat-ai
182
- method: POST
183
- item: ${body.data}
184
- identify_by: ${item.task_id}
185
- result: ${item.choices[0].message.content}
186
- ```
187
-
188
- This listener sets up an HTTP callback endpoint at `http://localhost:8090/callbacks/chat-ai` to handle asynchronous responses from an external service that behaves like ChatGPT but supports delayed or push-based results. This is useful when integrating with services that notify results via webhook-style callbacks.
189
-
190
- #### 🌐 Gateway Example
191
-
192
- ```
193
- gateway:
194
- type: http-tunnel
195
- driver: ngrok
196
- port: 8090
197
- ```
198
-
199
- This gateway configuration exposes the local listener defined above to the public internet using an HTTP tunnel powered by ngrok. It forwards incoming traffic from a secure, public URL (e.g., `https://abc123.ngrok.io`) directly to your local callback endpoint at `http://localhost:8090`. This is essential when integrating with third-party services that need to push data back to your workflow via webhooks or asynchronous callbacks.
200
-
201
- > 📁 For more example model-compose.yml configurations, check the [examples directory](examples) in the source code.
193
+ > 📁 For more example configurations including listeners, gateways, and advanced workflows, check the [examples directory](examples) or refer to the [User Guide](docs/user-guide/00-table-of-contents.md).
202
194
 
203
195
  ---
204
196
  ## 🖥 Web UI
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "model-compose"
3
- version = "0.4.9"
3
+ version = "0.4.10"
4
4
  description = "model-compose: Declarative AI Model and Workflow Orchestrator"
5
5
  authors = [
6
6
  { name = "Hanyeol Cho", email = "hanyeol.cho@gmail.com" }
@@ -1,11 +1,18 @@
1
- import click
2
- import json
1
+ from typing import Optional, List
2
+ import importlib.metadata
3
3
  from pathlib import Path
4
+ import click
4
5
  import asyncio
6
+ import json
5
7
 
6
- from mindor.dsl.loader import load_compose_config
7
- from mindor.core.runtime.env import load_env_files, merge_env_data
8
- from mindor.core.compose import *
8
+ def _load_compose_config(config_files: List[Path], env_files: List[Path], env_data: List[str]):
9
+ from mindor.dsl.loader import load_compose_config
10
+ from mindor.core.runtime.env import load_env_files, merge_env_data
11
+
12
+ env = load_env_files(".", env_files or [])
13
+ env = merge_env_data(env, env_data)
14
+
15
+ return load_compose_config(".", config_files, env)
9
16
 
10
17
  @click.group()
11
18
  @click.option(
@@ -13,6 +20,10 @@ from mindor.core.compose import *
13
20
  type=click.Path(exists=True, dir_okay=False, path_type=Path),
14
21
  help="Compose configuration files."
15
22
  )
23
+ @click.version_option(
24
+ version=importlib.metadata.version("model-compose"),
25
+ message="%(prog)s %(version)s"
26
+ )
16
27
  @click.pass_context
17
28
  def compose_command(ctx: click.Context, config_files: List[Path]) -> None:
18
29
  """model-compose"""
@@ -34,18 +45,17 @@ def compose_command(ctx: click.Context, config_files: List[Path]) -> None:
34
45
  @click.option("--verbose", "-v", is_flag=True, help="Enable verbose output.")
35
46
  @click.pass_context
36
47
  def up_command(
37
- ctx: click.Context,
48
+ ctx: click.Context,
38
49
  detach: bool,
39
50
  env_files: List[Path],
40
51
  env_data: List[str],
41
52
  verbose: bool
42
53
  ) -> None:
54
+ from mindor.core.compose import launch_services
43
55
  config_files = ctx.obj.get("config_files", [])
44
56
  async def _async_command():
45
57
  try:
46
- env = load_env_files(".", env_files or [])
47
- env = merge_env_data(env, env_data)
48
- config = load_compose_config(".", config_files, env)
58
+ config = _load_compose_config(config_files, env_files, env_data)
49
59
  await launch_services(config, detach, verbose)
50
60
  except Exception as e:
51
61
  click.echo(f"❌ {e}", err=True)
@@ -70,12 +80,11 @@ def down_command(
70
80
  env_data: List[str],
71
81
  verbose: bool
72
82
  ) -> None:
83
+ from mindor.core.compose import terminate_services
73
84
  config_files = ctx.obj.get("config_files", [])
74
85
  async def _async_command():
75
86
  try:
76
- env = load_env_files(".", env_files or [])
77
- env = merge_env_data(env, env_data)
78
- config = load_compose_config(".", config_files, env)
87
+ config = _load_compose_config(config_files, env_files, env_data)
79
88
  await terminate_services(config, verbose)
80
89
  except Exception as e:
81
90
  click.echo(f"❌ {e}", err=True)
@@ -100,12 +109,11 @@ def start_command(
100
109
  env_data: List[str],
101
110
  verbose: bool
102
111
  ) -> None:
112
+ from mindor.core.compose import start_services
103
113
  config_files = ctx.obj.get("config_files", [])
104
114
  async def _async_command():
105
115
  try:
106
- env = load_env_files(".", env_files or [])
107
- env = merge_env_data(env, env_data)
108
- config = load_compose_config(".", config_files, env)
116
+ config = _load_compose_config(config_files, env_files, env_data)
109
117
  await start_services(config, verbose)
110
118
  except Exception as e:
111
119
  click.echo(f"❌ {e}", err=True)
@@ -130,12 +138,11 @@ def stop_command(
130
138
  env_data: List[str],
131
139
  verbose: bool
132
140
  ) -> None:
141
+ from mindor.core.compose import stop_services
133
142
  config_files = ctx.obj.get("config_files", [])
134
143
  async def _async_command():
135
144
  try:
136
- env = load_env_files(".", env_files or [])
137
- env = merge_env_data(env, env_data)
138
- config = load_compose_config(".", config_files, env)
145
+ config = _load_compose_config(config_files, env_files, env_data)
139
146
  await stop_services(config, verbose)
140
147
  except Exception as e:
141
148
  click.echo(f"❌ {e}", err=True)
@@ -176,12 +183,11 @@ def run_command(
176
183
  output_path: Optional[Path],
177
184
  verbose: bool
178
185
  ) -> None:
186
+ from mindor.core.compose import run_workflow
179
187
  config_files = ctx.obj.get("config_files", [])
180
188
  async def _async_command():
181
189
  try:
182
- env = load_env_files(".", env_files or [])
183
- env = merge_env_data(env, env_data)
184
- config = load_compose_config(".", config_files, env)
190
+ config = _load_compose_config(config_files, env_files, env_data)
185
191
  input = json.loads(input_json) if input_json else {}
186
192
  state = await run_workflow(config, workflow_id or "__default__", input, output_path, verbose)
187
193
  if isinstance(state.output, (dict, list)) or state.error:
@@ -23,7 +23,7 @@ from .runtime.native import NativeRuntimeLauncher
23
23
  from .runtime.docker import DockerRuntimeLauncher
24
24
  from threading import Lock
25
25
  from pathlib import Path
26
- import asyncio, ulid, os
26
+ import asyncio, ulid, os, threading
27
27
 
28
28
  class TaskStatus(str, Enum):
29
29
  PENDING = "pending"
@@ -39,6 +39,19 @@ class TaskState:
39
39
  error: Optional[Any] = None
40
40
 
41
41
  class ControllerService(AsyncService):
42
+ _shared_instance: Optional["ControllerService"] = None
43
+ _shared_instance_lock = threading.Lock()
44
+
45
+ def __new__(cls, *args, **kwargs):
46
+ with cls._shared_instance_lock:
47
+ if cls._shared_instance is None:
48
+ cls._shared_instance = super().__new__(cls, args, kwargs)
49
+ return cls._shared_instance
50
+
51
+ @classmethod
52
+ def get_shared_instance(cls) -> Optional["ControllerService"]:
53
+ return cls._shared_instance
54
+
42
55
  def __init__(
43
56
  self,
44
57
  config: ControllerConfig,
@@ -42,6 +42,10 @@ class TaskResult(BaseModel):
42
42
  error=instance.error
43
43
  )
44
44
 
45
+ @classmethod
46
+ def to_dict(cls, instance: TaskState) -> Dict[str, Any]:
47
+ return cls.from_instance(instance).model_dump(exclude_none=True)
48
+
45
49
  class WorkflowVariableResult(BaseModel):
46
50
  name: Optional[str]
47
51
  type: str
@@ -83,6 +87,10 @@ class WorkflowSimpleResult(BaseModel):
83
87
  default=instance.default or None
84
88
  )
85
89
 
90
+ @classmethod
91
+ def to_dict(cls, instance: WorkflowSchema) -> Dict[str, Any]:
92
+ return cls.from_instance(instance).model_dump(exclude_none=True)
93
+
86
94
  class WorkflowSchemaResult(BaseModel):
87
95
  workflow_id: str
88
96
  title: Optional[str] = None
@@ -102,6 +110,10 @@ class WorkflowSchemaResult(BaseModel):
102
110
  default=instance.default or None
103
111
  )
104
112
 
113
+ @classmethod
114
+ def to_dict(cls, instance: WorkflowSchema) -> Dict[str, Any]:
115
+ return cls.from_instance(instance).model_dump(exclude_none=True)
116
+
105
117
  @classmethod
106
118
  def _to_variable_result(cls, variable: Union[WorkflowVariableConfig, WorkflowVariableGroupConfig]) -> Union[WorkflowVariableResult, WorkflowVariableGroupResult]:
107
119
  if isinstance(variable, WorkflowVariableGroupConfig):
@@ -176,6 +188,10 @@ class HttpServerController(ControllerService):
176
188
 
177
189
  return self._render_task_response(state, output_only)
178
190
 
191
+ @self.router.get("/health")
192
+ async def health_check():
193
+ return JSONResponse(content={ "status": "ok" })
194
+
179
195
  async def _serve(self) -> None:
180
196
  self.server = uvicorn.Server(uvicorn.Config(
181
197
  self.app,
@@ -231,7 +247,7 @@ class HttpServerController(ControllerService):
231
247
  return self._render_task_state(state)
232
248
 
233
249
  def _render_task_state(self, state: TaskState) -> Response:
234
- return JSONResponse(content=TaskResult.from_instance(state).model_dump(exclude_none=True))
250
+ return JSONResponse(content=TaskResult.to_dict(state))
235
251
 
236
252
  def _render_task_output(self, state: TaskState) -> Response:
237
253
  if state.status in [ TaskStatus.PENDING, TaskStatus.PROCESSING ]:
@@ -279,13 +295,13 @@ class HttpServerController(ControllerService):
279
295
 
280
296
  def _render_workflow_list(self, workflows: Dict[str, WorkflowSchema]) -> Response:
281
297
  return JSONResponse(content=[
282
- WorkflowSimpleResult.from_instance(workflow).model_dump(exclude_none=True) for workflow in workflows.values()
298
+ WorkflowSimpleResult.to_dict(workflow) for workflow in workflows.values()
283
299
  ])
284
300
 
285
301
  def _render_workflow_schemas(self, workflows: Dict[str, WorkflowSchema]) -> Response:
286
302
  return JSONResponse(content=[
287
- WorkflowSchemaResult.from_instance(workflow).model_dump(exclude_none=True) for workflow in workflows.values()
303
+ WorkflowSchemaResult.to_dict(workflow) for workflow in workflows.values()
288
304
  ])
289
305
 
290
306
  def _render_workflow_schema(self, workflow: WorkflowSchema) -> Response:
291
- return JSONResponse(content=WorkflowSchemaResult.from_instance(workflow).model_dump(exclude_none=True))
307
+ return JSONResponse(content=WorkflowSchemaResult.to_dict(workflow))
@@ -1 +1,2 @@
1
1
  from .http_callback import *
2
+ from .http_trigger import *
@@ -1,18 +1,13 @@
1
1
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, AsyncIterator, Any
2
-
3
2
  from mindor.dsl.schema.listener import HttpCallbackListenerConfig, HttpCallbackConfig
4
3
  from mindor.core.utils.http_request import parse_request_body, parse_options_header
5
4
  from mindor.core.utils.renderers import VariableRenderer
6
5
  from ..base import ListenerService, ListenerType, register_listener
7
-
8
6
  from fastapi import FastAPI, APIRouter, Body, HTTPException, Request
9
7
  from fastapi.responses import Response, JSONResponse
10
8
  from threading import Lock
11
9
  import asyncio, uvicorn
12
10
 
13
- _pending_futures: Dict[str, asyncio.Future] = {}
14
- _pending_futures_lock: Lock = Lock()
15
-
16
11
  class HttpCallbackContext:
17
12
  def __init__(self, body: Optional[Any], query: Optional[Dict[str, str]], bulk: bool, item: Optional[str]):
18
13
  self.body: Optional[Any] = body
@@ -49,6 +44,9 @@ class HttpCallbackContext:
49
44
 
50
45
  @register_listener(ListenerType.HTTP_CALLBACK)
51
46
  class HttpCallbackListener(ListenerService):
47
+ _pending_futures: Dict[str, asyncio.Future] = {}
48
+ _pending_futures_lock: Lock = Lock()
49
+
52
50
  def __init__(self, id: str, config: HttpCallbackListenerConfig, daemon: bool):
53
51
  super().__init__(id, config, daemon)
54
52
 
@@ -86,7 +84,7 @@ class HttpCallbackListener(ListenerService):
86
84
  future.set_exception(RuntimeError(f"Task failed for '{callback_id}'"))
87
85
  self._remove_pending_future(callback_id)
88
86
 
89
- return Response()
87
+ return Response(status_code=200)
90
88
 
91
89
  return _handler
92
90
 
@@ -118,14 +116,14 @@ class HttpCallbackListener(ListenerService):
118
116
  self.server.should_exit = True
119
117
 
120
118
  def _get_pending_future(self, id: str) -> Optional[asyncio.Future]:
121
- with _pending_futures_lock:
122
- return _pending_futures.get(id)
119
+ with self._pending_futures_lock:
120
+ return self._pending_futures.get(id)
123
121
 
124
122
  def _remove_pending_future(self, id: str) -> None:
125
- with _pending_futures_lock:
126
- _pending_futures.pop(id, None)
123
+ with self._pending_futures_lock:
124
+ self._pending_futures.pop(id, None)
127
125
 
128
126
  @classmethod
129
127
  def register_pending_future(cls, id: str, future: asyncio.Future) -> None:
130
- with _pending_futures_lock:
131
- _pending_futures[id] = future
128
+ with cls._pending_futures_lock:
129
+ cls._pending_futures[id] = future
@@ -0,0 +1,129 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, AsyncIterator, Self, Any
2
+ from pydantic import BaseModel
3
+ from mindor.dsl.schema.listener import HttpTriggerListenerConfig, HttpTriggerConfig
4
+ from mindor.core.controller import ControllerService, TaskState
5
+ from mindor.core.utils.http_request import parse_request_body, parse_options_header
6
+ from mindor.core.utils.renderers import VariableRenderer
7
+ from ..base import ListenerService, ListenerType, register_listener
8
+ from fastapi import FastAPI, APIRouter, Body, HTTPException, Request
9
+ from fastapi.responses import Response, JSONResponse
10
+ import asyncio, uvicorn
11
+
12
+ class TaskResult(BaseModel):
13
+ task_id: str
14
+ status: Literal[ "pending", "processing", "completed", "failed" ]
15
+ output: Optional[Any] = None
16
+ error: Optional[Any] = None
17
+
18
+ @classmethod
19
+ def from_instance(cls, instance: TaskState) -> Self:
20
+ return cls(
21
+ task_id=instance.task_id,
22
+ status=instance.status,
23
+ output=instance.output,
24
+ error=instance.error
25
+ )
26
+
27
+ @classmethod
28
+ def to_dict(cls, instance: TaskState) -> Dict[str, Any]:
29
+ return cls.from_instance(instance).model_dump(exclude_none=True)
30
+
31
+ class HttpTriggerContext:
32
+ def __init__(self, body: Optional[Any], query: Optional[Dict[str, str]], bulk: bool, item: Optional[str]):
33
+ self.body: Optional[Any] = body
34
+ self.query: Optional[Dict[str, str]] = query
35
+ self.bulk: bool = bulk
36
+ self.item: Optional[str] = item
37
+ self.renderer: VariableRenderer = VariableRenderer(self._resolve_source)
38
+
39
+ async def items(self) -> AsyncIterator["HttpTriggerContext"]:
40
+ for item in await self._items():
41
+ yield HttpTriggerContext(item, self.query, False, None)
42
+
43
+ async def render_variable(self, template: str, ignore_files: bool = True) -> Any:
44
+ return await self.renderer.render(template, ignore_files)
45
+
46
+ async def _items(self) -> List[Any]:
47
+ item = await self.renderer.render(self.item) if self.item else self.body
48
+
49
+ if self.bulk:
50
+ if not isinstance(item, list):
51
+ raise ValueError("Expected a list because 'bulk' is true, but got a non-list")
52
+ return item
53
+
54
+ return [ item ]
55
+
56
+ async def _resolve_source(self, key: str, index: Optional[int]) -> Any:
57
+ if key == "body" or key == "item":
58
+ return self.body
59
+
60
+ if key == "query":
61
+ return self.query
62
+
63
+ raise KeyError(f"Unknown source: {key}")
64
+
65
+ @register_listener(ListenerType.HTTP_TRIGGER)
66
+ class HttpTriggerListener(ListenerService):
67
+ def __init__(self, id: str, config: HttpTriggerListenerConfig, daemon: bool):
68
+ super().__init__(id, config, daemon)
69
+
70
+ self.server: Optional[uvicorn.Server] = None
71
+ self.app: FastAPI = FastAPI(openapi_url=None, docs_url=None, redoc_url=None)
72
+ self.router: APIRouter = APIRouter()
73
+
74
+ self._configure_routes()
75
+ self.app.include_router(self.router, prefix=self.config.base_path or "")
76
+
77
+ def _configure_routes(self) -> None:
78
+ for trigger in self.config.triggers:
79
+ self.router.add_api_route(
80
+ path=trigger.path,
81
+ endpoint=self._make_trigger_handler(trigger),
82
+ methods=[trigger.method],
83
+ name=f"trigger_{trigger.path.strip('/').replace('/', '_')}",
84
+ )
85
+
86
+ def _make_trigger_handler(self, trigger: HttpTriggerConfig) -> Callable:
87
+ async def _handler(request: Request) -> Response:
88
+ controller = ControllerService.get_shared_instance()
89
+ content_type, _ = parse_options_header(request.headers, "Content-Type")
90
+ body, query = await parse_request_body(request, content_type), request.query_params
91
+ context = HttpTriggerContext(body, query, trigger.bulk, trigger.item)
92
+ states: List[TaskState] = []
93
+
94
+ async for item in context.items():
95
+ workflow_id = await item.render_variable(trigger.workflow)
96
+ input = await item.render_variable(trigger.input)
97
+
98
+ try:
99
+ state = await controller.run_workflow(workflow_id, input, wait_for_completion=False)
100
+ except Exception as e:
101
+ raise HTTPException(status_code=500, detail=f"Failed to trigger workflow: {str(e)}")
102
+
103
+ states.append(state)
104
+
105
+ return self._render_task_states(states, trigger.bulk)
106
+
107
+ return _handler
108
+
109
+ def _render_task_states(self, states: List[TaskState], bulk: bool) -> Response:
110
+ if bulk:
111
+ return JSONResponse(content=[ TaskResult.to_dict(state) for state in states ])
112
+ else:
113
+ return JSONResponse(content=TaskResult.to_dict(states[0]))
114
+
115
+ async def _serve(self) -> None:
116
+ self.server = uvicorn.Server(uvicorn.Config(
117
+ self.app,
118
+ host=self.config.host,
119
+ port=self.config.port,
120
+ log_level="info"
121
+ ))
122
+ try:
123
+ await self.server.serve()
124
+ finally:
125
+ self.server = None
126
+
127
+ async def _shutdown(self) -> None:
128
+ if self.server:
129
+ self.server.should_exit = True
@@ -11,8 +11,8 @@ class CommonDatasetsLoadActionConfig(CommonDatasetsActionConfig):
11
11
  method: Literal[DatasetsActionMethod.LOAD]
12
12
  provider: DatasetsProvider = Field(..., description="Datasets provider configuration.")
13
13
  split: Optional[str] = Field(default=None, description="Dataset split to load (e.g., 'train', 'test', 'validation').")
14
- streaming: bool = Field(default=False, description="Enable streaming mode for large datasets.")
15
- keep_in_memory: bool = Field(default=False, description="Keep dataset in memory.")
14
+ streaming: Union[bool, str] = Field(default=False, description="Enable streaming mode for large datasets.")
15
+ keep_in_memory: Union[bool, str] = Field(default=False, description="Keep dataset in memory.")
16
16
  cache_dir: Optional[str] = Field(default=None, description="Directory to cache downloaded files.")
17
17
  save_infos: Union[bool, str] = Field(default=False, description="Save dataset info to cache.")
18
18
  fraction: Optional[Union[float, str]] = Field(default=None, description="Fraction of dataset to load.")
@@ -4,4 +4,4 @@ from pydantic import BaseModel, Field
4
4
  from ...common import CommonActionConfig
5
5
 
6
6
  class CommonModelActionConfig(CommonActionConfig):
7
- streaming: Optional[bool] = Field(default=None, description="Whether to enable streaming responses for inference.")
7
+ streaming: Union[bool, str] = Field(default=None, description="Whether to enable streaming responses for inference.")
@@ -9,7 +9,7 @@ class CommonControllerConfig(BaseModel):
9
9
  name: Optional[str] = Field(default=None, description="Name used to identify this controller.")
10
10
  type: ControllerType = Field(..., description="Type of controller to run.")
11
11
  runtime: RuntimeConfig = Field(..., description="Runtime environment settings.")
12
- max_concurrent_count: int = Field(default=1, description="Maximum number of tasks that can be executed concurrently.")
12
+ max_concurrent_count: int = Field(default=0, description="Maximum number of tasks that can be executed concurrently.")
13
13
  threaded: bool = Field(default=False, description="Whether to run tasks in separate threads.")
14
14
  webui: Optional[ControllerWebUIConfig] = Field(default=None, description="Configuration for the controller's Web UI interface.")
15
15
 
@@ -1,2 +1,3 @@
1
1
  from .common import *
2
2
  from .http_callback import *
3
+ from .http_trigger import *
@@ -4,7 +4,7 @@ from pydantic import model_validator
4
4
  from .common import ListenerType, CommonListenerConfig
5
5
 
6
6
  class HttpCallbackConfig(BaseModel):
7
- path: str
7
+ path: str = Field(..., description="URL path for this callback endpoint.")
8
8
  method: Literal[ "GET", "POST", "PUT", "DELETE", "PATCH" ] = Field(default="POST", description="HTTP method this callback endpoint will accept.")
9
9
  bulk: Union[bool, str] = Field(default=False, description="Whether this callback handles multiple items in a single request.")
10
10
  item: Optional[str] = Field(default=None, description="Field path to extract individual items from the callback payload.")
@@ -0,0 +1,27 @@
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 .common import ListenerType, CommonListenerConfig
5
+
6
+ class HttpTriggerConfig(BaseModel):
7
+ path: str = Field(..., description="URL path for this trigger endpoint.")
8
+ method: Literal["GET", "POST", "PUT", "DELETE", "PATCH"] = Field(default="POST", description="HTTP method this trigger endpoint will accept.")
9
+ bulk: Union[bool, str] = Field(default=False, description="Whether this trigger handles multiple items in a single request.")
10
+ item: Optional[str] = Field(default=None, description="Field path to extract individual items from the trigger payload.")
11
+ workflow: str = Field(..., description="Workflow ID to execute when this endpoint is triggered.")
12
+ input: Optional[Dict[str, str]] = Field(default=None, description="Workflow input parameters.")
13
+
14
+ class HttpTriggerListenerConfig(CommonListenerConfig):
15
+ type: Literal[ListenerType.HTTP_TRIGGER]
16
+ host: str = Field(default="0.0.0.0", description="Host address to bind the HTTP server to.")
17
+ port: int = Field(default=8091, ge=1, le=65535, description="Port number on which the HTTP server will listen.")
18
+ base_path: Optional[str] = Field(default=None, description="Base path prefix for all trigger endpoints.")
19
+ triggers: List[HttpTriggerConfig] = Field(default_factory=list, description="List of trigger endpoint configurations.")
20
+
21
+ @model_validator(mode="before")
22
+ def inflate_single_trigger(cls, values: Dict[str, Any]):
23
+ if "triggers" not in values:
24
+ trigger_keys = set(HttpTriggerConfig.model_fields.keys()) - set(CommonListenerConfig.model_fields.keys())
25
+ if any(k in values for k in trigger_keys):
26
+ values["triggers"] = [ { k: values.pop(k) for k in trigger_keys if k in values } ]
27
+ return values
@@ -2,3 +2,4 @@ from enum import Enum
2
2
 
3
3
  class ListenerType(str, Enum):
4
4
  HTTP_CALLBACK = "http-callback"
5
+ HTTP_TRIGGER = "http-trigger"
@@ -4,7 +4,8 @@ from .impl import *
4
4
 
5
5
  ListenerConfig = Annotated[
6
6
  Union[
7
- HttpCallbackListenerConfig
7
+ HttpCallbackListenerConfig,
8
+ HttpTriggerListenerConfig
8
9
  ],
9
10
  Field(discriminator="type")
10
11
  ]