model-compose 0.4.7__tar.gz → 0.4.12__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.12/PKG-INFO +190 -0
- model_compose-0.4.12/README.md +166 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/pyproject.toml +2 -3
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/cli/compose.py +57 -26
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/base.py +14 -38
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/context.py +3 -2
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/__init__.py +2 -0
- model_compose-0.4.12/src/mindor/core/component/services/datasets/__init__.py +1 -0
- model_compose-0.4.12/src/mindor/core/component/services/datasets/datasets.py +129 -0
- model_compose-0.4.12/src/mindor/core/component/services/datasets/providers/__init__.py +2 -0
- model_compose-0.4.12/src/mindor/core/component/services/datasets/providers/common.py +18 -0
- model_compose-0.4.12/src/mindor/core/component/services/datasets/providers/huggingface.py +36 -0
- model_compose-0.4.12/src/mindor/core/component/services/datasets/providers/local.py +32 -0
- model_compose-0.4.12/src/mindor/core/component/services/datasets/utils.py +12 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/http_client.py +5 -5
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/http_server.py +2 -2
- model_compose-0.4.12/src/mindor/core/component/services/image_processor.py +210 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/base/common.py +1 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/base/huggingface.py +96 -20
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/__init__.py +1 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/chat_completion/huggingface.py +12 -2
- model_compose-0.4.12/src/mindor/core/component/services/model/tasks/face_embedding/common.py +47 -0
- model_compose-0.4.12/src/mindor/core/component/services/model/tasks/face_embedding/custom.py +12 -0
- model_compose-0.4.12/src/mindor/core/component/services/model/tasks/face_embedding/insightface.py +113 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_generation/common.py +6 -6
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_generation/custom.py +1 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_generation/flux.py +1 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_generation/hunyuan_image.py +1 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_generation/sdxl.py +1 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_to_text/huggingface.py +7 -7
- model_compose-0.4.12/src/mindor/core/component/services/model/tasks/image_upscale/__init__.py +1 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_upscale/common.py +2 -2
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_upscale/esrgan.py +2 -2
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_upscale/ldsr.py +2 -2
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_upscale/real_esrgan.py +1 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_upscale/swinir.py +2 -2
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/text_classification/huggingface.py +2 -2
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/text_embedding/huggingface.py +2 -2
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/text_generation/huggingface.py +13 -10
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/text_splitter.py +0 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/vector_store/base.py +1 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/vector_store/vector_store.py +8 -8
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/base.py +35 -4
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/runner/http_client.py +6 -5
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/services/http_server.py +62 -26
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/services/mcp_server.py +1 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/webui/gradio.py +6 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/webui/webui.py +1 -1
- {model_compose-0.4.7/src/mindor/core/services → model_compose-0.4.12/src/mindor/core/foundation}/async_service.py +32 -2
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/gateway/base.py +11 -2
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/gateway/gateway.py +1 -1
- model_compose-0.4.12/src/mindor/core/gateway/services/http_tunnel/base.py +29 -0
- model_compose-0.4.12/src/mindor/core/gateway/services/http_tunnel/drivers/__init__.py +2 -0
- model_compose-0.4.12/src/mindor/core/gateway/services/http_tunnel/drivers/cloudflare.py +14 -0
- model_compose-0.4.12/src/mindor/core/gateway/services/http_tunnel/drivers/ngrok.py +36 -0
- model_compose-0.4.12/src/mindor/core/gateway/services/http_tunnel/http_tunnel.py +45 -0
- model_compose-0.4.12/src/mindor/core/gateway/services/ssh_tunnel.py +82 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/listener/base.py +13 -8
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/listener/services/__init__.py +1 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/listener/services/http_callback.py +12 -14
- model_compose-0.4.12/src/mindor/core/listener/services/http_trigger.py +136 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/logger/base.py +1 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/utils/http_client.py +6 -4
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/utils/renderers.py +9 -3
- model_compose-0.4.12/src/mindor/core/utils/ssh_client.py +206 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/utils/time.py +6 -3
- model_compose-0.4.12/src/mindor/core/utils/url.py +33 -0
- model_compose-0.4.12/src/mindor/core/utils/websocket_client.py +56 -0
- model_compose-0.4.7/src/mindor/core/utils/workqueue.py → model_compose-0.4.12/src/mindor/core/utils/work_queue.py +3 -3
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/workflow/job/impl/random_router.py +2 -2
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/workflow/workflow.py +4 -4
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/loader.py +4 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/action.py +1 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/__init__.py +3 -0
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/datasets/__init__.py +1 -0
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/datasets/common.py +14 -0
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/datasets/datasets.py +48 -0
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/datasets/providers/__init__.py +2 -0
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/datasets/providers/common.py +19 -0
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/datasets/providers/huggingface.py +12 -0
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/datasets/providers/local.py +10 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/http_client.py +2 -2
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/http_server.py +2 -2
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/image_processor.py +91 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/__init__.py +2 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +14 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/common.py +1 -1
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/__init__.py +1 -0
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/face_embedding.py +8 -0
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/__init__.py +4 -0
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/common.py +12 -0
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/dlib.py +18 -0
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/facenet.py +19 -0
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/insightface.py +19 -0
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/model_trainer/__init__.py +1 -0
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/model_trainer/impl/__init__.py +3 -0
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/model_trainer/impl/classification.py +7 -0
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/model_trainer/impl/common.py +85 -0
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/model_trainer/impl/sft.py +25 -0
- model_compose-0.4.12/src/mindor/dsl/schema/action/impl/model_trainer/model_trainer.py +8 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/text_splitter.py +0 -1
- {model_compose-0.4.7/src/mindor/dsl/schema/component → model_compose-0.4.12/src/mindor/dsl/schema/action}/impl/vector_store/impl/__init__.py +1 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/vector_store/impl/chroma.py +6 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/vector_store/impl/faiss.py +6 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/vector_store/impl/milvus.py +6 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/vector_store/impl/qdrant.py +6 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/component.py +3 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/__init__.py +3 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/common.py +11 -4
- model_compose-0.4.12/src/mindor/dsl/schema/component/impl/datasets/__init__.py +1 -0
- model_compose-0.4.12/src/mindor/dsl/schema/component/impl/datasets/datasets.py +18 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/http_client.py +2 -2
- model_compose-0.4.12/src/mindor/dsl/schema/component/impl/image_processor.py +17 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/__init__.py +1 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/chat_completion.py +3 -3
- model_compose-0.4.12/src/mindor/dsl/schema/component/impl/model/impl/common.py +140 -0
- model_compose-0.4.12/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/__init__.py +1 -0
- model_compose-0.4.12/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/face_embedding.py +12 -0
- model_compose-0.4.12/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/__init__.py +4 -0
- model_compose-0.4.12/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/common.py +29 -0
- model_compose-0.4.12/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/dlib.py +14 -0
- model_compose-0.4.12/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/facenet.py +14 -0
- model_compose-0.4.12/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/insightface.py +14 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +4 -3
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +3 -3
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +3 -3
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/model.py +1 -0
- model_compose-0.4.12/src/mindor/dsl/schema/component/impl/model_trainer/__init__.py +1 -0
- model_compose-0.4.12/src/mindor/dsl/schema/component/impl/model_trainer/impl/__init__.py +3 -0
- model_compose-0.4.12/src/mindor/dsl/schema/component/impl/model_trainer/impl/classification.py +17 -0
- model_compose-0.4.12/src/mindor/dsl/schema/component/impl/model_trainer/impl/common.py +27 -0
- model_compose-0.4.12/src/mindor/dsl/schema/component/impl/model_trainer/impl/sft.py +17 -0
- model_compose-0.4.12/src/mindor/dsl/schema/component/impl/model_trainer/model_trainer.py +11 -0
- model_compose-0.4.12/src/mindor/dsl/schema/component/impl/types.py +15 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/vector_store/impl/chroma.py +1 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/vector_store/impl/common.py +6 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/vector_store/impl/milvus.py +2 -2
- model_compose-0.4.12/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +32 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/impl/common.py +1 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/impl/http_server.py +2 -2
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/impl/mcp_server.py +2 -2
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/webui/impl/common.py +2 -2
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/impl/common.py +0 -1
- model_compose-0.4.12/src/mindor/dsl/schema/gateway/impl/http_tunnel/__init__.py +1 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/common.py +1 -0
- model_compose-0.4.12/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +26 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/listener/impl/__init__.py +1 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/listener/impl/http_callback.py +3 -3
- model_compose-0.4.12/src/mindor/dsl/schema/listener/impl/http_trigger.py +27 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/listener/impl/types.py +1 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/listener/listener.py +2 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/runtime/impl/docker.py +3 -3
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/transport/ssh.py +1 -1
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/workflow.py +1 -0
- model_compose-0.4.12/src/mindor/dsl/utils/path.py +23 -0
- model_compose-0.4.12/src/model_compose.egg-info/PKG-INFO +190 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/model_compose.egg-info/SOURCES.txt +63 -6
- {model_compose-0.4.7 → model_compose-0.4.12}/src/model_compose.egg-info/requires.txt +0 -1
- model_compose-0.4.7/PKG-INFO +0 -429
- model_compose-0.4.7/README.md +0 -404
- model_compose-0.4.7/src/mindor/core/gateway/services/http_tunnel.py +0 -82
- model_compose-0.4.7/src/mindor/core/gateway/services/ssh_tunnel.py +0 -24
- model_compose-0.4.7/src/mindor/core/utils/ssh_client.py +0 -4
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/common.py +0 -97
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/model/impl/types.py +0 -10
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/types.py +0 -12
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +0 -41
- model_compose-0.4.7/src/mindor/dsl/schema/component/impl/vector_store/impl/types.py +0 -7
- model_compose-0.4.7/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -9
- model_compose-0.4.7/src/model_compose.egg-info/PKG-INFO +0 -429
- {model_compose-0.4.7 → model_compose-0.4.12}/LICENSE +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/setup.cfg +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/cli/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/component.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/mcp_client.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/mcp_server.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/base/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/base/huggingface_hub.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/base/unsloth.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/model.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/chat_completion/__init__.py +0 -0
- {model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_generation → model_compose-0.4.12/src/mindor/core/component/services/model/tasks/face_embedding}/__init__.py +0 -0
- {model_compose-0.4.7/src/mindor/core/component/services/model/tasks/image_upscale → model_compose-0.4.12/src/mindor/core/component/services/model/tasks/image_generation}/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_to_text/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_upscale/custom.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/text_classification/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/text_embedding/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/text_generation/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/shell.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/vector_store/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/vector_store/drivers/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/vector_store/drivers/chroma.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/vector_store/drivers/milvus.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/component/services/workflow.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/compose/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/compose/compose.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/compose/manager.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/controller.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/runner/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/runner/client.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/runner/mcp_client.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/runner/runner.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/runtime/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/runtime/docker/context/Dockerfile +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/runtime/docker/docker.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/runtime/native/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/runtime/native/native.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/runtime/specs.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/services/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/controller/webui/__init__.py +0 -0
- {model_compose-0.4.7/src/mindor/core/services → model_compose-0.4.12/src/mindor/core/foundation}/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/gateway/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/gateway/services/__init__.py +0 -0
- {model_compose-0.4.7/src/mindor/dsl/schema/gateway/impl → model_compose-0.4.12/src/mindor/core/gateway/services}/http_tunnel/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/listener/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/listener/listener.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/logger/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/logger/logger.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/logger/logging.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/logger/services/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/logger/services/console.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/logger/services/file.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/runtime/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/runtime/docker/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/runtime/docker/docker.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/runtime/env.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/utils/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/utils/caching.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/utils/http_request.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/utils/http_response.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/utils/http_status.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/utils/image.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/utils/mcp_client.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/utils/package.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/utils/resolvers.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/utils/shell.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/utils/streamer.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/utils/streaming.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/workflow/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/workflow/context.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/workflow/job/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/workflow/job/base.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/workflow/job/impl/action.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/workflow/job/impl/delay.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/workflow/job/impl/filter.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/workflow/job/impl/if_.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/workflow/job/impl/switch.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/workflow/job/job.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/core/workflow/schema.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/common.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/image_generation.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/common.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/flux.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/sdxl.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/image_upscale.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/common.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/swinir.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/model.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/vector_store/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/vector_store/impl/common.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/vector_store/vector_store.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/mcp_client.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/image_generation.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/common.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/flux.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/sdxl.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_to_text.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/image_upscale.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/common.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/swinir.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/text_splitter.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/vector_store/__init__.py +0 -0
- {model_compose-0.4.7/src/mindor/dsl/schema/action → model_compose-0.4.12/src/mindor/dsl/schema/component}/impl/vector_store/impl/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/vector_store/impl/faiss.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/vector_store/vector_store.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/compose.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/controller.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/impl/types.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/webui/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/webui/impl/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/webui/impl/gradio.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/webui/impl/static.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/webui/webui.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/impl/http_tunnel/http_tunnel.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/cloudflare.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/ngrok.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/job/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/job/impl/action.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/job/impl/common.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/job/impl/filter.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/job/impl/random_router.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/job/impl/types.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/job/job.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/listener/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/listener/impl/common.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/logger/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/logger/impl/common.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/logger/impl/file.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/logger/logger.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/runtime/impl/common.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/transport/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/schema/transport/http.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/utils/__init__.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/utils/annotation.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/mindor/dsl/utils/enum.py +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/model_compose.egg-info/dependency_links.txt +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/model_compose.egg-info/entry_points.txt +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/src/model_compose.egg-info/top_level.txt +0 -0
- {model_compose-0.4.7 → model_compose-0.4.12}/tests/test_cli.py +0 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: model-compose
|
|
3
|
+
Version: 0.4.12
|
|
4
|
+
Summary: model-compose: Declarative AI Workflow Orchestrator
|
|
5
|
+
Author-email: Hanyeol Cho <hanyeol.cho@gmail.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/hanyeol/model-compose
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Requires-Dist: click
|
|
11
|
+
Requires-Dist: pyyaml
|
|
12
|
+
Requires-Dist: pydantic
|
|
13
|
+
Requires-Dist: python-dotenv
|
|
14
|
+
Requires-Dist: aiohttp
|
|
15
|
+
Requires-Dist: requests
|
|
16
|
+
Requires-Dist: fastapi
|
|
17
|
+
Requires-Dist: uvicorn
|
|
18
|
+
Requires-Dist: mcp>=1.10.1
|
|
19
|
+
Requires-Dist: ulid
|
|
20
|
+
Requires-Dist: gradio
|
|
21
|
+
Requires-Dist: Pillow
|
|
22
|
+
Requires-Dist: docker
|
|
23
|
+
Dynamic: license-file
|
|
24
|
+
|
|
25
|
+
<div align="center">
|
|
26
|
+
|
|
27
|
+

|
|
28
|
+
|
|
29
|
+
[](https://python.org)
|
|
30
|
+
[](https://pypi.org/project/model-compose/)
|
|
31
|
+
[](https://opensource.org/licenses/MIT)
|
|
32
|
+
[](https://pepy.tech/project/model-compose)
|
|
33
|
+
[](http://makeapullrequest.com)
|
|
34
|
+
|
|
35
|
+
[한국어](README.ko.md) | [中文](README.zh-cn.md)
|
|
36
|
+
|
|
37
|
+
</div>
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
# 🤖 Model-Compose
|
|
42
|
+
|
|
43
|
+
**model-compose** is a declarative AI workflow orchestrator inspired by `docker-compose`. It lets you define and run AI model pipelines using simple YAML files — no custom code required. Effortlessly connect external AI services (OpenAI, Anthropic, Google, etc.), run local AI models, integrate vector stores, and more — all within powerful, composable workflows.
|
|
44
|
+
|
|
45
|
+
**No custom code. Just YAML configuration.**
|
|
46
|
+
|
|
47
|
+
<div align="center">
|
|
48
|
+
|
|
49
|
+
[📖 User Guide](docs/user-guide/README.md) · [🚀 Quick Start](#-quick-start) · [💡 Examples](examples/README.md) · [🤝 Contributing](#-contributing)
|
|
50
|
+
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## ✨ Features
|
|
56
|
+
|
|
57
|
+
- 🎨 **No-Code**: Pure YAML configuration—no scripting required
|
|
58
|
+
- 🔄 **Composable**: Reusable components and multi-step workflows
|
|
59
|
+
- 🚀 **Production Ready**: HTTP/MCP servers + Web UI + Docker deployment
|
|
60
|
+
- 🔌 **Connect Anything**: External AI services, local models, vector stores, and more
|
|
61
|
+
- ⚡ **Stream & Scale**: Real-time streaming and event-driven automation
|
|
62
|
+
- ⚙️ **Configuration**: Environment variables, flexible settings
|
|
63
|
+
- 🔗 **Integration**: Webhooks, tunneling, HTTP servers
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
## 📦 Installation
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
pip install model-compose
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Or install from source:
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
git clone https://github.com/hanyeol/model-compose.git
|
|
78
|
+
cd model-compose
|
|
79
|
+
pip install -e .
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
> Requires: Python 3.9 or higher
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 🚀 Quick Start
|
|
87
|
+
|
|
88
|
+
Create a `model-compose.yml`:
|
|
89
|
+
|
|
90
|
+
```yaml
|
|
91
|
+
controller:
|
|
92
|
+
type: http-server
|
|
93
|
+
port: 8080
|
|
94
|
+
webui:
|
|
95
|
+
port: 8081
|
|
96
|
+
|
|
97
|
+
components:
|
|
98
|
+
- id: chatgpt
|
|
99
|
+
type: http-client
|
|
100
|
+
base_url: https://api.openai.com/v1
|
|
101
|
+
path: /chat/completions
|
|
102
|
+
method: POST
|
|
103
|
+
headers:
|
|
104
|
+
Authorization: Bearer ${env.OPENAI_API_KEY}
|
|
105
|
+
body:
|
|
106
|
+
model: gpt-4o
|
|
107
|
+
messages:
|
|
108
|
+
- role: user
|
|
109
|
+
content: ${input.prompt}
|
|
110
|
+
|
|
111
|
+
workflows:
|
|
112
|
+
- id: chat
|
|
113
|
+
default: true
|
|
114
|
+
jobs:
|
|
115
|
+
- component: chatgpt
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Create a `.env` file:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
OPENAI_API_KEY=your-key
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Run it:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
model-compose up
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Your API is now live at `http://localhost:8080` and Web UI at `http://localhost:8081` 🎉
|
|
131
|
+
|
|
132
|
+
> 💡 Explore [examples](examples/README.md) for more workflows or read the [User Guide](docs/user-guide/README.md).
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
## 💡 Key Capabilities
|
|
136
|
+
|
|
137
|
+
### 🖥️ Built-in Web UI
|
|
138
|
+
Add a web interface by adding just 2 lines to your YAML:
|
|
139
|
+
```yaml
|
|
140
|
+
controller:
|
|
141
|
+
webui:
|
|
142
|
+
port: 8081
|
|
143
|
+
```
|
|
144
|
+
Instantly get a user-friendly interface to test and monitor your workflows. Supports both Gradio (default) and custom static frontends.
|
|
145
|
+
|
|
146
|
+
### 🛰️ MCP Server Ready
|
|
147
|
+
Transform your workflows into MCP tools by changing one line:
|
|
148
|
+
```yaml
|
|
149
|
+
controller:
|
|
150
|
+
type: mcp-server
|
|
151
|
+
```
|
|
152
|
+
Just set the type to `mcp-server`. Your workflows become instantly accessible via the Model Context Protocol.
|
|
153
|
+
|
|
154
|
+
### 🐳 Docker Deployment
|
|
155
|
+
Deploy anywhere with built-in Docker support:
|
|
156
|
+
```yaml
|
|
157
|
+
controller:
|
|
158
|
+
runtime: docker
|
|
159
|
+
```
|
|
160
|
+
Run your workflows in isolated containers with full control over images, volumes, ports, and environment variables.
|
|
161
|
+
|
|
162
|
+
> 📖 See the [User Guide](docs/user-guide/README.md) for detailed configuration and [Examples](examples/README.md) for ready-to-run samples.
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
## 🏗 Architecture
|
|
166
|
+
|
|
167
|
+

|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## 🤝 Contributing
|
|
172
|
+
We welcome all contributions!
|
|
173
|
+
Whether it's fixing bugs, improving docs, or adding examples — every bit helps.
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
# Setup for development
|
|
177
|
+
git clone https://github.com/hanyeol/model-compose.git
|
|
178
|
+
cd model-compose
|
|
179
|
+
pip install -e .[dev]
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## 📄 License
|
|
185
|
+
MIT License © 2025 Hanyeol Cho.
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## 📬 Contact
|
|
190
|
+
Have questions, ideas, or feedback? [Open an issue](https://github.com/hanyeol/model-compose/issues) or start a discussion on [GitHub Discussions](https://github.com/hanyeol/model-compose/discussions).
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
[](https://python.org)
|
|
6
|
+
[](https://pypi.org/project/model-compose/)
|
|
7
|
+
[](https://opensource.org/licenses/MIT)
|
|
8
|
+
[](https://pepy.tech/project/model-compose)
|
|
9
|
+
[](http://makeapullrequest.com)
|
|
10
|
+
|
|
11
|
+
[한국어](README.ko.md) | [中文](README.zh-cn.md)
|
|
12
|
+
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# 🤖 Model-Compose
|
|
18
|
+
|
|
19
|
+
**model-compose** is a declarative AI workflow orchestrator inspired by `docker-compose`. It lets you define and run AI model pipelines using simple YAML files — no custom code required. Effortlessly connect external AI services (OpenAI, Anthropic, Google, etc.), run local AI models, integrate vector stores, and more — all within powerful, composable workflows.
|
|
20
|
+
|
|
21
|
+
**No custom code. Just YAML configuration.**
|
|
22
|
+
|
|
23
|
+
<div align="center">
|
|
24
|
+
|
|
25
|
+
[📖 User Guide](docs/user-guide/README.md) · [🚀 Quick Start](#-quick-start) · [💡 Examples](examples/README.md) · [🤝 Contributing](#-contributing)
|
|
26
|
+
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## ✨ Features
|
|
32
|
+
|
|
33
|
+
- 🎨 **No-Code**: Pure YAML configuration—no scripting required
|
|
34
|
+
- 🔄 **Composable**: Reusable components and multi-step workflows
|
|
35
|
+
- 🚀 **Production Ready**: HTTP/MCP servers + Web UI + Docker deployment
|
|
36
|
+
- 🔌 **Connect Anything**: External AI services, local models, vector stores, and more
|
|
37
|
+
- ⚡ **Stream & Scale**: Real-time streaming and event-driven automation
|
|
38
|
+
- ⚙️ **Configuration**: Environment variables, flexible settings
|
|
39
|
+
- 🔗 **Integration**: Webhooks, tunneling, HTTP servers
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
## 📦 Installation
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
pip install model-compose
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Or install from source:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
git clone https://github.com/hanyeol/model-compose.git
|
|
54
|
+
cd model-compose
|
|
55
|
+
pip install -e .
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
> Requires: Python 3.9 or higher
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 🚀 Quick Start
|
|
63
|
+
|
|
64
|
+
Create a `model-compose.yml`:
|
|
65
|
+
|
|
66
|
+
```yaml
|
|
67
|
+
controller:
|
|
68
|
+
type: http-server
|
|
69
|
+
port: 8080
|
|
70
|
+
webui:
|
|
71
|
+
port: 8081
|
|
72
|
+
|
|
73
|
+
components:
|
|
74
|
+
- id: chatgpt
|
|
75
|
+
type: http-client
|
|
76
|
+
base_url: https://api.openai.com/v1
|
|
77
|
+
path: /chat/completions
|
|
78
|
+
method: POST
|
|
79
|
+
headers:
|
|
80
|
+
Authorization: Bearer ${env.OPENAI_API_KEY}
|
|
81
|
+
body:
|
|
82
|
+
model: gpt-4o
|
|
83
|
+
messages:
|
|
84
|
+
- role: user
|
|
85
|
+
content: ${input.prompt}
|
|
86
|
+
|
|
87
|
+
workflows:
|
|
88
|
+
- id: chat
|
|
89
|
+
default: true
|
|
90
|
+
jobs:
|
|
91
|
+
- component: chatgpt
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Create a `.env` file:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
OPENAI_API_KEY=your-key
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Run it:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
model-compose up
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Your API is now live at `http://localhost:8080` and Web UI at `http://localhost:8081` 🎉
|
|
107
|
+
|
|
108
|
+
> 💡 Explore [examples](examples/README.md) for more workflows or read the [User Guide](docs/user-guide/README.md).
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
## 💡 Key Capabilities
|
|
112
|
+
|
|
113
|
+
### 🖥️ Built-in Web UI
|
|
114
|
+
Add a web interface by adding just 2 lines to your YAML:
|
|
115
|
+
```yaml
|
|
116
|
+
controller:
|
|
117
|
+
webui:
|
|
118
|
+
port: 8081
|
|
119
|
+
```
|
|
120
|
+
Instantly get a user-friendly interface to test and monitor your workflows. Supports both Gradio (default) and custom static frontends.
|
|
121
|
+
|
|
122
|
+
### 🛰️ MCP Server Ready
|
|
123
|
+
Transform your workflows into MCP tools by changing one line:
|
|
124
|
+
```yaml
|
|
125
|
+
controller:
|
|
126
|
+
type: mcp-server
|
|
127
|
+
```
|
|
128
|
+
Just set the type to `mcp-server`. Your workflows become instantly accessible via the Model Context Protocol.
|
|
129
|
+
|
|
130
|
+
### 🐳 Docker Deployment
|
|
131
|
+
Deploy anywhere with built-in Docker support:
|
|
132
|
+
```yaml
|
|
133
|
+
controller:
|
|
134
|
+
runtime: docker
|
|
135
|
+
```
|
|
136
|
+
Run your workflows in isolated containers with full control over images, volumes, ports, and environment variables.
|
|
137
|
+
|
|
138
|
+
> 📖 See the [User Guide](docs/user-guide/README.md) for detailed configuration and [Examples](examples/README.md) for ready-to-run samples.
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
## 🏗 Architecture
|
|
142
|
+
|
|
143
|
+

|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## 🤝 Contributing
|
|
148
|
+
We welcome all contributions!
|
|
149
|
+
Whether it's fixing bugs, improving docs, or adding examples — every bit helps.
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
# Setup for development
|
|
153
|
+
git clone https://github.com/hanyeol/model-compose.git
|
|
154
|
+
cd model-compose
|
|
155
|
+
pip install -e .[dev]
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## 📄 License
|
|
161
|
+
MIT License © 2025 Hanyeol Cho.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 📬 Contact
|
|
166
|
+
Have questions, ideas, or feedback? [Open an issue](https://github.com/hanyeol/model-compose/issues) or start a discussion on [GitHub Discussions](https://github.com/hanyeol/model-compose/discussions).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "model-compose"
|
|
3
|
-
version = "0.4.
|
|
4
|
-
description = "model-compose: Declarative AI
|
|
3
|
+
version = "0.4.12"
|
|
4
|
+
description = "model-compose: Declarative AI Workflow Orchestrator"
|
|
5
5
|
authors = [
|
|
6
6
|
{ name = "Hanyeol Cho", email = "hanyeol.cho@gmail.com" }
|
|
7
7
|
]
|
|
@@ -17,7 +17,6 @@ dependencies = [
|
|
|
17
17
|
"fastapi",
|
|
18
18
|
"uvicorn",
|
|
19
19
|
"mcp>=1.10.1",
|
|
20
|
-
"pyngrok",
|
|
21
20
|
"ulid",
|
|
22
21
|
"gradio",
|
|
23
22
|
"Pillow",
|
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
from typing import Optional, List
|
|
2
|
+
import importlib.metadata
|
|
3
3
|
from pathlib import Path
|
|
4
|
+
import click
|
|
4
5
|
import asyncio
|
|
6
|
+
import json
|
|
5
7
|
|
|
6
|
-
|
|
7
|
-
from mindor.
|
|
8
|
-
from mindor.core.
|
|
8
|
+
def _load_compose_config(config_files: List[Path], env_files: List[Path], env_data: List[str]):
|
|
9
|
+
from mindor.dsl.loader import load_compose_config
|
|
10
|
+
from mindor.core.runtime.env import load_env_files, merge_env_data
|
|
11
|
+
|
|
12
|
+
env = load_env_files(".", env_files or [])
|
|
13
|
+
env = merge_env_data(env, env_data)
|
|
14
|
+
|
|
15
|
+
return load_compose_config(".", config_files, env)
|
|
9
16
|
|
|
10
17
|
@click.group()
|
|
11
18
|
@click.option(
|
|
@@ -13,6 +20,10 @@ from mindor.core.compose import *
|
|
|
13
20
|
type=click.Path(exists=True, dir_okay=False, path_type=Path),
|
|
14
21
|
help="Compose configuration files."
|
|
15
22
|
)
|
|
23
|
+
@click.version_option(
|
|
24
|
+
version=importlib.metadata.version("model-compose"),
|
|
25
|
+
message="%(prog)s %(version)s"
|
|
26
|
+
)
|
|
16
27
|
@click.pass_context
|
|
17
28
|
def compose_command(ctx: click.Context, config_files: List[Path]) -> None:
|
|
18
29
|
"""model-compose"""
|
|
@@ -34,21 +45,25 @@ def compose_command(ctx: click.Context, config_files: List[Path]) -> None:
|
|
|
34
45
|
@click.option("--verbose", "-v", is_flag=True, help="Enable verbose output.")
|
|
35
46
|
@click.pass_context
|
|
36
47
|
def up_command(
|
|
37
|
-
ctx: click.Context,
|
|
48
|
+
ctx: click.Context,
|
|
38
49
|
detach: bool,
|
|
39
50
|
env_files: List[Path],
|
|
40
51
|
env_data: List[str],
|
|
41
52
|
verbose: bool
|
|
42
53
|
) -> None:
|
|
54
|
+
from mindor.core.compose import launch_services
|
|
43
55
|
config_files = ctx.obj.get("config_files", [])
|
|
44
56
|
async def _async_command():
|
|
45
57
|
try:
|
|
46
|
-
|
|
47
|
-
env = merge_env_data(env, env_data)
|
|
48
|
-
config = load_compose_config(".", config_files, env)
|
|
58
|
+
config = _load_compose_config(config_files, env_files, env_data)
|
|
49
59
|
await launch_services(config, detach, verbose)
|
|
50
60
|
except Exception as e:
|
|
51
|
-
|
|
61
|
+
if verbose:
|
|
62
|
+
import traceback
|
|
63
|
+
click.echo(f"❌ Error: {e}\n\nTraceback:", err=True)
|
|
64
|
+
traceback.print_exc()
|
|
65
|
+
else:
|
|
66
|
+
click.echo(f"❌ {e}", err=True)
|
|
52
67
|
asyncio.run(_async_command())
|
|
53
68
|
|
|
54
69
|
@click.command(name="down")
|
|
@@ -70,15 +85,19 @@ def down_command(
|
|
|
70
85
|
env_data: List[str],
|
|
71
86
|
verbose: bool
|
|
72
87
|
) -> None:
|
|
88
|
+
from mindor.core.compose import terminate_services
|
|
73
89
|
config_files = ctx.obj.get("config_files", [])
|
|
74
90
|
async def _async_command():
|
|
75
91
|
try:
|
|
76
|
-
|
|
77
|
-
env = merge_env_data(env, env_data)
|
|
78
|
-
config = load_compose_config(".", config_files, env)
|
|
92
|
+
config = _load_compose_config(config_files, env_files, env_data)
|
|
79
93
|
await terminate_services(config, verbose)
|
|
80
94
|
except Exception as e:
|
|
81
|
-
|
|
95
|
+
if verbose:
|
|
96
|
+
import traceback
|
|
97
|
+
click.echo(f"❌ Error: {e}\n\nTraceback:", err=True)
|
|
98
|
+
traceback.print_exc()
|
|
99
|
+
else:
|
|
100
|
+
click.echo(f"❌ {e}", err=True)
|
|
82
101
|
asyncio.run(_async_command())
|
|
83
102
|
|
|
84
103
|
@click.command(name="start")
|
|
@@ -100,15 +119,19 @@ def start_command(
|
|
|
100
119
|
env_data: List[str],
|
|
101
120
|
verbose: bool
|
|
102
121
|
) -> None:
|
|
122
|
+
from mindor.core.compose import start_services
|
|
103
123
|
config_files = ctx.obj.get("config_files", [])
|
|
104
124
|
async def _async_command():
|
|
105
125
|
try:
|
|
106
|
-
|
|
107
|
-
env = merge_env_data(env, env_data)
|
|
108
|
-
config = load_compose_config(".", config_files, env)
|
|
126
|
+
config = _load_compose_config(config_files, env_files, env_data)
|
|
109
127
|
await start_services(config, verbose)
|
|
110
128
|
except Exception as e:
|
|
111
|
-
|
|
129
|
+
if verbose:
|
|
130
|
+
import traceback
|
|
131
|
+
click.echo(f"❌ Error: {e}\n\nTraceback:", err=True)
|
|
132
|
+
traceback.print_exc()
|
|
133
|
+
else:
|
|
134
|
+
click.echo(f"❌ {e}", err=True)
|
|
112
135
|
asyncio.run(_async_command())
|
|
113
136
|
|
|
114
137
|
@click.command(name="stop")
|
|
@@ -130,15 +153,19 @@ def stop_command(
|
|
|
130
153
|
env_data: List[str],
|
|
131
154
|
verbose: bool
|
|
132
155
|
) -> None:
|
|
156
|
+
from mindor.core.compose import stop_services
|
|
133
157
|
config_files = ctx.obj.get("config_files", [])
|
|
134
158
|
async def _async_command():
|
|
135
159
|
try:
|
|
136
|
-
|
|
137
|
-
env = merge_env_data(env, env_data)
|
|
138
|
-
config = load_compose_config(".", config_files, env)
|
|
160
|
+
config = _load_compose_config(config_files, env_files, env_data)
|
|
139
161
|
await stop_services(config, verbose)
|
|
140
162
|
except Exception as e:
|
|
141
|
-
|
|
163
|
+
if verbose:
|
|
164
|
+
import traceback
|
|
165
|
+
click.echo(f"❌ Error: {e}\n\nTraceback:", err=True)
|
|
166
|
+
traceback.print_exc()
|
|
167
|
+
else:
|
|
168
|
+
click.echo(f"❌ {e}", err=True)
|
|
142
169
|
asyncio.run(_async_command())
|
|
143
170
|
|
|
144
171
|
@click.command(name="run")
|
|
@@ -176,12 +203,11 @@ def run_command(
|
|
|
176
203
|
output_path: Optional[Path],
|
|
177
204
|
verbose: bool
|
|
178
205
|
) -> None:
|
|
206
|
+
from mindor.core.compose import run_workflow
|
|
179
207
|
config_files = ctx.obj.get("config_files", [])
|
|
180
208
|
async def _async_command():
|
|
181
209
|
try:
|
|
182
|
-
|
|
183
|
-
env = merge_env_data(env, env_data)
|
|
184
|
-
config = load_compose_config(".", config_files, env)
|
|
210
|
+
config = _load_compose_config(config_files, env_files, env_data)
|
|
185
211
|
input = json.loads(input_json) if input_json else {}
|
|
186
212
|
state = await run_workflow(config, workflow_id or "__default__", input, output_path, verbose)
|
|
187
213
|
if isinstance(state.output, (dict, list)) or state.error:
|
|
@@ -196,7 +222,12 @@ def run_command(
|
|
|
196
222
|
except json.JSONDecodeError:
|
|
197
223
|
click.echo("❌ Invalid JSON provided for --input", err=True)
|
|
198
224
|
except Exception as e:
|
|
199
|
-
|
|
225
|
+
if verbose:
|
|
226
|
+
import traceback
|
|
227
|
+
click.echo(f"❌ Error: {e}\n\nTraceback:", err=True)
|
|
228
|
+
traceback.print_exc()
|
|
229
|
+
else:
|
|
230
|
+
click.echo(f"❌ {e}", err=True)
|
|
200
231
|
asyncio.run(_async_command())
|
|
201
232
|
|
|
202
233
|
compose_command.add_command(up_command)
|
|
@@ -5,9 +5,8 @@ from mindor.dsl.schema.action import ActionConfig
|
|
|
5
5
|
from mindor.dsl.schema.listener import ListenerConfig
|
|
6
6
|
from mindor.dsl.schema.gateway import GatewayConfig
|
|
7
7
|
from mindor.dsl.schema.workflow import WorkflowConfig
|
|
8
|
-
from mindor.core.
|
|
9
|
-
from mindor.core.utils.
|
|
10
|
-
from mindor.core.utils.package import install_package, parse_requirement, is_requirement_satisfied
|
|
8
|
+
from mindor.core.foundation import AsyncService
|
|
9
|
+
from mindor.core.utils.work_queue import WorkQueue
|
|
11
10
|
from mindor.core.logger import logging
|
|
12
11
|
from .context import ComponentActionContext
|
|
13
12
|
|
|
@@ -50,20 +49,10 @@ class ComponentService(AsyncService):
|
|
|
50
49
|
self.id: str = id
|
|
51
50
|
self.config: ComponentConfig = config
|
|
52
51
|
self.global_configs: ComponentGlobalConfigs = global_configs
|
|
53
|
-
self.
|
|
52
|
+
self.work_queue: Optional[WorkQueue] = None
|
|
54
53
|
|
|
55
54
|
if self.config.max_concurrent_count > 0:
|
|
56
|
-
self.
|
|
57
|
-
|
|
58
|
-
async def setup(self) -> None:
|
|
59
|
-
dependencies = self._get_setup_requirements()
|
|
60
|
-
if dependencies:
|
|
61
|
-
await self._install_packages(dependencies)
|
|
62
|
-
|
|
63
|
-
await self._setup()
|
|
64
|
-
|
|
65
|
-
async def teardown(self) -> None:
|
|
66
|
-
await self._teardown()
|
|
55
|
+
self.work_queue = WorkQueue(self.config.max_concurrent_count, self._run)
|
|
67
56
|
|
|
68
57
|
async def start(self, background: bool = False) -> None:
|
|
69
58
|
await super().start(background)
|
|
@@ -73,29 +62,20 @@ class ComponentService(AsyncService):
|
|
|
73
62
|
_, action = ActionResolver(self.config.actions).resolve(action_id)
|
|
74
63
|
context = ComponentActionContext(run_id, input)
|
|
75
64
|
|
|
76
|
-
if self.
|
|
77
|
-
return await (await self.
|
|
65
|
+
if self.work_queue:
|
|
66
|
+
return await (await self.work_queue.schedule(action, context))
|
|
78
67
|
|
|
79
68
|
return await self._run(action, context)
|
|
80
69
|
|
|
81
|
-
async def _setup(self) -> None:
|
|
82
|
-
pass
|
|
83
|
-
|
|
84
|
-
async def _teardown(self) -> None:
|
|
85
|
-
pass
|
|
86
|
-
|
|
87
|
-
def _get_setup_requirements(self) -> Optional[List[str]]:
|
|
88
|
-
return None
|
|
89
|
-
|
|
90
70
|
async def _start(self) -> None:
|
|
91
|
-
if self.
|
|
92
|
-
await self.
|
|
71
|
+
if self.work_queue:
|
|
72
|
+
await self.work_queue.start()
|
|
93
73
|
|
|
94
74
|
await super()._start()
|
|
95
75
|
|
|
96
76
|
async def _stop(self) -> None:
|
|
97
|
-
if self.
|
|
98
|
-
await self.
|
|
77
|
+
if self.work_queue:
|
|
78
|
+
await self.work_queue.stop()
|
|
99
79
|
|
|
100
80
|
await super()._stop()
|
|
101
81
|
|
|
@@ -111,14 +91,10 @@ class ComponentService(AsyncService):
|
|
|
111
91
|
@abstractmethod
|
|
112
92
|
async def _run(self, action: ActionConfig, context: ComponentActionContext) -> Any:
|
|
113
93
|
pass
|
|
114
|
-
|
|
115
|
-
async def
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
requirement = parse_requirement(package_spec)
|
|
119
|
-
if not requirement or not is_requirement_satisfied(requirement):
|
|
120
|
-
logging.info(f"Installing missing module: {package_spec}")
|
|
121
|
-
await install_package(repository or package_spec)
|
|
94
|
+
|
|
95
|
+
async def _install_package(self, package_spec: str, repository: Optional[str]) -> None:
|
|
96
|
+
logging.info(f"Installing required module: {package_spec}")
|
|
97
|
+
await super()._install_package(package_spec, repository)
|
|
122
98
|
|
|
123
99
|
def register_component(type: ComponentType):
|
|
124
100
|
def decorator(cls: Type[ComponentService]) -> Type[ComponentService]:
|
|
@@ -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:
|
|
@@ -42,6 +43,6 @@ class ComponentActionContext:
|
|
|
42
43
|
gateway = find_gateway_by_port(int(port)) if port else None
|
|
43
44
|
|
|
44
45
|
if gateway:
|
|
45
|
-
return gateway.get_context()
|
|
46
|
+
return gateway.get_context(int(port))
|
|
46
47
|
|
|
47
48
|
return None
|
|
@@ -3,7 +3,9 @@ from .http_client import *
|
|
|
3
3
|
from .mcp_server import *
|
|
4
4
|
from .mcp_client import *
|
|
5
5
|
from .model import *
|
|
6
|
+
from .datasets import *
|
|
6
7
|
from .vector_store import *
|
|
7
8
|
from .workflow import *
|
|
8
9
|
from .shell import *
|
|
9
10
|
from .text_splitter import *
|
|
11
|
+
from .image_processor import *
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .datasets import *
|