; TODO: Consider using supervisor environment file to reduce duplication ; ============================================ ; SPECMEM BRAIN CONTAINER - SUPERVISORD CONFIG ; ============================================ ; Manages all services inside the container: ; - PostgreSQL 16 (unix socket only) ; - Embedding server (frankenstein-embeddings.py) ; - Translate server (hardwick-translate.py) ; - Health monitor (writes health.json) ; ============================================ [supervisord] nodaemon=true logfile=/data/logs/supervisord.log logfile_maxbytes=10MB logfile_backups=2 pidfile=/data/run/supervisord.pid childlogdir=/data/logs ; user runs as whoever started it (specmem via entrypoint privilege drop) ; ============================================ ; PostgreSQL ; ============================================ [program:postgres] command=/usr/lib/postgresql/16/bin/postgres -D /data/pgdata -k /data/run autostart=true autorestart=true startretries=3 startsecs=5 stopwaitsecs=30 stopsignal=INT stdout_logfile=/data/logs/postgresql.log stderr_logfile=/data/logs/postgresql.log priority=100 ; ============================================ ; Embedding Server (frankenstein-embeddings.py) ; ============================================ [program:embedding] command=python3 -u /app/frankenstein-embeddings.py --socket /data/run/embed.sock --service autostart=true autorestart=true startretries=5 startsecs=10 stopwaitsecs=15 stopsignal=TERM stdout_logfile=/data/logs/embedding.log stderr_logfile=/data/logs/embedding.log environment= PYTHONUNBUFFERED="1", SPECMEM_EMBEDDING_SOCKET="/data/run/embed.sock", SPECMEM_SOCKET_DIR="/data/run", SPECMEM_CONTAINER_MODE="true", SPECMEM_SKIP_MODEL_WARMUP="1", SPECMEM_CPU_THREADS="1", SPECMEM_EMBEDDING_MAX_WORKERS="4", SENTENCE_TRANSFORMERS_HOME="/app/models", SPECMEM_MODEL_PATH="/app/models/all-MiniLM-L6-v2", OMP_NUM_THREADS="1", MKL_NUM_THREADS="1", OPENBLAS_NUM_THREADS="1", SPECMEM_PROJECT_PATH="/data", SPECMEM_DB_HOST="/data/run", SPECMEM_DB_PORT="5432", SPECMEM_DB_USER="specmem", SPECMEM_DB_NAME="specmem" ; Wait for postgres to be ready priority=200 ; ============================================ ; Translation Server (hardwick-translate.py) ; ============================================ [program:translate] command=python3 -u /app/hardwick-translate.py --socket /data/run/translate.sock autostart=true autorestart=true startretries=3 startsecs=5 stopwaitsecs=10 stopsignal=TERM stdout_logfile=/data/logs/translate.log stderr_logfile=/data/logs/translate.log environment= SPECMEM_PROJECT_PATH="/data", SPECMEM_SOCKET_DIR="/data/run", SPECMEM_CONTAINER_MODE="true", OMP_NUM_THREADS="1", CT2_COMPUTE_TYPE="int8" priority=300 ; ============================================ ; Mini-COT Service (Pythia-410M chain-of-thought) ; ============================================ [program:minicot] command=python3 -u /app/mini-cot-service.py --socket /data/run/minicot.sock --model EleutherAI/pythia-410m autostart=true autorestart=true startretries=3 startsecs=15 stopwaitsecs=10 stopsignal=TERM stdout_logfile=/data/logs/minicot.log stderr_logfile=/data/logs/minicot.log environment= SPECMEM_PROJECT_PATH="/data", SPECMEM_SOCKET_DIR="/data/run", SPECMEM_CONTAINER_MODE="true", SPECMEM_MODEL_CACHE="/app/models/pythia-410m-onnx-quant", SPECMEM_DB_HOST="/data/run", SPECMEM_DB_PORT="5432", SPECMEM_DB_USER="specmem", SPECMEM_DB_NAME="specmem", OMP_NUM_THREADS="1" priority=400 ; ============================================ ; Health Monitor ; ============================================ [program:healthcheck] command=/app/healthcheck.sh autostart=true autorestart=true startretries=999 startsecs=0 stdout_logfile=/dev/null stderr_logfile=/data/logs/healthcheck.log priority=900 ; ============================================ ; Group ; ============================================ [group:specmem] programs=postgres,embedding,translate,minicot,healthcheck priority=999