Files
agents-marketplace/supplier/.env.tts.example
david a997445970 deploy/mainnet: add PiperTTS (private) + supplier-tts (audio.synthesize.piper.v1)
Mirrors deploy/testnet/docker-compose.supplier-tts.yml and the simulation
PiperTTS stack, co-located on vector-marketplace as a private internal
service on marketplace-mainnet-net (no Traefik labels, no public DNS for
Piper itself). Supplier reaches Piper at http://marketplace-mainnet-tts-piper:8000.
Voice: en_US-lessac-high. New supplier wallet + on-chain advert are
published out-of-band by the operator per the runbook header.

Files:
- deploy/mainnet/docker-compose.tts-piper.yml         openedai-speech-min, private
- deploy/mainnet/docker-compose.supplier-tts.yml      CAPABILITY_KIND=tts supplier
- deploy/mainnet/install-voice-extras.sh              voice download + yaml mapping
- deploy/mainnet/voice-mappings.py                    idempotent yaml editor
- supplier/.env.tts.example                           operator env template
- .gitignore                                          whitelist .env.*.example

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 17:15:06 +02:00

86 lines
3.8 KiB
Plaintext

# supplier/.env.tts.example — TTS supplier (audio.synthesize.piper.v1) — MAINNET
#
# Copy to supplier/.env.tts on the vector-marketplace host (chmod 600),
# fill secrets, then follow the runbook in deploy/mainnet/docker-compose.supplier-tts.yml
# header. .env.tts is gitignored — NEVER commit a populated copy.
#
# To generate a fresh Ed25519 wallet:
# docker compose -f deploy/mainnet/docker-compose.supplier-tts.yml run --rm \
# --entrypoint sh supplier \
# -c "node_modules/.bin/tsx supplier/src/cli/gen-keypair.ts --network 1"
# Fund the printed addr1... with ~5 AP3X mainnet via the Vector faucet/exchange,
# THEN paste the privateKeyHex below.
# ─── Required ─────────────────────────────────────────────────────────────
# 64-char hex Ed25519 private key seed for the TTS supplier wallet. SECRET.
SUPPLIER_PRIV_KEY_HEX=PASTE_64_HEX_CHARS_HERE
# Cardano network ID. "1" = mainnet. Do NOT change this on the mainnet host.
NETWORK_ID=1
# Public Vector mainnet Ogmios. HTTPS for builders/queries; the supplier
# uses HTTP fetch (no WebSocket), so wss:// silently errors with
# "unknown scheme".
OGMIOS_URL=https://ogmios.vector.mainnet.apexfusion.org
# Vector mainnet genesis time (ms). lucid-evolution's slot-config reads
# this at module load — see packages/shared/src/tx/internal/lucidContext.ts
# header for the historical footgun.
VECTOR_ZERO_TIME_MS=1756485600000
# Shared mainnet CIP-33 reference scripts (published once; reused across all
# mainnet suppliers/buyers).
ESCROW_REF_UTXO=c8d84c6d67ec67a1efe5e9c6c06d53020e05d1bb96d1c55ecb1eb7d5010c4d54#0
ADVERT_REF_UTXO=c8d84c6d67ec67a1efe5e9c6c06d53020e05d1bb96d1c55ecb1eb7d5010c4d54#1
# Opt in to real Ogmios submitTx/awaitTx. Any value other than literal "1"
# leaves the supplier in ReadOnly mode (safety net).
LIVE_CHAIN=1
# OutputReference of THIS supplier's on-chain advertisement UTxO.
# Filled in AFTER running supplier/src/cli/post-advert.ts (see runbook step i).
# Format: "<64-hex-tx-hash>#<int-output-index>"
ADVERT_REF=PASTE_TXHASH_HERE#0
# ─── Advert content (read by post-advert.ts; also stored on-chain) ────────
# Capability published in the advertisement. Buyers filter on this string
# when picking a TTS supplier.
ADVERT_CAPABILITY_ID=audio.synthesize.piper.v1
# Informational model label. The actual voice is selected per-request in
# the body (`voice: lessac` etc.); this string just helps buyers identify
# the supplier in dashboards/UIs.
ADVERT_MODEL=piper-en_US-lessac-high
# Token budget — metadata-only for TTS. The runtime always reports 0 tokens
# in receipts (see supplier/src/jobRunner.ts `runTtsJob`). Verify against
# the live testnet TTS advert before publishing if you want strict parity:
# curl https://mp-indexer.vector.testnet.apexfusion.org/suppliers \
# | jq '.[] | select(.capability_id=="audio.synthesize.piper.v1") | .max_output_tokens'
ADVERT_MAX_OUTPUT_TOKENS=0
# Maximum processing time the supplier guarantees per synthesis (ms).
ADVERT_MAX_PROCESSING_MS=60000
# Flat price per synthesis in AP3X lovelace.
ADVERT_PRICE_LOVELACE=2000000
# Supplier bond locked into the advert UTxO (lovelace).
ADVERT_SUPPLIER_BOND_LOVELACE=1000000
# Buyer bond required per escrow (lovelace).
ADVERT_BUYER_BOND_LOVELACE=1000000
# HTTPS endpoint buyers will call. Must match the Traefik Host rule in
# deploy/mainnet/docker-compose.supplier-tts.yml.
ADVERT_ENDPOINT_URL=https://mp-suppliers-tts.vector.apexfusion.org
# Optional off-chain detail pointer (IPFS / HTTPS URI). Leave empty for v1.
ADVERT_DETAIL_URI=
# Optional sha256 of the detail JSON (64 hex chars). If empty, defaults to
# sha256("") = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.
ADVERT_DETAIL_HASH=