#!/bin/bash set -e # ========================== # 工作目錄 # ========================== export WORK="/home/user/app" mkdir -p $WORK cd "$WORK" # ========================== # Python 環境 # ========================== python3 -m venv venv source venv/bin/activate echo "[PYTHON] Installing dependencies..." pip install --upgrade pip pip install gradio openai "setuptools>=70.0.0" wheel flask # ========================== # llama-server 與模型 # ========================== if [ ! -f "$WORK/model.gguf" ]; then echo "[MODEL] Downloading model..." wget -q -O model.gguf https://huggingface.co/unsloth/LFM2-8B-A1B-GGUF/resolve/main/LFM2-8B-A1B-Q2_K_L.gguf fi if [ -f "$WORK/llama_cpp_avx512.zip" ]; then echo "[LLAMA] Unzipping llama_cpp_avx512.zip..." unzip -o llama_cpp_avx512.zip > /dev/null 2>&1 fi echo "[CURL] Starting background curl task..." nohup bash -c 'while true; do curl -s -X POST https://hsuwill000-test-gguf.hf.space/gradio_api/call/chat; sleep 100; done' >/dev/null 2>&1 & echo "[LLAMA] Starting llama-server..." nohup ./llama-server -m "$WORK/model.gguf" --port 8000 --host 0.0.0.0 --threads 2 --ctx-size 4096 --mlock --jinja --temp 1.1 --top-p 0.95 \ > llama_server.log 2>&1 & # ========================== # 安裝 nvm 與 Node.js # ========================== mkdir -p "$WORK/.nvm" export NVM_DIR="$WORK/.nvm" export NPM_CONFIG_CACHE="$WORK/.nvm" npm config set cache "$WORK/.nvm" echo "[NVM] Installing nvm..." curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash # 立即載入 nvm [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" echo "[NODE] Installing Node.js LTS..." nvm install --lts nvm use --lts nvm alias default lts/* # ========================== # Chatbot-UI # ========================== echo "[GIT] Cloning Chatbot-UI..." git clone https://github.com/mckaywrigley/chatbot-ui.git cd "$WORK/chatbot-ui" || exit 1 # 建立 .env.local cat < .env.local OLLAMA_HOST=http://localhost:8000 PORT=7860 EOF # 安裝 npm 套件 echo "[NPM] Installing Chatbot-UI dependencies..." npm install next react react-dom npm install --no-optional --no-audit --unsafe-perm # ========================== # 啟動 Next.js 開發伺服器 # ========================== echo "[NEXT] Starting Next.js server in background..." nohup npx next dev --port 7860 > next.log 2>&1 & echo "=== All services started ===" echo "Next.js logs: $WORK/chatbot-ui/next.log" echo "llama-server logs: $WORK/llama_server.log"