model-compose 0.3.14__tar.gz → 0.3.16__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.14/src/model_compose.egg-info → model_compose-0.3.16}/PKG-INFO +1 -5
- {model_compose-0.3.14 → model_compose-0.3.16}/pyproject.toml +1 -5
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/base.py +23 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/http_server.py +10 -1
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/base.py +25 -13
- model_compose-0.3.16/src/mindor/core/component/services/model/loader.py +25 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/model.py +12 -1
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/tasks/image_to_text.py +40 -6
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/tasks/summarization.py +26 -11
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/tasks/text_classification.py +14 -5
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/tasks/text_embedding.py +17 -5
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/tasks/text_generation.py +29 -5
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/tasks/translation.py +26 -11
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/vector_store/base.py +3 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/vector_store/drivers/chroma.py +4 -1
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/vector_store/drivers/milvus.py +4 -1
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/vector_store/vector_store.py +4 -1
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/base.py +4 -5
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/services/async_service.py +13 -5
- model_compose-0.3.16/src/mindor/core/utils/package.py +57 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/shell.py +6 -14
- model_compose-0.3.16/src/mindor/dsl/schema/action/impl/common.py +7 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/http_client.py +19 -19
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/http_server.py +17 -17
- {model_compose-0.3.14/src/mindor/dsl/schema/component → model_compose-0.3.16/src/mindor/dsl/schema/action}/impl/model/impl/__init__.py +1 -0
- model_compose-0.3.16/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +41 -0
- model_compose-0.3.16/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +24 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/model/impl/summarization.py +7 -4
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +9 -3
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/model/impl/translation.py +8 -5
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/vector_store/impl/common.py +10 -10
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/http_client.py +2 -2
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/mcp_client.py +1 -1
- {model_compose-0.3.14/src/mindor/dsl/schema/action → model_compose-0.3.16/src/mindor/dsl/schema/component}/impl/model/impl/__init__.py +1 -0
- model_compose-0.3.16/src/mindor/dsl/schema/component/impl/model/impl/chat_completion.py +17 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/impl/common.py +9 -4
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/vector_store/impl/common.py +1 -1
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/compose.py +5 -5
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/webui/impl/common.py +1 -1
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/common.py +3 -3
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/common.py +1 -1
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/impl/random_router.py +3 -3
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/listener/impl/common.py +3 -3
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/listener/impl/http_callback.py +10 -10
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/logger/impl/common.py +2 -2
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/logger/impl/file.py +1 -1
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/runtime/impl/common.py +1 -1
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/workflow.py +2 -2
- {model_compose-0.3.14 → model_compose-0.3.16/src/model_compose.egg-info}/PKG-INFO +1 -5
- {model_compose-0.3.14 → model_compose-0.3.16}/src/model_compose.egg-info/SOURCES.txt +4 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/model_compose.egg-info/requires.txt +0 -4
- model_compose-0.3.14/src/mindor/dsl/schema/action/impl/common.py +0 -7
- model_compose-0.3.14/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +0 -12
- {model_compose-0.3.14 → model_compose-0.3.16}/LICENSE +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/README.md +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/setup.cfg +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/cli/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/cli/compose.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/component.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/context.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/http_client.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/mcp_client.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/mcp_server.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/model/tasks/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/shell.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/text_splitter.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/vector_store/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/vector_store/drivers/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/workflow.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/compose/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/compose/compose.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/compose/manager.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/controller.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runner/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runner/client.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runner/http_client.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runner/mcp_client.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runner/runner.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runtime/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runtime/docker/context/Dockerfile +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runtime/docker/docker.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runtime/native/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runtime/native/native.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/runtime/specs.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/services/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/services/http_server.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/services/mcp_server.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/webui/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/webui/gradio.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/controller/webui/webui.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/gateway/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/gateway/base.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/gateway/gateway.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/gateway/services/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/gateway/services/http_tunnel.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/gateway/services/ssh_tunnel.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/listener/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/listener/base.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/listener/listener.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/listener/services/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/listener/services/http_callback.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/logger/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/logger/base.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/logger/logger.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/logger/logging.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/logger/services/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/logger/services/console.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/logger/services/file.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/runtime/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/runtime/docker/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/runtime/docker/docker.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/runtime/env.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/services/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/caching.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/http_client.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/http_request.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/http_response.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/http_status.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/image.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/mcp_client.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/renderers.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/resolvers.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/ssh_client.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/streamer.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/streaming.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/time.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/utils/workqueue.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/context.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/base.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/impl/action.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/impl/delay.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/impl/filter.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/impl/if_.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/impl/random_router.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/impl/switch.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/job/job.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/schema.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/workflow/workflow.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/loader.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/action.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/model/impl/common.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/model/model.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/text_splitter.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/vector_store/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/vector_store/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/vector_store/impl/chroma.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/vector_store/impl/faiss.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/vector_store/impl/milvus.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/vector_store/impl/qdrant.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/vector_store/vector_store.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/component.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/common.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/impl/image_to_text.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/impl/summarization.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/impl/translation.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/impl/types.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/model/model.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/text_splitter.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/types.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/vector_store/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/vector_store/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/vector_store/impl/chroma.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/vector_store/impl/faiss.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/vector_store/impl/milvus.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/vector_store/impl/types.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/vector_store/vector_store.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/controller.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/impl/common.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/impl/http_server.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/impl/mcp_server.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/impl/types.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/webui/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/webui/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/webui/impl/gradio.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/webui/impl/static.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/controller/webui/webui.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/http_tunnel/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/http_tunnel/http_tunnel.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/cloudflare.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/ngrok.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/impl/action.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/impl/common.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/impl/filter.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/impl/types.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/job/job.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/listener/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/listener/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/listener/impl/types.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/listener/listener.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/logger/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/logger/logger.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/transport/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/transport/http.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/schema/transport/ssh.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/utils/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/utils/annotation.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/dsl/utils/enum.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/model_compose.egg-info/dependency_links.txt +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/model_compose.egg-info/entry_points.txt +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/src/model_compose.egg-info/top_level.txt +0 -0
- {model_compose-0.3.14 → model_compose-0.3.16}/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.16
|
|
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.16"
|
|
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,11 +61,19 @@ 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:
|
|
65
71
|
await self._teardown()
|
|
66
72
|
|
|
73
|
+
async def start(self, background: bool = False) -> None:
|
|
74
|
+
await super().start(background)
|
|
75
|
+
await self.wait_until_ready()
|
|
76
|
+
|
|
67
77
|
async def run(self, action_id: Union[str, None], run_id: str, input: Dict[str, Any]) -> Dict[str, Any]:
|
|
68
78
|
_, action = ActionResolver(self.config.actions).resolve(action_id)
|
|
69
79
|
context = ComponentActionContext(run_id, input)
|
|
@@ -79,6 +89,9 @@ class ComponentService(AsyncService):
|
|
|
79
89
|
async def _teardown(self) -> None:
|
|
80
90
|
pass
|
|
81
91
|
|
|
92
|
+
async def _get_setup_requirements(self) -> Optional[List[str]]:
|
|
93
|
+
return None
|
|
94
|
+
|
|
82
95
|
async def _start(self) -> None:
|
|
83
96
|
if self.queue:
|
|
84
97
|
await self.queue.start()
|
|
@@ -97,10 +110,20 @@ class ComponentService(AsyncService):
|
|
|
97
110
|
async def _shutdown(self) -> None:
|
|
98
111
|
pass
|
|
99
112
|
|
|
113
|
+
async def _is_ready(self) -> bool:
|
|
114
|
+
return True
|
|
115
|
+
|
|
100
116
|
@abstractmethod
|
|
101
117
|
async def _run(self, action: ActionConfig, context: ComponentActionContext) -> Any:
|
|
102
118
|
pass
|
|
103
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
|
+
|
|
104
127
|
def register_component(type: ComponentType):
|
|
105
128
|
def decorator(cls: Type[ComponentService]) -> Type[ComponentService]:
|
|
106
129
|
ComponentRegistry[type] = cls
|
{model_compose-0.3.14 → model_compose-0.3.16}/src/mindor/core/component/services/http_server.py
RENAMED
|
@@ -161,10 +161,19 @@ class HttpServerComponent(ComponentService):
|
|
|
161
161
|
|
|
162
162
|
async def _serve(self) -> None:
|
|
163
163
|
if self.config.manage.scripts.start:
|
|
164
|
-
await run_command_streaming(self.config.manage.scripts.start, self.config.manage.working_dir, self.config.manage.env
|
|
164
|
+
await run_command_streaming(self.config.manage.scripts.start, self.config.manage.working_dir, self.config.manage.env)
|
|
165
165
|
|
|
166
166
|
async def _shutdown(self) -> None:
|
|
167
167
|
pass
|
|
168
168
|
|
|
169
|
+
async def _is_ready(self) -> bool:
|
|
170
|
+
try:
|
|
171
|
+
_, writer = await asyncio.open_connection("localhost", self.config.port)
|
|
172
|
+
writer.close()
|
|
173
|
+
await writer.wait_closed()
|
|
174
|
+
return True
|
|
175
|
+
except (ConnectionRefusedError, OSError):
|
|
176
|
+
return False
|
|
177
|
+
|
|
169
178
|
async def _run(self, action: ActionConfig, context: ComponentActionContext) -> Any:
|
|
170
179
|
return await HttpServerAction(action).run(context, self.client)
|
{model_compose-0.3.14 → model_compose-0.3.16}/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
|
-
from mindor.dsl.schema.component import ModelComponentConfig, ModelTaskType, DeviceMode
|
|
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
|
|
|
@@ -26,7 +35,7 @@ class ModelTaskService(AsyncService):
|
|
|
26
35
|
async def _run(self, action: ModelActionConfig, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
|
|
27
36
|
pass
|
|
28
37
|
|
|
29
|
-
def _load_pretrained_model(self, extra_params: Optional[Dict[str, Any]] = None) -> PreTrainedModel:
|
|
38
|
+
def _load_pretrained_model(self, extra_params: Optional[Dict[str, Any]] = None) -> Union[PreTrainedModel, torch.nn.Module]:
|
|
30
39
|
params = self._get_common_model_params()
|
|
31
40
|
|
|
32
41
|
if extra_params:
|
|
@@ -42,6 +51,10 @@ class ModelTaskService(AsyncService):
|
|
|
42
51
|
def _get_common_model_params(self) -> Dict[str, Any]:
|
|
43
52
|
params: Dict[str, Any] = {}
|
|
44
53
|
|
|
54
|
+
if isinstance(self.config.model, ModelSourceConfig):
|
|
55
|
+
if self.config.model.revision:
|
|
56
|
+
params["revision"] = self.config.model.revision
|
|
57
|
+
|
|
45
58
|
if self.config.device_mode != DeviceMode.SINGLE:
|
|
46
59
|
params["device_map"] = self.config.device_mode.value
|
|
47
60
|
|
|
@@ -51,9 +64,6 @@ class ModelTaskService(AsyncService):
|
|
|
51
64
|
if self.config.low_cpu_mem_usage:
|
|
52
65
|
params["low_cpu_mem_usage"] = True
|
|
53
66
|
|
|
54
|
-
if self.config.revision:
|
|
55
|
-
params["revision"] = self.config.revision
|
|
56
|
-
|
|
57
67
|
if self.config.cache_dir:
|
|
58
68
|
params["cache_dir"] = self.config.cache_dir
|
|
59
69
|
|
|
@@ -75,12 +85,13 @@ class ModelTaskService(AsyncService):
|
|
|
75
85
|
|
|
76
86
|
def _get_common_tokenizer_params(self) -> Dict[str, Any]:
|
|
77
87
|
params: Dict[str, Any] = {}
|
|
88
|
+
|
|
89
|
+
if isinstance(self.config.model, ModelSourceConfig):
|
|
90
|
+
if self.config.model.revision:
|
|
91
|
+
params["revision"] = self.config.model.revision
|
|
78
92
|
|
|
79
93
|
if not self.config.fast_tokenizer:
|
|
80
94
|
params["use_fast"] = False
|
|
81
|
-
|
|
82
|
-
if self.config.revision:
|
|
83
|
-
params["revision"] = self.config.revision
|
|
84
95
|
|
|
85
96
|
if self.config.cache_dir:
|
|
86
97
|
params["cache_dir"] = self.config.cache_dir
|
|
@@ -104,9 +115,10 @@ class ModelTaskService(AsyncService):
|
|
|
104
115
|
def _get_common_processor_params(self) -> Dict[str, Any]:
|
|
105
116
|
params: Dict[str, Any] = {}
|
|
106
117
|
|
|
107
|
-
if self.config.
|
|
108
|
-
|
|
109
|
-
|
|
118
|
+
if isinstance(self.config.model, ModelSourceConfig):
|
|
119
|
+
if self.config.model.revision:
|
|
120
|
+
params["revision"] = self.config.model.revision
|
|
121
|
+
|
|
110
122
|
if self.config.cache_dir:
|
|
111
123
|
params["cache_dir"] = self.config.cache_dir
|
|
112
124
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, AsyncIterator, Any
|
|
2
|
+
from transformers import PreTrainedModel
|
|
3
|
+
import torch
|
|
4
|
+
|
|
5
|
+
async def load_model(
|
|
6
|
+
provider: str,
|
|
7
|
+
model_id: str,
|
|
8
|
+
revision: Optional[str],
|
|
9
|
+
filename: Optional[str],
|
|
10
|
+
model_class: Type[PreTrainedModel],
|
|
11
|
+
*,
|
|
12
|
+
cache_dir: Optional[str] = None,
|
|
13
|
+
local_files_only: bool = False
|
|
14
|
+
) -> Union[PreTrainedModel, torch.nn.Module]:
|
|
15
|
+
if provider in [ "huggingface.co", "huggingface.com", "huggingface" ]:
|
|
16
|
+
pass
|
|
17
|
+
|
|
18
|
+
async def load_model_from_uri(
|
|
19
|
+
uri: str,
|
|
20
|
+
model_class: Type[PreTrainedModel],
|
|
21
|
+
*,
|
|
22
|
+
cache_dir: Optional[str] = None,
|
|
23
|
+
local_files_only: bool = False
|
|
24
|
+
) -> Union[PreTrainedModel, torch.nn.Module]:
|
|
25
|
+
pass
|
{model_compose-0.3.14 → model_compose-0.3.16}/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
|
|
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,11 +28,25 @@ 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
|
|
|
28
|
-
|
|
29
|
-
|
|
36
|
+
max_input_length = await context.render_variable(self.config.params.max_input_length)
|
|
37
|
+
max_output_length = await context.render_variable(self.config.params.max_output_length)
|
|
38
|
+
min_output_length = await context.render_variable(self.config.params.min_output_length)
|
|
39
|
+
num_return_sequences = await context.render_variable(self.config.params.num_return_sequences)
|
|
40
|
+
do_sample = await context.render_variable(self.config.params.do_sample)
|
|
41
|
+
temperature = await context.render_variable(self.config.params.temperature) if do_sample else None
|
|
42
|
+
top_k = await context.render_variable(self.config.params.top_k) if do_sample else None
|
|
43
|
+
top_p = await context.render_variable(self.config.params.top_p) if do_sample else None
|
|
44
|
+
num_beams = await context.render_variable(self.config.params.num_beams)
|
|
45
|
+
length_penalty = await context.render_variable(self.config.params.length_penalty) if num_beams > 1 else None
|
|
46
|
+
early_stopping = await context.render_variable(self.config.params.early_stopping) if num_beams > 1 else False
|
|
47
|
+
stop_sequences = await context.render_variable(self.config.params.stop_sequences)
|
|
48
|
+
batch_size = await context.render_variable(self.config.params.batch_size)
|
|
49
|
+
stream = await context.render_variable(self.config.stream)
|
|
30
50
|
|
|
31
51
|
is_single_input: bool = bool(not isinstance(images, list))
|
|
32
52
|
images: List[PILImage.Image] = [ image ] if is_single_input else image
|
|
@@ -37,17 +57,31 @@ class ImageToTextTaskAction:
|
|
|
37
57
|
raise ValueError("Streaming mode only supports a single input image with batch size of 1.")
|
|
38
58
|
|
|
39
59
|
streamer = TextIteratorStreamer(self.processor.tokenizer, skip_prompt=True, skip_special_tokens=True) if stream else None
|
|
60
|
+
stopping_criteria = [ StopStringCriteria(self.processor.tokenizer, stop_sequences) ] if stop_sequences else None
|
|
40
61
|
for index in range(0, len(images), batch_size):
|
|
41
62
|
batch_images = images[index:index + batch_size]
|
|
42
63
|
batch_prompts = prompts[index:index + batch_size] if prompts else None
|
|
43
64
|
|
|
44
|
-
inputs: Tensor = self.processor(images=batch_images, text=batch_prompts, return_tensors="pt")
|
|
65
|
+
inputs: Tensor = self.processor(images=batch_images, text=batch_prompts, max_length=max_input_length, return_tensors="pt")
|
|
45
66
|
inputs = inputs.to(self.device)
|
|
46
67
|
|
|
47
68
|
def _generate():
|
|
48
69
|
with torch.inference_mode():
|
|
49
70
|
outputs = self.model.generate(
|
|
50
71
|
**inputs,
|
|
72
|
+
max_new_tokens=max_output_length,
|
|
73
|
+
min_length=min_output_length,
|
|
74
|
+
num_return_sequences=num_return_sequences,
|
|
75
|
+
do_sample=do_sample,
|
|
76
|
+
temperature=temperature,
|
|
77
|
+
top_k=top_k,
|
|
78
|
+
top_p=top_p,
|
|
79
|
+
num_beams=num_beams,
|
|
80
|
+
length_penalty=length_penalty,
|
|
81
|
+
early_stopping=early_stopping,
|
|
82
|
+
pad_token_id=getattr(self.processor.tokenizer, "pad_token_id", None),
|
|
83
|
+
eos_token_id=getattr(self.processor.tokenizer, "eos_token_id", None),
|
|
84
|
+
stopping_criteria=stopping_criteria,
|
|
51
85
|
streamer=streamer
|
|
52
86
|
)
|
|
53
87
|
|
|
@@ -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,17 +24,21 @@ 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)
|
|
24
32
|
max_output_length = await context.render_variable(self.config.params.max_output_length)
|
|
25
33
|
min_output_length = await context.render_variable(self.config.params.min_output_length)
|
|
26
|
-
num_beams = await context.render_variable(self.config.params.num_beams)
|
|
27
|
-
length_penalty = await context.render_variable(self.config.params.length_penalty) if num_beams > 1 else None
|
|
28
|
-
early_stopping = await context.render_variable(self.config.params.early_stopping) if num_beams > 1 else False
|
|
29
34
|
do_sample = await context.render_variable(self.config.params.do_sample)
|
|
35
|
+
temperature = await context.render_variable(self.config.params.temperature) if do_sample else None
|
|
30
36
|
top_k = await context.render_variable(self.config.params.top_k) if do_sample else None
|
|
31
37
|
top_p = await context.render_variable(self.config.params.top_p) if do_sample else None
|
|
38
|
+
num_beams = await context.render_variable(self.config.params.num_beams)
|
|
39
|
+
length_penalty = await context.render_variable(self.config.params.length_penalty) if num_beams > 1 else None
|
|
40
|
+
early_stopping = await context.render_variable(self.config.params.early_stopping) if num_beams > 1 else False
|
|
41
|
+
stop_sequences = await context.render_variable(self.config.params.stop_sequences)
|
|
32
42
|
batch_size = await context.render_variable(self.config.params.batch_size)
|
|
33
43
|
stream = await context.render_variable(self.config.stream)
|
|
34
44
|
|
|
@@ -40,6 +50,7 @@ class SummarizationTaskAction:
|
|
|
40
50
|
raise ValueError("Streaming mode only supports a single input text with batch size of 1.")
|
|
41
51
|
|
|
42
52
|
streamer = TextIteratorStreamer(self.tokenizer, skip_prompt=True, skip_special_tokens=True) if stream else None
|
|
53
|
+
stopping_criteria = [ StopStringCriteria(self.tokenizer, stop_sequences) ] if stop_sequences else None
|
|
43
54
|
for index in range(0, len(texts), batch_size):
|
|
44
55
|
batch_texts = texts[index:index + batch_size]
|
|
45
56
|
inputs: Dict[str, Tensor] = self.tokenizer(batch_texts, return_tensors="pt", max_length=max_input_length, padding=True, truncation=True)
|
|
@@ -49,16 +60,18 @@ class SummarizationTaskAction:
|
|
|
49
60
|
with torch.inference_mode():
|
|
50
61
|
outputs = self.model.generate(
|
|
51
62
|
**inputs,
|
|
52
|
-
|
|
63
|
+
max_new_tokens=max_output_length,
|
|
53
64
|
min_length=min_output_length,
|
|
54
|
-
num_beams=num_beams,
|
|
55
|
-
length_penalty=length_penalty,
|
|
56
|
-
early_stopping=early_stopping,
|
|
57
65
|
do_sample=do_sample,
|
|
66
|
+
temperature=temperature,
|
|
58
67
|
top_k=top_k,
|
|
59
68
|
top_p=top_p,
|
|
69
|
+
num_beams=num_beams,
|
|
70
|
+
length_penalty=length_penalty,
|
|
71
|
+
early_stopping=early_stopping,
|
|
60
72
|
pad_token_id=getattr(self.tokenizer, "pad_token_id", None),
|
|
61
73
|
eos_token_id=getattr(self.tokenizer, "eos_token_id", None),
|
|
74
|
+
stopping_criteria=stopping_criteria,
|
|
62
75
|
streamer=streamer
|
|
63
76
|
)
|
|
64
77
|
|
|
@@ -114,7 +127,9 @@ class SummarizationTaskService(ModelTaskService):
|
|
|
114
127
|
return await SummarizationTaskAction(action, self.model, self.tokenizer, self.device).run(context, loop)
|
|
115
128
|
|
|
116
129
|
def _get_model_class(self) -> Type[PreTrainedModel]:
|
|
130
|
+
from transformers import AutoModelForSeq2SeqLM
|
|
117
131
|
return AutoModelForSeq2SeqLM
|
|
118
132
|
|
|
119
133
|
def _get_tokenizer_class(self) -> Type[PreTrainedTokenizer]:
|
|
134
|
+
from transformers import AutoTokenizer
|
|
120
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,13 +24,21 @@ 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)
|
|
32
|
+
min_output_length = await context.render_variable(self.config.params.min_output_length)
|
|
24
33
|
num_return_sequences = await context.render_variable(self.config.params.num_return_sequences)
|
|
34
|
+
do_sample = await context.render_variable(self.config.params.do_sample)
|
|
25
35
|
temperature = await context.render_variable(self.config.params.temperature)
|
|
26
36
|
top_k = await context.render_variable(self.config.params.top_k)
|
|
27
37
|
top_p = await context.render_variable(self.config.params.top_p)
|
|
38
|
+
num_beams = await context.render_variable(self.config.params.num_beams)
|
|
39
|
+
length_penalty = await context.render_variable(self.config.params.length_penalty) if num_beams > 1 else None
|
|
40
|
+
early_stopping = await context.render_variable(self.config.params.early_stopping) if num_beams > 1 else False
|
|
41
|
+
stop_sequences = await context.render_variable(self.config.params.stop_sequences)
|
|
28
42
|
batch_size = await context.render_variable(self.config.params.batch_size)
|
|
29
43
|
stream = await context.render_variable(self.config.stream)
|
|
30
44
|
|
|
@@ -36,6 +50,7 @@ class TextGenerationTaskAction:
|
|
|
36
50
|
raise ValueError("Streaming mode only supports a single input prompt with batch size of 1.")
|
|
37
51
|
|
|
38
52
|
streamer = TextIteratorStreamer(self.tokenizer, skip_prompt=True, skip_special_tokens=True) if stream else None
|
|
53
|
+
stopping_criteria = [ StopStringCriteria(self.tokenizer, stop_sequences) ] if stop_sequences else None
|
|
39
54
|
for index in range(0, len(prompts), batch_size):
|
|
40
55
|
batch_prompts = prompts[index:index + batch_size]
|
|
41
56
|
inputs: Dict[str, Tensor] = self.tokenizer(batch_prompts, return_tensors="pt", padding=True, truncation=True)
|
|
@@ -46,11 +61,18 @@ class TextGenerationTaskAction:
|
|
|
46
61
|
outputs = self.model.generate(
|
|
47
62
|
**inputs,
|
|
48
63
|
max_new_tokens=max_output_length,
|
|
64
|
+
min_length=min_output_length,
|
|
49
65
|
num_return_sequences=num_return_sequences,
|
|
66
|
+
do_sample=do_sample,
|
|
50
67
|
temperature=temperature,
|
|
51
|
-
do_sample=True,
|
|
52
68
|
top_k=top_k,
|
|
53
69
|
top_p=top_p,
|
|
70
|
+
num_beams=num_beams,
|
|
71
|
+
length_penalty=length_penalty,
|
|
72
|
+
early_stopping=early_stopping,
|
|
73
|
+
pad_token_id=getattr(self.tokenizer, "pad_token_id", None),
|
|
74
|
+
eos_token_id=getattr(self.tokenizer, "eos_token_id", None),
|
|
75
|
+
stopping_criteria=stopping_criteria,
|
|
54
76
|
streamer=streamer
|
|
55
77
|
)
|
|
56
78
|
|
|
@@ -106,7 +128,9 @@ class TextGenerationTaskService(ModelTaskService):
|
|
|
106
128
|
return await TextGenerationTaskAction(action, self.model, self.tokenizer, self.device).run(context, loop)
|
|
107
129
|
|
|
108
130
|
def _get_model_class(self) -> Type[PreTrainedModel]:
|
|
131
|
+
from transformers import AutoModelForCausalLM
|
|
109
132
|
return AutoModelForCausalLM
|
|
110
133
|
|
|
111
134
|
def _get_tokenizer_class(self) -> Type[PreTrainedTokenizer]:
|
|
135
|
+
from transformers import AutoTokenizer
|
|
112
136
|
return AutoTokenizer
|