mirror of
				https://github.com/KoboldAI/KoboldAI-Client.git
				synced 2025-06-05 21:59:24 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			212 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			212 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/bin/bash
 | 
						|
# KoboldAI Easy Colab Deployment Script by Henk717
 | 
						|
 | 
						|
# read the options
 | 
						|
TEMP=`getopt -o m:i:p:c:d:x:a:l:z:g:t:n:b:s: --long model:,init:,path:,configname:,download:,aria2:,dloc:,xloc:,7z:,git:,tar:,ngrok:,branch:,savemodel:,localtunnel:,lt: -- "$@"`
 | 
						|
eval set -- "$TEMP"
 | 
						|
 | 
						|
# extract options and their arguments into variables.
 | 
						|
while true ; do
 | 
						|
    case "$1" in
 | 
						|
        -m|--model)
 | 
						|
            model=" --model $2" ; shift 2 ;;
 | 
						|
        -i|--init)
 | 
						|
            init=$2 ; shift 2 ;;
 | 
						|
        -p|--path)
 | 
						|
            mpath="$2" ; shift 2 ;;
 | 
						|
        -c|--configname)
 | 
						|
            configname=" --configname $2" ; shift 2 ;;
 | 
						|
        -n|--ngrok)
 | 
						|
            ngrok=" --ngrok" ; shift 2 ;;
 | 
						|
        --lt|--localtunnel)
 | 
						|
            localtunnel=" --localtunnel" ; shift 2 ;;
 | 
						|
        -d|--download)
 | 
						|
            download="$2" ; shift 2 ;;
 | 
						|
        -a|--aria2)
 | 
						|
            aria2="$2" ; shift 2 ;;
 | 
						|
        -l|--dloc)
 | 
						|
            dloc="$2" ; shift 2 ;;
 | 
						|
        -x|--xloc)
 | 
						|
            xloc="$2" ; shift 2 ;;
 | 
						|
        -z|--7z)
 | 
						|
            z7="$2" ; shift 2 ;;
 | 
						|
        -t|--tar)
 | 
						|
            tar="$2" ; shift 2 ;;
 | 
						|
        -g|--git)
 | 
						|
            git="$2" ; shift 2 ;;
 | 
						|
        -b|--branch)
 | 
						|
            branch="$2" ; shift 2 ;;
 | 
						|
        -s|--savemodel)
 | 
						|
            savemodel=" --savemodel" ; shift 2 ;;
 | 
						|
        --) shift ; break ;;
 | 
						|
        *) echo "Internal error!" ; exit 1 ;;
 | 
						|
    esac
 | 
						|
done
 | 
						|
 | 
						|
# Create the Launch function so we can run KoboldAI at different places in the script
 | 
						|
function launch
 | 
						|
{
 | 
						|
    #End the script if "--init only" was specified.
 | 
						|
    if [ "$init" == "only" ]; then
 | 
						|
        echo Initialization complete...
 | 
						|
        exit 0
 | 
						|
    else
 | 
						|
    cd /content/KoboldAI-Client
 | 
						|
    echo "Launching KoboldAI with the following options : python3 aiserver.py$model$kmpath$configname$ngrok$localtunnel$savemodel --colab"
 | 
						|
    python3 aiserver.py$model$kmpath$configname$ngrok$localtunnel$savemodel --colab
 | 
						|
    exit
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
git_default_branch() {
 | 
						|
  (git remote show $git | grep 'HEAD branch' | cut -d' ' -f5) 2>/dev/null
 | 
						|
}
 | 
						|
 | 
						|
# Don't allow people to mess up their system
 | 
						|
if [[ ! -d "/content" ]]; then
 | 
						|
    echo You can only use this script on Google Colab
 | 
						|
    echo Use aiserver.py to play KoboldAI locally.
 | 
						|
    echo Check our Readme for Colab links if you wish to play on Colab.
 | 
						|
    exit
 | 
						|
fi
 | 
						|
 | 
						|
# Redefine the download location
 | 
						|
if [ "$dloc" == "colab" ]; then
 | 
						|
    dloc="/content"
 | 
						|
else
 | 
						|
    dloc="/content/drive/MyDrive/KoboldAI/models"
 | 
						|
fi
 | 
						|
 | 
						|
# Redefine the extraction location
 | 
						|
if [ "$xloc" == "drive" ]; then
 | 
						|
    xloc="/content/drive/MyDrive/KoboldAI/models/"
 | 
						|
    dloc="/content"
 | 
						|
else
 | 
						|
    xloc="/content/"
 | 
						|
fi
 | 
						|
 | 
						|
# Redefine the Path to be in the relevant location
 | 
						|
if [[ -v mpath ]];then
 | 
						|
mpath="$xloc$mpath"
 | 
						|
kmpath=" --path $mpath"
 | 
						|
fi
 | 
						|
 | 
						|
# Create folders on Google Drive
 | 
						|
mkdir /content/drive/MyDrive/KoboldAI/
 | 
						|
mkdir /content/drive/MyDrive/KoboldAI/stories/
 | 
						|
mkdir /content/drive/MyDrive/KoboldAI/models/
 | 
						|
mkdir /content/drive/MyDrive/KoboldAI/settings/
 | 
						|
mkdir /content/drive/MyDrive/KoboldAI/softprompts/
 | 
						|
mkdir /content/drive/MyDrive/KoboldAI/userscripts/
 | 
						|
if [ "$init" == "drive" ]; then
 | 
						|
	echo Google Drive folders created.
 | 
						|
	exit 0
 | 
						|
fi
 | 
						|
    
 | 
						|
# Install and/or Update KoboldAI
 | 
						|
if [ "$init" != "skip" ]; then
 | 
						|
    cd /content
 | 
						|
    if [ ! -z ${git+x} ]; then
 | 
						|
        if [ "$git" == "Official" ]; then
 | 
						|
            git=https://github.com/koboldai/KoboldAI-Client
 | 
						|
        fi
 | 
						|
        if [ "$git" == "United" ]; then
 | 
						|
            git=https://github.com/henk717/KoboldAI-Client
 | 
						|
        fi
 | 
						|
        if [ "$git" == "united" ]; then
 | 
						|
            git=https://github.com/henk717/KoboldAI-Client
 | 
						|
        fi
 | 
						|
    else
 | 
						|
        git=https://github.com/koboldai/KoboldAI-Client
 | 
						|
    fi
 | 
						|
 | 
						|
    mkdir /content/KoboldAI-Client
 | 
						|
    cd /content/KoboldAI-Client
 | 
						|
 | 
						|
    git init
 | 
						|
    git remote remove origin
 | 
						|
    git remote add origin $git
 | 
						|
    git fetch --all
 | 
						|
 | 
						|
    if [ ! -z ${branch+x} ]; then
 | 
						|
        git checkout $branch -f
 | 
						|
        git reset --hard origin/$branch
 | 
						|
    else
 | 
						|
        git checkout $(git_default_branch) -f
 | 
						|
        git reset --hard origin/$(git_default_branch)
 | 
						|
    fi
 | 
						|
 | 
						|
    cd /content/KoboldAI-Client
 | 
						|
 | 
						|
    cp -rn stories/* /content/drive/MyDrive/KoboldAI/stories/
 | 
						|
    cp -rn userscripts/* /content/drive/MyDrive/KoboldAI/userscripts/
 | 
						|
    cp -rn softprompts/* /content/drive/MyDrive/KoboldAI/softprompts/
 | 
						|
    rm stories
 | 
						|
    rm -rf stories/
 | 
						|
    rm userscripts
 | 
						|
    rm -rf userscripts/
 | 
						|
    rm softprompts
 | 
						|
    rm -rf softprompts/
 | 
						|
    rm models
 | 
						|
    rm -rf models/
 | 
						|
    ln -s /content/drive/MyDrive/KoboldAI/stories/ stories
 | 
						|
    ln -s /content/drive/MyDrive/KoboldAI/settings/ settings
 | 
						|
    ln -s /content/drive/MyDrive/KoboldAI/softprompts/ softprompts
 | 
						|
    ln -s /content/drive/MyDrive/KoboldAI/userscripts/ userscripts
 | 
						|
    ln -s /content/drive/MyDrive/KoboldAI/models/ models
 | 
						|
 | 
						|
    if [ -n "${COLAB_TPU_ADDR+set}" ]; then
 | 
						|
        pip install -r requirements_mtj.txt
 | 
						|
    else
 | 
						|
        pip install -r requirements.txt
 | 
						|
    fi
 | 
						|
    
 | 
						|
    # Make sure Colab has the system dependencies
 | 
						|
    sudo apt install netbase aria2 -y
 | 
						|
    npm install -g localtunnel
 | 
						|
fi
 | 
						|
 | 
						|
cd /content
 | 
						|
 | 
						|
# Models extracted? Then we skip anything beyond this point for faster loading.
 | 
						|
if [ -f "/content/extracted" ]; then
 | 
						|
    launch
 | 
						|
fi
 | 
						|
 | 
						|
# Is the model extracted on Google Drive? Skip the download and extraction
 | 
						|
# Only on Google Drive since it has a big impact there if we don't, and locally we have better checks in place
 | 
						|
if [ "$xloc" == "/content/drive/MyDrive/KoboldAI/models/"  ] && [[ -d $mpath ]];then
 | 
						|
    launch
 | 
						|
fi
 | 
						|
 | 
						|
#Download routine for regular Downloads
 | 
						|
if [ ! -z ${download+x} ]; then
 | 
						|
    wget -c $download -P $dloc
 | 
						|
fi
 | 
						|
 | 
						|
#Download routine for Aria2c scripts
 | 
						|
if [ ! -z ${aria2+x} ]; then
 | 
						|
    curl -L $aria2 | aria2c -x 10 -s 10 -j 10 -c -i- -d$dloc --user-agent=KoboldAI --file-allocation=none
 | 
						|
fi
 | 
						|
 | 
						|
#Extract the model with 7z
 | 
						|
if [ ! -z ${z7+x} ]; then
 | 
						|
    7z x -o$xloc $dloc/$z7 -aos
 | 
						|
    touch /content/extracted
 | 
						|
fi
 | 
						|
 | 
						|
#Extract the model in a ZSTD Tar file
 | 
						|
if [ ! -z ${tar+x} ]; then
 | 
						|
    git clone https://github.com/VE-FORBRYDERNE/pv
 | 
						|
    cd pv
 | 
						|
    ./configure
 | 
						|
    make
 | 
						|
    make install
 | 
						|
    cd ..
 | 
						|
    apt install zstd -y
 | 
						|
    pv $dloc/$tar | tar -I zstd -C $xloc -x
 | 
						|
    touch /content/extracted
 | 
						|
fi
 | 
						|
 | 
						|
launch
 |