model-compose 0.2.9__tar.gz → 0.2.11__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 (183) hide show
  1. {model_compose-0.2.9/src/model_compose.egg-info → model_compose-0.2.11}/PKG-INFO +5 -1
  2. {model_compose-0.2.9 → model_compose-0.2.11}/pyproject.toml +6 -2
  3. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/component/services/__init__.py +1 -0
  4. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/component/services/http_server.py +8 -1
  5. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/component/services/mcp_client.py +1 -1
  6. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/component/services/mcp_server.py +9 -1
  7. model_compose-0.2.11/src/mindor/core/component/services/model/__init__.py +1 -0
  8. model_compose-0.2.11/src/mindor/core/component/services/model/base.py +28 -0
  9. model_compose-0.2.11/src/mindor/core/component/services/model/model.py +37 -0
  10. model_compose-0.2.11/src/mindor/core/component/services/model/tasks/__init__.py +4 -0
  11. model_compose-0.2.11/src/mindor/core/component/services/model/tasks/summarization.py +75 -0
  12. model_compose-0.2.11/src/mindor/core/component/services/model/tasks/text_embedding.py +89 -0
  13. model_compose-0.2.11/src/mindor/core/component/services/model/tasks/text_generation.py +71 -0
  14. model_compose-0.2.11/src/mindor/core/component/services/model/tasks/translation.py +72 -0
  15. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/controller/webui/gradio.py +2 -1
  16. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/workflow/workflow.py +0 -1
  17. model_compose-0.2.11/src/mindor/dsl/schema/action/action.py +13 -0
  18. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/action/impl/__init__.py +1 -0
  19. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/action/impl/mcp_server.py +1 -2
  20. model_compose-0.2.11/src/mindor/dsl/schema/action/impl/model/__init__.py +1 -0
  21. model_compose-0.2.11/src/mindor/dsl/schema/action/impl/model/impl/__init__.py +5 -0
  22. model_compose-0.2.11/src/mindor/dsl/schema/action/impl/model/impl/common.py +11 -0
  23. model_compose-0.2.11/src/mindor/dsl/schema/action/impl/model/impl/summarization.py +17 -0
  24. model_compose-0.2.11/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +14 -0
  25. model_compose-0.2.11/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +15 -0
  26. model_compose-0.2.11/src/mindor/dsl/schema/action/impl/model/impl/translation.py +15 -0
  27. model_compose-0.2.11/src/mindor/dsl/schema/action/impl/model/model.py +10 -0
  28. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/component/component.py +1 -0
  29. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/component/impl/__init__.py +1 -0
  30. model_compose-0.2.11/src/mindor/dsl/schema/component/impl/model/__init__.py +1 -0
  31. model_compose-0.2.11/src/mindor/dsl/schema/component/impl/model/impl/__init__.py +5 -0
  32. model_compose-0.2.11/src/mindor/dsl/schema/component/impl/model/impl/common.py +23 -0
  33. model_compose-0.2.11/src/mindor/dsl/schema/component/impl/model/impl/summarization.py +9 -0
  34. model_compose-0.2.11/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +9 -0
  35. model_compose-0.2.11/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +9 -0
  36. model_compose-0.2.11/src/mindor/dsl/schema/component/impl/model/impl/translation.py +9 -0
  37. model_compose-0.2.11/src/mindor/dsl/schema/component/impl/model/impl/types.py +7 -0
  38. model_compose-0.2.11/src/mindor/dsl/schema/component/impl/model/model.py +13 -0
  39. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/component/impl/types.py +1 -0
  40. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/workflow.py +1 -1
  41. {model_compose-0.2.9 → model_compose-0.2.11/src/model_compose.egg-info}/PKG-INFO +5 -1
  42. {model_compose-0.2.9 → model_compose-0.2.11}/src/model_compose.egg-info/SOURCES.txt +27 -2
  43. {model_compose-0.2.9 → model_compose-0.2.11}/src/model_compose.egg-info/requires.txt +4 -0
  44. model_compose-0.2.9/src/mindor/dsl/schema/action/action.py +0 -15
  45. {model_compose-0.2.9 → model_compose-0.2.11}/LICENSE +0 -0
  46. {model_compose-0.2.9 → model_compose-0.2.11}/README.md +0 -0
  47. {model_compose-0.2.9 → model_compose-0.2.11}/setup.cfg +0 -0
  48. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/__init__.py +0 -0
  49. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/cli/__init__.py +0 -0
  50. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/cli/compose.py +0 -0
  51. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/__init__.py +0 -0
  52. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/component/__init__.py +0 -0
  53. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/component/base.py +0 -0
  54. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/component/component.py +0 -0
  55. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/component/context.py +0 -0
  56. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/component/services/http_client.py +0 -0
  57. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/component/services/shell.py +0 -0
  58. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/component/services/workflow.py +0 -0
  59. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/compose/__init__.py +0 -0
  60. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/compose/compose.py +0 -0
  61. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/compose/manager.py +0 -0
  62. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/controller/__init__.py +0 -0
  63. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/controller/base.py +0 -0
  64. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/controller/controller.py +0 -0
  65. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/controller/runner/__init__.py +0 -0
  66. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/controller/runner/client.py +0 -0
  67. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/controller/runner/http_client.py +0 -0
  68. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/controller/runner/mcp_client.py +0 -0
  69. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/controller/runner/runner.py +0 -0
  70. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/controller/services/__init__.py +0 -0
  71. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/controller/services/http_server.py +0 -0
  72. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/controller/services/mcp_server.py +0 -0
  73. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/controller/webui/__init__.py +0 -0
  74. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/controller/webui/webui.py +0 -0
  75. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/gateway/__init__.py +0 -0
  76. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/gateway/base.py +0 -0
  77. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/gateway/gateway.py +0 -0
  78. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/gateway/services/__init__.py +0 -0
  79. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/gateway/services/http_tunnel.py +0 -0
  80. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/gateway/services/ssh_tunnel.py +0 -0
  81. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/listener/__init__.py +0 -0
  82. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/listener/base.py +0 -0
  83. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/listener/listener.py +0 -0
  84. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/listener/services/__init__.py +0 -0
  85. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/listener/services/http_callback.py +0 -0
  86. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/logger/__init__.py +0 -0
  87. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/logger/base.py +0 -0
  88. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/logger/logger.py +0 -0
  89. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/logger/logging.py +0 -0
  90. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/logger/services/__init__.py +0 -0
  91. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/logger/services/console.py +0 -0
  92. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/logger/services/file.py +0 -0
  93. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/runtime/__init__.py +0 -0
  94. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/runtime/env.py +0 -0
  95. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/services/__init__.py +0 -0
  96. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/services/async_service.py +0 -0
  97. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/utils/__init__.py +0 -0
  98. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/utils/expiring.py +0 -0
  99. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/utils/http_client.py +0 -0
  100. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/utils/http_request.py +0 -0
  101. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/utils/http_status.py +0 -0
  102. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/utils/image.py +0 -0
  103. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/utils/mcp_client.py +0 -0
  104. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/utils/renderer.py +0 -0
  105. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/utils/ssh_client.py +0 -0
  106. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/utils/streaming.py +0 -0
  107. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/utils/time.py +0 -0
  108. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/utils/workqueue.py +0 -0
  109. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/workflow/__init__.py +0 -0
  110. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/workflow/context.py +0 -0
  111. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/workflow/job/__init__.py +0 -0
  112. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/workflow/job/base.py +0 -0
  113. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
  114. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/workflow/job/impl/action.py +0 -0
  115. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/workflow/job/impl/delay.py +0 -0
  116. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/workflow/job/job.py +0 -0
  117. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/core/workflow/schema.py +0 -0
  118. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/__init__.py +0 -0
  119. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/loader.py +0 -0
  120. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/__init__.py +0 -0
  121. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/action/__init__.py +0 -0
  122. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/action/impl/common.py +0 -0
  123. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/action/impl/http_client.py +0 -0
  124. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/action/impl/http_server.py +0 -0
  125. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
  126. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
  127. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
  128. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/component/__init__.py +0 -0
  129. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/component/impl/common.py +0 -0
  130. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/component/impl/http_client.py +0 -0
  131. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
  132. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/component/impl/mcp_client.py +0 -0
  133. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
  134. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
  135. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
  136. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/compose.py +0 -0
  137. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/controller/__init__.py +0 -0
  138. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/controller/controller.py +0 -0
  139. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
  140. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/controller/impl/common.py +0 -0
  141. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/controller/impl/http_server.py +0 -0
  142. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/controller/impl/mcp_server.py +0 -0
  143. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/controller/impl/types.py +0 -0
  144. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/controller/impl/webui.py +0 -0
  145. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
  146. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
  147. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
  148. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/gateway/impl/common.py +0 -0
  149. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/gateway/impl/http_tunnel.py +0 -0
  150. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -0
  151. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
  152. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/job/__init__.py +0 -0
  153. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
  154. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/job/impl/action.py +0 -0
  155. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/job/impl/common.py +0 -0
  156. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
  157. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/job/impl/types.py +0 -0
  158. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/job/job.py +0 -0
  159. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/listener/__init__.py +0 -0
  160. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/listener/impl/__init__.py +0 -0
  161. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/listener/impl/common.py +0 -0
  162. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/listener/impl/http_callback.py +0 -0
  163. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/listener/impl/types.py +0 -0
  164. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/listener/listener.py +0 -0
  165. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/logger/__init__.py +0 -0
  166. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
  167. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/logger/impl/common.py +0 -0
  168. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
  169. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/logger/impl/file.py +0 -0
  170. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
  171. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/logger/logger.py +0 -0
  172. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
  173. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
  174. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/runtime/impl/common.py +0 -0
  175. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
  176. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
  177. {model_compose-0.2.9 → model_compose-0.2.11}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
  178. {model_compose-0.2.9/src/mindor/dsl/schema → model_compose-0.2.11/src/mindor/dsl}/utils/__init__.py +0 -0
  179. {model_compose-0.2.9/src/mindor/dsl/schema → model_compose-0.2.11/src/mindor/dsl}/utils/annotation.py +0 -0
  180. {model_compose-0.2.9 → model_compose-0.2.11}/src/model_compose.egg-info/dependency_links.txt +0 -0
  181. {model_compose-0.2.9 → model_compose-0.2.11}/src/model_compose.egg-info/entry_points.txt +0 -0
  182. {model_compose-0.2.9 → model_compose-0.2.11}/src/model_compose.egg-info/top_level.txt +0 -0
  183. {model_compose-0.2.9 → model_compose-0.2.11}/tests/test_cli.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: model-compose
3
- Version: 0.2.9
3
+ Version: 0.2.11
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,6 +20,10 @@ Requires-Dist: pyngrok
20
20
  Requires-Dist: ulid
21
21
  Requires-Dist: gradio
22
22
  Requires-Dist: Pillow
23
+ Requires-Dist: transformers
24
+ Requires-Dist: torch
25
+ Requires-Dist: sentencepiece
26
+ Requires-Dist: accelerate
23
27
  Dynamic: license-file
24
28
 
25
29
  # model-compose: Declarative AI Model and Workflow Orchestrator
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "model-compose"
3
- version = "0.2.9"
3
+ version = "0.2.11"
4
4
  description = "model-compose: Declarative AI Model and Workflow Orchestrator"
5
5
  authors = [
6
6
  { name = "Hanyeol Cho", email = "hanyeol.cho@gmail.com" }
@@ -20,7 +20,11 @@ dependencies = [
20
20
  "pyngrok",
21
21
  "ulid",
22
22
  "gradio",
23
- "Pillow"
23
+ "Pillow",
24
+ "transformers",
25
+ "torch",
26
+ "sentencepiece",
27
+ "accelerate"
24
28
  ]
25
29
 
26
30
  [project.scripts]
@@ -2,5 +2,6 @@ from .http_server import *
2
2
  from .http_client import *
3
3
  from .mcp_server import *
4
4
  from .mcp_client import *
5
+ from .model import *
5
6
  from .workflow import *
6
7
  from .shell import *
@@ -4,6 +4,13 @@ from mindor.dsl.schema.action import ActionConfig, HttpServerActionConfig
4
4
  from ..base import ComponentService, ComponentType, ComponentGlobalConfigs, register_component
5
5
  from ..context import ComponentActionContext
6
6
 
7
+ class HttpServerAction:
8
+ def __init__(self, config: HttpServerActionConfig):
9
+ self.config: HttpServerActionConfig = config
10
+
11
+ async def run(self, context: ComponentActionContext) -> Any:
12
+ pass
13
+
7
14
  @register_component(ComponentType.HTTP_SERVER)
8
15
  class HttpServerComponent(ComponentService):
9
16
  def __init__(self, id: str, config: HttpServerComponentConfig, global_configs: ComponentGlobalConfigs, daemon: bool):
@@ -16,4 +23,4 @@ class HttpServerComponent(ComponentService):
16
23
  pass
17
24
 
18
25
  async def _run(self, action: ActionConfig, context: ComponentActionContext) -> Any:
19
- return {}
26
+ return await HttpServerAction(action).run(context)
@@ -5,7 +5,7 @@ from mindor.core.utils.mcp_client import McpClient, ContentBlock, TextContent, I
5
5
  from ..base import ComponentService, ComponentType, ComponentGlobalConfigs, register_component
6
6
  from ..context import ComponentActionContext
7
7
 
8
- class McpClientAction():
8
+ class McpClientAction:
9
9
  def __init__(self, config: McpClientActionConfig):
10
10
  self.config: McpClientActionConfig = config
11
11
 
@@ -4,6 +4,13 @@ from mindor.dsl.schema.action import ActionConfig, McpServerActionConfig
4
4
  from ..base import ComponentService, ComponentType, ComponentGlobalConfigs, register_component
5
5
  from ..context import ComponentActionContext
6
6
 
7
+ class McpServerAction:
8
+ def __init__(self, config: McpServerActionConfig):
9
+ self.config: McpServerActionConfig = config
10
+
11
+ async def run(self, context: ComponentActionContext) -> Any:
12
+ pass
13
+
7
14
  @register_component(ComponentType.MCP_SERVER)
8
15
  class McpServerComponent(ComponentService):
9
16
  def __init__(self, id: str, config: McpServerComponentConfig, global_configs: ComponentGlobalConfigs, daemon: bool):
@@ -16,4 +23,5 @@ class McpServerComponent(ComponentService):
16
23
  pass
17
24
 
18
25
  async def _run(self, action: ActionConfig, context: ComponentActionContext) -> Any:
19
- return {}
26
+ return await McpServerAction(action).run(context)
27
+
@@ -0,0 +1 @@
1
+ from .model import *
@@ -0,0 +1,28 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Any
2
+ from abc import ABC, abstractmethod
3
+ from mindor.dsl.schema.component import ModelComponentConfig, ModelTaskType
4
+ from mindor.dsl.schema.action import ModelActionConfig
5
+ from mindor.core.services import AsyncService
6
+ from ...context import ComponentActionContext
7
+
8
+ class ModelTaskService(AsyncService):
9
+ def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
10
+ super().__init__(daemon)
11
+
12
+ self.id: str = id
13
+ self.config: ModelComponentConfig = config
14
+
15
+ async def run(self, action: ModelActionConfig, context: ComponentActionContext) -> Any:
16
+ return await self._run(action, context)
17
+
18
+ @abstractmethod
19
+ async def _run(self, action: ModelActionConfig, context: ComponentActionContext) -> Any:
20
+ pass
21
+
22
+ def register_model_task_service(type: ModelTaskType):
23
+ def decorator(cls: Type[ModelTaskService]) -> Type[ModelTaskService]:
24
+ ModelTaskServiceRegistry[type] = cls
25
+ return cls
26
+ return decorator
27
+
28
+ ModelTaskServiceRegistry: Dict[ModelTaskType, Type[ModelTaskService]] = {}
@@ -0,0 +1,37 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, AsyncIterator, Any
2
+ from mindor.dsl.schema.component import ModelComponentConfig, ModelTaskType
3
+ from mindor.dsl.schema.action import ActionConfig, ModelActionConfig
4
+ from ...base import ComponentService, ComponentType, ComponentGlobalConfigs, register_component
5
+ from ...context import ComponentActionContext
6
+ from .base import ModelTaskService, ModelTaskServiceRegistry
7
+
8
+ class ModelAction:
9
+ def __init__(self, config: ModelActionConfig):
10
+ self.config: ModelActionConfig = config
11
+
12
+ async def run(self, context: ComponentActionContext, task_service: ModelTaskService) -> Any:
13
+ return await task_service.run(self.config, context)
14
+
15
+ @register_component(ComponentType.MODEL)
16
+ class ModelComponent(ComponentService):
17
+ def __init__(self, id: str, config: ModelComponentConfig, global_configs: ComponentGlobalConfigs, daemon: bool):
18
+ super().__init__(id, config, global_configs, daemon)
19
+
20
+ self.task_service = self._create_task_service(self.config.task)
21
+
22
+ def _create_task_service(self, type: ModelTaskType) -> ModelTaskService:
23
+ try:
24
+ if not ModelTaskServiceRegistry:
25
+ from . import tasks
26
+ return ModelTaskServiceRegistry[type](self.id, self.config, self.daemon)
27
+ except KeyError:
28
+ raise ValueError(f"Unsupported component type: {type}")
29
+
30
+ async def _serve(self) -> None:
31
+ await self.task_service.start()
32
+
33
+ async def _shutdown(self) -> None:
34
+ await self.task_service.stop()
35
+
36
+ async def _run(self, action: ActionConfig, context: ComponentActionContext) -> Any:
37
+ return await ModelAction(action).run(context, self.task_service)
@@ -0,0 +1,4 @@
1
+ from .text_generation import *
2
+ from .summarization import *
3
+ from .translation import *
4
+ from .text_embedding import *
@@ -0,0 +1,75 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
+ from mindor.dsl.schema.component import ModelComponentConfig
3
+ from mindor.dsl.schema.action import ModelActionConfig, SummarizationModelActionConfig
4
+ from mindor.core.logger import logging
5
+ from ..base import ModelTaskService, ModelTaskType, register_model_task_service
6
+ from ..base import ComponentActionContext
7
+ from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, PreTrainedModel, PreTrainedTokenizer, GenerationMixin
8
+ import torch
9
+
10
+ class SummarizationTaskAction:
11
+ def __init__(self, config: SummarizationModelActionConfig, model: Union[PreTrainedModel, GenerationMixin], tokenizer: PreTrainedTokenizer):
12
+ self.config: SummarizationModelActionConfig = config
13
+ self.model: Union[PreTrainedModel, GenerationMixin] = model
14
+ self.tokenizer: PreTrainedTokenizer = tokenizer
15
+
16
+ async def run(self, context: ComponentActionContext) -> Any:
17
+ text: Union[str, List[str]] = await context.render_variable(self.config.text)
18
+
19
+ # Model parameters
20
+ max_input_length = await context.render_variable(self.config.params.max_input_length)
21
+ max_output_length = await context.render_variable(self.config.params.max_output_length)
22
+ min_output_length = await context.render_variable(self.config.params.min_output_length)
23
+ num_beams = await context.render_variable(self.config.params.num_beams)
24
+ length_penalty = await context.render_variable(self.config.params.length_penalty)
25
+ early_stopping = await context.render_variable(self.config.params.early_stopping)
26
+ do_sample = await context.render_variable(self.config.params.do_sample)
27
+
28
+ # Tokenizing
29
+ inputs = self.tokenizer(text, return_tensors="pt", max_length=max_input_length, padding=True, truncation=True).to(self.model.device)
30
+
31
+ # Text Summarization
32
+ with torch.no_grad():
33
+ outputs = self.model.generate(
34
+ **inputs,
35
+ max_length=max_output_length,
36
+ min_length=min_output_length,
37
+ num_beams=num_beams,
38
+ length_penalty=length_penalty,
39
+ early_stopping=early_stopping,
40
+ do_sample=do_sample,
41
+ pad_token_id=getattr(self.tokenizer, "pad_token_id", None),
42
+ eos_token_id=getattr(self.tokenizer, "eos_token_id", None)
43
+ )
44
+
45
+ # Decoding output
46
+ outputs = self.tokenizer.batch_decode(outputs, skip_special_tokens=True)
47
+
48
+ result = outputs if isinstance(text, list) else outputs[0]
49
+ context.register_source("result", result)
50
+
51
+ return (await context.render_variable(self.config.output, ignore_files=True)) if self.config.output else result
52
+
53
+ @register_model_task_service(ModelTaskType.SUMMARIZATION)
54
+ class SummarizationTaskService(ModelTaskService):
55
+ def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
56
+ super().__init__(id, config, daemon)
57
+
58
+ self.model: Optional[Union[PreTrainedModel, GenerationMixin]] = None
59
+ self.tokenizer: Optional[PreTrainedTokenizer] = None
60
+
61
+ async def _serve(self) -> None:
62
+ try:
63
+ self.model = AutoModelForSeq2SeqLM.from_pretrained(self.config.model).to(torch.device(self.config.device))
64
+ self.tokenizer = AutoTokenizer.from_pretrained(self.config.model, use_fast=self.config.fast_tokenizer)
65
+ logging.info(f"Model and tokenizer loaded successfully on device '{self.config.device}': {self.config.model}")
66
+ except Exception as e:
67
+ logging.error(f"Failed to load model '{self.config.model}': {e}")
68
+ raise
69
+
70
+ async def _shutdown(self) -> None:
71
+ self.model = None
72
+ self.tokenizer = None
73
+
74
+ async def _run(self, action: ModelActionConfig, context: ComponentActionContext) -> Any:
75
+ return await SummarizationTaskAction(action, self.model, self.tokenizer).run(context)
@@ -0,0 +1,89 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
+ from mindor.dsl.schema.component import ModelComponentConfig
3
+ from mindor.dsl.schema.action import ModelActionConfig, TextEmbeddingModelActionConfig
4
+ from mindor.core.logger import logging
5
+ from ..base import ModelTaskService, ModelTaskType, register_model_task_service
6
+ 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
11
+
12
+ class TextEmbeddingTaskAction:
13
+ def __init__(self, config: TextEmbeddingModelActionConfig, model: PreTrainedModel, tokenizer: PreTrainedTokenizer):
14
+ self.config: TextEmbeddingModelActionConfig = config
15
+ self.model: PreTrainedModel = model
16
+ self.tokenizer: PreTrainedTokenizer = tokenizer
17
+
18
+ async def run(self, context: ComponentActionContext) -> Any:
19
+ text = await context.render_variable(self.config.text)
20
+
21
+ # Model parameters
22
+ max_input_length = await context.render_variable(self.config.params.max_input_length)
23
+ pooling = await context.render_variable(self.config.params.pooling)
24
+ normalize = await context.render_variable(self.config.params.normalize)
25
+
26
+ # Tokenizing
27
+ inputs = self.tokenizer(text, return_tensors="pt", max_length=max_input_length, padding=True, truncation=True).to(self.model.device)
28
+ attention_mask: Tensor = inputs.get("attention_mask", None)
29
+
30
+ # Forward pass through the model
31
+ with torch.no_grad():
32
+ outputs: BaseModelOutput = self.model(**inputs)
33
+ last_hidden_state = outputs.last_hidden_state # (batch_size, seq_len, hidden_size)
34
+
35
+ # Apply pooling strategy (mean, cls, max)
36
+ embedding = self._pool_hidden_state(last_hidden_state, attention_mask, pooling)
37
+
38
+ if normalize:
39
+ embedding = torch.nn.functional.normalize(embedding, p=2, dim=1)
40
+
41
+ result = embedding.squeeze().tolist()
42
+ context.register_source("result", result)
43
+
44
+ return (await context.render_variable(self.config.output, ignore_files=True)) if self.config.output else result
45
+
46
+ def _pool_hidden_state(self, last_hidden_state: Tensor, attention_mask: Optional[Tensor], pooling: str) -> Tensor:
47
+ if pooling == "mean":
48
+ if attention_mask is not None:
49
+ mask = attention_mask.unsqueeze(-1).expand(last_hidden_state.size())
50
+ summed = torch.sum(last_hidden_state * mask, dim=1)
51
+ count = torch.clamp(mask.sum(dim=1), min=1e-9)
52
+ return summed / count
53
+ else:
54
+ return torch.mean(last_hidden_state, dim=1)
55
+
56
+ if pooling == "cls":
57
+ return last_hidden_state[:, 0]
58
+
59
+ if pooling == "max":
60
+ if attention_mask is not None:
61
+ mask = attention_mask.unsqueeze(-1).expand(last_hidden_state.size())
62
+ last_hidden_state = last_hidden_state.masked_fill(mask == 0, -1e9)
63
+ return torch.max(last_hidden_state, dim=1).values
64
+
65
+ raise ValueError(f"Unsupported pooling type: {pooling}")
66
+
67
+ @register_model_task_service(ModelTaskType.TEXT_EMBEDDING)
68
+ class TextEmbeddingTaskService(ModelTaskService):
69
+ def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
70
+ super().__init__(id, config, daemon)
71
+
72
+ self.model: Optional[PreTrainedModel] = None
73
+ self.tokenizer: Optional[PreTrainedTokenizer] = None
74
+
75
+ async def _serve(self) -> None:
76
+ try:
77
+ self.model = AutoModel.from_pretrained(self.config.model).to(torch.device(self.config.device))
78
+ self.tokenizer = AutoTokenizer.from_pretrained(self.config.model, use_fast=self.config.fast_tokenizer)
79
+ logging.info(f"Model and tokenizer loaded successfully on device '{self.config.device}': {self.config.model}")
80
+ except Exception as e:
81
+ logging.error(f"Failed to load model '{self.config.model}': {e}")
82
+ raise
83
+
84
+ async def _shutdown(self) -> None:
85
+ self.model = None
86
+ self.tokenizer = None
87
+
88
+ async def _run(self, action: ModelActionConfig, context: ComponentActionContext) -> Any:
89
+ return await TextEmbeddingTaskAction(action, self.model, self.tokenizer).run(context)
@@ -0,0 +1,71 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
+ from mindor.dsl.schema.component import ModelComponentConfig
3
+ from mindor.dsl.schema.action import ModelActionConfig, TextGenerationModelActionConfig
4
+ from mindor.core.logger import logging
5
+ from ..base import ModelTaskService, ModelTaskType, register_model_task_service
6
+ from ..base import ComponentActionContext
7
+ from transformers import AutoModelForCausalLM, AutoTokenizer, PreTrainedModel, PreTrainedTokenizer, GenerationMixin
8
+ import torch
9
+
10
+ class TextGenerationTaskAction:
11
+ def __init__(self, config: TextGenerationModelActionConfig, model: Union[PreTrainedModel, GenerationMixin], tokenizer: PreTrainedTokenizer):
12
+ self.config: TextGenerationModelActionConfig = config
13
+ self.model: Union[PreTrainedModel, GenerationMixin] = model
14
+ self.tokenizer: PreTrainedTokenizer = tokenizer
15
+
16
+ async def run(self, context: ComponentActionContext) -> Any:
17
+ prompt: Union[str, List[str]] = await context.render_variable(self.config.prompt)
18
+
19
+ # Model parameters
20
+ max_output_length = await context.render_variable(self.config.params.max_output_length)
21
+ num_return_sequences = await context.render_variable(self.config.params.num_return_sequences)
22
+ temperature = await context.render_variable(self.config.params.temperature)
23
+ top_k = await context.render_variable(self.config.params.top_k)
24
+ top_p = await context.render_variable(self.config.params.top_p)
25
+
26
+ # Tokenizing
27
+ inputs = self.tokenizer(prompt, return_tensors="pt").to(self.model.device)
28
+
29
+ # Text generation
30
+ with torch.no_grad():
31
+ outputs = self.model.generate(
32
+ **inputs,
33
+ max_length=max_output_length,
34
+ num_return_sequences=num_return_sequences,
35
+ temperature=temperature,
36
+ top_k=top_k,
37
+ top_p=top_p,
38
+ do_sample=True
39
+ )
40
+
41
+ # Decoding output
42
+ outputs = self.tokenizer.batch_decode(outputs, skip_special_tokens=True)
43
+
44
+ result = outputs if isinstance(prompt, list) else outputs[0]
45
+ context.register_source("result", result)
46
+
47
+ return (await context.render_variable(self.config.output, ignore_files=True)) if self.config.output else result
48
+
49
+ @register_model_task_service(ModelTaskType.TEXT_GENERATION)
50
+ class TextGenerationTaskService(ModelTaskService):
51
+ def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
52
+ super().__init__(id, config, daemon)
53
+
54
+ self.model: Optional[Union[PreTrainedModel, GenerationMixin]] = None
55
+ self.tokenizer: Optional[PreTrainedTokenizer] = None
56
+
57
+ async def _serve(self) -> None:
58
+ try:
59
+ self.model = AutoModelForCausalLM.from_pretrained(self.config.model).to(torch.device(self.config.device))
60
+ self.tokenizer = AutoTokenizer.from_pretrained(self.config.model, use_fast=self.config.fast_tokenizer)
61
+ logging.info(f"Model and tokenizer loaded successfully on device '{self.config.device}': {self.config.model}")
62
+ except Exception as e:
63
+ logging.error(f"Failed to load model '{self.config.model}': {e}")
64
+ raise
65
+
66
+ async def _shutdown(self) -> None:
67
+ self.model = None
68
+ self.tokenizer = None
69
+
70
+ async def _run(self, action: ModelActionConfig, context: ComponentActionContext) -> Any:
71
+ return await TextGenerationTaskAction(action, self.model, self.tokenizer).run(context)
@@ -0,0 +1,72 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
+ from mindor.dsl.schema.component import ModelComponentConfig
3
+ from mindor.dsl.schema.action import ModelActionConfig, TranslationModelActionConfig
4
+ from mindor.core.logger import logging
5
+ from ..base import ModelTaskService, ModelTaskType, register_model_task_service
6
+ from ..base import ComponentActionContext
7
+ from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, PreTrainedModel, PreTrainedTokenizer, GenerationMixin
8
+ import torch
9
+
10
+ class TranslationTaskAction:
11
+ def __init__(self, config: TranslationModelActionConfig, model: Union[PreTrainedModel, GenerationMixin], tokenizer: PreTrainedTokenizer):
12
+ self.config: TranslationModelActionConfig = config
13
+ self.model: Union[PreTrainedModel, GenerationMixin] = model
14
+ self.tokenizer: PreTrainedTokenizer = tokenizer
15
+
16
+ async def run(self, context: ComponentActionContext) -> Any:
17
+ text: Union[str, List[str]] = await context.render_variable(self.config.text)
18
+
19
+ # Model parameters
20
+ max_input_length = await context.render_variable(self.config.params.max_input_length)
21
+ max_output_length = await context.render_variable(self.config.params.max_output_length)
22
+ min_output_length = await context.render_variable(self.config.params.min_output_length)
23
+ num_beams = await context.render_variable(self.config.params.num_beams)
24
+ length_penalty = await context.render_variable(self.config.params.length_penalty)
25
+
26
+ # Tokenizing
27
+ inputs = self.tokenizer(text, return_tensors="pt", max_length=max_input_length, padding=True, truncation=True).to(self.model.device)
28
+
29
+ # Text Translation
30
+ with torch.no_grad():
31
+ outputs = self.model.generate(
32
+ **inputs,
33
+ max_length=max_output_length,
34
+ min_length=min_output_length,
35
+ num_beams=num_beams,
36
+ length_penalty=length_penalty,
37
+ do_sample=False,
38
+ pad_token_id=getattr(self.tokenizer, "pad_token_id", None),
39
+ eos_token_id=getattr(self.tokenizer, "eos_token_id", None)
40
+ )
41
+
42
+ # Decoding output
43
+ outputs = self.tokenizer.batch_decode(outputs, skip_special_tokens=True)
44
+
45
+ result = outputs if isinstance(text, list) else outputs[0]
46
+ context.register_source("result", result)
47
+
48
+ return (await context.render_variable(self.config.output, ignore_files=True)) if self.config.output else result
49
+
50
+ @register_model_task_service(ModelTaskType.TRANSLATION)
51
+ class TranslationTaskService(ModelTaskService):
52
+ def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
53
+ super().__init__(id, config, daemon)
54
+
55
+ self.model: Optional[Union[PreTrainedModel, GenerationMixin]] = None
56
+ self.tokenizer: Optional[PreTrainedTokenizer] = None
57
+
58
+ async def _serve(self) -> None:
59
+ try:
60
+ self.model = AutoModelForSeq2SeqLM.from_pretrained(self.config.model).to(torch.device(self.config.device))
61
+ self.tokenizer = AutoTokenizer.from_pretrained(self.config.model, use_fast=self.config.fast_tokenizer)
62
+ logging.info(f"Model and tokenizer loaded successfully on device '{self.config.device}': {self.config.model}")
63
+ except Exception as e:
64
+ logging.error(f"Failed to load model '{self.config.model}': {e}")
65
+ raise
66
+
67
+ async def _shutdown(self) -> None:
68
+ self.model = None
69
+ self.tokenizer = None
70
+
71
+ async def _run(self, action: ModelActionConfig, context: ComponentActionContext) -> Any:
72
+ return await TranslationTaskAction(action, self.model, self.tokenizer).run(context)
@@ -49,7 +49,8 @@ class GradioWebUIBuilder:
49
49
  async def _run_workflow(*args):
50
50
  input = await self._build_input_value(args, workflow.input)
51
51
  output = await runner(input)
52
- output = await self._flatten_output_value(output, workflow.output)
52
+ if workflow.output:
53
+ output = await self._flatten_output_value(output, workflow.output)
53
54
  return output[0] if len(output) == 1 else output
54
55
 
55
56
  run_button.click(
@@ -6,7 +6,6 @@ from mindor.core.utils.time import TimeTracker
6
6
  from mindor.core.logger import logging
7
7
  from .context import WorkflowContext
8
8
  from .job import Job, create_job
9
- from datetime import datetime
10
9
  import asyncio
11
10
 
12
11
  class JobGraphValidator:
@@ -0,0 +1,13 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
+ from pydantic import BaseModel, Field
3
+ from .impl import *
4
+
5
+ ActionConfig = Union[
6
+ HttpServerActionConfig,
7
+ HttpClientActionConfig,
8
+ McpServerActionConfig,
9
+ McpClientActionConfig,
10
+ ModelActionConfig,
11
+ WorkflowActionConfig,
12
+ ShellActionConfig
13
+ ]
@@ -3,5 +3,6 @@ from .http_server import *
3
3
  from .http_client import *
4
4
  from .mcp_server import *
5
5
  from .mcp_client import *
6
+ from .model import *
6
7
  from .workflow import *
7
8
  from .shell import *
@@ -4,5 +4,4 @@ from pydantic import model_validator
4
4
  from .common import CommonActionConfig
5
5
 
6
6
  class McpServerActionConfig(CommonActionConfig):
7
- def __init__(self):
8
- super().__init__()
7
+ pass
@@ -0,0 +1 @@
1
+ from .model import *
@@ -0,0 +1,5 @@
1
+ from .common import *
2
+ from .text_generation import *
3
+ from .summarization import *
4
+ from .translation import *
5
+ from .text_embedding import *
@@ -0,0 +1,11 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
+ from enum import Enum
3
+ from pydantic import BaseModel, Field
4
+ from ...common import CommonActionConfig
5
+
6
+ class ModelTaskMode(str, Enum):
7
+ INFERENCE = "inference"
8
+ TRAINING = "training"
9
+
10
+ class CommonModelActionConfig(CommonActionConfig):
11
+ mode: ModelTaskMode = Field(default=ModelTaskMode.INFERENCE, description="")
@@ -0,0 +1,17 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
+ from pydantic import BaseModel, Field
3
+ from pydantic import model_validator
4
+ from .common import CommonModelActionConfig
5
+
6
+ class SummarizationParamsConfig(BaseModel):
7
+ max_input_length: int = Field(default=1024, description="Maximum number of tokens per input text.")
8
+ max_output_length: int = Field(default=256, description="The maximum number of tokens to generate.")
9
+ min_output_length: int = Field(default=30, description="The minimum number of tokens to generate.")
10
+ num_beams: int = Field(default=4, description="")
11
+ length_penalty: float = Field(default=2.0, description="")
12
+ early_stopping: bool = Field(default=True, description="")
13
+ do_sample: bool = Field(default=True, description="Whether to use sampling.")
14
+
15
+ class SummarizationModelActionConfig(CommonModelActionConfig):
16
+ text: str = Field(..., description="")
17
+ params: SummarizationParamsConfig = Field(default_factory=SummarizationParamsConfig, description="Summarization configuration parameters.")
@@ -0,0 +1,14 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
+ from pydantic import BaseModel, Field
3
+ from pydantic import model_validator
4
+ from .common import CommonModelActionConfig
5
+
6
+ class TextEmbeddingParamsConfig(BaseModel):
7
+ max_input_length: int = Field(default=512, description="Maximum number of tokens per input text.")
8
+ pooling: Literal[ "mean", "cls", "max" ] = Field(default="mean", description="Pooling strategy used to aggregate token embeddings.")
9
+ normalize: bool = Field(default=True, description="Whether to apply L2 normalization to the output embeddings.")
10
+ batch_size: int = Field(default=1, description="Number of input texts to process in a single batch.")
11
+
12
+ class TextEmbeddingModelActionConfig(CommonModelActionConfig):
13
+ text: str = Field(..., description="Input text to be embedded.")
14
+ params: TextEmbeddingParamsConfig = Field(default_factory=TextEmbeddingParamsConfig, description="Configuration parameters for embedding generation.")
@@ -0,0 +1,15 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
+ from pydantic import BaseModel, Field
3
+ from pydantic import model_validator
4
+ from .common import CommonModelActionConfig
5
+
6
+ class TextGenerationParamsConfig(BaseModel):
7
+ max_output_length: int = Field(default=1024, description="The maximum number of tokens to generate.")
8
+ num_return_sequences: int = Field(default=1, description="The number of generated sequences to return.")
9
+ temperature: float = Field(default=1.0, description="Sampling temperature; higher values produce more random results.")
10
+ top_k: int = Field(default=50, description="Top-K sampling; restricts sampling to the top K tokens.")
11
+ top_p: float = Field(default=1.0, description="Top-p (nucleus) sampling; restricts sampling to tokens with cumulative probability >= top_p.")
12
+
13
+ class TextGenerationModelActionConfig(CommonModelActionConfig):
14
+ prompt: str = Field(..., description="")
15
+ params: TextGenerationParamsConfig = Field(default_factory=TextGenerationParamsConfig, description="Text generation configuration parameters.")
@@ -0,0 +1,15 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
+ from pydantic import BaseModel, Field
3
+ from pydantic import model_validator
4
+ from .common import CommonModelActionConfig
5
+
6
+ class TranslationParamsConfig(BaseModel):
7
+ max_input_length: int = Field(default=1024, description="Maximum number of tokens per input text.")
8
+ max_output_length: int = Field(default=256, description="The maximum number of tokens to generate.")
9
+ min_output_length: int = Field(default=10, description="The minimum number of tokens to generate.")
10
+ num_beams: int = Field(default=4, description="")
11
+ length_penalty: float = Field(default=1.0, description="")
12
+
13
+ class TranslationModelActionConfig(CommonModelActionConfig):
14
+ text: str = Field(..., description="")
15
+ params: TranslationParamsConfig = Field(default_factory=TranslationParamsConfig, description="Translation configuration parameters.")
@@ -0,0 +1,10 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
+ from pydantic import BaseModel, Field
3
+ from .impl import *
4
+
5
+ ModelActionConfig = Union[
6
+ TextGenerationModelActionConfig,
7
+ SummarizationModelActionConfig,
8
+ TranslationModelActionConfig,
9
+ TextEmbeddingModelActionConfig,
10
+ ]
@@ -8,6 +8,7 @@ ComponentConfig = Annotated[
8
8
  HttpClientComponentConfig,
9
9
  McpServerComponentConfig,
10
10
  McpClientComponentConfig,
11
+ ModelComponentConfig,
11
12
  WorkflowComponentConfig,
12
13
  ShellComponentConfig
13
14
  ],