model-compose 0.3.1__tar.gz → 0.3.2__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.3.1/src/model_compose.egg-info → model_compose-0.3.2}/PKG-INFO +1 -1
- {model_compose-0.3.1 → model_compose-0.3.2}/pyproject.toml +1 -1
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/runtime/docker/context/Dockerfile +1 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/runtime/docker/docker.py +27 -8
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/runtime/specs.py +6 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/webui/webui.py +13 -2
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/utils/mcp_client.py +6 -6
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/workflow/job/impl/__init__.py +1 -0
- model_compose-0.3.2/src/mindor/core/workflow/job/impl/random_router.py +37 -0
- model_compose-0.3.2/src/mindor/dsl/schema/component/impl/common.py +13 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/http_client.py +3 -3
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/http_server.py +3 -3
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/mcp_client.py +2 -2
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/mcp_server.py +1 -1
- model_compose-0.3.2/src/mindor/dsl/schema/controller/impl/common.py +28 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/controller/impl/http_server.py +4 -4
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/controller/impl/mcp_server.py +3 -3
- model_compose-0.3.2/src/mindor/dsl/schema/controller/webui/__init__.py +1 -0
- model_compose-0.3.2/src/mindor/dsl/schema/controller/webui/impl/__init__.py +4 -0
- model_compose-0.3.2/src/mindor/dsl/schema/controller/webui/impl/common.py +13 -0
- model_compose-0.3.2/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +9 -0
- model_compose-0.3.2/src/mindor/dsl/schema/controller/webui/impl/gradio.py +6 -0
- model_compose-0.3.2/src/mindor/dsl/schema/controller/webui/impl/static.py +7 -0
- model_compose-0.3.2/src/mindor/dsl/schema/controller/webui/webui.py +13 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/gateway/impl/common.py +2 -2
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/gateway/impl/http_tunnel.py +1 -1
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/job/impl/__init__.py +1 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/job/impl/delay.py +1 -1
- model_compose-0.3.2/src/mindor/dsl/schema/job/impl/random_router.py +21 -0
- model_compose-0.3.2/src/mindor/dsl/schema/job/impl/types.py +8 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/job/job.py +2 -1
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/listener/impl/common.py +2 -2
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/listener/impl/http_callback.py +7 -7
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/workflow.py +10 -3
- {model_compose-0.3.1 → model_compose-0.3.2/src/model_compose.egg-info}/PKG-INFO +1 -1
- {model_compose-0.3.1 → model_compose-0.3.2}/src/model_compose.egg-info/SOURCES.txt +9 -1
- model_compose-0.3.1/src/mindor/dsl/schema/component/impl/common.py +0 -13
- model_compose-0.3.1/src/mindor/dsl/schema/controller/impl/common.py +0 -21
- model_compose-0.3.1/src/mindor/dsl/schema/controller/impl/webui.py +0 -11
- model_compose-0.3.1/src/mindor/dsl/schema/job/impl/types.py +0 -7
- {model_compose-0.3.1 → model_compose-0.3.2}/LICENSE +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/README.md +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/setup.cfg +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/cli/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/cli/compose.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/base.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/component.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/context.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/services/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/services/http_client.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/services/http_server.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/services/mcp_client.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/services/mcp_server.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/services/model/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/services/model/base.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/services/model/model.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/services/model/tasks/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/services/model/tasks/summarization.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/services/model/tasks/text_classification.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/services/model/tasks/text_embedding.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/services/model/tasks/text_generation.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/services/model/tasks/translation.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/services/shell.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/component/services/workflow.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/compose/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/compose/compose.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/compose/manager.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/base.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/controller.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/runner/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/runner/client.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/runner/http_client.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/runner/mcp_client.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/runner/runner.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/runtime/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/services/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/services/http_server.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/services/mcp_server.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/webui/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/webui/gradio.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/gateway/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/gateway/base.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/gateway/gateway.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/gateway/services/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/gateway/services/http_tunnel.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/gateway/services/ssh_tunnel.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/listener/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/listener/base.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/listener/listener.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/listener/services/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/listener/services/http_callback.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/logger/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/logger/base.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/logger/logger.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/logger/logging.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/logger/services/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/logger/services/console.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/logger/services/file.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/runtime/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/runtime/docker/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/runtime/docker/docker.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/runtime/env.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/services/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/services/async_service.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/utils/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/utils/expiring.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/utils/http_client.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/utils/http_request.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/utils/http_status.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/utils/image.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/utils/renderer.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/utils/ssh_client.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/utils/streaming.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/utils/time.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/utils/workqueue.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/workflow/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/workflow/context.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/workflow/job/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/workflow/job/base.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/workflow/job/impl/action.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/workflow/job/impl/delay.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/workflow/job/impl/if_.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/workflow/job/impl/switch.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/workflow/job/job.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/workflow/schema.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/workflow/workflow.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/loader.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/action/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/action/action.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/action/impl/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/action/impl/common.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/action/impl/http_client.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/action/impl/http_server.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/action/impl/model/impl/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/action/impl/model/impl/common.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/action/impl/model/impl/summarization.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/action/impl/model/impl/translation.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/action/impl/model/model.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/component.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/model/impl/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/model/impl/common.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/model/impl/summarization.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/model/impl/translation.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/model/impl/types.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/model/model.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/types.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/compose.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/controller/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/controller/controller.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/controller/impl/types.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/job/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/job/impl/action.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/job/impl/common.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/listener/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/listener/impl/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/listener/impl/types.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/listener/listener.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/logger/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/logger/impl/common.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/logger/impl/file.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/logger/logger.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/runtime/impl/common.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/utils/__init__.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/utils/annotation.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/utils/enum.py +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/model_compose.egg-info/dependency_links.txt +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/model_compose.egg-info/entry_points.txt +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/model_compose.egg-info/requires.txt +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/src/model_compose.egg-info/top_level.txt +0 -0
- {model_compose-0.3.1 → model_compose-0.3.2}/tests/test_cli.py +0 -0
{model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/core/controller/runtime/docker/docker.py
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
|
-
from mindor.dsl.schema.controller import ControllerConfig
|
|
2
|
+
from mindor.dsl.schema.controller import ControllerConfig, ControllerWebUIDriver
|
|
3
3
|
from mindor.dsl.schema.runtime import DockerRuntimeConfig, DockerBuildConfig, DockerPortConfig, DockerVolumeConfig, DockerHealthCheck
|
|
4
4
|
from mindor.core.runtime.docker import DockerRuntimeManager
|
|
5
5
|
from mindor.core.logger import logging
|
|
6
6
|
from ..specs import ControllerRuntimeSpecs
|
|
7
7
|
from pathlib import Path
|
|
8
|
-
import mindor, shutil, yaml
|
|
8
|
+
import mindor, shutil, yaml, os
|
|
9
9
|
|
|
10
10
|
class DockerRuntimeLauncher:
|
|
11
11
|
def __init__(self, config: ControllerConfig, verbose: bool):
|
|
@@ -76,7 +76,7 @@ class DockerRuntimeLauncher:
|
|
|
76
76
|
# Copy context files
|
|
77
77
|
context_files_root = Path(__file__).resolve().parent / "context"
|
|
78
78
|
shutil.copytree(
|
|
79
|
-
src=
|
|
79
|
+
src=context_files_root,
|
|
80
80
|
dst=context_dir
|
|
81
81
|
)
|
|
82
82
|
|
|
@@ -84,15 +84,11 @@ class DockerRuntimeLauncher:
|
|
|
84
84
|
source_files_root = Path(mindor.__file__).resolve().parent
|
|
85
85
|
target_dir = context_dir / "src" / source_files_root.name
|
|
86
86
|
shutil.copytree(
|
|
87
|
-
src=
|
|
87
|
+
src=source_files_root,
|
|
88
88
|
dst=target_dir,
|
|
89
89
|
ignore=shutil.ignore_patterns("__pycache__", "*.pyc")
|
|
90
90
|
)
|
|
91
91
|
|
|
92
|
-
# Generate model-compose.yml
|
|
93
|
-
with open(context_dir / "model-compose.yml", "w") as f:
|
|
94
|
-
yaml.dump(specs.generate_native_runtime_specs(), f, sort_keys=False)
|
|
95
|
-
|
|
96
92
|
# Copy or generate requirements.txt
|
|
97
93
|
file_path = Path.cwd() / "requirements.txt"
|
|
98
94
|
target_path = Path(context_dir) / file_path.name
|
|
@@ -100,3 +96,26 @@ class DockerRuntimeLauncher:
|
|
|
100
96
|
shutil.copy(file_path, target_path)
|
|
101
97
|
else:
|
|
102
98
|
target_path.touch()
|
|
99
|
+
|
|
100
|
+
# Copy or generate webui directory
|
|
101
|
+
Path(context_dir / "webui").mkdir(parents=True, exist_ok=True)
|
|
102
|
+
|
|
103
|
+
if getattr(self.config.webui, "server_dir", None):
|
|
104
|
+
server_dir = Path.cwd() / self.config.webui.server_dir
|
|
105
|
+
target_dir = context_dir / "webui" / "server"
|
|
106
|
+
shutil.copytree(
|
|
107
|
+
src=server_dir,
|
|
108
|
+
dst=target_dir
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
if getattr(self.config.webui, "static_dir", None):
|
|
112
|
+
static_dir = Path.cwd() / self.config.webui.static_dir
|
|
113
|
+
target_dir = context_dir / "webui" / "static"
|
|
114
|
+
shutil.copytree(
|
|
115
|
+
src=static_dir,
|
|
116
|
+
dst=target_dir
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
# Generate model-compose.yml
|
|
120
|
+
with open(context_dir / "model-compose.yml", "w") as f:
|
|
121
|
+
yaml.dump(specs.generate_native_runtime_specs(), f, sort_keys=False)
|
|
@@ -28,6 +28,12 @@ class ControllerRuntimeSpecs:
|
|
|
28
28
|
specs["controller"] = self.controller.model_dump()
|
|
29
29
|
specs["controller"]["runtime"] = "native"
|
|
30
30
|
|
|
31
|
+
if getattr(self.controller.webui, "server_dir", None):
|
|
32
|
+
specs["controller"]["webui"]["server_dir"] = "webui/server"
|
|
33
|
+
|
|
34
|
+
if getattr(self.controller.webui, "static_dir", None):
|
|
35
|
+
specs["controller"]["webui"]["static_dir"] = "webui/static"
|
|
36
|
+
|
|
31
37
|
specs["components"] = {}
|
|
32
38
|
for id, component in self.components.items():
|
|
33
39
|
specs["components"][id] = component.model_dump()
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
|
-
from mindor.dsl.schema.controller import
|
|
2
|
+
from mindor.dsl.schema.controller import ControllerConfig
|
|
3
|
+
from mindor.dsl.schema.controller.webui import ControllerWebUIConfig, ControllerWebUIDriver
|
|
3
4
|
from mindor.dsl.schema.component import ComponentConfig
|
|
4
5
|
from mindor.dsl.schema.workflow import WorkflowConfig
|
|
5
6
|
from mindor.core.controller.runner import ControllerRunner
|
|
@@ -8,6 +9,8 @@ from mindor.core.services import AsyncService
|
|
|
8
9
|
from .gradio import GradioWebUIBuilder
|
|
9
10
|
from gradio import mount_gradio_app
|
|
10
11
|
from fastapi import FastAPI
|
|
12
|
+
from fastapi.staticfiles import StaticFiles
|
|
13
|
+
from pathlib import Path
|
|
11
14
|
import uvicorn, gradio
|
|
12
15
|
|
|
13
16
|
class ControllerWebUI(AsyncService):
|
|
@@ -32,13 +35,21 @@ class ControllerWebUI(AsyncService):
|
|
|
32
35
|
self._configure_driver()
|
|
33
36
|
|
|
34
37
|
def _configure_driver(self) -> None:
|
|
35
|
-
if self.config.driver ==
|
|
38
|
+
if self.config.driver == ControllerWebUIDriver.GRADIO:
|
|
36
39
|
blocks: gradio.Blocks = GradioWebUIBuilder().build(
|
|
37
40
|
schema=self.schema,
|
|
38
41
|
runner=self._run_workflow
|
|
39
42
|
)
|
|
40
43
|
self.app = mount_gradio_app(self.app, blocks, path="")
|
|
41
44
|
return
|
|
45
|
+
|
|
46
|
+
if self.config.driver == ControllerWebUIDriver.STATIC:
|
|
47
|
+
static_files = StaticFiles(
|
|
48
|
+
directory=Path(self.config.static_dir).resolve(),
|
|
49
|
+
html=True
|
|
50
|
+
)
|
|
51
|
+
self.app.mount("/", static_files, name="static")
|
|
52
|
+
return
|
|
42
53
|
|
|
43
54
|
async def _serve(self) -> None:
|
|
44
55
|
self.runner = ControllerRunner(self.controller)
|
|
@@ -23,12 +23,12 @@ class McpClient:
|
|
|
23
23
|
Call a specific tool on the MCP server
|
|
24
24
|
|
|
25
25
|
Args:
|
|
26
|
-
name:
|
|
26
|
+
name: Name of the tool to call
|
|
27
27
|
arguments: Arguments to pass to the tool
|
|
28
28
|
raise_on_error: Whether to raise exceptions on error responses
|
|
29
29
|
|
|
30
30
|
Returns:
|
|
31
|
-
|
|
31
|
+
Tool execution result
|
|
32
32
|
"""
|
|
33
33
|
await self._ensure_initialized()
|
|
34
34
|
result = await self.session.call_tool(name, arguments)
|
|
@@ -50,10 +50,10 @@ class McpClient:
|
|
|
50
50
|
Read a specific resource from the MCP server
|
|
51
51
|
|
|
52
52
|
Args:
|
|
53
|
-
uri:
|
|
53
|
+
uri: URI of the resource to read
|
|
54
54
|
|
|
55
55
|
Returns:
|
|
56
|
-
|
|
56
|
+
Resource content
|
|
57
57
|
"""
|
|
58
58
|
await self._ensure_initialized()
|
|
59
59
|
result = await self.session.read_resource(uri)
|
|
@@ -70,11 +70,11 @@ class McpClient:
|
|
|
70
70
|
Get a specific prompt from the MCP server
|
|
71
71
|
|
|
72
72
|
Args:
|
|
73
|
-
name:
|
|
73
|
+
name: Name of the prompt to get
|
|
74
74
|
arguments: Arguments to pass to the prompt
|
|
75
75
|
|
|
76
76
|
Returns:
|
|
77
|
-
|
|
77
|
+
Prompt content
|
|
78
78
|
"""
|
|
79
79
|
await self._ensure_initialized()
|
|
80
80
|
result = await self.session.get_prompt(name, arguments)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Any
|
|
2
|
+
from mindor.dsl.schema.job import RandomRouterJobConfig, RandomRoutingMode
|
|
3
|
+
from mindor.dsl.schema.component import ComponentConfig
|
|
4
|
+
from mindor.core.logger import logging
|
|
5
|
+
from ..base import Job, JobType, WorkflowContext, RoutingTarget, register_job
|
|
6
|
+
import random
|
|
7
|
+
|
|
8
|
+
@register_job(JobType.RANDOM_ROUTER)
|
|
9
|
+
class RandomRouterJob(Job):
|
|
10
|
+
def __init__(self, id: str, config: RandomRouterJobConfig, components: Dict[str, ComponentConfig]):
|
|
11
|
+
super().__init__(id, config, components)
|
|
12
|
+
|
|
13
|
+
async def run(self, context: WorkflowContext) -> Union[Any, RoutingTarget]:
|
|
14
|
+
if self.config.mode == RandomRoutingMode.WEIGHTED:
|
|
15
|
+
weights, targets = [], []
|
|
16
|
+
for routing in self.config.routings:
|
|
17
|
+
weight = await context.render_variable(routing.weight)
|
|
18
|
+
if weight is not None and weight > 0.0:
|
|
19
|
+
weights.append(weight)
|
|
20
|
+
targets.append(routing.target)
|
|
21
|
+
|
|
22
|
+
if not weights:
|
|
23
|
+
raise ValueError(f"No valid weights found in random-router job '{self.id}'.")
|
|
24
|
+
|
|
25
|
+
target = random.choices(targets, weights=weights, k=1)[0]
|
|
26
|
+
return RoutingTarget(target)
|
|
27
|
+
|
|
28
|
+
if self.config.mode == RandomRoutingMode.UNIFORM:
|
|
29
|
+
targets = [ routing.target for routing in self.config.routings ]
|
|
30
|
+
|
|
31
|
+
if not targets:
|
|
32
|
+
raise ValueError(f"No valid routing found in random-router job '{self.id}'.")
|
|
33
|
+
|
|
34
|
+
target = random.choice(targets)
|
|
35
|
+
return RoutingTarget(target)
|
|
36
|
+
|
|
37
|
+
raise ValueError(f"Unsupported routing mode: {self.config.mode}")
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
|
+
from enum import Enum
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
4
|
+
from mindor.dsl.schema.action import CommonActionConfig
|
|
5
|
+
from mindor.dsl.schema.runtime import RuntimeType
|
|
6
|
+
from .types import ComponentType
|
|
7
|
+
|
|
8
|
+
class CommonComponentConfig(BaseModel):
|
|
9
|
+
type: ComponentType = Field(..., description="Type of component.")
|
|
10
|
+
runtime: RuntimeType = Field(default=RuntimeType.NATIVE, description="Runtime environment used to execute this component.")
|
|
11
|
+
max_concurrent_count: int = Field(default=1, description="Maximum number of concurrent actions this component can handle.")
|
|
12
|
+
default: bool = Field(default=False, description="Whether to use this component when no component is explicitly specified.")
|
|
13
|
+
actions: Dict[str, CommonActionConfig] = Field(default_factory=dict, description="Actions available within this component.")
|
{model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/http_client.py
RENAMED
|
@@ -6,9 +6,9 @@ from .common import ComponentType, CommonComponentConfig
|
|
|
6
6
|
|
|
7
7
|
class HttpClientComponentConfig(CommonComponentConfig):
|
|
8
8
|
type: Literal[ComponentType.HTTP_CLIENT]
|
|
9
|
-
base_url: Optional[str] = Field(default=None)
|
|
10
|
-
headers: Dict[str, Any] = Field(default_factory=dict)
|
|
11
|
-
actions: Dict[str, HttpClientActionConfig] = Field(default_factory=dict)
|
|
9
|
+
base_url: Optional[str] = Field(default=None, description="")
|
|
10
|
+
headers: Dict[str, Any] = Field(default_factory=dict, description="")
|
|
11
|
+
actions: Dict[str, HttpClientActionConfig] = Field(default_factory=dict, description="")
|
|
12
12
|
|
|
13
13
|
@model_validator(mode="before")
|
|
14
14
|
def inflate_single_action(cls, values: Dict[str, Any]):
|
{model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/http_server.py
RENAMED
|
@@ -6,6 +6,6 @@ from .common import ComponentType, CommonComponentConfig
|
|
|
6
6
|
|
|
7
7
|
class HttpServerComponentConfig(CommonComponentConfig):
|
|
8
8
|
type: Literal[ComponentType.HTTP_SERVER]
|
|
9
|
-
port: Optional[int] = Field(default=None, ge=1, le=65535)
|
|
10
|
-
base_path: Optional[str] = Field(default=None)
|
|
11
|
-
actions: Dict[str, HttpServerActionConfig] = Field(default_factory=dict)
|
|
9
|
+
port: Optional[int] = Field(default=None, ge=1, le=65535, description="")
|
|
10
|
+
base_path: Optional[str] = Field(default=None, description="")
|
|
11
|
+
actions: Dict[str, HttpServerActionConfig] = Field(default_factory=dict, description="")
|
{model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/mcp_client.py
RENAMED
|
@@ -7,8 +7,8 @@ from .common import ComponentType, CommonComponentConfig
|
|
|
7
7
|
class McpClientComponentConfig(CommonComponentConfig):
|
|
8
8
|
type: Literal[ComponentType.MCP_CLIENT]
|
|
9
9
|
url: str = Field(..., description="URL of the MCP server to invoke tools.")
|
|
10
|
-
headers: Dict[str, Any] = Field(default_factory=dict)
|
|
11
|
-
actions: Dict[str, McpClientActionConfig] = Field(default_factory=dict)
|
|
10
|
+
headers: Dict[str, Any] = Field(default_factory=dict, description="")
|
|
11
|
+
actions: Dict[str, McpClientActionConfig] = Field(default_factory=dict, description="")
|
|
12
12
|
|
|
13
13
|
@model_validator(mode="before")
|
|
14
14
|
def inflate_single_action(cls, values: Dict[str, Any]):
|
{model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/component/impl/mcp_server.py
RENAMED
|
@@ -6,4 +6,4 @@ from .common import ComponentType, CommonComponentConfig
|
|
|
6
6
|
|
|
7
7
|
class McpServerComponentConfig(CommonComponentConfig):
|
|
8
8
|
type: Literal[ComponentType.MCP_SERVER]
|
|
9
|
-
actions: Dict[str, McpServerActionConfig] = Field(default_factory=dict)
|
|
9
|
+
actions: Dict[str, McpServerActionConfig] = Field(default_factory=dict, description="")
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
|
+
from pydantic import BaseModel, Field
|
|
3
|
+
from pydantic import model_validator, field_validator
|
|
4
|
+
from mindor.dsl.schema.runtime import RuntimeConfig, RuntimeType
|
|
5
|
+
from .types import ControllerType
|
|
6
|
+
from ..webui import ControllerWebUIConfig, ControllerWebUIDriver
|
|
7
|
+
|
|
8
|
+
class CommonControllerConfig(BaseModel):
|
|
9
|
+
name: Optional[str] = Field(default=None, description="Name used to identify this controller instance.")
|
|
10
|
+
type: ControllerType = Field(..., description="Type of controller to run.")
|
|
11
|
+
runtime: RuntimeConfig = Field(..., description="Runtime environment settings.")
|
|
12
|
+
max_concurrent_count: int = Field(default=1, description="Maximum number of jobs that can be executed concurrently.")
|
|
13
|
+
threaded: bool = Field(default=False, description="Whether to run jobs in separate threads.")
|
|
14
|
+
webui: Optional[ControllerWebUIConfig] = Field(default=None, description="Configuration for the controller's Web UI interface.")
|
|
15
|
+
|
|
16
|
+
@model_validator(mode="before")
|
|
17
|
+
def inflate_runtime(cls, values: Dict[str, Any]):
|
|
18
|
+
runtime = values.get("runtime")
|
|
19
|
+
if runtime is None or isinstance(runtime, str):
|
|
20
|
+
values["runtime"] = { "type": runtime or RuntimeType.NATIVE }
|
|
21
|
+
return values
|
|
22
|
+
|
|
23
|
+
@model_validator(mode="before")
|
|
24
|
+
def fill_missing_webui_driver(cls, values: Dict[str, Any]):
|
|
25
|
+
webui = values.get("webui")
|
|
26
|
+
if isinstance(webui, dict) and "driver" not in webui:
|
|
27
|
+
webui["driver"] = ControllerWebUIDriver.GRADIO
|
|
28
|
+
return values
|
{model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/controller/impl/http_server.py
RENAMED
|
@@ -5,7 +5,7 @@ from .common import ControllerType, CommonControllerConfig
|
|
|
5
5
|
|
|
6
6
|
class HttpServerControllerConfig(CommonControllerConfig):
|
|
7
7
|
type: Literal[ControllerType.HTTP_SERVER]
|
|
8
|
-
host: Optional[str] = Field(default="0.0.0.0", description="")
|
|
9
|
-
port: Optional[int] = Field(default=8080, description="")
|
|
10
|
-
base_path: Optional[str] = Field(default=None, description="")
|
|
11
|
-
origins: Optional[str] = Field(default="*", description="")
|
|
8
|
+
host: Optional[str] = Field(default="0.0.0.0", description="Host address to bind the HTTP server to.")
|
|
9
|
+
port: Optional[int] = Field(default=8080, description="Port number on which the HTTP server will listen.")
|
|
10
|
+
base_path: Optional[str] = Field(default=None, description="Base path to prefix all API routes")
|
|
11
|
+
origins: Optional[str] = Field(default="*", description="CORS allowed origins, specified as a comma-separated string")
|
{model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/controller/impl/mcp_server.py
RENAMED
|
@@ -5,6 +5,6 @@ from .common import ControllerType, CommonControllerConfig
|
|
|
5
5
|
|
|
6
6
|
class McpServerControllerConfig(CommonControllerConfig):
|
|
7
7
|
type: Literal[ControllerType.MCP_SERVER]
|
|
8
|
-
host: Optional[str] = Field(default="0.0.0.0", description="")
|
|
9
|
-
port: Optional[int] = Field(default=8080, description="")
|
|
10
|
-
base_path: Optional[str] = Field(default=None, description="")
|
|
8
|
+
host: Optional[str] = Field(default="0.0.0.0", description="Host address to bind the MCP server to.")
|
|
9
|
+
port: Optional[int] = Field(default=8080, description="Port number on which the MCP server will listen.")
|
|
10
|
+
base_path: Optional[str] = Field(default=None, description="Base path to prefix all MCP endpoints")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .webui import *
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
|
+
from enum import Enum
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
4
|
+
|
|
5
|
+
class ControllerWebUIDriver(str, Enum):
|
|
6
|
+
GRADIO = "gradio"
|
|
7
|
+
STATIC = "static"
|
|
8
|
+
DYNAMIC = "dynamic"
|
|
9
|
+
|
|
10
|
+
class CommonWebUIConfig(BaseModel):
|
|
11
|
+
driver: ControllerWebUIDriver = Field(..., description="")
|
|
12
|
+
host: Optional[str] = Field(default="0.0.0.0", description="Host address to bind the Web UI server to.")
|
|
13
|
+
port: Optional[int] = Field(default=8081, description="Port number to serve the Web UI on.")
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
|
+
from pydantic import BaseModel, Field
|
|
3
|
+
from .common import CommonWebUIConfig, ControllerWebUIDriver
|
|
4
|
+
|
|
5
|
+
class DynamicWebUIConfig(CommonWebUIConfig):
|
|
6
|
+
driver: Literal[ControllerWebUIDriver.DYNAMIC]
|
|
7
|
+
command: str = Field(..., description="Command to start the web UI server.")
|
|
8
|
+
server_dir: str = Field(default="webui/server", description="Directory containing source code and entry point for the web UI server.")
|
|
9
|
+
static_dir: str = Field(default="webui/static", description="Directory containing static HTML/CSS/JS files for the web UI.")
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
|
+
from pydantic import BaseModel, Field
|
|
3
|
+
from .common import CommonWebUIConfig, ControllerWebUIDriver
|
|
4
|
+
|
|
5
|
+
class GradioWebUIConfig(CommonWebUIConfig):
|
|
6
|
+
driver: Literal[ControllerWebUIDriver.GRADIO]
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
|
+
from pydantic import BaseModel, Field
|
|
3
|
+
from .common import CommonWebUIConfig, ControllerWebUIDriver
|
|
4
|
+
|
|
5
|
+
class StaticWebUIConfig(CommonWebUIConfig):
|
|
6
|
+
driver: Literal[ControllerWebUIDriver.STATIC]
|
|
7
|
+
static_dir: str = Field(default="webui", description="Directory containing static HTML/CSS/JS files for the web UI.")
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
|
+
from enum import Enum
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
4
|
+
from .impl import *
|
|
5
|
+
|
|
6
|
+
ControllerWebUIConfig = Annotated[
|
|
7
|
+
Union[
|
|
8
|
+
GradioWebUIConfig,
|
|
9
|
+
StaticWebUIConfig,
|
|
10
|
+
DynamicWebUIConfig
|
|
11
|
+
],
|
|
12
|
+
Field(discriminator="driver")
|
|
13
|
+
]
|
|
@@ -5,5 +5,5 @@ from .types import GatewayType
|
|
|
5
5
|
|
|
6
6
|
class CommonGatewayConfig(BaseModel):
|
|
7
7
|
type: GatewayType = Field(..., description="")
|
|
8
|
-
runtime: RuntimeType = Field(default=RuntimeType.NATIVE)
|
|
9
|
-
port: Optional[int] = Field(default=8090)
|
|
8
|
+
runtime: RuntimeType = Field(default=RuntimeType.NATIVE, description="")
|
|
9
|
+
port: Optional[int] = Field(default=8090, description="")
|
{model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/gateway/impl/http_tunnel.py
RENAMED
|
@@ -9,4 +9,4 @@ class HttpTunnelGatewayDriver(str, Enum):
|
|
|
9
9
|
|
|
10
10
|
class HttpTunnelGatewayConfig(CommonGatewayConfig):
|
|
11
11
|
type: Literal[GatewayType.HTTP_TUNNEL]
|
|
12
|
-
driver: HttpTunnelGatewayDriver = Field(default=HttpTunnelGatewayDriver.NGROK)
|
|
12
|
+
driver: HttpTunnelGatewayDriver = Field(default=HttpTunnelGatewayDriver.NGROK, description="")
|
|
@@ -20,7 +20,7 @@ class TimeIntervalDelayJobConfig(CommonDelayJobConfig):
|
|
|
20
20
|
class SpecificTimeDelayJobConfig(CommonDelayJobConfig):
|
|
21
21
|
mode: Literal[DelayJobMode.SPECIFIC_TIME]
|
|
22
22
|
time: Union[datetime, str] = Field(..., description="Specific date and time to wait until.")
|
|
23
|
-
timezone: Optional[str] = Field(default=None, description="")
|
|
23
|
+
timezone: Optional[str] = Field(default=None, description="Timezone identifier used to interpret the 'time' field.")
|
|
24
24
|
|
|
25
25
|
DelayJobConfig = Annotated[
|
|
26
26
|
Union[
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
|
+
from enum import Enum
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
4
|
+
from pydantic import model_validator, field_validator
|
|
5
|
+
from .common import JobType, CommonJobConfig
|
|
6
|
+
|
|
7
|
+
class RandomRoutingMode(Enum, str):
|
|
8
|
+
UNIFORM = "uniform"
|
|
9
|
+
WEIGHTED = "weighted"
|
|
10
|
+
|
|
11
|
+
class RandomRoutingConfig(BaseModel):
|
|
12
|
+
weight: Optional[float] = Field(default=None, description="")
|
|
13
|
+
target: str = Field(..., description="Destination job ID for this route.")
|
|
14
|
+
|
|
15
|
+
class RandomRouterJobConfig(CommonJobConfig):
|
|
16
|
+
type: Literal[JobType.RANDOM_ROUTER]
|
|
17
|
+
mode: RandomRoutingMode = Field(default=RandomRoutingMode.UNIFORM, description="")
|
|
18
|
+
routings: List[RandomRoutingConfig] = Field(default_factory=list, description="")
|
|
19
|
+
|
|
20
|
+
def get_routing_jobs(self) -> Set[str]:
|
|
21
|
+
return { routing.target for routing in self.routings }
|
|
@@ -5,5 +5,5 @@ from .types import ListenerType
|
|
|
5
5
|
|
|
6
6
|
class CommonListenerConfig(BaseModel):
|
|
7
7
|
type: ListenerType = Field(..., description="")
|
|
8
|
-
runtime: RuntimeType = Field(default=RuntimeType.NATIVE)
|
|
9
|
-
max_concurrent_count: int = Field(default=0)
|
|
8
|
+
runtime: RuntimeType = Field(default=RuntimeType.NATIVE, description="")
|
|
9
|
+
max_concurrent_count: int = Field(default=0, description="")
|
{model_compose-0.3.1 → model_compose-0.3.2}/src/mindor/dsl/schema/listener/impl/http_callback.py
RENAMED
|
@@ -5,14 +5,14 @@ from .common import ListenerType, CommonListenerConfig
|
|
|
5
5
|
|
|
6
6
|
class HttpCallbackConfig(BaseModel):
|
|
7
7
|
path: str
|
|
8
|
-
method: Literal[ "GET", "POST", "PUT", "DELETE", "PATCH" ] = Field(default="POST")
|
|
9
|
-
bulk: bool = Field(default=False)
|
|
10
|
-
item: Optional[str] = Field(default=None)
|
|
8
|
+
method: Literal[ "GET", "POST", "PUT", "DELETE", "PATCH" ] = Field(default="POST", description="")
|
|
9
|
+
bulk: bool = Field(default=False, description="")
|
|
10
|
+
item: Optional[str] = Field(default=None, description="")
|
|
11
11
|
identify_by: str = Field(..., description="")
|
|
12
|
-
status: Optional[str] = Field(default=None)
|
|
13
|
-
success_when: Optional[List[str]] = Field(default=None)
|
|
14
|
-
fail_when: Optional[List[str]] = Field(default=None)
|
|
15
|
-
result: Optional[Any] = Field(default=None)
|
|
12
|
+
status: Optional[str] = Field(default=None, description="")
|
|
13
|
+
success_when: Optional[List[str]] = Field(default=None, description="")
|
|
14
|
+
fail_when: Optional[List[str]] = Field(default=None, description="")
|
|
15
|
+
result: Optional[Any] = Field(default=None, description="")
|
|
16
16
|
|
|
17
17
|
@model_validator(mode="before")
|
|
18
18
|
def normalize_status_fields(cls, values: Dict[str, Any]):
|
|
@@ -3,7 +3,7 @@ from enum import Enum
|
|
|
3
3
|
from pydantic import BaseModel, Field
|
|
4
4
|
from pydantic import model_validator, field_validator
|
|
5
5
|
from mindor.dsl.utils.annotation import get_model_union_keys
|
|
6
|
-
from .job import JobConfig, JobType
|
|
6
|
+
from .job import JobConfig, JobType, DelayJobMode
|
|
7
7
|
|
|
8
8
|
class WorkflowVariableType(str, Enum):
|
|
9
9
|
# Primitive data types
|
|
@@ -67,7 +67,8 @@ class WorkflowConfig(BaseModel):
|
|
|
67
67
|
def normalize_jobs(cls, values: Dict[str, Any]):
|
|
68
68
|
values = cls.inflate_single_job(values)
|
|
69
69
|
if "jobs" in values:
|
|
70
|
-
cls.
|
|
70
|
+
cls.fill_missing_job_type(values["jobs"])
|
|
71
|
+
cls.fill_missing_delay_job_mode(values["jobs"])
|
|
71
72
|
return values
|
|
72
73
|
|
|
73
74
|
@classmethod
|
|
@@ -79,7 +80,13 @@ class WorkflowConfig(BaseModel):
|
|
|
79
80
|
return values
|
|
80
81
|
|
|
81
82
|
@classmethod
|
|
82
|
-
def
|
|
83
|
+
def fill_missing_job_type(cls, jobs: Dict[str, Any]):
|
|
83
84
|
for job in jobs.values():
|
|
84
85
|
if "type" not in job:
|
|
85
86
|
job["type"] = JobType.ACTION
|
|
87
|
+
|
|
88
|
+
@classmethod
|
|
89
|
+
def fill_missing_delay_job_mode(cls, jobs: Dict[str, Any]):
|
|
90
|
+
for job in [ job for job in jobs.values() if job["type"] == "delay" ]:
|
|
91
|
+
if "mode" not in job:
|
|
92
|
+
job["mode"] = DelayJobMode.TIME_INTERVAL
|
|
@@ -94,6 +94,7 @@ src/mindor/core/workflow/job/impl/__init__.py
|
|
|
94
94
|
src/mindor/core/workflow/job/impl/action.py
|
|
95
95
|
src/mindor/core/workflow/job/impl/delay.py
|
|
96
96
|
src/mindor/core/workflow/job/impl/if_.py
|
|
97
|
+
src/mindor/core/workflow/job/impl/random_router.py
|
|
97
98
|
src/mindor/core/workflow/job/impl/switch.py
|
|
98
99
|
src/mindor/dsl/__init__.py
|
|
99
100
|
src/mindor/dsl/loader.py
|
|
@@ -147,7 +148,13 @@ src/mindor/dsl/schema/controller/impl/common.py
|
|
|
147
148
|
src/mindor/dsl/schema/controller/impl/http_server.py
|
|
148
149
|
src/mindor/dsl/schema/controller/impl/mcp_server.py
|
|
149
150
|
src/mindor/dsl/schema/controller/impl/types.py
|
|
150
|
-
src/mindor/dsl/schema/controller/
|
|
151
|
+
src/mindor/dsl/schema/controller/webui/__init__.py
|
|
152
|
+
src/mindor/dsl/schema/controller/webui/webui.py
|
|
153
|
+
src/mindor/dsl/schema/controller/webui/impl/__init__.py
|
|
154
|
+
src/mindor/dsl/schema/controller/webui/impl/common.py
|
|
155
|
+
src/mindor/dsl/schema/controller/webui/impl/dynamic.py
|
|
156
|
+
src/mindor/dsl/schema/controller/webui/impl/gradio.py
|
|
157
|
+
src/mindor/dsl/schema/controller/webui/impl/static.py
|
|
151
158
|
src/mindor/dsl/schema/gateway/__init__.py
|
|
152
159
|
src/mindor/dsl/schema/gateway/gateway.py
|
|
153
160
|
src/mindor/dsl/schema/gateway/impl/__init__.py
|
|
@@ -162,6 +169,7 @@ src/mindor/dsl/schema/job/impl/action.py
|
|
|
162
169
|
src/mindor/dsl/schema/job/impl/common.py
|
|
163
170
|
src/mindor/dsl/schema/job/impl/delay.py
|
|
164
171
|
src/mindor/dsl/schema/job/impl/if_.py
|
|
172
|
+
src/mindor/dsl/schema/job/impl/random_router.py
|
|
165
173
|
src/mindor/dsl/schema/job/impl/switch.py
|
|
166
174
|
src/mindor/dsl/schema/job/impl/types.py
|
|
167
175
|
src/mindor/dsl/schema/listener/__init__.py
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
|
-
from enum import Enum
|
|
3
|
-
from pydantic import BaseModel, Field
|
|
4
|
-
from mindor.dsl.schema.action import CommonActionConfig
|
|
5
|
-
from mindor.dsl.schema.runtime import RuntimeType
|
|
6
|
-
from .types import ComponentType
|
|
7
|
-
|
|
8
|
-
class CommonComponentConfig(BaseModel):
|
|
9
|
-
type: ComponentType = Field(..., description="")
|
|
10
|
-
runtime: RuntimeType = Field(default=RuntimeType.NATIVE)
|
|
11
|
-
max_concurrent_count: int = Field(default=1)
|
|
12
|
-
default: bool = Field(default=False)
|
|
13
|
-
actions: Dict[str, CommonActionConfig] = Field(default_factory=dict)
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
|
-
from pydantic import BaseModel, Field
|
|
3
|
-
from pydantic import model_validator, field_validator
|
|
4
|
-
from mindor.dsl.schema.runtime import RuntimeConfig
|
|
5
|
-
from .types import ControllerType
|
|
6
|
-
from .webui import ControllerWebUIConfig
|
|
7
|
-
|
|
8
|
-
class CommonControllerConfig(BaseModel):
|
|
9
|
-
name: Optional[str] = Field(default=None)
|
|
10
|
-
type: ControllerType = Field(..., description="")
|
|
11
|
-
runtime: RuntimeConfig = Field(..., description="")
|
|
12
|
-
max_concurrent_count: int = Field(default=1, description="")
|
|
13
|
-
threaded: bool = Field(default=False, description="")
|
|
14
|
-
webui: Optional[ControllerWebUIConfig] = Field(default=None, description="")
|
|
15
|
-
|
|
16
|
-
@model_validator(mode="before")
|
|
17
|
-
def inflate_runtime(cls, values: Dict[str, Any]):
|
|
18
|
-
runtime = values.get("runtime")
|
|
19
|
-
if runtime is None or isinstance(runtime, str):
|
|
20
|
-
values["runtime"] = { "type": runtime or "native" }
|
|
21
|
-
return values
|