model-compose 0.4.5__tar.gz → 0.4.7__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 (313) hide show
  1. {model_compose-0.4.5 → model_compose-0.4.7}/PKG-INFO +1 -1
  2. {model_compose-0.4.5 → model_compose-0.4.7}/pyproject.toml +1 -1
  3. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/base.py +2 -1
  4. model_compose-0.4.7/src/mindor/core/component/services/model/base/__init__.py +3 -0
  5. model_compose-0.4.7/src/mindor/core/component/services/model/base/common.py +81 -0
  6. model_compose-0.4.7/src/mindor/core/component/services/model/base/huggingface.py +171 -0
  7. model_compose-0.4.7/src/mindor/core/component/services/model/base/huggingface_hub.py +23 -0
  8. model_compose-0.4.7/src/mindor/core/component/services/model/base/unsloth.py +54 -0
  9. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/model/model.py +6 -14
  10. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/model/tasks/__init__.py +2 -2
  11. model_compose-0.4.7/src/mindor/core/component/services/model/tasks/chat_completion/__init__.py +1 -0
  12. model_compose-0.4.7/src/mindor/core/component/services/model/tasks/chat_completion/huggingface.py +41 -0
  13. model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_generation/__init__.py +1 -0
  14. model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_generation/common.py +47 -0
  15. model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_generation/custom.py +12 -0
  16. model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_generation/flux.py +54 -0
  17. model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_generation/hunyuan_image.py +54 -0
  18. model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_generation/sdxl.py +54 -0
  19. model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_to_text/__init__.py +1 -0
  20. model_compose-0.4.5/src/mindor/core/component/services/model/tasks/image_to_text.py → model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_to_text/huggingface.py +80 -65
  21. model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_upscale/__init__.py +1 -0
  22. model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_upscale/common.py +74 -0
  23. model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_upscale/custom.py +24 -0
  24. model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_upscale/esrgan.py +60 -0
  25. model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_upscale/ldsr.py +103 -0
  26. model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_upscale/real_esrgan.py +84 -0
  27. model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_upscale/swinir.py +204 -0
  28. model_compose-0.4.7/src/mindor/core/component/services/model/tasks/text_classification/__init__.py +1 -0
  29. model_compose-0.4.5/src/mindor/core/component/services/model/tasks/text_classification.py → model_compose-0.4.7/src/mindor/core/component/services/model/tasks/text_classification/huggingface.py +30 -35
  30. model_compose-0.4.7/src/mindor/core/component/services/model/tasks/text_embedding/__init__.py +1 -0
  31. model_compose-0.4.5/src/mindor/core/component/services/model/tasks/text_embedding.py → model_compose-0.4.7/src/mindor/core/component/services/model/tasks/text_embedding/huggingface.py +32 -38
  32. model_compose-0.4.7/src/mindor/core/component/services/model/tasks/text_generation/__init__.py +1 -0
  33. model_compose-0.4.5/src/mindor/core/component/services/model/tasks/text_generation.py → model_compose-0.4.7/src/mindor/core/component/services/model/tasks/text_generation/huggingface.py +88 -67
  34. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runner/http_client.py +1 -1
  35. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/services/http_server.py +5 -0
  36. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/http_client.py +27 -4
  37. model_compose-0.4.7/src/mindor/core/utils/image.py +67 -0
  38. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/package.py +3 -3
  39. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/streaming.py +6 -20
  40. {model_compose-0.4.5/src/mindor/dsl/schema/component → model_compose-0.4.7/src/mindor/dsl/schema/action}/impl/model/impl/__init__.py +2 -2
  41. model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +30 -0
  42. model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/common.py +7 -0
  43. model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_generation/__init__.py +1 -0
  44. model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_generation/image_generation.py +6 -0
  45. model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/__init__.py +4 -0
  46. model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/common.py +13 -0
  47. model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/flux.py +11 -0
  48. model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/hunyuan_image.py +11 -0
  49. model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/sdxl.py +11 -0
  50. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +6 -6
  51. model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/__init__.py +1 -0
  52. model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/image_upscale.py +9 -0
  53. model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/__init__.py +5 -0
  54. model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/common.py +17 -0
  55. model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/esrgan.py +14 -0
  56. model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/ldsr.py +14 -0
  57. model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/real_esrgan.py +16 -0
  58. model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/swinir.py +16 -0
  59. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +4 -3
  60. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +4 -4
  61. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +7 -6
  62. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/model/model.py +2 -2
  63. {model_compose-0.4.5/src/mindor/dsl/schema/action → model_compose-0.4.7/src/mindor/dsl/schema/component}/impl/model/impl/__init__.py +2 -2
  64. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/model/impl/chat_completion.py +1 -1
  65. model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/common.py +97 -0
  66. model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_generation/__init__.py +1 -0
  67. model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_generation/image_generation.py +10 -0
  68. model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/__init__.py +2 -0
  69. model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/common.py +28 -0
  70. model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/flux.py +14 -0
  71. model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/hunyuan_image.py +14 -0
  72. model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/sdxl.py +14 -0
  73. model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/__init__.py +1 -0
  74. model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/image_upscale.py +13 -0
  75. model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/__init__.py +5 -0
  76. model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/common.py +28 -0
  77. model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/esrgan.py +15 -0
  78. model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/ldsr.py +14 -0
  79. model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/real_esrgan.py +15 -0
  80. model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/swinir.py +14 -0
  81. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +5 -0
  82. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/model/impl/types.py +3 -2
  83. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/model/model.py +3 -2
  84. {model_compose-0.4.5 → model_compose-0.4.7}/src/model_compose.egg-info/PKG-INFO +1 -1
  85. {model_compose-0.4.5 → model_compose-0.4.7}/src/model_compose.egg-info/SOURCES.txt +58 -12
  86. model_compose-0.4.5/src/mindor/core/component/services/model/base.py +0 -142
  87. model_compose-0.4.5/src/mindor/core/component/services/model/loader.py +0 -25
  88. model_compose-0.4.5/src/mindor/core/component/services/model/tasks/summarization.py +0 -136
  89. model_compose-0.4.5/src/mindor/core/component/services/model/tasks/translation.py +0 -136
  90. model_compose-0.4.5/src/mindor/core/utils/image.py +0 -14
  91. model_compose-0.4.5/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +0 -41
  92. model_compose-0.4.5/src/mindor/dsl/schema/action/impl/model/impl/common.py +0 -18
  93. model_compose-0.4.5/src/mindor/dsl/schema/action/impl/model/impl/summarization.py +0 -23
  94. model_compose-0.4.5/src/mindor/dsl/schema/action/impl/model/impl/translation.py +0 -23
  95. model_compose-0.4.5/src/mindor/dsl/schema/component/impl/model/impl/common.py +0 -44
  96. model_compose-0.4.5/src/mindor/dsl/schema/component/impl/model/impl/summarization.py +0 -17
  97. model_compose-0.4.5/src/mindor/dsl/schema/component/impl/model/impl/translation.py +0 -17
  98. {model_compose-0.4.5 → model_compose-0.4.7}/LICENSE +0 -0
  99. {model_compose-0.4.5 → model_compose-0.4.7}/README.md +0 -0
  100. {model_compose-0.4.5 → model_compose-0.4.7}/setup.cfg +0 -0
  101. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/__init__.py +0 -0
  102. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/cli/__init__.py +0 -0
  103. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/cli/compose.py +0 -0
  104. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/__init__.py +0 -0
  105. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/__init__.py +0 -0
  106. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/component.py +0 -0
  107. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/context.py +0 -0
  108. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/__init__.py +0 -0
  109. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/http_client.py +0 -0
  110. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/http_server.py +0 -0
  111. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/mcp_client.py +0 -0
  112. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/mcp_server.py +0 -0
  113. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/model/__init__.py +0 -0
  114. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/shell.py +0 -0
  115. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/text_splitter.py +0 -0
  116. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/vector_store/__init__.py +0 -0
  117. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/vector_store/base.py +0 -0
  118. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/vector_store/drivers/__init__.py +0 -0
  119. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/vector_store/drivers/chroma.py +0 -0
  120. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/vector_store/drivers/milvus.py +0 -0
  121. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/vector_store/vector_store.py +0 -0
  122. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/workflow.py +0 -0
  123. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/compose/__init__.py +0 -0
  124. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/compose/compose.py +0 -0
  125. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/compose/manager.py +0 -0
  126. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/__init__.py +0 -0
  127. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/base.py +0 -0
  128. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/controller.py +0 -0
  129. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runner/__init__.py +0 -0
  130. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runner/client.py +0 -0
  131. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runner/mcp_client.py +0 -0
  132. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runner/runner.py +0 -0
  133. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runtime/__init__.py +0 -0
  134. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
  135. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runtime/docker/context/Dockerfile +0 -0
  136. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runtime/docker/docker.py +0 -0
  137. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runtime/native/__init__.py +0 -0
  138. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runtime/native/native.py +0 -0
  139. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runtime/specs.py +0 -0
  140. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/services/__init__.py +0 -0
  141. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/services/mcp_server.py +0 -0
  142. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/webui/__init__.py +0 -0
  143. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/webui/gradio.py +0 -0
  144. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/webui/webui.py +0 -0
  145. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/gateway/__init__.py +0 -0
  146. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/gateway/base.py +0 -0
  147. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/gateway/gateway.py +0 -0
  148. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/gateway/services/__init__.py +0 -0
  149. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/gateway/services/http_tunnel.py +0 -0
  150. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/gateway/services/ssh_tunnel.py +0 -0
  151. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/listener/__init__.py +0 -0
  152. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/listener/base.py +0 -0
  153. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/listener/listener.py +0 -0
  154. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/listener/services/__init__.py +0 -0
  155. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/listener/services/http_callback.py +0 -0
  156. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/logger/__init__.py +0 -0
  157. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/logger/base.py +0 -0
  158. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/logger/logger.py +0 -0
  159. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/logger/logging.py +0 -0
  160. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/logger/services/__init__.py +0 -0
  161. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/logger/services/console.py +0 -0
  162. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/logger/services/file.py +0 -0
  163. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/runtime/__init__.py +0 -0
  164. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/runtime/docker/__init__.py +0 -0
  165. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/runtime/docker/docker.py +0 -0
  166. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/runtime/env.py +0 -0
  167. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/services/__init__.py +0 -0
  168. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/services/async_service.py +0 -0
  169. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/__init__.py +0 -0
  170. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/caching.py +0 -0
  171. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/http_request.py +0 -0
  172. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/http_response.py +0 -0
  173. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/http_status.py +0 -0
  174. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/mcp_client.py +0 -0
  175. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/renderers.py +0 -0
  176. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/resolvers.py +0 -0
  177. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/shell.py +0 -0
  178. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/ssh_client.py +0 -0
  179. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/streamer.py +0 -0
  180. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/time.py +0 -0
  181. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/workqueue.py +0 -0
  182. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/__init__.py +0 -0
  183. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/context.py +0 -0
  184. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/__init__.py +0 -0
  185. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/base.py +0 -0
  186. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
  187. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/impl/action.py +0 -0
  188. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/impl/delay.py +0 -0
  189. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/impl/filter.py +0 -0
  190. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/impl/if_.py +0 -0
  191. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/impl/random_router.py +0 -0
  192. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/impl/switch.py +0 -0
  193. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/job.py +0 -0
  194. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/schema.py +0 -0
  195. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/workflow.py +0 -0
  196. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/__init__.py +0 -0
  197. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/loader.py +0 -0
  198. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/__init__.py +0 -0
  199. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/__init__.py +0 -0
  200. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/action.py +0 -0
  201. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/__init__.py +0 -0
  202. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/common.py +0 -0
  203. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/http_client.py +0 -0
  204. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/http_server.py +0 -0
  205. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
  206. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
  207. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
  208. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
  209. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/text_splitter.py +0 -0
  210. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/vector_store/__init__.py +0 -0
  211. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/vector_store/impl/__init__.py +0 -0
  212. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/vector_store/impl/chroma.py +0 -0
  213. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/vector_store/impl/common.py +0 -0
  214. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/vector_store/impl/faiss.py +0 -0
  215. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/vector_store/impl/milvus.py +0 -0
  216. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/vector_store/impl/qdrant.py +0 -0
  217. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/vector_store/vector_store.py +0 -0
  218. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
  219. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/__init__.py +0 -0
  220. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/component.py +0 -0
  221. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/__init__.py +0 -0
  222. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/common.py +0 -0
  223. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/http_client.py +0 -0
  224. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
  225. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/mcp_client.py +0 -0
  226. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
  227. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
  228. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/model/impl/image_to_text.py +0 -0
  229. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +0 -0
  230. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +0 -0
  231. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
  232. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/text_splitter.py +0 -0
  233. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/types.py +0 -0
  234. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/vector_store/__init__.py +0 -0
  235. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/vector_store/impl/__init__.py +0 -0
  236. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/vector_store/impl/chroma.py +0 -0
  237. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/vector_store/impl/common.py +0 -0
  238. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/vector_store/impl/faiss.py +0 -0
  239. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/vector_store/impl/milvus.py +0 -0
  240. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +0 -0
  241. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/vector_store/impl/types.py +0 -0
  242. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/vector_store/vector_store.py +0 -0
  243. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
  244. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/compose.py +0 -0
  245. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/__init__.py +0 -0
  246. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/controller.py +0 -0
  247. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
  248. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/impl/common.py +0 -0
  249. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/impl/http_server.py +0 -0
  250. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/impl/mcp_server.py +0 -0
  251. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/impl/types.py +0 -0
  252. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/webui/__init__.py +0 -0
  253. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/webui/impl/__init__.py +0 -0
  254. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/webui/impl/common.py +0 -0
  255. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +0 -0
  256. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/webui/impl/gradio.py +0 -0
  257. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/webui/impl/static.py +0 -0
  258. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/webui/webui.py +0 -0
  259. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
  260. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
  261. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
  262. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/common.py +0 -0
  263. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/http_tunnel/__init__.py +0 -0
  264. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/http_tunnel/http_tunnel.py +0 -0
  265. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/__init__.py +0 -0
  266. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/cloudflare.py +0 -0
  267. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/common.py +0 -0
  268. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/ngrok.py +0 -0
  269. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -0
  270. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
  271. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/__init__.py +0 -0
  272. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
  273. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/impl/action.py +0 -0
  274. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/impl/common.py +0 -0
  275. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
  276. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/impl/filter.py +0 -0
  277. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
  278. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/impl/random_router.py +0 -0
  279. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
  280. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/impl/types.py +0 -0
  281. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/job.py +0 -0
  282. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/listener/__init__.py +0 -0
  283. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/listener/impl/__init__.py +0 -0
  284. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/listener/impl/common.py +0 -0
  285. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/listener/impl/http_callback.py +0 -0
  286. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/listener/impl/types.py +0 -0
  287. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/listener/listener.py +0 -0
  288. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/logger/__init__.py +0 -0
  289. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
  290. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/logger/impl/common.py +0 -0
  291. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
  292. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/logger/impl/file.py +0 -0
  293. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
  294. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/logger/logger.py +0 -0
  295. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
  296. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
  297. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/runtime/impl/common.py +0 -0
  298. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
  299. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
  300. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
  301. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
  302. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/transport/__init__.py +0 -0
  303. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/transport/http.py +0 -0
  304. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/transport/ssh.py +0 -0
  305. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/workflow.py +0 -0
  306. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/utils/__init__.py +0 -0
  307. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/utils/annotation.py +0 -0
  308. {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/utils/enum.py +0 -0
  309. {model_compose-0.4.5 → model_compose-0.4.7}/src/model_compose.egg-info/dependency_links.txt +0 -0
  310. {model_compose-0.4.5 → model_compose-0.4.7}/src/model_compose.egg-info/entry_points.txt +0 -0
  311. {model_compose-0.4.5 → model_compose-0.4.7}/src/model_compose.egg-info/requires.txt +0 -0
  312. {model_compose-0.4.5 → model_compose-0.4.7}/src/model_compose.egg-info/top_level.txt +0 -0
  313. {model_compose-0.4.5 → model_compose-0.4.7}/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.5
3
+ Version: 0.4.7
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.5"
3
+ version = "0.4.7"
4
4
  description = "model-compose: Declarative AI Model and Workflow Orchestrator"
5
5
  authors = [
6
6
  { name = "Hanyeol Cho", email = "hanyeol.cho@gmail.com" }
@@ -114,10 +114,11 @@ class ComponentService(AsyncService):
114
114
 
115
115
  async def _install_packages(self, packages: List[str]) -> None:
116
116
  for package_spec in packages:
117
+ package_spec, repository = (package_spec.split("@") + [ None ])[:2]
117
118
  requirement = parse_requirement(package_spec)
118
119
  if not requirement or not is_requirement_satisfied(requirement):
119
120
  logging.info(f"Installing missing module: {package_spec}")
120
- await install_package(package_spec)
121
+ await install_package(repository or package_spec)
121
122
 
122
123
  def register_component(type: ComponentType):
123
124
  def decorator(cls: Type[ComponentService]) -> Type[ComponentService]:
@@ -0,0 +1,3 @@
1
+ from .common import *
2
+ from .huggingface import *
3
+ from .unsloth import *
@@ -0,0 +1,81 @@
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
3
+
4
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Mapping, Any
5
+ from abc import ABC, abstractmethod
6
+ from mindor.dsl.schema.component import ModelComponentConfig, ModelTaskType, ModelDriver, HuggingfaceModelConfig, LocalModelConfig
7
+ from mindor.dsl.schema.action import ModelActionConfig
8
+ from mindor.core.services import AsyncService
9
+ from mindor.core.logger import logging
10
+ from ....context import ComponentActionContext
11
+ import asyncio
12
+
13
+ if TYPE_CHECKING:
14
+ import torch
15
+
16
+ class ModelTaskService(AsyncService):
17
+ def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
18
+ super().__init__(daemon)
19
+
20
+ self.id: str = id
21
+ self.config: ModelComponentConfig = config
22
+
23
+ def get_setup_requirements(self) -> Optional[List[str]]:
24
+ return [ "torch" ]
25
+
26
+ async def run(self, action: ModelActionConfig, context: ComponentActionContext) -> Any:
27
+ loop: asyncio.AbstractEventLoop = asyncio.get_running_loop()
28
+
29
+ async def _run():
30
+ return await self._run(action, context, loop)
31
+
32
+ return await self.run_in_thread(_run)
33
+
34
+ @abstractmethod
35
+ async def _run(self, action: ModelActionConfig, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
36
+ pass
37
+
38
+ def _get_model_path(self) -> str:
39
+ if isinstance(self.config.model, HuggingfaceModelConfig):
40
+ from .huggingface_hub import get_model_path
41
+ return get_model_path(self.config.model)
42
+
43
+ if isinstance(self.config.model, LocalModelConfig):
44
+ return self.config.model.path
45
+
46
+ if isinstance(self.config.model, str):
47
+ return self.config.model
48
+
49
+ raise ValueError(f"Unknown model config type: {type(self.config.model)}")
50
+
51
+ def _resolve_device(self) -> torch.device:
52
+ import torch
53
+
54
+ try:
55
+ return torch.device(self.config.device)
56
+ except:
57
+ logging.warning(f"Invalid device '{self.config.device}', falling back to 'cpu'")
58
+
59
+ return torch.device("cpu")
60
+
61
+ def _load_model_checkpoint(self, model: torch.nn.Module, model_path: str) -> None:
62
+ checkpoint = torch.load(model_path, map_location="cpu")
63
+ state_dict = self._get_state_dict_from_checkpoint(checkpoint)
64
+
65
+ model.load_state_dict(state_dict, strict=True)
66
+
67
+ def _get_state_dict_from_checkpoint(self, checkpoint: Any) -> Mapping[str, Any]:
68
+ for key in [ "params", "state_dict" ]:
69
+ if key in checkpoint:
70
+ return checkpoint[key]
71
+ return checkpoint
72
+
73
+ def register_model_task_service(type: ModelTaskType, driver: ModelDriver):
74
+ def decorator(cls: Type[ModelTaskService]) -> Type[ModelTaskService]:
75
+ if type not in ModelTaskServiceRegistry:
76
+ ModelTaskServiceRegistry[type] = {}
77
+ ModelTaskServiceRegistry[type][driver] = cls
78
+ return cls
79
+ return decorator
80
+
81
+ ModelTaskServiceRegistry: Dict[ModelTaskType, Dict[ModelDriver, Type[ModelTaskService]]] = {}
@@ -0,0 +1,171 @@
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
3
+
4
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Any
5
+ from mindor.dsl.schema.component import ModelComponentConfig, HuggingfaceModelConfig, DeviceMode
6
+ from mindor.core.logger import logging
7
+ from .common import ModelTaskService
8
+
9
+ if TYPE_CHECKING:
10
+ from transformers import PreTrainedModel, PreTrainedTokenizer, ProcessorMixin
11
+ import torch
12
+
13
+ class HuggingfaceModelTaskService(ModelTaskService):
14
+ def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
15
+ super().__init__(id, config, daemon)
16
+
17
+ def _load_pretrained_model(self) -> PreTrainedModel:
18
+ model_cls = self._get_model_class()
19
+ model = model_cls.from_pretrained(self.config.model, **self._get_model_params())
20
+
21
+ if self.config.device_mode == DeviceMode.SINGLE:
22
+ model = model.to(torch.device(self.config.device))
23
+
24
+ return model
25
+
26
+ def _get_model_class(self) -> Type[PreTrainedModel]:
27
+ raise NotImplementedError("Model class loader not implemented.")
28
+
29
+ def _get_model_params(self) -> Dict[str, Any]:
30
+ params: Dict[str, Any] = {}
31
+
32
+ if isinstance(self.config.model, HuggingfaceModelConfig):
33
+ if self.config.model.revision:
34
+ params["revision"] = self.config.model.revision
35
+
36
+ if self.config.model.cache_dir:
37
+ params["cache_dir"] = self.config.model.cache_dir
38
+
39
+ if self.config.model.local_files_only:
40
+ params["local_files_only"] = True
41
+
42
+ if self.config.device_mode != DeviceMode.SINGLE:
43
+ params["device_map"] = self.config.device_mode.value
44
+
45
+ if self.config.precision is not None:
46
+ params["torch_dtype"] = getattr(torch, self.config.precision.value)
47
+
48
+ if self.config.low_cpu_mem_usage:
49
+ params["low_cpu_mem_usage"] = True
50
+
51
+ return params
52
+
53
+ def _get_model_device(self, model: PreTrainedModel) -> torch.device:
54
+ return next(model.parameters()).device
55
+
56
+ class HuggingfaceLanguageModelTaskService(HuggingfaceModelTaskService):
57
+ def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
58
+ super().__init__(id, config, daemon)
59
+
60
+ self.model: Optional[PreTrainedModel] = None
61
+ self.tokenizer: Optional[PreTrainedTokenizer] = None
62
+ self.device: Optional[torch.device] = None
63
+
64
+ def get_setup_requirements(self) -> Optional[List[str]]:
65
+ return [
66
+ "transformers>=4.21.0",
67
+ "torch",
68
+ "sentencepiece",
69
+ "accelerate"
70
+ ]
71
+
72
+ async def _serve(self) -> None:
73
+ try:
74
+ self.model = self._load_pretrained_model()
75
+ self.tokenizer = self._load_pretrained_tokenizer()
76
+ self.device = self._get_model_device(self.model)
77
+ logging.info(f"Model and tokenizer loaded successfully on device '{self.device}': {self.config.model}")
78
+ except Exception as e:
79
+ logging.error(f"Failed to load model '{self.config.model}': {e}")
80
+ raise
81
+
82
+ async def _shutdown(self) -> None:
83
+ self.model = None
84
+ self.tokenizer = None
85
+ self.device = None
86
+
87
+ def _load_pretrained_tokenizer(self) -> Optional[PreTrainedTokenizer]:
88
+ tokenizer_cls = self._get_tokenizer_class()
89
+
90
+ if not tokenizer_cls:
91
+ return None
92
+
93
+ return tokenizer_cls.from_pretrained(self.config.model, **self._get_tokenizer_params())
94
+
95
+ def _get_tokenizer_class(self) -> Optional[Type[PreTrainedTokenizer]]:
96
+ return None
97
+
98
+ def _get_tokenizer_params(self) -> Dict[str, Any]:
99
+ params: Dict[str, Any] = {}
100
+
101
+ if isinstance(self.config.model, HuggingfaceModelConfig):
102
+ if self.config.model.revision:
103
+ params["revision"] = self.config.model.revision
104
+
105
+ if self.config.model.cache_dir:
106
+ params["cache_dir"] = self.config.model.cache_dir
107
+
108
+ if self.config.model.local_files_only:
109
+ params["local_files_only"] = True
110
+
111
+ if not self.config.fast_tokenizer:
112
+ params["use_fast"] = False
113
+
114
+ return params
115
+
116
+ class HuggingfaceMultimodalModelTaskService(HuggingfaceModelTaskService):
117
+ def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
118
+ super().__init__(id, config, daemon)
119
+
120
+ self.model: Optional[PreTrainedModel] = None
121
+ self.processor: Optional[ProcessorMixin] = None
122
+ self.device: Optional[torch.device] = None
123
+
124
+ def get_setup_requirements(self) -> Optional[List[str]]:
125
+ return [
126
+ "transformers>=4.21.0",
127
+ "torch",
128
+ "sentencepiece",
129
+ "accelerate"
130
+ ]
131
+
132
+ async def _serve(self) -> None:
133
+ try:
134
+ self.model = self._load_pretrained_model()
135
+ self.processor = self._load_pretrained_processor()
136
+ self.device = self._get_model_device(self.model)
137
+ logging.info(f"Model and processor loaded successfully on device '{self.device}': {self.config.model}")
138
+ except Exception as e:
139
+ logging.error(f"Failed to load model '{self.config.model}': {e}")
140
+ raise
141
+
142
+ async def _shutdown(self) -> None:
143
+ self.model = None
144
+ self.processor = None
145
+ self.device = None
146
+
147
+ def _load_pretrained_processor(self) -> Optional[ProcessorMixin]:
148
+ processor_cls = self._get_processor_class()
149
+
150
+ if not processor_cls:
151
+ return None
152
+
153
+ return processor_cls.from_pretrained(self.config.model, **self._get_processor_params())
154
+
155
+ def _get_processor_class(self) -> Optional[Type[ProcessorMixin]]:
156
+ return None
157
+
158
+ def _get_processor_params(self) -> Dict[str, Any]:
159
+ params: Dict[str, Any] = {}
160
+
161
+ if isinstance(self.config.model, HuggingfaceModelConfig):
162
+ if self.config.model.revision:
163
+ params["revision"] = self.config.model.revision
164
+
165
+ if self.config.model.cache_dir:
166
+ params["cache_dir"] = self.config.model.cache_dir
167
+
168
+ if self.config.model.local_files_only:
169
+ params["local_files_only"] = True
170
+
171
+ return params
@@ -0,0 +1,23 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Any
2
+ from mindor.dsl.schema.component import HuggingfaceModelConfig
3
+
4
+ def get_model_path(model: HuggingfaceModelConfig) -> Optional[str]:
5
+ if model.filename:
6
+ from huggingface_hub import hf_hub_download
7
+ return hf_hub_download(
8
+ repo_id=model.repository,
9
+ filename=model.filename,
10
+ revision=model.revision,
11
+ cache_dir=model.cache_dir,
12
+ token=model.token,
13
+ local_files_only=model.local_files_only
14
+ )
15
+ else:
16
+ from huggingface_hub import snapshot_download
17
+ return snapshot_download(
18
+ repo_id=model.repository,
19
+ revision=model.revision,
20
+ cache_dir=model.cache_dir,
21
+ token=model.token,
22
+ local_files_only=model.local_files_only
23
+ )
@@ -0,0 +1,54 @@
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
3
+
4
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Any
5
+ from mindor.dsl.schema.component import ModelComponentConfig, DeviceMode
6
+ from mindor.core.logger import logging
7
+ from .common import ModelTaskService
8
+
9
+ if TYPE_CHECKING:
10
+ from transformers import PreTrainedModel, PreTrainedTokenizer
11
+
12
+ class UnslothModelTaskService(ModelTaskService):
13
+ def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
14
+ super().__init__(id, config, daemon)
15
+
16
+ self.model: Optional[PreTrainedModel] = None
17
+ self.tokenizer: Optional[PreTrainedTokenizer] = None
18
+
19
+ def get_setup_requirements(self) -> Optional[List[str]]:
20
+ return [
21
+ "unsloth",
22
+ "torch"
23
+ ]
24
+
25
+ async def _serve(self) -> None:
26
+ try:
27
+ self.model, self.tokenizer = self._load_pretrained_model()
28
+ logging.info(f"Model and tokenizer loaded successfully: {self.config.model}")
29
+ except Exception as e:
30
+ logging.error(f"Failed to load model '{self.config.model}': {e}")
31
+ raise
32
+
33
+ async def _shutdown(self) -> None:
34
+ self.model = None
35
+ self.tokenizer = None
36
+ self.device = None
37
+
38
+ def _load_pretrained_model(self) -> Tuple[PreTrainedModel, PreTrainedTokenizer]:
39
+ from unsloth import FastLanguageModel
40
+
41
+ model = FastLanguageModel.from_pretrained(self.config.model, **self._get_model_params())
42
+
43
+ return model
44
+
45
+ def _get_model_params(self) -> Dict[str, Any]:
46
+ params: Dict[str, Any] = {}
47
+
48
+ if self.config.device_mode != DeviceMode.SINGLE:
49
+ params["device_map"] = self.config.device_mode.value
50
+
51
+ if self.config.precision is not None:
52
+ params["dtype"] = self.config.precision.value
53
+
54
+ return params
@@ -1,5 +1,5 @@
1
1
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, AsyncIterator, Any
2
- from mindor.dsl.schema.component import ModelComponentConfig, ModelTaskType
2
+ from mindor.dsl.schema.component import ModelComponentConfig, ModelTaskType, ModelDriver
3
3
  from mindor.dsl.schema.action import ActionConfig, ModelActionConfig
4
4
  from ...base import ComponentService, ComponentType, ComponentGlobalConfigs, register_component
5
5
  from ...context import ComponentActionContext
@@ -17,26 +17,18 @@ class ModelComponent(ComponentService):
17
17
  def __init__(self, id: str, config: ModelComponentConfig, global_configs: ComponentGlobalConfigs, daemon: bool):
18
18
  super().__init__(id, config, global_configs, daemon)
19
19
 
20
- self.task_service: ModelTaskService = self._create_task_service(self.config.task)
20
+ self.task_service: ModelTaskService = self._create_task_service(self.config.task, self.config.driver)
21
21
 
22
- def _create_task_service(self, type: ModelTaskType) -> ModelTaskService:
22
+ def _create_task_service(self, type: ModelTaskType, driver: ModelDriver) -> ModelTaskService:
23
23
  try:
24
24
  if not ModelTaskServiceRegistry:
25
25
  from . import tasks
26
- return ModelTaskServiceRegistry[type](self.id, self.config, self.daemon)
26
+ return ModelTaskServiceRegistry[type][driver](self.id, self.config, self.daemon)
27
27
  except KeyError:
28
- raise ValueError(f"Unsupported model task type: {type}")
28
+ raise ValueError(f"Unsupported model task type: {type} on {driver}")
29
29
 
30
30
  def _get_setup_requirements(self) -> Optional[List[str]]:
31
- task_dependencies = self.task_service.get_setup_requirements()
32
-
33
- return [
34
- "transformers>=4.21.0",
35
- "torch",
36
- "sentencepiece",
37
- "accelerate",
38
- *(task_dependencies or [])
39
- ]
31
+ return self.task_service.get_setup_requirements()
40
32
 
41
33
  async def _serve(self) -> None:
42
34
  await self.task_service.start()
@@ -1,6 +1,6 @@
1
1
  from .text_generation import *
2
- from .summarization import *
3
- from .translation import *
2
+ from .chat_completion import *
4
3
  from .text_classification import *
5
4
  from .text_embedding import *
6
5
  from .image_to_text import *
6
+ from .image_upscale import *
@@ -0,0 +1,41 @@
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
3
+
4
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
5
+ from mindor.dsl.schema.action import ModelActionConfig, ChatCompletionModelActionConfig
6
+ from ...base import ModelTaskType, ModelDriver, register_model_task_service
7
+ from ...base import HuggingfaceLanguageModelTaskService, ComponentActionContext
8
+ from ..text_generation import HuggingfaceTextGenerationTaskAction
9
+ import asyncio
10
+
11
+ if TYPE_CHECKING:
12
+ from transformers import PreTrainedModel, PreTrainedTokenizer
13
+ import torch
14
+
15
+ class HuggingfaceChatCompletionTaskAction(HuggingfaceTextGenerationTaskAction):
16
+ def __init__(self, config: ChatCompletionModelActionConfig, model: PreTrainedModel, tokenizer: PreTrainedTokenizer, device: torch.device):
17
+ super().__init__(config, model, tokenizer, device)
18
+
19
+ self.config: ChatCompletionModelActionConfig = config # For type only
20
+
21
+ async def _prepare_input(self, context: ComponentActionContext) -> Union[str, List[str]]:
22
+ messages = await context.render_variable(self.config.messages)
23
+
24
+ return self.tokenizer.apply_chat_template(
25
+ messages,
26
+ tokenize=False,
27
+ add_generation_prompt=True
28
+ )
29
+
30
+ @register_model_task_service(ModelTaskType.CHAT_COMPLETION, ModelDriver.HUGGINGFACE)
31
+ class HuggingfaceChatCompletionTaskService(HuggingfaceLanguageModelTaskService):
32
+ async def _run(self, action: ModelActionConfig, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
33
+ return await HuggingfaceChatCompletionTaskAction(action, self.model, self.tokenizer, self.device).run(context, loop)
34
+
35
+ def _get_model_class(self) -> Type[PreTrainedModel]:
36
+ from transformers import AutoModelForCausalLM
37
+ return AutoModelForCausalLM
38
+
39
+ def _get_tokenizer_class(self) -> Type[PreTrainedTokenizer]:
40
+ from transformers import AutoTokenizer
41
+ return AutoTokenizer
@@ -0,0 +1,47 @@
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
3
+
4
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, TypeAlias, Any
5
+ from abc import ABC, abstractmethod
6
+ from mindor.dsl.schema.action import ImageGenerationModelActionConfig, ColorFormat
7
+ from mindor.core.logger import logging
8
+ from ...base import ModelTaskService, ComponentActionContext
9
+ from PIL import Image as PILImage
10
+
11
+ if TYPE_CHECKING:
12
+ import torch
13
+
14
+ class ImageGenerationTaskAction:
15
+ def __init__(self, config: ImageGenerationModelActionConfig, device: torch.device):
16
+ self.config: ImageGenerationModelActionConfig = config
17
+ self.device: torch.device = device
18
+
19
+ async def run(self, context: ComponentActionContext) -> Any:
20
+ text = await self._prepare_input(context)
21
+ is_single_input = not isinstance(text, list)
22
+ texts: List[PILImage.Image] = [ text ] if is_single_input else text
23
+ results = []
24
+
25
+ batch_size = await context.render_variable(self.config.batch_size)
26
+ params = await self._resolve_generation_params(context)
27
+
28
+ for index in range(0, len(texts), batch_size):
29
+ batch_texts = texts[index:index + batch_size]
30
+ upscaled_images = await self._upscale(batch_texts, params)
31
+ results.extend(upscaled_images)
32
+
33
+ return results[0] if is_single_input else results
34
+
35
+ async def _prepare_input(self, context: ComponentActionContext) -> Union[str, List[str]]:
36
+ return await context.render_image(self.config.image)
37
+
38
+ @abstractmethod
39
+ async def _generate(self, images: List[PILImage.Image], params: Dict[str, Any]) -> List[PILImage.Image]:
40
+ pass
41
+
42
+ @abstractmethod
43
+ async def _resolve_generation_params(self, context: ComponentActionContext) -> Dict[str, Any]:
44
+ pass
45
+
46
+ class ImageGenerationTaskService(ModelTaskService):
47
+ pass
@@ -0,0 +1,12 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, TypeAlias, Any
2
+ from mindor.dsl.schema.component import ModelComponentConfig, ImageGenerationModelFamily
3
+ from ...base import ModelTaskType, ModelDriver, register_model_task_service
4
+
5
+ @register_model_task_service(ModelTaskType.IMAGE_GENERATION, ModelDriver.CUSTOM)
6
+ class CustomImageGenerationTaskService:
7
+ def __new__(cls, id: str, config: ModelComponentConfig, daemon: bool):
8
+ if config.family == ImageGenerationModelFamily.HUNYUAN_IMAGE:
9
+ from .hunyuan_image import HunyuanImageGenerationTaskService
10
+ return HunyuanImageGenerationTaskService(id, config, daemon)
11
+
12
+ raise ValueError(f"Unknown architecture: {config.architecture}")
@@ -0,0 +1,54 @@
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
3
+
4
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, TypeAlias, Any
5
+ from mindor.dsl.schema.component import ModelComponentConfig
6
+ from mindor.dsl.schema.action import ModelActionConfig, FluxImageGenerationModelActionConfig
7
+ from mindor.core.logger import logging
8
+ from ...base import ComponentActionContext
9
+ from .common import ImageGenerationTaskService, ImageGenerationTaskAction
10
+ from PIL import Image as PILImage
11
+ import asyncio
12
+
13
+ if TYPE_CHECKING:
14
+ import torch
15
+
16
+ class FluxImageGenerationTaskAction(ImageGenerationTaskAction):
17
+ def __init__(self, config: FluxImageGenerationModelActionConfig, pipeline: Any, device: torch.device):
18
+ super().__init__(config, device)
19
+
20
+ self.pipeline = pipeline
21
+
22
+ async def _generate(self, params: Dict[str, Any]) -> List[PILImage.Image]:
23
+ pass
24
+
25
+ async def _resolve_generation_params(self, context: ComponentActionContext) -> Dict[str, Any]:
26
+ pass
27
+
28
+ class FluxImageGenerationTaskService(ImageGenerationTaskService):
29
+ def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
30
+ super().__init__(id, config, daemon)
31
+
32
+ self.pipeline: Optional[Any] = None
33
+ self.device: Optional[torch.device] = None
34
+
35
+ def get_setup_requirements(self) -> Optional[List[str]]:
36
+ return None
37
+
38
+ async def _serve(self) -> None:
39
+ try:
40
+ self.pipeline, self.device = self._load_pretrained_pipeline()
41
+ logging.info(f"Model loaded successfully on device '{self.device}': {self.config.model}")
42
+ except Exception as e:
43
+ logging.error(f"Failed to load model '{self.config.model}': {e}")
44
+ raise
45
+
46
+ async def _shutdown(self) -> None:
47
+ self.pipeline = None
48
+ self.device = None
49
+
50
+ def _load_pretrained_pipeline(self) -> Tuple[Any, torch.device]:
51
+ pass
52
+
53
+ async def _run(self, action: ModelActionConfig, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
54
+ return FluxImageGenerationModelActionConfig(action, self.model).run(context)
@@ -0,0 +1,54 @@
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
3
+
4
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, TypeAlias, Any
5
+ from mindor.dsl.schema.component import ModelComponentConfig
6
+ from mindor.dsl.schema.action import ModelActionConfig, HunyuanImageGenerationModelActionConfig
7
+ from mindor.core.logger import logging
8
+ from ...base import ComponentActionContext
9
+ from .common import ImageGenerationTaskService, ImageGenerationTaskAction
10
+ from PIL import Image as PILImage
11
+ import asyncio
12
+
13
+ if TYPE_CHECKING:
14
+ import torch
15
+
16
+ class HunyuanImageGenerationTaskAction(ImageGenerationTaskAction):
17
+ def __init__(self, config: HunyuanImageGenerationModelActionConfig, pipeline: Any, device: torch.device):
18
+ super().__init__(config, device)
19
+
20
+ self.pipeline = pipeline
21
+
22
+ async def _generate(self, params: Dict[str, Any]) -> List[PILImage.Image]:
23
+ pass
24
+
25
+ async def _resolve_generation_params(self, context: ComponentActionContext) -> Dict[str, Any]:
26
+ pass
27
+
28
+ class HunyuanImageGenerationTaskService(ImageGenerationTaskService):
29
+ def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
30
+ super().__init__(id, config, daemon)
31
+
32
+ self.pipeline: Optional[Any] = None
33
+ self.device: Optional[torch.device] = None
34
+
35
+ def get_setup_requirements(self) -> Optional[List[str]]:
36
+ return None
37
+
38
+ async def _serve(self) -> None:
39
+ try:
40
+ self.pipeline, self.device = self._load_pretrained_pipeline()
41
+ logging.info(f"Model loaded successfully on device '{self.device}': {self.config.model}")
42
+ except Exception as e:
43
+ logging.error(f"Failed to load model '{self.config.model}': {e}")
44
+ raise
45
+
46
+ async def _shutdown(self) -> None:
47
+ self.pipeline = None
48
+ self.device = None
49
+
50
+ def _load_pretrained_pipeline(self) -> Tuple[Any, torch.device]:
51
+ pass
52
+
53
+ async def _run(self, action: ModelActionConfig, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
54
+ return HunyuanImageGenerationModelActionConfig(action, self.model).run(context)