model-compose 0.3.15__tar.gz → 0.3.17__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.15/src/model_compose.egg-info → model_compose-0.3.17}/PKG-INFO +1 -5
- {model_compose-0.3.15 → model_compose-0.3.17}/pyproject.toml +1 -5
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/base.py +16 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/base.py +11 -2
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/model.py +12 -1
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/tasks/image_to_text.py +11 -3
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/tasks/summarization.py +14 -4
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/tasks/text_classification.py +14 -5
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/tasks/text_embedding.py +17 -5
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/tasks/text_generation.py +14 -4
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/tasks/translation.py +14 -4
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/vector_store/base.py +3 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/vector_store/drivers/chroma.py +4 -1
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/vector_store/drivers/milvus.py +4 -1
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/vector_store/vector_store.py +4 -1
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/base.py +4 -5
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runtime/docker/context/Dockerfile +1 -6
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/services/async_service.py +0 -5
- model_compose-0.3.17/src/mindor/core/utils/package.py +57 -0
- {model_compose-0.3.15 → model_compose-0.3.17/src/model_compose.egg-info}/PKG-INFO +1 -5
- {model_compose-0.3.15 → model_compose-0.3.17}/src/model_compose.egg-info/SOURCES.txt +1 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/model_compose.egg-info/requires.txt +0 -4
- {model_compose-0.3.15 → model_compose-0.3.17}/LICENSE +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/README.md +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/setup.cfg +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/cli/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/cli/compose.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/component.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/context.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/http_client.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/http_server.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/mcp_client.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/mcp_server.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/loader.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/tasks/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/shell.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/text_splitter.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/vector_store/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/vector_store/drivers/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/workflow.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/compose/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/compose/compose.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/compose/manager.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/controller.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runner/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runner/client.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runner/http_client.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runner/mcp_client.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runner/runner.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runtime/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runtime/docker/docker.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runtime/native/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runtime/native/native.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/runtime/specs.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/services/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/services/http_server.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/services/mcp_server.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/webui/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/webui/gradio.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/controller/webui/webui.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/gateway/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/gateway/base.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/gateway/gateway.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/gateway/services/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/gateway/services/http_tunnel.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/gateway/services/ssh_tunnel.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/listener/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/listener/base.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/listener/listener.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/listener/services/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/listener/services/http_callback.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/logger/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/logger/base.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/logger/logger.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/logger/logging.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/logger/services/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/logger/services/console.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/logger/services/file.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/runtime/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/runtime/docker/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/runtime/docker/docker.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/runtime/env.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/services/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/caching.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/http_client.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/http_request.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/http_response.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/http_status.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/image.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/mcp_client.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/renderers.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/resolvers.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/shell.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/ssh_client.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/streamer.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/streaming.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/time.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/utils/workqueue.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/context.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/base.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/impl/action.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/impl/delay.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/impl/filter.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/impl/if_.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/impl/random_router.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/impl/switch.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/job/job.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/schema.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/workflow/workflow.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/loader.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/action.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/common.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/http_client.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/http_server.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/impl/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/impl/common.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/impl/summarization.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/impl/translation.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/model/model.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/text_splitter.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/vector_store/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/vector_store/impl/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/vector_store/impl/chroma.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/vector_store/impl/common.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/vector_store/impl/faiss.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/vector_store/impl/milvus.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/vector_store/impl/qdrant.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/vector_store/vector_store.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/component.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/common.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/http_client.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/mcp_client.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/chat_completion.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/common.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/image_to_text.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/summarization.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/translation.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/impl/types.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/model/model.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/text_splitter.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/types.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/vector_store/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/vector_store/impl/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/vector_store/impl/chroma.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/vector_store/impl/common.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/vector_store/impl/faiss.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/vector_store/impl/milvus.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/vector_store/impl/types.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/vector_store/vector_store.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/compose.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/controller.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/impl/common.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/impl/http_server.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/impl/mcp_server.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/impl/types.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/webui/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/webui/impl/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/webui/impl/common.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/webui/impl/gradio.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/webui/impl/static.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/controller/webui/webui.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/common.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/http_tunnel/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/http_tunnel/http_tunnel.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/cloudflare.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/common.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/ngrok.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/impl/action.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/impl/common.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/impl/filter.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/impl/random_router.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/impl/types.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/job/job.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/listener/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/listener/impl/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/listener/impl/common.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/listener/impl/http_callback.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/listener/impl/types.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/listener/listener.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/logger/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/logger/impl/common.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/logger/impl/file.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/logger/logger.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/runtime/impl/common.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/transport/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/transport/http.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/transport/ssh.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/schema/workflow.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/utils/__init__.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/utils/annotation.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/dsl/utils/enum.py +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/model_compose.egg-info/dependency_links.txt +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/model_compose.egg-info/entry_points.txt +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/src/model_compose.egg-info/top_level.txt +0 -0
- {model_compose-0.3.15 → model_compose-0.3.17}/tests/test_cli.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: model-compose
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.17
|
|
4
4
|
Summary: model-compose: Declarative AI Model and Workflow Orchestrator
|
|
5
5
|
Author-email: Hanyeol Cho <hanyeol.cho@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -20,10 +20,6 @@ Requires-Dist: pyngrok
|
|
|
20
20
|
Requires-Dist: ulid
|
|
21
21
|
Requires-Dist: gradio
|
|
22
22
|
Requires-Dist: Pillow
|
|
23
|
-
Requires-Dist: transformers>=4.21.0
|
|
24
|
-
Requires-Dist: torch
|
|
25
|
-
Requires-Dist: sentencepiece
|
|
26
|
-
Requires-Dist: accelerate
|
|
27
23
|
Requires-Dist: docker
|
|
28
24
|
Dynamic: license-file
|
|
29
25
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "model-compose"
|
|
3
|
-
version = "0.3.
|
|
3
|
+
version = "0.3.17"
|
|
4
4
|
description = "model-compose: Declarative AI Model and Workflow Orchestrator"
|
|
5
5
|
authors = [
|
|
6
6
|
{ name = "Hanyeol Cho", email = "hanyeol.cho@gmail.com" }
|
|
@@ -21,10 +21,6 @@ dependencies = [
|
|
|
21
21
|
"ulid",
|
|
22
22
|
"gradio",
|
|
23
23
|
"Pillow",
|
|
24
|
-
"transformers>=4.21.0",
|
|
25
|
-
"torch",
|
|
26
|
-
"sentencepiece",
|
|
27
|
-
"accelerate",
|
|
28
24
|
"docker"
|
|
29
25
|
]
|
|
30
26
|
|
|
@@ -7,6 +7,8 @@ from mindor.dsl.schema.gateway import GatewayConfig
|
|
|
7
7
|
from mindor.dsl.schema.workflow import WorkflowConfig
|
|
8
8
|
from mindor.core.services import AsyncService
|
|
9
9
|
from mindor.core.utils.workqueue import WorkQueue
|
|
10
|
+
from mindor.core.utils.package import extract_module_name, is_module_installed, install_package
|
|
11
|
+
from mindor.core.logger import logging
|
|
10
12
|
from .context import ComponentActionContext
|
|
11
13
|
|
|
12
14
|
class ActionResolver:
|
|
@@ -59,6 +61,10 @@ class ComponentService(AsyncService):
|
|
|
59
61
|
self.queue = WorkQueue(self.config.max_concurrent_count, self._run)
|
|
60
62
|
|
|
61
63
|
async def setup(self) -> None:
|
|
64
|
+
dependencies = self._get_setup_requirements()
|
|
65
|
+
if dependencies:
|
|
66
|
+
await self._install_packages(dependencies)
|
|
67
|
+
|
|
62
68
|
await self._setup()
|
|
63
69
|
|
|
64
70
|
async def teardown(self) -> None:
|
|
@@ -83,6 +89,9 @@ class ComponentService(AsyncService):
|
|
|
83
89
|
async def _teardown(self) -> None:
|
|
84
90
|
pass
|
|
85
91
|
|
|
92
|
+
async def _get_setup_requirements(self) -> Optional[List[str]]:
|
|
93
|
+
return None
|
|
94
|
+
|
|
86
95
|
async def _start(self) -> None:
|
|
87
96
|
if self.queue:
|
|
88
97
|
await self.queue.start()
|
|
@@ -108,6 +117,13 @@ class ComponentService(AsyncService):
|
|
|
108
117
|
async def _run(self, action: ActionConfig, context: ComponentActionContext) -> Any:
|
|
109
118
|
pass
|
|
110
119
|
|
|
120
|
+
async def _install_packages(self, packages: List[str]) -> None:
|
|
121
|
+
for package_spec in packages:
|
|
122
|
+
module_name = extract_module_name(package_spec)
|
|
123
|
+
if not is_module_installed(module_name):
|
|
124
|
+
logging.info(f"Installing missing module: {package_spec}")
|
|
125
|
+
await install_package(package_spec)
|
|
126
|
+
|
|
111
127
|
def register_component(type: ComponentType):
|
|
112
128
|
def decorator(cls: Type[ComponentService]) -> Type[ComponentService]:
|
|
113
129
|
ComponentRegistry[type] = cls
|
{model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/base.py
RENAMED
|
@@ -1,11 +1,17 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
1
4
|
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Any
|
|
2
5
|
from abc import ABC, abstractmethod
|
|
3
6
|
from mindor.dsl.schema.component import ModelComponentConfig, ModelTaskType, ModelSourceConfig, DeviceMode
|
|
4
7
|
from mindor.dsl.schema.action import ModelActionConfig
|
|
5
8
|
from mindor.core.services import AsyncService
|
|
6
9
|
from ...context import ComponentActionContext
|
|
7
|
-
|
|
8
|
-
|
|
10
|
+
import asyncio
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from transformers import PreTrainedModel, PreTrainedTokenizer, ProcessorMixin
|
|
14
|
+
import torch
|
|
9
15
|
|
|
10
16
|
class ModelTaskService(AsyncService):
|
|
11
17
|
def __init__(self, id: str, config: ModelComponentConfig, daemon: bool):
|
|
@@ -14,6 +20,9 @@ class ModelTaskService(AsyncService):
|
|
|
14
20
|
self.id: str = id
|
|
15
21
|
self.config: ModelComponentConfig = config
|
|
16
22
|
|
|
23
|
+
def get_setup_requirements(self) -> Optional[List[str]]:
|
|
24
|
+
return None
|
|
25
|
+
|
|
17
26
|
async def run(self, action: ModelActionConfig, context: ComponentActionContext) -> Any:
|
|
18
27
|
loop: asyncio.AbstractEventLoop = asyncio.get_running_loop()
|
|
19
28
|
|
{model_compose-0.3.15 → model_compose-0.3.17}/src/mindor/core/component/services/model/model.py
RENAMED
|
@@ -17,7 +17,7 @@ class ModelComponent(ComponentService):
|
|
|
17
17
|
def __init__(self, id: str, config: ModelComponentConfig, global_configs: ComponentGlobalConfigs, daemon: bool):
|
|
18
18
|
super().__init__(id, config, global_configs, daemon)
|
|
19
19
|
|
|
20
|
-
self.task_service = self._create_task_service(self.config.task)
|
|
20
|
+
self.task_service: ModelTaskService = self._create_task_service(self.config.task)
|
|
21
21
|
|
|
22
22
|
def _create_task_service(self, type: ModelTaskType) -> ModelTaskService:
|
|
23
23
|
try:
|
|
@@ -27,6 +27,17 @@ class ModelComponent(ComponentService):
|
|
|
27
27
|
except KeyError:
|
|
28
28
|
raise ValueError(f"Unsupported model task type: {type}")
|
|
29
29
|
|
|
30
|
+
def _get_setup_requirements(self) -> Optional[List[str]]:
|
|
31
|
+
task_dependencies = self.task_service.get_setup_requirements()
|
|
32
|
+
|
|
33
|
+
return [
|
|
34
|
+
"transformers>=4.21.0",
|
|
35
|
+
"torch",
|
|
36
|
+
"sentencepiece",
|
|
37
|
+
"accelerate",
|
|
38
|
+
*(task_dependencies or [])
|
|
39
|
+
]
|
|
40
|
+
|
|
30
41
|
async def _serve(self) -> None:
|
|
31
42
|
await self.task_service.start()
|
|
32
43
|
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
1
4
|
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Protocol, Any
|
|
2
5
|
from mindor.dsl.schema.component import ModelComponentConfig, ImageToTextModelArchitecture
|
|
3
6
|
from mindor.dsl.schema.action import ModelActionConfig, ImageToTextModelActionConfig
|
|
@@ -5,11 +8,14 @@ from mindor.core.utils.streamer import AsyncStreamer
|
|
|
5
8
|
from mindor.core.logger import logging
|
|
6
9
|
from ..base import ModelTaskService, ModelTaskType, register_model_task_service
|
|
7
10
|
from ..base import ComponentActionContext
|
|
8
|
-
from transformers import PreTrainedModel, PreTrainedTokenizer, ProcessorMixin, GenerationMixin, TextIteratorStreamer, StopStringCriteria
|
|
9
11
|
from PIL import Image as PILImage
|
|
10
12
|
from threading import Thread
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
import asyncio
|
|
14
|
+
|
|
15
|
+
if TYPE_CHECKING:
|
|
16
|
+
from transformers import PreTrainedModel, PreTrainedTokenizer, ProcessorMixin, GenerationMixin, TextIteratorStreamer, StopStringCriteria
|
|
17
|
+
from torch import Tensor
|
|
18
|
+
import torch
|
|
13
19
|
|
|
14
20
|
class WithTokenizer(Protocol):
|
|
15
21
|
tokenizer: PreTrainedTokenizer
|
|
@@ -22,6 +28,8 @@ class ImageToTextTaskAction:
|
|
|
22
28
|
self.device: torch.device = device
|
|
23
29
|
|
|
24
30
|
async def run(self, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
|
|
31
|
+
import torch
|
|
32
|
+
|
|
25
33
|
image: Union[PILImage.Image, List[PILImage.Image]] = await context.render_image(self.config.image)
|
|
26
34
|
prompt: Optional[Union[str, List[str]]] = await context.render_variable(self.config.prompt)
|
|
27
35
|
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
1
4
|
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
5
|
from mindor.dsl.schema.component import ModelComponentConfig
|
|
3
6
|
from mindor.dsl.schema.action import ModelActionConfig, SummarizationModelActionConfig
|
|
@@ -5,10 +8,13 @@ from mindor.core.utils.streamer import AsyncStreamer
|
|
|
5
8
|
from mindor.core.logger import logging
|
|
6
9
|
from ..base import ModelTaskService, ModelTaskType, register_model_task_service
|
|
7
10
|
from ..base import ComponentActionContext
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import
|
|
11
|
+
import asyncio
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from transformers import PreTrainedModel, PreTrainedTokenizer, GenerationMixin, TextIteratorStreamer, StopStringCriteria
|
|
15
|
+
from threading import Thread
|
|
16
|
+
from torch import Tensor
|
|
17
|
+
import torch
|
|
12
18
|
|
|
13
19
|
class SummarizationTaskAction:
|
|
14
20
|
def __init__(self, config: SummarizationModelActionConfig, model: PreTrainedModel, tokenizer: PreTrainedTokenizer, device: torch.device):
|
|
@@ -18,6 +24,8 @@ class SummarizationTaskAction:
|
|
|
18
24
|
self.device: torch.device = device
|
|
19
25
|
|
|
20
26
|
async def run(self, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
|
|
27
|
+
import torch
|
|
28
|
+
|
|
21
29
|
text: Union[str, List[str]] = await context.render_variable(self.config.text)
|
|
22
30
|
|
|
23
31
|
max_input_length = await context.render_variable(self.config.params.max_input_length)
|
|
@@ -119,7 +127,9 @@ class SummarizationTaskService(ModelTaskService):
|
|
|
119
127
|
return await SummarizationTaskAction(action, self.model, self.tokenizer, self.device).run(context, loop)
|
|
120
128
|
|
|
121
129
|
def _get_model_class(self) -> Type[PreTrainedModel]:
|
|
130
|
+
from transformers import AutoModelForSeq2SeqLM
|
|
122
131
|
return AutoModelForSeq2SeqLM
|
|
123
132
|
|
|
124
133
|
def _get_tokenizer_class(self) -> Type[PreTrainedTokenizer]:
|
|
134
|
+
from transformers import AutoTokenizer
|
|
125
135
|
return AutoTokenizer
|
|
@@ -1,14 +1,19 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
1
4
|
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
5
|
from mindor.dsl.schema.component import ModelComponentConfig
|
|
3
6
|
from mindor.dsl.schema.action import ModelActionConfig, TextClassificationModelActionConfig
|
|
4
7
|
from mindor.core.logger import logging
|
|
5
8
|
from ..base import ModelTaskService, ModelTaskType, register_model_task_service
|
|
6
9
|
from ..base import ComponentActionContext
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
from
|
|
11
|
-
import
|
|
10
|
+
import asyncio
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from transformers import PreTrainedModel, PreTrainedTokenizer
|
|
14
|
+
from transformers.modeling_outputs import SequenceClassifierOutput
|
|
15
|
+
from torch import Tensor
|
|
16
|
+
import torch
|
|
12
17
|
|
|
13
18
|
class TextClassificationTaskAction:
|
|
14
19
|
def __init__(self, config: TextClassificationModelActionConfig, model: PreTrainedModel, tokenizer: PreTrainedTokenizer, device: torch.device):
|
|
@@ -18,6 +23,8 @@ class TextClassificationTaskAction:
|
|
|
18
23
|
self.device: torch.device = device
|
|
19
24
|
|
|
20
25
|
async def run(self, context: ComponentActionContext, labels: Optional[List[str]]) -> Any:
|
|
26
|
+
import torch, torch.nn.functional as F
|
|
27
|
+
|
|
21
28
|
text: Union[str, List[str]] = await context.render_variable(self.config.text)
|
|
22
29
|
|
|
23
30
|
return_probabilities = await context.render_variable(self.config.params.return_probabilities)
|
|
@@ -115,7 +122,9 @@ class TextClassificationTaskService(ModelTaskService):
|
|
|
115
122
|
return await TextClassificationTaskAction(action, self.model, self.tokenizer, self.device).run(context, self.config.labels)
|
|
116
123
|
|
|
117
124
|
def _get_model_class(self) -> Type[PreTrainedModel]:
|
|
125
|
+
from transformers import AutoModelForSequenceClassification
|
|
118
126
|
return AutoModelForSequenceClassification
|
|
119
127
|
|
|
120
128
|
def _get_tokenizer_class(self) -> Type[PreTrainedTokenizer]:
|
|
129
|
+
from transformers import AutoTokenizer
|
|
121
130
|
return AutoTokenizer
|
|
@@ -1,13 +1,19 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
1
4
|
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
5
|
from mindor.dsl.schema.component import ModelComponentConfig
|
|
3
6
|
from mindor.dsl.schema.action import ModelActionConfig, TextEmbeddingModelActionConfig
|
|
4
7
|
from mindor.core.logger import logging
|
|
5
8
|
from ..base import ModelTaskService, ModelTaskType, register_model_task_service
|
|
6
9
|
from ..base import ComponentActionContext
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
import
|
|
10
|
+
import asyncio
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from transformers import PreTrainedModel, PreTrainedTokenizer
|
|
14
|
+
from transformers.modeling_outputs import BaseModelOutput
|
|
15
|
+
from torch import Tensor
|
|
16
|
+
import torch
|
|
11
17
|
|
|
12
18
|
class TextEmbeddingTaskAction:
|
|
13
19
|
def __init__(self, config: TextEmbeddingModelActionConfig, model: PreTrainedModel, tokenizer: PreTrainedTokenizer, device: torch.device):
|
|
@@ -17,6 +23,8 @@ class TextEmbeddingTaskAction:
|
|
|
17
23
|
self.device: torch.device = device
|
|
18
24
|
|
|
19
25
|
async def run(self, context: ComponentActionContext) -> Any:
|
|
26
|
+
import torch, torch.nn.functional as F
|
|
27
|
+
|
|
20
28
|
text: Union[str, List[str]] = await context.render_variable(self.config.text)
|
|
21
29
|
|
|
22
30
|
max_input_length = await context.render_variable(self.config.params.max_input_length)
|
|
@@ -44,7 +52,7 @@ class TextEmbeddingTaskAction:
|
|
|
44
52
|
embeddings = self._pool_hidden_state(last_hidden_state, attention_mask, pooling)
|
|
45
53
|
|
|
46
54
|
if normalize:
|
|
47
|
-
embeddings =
|
|
55
|
+
embeddings = F.normalize(embeddings, p=2, dim=1, eps=1e-12)
|
|
48
56
|
|
|
49
57
|
embeddings = embeddings.cpu().tolist()
|
|
50
58
|
|
|
@@ -83,6 +91,8 @@ class TextEmbeddingTaskAction:
|
|
|
83
91
|
return results
|
|
84
92
|
|
|
85
93
|
def _pool_hidden_state(self, last_hidden_state: Tensor, attention_mask: Optional[Tensor], pooling: str) -> Tensor:
|
|
94
|
+
import torch
|
|
95
|
+
|
|
86
96
|
if pooling == "mean":
|
|
87
97
|
if attention_mask is not None:
|
|
88
98
|
mask = attention_mask.unsqueeze(-1).expand(last_hidden_state.size())
|
|
@@ -131,7 +141,9 @@ class TextEmbeddingTaskService(ModelTaskService):
|
|
|
131
141
|
return await TextEmbeddingTaskAction(action, self.model, self.tokenizer, self.device).run(context)
|
|
132
142
|
|
|
133
143
|
def _get_model_class(self) -> Type[PreTrainedModel]:
|
|
144
|
+
from transformers import AutoModel
|
|
134
145
|
return AutoModel
|
|
135
146
|
|
|
136
147
|
def _get_tokenizer_class(self) -> Type[PreTrainedTokenizer]:
|
|
148
|
+
from transformers import AutoTokenizer
|
|
137
149
|
return AutoTokenizer
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
1
4
|
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
5
|
from mindor.dsl.schema.component import ModelComponentConfig
|
|
3
6
|
from mindor.dsl.schema.action import ModelActionConfig, TextGenerationModelActionConfig
|
|
@@ -5,10 +8,13 @@ from mindor.core.utils.streamer import AsyncStreamer
|
|
|
5
8
|
from mindor.core.logger import logging
|
|
6
9
|
from ..base import ModelTaskService, ModelTaskType, register_model_task_service
|
|
7
10
|
from ..base import ComponentActionContext
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import
|
|
11
|
+
import asyncio
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from transformers import PreTrainedModel, PreTrainedTokenizer, GenerationMixin, TextIteratorStreamer, StopStringCriteria
|
|
15
|
+
from threading import Thread
|
|
16
|
+
from torch import Tensor
|
|
17
|
+
import torch
|
|
12
18
|
|
|
13
19
|
class TextGenerationTaskAction:
|
|
14
20
|
def __init__(self, config: TextGenerationModelActionConfig, model: PreTrainedModel, tokenizer: PreTrainedTokenizer, device: torch.device):
|
|
@@ -18,6 +24,8 @@ class TextGenerationTaskAction:
|
|
|
18
24
|
self.device: torch.device = device
|
|
19
25
|
|
|
20
26
|
async def run(self, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
|
|
27
|
+
import torch
|
|
28
|
+
|
|
21
29
|
prompt: Union[str, List[str]] = await context.render_variable(self.config.prompt)
|
|
22
30
|
|
|
23
31
|
max_output_length = await context.render_variable(self.config.params.max_output_length)
|
|
@@ -120,7 +128,9 @@ class TextGenerationTaskService(ModelTaskService):
|
|
|
120
128
|
return await TextGenerationTaskAction(action, self.model, self.tokenizer, self.device).run(context, loop)
|
|
121
129
|
|
|
122
130
|
def _get_model_class(self) -> Type[PreTrainedModel]:
|
|
131
|
+
from transformers import AutoModelForCausalLM
|
|
123
132
|
return AutoModelForCausalLM
|
|
124
133
|
|
|
125
134
|
def _get_tokenizer_class(self) -> Type[PreTrainedTokenizer]:
|
|
135
|
+
from transformers import AutoTokenizer
|
|
126
136
|
return AutoTokenizer
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
1
4
|
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
5
|
from mindor.dsl.schema.component import ModelComponentConfig
|
|
3
6
|
from mindor.dsl.schema.action import ModelActionConfig, TranslationModelActionConfig
|
|
@@ -5,10 +8,13 @@ from mindor.core.utils.streamer import AsyncStreamer
|
|
|
5
8
|
from mindor.core.logger import logging
|
|
6
9
|
from ..base import ModelTaskService, ModelTaskType, register_model_task_service
|
|
7
10
|
from ..base import ComponentActionContext
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import
|
|
11
|
+
import asyncio
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from transformers import PreTrainedModel, PreTrainedTokenizer, GenerationMixin, TextIteratorStreamer, StopStringCriteria
|
|
15
|
+
from threading import Thread
|
|
16
|
+
from torch import Tensor
|
|
17
|
+
import torch
|
|
12
18
|
|
|
13
19
|
class TranslationTaskAction:
|
|
14
20
|
def __init__(self, config: TranslationModelActionConfig, model: PreTrainedModel, tokenizer: PreTrainedTokenizer, device: torch.device):
|
|
@@ -18,6 +24,8 @@ class TranslationTaskAction:
|
|
|
18
24
|
self.device: torch.device = device
|
|
19
25
|
|
|
20
26
|
async def run(self, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
|
|
27
|
+
import torch
|
|
28
|
+
|
|
21
29
|
text: Union[str, List[str]] = await context.render_variable(self.config.text)
|
|
22
30
|
|
|
23
31
|
max_input_length = await context.render_variable(self.config.params.max_input_length)
|
|
@@ -119,7 +127,9 @@ class TranslationTaskService(ModelTaskService):
|
|
|
119
127
|
return await TranslationTaskAction(action, self.model, self.tokenizer, self.device).run(context, loop)
|
|
120
128
|
|
|
121
129
|
def _get_model_class(self) -> Type[PreTrainedModel]:
|
|
130
|
+
from transformers import AutoModelForSeq2SeqLM
|
|
122
131
|
return AutoModelForSeq2SeqLM
|
|
123
132
|
|
|
124
133
|
def _get_tokenizer_class(self) -> Type[PreTrainedTokenizer]:
|
|
134
|
+
from transformers import AutoTokenizer
|
|
125
135
|
return AutoTokenizer
|
|
@@ -12,6 +12,9 @@ class VectorStoreService(AsyncService):
|
|
|
12
12
|
self.id: str = id
|
|
13
13
|
self.config: VectorStoreComponentConfig = config
|
|
14
14
|
|
|
15
|
+
def get_setup_requirements(self) -> Optional[List[str]]:
|
|
16
|
+
return None
|
|
17
|
+
|
|
15
18
|
async def run(self, action: VectorStoreActionConfig, context: ComponentActionContext) -> Any:
|
|
16
19
|
return await self._run(action, context)
|
|
17
20
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
2
3
|
|
|
3
4
|
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Any
|
|
4
|
-
from typing import TYPE_CHECKING
|
|
5
5
|
from mindor.dsl.schema.component import VectorStoreComponentConfig
|
|
6
6
|
from mindor.dsl.schema.action import VectorStoreActionConfig, ChromaVectorStoreActionConfig, VectorStoreActionMethod, VectorStoreFilterCondition, VectorStoreFilterOperator
|
|
7
7
|
from mindor.core.utils.streamer import AsyncStreamer
|
|
@@ -233,6 +233,9 @@ class ChromaVectorStoreService(VectorStoreService):
|
|
|
233
233
|
|
|
234
234
|
self.client: Optional[ChromaClient] = None
|
|
235
235
|
|
|
236
|
+
def get_setup_requirements(self) -> Optional[List[str]]:
|
|
237
|
+
return [ "chromadb" ]
|
|
238
|
+
|
|
236
239
|
async def _serve(self) -> None:
|
|
237
240
|
self.client = self._create_client()
|
|
238
241
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
2
3
|
|
|
3
4
|
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
4
|
-
from typing import TYPE_CHECKING
|
|
5
5
|
from mindor.dsl.schema.component import VectorStoreComponentConfig
|
|
6
6
|
from mindor.dsl.schema.action import VectorStoreActionConfig, MilvusVectorStoreActionConfig, VectorStoreActionMethod, VectorStoreFilterCondition, VectorStoreFilterOperator
|
|
7
7
|
from mindor.core.utils.streamer import AsyncStreamer
|
|
@@ -304,6 +304,9 @@ class MilvusVectorStoreService(VectorStoreService):
|
|
|
304
304
|
|
|
305
305
|
self.client: Optional[AsyncMilvusClient] = None
|
|
306
306
|
|
|
307
|
+
def get_setup_requirements(self) -> Optional[List[str]]:
|
|
308
|
+
return [ "pymilvus" ]
|
|
309
|
+
|
|
307
310
|
async def _serve(self) -> None:
|
|
308
311
|
from pymilvus import AsyncMilvusClient
|
|
309
312
|
|
|
@@ -17,7 +17,7 @@ class VectorStoreComponent(ComponentService):
|
|
|
17
17
|
def __init__(self, id: str, config: VectorStoreComponentConfig, global_configs: ComponentGlobalConfigs, daemon: bool):
|
|
18
18
|
super().__init__(id, config, global_configs, daemon)
|
|
19
19
|
|
|
20
|
-
self.store_service = self._create_store_service(self.config.driver)
|
|
20
|
+
self.store_service: VectorStoreService = self._create_store_service(self.config.driver)
|
|
21
21
|
|
|
22
22
|
def _create_store_service(self, driver: VectorStoreDriver) -> VectorStoreService:
|
|
23
23
|
try:
|
|
@@ -27,6 +27,9 @@ class VectorStoreComponent(ComponentService):
|
|
|
27
27
|
except KeyError:
|
|
28
28
|
raise ValueError(f"Unsupported vector store driver: {driver}")
|
|
29
29
|
|
|
30
|
+
def _get_setup_requirements(self) -> Optional[List[str]]:
|
|
31
|
+
return self.store_service.get_setup_requirements()
|
|
32
|
+
|
|
30
33
|
async def _serve(self) -> None:
|
|
31
34
|
await self.store_service.start()
|
|
32
35
|
|
|
@@ -73,9 +73,11 @@ class ControllerService(AsyncService):
|
|
|
73
73
|
await self._stop_loggers()
|
|
74
74
|
return
|
|
75
75
|
|
|
76
|
+
await self._start_loggers()
|
|
76
77
|
await self._setup_components()
|
|
77
78
|
await self.start()
|
|
78
79
|
await self.wait_until_stopped()
|
|
80
|
+
await self._stop_loggers()
|
|
79
81
|
return
|
|
80
82
|
|
|
81
83
|
if self.config.runtime.type == RuntimeType.DOCKER:
|
|
@@ -100,8 +102,10 @@ class ControllerService(AsyncService):
|
|
|
100
102
|
|
|
101
103
|
async def start_services(self, verbose: bool) -> None:
|
|
102
104
|
if self.config.runtime.type == RuntimeType.NATIVE:
|
|
105
|
+
await self._start_loggers()
|
|
103
106
|
await self.start()
|
|
104
107
|
await self.wait_until_stopped()
|
|
108
|
+
await self._stop_loggers()
|
|
105
109
|
return
|
|
106
110
|
|
|
107
111
|
if self.config.runtime.type == RuntimeType.DOCKER:
|
|
@@ -147,8 +151,6 @@ class ControllerService(AsyncService):
|
|
|
147
151
|
if self.task_queue:
|
|
148
152
|
await self.task_queue.start()
|
|
149
153
|
|
|
150
|
-
await self._start_loggers()
|
|
151
|
-
|
|
152
154
|
if self.daemon:
|
|
153
155
|
await self._start_gateways()
|
|
154
156
|
await self._start_listeners()
|
|
@@ -175,9 +177,6 @@ class ControllerService(AsyncService):
|
|
|
175
177
|
|
|
176
178
|
await super()._stop()
|
|
177
179
|
|
|
178
|
-
async def _on_stop(self) -> None:
|
|
179
|
-
await self._stop_loggers()
|
|
180
|
-
|
|
181
180
|
async def _watch_stop_request(self, interval: float = 1.0) -> None:
|
|
182
181
|
stop_file = Path.cwd() / ".stop"
|
|
183
182
|
|
|
@@ -26,12 +26,7 @@ RUN pip install --no-cache-dir \
|
|
|
26
26
|
pyngrok \
|
|
27
27
|
ulid \
|
|
28
28
|
gradio \
|
|
29
|
-
Pillow
|
|
30
|
-
'transformers>=4.21.0' \
|
|
31
|
-
torch \
|
|
32
|
-
sentencepiece \
|
|
33
|
-
accelerate \
|
|
34
|
-
docker
|
|
29
|
+
Pillow
|
|
35
30
|
|
|
36
31
|
COPY requirements.txt .
|
|
37
32
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
@@ -52,8 +52,6 @@ class AsyncService(ABC):
|
|
|
52
52
|
if self.daemon_task:
|
|
53
53
|
await self.daemon_task
|
|
54
54
|
|
|
55
|
-
await self._on_stop()
|
|
56
|
-
|
|
57
55
|
def run_in_thread(self, runner: Callable[[], Awaitable[Any]]) -> asyncio.Future:
|
|
58
56
|
loop = asyncio.get_running_loop()
|
|
59
57
|
future: asyncio.Future = loop.create_future()
|
|
@@ -94,9 +92,6 @@ class AsyncService(ABC):
|
|
|
94
92
|
async def _is_ready(self) -> bool:
|
|
95
93
|
return True
|
|
96
94
|
|
|
97
|
-
async def _on_stop(self) -> None:
|
|
98
|
-
pass
|
|
99
|
-
|
|
100
95
|
@abstractmethod
|
|
101
96
|
async def _serve(self) -> None:
|
|
102
97
|
pass
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import sys, subprocess, re
|
|
2
|
+
import asyncio
|
|
3
|
+
|
|
4
|
+
_VERSION_SPEC_PATTERN = re.compile(r'^([a-zA-Z0-9_\-\.]+)([><=!]+.*)?$')
|
|
5
|
+
|
|
6
|
+
async def install_package(package_spec: str) -> None:
|
|
7
|
+
"""Install a package using pip.
|
|
8
|
+
|
|
9
|
+
Args:
|
|
10
|
+
package_spec: Package specification to install (e.g., "torch>=2.0.0")
|
|
11
|
+
"""
|
|
12
|
+
process = await asyncio.create_subprocess_exec(
|
|
13
|
+
sys.executable, "-m", "pip", "install", package_spec,
|
|
14
|
+
stdout=asyncio.subprocess.PIPE,
|
|
15
|
+
stderr=asyncio.subprocess.PIPE
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
stdout, stderr = await process.communicate()
|
|
19
|
+
|
|
20
|
+
if process.returncode != 0:
|
|
21
|
+
raise subprocess.CalledProcessError(
|
|
22
|
+
process.returncode,
|
|
23
|
+
[sys.executable, "-m", "pip", "install", package_spec],
|
|
24
|
+
output=stdout,
|
|
25
|
+
stderr=stderr
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
def extract_module_name(package_spec: str) -> str:
|
|
29
|
+
"""Extract module name from package specification.
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
package_spec: Package specification like "torch>=2.0.0" or "transformers"
|
|
33
|
+
|
|
34
|
+
Returns:
|
|
35
|
+
Module name for importing (e.g., "torch" from "torch>=2.0.0")
|
|
36
|
+
"""
|
|
37
|
+
match = re.match(_VERSION_SPEC_PATTERN, package_spec)
|
|
38
|
+
|
|
39
|
+
if match:
|
|
40
|
+
return match.group(1)
|
|
41
|
+
|
|
42
|
+
return None
|
|
43
|
+
|
|
44
|
+
def is_module_installed(module_name: str) -> bool:
|
|
45
|
+
"""Check if a module is installed and importable.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
module_name: Name of the module to check
|
|
49
|
+
|
|
50
|
+
Returns:
|
|
51
|
+
True if module can be imported, False otherwise
|
|
52
|
+
"""
|
|
53
|
+
try:
|
|
54
|
+
__import__(module_name)
|
|
55
|
+
return True
|
|
56
|
+
except ImportError:
|
|
57
|
+
return False
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: model-compose
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.17
|
|
4
4
|
Summary: model-compose: Declarative AI Model and Workflow Orchestrator
|
|
5
5
|
Author-email: Hanyeol Cho <hanyeol.cho@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -20,10 +20,6 @@ Requires-Dist: pyngrok
|
|
|
20
20
|
Requires-Dist: ulid
|
|
21
21
|
Requires-Dist: gradio
|
|
22
22
|
Requires-Dist: Pillow
|
|
23
|
-
Requires-Dist: transformers>=4.21.0
|
|
24
|
-
Requires-Dist: torch
|
|
25
|
-
Requires-Dist: sentencepiece
|
|
26
|
-
Requires-Dist: accelerate
|
|
27
23
|
Requires-Dist: docker
|
|
28
24
|
Dynamic: license-file
|
|
29
25
|
|
|
@@ -90,6 +90,7 @@ src/mindor/core/utils/http_response.py
|
|
|
90
90
|
src/mindor/core/utils/http_status.py
|
|
91
91
|
src/mindor/core/utils/image.py
|
|
92
92
|
src/mindor/core/utils/mcp_client.py
|
|
93
|
+
src/mindor/core/utils/package.py
|
|
93
94
|
src/mindor/core/utils/renderers.py
|
|
94
95
|
src/mindor/core/utils/resolvers.py
|
|
95
96
|
src/mindor/core/utils/shell.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|