ApiCore-Whisper: transcribe.py liest das Manifest im RAM-Arbeitsordner, dekodiert mit festem Demuxer je Endung, misst die Länge vor dem Abschreiben (TOO_LONG > 240 s, DECODE_FAILED bei Länge 0), sperrt das Netz vor dem Modell-Laden und schreibt nur Zähler auf stdout. Image: python:3.12-slim per Digest, Nutzer 1000, alle Pakete mit Hash (faster-whisper 1.2.1, av 18.1.0 wegen Inkompatibilität mit av 19), Modell faster-whisper-small auf fester Revision mit SHA-256 je Datei. CI-Workflow nur bei Änderungen unter ApiCore-Whisper/, Actions per SHA. deploy/k8s/components/voice: CronJob alle 2 Minuten mit fetch, whisper, ingest (gleiche UID, getrennte /tmp-Volumes, damit der Decoder dem Container mit den Secrets nichts unterschieben kann; whisper ohne Secrets und Umgebungsvariablen außer WHISPER_CPU_THREADS), Overlay mit Platzhalter-Digest, ConfigMap-Werte für Sprache, Policy-Tests (55). Die Anbindung des Anthropic-Schlüssels bleibt offen (Ruling 9). Refs #27 Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
38 lines
2.1 KiB
YAML
38 lines
2.1 KiB
YAML
# Werte fuer den Cluster. Bedeutung der Schluessel:
|
|
# base/backend/configmap.example.yaml. Live-Werte (Stand 2026-10-15) aus dem
|
|
# Cluster uebernommen (Runbook Schritt 1). Geheimes gehoert ins Secret
|
|
# apicore-backend-secret, nie hierher.
|
|
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: apicore-backend-config
|
|
data:
|
|
PORT: "3001"
|
|
JWT_ACCESS_EXPIRES_IN: "15m"
|
|
JWT_REFRESH_EXPIRES_IN: "7d"
|
|
FRONTEND_ORIGIN: "https://apicore.encry.de"
|
|
DOCUMENTS_STORAGE_PATH: "/data/documents"
|
|
BACKUP_STORAGE_PATH: "/data/backups"
|
|
BACKUP_CRON_SCHEDULE: "0 3 * * *"
|
|
BACKUP_RETENTION_COUNT: "30"
|
|
COOKIE_SECURE: "true"
|
|
TRUST_PROXY: "loopback, 10.42.0.0/16, 173.245.48.0/20, 103.21.244.0/22, 103.22.200.0/22, 103.31.4.0/22, 141.101.64.0/18, 108.162.192.0/18, 190.93.240.0/20, 188.114.96.0/20, 197.234.240.0/22, 198.41.128.0/17, 162.158.0.0/15, 104.16.0.0/13, 104.24.0.0/14, 172.64.0.0/13, 131.0.72.0/22, 2400:cb00::/32, 2606:4700::/32, 2803:f800::/32, 2405:b500::/32, 2405:8100::/32, 2a06:98c0::/29, 2c0f:f248::/32"
|
|
OIDC_ISSUER_URL: "https://login.microsoftonline.com/30e1c0c9-0295-4074-b45d-c3372140d2a4/v2.0/.well-known/openid-configuration"
|
|
# Oeffentliche Client-ID der Entra-App (kein Geheimnis); laeuft live hier.
|
|
OIDC_CLIENT_ID: "fe64e5ac-55c4-46dc-8b86-3340797d2451"
|
|
OIDC_REDIRECT_URI: "https://apicorebackend.encry.de/api/v1/auth/sso/callback"
|
|
WEATHER_HISTORY_SOURCE: "open-meteo"
|
|
OPEN_METEO_FORECAST_URL: "https://api.open-meteo.com/v1/forecast"
|
|
OPEN_METEO_ARCHIVE_URL: "https://archive-api.open-meteo.com/v1/archive"
|
|
# Telegram: Name des Bots (ohne @) fuer den Deep Link. Leer, solange der Bot
|
|
# bei BotFather noch nicht angelegt ist (Runbook); dann den Namen eintragen.
|
|
# Das Token liegt im Secret apicore-telegram (nur Worker).
|
|
TELEGRAM_BOT_USERNAME: ""
|
|
# Sprachnotizen (T7). VOICE_RECORDING_ENABLED blendet die Aufnahme in der App
|
|
# aus ("false") oder ein ("true"); VOICE_MODEL und VOICE_DAILY_EXTRACTIONS
|
|
# gelten fuer die Claude-Auswertung (zurueckgestellt). Den Schluessel
|
|
# ANTHROPIC_API_KEY gibt es hier nie: er gehoert ins Secret apicore-anthropic.
|
|
VOICE_RECORDING_ENABLED: "false"
|
|
VOICE_MODEL: "claude-sonnet-5-5"
|
|
VOICE_DAILY_EXTRACTIONS: "60"
|