ARG CMAKE_MAX_JOBS
ARG CANN_VERSION=8.2
ARG CANN_ARCHS=910b
ARG MINDIE_VERSION=2.1.rc1

FROM gpustack/runner:cann${CANN_VERSION}-${CANN_ARCHS}-mindie${MINDIE_VERSION} AS mindie
SHELL ["/bin/bash", "-eo", "pipefail", "-c"]

ARG TARGETPLATFORM
ARG TARGETOS
ARG TARGETARCH

## Refresh entrypoint

RUN <<EOF
    # Entrypoint

    PYTHON_LIB_PREFIX=$(python3 -c "import sys; print(sys.base_prefix);")
    cat <<EOT >${CANN_HOME}/mindie/latest/mindie-service/bin/mindieservice_daemon
#!/usr/bin/bash

# Argument
#
MINDIE_LOG_LEVEL=\${MINDIE_LOG_LEVEL:-INFO}
MIES_CERTS_LOG_LEVEL=\${MIES_CERTS_LOG_LEVEL:-INFO}
MINDIE_LLM_LOG_LEVEL=\${MINDIE_LLM_LOG_LEVEL:-WARN}
MINDIE_LLM_PYTHON_LOG_LEVEL=\${MINDIE_LLM_PYTHON_LOG_LEVEL:-WARN}
ASCEND_GLOBAL_LOG_LEVEL=\${ASCEND_GLOBAL_LOG_LEVEL:-3}
ASCEND_SLOG_LEVEL=\${ASCEND_SLOG_LEVEL:-WARN}
MINDIE_RT_LOG_LEVEL=\${MINDIE_RT_LOG_LEVEL:-3}
ATB_LOG_LEVEL=\${ATB_LOG_LEVEL:-ERROR}
ASDOPS_LOG_LEVEL=\${ASDOPS_LOG_LEVEL:-ERROR}
OCK_LOG_LEVEL=\${OCK_LOG_LEVEL:-ERROR}
LOG_LEVEL=\${LOG_LEVEL:-ERROR}
TORCH_AIE_LOG_LEVEL=\${TORCH_AIE_LOG_LEVEL:-3}

# Prepare
#
export LD_LIBRARY_PATH=${PYTHON_LIB_PREFIX}/lib:${PYTHON_LIB_PREFIX}/lib64:\${LD_LIBRARY_PATH}
source \${CANN_HOME}/ascend-toolkit/set_env.sh
source \${CANN_HOME}/nnal/atb/set_env.sh
source \${CANN_HOME}/atb-models/set_env.sh
source \${CANN_HOME}/mindie/set_env.sh

# Configure Logging
#
export MINDIE_LOG_LEVEL=\${MINDIE_LOG_LEVEL}
export MINDIE_LOG_TO_STDOUT=1
export MINDIE_LOG_TO_FILE=0
export MIES_CERTS_LOG_LEVEL=\${MIES_CERTS_LOG_LEVEL}
export MIES_CERTS_LOG_TO_STDOUT=1
export MIES_CERTS_LOG_TO_FILE=0
export MINDIE_LLM_LOG_LEVEL=\${MINDIE_LLM_LOG_LEVEL}
export MINDIE_LLM_LOG_TO_STDOUT=1
export MINDIE_LLM_LOG_TO_FILE=0
export MINDIE_LLM_PYTHON_LOG_LEVEL=\${MINDIE_LLM_PYTHON_LOG_LEVEL}
export MINDIE_LLM_PYTHON_LOG_TO_STDOUT=1
export MINDIE_LLM_PYTHON_LOG_TO_FILE=0
export ASCEND_GLOBAL_LOG_LEVEL=\${ASCEND_GLOBAL_LOG_LEVEL}
export ASCEND_GLOBAL_EVENT_ENABLE=0
export ASCEND_SLOG_LEVEL=\${ASCEND_SLOG_LEVEL}
export ASCEND_SLOG_PRINT_TO_STDOUT=1
export ASCEND_SLOG_PRINT_TO_FILE=0
export MINDIE_RT_LOG_LEVEL=\${MINDIE_RT_LOG_LEVEL}
export MINDIE_RT_LOG_PRINT_TO_STDOUT=1
export MINDIE_RT_LOG_PRINT_TO_FILE=0
export ATB_LOG_LEVEL=\${ATB_LOG_LEVEL}
export ATB_LOG_TO_STDOUT=1
export ATB_LOG_TO_FILE=0
export ATB_STREAM_SYNC_EVERY_KERNEL_ENABLE=0
export ATB_LOG_TO_FILE_FLUSH=0
export ASDOPS_LOG_LEVEL=\${ASDOPS_LOG_LEVEL}
export ASDOPS_LOG_TO_STDOUT=1
export ASDOPS_LOG_TO_FILE=0
export OCK_LOG_LEVEL=\${OCK_LOG_LEVEL}
export OCK_LOG_TO_STDOUT=1
export OCK_LOG_TO_FILE=0
export LOG_LEVEL=\${LOG_LEVEL}
export LOG_TO_STDOUT=1
export LOG_TO_FILE=0
export TORCH_AIE_LOG_LEVEL=\${TORCH_AIE_LOG_LEVEL}
export TORCH_AIE_PRINT_TO_STDOUT=1
export TORCH_AIE_PRINT_TO_FILE=0

# Execute
#
echo "Starting MindIE Service Daemon ..."
if [[ \${MINDIE_LOG_LEVEL} == "DEBUG" ]]; then
	echo "With envs:"
	env
fi
cd \$(dirname \${BASH_SOURCE[0]})/..
echo "On:"
pwd
./bin/\$(basename \${BASH_SOURCE[0]})_ "\$@"
EOT
    chmod a+x ${CANN_HOME}/mindie/latest/mindie-service/bin/mindieservice_daemon

EOF

## Entrypoint

WORKDIR /
ENTRYPOINT [ "tini", "--" ]
