model-compose 0.3.14__tar.gz → 0.3.15__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 → model_compose-0.3.15}/PKG-INFO +1 -1
- {model_compose-0.3.14 → model_compose-0.3.15}/pyproject.toml +1 -1
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/base.py +7 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/http_server.py +10 -1
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/model/base.py +14 -11
- model_compose-0.3.15/src/mindor/core/component/services/model/loader.py +25 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/model/tasks/image_to_text.py +30 -4
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/model/tasks/summarization.py +13 -8
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/model/tasks/text_generation.py +16 -2
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/model/tasks/translation.py +13 -8
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/services/async_service.py +14 -1
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/utils/shell.py +6 -14
- model_compose-0.3.15/src/mindor/dsl/schema/action/impl/common.py +7 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/http_client.py +19 -19
- {model_compose-0.3.14 → model_compose-0.3.15}/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.15/src/mindor/dsl/schema/action}/impl/model/impl/__init__.py +1 -0
- model_compose-0.3.15/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +41 -0
- model_compose-0.3.15/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +24 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/model/impl/summarization.py +7 -4
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +9 -3
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/model/impl/translation.py +8 -5
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/vector_store/impl/common.py +10 -10
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/http_client.py +2 -2
- {model_compose-0.3.14 → model_compose-0.3.15}/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.15/src/mindor/dsl/schema/component}/impl/model/impl/__init__.py +1 -0
- model_compose-0.3.15/src/mindor/dsl/schema/component/impl/model/impl/chat_completion.py +17 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/model/impl/common.py +9 -4
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/vector_store/impl/common.py +1 -1
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/compose.py +5 -5
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/controller/webui/impl/common.py +1 -1
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/gateway/impl/common.py +3 -3
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/common.py +1 -1
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/job/impl/random_router.py +3 -3
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/listener/impl/common.py +3 -3
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/listener/impl/http_callback.py +10 -10
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/logger/impl/common.py +2 -2
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/logger/impl/file.py +1 -1
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/runtime/impl/common.py +1 -1
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/workflow.py +2 -2
- {model_compose-0.3.14 → model_compose-0.3.15}/src/model_compose.egg-info/PKG-INFO +1 -1
- {model_compose-0.3.14 → model_compose-0.3.15}/src/model_compose.egg-info/SOURCES.txt +3 -0
- 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.15}/LICENSE +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/README.md +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/setup.cfg +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/cli/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/cli/compose.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/component.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/context.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/http_client.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/mcp_client.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/mcp_server.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/model/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/model/model.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/model/tasks/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/model/tasks/text_classification.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/model/tasks/text_embedding.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/shell.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/text_splitter.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/vector_store/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/vector_store/base.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/vector_store/drivers/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/vector_store/drivers/chroma.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/vector_store/drivers/milvus.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/vector_store/vector_store.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/component/services/workflow.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/compose/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/compose/compose.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/compose/manager.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/base.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/controller.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/runner/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/runner/client.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/runner/http_client.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/runner/mcp_client.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/runner/runner.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/runtime/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/runtime/docker/context/Dockerfile +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/runtime/docker/docker.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/runtime/native/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/runtime/native/native.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/runtime/specs.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/services/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/services/http_server.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/services/mcp_server.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/webui/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/webui/gradio.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/controller/webui/webui.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/gateway/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/gateway/base.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/gateway/gateway.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/gateway/services/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/gateway/services/http_tunnel.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/gateway/services/ssh_tunnel.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/listener/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/listener/base.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/listener/listener.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/listener/services/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/listener/services/http_callback.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/logger/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/logger/base.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/logger/logger.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/logger/logging.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/logger/services/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/logger/services/console.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/logger/services/file.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/runtime/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/runtime/docker/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/runtime/docker/docker.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/runtime/env.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/services/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/utils/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/utils/caching.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/utils/http_client.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/utils/http_request.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/utils/http_response.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/utils/http_status.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/utils/image.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/utils/mcp_client.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/utils/renderers.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/utils/resolvers.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/utils/ssh_client.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/utils/streamer.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/utils/streaming.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/utils/time.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/utils/workqueue.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/workflow/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/workflow/context.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/workflow/job/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/workflow/job/base.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/workflow/job/impl/action.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/workflow/job/impl/delay.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/workflow/job/impl/filter.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/workflow/job/impl/if_.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/workflow/job/impl/random_router.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/workflow/job/impl/switch.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/workflow/job/job.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/workflow/schema.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/core/workflow/workflow.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/loader.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/action.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/model/impl/common.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/model/model.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/text_splitter.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/vector_store/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/vector_store/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/vector_store/impl/chroma.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/vector_store/impl/faiss.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/vector_store/impl/milvus.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/vector_store/impl/qdrant.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/vector_store/vector_store.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/component.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/common.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/model/impl/image_to_text.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/model/impl/summarization.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/model/impl/translation.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/model/impl/types.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/model/model.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/text_splitter.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/types.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/vector_store/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/vector_store/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/vector_store/impl/chroma.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/vector_store/impl/faiss.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/vector_store/impl/milvus.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/vector_store/impl/types.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/vector_store/vector_store.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/controller/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/controller/controller.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/controller/impl/common.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/controller/impl/http_server.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/controller/impl/mcp_server.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/controller/impl/types.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/controller/webui/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/controller/webui/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/controller/webui/impl/gradio.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/controller/webui/impl/static.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/controller/webui/webui.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/gateway/impl/http_tunnel/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/gateway/impl/http_tunnel/http_tunnel.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/cloudflare.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/ngrok.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/job/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/job/impl/action.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/job/impl/common.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/job/impl/filter.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/job/impl/types.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/job/job.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/listener/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/listener/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/listener/impl/types.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/listener/listener.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/logger/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/logger/logger.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/transport/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/transport/http.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/transport/ssh.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/utils/__init__.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/utils/annotation.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/utils/enum.py +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/model_compose.egg-info/dependency_links.txt +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/model_compose.egg-info/entry_points.txt +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/model_compose.egg-info/requires.txt +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/src/model_compose.egg-info/top_level.txt +0 -0
- {model_compose-0.3.14 → model_compose-0.3.15}/tests/test_cli.py +0 -0
|
@@ -64,6 +64,10 @@ class ComponentService(AsyncService):
|
|
|
64
64
|
async def teardown(self) -> None:
|
|
65
65
|
await self._teardown()
|
|
66
66
|
|
|
67
|
+
async def start(self, background: bool = False) -> None:
|
|
68
|
+
await super().start(background)
|
|
69
|
+
await self.wait_until_ready()
|
|
70
|
+
|
|
67
71
|
async def run(self, action_id: Union[str, None], run_id: str, input: Dict[str, Any]) -> Dict[str, Any]:
|
|
68
72
|
_, action = ActionResolver(self.config.actions).resolve(action_id)
|
|
69
73
|
context = ComponentActionContext(run_id, input)
|
|
@@ -97,6 +101,9 @@ class ComponentService(AsyncService):
|
|
|
97
101
|
async def _shutdown(self) -> None:
|
|
98
102
|
pass
|
|
99
103
|
|
|
104
|
+
async def _is_ready(self) -> bool:
|
|
105
|
+
return True
|
|
106
|
+
|
|
100
107
|
@abstractmethod
|
|
101
108
|
async def _run(self, action: ActionConfig, context: ComponentActionContext) -> Any:
|
|
102
109
|
pass
|
{model_compose-0.3.14 → model_compose-0.3.15}/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.15}/src/mindor/core/component/services/model/base.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Any
|
|
2
2
|
from abc import ABC, abstractmethod
|
|
3
|
-
from mindor.dsl.schema.component import ModelComponentConfig, ModelTaskType, DeviceMode
|
|
3
|
+
from mindor.dsl.schema.component import ModelComponentConfig, ModelTaskType, ModelSourceConfig, DeviceMode
|
|
4
4
|
from mindor.dsl.schema.action import ModelActionConfig
|
|
5
5
|
from mindor.core.services import AsyncService
|
|
6
6
|
from ...context import ComponentActionContext
|
|
@@ -26,7 +26,7 @@ class ModelTaskService(AsyncService):
|
|
|
26
26
|
async def _run(self, action: ModelActionConfig, context: ComponentActionContext, loop: asyncio.AbstractEventLoop) -> Any:
|
|
27
27
|
pass
|
|
28
28
|
|
|
29
|
-
def _load_pretrained_model(self, extra_params: Optional[Dict[str, Any]] = None) -> PreTrainedModel:
|
|
29
|
+
def _load_pretrained_model(self, extra_params: Optional[Dict[str, Any]] = None) -> Union[PreTrainedModel, torch.nn.Module]:
|
|
30
30
|
params = self._get_common_model_params()
|
|
31
31
|
|
|
32
32
|
if extra_params:
|
|
@@ -42,6 +42,10 @@ class ModelTaskService(AsyncService):
|
|
|
42
42
|
def _get_common_model_params(self) -> Dict[str, Any]:
|
|
43
43
|
params: Dict[str, Any] = {}
|
|
44
44
|
|
|
45
|
+
if isinstance(self.config.model, ModelSourceConfig):
|
|
46
|
+
if self.config.model.revision:
|
|
47
|
+
params["revision"] = self.config.model.revision
|
|
48
|
+
|
|
45
49
|
if self.config.device_mode != DeviceMode.SINGLE:
|
|
46
50
|
params["device_map"] = self.config.device_mode.value
|
|
47
51
|
|
|
@@ -51,9 +55,6 @@ class ModelTaskService(AsyncService):
|
|
|
51
55
|
if self.config.low_cpu_mem_usage:
|
|
52
56
|
params["low_cpu_mem_usage"] = True
|
|
53
57
|
|
|
54
|
-
if self.config.revision:
|
|
55
|
-
params["revision"] = self.config.revision
|
|
56
|
-
|
|
57
58
|
if self.config.cache_dir:
|
|
58
59
|
params["cache_dir"] = self.config.cache_dir
|
|
59
60
|
|
|
@@ -75,12 +76,13 @@ class ModelTaskService(AsyncService):
|
|
|
75
76
|
|
|
76
77
|
def _get_common_tokenizer_params(self) -> Dict[str, Any]:
|
|
77
78
|
params: Dict[str, Any] = {}
|
|
79
|
+
|
|
80
|
+
if isinstance(self.config.model, ModelSourceConfig):
|
|
81
|
+
if self.config.model.revision:
|
|
82
|
+
params["revision"] = self.config.model.revision
|
|
78
83
|
|
|
79
84
|
if not self.config.fast_tokenizer:
|
|
80
85
|
params["use_fast"] = False
|
|
81
|
-
|
|
82
|
-
if self.config.revision:
|
|
83
|
-
params["revision"] = self.config.revision
|
|
84
86
|
|
|
85
87
|
if self.config.cache_dir:
|
|
86
88
|
params["cache_dir"] = self.config.cache_dir
|
|
@@ -104,9 +106,10 @@ class ModelTaskService(AsyncService):
|
|
|
104
106
|
def _get_common_processor_params(self) -> Dict[str, Any]:
|
|
105
107
|
params: Dict[str, Any] = {}
|
|
106
108
|
|
|
107
|
-
if self.config.
|
|
108
|
-
|
|
109
|
-
|
|
109
|
+
if isinstance(self.config.model, ModelSourceConfig):
|
|
110
|
+
if self.config.model.revision:
|
|
111
|
+
params["revision"] = self.config.model.revision
|
|
112
|
+
|
|
110
113
|
if self.config.cache_dir:
|
|
111
114
|
params["cache_dir"] = self.config.cache_dir
|
|
112
115
|
|
|
@@ -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
|
|
@@ -5,7 +5,7 @@ from mindor.core.utils.streamer import AsyncStreamer
|
|
|
5
5
|
from mindor.core.logger import logging
|
|
6
6
|
from ..base import ModelTaskService, ModelTaskType, register_model_task_service
|
|
7
7
|
from ..base import ComponentActionContext
|
|
8
|
-
from transformers import PreTrainedModel, PreTrainedTokenizer, ProcessorMixin, GenerationMixin, TextIteratorStreamer
|
|
8
|
+
from transformers import PreTrainedModel, PreTrainedTokenizer, ProcessorMixin, GenerationMixin, TextIteratorStreamer, StopStringCriteria
|
|
9
9
|
from PIL import Image as PILImage
|
|
10
10
|
from threading import Thread
|
|
11
11
|
from torch import Tensor
|
|
@@ -25,8 +25,20 @@ class ImageToTextTaskAction:
|
|
|
25
25
|
image: Union[PILImage.Image, List[PILImage.Image]] = await context.render_image(self.config.image)
|
|
26
26
|
prompt: Optional[Union[str, List[str]]] = await context.render_variable(self.config.prompt)
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
max_input_length = await context.render_variable(self.config.params.max_input_length)
|
|
29
|
+
max_output_length = await context.render_variable(self.config.params.max_output_length)
|
|
30
|
+
min_output_length = await context.render_variable(self.config.params.min_output_length)
|
|
31
|
+
num_return_sequences = await context.render_variable(self.config.params.num_return_sequences)
|
|
32
|
+
do_sample = await context.render_variable(self.config.params.do_sample)
|
|
33
|
+
temperature = await context.render_variable(self.config.params.temperature) if do_sample else None
|
|
34
|
+
top_k = await context.render_variable(self.config.params.top_k) if do_sample else None
|
|
35
|
+
top_p = await context.render_variable(self.config.params.top_p) if do_sample else None
|
|
36
|
+
num_beams = await context.render_variable(self.config.params.num_beams)
|
|
37
|
+
length_penalty = await context.render_variable(self.config.params.length_penalty) if num_beams > 1 else None
|
|
38
|
+
early_stopping = await context.render_variable(self.config.params.early_stopping) if num_beams > 1 else False
|
|
39
|
+
stop_sequences = await context.render_variable(self.config.params.stop_sequences)
|
|
40
|
+
batch_size = await context.render_variable(self.config.params.batch_size)
|
|
41
|
+
stream = await context.render_variable(self.config.stream)
|
|
30
42
|
|
|
31
43
|
is_single_input: bool = bool(not isinstance(images, list))
|
|
32
44
|
images: List[PILImage.Image] = [ image ] if is_single_input else image
|
|
@@ -37,17 +49,31 @@ class ImageToTextTaskAction:
|
|
|
37
49
|
raise ValueError("Streaming mode only supports a single input image with batch size of 1.")
|
|
38
50
|
|
|
39
51
|
streamer = TextIteratorStreamer(self.processor.tokenizer, skip_prompt=True, skip_special_tokens=True) if stream else None
|
|
52
|
+
stopping_criteria = [ StopStringCriteria(self.processor.tokenizer, stop_sequences) ] if stop_sequences else None
|
|
40
53
|
for index in range(0, len(images), batch_size):
|
|
41
54
|
batch_images = images[index:index + batch_size]
|
|
42
55
|
batch_prompts = prompts[index:index + batch_size] if prompts else None
|
|
43
56
|
|
|
44
|
-
inputs: Tensor = self.processor(images=batch_images, text=batch_prompts, return_tensors="pt")
|
|
57
|
+
inputs: Tensor = self.processor(images=batch_images, text=batch_prompts, max_length=max_input_length, return_tensors="pt")
|
|
45
58
|
inputs = inputs.to(self.device)
|
|
46
59
|
|
|
47
60
|
def _generate():
|
|
48
61
|
with torch.inference_mode():
|
|
49
62
|
outputs = self.model.generate(
|
|
50
63
|
**inputs,
|
|
64
|
+
max_new_tokens=max_output_length,
|
|
65
|
+
min_length=min_output_length,
|
|
66
|
+
num_return_sequences=num_return_sequences,
|
|
67
|
+
do_sample=do_sample,
|
|
68
|
+
temperature=temperature,
|
|
69
|
+
top_k=top_k,
|
|
70
|
+
top_p=top_p,
|
|
71
|
+
num_beams=num_beams,
|
|
72
|
+
length_penalty=length_penalty,
|
|
73
|
+
early_stopping=early_stopping,
|
|
74
|
+
pad_token_id=getattr(self.processor.tokenizer, "pad_token_id", None),
|
|
75
|
+
eos_token_id=getattr(self.processor.tokenizer, "eos_token_id", None),
|
|
76
|
+
stopping_criteria=stopping_criteria,
|
|
51
77
|
streamer=streamer
|
|
52
78
|
)
|
|
53
79
|
|
|
@@ -5,7 +5,7 @@ from mindor.core.utils.streamer import AsyncStreamer
|
|
|
5
5
|
from mindor.core.logger import logging
|
|
6
6
|
from ..base import ModelTaskService, ModelTaskType, register_model_task_service
|
|
7
7
|
from ..base import ComponentActionContext
|
|
8
|
-
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, PreTrainedModel, PreTrainedTokenizer, GenerationMixin, TextIteratorStreamer
|
|
8
|
+
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, PreTrainedModel, PreTrainedTokenizer, GenerationMixin, TextIteratorStreamer, StopStringCriteria
|
|
9
9
|
from threading import Thread
|
|
10
10
|
from torch import Tensor
|
|
11
11
|
import torch, asyncio
|
|
@@ -23,12 +23,14 @@ class SummarizationTaskAction:
|
|
|
23
23
|
max_input_length = await context.render_variable(self.config.params.max_input_length)
|
|
24
24
|
max_output_length = await context.render_variable(self.config.params.max_output_length)
|
|
25
25
|
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
26
|
do_sample = await context.render_variable(self.config.params.do_sample)
|
|
27
|
+
temperature = await context.render_variable(self.config.params.temperature) if do_sample else None
|
|
30
28
|
top_k = await context.render_variable(self.config.params.top_k) if do_sample else None
|
|
31
29
|
top_p = await context.render_variable(self.config.params.top_p) if do_sample else None
|
|
30
|
+
num_beams = await context.render_variable(self.config.params.num_beams)
|
|
31
|
+
length_penalty = await context.render_variable(self.config.params.length_penalty) if num_beams > 1 else None
|
|
32
|
+
early_stopping = await context.render_variable(self.config.params.early_stopping) if num_beams > 1 else False
|
|
33
|
+
stop_sequences = await context.render_variable(self.config.params.stop_sequences)
|
|
32
34
|
batch_size = await context.render_variable(self.config.params.batch_size)
|
|
33
35
|
stream = await context.render_variable(self.config.stream)
|
|
34
36
|
|
|
@@ -40,6 +42,7 @@ class SummarizationTaskAction:
|
|
|
40
42
|
raise ValueError("Streaming mode only supports a single input text with batch size of 1.")
|
|
41
43
|
|
|
42
44
|
streamer = TextIteratorStreamer(self.tokenizer, skip_prompt=True, skip_special_tokens=True) if stream else None
|
|
45
|
+
stopping_criteria = [ StopStringCriteria(self.tokenizer, stop_sequences) ] if stop_sequences else None
|
|
43
46
|
for index in range(0, len(texts), batch_size):
|
|
44
47
|
batch_texts = texts[index:index + batch_size]
|
|
45
48
|
inputs: Dict[str, Tensor] = self.tokenizer(batch_texts, return_tensors="pt", max_length=max_input_length, padding=True, truncation=True)
|
|
@@ -49,16 +52,18 @@ class SummarizationTaskAction:
|
|
|
49
52
|
with torch.inference_mode():
|
|
50
53
|
outputs = self.model.generate(
|
|
51
54
|
**inputs,
|
|
52
|
-
|
|
55
|
+
max_new_tokens=max_output_length,
|
|
53
56
|
min_length=min_output_length,
|
|
54
|
-
num_beams=num_beams,
|
|
55
|
-
length_penalty=length_penalty,
|
|
56
|
-
early_stopping=early_stopping,
|
|
57
57
|
do_sample=do_sample,
|
|
58
|
+
temperature=temperature,
|
|
58
59
|
top_k=top_k,
|
|
59
60
|
top_p=top_p,
|
|
61
|
+
num_beams=num_beams,
|
|
62
|
+
length_penalty=length_penalty,
|
|
63
|
+
early_stopping=early_stopping,
|
|
60
64
|
pad_token_id=getattr(self.tokenizer, "pad_token_id", None),
|
|
61
65
|
eos_token_id=getattr(self.tokenizer, "eos_token_id", None),
|
|
66
|
+
stopping_criteria=stopping_criteria,
|
|
62
67
|
streamer=streamer
|
|
63
68
|
)
|
|
64
69
|
|
|
@@ -5,7 +5,7 @@ from mindor.core.utils.streamer import AsyncStreamer
|
|
|
5
5
|
from mindor.core.logger import logging
|
|
6
6
|
from ..base import ModelTaskService, ModelTaskType, register_model_task_service
|
|
7
7
|
from ..base import ComponentActionContext
|
|
8
|
-
from transformers import AutoModelForCausalLM, AutoTokenizer, PreTrainedModel, PreTrainedTokenizer, GenerationMixin, TextIteratorStreamer
|
|
8
|
+
from transformers import AutoModelForCausalLM, AutoTokenizer, PreTrainedModel, PreTrainedTokenizer, GenerationMixin, TextIteratorStreamer, StopStringCriteria
|
|
9
9
|
from threading import Thread
|
|
10
10
|
from torch import Tensor
|
|
11
11
|
import torch, asyncio
|
|
@@ -21,10 +21,16 @@ class TextGenerationTaskAction:
|
|
|
21
21
|
prompt: Union[str, List[str]] = await context.render_variable(self.config.prompt)
|
|
22
22
|
|
|
23
23
|
max_output_length = await context.render_variable(self.config.params.max_output_length)
|
|
24
|
+
min_output_length = await context.render_variable(self.config.params.min_output_length)
|
|
24
25
|
num_return_sequences = await context.render_variable(self.config.params.num_return_sequences)
|
|
26
|
+
do_sample = await context.render_variable(self.config.params.do_sample)
|
|
25
27
|
temperature = await context.render_variable(self.config.params.temperature)
|
|
26
28
|
top_k = await context.render_variable(self.config.params.top_k)
|
|
27
29
|
top_p = await context.render_variable(self.config.params.top_p)
|
|
30
|
+
num_beams = await context.render_variable(self.config.params.num_beams)
|
|
31
|
+
length_penalty = await context.render_variable(self.config.params.length_penalty) if num_beams > 1 else None
|
|
32
|
+
early_stopping = await context.render_variable(self.config.params.early_stopping) if num_beams > 1 else False
|
|
33
|
+
stop_sequences = await context.render_variable(self.config.params.stop_sequences)
|
|
28
34
|
batch_size = await context.render_variable(self.config.params.batch_size)
|
|
29
35
|
stream = await context.render_variable(self.config.stream)
|
|
30
36
|
|
|
@@ -36,6 +42,7 @@ class TextGenerationTaskAction:
|
|
|
36
42
|
raise ValueError("Streaming mode only supports a single input prompt with batch size of 1.")
|
|
37
43
|
|
|
38
44
|
streamer = TextIteratorStreamer(self.tokenizer, skip_prompt=True, skip_special_tokens=True) if stream else None
|
|
45
|
+
stopping_criteria = [ StopStringCriteria(self.tokenizer, stop_sequences) ] if stop_sequences else None
|
|
39
46
|
for index in range(0, len(prompts), batch_size):
|
|
40
47
|
batch_prompts = prompts[index:index + batch_size]
|
|
41
48
|
inputs: Dict[str, Tensor] = self.tokenizer(batch_prompts, return_tensors="pt", padding=True, truncation=True)
|
|
@@ -46,11 +53,18 @@ class TextGenerationTaskAction:
|
|
|
46
53
|
outputs = self.model.generate(
|
|
47
54
|
**inputs,
|
|
48
55
|
max_new_tokens=max_output_length,
|
|
56
|
+
min_length=min_output_length,
|
|
49
57
|
num_return_sequences=num_return_sequences,
|
|
58
|
+
do_sample=do_sample,
|
|
50
59
|
temperature=temperature,
|
|
51
|
-
do_sample=True,
|
|
52
60
|
top_k=top_k,
|
|
53
61
|
top_p=top_p,
|
|
62
|
+
num_beams=num_beams,
|
|
63
|
+
length_penalty=length_penalty,
|
|
64
|
+
early_stopping=early_stopping,
|
|
65
|
+
pad_token_id=getattr(self.tokenizer, "pad_token_id", None),
|
|
66
|
+
eos_token_id=getattr(self.tokenizer, "eos_token_id", None),
|
|
67
|
+
stopping_criteria=stopping_criteria,
|
|
54
68
|
streamer=streamer
|
|
55
69
|
)
|
|
56
70
|
|
|
@@ -5,7 +5,7 @@ from mindor.core.utils.streamer import AsyncStreamer
|
|
|
5
5
|
from mindor.core.logger import logging
|
|
6
6
|
from ..base import ModelTaskService, ModelTaskType, register_model_task_service
|
|
7
7
|
from ..base import ComponentActionContext
|
|
8
|
-
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, PreTrainedModel, PreTrainedTokenizer, GenerationMixin, TextIteratorStreamer
|
|
8
|
+
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, PreTrainedModel, PreTrainedTokenizer, GenerationMixin, TextIteratorStreamer, StopStringCriteria
|
|
9
9
|
from threading import Thread
|
|
10
10
|
from torch import Tensor
|
|
11
11
|
import torch, asyncio
|
|
@@ -23,12 +23,14 @@ class TranslationTaskAction:
|
|
|
23
23
|
max_input_length = await context.render_variable(self.config.params.max_input_length)
|
|
24
24
|
max_output_length = await context.render_variable(self.config.params.max_output_length)
|
|
25
25
|
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
26
|
do_sample = await context.render_variable(self.config.params.do_sample)
|
|
27
|
+
temperature = await context.render_variable(self.config.params.temperature) if do_sample else None
|
|
30
28
|
top_k = await context.render_variable(self.config.params.top_k) if do_sample else None
|
|
31
29
|
top_p = await context.render_variable(self.config.params.top_p) if do_sample else None
|
|
30
|
+
num_beams = await context.render_variable(self.config.params.num_beams)
|
|
31
|
+
length_penalty = await context.render_variable(self.config.params.length_penalty) if num_beams > 1 else None
|
|
32
|
+
early_stopping = await context.render_variable(self.config.params.early_stopping) if num_beams > 1 else False
|
|
33
|
+
stop_sequences = await context.render_variable(self.config.params.stop_sequences)
|
|
32
34
|
batch_size = await context.render_variable(self.config.params.batch_size)
|
|
33
35
|
stream = await context.render_variable(self.config.stream)
|
|
34
36
|
|
|
@@ -40,6 +42,7 @@ class TranslationTaskAction:
|
|
|
40
42
|
raise ValueError("Streaming mode only supports a single input text with batch size of 1.")
|
|
41
43
|
|
|
42
44
|
streamer = TextIteratorStreamer(self.tokenizer, skip_prompt=True, skip_special_tokens=True) if stream else None
|
|
45
|
+
stopping_criteria = [ StopStringCriteria(self.tokenizer, stop_sequences) ] if stop_sequences else None
|
|
43
46
|
for index in range(0, len(texts), batch_size):
|
|
44
47
|
batch_texts = texts[index:index + batch_size]
|
|
45
48
|
inputs: Dict[str, Tensor] = self.tokenizer(batch_texts, return_tensors="pt", max_length=max_input_length, padding=True, truncation=True)
|
|
@@ -49,16 +52,18 @@ class TranslationTaskAction:
|
|
|
49
52
|
with torch.inference_mode():
|
|
50
53
|
outputs = self.model.generate(
|
|
51
54
|
**inputs,
|
|
52
|
-
|
|
55
|
+
max_new_tokens=max_output_length,
|
|
53
56
|
min_length=min_output_length,
|
|
54
|
-
num_beams=num_beams,
|
|
55
|
-
length_penalty=length_penalty,
|
|
56
|
-
early_stopping=early_stopping,
|
|
57
57
|
do_sample=do_sample,
|
|
58
|
+
temperature=temperature,
|
|
58
59
|
top_k=top_k,
|
|
59
60
|
top_p=top_p,
|
|
61
|
+
num_beams=num_beams,
|
|
62
|
+
length_penalty=length_penalty,
|
|
63
|
+
early_stopping=early_stopping,
|
|
60
64
|
pad_token_id=getattr(self.tokenizer, "pad_token_id", None),
|
|
61
65
|
eos_token_id=getattr(self.tokenizer, "eos_token_id", None),
|
|
66
|
+
stopping_criteria=stopping_criteria,
|
|
62
67
|
streamer=streamer
|
|
63
68
|
)
|
|
64
69
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from typing import Optional, Callable, Awaitable, Any
|
|
2
2
|
from abc import ABC, abstractmethod
|
|
3
3
|
from threading import Thread
|
|
4
|
-
import asyncio
|
|
4
|
+
import asyncio, time
|
|
5
5
|
|
|
6
6
|
class AsyncService(ABC):
|
|
7
7
|
def __init__(self, daemon: bool):
|
|
@@ -35,6 +35,16 @@ class AsyncService(ABC):
|
|
|
35
35
|
else:
|
|
36
36
|
await self._stop()
|
|
37
37
|
|
|
38
|
+
async def wait_until_ready(self, timeout: int = 0) -> None:
|
|
39
|
+
start_time = time.monotonic()
|
|
40
|
+
|
|
41
|
+
while timeout <= 0 or time.monotonic() - start_time < timeout:
|
|
42
|
+
if await self._is_ready():
|
|
43
|
+
return
|
|
44
|
+
await asyncio.sleep(0.5)
|
|
45
|
+
|
|
46
|
+
raise TimeoutError(f"Service did not become ready within {timeout} seconds.")
|
|
47
|
+
|
|
38
48
|
async def wait_until_stopped(self) -> None:
|
|
39
49
|
if self.thread:
|
|
40
50
|
self.thread.join()
|
|
@@ -81,6 +91,9 @@ class AsyncService(ABC):
|
|
|
81
91
|
|
|
82
92
|
self.started = False
|
|
83
93
|
|
|
94
|
+
async def _is_ready(self) -> bool:
|
|
95
|
+
return True
|
|
96
|
+
|
|
84
97
|
async def _on_stop(self) -> None:
|
|
85
98
|
pass
|
|
86
99
|
|
|
@@ -5,8 +5,7 @@ import asyncio, os
|
|
|
5
5
|
async def run_command_streaming(
|
|
6
6
|
command: List[str],
|
|
7
7
|
working_dir: Optional[str] = None,
|
|
8
|
-
env: Dict[str, str] = None
|
|
9
|
-
block: bool = True
|
|
8
|
+
env: Dict[str, str] = None
|
|
10
9
|
) -> None:
|
|
11
10
|
process = await asyncio.create_subprocess_exec(
|
|
12
11
|
*command,
|
|
@@ -23,18 +22,11 @@ async def run_command_streaming(
|
|
|
23
22
|
break
|
|
24
23
|
print(line.decode().rstrip())
|
|
25
24
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
await stderr_task
|
|
32
|
-
else:
|
|
33
|
-
await asyncio.gather(
|
|
34
|
-
_stream_output(process.stdout),
|
|
35
|
-
_stream_output(process.stderr),
|
|
36
|
-
process.wait()
|
|
37
|
-
)
|
|
25
|
+
await asyncio.gather(
|
|
26
|
+
_stream_output(process.stdout),
|
|
27
|
+
_stream_output(process.stderr),
|
|
28
|
+
process.wait()
|
|
29
|
+
)
|
|
38
30
|
|
|
39
31
|
async def run_command(
|
|
40
32
|
command: List[str],
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
|
|
2
|
+
from pydantic import BaseModel, Field
|
|
3
|
+
|
|
4
|
+
class CommonActionConfig(BaseModel):
|
|
5
|
+
id: str = Field(default="__default__", description="ID of action.")
|
|
6
|
+
output: Optional[Any] = Field(default=None, description="Output mapping to transform and extract specific values from the action result.")
|
|
7
|
+
default: bool = Field(default=False, description="Whether this action should be used as the default.")
|
{model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/http_client.py
RENAMED
|
@@ -15,17 +15,17 @@ class HttpClientCommonCompletionConfig(BaseModel):
|
|
|
15
15
|
|
|
16
16
|
class HttpClientPollingCompletionConfig(HttpClientCommonCompletionConfig):
|
|
17
17
|
type: Literal[HttpClientCompletionType.POLLING]
|
|
18
|
-
endpoint: Optional[str] = Field(default=None, description="")
|
|
19
|
-
path: Optional[str] = Field(default=None, description="")
|
|
20
|
-
method: Literal[ "GET", "POST", "PUT", "DELETE", "PATCH" ] = Field(default="GET", description="")
|
|
21
|
-
headers: Dict[str, str] = Field(default_factory=dict, description="")
|
|
22
|
-
body: Dict[str, Any] = Field(default_factory=dict, description="")
|
|
23
|
-
params: Dict[str, str] = Field(default_factory=dict, description="")
|
|
24
|
-
status: Optional[str] = Field(default=None, description="")
|
|
25
|
-
success_when: Optional[List[Union[int, str]]] = Field(default=None, description="")
|
|
26
|
-
fail_when: Optional[List[Union[int, str]]] = Field(default=None, description="")
|
|
27
|
-
interval: Optional[str] = Field(default=None, description="")
|
|
28
|
-
timeout: Optional[str] = Field(default=None, description="")
|
|
18
|
+
endpoint: Optional[str] = Field(default=None, description="URL endpoint for polling requests.")
|
|
19
|
+
path: Optional[str] = Field(default=None, description="URL path to append to base_url for polling.")
|
|
20
|
+
method: Literal[ "GET", "POST", "PUT", "DELETE", "PATCH" ] = Field(default="GET", description="HTTP method for polling requests.")
|
|
21
|
+
headers: Dict[str, str] = Field(default_factory=dict, description="HTTP headers to include in polling requests.")
|
|
22
|
+
body: Dict[str, Any] = Field(default_factory=dict, description="Request body data for polling requests.")
|
|
23
|
+
params: Dict[str, str] = Field(default_factory=dict, description="URL query parameters for polling requests.")
|
|
24
|
+
status: Optional[str] = Field(default=None, description="Field path to check for completion status in polling response.")
|
|
25
|
+
success_when: Optional[List[Union[int, str]]] = Field(default=None, description="Status codes or values that indicate successful completion.")
|
|
26
|
+
fail_when: Optional[List[Union[int, str]]] = Field(default=None, description="Status codes or values that indicate failed completion.")
|
|
27
|
+
interval: Optional[str] = Field(default=None, description="Time interval between polling attempts.")
|
|
28
|
+
timeout: Optional[str] = Field(default=None, description="Maximum time to wait for completion before giving up.")
|
|
29
29
|
|
|
30
30
|
@model_validator(mode="before")
|
|
31
31
|
def validate_endpoint_or_path(cls, values: Dict[str, Any]):
|
|
@@ -42,7 +42,7 @@ class HttpClientPollingCompletionConfig(HttpClientCommonCompletionConfig):
|
|
|
42
42
|
|
|
43
43
|
class HttpClientCallbackCompletionConfig(HttpClientCommonCompletionConfig):
|
|
44
44
|
type: Literal[HttpClientCompletionType.CALLBACK]
|
|
45
|
-
wait_for: Optional[str] = Field(default=None, description="")
|
|
45
|
+
wait_for: Optional[str] = Field(default=None, description="Callback identifier to wait for in asynchronous completion mode")
|
|
46
46
|
|
|
47
47
|
HttpClientCompletionConfig = Annotated[
|
|
48
48
|
Union[
|
|
@@ -53,14 +53,14 @@ HttpClientCompletionConfig = Annotated[
|
|
|
53
53
|
]
|
|
54
54
|
|
|
55
55
|
class HttpClientActionConfig(CommonActionConfig):
|
|
56
|
-
endpoint: Optional[str] = Field(default=None, description="")
|
|
57
|
-
path: Optional[str] = Field(default=None, description="")
|
|
58
|
-
method: Literal[ "GET", "POST", "PUT", "DELETE", "PATCH" ] = Field(default="POST", description="")
|
|
59
|
-
headers: Dict[str, str] = Field(default_factory=dict, description="")
|
|
60
|
-
body: Dict[str, Any] = Field(default_factory=dict, description="")
|
|
61
|
-
params: Dict[str, str] = Field(default_factory=dict, description="")
|
|
56
|
+
endpoint: Optional[str] = Field(default=None, description="Full URL endpoint for the HTTP request (mutually exclusive with path)")
|
|
57
|
+
path: Optional[str] = Field(default=None, description="URL path to append to base_url (mutually exclusive with endpoint)")
|
|
58
|
+
method: Literal[ "GET", "POST", "PUT", "DELETE", "PATCH" ] = Field(default="POST", description="HTTP method to use for the request")
|
|
59
|
+
headers: Dict[str, str] = Field(default_factory=dict, description="HTTP headers to include in the request")
|
|
60
|
+
body: Dict[str, Any] = Field(default_factory=dict, description="Request body data to send with the HTTP request")
|
|
61
|
+
params: Dict[str, str] = Field(default_factory=dict, description="URL query parameters to append to the request")
|
|
62
62
|
stream_format: Optional[HttpStreamFormat] = Field(default=None, description="Format of stream payload.")
|
|
63
|
-
completion: Optional[HttpClientCompletionConfig] = Field(default=None, description="")
|
|
63
|
+
completion: Optional[HttpClientCompletionConfig] = Field(default=None, description="Configuration for handling asynchronous request completion via polling or callbacks")
|
|
64
64
|
|
|
65
65
|
@model_validator(mode="before")
|
|
66
66
|
def validate_endpoint_or_path(cls, values: Dict[str, Any]):
|
{model_compose-0.3.14 → model_compose-0.3.15}/src/mindor/dsl/schema/action/impl/http_server.py
RENAMED
|
@@ -15,16 +15,16 @@ class HttpServerCommonCompletionConfig(BaseModel):
|
|
|
15
15
|
|
|
16
16
|
class HttpServerPollingCompletionConfig(HttpServerCommonCompletionConfig):
|
|
17
17
|
type: Literal[HttpServerCompletionType.POLLING]
|
|
18
|
-
path: Optional[str] = Field(default=None, description="")
|
|
19
|
-
method: Literal[ "GET", "POST", "PUT", "DELETE", "PATCH" ] = Field(default="GET", description="")
|
|
20
|
-
headers: Dict[str, str] = Field(default_factory=dict, description="")
|
|
21
|
-
body: Dict[str, Any] = Field(default_factory=dict, description="")
|
|
22
|
-
params: Dict[str, str] = Field(default_factory=dict, description="")
|
|
23
|
-
status: Optional[str] = Field(default=None, description="")
|
|
24
|
-
success_when: Optional[List[Union[int, str]]] = Field(default=None, description="")
|
|
25
|
-
fail_when: Optional[List[Union[int, str]]] = Field(default=None, description="")
|
|
26
|
-
interval: Optional[str] = Field(default=None, description="")
|
|
27
|
-
timeout: Optional[str] = Field(default=None, description="")
|
|
18
|
+
path: Optional[str] = Field(default=None, description="URL path for the polling endpoint to check completion status.")
|
|
19
|
+
method: Literal[ "GET", "POST", "PUT", "DELETE", "PATCH" ] = Field(default="GET", description="HTTP method for polling completion status.")
|
|
20
|
+
headers: Dict[str, str] = Field(default_factory=dict, description="HTTP headers to include in polling requests.")
|
|
21
|
+
body: Dict[str, Any] = Field(default_factory=dict, description="Request body data for polling requests.")
|
|
22
|
+
params: Dict[str, str] = Field(default_factory=dict, description="URL query parameters for polling requests.")
|
|
23
|
+
status: Optional[str] = Field(default=None, description="Field path to check for completion status in polling response.")
|
|
24
|
+
success_when: Optional[List[Union[int, str]]] = Field(default=None, description="Status codes or values that indicate successful completion.")
|
|
25
|
+
fail_when: Optional[List[Union[int, str]]] = Field(default=None, description="Status codes or values that indicate failed completion.")
|
|
26
|
+
interval: Optional[str] = Field(default=None, description="Time interval between polling attempts.")
|
|
27
|
+
timeout: Optional[str] = Field(default=None, description="Maximum time to wait for completion before giving up.")
|
|
28
28
|
|
|
29
29
|
@model_validator(mode="before")
|
|
30
30
|
def normalize_status_fields(cls, values: Dict[str, Any]):
|
|
@@ -35,7 +35,7 @@ class HttpServerPollingCompletionConfig(HttpServerCommonCompletionConfig):
|
|
|
35
35
|
|
|
36
36
|
class HttpServerCallbackCompletionConfig(HttpServerCommonCompletionConfig):
|
|
37
37
|
type: Literal[HttpServerCompletionType.CALLBACK]
|
|
38
|
-
wait_for: Optional[str] = Field(default=None, description="")
|
|
38
|
+
wait_for: Optional[str] = Field(default=None, description="Callback identifier to wait for in asynchronous completion mode.")
|
|
39
39
|
|
|
40
40
|
HttpServerCompletionConfig = Annotated[
|
|
41
41
|
Union[
|
|
@@ -46,10 +46,10 @@ HttpServerCompletionConfig = Annotated[
|
|
|
46
46
|
]
|
|
47
47
|
|
|
48
48
|
class HttpServerActionConfig(CommonActionConfig):
|
|
49
|
-
path: Optional[str] = Field(default=None)
|
|
50
|
-
method: Literal[ "GET", "POST", "PUT", "DELETE", "PATCH" ] = Field(default="POST", description="")
|
|
51
|
-
headers: Dict[str, str] = Field(default_factory=dict, description="")
|
|
52
|
-
body: Dict[str, Any] = Field(default_factory=dict, description="")
|
|
53
|
-
params: Dict[str, str] = Field(default_factory=dict, description="")
|
|
49
|
+
path: Optional[str] = Field(default=None, description="URL path for this HTTP server endpoint.")
|
|
50
|
+
method: Literal[ "GET", "POST", "PUT", "DELETE", "PATCH" ] = Field(default="POST", description="HTTP method this endpoint will accept.")
|
|
51
|
+
headers: Dict[str, str] = Field(default_factory=dict, description="HTTP headers to include in responses from this endpoint.")
|
|
52
|
+
body: Dict[str, Any] = Field(default_factory=dict, description="Default response body template for this endpoint.")
|
|
53
|
+
params: Dict[str, str] = Field(default_factory=dict, description="Expected URL query parameters for this endpoint.")
|
|
54
54
|
stream_format: Optional[HttpStreamFormat] = Field(default=None, description="Format of stream payload.")
|
|
55
|
-
completion: Optional[HttpServerCompletionConfig] = Field(default=None, description="")
|
|
55
|
+
completion: Optional[HttpServerCompletionConfig] = Field(default=None, description="Configuration for handling asynchronous request completion via polling or callbacks.")
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, TypeAlias, Any
|
|
2
|
+
from pydantic import BaseModel, Field
|
|
3
|
+
from pydantic import model_validator
|
|
4
|
+
from .common import CommonModelInferenceActionConfig
|
|
5
|
+
|
|
6
|
+
class ChatMessage(BaseModel):
|
|
7
|
+
role: str = Field(..., description="Role of the message sender.")
|
|
8
|
+
content: str = Field(..., description="Text content of the chat message.")
|
|
9
|
+
|
|
10
|
+
class ToolCall(BaseModel):
|
|
11
|
+
role: str = Field(default="assistant", description="Role for tool calls.")
|
|
12
|
+
name: str = Field(..., description="Tool name.")
|
|
13
|
+
call_id: str = Field(..., description="Tool call identifier.")
|
|
14
|
+
arguments: Dict[str, Any] = Field(default_factory=dict, description="Arguments passed to the tool function.")
|
|
15
|
+
|
|
16
|
+
class ToolResult(BaseModel):
|
|
17
|
+
role: str = Field(default="tool", description="Role for tool responses.")
|
|
18
|
+
call_id: str = Field(..., description="Tool call identifier.")
|
|
19
|
+
name: Optional[str] = Field(default=None, description="Tool name.")
|
|
20
|
+
content: Optional[Any] = Field(default=None, description="Tool execution result.")
|
|
21
|
+
error: Optional[str] = Field(default=None, description="Error message if tool execution failed.")
|
|
22
|
+
|
|
23
|
+
InputMessage: TypeAlias = Union[ToolResult, ToolCall, ChatMessage]
|
|
24
|
+
|
|
25
|
+
class ChatCompletionParamsConfig(BaseModel):
|
|
26
|
+
max_output_length: Union[int, str] = Field(default=1024, description="Maximum number of tokens to generate.")
|
|
27
|
+
min_output_length: Union[int, str] = Field(default=1, description="Minimum number of tokens to generate.")
|
|
28
|
+
num_return_sequences: Union[int, str] = Field(default=1, description="Number of generated sequences to return.")
|
|
29
|
+
do_sample: bool = Field(default=True, description="Whether to use sampling to generate diverse texts.")
|
|
30
|
+
temperature: Union[float, str] = Field(default=1.0, description="Sampling temperature; higher values produce more random results.")
|
|
31
|
+
top_k: Union[int, str] = Field(default=50, description="Top-K sampling; restricts sampling to the top K tokens.")
|
|
32
|
+
top_p: Union[float, str] = Field(default=0.9, description="Top-p (nucleus) sampling; restricts sampling to tokens with cumulative probability >= top_p.")
|
|
33
|
+
num_beams: Union[int, str] = Field(default=1, description="Number of beams to use for beam search.")
|
|
34
|
+
length_penalty: Union[float, str] = Field(default=1.0, description="Length penalty applied during beam search.")
|
|
35
|
+
early_stopping: bool = Field(default=True, description="Whether to stop the beam search when all beams finish generating.")
|
|
36
|
+
stop_sequences: Union[List[str], str] = Field(default=None, description="List of stop sequences.")
|
|
37
|
+
batch_size: Union[int, str] = Field(default=1, description="Number of input texts to process in a single batch.")
|
|
38
|
+
|
|
39
|
+
class ChatCompletionModelActionConfig(CommonModelInferenceActionConfig):
|
|
40
|
+
messages: Union[InputMessage, List[InputMessage]] = Field(..., description="Input messages to generate text from.")
|
|
41
|
+
params: ChatCompletionParamsConfig = Field(default_factory=ChatCompletionParamsConfig, description="Chat completion configuration parameters.")
|