Ny jobbtype `tts_generate` som kaller ElevenLabs text-to-speech API, lagrer MP3-lyd i CAS, og oppretter media-node med has_media-edge. Voice-preferanse løses i tre lag: eksplisitt i payload → nodens metadata.voice_preference → ELEVENLABS_DEFAULT_VOICE env. Dette er "mottaker-preferanse i metadata" — en node kan sette voice_preference i sin metadata for å styre hvilken stemme som brukes. Ny migrasjon 009: resource_usage_log-tabell for sporing av ressursforbruk (TTS, AI, Whisper, CAS). Ref: docs/features/ressursforbruk.md Endringer: - maskinrommet/src/tts.rs: TTS-handler med ElevenLabs-integrasjon - maskinrommet/src/intentions.rs: POST /intentions/generate_tts - maskinrommet/src/jobs.rs: Dispatcher for tts_generate - migrations/009_resource_usage_and_tts.sql: resource_usage_log - scripts/maskinrommet-env.sh: ELEVENLABS_* env-variabler Krever: ELEVENLABS_API_KEY i /srv/synops/.env (placeholder lagt til) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
37 lines
1.6 KiB
Bash
Executable file
37 lines
1.6 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Genererer /tmp/maskinrommet.env med Docker container-IP-er.
|
|
# Kjøres av systemd ExecStartPre.
|
|
|
|
set -euo pipefail
|
|
|
|
ENV_FILE="/srv/synops/.env"
|
|
read_env() { grep "^$1=" "$ENV_FILE" | head -1 | cut -d= -f2; }
|
|
container_ip() { docker inspect "$1" --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'; }
|
|
|
|
PG_IP=$(container_ip sidelinja-postgres-1)
|
|
STDB_IP=$(container_ip sidelinja-spacetimedb-1)
|
|
WHISPER_IP=$(container_ip sidelinja-faster-whisper-1 2>/dev/null || echo "")
|
|
AI_GW_IP=$(container_ip sidelinja-ai-gateway-1 2>/dev/null || echo "")
|
|
LIVEKIT_IP=$(container_ip sidelinja-livekit-1 2>/dev/null || echo "")
|
|
|
|
cat > /tmp/maskinrommet.env <<EOF
|
|
DATABASE_URL=postgres://$(read_env POSTGRES_USER):$(read_env POSTGRES_PASSWORD)@${PG_IP}:5432/synops
|
|
SPACETIMEDB_URL=http://${STDB_IP}:3000
|
|
SPACETIMEDB_DATABASE=$(read_env SPACETIMEDB_DATABASE)
|
|
SPACETIMEDB_TOKEN=$(read_env SPACETIMEDB_TOKEN)
|
|
AUTHENTIK_ISSUER=$(read_env AUTHENTIK_ISSUER)
|
|
AUTHENTIK_CLIENT_ID=$(read_env AUTHENTIK_CLIENT_ID)
|
|
BIND_ADDR=0.0.0.0:3100
|
|
CAS_ROOT=/srv/synops/media/cas
|
|
WHISPER_URL=http://${WHISPER_IP:-localhost}:8000
|
|
AI_GATEWAY_URL=http://${AI_GW_IP:-localhost}:4000
|
|
LITELLM_MASTER_KEY=$(read_env LITELLM_MASTER_KEY)
|
|
LIVEKIT_URL=http://${LIVEKIT_IP:-localhost}:7880
|
|
LIVEKIT_API_KEY=$(read_env LIVEKIT_API_KEY)
|
|
LIVEKIT_API_SECRET=$(read_env LIVEKIT_API_SECRET)
|
|
ELEVENLABS_API_KEY=$(read_env ELEVENLABS_API_KEY)
|
|
ELEVENLABS_DEFAULT_VOICE=$(read_env ELEVENLABS_DEFAULT_VOICE)
|
|
ELEVENLABS_MODEL=$(read_env ELEVENLABS_MODEL)
|
|
PROJECT_DIR=/home/vegard/synops
|
|
RUST_LOG=maskinrommet=debug,tower_http=debug
|
|
EOF
|