model-compose 0.3.15__tar.gz → 0.3.17__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 (255) hide show
  1. {model_compose-0.3.15/src/model_compose.egg-info → model_compose-0.3.17}/PKG-INFO +1 -5
  2. {model_compose-0.3.15 → model_compose-0.3.17}/pyproject.toml +1 -5
  3. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/base.py +16 -0
  4. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/base.py +11 -2
  5. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/model.py +12 -1
  6. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/tasks/image_to_text.py +11 -3
  7. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/tasks/summarization.py +14 -4
  8. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/tasks/text_classification.py +14 -5
  9. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/tasks/text_embedding.py +17 -5
  10. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/tasks/text_generation.py +14 -4
  11. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/tasks/translation.py +14 -4
  12. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/vector_store/base.py +3 -0
  13. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/vector_store/drivers/chroma.py +4 -1
  14. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/vector_store/drivers/milvus.py +4 -1
  15. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/vector_store/vector_store.py +4 -1
  16. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/base.py +4 -5
  17. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runtime/docker/context/Dockerfile +1 -6
  18. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/services/async_service.py +0 -5
  19. model_compose-0.3.17/src/mindor/core/utils/package.py +57 -0
  20. {model_compose-0.3.15 → model_compose-0.3.17/src/model_compose.egg-info}/PKG-INFO +1 -5
  21. {model_compose-0.3.15 → model_compose-0.3.17}/src/model_compose.egg-info/SOURCES.txt +1 -0
  22. {model_compose-0.3.15 → model_compose-0.3.17}/src/model_compose.egg-info/requires.txt +0 -4
  23. {model_compose-0.3.15 → model_compose-0.3.17}/LICENSE +0 -0
  24. {model_compose-0.3.15 → model_compose-0.3.17}/README.md +0 -0
  25. {model_compose-0.3.15 → model_compose-0.3.17}/setup.cfg +0 -0
  26. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/__init__.py +0 -0
  27. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/cli/__init__.py +0 -0
  28. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/cli/compose.py +0 -0
  29. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/__init__.py +0 -0
  30. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/__init__.py +0 -0
  31. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/component.py +0 -0
  32. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/context.py +0 -0
  33. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/__init__.py +0 -0
  34. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/http_client.py +0 -0
  35. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/http_server.py +0 -0
  36. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/mcp_client.py +0 -0
  37. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/mcp_server.py +0 -0
  38. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/__init__.py +0 -0
  39. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/loader.py +0 -0
  40. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/tasks/__init__.py +0 -0
  41. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/shell.py +0 -0
  42. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/text_splitter.py +0 -0
  43. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/vector_store/__init__.py +0 -0
  44. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/vector_store/drivers/__init__.py +0 -0
  45. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/workflow.py +0 -0
  46. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/compose/__init__.py +0 -0
  47. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/compose/compose.py +0 -0
  48. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/compose/manager.py +0 -0
  49. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/__init__.py +0 -0
  50. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/controller.py +0 -0
  51. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runner/__init__.py +0 -0
  52. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runner/client.py +0 -0
  53. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runner/http_client.py +0 -0
  54. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runner/mcp_client.py +0 -0
  55. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runner/runner.py +0 -0
  56. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runtime/__init__.py +0 -0
  57. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
  58. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runtime/docker/docker.py +0 -0
  59. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runtime/native/__init__.py +0 -0
  60. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runtime/native/native.py +0 -0
  61. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runtime/specs.py +0 -0
  62. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/services/__init__.py +0 -0
  63. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/services/http_server.py +0 -0
  64. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/services/mcp_server.py +0 -0
  65. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/webui/__init__.py +0 -0
  66. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/webui/gradio.py +0 -0
  67. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/webui/webui.py +0 -0
  68. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/gateway/__init__.py +0 -0
  69. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/gateway/base.py +0 -0
  70. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/gateway/gateway.py +0 -0
  71. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/gateway/services/__init__.py +0 -0
  72. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/gateway/services/http_tunnel.py +0 -0
  73. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/gateway/services/ssh_tunnel.py +0 -0
  74. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/listener/__init__.py +0 -0
  75. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/listener/base.py +0 -0
  76. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/listener/listener.py +0 -0
  77. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/listener/services/__init__.py +0 -0
  78. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/listener/services/http_callback.py +0 -0
  79. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/logger/__init__.py +0 -0
  80. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/logger/base.py +0 -0
  81. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/logger/logger.py +0 -0
  82. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/logger/logging.py +0 -0
  83. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/logger/services/__init__.py +0 -0
  84. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/logger/services/console.py +0 -0
  85. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/logger/services/file.py +0 -0
  86. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/runtime/__init__.py +0 -0
  87. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/runtime/docker/__init__.py +0 -0
  88. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/runtime/docker/docker.py +0 -0
  89. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/runtime/env.py +0 -0
  90. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/services/__init__.py +0 -0
  91. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/__init__.py +0 -0
  92. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/caching.py +0 -0
  93. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/http_client.py +0 -0
  94. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/http_request.py +0 -0
  95. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/http_response.py +0 -0
  96. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/http_status.py +0 -0
  97. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/image.py +0 -0
  98. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/mcp_client.py +0 -0
  99. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/renderers.py +0 -0
  100. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/resolvers.py +0 -0
  101. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/shell.py +0 -0
  102. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/ssh_client.py +0 -0
  103. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/streamer.py +0 -0
  104. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/streaming.py +0 -0
  105. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/time.py +0 -0
  106. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/workqueue.py +0 -0
  107. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/__init__.py +0 -0
  108. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/context.py +0 -0
  109. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/__init__.py +0 -0
  110. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/base.py +0 -0
  111. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
  112. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/impl/action.py +0 -0
  113. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/impl/delay.py +0 -0
  114. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/impl/filter.py +0 -0
  115. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/impl/if_.py +0 -0
  116. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/impl/random_router.py +0 -0
  117. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/impl/switch.py +0 -0
  118. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/job.py +0 -0
  119. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/schema.py +0 -0
  120. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/workflow.py +0 -0
  121. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/__init__.py +0 -0
  122. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/loader.py +0 -0
  123. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/__init__.py +0 -0
  124. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/__init__.py +0 -0
  125. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/action.py +0 -0
  126. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/__init__.py +0 -0
  127. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/common.py +0 -0
  128. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/http_client.py +0 -0
  129. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/http_server.py +0 -0
  130. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
  131. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
  132. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
  133. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/impl/__init__.py +0 -0
  134. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +0 -0
  135. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/impl/common.py +0 -0
  136. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +0 -0
  137. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/impl/summarization.py +0 -0
  138. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +0 -0
  139. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +0 -0
  140. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +0 -0
  141. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/impl/translation.py +0 -0
  142. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/model.py +0 -0
  143. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
  144. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/text_splitter.py +0 -0
  145. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/vector_store/__init__.py +0 -0
  146. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/vector_store/impl/__init__.py +0 -0
  147. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/vector_store/impl/chroma.py +0 -0
  148. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/vector_store/impl/common.py +0 -0
  149. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/vector_store/impl/faiss.py +0 -0
  150. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/vector_store/impl/milvus.py +0 -0
  151. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/vector_store/impl/qdrant.py +0 -0
  152. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/vector_store/vector_store.py +0 -0
  153. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
  154. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/__init__.py +0 -0
  155. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/component.py +0 -0
  156. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/__init__.py +0 -0
  157. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/common.py +0 -0
  158. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/http_client.py +0 -0
  159. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
  160. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/mcp_client.py +0 -0
  161. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
  162. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
  163. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/__init__.py +0 -0
  164. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/chat_completion.py +0 -0
  165. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/common.py +0 -0
  166. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/image_to_text.py +0 -0
  167. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/summarization.py +0 -0
  168. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +0 -0
  169. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +0 -0
  170. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +0 -0
  171. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/translation.py +0 -0
  172. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/types.py +0 -0
  173. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/model.py +0 -0
  174. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
  175. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/text_splitter.py +0 -0
  176. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/types.py +0 -0
  177. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/vector_store/__init__.py +0 -0
  178. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/vector_store/impl/__init__.py +0 -0
  179. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/vector_store/impl/chroma.py +0 -0
  180. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/vector_store/impl/common.py +0 -0
  181. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/vector_store/impl/faiss.py +0 -0
  182. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/vector_store/impl/milvus.py +0 -0
  183. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +0 -0
  184. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/vector_store/impl/types.py +0 -0
  185. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/vector_store/vector_store.py +0 -0
  186. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
  187. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/compose.py +0 -0
  188. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/__init__.py +0 -0
  189. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/controller.py +0 -0
  190. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
  191. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/impl/common.py +0 -0
  192. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/impl/http_server.py +0 -0
  193. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/impl/mcp_server.py +0 -0
  194. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/impl/types.py +0 -0
  195. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/webui/__init__.py +0 -0
  196. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/webui/impl/__init__.py +0 -0
  197. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/webui/impl/common.py +0 -0
  198. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +0 -0
  199. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/webui/impl/gradio.py +0 -0
  200. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/webui/impl/static.py +0 -0
  201. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/webui/webui.py +0 -0
  202. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
  203. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
  204. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
  205. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/common.py +0 -0
  206. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/http_tunnel/__init__.py +0 -0
  207. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/http_tunnel/http_tunnel.py +0 -0
  208. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/__init__.py +0 -0
  209. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/cloudflare.py +0 -0
  210. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/common.py +0 -0
  211. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/ngrok.py +0 -0
  212. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -0
  213. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
  214. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/__init__.py +0 -0
  215. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
  216. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/impl/action.py +0 -0
  217. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/impl/common.py +0 -0
  218. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
  219. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/impl/filter.py +0 -0
  220. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
  221. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/impl/random_router.py +0 -0
  222. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
  223. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/impl/types.py +0 -0
  224. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/job.py +0 -0
  225. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/listener/__init__.py +0 -0
  226. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/listener/impl/__init__.py +0 -0
  227. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/listener/impl/common.py +0 -0
  228. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/listener/impl/http_callback.py +0 -0
  229. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/listener/impl/types.py +0 -0
  230. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/listener/listener.py +0 -0
  231. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/logger/__init__.py +0 -0
  232. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
  233. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/logger/impl/common.py +0 -0
  234. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
  235. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/logger/impl/file.py +0 -0
  236. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
  237. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/logger/logger.py +0 -0
  238. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
  239. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
  240. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/runtime/impl/common.py +0 -0
  241. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
  242. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
  243. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
  244. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
  245. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/transport/__init__.py +0 -0
  246. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/transport/http.py +0 -0
  247. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/transport/ssh.py +0 -0
  248. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/workflow.py +0 -0
  249. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/utils/__init__.py +0 -0
  250. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/utils/annotation.py +0 -0
  251. {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/utils/enum.py +0 -0
  252. {model_compose-0.3.15 → model_compose-0.3.17}/src/model_compose.egg-info/dependency_links.txt +0 -0
  253. {model_compose-0.3.15 → model_compose-0.3.17}/src/model_compose.egg-info/entry_points.txt +0 -0
  254. {model_compose-0.3.15 → model_compose-0.3.17}/src/model_compose.egg-info/top_level.txt +0 -0
  255. {model_compose-0.3.15 → model_compose-0.3.17}/tests/test_cli.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: model-compose
3
- Version: 0.3.15
3
+ Version: 0.3.17
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
@@ -20,10 +20,6 @@ Requires-Dist: pyngrok
20
20
  Requires-Dist: ulid
21
21
  Requires-Dist: gradio
22
22
  Requires-Dist: Pillow
23
- Requires-Dist: transformers>=4.21.0
24
- Requires-Dist: torch
25
- Requires-Dist: sentencepiece
26
- Requires-Dist: accelerate
27
23
  Requires-Dist: docker
28
24
  Dynamic: license-file
29
25
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "model-compose"
3
- version = "0.3.15"
3
+ version = "0.3.17"
4
4
  description = "model-compose: Declarative AI Model and Workflow Orchestrator"
5
5
  authors = [
6
6
  { name = "Hanyeol Cho", email = "hanyeol.cho@gmail.com" }
@@ -21,10 +21,6 @@ dependencies = [
21
21
  "ulid",
22
22
  "gradio",
23
23
  "Pillow",
24
- "transformers>=4.21.0",
25
- "torch",
26
- "sentencepiece",
27
- "accelerate",
28
24
  "docker"
29
25
  ]
30
26
 
@@ -7,6 +7,8 @@ from mindor.dsl.schema.gateway import GatewayConfig
7
7
  from mindor.dsl.schema.workflow import WorkflowConfig
8
8
  from mindor.core.services import AsyncService
9
9
  from mindor.core.utils.workqueue import WorkQueue
10
+ from mindor.core.utils.package import extract_module_name, is_module_installed, install_package
11
+ from mindor.core.logger import logging
10
12
  from .context import ComponentActionContext
11
13
 
12
14
  class ActionResolver:
@@ -59,6 +61,10 @@ class ComponentService(AsyncService):
59
61
  self.queue = WorkQueue(self.config.max_concurrent_count, self._run)
60
62
 
61
63
  async def setup(self) -> None:
64
+ dependencies = self._get_setup_requirements()
65
+ if dependencies:
66
+ await self._install_packages(dependencies)
67
+
62
68
  await self._setup()
63
69
 
64
70
  async def teardown(self) -> None:
@@ -83,6 +89,9 @@ class ComponentService(AsyncService):
83
89
  async def _teardown(self) -> None:
84
90
  pass
85
91
 
92
+ async def _get_setup_requirements(self) -> Optional[List[str]]:
93
+ return None
94
+
86
95
  async def _start(self) -> None:
87
96
  if self.queue:
88
97
  await self.queue.start()
@@ -108,6 +117,13 @@ class ComponentService(AsyncService):
108
117
  async def _run(self, action: ActionConfig, context: ComponentActionContext) -> Any:
109
118
  pass
110
119
 
120
+ async def _install_packages(self, packages: List[str]) -> None:
121
+ for package_spec in packages:
122
+ module_name = extract_module_name(package_spec)
123
+ if not is_module_installed(module_name):
124
+ logging.info(f"Installing missing module: {package_spec}")
125
+ await install_package(package_spec)
126
+
111
127
  def register_component(type: ComponentType):
112
128
  def decorator(cls: Type[ComponentService]) -> Type[ComponentService]:
113
129
  ComponentRegistry[type] = cls
@@ -1,11 +1,17 @@
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
3
+
1
4
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Any
2
5
  from abc import ABC, abstractmethod
3
6
  from mindor.dsl.schema.component import ModelComponentConfig, ModelTaskType, ModelSourceConfig, DeviceMode
4
7
  from mindor.dsl.schema.action import ModelActionConfig
5
8
  from mindor.core.services import AsyncService
6
9
  from ...context import ComponentActionContext
7
- from transformers import PreTrainedModel, PreTrainedTokenizer, ProcessorMixin
8
- import torch, asyncio
10
+ import asyncio
11
+
12
+ if TYPE_CHECKING:
13
+ from transformers import PreTrainedModel, PreTrainedTokenizer, ProcessorMixin
14
+ import torch
9
15
 
10
16
  class ModelTaskService(AsyncService):
11
17
  def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
@@ -14,6 +20,9 @@ class ModelTaskService(AsyncService):
14
20
  self.id: str = id
15
21
  self.config: ModelComponentConfig = config
16
22
 
23
+ def get_setup_requirements(self) -> Optional[List[str]]:
24
+ return None
25
+
17
26
  async def run(self, action: ModelActionConfig, context: ComponentActionContext) -> Any:
18
27
  loop: asyncio.AbstractEventLoop = asyncio.get_running_loop()
19
28
 
@@ -17,7 +17,7 @@ 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 = self._create_task_service(self.config.task)
20
+ self.task_service: ModelTaskService = self._create_task_service(self.config.task)
21
21
 
22
22
  def _create_task_service(self, type: ModelTaskType) -> ModelTaskService:
23
23
  try:
@@ -27,6 +27,17 @@ class ModelComponent(ComponentService):
27
27
  except KeyError:
28
28
  raise ValueError(f"Unsupported model task type: {type}")
29
29
 
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
+ ]
40
+
30
41
  async def _serve(self) -> None:
31
42
  await self.task_service.start()
32
43
 
@@ -1,3 +1,6 @@
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
3
+
1
4
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Protocol, Any
2
5
  from mindor.dsl.schema.component import ModelComponentConfig, ImageToTextModelArchitecture
3
6
  from mindor.dsl.schema.action import ModelActionConfig, ImageToTextModelActionConfig
@@ -5,11 +8,14 @@ from mindor.core.utils.streamer import AsyncStreamer
5
8
  from mindor.core.logger import logging
6
9
  from ..base import ModelTaskService, ModelTaskType, register_model_task_service
7
10
  from ..base import ComponentActionContext
8
- from transformers import PreTrainedModel, PreTrainedTokenizer, ProcessorMixin, GenerationMixin, TextIteratorStreamer, StopStringCriteria
9
11
  from PIL import Image as PILImage
10
12
  from threading import Thread
11
- from torch import Tensor
12
- import torch, asyncio
13
+ import asyncio
14
+
15
+ if TYPE_CHECKING:
16
+ from transformers import PreTrainedModel, PreTrainedTokenizer, ProcessorMixin, GenerationMixin, TextIteratorStreamer, StopStringCriteria
17
+ from torch import Tensor
18
+ import torch
13
19
 
14
20
  class WithTokenizer(Protocol):
15
21
  tokenizer: PreTrainedTokenizer
@@ -22,6 +28,8 @@ class ImageToTextTaskAction:
22
28
  self.device: torch.device = device
23
29
 
24
30
  async def run(self, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
31
+ import torch
32
+
25
33
  image: Union[PILImage.Image, List[PILImage.Image]] = await context.render_image(self.config.image)
26
34
  prompt: Optional[Union[str, List[str]]] = await context.render_variable(self.config.prompt)
27
35
 
@@ -1,3 +1,6 @@
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
3
+
1
4
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
5
  from mindor.dsl.schema.component import ModelComponentConfig
3
6
  from mindor.dsl.schema.action import ModelActionConfig, SummarizationModelActionConfig
@@ -5,10 +8,13 @@ from mindor.core.utils.streamer import AsyncStreamer
5
8
  from mindor.core.logger import logging
6
9
  from ..base import ModelTaskService, ModelTaskType, register_model_task_service
7
10
  from ..base import ComponentActionContext
8
- from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, PreTrainedModel, PreTrainedTokenizer, GenerationMixin, TextIteratorStreamer, StopStringCriteria
9
- from threading import Thread
10
- from torch import Tensor
11
- import torch, asyncio
11
+ import asyncio
12
+
13
+ if TYPE_CHECKING:
14
+ from transformers import PreTrainedModel, PreTrainedTokenizer, GenerationMixin, TextIteratorStreamer, StopStringCriteria
15
+ from threading import Thread
16
+ from torch import Tensor
17
+ import torch
12
18
 
13
19
  class SummarizationTaskAction:
14
20
  def __init__(self, config: SummarizationModelActionConfig, model: PreTrainedModel, tokenizer: PreTrainedTokenizer, device: torch.device):
@@ -18,6 +24,8 @@ class SummarizationTaskAction:
18
24
  self.device: torch.device = device
19
25
 
20
26
  async def run(self, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
27
+ import torch
28
+
21
29
  text: Union[str, List[str]] = await context.render_variable(self.config.text)
22
30
 
23
31
  max_input_length = await context.render_variable(self.config.params.max_input_length)
@@ -119,7 +127,9 @@ class SummarizationTaskService(ModelTaskService):
119
127
  return await SummarizationTaskAction(action, self.model, self.tokenizer, self.device).run(context, loop)
120
128
 
121
129
  def _get_model_class(self) -> Type[PreTrainedModel]:
130
+ from transformers import AutoModelForSeq2SeqLM
122
131
  return AutoModelForSeq2SeqLM
123
132
 
124
133
  def _get_tokenizer_class(self) -> Type[PreTrainedTokenizer]:
134
+ from transformers import AutoTokenizer
125
135
  return AutoTokenizer
@@ -1,14 +1,19 @@
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
3
+
1
4
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
5
  from mindor.dsl.schema.component import ModelComponentConfig
3
6
  from mindor.dsl.schema.action import ModelActionConfig, TextClassificationModelActionConfig
4
7
  from mindor.core.logger import logging
5
8
  from ..base import ModelTaskService, ModelTaskType, register_model_task_service
6
9
  from ..base import ComponentActionContext
7
- from transformers import AutoModelForSequenceClassification, AutoTokenizer, PreTrainedModel, PreTrainedTokenizer
8
- from transformers.modeling_outputs import SequenceClassifierOutput
9
- import torch.nn.functional as F
10
- from torch import Tensor
11
- import torch, asyncio
10
+ import asyncio
11
+
12
+ if TYPE_CHECKING:
13
+ from transformers import PreTrainedModel, PreTrainedTokenizer
14
+ from transformers.modeling_outputs import SequenceClassifierOutput
15
+ from torch import Tensor
16
+ import torch
12
17
 
13
18
  class TextClassificationTaskAction:
14
19
  def __init__(self, config: TextClassificationModelActionConfig, model: PreTrainedModel, tokenizer: PreTrainedTokenizer, device: torch.device):
@@ -18,6 +23,8 @@ class TextClassificationTaskAction:
18
23
  self.device: torch.device = device
19
24
 
20
25
  async def run(self, context: ComponentActionContext, labels: Optional[List[str]]) -> Any:
26
+ import torch, torch.nn.functional as F
27
+
21
28
  text: Union[str, List[str]] = await context.render_variable(self.config.text)
22
29
 
23
30
  return_probabilities = await context.render_variable(self.config.params.return_probabilities)
@@ -115,7 +122,9 @@ class TextClassificationTaskService(ModelTaskService):
115
122
  return await TextClassificationTaskAction(action, self.model, self.tokenizer, self.device).run(context, self.config.labels)
116
123
 
117
124
  def _get_model_class(self) -> Type[PreTrainedModel]:
125
+ from transformers import AutoModelForSequenceClassification
118
126
  return AutoModelForSequenceClassification
119
127
 
120
128
  def _get_tokenizer_class(self) -> Type[PreTrainedTokenizer]:
129
+ from transformers import AutoTokenizer
121
130
  return AutoTokenizer
@@ -1,13 +1,19 @@
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
3
+
1
4
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
5
  from mindor.dsl.schema.component import ModelComponentConfig
3
6
  from mindor.dsl.schema.action import ModelActionConfig, TextEmbeddingModelActionConfig
4
7
  from mindor.core.logger import logging
5
8
  from ..base import ModelTaskService, ModelTaskType, register_model_task_service
6
9
  from ..base import ComponentActionContext
7
- from transformers import AutoModel, AutoTokenizer, PreTrainedModel, PreTrainedTokenizer
8
- from transformers.modeling_outputs import BaseModelOutput
9
- from torch import Tensor
10
- import torch, asyncio
10
+ import asyncio
11
+
12
+ if TYPE_CHECKING:
13
+ from transformers import PreTrainedModel, PreTrainedTokenizer
14
+ from transformers.modeling_outputs import BaseModelOutput
15
+ from torch import Tensor
16
+ import torch
11
17
 
12
18
  class TextEmbeddingTaskAction:
13
19
  def __init__(self, config: TextEmbeddingModelActionConfig, model: PreTrainedModel, tokenizer: PreTrainedTokenizer, device: torch.device):
@@ -17,6 +23,8 @@ class TextEmbeddingTaskAction:
17
23
  self.device: torch.device = device
18
24
 
19
25
  async def run(self, context: ComponentActionContext) -> Any:
26
+ import torch, torch.nn.functional as F
27
+
20
28
  text: Union[str, List[str]] = await context.render_variable(self.config.text)
21
29
 
22
30
  max_input_length = await context.render_variable(self.config.params.max_input_length)
@@ -44,7 +52,7 @@ class TextEmbeddingTaskAction:
44
52
  embeddings = self._pool_hidden_state(last_hidden_state, attention_mask, pooling)
45
53
 
46
54
  if normalize:
47
- embeddings = torch.nn.functional.normalize(embeddings, p=2, dim=1, eps=1e-12)
55
+ embeddings = F.normalize(embeddings, p=2, dim=1, eps=1e-12)
48
56
 
49
57
  embeddings = embeddings.cpu().tolist()
50
58
 
@@ -83,6 +91,8 @@ class TextEmbeddingTaskAction:
83
91
  return results
84
92
 
85
93
  def _pool_hidden_state(self, last_hidden_state: Tensor, attention_mask: Optional[Tensor], pooling: str) -> Tensor:
94
+ import torch
95
+
86
96
  if pooling == "mean":
87
97
  if attention_mask is not None:
88
98
  mask = attention_mask.unsqueeze(-1).expand(last_hidden_state.size())
@@ -131,7 +141,9 @@ class TextEmbeddingTaskService(ModelTaskService):
131
141
  return await TextEmbeddingTaskAction(action, self.model, self.tokenizer, self.device).run(context)
132
142
 
133
143
  def _get_model_class(self) -> Type[PreTrainedModel]:
144
+ from transformers import AutoModel
134
145
  return AutoModel
135
146
 
136
147
  def _get_tokenizer_class(self) -> Type[PreTrainedTokenizer]:
148
+ from transformers import AutoTokenizer
137
149
  return AutoTokenizer
@@ -1,3 +1,6 @@
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
3
+
1
4
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
5
  from mindor.dsl.schema.component import ModelComponentConfig
3
6
  from mindor.dsl.schema.action import ModelActionConfig, TextGenerationModelActionConfig
@@ -5,10 +8,13 @@ from mindor.core.utils.streamer import AsyncStreamer
5
8
  from mindor.core.logger import logging
6
9
  from ..base import ModelTaskService, ModelTaskType, register_model_task_service
7
10
  from ..base import ComponentActionContext
8
- from transformers import AutoModelForCausalLM, AutoTokenizer, PreTrainedModel, PreTrainedTokenizer, GenerationMixin, TextIteratorStreamer, StopStringCriteria
9
- from threading import Thread
10
- from torch import Tensor
11
- import torch, asyncio
11
+ import asyncio
12
+
13
+ if TYPE_CHECKING:
14
+ from transformers import PreTrainedModel, PreTrainedTokenizer, GenerationMixin, TextIteratorStreamer, StopStringCriteria
15
+ from threading import Thread
16
+ from torch import Tensor
17
+ import torch
12
18
 
13
19
  class TextGenerationTaskAction:
14
20
  def __init__(self, config: TextGenerationModelActionConfig, model: PreTrainedModel, tokenizer: PreTrainedTokenizer, device: torch.device):
@@ -18,6 +24,8 @@ class TextGenerationTaskAction:
18
24
  self.device: torch.device = device
19
25
 
20
26
  async def run(self, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
27
+ import torch
28
+
21
29
  prompt: Union[str, List[str]] = await context.render_variable(self.config.prompt)
22
30
 
23
31
  max_output_length = await context.render_variable(self.config.params.max_output_length)
@@ -120,7 +128,9 @@ class TextGenerationTaskService(ModelTaskService):
120
128
  return await TextGenerationTaskAction(action, self.model, self.tokenizer, self.device).run(context, loop)
121
129
 
122
130
  def _get_model_class(self) -> Type[PreTrainedModel]:
131
+ from transformers import AutoModelForCausalLM
123
132
  return AutoModelForCausalLM
124
133
 
125
134
  def _get_tokenizer_class(self) -> Type[PreTrainedTokenizer]:
135
+ from transformers import AutoTokenizer
126
136
  return AutoTokenizer
@@ -1,3 +1,6 @@
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
3
+
1
4
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
5
  from mindor.dsl.schema.component import ModelComponentConfig
3
6
  from mindor.dsl.schema.action import ModelActionConfig, TranslationModelActionConfig
@@ -5,10 +8,13 @@ from mindor.core.utils.streamer import AsyncStreamer
5
8
  from mindor.core.logger import logging
6
9
  from ..base import ModelTaskService, ModelTaskType, register_model_task_service
7
10
  from ..base import ComponentActionContext
8
- from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, PreTrainedModel, PreTrainedTokenizer, GenerationMixin, TextIteratorStreamer, StopStringCriteria
9
- from threading import Thread
10
- from torch import Tensor
11
- import torch, asyncio
11
+ import asyncio
12
+
13
+ if TYPE_CHECKING:
14
+ from transformers import PreTrainedModel, PreTrainedTokenizer, GenerationMixin, TextIteratorStreamer, StopStringCriteria
15
+ from threading import Thread
16
+ from torch import Tensor
17
+ import torch
12
18
 
13
19
  class TranslationTaskAction:
14
20
  def __init__(self, config: TranslationModelActionConfig, model: PreTrainedModel, tokenizer: PreTrainedTokenizer, device: torch.device):
@@ -18,6 +24,8 @@ class TranslationTaskAction:
18
24
  self.device: torch.device = device
19
25
 
20
26
  async def run(self, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
27
+ import torch
28
+
21
29
  text: Union[str, List[str]] = await context.render_variable(self.config.text)
22
30
 
23
31
  max_input_length = await context.render_variable(self.config.params.max_input_length)
@@ -119,7 +127,9 @@ class TranslationTaskService(ModelTaskService):
119
127
  return await TranslationTaskAction(action, self.model, self.tokenizer, self.device).run(context, loop)
120
128
 
121
129
  def _get_model_class(self) -> Type[PreTrainedModel]:
130
+ from transformers import AutoModelForSeq2SeqLM
122
131
  return AutoModelForSeq2SeqLM
123
132
 
124
133
  def _get_tokenizer_class(self) -> Type[PreTrainedTokenizer]:
134
+ from transformers import AutoTokenizer
125
135
  return AutoTokenizer
@@ -12,6 +12,9 @@ class VectorStoreService(AsyncService):
12
12
  self.id: str = id
13
13
  self.config: VectorStoreComponentConfig = config
14
14
 
15
+ def get_setup_requirements(self) -> Optional[List[str]]:
16
+ return None
17
+
15
18
  async def run(self, action: VectorStoreActionConfig, context: ComponentActionContext) -> Any:
16
19
  return await self._run(action, context)
17
20
 
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
+ from typing import TYPE_CHECKING
2
3
 
3
4
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Any
4
- from typing import TYPE_CHECKING
5
5
  from mindor.dsl.schema.component import VectorStoreComponentConfig
6
6
  from mindor.dsl.schema.action import VectorStoreActionConfig, ChromaVectorStoreActionConfig, VectorStoreActionMethod, VectorStoreFilterCondition, VectorStoreFilterOperator
7
7
  from mindor.core.utils.streamer import AsyncStreamer
@@ -233,6 +233,9 @@ class ChromaVectorStoreService(VectorStoreService):
233
233
 
234
234
  self.client: Optional[ChromaClient] = None
235
235
 
236
+ def get_setup_requirements(self) -> Optional[List[str]]:
237
+ return [ "chromadb" ]
238
+
236
239
  async def _serve(self) -> None:
237
240
  self.client = self._create_client()
238
241
 
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
+ from typing import TYPE_CHECKING
2
3
 
3
4
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
4
- from typing import TYPE_CHECKING
5
5
  from mindor.dsl.schema.component import VectorStoreComponentConfig
6
6
  from mindor.dsl.schema.action import VectorStoreActionConfig, MilvusVectorStoreActionConfig, VectorStoreActionMethod, VectorStoreFilterCondition, VectorStoreFilterOperator
7
7
  from mindor.core.utils.streamer import AsyncStreamer
@@ -304,6 +304,9 @@ class MilvusVectorStoreService(VectorStoreService):
304
304
 
305
305
  self.client: Optional[AsyncMilvusClient] = None
306
306
 
307
+ def get_setup_requirements(self) -> Optional[List[str]]:
308
+ return [ "pymilvus" ]
309
+
307
310
  async def _serve(self) -> None:
308
311
  from pymilvus import AsyncMilvusClient
309
312
 
@@ -17,7 +17,7 @@ class VectorStoreComponent(ComponentService):
17
17
  def __init__(self, id: str, config: VectorStoreComponentConfig, global_configs: ComponentGlobalConfigs, daemon: bool):
18
18
  super().__init__(id, config, global_configs, daemon)
19
19
 
20
- self.store_service = self._create_store_service(self.config.driver)
20
+ self.store_service: VectorStoreService = self._create_store_service(self.config.driver)
21
21
 
22
22
  def _create_store_service(self, driver: VectorStoreDriver) -> VectorStoreService:
23
23
  try:
@@ -27,6 +27,9 @@ class VectorStoreComponent(ComponentService):
27
27
  except KeyError:
28
28
  raise ValueError(f"Unsupported vector store driver: {driver}")
29
29
 
30
+ def _get_setup_requirements(self) -> Optional[List[str]]:
31
+ return self.store_service.get_setup_requirements()
32
+
30
33
  async def _serve(self) -> None:
31
34
  await self.store_service.start()
32
35
 
@@ -73,9 +73,11 @@ class ControllerService(AsyncService):
73
73
  await self._stop_loggers()
74
74
  return
75
75
 
76
+ await self._start_loggers()
76
77
  await self._setup_components()
77
78
  await self.start()
78
79
  await self.wait_until_stopped()
80
+ await self._stop_loggers()
79
81
  return
80
82
 
81
83
  if self.config.runtime.type == RuntimeType.DOCKER:
@@ -100,8 +102,10 @@ class ControllerService(AsyncService):
100
102
 
101
103
  async def start_services(self, verbose: bool) -> None:
102
104
  if self.config.runtime.type == RuntimeType.NATIVE:
105
+ await self._start_loggers()
103
106
  await self.start()
104
107
  await self.wait_until_stopped()
108
+ await self._stop_loggers()
105
109
  return
106
110
 
107
111
  if self.config.runtime.type == RuntimeType.DOCKER:
@@ -147,8 +151,6 @@ class ControllerService(AsyncService):
147
151
  if self.task_queue:
148
152
  await self.task_queue.start()
149
153
 
150
- await self._start_loggers()
151
-
152
154
  if self.daemon:
153
155
  await self._start_gateways()
154
156
  await self._start_listeners()
@@ -175,9 +177,6 @@ class ControllerService(AsyncService):
175
177
 
176
178
  await super()._stop()
177
179
 
178
- async def _on_stop(self) -> None:
179
- await self._stop_loggers()
180
-
181
180
  async def _watch_stop_request(self, interval: float = 1.0) -> None:
182
181
  stop_file = Path.cwd() / ".stop"
183
182
 
@@ -26,12 +26,7 @@ RUN pip install --no-cache-dir \
26
26
  pyngrok \
27
27
  ulid \
28
28
  gradio \
29
- Pillow \
30
- 'transformers>=4.21.0' \
31
- torch \
32
- sentencepiece \
33
- accelerate \
34
- docker
29
+ Pillow
35
30
 
36
31
  COPY requirements.txt .
37
32
  RUN pip install --no-cache-dir -r requirements.txt
@@ -52,8 +52,6 @@ class AsyncService(ABC):
52
52
  if self.daemon_task:
53
53
  await self.daemon_task
54
54
 
55
- await self._on_stop()
56
-
57
55
  def run_in_thread(self, runner: Callable[[], Awaitable[Any]]) -> asyncio.Future:
58
56
  loop = asyncio.get_running_loop()
59
57
  future: asyncio.Future = loop.create_future()
@@ -94,9 +92,6 @@ class AsyncService(ABC):
94
92
  async def _is_ready(self) -> bool:
95
93
  return True
96
94
 
97
- async def _on_stop(self) -> None:
98
- pass
99
-
100
95
  @abstractmethod
101
96
  async def _serve(self) -> None:
102
97
  pass
@@ -0,0 +1,57 @@
1
+ import sys, subprocess, re
2
+ import asyncio
3
+
4
+ _VERSION_SPEC_PATTERN = re.compile(r'^([a-zA-Z0-9_\-\.]+)([><=!]+.*)?$')
5
+
6
+ async def install_package(package_spec: str) -> None:
7
+ """Install a package using pip.
8
+
9
+ Args:
10
+ package_spec: Package specification to install (e.g., "torch>=2.0.0")
11
+ """
12
+ process = await asyncio.create_subprocess_exec(
13
+ sys.executable, "-m", "pip", "install", package_spec,
14
+ stdout=asyncio.subprocess.PIPE,
15
+ stderr=asyncio.subprocess.PIPE
16
+ )
17
+
18
+ stdout, stderr = await process.communicate()
19
+
20
+ if process.returncode != 0:
21
+ raise subprocess.CalledProcessError(
22
+ process.returncode,
23
+ [sys.executable, "-m", "pip", "install", package_spec],
24
+ output=stdout,
25
+ stderr=stderr
26
+ )
27
+
28
+ def extract_module_name(package_spec: str) -> str:
29
+ """Extract module name from package specification.
30
+
31
+ Args:
32
+ package_spec: Package specification like "torch>=2.0.0" or "transformers"
33
+
34
+ Returns:
35
+ Module name for importing (e.g., "torch" from "torch>=2.0.0")
36
+ """
37
+ match = re.match(_VERSION_SPEC_PATTERN, package_spec)
38
+
39
+ if match:
40
+ return match.group(1)
41
+
42
+ return None
43
+
44
+ def is_module_installed(module_name: str) -> bool:
45
+ """Check if a module is installed and importable.
46
+
47
+ Args:
48
+ module_name: Name of the module to check
49
+
50
+ Returns:
51
+ True if module can be imported, False otherwise
52
+ """
53
+ try:
54
+ __import__(module_name)
55
+ return True
56
+ except ImportError:
57
+ return False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: model-compose
3
- Version: 0.3.15
3
+ Version: 0.3.17
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
@@ -20,10 +20,6 @@ Requires-Dist: pyngrok
20
20
  Requires-Dist: ulid
21
21
  Requires-Dist: gradio
22
22
  Requires-Dist: Pillow
23
- Requires-Dist: transformers>=4.21.0
24
- Requires-Dist: torch
25
- Requires-Dist: sentencepiece
26
- Requires-Dist: accelerate
27
23
  Requires-Dist: docker
28
24
  Dynamic: license-file
29
25
 
@@ -90,6 +90,7 @@ src/mindor/core/utils/http_response.py
90
90
  src/mindor/core/utils/http_status.py
91
91
  src/mindor/core/utils/image.py
92
92
  src/mindor/core/utils/mcp_client.py
93
+ src/mindor/core/utils/package.py
93
94
  src/mindor/core/utils/renderers.py
94
95
  src/mindor/core/utils/resolvers.py
95
96
  src/mindor/core/utils/shell.py
@@ -11,8 +11,4 @@ pyngrok
11
11
  ulid
12
12
  gradio
13
13
  Pillow
14
- transformers>=4.21.0
15
- torch
16
- sentencepiece
17
- accelerate
18
14
  docker
File without changes
File without changes
File without changes