model-compose 0.4.5__tar.gz → 0.4.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {model_compose-0.4.5 → model_compose-0.4.7}/PKG-INFO +1 -1
- {model_compose-0.4.5 → model_compose-0.4.7}/pyproject.toml +1 -1
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/base.py +2 -1
- model_compose-0.4.7/src/mindor/core/component/services/model/base/__init__.py +3 -0
- model_compose-0.4.7/src/mindor/core/component/services/model/base/common.py +81 -0
- model_compose-0.4.7/src/mindor/core/component/services/model/base/huggingface.py +171 -0
- model_compose-0.4.7/src/mindor/core/component/services/model/base/huggingface_hub.py +23 -0
- model_compose-0.4.7/src/mindor/core/component/services/model/base/unsloth.py +54 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/model/model.py +6 -14
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/model/tasks/__init__.py +2 -2
- model_compose-0.4.7/src/mindor/core/component/services/model/tasks/chat_completion/__init__.py +1 -0
- model_compose-0.4.7/src/mindor/core/component/services/model/tasks/chat_completion/huggingface.py +41 -0
- model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_generation/__init__.py +1 -0
- model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_generation/common.py +47 -0
- model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_generation/custom.py +12 -0
- model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_generation/flux.py +54 -0
- model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_generation/hunyuan_image.py +54 -0
- model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_generation/sdxl.py +54 -0
- model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_to_text/__init__.py +1 -0
- model_compose-0.4.5/src/mindor/core/component/services/model/tasks/image_to_text.py → model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_to_text/huggingface.py +80 -65
- model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_upscale/__init__.py +1 -0
- model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_upscale/common.py +74 -0
- model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_upscale/custom.py +24 -0
- model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_upscale/esrgan.py +60 -0
- model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_upscale/ldsr.py +103 -0
- model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_upscale/real_esrgan.py +84 -0
- model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_upscale/swinir.py +204 -0
- model_compose-0.4.7/src/mindor/core/component/services/model/tasks/text_classification/__init__.py +1 -0
- model_compose-0.4.5/src/mindor/core/component/services/model/tasks/text_classification.py → model_compose-0.4.7/src/mindor/core/component/services/model/tasks/text_classification/huggingface.py +30 -35
- model_compose-0.4.7/src/mindor/core/component/services/model/tasks/text_embedding/__init__.py +1 -0
- model_compose-0.4.5/src/mindor/core/component/services/model/tasks/text_embedding.py → model_compose-0.4.7/src/mindor/core/component/services/model/tasks/text_embedding/huggingface.py +32 -38
- model_compose-0.4.7/src/mindor/core/component/services/model/tasks/text_generation/__init__.py +1 -0
- model_compose-0.4.5/src/mindor/core/component/services/model/tasks/text_generation.py → model_compose-0.4.7/src/mindor/core/component/services/model/tasks/text_generation/huggingface.py +88 -67
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runner/http_client.py +1 -1
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/services/http_server.py +5 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/http_client.py +27 -4
- model_compose-0.4.7/src/mindor/core/utils/image.py +67 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/package.py +3 -3
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/streaming.py +6 -20
- {model_compose-0.4.5/src/mindor/dsl/schema/component → model_compose-0.4.7/src/mindor/dsl/schema/action}/impl/model/impl/__init__.py +2 -2
- model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +30 -0
- model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/common.py +7 -0
- model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_generation/__init__.py +1 -0
- model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_generation/image_generation.py +6 -0
- model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/__init__.py +4 -0
- model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/common.py +13 -0
- model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/flux.py +11 -0
- model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/hunyuan_image.py +11 -0
- model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/sdxl.py +11 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +6 -6
- model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/__init__.py +1 -0
- model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/image_upscale.py +9 -0
- model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/__init__.py +5 -0
- model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/common.py +17 -0
- model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/esrgan.py +14 -0
- model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/ldsr.py +14 -0
- model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/real_esrgan.py +16 -0
- model_compose-0.4.7/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/swinir.py +16 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +4 -3
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +4 -4
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +7 -6
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/model/model.py +2 -2
- {model_compose-0.4.5/src/mindor/dsl/schema/action → model_compose-0.4.7/src/mindor/dsl/schema/component}/impl/model/impl/__init__.py +2 -2
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/model/impl/chat_completion.py +1 -1
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/common.py +97 -0
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_generation/__init__.py +1 -0
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_generation/image_generation.py +10 -0
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/__init__.py +2 -0
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/common.py +28 -0
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/flux.py +14 -0
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/hunyuan_image.py +14 -0
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/sdxl.py +14 -0
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/__init__.py +1 -0
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/image_upscale.py +13 -0
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/__init__.py +5 -0
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/common.py +28 -0
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/esrgan.py +15 -0
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/ldsr.py +14 -0
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/real_esrgan.py +15 -0
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/swinir.py +14 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +5 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/model/impl/types.py +3 -2
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/model/model.py +3 -2
- {model_compose-0.4.5 → model_compose-0.4.7}/src/model_compose.egg-info/PKG-INFO +1 -1
- {model_compose-0.4.5 → model_compose-0.4.7}/src/model_compose.egg-info/SOURCES.txt +58 -12
- model_compose-0.4.5/src/mindor/core/component/services/model/base.py +0 -142
- model_compose-0.4.5/src/mindor/core/component/services/model/loader.py +0 -25
- model_compose-0.4.5/src/mindor/core/component/services/model/tasks/summarization.py +0 -136
- model_compose-0.4.5/src/mindor/core/component/services/model/tasks/translation.py +0 -136
- model_compose-0.4.5/src/mindor/core/utils/image.py +0 -14
- model_compose-0.4.5/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +0 -41
- model_compose-0.4.5/src/mindor/dsl/schema/action/impl/model/impl/common.py +0 -18
- model_compose-0.4.5/src/mindor/dsl/schema/action/impl/model/impl/summarization.py +0 -23
- model_compose-0.4.5/src/mindor/dsl/schema/action/impl/model/impl/translation.py +0 -23
- model_compose-0.4.5/src/mindor/dsl/schema/component/impl/model/impl/common.py +0 -44
- model_compose-0.4.5/src/mindor/dsl/schema/component/impl/model/impl/summarization.py +0 -17
- model_compose-0.4.5/src/mindor/dsl/schema/component/impl/model/impl/translation.py +0 -17
- {model_compose-0.4.5 → model_compose-0.4.7}/LICENSE +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/README.md +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/setup.cfg +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/cli/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/cli/compose.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/component.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/context.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/http_client.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/http_server.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/mcp_client.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/mcp_server.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/model/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/shell.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/text_splitter.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/vector_store/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/vector_store/base.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/vector_store/drivers/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/vector_store/drivers/chroma.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/vector_store/drivers/milvus.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/vector_store/vector_store.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/workflow.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/compose/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/compose/compose.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/compose/manager.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/base.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/controller.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runner/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runner/client.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runner/mcp_client.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runner/runner.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runtime/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runtime/docker/context/Dockerfile +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runtime/docker/docker.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runtime/native/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runtime/native/native.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/runtime/specs.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/services/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/services/mcp_server.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/webui/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/webui/gradio.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/controller/webui/webui.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/gateway/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/gateway/base.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/gateway/gateway.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/gateway/services/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/gateway/services/http_tunnel.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/gateway/services/ssh_tunnel.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/listener/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/listener/base.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/listener/listener.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/listener/services/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/listener/services/http_callback.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/logger/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/logger/base.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/logger/logger.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/logger/logging.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/logger/services/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/logger/services/console.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/logger/services/file.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/runtime/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/runtime/docker/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/runtime/docker/docker.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/runtime/env.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/services/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/services/async_service.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/caching.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/http_request.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/http_response.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/http_status.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/mcp_client.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/renderers.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/resolvers.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/shell.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/ssh_client.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/streamer.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/time.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/utils/workqueue.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/context.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/base.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/impl/action.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/impl/delay.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/impl/filter.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/impl/if_.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/impl/random_router.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/impl/switch.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/job/job.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/schema.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/workflow/workflow.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/loader.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/action.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/common.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/http_client.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/http_server.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/text_splitter.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/vector_store/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/vector_store/impl/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/vector_store/impl/chroma.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/vector_store/impl/common.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/vector_store/impl/faiss.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/vector_store/impl/milvus.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/vector_store/impl/qdrant.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/vector_store/vector_store.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/component.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/common.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/http_client.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/mcp_client.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/model/impl/image_to_text.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/text_splitter.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/types.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/vector_store/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/vector_store/impl/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/vector_store/impl/chroma.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/vector_store/impl/common.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/vector_store/impl/faiss.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/vector_store/impl/milvus.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/vector_store/impl/types.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/vector_store/vector_store.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/compose.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/controller.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/impl/common.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/impl/http_server.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/impl/mcp_server.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/impl/types.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/webui/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/webui/impl/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/webui/impl/common.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/webui/impl/gradio.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/webui/impl/static.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/controller/webui/webui.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/common.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/http_tunnel/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/http_tunnel/http_tunnel.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/cloudflare.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/common.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/ngrok.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/impl/action.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/impl/common.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/impl/filter.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/impl/random_router.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/impl/types.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/job/job.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/listener/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/listener/impl/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/listener/impl/common.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/listener/impl/http_callback.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/listener/impl/types.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/listener/listener.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/logger/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/logger/impl/common.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/logger/impl/file.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/logger/logger.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/runtime/impl/common.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/transport/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/transport/http.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/transport/ssh.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/schema/workflow.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/utils/__init__.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/utils/annotation.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/dsl/utils/enum.py +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/model_compose.egg-info/dependency_links.txt +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/model_compose.egg-info/entry_points.txt +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/model_compose.egg-info/requires.txt +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/src/model_compose.egg-info/top_level.txt +0 -0
- {model_compose-0.4.5 → model_compose-0.4.7}/tests/test_cli.py +0 -0
|
@@ -114,10 +114,11 @@ class ComponentService(AsyncService):
|
|
|
114
114
|
|
|
115
115
|
async def _install_packages(self, packages: List[str]) -> None:
|
|
116
116
|
for package_spec in packages:
|
|
117
|
+
package_spec, repository = (package_spec.split("@") + [ None ])[:2]
|
|
117
118
|
requirement = parse_requirement(package_spec)
|
|
118
119
|
if not requirement or not is_requirement_satisfied(requirement):
|
|
119
120
|
logging.info(f"Installing missing module: {package_spec}")
|
|
120
|
-
await install_package(package_spec)
|
|
121
|
+
await install_package(repository or package_spec)
|
|
121
122
|
|
|
122
123
|
def register_component(type: ComponentType):
|
|
123
124
|
def decorator(cls: Type[ComponentService]) -> Type[ComponentService]:
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Mapping, Any
|
|
5
|
+
from abc import ABC, abstractmethod
|
|
6
|
+
from mindor.dsl.schema.component import ModelComponentConfig, ModelTaskType, ModelDriver, HuggingfaceModelConfig, LocalModelConfig
|
|
7
|
+
from mindor.dsl.schema.action import ModelActionConfig
|
|
8
|
+
from mindor.core.services import AsyncService
|
|
9
|
+
from mindor.core.logger import logging
|
|
10
|
+
from ....context import ComponentActionContext
|
|
11
|
+
import asyncio
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
import torch
|
|
15
|
+
|
|
16
|
+
class ModelTaskService(AsyncService):
|
|
17
|
+
def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
|
|
18
|
+
super().__init__(daemon)
|
|
19
|
+
|
|
20
|
+
self.id: str = id
|
|
21
|
+
self.config: ModelComponentConfig = config
|
|
22
|
+
|
|
23
|
+
def get_setup_requirements(self) -> Optional[List[str]]:
|
|
24
|
+
return [ "torch" ]
|
|
25
|
+
|
|
26
|
+
async def run(self, action: ModelActionConfig, context: ComponentActionContext) -> Any:
|
|
27
|
+
loop: asyncio.AbstractEventLoop = asyncio.get_running_loop()
|
|
28
|
+
|
|
29
|
+
async def _run():
|
|
30
|
+
return await self._run(action, context, loop)
|
|
31
|
+
|
|
32
|
+
return await self.run_in_thread(_run)
|
|
33
|
+
|
|
34
|
+
@abstractmethod
|
|
35
|
+
async def _run(self, action: ModelActionConfig, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
|
|
36
|
+
pass
|
|
37
|
+
|
|
38
|
+
def _get_model_path(self) -> str:
|
|
39
|
+
if isinstance(self.config.model, HuggingfaceModelConfig):
|
|
40
|
+
from .huggingface_hub import get_model_path
|
|
41
|
+
return get_model_path(self.config.model)
|
|
42
|
+
|
|
43
|
+
if isinstance(self.config.model, LocalModelConfig):
|
|
44
|
+
return self.config.model.path
|
|
45
|
+
|
|
46
|
+
if isinstance(self.config.model, str):
|
|
47
|
+
return self.config.model
|
|
48
|
+
|
|
49
|
+
raise ValueError(f"Unknown model config type: {type(self.config.model)}")
|
|
50
|
+
|
|
51
|
+
def _resolve_device(self) -> torch.device:
|
|
52
|
+
import torch
|
|
53
|
+
|
|
54
|
+
try:
|
|
55
|
+
return torch.device(self.config.device)
|
|
56
|
+
except:
|
|
57
|
+
logging.warning(f"Invalid device '{self.config.device}', falling back to 'cpu'")
|
|
58
|
+
|
|
59
|
+
return torch.device("cpu")
|
|
60
|
+
|
|
61
|
+
def _load_model_checkpoint(self, model: torch.nn.Module, model_path: str) -> None:
|
|
62
|
+
checkpoint = torch.load(model_path, map_location="cpu")
|
|
63
|
+
state_dict = self._get_state_dict_from_checkpoint(checkpoint)
|
|
64
|
+
|
|
65
|
+
model.load_state_dict(state_dict, strict=True)
|
|
66
|
+
|
|
67
|
+
def _get_state_dict_from_checkpoint(self, checkpoint: Any) -> Mapping[str, Any]:
|
|
68
|
+
for key in [ "params", "state_dict" ]:
|
|
69
|
+
if key in checkpoint:
|
|
70
|
+
return checkpoint[key]
|
|
71
|
+
return checkpoint
|
|
72
|
+
|
|
73
|
+
def register_model_task_service(type: ModelTaskType, driver: ModelDriver):
|
|
74
|
+
def decorator(cls: Type[ModelTaskService]) -> Type[ModelTaskService]:
|
|
75
|
+
if type not in ModelTaskServiceRegistry:
|
|
76
|
+
ModelTaskServiceRegistry[type] = {}
|
|
77
|
+
ModelTaskServiceRegistry[type][driver] = cls
|
|
78
|
+
return cls
|
|
79
|
+
return decorator
|
|
80
|
+
|
|
81
|
+
ModelTaskServiceRegistry: Dict[ModelTaskType, Dict[ModelDriver, Type[ModelTaskService]]] = {}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Any
|
|
5
|
+
from mindor.dsl.schema.component import ModelComponentConfig, HuggingfaceModelConfig, DeviceMode
|
|
6
|
+
from mindor.core.logger import logging
|
|
7
|
+
from .common import ModelTaskService
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from transformers import PreTrainedModel, PreTrainedTokenizer, ProcessorMixin
|
|
11
|
+
import torch
|
|
12
|
+
|
|
13
|
+
class HuggingfaceModelTaskService(ModelTaskService):
|
|
14
|
+
def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
|
|
15
|
+
super().__init__(id, config, daemon)
|
|
16
|
+
|
|
17
|
+
def _load_pretrained_model(self) -> PreTrainedModel:
|
|
18
|
+
model_cls = self._get_model_class()
|
|
19
|
+
model = model_cls.from_pretrained(self.config.model, **self._get_model_params())
|
|
20
|
+
|
|
21
|
+
if self.config.device_mode == DeviceMode.SINGLE:
|
|
22
|
+
model = model.to(torch.device(self.config.device))
|
|
23
|
+
|
|
24
|
+
return model
|
|
25
|
+
|
|
26
|
+
def _get_model_class(self) -> Type[PreTrainedModel]:
|
|
27
|
+
raise NotImplementedError("Model class loader not implemented.")
|
|
28
|
+
|
|
29
|
+
def _get_model_params(self) -> Dict[str, Any]:
|
|
30
|
+
params: Dict[str, Any] = {}
|
|
31
|
+
|
|
32
|
+
if isinstance(self.config.model, HuggingfaceModelConfig):
|
|
33
|
+
if self.config.model.revision:
|
|
34
|
+
params["revision"] = self.config.model.revision
|
|
35
|
+
|
|
36
|
+
if self.config.model.cache_dir:
|
|
37
|
+
params["cache_dir"] = self.config.model.cache_dir
|
|
38
|
+
|
|
39
|
+
if self.config.model.local_files_only:
|
|
40
|
+
params["local_files_only"] = True
|
|
41
|
+
|
|
42
|
+
if self.config.device_mode != DeviceMode.SINGLE:
|
|
43
|
+
params["device_map"] = self.config.device_mode.value
|
|
44
|
+
|
|
45
|
+
if self.config.precision is not None:
|
|
46
|
+
params["torch_dtype"] = getattr(torch, self.config.precision.value)
|
|
47
|
+
|
|
48
|
+
if self.config.low_cpu_mem_usage:
|
|
49
|
+
params["low_cpu_mem_usage"] = True
|
|
50
|
+
|
|
51
|
+
return params
|
|
52
|
+
|
|
53
|
+
def _get_model_device(self, model: PreTrainedModel) -> torch.device:
|
|
54
|
+
return next(model.parameters()).device
|
|
55
|
+
|
|
56
|
+
class HuggingfaceLanguageModelTaskService(HuggingfaceModelTaskService):
|
|
57
|
+
def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
|
|
58
|
+
super().__init__(id, config, daemon)
|
|
59
|
+
|
|
60
|
+
self.model: Optional[PreTrainedModel] = None
|
|
61
|
+
self.tokenizer: Optional[PreTrainedTokenizer] = None
|
|
62
|
+
self.device: Optional[torch.device] = None
|
|
63
|
+
|
|
64
|
+
def get_setup_requirements(self) -> Optional[List[str]]:
|
|
65
|
+
return [
|
|
66
|
+
"transformers>=4.21.0",
|
|
67
|
+
"torch",
|
|
68
|
+
"sentencepiece",
|
|
69
|
+
"accelerate"
|
|
70
|
+
]
|
|
71
|
+
|
|
72
|
+
async def _serve(self) -> None:
|
|
73
|
+
try:
|
|
74
|
+
self.model = self._load_pretrained_model()
|
|
75
|
+
self.tokenizer = self._load_pretrained_tokenizer()
|
|
76
|
+
self.device = self._get_model_device(self.model)
|
|
77
|
+
logging.info(f"Model and tokenizer loaded successfully on device '{self.device}': {self.config.model}")
|
|
78
|
+
except Exception as e:
|
|
79
|
+
logging.error(f"Failed to load model '{self.config.model}': {e}")
|
|
80
|
+
raise
|
|
81
|
+
|
|
82
|
+
async def _shutdown(self) -> None:
|
|
83
|
+
self.model = None
|
|
84
|
+
self.tokenizer = None
|
|
85
|
+
self.device = None
|
|
86
|
+
|
|
87
|
+
def _load_pretrained_tokenizer(self) -> Optional[PreTrainedTokenizer]:
|
|
88
|
+
tokenizer_cls = self._get_tokenizer_class()
|
|
89
|
+
|
|
90
|
+
if not tokenizer_cls:
|
|
91
|
+
return None
|
|
92
|
+
|
|
93
|
+
return tokenizer_cls.from_pretrained(self.config.model, **self._get_tokenizer_params())
|
|
94
|
+
|
|
95
|
+
def _get_tokenizer_class(self) -> Optional[Type[PreTrainedTokenizer]]:
|
|
96
|
+
return None
|
|
97
|
+
|
|
98
|
+
def _get_tokenizer_params(self) -> Dict[str, Any]:
|
|
99
|
+
params: Dict[str, Any] = {}
|
|
100
|
+
|
|
101
|
+
if isinstance(self.config.model, HuggingfaceModelConfig):
|
|
102
|
+
if self.config.model.revision:
|
|
103
|
+
params["revision"] = self.config.model.revision
|
|
104
|
+
|
|
105
|
+
if self.config.model.cache_dir:
|
|
106
|
+
params["cache_dir"] = self.config.model.cache_dir
|
|
107
|
+
|
|
108
|
+
if self.config.model.local_files_only:
|
|
109
|
+
params["local_files_only"] = True
|
|
110
|
+
|
|
111
|
+
if not self.config.fast_tokenizer:
|
|
112
|
+
params["use_fast"] = False
|
|
113
|
+
|
|
114
|
+
return params
|
|
115
|
+
|
|
116
|
+
class HuggingfaceMultimodalModelTaskService(HuggingfaceModelTaskService):
|
|
117
|
+
def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
|
|
118
|
+
super().__init__(id, config, daemon)
|
|
119
|
+
|
|
120
|
+
self.model: Optional[PreTrainedModel] = None
|
|
121
|
+
self.processor: Optional[ProcessorMixin] = None
|
|
122
|
+
self.device: Optional[torch.device] = None
|
|
123
|
+
|
|
124
|
+
def get_setup_requirements(self) -> Optional[List[str]]:
|
|
125
|
+
return [
|
|
126
|
+
"transformers>=4.21.0",
|
|
127
|
+
"torch",
|
|
128
|
+
"sentencepiece",
|
|
129
|
+
"accelerate"
|
|
130
|
+
]
|
|
131
|
+
|
|
132
|
+
async def _serve(self) -> None:
|
|
133
|
+
try:
|
|
134
|
+
self.model = self._load_pretrained_model()
|
|
135
|
+
self.processor = self._load_pretrained_processor()
|
|
136
|
+
self.device = self._get_model_device(self.model)
|
|
137
|
+
logging.info(f"Model and processor loaded successfully on device '{self.device}': {self.config.model}")
|
|
138
|
+
except Exception as e:
|
|
139
|
+
logging.error(f"Failed to load model '{self.config.model}': {e}")
|
|
140
|
+
raise
|
|
141
|
+
|
|
142
|
+
async def _shutdown(self) -> None:
|
|
143
|
+
self.model = None
|
|
144
|
+
self.processor = None
|
|
145
|
+
self.device = None
|
|
146
|
+
|
|
147
|
+
def _load_pretrained_processor(self) -> Optional[ProcessorMixin]:
|
|
148
|
+
processor_cls = self._get_processor_class()
|
|
149
|
+
|
|
150
|
+
if not processor_cls:
|
|
151
|
+
return None
|
|
152
|
+
|
|
153
|
+
return processor_cls.from_pretrained(self.config.model, **self._get_processor_params())
|
|
154
|
+
|
|
155
|
+
def _get_processor_class(self) -> Optional[Type[ProcessorMixin]]:
|
|
156
|
+
return None
|
|
157
|
+
|
|
158
|
+
def _get_processor_params(self) -> Dict[str, Any]:
|
|
159
|
+
params: Dict[str, Any] = {}
|
|
160
|
+
|
|
161
|
+
if isinstance(self.config.model, HuggingfaceModelConfig):
|
|
162
|
+
if self.config.model.revision:
|
|
163
|
+
params["revision"] = self.config.model.revision
|
|
164
|
+
|
|
165
|
+
if self.config.model.cache_dir:
|
|
166
|
+
params["cache_dir"] = self.config.model.cache_dir
|
|
167
|
+
|
|
168
|
+
if self.config.model.local_files_only:
|
|
169
|
+
params["local_files_only"] = True
|
|
170
|
+
|
|
171
|
+
return params
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Any
|
|
2
|
+
from mindor.dsl.schema.component import HuggingfaceModelConfig
|
|
3
|
+
|
|
4
|
+
def get_model_path(model: HuggingfaceModelConfig) -> Optional[str]:
|
|
5
|
+
if model.filename:
|
|
6
|
+
from huggingface_hub import hf_hub_download
|
|
7
|
+
return hf_hub_download(
|
|
8
|
+
repo_id=model.repository,
|
|
9
|
+
filename=model.filename,
|
|
10
|
+
revision=model.revision,
|
|
11
|
+
cache_dir=model.cache_dir,
|
|
12
|
+
token=model.token,
|
|
13
|
+
local_files_only=model.local_files_only
|
|
14
|
+
)
|
|
15
|
+
else:
|
|
16
|
+
from huggingface_hub import snapshot_download
|
|
17
|
+
return snapshot_download(
|
|
18
|
+
repo_id=model.repository,
|
|
19
|
+
revision=model.revision,
|
|
20
|
+
cache_dir=model.cache_dir,
|
|
21
|
+
token=model.token,
|
|
22
|
+
local_files_only=model.local_files_only
|
|
23
|
+
)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Any
|
|
5
|
+
from mindor.dsl.schema.component import ModelComponentConfig, DeviceMode
|
|
6
|
+
from mindor.core.logger import logging
|
|
7
|
+
from .common import ModelTaskService
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from transformers import PreTrainedModel, PreTrainedTokenizer
|
|
11
|
+
|
|
12
|
+
class UnslothModelTaskService(ModelTaskService):
|
|
13
|
+
def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
|
|
14
|
+
super().__init__(id, config, daemon)
|
|
15
|
+
|
|
16
|
+
self.model: Optional[PreTrainedModel] = None
|
|
17
|
+
self.tokenizer: Optional[PreTrainedTokenizer] = None
|
|
18
|
+
|
|
19
|
+
def get_setup_requirements(self) -> Optional[List[str]]:
|
|
20
|
+
return [
|
|
21
|
+
"unsloth",
|
|
22
|
+
"torch"
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
async def _serve(self) -> None:
|
|
26
|
+
try:
|
|
27
|
+
self.model, self.tokenizer = self._load_pretrained_model()
|
|
28
|
+
logging.info(f"Model and tokenizer loaded successfully: {self.config.model}")
|
|
29
|
+
except Exception as e:
|
|
30
|
+
logging.error(f"Failed to load model '{self.config.model}': {e}")
|
|
31
|
+
raise
|
|
32
|
+
|
|
33
|
+
async def _shutdown(self) -> None:
|
|
34
|
+
self.model = None
|
|
35
|
+
self.tokenizer = None
|
|
36
|
+
self.device = None
|
|
37
|
+
|
|
38
|
+
def _load_pretrained_model(self) -> Tuple[PreTrainedModel, PreTrainedTokenizer]:
|
|
39
|
+
from unsloth import FastLanguageModel
|
|
40
|
+
|
|
41
|
+
model = FastLanguageModel.from_pretrained(self.config.model, **self._get_model_params())
|
|
42
|
+
|
|
43
|
+
return model
|
|
44
|
+
|
|
45
|
+
def _get_model_params(self) -> Dict[str, Any]:
|
|
46
|
+
params: Dict[str, Any] = {}
|
|
47
|
+
|
|
48
|
+
if self.config.device_mode != DeviceMode.SINGLE:
|
|
49
|
+
params["device_map"] = self.config.device_mode.value
|
|
50
|
+
|
|
51
|
+
if self.config.precision is not None:
|
|
52
|
+
params["dtype"] = self.config.precision.value
|
|
53
|
+
|
|
54
|
+
return params
|
{model_compose-0.4.5 → model_compose-0.4.7}/src/mindor/core/component/services/model/model.py
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, AsyncIterator, Any
|
|
2
|
-
from mindor.dsl.schema.component import ModelComponentConfig, ModelTaskType
|
|
2
|
+
from mindor.dsl.schema.component import ModelComponentConfig, ModelTaskType, ModelDriver
|
|
3
3
|
from mindor.dsl.schema.action import ActionConfig, ModelActionConfig
|
|
4
4
|
from ...base import ComponentService, ComponentType, ComponentGlobalConfigs, register_component
|
|
5
5
|
from ...context import ComponentActionContext
|
|
@@ -17,26 +17,18 @@ class ModelComponent(ComponentService):
|
|
|
17
17
|
def __init__(self, id: str, config: ModelComponentConfig, global_configs: ComponentGlobalConfigs, daemon: bool):
|
|
18
18
|
super().__init__(id, config, global_configs, daemon)
|
|
19
19
|
|
|
20
|
-
self.task_service: ModelTaskService = self._create_task_service(self.config.task)
|
|
20
|
+
self.task_service: ModelTaskService = self._create_task_service(self.config.task, self.config.driver)
|
|
21
21
|
|
|
22
|
-
def _create_task_service(self, type: ModelTaskType) -> ModelTaskService:
|
|
22
|
+
def _create_task_service(self, type: ModelTaskType, driver: ModelDriver) -> ModelTaskService:
|
|
23
23
|
try:
|
|
24
24
|
if not ModelTaskServiceRegistry:
|
|
25
25
|
from . import tasks
|
|
26
|
-
return ModelTaskServiceRegistry[type](self.id, self.config, self.daemon)
|
|
26
|
+
return ModelTaskServiceRegistry[type][driver](self.id, self.config, self.daemon)
|
|
27
27
|
except KeyError:
|
|
28
|
-
raise ValueError(f"Unsupported model task type: {type}")
|
|
28
|
+
raise ValueError(f"Unsupported model task type: {type} on {driver}")
|
|
29
29
|
|
|
30
30
|
def _get_setup_requirements(self) -> Optional[List[str]]:
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return [
|
|
34
|
-
"transformers>=4.21.0",
|
|
35
|
-
"torch",
|
|
36
|
-
"sentencepiece",
|
|
37
|
-
"accelerate",
|
|
38
|
-
*(task_dependencies or [])
|
|
39
|
-
]
|
|
31
|
+
return self.task_service.get_setup_requirements()
|
|
40
32
|
|
|
41
33
|
async def _serve(self) -> None:
|
|
42
34
|
await self.task_service.start()
|
model_compose-0.4.7/src/mindor/core/component/services/model/tasks/chat_completion/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .huggingface import *
|
model_compose-0.4.7/src/mindor/core/component/services/model/tasks/chat_completion/huggingface.py
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
5
|
+
from mindor.dsl.schema.action import ModelActionConfig, ChatCompletionModelActionConfig
|
|
6
|
+
from ...base import ModelTaskType, ModelDriver, register_model_task_service
|
|
7
|
+
from ...base import HuggingfaceLanguageModelTaskService, ComponentActionContext
|
|
8
|
+
from ..text_generation import HuggingfaceTextGenerationTaskAction
|
|
9
|
+
import asyncio
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from transformers import PreTrainedModel, PreTrainedTokenizer
|
|
13
|
+
import torch
|
|
14
|
+
|
|
15
|
+
class HuggingfaceChatCompletionTaskAction(HuggingfaceTextGenerationTaskAction):
|
|
16
|
+
def __init__(self, config: ChatCompletionModelActionConfig, model: PreTrainedModel, tokenizer: PreTrainedTokenizer, device: torch.device):
|
|
17
|
+
super().__init__(config, model, tokenizer, device)
|
|
18
|
+
|
|
19
|
+
self.config: ChatCompletionModelActionConfig = config # For type only
|
|
20
|
+
|
|
21
|
+
async def _prepare_input(self, context: ComponentActionContext) -> Union[str, List[str]]:
|
|
22
|
+
messages = await context.render_variable(self.config.messages)
|
|
23
|
+
|
|
24
|
+
return self.tokenizer.apply_chat_template(
|
|
25
|
+
messages,
|
|
26
|
+
tokenize=False,
|
|
27
|
+
add_generation_prompt=True
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
@register_model_task_service(ModelTaskType.CHAT_COMPLETION, ModelDriver.HUGGINGFACE)
|
|
31
|
+
class HuggingfaceChatCompletionTaskService(HuggingfaceLanguageModelTaskService):
|
|
32
|
+
async def _run(self, action: ModelActionConfig, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
|
|
33
|
+
return await HuggingfaceChatCompletionTaskAction(action, self.model, self.tokenizer, self.device).run(context, loop)
|
|
34
|
+
|
|
35
|
+
def _get_model_class(self) -> Type[PreTrainedModel]:
|
|
36
|
+
from transformers import AutoModelForCausalLM
|
|
37
|
+
return AutoModelForCausalLM
|
|
38
|
+
|
|
39
|
+
def _get_tokenizer_class(self) -> Type[PreTrainedTokenizer]:
|
|
40
|
+
from transformers import AutoTokenizer
|
|
41
|
+
return AutoTokenizer
|
model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_generation/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .custom import *
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, TypeAlias, Any
|
|
5
|
+
from abc import ABC, abstractmethod
|
|
6
|
+
from mindor.dsl.schema.action import ImageGenerationModelActionConfig, ColorFormat
|
|
7
|
+
from mindor.core.logger import logging
|
|
8
|
+
from ...base import ModelTaskService, ComponentActionContext
|
|
9
|
+
from PIL import Image as PILImage
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
import torch
|
|
13
|
+
|
|
14
|
+
class ImageGenerationTaskAction:
|
|
15
|
+
def __init__(self, config: ImageGenerationModelActionConfig, device: torch.device):
|
|
16
|
+
self.config: ImageGenerationModelActionConfig = config
|
|
17
|
+
self.device: torch.device = device
|
|
18
|
+
|
|
19
|
+
async def run(self, context: ComponentActionContext) -> Any:
|
|
20
|
+
text = await self._prepare_input(context)
|
|
21
|
+
is_single_input = not isinstance(text, list)
|
|
22
|
+
texts: List[PILImage.Image] = [ text ] if is_single_input else text
|
|
23
|
+
results = []
|
|
24
|
+
|
|
25
|
+
batch_size = await context.render_variable(self.config.batch_size)
|
|
26
|
+
params = await self._resolve_generation_params(context)
|
|
27
|
+
|
|
28
|
+
for index in range(0, len(texts), batch_size):
|
|
29
|
+
batch_texts = texts[index:index + batch_size]
|
|
30
|
+
upscaled_images = await self._upscale(batch_texts, params)
|
|
31
|
+
results.extend(upscaled_images)
|
|
32
|
+
|
|
33
|
+
return results[0] if is_single_input else results
|
|
34
|
+
|
|
35
|
+
async def _prepare_input(self, context: ComponentActionContext) -> Union[str, List[str]]:
|
|
36
|
+
return await context.render_image(self.config.image)
|
|
37
|
+
|
|
38
|
+
@abstractmethod
|
|
39
|
+
async def _generate(self, images: List[PILImage.Image], params: Dict[str, Any]) -> List[PILImage.Image]:
|
|
40
|
+
pass
|
|
41
|
+
|
|
42
|
+
@abstractmethod
|
|
43
|
+
async def _resolve_generation_params(self, context: ComponentActionContext) -> Dict[str, Any]:
|
|
44
|
+
pass
|
|
45
|
+
|
|
46
|
+
class ImageGenerationTaskService(ModelTaskService):
|
|
47
|
+
pass
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, TypeAlias, Any
|
|
2
|
+
from mindor.dsl.schema.component import ModelComponentConfig, ImageGenerationModelFamily
|
|
3
|
+
from ...base import ModelTaskType, ModelDriver, register_model_task_service
|
|
4
|
+
|
|
5
|
+
@register_model_task_service(ModelTaskType.IMAGE_GENERATION, ModelDriver.CUSTOM)
|
|
6
|
+
class CustomImageGenerationTaskService:
|
|
7
|
+
def __new__(cls, id: str, config: ModelComponentConfig, daemon: bool):
|
|
8
|
+
if config.family == ImageGenerationModelFamily.HUNYUAN_IMAGE:
|
|
9
|
+
from .hunyuan_image import HunyuanImageGenerationTaskService
|
|
10
|
+
return HunyuanImageGenerationTaskService(id, config, daemon)
|
|
11
|
+
|
|
12
|
+
raise ValueError(f"Unknown architecture: {config.architecture}")
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, TypeAlias, Any
|
|
5
|
+
from mindor.dsl.schema.component import ModelComponentConfig
|
|
6
|
+
from mindor.dsl.schema.action import ModelActionConfig, FluxImageGenerationModelActionConfig
|
|
7
|
+
from mindor.core.logger import logging
|
|
8
|
+
from ...base import ComponentActionContext
|
|
9
|
+
from .common import ImageGenerationTaskService, ImageGenerationTaskAction
|
|
10
|
+
from PIL import Image as PILImage
|
|
11
|
+
import asyncio
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
import torch
|
|
15
|
+
|
|
16
|
+
class FluxImageGenerationTaskAction(ImageGenerationTaskAction):
|
|
17
|
+
def __init__(self, config: FluxImageGenerationModelActionConfig, pipeline: Any, device: torch.device):
|
|
18
|
+
super().__init__(config, device)
|
|
19
|
+
|
|
20
|
+
self.pipeline = pipeline
|
|
21
|
+
|
|
22
|
+
async def _generate(self, params: Dict[str, Any]) -> List[PILImage.Image]:
|
|
23
|
+
pass
|
|
24
|
+
|
|
25
|
+
async def _resolve_generation_params(self, context: ComponentActionContext) -> Dict[str, Any]:
|
|
26
|
+
pass
|
|
27
|
+
|
|
28
|
+
class FluxImageGenerationTaskService(ImageGenerationTaskService):
|
|
29
|
+
def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
|
|
30
|
+
super().__init__(id, config, daemon)
|
|
31
|
+
|
|
32
|
+
self.pipeline: Optional[Any] = None
|
|
33
|
+
self.device: Optional[torch.device] = None
|
|
34
|
+
|
|
35
|
+
def get_setup_requirements(self) -> Optional[List[str]]:
|
|
36
|
+
return None
|
|
37
|
+
|
|
38
|
+
async def _serve(self) -> None:
|
|
39
|
+
try:
|
|
40
|
+
self.pipeline, self.device = self._load_pretrained_pipeline()
|
|
41
|
+
logging.info(f"Model loaded successfully on device '{self.device}': {self.config.model}")
|
|
42
|
+
except Exception as e:
|
|
43
|
+
logging.error(f"Failed to load model '{self.config.model}': {e}")
|
|
44
|
+
raise
|
|
45
|
+
|
|
46
|
+
async def _shutdown(self) -> None:
|
|
47
|
+
self.pipeline = None
|
|
48
|
+
self.device = None
|
|
49
|
+
|
|
50
|
+
def _load_pretrained_pipeline(self) -> Tuple[Any, torch.device]:
|
|
51
|
+
pass
|
|
52
|
+
|
|
53
|
+
async def _run(self, action: ModelActionConfig, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
|
|
54
|
+
return FluxImageGenerationModelActionConfig(action, self.model).run(context)
|
model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_generation/hunyuan_image.py
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, TypeAlias, Any
|
|
5
|
+
from mindor.dsl.schema.component import ModelComponentConfig
|
|
6
|
+
from mindor.dsl.schema.action import ModelActionConfig, HunyuanImageGenerationModelActionConfig
|
|
7
|
+
from mindor.core.logger import logging
|
|
8
|
+
from ...base import ComponentActionContext
|
|
9
|
+
from .common import ImageGenerationTaskService, ImageGenerationTaskAction
|
|
10
|
+
from PIL import Image as PILImage
|
|
11
|
+
import asyncio
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
import torch
|
|
15
|
+
|
|
16
|
+
class HunyuanImageGenerationTaskAction(ImageGenerationTaskAction):
|
|
17
|
+
def __init__(self, config: HunyuanImageGenerationModelActionConfig, pipeline: Any, device: torch.device):
|
|
18
|
+
super().__init__(config, device)
|
|
19
|
+
|
|
20
|
+
self.pipeline = pipeline
|
|
21
|
+
|
|
22
|
+
async def _generate(self, params: Dict[str, Any]) -> List[PILImage.Image]:
|
|
23
|
+
pass
|
|
24
|
+
|
|
25
|
+
async def _resolve_generation_params(self, context: ComponentActionContext) -> Dict[str, Any]:
|
|
26
|
+
pass
|
|
27
|
+
|
|
28
|
+
class HunyuanImageGenerationTaskService(ImageGenerationTaskService):
|
|
29
|
+
def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
|
|
30
|
+
super().__init__(id, config, daemon)
|
|
31
|
+
|
|
32
|
+
self.pipeline: Optional[Any] = None
|
|
33
|
+
self.device: Optional[torch.device] = None
|
|
34
|
+
|
|
35
|
+
def get_setup_requirements(self) -> Optional[List[str]]:
|
|
36
|
+
return None
|
|
37
|
+
|
|
38
|
+
async def _serve(self) -> None:
|
|
39
|
+
try:
|
|
40
|
+
self.pipeline, self.device = self._load_pretrained_pipeline()
|
|
41
|
+
logging.info(f"Model loaded successfully on device '{self.device}': {self.config.model}")
|
|
42
|
+
except Exception as e:
|
|
43
|
+
logging.error(f"Failed to load model '{self.config.model}': {e}")
|
|
44
|
+
raise
|
|
45
|
+
|
|
46
|
+
async def _shutdown(self) -> None:
|
|
47
|
+
self.pipeline = None
|
|
48
|
+
self.device = None
|
|
49
|
+
|
|
50
|
+
def _load_pretrained_pipeline(self) -> Tuple[Any, torch.device]:
|
|
51
|
+
pass
|
|
52
|
+
|
|
53
|
+
async def _run(self, action: ModelActionConfig, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
|
|
54
|
+
return HunyuanImageGenerationModelActionConfig(action, self.model).run(context)
|