model-compose 0.4.41__tar.gz → 0.4.43__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 (508) hide show
  1. {model_compose-0.4.41 → model_compose-0.4.43}/PKG-INFO +1 -1
  2. {model_compose-0.4.41 → model_compose-0.4.43}/pyproject.toml +1 -1
  3. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/__init__.py +1 -0
  4. model_compose-0.4.43/src/mindor/core/component/services/audio_converter/__init__.py +1 -0
  5. model_compose-0.4.43/src/mindor/core/component/services/audio_converter/audio_converter.py +45 -0
  6. model_compose-0.4.43/src/mindor/core/component/services/audio_converter/base.py +30 -0
  7. model_compose-0.4.43/src/mindor/core/component/services/audio_converter/drivers/common.py +33 -0
  8. model_compose-0.4.43/src/mindor/core/component/services/audio_converter/drivers/ffmpeg.py +103 -0
  9. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/video_converter/base.py +2 -2
  10. model_compose-0.4.43/src/mindor/core/component/services/video_converter/drivers/__init__.py +1 -0
  11. model_compose-0.4.43/src/mindor/core/component/services/video_converter/drivers/common.py +36 -0
  12. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/video_converter/drivers/ffmpeg.py +22 -10
  13. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/websocket_server.py +8 -10
  14. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/webui/gradio/builder.py +32 -39
  15. model_compose-0.4.43/src/mindor/core/utils/audio.py +12 -0
  16. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/renderers.py +26 -12
  17. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/workflow/schema.py +36 -16
  18. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/__init__.py +1 -0
  19. model_compose-0.4.43/src/mindor/dsl/schema/action/impl/audio_converter.py +25 -0
  20. model_compose-0.4.43/src/mindor/dsl/schema/action/impl/video_converter.py +27 -0
  21. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/__init__.py +1 -0
  22. model_compose-0.4.43/src/mindor/dsl/schema/component/impl/audio_converter.py +13 -0
  23. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/types.py +1 -0
  24. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/workflow.py +1 -0
  25. {model_compose-0.4.41 → model_compose-0.4.43}/src/model_compose.egg-info/PKG-INFO +1 -1
  26. {model_compose-0.4.41 → model_compose-0.4.43}/src/model_compose.egg-info/SOURCES.txt +10 -0
  27. model_compose-0.4.41/src/mindor/dsl/schema/action/impl/video_converter.py +0 -13
  28. {model_compose-0.4.41 → model_compose-0.4.43}/LICENSE +0 -0
  29. {model_compose-0.4.41 → model_compose-0.4.43}/README.md +0 -0
  30. {model_compose-0.4.41 → model_compose-0.4.43}/setup.cfg +0 -0
  31. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/__init__.py +0 -0
  32. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/cli/__init__.py +0 -0
  33. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/cli/compose.py +0 -0
  34. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/cli/interrupt.py +0 -0
  35. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/__init__.py +0 -0
  36. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/__init__.py +0 -0
  37. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/base.py +0 -0
  38. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/component.py +0 -0
  39. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/context.py +0 -0
  40. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/runtime/__init__.py +0 -0
  41. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/runtime/process_manager.py +0 -0
  42. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/runtime/process_worker.py +0 -0
  43. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/agent.py +0 -0
  44. {model_compose-0.4.41/src/mindor/core/component/services/audio_extractor → model_compose-0.4.43/src/mindor/core/component/services/audio_converter}/drivers/__init__.py +0 -0
  45. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/audio_extractor/__init__.py +0 -0
  46. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/audio_extractor/audio_extractor.py +0 -0
  47. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/audio_extractor/base.py +0 -0
  48. {model_compose-0.4.41/src/mindor/core/component/services/video_converter → model_compose-0.4.43/src/mindor/core/component/services/audio_extractor}/drivers/__init__.py +0 -0
  49. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/audio_extractor/drivers/ffmpeg.py +0 -0
  50. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/datasets/__init__.py +0 -0
  51. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/datasets/datasets.py +0 -0
  52. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/datasets/providers/__init__.py +0 -0
  53. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/datasets/providers/common.py +0 -0
  54. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/datasets/providers/huggingface.py +0 -0
  55. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/datasets/providers/local.py +0 -0
  56. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/datasets/utils.py +0 -0
  57. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/http_client.py +0 -0
  58. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/http_server.py +0 -0
  59. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/image_processor.py +0 -0
  60. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/key_value_store/__init__.py +0 -0
  61. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/key_value_store/base.py +0 -0
  62. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/key_value_store/drivers/__init__.py +0 -0
  63. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/key_value_store/drivers/redis.py +0 -0
  64. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/key_value_store/key_value_store.py +0 -0
  65. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/mcp_client.py +0 -0
  66. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/mcp_server.py +0 -0
  67. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/__init__.py +0 -0
  68. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/base/__init__.py +0 -0
  69. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/base/common.py +0 -0
  70. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/base/huggingface.py +0 -0
  71. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/base/huggingface_hub.py +0 -0
  72. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/base/llamacpp.py +0 -0
  73. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/base/unsloth.py +0 -0
  74. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/model.py +0 -0
  75. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/__init__.py +0 -0
  76. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/chat_completion/__init__.py +0 -0
  77. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/chat_completion/huggingface.py +0 -0
  78. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/chat_completion/llamacpp.py +0 -0
  79. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/face_embedding/__init__.py +0 -0
  80. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/face_embedding/common.py +0 -0
  81. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/face_embedding/custom.py +0 -0
  82. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/face_embedding/insightface.py +0 -0
  83. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/image_generation/__init__.py +0 -0
  84. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/image_generation/common.py +0 -0
  85. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/image_generation/custom.py +0 -0
  86. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/image_generation/flux.py +0 -0
  87. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/image_generation/hunyuan_image.py +0 -0
  88. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/image_generation/sdxl.py +0 -0
  89. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/image_to_text/__init__.py +0 -0
  90. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/image_to_text/huggingface.py +0 -0
  91. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/image_upscale/__init__.py +0 -0
  92. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/image_upscale/common.py +0 -0
  93. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/image_upscale/custom.py +0 -0
  94. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/image_upscale/esrgan.py +0 -0
  95. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/image_upscale/ldsr.py +0 -0
  96. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/image_upscale/real_esrgan.py +0 -0
  97. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/image_upscale/swinir.py +0 -0
  98. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/speech_to_text/__init__.py +0 -0
  99. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/speech_to_text/huggingface.py +0 -0
  100. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/text_classification/__init__.py +0 -0
  101. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/text_classification/huggingface.py +0 -0
  102. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/text_embedding/__init__.py +0 -0
  103. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/text_embedding/huggingface.py +0 -0
  104. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/text_embedding/llamacpp.py +0 -0
  105. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/text_generation/__init__.py +0 -0
  106. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/text_generation/huggingface.py +0 -0
  107. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/text_generation/llamacpp.py +0 -0
  108. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/text_to_speech/__init__.py +0 -0
  109. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/text_to_speech/common.py +0 -0
  110. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/text_to_speech/custom.py +0 -0
  111. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/model/tasks/text_to_speech/qwen.py +0 -0
  112. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/shell.py +0 -0
  113. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/text_splitter.py +0 -0
  114. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/vector_store/__init__.py +0 -0
  115. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/vector_store/base.py +0 -0
  116. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/vector_store/drivers/__init__.py +0 -0
  117. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/vector_store/drivers/chroma.py +0 -0
  118. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/vector_store/drivers/milvus.py +0 -0
  119. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/vector_store/vector_store.py +0 -0
  120. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/video_converter/__init__.py +0 -0
  121. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/video_converter/video_converter.py +0 -0
  122. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/video_scene_detector/__init__.py +0 -0
  123. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/video_scene_detector/base.py +0 -0
  124. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/video_scene_detector/drivers/__init__.py +0 -0
  125. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/video_scene_detector/drivers/ffmpeg.py +0 -0
  126. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/video_scene_detector/drivers/pyscenedetect.py +0 -0
  127. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/video_scene_detector/drivers/transnetv2.py +0 -0
  128. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/video_scene_detector/video_scene_detector.py +0 -0
  129. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/web_browser.py +0 -0
  130. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/web_scraper.py +0 -0
  131. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/component/services/workflow.py +0 -0
  132. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/compose/__init__.py +0 -0
  133. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/compose/compose.py +0 -0
  134. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/compose/manager.py +0 -0
  135. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/compose/validator.py +0 -0
  136. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/__init__.py +0 -0
  137. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/adapters/__init__.py +0 -0
  138. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/adapters/adapter.py +0 -0
  139. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/adapters/base.py +0 -0
  140. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/adapters/services/__init__.py +0 -0
  141. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/adapters/services/http_server.py +0 -0
  142. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/adapters/services/mcp_server.py +0 -0
  143. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/adapters/services/queue_subscriber/__init__.py +0 -0
  144. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/adapters/services/queue_subscriber/base.py +0 -0
  145. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/adapters/services/queue_subscriber/drivers/__init__.py +0 -0
  146. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/adapters/services/queue_subscriber/drivers/redis.py +0 -0
  147. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/adapters/services/queue_subscriber/queue_subscriber.py +0 -0
  148. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/base.py +0 -0
  149. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/controller.py +0 -0
  150. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/queue/__init__.py +0 -0
  151. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/queue/base.py +0 -0
  152. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/queue/drivers/__init__.py +0 -0
  153. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/queue/drivers/redis.py +0 -0
  154. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/queue/queue.py +0 -0
  155. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/runner/__init__.py +0 -0
  156. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/runner/client.py +0 -0
  157. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/runner/http_client.py +0 -0
  158. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/runner/mcp_client.py +0 -0
  159. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/runner/runner.py +0 -0
  160. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/runtime/__init__.py +0 -0
  161. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/runtime/apple_container/__init__.py +0 -0
  162. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/runtime/apple_container/apple_container.py +0 -0
  163. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
  164. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/runtime/docker/context/Dockerfile +0 -0
  165. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/runtime/docker/docker.py +0 -0
  166. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/runtime/native/__init__.py +0 -0
  167. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/runtime/native/native.py +0 -0
  168. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/runtime/specs.py +0 -0
  169. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/webui/__init__.py +0 -0
  170. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/webui/driver.py +0 -0
  171. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/webui/gradio/__init__.py +0 -0
  172. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/webui/gradio/driver.py +0 -0
  173. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/webui/static/__init__.py +0 -0
  174. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/webui/static/driver.py +0 -0
  175. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/controller/webui/webui.py +0 -0
  176. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/errors.py +0 -0
  177. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/evaluator/__init__.py +0 -0
  178. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/evaluator/condition.py +0 -0
  179. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/foundation/__init__.py +0 -0
  180. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/foundation/async_service.py +0 -0
  181. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/foundation/compat/__init__.py +0 -0
  182. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/foundation/compat/asyncio.py +0 -0
  183. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/foundation/ipc_messages.py +0 -0
  184. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/foundation/package.py +0 -0
  185. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/foundation/process_manager.py +0 -0
  186. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/foundation/process_worker.py +0 -0
  187. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/gateway/__init__.py +0 -0
  188. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/gateway/base.py +0 -0
  189. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/gateway/gateway.py +0 -0
  190. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/gateway/services/__init__.py +0 -0
  191. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/gateway/services/http_tunnel/__init__.py +0 -0
  192. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/gateway/services/http_tunnel/base.py +0 -0
  193. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/gateway/services/http_tunnel/drivers/__init__.py +0 -0
  194. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/gateway/services/http_tunnel/drivers/cloudflare.py +0 -0
  195. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/gateway/services/http_tunnel/drivers/ngrok.py +0 -0
  196. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/gateway/services/http_tunnel/http_tunnel.py +0 -0
  197. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/gateway/services/ssh_tunnel.py +0 -0
  198. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/listener/__init__.py +0 -0
  199. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/listener/base.py +0 -0
  200. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/listener/listener.py +0 -0
  201. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/listener/services/__init__.py +0 -0
  202. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/listener/services/http_callback.py +0 -0
  203. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/listener/services/http_trigger.py +0 -0
  204. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/logger/__init__.py +0 -0
  205. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/logger/base.py +0 -0
  206. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/logger/logger.py +0 -0
  207. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/logger/logging.py +0 -0
  208. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/logger/services/__init__.py +0 -0
  209. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/logger/services/console.py +0 -0
  210. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/logger/services/file.py +0 -0
  211. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/runtime/__init__.py +0 -0
  212. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/runtime/apple_container/__init__.py +0 -0
  213. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/runtime/apple_container/apple_container.py +0 -0
  214. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/runtime/docker/__init__.py +0 -0
  215. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/runtime/docker/docker.py +0 -0
  216. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/runtime/env.py +0 -0
  217. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/system/__init__.py +0 -0
  218. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/system/base.py +0 -0
  219. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/system/services/__init__.py +0 -0
  220. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/system/services/docker_compose.py +0 -0
  221. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/system/system.py +0 -0
  222. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/__init__.py +0 -0
  223. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/active_counter.py +0 -0
  224. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/caching.py +0 -0
  225. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/cdp_client.py +0 -0
  226. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/http_client.py +0 -0
  227. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/http_request.py +0 -0
  228. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/http_response.py +0 -0
  229. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/http_status.py +0 -0
  230. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/image.py +0 -0
  231. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/mcp_client.py +0 -0
  232. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/resolvers.py +0 -0
  233. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/shell.py +0 -0
  234. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/ssh_client.py +0 -0
  235. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/streamer.py +0 -0
  236. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/streaming.py +0 -0
  237. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/time.py +0 -0
  238. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/url.py +0 -0
  239. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/websocket_client.py +0 -0
  240. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/utils/work_queue.py +0 -0
  241. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/workflow/__init__.py +0 -0
  242. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/workflow/context.py +0 -0
  243. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/workflow/interrupt.py +0 -0
  244. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/workflow/job/__init__.py +0 -0
  245. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/workflow/job/base.py +0 -0
  246. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
  247. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/workflow/job/impl/component.py +0 -0
  248. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/workflow/job/impl/delay.py +0 -0
  249. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/workflow/job/impl/filter.py +0 -0
  250. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/workflow/job/impl/if_.py +0 -0
  251. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/workflow/job/impl/random_router.py +0 -0
  252. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/workflow/job/impl/switch.py +0 -0
  253. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/workflow/job/job.py +0 -0
  254. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/workflow/tool.py +0 -0
  255. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/core/workflow/workflow.py +0 -0
  256. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/__init__.py +0 -0
  257. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/loader.py +0 -0
  258. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/__init__.py +0 -0
  259. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/__init__.py +0 -0
  260. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/action.py +0 -0
  261. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/agent.py +0 -0
  262. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/audio_extractor.py +0 -0
  263. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/common.py +0 -0
  264. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/datasets/__init__.py +0 -0
  265. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/datasets/common.py +0 -0
  266. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/datasets/datasets.py +0 -0
  267. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/datasets/providers/__init__.py +0 -0
  268. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/datasets/providers/common.py +0 -0
  269. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/datasets/providers/huggingface.py +0 -0
  270. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/datasets/providers/local.py +0 -0
  271. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/http_client.py +0 -0
  272. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/http_server.py +0 -0
  273. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/image_processor.py +0 -0
  274. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/key_value_store/__init__.py +0 -0
  275. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/key_value_store/impl/__init__.py +0 -0
  276. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/key_value_store/impl/common.py +0 -0
  277. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/key_value_store/impl/redis.py +0 -0
  278. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/key_value_store/key_value_store.py +0 -0
  279. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
  280. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
  281. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
  282. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/__init__.py +0 -0
  283. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +0 -0
  284. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/common.py +0 -0
  285. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/__init__.py +0 -0
  286. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/face_embedding.py +0 -0
  287. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/__init__.py +0 -0
  288. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/common.py +0 -0
  289. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/dlib.py +0 -0
  290. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/facenet.py +0 -0
  291. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/insightface.py +0 -0
  292. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/__init__.py +0 -0
  293. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/image_generation.py +0 -0
  294. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/__init__.py +0 -0
  295. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/common.py +0 -0
  296. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/flux.py +0 -0
  297. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
  298. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/sdxl.py +0 -0
  299. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +0 -0
  300. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/__init__.py +0 -0
  301. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/image_upscale.py +0 -0
  302. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/__init__.py +0 -0
  303. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/common.py +0 -0
  304. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
  305. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
  306. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
  307. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/swinir.py +0 -0
  308. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/speech_to_text.py +0 -0
  309. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +0 -0
  310. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +0 -0
  311. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +0 -0
  312. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/__init__.py +0 -0
  313. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/impl/__init__.py +0 -0
  314. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/impl/common.py +0 -0
  315. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/impl/qwen.py +0 -0
  316. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/text_to_speech.py +0 -0
  317. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model/model.py +0 -0
  318. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model_trainer/__init__.py +0 -0
  319. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model_trainer/impl/__init__.py +0 -0
  320. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model_trainer/impl/classification.py +0 -0
  321. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model_trainer/impl/common.py +0 -0
  322. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model_trainer/impl/sft.py +0 -0
  323. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/model_trainer/model_trainer.py +0 -0
  324. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
  325. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/text_splitter.py +0 -0
  326. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/vector_store/__init__.py +0 -0
  327. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/vector_store/impl/__init__.py +0 -0
  328. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/vector_store/impl/chroma.py +0 -0
  329. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/vector_store/impl/common.py +0 -0
  330. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/vector_store/impl/faiss.py +0 -0
  331. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/vector_store/impl/milvus.py +0 -0
  332. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/vector_store/impl/qdrant.py +0 -0
  333. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/vector_store/vector_store.py +0 -0
  334. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/video_scene_detector.py +0 -0
  335. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/web_browser.py +0 -0
  336. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/web_scraper.py +0 -0
  337. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/websocket_server.py +0 -0
  338. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
  339. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/__init__.py +0 -0
  340. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/component.py +0 -0
  341. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/agent.py +0 -0
  342. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/audio_extractor.py +0 -0
  343. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/common.py +0 -0
  344. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/datasets/__init__.py +0 -0
  345. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/datasets/datasets.py +0 -0
  346. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/http_client.py +0 -0
  347. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
  348. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/image_processor.py +0 -0
  349. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/key_value_store/__init__.py +0 -0
  350. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/key_value_store/impl/__init__.py +0 -0
  351. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/key_value_store/impl/common.py +0 -0
  352. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/key_value_store/impl/redis.py +0 -0
  353. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/key_value_store/key_value_store.py +0 -0
  354. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/mcp_client.py +0 -0
  355. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
  356. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
  357. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/__init__.py +0 -0
  358. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/chat_completion.py +0 -0
  359. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/common.py +0 -0
  360. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/__init__.py +0 -0
  361. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/face_embedding.py +0 -0
  362. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/__init__.py +0 -0
  363. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/common.py +0 -0
  364. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/dlib.py +0 -0
  365. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/facenet.py +0 -0
  366. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/insightface.py +0 -0
  367. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/__init__.py +0 -0
  368. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/image_generation.py +0 -0
  369. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/__init__.py +0 -0
  370. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/common.py +0 -0
  371. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/flux.py +0 -0
  372. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
  373. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/sdxl.py +0 -0
  374. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/image_to_text.py +0 -0
  375. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/__init__.py +0 -0
  376. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/image_upscale.py +0 -0
  377. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/__init__.py +0 -0
  378. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/common.py +0 -0
  379. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
  380. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
  381. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
  382. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/swinir.py +0 -0
  383. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/speech_to_text.py +0 -0
  384. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +0 -0
  385. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +0 -0
  386. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +0 -0
  387. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/__init__.py +0 -0
  388. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/impl/__init__.py +0 -0
  389. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/impl/common.py +0 -0
  390. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/impl/qwen.py +0 -0
  391. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/text_to_speech.py +0 -0
  392. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model/model.py +0 -0
  393. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model_trainer/__init__.py +0 -0
  394. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model_trainer/impl/__init__.py +0 -0
  395. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model_trainer/impl/classification.py +0 -0
  396. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model_trainer/impl/common.py +0 -0
  397. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model_trainer/impl/sft.py +0 -0
  398. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/model_trainer/model_trainer.py +0 -0
  399. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
  400. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/text_splitter.py +0 -0
  401. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/vector_store/__init__.py +0 -0
  402. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/vector_store/impl/__init__.py +0 -0
  403. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/vector_store/impl/chroma.py +0 -0
  404. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/vector_store/impl/common.py +0 -0
  405. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/vector_store/impl/faiss.py +0 -0
  406. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/vector_store/impl/milvus.py +0 -0
  407. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +0 -0
  408. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/vector_store/vector_store.py +0 -0
  409. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/video_converter.py +0 -0
  410. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/video_scene_detector.py +0 -0
  411. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/web_browser.py +0 -0
  412. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/web_scraper.py +0 -0
  413. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/websocket_server.py +0 -0
  414. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
  415. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/compose.py +0 -0
  416. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/__init__.py +0 -0
  417. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/adapter/__init__.py +0 -0
  418. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/adapter/adapter.py +0 -0
  419. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/adapter/common.py +0 -0
  420. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/adapter/impl/__init__.py +0 -0
  421. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/adapter/impl/http_server.py +0 -0
  422. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/adapter/impl/mcp_server.py +0 -0
  423. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/__init__.py +0 -0
  424. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/impl/__init__.py +0 -0
  425. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/impl/common.py +0 -0
  426. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/impl/redis.py +0 -0
  427. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/queue_subscriber.py +0 -0
  428. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/adapter/impl/types.py +0 -0
  429. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/controller.py +0 -0
  430. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
  431. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/queue/__init__.py +0 -0
  432. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/queue/impl/__init__.py +0 -0
  433. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/queue/impl/common.py +0 -0
  434. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/queue/impl/redis.py +0 -0
  435. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/queue/queue.py +0 -0
  436. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/webui/__init__.py +0 -0
  437. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/webui/impl/__init__.py +0 -0
  438. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/webui/impl/common.py +0 -0
  439. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +0 -0
  440. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/webui/impl/gradio.py +0 -0
  441. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/webui/impl/static.py +0 -0
  442. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/controller/webui/webui.py +0 -0
  443. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
  444. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
  445. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
  446. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/gateway/impl/common.py +0 -0
  447. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/gateway/impl/http_tunnel/__init__.py +0 -0
  448. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/gateway/impl/http_tunnel/http_tunnel.py +0 -0
  449. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/__init__.py +0 -0
  450. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/cloudflare.py +0 -0
  451. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/common.py +0 -0
  452. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/ngrok.py +0 -0
  453. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -0
  454. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
  455. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/job/__init__.py +0 -0
  456. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
  457. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/job/impl/common.py +0 -0
  458. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/job/impl/component.py +0 -0
  459. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
  460. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/job/impl/filter.py +0 -0
  461. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
  462. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/job/impl/random_router.py +0 -0
  463. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
  464. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/job/impl/types.py +0 -0
  465. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/job/job.py +0 -0
  466. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/listener/__init__.py +0 -0
  467. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/listener/impl/__init__.py +0 -0
  468. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/listener/impl/common.py +0 -0
  469. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/listener/impl/http_callback.py +0 -0
  470. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/listener/impl/http_trigger.py +0 -0
  471. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/listener/impl/types.py +0 -0
  472. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/listener/listener.py +0 -0
  473. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/logger/__init__.py +0 -0
  474. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
  475. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/logger/impl/common.py +0 -0
  476. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
  477. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/logger/impl/file.py +0 -0
  478. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
  479. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/logger/logger.py +0 -0
  480. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/operator/__init__.py +0 -0
  481. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/operator/condition.py +0 -0
  482. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
  483. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
  484. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/runtime/impl/apple_container.py +0 -0
  485. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/runtime/impl/common.py +0 -0
  486. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
  487. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/runtime/impl/embedded.py +0 -0
  488. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
  489. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/runtime/impl/process.py +0 -0
  490. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
  491. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
  492. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/system/__init__.py +0 -0
  493. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/system/impl/__init__.py +0 -0
  494. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/system/impl/common.py +0 -0
  495. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/system/impl/docker_compose.py +0 -0
  496. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/system/impl/types.py +0 -0
  497. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/system/system.py +0 -0
  498. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/transport/__init__.py +0 -0
  499. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/transport/http.py +0 -0
  500. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/schema/transport/ssh.py +0 -0
  501. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/utils/__init__.py +0 -0
  502. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/utils/enum.py +0 -0
  503. {model_compose-0.4.41 → model_compose-0.4.43}/src/mindor/dsl/utils/path.py +0 -0
  504. {model_compose-0.4.41 → model_compose-0.4.43}/src/model_compose.egg-info/dependency_links.txt +0 -0
  505. {model_compose-0.4.41 → model_compose-0.4.43}/src/model_compose.egg-info/entry_points.txt +0 -0
  506. {model_compose-0.4.41 → model_compose-0.4.43}/src/model_compose.egg-info/requires.txt +0 -0
  507. {model_compose-0.4.41 → model_compose-0.4.43}/src/model_compose.egg-info/top_level.txt +0 -0
  508. {model_compose-0.4.41 → model_compose-0.4.43}/tests/test_cli.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: model-compose
3
- Version: 0.4.41
3
+ Version: 0.4.43
4
4
  Summary: model-compose: Declarative AI Workflow Orchestrator
5
5
  Author-email: Hanyeol Cho <hanyeol.cho@gmail.com>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "model-compose"
3
- version = "0.4.41"
3
+ version = "0.4.43"
4
4
  description = "model-compose: Declarative AI Workflow Orchestrator"
5
5
  authors = [
6
6
  { name = "Hanyeol Cho", email = "hanyeol.cho@gmail.com" }
@@ -16,4 +16,5 @@ from .agent import *
16
16
  from .video_converter import *
17
17
  from .video_scene_detector import *
18
18
  from .audio_extractor import *
19
+ from .audio_converter import *
19
20
  from .key_value_store import *
@@ -0,0 +1 @@
1
+ from .audio_converter import *
@@ -0,0 +1,45 @@
1
+ from typing import Optional, List, Any
2
+ from mindor.dsl.schema.component import AudioConverterComponentConfig, AudioConverterDriver
3
+ from mindor.dsl.schema.action import ActionConfig, AudioConverterActionConfig
4
+ from ...base import ComponentService, ComponentType, ComponentGlobalConfigs, register_component
5
+ from ...context import ComponentActionContext
6
+ from .base import AudioConverterService, AudioConverterServiceRegistry
7
+
8
+ class AudioConverterAction:
9
+ def __init__(self, config: AudioConverterActionConfig):
10
+ self.config: AudioConverterActionConfig = config
11
+
12
+ async def run(self, context: ComponentActionContext, service: AudioConverterService) -> Any:
13
+ return await service.run(self.config, context)
14
+
15
+ @register_component(ComponentType.AUDIO_CONVERTER)
16
+ class AudioConverterComponent(ComponentService):
17
+ def __init__(
18
+ self,
19
+ id: str,
20
+ config: AudioConverterComponentConfig,
21
+ global_configs: ComponentGlobalConfigs,
22
+ daemon: bool
23
+ ):
24
+ super().__init__(id, config, global_configs, daemon)
25
+ self.service: AudioConverterService = self._create_service(self.config.driver)
26
+
27
+ def _create_service(self, driver: AudioConverterDriver) -> AudioConverterService:
28
+ try:
29
+ if not AudioConverterServiceRegistry:
30
+ from . import drivers
31
+ return AudioConverterServiceRegistry[driver](self.id, self.config, self.daemon)
32
+ except KeyError:
33
+ raise ValueError(f"Unsupported audio converter driver: {driver}")
34
+
35
+ def _get_setup_requirements(self) -> Optional[List[str]]:
36
+ return self.service.get_setup_requirements()
37
+
38
+ async def _serve(self) -> None:
39
+ await self.service.start()
40
+
41
+ async def _shutdown(self) -> None:
42
+ await self.service.stop()
43
+
44
+ async def _run(self, action: ActionConfig, context: ComponentActionContext) -> Any:
45
+ return await AudioConverterAction(action).run(context, self.service)
@@ -0,0 +1,30 @@
1
+ from typing import Type, Optional, Dict, List, Any
2
+ from abc import abstractmethod
3
+ from mindor.dsl.schema.component import AudioConverterComponentConfig, AudioConverterDriver
4
+ from mindor.dsl.schema.action import AudioConverterActionConfig
5
+ from mindor.core.foundation import AsyncService
6
+ from ...context import ComponentActionContext
7
+
8
+ class AudioConverterService(AsyncService):
9
+ def __init__(self, id: str, config: AudioConverterComponentConfig, daemon: bool):
10
+ super().__init__(daemon)
11
+ self.id: str = id
12
+ self.config: AudioConverterComponentConfig = config
13
+
14
+ def get_setup_requirements(self) -> Optional[List[str]]:
15
+ return None
16
+
17
+ async def run(self, action: AudioConverterActionConfig, context: ComponentActionContext) -> Any:
18
+ return await self._run(action, context)
19
+
20
+ @abstractmethod
21
+ async def _run(self, action: AudioConverterActionConfig, context: ComponentActionContext) -> Any:
22
+ pass
23
+
24
+ def register_audio_converter_service(driver: AudioConverterDriver):
25
+ def decorator(cls: Type[AudioConverterService]) -> Type[AudioConverterService]:
26
+ AudioConverterServiceRegistry[driver] = cls
27
+ return cls
28
+ return decorator
29
+
30
+ AudioConverterServiceRegistry: Dict[AudioConverterDriver, Type[AudioConverterService]] = {}
@@ -0,0 +1,33 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Optional, Any
4
+ from mindor.dsl.schema.action import AudioConverterActionConfig, AudioSourceConfig
5
+ from ..base import ComponentActionContext
6
+
7
+ class AudioSource:
8
+ def __init__(self, path: Optional[str], data: Any, format: Optional[str], sample_rate: Optional[int], channels: Optional[int]):
9
+ self.path = path
10
+ self.data = data
11
+ self.format = format
12
+ self.sample_rate = sample_rate
13
+ self.channels = channels
14
+
15
+ class AudioConverterAction:
16
+ def __init__(self, config: AudioConverterActionConfig):
17
+ self.config: AudioConverterActionConfig = config
18
+
19
+ async def _render_source(self, context: ComponentActionContext) -> AudioSource:
20
+ source = self.config.source
21
+ if isinstance(source, AudioSourceConfig):
22
+ path = await context.render_variable(source.path) if source.path else None
23
+ data = await context.render_variable(source.data) if source.data else None
24
+ format = await context.render_variable(source.format) if source.format else None
25
+ sample_rate = await context.render_variable(source.sample_rate) if isinstance(source.sample_rate, str) else source.sample_rate
26
+ channels = await context.render_variable(source.channels) if isinstance(source.channels, str) else source.channels
27
+ else:
28
+ path = await context.render_variable(source)
29
+ data = None
30
+ format = None
31
+ sample_rate = None
32
+ channels = None
33
+ return AudioSource(path, data, format, sample_rate, channels)
@@ -0,0 +1,103 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Optional, Union, Any
4
+ from mindor.dsl.schema.component import AudioConverterComponentConfig
5
+ from mindor.dsl.schema.action import AudioConverterActionConfig
6
+ from mindor.core.logger import logging
7
+ from ..base import AudioConverterService, AudioConverterDriver, register_audio_converter_service
8
+ from ..base import ComponentActionContext
9
+ from .common import AudioConverterAction, AudioSource
10
+ import asyncio
11
+ import tempfile
12
+ import os
13
+
14
+ _FORMAT_CODEC_MAP: dict[str, str] = {
15
+ "mp3": "libmp3lame",
16
+ "wav": "pcm_s16le",
17
+ "flac": "flac",
18
+ "aac": "aac",
19
+ "m4a": "aac",
20
+ "opus": "libopus",
21
+ "ogg": "libvorbis",
22
+ }
23
+
24
+ class FFmpegAudioConverterAction(AudioConverterAction):
25
+ async def run(self, context: ComponentActionContext) -> Any:
26
+ source = await self._render_source(context)
27
+ format = await context.render_variable(self.config.format) if self.config.format else "wav"
28
+ codec = await context.render_variable(self.config.codec) if self.config.codec else None
29
+ bitrate = await context.render_variable(self.config.bitrate) if self.config.bitrate else None
30
+ sample_rate = await context.render_variable(self.config.sample_rate) if isinstance(self.config.sample_rate, str) else self.config.sample_rate
31
+ channels = await context.render_variable(self.config.channels) if isinstance(self.config.channels, str) else self.config.channels
32
+
33
+ output_path = await self._convert(source, format, codec, bitrate, sample_rate, channels)
34
+ result = {
35
+ "path": output_path,
36
+ "format": format
37
+ }
38
+ context.register_source("result", result)
39
+
40
+ return (await context.render_variable(self.config.output, ignore_files=True)) if self.config.output else result
41
+
42
+ async def _convert(
43
+ self,
44
+ source: AudioSource,
45
+ format: str,
46
+ codec: Optional[str],
47
+ bitrate: Optional[str],
48
+ sample_rate: Optional[Union[int, str]],
49
+ channels: Optional[Union[int, str]],
50
+ ) -> str:
51
+ output_path = os.path.join(tempfile.gettempdir(), f"audio_converter_{os.getpid()}_{id(self)}.{format}")
52
+
53
+ command = [ "ffmpeg", "-hide_banner" ]
54
+
55
+ if source.format:
56
+ command.extend([ "-f", source.format ])
57
+ if source.sample_rate:
58
+ command.extend([ "-ar", str(source.sample_rate) ])
59
+ if source.channels:
60
+ command.extend([ "-ac", str(source.channels) ])
61
+
62
+ is_pipe = source.data is not None
63
+ command.extend([ "-i", "pipe:0" if is_pipe else source.path ])
64
+
65
+ resolved_codec = codec or _FORMAT_CODEC_MAP.get(format)
66
+ if resolved_codec:
67
+ command.extend([ "-c:a", resolved_codec ])
68
+ if bitrate:
69
+ command.extend([ "-b:a", bitrate ])
70
+ if sample_rate:
71
+ command.extend([ "-ar", str(sample_rate) ])
72
+ if channels:
73
+ command.extend([ "-ac", str(channels) ])
74
+
75
+ command.extend([ "-y", output_path ])
76
+
77
+ logging.info(f"Converting '{'pipe:0' if is_pipe else source.path}' to '{format}' format")
78
+
79
+ process = await asyncio.create_subprocess_exec(
80
+ *command,
81
+ stdin=asyncio.subprocess.PIPE if is_pipe else None,
82
+ stdout=asyncio.subprocess.PIPE,
83
+ stderr=asyncio.subprocess.PIPE
84
+ )
85
+
86
+ raw = bytes(source.data) if isinstance(source.data, (bytes, bytearray)) else None
87
+ _, stderr = await process.communicate(input=raw)
88
+
89
+ if process.returncode != 0:
90
+ error_output = stderr.decode("utf-8", errors="replace")
91
+ raise RuntimeError(f"ffmpeg audio conversion failed (exit code {process.returncode}): {error_output}")
92
+
93
+ logging.info(f"Audio conversion completed: '{output_path}'")
94
+
95
+ return output_path
96
+
97
+ @register_audio_converter_service(AudioConverterDriver.FFMPEG)
98
+ class FFmpegAudioConverterService(AudioConverterService):
99
+ def __init__(self, id: str, config: AudioConverterComponentConfig, daemon: bool):
100
+ super().__init__(id, config, daemon)
101
+
102
+ async def _run(self, action: AudioConverterActionConfig, context: ComponentActionContext) -> Any:
103
+ return await FFmpegAudioConverterAction(action).run(context)
@@ -1,5 +1,5 @@
1
- from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Any
2
- from abc import ABC, abstractmethod
1
+ from typing import Type, Optional, Dict, List, Any
2
+ from abc import abstractmethod
3
3
  from mindor.dsl.schema.component import VideoConverterComponentConfig, VideoConverterDriver
4
4
  from mindor.dsl.schema.action import VideoConverterActionConfig
5
5
  from mindor.core.foundation import AsyncService
@@ -0,0 +1,36 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Optional, Any
4
+ from mindor.dsl.schema.action import VideoConverterActionConfig, VideoSourceConfig
5
+ from ..base import ComponentActionContext
6
+
7
+ class VideoSource:
8
+ def __init__(self, path: Optional[str], data: Any, format: Optional[str], resolution: Optional[str], fps: Optional[str], pixel_format: Optional[str]):
9
+ self.path = path
10
+ self.data = data
11
+ self.format = format
12
+ self.resolution = resolution
13
+ self.fps = fps
14
+ self.pixel_format = pixel_format
15
+
16
+ class VideoConverterAction:
17
+ def __init__(self, config: VideoConverterActionConfig):
18
+ self.config: VideoConverterActionConfig = config
19
+
20
+ async def _render_source(self, context: ComponentActionContext) -> VideoSource:
21
+ source = self.config.source
22
+ if isinstance(source, VideoSourceConfig):
23
+ path = await context.render_variable(source.path) if source.path else None
24
+ data = await context.render_variable(source.data) if source.data else None
25
+ format = await context.render_variable(source.format) if source.format else None
26
+ resolution = await context.render_variable(source.resolution) if source.resolution else None
27
+ fps = await context.render_variable(source.fps) if source.fps else None
28
+ pixel_format = await context.render_variable(source.pixel_format) if source.pixel_format else None
29
+ else:
30
+ path = await context.render_variable(source)
31
+ data = None
32
+ format = None
33
+ resolution = None
34
+ fps = None
35
+ pixel_format = None
36
+ return VideoSource(path, data, format, resolution, fps, pixel_format)
@@ -6,16 +6,14 @@ from mindor.dsl.schema.action import VideoConverterActionConfig
6
6
  from mindor.core.logger import logging
7
7
  from ..base import VideoConverterService, VideoConverterDriver, register_video_converter_service
8
8
  from ..base import ComponentActionContext
9
+ from .common import VideoConverterAction, VideoSource
9
10
  import asyncio
10
11
  import tempfile
11
12
  import os
12
13
 
13
- class FFmpegVideoConverterAction:
14
- def __init__(self, config: VideoConverterActionConfig):
15
- self.config: VideoConverterActionConfig = config
16
-
14
+ class FFmpegVideoConverterAction(VideoConverterAction):
17
15
  async def run(self, context: ComponentActionContext) -> Any:
18
- video = await context.render_file(self.config.video)
16
+ source = await self._render_source(context)
19
17
  format = await context.render_variable(self.config.format) if self.config.format else "mp4"
20
18
  codec = await context.render_variable(self.config.codec) if self.config.codec else None
21
19
  audio_codec = await context.render_variable(self.config.audio_codec) if self.config.audio_codec else None
@@ -23,7 +21,7 @@ class FFmpegVideoConverterAction:
23
21
  resolution = await context.render_variable(self.config.resolution) if self.config.resolution else None
24
22
  fps = await context.render_variable(self.config.fps) if self.config.fps else None
25
23
 
26
- output_path = await self._convert(video, format, codec, audio_codec, bitrate, resolution, fps)
24
+ output_path = await self._convert(source, format, codec, audio_codec, bitrate, resolution, fps)
27
25
  result = {
28
26
  "path": output_path,
29
27
  "format": format
@@ -34,7 +32,7 @@ class FFmpegVideoConverterAction:
34
32
 
35
33
  async def _convert(
36
34
  self,
37
- video: str,
35
+ source: VideoSource,
38
36
  format: str,
39
37
  codec: Optional[str],
40
38
  audio_codec: Optional[str],
@@ -43,8 +41,20 @@ class FFmpegVideoConverterAction:
43
41
  fps: Optional[str]
44
42
  ) -> str:
45
43
  output_path = os.path.join(tempfile.gettempdir(), f"video_converter_{os.getpid()}_{id(self)}.{format}")
44
+ is_pipe = source.data is not None
45
+
46
+ command = [ "ffmpeg", "-hide_banner" ]
47
+
48
+ if source.format:
49
+ command.extend([ "-f", source.format ])
50
+ if source.resolution:
51
+ command.extend([ "-s", source.resolution ])
52
+ if source.fps:
53
+ command.extend([ "-r", source.fps ])
54
+ if source.pixel_format:
55
+ command.extend([ "-pix_fmt", source.pixel_format ])
46
56
 
47
- command = [ "ffmpeg", "-hide_banner", "-i", video ]
57
+ command.extend([ "-i", "pipe:0" if is_pipe else source.path ])
48
58
 
49
59
  if codec:
50
60
  command.extend([ "-c:v", codec ])
@@ -59,15 +69,17 @@ class FFmpegVideoConverterAction:
59
69
 
60
70
  command.extend([ "-movflags", "+faststart", "-y", output_path ])
61
71
 
62
- logging.info(f"Converting '{video}' to '{format}' format")
72
+ logging.info(f"Converting '{'pipe:0' if is_pipe else source.path}' to '{format}' format")
63
73
 
64
74
  process = await asyncio.create_subprocess_exec(
65
75
  *command,
76
+ stdin=asyncio.subprocess.PIPE if is_pipe else None,
66
77
  stdout=asyncio.subprocess.PIPE,
67
78
  stderr=asyncio.subprocess.PIPE
68
79
  )
69
80
 
70
- _, stderr = await process.communicate()
81
+ raw = bytes(source.data) if isinstance(source.data, (bytes, bytearray)) else None
82
+ _, stderr = await process.communicate(input=raw)
71
83
 
72
84
  if process.returncode != 0:
73
85
  error_output = stderr.decode("utf-8", errors="replace")
@@ -67,9 +67,12 @@ class WebSocketServerAction:
67
67
  await self._send(connection, message)
68
68
 
69
69
  if context.contains_variable_reference("response[]", self.config.output):
70
- return self._receive_stream(connection, format, context, connection if owned else None)
70
+ return self._receive_stream(connection, format, context, owned)
71
71
 
72
- response = await self._receive(connection, format, collect)
72
+ if collect:
73
+ response = await self._receive_collect(connection, format)
74
+ else:
75
+ response = await self._receive_single(connection, format)
73
76
  except:
74
77
  if owned:
75
78
  await connection.close()
@@ -92,11 +95,6 @@ class WebSocketServerAction:
92
95
  else:
93
96
  await connection.websocket.send(str(message))
94
97
 
95
- async def _receive(self, connection: WebSocketConnection, format: WebSocketReceiveFormat, collect: bool) -> Any:
96
- if collect:
97
- return await self._receive_collect(connection, format)
98
- return await self._receive_single(connection, format)
99
-
100
98
  async def _receive_collect(self, connection: WebSocketConnection, format: WebSocketReceiveFormat) -> Any:
101
99
  if format == WebSocketReceiveFormat.BINARY:
102
100
  buffer = bytearray()
@@ -123,7 +121,7 @@ class WebSocketServerAction:
123
121
  return frame
124
122
  return None
125
123
 
126
- async def _receive_stream(self, connection: WebSocketConnection, format: WebSocketReceiveFormat, context: ComponentActionContext, owned_connection: Optional[WebSocketConnection] = None):
124
+ async def _receive_stream(self, connection: WebSocketConnection, format: WebSocketReceiveFormat, context: ComponentActionContext, owned: bool = False):
127
125
  try:
128
126
  async for frame in connection.receive_frames():
129
127
  frame = self._decode_frame(frame, format)
@@ -131,8 +129,8 @@ class WebSocketServerAction:
131
129
  context.register_source("response[]", frame)
132
130
  yield await context.render_variable(self.config.output, ignore_files=True)
133
131
  finally:
134
- if owned_connection:
135
- await owned_connection.close()
132
+ if owned:
133
+ await connection.close()
136
134
 
137
135
  def _decode_frame(self, frame: Any, format: WebSocketReceiveFormat) -> Any:
138
136
  if format == WebSocketReceiveFormat.BINARY and isinstance(frame, bytes):
@@ -5,11 +5,12 @@ from typing import Type, Union, Literal, Optional, Dict, List, Callable, Any
5
5
  from mindor.dsl.schema.workflow import WorkflowVariableConfig, WorkflowVariableGroupConfig, WorkflowVariableType, WorkflowVariableFormat
6
6
  from mindor.core.workflow.schema import WorkflowSchema
7
7
 
8
- from mindor.core.utils.streaming import StreamResource, Base64StreamResource
9
- from mindor.core.utils.streaming import save_stream_to_temporary_file, BytesStreamResource
8
+ from mindor.core.utils.streaming import StreamResource, BytesStreamResource, Base64StreamResource
9
+ from mindor.core.utils.streaming import save_stream_to_temporary_file
10
10
  from mindor.core.utils.http_request import create_upload_file
11
11
  from mindor.core.utils.http_client import create_stream_with_url
12
12
  from mindor.core.utils.image import load_image_from_stream
13
+ from mindor.core.utils.audio import pcm_to_wav
13
14
  from mindor.core.utils.resolvers import FieldResolver
14
15
  from PIL import Image as PILImage
15
16
  from collections.abc import AsyncIterator
@@ -232,30 +233,23 @@ class GradioWebUIBuilder:
232
233
  async def _build_input_value(self, arguments: List[Any], variables: List[WorkflowVariableConfig]) -> Any:
233
234
  if len(variables) == 1 and not variables[0].name:
234
235
  value, variable = arguments[0], variables[0]
235
- return await self._convert_input_value(value, variable.type, variable.subtype, variable.format, variable.internal)
236
+ return await self._convert_input_value(value, variable)
236
237
 
237
238
  input: Dict[str, Any] = {}
238
239
  for value, variable in zip(arguments, variables):
239
- input[variable.name] = await self._convert_input_value(value, variable.type, variable.subtype, variable.format, variable.internal)
240
+ input[variable.name] = await self._convert_input_value(value, variable)
240
241
  return input
241
242
 
242
- async def _convert_input_value(
243
- self,
244
- value: Any,
245
- type: WorkflowVariableType,
246
- subtype: Optional[str],
247
- format: Optional[WorkflowVariableFormat],
248
- internal: bool
249
- ) -> Any:
250
- if type in [ WorkflowVariableType.IMAGE, WorkflowVariableType.AUDIO, WorkflowVariableType.VIDEO, WorkflowVariableType.FILE ] and (not internal or not format):
251
- if internal and format and format != "path":
252
- value = await self._save_value_to_temporary_file(value, subtype, format)
253
- return create_upload_file(value, type.value, subtype) if value is not None else None
243
+ async def _convert_input_value(self, value: Any, variable: WorkflowVariableConfig) -> Any:
244
+ if variable.type in [ WorkflowVariableType.IMAGE, WorkflowVariableType.AUDIO, WorkflowVariableType.VIDEO, WorkflowVariableType.FILE ] and (not variable.internal or not variable.format):
245
+ if variable.internal and variable.format and variable.format != "path":
246
+ value = await self._save_value_to_temporary_file(value, variable.subtype, variable.attrs, variable.format)
247
+ return create_upload_file(value, variable.type.value, variable.subtype) if value is not None else None
254
248
 
255
- if type == WorkflowVariableType.INTEGER:
249
+ if variable.type == WorkflowVariableType.INTEGER:
256
250
  return int(value) if value != "" else None
257
251
 
258
- if type == WorkflowVariableType.LIST:
252
+ if variable.type == WorkflowVariableType.LIST:
259
253
  return str(value).split(",")
260
254
 
261
255
  return value if value != "" else None
@@ -371,7 +365,7 @@ class GradioWebUIBuilder:
371
365
  flattened.extend(await self._flatten_output_value(value, variable.variables))
372
366
  else:
373
367
  value = self._resolve_variable_output(output, variable)
374
- flattened.append(await self._convert_output_value(value, variable.type, variable.subtype, variable.format, variable.internal))
368
+ flattened.append(await self._convert_output_value(value, variable))
375
369
  return flattened
376
370
 
377
371
  def _resolve_variable_output(
@@ -397,25 +391,18 @@ class GradioWebUIBuilder:
397
391
 
398
392
  return None if variable.name else output
399
393
 
400
- async def _convert_output_value(
401
- self,
402
- value: Any,
403
- type: WorkflowVariableType,
404
- subtype: Optional[str],
405
- format: Optional[WorkflowVariableFormat],
406
- internal: bool
407
- ) -> Any:
408
- if format == WorkflowVariableFormat.SSE_JSON:
409
- return self._resolve_json_field_from_bytes(value, subtype, format)
394
+ async def _convert_output_value(self, value: Any, variable: WorkflowVariableConfig) -> Any:
395
+ if variable.format == WorkflowVariableFormat.SSE_JSON:
396
+ return self._resolve_json_field_from_bytes(value, variable.subtype, variable.format)
410
397
 
411
- if type in [ WorkflowVariableType.STRING, WorkflowVariableType.TEXT ]:
412
- return self._convert_value_to_string(value, subtype, format)
398
+ if variable.type in [ WorkflowVariableType.STRING, WorkflowVariableType.TEXT ]:
399
+ return self._convert_value_to_string(value, variable.subtype, variable.format)
413
400
 
414
- if type == WorkflowVariableType.IMAGE:
415
- return await self._load_image_from_value(value, subtype, format)
401
+ if variable.type == WorkflowVariableType.IMAGE:
402
+ return await self._load_image_from_value(value, variable.subtype, variable.format)
416
403
 
417
- if type in [ WorkflowVariableType.AUDIO, WorkflowVariableType.VIDEO ]:
418
- return await self._save_value_to_temporary_file(value, subtype, format)
404
+ if variable.type in [ WorkflowVariableType.AUDIO, WorkflowVariableType.VIDEO ]:
405
+ return await self._save_value_to_temporary_file(value, variable.subtype, variable.attrs, variable.format)
419
406
 
420
407
  return value
421
408
 
@@ -449,7 +436,7 @@ class GradioWebUIBuilder:
449
436
 
450
437
  return None
451
438
 
452
- async def _save_value_to_temporary_file(self, value: Any, subtype: Optional[str], format: Optional[WorkflowVariableFormat]) -> Optional[str]:
439
+ async def _save_value_to_temporary_file(self, value: Any, subtype: Optional[str], attrs: Optional[Dict[str, str]], format: Optional[WorkflowVariableFormat]) -> Optional[str]:
453
440
  if format == WorkflowVariableFormat.BASE64 and isinstance(value, str):
454
441
  return await save_stream_to_temporary_file(Base64StreamResource(value), subtype)
455
442
 
@@ -468,12 +455,18 @@ class GradioWebUIBuilder:
468
455
  return None
469
456
 
470
457
  async def _collect_stream_to_file(self, stream, variable: WorkflowVariableConfig) -> Optional[str]:
458
+ data = await self._collect_stream_to_bytes(stream)
459
+
460
+ if variable.type == WorkflowVariableType.AUDIO and variable.subtype == "pcm":
461
+ return await save_stream_to_temporary_file(BytesStreamResource(pcm_to_wav(data, variable.attrs)), "wav")
462
+
463
+ return await save_stream_to_temporary_file(BytesStreamResource(data), variable.subtype)
464
+
465
+ async def _collect_stream_to_bytes(self, stream) -> Optional[bytes]:
471
466
  buffer = bytearray()
472
467
  async for chunk in stream:
473
468
  if isinstance(chunk, bytes):
474
469
  buffer.extend(chunk)
475
470
  elif isinstance(chunk, (bytearray, memoryview)):
476
471
  buffer.extend(bytes(chunk))
477
- if not buffer:
478
- return None
479
- return await save_stream_to_temporary_file(BytesStreamResource(bytes(buffer)), variable.subtype)
472
+ return bytes(buffer)
@@ -0,0 +1,12 @@
1
+ from typing import Optional, Dict
2
+ import wave, io
3
+
4
+ def pcm_to_wav(data: bytes, attrs: Optional[Dict[str, str]] = None) -> bytes:
5
+ attrs = attrs or {}
6
+ buffer = io.BytesIO()
7
+ with wave.open(buffer, "wb") as wav:
8
+ wav.setnchannels(int(attrs.get("channels", 1)))
9
+ wav.setsampwidth(int(attrs.get("bit_depth", 16)) // 8)
10
+ wav.setframerate(int(attrs.get("sample_rate", 44100)))
11
+ wav.writeframes(data)
12
+ return buffer.getvalue()
@@ -16,13 +16,13 @@ class VariableRenderer:
16
16
  self.field_resolver: FieldResolver = FieldResolver()
17
17
  self.patterns: Dict[str, re.Pattern] = {
18
18
  "variable": re.compile(
19
- r"""\$\{ # ${
20
- (?:\s*([a-zA-Z_][^.\[\s]*(?:\[\])?))(?:\[(-?[0-9]+)\])? # key: input, result[], result[0], result[-1], etc.
21
- (?:\.([^\s|}]+))? # path: key, key.path[0], etc.
22
- (?:\s*as\s*([^\s/;}]+)(?:/([^\s;}]+))?(?:;([^\s}]+))?)? # type/subtype;format
23
- (?:\s*\|\s*((?:\$\{[^}]+\}|\\[$@{}]|(?!\s*(?:@\(|\$\{)).)+))? # default value after `|`
24
- (?:\s*(@\(\s*[\w]+\s+(?:\\[$@{}]|(?!\s*\$\{).)+\)))? # annotations
25
- \s*\}""", # }
19
+ r"""\$\{ # ${
20
+ (?:\s*([a-zA-Z_][^.\[\s]*(?:\[\])?))(?:\[(-?[0-9]+)\])? # key: input, result[], result[0], result[-1], etc.
21
+ (?:\.([^\s|}]+))? # path: key, key.path[0], etc.
22
+ (?:\s*as\s*([^\s/;}]+)(?:/([^\s;\[}]+)(?:\[([^\]]*)\])?)?(?:;([^\s}]+))?)? # type/subtype[attrs];format
23
+ (?:\s*\|\s*((?:\$\{[^}]+\}|\\[$@{}]|(?!\s*(?:@\(|\$\{)).)+))? # default value after `|`
24
+ (?:\s*(@\(\s*[\w]+\s+(?:\\[$@{}]|(?!\s*\$\{).)+\)))? # annotations
25
+ \s*\}""", # }
26
26
  re.VERBOSE,
27
27
  )
28
28
  }
@@ -52,9 +52,12 @@ class VariableRenderer:
52
52
  matches = list(self.patterns["variable"].finditer(text))
53
53
 
54
54
  for m in reversed(matches):
55
- key, index, path, type, subtype, format, default = m.group(1, 2, 3, 4, 5, 6, 7)
55
+ key, index, path, type, subtype, attrs, format, default = m.group(1, 2, 3, 4, 5, 6, 7, 8)
56
56
  index = int(index) if index else None
57
57
 
58
+ if attrs:
59
+ attrs = self._parse_attrs(attrs)
60
+
58
61
  try:
59
62
  value = self.field_resolver.resolve(await self.source_resolver(key, index), path)
60
63
  except Exception:
@@ -64,7 +67,7 @@ class VariableRenderer:
64
67
  value = await self._render_text(default, ignore_files)
65
68
 
66
69
  if type and value is not None:
67
- value = await self._convert_value_to_type(value, type, subtype, format, ignore_files)
70
+ value = await self._convert_value_to_type(value, type, subtype, attrs, format, ignore_files)
68
71
 
69
72
  start, end = m.span()
70
73
 
@@ -75,7 +78,7 @@ class VariableRenderer:
75
78
 
76
79
  return text
77
80
 
78
- async def _convert_value_to_type(self, value: Any, type: str, subtype: str, format: Optional[str], ignore_files: bool) -> Any:
81
+ async def _convert_value_to_type(self, value: Any, type: str, subtype: Optional[str], attrs: Optional[Dict[str, str]], format: Optional[str], ignore_files: bool) -> Any:
79
82
  if type == "number":
80
83
  return float(value)
81
84
 
@@ -113,13 +116,13 @@ class VariableRenderer:
113
116
  return await FileValueRenderer().render(value)
114
117
  if not ignore_files and not isinstance(value, UploadFile):
115
118
  if format != "path":
116
- value = await self._save_value_to_temporary_file(value, subtype, format)
119
+ value = await self._save_value_to_temporary_file(value, subtype, attrs, format)
117
120
  return create_upload_file(value, type, subtype)
118
121
  return value
119
122
 
120
123
  return value
121
124
 
122
- async def _save_value_to_temporary_file(self, value: Any, subtype: Optional[str], format: Optional[str]) -> Optional[str]:
125
+ async def _save_value_to_temporary_file(self, value: Any, subtype: Optional[str], attrs: Optional[Dict[str, str]], format: Optional[str]) -> Optional[str]:
123
126
  if format == "base64" and isinstance(value, str):
124
127
  return await save_stream_to_temporary_file(Base64StreamResource(value), subtype)
125
128
 
@@ -134,6 +137,17 @@ class VariableRenderer:
134
137
 
135
138
  return None
136
139
 
140
+ def _parse_attrs(self, value: Optional[str]) -> Optional[Dict[str, str]]:
141
+ attrs: Dict[str, str] = {}
142
+
143
+ for pair in value.split(","):
144
+ pair = pair.strip()
145
+ if "=" in pair:
146
+ k, _, v = pair.partition("=")
147
+ attrs[k.strip()] = v.strip()
148
+
149
+ return attrs
150
+
137
151
  def _contains_reference(self, key: str, element: Any) -> bool:
138
152
  if isinstance(element, str):
139
153
  return any(key == m.group(1) for m in self.patterns["variable"].finditer(element))