# Babbeldoos Helm chart

Vlaamse spraak op Kubernetes, met GPU/MIG, blijvende uitspraaklijst, optionele OIDC/Dex-login en de bestaande API-token-gateway.

```sh
helm repo add ailab https://helm.ai-lab.dev
helm repo update ailab
helm show values ailab/babbeldoos > babbeldoos-values.yaml
# Pas de values en imagePullSecrets aan voor jouw omgeving.
helm upgrade --install babbeldoos ailab/babbeldoos \
  --version 0.1.0 --namespace babbeldoos --create-namespace \
  -f babbeldoos-values.yaml --wait --timeout 20m
```

De standaardinstallatie heeft alleen een private ClusterIP-service. PIN beschermt het beheer; spraakgeneratie vereist een afgeschermd netwerk of de OIDC-optie. De chart weigert ingress zonder OIDC.

## Vereisten

- NVIDIA device plugin, CUDA-compatibele NVIDIA GPU en voldoende geheugen; standaard een volledige GPU, AI Lab gebruikt `nvidia.com/mig-2g.35gb`.
- Toegang tot `ghcr.io/howestailab/babbeldoos-tts` en een eigen Kubernetes imagePullSecret. Het image is momenteel privé en bevat de adapters en stemmen. De chart bevat geen modelgewichten of inloggegevens en verandert de toegang tot het image niet.
- Dynamische opslag of een bestaande PVC (`persistence.existingClaim`). Standaard wordt de state-PVC bewaard bij uninstall. Cache is tijdelijk; bij een herstart worden de Chatterbox-basisgewichten opnieuw gedownload.
- De startprobe geeft de modellen maximaal circa 15 minuten om te laden. Eerste synthese kan langer duren.
- Een instantie gebruikt één GPU en één state-volume. De chart staat maximaal één replica toe en gebruikt Recreate.

## Howest-login

Zie `examples/howest.yaml` in de bronrepository voor een nieuwe installatie. Voor elke geactiveerde host is een geregistreerde Dex-callback `https://HOST/oauth2/callback` nodig. Vul je eigen client-id, hosts en beheerders in. Kopieer de bestaande productie-hosts niet naar een tweede release.

Maak buiten Helm een Secret met de keys `OAUTH2_PROXY_CLIENT_SECRET` en `OAUTH2_PROXY_COOKIE_SECRET`; geef de naam via `auth.existingSecret`. Bewaar nooit secretwaarden in values, chartpackages of git. Het cookie-secret moet geschikt zijn voor oauth2-proxy (16/24/32 bytes, base64-gecodeerd).

`auth.adminEmails` geeft beheerrechten. Alleen deze adressen en `auth.allowedEmails` kunnen via de loginproxy binnen. Bij proxy-auth staat er altijd een NetworkPolicy voor de TTS-service; de CNI moet NetworkPolicies afdwingen. Andere policies mogen die TTS-ingress niet opnieuw openzetten. Kubeflow zelf is geen dependency; Dex is hier de identity provider.

Gebruik HTTPS op de ingresscontroller. Voor Traefik kan de publieke ingress de cloudflare-certresolver gebruiken; voor andere controllers configureer je `ingress.tls` en hun TLS-instellingen. Een intern domein heeft zijn eigen callback en proxy. DNS, certificaten en Dex-clients worden niet door deze chart aangemaakt.

## API-tokens en limieten

`api.enabled` schakelt de gatewayadapter in. Geef `api.gatewayUrl`, `api.model` en een Secretnaam met key `ADAPTER_KEY` via `api.existingSecret` op. De openbare route is uitsluitend `/v1/audio/speech`. De private adapterroute wordt nooit in de ingress gepubliceerd.

Registreer het model apart in de bestaande LiteLLM-gateway met de interne adapter-URL uit `helm get notes`. Gebruik daar dezelfde adapter-key. Tokens, intrekken, quota en limieten blijven bij de gateway/AI Lab-portal; een chartinstallatie registreert geen nieuw tokenproduct. Requests gebruiken WAV, maximaal 2000 tekens en stemmen Ann, Diederik, Elenor, Jan, Jessy of Petra.

## Beheer zonder OIDC (alleen privé)

Open de service met `kubectl port-forward`. Stel een PIN interactief in via stdin, niet als Helm-value:

```sh
# Vervang RELEASE-TTS door de deploymentnaam uit helm get manifest.
kubectl -n babbeldoos exec -i deploy/RELEASE-TTS -- python /app/server.py --set-pin
```

## Bestaande Robotics-installatie

De draaiende gedeelde Babbeldoos is niet omgezet of door deze chart overgenomen. State, bestaande OAuth-clients en gatewaytokens blijven behouden. Voor een latere migratie: maak een state-backup, leg de exacte live configuratie naast de chart en plan een gecontroleerde overname. Installeer deze chart niet met bestaande resource- of hostnamen.

Robotbesturing via ROS is apart. `fleetSpeechUrl` en optioneel `ollamaUrl` moeten bereikbaar zijn vanuit de pod; een gezonde TTS-deployment bevestigt geen fysieke robotwerking.
