Spaces:
Sleeping
Sleeping
File size: 4,893 Bytes
e8ba22d | 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 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | #!/data/data/com.termux/files/usr/bin/bash
# ===================================================
# THEVOIDKERNEL Portable AI - Android (Llama.cpp Engine)
# ===================================================
echo "==================================================="
echo " THEVOIDKERNEL Portable AI - Android Native Launcher"
echo "==================================================="
echo ""
echo " Launches the natively compiled AI engine"
echo " and beautifully serves the USB FastChatUI."
echo ""
# ---- Detect Termux ----
if [ -z "$TERMUX_VERSION" ] && [ ! -d "/data/data/com.termux" ]; then
echo "ERROR: This script must run inside Termux!"
exit 1
fi
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
USB_ROOT="$(dirname "$SCRIPT_DIR")"
SHARED_DIR="$USB_ROOT/Shared"
SHARED_BIN="$SHARED_DIR/bin"
MODELS_DIR="$SHARED_DIR/models"
if [ ! -f "$SHARED_BIN/llama-server-android" ]; then
echo "==================================================="
echo " ERROR: Android Native Engine Not Found!"
echo "==================================================="
echo " Please run 'bash Android/install.sh' first"
echo " so the engine can compile for your processor."
exit 1
fi
# Find the first .gguf file to load automatically
MODEL_FILE=$(ls "$MODELS_DIR"/*.gguf 2>/dev/null | head -n 1)
if [ -z "$MODEL_FILE" ]; then
echo "ERROR: No .gguf models found in Shared/models/!"
echo "Please download a model using install.sh first."
exit 1
fi
echo " Auto-selected model: $(basename "$MODEL_FILE")"
echo ""
# Acquire wakelock to prevent Android from killing the process
echo "Acquiring Termux wakelock (prevents sleep)..."
termux-wake-lock 2>/dev/null || true
# Check if Llama.cpp is already running
if curl -s http://127.0.0.1:8080/v1/models > /dev/null 2>&1; then
echo "[OK] Llama engine is already running!"
else
echo "Starting offline Android AI Engine (Llama-Server)..."
# Run llama-server natively. -c 2048 limits context to fit in mobile RAM
"$SHARED_BIN/llama-server-android" -m "$MODEL_FILE" -c 2048 -cb -np 4 --port 8080 > "$SHARED_DIR/llama-server.log" 2>&1 &
LLAMA_PID=$!
echo "Loading AI into memory (can take up to 20 seconds)..."
WAIT_COUNT=0
until curl -s http://127.0.0.1:8080/v1/models > /dev/null 2>&1; do
sleep 1
WAIT_COUNT=$((WAIT_COUNT + 1))
if [ "$WAIT_COUNT" -ge 90 ]; then
echo ""
echo "ERROR: Engine failed to start after 90s!"
echo "Device RAM might be too low, or Model is too large."
echo "Check: cat $SHARED_DIR/llama-server.log"
kill -9 $LLAMA_PID 2>/dev/null
termux-wake-unlock 2>/dev/null || true
exit 1
fi
done
echo "[OK] Engine is online!"
fi
# ---- Detect local IP for LAN access ----
LOCAL_IP="127.0.0.1"
if command -v ip &> /dev/null; then
LOCAL_IP=$(ip route get 1 2>/dev/null | awk '{for(i=1;i<=NF;i++)if($i=="src"){print $(i+1);exit}}')
elif command -v ifconfig &> /dev/null; then
LOCAL_IP=$(ifconfig wlan0 2>/dev/null | grep 'inet ' | awk '{print $2}' | sed 's/addr://')
fi
[ -z "$LOCAL_IP" ] && LOCAL_IP="127.0.0.1"
echo ""
echo -e "\033[0;36m===================================================\033[0m"
echo -e "\033[0;32m AI ENGINE IS FULLY ONLINE!\033[0m"
echo -e "\033[0;36m===================================================\033[0m"
echo ""
echo " Which interface would you like to open?"
echo ""
echo -e " \033[1;33m[1]\033[0m USB FastChat UI (Beautiful Dark Mode, Auto-Saves)"
echo -e " \033[1;33m[2]\033[0m Llama.cpp Default UI (Classic Raw Developer UI)"
echo ""
read -r -p " Enter your choice (1 or 2): " UI_CHOICE
if [ "$UI_CHOICE" = "2" ]; then
echo " Opening Llama Default UI..."
TARGET_URL="http://localhost:8080"
else
echo " Opening USB FastChat UI..."
TARGET_URL="http://localhost:3333"
fi
# Open selected UI automatically
am start -a android.intent.action.VIEW -d "$TARGET_URL" 2>/dev/null || \
termux-open-url "$TARGET_URL" 2>/dev/null || \
echo -e " \033[0;31mCould not auto-open browser.\033[0m Please go to: $TARGET_URL"
echo ""
echo -e "\033[0;37m Starting background server... Press Ctrl+C to shut down the AI.\033[0m"
# Start the python proxy server so FastChatUI works and saves history
if command -v python3 &> /dev/null; then
python3 "$SHARED_DIR/chat_server.py" --no-browser --llama-cpp
elif command -v python &> /dev/null; then
python "$SHARED_DIR/chat_server.py" --no-browser --llama-cpp
else
echo "ERROR: Python not found! Install with: apt install python -y"
# Cleanup
if [ -n "$LLAMA_PID" ]; then
kill -9 $LLAMA_PID 2>/dev/null
fi
termux-wake-unlock 2>/dev/null || true
exit 1
fi
# Cleanup on exit
if [ -n "$LLAMA_PID" ]; then
kill -9 $LLAMA_PID 2>/dev/null
fi
termux-wake-unlock 2>/dev/null || true
echo "Goodbye!"
|