model-compose 0.3.14__tar.gz → 0.3.16__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 (257) hide show
  1. {model_compose-0.3.14/src/model_compose.egg-info → model_compose-0.3.16}/PKG-INFO +1 -5
  2. {model_compose-0.3.14 → model_compose-0.3.16}/pyproject.toml +1 -5
  3. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/base.py +23 -0
  4. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/http_server.py +10 -1
  5. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/base.py +25 -13
  6. model_compose-0.3.16/src/mindor/core/component/services/model/loader.py +25 -0
  7. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/model.py +12 -1
  8. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/tasks/image_to_text.py +40 -6
  9. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/tasks/summarization.py +26 -11
  10. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/tasks/text_classification.py +14 -5
  11. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/tasks/text_embedding.py +17 -5
  12. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/tasks/text_generation.py +29 -5
  13. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/tasks/translation.py +26 -11
  14. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/vector_store/base.py +3 -0
  15. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/vector_store/drivers/chroma.py +4 -1
  16. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/vector_store/drivers/milvus.py +4 -1
  17. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/vector_store/vector_store.py +4 -1
  18. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/base.py +4 -5
  19. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/services/async_service.py +13 -5
  20. model_compose-0.3.16/src/mindor/core/utils/package.py +57 -0
  21. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/shell.py +6 -14
  22. model_compose-0.3.16/src/mindor/dsl/schema/action/impl/common.py +7 -0
  23. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/http_client.py +19 -19
  24. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/http_server.py +17 -17
  25. {model_compose-0.3.14/src/mindor/dsl/schema/component → model_compose-0.3.16/src/mindor/dsl/schema/action}/impl/model/impl/__init__.py +1 -0
  26. model_compose-0.3.16/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +41 -0
  27. model_compose-0.3.16/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +24 -0
  28. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/model/impl/summarization.py +7 -4
  29. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +9 -3
  30. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/model/impl/translation.py +8 -5
  31. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/vector_store/impl/common.py +10 -10
  32. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/http_client.py +2 -2
  33. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/mcp_client.py +1 -1
  34. {model_compose-0.3.14/src/mindor/dsl/schema/action → model_compose-0.3.16/src/mindor/dsl/schema/component}/impl/model/impl/__init__.py +1 -0
  35. model_compose-0.3.16/src/mindor/dsl/schema/component/impl/model/impl/chat_completion.py +17 -0
  36. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/impl/common.py +9 -4
  37. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/vector_store/impl/common.py +1 -1
  38. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/compose.py +5 -5
  39. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/webui/impl/common.py +1 -1
  40. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/common.py +3 -3
  41. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/common.py +1 -1
  42. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/impl/random_router.py +3 -3
  43. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/listener/impl/common.py +3 -3
  44. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/listener/impl/http_callback.py +10 -10
  45. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/logger/impl/common.py +2 -2
  46. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/logger/impl/file.py +1 -1
  47. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/runtime/impl/common.py +1 -1
  48. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/workflow.py +2 -2
  49. {model_compose-0.3.14 → model_compose-0.3.16/src/model_compose.egg-info}/PKG-INFO +1 -5
  50. {model_compose-0.3.14 → model_compose-0.3.16}/src/model_compose.egg-info/SOURCES.txt +4 -0
  51. {model_compose-0.3.14 → model_compose-0.3.16}/src/model_compose.egg-info/requires.txt +0 -4
  52. model_compose-0.3.14/src/mindor/dsl/schema/action/impl/common.py +0 -7
  53. model_compose-0.3.14/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +0 -12
  54. {model_compose-0.3.14 → model_compose-0.3.16}/LICENSE +0 -0
  55. {model_compose-0.3.14 → model_compose-0.3.16}/README.md +0 -0
  56. {model_compose-0.3.14 → model_compose-0.3.16}/setup.cfg +0 -0
  57. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/__init__.py +0 -0
  58. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/cli/__init__.py +0 -0
  59. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/cli/compose.py +0 -0
  60. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/__init__.py +0 -0
  61. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/__init__.py +0 -0
  62. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/component.py +0 -0
  63. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/context.py +0 -0
  64. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/__init__.py +0 -0
  65. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/http_client.py +0 -0
  66. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/mcp_client.py +0 -0
  67. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/mcp_server.py +0 -0
  68. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/__init__.py +0 -0
  69. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/tasks/__init__.py +0 -0
  70. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/shell.py +0 -0
  71. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/text_splitter.py +0 -0
  72. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/vector_store/__init__.py +0 -0
  73. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/vector_store/drivers/__init__.py +0 -0
  74. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/workflow.py +0 -0
  75. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/compose/__init__.py +0 -0
  76. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/compose/compose.py +0 -0
  77. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/compose/manager.py +0 -0
  78. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/__init__.py +0 -0
  79. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/controller.py +0 -0
  80. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runner/__init__.py +0 -0
  81. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runner/client.py +0 -0
  82. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runner/http_client.py +0 -0
  83. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runner/mcp_client.py +0 -0
  84. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runner/runner.py +0 -0
  85. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runtime/__init__.py +0 -0
  86. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
  87. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runtime/docker/context/Dockerfile +0 -0
  88. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runtime/docker/docker.py +0 -0
  89. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runtime/native/__init__.py +0 -0
  90. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runtime/native/native.py +0 -0
  91. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runtime/specs.py +0 -0
  92. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/services/__init__.py +0 -0
  93. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/services/http_server.py +0 -0
  94. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/services/mcp_server.py +0 -0
  95. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/webui/__init__.py +0 -0
  96. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/webui/gradio.py +0 -0
  97. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/webui/webui.py +0 -0
  98. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/gateway/__init__.py +0 -0
  99. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/gateway/base.py +0 -0
  100. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/gateway/gateway.py +0 -0
  101. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/gateway/services/__init__.py +0 -0
  102. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/gateway/services/http_tunnel.py +0 -0
  103. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/gateway/services/ssh_tunnel.py +0 -0
  104. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/listener/__init__.py +0 -0
  105. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/listener/base.py +0 -0
  106. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/listener/listener.py +0 -0
  107. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/listener/services/__init__.py +0 -0
  108. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/listener/services/http_callback.py +0 -0
  109. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/logger/__init__.py +0 -0
  110. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/logger/base.py +0 -0
  111. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/logger/logger.py +0 -0
  112. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/logger/logging.py +0 -0
  113. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/logger/services/__init__.py +0 -0
  114. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/logger/services/console.py +0 -0
  115. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/logger/services/file.py +0 -0
  116. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/runtime/__init__.py +0 -0
  117. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/runtime/docker/__init__.py +0 -0
  118. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/runtime/docker/docker.py +0 -0
  119. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/runtime/env.py +0 -0
  120. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/services/__init__.py +0 -0
  121. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/__init__.py +0 -0
  122. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/caching.py +0 -0
  123. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/http_client.py +0 -0
  124. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/http_request.py +0 -0
  125. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/http_response.py +0 -0
  126. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/http_status.py +0 -0
  127. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/image.py +0 -0
  128. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/mcp_client.py +0 -0
  129. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/renderers.py +0 -0
  130. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/resolvers.py +0 -0
  131. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/ssh_client.py +0 -0
  132. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/streamer.py +0 -0
  133. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/streaming.py +0 -0
  134. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/time.py +0 -0
  135. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/workqueue.py +0 -0
  136. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/__init__.py +0 -0
  137. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/context.py +0 -0
  138. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/__init__.py +0 -0
  139. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/base.py +0 -0
  140. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
  141. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/impl/action.py +0 -0
  142. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/impl/delay.py +0 -0
  143. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/impl/filter.py +0 -0
  144. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/impl/if_.py +0 -0
  145. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/impl/random_router.py +0 -0
  146. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/impl/switch.py +0 -0
  147. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/job.py +0 -0
  148. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/schema.py +0 -0
  149. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/workflow.py +0 -0
  150. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/__init__.py +0 -0
  151. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/loader.py +0 -0
  152. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/__init__.py +0 -0
  153. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/__init__.py +0 -0
  154. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/action.py +0 -0
  155. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/__init__.py +0 -0
  156. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
  157. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
  158. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
  159. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/model/impl/common.py +0 -0
  160. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +0 -0
  161. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +0 -0
  162. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/model/model.py +0 -0
  163. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
  164. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/text_splitter.py +0 -0
  165. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/vector_store/__init__.py +0 -0
  166. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/vector_store/impl/__init__.py +0 -0
  167. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/vector_store/impl/chroma.py +0 -0
  168. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/vector_store/impl/faiss.py +0 -0
  169. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/vector_store/impl/milvus.py +0 -0
  170. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/vector_store/impl/qdrant.py +0 -0
  171. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/vector_store/vector_store.py +0 -0
  172. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
  173. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/__init__.py +0 -0
  174. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/component.py +0 -0
  175. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/__init__.py +0 -0
  176. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/common.py +0 -0
  177. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
  178. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
  179. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
  180. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/impl/image_to_text.py +0 -0
  181. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/impl/summarization.py +0 -0
  182. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +0 -0
  183. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +0 -0
  184. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +0 -0
  185. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/impl/translation.py +0 -0
  186. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/impl/types.py +0 -0
  187. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/model.py +0 -0
  188. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
  189. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/text_splitter.py +0 -0
  190. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/types.py +0 -0
  191. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/vector_store/__init__.py +0 -0
  192. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/vector_store/impl/__init__.py +0 -0
  193. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/vector_store/impl/chroma.py +0 -0
  194. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/vector_store/impl/faiss.py +0 -0
  195. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/vector_store/impl/milvus.py +0 -0
  196. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +0 -0
  197. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/vector_store/impl/types.py +0 -0
  198. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/vector_store/vector_store.py +0 -0
  199. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
  200. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/__init__.py +0 -0
  201. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/controller.py +0 -0
  202. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
  203. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/impl/common.py +0 -0
  204. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/impl/http_server.py +0 -0
  205. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/impl/mcp_server.py +0 -0
  206. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/impl/types.py +0 -0
  207. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/webui/__init__.py +0 -0
  208. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/webui/impl/__init__.py +0 -0
  209. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +0 -0
  210. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/webui/impl/gradio.py +0 -0
  211. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/webui/impl/static.py +0 -0
  212. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/webui/webui.py +0 -0
  213. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
  214. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
  215. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
  216. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/http_tunnel/__init__.py +0 -0
  217. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/http_tunnel/http_tunnel.py +0 -0
  218. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/__init__.py +0 -0
  219. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/cloudflare.py +0 -0
  220. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/ngrok.py +0 -0
  221. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -0
  222. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
  223. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/__init__.py +0 -0
  224. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
  225. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/impl/action.py +0 -0
  226. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/impl/common.py +0 -0
  227. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
  228. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/impl/filter.py +0 -0
  229. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
  230. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
  231. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/impl/types.py +0 -0
  232. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/job.py +0 -0
  233. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/listener/__init__.py +0 -0
  234. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/listener/impl/__init__.py +0 -0
  235. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/listener/impl/types.py +0 -0
  236. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/listener/listener.py +0 -0
  237. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/logger/__init__.py +0 -0
  238. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
  239. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
  240. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
  241. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/logger/logger.py +0 -0
  242. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
  243. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
  244. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
  245. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
  246. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
  247. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
  248. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/transport/__init__.py +0 -0
  249. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/transport/http.py +0 -0
  250. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/transport/ssh.py +0 -0
  251. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/utils/__init__.py +0 -0
  252. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/utils/annotation.py +0 -0
  253. {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/utils/enum.py +0 -0
  254. {model_compose-0.3.14 → model_compose-0.3.16}/src/model_compose.egg-info/dependency_links.txt +0 -0
  255. {model_compose-0.3.14 → model_compose-0.3.16}/src/model_compose.egg-info/entry_points.txt +0 -0
  256. {model_compose-0.3.14 → model_compose-0.3.16}/src/model_compose.egg-info/top_level.txt +0 -0
  257. {model_compose-0.3.14 → model_compose-0.3.16}/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.14
3
+ Version: 0.3.16
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.14"
3
+ version = "0.3.16"
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,11 +61,19 @@ 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:
65
71
  await self._teardown()
66
72
 
73
+ async def start(self, background: bool = False) -> None:
74
+ await super().start(background)
75
+ await self.wait_until_ready()
76
+
67
77
  async def run(self, action_id: Union[str, None], run_id: str, input: Dict[str, Any]) -> Dict[str, Any]:
68
78
  _, action = ActionResolver(self.config.actions).resolve(action_id)
69
79
  context = ComponentActionContext(run_id, input)
@@ -79,6 +89,9 @@ class ComponentService(AsyncService):
79
89
  async def _teardown(self) -> None:
80
90
  pass
81
91
 
92
+ async def _get_setup_requirements(self) -> Optional[List[str]]:
93
+ return None
94
+
82
95
  async def _start(self) -> None:
83
96
  if self.queue:
84
97
  await self.queue.start()
@@ -97,10 +110,20 @@ class ComponentService(AsyncService):
97
110
  async def _shutdown(self) -> None:
98
111
  pass
99
112
 
113
+ async def _is_ready(self) -> bool:
114
+ return True
115
+
100
116
  @abstractmethod
101
117
  async def _run(self, action: ActionConfig, context: ComponentActionContext) -> Any:
102
118
  pass
103
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
+
104
127
  def register_component(type: ComponentType):
105
128
  def decorator(cls: Type[ComponentService]) -> Type[ComponentService]:
106
129
  ComponentRegistry[type] = cls
@@ -161,10 +161,19 @@ class HttpServerComponent(ComponentService):
161
161
 
162
162
  async def _serve(self) -> None:
163
163
  if self.config.manage.scripts.start:
164
- await run_command_streaming(self.config.manage.scripts.start, self.config.manage.working_dir, self.config.manage.env, block=False)
164
+ await run_command_streaming(self.config.manage.scripts.start, self.config.manage.working_dir, self.config.manage.env)
165
165
 
166
166
  async def _shutdown(self) -> None:
167
167
  pass
168
168
 
169
+ async def _is_ready(self) -> bool:
170
+ try:
171
+ _, writer = await asyncio.open_connection("localhost", self.config.port)
172
+ writer.close()
173
+ await writer.wait_closed()
174
+ return True
175
+ except (ConnectionRefusedError, OSError):
176
+ return False
177
+
169
178
  async def _run(self, action: ActionConfig, context: ComponentActionContext) -> Any:
170
179
  return await HttpServerAction(action).run(context, self.client)
@@ -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
- from mindor.dsl.schema.component import ModelComponentConfig, ModelTaskType, DeviceMode
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
 
@@ -26,7 +35,7 @@ class ModelTaskService(AsyncService):
26
35
  async def _run(self, action: ModelActionConfig, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
27
36
  pass
28
37
 
29
- def _load_pretrained_model(self, extra_params: Optional[Dict[str, Any]] = None) -> PreTrainedModel:
38
+ def _load_pretrained_model(self, extra_params: Optional[Dict[str, Any]] = None) -> Union[PreTrainedModel, torch.nn.Module]:
30
39
  params = self._get_common_model_params()
31
40
 
32
41
  if extra_params:
@@ -42,6 +51,10 @@ class ModelTaskService(AsyncService):
42
51
  def _get_common_model_params(self) -> Dict[str, Any]:
43
52
  params: Dict[str, Any] = {}
44
53
 
54
+ if isinstance(self.config.model, ModelSourceConfig):
55
+ if self.config.model.revision:
56
+ params["revision"] = self.config.model.revision
57
+
45
58
  if self.config.device_mode != DeviceMode.SINGLE:
46
59
  params["device_map"] = self.config.device_mode.value
47
60
 
@@ -51,9 +64,6 @@ class ModelTaskService(AsyncService):
51
64
  if self.config.low_cpu_mem_usage:
52
65
  params["low_cpu_mem_usage"] = True
53
66
 
54
- if self.config.revision:
55
- params["revision"] = self.config.revision
56
-
57
67
  if self.config.cache_dir:
58
68
  params["cache_dir"] = self.config.cache_dir
59
69
 
@@ -75,12 +85,13 @@ class ModelTaskService(AsyncService):
75
85
 
76
86
  def _get_common_tokenizer_params(self) -> Dict[str, Any]:
77
87
  params: Dict[str, Any] = {}
88
+
89
+ if isinstance(self.config.model, ModelSourceConfig):
90
+ if self.config.model.revision:
91
+ params["revision"] = self.config.model.revision
78
92
 
79
93
  if not self.config.fast_tokenizer:
80
94
  params["use_fast"] = False
81
-
82
- if self.config.revision:
83
- params["revision"] = self.config.revision
84
95
 
85
96
  if self.config.cache_dir:
86
97
  params["cache_dir"] = self.config.cache_dir
@@ -104,9 +115,10 @@ class ModelTaskService(AsyncService):
104
115
  def _get_common_processor_params(self) -> Dict[str, Any]:
105
116
  params: Dict[str, Any] = {}
106
117
 
107
- if self.config.revision:
108
- params["revision"] = self.config.revision
109
-
118
+ if isinstance(self.config.model, ModelSourceConfig):
119
+ if self.config.model.revision:
120
+ params["revision"] = self.config.model.revision
121
+
110
122
  if self.config.cache_dir:
111
123
  params["cache_dir"] = self.config.cache_dir
112
124
 
@@ -0,0 +1,25 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, AsyncIterator, Any
2
+ from transformers import PreTrainedModel
3
+ import torch
4
+
5
+ async def load_model(
6
+ provider: str,
7
+ model_id: str,
8
+ revision: Optional[str],
9
+ filename: Optional[str],
10
+ model_class: Type[PreTrainedModel],
11
+ *,
12
+ cache_dir: Optional[str] = None,
13
+ local_files_only: bool = False
14
+ ) -> Union[PreTrainedModel, torch.nn.Module]:
15
+ if provider in [ "huggingface.co", "huggingface.com", "huggingface" ]:
16
+ pass
17
+
18
+ async def load_model_from_uri(
19
+ uri: str,
20
+ model_class: Type[PreTrainedModel],
21
+ *,
22
+ cache_dir: Optional[str] = None,
23
+ local_files_only: bool = False
24
+ ) -> Union[PreTrainedModel, torch.nn.Module]:
25
+ pass
@@ -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
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,11 +28,25 @@ 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
 
28
- batch_size = await context.render_variable(self.config.params.batch_size)
29
- stream = await context.render_variable(self.config.stream)
36
+ max_input_length = await context.render_variable(self.config.params.max_input_length)
37
+ max_output_length = await context.render_variable(self.config.params.max_output_length)
38
+ min_output_length = await context.render_variable(self.config.params.min_output_length)
39
+ num_return_sequences = await context.render_variable(self.config.params.num_return_sequences)
40
+ do_sample = await context.render_variable(self.config.params.do_sample)
41
+ temperature = await context.render_variable(self.config.params.temperature) if do_sample else None
42
+ top_k = await context.render_variable(self.config.params.top_k) if do_sample else None
43
+ top_p = await context.render_variable(self.config.params.top_p) if do_sample else None
44
+ num_beams = await context.render_variable(self.config.params.num_beams)
45
+ length_penalty = await context.render_variable(self.config.params.length_penalty) if num_beams > 1 else None
46
+ early_stopping = await context.render_variable(self.config.params.early_stopping) if num_beams > 1 else False
47
+ stop_sequences = await context.render_variable(self.config.params.stop_sequences)
48
+ batch_size = await context.render_variable(self.config.params.batch_size)
49
+ stream = await context.render_variable(self.config.stream)
30
50
 
31
51
  is_single_input: bool = bool(not isinstance(images, list))
32
52
  images: List[PILImage.Image] = [ image ] if is_single_input else image
@@ -37,17 +57,31 @@ class ImageToTextTaskAction:
37
57
  raise ValueError("Streaming mode only supports a single input image with batch size of 1.")
38
58
 
39
59
  streamer = TextIteratorStreamer(self.processor.tokenizer, skip_prompt=True, skip_special_tokens=True) if stream else None
60
+ stopping_criteria = [ StopStringCriteria(self.processor.tokenizer, stop_sequences) ] if stop_sequences else None
40
61
  for index in range(0, len(images), batch_size):
41
62
  batch_images = images[index:index + batch_size]
42
63
  batch_prompts = prompts[index:index + batch_size] if prompts else None
43
64
 
44
- inputs: Tensor = self.processor(images=batch_images, text=batch_prompts, return_tensors="pt")
65
+ inputs: Tensor = self.processor(images=batch_images, text=batch_prompts, max_length=max_input_length, return_tensors="pt")
45
66
  inputs = inputs.to(self.device)
46
67
 
47
68
  def _generate():
48
69
  with torch.inference_mode():
49
70
  outputs = self.model.generate(
50
71
  **inputs,
72
+ max_new_tokens=max_output_length,
73
+ min_length=min_output_length,
74
+ num_return_sequences=num_return_sequences,
75
+ do_sample=do_sample,
76
+ temperature=temperature,
77
+ top_k=top_k,
78
+ top_p=top_p,
79
+ num_beams=num_beams,
80
+ length_penalty=length_penalty,
81
+ early_stopping=early_stopping,
82
+ pad_token_id=getattr(self.processor.tokenizer, "pad_token_id", None),
83
+ eos_token_id=getattr(self.processor.tokenizer, "eos_token_id", None),
84
+ stopping_criteria=stopping_criteria,
51
85
  streamer=streamer
52
86
  )
53
87
 
@@ -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
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,17 +24,21 @@ 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)
24
32
  max_output_length = await context.render_variable(self.config.params.max_output_length)
25
33
  min_output_length = await context.render_variable(self.config.params.min_output_length)
26
- num_beams = await context.render_variable(self.config.params.num_beams)
27
- length_penalty = await context.render_variable(self.config.params.length_penalty) if num_beams > 1 else None
28
- early_stopping = await context.render_variable(self.config.params.early_stopping) if num_beams > 1 else False
29
34
  do_sample = await context.render_variable(self.config.params.do_sample)
35
+ temperature = await context.render_variable(self.config.params.temperature) if do_sample else None
30
36
  top_k = await context.render_variable(self.config.params.top_k) if do_sample else None
31
37
  top_p = await context.render_variable(self.config.params.top_p) if do_sample else None
38
+ num_beams = await context.render_variable(self.config.params.num_beams)
39
+ length_penalty = await context.render_variable(self.config.params.length_penalty) if num_beams > 1 else None
40
+ early_stopping = await context.render_variable(self.config.params.early_stopping) if num_beams > 1 else False
41
+ stop_sequences = await context.render_variable(self.config.params.stop_sequences)
32
42
  batch_size = await context.render_variable(self.config.params.batch_size)
33
43
  stream = await context.render_variable(self.config.stream)
34
44
 
@@ -40,6 +50,7 @@ class SummarizationTaskAction:
40
50
  raise ValueError("Streaming mode only supports a single input text with batch size of 1.")
41
51
 
42
52
  streamer = TextIteratorStreamer(self.tokenizer, skip_prompt=True, skip_special_tokens=True) if stream else None
53
+ stopping_criteria = [ StopStringCriteria(self.tokenizer, stop_sequences) ] if stop_sequences else None
43
54
  for index in range(0, len(texts), batch_size):
44
55
  batch_texts = texts[index:index + batch_size]
45
56
  inputs: Dict[str, Tensor] = self.tokenizer(batch_texts, return_tensors="pt", max_length=max_input_length, padding=True, truncation=True)
@@ -49,16 +60,18 @@ class SummarizationTaskAction:
49
60
  with torch.inference_mode():
50
61
  outputs = self.model.generate(
51
62
  **inputs,
52
- max_length=max_output_length,
63
+ max_new_tokens=max_output_length,
53
64
  min_length=min_output_length,
54
- num_beams=num_beams,
55
- length_penalty=length_penalty,
56
- early_stopping=early_stopping,
57
65
  do_sample=do_sample,
66
+ temperature=temperature,
58
67
  top_k=top_k,
59
68
  top_p=top_p,
69
+ num_beams=num_beams,
70
+ length_penalty=length_penalty,
71
+ early_stopping=early_stopping,
60
72
  pad_token_id=getattr(self.tokenizer, "pad_token_id", None),
61
73
  eos_token_id=getattr(self.tokenizer, "eos_token_id", None),
74
+ stopping_criteria=stopping_criteria,
62
75
  streamer=streamer
63
76
  )
64
77
 
@@ -114,7 +127,9 @@ class SummarizationTaskService(ModelTaskService):
114
127
  return await SummarizationTaskAction(action, self.model, self.tokenizer, self.device).run(context, loop)
115
128
 
116
129
  def _get_model_class(self) -> Type[PreTrainedModel]:
130
+ from transformers import AutoModelForSeq2SeqLM
117
131
  return AutoModelForSeq2SeqLM
118
132
 
119
133
  def _get_tokenizer_class(self) -> Type[PreTrainedTokenizer]:
134
+ from transformers import AutoTokenizer
120
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
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,13 +24,21 @@ 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)
32
+ min_output_length = await context.render_variable(self.config.params.min_output_length)
24
33
  num_return_sequences = await context.render_variable(self.config.params.num_return_sequences)
34
+ do_sample = await context.render_variable(self.config.params.do_sample)
25
35
  temperature = await context.render_variable(self.config.params.temperature)
26
36
  top_k = await context.render_variable(self.config.params.top_k)
27
37
  top_p = await context.render_variable(self.config.params.top_p)
38
+ num_beams = await context.render_variable(self.config.params.num_beams)
39
+ length_penalty = await context.render_variable(self.config.params.length_penalty) if num_beams > 1 else None
40
+ early_stopping = await context.render_variable(self.config.params.early_stopping) if num_beams > 1 else False
41
+ stop_sequences = await context.render_variable(self.config.params.stop_sequences)
28
42
  batch_size = await context.render_variable(self.config.params.batch_size)
29
43
  stream = await context.render_variable(self.config.stream)
30
44
 
@@ -36,6 +50,7 @@ class TextGenerationTaskAction:
36
50
  raise ValueError("Streaming mode only supports a single input prompt with batch size of 1.")
37
51
 
38
52
  streamer = TextIteratorStreamer(self.tokenizer, skip_prompt=True, skip_special_tokens=True) if stream else None
53
+ stopping_criteria = [ StopStringCriteria(self.tokenizer, stop_sequences) ] if stop_sequences else None
39
54
  for index in range(0, len(prompts), batch_size):
40
55
  batch_prompts = prompts[index:index + batch_size]
41
56
  inputs: Dict[str, Tensor] = self.tokenizer(batch_prompts, return_tensors="pt", padding=True, truncation=True)
@@ -46,11 +61,18 @@ class TextGenerationTaskAction:
46
61
  outputs = self.model.generate(
47
62
  **inputs,
48
63
  max_new_tokens=max_output_length,
64
+ min_length=min_output_length,
49
65
  num_return_sequences=num_return_sequences,
66
+ do_sample=do_sample,
50
67
  temperature=temperature,
51
- do_sample=True,
52
68
  top_k=top_k,
53
69
  top_p=top_p,
70
+ num_beams=num_beams,
71
+ length_penalty=length_penalty,
72
+ early_stopping=early_stopping,
73
+ pad_token_id=getattr(self.tokenizer, "pad_token_id", None),
74
+ eos_token_id=getattr(self.tokenizer, "eos_token_id", None),
75
+ stopping_criteria=stopping_criteria,
54
76
  streamer=streamer
55
77
  )
56
78
 
@@ -106,7 +128,9 @@ class TextGenerationTaskService(ModelTaskService):
106
128
  return await TextGenerationTaskAction(action, self.model, self.tokenizer, self.device).run(context, loop)
107
129
 
108
130
  def _get_model_class(self) -> Type[PreTrainedModel]:
131
+ from transformers import AutoModelForCausalLM
109
132
  return AutoModelForCausalLM
110
133
 
111
134
  def _get_tokenizer_class(self) -> Type[PreTrainedTokenizer]:
135
+ from transformers import AutoTokenizer
112
136
  return AutoTokenizer