---
# nocheck: playwright-service-flag β translation engine without a browser surface of its own
nllb-engine:
backup:
stop_required: false
name: nllb-engine
healthcheck:
flavor: http_status
path: languages
# nocheck: healthcheck-timing-override the server downloads the checkpoint into its volume and loads it into memory before it binds, and a cold node pays that once
start_period: 60m
modes:
compose:
enabled: true
swarm:
enabled: true
host:
enabled: false
bond: 1
enabled: true # nocheck: dynamic-flag
shared: true
# nocheck: dockerfile-custom upstream publishes model weights and no server, so the role builds one
# nocheck: docker-version base of the self-built inference server, not the served application
image: python
version: "3.13.15-slim"
custom: true
gpu: true
model: facebook/nllb-200-distilled-600M
beams: 4
max_input_tokens: 512
max_output_tokens: 512
request_timeout: 300
# nocheck: min-storage-headroom Reason: the declared image is the Dockerfile base; the built image adds the CPU torch runtime (~1.3GB) and the checkpoint (~2.5GB) lands in the models volume beside it
min_storage: 7GB
ports:
internal:
http: 5060
lifecycle: alpha
cpus: "4.0"
mem_reservation: 3g
mem_limit: 6g
pids_limit: 512
# nocheck: playwright-service-flag
tor:
enabled: false # nocheck: dynamic-flag an engine consumed over the internal network publishes no onion surface
shared: false # nocheck: dynamic-flag same
# nocheck: variants-coverage the role has a single variant, and the guide edge is not a dimension of it: a second round would differ only by the README replay
docs:
bond: 0.5
enabled: "{{ 'web-app-docs' in group_names }}"
shared: "{{ 'web-app-docs' in group_names }}"