From cc3de1a5f4cf1ee75ac4c639267528dd96bad8ef Mon Sep 17 00:00:00 2001 From: jelisaveta-talbot <268838642+jelisaveta-talbot@users.noreply.github.com> Date: Thu, 7 May 2026 05:17:20 +0200 Subject: [PATCH] deploy: marketplace-supplier-tts compose for audio.synthesize.piper.v1 Second supplier instance on apex-dashboard, dedicated to the new audio.synthesize.piper.v1 capability. Reuses supplier/Dockerfile but sets CAPABILITY_KIND=tts so the boot dispatch mounts /v1/audio/ synthesize routes instead of /v1/chat/completions. PIPER_URL points at the public CF hostname for the openedai-speech-min host on apex-simulation (no shared docker network with this host). Wallet, advert UTxO, .env.tts, and Cloudflare DNS+Skip rule are managed out-of-band; this compose just brings up the container that serves the marketplace-side of the TTS lifecycle. --- .../testnet/docker-compose.supplier-tts.yml | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 deploy/testnet/docker-compose.supplier-tts.yml diff --git a/deploy/testnet/docker-compose.supplier-tts.yml b/deploy/testnet/docker-compose.supplier-tts.yml new file mode 100644 index 0000000..8f89612 --- /dev/null +++ b/deploy/testnet/docker-compose.supplier-tts.yml @@ -0,0 +1,70 @@ +# deploy/testnet/docker-compose.supplier-tts.yml — TTS Supplier — TESTNET +# +# Second supplier instance, dedicated to capability `audio.synthesize.piper.v1`. +# Uses the same Dockerfile as the chat supplier — the difference is purely +# environment: CAPABILITY_KIND=tts switches the route handler from chat +# (`POST /v1/chat/completions`) to TTS (`POST /v1/audio/synthesize`) and +# expects `PIPER_URL` instead of `OLLAMA_URL`. +# +# Same three external networks as the chat supplier; Traefik routes the +# new public hostname `mp-suppliers-tts.vector.testnet.apexfusion.org` +# to this container. +# +# Bring up: +# docker compose -f deploy/testnet/docker-compose.supplier-tts.yml up -d --build + +name: marketplace-supplier-tts + +services: + supplier-tts: + build: + context: ../.. + dockerfile: supplier/Dockerfile + container_name: marketplace-supplier-tts + restart: unless-stopped + env_file: + - path: ../../supplier/.env.tts + required: true + environment: + # Compose-level overrides — anchor to the docker network names + # regardless of what the .env says. + CAPABILITY_KIND: "tts" + # PiperTTS lives on apex-simulation; reach via its public CF hostname + # (no shared docker network with this host). + PIPER_URL: "https://tts-piper.vector.testnet.apexfusion.org" + OGMIOS_URL: http://ogmios:1337 + PORT: "8080" + LIVE_CHAIN: "1" + NETWORK_ID: "0" + healthcheck: + test: ["CMD-SHELL", "wget -qO- http://localhost:8080/healthz >/dev/null || exit 1"] + interval: 20s + timeout: 5s + retries: 3 + start_period: 15s + networks: + - marketplace-net + - apex-net + - traefik-net + labels: + - "traefik.enable=true" + - "traefik.docker.network=dashboard_default" + - "traefik.http.routers.mp-suppliers-tts.entrypoints=web" + - "traefik.http.routers.mp-suppliers-tts.rule=Host(`mp-suppliers-tts.vector.testnet.apexfusion.org`)" + - "traefik.http.services.mp-suppliers-tts.loadbalancer.server.port=8080" + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + +networks: + marketplace-net: + external: true + name: marketplace-net + apex-net: + external: true + name: apex-dashboard_apex-net + traefik-net: + external: true + name: dashboard_default