model-compose 0.4.37__tar.gz → 0.4.38__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 (498) hide show
  1. {model_compose-0.4.37 → model_compose-0.4.38}/PKG-INFO +1 -1
  2. {model_compose-0.4.37 → model_compose-0.4.38}/pyproject.toml +1 -1
  3. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/base.py +4 -1
  4. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/__init__.py +1 -0
  5. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/key_value_store/drivers/redis.py +2 -8
  6. model_compose-0.4.38/src/mindor/core/component/services/websocket_server.py +203 -0
  7. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/webui/gradio/builder.py +28 -14
  8. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/utils/cdp_client.py +10 -9
  9. model_compose-0.4.38/src/mindor/core/utils/websocket_client.py +95 -0
  10. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/action.py +1 -0
  11. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/__init__.py +1 -0
  12. model_compose-0.4.38/src/mindor/dsl/schema/action/impl/websocket_server.py +21 -0
  13. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/component.py +1 -0
  14. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/__init__.py +1 -0
  15. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/types.py +1 -0
  16. model_compose-0.4.38/src/mindor/dsl/schema/component/impl/websocket_server.py +53 -0
  17. {model_compose-0.4.37 → model_compose-0.4.38}/src/model_compose.egg-info/PKG-INFO +1 -1
  18. {model_compose-0.4.37 → model_compose-0.4.38}/src/model_compose.egg-info/SOURCES.txt +3 -0
  19. model_compose-0.4.37/src/mindor/core/utils/websocket_client.py +0 -56
  20. {model_compose-0.4.37 → model_compose-0.4.38}/LICENSE +0 -0
  21. {model_compose-0.4.37 → model_compose-0.4.38}/README.md +0 -0
  22. {model_compose-0.4.37 → model_compose-0.4.38}/setup.cfg +0 -0
  23. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/__init__.py +0 -0
  24. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/cli/__init__.py +0 -0
  25. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/cli/compose.py +0 -0
  26. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/cli/interrupt.py +0 -0
  27. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/__init__.py +0 -0
  28. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/__init__.py +0 -0
  29. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/component.py +0 -0
  30. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/context.py +0 -0
  31. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/runtime/__init__.py +0 -0
  32. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/runtime/process_manager.py +0 -0
  33. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/runtime/process_worker.py +0 -0
  34. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/agent.py +0 -0
  35. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/audio_extractor/__init__.py +0 -0
  36. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/audio_extractor/audio_extractor.py +0 -0
  37. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/audio_extractor/base.py +0 -0
  38. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/audio_extractor/drivers/__init__.py +0 -0
  39. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/audio_extractor/drivers/ffmpeg.py +0 -0
  40. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/datasets/__init__.py +0 -0
  41. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/datasets/datasets.py +0 -0
  42. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/datasets/providers/__init__.py +0 -0
  43. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/datasets/providers/common.py +0 -0
  44. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/datasets/providers/huggingface.py +0 -0
  45. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/datasets/providers/local.py +0 -0
  46. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/datasets/utils.py +0 -0
  47. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/http_client.py +0 -0
  48. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/http_server.py +0 -0
  49. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/image_processor.py +0 -0
  50. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/key_value_store/__init__.py +0 -0
  51. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/key_value_store/base.py +0 -0
  52. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/key_value_store/drivers/__init__.py +0 -0
  53. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/key_value_store/key_value_store.py +0 -0
  54. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/mcp_client.py +0 -0
  55. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/mcp_server.py +0 -0
  56. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/__init__.py +0 -0
  57. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/base/__init__.py +0 -0
  58. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/base/common.py +0 -0
  59. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/base/huggingface.py +0 -0
  60. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/base/huggingface_hub.py +0 -0
  61. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/base/llamacpp.py +0 -0
  62. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/base/unsloth.py +0 -0
  63. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/model.py +0 -0
  64. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/__init__.py +0 -0
  65. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/chat_completion/__init__.py +0 -0
  66. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/chat_completion/huggingface.py +0 -0
  67. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/chat_completion/llamacpp.py +0 -0
  68. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/face_embedding/__init__.py +0 -0
  69. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/face_embedding/common.py +0 -0
  70. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/face_embedding/custom.py +0 -0
  71. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/face_embedding/insightface.py +0 -0
  72. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_generation/__init__.py +0 -0
  73. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_generation/common.py +0 -0
  74. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_generation/custom.py +0 -0
  75. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_generation/flux.py +0 -0
  76. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_generation/hunyuan_image.py +0 -0
  77. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_generation/sdxl.py +0 -0
  78. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_to_text/__init__.py +0 -0
  79. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_to_text/huggingface.py +0 -0
  80. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_upscale/__init__.py +0 -0
  81. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_upscale/common.py +0 -0
  82. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_upscale/custom.py +0 -0
  83. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_upscale/esrgan.py +0 -0
  84. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_upscale/ldsr.py +0 -0
  85. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_upscale/real_esrgan.py +0 -0
  86. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_upscale/swinir.py +0 -0
  87. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/speech_to_text/__init__.py +0 -0
  88. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/speech_to_text/huggingface.py +0 -0
  89. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_classification/__init__.py +0 -0
  90. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_classification/huggingface.py +0 -0
  91. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_embedding/__init__.py +0 -0
  92. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_embedding/huggingface.py +0 -0
  93. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_embedding/llamacpp.py +0 -0
  94. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_generation/__init__.py +0 -0
  95. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_generation/huggingface.py +0 -0
  96. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_generation/llamacpp.py +0 -0
  97. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_to_speech/__init__.py +0 -0
  98. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_to_speech/common.py +0 -0
  99. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_to_speech/custom.py +0 -0
  100. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_to_speech/qwen.py +0 -0
  101. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/shell.py +0 -0
  102. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/text_splitter.py +0 -0
  103. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/vector_store/__init__.py +0 -0
  104. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/vector_store/base.py +0 -0
  105. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/vector_store/drivers/__init__.py +0 -0
  106. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/vector_store/drivers/chroma.py +0 -0
  107. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/vector_store/drivers/milvus.py +0 -0
  108. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/vector_store/vector_store.py +0 -0
  109. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/video_converter/__init__.py +0 -0
  110. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/video_converter/base.py +0 -0
  111. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/video_converter/drivers/__init__.py +0 -0
  112. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/video_converter/drivers/ffmpeg.py +0 -0
  113. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/video_converter/video_converter.py +0 -0
  114. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/video_scene_detector/__init__.py +0 -0
  115. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/video_scene_detector/base.py +0 -0
  116. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/video_scene_detector/drivers/__init__.py +0 -0
  117. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/video_scene_detector/drivers/ffmpeg.py +0 -0
  118. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/video_scene_detector/drivers/pyscenedetect.py +0 -0
  119. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/video_scene_detector/drivers/transnetv2.py +0 -0
  120. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/video_scene_detector/video_scene_detector.py +0 -0
  121. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/web_browser.py +0 -0
  122. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/web_scraper.py +0 -0
  123. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/component/services/workflow.py +0 -0
  124. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/compose/__init__.py +0 -0
  125. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/compose/compose.py +0 -0
  126. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/compose/manager.py +0 -0
  127. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/compose/validator.py +0 -0
  128. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/__init__.py +0 -0
  129. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/adapters/__init__.py +0 -0
  130. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/adapters/adapter.py +0 -0
  131. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/adapters/base.py +0 -0
  132. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/adapters/services/__init__.py +0 -0
  133. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/adapters/services/http_server.py +0 -0
  134. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/adapters/services/mcp_server.py +0 -0
  135. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/adapters/services/queue_subscriber/__init__.py +0 -0
  136. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/adapters/services/queue_subscriber/base.py +0 -0
  137. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/adapters/services/queue_subscriber/drivers/__init__.py +0 -0
  138. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/adapters/services/queue_subscriber/drivers/redis.py +0 -0
  139. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/adapters/services/queue_subscriber/queue_subscriber.py +0 -0
  140. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/base.py +0 -0
  141. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/controller.py +0 -0
  142. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/queue/__init__.py +0 -0
  143. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/queue/base.py +0 -0
  144. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/queue/drivers/__init__.py +0 -0
  145. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/queue/drivers/redis.py +0 -0
  146. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/queue/queue.py +0 -0
  147. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/runner/__init__.py +0 -0
  148. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/runner/client.py +0 -0
  149. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/runner/http_client.py +0 -0
  150. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/runner/mcp_client.py +0 -0
  151. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/runner/runner.py +0 -0
  152. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/runtime/__init__.py +0 -0
  153. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/runtime/apple_container/__init__.py +0 -0
  154. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/runtime/apple_container/apple_container.py +0 -0
  155. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
  156. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/runtime/docker/context/Dockerfile +0 -0
  157. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/runtime/docker/docker.py +0 -0
  158. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/runtime/native/__init__.py +0 -0
  159. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/runtime/native/native.py +0 -0
  160. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/runtime/specs.py +0 -0
  161. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/webui/__init__.py +0 -0
  162. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/webui/driver.py +0 -0
  163. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/webui/gradio/__init__.py +0 -0
  164. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/webui/gradio/driver.py +0 -0
  165. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/webui/static/__init__.py +0 -0
  166. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/webui/static/driver.py +0 -0
  167. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/controller/webui/webui.py +0 -0
  168. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/errors.py +0 -0
  169. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/evaluator/__init__.py +0 -0
  170. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/evaluator/condition.py +0 -0
  171. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/foundation/__init__.py +0 -0
  172. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/foundation/async_service.py +0 -0
  173. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/foundation/compat/__init__.py +0 -0
  174. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/foundation/compat/asyncio.py +0 -0
  175. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/foundation/ipc_messages.py +0 -0
  176. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/foundation/package.py +0 -0
  177. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/foundation/process_manager.py +0 -0
  178. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/foundation/process_worker.py +0 -0
  179. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/gateway/__init__.py +0 -0
  180. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/gateway/base.py +0 -0
  181. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/gateway/gateway.py +0 -0
  182. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/gateway/services/__init__.py +0 -0
  183. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/gateway/services/http_tunnel/__init__.py +0 -0
  184. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/gateway/services/http_tunnel/base.py +0 -0
  185. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/gateway/services/http_tunnel/drivers/__init__.py +0 -0
  186. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/gateway/services/http_tunnel/drivers/cloudflare.py +0 -0
  187. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/gateway/services/http_tunnel/drivers/ngrok.py +0 -0
  188. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/gateway/services/http_tunnel/http_tunnel.py +0 -0
  189. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/gateway/services/ssh_tunnel.py +0 -0
  190. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/listener/__init__.py +0 -0
  191. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/listener/base.py +0 -0
  192. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/listener/listener.py +0 -0
  193. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/listener/services/__init__.py +0 -0
  194. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/listener/services/http_callback.py +0 -0
  195. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/listener/services/http_trigger.py +0 -0
  196. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/logger/__init__.py +0 -0
  197. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/logger/base.py +0 -0
  198. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/logger/logger.py +0 -0
  199. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/logger/logging.py +0 -0
  200. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/logger/services/__init__.py +0 -0
  201. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/logger/services/console.py +0 -0
  202. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/logger/services/file.py +0 -0
  203. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/runtime/__init__.py +0 -0
  204. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/runtime/apple_container/__init__.py +0 -0
  205. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/runtime/apple_container/apple_container.py +0 -0
  206. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/runtime/docker/__init__.py +0 -0
  207. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/runtime/docker/docker.py +0 -0
  208. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/runtime/env.py +0 -0
  209. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/system/__init__.py +0 -0
  210. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/system/base.py +0 -0
  211. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/system/services/__init__.py +0 -0
  212. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/system/services/docker_compose.py +0 -0
  213. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/system/system.py +0 -0
  214. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/utils/__init__.py +0 -0
  215. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/utils/active_counter.py +0 -0
  216. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/utils/caching.py +0 -0
  217. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/utils/http_client.py +0 -0
  218. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/utils/http_request.py +0 -0
  219. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/utils/http_response.py +0 -0
  220. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/utils/http_status.py +0 -0
  221. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/utils/image.py +0 -0
  222. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/utils/mcp_client.py +0 -0
  223. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/utils/renderers.py +0 -0
  224. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/utils/resolvers.py +0 -0
  225. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/utils/shell.py +0 -0
  226. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/utils/ssh_client.py +0 -0
  227. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/utils/streamer.py +0 -0
  228. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/utils/streaming.py +0 -0
  229. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/utils/time.py +0 -0
  230. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/utils/url.py +0 -0
  231. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/utils/work_queue.py +0 -0
  232. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/workflow/__init__.py +0 -0
  233. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/workflow/context.py +0 -0
  234. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/workflow/interrupt.py +0 -0
  235. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/workflow/job/__init__.py +0 -0
  236. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/workflow/job/base.py +0 -0
  237. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
  238. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/workflow/job/impl/component.py +0 -0
  239. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/workflow/job/impl/delay.py +0 -0
  240. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/workflow/job/impl/filter.py +0 -0
  241. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/workflow/job/impl/if_.py +0 -0
  242. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/workflow/job/impl/random_router.py +0 -0
  243. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/workflow/job/impl/switch.py +0 -0
  244. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/workflow/job/job.py +0 -0
  245. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/workflow/schema.py +0 -0
  246. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/workflow/tool.py +0 -0
  247. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/core/workflow/workflow.py +0 -0
  248. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/__init__.py +0 -0
  249. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/loader.py +0 -0
  250. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/__init__.py +0 -0
  251. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/__init__.py +0 -0
  252. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/agent.py +0 -0
  253. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/audio_extractor.py +0 -0
  254. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/common.py +0 -0
  255. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/datasets/__init__.py +0 -0
  256. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/datasets/common.py +0 -0
  257. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/datasets/datasets.py +0 -0
  258. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/datasets/providers/__init__.py +0 -0
  259. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/datasets/providers/common.py +0 -0
  260. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/datasets/providers/huggingface.py +0 -0
  261. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/datasets/providers/local.py +0 -0
  262. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/http_client.py +0 -0
  263. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/http_server.py +0 -0
  264. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/image_processor.py +0 -0
  265. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/key_value_store/__init__.py +0 -0
  266. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/key_value_store/impl/__init__.py +0 -0
  267. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/key_value_store/impl/common.py +0 -0
  268. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/key_value_store/impl/redis.py +0 -0
  269. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/key_value_store/key_value_store.py +0 -0
  270. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
  271. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
  272. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
  273. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/__init__.py +0 -0
  274. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +0 -0
  275. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/common.py +0 -0
  276. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/__init__.py +0 -0
  277. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/face_embedding.py +0 -0
  278. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/__init__.py +0 -0
  279. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/common.py +0 -0
  280. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/dlib.py +0 -0
  281. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/facenet.py +0 -0
  282. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/insightface.py +0 -0
  283. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/__init__.py +0 -0
  284. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/image_generation.py +0 -0
  285. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/__init__.py +0 -0
  286. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/common.py +0 -0
  287. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/flux.py +0 -0
  288. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
  289. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/sdxl.py +0 -0
  290. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +0 -0
  291. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/__init__.py +0 -0
  292. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/image_upscale.py +0 -0
  293. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/__init__.py +0 -0
  294. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/common.py +0 -0
  295. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
  296. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
  297. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
  298. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/swinir.py +0 -0
  299. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/speech_to_text.py +0 -0
  300. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +0 -0
  301. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +0 -0
  302. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +0 -0
  303. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/__init__.py +0 -0
  304. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/impl/__init__.py +0 -0
  305. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/impl/common.py +0 -0
  306. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/impl/qwen.py +0 -0
  307. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/text_to_speech.py +0 -0
  308. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/model.py +0 -0
  309. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model_trainer/__init__.py +0 -0
  310. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model_trainer/impl/__init__.py +0 -0
  311. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model_trainer/impl/classification.py +0 -0
  312. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model_trainer/impl/common.py +0 -0
  313. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model_trainer/impl/sft.py +0 -0
  314. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model_trainer/model_trainer.py +0 -0
  315. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
  316. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/text_splitter.py +0 -0
  317. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/vector_store/__init__.py +0 -0
  318. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/vector_store/impl/__init__.py +0 -0
  319. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/vector_store/impl/chroma.py +0 -0
  320. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/vector_store/impl/common.py +0 -0
  321. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/vector_store/impl/faiss.py +0 -0
  322. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/vector_store/impl/milvus.py +0 -0
  323. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/vector_store/impl/qdrant.py +0 -0
  324. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/vector_store/vector_store.py +0 -0
  325. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/video_converter.py +0 -0
  326. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/video_scene_detector.py +0 -0
  327. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/web_browser.py +0 -0
  328. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/web_scraper.py +0 -0
  329. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
  330. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/__init__.py +0 -0
  331. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/agent.py +0 -0
  332. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/audio_extractor.py +0 -0
  333. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/common.py +0 -0
  334. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/datasets/__init__.py +0 -0
  335. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/datasets/datasets.py +0 -0
  336. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/http_client.py +0 -0
  337. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
  338. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/image_processor.py +0 -0
  339. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/key_value_store/__init__.py +0 -0
  340. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/key_value_store/impl/__init__.py +0 -0
  341. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/key_value_store/impl/common.py +0 -0
  342. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/key_value_store/impl/redis.py +0 -0
  343. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/key_value_store/key_value_store.py +0 -0
  344. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/mcp_client.py +0 -0
  345. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
  346. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
  347. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/__init__.py +0 -0
  348. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/chat_completion.py +0 -0
  349. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/common.py +0 -0
  350. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/__init__.py +0 -0
  351. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/face_embedding.py +0 -0
  352. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/__init__.py +0 -0
  353. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/common.py +0 -0
  354. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/dlib.py +0 -0
  355. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/facenet.py +0 -0
  356. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/insightface.py +0 -0
  357. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/__init__.py +0 -0
  358. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/image_generation.py +0 -0
  359. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/__init__.py +0 -0
  360. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/common.py +0 -0
  361. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/flux.py +0 -0
  362. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
  363. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/sdxl.py +0 -0
  364. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/image_to_text.py +0 -0
  365. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/__init__.py +0 -0
  366. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/image_upscale.py +0 -0
  367. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/__init__.py +0 -0
  368. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/common.py +0 -0
  369. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
  370. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
  371. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
  372. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/swinir.py +0 -0
  373. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/speech_to_text.py +0 -0
  374. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +0 -0
  375. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +0 -0
  376. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +0 -0
  377. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/__init__.py +0 -0
  378. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/impl/__init__.py +0 -0
  379. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/impl/common.py +0 -0
  380. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/impl/qwen.py +0 -0
  381. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/text_to_speech.py +0 -0
  382. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/model.py +0 -0
  383. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model_trainer/__init__.py +0 -0
  384. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model_trainer/impl/__init__.py +0 -0
  385. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model_trainer/impl/classification.py +0 -0
  386. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model_trainer/impl/common.py +0 -0
  387. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model_trainer/impl/sft.py +0 -0
  388. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model_trainer/model_trainer.py +0 -0
  389. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
  390. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/text_splitter.py +0 -0
  391. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/vector_store/__init__.py +0 -0
  392. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/vector_store/impl/__init__.py +0 -0
  393. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/vector_store/impl/chroma.py +0 -0
  394. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/vector_store/impl/common.py +0 -0
  395. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/vector_store/impl/faiss.py +0 -0
  396. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/vector_store/impl/milvus.py +0 -0
  397. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +0 -0
  398. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/vector_store/vector_store.py +0 -0
  399. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/video_converter.py +0 -0
  400. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/video_scene_detector.py +0 -0
  401. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/web_browser.py +0 -0
  402. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/web_scraper.py +0 -0
  403. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
  404. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/compose.py +0 -0
  405. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/__init__.py +0 -0
  406. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/__init__.py +0 -0
  407. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/adapter.py +0 -0
  408. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/common.py +0 -0
  409. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/impl/__init__.py +0 -0
  410. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/impl/http_server.py +0 -0
  411. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/impl/mcp_server.py +0 -0
  412. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/__init__.py +0 -0
  413. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/impl/__init__.py +0 -0
  414. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/impl/common.py +0 -0
  415. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/impl/redis.py +0 -0
  416. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/queue_subscriber.py +0 -0
  417. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/impl/types.py +0 -0
  418. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/controller.py +0 -0
  419. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
  420. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/queue/__init__.py +0 -0
  421. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/queue/impl/__init__.py +0 -0
  422. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/queue/impl/common.py +0 -0
  423. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/queue/impl/redis.py +0 -0
  424. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/queue/queue.py +0 -0
  425. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/webui/__init__.py +0 -0
  426. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/webui/impl/__init__.py +0 -0
  427. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/webui/impl/common.py +0 -0
  428. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +0 -0
  429. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/webui/impl/gradio.py +0 -0
  430. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/webui/impl/static.py +0 -0
  431. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/webui/webui.py +0 -0
  432. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
  433. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
  434. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
  435. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/common.py +0 -0
  436. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/http_tunnel/__init__.py +0 -0
  437. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/http_tunnel/http_tunnel.py +0 -0
  438. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/__init__.py +0 -0
  439. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/cloudflare.py +0 -0
  440. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/common.py +0 -0
  441. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/ngrok.py +0 -0
  442. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -0
  443. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
  444. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/job/__init__.py +0 -0
  445. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
  446. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/job/impl/common.py +0 -0
  447. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/job/impl/component.py +0 -0
  448. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
  449. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/job/impl/filter.py +0 -0
  450. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
  451. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/job/impl/random_router.py +0 -0
  452. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
  453. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/job/impl/types.py +0 -0
  454. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/job/job.py +0 -0
  455. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/listener/__init__.py +0 -0
  456. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/listener/impl/__init__.py +0 -0
  457. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/listener/impl/common.py +0 -0
  458. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/listener/impl/http_callback.py +0 -0
  459. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/listener/impl/http_trigger.py +0 -0
  460. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/listener/impl/types.py +0 -0
  461. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/listener/listener.py +0 -0
  462. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/logger/__init__.py +0 -0
  463. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
  464. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/logger/impl/common.py +0 -0
  465. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
  466. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/logger/impl/file.py +0 -0
  467. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
  468. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/logger/logger.py +0 -0
  469. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/operator/__init__.py +0 -0
  470. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/operator/condition.py +0 -0
  471. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
  472. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
  473. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/impl/apple_container.py +0 -0
  474. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/impl/common.py +0 -0
  475. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
  476. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/impl/embedded.py +0 -0
  477. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
  478. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/impl/process.py +0 -0
  479. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
  480. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
  481. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/system/__init__.py +0 -0
  482. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/system/impl/__init__.py +0 -0
  483. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/system/impl/common.py +0 -0
  484. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/system/impl/docker_compose.py +0 -0
  485. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/system/impl/types.py +0 -0
  486. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/system/system.py +0 -0
  487. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/transport/__init__.py +0 -0
  488. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/transport/http.py +0 -0
  489. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/transport/ssh.py +0 -0
  490. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/schema/workflow.py +0 -0
  491. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/utils/__init__.py +0 -0
  492. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/utils/enum.py +0 -0
  493. {model_compose-0.4.37 → model_compose-0.4.38}/src/mindor/dsl/utils/path.py +0 -0
  494. {model_compose-0.4.37 → model_compose-0.4.38}/src/model_compose.egg-info/dependency_links.txt +0 -0
  495. {model_compose-0.4.37 → model_compose-0.4.38}/src/model_compose.egg-info/entry_points.txt +0 -0
  496. {model_compose-0.4.37 → model_compose-0.4.38}/src/model_compose.egg-info/requires.txt +0 -0
  497. {model_compose-0.4.37 → model_compose-0.4.38}/src/model_compose.egg-info/top_level.txt +0 -0
  498. {model_compose-0.4.37 → model_compose-0.4.38}/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.37
3
+ Version: 0.4.38
4
4
  Summary: model-compose: Declarative AI Workflow Orchestrator
5
5
  Author-email: Hanyeol Cho <hanyeol.cho@gmail.com>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "model-compose"
3
- version = "0.4.37"
3
+ version = "0.4.38"
4
4
  description = "model-compose: Declarative AI Workflow Orchestrator"
5
5
  authors = [
6
6
  { name = "Hanyeol Cho", email = "hanyeol.cho@gmail.com" }
@@ -140,7 +140,10 @@ class ComponentService(AsyncService):
140
140
  from mindor.core.runtime.docker import DockerRuntimeManager
141
141
  self._docker_manager = DockerRuntimeManager(self.config.runtime, verbose=False)
142
142
  if not await self._docker_manager.exists_image():
143
- await self._docker_manager.pull_image()
143
+ if self.config.runtime.build:
144
+ await self._docker_manager.build_image()
145
+ else:
146
+ await self._docker_manager.pull_image()
144
147
  if await self._docker_manager.exists_container():
145
148
  await self._docker_manager.remove_container(force=True)
146
149
  await self._docker_manager.start_container(detach=True)
@@ -1,5 +1,6 @@
1
1
  from .http_server import *
2
2
  from .http_client import *
3
+ from .websocket_server import *
3
4
  from .mcp_server import *
4
5
  from .mcp_client import *
5
6
  from .model import *
@@ -3,10 +3,7 @@ from typing import TYPE_CHECKING
3
3
 
4
4
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Any
5
5
  from mindor.dsl.schema.component import RedisKeyValueStoreComponentConfig
6
- from mindor.dsl.schema.action import (
7
- KeyValueStoreActionConfig, RedisKeyValueStoreActionConfig, KeyValueStoreActionMethod
8
- )
9
- from mindor.core.logger import logging
6
+ from mindor.dsl.schema.action import KeyValueStoreActionConfig, RedisKeyValueStoreActionConfig, KeyValueStoreActionMethod
10
7
  from ..base import KeyValueStoreService, KeyValueStoreDriver, register_kv_store_service
11
8
  from ..base import ComponentActionContext
12
9
  import json
@@ -118,7 +115,4 @@ class RedisKeyValueStoreService(KeyValueStoreService):
118
115
  scheme = "rediss" if self.config.secure else "redis"
119
116
  url = f"{scheme}://{self.config.host}:{self.config.port}/{self.config.database}"
120
117
 
121
- return Redis.from_url(
122
- url,
123
- password=self.config.password
124
- )
118
+ return Redis.from_url(url, password=self.config.password)
@@ -0,0 +1,203 @@
1
+ from typing import Any, Optional, Dict, Tuple
2
+ from mindor.dsl.schema.component import WebSocketServerComponentConfig
3
+ from mindor.dsl.schema.action import ActionConfig, WebSocketServerActionConfig
4
+ from mindor.dsl.schema.action.impl.websocket_server import WebSocketReceiveFormat
5
+ from mindor.core.utils.websocket_client import WebSocketClient, WebSocketConnection
6
+ from mindor.core.utils.streaming import BytesStreamResource
7
+ from mindor.core.utils.shell import run_command_streaming
8
+ from ..base import ComponentService, ComponentType, ComponentGlobalConfigs, register_component
9
+ from ..context import ComponentActionContext
10
+ import asyncio, json
11
+
12
+ class WebSocketConnector:
13
+ def __init__(self, client: WebSocketClient, params: Optional[Dict[str, Any]] = None):
14
+ self._client: WebSocketClient = client
15
+ self._params: Optional[Dict[str, Any]] = params
16
+ self._connection: Optional[WebSocketConnection] = None
17
+
18
+ async def connect(
19
+ self,
20
+ path: Optional[str] = None,
21
+ params: Optional[Dict[str, Any]] = None,
22
+ headers: Optional[Dict[str, str]] = None,
23
+ receive_timeout: Optional[float] = None
24
+ ) -> Tuple[WebSocketConnection, bool]:
25
+ if path or params or headers: # new owned connection per request
26
+ connection = await self._client.connect(
27
+ path=path,
28
+ params={ **(self._params or {}), **(params or {}) } or None,
29
+ headers=headers,
30
+ receive_timeout=receive_timeout
31
+ )
32
+ return connection, True
33
+ if not self._connection or not self._connection.is_connected():
34
+ self._connection = await self._client.connect()
35
+ return self._connection, False
36
+
37
+ async def close(self) -> None:
38
+ if self._connection:
39
+ await self._connection.close()
40
+ self._connection = None
41
+
42
+ class WebSocketServerAction:
43
+ def __init__(self, config: WebSocketServerActionConfig):
44
+ self.config: WebSocketServerActionConfig = config
45
+
46
+ async def run(self, context: ComponentActionContext, client: WebSocketConnector) -> Any:
47
+ path = await context.render_variable(self.config.path)
48
+ params = await context.render_variable(self.config.params)
49
+ headers = await context.render_variable(self.config.headers)
50
+ message = await context.render_variable(self.config.message)
51
+
52
+ format = await context.render_variable(self.config.receive.format)
53
+ collect = await context.render_variable(self.config.receive.collect)
54
+ timeout = await context.render_variable(self.config.receive.timeout)
55
+
56
+ connection, owned = await client.connect(
57
+ path=path,
58
+ params=params or None,
59
+ headers=headers or None,
60
+ receive_timeout=timeout
61
+ )
62
+
63
+ try:
64
+ if message:
65
+ await self._send(connection, message)
66
+
67
+ if context.contains_variable_reference("response[]", self.config.output):
68
+ return self._receive_stream(connection, format, context)
69
+
70
+ response = await self._receive(connection, format, collect)
71
+ except:
72
+ if owned:
73
+ await connection.close()
74
+ raise
75
+
76
+ if owned:
77
+ await connection.close()
78
+
79
+ if format == WebSocketReceiveFormat.BINARY and isinstance(response, (bytes, bytearray)):
80
+ response = BytesStreamResource(bytes(response), "application/octet-stream")
81
+
82
+ context.register_source("response", response)
83
+ return (await context.render_variable(self.config.output, ignore_files=True)) if self.config.output else response
84
+
85
+ async def _send(self, connection: WebSocketConnection, message: Any) -> None:
86
+ if isinstance(message, (dict, list)):
87
+ await connection.send_message(message)
88
+ elif isinstance(message, bytes):
89
+ await connection.send_bytes(message)
90
+ else:
91
+ await connection.websocket.send(str(message))
92
+
93
+ async def _receive(self, connection: WebSocketConnection, format: WebSocketReceiveFormat, collect: bool) -> Any:
94
+ if collect:
95
+ return await self._receive_collect(connection, format)
96
+ return await self._receive_single(connection, format)
97
+
98
+ async def _receive_collect(self, connection: WebSocketConnection, format: WebSocketReceiveFormat) -> Any:
99
+ if format == WebSocketReceiveFormat.BINARY:
100
+ buffer = bytearray()
101
+ async for frame in connection.receive_frames():
102
+ if isinstance(frame, bytes):
103
+ buffer.extend(frame)
104
+ return bytes(buffer)
105
+ items = []
106
+ async for frame in connection.receive_frames():
107
+ if isinstance(frame, str):
108
+ if format == WebSocketReceiveFormat.JSON:
109
+ try:
110
+ items.append(json.loads(frame))
111
+ except json.JSONDecodeError:
112
+ pass
113
+ else:
114
+ items.append(frame)
115
+ return items
116
+
117
+ async def _receive_single(self, connection: WebSocketConnection, format: WebSocketReceiveFormat) -> Any:
118
+ async for frame in connection.receive_frames():
119
+ frame = self._decode_frame(frame, format)
120
+ if frame is not None:
121
+ return frame
122
+ return None
123
+
124
+ async def _receive_stream(self, connection: WebSocketConnection, format: WebSocketReceiveFormat, context: ComponentActionContext):
125
+ async for frame in connection.receive_frames():
126
+ frame = self._decode_frame(frame, format)
127
+ if frame is not None:
128
+ context.register_source("response[]", frame)
129
+ yield await context.render_variable(self.config.output, ignore_files=True)
130
+
131
+ def _decode_frame(self, frame: Any, format: WebSocketReceiveFormat) -> Any:
132
+ if format == WebSocketReceiveFormat.BINARY and isinstance(frame, bytes):
133
+ return frame
134
+ if format == WebSocketReceiveFormat.JSON and isinstance(frame, str):
135
+ try:
136
+ return json.loads(frame)
137
+ except json.JSONDecodeError:
138
+ return None
139
+ if format == WebSocketReceiveFormat.TEXT and isinstance(frame, str):
140
+ return frame
141
+ return None
142
+
143
+ @register_component(ComponentType.WEBSOCKET_SERVER)
144
+ class WebSocketServerComponent(ComponentService):
145
+ def __init__(
146
+ self,
147
+ id: str,
148
+ config: WebSocketServerComponentConfig,
149
+ global_configs: ComponentGlobalConfigs,
150
+ daemon: bool
151
+ ):
152
+ super().__init__(id, config, global_configs, daemon)
153
+
154
+ self.client: Optional[WebSocketConnector] = None
155
+
156
+ async def _setup(self) -> None:
157
+ if self.config.manage.scripts.install:
158
+ for command in self.config.manage.scripts.install:
159
+ await run_command_streaming(command, self.config.manage.working_dir, self.config.manage.env)
160
+
161
+ if self.config.manage.scripts.build:
162
+ for command in self.config.manage.scripts.build:
163
+ await run_command_streaming(command, self.config.manage.working_dir, self.config.manage.env)
164
+
165
+ async def _teardown(self):
166
+ if self.config.manage.scripts.clean:
167
+ for command in self.config.manage.scripts.clean:
168
+ await run_command_streaming(command, self.config.manage.working_dir, self.config.manage.env)
169
+
170
+ async def _start(self) -> None:
171
+ base_url = f"ws://localhost:{self.config.port}" + (self.config.base_path or "")
172
+ self.client = WebSocketConnector(
173
+ WebSocketClient(
174
+ base_url=base_url,
175
+ ping_interval=self.config.ping_interval,
176
+ ping_timeout=self.config.ping_timeout,
177
+ additional_headers=self.config.headers or None
178
+ ),
179
+ params=self.config.params or None
180
+ )
181
+ await super()._start()
182
+
183
+ async def _stop(self) -> None:
184
+ await super()._stop()
185
+ if self.client:
186
+ await self.client.close()
187
+ self.client = None
188
+
189
+ async def _serve(self) -> None:
190
+ if self.config.manage.scripts.start:
191
+ await run_command_streaming(self.config.manage.scripts.start, self.config.manage.working_dir, self.config.manage.env)
192
+
193
+ async def _is_ready(self) -> bool:
194
+ try:
195
+ _, writer = await asyncio.open_connection("localhost", self.config.port)
196
+ writer.close()
197
+ await writer.wait_closed()
198
+ return True
199
+ except (ConnectionRefusedError, OSError):
200
+ return False
201
+
202
+ async def _run(self, action: ActionConfig, context: ComponentActionContext) -> Any:
203
+ return await WebSocketServerAction(action).run(context, self.client)
@@ -12,6 +12,7 @@ from mindor.core.utils.http_client import create_stream_with_url
12
12
  from mindor.core.utils.image import load_image_from_stream
13
13
  from mindor.core.utils.resolvers import FieldResolver
14
14
  from PIL import Image as PILImage
15
+ from collections.abc import AsyncIterator
15
16
  import gradio as gr
16
17
  import json, re
17
18
 
@@ -106,16 +107,20 @@ class GradioWebUIBuilder:
106
107
  # Clear interrupt panel for normal results
107
108
  clear_interrupt = self._clear_interrupt_updates()
108
109
 
109
- if len(workflow.output) == 1 and self._is_streaming_variable(workflow.output[0]):
110
- buffer = "" if workflow.output[0].type == WorkflowVariableType.TEXT else []
111
- async for chunk in output:
112
- chunk = await self._flatten_output_value(chunk, [ workflow.output[0]])
113
- if workflow.output[0].type == WorkflowVariableType.TEXT:
114
- buffer += chunk[0] or ""
115
- else:
116
- buffer.append(chunk[0])
117
- yield [ _run_button_running(), *clear_interrupt, buffer ]
118
- yield [ _run_button_ready(), *clear_interrupt, buffer ]
110
+ if isinstance(output, AsyncIterator) and len(workflow.output) == 1 and isinstance(workflow.output[0], WorkflowVariableConfig):
111
+ if self._is_streaming_variable(workflow.output[0]):
112
+ buffer = "" if workflow.output[0].type == WorkflowVariableType.TEXT else []
113
+ async for chunk in output:
114
+ chunk = await self._flatten_output_value(chunk, [ workflow.output[0]])
115
+ if workflow.output[0].type == WorkflowVariableType.TEXT:
116
+ buffer += chunk[0] or ""
117
+ else:
118
+ buffer.append(chunk[0])
119
+ yield [ _run_button_running(), *clear_interrupt, buffer ]
120
+ yield [ _run_button_ready(), *clear_interrupt, buffer ]
121
+ else:
122
+ result = await self._collect_stream_to_file(output, workflow.output[0])
123
+ yield [ _run_button_ready(), *clear_interrupt, result ]
119
124
  else:
120
125
  if workflow.output:
121
126
  output = await self._flatten_output_value(output, workflow.output)
@@ -181,10 +186,8 @@ class GradioWebUIBuilder:
181
186
 
182
187
  return section
183
188
 
184
- def _is_streaming_variable(self, variable: Union[WorkflowVariableConfig, WorkflowVariableGroupConfig]) -> bool:
185
- if isinstance(variable, WorkflowVariableConfig):
186
- return variable.format in [ WorkflowVariableFormat.SSE_JSON, WorkflowVariableFormat.SSE_TEXT ]
187
- return False
189
+ def _is_streaming_variable(self, variable: WorkflowVariableConfig) -> bool:
190
+ return variable.format in [ WorkflowVariableFormat.SSE_JSON, WorkflowVariableFormat.SSE_TEXT ]
188
191
 
189
192
  def _build_input_component(self, variable: WorkflowVariableConfig) -> gr.Component:
190
193
  label = (variable.name or "") + (" *" if variable.required else "") + (f" (default: {variable.default})" if variable.default is not None else "")
@@ -463,3 +466,14 @@ class GradioWebUIBuilder:
463
466
  return await save_stream_to_temporary_file(BytesStreamResource(value), subtype)
464
467
 
465
468
  return None
469
+
470
+ async def _collect_stream_to_file(self, stream, variable: WorkflowVariableConfig) -> Optional[str]:
471
+ buffer = bytearray()
472
+ async for chunk in stream:
473
+ if isinstance(chunk, bytes):
474
+ buffer.extend(chunk)
475
+ elif isinstance(chunk, (bytearray, memoryview)):
476
+ buffer.extend(bytes(chunk))
477
+ if not buffer:
478
+ return None
479
+ return await save_stream_to_temporary_file(BytesStreamResource(bytes(buffer)), variable.subtype)
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from typing import Optional, Dict, List, Any, Callable
4
- from .websocket_client import WebSocketClient
4
+ from .websocket_client import WebSocketClient, WebSocketConnection
5
5
  import aiohttp, asyncio, itertools
6
6
 
7
7
  class CdpClient:
@@ -19,15 +19,14 @@ class CdpClient:
19
19
  def __init__(self, ws_url: str, timeout: float = 30.0):
20
20
  self.ws_url: str = ws_url
21
21
  self.timeout: float = timeout
22
- self._ws: Optional[WebSocketClient] = None
22
+ self._websocket: Optional[WebSocketConnection] = None
23
23
  self._id_counter = itertools.count(1)
24
24
  self._pending: Dict[int, asyncio.Future] = {}
25
25
  self._event_listeners: Dict[str, List[Callable]] = {}
26
26
  self._reader_task: Optional[asyncio.Task] = None
27
27
 
28
28
  async def connect(self) -> None:
29
- self._ws = WebSocketClient(self.ws_url)
30
- await self._ws.connect()
29
+ self._websocket = await WebSocketClient(self.ws_url).connect()
31
30
  self._reader_task = asyncio.create_task(self._reader_loop())
32
31
 
33
32
  async def close(self) -> None:
@@ -38,9 +37,9 @@ class CdpClient:
38
37
  except asyncio.CancelledError:
39
38
  pass
40
39
  self._reader_task = None
41
- if self._ws:
42
- await self._ws.close()
43
- self._ws = None
40
+ if self._websocket:
41
+ await self._websocket.close()
42
+ self._websocket = None
44
43
 
45
44
  async def send_command(self, method: str, params: Optional[Dict] = None) -> Dict[str, Any]:
46
45
  cmd_id = next(self._id_counter)
@@ -49,7 +48,7 @@ class CdpClient:
49
48
  self._pending[cmd_id] = future
50
49
 
51
50
  message = { "id": cmd_id, "method": method, "params": params or {} }
52
- await self._ws.send_message(message)
51
+ await self._websocket.send_message(message)
53
52
 
54
53
  try:
55
54
  return await asyncio.wait_for(future, timeout=self.timeout)
@@ -68,7 +67,7 @@ class CdpClient:
68
67
  async def _reader_loop(self) -> None:
69
68
  try:
70
69
  while True:
71
- message = await self._ws.receive_message()
70
+ message = await self._websocket.receive_message()
72
71
  if "id" in message:
73
72
  future = self._pending.pop(message["id"], None)
74
73
  if future and not future.done():
@@ -105,6 +104,7 @@ class CdpClient:
105
104
  targets = await response.json(content_type=None)
106
105
 
107
106
  page_targets = [ t for t in targets if t.get("type") == "page" ]
107
+
108
108
  if not page_targets:
109
109
  raise ConnectionError(f"No 'page' target found at {host}:{port}.")
110
110
  if target_index >= len(page_targets):
@@ -116,4 +116,5 @@ class CdpClient:
116
116
  ws_url = page_targets[target_index]["webSocketDebuggerUrl"]
117
117
  instance = cls(ws_url, timeout=timeout)
118
118
  await instance.connect()
119
+
119
120
  return instance
@@ -0,0 +1,95 @@
1
+ from typing import Optional, Union, Dict, Any
2
+ from collections.abc import AsyncIterator
3
+ from websockets.asyncio.client import ClientConnection
4
+ from urllib.parse import urlencode
5
+ import websockets, asyncio, json
6
+
7
+ class WebSocketConnection:
8
+ def __init__(self, websocket: ClientConnection, receive_timeout: Optional[float] = None):
9
+ self.websocket: ClientConnection = websocket
10
+ self.receive_timeout: Optional[float] = receive_timeout
11
+
12
+ async def __aenter__(self):
13
+ return self
14
+
15
+ async def __aexit__(self, exc_type, exc_val, exc_tb):
16
+ await self.close()
17
+
18
+ async def close(self) -> None:
19
+ if self.websocket:
20
+ await self.websocket.close()
21
+ self.websocket = None
22
+
23
+ async def send_message(self, message: Any) -> None:
24
+ await self.websocket.send(json.dumps(message))
25
+
26
+ async def send_bytes(self, data: bytes) -> None:
27
+ await self.websocket.send(data)
28
+
29
+ async def receive_message(self) -> Dict[str, Any]:
30
+ if self.receive_timeout:
31
+ message = await asyncio.wait_for(
32
+ self.websocket.recv(),
33
+ timeout=self.receive_timeout
34
+ )
35
+ else:
36
+ message = await self.websocket.recv()
37
+
38
+ return json.loads(message)
39
+
40
+ async def receive_frame(self) -> Union[str, bytes]:
41
+ if self.receive_timeout:
42
+ return await asyncio.wait_for(
43
+ self.websocket.recv(),
44
+ timeout=self.receive_timeout
45
+ )
46
+ return await self.websocket.recv()
47
+
48
+ async def receive_frames(self) -> AsyncIterator[Union[str, bytes]]:
49
+ try:
50
+ while True:
51
+ yield await self.receive_frame()
52
+ except (websockets.ConnectionClosed, websockets.ConnectionClosedOK):
53
+ return
54
+ except asyncio.TimeoutError:
55
+ return
56
+
57
+ def is_connected(self) -> bool:
58
+ return bool(self.websocket)
59
+
60
+ class WebSocketClient:
61
+ def __init__(
62
+ self,
63
+ base_url: str,
64
+ ping_interval: Optional[float] = None,
65
+ ping_timeout: Optional[float] = None,
66
+ additional_headers: Optional[Dict[str, str]] = None
67
+ ):
68
+ self.base_url: str = base_url
69
+ self.ping_interval: Optional[float] = ping_interval
70
+ self.ping_timeout: Optional[float] = ping_timeout
71
+ self.additional_headers: Optional[Dict[str, str]] = additional_headers
72
+
73
+ async def connect(
74
+ self,
75
+ path: Optional[str] = None,
76
+ params: Optional[Dict[str, Any]] = None,
77
+ headers: Optional[Dict[str, str]] = None,
78
+ receive_timeout: Optional[float] = None
79
+ ) -> WebSocketConnection:
80
+ url = self.base_url
81
+ if path:
82
+ url += path if path.startswith("/") else f"/{path}"
83
+ if params:
84
+ filtered = { k: v for k, v in params.items() if v is not None }
85
+ if filtered:
86
+ url += "?" + urlencode(filtered)
87
+
88
+ ws = await websockets.connect(
89
+ url,
90
+ ping_interval=self.ping_interval,
91
+ ping_timeout=self.ping_timeout,
92
+ additional_headers={ **(self.additional_headers or {}), **(headers or {}) } or None
93
+ )
94
+
95
+ return WebSocketConnection(ws, receive_timeout)
@@ -5,6 +5,7 @@ from .impl import *
5
5
  ActionConfig = Union[
6
6
  HttpServerActionConfig,
7
7
  HttpClientActionConfig,
8
+ WebSocketServerActionConfig,
8
9
  McpServerActionConfig,
9
10
  McpClientActionConfig,
10
11
  ModelActionConfig,
@@ -1,6 +1,7 @@
1
1
  from .common import *
2
2
  from .http_server import *
3
3
  from .http_client import *
4
+ from .websocket_server import *
4
5
  from .mcp_server import *
5
6
  from .mcp_client import *
6
7
  from .model import *
@@ -0,0 +1,21 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
+ from enum import Enum
3
+ from pydantic import BaseModel, Field
4
+ from .common import CommonActionConfig
5
+
6
+ class WebSocketReceiveFormat(str, Enum):
7
+ JSON = "json"
8
+ TEXT = "text"
9
+ BINARY = "binary"
10
+
11
+ class WebSocketReceiveConfig(BaseModel):
12
+ format: WebSocketReceiveFormat = Field(default=WebSocketReceiveFormat.JSON, description="Expected format of received WebSocket frames.")
13
+ collect: bool = Field(default=False, description="When true, collect all received frames into a single response. For binary, concatenates bytes. For JSON/text, collects into a list.")
14
+ timeout: Optional[float] = Field(default=None, description="Receive timeout in seconds per frame.")
15
+
16
+ class WebSocketServerActionConfig(CommonActionConfig):
17
+ path: Optional[str] = Field(default=None, description="WebSocket endpoint path. Overrides the component-level base_path.")
18
+ params: Dict[str, Any] = Field(default_factory=dict, description="Query parameters to include in the WebSocket URL.")
19
+ headers: Dict[str, str] = Field(default_factory=dict, description="Additional headers for the WebSocket handshake.")
20
+ message: Optional[Any] = Field(default=None, description="Message to send after connecting. Dict/List will be JSON-encoded, bytes sent as binary, str sent as text.")
21
+ receive: WebSocketReceiveConfig = Field(default_factory=WebSocketReceiveConfig, description="Configuration for receiving WebSocket messages.")
@@ -6,6 +6,7 @@ ComponentConfig = Annotated[
6
6
  Union[
7
7
  HttpServerComponentConfig,
8
8
  HttpClientComponentConfig,
9
+ WebSocketServerComponentConfig,
9
10
  McpServerComponentConfig,
10
11
  McpClientComponentConfig,
11
12
  ModelComponentConfig,
@@ -1,6 +1,7 @@
1
1
  from .common import *
2
2
  from .http_server import *
3
3
  from .http_client import *
4
+ from .websocket_server import *
4
5
  from .mcp_server import *
5
6
  from .mcp_client import *
6
7
  from .model import *
@@ -3,6 +3,7 @@ from enum import Enum
3
3
  class ComponentType(str, Enum):
4
4
  HTTP_SERVER = "http-server"
5
5
  HTTP_CLIENT = "http-client"
6
+ WEBSOCKET_SERVER = "websocket-server"
6
7
  MCP_SERVER = "mcp-server"
7
8
  MCP_CLIENT = "mcp-client"
8
9
  MODEL = "model"
@@ -0,0 +1,53 @@
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.action import WebSocketServerActionConfig
5
+ from .common import ComponentType, CommonComponentConfig
6
+
7
+ class WebSocketServerManageScripts(BaseModel):
8
+ install: Optional[List[List[str]]] = Field(default=None, description="One or more scripts to install dependencies.")
9
+ build: Optional[List[List[str]]] = Field(default=None, description="One or more scripts to build the server.")
10
+ clean: Optional[List[List[str]]] = Field(default=None, description="One or more scripts to clean the server environment.")
11
+ start: Optional[List[str]] = Field(default=None, description="Script to start the server.")
12
+
13
+ @model_validator(mode="before")
14
+ def normalize_scripts(cls, values):
15
+ for key in [ "install", "build", "clean" ]:
16
+ script = values.get(key)
17
+ if script and isinstance(script, list) and all(isinstance(token, str) for token in script):
18
+ values[key] = [ script ]
19
+ return values
20
+
21
+ class WebSocketServerManageConfig(BaseModel):
22
+ scripts: WebSocketServerManageScripts = Field(..., description="Shell scripts used to install, build, clean, and start the server.")
23
+ working_dir: Optional[str] = Field(default=None, description="Working directory for the scripts.")
24
+ env: Dict[str, str] = Field(default_factory=dict, description="Environment variables to set when executing the scripts.")
25
+
26
+ @model_validator(mode="before")
27
+ def inflate_single_script(cls, values: Dict[str, Any]):
28
+ if "scripts" not in values:
29
+ values["scripts"] = { key: values.pop(key) for key in WebSocketServerManageScripts.model_fields.keys() if key in values }
30
+ return values
31
+
32
+ class WebSocketServerComponentConfig(CommonComponentConfig):
33
+ type: Literal[ComponentType.WEBSOCKET_SERVER]
34
+ manage: WebSocketServerManageConfig = Field(default_factory=WebSocketServerManageConfig, description="Configuration used to manage the WebSocket server lifecycle.")
35
+ port: int = Field(default=3000, ge=1, le=65535, description="Port on which the WebSocket server will listen for incoming connections.")
36
+ base_path: Optional[str] = Field(default=None, description="Base path to prefix all WebSocket routes exposed by this component.")
37
+ params: Dict[str, Any] = Field(default_factory=dict, description="Default query parameters to include in all WebSocket connection URLs.")
38
+ headers: Dict[str, str] = Field(default_factory=dict, description="Headers to be included in all outgoing WebSocket handshake requests.")
39
+ ping_interval: Optional[float] = Field(default=None, description="WebSocket ping interval in seconds.")
40
+ ping_timeout: Optional[float] = Field(default=None, description="WebSocket ping timeout in seconds.")
41
+ actions: List[WebSocketServerActionConfig] = Field(default_factory=list)
42
+
43
+ @model_validator(mode="before")
44
+ def migrate_path_to_base_path(cls, values: Dict[str, Any]):
45
+ if "path" in values and "base_path" not in values:
46
+ values["base_path"] = values.pop("path")
47
+ return values
48
+
49
+ @model_validator(mode="before")
50
+ def inflate_single_script(cls, values: Dict[str, Any]):
51
+ if "manage" not in values:
52
+ values["manage"] = { key: values.pop(key) for key in WebSocketServerManageScripts.model_fields.keys() if key in values }
53
+ return values
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: model-compose
3
- Version: 0.4.37
3
+ Version: 0.4.38
4
4
  Summary: model-compose: Declarative AI Workflow Orchestrator
5
5
  Author-email: Hanyeol Cho <hanyeol.cho@gmail.com>
6
6
  License-Expression: MIT
@@ -25,6 +25,7 @@ src/mindor/core/component/services/shell.py
25
25
  src/mindor/core/component/services/text_splitter.py
26
26
  src/mindor/core/component/services/web_browser.py
27
27
  src/mindor/core/component/services/web_scraper.py
28
+ src/mindor/core/component/services/websocket_server.py
28
29
  src/mindor/core/component/services/workflow.py
29
30
  src/mindor/core/component/services/audio_extractor/__init__.py
30
31
  src/mindor/core/component/services/audio_extractor/audio_extractor.py
@@ -254,6 +255,7 @@ src/mindor/dsl/schema/action/impl/video_converter.py
254
255
  src/mindor/dsl/schema/action/impl/video_scene_detector.py
255
256
  src/mindor/dsl/schema/action/impl/web_browser.py
256
257
  src/mindor/dsl/schema/action/impl/web_scraper.py
258
+ src/mindor/dsl/schema/action/impl/websocket_server.py
257
259
  src/mindor/dsl/schema/action/impl/workflow.py
258
260
  src/mindor/dsl/schema/action/impl/datasets/__init__.py
259
261
  src/mindor/dsl/schema/action/impl/datasets/common.py
@@ -336,6 +338,7 @@ src/mindor/dsl/schema/component/impl/video_converter.py
336
338
  src/mindor/dsl/schema/component/impl/video_scene_detector.py
337
339
  src/mindor/dsl/schema/component/impl/web_browser.py
338
340
  src/mindor/dsl/schema/component/impl/web_scraper.py
341
+ src/mindor/dsl/schema/component/impl/websocket_server.py
339
342
  src/mindor/dsl/schema/component/impl/workflow.py
340
343
  src/mindor/dsl/schema/component/impl/datasets/__init__.py
341
344
  src/mindor/dsl/schema/component/impl/datasets/datasets.py