Spaces:
Sleeping
Sleeping
| set -eu | |
| APP_HOST=${APP_HOST:-0.0.0.0} | |
| APP_PORT=${APP_PORT:-7860} | |
| CHROMA_HOST=${CHROMA_HOST:-127.0.0.1} | |
| CHROMA_PORT=${CHROMA_PORT:-8001} | |
| DATA_DIR=${CHROMA_DATA_DIR:-/home/user/app/data} | |
| UVICORN_LOG_LEVEL=${UVICORN_LOG_LEVEL:-info} | |
| echo "Runtime config:" | |
| echo " APP_HOST=$APP_HOST" | |
| echo " APP_PORT=$APP_PORT" | |
| echo " CHROMA_HOST=$CHROMA_HOST" | |
| echo " CHROMA_PORT=$CHROMA_PORT" | |
| echo " DATA_DIR=$DATA_DIR" | |
| echo " UVICORN_LOG_LEVEL=$UVICORN_LOG_LEVEL" | |
| mkdir -p "$DATA_DIR" | |
| echo "Starting ChromaDB on ${CHROMA_HOST}:${CHROMA_PORT} (data: $DATA_DIR)" | |
| chroma run --host "$CHROMA_HOST" --port "$CHROMA_PORT" --path "$DATA_DIR" & | |
| CHROMA_PID=$! | |
| echo "Waiting for ChromaDB..." | |
| python - <<'PY' | |
| import os, socket, time, sys | |
| h = os.environ.get('CHROMA_HOST','127.0.0.1') | |
| p = int(os.environ.get('CHROMA_PORT','8001')) | |
| for i in range(120): | |
| try: | |
| with socket.create_connection((h,p), timeout=0.5): | |
| print(f"Chroma ready after {i*0.5:.1f}s") | |
| sys.exit(0) | |
| except OSError: | |
| time.sleep(0.5) | |
| print('Timeout waiting for Chroma', file=sys.stderr) | |
| sys.exit(1) | |
| PY | |
| trap 'echo "Stopping..."; kill -TERM "$CHROMA_PID" 2>/dev/null || true; wait "$CHROMA_PID" 2>/dev/null || true' INT TERM | |
| echo "Starting FastAPI on ${APP_HOST}:${APP_PORT}" | |
| exec uvicorn app:app --host "$APP_HOST" --port "$APP_PORT" --log-level "$UVICORN_LOG_LEVEL" --access-log | |