model-compose 0.4.9__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.9 → model_compose-0.4.12}/pyproject.toml +2 -2
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/cli/compose.py +57 -26
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/context.py +1 -1
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/base.py +18 -3
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/services/http_server.py +20 -4
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/gateway/base.py +5 -1
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/gateway/gateway.py +1 -1
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/gateway/services/http_tunnel/http_tunnel.py +10 -6
- model_compose-0.4.12/src/mindor/core/gateway/services/ssh_tunnel.py +82 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/listener/base.py +1 -1
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/listener/services/__init__.py +1 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/listener/services/http_callback.py +10 -12
- model_compose-0.4.12/src/mindor/core/listener/services/http_trigger.py +136 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/utils/http_client.py +6 -4
- model_compose-0.4.12/src/mindor/core/utils/ssh_client.py +206 -0
- model_compose-0.4.12/src/mindor/core/utils/url.py +33 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/datasets/providers/common.py +2 -2
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/common.py +1 -1
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/common.py +1 -1
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/impl/common.py +1 -1
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/impl/http_server.py +1 -1
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/impl/mcp_server.py +1 -1
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/webui/impl/common.py +1 -1
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/impl/common.py +0 -1
- {model_compose-0.4.9 → 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.9 → model_compose-0.4.12}/src/mindor/dsl/schema/listener/impl/__init__.py +1 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/listener/impl/http_callback.py +1 -1
- model_compose-0.4.12/src/mindor/dsl/schema/listener/impl/http_trigger.py +27 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/listener/impl/types.py +1 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/listener/listener.py +2 -1
- model_compose-0.4.12/src/model_compose.egg-info/PKG-INFO +190 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/model_compose.egg-info/SOURCES.txt +3 -0
- model_compose-0.4.9/PKG-INFO +0 -428
- model_compose-0.4.9/README.md +0 -404
- model_compose-0.4.9/src/mindor/core/gateway/services/ssh_tunnel.py +0 -23
- model_compose-0.4.9/src/mindor/core/utils/ssh_client.py +0 -4
- model_compose-0.4.9/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -9
- model_compose-0.4.9/src/model_compose.egg-info/PKG-INFO +0 -428
- {model_compose-0.4.9 → model_compose-0.4.12}/LICENSE +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/setup.cfg +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/cli/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/base.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/component.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/datasets/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/datasets/datasets.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/datasets/providers/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/datasets/providers/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/datasets/providers/huggingface.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/datasets/providers/local.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/datasets/utils.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/http_client.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/http_server.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/image_processor.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/mcp_client.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/mcp_server.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/base/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/base/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/base/huggingface.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/base/huggingface_hub.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/base/unsloth.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/model.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/chat_completion/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/chat_completion/huggingface.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/face_embedding/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/face_embedding/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/face_embedding/custom.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/face_embedding/insightface.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_generation/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_generation/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_generation/custom.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_generation/flux.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_generation/hunyuan_image.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_generation/sdxl.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_to_text/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_to_text/huggingface.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_upscale/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_upscale/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_upscale/custom.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_upscale/esrgan.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_upscale/ldsr.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_upscale/real_esrgan.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/image_upscale/swinir.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/text_classification/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/text_classification/huggingface.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/text_embedding/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/text_embedding/huggingface.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/text_generation/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/model/tasks/text_generation/huggingface.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/shell.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/text_splitter.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/vector_store/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/vector_store/base.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/vector_store/drivers/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/vector_store/drivers/chroma.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/vector_store/drivers/milvus.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/vector_store/vector_store.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/component/services/workflow.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/compose/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/compose/compose.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/compose/manager.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/controller.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/runner/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/runner/client.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/runner/http_client.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/runner/mcp_client.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/runner/runner.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/runtime/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/runtime/docker/context/Dockerfile +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/runtime/docker/docker.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/runtime/native/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/runtime/native/native.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/runtime/specs.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/services/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/services/mcp_server.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/webui/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/webui/gradio.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/webui/webui.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/foundation/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/foundation/async_service.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/gateway/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/gateway/services/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/gateway/services/http_tunnel/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/gateway/services/http_tunnel/base.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/gateway/services/http_tunnel/drivers/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/gateway/services/http_tunnel/drivers/cloudflare.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/gateway/services/http_tunnel/drivers/ngrok.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/listener/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/listener/listener.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/logger/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/logger/base.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/logger/logger.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/logger/logging.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/logger/services/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/logger/services/console.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/logger/services/file.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/runtime/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/runtime/docker/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/runtime/docker/docker.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/runtime/env.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/utils/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/utils/caching.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/utils/http_request.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/utils/http_response.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/utils/http_status.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/utils/image.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/utils/mcp_client.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/utils/package.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/utils/renderers.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/utils/resolvers.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/utils/shell.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/utils/streamer.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/utils/streaming.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/utils/time.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/utils/websocket_client.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/utils/work_queue.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/workflow/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/workflow/context.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/workflow/job/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/workflow/job/base.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/workflow/job/impl/action.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/workflow/job/impl/delay.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/workflow/job/impl/filter.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/workflow/job/impl/if_.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/workflow/job/impl/random_router.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/workflow/job/impl/switch.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/workflow/job/job.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/workflow/schema.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/workflow/workflow.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/loader.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/action.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/datasets/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/datasets/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/datasets/datasets.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/datasets/providers/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/datasets/providers/huggingface.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/datasets/providers/local.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/http_client.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/http_server.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/image_processor.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/face_embedding.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/dlib.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/facenet.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/insightface.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/image_generation.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/flux.py +0 -0
- {model_compose-0.4.9 → 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.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/sdxl.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/image_upscale.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
- {model_compose-0.4.9 → 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.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/swinir.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model/model.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model_trainer/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model_trainer/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model_trainer/impl/classification.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model_trainer/impl/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model_trainer/impl/sft.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/model_trainer/model_trainer.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/text_splitter.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/vector_store/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/vector_store/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/vector_store/impl/chroma.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/vector_store/impl/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/vector_store/impl/faiss.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/vector_store/impl/milvus.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/vector_store/impl/qdrant.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/vector_store/vector_store.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/component.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/datasets/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/datasets/datasets.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/http_client.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/image_processor.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/mcp_client.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/chat_completion.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/face_embedding.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/dlib.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/facenet.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/insightface.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/image_generation.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/flux.py +0 -0
- {model_compose-0.4.9 → 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.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/sdxl.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_to_text.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/image_upscale.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
- {model_compose-0.4.9 → 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.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/swinir.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model/model.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model_trainer/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model_trainer/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model_trainer/impl/classification.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model_trainer/impl/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model_trainer/impl/sft.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/model_trainer/model_trainer.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/text_splitter.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/types.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/vector_store/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/vector_store/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/vector_store/impl/chroma.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/vector_store/impl/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/vector_store/impl/faiss.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/vector_store/impl/milvus.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/vector_store/vector_store.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/compose.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/controller.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/impl/types.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/webui/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/webui/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/webui/impl/gradio.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/webui/impl/static.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/controller/webui/webui.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/impl/http_tunnel/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/impl/http_tunnel/http_tunnel.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/cloudflare.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/ngrok.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/job/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/job/impl/action.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/job/impl/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/job/impl/filter.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/job/impl/random_router.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/job/impl/types.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/job/job.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/listener/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/listener/impl/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/logger/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/logger/impl/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/logger/impl/file.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/logger/logger.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/runtime/impl/common.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/transport/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/transport/http.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/transport/ssh.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/schema/workflow.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/utils/__init__.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/utils/annotation.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/utils/enum.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/dsl/utils/path.py +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/model_compose.egg-info/dependency_links.txt +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/model_compose.egg-info/entry_points.txt +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/model_compose.egg-info/requires.txt +0 -0
- {model_compose-0.4.9 → model_compose-0.4.12}/src/model_compose.egg-info/top_level.txt +0 -0
- {model_compose-0.4.9 → 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
|
]
|
|
@@ -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)
|
|
@@ -16,14 +16,14 @@ from mindor.core.workflow import Workflow, WorkflowResolver, create_workflow
|
|
|
16
16
|
from mindor.core.logger import LoggerService, create_logger
|
|
17
17
|
from mindor.core.controller.webui import ControllerWebUI
|
|
18
18
|
from mindor.core.workflow.schema import WorkflowSchema, create_workflow_schemas
|
|
19
|
-
from mindor.core.utils.
|
|
19
|
+
from mindor.core.utils.work_queue import WorkQueue
|
|
20
20
|
from mindor.core.utils.caching import ExpiringDict
|
|
21
21
|
from .runtime.specs import ControllerRuntimeSpecs
|
|
22
22
|
from .runtime.native import NativeRuntimeLauncher
|
|
23
23
|
from .runtime.docker import DockerRuntimeLauncher
|
|
24
24
|
from threading import Lock
|
|
25
25
|
from pathlib import Path
|
|
26
|
-
import asyncio, ulid, os
|
|
26
|
+
import asyncio, ulid, os, threading
|
|
27
27
|
|
|
28
28
|
class TaskStatus(str, Enum):
|
|
29
29
|
PENDING = "pending"
|
|
@@ -39,6 +39,19 @@ class TaskState:
|
|
|
39
39
|
error: Optional[Any] = None
|
|
40
40
|
|
|
41
41
|
class ControllerService(AsyncService):
|
|
42
|
+
_shared_instance: Optional["ControllerService"] = None
|
|
43
|
+
_shared_instance_lock = threading.Lock()
|
|
44
|
+
|
|
45
|
+
def __new__(cls, *args, **kwargs):
|
|
46
|
+
with cls._shared_instance_lock:
|
|
47
|
+
if cls._shared_instance is None:
|
|
48
|
+
cls._shared_instance = super().__new__(cls)
|
|
49
|
+
return cls._shared_instance
|
|
50
|
+
|
|
51
|
+
@classmethod
|
|
52
|
+
def get_shared_instance(cls) -> Optional["ControllerService"]:
|
|
53
|
+
return cls._shared_instance
|
|
54
|
+
|
|
42
55
|
def __init__(
|
|
43
56
|
self,
|
|
44
57
|
config: ControllerConfig,
|
|
@@ -279,7 +292,9 @@ class ControllerService(AsyncService):
|
|
|
279
292
|
output = await workflow.run(task_id, input)
|
|
280
293
|
state = TaskState(task_id=task_id, status=TaskStatus.COMPLETED, output=output)
|
|
281
294
|
except Exception as e:
|
|
282
|
-
|
|
295
|
+
import traceback
|
|
296
|
+
error_message = f"{str(e)}\n\nTraceback:\n{''.join(traceback.format_exception(type(e), e, e.__traceback__))}"
|
|
297
|
+
state = TaskState(task_id=task_id, status=TaskStatus.FAILED, error=error_message)
|
|
283
298
|
|
|
284
299
|
with self.task_states_lock:
|
|
285
300
|
self.task_states.set(task_id, state, 1 * 3600)
|
{model_compose-0.4.9 → model_compose-0.4.12}/src/mindor/core/controller/services/http_server.py
RENAMED
|
@@ -42,6 +42,10 @@ class TaskResult(BaseModel):
|
|
|
42
42
|
error=instance.error
|
|
43
43
|
)
|
|
44
44
|
|
|
45
|
+
@classmethod
|
|
46
|
+
def to_dict(cls, instance: TaskState) -> Dict[str, Any]:
|
|
47
|
+
return cls.from_instance(instance).model_dump(exclude_none=True)
|
|
48
|
+
|
|
45
49
|
class WorkflowVariableResult(BaseModel):
|
|
46
50
|
name: Optional[str]
|
|
47
51
|
type: str
|
|
@@ -83,6 +87,10 @@ class WorkflowSimpleResult(BaseModel):
|
|
|
83
87
|
default=instance.default or None
|
|
84
88
|
)
|
|
85
89
|
|
|
90
|
+
@classmethod
|
|
91
|
+
def to_dict(cls, instance: WorkflowSchema) -> Dict[str, Any]:
|
|
92
|
+
return cls.from_instance(instance).model_dump(exclude_none=True)
|
|
93
|
+
|
|
86
94
|
class WorkflowSchemaResult(BaseModel):
|
|
87
95
|
workflow_id: str
|
|
88
96
|
title: Optional[str] = None
|
|
@@ -102,6 +110,10 @@ class WorkflowSchemaResult(BaseModel):
|
|
|
102
110
|
default=instance.default or None
|
|
103
111
|
)
|
|
104
112
|
|
|
113
|
+
@classmethod
|
|
114
|
+
def to_dict(cls, instance: WorkflowSchema) -> Dict[str, Any]:
|
|
115
|
+
return cls.from_instance(instance).model_dump(exclude_none=True)
|
|
116
|
+
|
|
105
117
|
@classmethod
|
|
106
118
|
def _to_variable_result(cls, variable: Union[WorkflowVariableConfig, WorkflowVariableGroupConfig]) -> Union[WorkflowVariableResult, WorkflowVariableGroupResult]:
|
|
107
119
|
if isinstance(variable, WorkflowVariableGroupConfig):
|
|
@@ -176,6 +188,10 @@ class HttpServerController(ControllerService):
|
|
|
176
188
|
|
|
177
189
|
return self._render_task_response(state, output_only)
|
|
178
190
|
|
|
191
|
+
@self.router.get("/health")
|
|
192
|
+
async def health_check():
|
|
193
|
+
return JSONResponse(content={ "status": "ok" })
|
|
194
|
+
|
|
179
195
|
async def _serve(self) -> None:
|
|
180
196
|
self.server = uvicorn.Server(uvicorn.Config(
|
|
181
197
|
self.app,
|
|
@@ -231,7 +247,7 @@ class HttpServerController(ControllerService):
|
|
|
231
247
|
return self._render_task_state(state)
|
|
232
248
|
|
|
233
249
|
def _render_task_state(self, state: TaskState) -> Response:
|
|
234
|
-
return JSONResponse(content=TaskResult.
|
|
250
|
+
return JSONResponse(content=TaskResult.to_dict(state))
|
|
235
251
|
|
|
236
252
|
def _render_task_output(self, state: TaskState) -> Response:
|
|
237
253
|
if state.status in [ TaskStatus.PENDING, TaskStatus.PROCESSING ]:
|
|
@@ -279,13 +295,13 @@ class HttpServerController(ControllerService):
|
|
|
279
295
|
|
|
280
296
|
def _render_workflow_list(self, workflows: Dict[str, WorkflowSchema]) -> Response:
|
|
281
297
|
return JSONResponse(content=[
|
|
282
|
-
WorkflowSimpleResult.
|
|
298
|
+
WorkflowSimpleResult.to_dict(workflow) for workflow in workflows.values()
|
|
283
299
|
])
|
|
284
300
|
|
|
285
301
|
def _render_workflow_schemas(self, workflows: Dict[str, WorkflowSchema]) -> Response:
|
|
286
302
|
return JSONResponse(content=[
|
|
287
|
-
WorkflowSchemaResult.
|
|
303
|
+
WorkflowSchemaResult.to_dict(workflow) for workflow in workflows.values()
|
|
288
304
|
])
|
|
289
305
|
|
|
290
306
|
def _render_workflow_schema(self, workflow: WorkflowSchema) -> Response:
|
|
291
|
-
return JSONResponse(content=WorkflowSchemaResult.
|
|
307
|
+
return JSONResponse(content=WorkflowSchemaResult.to_dict(workflow))
|
|
@@ -12,7 +12,11 @@ class GatewayService(AsyncService):
|
|
|
12
12
|
self.config: GatewayConfig = config
|
|
13
13
|
|
|
14
14
|
@abstractmethod
|
|
15
|
-
def get_context(self) -> Dict[str, Any]:
|
|
15
|
+
def get_context(self, port: int) -> Optional[Dict[str, Any]]:
|
|
16
|
+
pass
|
|
17
|
+
|
|
18
|
+
@abstractmethod
|
|
19
|
+
def serves_port(self, port: int) -> bool:
|
|
16
20
|
pass
|
|
17
21
|
|
|
18
22
|
async def _install_package(self, package_spec: str, repository: Optional[str]) -> None:
|
|
@@ -20,6 +20,6 @@ def create_gateway(id: str, config: GatewayConfig, daemon: bool) -> GatewayServi
|
|
|
20
20
|
|
|
21
21
|
def find_gateway_by_port(port: int) -> Optional[GatewayService]:
|
|
22
22
|
for gateway in GatewayInstances.values():
|
|
23
|
-
if gateway.
|
|
23
|
+
if gateway.serves_port(port):
|
|
24
24
|
return gateway
|
|
25
25
|
return None
|