model-compose 0.4.36__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.36 → model_compose-0.4.38}/PKG-INFO +1 -1
  2. {model_compose-0.4.36 → model_compose-0.4.38}/pyproject.toml +1 -1
  3. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/base.py +4 -1
  4. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/__init__.py +1 -0
  5. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/key_value_store/drivers/redis.py +2 -8
  6. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/face_embedding/insightface.py +5 -7
  7. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_generation/flux.py +3 -8
  8. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_generation/hunyuan_image.py +3 -8
  9. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_generation/sdxl.py +3 -8
  10. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_to_text/huggingface.py +2 -2
  11. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_upscale/esrgan.py +3 -8
  12. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_upscale/ldsr.py +5 -10
  13. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_upscale/real_esrgan.py +4 -9
  14. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_upscale/swinir.py +4 -9
  15. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_generation/huggingface.py +1 -1
  16. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_to_speech/qwen.py +4 -9
  17. model_compose-0.4.38/src/mindor/core/component/services/websocket_server.py +203 -0
  18. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/webui/gradio/builder.py +43 -14
  19. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/utils/cdp_client.py +10 -9
  20. model_compose-0.4.38/src/mindor/core/utils/websocket_client.py +95 -0
  21. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/action.py +1 -0
  22. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/__init__.py +1 -0
  23. model_compose-0.4.38/src/mindor/dsl/schema/action/impl/websocket_server.py +21 -0
  24. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/component.py +1 -0
  25. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/__init__.py +1 -0
  26. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/types.py +1 -0
  27. model_compose-0.4.38/src/mindor/dsl/schema/component/impl/websocket_server.py +53 -0
  28. {model_compose-0.4.36 → model_compose-0.4.38}/src/model_compose.egg-info/PKG-INFO +1 -1
  29. {model_compose-0.4.36 → model_compose-0.4.38}/src/model_compose.egg-info/SOURCES.txt +3 -0
  30. model_compose-0.4.36/src/mindor/core/utils/websocket_client.py +0 -56
  31. {model_compose-0.4.36 → model_compose-0.4.38}/LICENSE +0 -0
  32. {model_compose-0.4.36 → model_compose-0.4.38}/README.md +0 -0
  33. {model_compose-0.4.36 → model_compose-0.4.38}/setup.cfg +0 -0
  34. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/__init__.py +0 -0
  35. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/cli/__init__.py +0 -0
  36. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/cli/compose.py +0 -0
  37. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/cli/interrupt.py +0 -0
  38. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/__init__.py +0 -0
  39. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/__init__.py +0 -0
  40. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/component.py +0 -0
  41. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/context.py +0 -0
  42. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/runtime/__init__.py +0 -0
  43. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/runtime/process_manager.py +0 -0
  44. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/runtime/process_worker.py +0 -0
  45. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/agent.py +0 -0
  46. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/audio_extractor/__init__.py +0 -0
  47. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/audio_extractor/audio_extractor.py +0 -0
  48. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/audio_extractor/base.py +0 -0
  49. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/audio_extractor/drivers/__init__.py +0 -0
  50. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/audio_extractor/drivers/ffmpeg.py +0 -0
  51. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/datasets/__init__.py +0 -0
  52. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/datasets/datasets.py +0 -0
  53. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/datasets/providers/__init__.py +0 -0
  54. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/datasets/providers/common.py +0 -0
  55. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/datasets/providers/huggingface.py +0 -0
  56. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/datasets/providers/local.py +0 -0
  57. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/datasets/utils.py +0 -0
  58. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/http_client.py +0 -0
  59. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/http_server.py +0 -0
  60. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/image_processor.py +0 -0
  61. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/key_value_store/__init__.py +0 -0
  62. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/key_value_store/base.py +0 -0
  63. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/key_value_store/drivers/__init__.py +0 -0
  64. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/key_value_store/key_value_store.py +0 -0
  65. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/mcp_client.py +0 -0
  66. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/mcp_server.py +0 -0
  67. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/__init__.py +0 -0
  68. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/base/__init__.py +0 -0
  69. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/base/common.py +0 -0
  70. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/base/huggingface.py +0 -0
  71. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/base/huggingface_hub.py +0 -0
  72. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/base/llamacpp.py +0 -0
  73. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/base/unsloth.py +0 -0
  74. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/model.py +0 -0
  75. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/__init__.py +0 -0
  76. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/chat_completion/__init__.py +0 -0
  77. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/chat_completion/huggingface.py +0 -0
  78. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/chat_completion/llamacpp.py +0 -0
  79. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/face_embedding/__init__.py +0 -0
  80. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/face_embedding/common.py +0 -0
  81. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/face_embedding/custom.py +0 -0
  82. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_generation/__init__.py +0 -0
  83. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_generation/common.py +0 -0
  84. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_generation/custom.py +0 -0
  85. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_to_text/__init__.py +0 -0
  86. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_upscale/__init__.py +0 -0
  87. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_upscale/common.py +0 -0
  88. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/image_upscale/custom.py +0 -0
  89. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/speech_to_text/__init__.py +0 -0
  90. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/speech_to_text/huggingface.py +0 -0
  91. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_classification/__init__.py +0 -0
  92. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_classification/huggingface.py +0 -0
  93. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_embedding/__init__.py +0 -0
  94. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_embedding/huggingface.py +0 -0
  95. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_embedding/llamacpp.py +0 -0
  96. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_generation/__init__.py +0 -0
  97. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_generation/llamacpp.py +0 -0
  98. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_to_speech/__init__.py +0 -0
  99. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_to_speech/common.py +0 -0
  100. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/model/tasks/text_to_speech/custom.py +0 -0
  101. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/shell.py +0 -0
  102. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/text_splitter.py +0 -0
  103. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/vector_store/__init__.py +0 -0
  104. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/vector_store/base.py +0 -0
  105. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/vector_store/drivers/__init__.py +0 -0
  106. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/vector_store/drivers/chroma.py +0 -0
  107. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/vector_store/drivers/milvus.py +0 -0
  108. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/vector_store/vector_store.py +0 -0
  109. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/video_converter/__init__.py +0 -0
  110. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/video_converter/base.py +0 -0
  111. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/video_converter/drivers/__init__.py +0 -0
  112. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/video_converter/drivers/ffmpeg.py +0 -0
  113. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/video_converter/video_converter.py +0 -0
  114. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/video_scene_detector/__init__.py +0 -0
  115. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/video_scene_detector/base.py +0 -0
  116. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/video_scene_detector/drivers/__init__.py +0 -0
  117. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/video_scene_detector/drivers/ffmpeg.py +0 -0
  118. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/video_scene_detector/drivers/pyscenedetect.py +0 -0
  119. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/video_scene_detector/drivers/transnetv2.py +0 -0
  120. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/video_scene_detector/video_scene_detector.py +0 -0
  121. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/web_browser.py +0 -0
  122. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/web_scraper.py +0 -0
  123. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/component/services/workflow.py +0 -0
  124. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/compose/__init__.py +0 -0
  125. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/compose/compose.py +0 -0
  126. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/compose/manager.py +0 -0
  127. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/compose/validator.py +0 -0
  128. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/__init__.py +0 -0
  129. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/adapters/__init__.py +0 -0
  130. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/adapters/adapter.py +0 -0
  131. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/adapters/base.py +0 -0
  132. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/adapters/services/__init__.py +0 -0
  133. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/adapters/services/http_server.py +0 -0
  134. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/adapters/services/mcp_server.py +0 -0
  135. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/adapters/services/queue_subscriber/__init__.py +0 -0
  136. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/adapters/services/queue_subscriber/base.py +0 -0
  137. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/adapters/services/queue_subscriber/drivers/__init__.py +0 -0
  138. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/adapters/services/queue_subscriber/drivers/redis.py +0 -0
  139. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/adapters/services/queue_subscriber/queue_subscriber.py +0 -0
  140. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/base.py +0 -0
  141. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/controller.py +0 -0
  142. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/queue/__init__.py +0 -0
  143. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/queue/base.py +0 -0
  144. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/queue/drivers/__init__.py +0 -0
  145. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/queue/drivers/redis.py +0 -0
  146. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/queue/queue.py +0 -0
  147. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/runner/__init__.py +0 -0
  148. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/runner/client.py +0 -0
  149. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/runner/http_client.py +0 -0
  150. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/runner/mcp_client.py +0 -0
  151. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/runner/runner.py +0 -0
  152. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/runtime/__init__.py +0 -0
  153. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/runtime/apple_container/__init__.py +0 -0
  154. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/runtime/apple_container/apple_container.py +0 -0
  155. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
  156. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/runtime/docker/context/Dockerfile +0 -0
  157. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/runtime/docker/docker.py +0 -0
  158. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/runtime/native/__init__.py +0 -0
  159. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/runtime/native/native.py +0 -0
  160. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/runtime/specs.py +0 -0
  161. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/webui/__init__.py +0 -0
  162. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/webui/driver.py +0 -0
  163. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/webui/gradio/__init__.py +0 -0
  164. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/webui/gradio/driver.py +0 -0
  165. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/webui/static/__init__.py +0 -0
  166. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/webui/static/driver.py +0 -0
  167. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/controller/webui/webui.py +0 -0
  168. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/errors.py +0 -0
  169. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/evaluator/__init__.py +0 -0
  170. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/evaluator/condition.py +0 -0
  171. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/foundation/__init__.py +0 -0
  172. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/foundation/async_service.py +0 -0
  173. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/foundation/compat/__init__.py +0 -0
  174. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/foundation/compat/asyncio.py +0 -0
  175. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/foundation/ipc_messages.py +0 -0
  176. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/foundation/package.py +0 -0
  177. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/foundation/process_manager.py +0 -0
  178. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/foundation/process_worker.py +0 -0
  179. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/gateway/__init__.py +0 -0
  180. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/gateway/base.py +0 -0
  181. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/gateway/gateway.py +0 -0
  182. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/gateway/services/__init__.py +0 -0
  183. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/gateway/services/http_tunnel/__init__.py +0 -0
  184. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/gateway/services/http_tunnel/base.py +0 -0
  185. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/gateway/services/http_tunnel/drivers/__init__.py +0 -0
  186. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/gateway/services/http_tunnel/drivers/cloudflare.py +0 -0
  187. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/gateway/services/http_tunnel/drivers/ngrok.py +0 -0
  188. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/gateway/services/http_tunnel/http_tunnel.py +0 -0
  189. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/gateway/services/ssh_tunnel.py +0 -0
  190. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/listener/__init__.py +0 -0
  191. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/listener/base.py +0 -0
  192. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/listener/listener.py +0 -0
  193. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/listener/services/__init__.py +0 -0
  194. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/listener/services/http_callback.py +0 -0
  195. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/listener/services/http_trigger.py +0 -0
  196. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/logger/__init__.py +0 -0
  197. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/logger/base.py +0 -0
  198. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/logger/logger.py +0 -0
  199. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/logger/logging.py +0 -0
  200. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/logger/services/__init__.py +0 -0
  201. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/logger/services/console.py +0 -0
  202. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/logger/services/file.py +0 -0
  203. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/runtime/__init__.py +0 -0
  204. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/runtime/apple_container/__init__.py +0 -0
  205. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/runtime/apple_container/apple_container.py +0 -0
  206. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/runtime/docker/__init__.py +0 -0
  207. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/runtime/docker/docker.py +0 -0
  208. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/runtime/env.py +0 -0
  209. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/system/__init__.py +0 -0
  210. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/system/base.py +0 -0
  211. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/system/services/__init__.py +0 -0
  212. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/system/services/docker_compose.py +0 -0
  213. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/system/system.py +0 -0
  214. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/utils/__init__.py +0 -0
  215. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/utils/active_counter.py +0 -0
  216. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/utils/caching.py +0 -0
  217. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/utils/http_client.py +0 -0
  218. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/utils/http_request.py +0 -0
  219. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/utils/http_response.py +0 -0
  220. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/utils/http_status.py +0 -0
  221. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/utils/image.py +0 -0
  222. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/utils/mcp_client.py +0 -0
  223. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/utils/renderers.py +0 -0
  224. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/utils/resolvers.py +0 -0
  225. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/utils/shell.py +0 -0
  226. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/utils/ssh_client.py +0 -0
  227. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/utils/streamer.py +0 -0
  228. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/utils/streaming.py +0 -0
  229. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/utils/time.py +0 -0
  230. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/utils/url.py +0 -0
  231. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/utils/work_queue.py +0 -0
  232. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/workflow/__init__.py +0 -0
  233. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/workflow/context.py +0 -0
  234. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/workflow/interrupt.py +0 -0
  235. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/workflow/job/__init__.py +0 -0
  236. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/workflow/job/base.py +0 -0
  237. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
  238. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/workflow/job/impl/component.py +0 -0
  239. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/workflow/job/impl/delay.py +0 -0
  240. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/workflow/job/impl/filter.py +0 -0
  241. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/workflow/job/impl/if_.py +0 -0
  242. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/workflow/job/impl/random_router.py +0 -0
  243. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/workflow/job/impl/switch.py +0 -0
  244. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/workflow/job/job.py +0 -0
  245. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/workflow/schema.py +0 -0
  246. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/workflow/tool.py +0 -0
  247. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/core/workflow/workflow.py +0 -0
  248. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/__init__.py +0 -0
  249. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/loader.py +0 -0
  250. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/__init__.py +0 -0
  251. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/__init__.py +0 -0
  252. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/agent.py +0 -0
  253. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/audio_extractor.py +0 -0
  254. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/common.py +0 -0
  255. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/datasets/__init__.py +0 -0
  256. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/datasets/common.py +0 -0
  257. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/datasets/datasets.py +0 -0
  258. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/datasets/providers/__init__.py +0 -0
  259. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/datasets/providers/common.py +0 -0
  260. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/datasets/providers/huggingface.py +0 -0
  261. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/datasets/providers/local.py +0 -0
  262. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/http_client.py +0 -0
  263. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/http_server.py +0 -0
  264. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/image_processor.py +0 -0
  265. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/key_value_store/__init__.py +0 -0
  266. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/key_value_store/impl/__init__.py +0 -0
  267. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/key_value_store/impl/common.py +0 -0
  268. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/key_value_store/impl/redis.py +0 -0
  269. {model_compose-0.4.36 → 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.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
  271. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
  272. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
  273. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/__init__.py +0 -0
  274. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +0 -0
  275. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/common.py +0 -0
  276. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/__init__.py +0 -0
  277. {model_compose-0.4.36 → 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.36 → 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.36 → 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.36 → 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.36 → 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.36 → 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.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/__init__.py +0 -0
  284. {model_compose-0.4.36 → 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.36 → 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.36 → 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.36 → 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.36 → 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.36 → 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.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +0 -0
  291. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/__init__.py +0 -0
  292. {model_compose-0.4.36 → 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.36 → 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.36 → 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.36 → 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.36 → 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.36 → 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.36 → 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.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/speech_to_text.py +0 -0
  300. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +0 -0
  301. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +0 -0
  302. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +0 -0
  303. {model_compose-0.4.36 → 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.36 → 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.36 → 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.36 → 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.36 → 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.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model/model.py +0 -0
  309. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model_trainer/__init__.py +0 -0
  310. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model_trainer/impl/__init__.py +0 -0
  311. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model_trainer/impl/classification.py +0 -0
  312. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model_trainer/impl/common.py +0 -0
  313. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model_trainer/impl/sft.py +0 -0
  314. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/model_trainer/model_trainer.py +0 -0
  315. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
  316. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/text_splitter.py +0 -0
  317. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/vector_store/__init__.py +0 -0
  318. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/vector_store/impl/__init__.py +0 -0
  319. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/vector_store/impl/chroma.py +0 -0
  320. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/vector_store/impl/common.py +0 -0
  321. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/vector_store/impl/faiss.py +0 -0
  322. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/vector_store/impl/milvus.py +0 -0
  323. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/vector_store/impl/qdrant.py +0 -0
  324. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/vector_store/vector_store.py +0 -0
  325. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/video_converter.py +0 -0
  326. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/video_scene_detector.py +0 -0
  327. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/web_browser.py +0 -0
  328. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/web_scraper.py +0 -0
  329. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
  330. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/__init__.py +0 -0
  331. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/agent.py +0 -0
  332. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/audio_extractor.py +0 -0
  333. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/common.py +0 -0
  334. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/datasets/__init__.py +0 -0
  335. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/datasets/datasets.py +0 -0
  336. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/http_client.py +0 -0
  337. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
  338. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/image_processor.py +0 -0
  339. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/key_value_store/__init__.py +0 -0
  340. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/key_value_store/impl/__init__.py +0 -0
  341. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/key_value_store/impl/common.py +0 -0
  342. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/key_value_store/impl/redis.py +0 -0
  343. {model_compose-0.4.36 → 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.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/mcp_client.py +0 -0
  345. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
  346. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
  347. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/__init__.py +0 -0
  348. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/chat_completion.py +0 -0
  349. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/common.py +0 -0
  350. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/__init__.py +0 -0
  351. {model_compose-0.4.36 → 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.36 → 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.36 → 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.36 → 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.36 → 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.36 → 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.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/__init__.py +0 -0
  358. {model_compose-0.4.36 → 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.36 → 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.36 → 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.36 → 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.36 → 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.36 → 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.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/image_to_text.py +0 -0
  365. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/__init__.py +0 -0
  366. {model_compose-0.4.36 → 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.36 → 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.36 → 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.36 → 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.36 → 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.36 → 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.36 → 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.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/speech_to_text.py +0 -0
  374. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +0 -0
  375. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +0 -0
  376. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +0 -0
  377. {model_compose-0.4.36 → 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.36 → 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.36 → 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.36 → 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.36 → 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.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model/model.py +0 -0
  383. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model_trainer/__init__.py +0 -0
  384. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model_trainer/impl/__init__.py +0 -0
  385. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model_trainer/impl/classification.py +0 -0
  386. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model_trainer/impl/common.py +0 -0
  387. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model_trainer/impl/sft.py +0 -0
  388. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/model_trainer/model_trainer.py +0 -0
  389. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
  390. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/text_splitter.py +0 -0
  391. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/vector_store/__init__.py +0 -0
  392. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/vector_store/impl/__init__.py +0 -0
  393. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/vector_store/impl/chroma.py +0 -0
  394. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/vector_store/impl/common.py +0 -0
  395. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/vector_store/impl/faiss.py +0 -0
  396. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/vector_store/impl/milvus.py +0 -0
  397. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +0 -0
  398. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/vector_store/vector_store.py +0 -0
  399. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/video_converter.py +0 -0
  400. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/video_scene_detector.py +0 -0
  401. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/web_browser.py +0 -0
  402. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/web_scraper.py +0 -0
  403. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
  404. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/compose.py +0 -0
  405. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/__init__.py +0 -0
  406. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/__init__.py +0 -0
  407. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/adapter.py +0 -0
  408. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/common.py +0 -0
  409. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/impl/__init__.py +0 -0
  410. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/impl/http_server.py +0 -0
  411. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/impl/mcp_server.py +0 -0
  412. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/__init__.py +0 -0
  413. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/impl/__init__.py +0 -0
  414. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/impl/common.py +0 -0
  415. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/impl/redis.py +0 -0
  416. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/queue_subscriber.py +0 -0
  417. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/adapter/impl/types.py +0 -0
  418. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/controller.py +0 -0
  419. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
  420. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/queue/__init__.py +0 -0
  421. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/queue/impl/__init__.py +0 -0
  422. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/queue/impl/common.py +0 -0
  423. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/queue/impl/redis.py +0 -0
  424. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/queue/queue.py +0 -0
  425. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/webui/__init__.py +0 -0
  426. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/webui/impl/__init__.py +0 -0
  427. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/webui/impl/common.py +0 -0
  428. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +0 -0
  429. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/webui/impl/gradio.py +0 -0
  430. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/webui/impl/static.py +0 -0
  431. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/controller/webui/webui.py +0 -0
  432. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
  433. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
  434. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
  435. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/common.py +0 -0
  436. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/http_tunnel/__init__.py +0 -0
  437. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/http_tunnel/http_tunnel.py +0 -0
  438. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/__init__.py +0 -0
  439. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/cloudflare.py +0 -0
  440. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/common.py +0 -0
  441. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/ngrok.py +0 -0
  442. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -0
  443. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
  444. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/job/__init__.py +0 -0
  445. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
  446. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/job/impl/common.py +0 -0
  447. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/job/impl/component.py +0 -0
  448. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
  449. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/job/impl/filter.py +0 -0
  450. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
  451. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/job/impl/random_router.py +0 -0
  452. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
  453. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/job/impl/types.py +0 -0
  454. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/job/job.py +0 -0
  455. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/listener/__init__.py +0 -0
  456. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/listener/impl/__init__.py +0 -0
  457. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/listener/impl/common.py +0 -0
  458. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/listener/impl/http_callback.py +0 -0
  459. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/listener/impl/http_trigger.py +0 -0
  460. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/listener/impl/types.py +0 -0
  461. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/listener/listener.py +0 -0
  462. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/logger/__init__.py +0 -0
  463. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
  464. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/logger/impl/common.py +0 -0
  465. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
  466. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/logger/impl/file.py +0 -0
  467. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
  468. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/logger/logger.py +0 -0
  469. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/operator/__init__.py +0 -0
  470. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/operator/condition.py +0 -0
  471. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
  472. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
  473. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/impl/apple_container.py +0 -0
  474. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/impl/common.py +0 -0
  475. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
  476. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/impl/embedded.py +0 -0
  477. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
  478. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/impl/process.py +0 -0
  479. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
  480. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
  481. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/system/__init__.py +0 -0
  482. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/system/impl/__init__.py +0 -0
  483. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/system/impl/common.py +0 -0
  484. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/system/impl/docker_compose.py +0 -0
  485. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/system/impl/types.py +0 -0
  486. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/system/system.py +0 -0
  487. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/transport/__init__.py +0 -0
  488. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/transport/http.py +0 -0
  489. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/transport/ssh.py +0 -0
  490. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/schema/workflow.py +0 -0
  491. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/utils/__init__.py +0 -0
  492. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/utils/enum.py +0 -0
  493. {model_compose-0.4.36 → model_compose-0.4.38}/src/mindor/dsl/utils/path.py +0 -0
  494. {model_compose-0.4.36 → model_compose-0.4.38}/src/model_compose.egg-info/dependency_links.txt +0 -0
  495. {model_compose-0.4.36 → model_compose-0.4.38}/src/model_compose.egg-info/entry_points.txt +0 -0
  496. {model_compose-0.4.36 → model_compose-0.4.38}/src/model_compose.egg-info/requires.txt +0 -0
  497. {model_compose-0.4.36 → model_compose-0.4.38}/src/model_compose.egg-info/top_level.txt +0 -0
  498. {model_compose-0.4.36 → 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.36
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.36"
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)
@@ -43,13 +43,11 @@ class InsightfaceFaceEmbeddingTaskService(FaceEmbeddingTaskService):
43
43
  def get_setup_requirements(self) -> Optional[List[str]]:
44
44
  return [ "insightface", "opencv-python", "onnxruntime" ]
45
45
 
46
- async def _serve(self) -> None:
47
- try:
48
- self.model = self._load_pretrained_model()
49
- logging.info(f"Model loaded successfully: {self.config.model}")
50
- except Exception as e:
51
- logging.error(f"Failed to load model '{self.config.model}': {e}")
52
- raise
46
+ def _load_model(self) -> None:
47
+ self.model = self._load_pretrained_model()
48
+
49
+ def _unload_model(self) -> None:
50
+ self.model = None
53
51
 
54
52
  def _load_pretrained_model(self) -> FaceAnalysis:
55
53
  from insightface.app import FaceAnalysis
@@ -40,15 +40,10 @@ class FluxImageGenerationTaskService(ImageGenerationTaskService):
40
40
  def get_setup_requirements(self) -> Optional[List[str]]:
41
41
  return None
42
42
 
43
- async def _serve(self) -> None:
44
- try:
45
- self.pipeline, self.device = self._load_pretrained_pipeline()
46
- logging.info(f"Model loaded successfully on device '{self.device}': {self.config.model}")
47
- except Exception as e:
48
- logging.error(f"Failed to load model '{self.config.model}': {e}")
49
- raise
43
+ def _load_model(self) -> None:
44
+ self.pipeline, self.device = self._load_pretrained_pipeline()
50
45
 
51
- async def _shutdown(self) -> None:
46
+ def _unload_model(self) -> None:
52
47
  self.pipeline = None
53
48
  self.device = None
54
49
 
@@ -40,15 +40,10 @@ class HunyuanImageGenerationTaskService(ImageGenerationTaskService):
40
40
  def get_setup_requirements(self) -> Optional[List[str]]:
41
41
  return None
42
42
 
43
- async def _serve(self) -> None:
44
- try:
45
- self.pipeline, self.device = self._load_pretrained_pipeline()
46
- logging.info(f"Model loaded successfully on device '{self.device}': {self.config.model}")
47
- except Exception as e:
48
- logging.error(f"Failed to load model '{self.config.model}': {e}")
49
- raise
43
+ def _load_model(self) -> None:
44
+ self.pipeline, self.device = self._load_pretrained_pipeline()
50
45
 
51
- async def _shutdown(self) -> None:
46
+ def _unload_model(self) -> None:
52
47
  self.pipeline = None
53
48
  self.device = None
54
49
 
@@ -40,15 +40,10 @@ class SdxlImageGenerationTaskService(ImageGenerationTaskService):
40
40
  def get_setup_requirements(self) -> Optional[List[str]]:
41
41
  return None
42
42
 
43
- async def _serve(self) -> None:
44
- try:
45
- self.pipeline, self.device = self._load_pretrained_pipeline()
46
- logging.info(f"Model loaded successfully on device '{self.device}': {self.config.model}")
47
- except Exception as e:
48
- logging.error(f"Failed to load model '{self.config.model}': {e}")
49
- raise
43
+ def _load_model(self) -> None:
44
+ self.pipeline, self.device = self._load_pretrained_pipeline()
50
45
 
51
- async def _shutdown(self) -> None:
46
+ def _unload_model(self) -> None:
52
47
  self.pipeline = None
53
48
  self.device = None
54
49
 
@@ -59,7 +59,7 @@ class HuggingfaceImageToTextTaskAction:
59
59
  batch_images = images[index:index + batch_size]
60
60
  batch_texts = texts[index:index + batch_size] if texts else None
61
61
 
62
- inputs: Tensor = self.processor(images=batch_images, texts=batch_texts, **processor_params)
62
+ inputs: Tensor = self.processor(images=batch_images, text=batch_texts, **processor_params)
63
63
  inputs = inputs.to(self.device)
64
64
 
65
65
  def _generate():
@@ -71,7 +71,7 @@ class HuggingfaceImageToTextTaskAction:
71
71
  streamer=streamer
72
72
  )
73
73
 
74
- outputs = self.processor.tokenizer.batch_decode(outputs)
74
+ outputs = self.processor.tokenizer.batch_decode(outputs, skip_special_tokens=True)
75
75
  results.extend(outputs)
76
76
 
77
77
  if streaming:
@@ -41,15 +41,10 @@ class EsrganImageUpscaleTaskService(ImageUpscaleTaskService):
41
41
  def get_setup_requirements(self) -> Optional[List[str]]:
42
42
  return [ "basicsr", "torchvision" ]
43
43
 
44
- async def _serve(self) -> None:
45
- try:
46
- self.model, self.device = self._load_pretrained_model()
47
- logging.info(f"Model loaded successfully on device '{self.device}': {self.config.model}")
48
- except Exception as e:
49
- logging.error(f"Failed to load model '{self.config.model}': {e}")
50
- raise
44
+ def _load_model(self) -> None:
45
+ self.model, self.device = self._load_pretrained_model()
51
46
 
52
- async def _shutdown(self) -> None:
47
+ def _unload_model(self) -> None:
53
48
  self.model = None
54
49
  self.device = None
55
50
 
@@ -89,16 +89,11 @@ class LdsrImageUpscaleTaskService(ImageUpscaleTaskService):
89
89
  def get_setup_requirements(self) -> Optional[List[str]]:
90
90
  return None
91
91
 
92
- async def _serve(self) -> None:
93
- try:
94
- self.model, self.device = self._load_pretrained_model()
95
- logging.info(f"Model loaded successfully on device '{self.device}': {self.config.model}")
96
- except Exception as e:
97
- logging.error(f"Failed to load model '{self.config.model}': {e}")
98
- raise
99
-
100
- async def _shutdown(self) -> None:
101
- self.model = None
92
+ def _load_model(self) -> None:
93
+ self.model, self.device = self._load_pretrained_model()
94
+
95
+ def _unload_model(self) -> None:
96
+ self.model = None
102
97
  self.device = None
103
98
 
104
99
  def _load_pretrained_model(self) -> Tuple[PreTrainedModel, torch.device]:
@@ -64,15 +64,10 @@ class RealEsrganImageUpscaleTaskService(ImageUpscaleTaskService):
64
64
  def get_setup_requirements(self) -> Optional[List[str]]:
65
65
  return [ "realesrgan>=1.0@git+https://github.com/sberbank-ai/Real-ESRGAN.git" ]
66
66
 
67
- async def _serve(self) -> None:
68
- try:
69
- self.model, self.device = self._load_pretrained_model()
70
- logging.info(f"Model loaded successfully on device '{self.device}': {self.config.model}")
71
- except Exception as e:
72
- logging.error(f"Failed to load model '{self.config.model}': {e}")
73
- raise
74
-
75
- async def _shutdown(self) -> None:
67
+ def _load_model(self) -> None:
68
+ self.model, self.device = self._load_pretrained_model()
69
+
70
+ def _unload_model(self) -> None:
76
71
  self.model = None
77
72
  self.device = None
78
73
 
@@ -165,15 +165,10 @@ class SwinIRImageUpscaleTaskService(ImageUpscaleTaskService):
165
165
  def get_setup_requirements(self) -> Optional[List[str]]:
166
166
  return [ "basicsr", "torch", "torchvision" ]
167
167
 
168
- async def _serve(self) -> None:
169
- try:
170
- self.model, self.device = self._load_pretrained_model()
171
- logging.info(f"Model loaded successfully on device '{self.device}': {self.config.model}")
172
- except Exception as e:
173
- logging.error(f"Failed to load model '{self.config.model}': {e}")
174
- raise
175
-
176
- async def _shutdown(self) -> None:
168
+ def _load_model(self) -> None:
169
+ self.model, self.device = self._load_pretrained_model()
170
+
171
+ def _unload_model(self) -> None:
177
172
  self.model = None
178
173
  self.device = None
179
174
 
@@ -65,7 +65,7 @@ class HuggingfaceTextGenerationTaskAction:
65
65
  )
66
66
 
67
67
  if not streaming:
68
- outputs = self.tokenizer.batch_decode(outputs)
68
+ outputs = self.tokenizer.batch_decode(outputs, skip_special_tokens=True)
69
69
  results.extend(outputs)
70
70
 
71
71
  if streaming:
@@ -95,15 +95,10 @@ class QwenTextToSpeechTaskService(TextToSpeechTaskService):
95
95
  def get_setup_requirements(self) -> Optional[List[str]]:
96
96
  return [ "transformers", "qwen_tts", "soundfile" ]
97
97
 
98
- async def _serve(self) -> None:
99
- try:
100
- self.model, self.device = self._load_pretrained_model()
101
- logging.info(f"Model loaded successfully on device '{self.device}': {self.config.model}")
102
- except Exception as e:
103
- logging.error(f"Failed to load model '{self.config.model}': {e}")
104
- raise
105
-
106
- async def _shutdown(self) -> None:
98
+ def _load_model(self) -> None:
99
+ self.model, self.device = self._load_pretrained_model()
100
+
101
+ def _unload_model(self) -> None:
107
102
  self.model = None
108
103
  self.device = None
109
104
 
@@ -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
 
@@ -98,19 +99,28 @@ class GradioWebUIBuilder:
98
99
  yield [ _run_button_running(), *self._build_interrupt_updates(output), *(gr.update() for _ in output_components) ]
99
100
  return
100
101
 
102
+ # Check if the result is a failed TaskResult
103
+ if isinstance(output, dict) and output.get("status") == "failed":
104
+ yield [ _run_button_ready(), *self._clear_interrupt_updates(), *(gr.update() for _ in output_components) ]
105
+ raise gr.Error(str(output.get("error", "Workflow failed")))
106
+
101
107
  # Clear interrupt panel for normal results
102
108
  clear_interrupt = self._clear_interrupt_updates()
103
109
 
104
- if len(workflow.output) == 1 and self._is_streaming_variable(workflow.output[0]):
105
- buffer = "" if workflow.output[0].type == WorkflowVariableType.TEXT else []
106
- async for chunk in output:
107
- chunk = await self._flatten_output_value(chunk, [ workflow.output[0]])
108
- if workflow.output[0].type == WorkflowVariableType.TEXT:
109
- buffer += chunk[0] or ""
110
- else:
111
- buffer.append(chunk[0])
112
- yield [ _run_button_running(), *clear_interrupt, buffer ]
113
- 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 ]
114
124
  else:
115
125
  if workflow.output:
116
126
  output = await self._flatten_output_value(output, workflow.output)
@@ -142,7 +152,9 @@ class GradioWebUIBuilder:
142
152
 
143
153
  clear_interrupt = self._clear_interrupt_updates()
144
154
 
155
+ # Check if the result is a failed TaskResult
145
156
  if result.get("status") == "failed":
157
+ yield [ _run_button_ready(), _resume_button_ready(), *self._clear_interrupt_updates(), *(gr.update() for _ in output_components) ]
146
158
  raise gr.Error(str(result.get("error", "Workflow failed")))
147
159
 
148
160
  # Completed — fetch output
@@ -174,10 +186,8 @@ class GradioWebUIBuilder:
174
186
 
175
187
  return section
176
188
 
177
- def _is_streaming_variable(self, variable: Union[WorkflowVariableConfig, WorkflowVariableGroupConfig]) -> bool:
178
- if isinstance(variable, WorkflowVariableConfig):
179
- return variable.format in [ WorkflowVariableFormat.SSE_JSON, WorkflowVariableFormat.SSE_TEXT ]
180
- return False
189
+ def _is_streaming_variable(self, variable: WorkflowVariableConfig) -> bool:
190
+ return variable.format in [ WorkflowVariableFormat.SSE_JSON, WorkflowVariableFormat.SSE_TEXT ]
181
191
 
182
192
  def _build_input_component(self, variable: WorkflowVariableConfig) -> gr.Component:
183
193
  label = (variable.name or "") + (" *" if variable.required else "") + (f" (default: {variable.default})" if variable.default is not None else "")
@@ -250,6 +260,14 @@ class GradioWebUIBuilder:
250
260
 
251
261
  return value if value != "" else None
252
262
 
263
+ async def _format_workflow_output(self, output: Any, workflow: WorkflowSchema) -> Optional[list]:
264
+ if workflow.output and output is not None:
265
+ output = await self._flatten_output_value(output, workflow.output)
266
+ if output is None:
267
+ return None
268
+ result = output[0] if isinstance(output, (list, tuple)) and len(output) == 1 else output
269
+ return list(result) if isinstance(result, (list, tuple)) else [result]
270
+
253
271
  def _build_interrupt_components(self):
254
272
  message = gr.Markdown("")
255
273
  metadata = gr.JSON(label="Metadata", visible=False)
@@ -448,3 +466,14 @@ class GradioWebUIBuilder:
448
466
  return await save_stream_to_temporary_file(BytesStreamResource(value), subtype)
449
467
 
450
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