diff --git a/.gitignore b/.gitignore
index 2f509cfc0..55c7381fb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@ log/
*.bin
*.log
*.tar.gz
+*.zip
*.lib
assembly/runtime/*
**/dist/
diff --git a/assembly/bin/supersonic-build.sh b/assembly/bin/supersonic-build.sh
index 2561afd21..4aeae14e2 100755
--- a/assembly/bin/supersonic-build.sh
+++ b/assembly/bin/supersonic-build.sh
@@ -1,58 +1,79 @@
#!/usr/bin/env bash
-set -x
sbinDir=$(cd "$(dirname "$0")"; pwd)
chmod +x $sbinDir/supersonic-common.sh
source $sbinDir/supersonic-common.sh
+cd $projectDir
+MVN_VERSION=$(mvn help:evaluate -Dexpression=project.version | grep -e '^[^\[]')
+
cd $baseDir
-
service=$1
-#1. build backend java modules
-rm -fr ${buildDir}/*.tar.gz
-rm -fr dist
-set +x
-mvn -f $baseDir/../ clean package -DskipTests
-# check build result
-if [ $? -ne 0 ]; then
- echo "Failed to build backend Java modules."
- exit 1
+if [ -z "$service" ]; then
+ service=${STANDALONE_SERVICE}
fi
-#2. move package to build
-cp $baseDir/../launchers/headless/target/*.tar.gz ${buildDir}/supersonic-headless.tar.gz
-cp $baseDir/../launchers/chat/target/*.tar.gz ${buildDir}/supersonic-chat.tar.gz
-cp $baseDir/../launchers/standalone/target/*.tar.gz ${buildDir}/supersonic-standalone.tar.gz
+function buildJavaService {
+ model_name=$1
+ echo "starting building supersonic-${model_name} service"
+ mvn -f $projectDir/launchers/${model_name} clean package -DskipTests
+ if [ $? -ne 0 ]; then
+ echo "Failed to build backend Java modules."
+ exit 1
+ fi
+ cp $projectDir/launchers/${model_name}/target/*.tar.gz ${buildDir}/
+ echo "finished building supersonic-${model_name} service"
+}
-#3. build frontend webapp
-chmod +x $baseDir/../webapp/start-fe-prod.sh
-cd ../webapp
-sh ./start-fe-prod.sh
-cp -fr ./supersonic-webapp.tar.gz ${buildDir}/
+function buildWebapp {
+ echo "starting building supersonic webapp"
+ chmod +x $projectDir/webapp/start-fe-prod.sh
+ cd $projectDir/webapp
+ sh ./start-fe-prod.sh
+ cp -fr ./supersonic-webapp.tar.gz ${buildDir}/
+ # check build result
+ if [ $? -ne 0 ]; then
+ echo "Failed to build frontend webapp."
+ exit 1
+ fi
+ echo "finished building supersonic webapp"
+}
-# check build result
-if [ $? -ne 0 ]; then
- echo "Failed to build frontend webapp."
- exit 1
-fi
-#4. copy webapp to java classpath
-cd $buildDir
-tar xvf supersonic-webapp.tar.gz
-mv supersonic-webapp webapp
-cp -fr webapp ../../launchers/headless/target/classes
-cp -fr webapp ../../launchers/chat/target/classes
-cp -fr webapp ../../launchers/standalone/target/classes
-rm -fr ${buildDir}/webapp
+function packageRelease {
+ model_name=$1
+ release_dir=supersonic-${model_name}-${MVN_VERSION}
+ service_name=launchers-${model_name}-${MVN_VERSION}
+ echo "starting packaging supersonic release"
+ cd $buildDir
+ mkdir $release_dir
+ # package webapp
+ tar xvf supersonic-webapp.tar.gz
+ mv supersonic-webapp webapp
+ json='{"env": "'$model_name'"}'
+ echo $json > webapp/supersonic.config.json
+ mv webapp $release_dir/
+ # package java service
+ tar xvf $service_name-bin.tar.gz
+ mv $service_name/* $release_dir/
+ # generate zip file
+ zip -r $release_dir.zip $release_dir
+ # delete intermediate files
+ rm -rf supersonic-webapp.tar.gz
+ rm -rf $service_name-bin.tar.gz
+ rm -rf $service_name
+ echo "finished packaging supersonic release"
+}
-#5. build backend python modules
-if [ "$service" == "pyllm" ]; then
- echo "start installing python modules with pip: ${pip_path}"
- requirementPath=$baseDir/../headless/python/requirements.txt
+#1. build backend services
+if [ "$service" == $PYLLM_SERVICE ]; then
+ echo "start installing python modules required by supersonic-pyllm: ${pip_path}"
+ requirementPath=$projectDir/headless/python/requirements.txt
${pip_path} install -r ${requirementPath}
echo "install python modules success"
-fi
-
-#6. reset runtime
-rm -fr $runtimeDir/supersonic*
-moveAllToRuntime
-setEnvToWeb chat
-setEnvToWeb headless
+elif [ "$service" == "webapp" ]; then
+ buildWebapp
+ cp -fr webapp $projectDir/launchers/$STANDALONE_SERVICE/target/classes
+else
+ buildJavaService $service
+ buildWebapp
+ packageRelease $service
+fi
\ No newline at end of file
diff --git a/assembly/bin/supersonic-common.sh b/assembly/bin/supersonic-common.sh
index b2e80fc66..aebe480ac 100755
--- a/assembly/bin/supersonic-common.sh
+++ b/assembly/bin/supersonic-common.sh
@@ -6,105 +6,19 @@ pip_path=${PIP_PATH:-"pip3"}
sbinDir=$(cd "$(dirname "$0")"; pwd)
baseDir=$(cd "$sbinDir/.." && pwd -P)
-runtimeDir=$baseDir/../runtime
+runtimeDir=$baseDir/runtime
buildDir=$baseDir/build
+projectDir=$baseDir/..
readonly CHAT_APP_NAME="supersonic_chat"
readonly HEADLESS_APP_NAME="supersonic_headless"
readonly PYLLM_APP_NAME="supersonic_pyllm"
readonly STANDALONE_APP_NAME="supersonic_standalone"
+
readonly CHAT_SERVICE="chat"
readonly HEADLESS_SERVICE="headless"
readonly PYLLM_SERVICE="pyllm"
readonly STANDALONE_SERVICE="standalone"
+
readonly PYLLM_HOST="127.0.0.1"
readonly PYLLM_PORT="9092"
-
-function setEnvToWeb {
- model_name=$1
- json='{"env": "'$model_name'"}'
- echo $json > ${runtimeDir}/supersonic-${model_name}/webapp/supersonic.config.json
- echo $json > $baseDir/../launchers/${model_name}/target/classes/webapp/supersonic.config.json
-}
-
-function moveToRuntime {
- model_name=$1
- file="${buildDir}/supersonic-${model_name}.tar.gz"
- if [ -f "$file" ]; then
- tar -zxvf "$file" -C ${runtimeDir}
- mv ${runtimeDir}/launchers-${model_name}-* ${runtimeDir}/supersonic-${model_name}
- mkdir -p ${runtimeDir}/supersonic-${model_name}/webapp
- cp -fr ${buildDir}/webapp/* ${runtimeDir}/supersonic-${model_name}/webapp
- else
- echo "File $file does not exist. Skipping the move to runtime."
- fi
-}
-
-function moveAllToRuntime {
- mkdir -p ${runtimeDir}
- tar xvf ${buildDir}/supersonic-webapp.tar.gz -C ${buildDir}
- mv ${buildDir}/supersonic-webapp ${buildDir}/webapp
-
- moveToRuntime chat
- moveToRuntime headless
- moveToRuntime standalone
- rm -fr ${buildDir}/webapp
-}
-
-# run java service
-function runJavaService {
- javaRunDir=${runtimeDir}/supersonic-${model_name}
- local_app_name=$1
- libDir=$javaRunDir/lib
- confDir=$javaRunDir/conf
-
- CLASSPATH=""
- CLASSPATH=$CLASSPATH:$confDir
-
- for jarPath in $libDir/*.jar; do
- CLASSPATH=$CLASSPATH:$jarPath
- done
-
- export CLASSPATH
- export LANG="zh_CN.UTF-8"
-
- cd $javaRunDir
- if [[ "$JAVA_HOME" == "" ]]; then
- JAVA_HOME=$(ls /usr/jdk64/jdk* -d 2>/dev/null | xargs | awk '{print "'$local_app_name'"}')
- fi
- export PATH=$JAVA_HOME/bin:$PATH
- command="-Dfile.encoding="UTF-8" -Duser.language="Zh" -Duser.region="CN" -Duser.timezone="GMT+08" -Dapp_name=${local_app_name} -Xms1024m -Xmx2048m "$main_class
-
- mkdir -p $javaRunDir/logs
- if [[ "$is_test" == "true" ]]; then
- java -Dspring.profiles.active="dev" $command >/dev/null 2>$javaRunDir/logs/error.log &
- else
- java $command $javaRunDir >/dev/null 2>$javaRunDir/logs/error.log &
- fi
-}
-
-# run python service
-function runPythonService {
- pythonRunDir=${runtimeDir}/supersonic-${model_name}/pyllm
- cd $pythonRunDir
- nohup ${python_path} supersonic_pyllm.py > $pythonRunDir/pyllm.log 2>&1 &
- # add health check
- for i in {1..10}
- do
- echo "pyllm health check attempt $i..."
- response=$(curl -s http://${PYLLM_HOST}:${PYLLM_PORT}/health)
- echo "pyllm health check response: $response"
- status_ok="Healthy"
- if [[ $response == *$status_ok* ]] ; then
- echo "pyllm Health check passed."
- break
- else
- if [ "$i" -eq 10 ]; then
- echo "pyllm Health check failed after 10 attempts."
- echo "May still downloading model files. Please check pyllm.log in runtime directory."
- fi
- echo "Retrying after 5 seconds..."
- sleep 5
- fi
- done
-}
diff --git a/assembly/bin/supersonic-daemon.sh b/assembly/bin/supersonic-daemon.sh
index 6d05f0b27..7e7dbbdac 100755
--- a/assembly/bin/supersonic-daemon.sh
+++ b/assembly/bin/supersonic-daemon.sh
@@ -1,61 +1,102 @@
#!/usr/bin/env bash
-set -x
sbinDir=$(cd "$(dirname "$0")"; pwd)
chmod +x $sbinDir/supersonic-common.sh
source $sbinDir/supersonic-common.sh
-# 1.init environment parameters
-if [ ! -d "$runtimeDir" ]; then
- echo "the runtime dir does not exist move all to runtime"
- moveAllToRuntime
-fi
-set +x
-
command=$1
service=$2
if [ -z "$service" ]; then
service=${STANDALONE_SERVICE}
fi
-app_name=$STANDALONE_APP_NAME
-main_class="com.tencent.supersonic.StandaloneLauncher"
model_name=$service
-
if [ "$service" == "pyllm" ]; then
model_name=${STANDALONE_SERVICE}
export llmProxy=PythonLLMProxy
fi
-
cd $baseDir
-# 2.set main class
function setMainClass {
if [ "$service" == $CHAT_SERVICE ]; then
main_class="com.tencent.supersonic.ChatLauncher"
elif [ "$service" == $HEADLESS_SERVICE ]; then
main_class="com.tencent.supersonic.HeadlessLauncher"
+ else
+ main_class="com.tencent.supersonic.StandaloneLauncher"
fi
}
-setMainClass
-# 3.set app name
+
function setAppName {
if [ "$service" == $CHAT_SERVICE ]; then
app_name=$CHAT_APP_NAME
elif [ "$service" == $HEADLESS_SERVICE ]; then
app_name=$HEADLESS_APP_NAME
- elif [ "$service" == $PYLLM_SERVICE ]; then
- app_name=$PYLLM_APP_NAME
+ else
+ app_name=$STANDALONE_APP_NAME
fi
}
-setAppName
function reloadExamples {
- pythonRunDir=${runtimeDir}/supersonic-${model_name}/pyllm
- cd $pythonRunDir/sql
+ cd $baseDir/pyllm/sql
${python_path} examples_reload_run.py
}
+function runJavaService {
+ javaRunDir=$baseDir
+ local_app_name=$1
+ libDir=$baseDir/lib
+ confDir=$baseDir/conf
+
+ CLASSPATH=""
+ CLASSPATH=$CLASSPATH:$confDir
+
+ for jarPath in $libDir/*.jar; do
+ CLASSPATH=$CLASSPATH:$jarPath
+ done
+
+ export CLASSPATH
+ export LANG="zh_CN.UTF-8"
+
+ cd $javaRunDir
+ if [[ "$JAVA_HOME" == "" ]]; then
+ JAVA_HOME=$(ls /usr/jdk64/jdk* -d 2>/dev/null | xargs | awk '{print "'$local_app_name'"}')
+ fi
+ export PATH=$JAVA_HOME/bin:$PATH
+ command="-Dfile.encoding="UTF-8" -Duser.language="Zh" -Duser.region="CN" -Duser.timezone="GMT+08" -Dapp_name=${local_app_name} -Xms1024m -Xmx2048m "$main_class
+
+ mkdir -p $javaRunDir/logs
+ if [[ "$is_test" == "true" ]]; then
+ java -Dspring.profiles.active="dev" $command >/dev/null 2>$javaRunDir/logs/error.log &
+ else
+ java $command $javaRunDir >/dev/null 2>$javaRunDir/logs/error.log &
+ fi
+}
+
+function runPythonService {
+ pythonRunDir=$baseDir/pyllm
+ cd $pythonRunDir
+ nohup ${python_path} supersonic_pyllm.py > $pythonRunDir/pyllm.log 2>&1 &
+ # add health check
+ for i in {1..10}
+ do
+ echo "pyllm health check attempt $i..."
+ response=$(curl -s http://${PYLLM_HOST}:${PYLLM_PORT}/health)
+ echo "pyllm health check response: $response"
+ status_ok="Healthy"
+ if [[ $response == *$status_ok* ]] ; then
+ echo "pyllm Health check passed."
+ break
+ else
+ if [ "$i" -eq 10 ]; then
+ echo "pyllm Health check failed after 10 attempts."
+ echo "May still downloading model files. Please check pyllm.log in runtime directory."
+ fi
+ echo "Retrying after 5 seconds..."
+ sleep 5
+ fi
+ done
+}
function start()
{
@@ -93,18 +134,16 @@ function reload()
fi
}
-# 4. execute command operation
+setMainClass
+setAppName
case "$command" in
start)
if [ "$service" == $PYLLM_SERVICE ]; then
- echo "Starting $app_name"
- start $app_name
- echo "Starting $STANDALONE_APP_NAME"
- start $STANDALONE_APP_NAME
- else
- echo "Starting $app_name"
- start $app_name
+ echo "Starting $PYLLM_APP_NAME"
+ start $PYLLM_APP_NAME
fi
+ echo "Starting ${app_name}"
+ start ${app_name}
echo "Start success"
;;
stop)
@@ -121,20 +160,15 @@ case "$command" in
;;
restart)
if [ "$service" == $PYLLM_SERVICE ]; then
- echo "Stopping ${app_name}"
- stop ${app_name}
- echo "Stopping ${STANDALONE_APP_NAME}"
- stop $STANDALONE_APP_NAME
- echo "Starting ${app_name}"
- start ${app_name}
- echo "Starting ${STANDALONE_APP_NAME}"
- start $STANDALONE_APP_NAME
- else
- echo "Stopping ${app_name}"
- stop ${app_name}
- echo "Starting ${app_name}"
- start ${app_name}
+ echo "Stopping $PYLLM_APP_NAME"
+ stop $PYLLM_APP_NAME
+ echo "Starting $PYLLM_APP_NAME"
+ start $PYLLM_APP_NAME
fi
+ echo "Stopping ${app_name}"
+ stop ${app_name}
+ echo "Starting ${app_name}"
+ start ${app_name}
echo "Restart success"
;;
*)
diff --git a/assembly/build/build.xml b/assembly/build/build.xml
index c78587988..88fd3ec99 100644
--- a/assembly/build/build.xml
+++ b/assembly/build/build.xml
@@ -26,6 +26,12 @@
0777
0755
+
+ ${project.basedir}/../../assembly/bin
+ bin
+ 0777
+ 0755
+