model-compose 0.4.8__tar.gz → 0.4.9__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.8/src/model_compose.egg-info → model_compose-0.4.9}/PKG-INFO +1 -1
- {model_compose-0.4.8 → model_compose-0.4.9}/pyproject.toml +1 -1
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/context.py +2 -1
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/__init__.py +1 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/datasets/datasets.py +25 -0
- model_compose-0.4.9/src/mindor/core/component/services/datasets/utils.py +12 -0
- model_compose-0.4.9/src/mindor/core/component/services/image_processor.py +210 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/base/huggingface.py +96 -20
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/chat_completion/huggingface.py +12 -2
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/face_embedding/common.py +1 -1
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/face_embedding/insightface.py +42 -24
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_to_text/huggingface.py +2 -2
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/text_generation/huggingface.py +7 -4
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/text_splitter.py +0 -1
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/renderers.py +9 -3
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/action.py +1 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/__init__.py +1 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/datasets/common.py +1 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/datasets/datasets.py +9 -1
- model_compose-0.4.9/src/mindor/dsl/schema/action/impl/image_processor.py +91 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +14 -1
- model_compose-0.4.9/src/mindor/dsl/schema/action/impl/model_trainer/impl/common.py +85 -0
- model_compose-0.4.9/src/mindor/dsl/schema/action/impl/model_trainer/impl/sft.py +25 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/text_splitter.py +0 -1
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/component.py +2 -1
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/__init__.py +1 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/common.py +10 -3
- model_compose-0.4.9/src/mindor/dsl/schema/component/impl/image_processor.py +17 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/common.py +41 -0
- model_compose-0.4.9/src/mindor/dsl/schema/component/impl/model_trainer/impl/common.py +27 -0
- model_compose-0.4.9/src/mindor/dsl/schema/component/impl/types.py +15 -0
- model_compose-0.4.9/src/mindor/dsl/utils/path.py +23 -0
- {model_compose-0.4.8 → model_compose-0.4.9/src/model_compose.egg-info}/PKG-INFO +1 -1
- {model_compose-0.4.8 → model_compose-0.4.9}/src/model_compose.egg-info/SOURCES.txt +5 -0
- model_compose-0.4.8/src/mindor/dsl/schema/action/impl/model_trainer/impl/common.py +0 -22
- model_compose-0.4.8/src/mindor/dsl/schema/action/impl/model_trainer/impl/sft.py +0 -7
- model_compose-0.4.8/src/mindor/dsl/schema/component/impl/model_trainer/impl/common.py +0 -18
- model_compose-0.4.8/src/mindor/dsl/schema/component/impl/types.py +0 -14
- {model_compose-0.4.8 → model_compose-0.4.9}/LICENSE +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/README.md +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/setup.cfg +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/cli/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/cli/compose.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/base.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/component.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/datasets/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/datasets/providers/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/datasets/providers/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/datasets/providers/huggingface.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/datasets/providers/local.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/http_client.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/http_server.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/mcp_client.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/mcp_server.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/base/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/base/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/base/huggingface_hub.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/base/unsloth.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/model.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/chat_completion/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/face_embedding/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/face_embedding/custom.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_generation/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_generation/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_generation/custom.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_generation/flux.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_generation/hunyuan_image.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_generation/sdxl.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_to_text/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_upscale/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_upscale/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_upscale/custom.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_upscale/esrgan.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_upscale/ldsr.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_upscale/real_esrgan.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/image_upscale/swinir.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/text_classification/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/text_classification/huggingface.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/text_embedding/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/text_embedding/huggingface.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/model/tasks/text_generation/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/shell.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/vector_store/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/vector_store/base.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/vector_store/drivers/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/vector_store/drivers/chroma.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/vector_store/drivers/milvus.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/vector_store/vector_store.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/workflow.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/compose/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/compose/compose.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/compose/manager.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/base.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/controller.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runner/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runner/client.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runner/http_client.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runner/mcp_client.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runner/runner.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runtime/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runtime/docker/context/Dockerfile +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runtime/docker/docker.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runtime/native/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runtime/native/native.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/runtime/specs.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/services/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/services/http_server.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/services/mcp_server.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/webui/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/webui/gradio.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/controller/webui/webui.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/foundation/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/foundation/async_service.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/base.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/gateway.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/services/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/services/http_tunnel/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/services/http_tunnel/base.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/services/http_tunnel/drivers/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/services/http_tunnel/drivers/cloudflare.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/services/http_tunnel/drivers/ngrok.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/services/http_tunnel/http_tunnel.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/gateway/services/ssh_tunnel.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/listener/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/listener/base.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/listener/listener.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/listener/services/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/listener/services/http_callback.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/logger/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/logger/base.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/logger/logger.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/logger/logging.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/logger/services/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/logger/services/console.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/logger/services/file.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/runtime/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/runtime/docker/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/runtime/docker/docker.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/runtime/env.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/caching.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/http_client.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/http_request.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/http_response.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/http_status.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/image.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/mcp_client.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/package.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/resolvers.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/shell.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/ssh_client.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/streamer.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/streaming.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/time.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/websocket_client.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/utils/work_queue.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/context.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/base.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/impl/action.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/impl/delay.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/impl/filter.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/impl/if_.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/impl/random_router.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/impl/switch.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/job/job.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/schema.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/workflow/workflow.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/loader.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/datasets/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/datasets/providers/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/datasets/providers/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/datasets/providers/huggingface.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/datasets/providers/local.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/http_client.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/http_server.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/face_embedding.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/dlib.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/facenet.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/insightface.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/image_generation.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/flux.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/sdxl.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/image_upscale.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/swinir.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model/model.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model_trainer/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model_trainer/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model_trainer/impl/classification.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/model_trainer/model_trainer.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/vector_store/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/vector_store/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/vector_store/impl/chroma.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/vector_store/impl/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/vector_store/impl/faiss.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/vector_store/impl/milvus.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/vector_store/impl/qdrant.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/vector_store/vector_store.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/datasets/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/datasets/datasets.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/http_client.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/mcp_client.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/chat_completion.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/face_embedding.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/dlib.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/facenet.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/insightface.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/image_generation.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/flux.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/sdxl.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_to_text.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/image_upscale.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/swinir.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model/model.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model_trainer/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model_trainer/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model_trainer/impl/classification.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model_trainer/impl/sft.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/model_trainer/model_trainer.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/text_splitter.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/vector_store/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/vector_store/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/vector_store/impl/chroma.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/vector_store/impl/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/vector_store/impl/faiss.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/vector_store/impl/milvus.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/vector_store/vector_store.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/compose.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/controller.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/impl/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/impl/http_server.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/impl/mcp_server.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/impl/types.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/webui/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/webui/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/webui/impl/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/webui/impl/gradio.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/webui/impl/static.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/controller/webui/webui.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/http_tunnel/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/http_tunnel/http_tunnel.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/cloudflare.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/ngrok.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/impl/action.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/impl/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/impl/filter.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/impl/random_router.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/impl/types.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/job/job.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/listener/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/listener/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/listener/impl/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/listener/impl/http_callback.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/listener/impl/types.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/listener/listener.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/logger/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/logger/impl/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/logger/impl/file.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/logger/logger.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/runtime/impl/common.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/transport/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/transport/http.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/transport/ssh.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/schema/workflow.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/utils/__init__.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/utils/annotation.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/dsl/utils/enum.py +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/model_compose.egg-info/dependency_links.txt +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/model_compose.egg-info/entry_points.txt +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/model_compose.egg-info/requires.txt +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/src/model_compose.egg-info/top_level.txt +0 -0
- {model_compose-0.4.8 → model_compose-0.4.9}/tests/test_cli.py +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
2
|
from mindor.core.utils.renderers import VariableRenderer, ImageValueRenderer
|
|
3
3
|
from mindor.core.gateway import find_gateway_by_port
|
|
4
|
+
from PIL import Image as PILImage
|
|
4
5
|
|
|
5
6
|
class ComponentActionContext:
|
|
6
7
|
def __init__(self, run_id: str, input: Dict[str, Any]):
|
|
@@ -16,7 +17,7 @@ class ComponentActionContext:
|
|
|
16
17
|
async def render_variable(self, value: Any, ignore_files: bool = False) -> Any:
|
|
17
18
|
return await self.renderer.render(value, ignore_files)
|
|
18
19
|
|
|
19
|
-
async def render_image(self, value: Any) ->
|
|
20
|
+
async def render_image(self, value: Any) -> Optional[PILImage.Image]:
|
|
20
21
|
return await ImageValueRenderer().render(await self.render_variable(value))
|
|
21
22
|
|
|
22
23
|
def contains_variable_reference(self, key: str, value: Any) -> bool:
|
{model_compose-0.4.8 → model_compose-0.4.9}/src/mindor/core/component/services/datasets/datasets.py
RENAMED
|
@@ -6,6 +6,7 @@ from mindor.dsl.schema.action import DatasetsActionConfig, DatasetsActionMethod,
|
|
|
6
6
|
from ...base import ComponentService, ComponentType, ComponentGlobalConfigs, register_component
|
|
7
7
|
from ...context import ComponentActionContext
|
|
8
8
|
from .providers import HuggingfaceDatasetsProvider, LocalDatasetsProvider
|
|
9
|
+
from .utils import format_template_example
|
|
9
10
|
|
|
10
11
|
if TYPE_CHECKING:
|
|
11
12
|
from datasets import Dataset
|
|
@@ -30,6 +31,9 @@ class DatasetsAction:
|
|
|
30
31
|
if self.config.method == DatasetsActionMethod.SELECT:
|
|
31
32
|
return await self._select(context)
|
|
32
33
|
|
|
34
|
+
if self.config.method == DatasetsActionMethod.MAP:
|
|
35
|
+
return await self._map(context)
|
|
36
|
+
|
|
33
37
|
raise ValueError(f"Unsupported datasets action method: {self.config.method}")
|
|
34
38
|
|
|
35
39
|
async def _load(self, context: ComponentActionContext) -> Dataset:
|
|
@@ -64,6 +68,10 @@ class DatasetsAction:
|
|
|
64
68
|
info = await context.render_variable(self.config.info)
|
|
65
69
|
split = await context.render_variable(self.config.split)
|
|
66
70
|
|
|
71
|
+
for dataset in datasets:
|
|
72
|
+
if not isinstance(dataset, Dataset):
|
|
73
|
+
raise ValueError(f"Expected Dataset instance, but got {type(dataset).__name__}")
|
|
74
|
+
|
|
67
75
|
return concatenate_datasets(
|
|
68
76
|
datasets,
|
|
69
77
|
info=info,
|
|
@@ -77,6 +85,9 @@ class DatasetsAction:
|
|
|
77
85
|
indices = await context.render_variable(self.config.indices)
|
|
78
86
|
columns = await context.render_variable(self.config.columns)
|
|
79
87
|
|
|
88
|
+
if not isinstance(dataset, Dataset):
|
|
89
|
+
raise ValueError(f"Expected Dataset instance, but got {type(dataset).__name__}")
|
|
90
|
+
|
|
80
91
|
if axis == "rows":
|
|
81
92
|
if indices is None:
|
|
82
93
|
raise ValueError("indices must be provided when axis='rows'")
|
|
@@ -89,6 +100,20 @@ class DatasetsAction:
|
|
|
89
100
|
|
|
90
101
|
raise ValueError(f"Unsupported axis: {axis}")
|
|
91
102
|
|
|
103
|
+
async def _map(self, context: ComponentActionContext) -> Dataset:
|
|
104
|
+
dataset = await context.render_variable(self.config.dataset)
|
|
105
|
+
template = await context.render_variable(self.config.template)
|
|
106
|
+
output_column = await context.render_variable(self.config.output_column)
|
|
107
|
+
remove_columns = await context.render_variable(self.config.remove_columns)
|
|
108
|
+
|
|
109
|
+
if not isinstance(dataset, Dataset):
|
|
110
|
+
raise ValueError(f"Expected Dataset instance, but got {type(dataset).__name__}")
|
|
111
|
+
|
|
112
|
+
def format_example(example):
|
|
113
|
+
return { output_column: format_template_example(template, example) }
|
|
114
|
+
|
|
115
|
+
return dataset.map(format_example, remove_columns=remove_columns)
|
|
116
|
+
|
|
92
117
|
@register_component(ComponentType.DATASETS)
|
|
93
118
|
class DatasetsComponent(ComponentService):
|
|
94
119
|
def __init__(self, id: str, config: DatasetsActionConfig, global_configs: ComponentGlobalConfigs, daemon: bool):
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from typing import Dict, List, Any
|
|
2
|
+
import re
|
|
3
|
+
|
|
4
|
+
def format_template_example(template: str, example: Dict[str, Any]) -> str:
|
|
5
|
+
column_names = set(re.findall(r"\{(\w+)\}", template))
|
|
6
|
+
formatted = template
|
|
7
|
+
|
|
8
|
+
for column in column_names:
|
|
9
|
+
if column in example:
|
|
10
|
+
formatted = formatted.replace(f"{{{column}}}", str(example[column]))
|
|
11
|
+
|
|
12
|
+
return formatted
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
|
+
from mindor.dsl.schema.component import ImageProcessorComponentConfig
|
|
3
|
+
from mindor.dsl.schema.action import ActionConfig, ImageProcessorActionConfig, ImageProcessorActionMethod, ImageScaleMode, FlipDirection
|
|
4
|
+
from ..base import ComponentService, ComponentType, ComponentGlobalConfigs, register_component
|
|
5
|
+
from ..context import ComponentActionContext
|
|
6
|
+
from PIL import Image as PILImage, ImageFilter, ImageEnhance
|
|
7
|
+
|
|
8
|
+
class ImageProcessorAction:
|
|
9
|
+
def __init__(self, config: ImageProcessorActionConfig):
|
|
10
|
+
self.config: ImageProcessorActionConfig = config
|
|
11
|
+
|
|
12
|
+
async def run(self, context: ComponentActionContext) -> Any:
|
|
13
|
+
result = await self._dispatch(context)
|
|
14
|
+
context.register_source("result", result)
|
|
15
|
+
|
|
16
|
+
return (await context.render_variable(self.config.output, ignore_files=True)) if self.config.output else result
|
|
17
|
+
|
|
18
|
+
async def _dispatch(self, context: ComponentActionContext) -> Any:
|
|
19
|
+
if self.config.method == ImageProcessorActionMethod.RESIZE:
|
|
20
|
+
return await self._resize(context)
|
|
21
|
+
|
|
22
|
+
if self.config.method == ImageProcessorActionMethod.CROP:
|
|
23
|
+
return await self._crop(context)
|
|
24
|
+
|
|
25
|
+
if self.config.method == ImageProcessorActionMethod.ROTATE:
|
|
26
|
+
return await self._rotate(context)
|
|
27
|
+
|
|
28
|
+
if self.config.method == ImageProcessorActionMethod.FLIP:
|
|
29
|
+
return await self._flip(context)
|
|
30
|
+
|
|
31
|
+
if self.config.method == ImageProcessorActionMethod.GRAYSCALE:
|
|
32
|
+
return await self._grayscale(context)
|
|
33
|
+
|
|
34
|
+
if self.config.method == ImageProcessorActionMethod.BLUR:
|
|
35
|
+
return await self._blur(context)
|
|
36
|
+
|
|
37
|
+
if self.config.method == ImageProcessorActionMethod.SHARPEN:
|
|
38
|
+
return await self._sharpen(context)
|
|
39
|
+
|
|
40
|
+
if self.config.method == ImageProcessorActionMethod.ADJUST_BRIGHTNESS:
|
|
41
|
+
return await self._adjust_brightness(context)
|
|
42
|
+
|
|
43
|
+
if self.config.method == ImageProcessorActionMethod.ADJUST_CONTRAST:
|
|
44
|
+
return await self._adjust_contrast(context)
|
|
45
|
+
|
|
46
|
+
if self.config.method == ImageProcessorActionMethod.ADJUST_SATURATION:
|
|
47
|
+
return await self._adjust_saturation(context)
|
|
48
|
+
|
|
49
|
+
raise ValueError(f"Unsupported image processing action method: {self.config.method}")
|
|
50
|
+
|
|
51
|
+
async def _resize(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
|
|
52
|
+
image = await context.render_image(self.config.image)
|
|
53
|
+
width = await context.render_variable(self.config.width) if self.config.width else None
|
|
54
|
+
height = await context.render_variable(self.config.height) if self.config.height else None
|
|
55
|
+
scale_mode = await context.render_variable(self.config.scale_mode)
|
|
56
|
+
|
|
57
|
+
if width is None and height is None:
|
|
58
|
+
raise ValueError("At least one of width or height must be specified for resize")
|
|
59
|
+
|
|
60
|
+
if image:
|
|
61
|
+
return self._resize_image(image, width, height, scale_mode)
|
|
62
|
+
|
|
63
|
+
return None
|
|
64
|
+
|
|
65
|
+
async def _crop(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
|
|
66
|
+
image = await context.render_image(self.config.image)
|
|
67
|
+
x = await context.render_variable(self.config.x)
|
|
68
|
+
y = await context.render_variable(self.config.y)
|
|
69
|
+
width = await context.render_variable(self.config.width)
|
|
70
|
+
height = await context.render_variable(self.config.height)
|
|
71
|
+
|
|
72
|
+
if image:
|
|
73
|
+
return image.crop(x, y, x + width, y + height)
|
|
74
|
+
|
|
75
|
+
return None
|
|
76
|
+
|
|
77
|
+
async def _rotate(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
|
|
78
|
+
image = await context.render_image(self.config.image)
|
|
79
|
+
angle = await context.render_variable(self.config.angle)
|
|
80
|
+
expand = await context.render_variable(self.config.expand)
|
|
81
|
+
|
|
82
|
+
if image:
|
|
83
|
+
return image.rotate(-angle, expand=expand, resample=PILImage.Resampling.BICUBIC)
|
|
84
|
+
|
|
85
|
+
return None
|
|
86
|
+
|
|
87
|
+
async def _flip(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
|
|
88
|
+
image = await context.render_image(self.config.image)
|
|
89
|
+
direction = await context.render_variable(self.config.direction)
|
|
90
|
+
|
|
91
|
+
if image:
|
|
92
|
+
if direction == FlipDirection.HORIZONTAL:
|
|
93
|
+
return image.transpose(PILImage.Transpose.FLIP_LEFT_RIGHT)
|
|
94
|
+
|
|
95
|
+
if direction == FlipDirection.VERTICAL:
|
|
96
|
+
return image.transpose(PILImage.Transpose.FLIP_TOP_BOTTOM)
|
|
97
|
+
|
|
98
|
+
return None
|
|
99
|
+
|
|
100
|
+
async def _grayscale(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
|
|
101
|
+
image = await context.render_image(self.config.image)
|
|
102
|
+
|
|
103
|
+
if image:
|
|
104
|
+
return image.convert("L")
|
|
105
|
+
|
|
106
|
+
return None
|
|
107
|
+
|
|
108
|
+
async def _blur(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
|
|
109
|
+
image = await context.render_image(self.config.image)
|
|
110
|
+
radius = await context.render_variable(self.config.radius)
|
|
111
|
+
|
|
112
|
+
if image:
|
|
113
|
+
return image.filter(ImageFilter.GaussianBlur(radius=radius))
|
|
114
|
+
|
|
115
|
+
async def _sharpen(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
|
|
116
|
+
image = await context.render_image(self.config.image)
|
|
117
|
+
factor = await context.render_variable(self.config.factor)
|
|
118
|
+
|
|
119
|
+
if image:
|
|
120
|
+
return ImageEnhance.Sharpness(image).enhance(factor)
|
|
121
|
+
|
|
122
|
+
return FileNotFoundError
|
|
123
|
+
|
|
124
|
+
async def _adjust_brightness(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
|
|
125
|
+
image = await context.render_image(self.config.image)
|
|
126
|
+
factor = await context.render_variable(self.config.factor)
|
|
127
|
+
|
|
128
|
+
if image:
|
|
129
|
+
return ImageEnhance.Brightness(image).enhance(factor)
|
|
130
|
+
|
|
131
|
+
return None
|
|
132
|
+
|
|
133
|
+
async def _adjust_contrast(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
|
|
134
|
+
image = await context.render_image(self.config.image)
|
|
135
|
+
factor = await context.render_variable(self.config.factor)
|
|
136
|
+
|
|
137
|
+
if image:
|
|
138
|
+
return ImageEnhance.Contrast(image).enhance(factor)
|
|
139
|
+
|
|
140
|
+
return image
|
|
141
|
+
|
|
142
|
+
async def _adjust_saturation(self, context: ComponentActionContext) -> Optional[PILImage.Image]:
|
|
143
|
+
image = await context.render_image(self.config.image)
|
|
144
|
+
factor = await context.render_variable(self.config.factor)
|
|
145
|
+
|
|
146
|
+
if image:
|
|
147
|
+
return ImageEnhance.Color(image).enhance(factor)
|
|
148
|
+
|
|
149
|
+
return None
|
|
150
|
+
|
|
151
|
+
def _resize_image(self, image: PILImage.Image, width: int, height: int, scale_mode: str) -> PILImage.Image:
|
|
152
|
+
original_width, original_height = image.size
|
|
153
|
+
target_width = width or original_width
|
|
154
|
+
target_height = height or original_height
|
|
155
|
+
|
|
156
|
+
if scale_mode == ImageScaleMode.FIT:
|
|
157
|
+
new_width, new_height = self._get_size_aspect_fit(target_width, target_height, original_width, original_height)
|
|
158
|
+
return image.resize((new_width, new_height), PILImage.Resampling.LANCZOS)
|
|
159
|
+
|
|
160
|
+
if scale_mode == ImageScaleMode.FILL:
|
|
161
|
+
new_width, new_height = self._get_size_aspect_fill(target_width, target_height, original_width, original_height)
|
|
162
|
+
image = image.resize((new_width, new_height), PILImage.Resampling.LANCZOS)
|
|
163
|
+
|
|
164
|
+
crop_box = self._get_center_crop_box(new_width, new_height, target_width, target_height)
|
|
165
|
+
return image.crop(crop_box)
|
|
166
|
+
|
|
167
|
+
if scale_mode == ImageScaleMode.STRETCH:
|
|
168
|
+
return image.resize((target_width, target_height), PILImage.Resampling.LANCZOS)
|
|
169
|
+
|
|
170
|
+
raise ValueError(f"Invalid scale_mode: {scale_mode}")
|
|
171
|
+
|
|
172
|
+
def _get_size_aspect_fit(self, target_width: int, target_height: int, original_width: int, original_height: int) -> Tuple[int, int]:
|
|
173
|
+
aspect_ratio = original_width / original_height
|
|
174
|
+
|
|
175
|
+
height = target_height
|
|
176
|
+
width = height * aspect_ratio
|
|
177
|
+
|
|
178
|
+
if width > target_width:
|
|
179
|
+
width = target_width
|
|
180
|
+
height = width / aspect_ratio
|
|
181
|
+
|
|
182
|
+
return (int(width), int(height))
|
|
183
|
+
|
|
184
|
+
def _get_size_aspect_fill(self, target_width: int, target_height: int, original_width: int, original_height: int) -> Tuple[int, int]:
|
|
185
|
+
aspect_ratio = original_width / original_height
|
|
186
|
+
|
|
187
|
+
height = target_height
|
|
188
|
+
width = height * aspect_ratio
|
|
189
|
+
|
|
190
|
+
if width < target_width:
|
|
191
|
+
width = target_width
|
|
192
|
+
height = width / aspect_ratio
|
|
193
|
+
|
|
194
|
+
return (int(width), int(height))
|
|
195
|
+
|
|
196
|
+
def _get_center_crop_box(self, image_width: int, image_height: int, target_width: int, target_height: int) -> Tuple[int, int, int, int]:
|
|
197
|
+
left = (image_width - target_width ) // 2
|
|
198
|
+
top = (image_height - target_height) // 2
|
|
199
|
+
right = left + target_width
|
|
200
|
+
bottom = top + target_height
|
|
201
|
+
|
|
202
|
+
return (left, top, right, bottom)
|
|
203
|
+
|
|
204
|
+
@register_component(ComponentType.IMAGE_PROCESSOR)
|
|
205
|
+
class ImageProcessorComponent(ComponentService):
|
|
206
|
+
def __init__(self, id: str, config: ImageProcessorComponentConfig, global_configs: ComponentGlobalConfigs, daemon: bool):
|
|
207
|
+
super().__init__(id, config, global_configs, daemon)
|
|
208
|
+
|
|
209
|
+
async def _run(self, action: ActionConfig, context: ComponentActionContext) -> Any:
|
|
210
|
+
return await ImageProcessorAction(action).run(context)
|
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
from typing import TYPE_CHECKING
|
|
3
3
|
|
|
4
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
|
|
5
|
+
from mindor.dsl.schema.component import ModelComponentConfig, PeftAdapterConfig, HuggingfaceModelConfig, DeviceMode
|
|
6
6
|
from mindor.core.logger import logging
|
|
7
7
|
from .common import ModelTaskService
|
|
8
8
|
|
|
@@ -16,36 +16,95 @@ class HuggingfaceModelTaskService(ModelTaskService):
|
|
|
16
16
|
|
|
17
17
|
def _load_pretrained_model(self) -> PreTrainedModel:
|
|
18
18
|
model_cls = self._get_model_class()
|
|
19
|
-
model = model_cls.from_pretrained(self.config
|
|
19
|
+
model = model_cls.from_pretrained(self._get_model_path(self.config), **self._get_model_params(self.config))
|
|
20
|
+
|
|
21
|
+
if len(self.config.peft_adapters or []) > 0:
|
|
22
|
+
model = self._load_peft_adapters(model, self.config.peft_adapters)
|
|
20
23
|
|
|
21
24
|
if self.config.device_mode == DeviceMode.SINGLE:
|
|
22
25
|
model = model.to(torch.device(self.config.device))
|
|
23
26
|
|
|
24
27
|
return model
|
|
25
28
|
|
|
29
|
+
def _load_peft_adapters(self, base_model: PreTrainedModel, adapter_configs: List[PeftAdapterConfig]) -> PreTrainedModel:
|
|
30
|
+
from peft import PeftModel
|
|
31
|
+
|
|
32
|
+
names, weights = self._build_peft_adapter_lists(adapter_configs)
|
|
33
|
+
peft_model = PeftModel.from_pretrained(
|
|
34
|
+
base_model,
|
|
35
|
+
self._get_model_path(adapter_configs[0]),
|
|
36
|
+
adapter_name=names[0],
|
|
37
|
+
**self._get_model_params(adapter_configs[0])
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
for index in range(1, len(adapter_configs)):
|
|
41
|
+
peft_model.load_adapter(
|
|
42
|
+
self._get_model_path(adapter_configs[index]),
|
|
43
|
+
adapter_name=names[index],
|
|
44
|
+
**self._get_model_params(adapter_configs[index])
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
multiple_adapters = len(adapter_configs) > 1
|
|
48
|
+
has_non_unit_weight = any(abs(weight - 1.0) > 1e-12 for weight in weights)
|
|
49
|
+
|
|
50
|
+
if multiple_adapters or has_non_unit_weight:
|
|
51
|
+
# Use add_weighted_adapter for merging multiple PEFT adapters with weights
|
|
52
|
+
# Note: This operation can be slow for large models (e.g., 7B+)
|
|
53
|
+
logging.info(f"Merging {len(names)} PEFT adapters with weights {weights}. This may take a while...")
|
|
54
|
+
peft_model.add_weighted_adapter(names, weights=weights, adapter_name="blended_adapter")
|
|
55
|
+
peft_model.set_adapter("blended_adapter")
|
|
56
|
+
logging.info("PEFT adapters merging completed.")
|
|
57
|
+
else:
|
|
58
|
+
peft_model.set_adapter(names[0])
|
|
59
|
+
|
|
60
|
+
return peft_model
|
|
61
|
+
|
|
62
|
+
def _build_peft_adapter_lists(self, adapter_configs: List[PeftAdapterConfig]) -> Tuple[List[str], List[float]]:
|
|
63
|
+
names: List[str] = []
|
|
64
|
+
weights: List[float] = []
|
|
65
|
+
|
|
66
|
+
for index, config in enumerate(adapter_configs):
|
|
67
|
+
names.append(config.name or f"peft_adapter_{index}")
|
|
68
|
+
weights.append(config.weight)
|
|
69
|
+
|
|
70
|
+
return names, weights
|
|
71
|
+
|
|
26
72
|
def _get_model_class(self) -> Type[PreTrainedModel]:
|
|
27
73
|
raise NotImplementedError("Model class loader not implemented.")
|
|
28
74
|
|
|
29
|
-
def
|
|
75
|
+
def _get_model_path(self, config: Union[ModelComponentConfig, PeftAdapterConfig]) -> str:
|
|
76
|
+
if isinstance(config.model, HuggingfaceModelConfig):
|
|
77
|
+
return config.model.repository
|
|
78
|
+
|
|
79
|
+
return config.model.path
|
|
80
|
+
|
|
81
|
+
def _get_model_params(self, config: Union[ModelComponentConfig, PeftAdapterConfig]) -> Dict[str, Any]:
|
|
30
82
|
params: Dict[str, Any] = {}
|
|
31
83
|
|
|
32
|
-
if isinstance(
|
|
33
|
-
if
|
|
34
|
-
params["
|
|
84
|
+
if isinstance(config.model, HuggingfaceModelConfig):
|
|
85
|
+
if config.model.filename:
|
|
86
|
+
params["filename"] = config.model.filename
|
|
87
|
+
|
|
88
|
+
if config.model.revision:
|
|
89
|
+
params["revision"] = config.model.revision
|
|
35
90
|
|
|
36
|
-
if
|
|
37
|
-
params["cache_dir"] =
|
|
91
|
+
if config.model.cache_dir:
|
|
92
|
+
params["cache_dir"] = config.model.cache_dir
|
|
38
93
|
|
|
39
|
-
if
|
|
94
|
+
if config.model.local_files_only:
|
|
40
95
|
params["local_files_only"] = True
|
|
96
|
+
|
|
97
|
+
if config.model.token:
|
|
98
|
+
params["token"] = config.model.token
|
|
41
99
|
|
|
42
|
-
if
|
|
43
|
-
|
|
100
|
+
if not isinstance(config, PeftAdapterConfig):
|
|
101
|
+
if config.device_mode != DeviceMode.SINGLE:
|
|
102
|
+
params["device_map"] = config.device_mode.value
|
|
44
103
|
|
|
45
|
-
if
|
|
46
|
-
params["torch_dtype"] = getattr(torch,
|
|
104
|
+
if config.precision is not None:
|
|
105
|
+
params["torch_dtype"] = getattr(torch, config.precision.value)
|
|
47
106
|
|
|
48
|
-
if
|
|
107
|
+
if config.low_cpu_mem_usage:
|
|
49
108
|
params["low_cpu_mem_usage"] = True
|
|
50
109
|
|
|
51
110
|
return params
|
|
@@ -62,8 +121,9 @@ class HuggingfaceLanguageModelTaskService(HuggingfaceModelTaskService):
|
|
|
62
121
|
self.device: Optional[torch.device] = None
|
|
63
122
|
|
|
64
123
|
def get_setup_requirements(self) -> Optional[List[str]]:
|
|
65
|
-
return [
|
|
124
|
+
return [
|
|
66
125
|
"transformers>=4.21.0",
|
|
126
|
+
"peft>=0.5.0",
|
|
67
127
|
"torch",
|
|
68
128
|
"sentencepiece",
|
|
69
129
|
"accelerate"
|
|
@@ -86,11 +146,21 @@ class HuggingfaceLanguageModelTaskService(HuggingfaceModelTaskService):
|
|
|
86
146
|
|
|
87
147
|
def _load_pretrained_tokenizer(self) -> Optional[PreTrainedTokenizer]:
|
|
88
148
|
tokenizer_cls = self._get_tokenizer_class()
|
|
149
|
+
tokenizer = tokenizer_cls.from_pretrained(self._get_model_path(self.config), **self._get_tokenizer_params())
|
|
89
150
|
|
|
90
|
-
if
|
|
91
|
-
|
|
151
|
+
if tokenizer.pad_token is None:
|
|
152
|
+
logging.info("Tokenizer does not have a pad_token defined. Configuring pad_token automatically.")
|
|
153
|
+
self._configure_missing_pad_token(tokenizer)
|
|
92
154
|
|
|
93
|
-
return
|
|
155
|
+
return tokenizer
|
|
156
|
+
|
|
157
|
+
def _configure_missing_pad_token(self, tokenizer: PreTrainedTokenizer) -> None:
|
|
158
|
+
if tokenizer.eos_token is not None:
|
|
159
|
+
tokenizer.pad_token = tokenizer.eos_token
|
|
160
|
+
logging.info(f"Set pad_token to eos_token: {tokenizer.eos_token}")
|
|
161
|
+
else:
|
|
162
|
+
tokenizer.add_special_tokens({ "pad_token": "[PAD]" })
|
|
163
|
+
logging.info("Added new pad_token: [PAD]")
|
|
94
164
|
|
|
95
165
|
def _get_tokenizer_class(self) -> Optional[Type[PreTrainedTokenizer]]:
|
|
96
166
|
return None
|
|
@@ -108,6 +178,9 @@ class HuggingfaceLanguageModelTaskService(HuggingfaceModelTaskService):
|
|
|
108
178
|
if self.config.model.local_files_only:
|
|
109
179
|
params["local_files_only"] = True
|
|
110
180
|
|
|
181
|
+
if self.config.model.token:
|
|
182
|
+
params["token"] = self.config.model.token
|
|
183
|
+
|
|
111
184
|
if not self.config.fast_tokenizer:
|
|
112
185
|
params["use_fast"] = False
|
|
113
186
|
|
|
@@ -150,7 +223,7 @@ class HuggingfaceMultimodalModelTaskService(HuggingfaceModelTaskService):
|
|
|
150
223
|
if not processor_cls:
|
|
151
224
|
return None
|
|
152
225
|
|
|
153
|
-
return processor_cls.from_pretrained(self.config
|
|
226
|
+
return processor_cls.from_pretrained(self._get_model_path(self.config), **self._get_processor_params())
|
|
154
227
|
|
|
155
228
|
def _get_processor_class(self) -> Optional[Type[ProcessorMixin]]:
|
|
156
229
|
return None
|
|
@@ -161,11 +234,14 @@ class HuggingfaceMultimodalModelTaskService(HuggingfaceModelTaskService):
|
|
|
161
234
|
if isinstance(self.config.model, HuggingfaceModelConfig):
|
|
162
235
|
if self.config.model.revision:
|
|
163
236
|
params["revision"] = self.config.model.revision
|
|
164
|
-
|
|
237
|
+
|
|
165
238
|
if self.config.model.cache_dir:
|
|
166
239
|
params["cache_dir"] = self.config.model.cache_dir
|
|
167
240
|
|
|
168
241
|
if self.config.model.local_files_only:
|
|
169
242
|
params["local_files_only"] = True
|
|
170
243
|
|
|
244
|
+
if self.config.model.token:
|
|
245
|
+
params["token"] = self.config.model.token
|
|
246
|
+
|
|
171
247
|
return params
|
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
from typing import TYPE_CHECKING
|
|
3
3
|
|
|
4
4
|
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
5
|
-
from mindor.dsl.schema.action import ModelActionConfig, ChatCompletionModelActionConfig
|
|
5
|
+
from mindor.dsl.schema.action import ModelActionConfig, ChatCompletionModelActionConfig, ToolFunction
|
|
6
6
|
from ...base import ModelTaskType, ModelDriver, register_model_task_service
|
|
7
7
|
from ...base import HuggingfaceLanguageModelTaskService, ComponentActionContext
|
|
8
8
|
from ..text_generation import HuggingfaceTextGenerationTaskAction
|
|
@@ -20,13 +20,23 @@ class HuggingfaceChatCompletionTaskAction(HuggingfaceTextGenerationTaskAction):
|
|
|
20
20
|
|
|
21
21
|
async def _prepare_input(self, context: ComponentActionContext) -> Union[str, List[str]]:
|
|
22
22
|
messages = await context.render_variable(self.config.messages)
|
|
23
|
+
tools = await context.render_variable(self.config.tools)
|
|
24
|
+
|
|
25
|
+
tools = [ self._build_tool_definition(tool) for tool in tools ] if tools else None
|
|
23
26
|
|
|
24
27
|
return self.tokenizer.apply_chat_template(
|
|
25
28
|
messages,
|
|
26
29
|
tokenize=False,
|
|
27
|
-
add_generation_prompt=True
|
|
30
|
+
add_generation_prompt=True,
|
|
31
|
+
**({ "tools": tools } if tools else {})
|
|
28
32
|
)
|
|
29
33
|
|
|
34
|
+
def _build_tool_definition(self, tool: Dict[str, Any]) -> Dict[str, Any]:
|
|
35
|
+
return {
|
|
36
|
+
"type": "function",
|
|
37
|
+
"function": { k: v for k, v in tool.items() if v is not None }
|
|
38
|
+
}
|
|
39
|
+
|
|
30
40
|
@register_model_task_service(ModelTaskType.CHAT_COMPLETION, ModelDriver.HUGGINGFACE)
|
|
31
41
|
class HuggingfaceChatCompletionTaskService(HuggingfaceLanguageModelTaskService):
|
|
32
42
|
async def _run(self, action: ModelActionConfig, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
|
|
@@ -36,7 +36,7 @@ class FaceEmbeddingTaskAction:
|
|
|
36
36
|
return await context.render_image(self.config.image)
|
|
37
37
|
|
|
38
38
|
@abstractmethod
|
|
39
|
-
async def _embed(self, images: List[PILImage.Image], params: Dict[str, Any]) -> List[
|
|
39
|
+
async def _embed(self, images: List[PILImage.Image], params: Dict[str, Any]) -> List[List[float]]:
|
|
40
40
|
pass
|
|
41
41
|
|
|
42
42
|
@abstractmethod
|
|
@@ -8,7 +8,7 @@ from mindor.core.logger import logging
|
|
|
8
8
|
from .common import FaceEmbeddingTaskService, FaceEmbeddingTaskAction
|
|
9
9
|
from ...base import ComponentActionContext
|
|
10
10
|
from PIL import Image as PILImage
|
|
11
|
-
import asyncio, os
|
|
11
|
+
import asyncio, os, shutil
|
|
12
12
|
|
|
13
13
|
if TYPE_CHECKING:
|
|
14
14
|
from insightface.app import FaceAnalysis
|
|
@@ -20,15 +20,14 @@ class InsightfaceFaceEmbeddingTaskAction(FaceEmbeddingTaskAction):
|
|
|
20
20
|
|
|
21
21
|
self.model: FaceAnalysis = model
|
|
22
22
|
|
|
23
|
-
async def _embed(self, images: List[PILImage.Image], params: Dict[str, Any]) -> List[
|
|
23
|
+
async def _embed(self, images: List[PILImage.Image], params: Dict[str, Any]) -> List[List[float]]:
|
|
24
24
|
import numpy as np
|
|
25
25
|
import cv2
|
|
26
26
|
|
|
27
27
|
embeddings = []
|
|
28
28
|
for image in images:
|
|
29
29
|
image_cv = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)
|
|
30
|
-
for face in self.model.get(image_cv)
|
|
31
|
-
embeddings.append(face.embedding)
|
|
30
|
+
embeddings.append([ face.embedding.tolist() for face in self.model.get(image_cv) ])
|
|
32
31
|
|
|
33
32
|
return embeddings
|
|
34
33
|
|
|
@@ -55,35 +54,54 @@ class InsightfaceFaceEmbeddingTaskService(FaceEmbeddingTaskService):
|
|
|
55
54
|
def _load_pretrained_model(self) -> FaceAnalysis:
|
|
56
55
|
from insightface.app import FaceAnalysis
|
|
57
56
|
|
|
58
|
-
|
|
57
|
+
params = self._resolve_model_params()
|
|
58
|
+
|
|
59
|
+
try:
|
|
60
|
+
model = FaceAnalysis(**params)
|
|
61
|
+
except:
|
|
62
|
+
self._fix_wrong_model_path(params)
|
|
63
|
+
model = FaceAnalysis(**params)
|
|
64
|
+
|
|
59
65
|
model.prepare(ctx_id=self._get_device_id())
|
|
60
66
|
|
|
61
67
|
return model
|
|
62
68
|
|
|
63
69
|
def _resolve_model_params(self) -> Dict[str, Any]:
|
|
64
|
-
if isinstance(self.config.model, LocalModelConfig):
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return {
|
|
71
|
-
"name": os.path.basename(self.config.model.path),
|
|
72
|
-
"root": os.path.dirname(path)
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
if isinstance(self.config.model, str):
|
|
76
|
-
path = os.path.dirname(self.config.model)
|
|
70
|
+
if isinstance(self.config.model, (LocalModelConfig, str)):
|
|
71
|
+
if isinstance(self.config.model, LocalModelConfig):
|
|
72
|
+
# TODO: process local storage
|
|
73
|
+
path = self.config.model.path
|
|
74
|
+
else:
|
|
75
|
+
path = self.config.model
|
|
77
76
|
|
|
78
|
-
|
|
79
|
-
raise ValueError(f"Expected 'models' directory in path, got: {path}")
|
|
77
|
+
root, name = self._prepare_model_path(path)
|
|
80
78
|
|
|
81
|
-
return {
|
|
82
|
-
"name": os.path.basename(self.config.model),
|
|
83
|
-
"root": os.path.dirname(path)
|
|
84
|
-
}
|
|
79
|
+
return { "name": name, "root": root }
|
|
85
80
|
|
|
86
81
|
raise ValueError(f"Unsupported model type: {type(self.config.model)}")
|
|
82
|
+
|
|
83
|
+
def _prepare_model_path(self, path: str) -> Tuple[str, str]:
|
|
84
|
+
root = os.path.dirname(path)
|
|
85
|
+
name = os.path.basename(path)
|
|
86
|
+
|
|
87
|
+
if os.path.basename(root) != "models":
|
|
88
|
+
models_dir = os.path.join(root, "models")
|
|
89
|
+
if not os.path.exists(models_dir):
|
|
90
|
+
os.symlink(root, models_dir, target_is_directory=True)
|
|
91
|
+
else:
|
|
92
|
+
root = os.path.dirname(root)
|
|
93
|
+
|
|
94
|
+
return (root, name)
|
|
95
|
+
|
|
96
|
+
def _fix_wrong_model_path(self, params: Dict[str, Any]) -> None:
|
|
97
|
+
root, name = params["root"], params["name"]
|
|
98
|
+
model_dir = os.path.join(root, "models", name)
|
|
99
|
+
wrong_model_dir = os.path.join(model_dir, name)
|
|
100
|
+
|
|
101
|
+
if os.path.isdir(wrong_model_dir):
|
|
102
|
+
for file in os.listdir(wrong_model_dir):
|
|
103
|
+
shutil.move(os.path.join(wrong_model_dir, file), os.path.join(model_dir, file))
|
|
104
|
+
os.rmdir(wrong_model_dir)
|
|
87
105
|
|
|
88
106
|
def _get_device_id(self) -> int:
|
|
89
107
|
return 0
|