model-compose 0.4.8__tar.gz → 0.4.9__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 (359) hide show
  1. {model_compose-0.4.8/src/model_compose.egg-info → model_compose-0.4.9}/PKG-INFO +1 -1
  2. {model_compose-0.4.8 → model_compose-0.4.9}/pyproject.toml +1 -1
  3. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/context.py +2 -1
  4. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/__init__.py +1 -0
  5. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/datasets/datasets.py +25 -0
  6. model_compose-0.4.9/src/mindor/core/component/services/datasets/utils.py +12 -0
  7. model_compose-0.4.9/src/mindor/core/component/services/image_processor.py +210 -0
  8. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/base/huggingface.py +96 -20
  9. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/chat_completion/huggingface.py +12 -2
  10. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/face_embedding/common.py +1 -1
  11. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/face_embedding/insightface.py +42 -24
  12. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_to_text/huggingface.py +2 -2
  13. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/text_generation/huggingface.py +7 -4
  14. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/text_splitter.py +0 -1
  15. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/renderers.py +9 -3
  16. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/action.py +1 -0
  17. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/__init__.py +1 -0
  18. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/datasets/common.py +1 -0
  19. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/datasets/datasets.py +9 -1
  20. model_compose-0.4.9/src/mindor/dsl/schema/action/impl/image_processor.py +91 -0
  21. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +14 -1
  22. model_compose-0.4.9/src/mindor/dsl/schema/action/impl/model_trainer/impl/common.py +85 -0
  23. model_compose-0.4.9/src/mindor/dsl/schema/action/impl/model_trainer/impl/sft.py +25 -0
  24. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/text_splitter.py +0 -1
  25. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/component.py +2 -1
  26. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/__init__.py +1 -0
  27. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/common.py +10 -3
  28. model_compose-0.4.9/src/mindor/dsl/schema/component/impl/image_processor.py +17 -0
  29. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/common.py +41 -0
  30. model_compose-0.4.9/src/mindor/dsl/schema/component/impl/model_trainer/impl/common.py +27 -0
  31. model_compose-0.4.9/src/mindor/dsl/schema/component/impl/types.py +15 -0
  32. model_compose-0.4.9/src/mindor/dsl/utils/path.py +23 -0
  33. {model_compose-0.4.8 → model_compose-0.4.9/src/model_compose.egg-info}/PKG-INFO +1 -1
  34. {model_compose-0.4.8 → model_compose-0.4.9}/src/model_compose.egg-info/SOURCES.txt +5 -0
  35. model_compose-0.4.8/src/mindor/dsl/schema/action/impl/model_trainer/impl/common.py +0 -22
  36. model_compose-0.4.8/src/mindor/dsl/schema/action/impl/model_trainer/impl/sft.py +0 -7
  37. model_compose-0.4.8/src/mindor/dsl/schema/component/impl/model_trainer/impl/common.py +0 -18
  38. model_compose-0.4.8/src/mindor/dsl/schema/component/impl/types.py +0 -14
  39. {model_compose-0.4.8 → model_compose-0.4.9}/LICENSE +0 -0
  40. {model_compose-0.4.8 → model_compose-0.4.9}/README.md +0 -0
  41. {model_compose-0.4.8 → model_compose-0.4.9}/setup.cfg +0 -0
  42. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/__init__.py +0 -0
  43. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/cli/__init__.py +0 -0
  44. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/cli/compose.py +0 -0
  45. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/__init__.py +0 -0
  46. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/__init__.py +0 -0
  47. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/base.py +0 -0
  48. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/component.py +0 -0
  49. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/datasets/__init__.py +0 -0
  50. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/datasets/providers/__init__.py +0 -0
  51. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/datasets/providers/common.py +0 -0
  52. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/datasets/providers/huggingface.py +0 -0
  53. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/datasets/providers/local.py +0 -0
  54. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/http_client.py +0 -0
  55. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/http_server.py +0 -0
  56. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/mcp_client.py +0 -0
  57. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/mcp_server.py +0 -0
  58. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/__init__.py +0 -0
  59. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/base/__init__.py +0 -0
  60. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/base/common.py +0 -0
  61. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/base/huggingface_hub.py +0 -0
  62. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/base/unsloth.py +0 -0
  63. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/model.py +0 -0
  64. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/__init__.py +0 -0
  65. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/chat_completion/__init__.py +0 -0
  66. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/face_embedding/__init__.py +0 -0
  67. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/face_embedding/custom.py +0 -0
  68. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_generation/__init__.py +0 -0
  69. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_generation/common.py +0 -0
  70. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_generation/custom.py +0 -0
  71. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_generation/flux.py +0 -0
  72. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_generation/hunyuan_image.py +0 -0
  73. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_generation/sdxl.py +0 -0
  74. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_to_text/__init__.py +0 -0
  75. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_upscale/__init__.py +0 -0
  76. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_upscale/common.py +0 -0
  77. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_upscale/custom.py +0 -0
  78. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_upscale/esrgan.py +0 -0
  79. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_upscale/ldsr.py +0 -0
  80. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_upscale/real_esrgan.py +0 -0
  81. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_upscale/swinir.py +0 -0
  82. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/text_classification/__init__.py +0 -0
  83. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/text_classification/huggingface.py +0 -0
  84. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/text_embedding/__init__.py +0 -0
  85. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/text_embedding/huggingface.py +0 -0
  86. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/text_generation/__init__.py +0 -0
  87. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/shell.py +0 -0
  88. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/vector_store/__init__.py +0 -0
  89. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/vector_store/base.py +0 -0
  90. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/vector_store/drivers/__init__.py +0 -0
  91. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/vector_store/drivers/chroma.py +0 -0
  92. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/vector_store/drivers/milvus.py +0 -0
  93. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/vector_store/vector_store.py +0 -0
  94. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/workflow.py +0 -0
  95. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/compose/__init__.py +0 -0
  96. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/compose/compose.py +0 -0
  97. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/compose/manager.py +0 -0
  98. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/__init__.py +0 -0
  99. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/base.py +0 -0
  100. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/controller.py +0 -0
  101. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runner/__init__.py +0 -0
  102. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runner/client.py +0 -0
  103. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runner/http_client.py +0 -0
  104. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runner/mcp_client.py +0 -0
  105. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runner/runner.py +0 -0
  106. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runtime/__init__.py +0 -0
  107. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
  108. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runtime/docker/context/Dockerfile +0 -0
  109. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runtime/docker/docker.py +0 -0
  110. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runtime/native/__init__.py +0 -0
  111. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runtime/native/native.py +0 -0
  112. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runtime/specs.py +0 -0
  113. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/services/__init__.py +0 -0
  114. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/services/http_server.py +0 -0
  115. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/services/mcp_server.py +0 -0
  116. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/webui/__init__.py +0 -0
  117. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/webui/gradio.py +0 -0
  118. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/webui/webui.py +0 -0
  119. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/foundation/__init__.py +0 -0
  120. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/foundation/async_service.py +0 -0
  121. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/__init__.py +0 -0
  122. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/base.py +0 -0
  123. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/gateway.py +0 -0
  124. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/services/__init__.py +0 -0
  125. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/services/http_tunnel/__init__.py +0 -0
  126. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/services/http_tunnel/base.py +0 -0
  127. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/services/http_tunnel/drivers/__init__.py +0 -0
  128. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/services/http_tunnel/drivers/cloudflare.py +0 -0
  129. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/services/http_tunnel/drivers/ngrok.py +0 -0
  130. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/services/http_tunnel/http_tunnel.py +0 -0
  131. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/services/ssh_tunnel.py +0 -0
  132. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/listener/__init__.py +0 -0
  133. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/listener/base.py +0 -0
  134. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/listener/listener.py +0 -0
  135. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/listener/services/__init__.py +0 -0
  136. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/listener/services/http_callback.py +0 -0
  137. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/logger/__init__.py +0 -0
  138. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/logger/base.py +0 -0
  139. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/logger/logger.py +0 -0
  140. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/logger/logging.py +0 -0
  141. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/logger/services/__init__.py +0 -0
  142. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/logger/services/console.py +0 -0
  143. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/logger/services/file.py +0 -0
  144. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/runtime/__init__.py +0 -0
  145. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/runtime/docker/__init__.py +0 -0
  146. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/runtime/docker/docker.py +0 -0
  147. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/runtime/env.py +0 -0
  148. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/__init__.py +0 -0
  149. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/caching.py +0 -0
  150. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/http_client.py +0 -0
  151. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/http_request.py +0 -0
  152. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/http_response.py +0 -0
  153. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/http_status.py +0 -0
  154. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/image.py +0 -0
  155. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/mcp_client.py +0 -0
  156. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/package.py +0 -0
  157. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/resolvers.py +0 -0
  158. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/shell.py +0 -0
  159. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/ssh_client.py +0 -0
  160. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/streamer.py +0 -0
  161. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/streaming.py +0 -0
  162. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/time.py +0 -0
  163. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/websocket_client.py +0 -0
  164. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/work_queue.py +0 -0
  165. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/__init__.py +0 -0
  166. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/context.py +0 -0
  167. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/__init__.py +0 -0
  168. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/base.py +0 -0
  169. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
  170. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/impl/action.py +0 -0
  171. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/impl/delay.py +0 -0
  172. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/impl/filter.py +0 -0
  173. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/impl/if_.py +0 -0
  174. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/impl/random_router.py +0 -0
  175. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/impl/switch.py +0 -0
  176. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/job.py +0 -0
  177. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/schema.py +0 -0
  178. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/workflow.py +0 -0
  179. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/__init__.py +0 -0
  180. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/loader.py +0 -0
  181. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/__init__.py +0 -0
  182. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/__init__.py +0 -0
  183. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/common.py +0 -0
  184. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/datasets/__init__.py +0 -0
  185. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/datasets/providers/__init__.py +0 -0
  186. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/datasets/providers/common.py +0 -0
  187. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/datasets/providers/huggingface.py +0 -0
  188. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/datasets/providers/local.py +0 -0
  189. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/http_client.py +0 -0
  190. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/http_server.py +0 -0
  191. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
  192. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
  193. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
  194. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/__init__.py +0 -0
  195. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/common.py +0 -0
  196. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/__init__.py +0 -0
  197. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/face_embedding.py +0 -0
  198. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/__init__.py +0 -0
  199. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/common.py +0 -0
  200. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/dlib.py +0 -0
  201. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/facenet.py +0 -0
  202. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/insightface.py +0 -0
  203. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/__init__.py +0 -0
  204. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/image_generation.py +0 -0
  205. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/__init__.py +0 -0
  206. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/common.py +0 -0
  207. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/flux.py +0 -0
  208. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
  209. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/sdxl.py +0 -0
  210. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +0 -0
  211. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/__init__.py +0 -0
  212. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/image_upscale.py +0 -0
  213. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/__init__.py +0 -0
  214. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/common.py +0 -0
  215. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
  216. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
  217. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
  218. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/swinir.py +0 -0
  219. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +0 -0
  220. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +0 -0
  221. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +0 -0
  222. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/model.py +0 -0
  223. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model_trainer/__init__.py +0 -0
  224. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model_trainer/impl/__init__.py +0 -0
  225. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model_trainer/impl/classification.py +0 -0
  226. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model_trainer/model_trainer.py +0 -0
  227. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
  228. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/vector_store/__init__.py +0 -0
  229. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/vector_store/impl/__init__.py +0 -0
  230. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/vector_store/impl/chroma.py +0 -0
  231. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/vector_store/impl/common.py +0 -0
  232. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/vector_store/impl/faiss.py +0 -0
  233. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/vector_store/impl/milvus.py +0 -0
  234. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/vector_store/impl/qdrant.py +0 -0
  235. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/vector_store/vector_store.py +0 -0
  236. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
  237. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/__init__.py +0 -0
  238. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/datasets/__init__.py +0 -0
  239. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/datasets/datasets.py +0 -0
  240. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/http_client.py +0 -0
  241. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
  242. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/mcp_client.py +0 -0
  243. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
  244. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
  245. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/__init__.py +0 -0
  246. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/chat_completion.py +0 -0
  247. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/__init__.py +0 -0
  248. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/face_embedding.py +0 -0
  249. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/__init__.py +0 -0
  250. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/common.py +0 -0
  251. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/dlib.py +0 -0
  252. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/facenet.py +0 -0
  253. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/insightface.py +0 -0
  254. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/__init__.py +0 -0
  255. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/image_generation.py +0 -0
  256. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/__init__.py +0 -0
  257. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/common.py +0 -0
  258. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/flux.py +0 -0
  259. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
  260. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/sdxl.py +0 -0
  261. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_to_text.py +0 -0
  262. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/__init__.py +0 -0
  263. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/image_upscale.py +0 -0
  264. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/__init__.py +0 -0
  265. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/common.py +0 -0
  266. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
  267. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
  268. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
  269. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/swinir.py +0 -0
  270. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +0 -0
  271. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +0 -0
  272. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +0 -0
  273. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/model.py +0 -0
  274. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model_trainer/__init__.py +0 -0
  275. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model_trainer/impl/__init__.py +0 -0
  276. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model_trainer/impl/classification.py +0 -0
  277. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model_trainer/impl/sft.py +0 -0
  278. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model_trainer/model_trainer.py +0 -0
  279. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
  280. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/text_splitter.py +0 -0
  281. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/vector_store/__init__.py +0 -0
  282. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/vector_store/impl/__init__.py +0 -0
  283. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/vector_store/impl/chroma.py +0 -0
  284. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/vector_store/impl/common.py +0 -0
  285. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/vector_store/impl/faiss.py +0 -0
  286. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/vector_store/impl/milvus.py +0 -0
  287. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +0 -0
  288. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/vector_store/vector_store.py +0 -0
  289. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
  290. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/compose.py +0 -0
  291. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/__init__.py +0 -0
  292. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/controller.py +0 -0
  293. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
  294. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/impl/common.py +0 -0
  295. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/impl/http_server.py +0 -0
  296. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/impl/mcp_server.py +0 -0
  297. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/impl/types.py +0 -0
  298. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/webui/__init__.py +0 -0
  299. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/webui/impl/__init__.py +0 -0
  300. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/webui/impl/common.py +0 -0
  301. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +0 -0
  302. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/webui/impl/gradio.py +0 -0
  303. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/webui/impl/static.py +0 -0
  304. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/webui/webui.py +0 -0
  305. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
  306. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
  307. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
  308. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/common.py +0 -0
  309. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/http_tunnel/__init__.py +0 -0
  310. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/http_tunnel/http_tunnel.py +0 -0
  311. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/__init__.py +0 -0
  312. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/cloudflare.py +0 -0
  313. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/common.py +0 -0
  314. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/ngrok.py +0 -0
  315. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -0
  316. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
  317. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/__init__.py +0 -0
  318. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
  319. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/impl/action.py +0 -0
  320. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/impl/common.py +0 -0
  321. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
  322. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/impl/filter.py +0 -0
  323. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
  324. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/impl/random_router.py +0 -0
  325. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
  326. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/impl/types.py +0 -0
  327. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/job.py +0 -0
  328. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/listener/__init__.py +0 -0
  329. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/listener/impl/__init__.py +0 -0
  330. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/listener/impl/common.py +0 -0
  331. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/listener/impl/http_callback.py +0 -0
  332. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/listener/impl/types.py +0 -0
  333. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/listener/listener.py +0 -0
  334. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/logger/__init__.py +0 -0
  335. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
  336. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/logger/impl/common.py +0 -0
  337. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
  338. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/logger/impl/file.py +0 -0
  339. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
  340. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/logger/logger.py +0 -0
  341. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
  342. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
  343. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/runtime/impl/common.py +0 -0
  344. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
  345. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
  346. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
  347. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
  348. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/transport/__init__.py +0 -0
  349. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/transport/http.py +0 -0
  350. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/transport/ssh.py +0 -0
  351. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/workflow.py +0 -0
  352. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/utils/__init__.py +0 -0
  353. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/utils/annotation.py +0 -0
  354. {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/utils/enum.py +0 -0
  355. {model_compose-0.4.8 → model_compose-0.4.9}/src/model_compose.egg-info/dependency_links.txt +0 -0
  356. {model_compose-0.4.8 → model_compose-0.4.9}/src/model_compose.egg-info/entry_points.txt +0 -0
  357. {model_compose-0.4.8 → model_compose-0.4.9}/src/model_compose.egg-info/requires.txt +0 -0
  358. {model_compose-0.4.8 → model_compose-0.4.9}/src/model_compose.egg-info/top_level.txt +0 -0
  359. {model_compose-0.4.8 → model_compose-0.4.9}/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.8
3
+ Version: 0.4.9
4
4
  Summary: model-compose: Declarative AI Model and Workflow Orchestrator
5
5
  Author-email: Hanyeol Cho <hanyeol.cho@gmail.com>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "model-compose"
3
- version = "0.4.8"
3
+ version = "0.4.9"
4
4
  description = "model-compose: Declarative AI Model and Workflow Orchestrator"
5
5
  authors = [
6
6
  { name = "Hanyeol Cho", email = "hanyeol.cho@gmail.com" }
@@ -1,6 +1,7 @@
1
1
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
2
  from mindor.core.utils.renderers import VariableRenderer, ImageValueRenderer
3
3
  from mindor.core.gateway import find_gateway_by_port
4
+ from PIL import Image as PILImage
4
5
 
5
6
  class ComponentActionContext:
6
7
  def __init__(self, run_id: str, input: Dict[str, Any]):
@@ -16,7 +17,7 @@ class ComponentActionContext:
16
17
  async def render_variable(self, value: Any, ignore_files: bool = False) -> Any:
17
18
  return await self.renderer.render(value, ignore_files)
18
19
 
19
- async def render_image(self, value: Any) -> Any:
20
+ async def render_image(self, value: Any) -> Optional[PILImage.Image]:
20
21
  return await ImageValueRenderer().render(await self.render_variable(value))
21
22
 
22
23
  def contains_variable_reference(self, key: str, value: Any) -> bool:
@@ -8,3 +8,4 @@ from .vector_store import *
8
8
  from .workflow import *
9
9
  from .shell import *
10
10
  from .text_splitter import *
11
+ from .image_processor import *
@@ -6,6 +6,7 @@ from mindor.dsl.schema.action import DatasetsActionConfig, DatasetsActionMethod,
6
6
  from ...base import ComponentService, ComponentType, ComponentGlobalConfigs, register_component
7
7
  from ...context import ComponentActionContext
8
8
  from .providers import HuggingfaceDatasetsProvider, LocalDatasetsProvider
9
+ from .utils import format_template_example
9
10
 
10
11
  if TYPE_CHECKING:
11
12
  from datasets import Dataset
@@ -30,6 +31,9 @@ class DatasetsAction:
30
31
  if self.config.method == DatasetsActionMethod.SELECT:
31
32
  return await self._select(context)
32
33
 
34
+ if self.config.method == DatasetsActionMethod.MAP:
35
+ return await self._map(context)
36
+
33
37
  raise ValueError(f"Unsupported datasets action method: {self.config.method}")
34
38
 
35
39
  async def _load(self, context: ComponentActionContext) -> Dataset:
@@ -64,6 +68,10 @@ class DatasetsAction:
64
68
  info = await context.render_variable(self.config.info)
65
69
  split = await context.render_variable(self.config.split)
66
70
 
71
+ for dataset in datasets:
72
+ if not isinstance(dataset, Dataset):
73
+ raise ValueError(f"Expected Dataset instance, but got {type(dataset).__name__}")
74
+
67
75
  return concatenate_datasets(
68
76
  datasets,
69
77
  info=info,
@@ -77,6 +85,9 @@ class DatasetsAction:
77
85
  indices = await context.render_variable(self.config.indices)
78
86
  columns = await context.render_variable(self.config.columns)
79
87
 
88
+ if not isinstance(dataset, Dataset):
89
+ raise ValueError(f"Expected Dataset instance, but got {type(dataset).__name__}")
90
+
80
91
  if axis == "rows":
81
92
  if indices is None:
82
93
  raise ValueError("indices must be provided when axis='rows'")
@@ -89,6 +100,20 @@ class DatasetsAction:
89
100
 
90
101
  raise ValueError(f"Unsupported axis: {axis}")
91
102
 
103
+ async def _map(self, context: ComponentActionContext) -> Dataset:
104
+ dataset = await context.render_variable(self.config.dataset)
105
+ template = await context.render_variable(self.config.template)
106
+ output_column = await context.render_variable(self.config.output_column)
107
+ remove_columns = await context.render_variable(self.config.remove_columns)
108
+
109
+ if not isinstance(dataset, Dataset):
110
+ raise ValueError(f"Expected Dataset instance, but got {type(dataset).__name__}")
111
+
112
+ def format_example(example):
113
+ return { output_column: format_template_example(template, example) }
114
+
115
+ return dataset.map(format_example, remove_columns=remove_columns)
116
+
92
117
  @register_component(ComponentType.DATASETS)
93
118
  class DatasetsComponent(ComponentService):
94
119
  def __init__(self, id: str, config: DatasetsActionConfig, global_configs: ComponentGlobalConfigs, daemon: bool):
@@ -0,0 +1,12 @@
1
+ from typing import Dict, List, Any
2
+ import re
3
+
4
+ def format_template_example(template: str, example: Dict[str, Any]) -> str:
5
+ column_names = set(re.findall(r"\{(\w+)\}", template))
6
+ formatted = template
7
+
8
+ for column in column_names:
9
+ if column in example:
10
+ formatted = formatted.replace(f"{{{column}}}", str(example[column]))
11
+
12
+ return formatted
@@ -0,0 +1,210 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
+ from mindor.dsl.schema.component import ImageProcessorComponentConfig
3
+ from mindor.dsl.schema.action import ActionConfig, ImageProcessorActionConfig, ImageProcessorActionMethod, ImageScaleMode, FlipDirection
4
+ from ..base import ComponentService, ComponentType, ComponentGlobalConfigs, register_component
5
+ from ..context import ComponentActionContext
6
+ from PIL import Image as PILImage, ImageFilter, ImageEnhance
7
+
8
+ class ImageProcessorAction:
9
+ def __init__(self, config: ImageProcessorActionConfig):
10
+ self.config: ImageProcessorActionConfig = config
11
+
12
+ async def run(self, context: ComponentActionContext) -> Any:
13
+ result = await self._dispatch(context)
14
+ context.register_source("result", result)
15
+
16
+ return (await context.render_variable(self.config.output, ignore_files=True)) if self.config.output else result
17
+
18
+ async def _dispatch(self, context: ComponentActionContext) -> Any:
19
+ if self.config.method == ImageProcessorActionMethod.RESIZE:
20
+ return await self._resize(context)
21
+
22
+ if self.config.method == ImageProcessorActionMethod.CROP:
23
+ return await self._crop(context)
24
+
25
+ if self.config.method == ImageProcessorActionMethod.ROTATE:
26
+ return await self._rotate(context)
27
+
28
+ if self.config.method == ImageProcessorActionMethod.FLIP:
29
+ return await self._flip(context)
30
+
31
+ if self.config.method == ImageProcessorActionMethod.GRAYSCALE:
32
+ return await self._grayscale(context)
33
+
34
+ if self.config.method == ImageProcessorActionMethod.BLUR:
35
+ return await self._blur(context)
36
+
37
+ if self.config.method == ImageProcessorActionMethod.SHARPEN:
38
+ return await self._sharpen(context)
39
+
40
+ if self.config.method == ImageProcessorActionMethod.ADJUST_BRIGHTNESS:
41
+ return await self._adjust_brightness(context)
42
+
43
+ if self.config.method == ImageProcessorActionMethod.ADJUST_CONTRAST:
44
+ return await self._adjust_contrast(context)
45
+
46
+ if self.config.method == ImageProcessorActionMethod.ADJUST_SATURATION:
47
+ return await self._adjust_saturation(context)
48
+
49
+ raise ValueError(f"Unsupported image processing action method: {self.config.method}")
50
+
51
+ async def _resize(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
52
+ image = await context.render_image(self.config.image)
53
+ width = await context.render_variable(self.config.width) if self.config.width else None
54
+ height = await context.render_variable(self.config.height) if self.config.height else None
55
+ scale_mode = await context.render_variable(self.config.scale_mode)
56
+
57
+ if width is None and height is None:
58
+ raise ValueError("At least one of width or height must be specified for resize")
59
+
60
+ if image:
61
+ return self._resize_image(image, width, height, scale_mode)
62
+
63
+ return None
64
+
65
+ async def _crop(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
66
+ image = await context.render_image(self.config.image)
67
+ x = await context.render_variable(self.config.x)
68
+ y = await context.render_variable(self.config.y)
69
+ width = await context.render_variable(self.config.width)
70
+ height = await context.render_variable(self.config.height)
71
+
72
+ if image:
73
+ return image.crop(x, y, x + width, y + height)
74
+
75
+ return None
76
+
77
+ async def _rotate(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
78
+ image = await context.render_image(self.config.image)
79
+ angle = await context.render_variable(self.config.angle)
80
+ expand = await context.render_variable(self.config.expand)
81
+
82
+ if image:
83
+ return image.rotate(-angle, expand=expand, resample=PILImage.Resampling.BICUBIC)
84
+
85
+ return None
86
+
87
+ async def _flip(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
88
+ image = await context.render_image(self.config.image)
89
+ direction = await context.render_variable(self.config.direction)
90
+
91
+ if image:
92
+ if direction == FlipDirection.HORIZONTAL:
93
+ return image.transpose(PILImage.Transpose.FLIP_LEFT_RIGHT)
94
+
95
+ if direction == FlipDirection.VERTICAL:
96
+ return image.transpose(PILImage.Transpose.FLIP_TOP_BOTTOM)
97
+
98
+ return None
99
+
100
+ async def _grayscale(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
101
+ image = await context.render_image(self.config.image)
102
+
103
+ if image:
104
+ return image.convert("L")
105
+
106
+ return None
107
+
108
+ async def _blur(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
109
+ image = await context.render_image(self.config.image)
110
+ radius = await context.render_variable(self.config.radius)
111
+
112
+ if image:
113
+ return image.filter(ImageFilter.GaussianBlur(radius=radius))
114
+
115
+ async def _sharpen(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
116
+ image = await context.render_image(self.config.image)
117
+ factor = await context.render_variable(self.config.factor)
118
+
119
+ if image:
120
+ return ImageEnhance.Sharpness(image).enhance(factor)
121
+
122
+ return FileNotFoundError
123
+
124
+ async def _adjust_brightness(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
125
+ image = await context.render_image(self.config.image)
126
+ factor = await context.render_variable(self.config.factor)
127
+
128
+ if image:
129
+ return ImageEnhance.Brightness(image).enhance(factor)
130
+
131
+ return None
132
+
133
+ async def _adjust_contrast(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
134
+ image = await context.render_image(self.config.image)
135
+ factor = await context.render_variable(self.config.factor)
136
+
137
+ if image:
138
+ return ImageEnhance.Contrast(image).enhance(factor)
139
+
140
+ return image
141
+
142
+ async def _adjust_saturation(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
143
+ image = await context.render_image(self.config.image)
144
+ factor = await context.render_variable(self.config.factor)
145
+
146
+ if image:
147
+ return ImageEnhance.Color(image).enhance(factor)
148
+
149
+ return None
150
+
151
+ def _resize_image(self, image: PILImage.Image, width: int, height: int, scale_mode: str) -> PILImage.Image:
152
+ original_width, original_height = image.size
153
+ target_width = width or original_width
154
+ target_height = height or original_height
155
+
156
+ if scale_mode == ImageScaleMode.FIT:
157
+ new_width, new_height = self._get_size_aspect_fit(target_width, target_height, original_width, original_height)
158
+ return image.resize((new_width, new_height), PILImage.Resampling.LANCZOS)
159
+
160
+ if scale_mode == ImageScaleMode.FILL:
161
+ new_width, new_height = self._get_size_aspect_fill(target_width, target_height, original_width, original_height)
162
+ image = image.resize((new_width, new_height), PILImage.Resampling.LANCZOS)
163
+
164
+ crop_box = self._get_center_crop_box(new_width, new_height, target_width, target_height)
165
+ return image.crop(crop_box)
166
+
167
+ if scale_mode == ImageScaleMode.STRETCH:
168
+ return image.resize((target_width, target_height), PILImage.Resampling.LANCZOS)
169
+
170
+ raise ValueError(f"Invalid scale_mode: {scale_mode}")
171
+
172
+ def _get_size_aspect_fit(self, target_width: int, target_height: int, original_width: int, original_height: int) -> Tuple[int, int]:
173
+ aspect_ratio = original_width / original_height
174
+
175
+ height = target_height
176
+ width = height * aspect_ratio
177
+
178
+ if width > target_width:
179
+ width = target_width
180
+ height = width / aspect_ratio
181
+
182
+ return (int(width), int(height))
183
+
184
+ def _get_size_aspect_fill(self, target_width: int, target_height: int, original_width: int, original_height: int) -> Tuple[int, int]:
185
+ aspect_ratio = original_width / original_height
186
+
187
+ height = target_height
188
+ width = height * aspect_ratio
189
+
190
+ if width < target_width:
191
+ width = target_width
192
+ height = width / aspect_ratio
193
+
194
+ return (int(width), int(height))
195
+
196
+ def _get_center_crop_box(self, image_width: int, image_height: int, target_width: int, target_height: int) -> Tuple[int, int, int, int]:
197
+ left = (image_width - target_width ) // 2
198
+ top = (image_height - target_height) // 2
199
+ right = left + target_width
200
+ bottom = top + target_height
201
+
202
+ return (left, top, right, bottom)
203
+
204
+ @register_component(ComponentType.IMAGE_PROCESSOR)
205
+ class ImageProcessorComponent(ComponentService):
206
+ def __init__(self, id: str, config: ImageProcessorComponentConfig, global_configs: ComponentGlobalConfigs, daemon: bool):
207
+ super().__init__(id, config, global_configs, daemon)
208
+
209
+ async def _run(self, action: ActionConfig, context: ComponentActionContext) -> Any:
210
+ return await ImageProcessorAction(action).run(context)
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
  from typing import TYPE_CHECKING
3
3
 
4
4
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Any
5
- from mindor.dsl.schema.component import ModelComponentConfig, HuggingfaceModelConfig, DeviceMode
5
+ from mindor.dsl.schema.component import ModelComponentConfig, PeftAdapterConfig, HuggingfaceModelConfig, DeviceMode
6
6
  from mindor.core.logger import logging
7
7
  from .common import ModelTaskService
8
8
 
@@ -16,36 +16,95 @@ class HuggingfaceModelTaskService(ModelTaskService):
16
16
 
17
17
  def _load_pretrained_model(self) -> PreTrainedModel:
18
18
  model_cls = self._get_model_class()
19
- model = model_cls.from_pretrained(self.config.model, **self._get_model_params())
19
+ model = model_cls.from_pretrained(self._get_model_path(self.config), **self._get_model_params(self.config))
20
+
21
+ if len(self.config.peft_adapters or []) > 0:
22
+ model = self._load_peft_adapters(model, self.config.peft_adapters)
20
23
 
21
24
  if self.config.device_mode == DeviceMode.SINGLE:
22
25
  model = model.to(torch.device(self.config.device))
23
26
 
24
27
  return model
25
28
 
29
+ def _load_peft_adapters(self, base_model: PreTrainedModel, adapter_configs: List[PeftAdapterConfig]) -> PreTrainedModel:
30
+ from peft import PeftModel
31
+
32
+ names, weights = self._build_peft_adapter_lists(adapter_configs)
33
+ peft_model = PeftModel.from_pretrained(
34
+ base_model,
35
+ self._get_model_path(adapter_configs[0]),
36
+ adapter_name=names[0],
37
+ **self._get_model_params(adapter_configs[0])
38
+ )
39
+
40
+ for index in range(1, len(adapter_configs)):
41
+ peft_model.load_adapter(
42
+ self._get_model_path(adapter_configs[index]),
43
+ adapter_name=names[index],
44
+ **self._get_model_params(adapter_configs[index])
45
+ )
46
+
47
+ multiple_adapters = len(adapter_configs) > 1
48
+ has_non_unit_weight = any(abs(weight - 1.0) > 1e-12 for weight in weights)
49
+
50
+ if multiple_adapters or has_non_unit_weight:
51
+ # Use add_weighted_adapter for merging multiple PEFT adapters with weights
52
+ # Note: This operation can be slow for large models (e.g., 7B+)
53
+ logging.info(f"Merging {len(names)} PEFT adapters with weights {weights}. This may take a while...")
54
+ peft_model.add_weighted_adapter(names, weights=weights, adapter_name="blended_adapter")
55
+ peft_model.set_adapter("blended_adapter")
56
+ logging.info("PEFT adapters merging completed.")
57
+ else:
58
+ peft_model.set_adapter(names[0])
59
+
60
+ return peft_model
61
+
62
+ def _build_peft_adapter_lists(self, adapter_configs: List[PeftAdapterConfig]) -> Tuple[List[str], List[float]]:
63
+ names: List[str] = []
64
+ weights: List[float] = []
65
+
66
+ for index, config in enumerate(adapter_configs):
67
+ names.append(config.name or f"peft_adapter_{index}")
68
+ weights.append(config.weight)
69
+
70
+ return names, weights
71
+
26
72
  def _get_model_class(self) -> Type[PreTrainedModel]:
27
73
  raise NotImplementedError("Model class loader not implemented.")
28
74
 
29
- def _get_model_params(self) -> Dict[str, Any]:
75
+ def _get_model_path(self, config: Union[ModelComponentConfig, PeftAdapterConfig]) -> str:
76
+ if isinstance(config.model, HuggingfaceModelConfig):
77
+ return config.model.repository
78
+
79
+ return config.model.path
80
+
81
+ def _get_model_params(self, config: Union[ModelComponentConfig, PeftAdapterConfig]) -> Dict[str, Any]:
30
82
  params: Dict[str, Any] = {}
31
83
 
32
- if isinstance(self.config.model, HuggingfaceModelConfig):
33
- if self.config.model.revision:
34
- params["revision"] = self.config.model.revision
84
+ if isinstance(config.model, HuggingfaceModelConfig):
85
+ if config.model.filename:
86
+ params["filename"] = config.model.filename
87
+
88
+ if config.model.revision:
89
+ params["revision"] = config.model.revision
35
90
 
36
- if self.config.model.cache_dir:
37
- params["cache_dir"] = self.config.model.cache_dir
91
+ if config.model.cache_dir:
92
+ params["cache_dir"] = config.model.cache_dir
38
93
 
39
- if self.config.model.local_files_only:
94
+ if config.model.local_files_only:
40
95
  params["local_files_only"] = True
96
+
97
+ if config.model.token:
98
+ params["token"] = config.model.token
41
99
 
42
- if self.config.device_mode != DeviceMode.SINGLE:
43
- params["device_map"] = self.config.device_mode.value
100
+ if not isinstance(config, PeftAdapterConfig):
101
+ if config.device_mode != DeviceMode.SINGLE:
102
+ params["device_map"] = config.device_mode.value
44
103
 
45
- if self.config.precision is not None:
46
- params["torch_dtype"] = getattr(torch, self.config.precision.value)
104
+ if config.precision is not None:
105
+ params["torch_dtype"] = getattr(torch, config.precision.value)
47
106
 
48
- if self.config.low_cpu_mem_usage:
107
+ if config.low_cpu_mem_usage:
49
108
  params["low_cpu_mem_usage"] = True
50
109
 
51
110
  return params
@@ -62,8 +121,9 @@ class HuggingfaceLanguageModelTaskService(HuggingfaceModelTaskService):
62
121
  self.device: Optional[torch.device] = None
63
122
 
64
123
  def get_setup_requirements(self) -> Optional[List[str]]:
65
- return [
124
+ return [
66
125
  "transformers>=4.21.0",
126
+ "peft>=0.5.0",
67
127
  "torch",
68
128
  "sentencepiece",
69
129
  "accelerate"
@@ -86,11 +146,21 @@ class HuggingfaceLanguageModelTaskService(HuggingfaceModelTaskService):
86
146
 
87
147
  def _load_pretrained_tokenizer(self) -> Optional[PreTrainedTokenizer]:
88
148
  tokenizer_cls = self._get_tokenizer_class()
149
+ tokenizer = tokenizer_cls.from_pretrained(self._get_model_path(self.config), **self._get_tokenizer_params())
89
150
 
90
- if not tokenizer_cls:
91
- return None
151
+ if tokenizer.pad_token is None:
152
+ logging.info("Tokenizer does not have a pad_token defined. Configuring pad_token automatically.")
153
+ self._configure_missing_pad_token(tokenizer)
92
154
 
93
- return tokenizer_cls.from_pretrained(self.config.model, **self._get_tokenizer_params())
155
+ return tokenizer
156
+
157
+ def _configure_missing_pad_token(self, tokenizer: PreTrainedTokenizer) -> None:
158
+ if tokenizer.eos_token is not None:
159
+ tokenizer.pad_token = tokenizer.eos_token
160
+ logging.info(f"Set pad_token to eos_token: {tokenizer.eos_token}")
161
+ else:
162
+ tokenizer.add_special_tokens({ "pad_token": "[PAD]" })
163
+ logging.info("Added new pad_token: [PAD]")
94
164
 
95
165
  def _get_tokenizer_class(self) -> Optional[Type[PreTrainedTokenizer]]:
96
166
  return None
@@ -108,6 +178,9 @@ class HuggingfaceLanguageModelTaskService(HuggingfaceModelTaskService):
108
178
  if self.config.model.local_files_only:
109
179
  params["local_files_only"] = True
110
180
 
181
+ if self.config.model.token:
182
+ params["token"] = self.config.model.token
183
+
111
184
  if not self.config.fast_tokenizer:
112
185
  params["use_fast"] = False
113
186
 
@@ -150,7 +223,7 @@ class HuggingfaceMultimodalModelTaskService(HuggingfaceModelTaskService):
150
223
  if not processor_cls:
151
224
  return None
152
225
 
153
- return processor_cls.from_pretrained(self.config.model, **self._get_processor_params())
226
+ return processor_cls.from_pretrained(self._get_model_path(self.config), **self._get_processor_params())
154
227
 
155
228
  def _get_processor_class(self) -> Optional[Type[ProcessorMixin]]:
156
229
  return None
@@ -161,11 +234,14 @@ class HuggingfaceMultimodalModelTaskService(HuggingfaceModelTaskService):
161
234
  if isinstance(self.config.model, HuggingfaceModelConfig):
162
235
  if self.config.model.revision:
163
236
  params["revision"] = self.config.model.revision
164
-
237
+
165
238
  if self.config.model.cache_dir:
166
239
  params["cache_dir"] = self.config.model.cache_dir
167
240
 
168
241
  if self.config.model.local_files_only:
169
242
  params["local_files_only"] = True
170
243
 
244
+ if self.config.model.token:
245
+ params["token"] = self.config.model.token
246
+
171
247
  return params
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
  from typing import TYPE_CHECKING
3
3
 
4
4
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
5
- from mindor.dsl.schema.action import ModelActionConfig, ChatCompletionModelActionConfig
5
+ from mindor.dsl.schema.action import ModelActionConfig, ChatCompletionModelActionConfig, ToolFunction
6
6
  from ...base import ModelTaskType, ModelDriver, register_model_task_service
7
7
  from ...base import HuggingfaceLanguageModelTaskService, ComponentActionContext
8
8
  from ..text_generation import HuggingfaceTextGenerationTaskAction
@@ -20,13 +20,23 @@ class HuggingfaceChatCompletionTaskAction(HuggingfaceTextGenerationTaskAction):
20
20
 
21
21
  async def _prepare_input(self, context: ComponentActionContext) -> Union[str, List[str]]:
22
22
  messages = await context.render_variable(self.config.messages)
23
+ tools = await context.render_variable(self.config.tools)
24
+
25
+ tools = [ self._build_tool_definition(tool) for tool in tools ] if tools else None
23
26
 
24
27
  return self.tokenizer.apply_chat_template(
25
28
  messages,
26
29
  tokenize=False,
27
- add_generation_prompt=True
30
+ add_generation_prompt=True,
31
+ **({ "tools": tools } if tools else {})
28
32
  )
29
33
 
34
+ def _build_tool_definition(self, tool: Dict[str, Any]) -> Dict[str, Any]:
35
+ return {
36
+ "type": "function",
37
+ "function": { k: v for k, v in tool.items() if v is not None }
38
+ }
39
+
30
40
  @register_model_task_service(ModelTaskType.CHAT_COMPLETION, ModelDriver.HUGGINGFACE)
31
41
  class HuggingfaceChatCompletionTaskService(HuggingfaceLanguageModelTaskService):
32
42
  async def _run(self, action: ModelActionConfig, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
@@ -36,7 +36,7 @@ class FaceEmbeddingTaskAction:
36
36
  return await context.render_image(self.config.image)
37
37
 
38
38
  @abstractmethod
39
- async def _embed(self, images: List[PILImage.Image], params: Dict[str, Any]) -> List[PILImage.Image]:
39
+ async def _embed(self, images: List[PILImage.Image], params: Dict[str, Any]) -> List[List[float]]:
40
40
  pass
41
41
 
42
42
  @abstractmethod
@@ -8,7 +8,7 @@ from mindor.core.logger import logging
8
8
  from .common import FaceEmbeddingTaskService, FaceEmbeddingTaskAction
9
9
  from ...base import ComponentActionContext
10
10
  from PIL import Image as PILImage
11
- import asyncio, os
11
+ import asyncio, os, shutil
12
12
 
13
13
  if TYPE_CHECKING:
14
14
  from insightface.app import FaceAnalysis
@@ -20,15 +20,14 @@ class InsightfaceFaceEmbeddingTaskAction(FaceEmbeddingTaskAction):
20
20
 
21
21
  self.model: FaceAnalysis = model
22
22
 
23
- async def _embed(self, images: List[PILImage.Image], params: Dict[str, Any]) -> List[Tensor]:
23
+ async def _embed(self, images: List[PILImage.Image], params: Dict[str, Any]) -> List[List[float]]:
24
24
  import numpy as np
25
25
  import cv2
26
26
 
27
27
  embeddings = []
28
28
  for image in images:
29
29
  image_cv = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)
30
- for face in self.model.get(image_cv):
31
- embeddings.append(face.embedding)
30
+ embeddings.append([ face.embedding.tolist() for face in self.model.get(image_cv) ])
32
31
 
33
32
  return embeddings
34
33
 
@@ -55,35 +54,54 @@ class InsightfaceFaceEmbeddingTaskService(FaceEmbeddingTaskService):
55
54
  def _load_pretrained_model(self) -> FaceAnalysis:
56
55
  from insightface.app import FaceAnalysis
57
56
 
58
- model = FaceAnalysis(**self._resolve_model_params())
57
+ params = self._resolve_model_params()
58
+
59
+ try:
60
+ model = FaceAnalysis(**params)
61
+ except:
62
+ self._fix_wrong_model_path(params)
63
+ model = FaceAnalysis(**params)
64
+
59
65
  model.prepare(ctx_id=self._get_device_id())
60
66
 
61
67
  return model
62
68
 
63
69
  def _resolve_model_params(self) -> Dict[str, Any]:
64
- if isinstance(self.config.model, LocalModelConfig):
65
- path = os.path.dirname(self.config.model.path)
66
-
67
- if os.path.basename(path) != "models":
68
- raise ValueError(f"Expected 'models' directory in path, got: {path}")
69
-
70
- return {
71
- "name": os.path.basename(self.config.model.path),
72
- "root": os.path.dirname(path)
73
- }
74
-
75
- if isinstance(self.config.model, str):
76
- path = os.path.dirname(self.config.model)
70
+ if isinstance(self.config.model, (LocalModelConfig, str)):
71
+ if isinstance(self.config.model, LocalModelConfig):
72
+ # TODO: process local storage
73
+ path = self.config.model.path
74
+ else:
75
+ path = self.config.model
77
76
 
78
- if os.path.basename(path) != "models":
79
- raise ValueError(f"Expected 'models' directory in path, got: {path}")
77
+ root, name = self._prepare_model_path(path)
80
78
 
81
- return {
82
- "name": os.path.basename(self.config.model),
83
- "root": os.path.dirname(path)
84
- }
79
+ return { "name": name, "root": root }
85
80
 
86
81
  raise ValueError(f"Unsupported model type: {type(self.config.model)}")
82
+
83
+ def _prepare_model_path(self, path: str) -> Tuple[str, str]:
84
+ root = os.path.dirname(path)
85
+ name = os.path.basename(path)
86
+
87
+ if os.path.basename(root) != "models":
88
+ models_dir = os.path.join(root, "models")
89
+ if not os.path.exists(models_dir):
90
+ os.symlink(root, models_dir, target_is_directory=True)
91
+ else:
92
+ root = os.path.dirname(root)
93
+
94
+ return (root, name)
95
+
96
+ def _fix_wrong_model_path(self, params: Dict[str, Any]) -> None:
97
+ root, name = params["root"], params["name"]
98
+ model_dir = os.path.join(root, "models", name)
99
+ wrong_model_dir = os.path.join(model_dir, name)
100
+
101
+ if os.path.isdir(wrong_model_dir):
102
+ for file in os.listdir(wrong_model_dir):
103
+ shutil.move(os.path.join(wrong_model_dir, file), os.path.join(model_dir, file))
104
+ os.rmdir(wrong_model_dir)
87
105
 
88
106
  def _get_device_id(self) -> int:
89
107
  return 0