From d734309bc6b888eba8f8ffdc9f07fa6015a1f362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Doumouro?= Date: Mon, 29 Jun 2026 17:18:14 +0200 Subject: [PATCH 1/9] chore(translation-worker): lock deps version --- workers/translation-worker/pyproject.toml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/workers/translation-worker/pyproject.toml b/workers/translation-worker/pyproject.toml index d6773ac..2a6bf7e 100644 --- a/workers/translation-worker/pyproject.toml +++ b/workers/translation-worker/pyproject.toml @@ -29,14 +29,14 @@ dependencies = "translation_worker.dependencies:REGISTRY" worker_config_cls = "translation_worker.config:WORKER_CONFIG_CLS" [project.optional-dependencies] -inference = ['datashare-translation-worker[argos_inference]'] -argos_inference = [ +inference = ['datashare-translation-worker[c2translate]'] +c2translate = [ "argostranslate==1.11.0", ] -hunyuan_inference = [ - "torch>=2.11.0", - "transformers>=5.12.1", - "accelerate>=1.14.0", +torch = [ + "torch==2.11.1", + "transformers==5.12.1", + "accelerate==1.14.0", ] [tool.uv.sources] From c24905cfb6c147cd310d372460ac0df39943b646 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Doumouro?= Date: Mon, 29 Jun 2026 17:32:30 +0200 Subject: [PATCH 2/9] feature(translation-worker): split torch and c2translate worker images # Conflicts: # workers/asr-worker/uv.dist.lock # workers/translation-worker/translation_worker/activities.py # workers/translation-worker/translation_worker/config.py # workers/translation-worker/translation_worker/dependencies.py # workers/translation-worker/translation_worker/objects.py --- .../workflows/publish_translation_worker.yml | 36 +++++++++++++++++-- workers/translation-worker/Dockerfile | 26 ++++++++++++-- workers/translation-worker/pyproject.toml | 2 +- .../tests/test_constants.py | 27 ++++++++++++++ .../translation_worker/config.py | 21 +++++------ .../translation_worker/constants.py | 23 ++++++++---- .../translation_worker/objects.py | 5 +++ .../translation_worker/processors.py | 4 +-- .../translation_worker/workflows.py | 3 +- workers/translation-worker/uv.dist.lock | 20 +++++------ 10 files changed, 132 insertions(+), 35 deletions(-) create mode 100644 workers/translation-worker/tests/test_constants.py diff --git a/.github/workflows/publish_translation_worker.yml b/.github/workflows/publish_translation_worker.yml index bb8c4c5..7c7d0e8 100644 --- a/.github/workflows/publish_translation_worker.yml +++ b/.github/workflows/publish_translation_worker.yml @@ -76,7 +76,7 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - publish-inference-worker: + publish-inference-c2translate-worker: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 @@ -101,7 +101,39 @@ jobs: - name: Build and push image uses: docker/build-push-action@v7 with: - target: inference-worker + target: inference-c2translate-worker + context: ./workers/translation-worker + platforms: linux/amd64 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + publish-inference-torch-worker: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - name: Docker meta + id: meta + uses: docker/metadata-action@v6 + with: + images: icij/datashare-translation-inference-worker + tags: | + type=match,pattern=translation-worker-(.*),group=1 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v4 + + - name: Login to Docker Hub + uses: docker/login-action@v4 + with: + # You'll need to set these secrets + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push image + uses: docker/build-push-action@v7 + with: + target: inference-torch-worker context: ./workers/translation-worker platforms: linux/amd64 push: true diff --git a/workers/translation-worker/Dockerfile b/workers/translation-worker/Dockerfile index 9a3d3a3..a0ed9eb 100644 --- a/workers/translation-worker/Dockerfile +++ b/workers/translation-worker/Dockerfile @@ -34,12 +34,12 @@ RUN rm -rf ~/.cache/pip ENTRYPOINT ["entrypoints/io_worker.sh"] -FROM translation-worker-builder AS inference-worker +FROM translation-worker-builder AS inference-c2translate-worker # Install deps first to optimize layer cache RUN --mount=type=cache,target=~/.cache/uv \ --mount=type=bind,source=uv.dist.lock,target=uv.lock \ --mount=type=bind,source=pyproject.toml,target=pyproject.toml \ - uv sync -v --frozen --no-editable --no-install-project --extra inference + uv sync -v --frozen --no-editable --no-install-project --extra c2translate # Then copy code ADD uv.dist.lock ./uv.lock @@ -48,7 +48,27 @@ ADD translation_worker ./translation_worker/ ADD entrypoints/inference_worker.sh ./entrypoints/inference_worker.sh # Then install service -RUN --mount=type=cache,target=~/.cache/uv uv sync -v --frozen --no-editable --extra inference +RUN --mount=type=cache,target=~/.cache/uv uv sync -v --frozen --no-editable --extra c2translate +RUN rm -rf ~/.cache/pip + +ENTRYPOINT ["entrypoints/inference_worker.sh"] + + +FROM translation-worker-builder AS inference-torch-worker +# Install deps first to optimize layer cache +RUN --mount=type=cache,target=~/.cache/uv \ + --mount=type=bind,source=uv.dist.lock,target=uv.lock \ + --mount=type=bind,source=pyproject.toml,target=pyproject.toml \ + uv sync -v --frozen --no-editable --no-install-project --extra torch + +# Then copy code +ADD uv.dist.lock ./uv.lock +ADD pyproject.toml README.md ./ +ADD translation_worker ./translation_worker/ +ADD entrypoints/inference_worker.sh ./entrypoints/inference_worker.sh + +# Then install service +RUN --mount=type=cache,target=~/.cache/uv uv sync -v --frozen --no-editable --extra torch RUN rm -rf ~/.cache/pip ENTRYPOINT ["entrypoints/inference_worker.sh"] diff --git a/workers/translation-worker/pyproject.toml b/workers/translation-worker/pyproject.toml index 2a6bf7e..2dae563 100644 --- a/workers/translation-worker/pyproject.toml +++ b/workers/translation-worker/pyproject.toml @@ -34,7 +34,7 @@ c2translate = [ "argostranslate==1.11.0", ] torch = [ - "torch==2.11.1", + "torch==2.11.0", "transformers==5.12.1", "accelerate==1.14.0", ] diff --git a/workers/translation-worker/tests/test_constants.py b/workers/translation-worker/tests/test_constants.py new file mode 100644 index 0000000..27f16a6 --- /dev/null +++ b/workers/translation-worker/tests/test_constants.py @@ -0,0 +1,27 @@ +import pytest +from constants import TaskQueue +from translation_worker.config import ( + ArgosTranslatorConfig, + HunyuanMtTranslatorConfig, + TranslationConfig, +) + + +@pytest.mark.parametrize( + ("config", "expected_queue"), + [ + ( + TranslationConfig(translator=ArgosTranslatorConfig()), + TaskQueue.C2TRANSLATE_INFERENCE, + ), + ( + TranslationConfig(translator=HunyuanMtTranslatorConfig()), + TaskQueue.TORCH_INFERENCE, + ), + ], +) +def test_inference_queue(config: TranslationConfig, expected_queue: TaskQueue) -> None: + # When + inference_queue = TaskQueue.inference_queue(config) + # Then + assert inference_queue == expected_queue diff --git a/workers/translation-worker/translation_worker/config.py b/workers/translation-worker/translation_worker/config.py index 6db8697..1e41779 100644 --- a/workers/translation-worker/translation_worker/config.py +++ b/workers/translation-worker/translation_worker/config.py @@ -7,14 +7,13 @@ from icij_common.registrable import RegistrableConfig from pydantic import Discriminator, Field -from translation_worker.objects import ( +from .objects import ( ArgosSentencizer, SentenceSplitterModel, + TorchDevice, TranslationModel, ) -from .constants import TorchDevice - if TYPE_CHECKING: from translation_worker.processors import SentenceSplitter, Translator @@ -72,7 +71,7 @@ class ArgosSentenceSplitterConfig(SentenceSplitterConfig): sentencizer: ArgosSentencizer = ArgosSentencizer.MINI_SBD -class TranslatorConfig(_BaseProcessorConfig): +class BaseTranslatorConfig(_BaseProcessorConfig): registry_key: ClassVar[str] = Field(frozen=True, default="model") model: ClassVar[TranslationModel] @@ -83,7 +82,7 @@ class TranslatorConfig(_BaseProcessorConfig): splitter_discriminator = make_enum_discriminator("model", SentenceSplitterModel) -class ArgosTranslatorConfig(TranslatorConfig): +class ArgosTranslatorConfig(BaseTranslatorConfig): model: ClassVar[TranslationModel] = Field( frozen=True, default=TranslationModel.ARGOS ) @@ -92,8 +91,10 @@ class ArgosTranslatorConfig(TranslatorConfig): length_penalty: float = 0.2 -class HunyuanMtTranslatorConfig(TranslatorConfig): - model_config = {"arbitrary_types_allowed": True} +DEFAULT_HUNYUAN_MODEL_REF = "tencent/Hunyuan-MT-Chimera-7B" + + +class HunyuanMtTranslatorConfig(BaseTranslatorConfig): model: ClassVar[TranslationModel] = Field( frozen=True, default=TranslationModel.HUNYUAN ) @@ -108,8 +109,8 @@ class HunyuanMtTranslatorConfig(TranslatorConfig): device_map: str = "auto" -_TranslatorConfig = tagged_union( - TranslatorConfig.__subclasses__(), lambda t: t.model.default +TranslatorConfig = tagged_union( + BaseTranslatorConfig.__subclasses__(), lambda t: t.model.default ) translator_discriminator = make_enum_discriminator("model", TranslationModel) @@ -119,7 +120,7 @@ class TranslationConfig(DatashareModel): discriminator=Discriminator(splitter_discriminator), default_factory=DefaultSentenceSplitterConfig, ) - translator: _TranslatorConfig = Field( + translator: TranslatorConfig = Field( discriminator=Discriminator(translator_discriminator), default_factory=ArgosTranslatorConfig, ) diff --git a/workers/translation-worker/translation_worker/constants.py b/workers/translation-worker/translation_worker/constants.py index 79e8873..557668e 100644 --- a/workers/translation-worker/translation_worker/constants.py +++ b/workers/translation-worker/translation_worker/constants.py @@ -1,17 +1,28 @@ from enum import StrEnum +from typing import Self from icij_common.es import DOC_CONTENT, DOC_LANGUAGE, DOC_ROOT_ID +from .config import TranslationConfig +from .objects import TranslationModel + class TaskQueue(StrEnum): WORKFLOWS = "datashare.workflows" IO = "translation.io" - INFERENCE = "translation.inference" - - -class TorchDevice(StrEnum): - CPU = "cpu" - GPU = "cuda" + TORCH_INFERENCE = "translation.inference.torch" + C2TRANSLATE_INFERENCE = "translation.inference.c2translate" + + @classmethod + def inference_queue(cls, config: TranslationConfig) -> Self: + model = config.translator.model + match model: + case TranslationModel.ARGOS: + return TaskQueue.C2TRANSLATE_INFERENCE + case TranslationModel.HUNYUAN: + return TaskQueue.TORCH_INFERENCE + case _: + raise ValueError(f"unknown translation model {model}") TRANSLATION_TASK_NAME = "translation" diff --git a/workers/translation-worker/translation_worker/objects.py b/workers/translation-worker/translation_worker/objects.py index 3e89116..9ce16cb 100644 --- a/workers/translation-worker/translation_worker/objects.py +++ b/workers/translation-worker/translation_worker/objects.py @@ -22,6 +22,11 @@ from translation_worker.objects import TranslationConfig +class TorchDevice(StrEnum): + CPU = "cpu" + GPU = "cuda" + + class SentenceSplitterModel(StrEnum): ARGOS = "ARGOS" DEFAULT = "DEFAULT" diff --git a/workers/translation-worker/translation_worker/processors.py b/workers/translation-worker/translation_worker/processors.py index 1f6b5e8..478c7a4 100644 --- a/workers/translation-worker/translation_worker/processors.py +++ b/workers/translation-worker/translation_worker/processors.py @@ -10,7 +10,7 @@ from .config import TranslationWorkerConfig if TYPE_CHECKING: - from .config import TranslatorConfig + from .config import BaseTranslatorConfig from .objects import Language logger = logging.getLogger(__name__) @@ -43,7 +43,7 @@ def __exit__(self, exc_type, exc_val, exc_tb): ... # noqa: ANN001 class Translator(RegistrableFromConfig): - def __init__(self, config: "TranslatorConfig"): + def __init__(self, config: "BaseTranslatorConfig"): self._config = config self._source: Language | None = None diff --git a/workers/translation-worker/translation_worker/workflows.py b/workers/translation-worker/translation_worker/workflows.py index d97acb7..b66c50a 100644 --- a/workers/translation-worker/translation_worker/workflows.py +++ b/workers/translation-worker/translation_worker/workflows.py @@ -49,11 +49,12 @@ async def run(self, args: TranslationArgs) -> TranslationResponse: for source, languages_batches in per_language_batches for b in batches(languages_batches, batch_size=batches_per_worker) ] + inference_queue = TaskQueue.inference_queue(args.config) translations_activities = ( execute_activity( TranslationActivities.translate_docs, args=args, - task_queue=TaskQueue.INFERENCE, + task_queue=inference_queue, start_to_close_timeout=timedelta(hours=1), ) for args in translation_args diff --git a/workers/translation-worker/uv.dist.lock b/workers/translation-worker/uv.dist.lock index b0644a5..d4c60a8 100644 --- a/workers/translation-worker/uv.dist.lock +++ b/workers/translation-worker/uv.dist.lock @@ -470,17 +470,17 @@ dependencies = [ ] [package.optional-dependencies] -argos-inference = [ +c2translate = [ { name = "argostranslate" }, ] -hunyuan-inference = [ +inference = [ + { name = "argostranslate" }, +] +torch = [ { name = "accelerate" }, { name = "torch" }, { name = "transformers" }, ] -inference = [ - { name = "argostranslate" }, -] [package.dev-dependencies] dev = [ @@ -497,16 +497,16 @@ dev = [ [package.metadata] requires-dist = [ - { name = "accelerate", marker = "extra == 'hunyuan-inference'", specifier = ">=1.14.0" }, - { name = "argostranslate", marker = "extra == 'argos-inference'", specifier = "==1.11.0" }, + { name = "accelerate", marker = "extra == 'torch'", specifier = "==1.14.0" }, + { name = "argostranslate", marker = "extra == 'c2translate'", specifier = "==1.11.0" }, { name = "argostranslate", marker = "extra == 'inference'", specifier = "==1.11.0" }, { name = "datashare-python", specifier = "~=0.9.0" }, { name = "language-data", specifier = ">=1.4.0" }, { name = "pydantic-extra-types", extras = ["pycountry"], specifier = "==2.11.1" }, - { name = "torch", marker = "extra == 'hunyuan-inference'", specifier = ">=2.11.0" }, - { name = "transformers", marker = "extra == 'hunyuan-inference'", specifier = ">=5.12.1" }, + { name = "torch", marker = "extra == 'torch'", specifier = "==2.11.0" }, + { name = "transformers", marker = "extra == 'torch'", specifier = "==5.12.1" }, ] -provides-extras = ["argos-inference", "hunyuan-inference", "inference"] +provides-extras = ["c2translate", "inference", "torch"] [package.metadata.requires-dev] dev = [ From a3470384d7f8ad62764628a8b4252a1bfe96b424 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Doumouro?= Date: Wed, 15 Jul 2026 16:40:53 +0200 Subject: [PATCH 3/9] chore(extract-worker): improve builder step naming --- workers/extract-worker/Dockerfile | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/workers/extract-worker/Dockerfile b/workers/extract-worker/Dockerfile index ec3009e..7610c1c 100644 --- a/workers/extract-worker/Dockerfile +++ b/workers/extract-worker/Dockerfile @@ -72,7 +72,7 @@ RUN apt update && \ rm -rf /var/lib/apt/lists/* -FROM extract-base-builder AS extract-cpu-build +FROM extract-base-builder AS extract-cpu-builder # Install deps first to optimize layer cache RUN --mount=type=cache,target=/root/.cache/uv \ --mount=type=bind,source=uv.dist.lock,target=uv.lock \ @@ -91,11 +91,11 @@ RUN rm -rf ~/.cache/pip FROM runtime-base AS extract-cpu-worker -COPY --from=extract-cpu-build /app /app +COPY --from=extract-cpu-builder /app /app ENTRYPOINT ["entrypoints/extract_cpu_worker.sh"] -FROM extract-base-builder AS extract-gpu-build +FROM extract-base-builder AS extract-gpu-builder ## Copy the flash-attn wheel #COPY --from=flash-attn-builder /flash-attn-wheel /flash-attn-wheel ## Install the wheel @@ -122,12 +122,12 @@ FROM runtime-base AS extract-gpu-worker RUN apt update && \ apt install -y --no-install-recommends tesseract-ocr && \ rm -rf /var/lib/apt/lists/* -COPY --from=extract-gpu-build /app /app +COPY --from=extract-gpu-builder /app /app ENTRYPOINT ["entrypoints/extract_gpu_worker.sh"] -FROM runtime-base AS extract-cpu-mineru-build +FROM runtime-base AS extract-cpu-mineru-builder # Install deps first to optimize layer cache RUN --mount=type=cache,target=/root/.cache/uv \ --mount=type=bind,source=uv.dist.lock,target=uv.lock \ @@ -147,11 +147,11 @@ RUN rm -rf ~/.cache/pip # Slim runtime (as extract-cpu-worker): no toolchain, keep tesseract FROM runtime-base AS extract-cpu-mineru-worker -COPY --from=extract-cpu-mineru-build /app /app +COPY --from=extract-cpu-mineru-builder /app /app ENTRYPOINT ["entrypoints/extract_cpu_mineru_worker.sh"] -FROM runtime-base AS extract-gpu-mineru-build +FROM runtime-base AS extract-gpu-mineru-builder # Install deps first to optimize layer cache RUN --mount=type=cache,target=/root/.cache/uv \ --mount=type=bind,source=uv.dist.lock,target=uv.lock \ @@ -171,5 +171,5 @@ RUN rm -rf ~/.cache/pip # Slim runtime (as extract-cpu-worker): no toolchain, keep tesseract FROM runtime-base AS extract-gpu-mineru-worker -COPY --from=extract-gpu-mineru-build /app /app +COPY --from=extract-gpu-mineru-builder /app /app ENTRYPOINT ["entrypoints/extract_gpu_mineru_worker.sh"] From b620d2031f9622d4fa5d2e627617a90638613dba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Doumouro?= Date: Wed, 15 Jul 2026 17:52:08 +0200 Subject: [PATCH 4/9] fix(extract-worker): fix missing python interpreter in worker images --- workers/extract-worker/Dockerfile | 5 ++++- workers/extract-worker/pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/workers/extract-worker/Dockerfile b/workers/extract-worker/Dockerfile index 7610c1c..2e935ab 100644 --- a/workers/extract-worker/Dockerfile +++ b/workers/extract-worker/Dockerfile @@ -92,6 +92,7 @@ RUN rm -rf ~/.cache/pip FROM runtime-base AS extract-cpu-worker COPY --from=extract-cpu-builder /app /app +COPY --from=extract-cpu-builder /root/.local/share/uv/python /root/.local/share/uv/python ENTRYPOINT ["entrypoints/extract_cpu_worker.sh"] @@ -123,7 +124,7 @@ RUN apt update && \ apt install -y --no-install-recommends tesseract-ocr && \ rm -rf /var/lib/apt/lists/* COPY --from=extract-gpu-builder /app /app - +COPY --from=extract-gpu-builder /root/.local/share/uv/python /root/.local/share/uv/python ENTRYPOINT ["entrypoints/extract_gpu_worker.sh"] @@ -148,6 +149,7 @@ RUN rm -rf ~/.cache/pip FROM runtime-base AS extract-cpu-mineru-worker COPY --from=extract-cpu-mineru-builder /app /app +COPY --from=extract-cpu-mineru-builder /root/.local/share/uv/python /root/.local/share/uv/python ENTRYPOINT ["entrypoints/extract_cpu_mineru_worker.sh"] @@ -172,4 +174,5 @@ RUN rm -rf ~/.cache/pip FROM runtime-base AS extract-gpu-mineru-worker COPY --from=extract-gpu-mineru-builder /app /app +COPY --from=extract-gpu-mineru-builder /root/.local/share/uv/python /root/.local/share/uv/python ENTRYPOINT ["entrypoints/extract_gpu_mineru_worker.sh"] diff --git a/workers/extract-worker/pyproject.toml b/workers/extract-worker/pyproject.toml index 11b860c..efeded2 100644 --- a/workers/extract-worker/pyproject.toml +++ b/workers/extract-worker/pyproject.toml @@ -9,7 +9,7 @@ authors = [ readme = "README.md" requires-python = ">=3.13,<3.15" dependencies = [ - "datashare-python~=0.9.0", + "datashare-python~=0.9.9", "extract-core==0.7.1", "temporalio==1.23.0", ] From d16fbd5ff12bb550a4d0b7fb8f02cf2685d0c4c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Doumouro?= Date: Wed, 15 Jul 2026 18:04:05 +0200 Subject: [PATCH 5/9] fix(extract-worker): fix missing python interpreter in worker images --- workers/extract-worker/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workers/extract-worker/Dockerfile b/workers/extract-worker/Dockerfile index 2e935ab..fc3ca83 100644 --- a/workers/extract-worker/Dockerfile +++ b/workers/extract-worker/Dockerfile @@ -139,7 +139,7 @@ RUN --mount=type=cache,target=/root/.cache/uv \ ADD uv.dist.lock ./uv.lock ADD pyproject.toml README.md ./ ADD extract_worker ./extract_worker/ -ADD entrypoints/extract_cpu_worker.sh ./entrypoints/extract_cpu_worker.sh +ADD entrypoints/extract_cpu_mineru_worker.sh ./entrypoints/extract_cpu_mineru_worker.sh # Then install service RUN --mount=type=cache,target=/root/.cache/uv uv sync -v --frozen --no-editable --extra mineru --extra cpu @@ -164,7 +164,7 @@ RUN --mount=type=cache,target=/root/.cache/uv \ ADD uv.dist.lock ./uv.lock ADD pyproject.toml README.md ./ ADD extract_worker ./extract_worker/ -ADD entrypoints/extract_gpu_worker.sh ./entrypoints/extract_gpu_worker.sh +ADD entrypoints/extract_gpu_mineru_worker.sh ./entrypoints/extract_gpu_mineru_worker.sh # Then install service RUN --mount=type=cache,target=/root/.cache/uv uv sync -v --frozen --no-editable --extra mineru --extra gpu From 152374c72d3b405c825c104cbdab8f9716d903e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Doumouro?= Date: Fri, 17 Jul 2026 10:17:53 +0200 Subject: [PATCH 6/9] fix(translation-worker): test imports --- workers/translation-worker/tests/test_constants.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workers/translation-worker/tests/test_constants.py b/workers/translation-worker/tests/test_constants.py index 27f16a6..10ebec7 100644 --- a/workers/translation-worker/tests/test_constants.py +++ b/workers/translation-worker/tests/test_constants.py @@ -1,10 +1,10 @@ import pytest -from constants import TaskQueue from translation_worker.config import ( ArgosTranslatorConfig, HunyuanMtTranslatorConfig, TranslationConfig, ) +from translation_worker.constants import TaskQueue @pytest.mark.parametrize( From 4b5d50d26e4b53c4868e459aa5fc0e246427b33d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Doumouro?= Date: Fri, 17 Jul 2026 10:21:42 +0200 Subject: [PATCH 7/9] fix(translation-worker): fix queue selection --- workers/translation-worker/translation_worker/constants.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workers/translation-worker/translation_worker/constants.py b/workers/translation-worker/translation_worker/constants.py index 557668e..9e35229 100644 --- a/workers/translation-worker/translation_worker/constants.py +++ b/workers/translation-worker/translation_worker/constants.py @@ -15,7 +15,7 @@ class TaskQueue(StrEnum): @classmethod def inference_queue(cls, config: TranslationConfig) -> Self: - model = config.translator.model + model = config.translator.model.default match model: case TranslationModel.ARGOS: return TaskQueue.C2TRANSLATE_INFERENCE From 5a6296175903ec1e2457d1b34b2bff15f4e128eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Doumouro?= Date: Fri, 17 Jul 2026 10:22:10 +0200 Subject: [PATCH 8/9] chore(translation-worker): lock deps --- workers/translation-worker/tests/conftest.py | 2 +- workers/translation-worker/uv.dist.lock | 52 +++----------------- workers/translation-worker/uv.lock | 20 ++++---- 3 files changed, 17 insertions(+), 57 deletions(-) diff --git a/workers/translation-worker/tests/conftest.py b/workers/translation-worker/tests/conftest.py index c7d089d..ff3c0d4 100644 --- a/workers/translation-worker/tests/conftest.py +++ b/workers/translation-worker/tests/conftest.py @@ -194,7 +194,7 @@ async def translation_inference_worker( worker_id = f"test-translation-cpu-worker-{uuid.uuid4()}" create_translation_batches = TranslationActivities(temporal_client=client) translation_activities = [create_translation_batches.translate_docs] - task_queue = TaskQueue.INFERENCE + task_queue = TaskQueue.C2TRANSLATE_INFERENCE worker_ctx = worker_context( worker_id, activities=translation_activities, diff --git a/workers/translation-worker/uv.dist.lock b/workers/translation-worker/uv.dist.lock index d4c60a8..8848dbf 100644 --- a/workers/translation-worker/uv.dist.lock +++ b/workers/translation-worker/uv.dist.lock @@ -437,7 +437,7 @@ wheels = [ [[package]] name = "datashare-python" -version = "0.9.5" +version = "0.9.9" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp" }, @@ -446,8 +446,6 @@ dependencies = [ { name = "icij-common", extra = ["elasticsearch"] }, { name = "langcodes" }, { name = "lru-dict" }, - { name = "nest-asyncio" }, - { name = "orjson" }, { name = "pydantic-extra-types", extra = ["pycountry"] }, { name = "python-json-logger" }, { name = "pyyaml" }, @@ -455,9 +453,9 @@ dependencies = [ { name = "tomlkit" }, { name = "typer" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cc/6a/cb3c7c3073573c6ad0cf56cd6c6b6c97dbd1dbd6392ec0314e78865c9dee/datashare_python-0.9.5.tar.gz", hash = "sha256:9ff757584b46bf95af74a1c890734d3233f02f54724806ec9b346a04c39e311a", size = 320645, upload-time = "2026-06-23T12:11:01.145Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1e/92/d39036df8af1ab2195abffc1b110b3ae73b7492b4817dec6e2d78a171a0c/datashare_python-0.9.9.tar.gz", hash = "sha256:e4f78f38bdb84703d6869bd13a767bd6a3e329409999a096aac8eb5119bf44a4", size = 315745, upload-time = "2026-07-15T15:35:15.519Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/27/826ac48804b0bda7a35260fdc925ff25fda3fcc527da32c4c484461ed8d2/datashare_python-0.9.5-py3-none-any.whl", hash = "sha256:c1dce1b981342dc9a3e80d3bfd3246d4e774d55c116a37321e31ac2b39d4ae08", size = 326631, upload-time = "2026-06-23T12:10:59.749Z" }, + { url = "https://files.pythonhosted.org/packages/2d/73/68356d617d630af7154b986b528c531295e34fc096d5a3aef663b8cba78f/datashare_python-0.9.9-py3-none-any.whl", hash = "sha256:ff99059a87c6c0da9c0098dc3eaf782b54db22b5e2d8317ec534023b39a130a9", size = 322639, upload-time = "2026-07-15T15:35:14.434Z" }, ] [[package]] @@ -755,16 +753,16 @@ wheels = [ [[package]] name = "icij-common" -version = "0.8.2" +version = "0.8.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiostream" }, { name = "pydantic" }, { name = "pydantic-settings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e0/51/91d85cc23e275bb51a5cae47873af9a7160f62797b25663d902cf38e6ab7/icij_common-0.8.2.tar.gz", hash = "sha256:7db68266d8facb43142131d81e998cd74c6ae73508456743e00df43a15cc2995", size = 15937, upload-time = "2026-04-07T12:13:39.774Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/8d/4b2b9bb7dcac24d8bf514ccf2da6465ca3cd9b4c4f4bde0a1c97e681d595/icij_common-0.8.3.tar.gz", hash = "sha256:009dda7c1d688ecf7705cf88517deb3d0abe02300b42c8c433eb36516462fe75", size = 16161, upload-time = "2026-07-03T09:43:50.837Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/15/5a/99d123230023124ba4ec67765feb2a04b656ae1f473a14f6b29cc54b02bf/icij_common-0.8.2-py3-none-any.whl", hash = "sha256:c5a1a3ccd54e7bf53acad293a0af50ab15156b225791b43383197b896bae955f", size = 20565, upload-time = "2026-04-07T12:13:38.709Z" }, + { url = "https://files.pythonhosted.org/packages/1c/8e/99879d623fdf4e2371e44135dcf690d7f43b921616e4c918633fe4cece48/icij_common-0.8.3-py3-none-any.whl", hash = "sha256:5214cbb73dca364cca16005f5fac3c2f3944acab6dea269a68d26f631e39a348", size = 21030, upload-time = "2026-07-03T09:43:49.934Z" }, ] [package.optional-dependencies] @@ -1294,44 +1292,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/38/fa/e5c43397632a399f542663ed3e3e37763ee203ba845b10b266cd2ede8925/onnxruntime-1.25.1-cp312-cp312-win_arm64.whl", hash = "sha256:b6c7aa5cae606d5c90a392679fac074b60f80025a2e83e1e90fdf882bd2a97f0", size = 12634433, upload-time = "2026-04-27T22:00:25.918Z" }, ] -[[package]] -name = "orjson" -version = "3.11.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9d/1b/2024d06792d0779f9dbc51531b61c24f76c75b9f4ce05e6f3377a1814cea/orjson-3.11.8.tar.gz", hash = "sha256:96163d9cdc5a202703e9ad1b9ae757d5f0ca62f4fa0cc93d1f27b0e180cc404e", size = 5603832, upload-time = "2026-03-31T16:16:27.878Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/67/41/5aa7fa3b0f4dc6b47dcafc3cea909299c37e40e9972feabc8b6a74e2730d/orjson-3.11.8-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:003646067cc48b7fcab2ae0c562491c9b5d2cbd43f1e5f16d98fd118c5522d34", size = 229229, upload-time = "2026-03-31T16:14:50.424Z" }, - { url = "https://files.pythonhosted.org/packages/0a/d7/57e7f2458e0a2c41694f39fc830030a13053a84f837a5b73423dca1f0938/orjson-3.11.8-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:ed193ce51d77a3830cad399a529cd4ef029968761f43ddc549e1bc62b40d88f8", size = 128871, upload-time = "2026-03-31T16:14:51.888Z" }, - { url = "https://files.pythonhosted.org/packages/53/4a/e0fdb9430983e6c46e0299559275025075568aad5d21dd606faee3703924/orjson-3.11.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30491bc4f862aa15744b9738517454f1e46e56c972a2be87d70d727d5b2a8f8", size = 132104, upload-time = "2026-03-31T16:14:53.142Z" }, - { url = "https://files.pythonhosted.org/packages/08/4a/2025a60ff3f5c8522060cda46612d9b1efa653de66ed2908591d8d82f22d/orjson-3.11.8-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6eda5b8b6be91d3f26efb7dc6e5e68ee805bc5617f65a328587b35255f138bf4", size = 130483, upload-time = "2026-03-31T16:14:54.605Z" }, - { url = "https://files.pythonhosted.org/packages/2d/3c/b9cde05bdc7b2385c66014e0620627da638d3d04e4954416ab48c31196c5/orjson-3.11.8-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee8db7bfb6fe03581bbab54d7c4124a6dd6a7f4273a38f7267197890f094675f", size = 135481, upload-time = "2026-03-31T16:14:55.901Z" }, - { url = "https://files.pythonhosted.org/packages/ff/f2/a8238e7734de7cb589fed319857a8025d509c89dc52fdcc88f39c6d03d5a/orjson-3.11.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d8b5231de76c528a46b57010bbd83fb51e056aa0220a372fd5065e978406f1c", size = 146819, upload-time = "2026-03-31T16:14:57.548Z" }, - { url = "https://files.pythonhosted.org/packages/db/10/dbf1e2a3cafea673b1b4350e371877b759060d6018a998643b7040e5de48/orjson-3.11.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:58a4a208a6fbfdb7a7327b8f201c6014f189f721fd55d047cafc4157af1bc62a", size = 132846, upload-time = "2026-03-31T16:14:58.91Z" }, - { url = "https://files.pythonhosted.org/packages/f8/fc/55e667ec9c85694038fcff00573d221b085d50777368ee3d77f38668bf3c/orjson-3.11.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f8952d6d2505c003e8f0224ff7858d341fa4e33fef82b91c4ff0ef070f2393c", size = 133580, upload-time = "2026-03-31T16:15:00.519Z" }, - { url = "https://files.pythonhosted.org/packages/7e/a6/c08c589a9aad0cb46c4831d17de212a2b6901f9d976814321ff8e69e8785/orjson-3.11.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0022bb50f90da04b009ce32c512dc1885910daa7cb10b7b0cba4505b16db82a8", size = 142042, upload-time = "2026-03-31T16:15:01.906Z" }, - { url = "https://files.pythonhosted.org/packages/5c/cc/2f78ea241d52b717d2efc38878615fe80425bf2beb6e68c984dde257a766/orjson-3.11.8-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:ff51f9d657d1afb6f410cb435792ce4e1fe427aab23d2fcd727a2876e21d4cb6", size = 423845, upload-time = "2026-03-31T16:15:03.703Z" }, - { url = "https://files.pythonhosted.org/packages/70/07/c17dcf05dd8045457538428a983bf1f1127928df5bf328cb24d2b7cddacb/orjson-3.11.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6dbe9a97bdb4d8d9d5367b52a7c32549bba70b2739c58ef74a6964a6d05ae054", size = 147729, upload-time = "2026-03-31T16:15:05.203Z" }, - { url = "https://files.pythonhosted.org/packages/90/6c/0fb6e8a24e682e0958d71711ae6f39110e4b9cd8cab1357e2a89cb8e1951/orjson-3.11.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a5c370674ebabe16c6ccac33ff80c62bf8a6e59439f5e9d40c1f5ab8fd2215b7", size = 136425, upload-time = "2026-03-31T16:15:07.052Z" }, - { url = "https://files.pythonhosted.org/packages/b2/35/4d3cc3a3d616035beb51b24a09bb872942dc452cf2df0c1d11ab35046d9f/orjson-3.11.8-cp311-cp311-win32.whl", hash = "sha256:0e32f7154299f42ae66f13488963269e5eccb8d588a65bc839ed986919fc9fac", size = 131870, upload-time = "2026-03-31T16:15:08.678Z" }, - { url = "https://files.pythonhosted.org/packages/13/26/9fe70f81d16b702f8c3a775e8731b50ad91d22dacd14c7599b60a0941cd1/orjson-3.11.8-cp311-cp311-win_amd64.whl", hash = "sha256:25e0c672a2e32348d2eb33057b41e754091f2835f87222e4675b796b92264f06", size = 127440, upload-time = "2026-03-31T16:15:09.994Z" }, - { url = "https://files.pythonhosted.org/packages/e8/c6/b038339f4145efd2859c1ca53097a52c0bb9cbdd24f947ebe146da1ad067/orjson-3.11.8-cp311-cp311-win_arm64.whl", hash = "sha256:9185589c1f2a944c17e26c9925dcdbc2df061cc4a145395c57f0c51f9b5dbfcd", size = 127399, upload-time = "2026-03-31T16:15:11.412Z" }, - { url = "https://files.pythonhosted.org/packages/01/f6/8d58b32ab32d9215973a1688aebd098252ee8af1766c0e4e36e7831f0295/orjson-3.11.8-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1cd0b77e77c95758f8e1100139844e99f3ccc87e71e6fc8e1c027e55807c549f", size = 229233, upload-time = "2026-03-31T16:15:12.762Z" }, - { url = "https://files.pythonhosted.org/packages/a9/8b/2ffe35e71f6b92622e8ea4607bf33ecf7dfb51b3619dcfabfd36cbe2d0a5/orjson-3.11.8-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:6a3d159d5ffa0e3961f353c4b036540996bf8b9697ccc38261c0eac1fd3347a6", size = 128772, upload-time = "2026-03-31T16:15:14.237Z" }, - { url = "https://files.pythonhosted.org/packages/27/d2/1f8682ae50d5c6897a563cb96bc106da8c9cb5b7b6e81a52e4cc086679b9/orjson-3.11.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76070a76e9c5ae661e2d9848f216980d8d533e0f8143e6ed462807b242e3c5e8", size = 131946, upload-time = "2026-03-31T16:15:15.607Z" }, - { url = "https://files.pythonhosted.org/packages/52/4b/5500f76f0eece84226e0689cb48dcde081104c2fa6e2483d17ca13685ffb/orjson-3.11.8-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:54153d21520a71a4c82a0dbb4523e468941d549d221dc173de0f019678cf3813", size = 130368, upload-time = "2026-03-31T16:15:17.066Z" }, - { url = "https://files.pythonhosted.org/packages/da/4e/58b927e08fbe9840e6c920d9e299b051ea667463b1f39a56e668669f8508/orjson-3.11.8-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:469ac2125611b7c5741a0b3798cd9e5786cbad6345f9f400c77212be89563bec", size = 135540, upload-time = "2026-03-31T16:15:18.404Z" }, - { url = "https://files.pythonhosted.org/packages/56/7c/ba7cb871cba1bcd5cd02ee34f98d894c6cea96353ad87466e5aef2429c60/orjson-3.11.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14778ffd0f6896aa613951a7fbf4690229aa7a543cb2bfbe9f358e08aafa9546", size = 146877, upload-time = "2026-03-31T16:15:19.833Z" }, - { url = "https://files.pythonhosted.org/packages/0b/5d/eb9c25fc1386696c6a342cd361c306452c75e0b55e86ad602dd4827a7fd7/orjson-3.11.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea56a955056a6d6c550cf18b3348656a9d9a4f02e2d0c02cabf3c73f1055d506", size = 132837, upload-time = "2026-03-31T16:15:21.282Z" }, - { url = "https://files.pythonhosted.org/packages/37/87/5ddeb7fc1fbd9004aeccab08426f34c81a5b4c25c7061281862b015fce2b/orjson-3.11.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53a0f57e59a530d18a142f4d4ba6dfc708dc5fdedce45e98ff06b44930a2a48f", size = 133624, upload-time = "2026-03-31T16:15:22.641Z" }, - { url = "https://files.pythonhosted.org/packages/22/09/90048793db94ee4b2fcec4ac8e5ddb077367637d6650be896b3494b79bb7/orjson-3.11.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9b48e274f8824567d74e2158199e269597edf00823a1b12b63d48462bbf5123e", size = 141904, upload-time = "2026-03-31T16:15:24.435Z" }, - { url = "https://files.pythonhosted.org/packages/c0/cf/eb284847487821a5d415e54149a6449ba9bfc5872ce63ab7be41b8ec401c/orjson-3.11.8-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:3f262401086a3960586af06c054609365e98407151f5ea24a62893a40d80dbbb", size = 423742, upload-time = "2026-03-31T16:15:26.155Z" }, - { url = "https://files.pythonhosted.org/packages/44/09/e12423d327071c851c13e76936f144a96adacfc037394dec35ac3fc8d1e8/orjson-3.11.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8e8c6218b614badf8e229b697865df4301afa74b791b6c9ade01d19a9953a942", size = 147806, upload-time = "2026-03-31T16:15:27.909Z" }, - { url = "https://files.pythonhosted.org/packages/b3/6d/37c2589ba864e582ffe7611643314785c6afb1f83c701654ef05daa8fcc7/orjson-3.11.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:093d489fa039ddade2db541097dbb484999fcc65fc2b0ff9819141e2ab364f25", size = 136485, upload-time = "2026-03-31T16:15:29.749Z" }, - { url = "https://files.pythonhosted.org/packages/be/c9/135194a02ab76b04ed9a10f68624b7ebd238bbe55548878b11ff15a0f352/orjson-3.11.8-cp312-cp312-win32.whl", hash = "sha256:e0950ed1bcb9893f4293fd5c5a7ee10934fbf82c4101c70be360db23ce24b7d2", size = 131966, upload-time = "2026-03-31T16:15:31.687Z" }, - { url = "https://files.pythonhosted.org/packages/ed/9a/9796f8fbe3cf30ce9cb696748dbb535e5c87be4bf4fe2e9ca498ef1fa8cf/orjson-3.11.8-cp312-cp312-win_amd64.whl", hash = "sha256:3cf17c141617b88ced4536b2135c552490f07799f6ad565948ea07bef0dcb9a6", size = 127441, upload-time = "2026-03-31T16:15:33.333Z" }, - { url = "https://files.pythonhosted.org/packages/cc/47/5aaf54524a7a4a0dd09dd778f3fa65dd2108290615b652e23d944152bc8e/orjson-3.11.8-cp312-cp312-win_arm64.whl", hash = "sha256:48854463b0572cc87dac7d981aa72ed8bf6deedc0511853dc76b8bbd5482d36d", size = 127364, upload-time = "2026-03-31T16:15:34.748Z" }, -] - [[package]] name = "packaging" version = "26.0" diff --git a/workers/translation-worker/uv.lock b/workers/translation-worker/uv.lock index a476e38..c6f9137 100644 --- a/workers/translation-worker/uv.lock +++ b/workers/translation-worker/uv.lock @@ -495,17 +495,17 @@ dependencies = [ ] [package.optional-dependencies] -argos-inference = [ +c2translate = [ { name = "argostranslate" }, ] -hunyuan-inference = [ +inference = [ + { name = "argostranslate" }, +] +torch = [ { name = "accelerate" }, { name = "torch" }, { name = "transformers" }, ] -inference = [ - { name = "argostranslate" }, -] [package.dev-dependencies] dev = [ @@ -522,16 +522,16 @@ dev = [ [package.metadata] requires-dist = [ - { name = "accelerate", marker = "extra == 'hunyuan-inference'", specifier = ">=1.14.0" }, - { name = "argostranslate", marker = "extra == 'argos-inference'", specifier = "==1.11.0" }, + { name = "accelerate", marker = "extra == 'torch'", specifier = "==1.14.0" }, + { name = "argostranslate", marker = "extra == 'c2translate'", specifier = "==1.11.0" }, { name = "argostranslate", marker = "extra == 'inference'", specifier = "==1.11.0" }, { name = "datashare-python", editable = "../../datashare-python" }, { name = "language-data", specifier = ">=1.4.0" }, { name = "pydantic-extra-types", extras = ["pycountry"], specifier = "==2.11.1" }, - { name = "torch", marker = "extra == 'hunyuan-inference'", specifier = ">=2.11.0" }, - { name = "transformers", marker = "extra == 'hunyuan-inference'", specifier = ">=5.12.1" }, + { name = "torch", marker = "extra == 'torch'", specifier = "==2.11.0" }, + { name = "transformers", marker = "extra == 'torch'", specifier = "==5.12.1" }, ] -provides-extras = ["argos-inference", "hunyuan-inference", "inference"] +provides-extras = ["c2translate", "inference", "torch"] [package.metadata.requires-dev] dev = [ From 6610abc27bec52e25c342db18f634bb0d2b227ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Doumouro?= Date: Fri, 17 Jul 2026 10:27:56 +0200 Subject: [PATCH 9/9] fix(translation-worker): TorchDevice import --- .../translation_worker/translators/__init__.py | 4 ++-- workers/translation-worker/translation_worker/utils.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/workers/translation-worker/translation_worker/translators/__init__.py b/workers/translation-worker/translation_worker/translators/__init__.py index d78b4f8..5f9b13f 100644 --- a/workers/translation-worker/translation_worker/translators/__init__.py +++ b/workers/translation-worker/translation_worker/translators/__init__.py @@ -1,9 +1,9 @@ try: from .argos import ArgosTranslator -except ImportError: +except ModuleNotFoundError: ArgosTranslator = None try: from .hunyuan import HunyuanMtTranslator -except ImportError: +except ModuleNotFoundError: HunyuanMtTranslator = None diff --git a/workers/translation-worker/translation_worker/utils.py b/workers/translation-worker/translation_worker/utils.py index edd5720..e5c064b 100644 --- a/workers/translation-worker/translation_worker/utils.py +++ b/workers/translation-worker/translation_worker/utils.py @@ -1,4 +1,4 @@ -from .constants import TorchDevice +from .objects import TorchDevice def find_device(device_name: str = TorchDevice.CPU) -> TorchDevice.CPU: