services.ymlΒΆ

---
sso:
  bond: 1
  enabled: "{{ 'web-app-keycloak' in group_names }}"
  shared: "{{ 'web-app-keycloak' in group_names }}"
  flavor: oidc
# nocheck: dynamic-flag  the gateway holds no browser session, so no logout surface can exist in any round
logout:
  enabled: false
  shared: false
# nocheck: dynamic-flag
# nocheck: playwright-service-flag β€” design consumer, no Playwright surface (provider: web-svc-design)
# nocheck: design-off  Reason: translation gateway answering JSON, so there is no HTML surface the shared stylesheet could reach
design:
  enabled: false
  shared: false
# nocheck: playwright-service-flag β€” scrape target, covered by web-app-prometheus' own spec
prometheus:
  bond: 1
  enabled: "{{ 'web-app-prometheus' in group_names }}"
  shared: "{{ 'web-app-prometheus' in group_names }}"
# nocheck: playwright-service-flag β€” DB engine, covered by role-local integration tests
postgres:
  bond: 1
  enabled: true # nocheck: dynamic-flag
  shared: "{{ 'svc-db-postgres' in group_names }}"
# nocheck: playwright-service-flag: shared provider entity; the gateway itself is covered by this role's own Playwright spec
translate:
  bond: 1
  enabled: true # nocheck: dynamic-flag
  shared: true
  healthcheck:
    flavor: http_status
    path: languages
  modes:
    compose:
      enabled: true
    swarm:
      enabled: true
    host:
      enabled: false
  image: python
  # nocheck: docker-version  base of the self-built gateway, not the served application
  version: "3.13.15-slim"
  custom: true
  min_storage: 256MB
  ports:
    local:
      http: 8101
    internal:
      http: 8000
  lifecycle: beta
  cpus: "1.0"
  mem_reservation: 256m
  mem_limit: 512m
  pids_limit: 512
  router:
    strategy: "{{ 'system_one' if (lookup('config', 'web-svc-translate', 'services.s1.enabled') | bool) else 'preference' }}"
    question: translation-verdict
    order:
      - libretranslate
      - nllb
      - ltengine
      - ollama
    saturation_minimum: 10
    saturation_share: 0.8
    sample_trigger: requests
    sample_interval: 20
    failure_threshold: 3
  engine_timeout: 30
  history_table: infinito_translate_history
  cache_table: infinito_translate_cache
  failure_table: infinito_translate_failures
  weblate_project: infinito-nexus
  run_after:
    - svc-ai-s1
# nocheck: playwright-service-flag: bridged libretranslate backend, covered by the engine role's own spec
libretranslate-engine:
  bond: 1
  enabled: true # nocheck: dynamic-flag  the default backend ships with the gateway; without it the gateway has nothing to route to
  shared: true # nocheck: dynamic-flag  the engine always runs in its own role, never inside this one
# nocheck: playwright-service-flag: bridged NLLB backend, covered by the engine role's own spec
nllb-engine:
  bond: 0.5
  enabled: "{{ 'svc-ai-nllb-engine' in group_names }}"
  shared: "{{ 'svc-ai-nllb-engine' in group_names }}"
# nocheck: playwright-service-flag: bridged ltengine backend, covered by the engine role's own spec
ltengine:
  bond: 0.5
  enabled: "{{ 'svc-ai-ltengine' in group_names }}"
  shared: "{{ 'svc-ai-ltengine' in group_names }}"
# nocheck: playwright-service-flag: bridged ollama backend, covered by the engine role's own spec
ollama:
  bond: 0.5
  enabled: "{{ 'svc-ai-ollama' in group_names }}"
  shared: "{{ 'svc-ai-ollama' in group_names }}"
# nocheck: playwright-service-flag: the model gateway the ollama backend is reached through, covered by svc-ai-litellm's own tests
# nocheck: dynamic-flag  LITELLM_USABLE already carries the group-membership test plus the served-model check
litellm:
  bond: 0.5
  enabled: "{{ LITELLM_USABLE }}"
  shared: true
# nocheck: playwright-service-flag: the decider answers typed choices, covered by svc-ai-s1's own tests
s1:
  bond: 0.5
  enabled: "{{ 'svc-ai-s1' in group_names }}"
  shared: "{{ 'svc-ai-s1' in group_names }}"
# nocheck: playwright-service-flag: the translation memory, covered by web-app-weblate's own spec
weblate:
  bond: 0.5
  enabled: "{{ 'web-app-weblate' in group_names }}"
  shared: "{{ 'web-app-weblate' in group_names }}"
# nocheck: playwright-service-flag
tor:
  bond: 0.5
  enabled: "{{ 'svc-net-tor' in group_names }}"
  shared: "{{ 'svc-net-tor' in group_names }}"

docs:
  bond: 0.5
  enabled: "{{ 'web-app-docs' in group_names }}"
  shared: "{{ 'web-app-docs' in group_names }}"