File size: 3,506 Bytes
53ea588
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# Copyright (c) 2025, NVIDIA CORPORATION.  All rights reserved.
#
# NVIDIA CORPORATION and its licensors retain all intellectual property
# and proprietary rights in and to this software, related documentation
# and any modifications thereto.  Any use, reproduction, disclosure or
# distribution of this software and related documentation without an express
# license agreement from NVIDIA CORPORATION is strictly prohibited.
# OpenAI API key
if [[ -f /secrets/openai_api_key.txt ]]; then
    export OPENAI_API_KEY=$(cat /secrets/openai_api_key.txt)
fi
# NVIDIA API key
if [[ -f /secrets/nvidia_api_key.txt ]]; then
    export NVIDIA_API_KEY=$(cat /secrets/nvidia_api_key.txt)
fi
# ElevenLabs API key
if [[ -f /secrets/elevenlabs_api_key.txt ]]; then
    export ELEVENLABS_API_KEY=$(cat /secrets/elevenlabs_api_key.txt)
fi

if [[ -f /secrets/custom.env ]] ; then
    set -o allexport
    . /secrets/custom.env
    set +o allexport
fi

if [ ! -d "/code" ]; then
    echo "Directory /code not found. Creating it..."
    mkdir -p /code
    if [ $? -ne 0 ]; then
        echo "ERROR: Failed to create /code directory."
        exit 1
    fi
    chown -R 0:0 /code
fi
# Ensure Python uses the correct module locations
export PYTHONPATH="/code:$PYTHONPATH"
# Access the environment variables
IMAGE_NAME=$IMAGE_NAME
IMAGE_TAG=$IMAGE_TAG
# Combine image name and tag into a sanitized unique identifier
SANITIZED_IMAGE_NAME=$(echo "$IMAGE_NAME" | tr '/' '_')
SANITIZED_IMAGE_TAG=$(echo "$IMAGE_TAG" | tr '/' '_')
IMAGE_IDENTIFIER="${SANITIZED_IMAGE_NAME}_${SANITIZED_IMAGE_TAG}"
INITIALIZED_FILE="/code/.initialized_${IMAGE_IDENTIFIER}"
# Debugging outputs for validation and environment correctness
echo "SANITIZED_IMAGE_NAME: $SANITIZED_IMAGE_NAME"
echo "SANITIZED_IMAGE_TAG: $SANITIZED_IMAGE_TAG"
echo "IMAGE_IDENTIFIER: $IMAGE_IDENTIFIER"
echo "INITIALIZED_FILE: $INITIALIZED_FILE"
echo "PYTHONPATH: $PYTHONPATH"
echo "Running from: $(pwd)"
echo "Contents of /code:"
ls -l /code
# First time setup: Copy files if .initialized for this image and tag doesn't exist
# Check if initialization marker exists
echo "Checking for initialized file: $INITIALIZED_FILE"
if [ ! -f "$INITIALIZED_FILE" ]; then
    echo "First time setup: Copying files..."
    cp -r /app/* /code/
    if [ $? -ne 0 ]; then
        echo "ERROR: Failed to copy files from /app to /code."
        exit 1
    fi
    touch "$INITIALIZED_FILE"
    if [ $? -ne 0 ]; then
        echo "ERROR: Failed to create initialized file $INITIALIZED_FILE."
        exit 1
    fi
    # Copy config from mounted volume
    mkdir -p /code/configs
    cp /opt/ext-files/config.yaml /code/configs/config.yaml
    echo "Setup complete for image: $IMAGE_IDENTIFIER"
else
    echo "Setup already initialized for image: $IMAGE_IDENTIFIER"
fi
# Set environment variables for entrypoint
cd /code
export CONFIG_PATH=./configs/config.yaml
export APP_DIR=/code
export PORT=8000

if [ "$DEV" -ne 0 ]; then
    # Avoid to download  the .venv through the ACE Configurator
    rm -rf "$APP_DIR"/.venv
    # launch the command uv sync if a modification is made on the file "pyproject.toml"
    # since the python interpreter launched by uvicorn is under /app/.venv/bin refreshing this venv with uv sync will add the new dependencies available for the interpreter
    # as soon it is restarted by uvicorn
    watchmedo shell-command -R -p "pyproject.toml" -w -c "UV_PROJECT_ENVIRONMENT='/app/.venv' uv sync && touch $APP_DIR/**/*.py 2>/proc/1/fd/2 >/proc/1/fd/2" "$APP_DIR" &
fi