From 1b6d4226b868ea629e279a7392feb2d744c3e0fe Mon Sep 17 00:00:00 2001 From: Yazan Agha-Schrader Date: Mon, 27 Nov 2023 21:35:31 +0100 Subject: [PATCH] add start scripts to root path --- media/llama-server-icon.png | Bin 0 -> 17770 bytes sh-server-dialog.sh | 343 ++++++++++++++++++++++++++++++++++++ sh-server-zenity.sh | 294 +++++++++++++++++++++++++++++++ start-dia-server.desktop | 6 + start-zen-server.desktop | 6 + 5 files changed, 649 insertions(+) create mode 100755 media/llama-server-icon.png create mode 100755 sh-server-dialog.sh create mode 100755 sh-server-zenity.sh create mode 100644 start-dia-server.desktop create mode 100644 start-zen-server.desktop diff --git a/media/llama-server-icon.png b/media/llama-server-icon.png new file mode 100755 index 0000000000000000000000000000000000000000..c071a5b3c2394a0b0b7c8ffbb824089c6d972142 GIT binary patch literal 17770 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 + model_path=$(dialog --backtitle "Model Selection" \ + --title "Select Model File or Folder" \ + --fselect "$HOME/" 14 60 \ + 2>&1 1>&3) + exit_status=$? + exec 3>&- + + # Check whether user has selected 'Cancel' + if [ $exit_status = 1 ]; then + return + fi + + # If a folder has been selected, search for *.gguf files + if [ -d "$model_path" ]; then + model_files=($(find "$model_path" -name "*.gguf" 2>/dev/null)) + elif [ -f "$model_path" ]; then + model_files=("$model_path") + else + dialog --backtitle "Model Selection" \ + --title "Invalid Selection" \ + --msgbox "The selected path is not valid." 7 50 + return + fi + +# Selection menu for models found +exec 3>&1 +model_choice=$(dialog --backtitle "Model Selection" \ + --title "Select a Model File" \ + --menu "Choose one of the found models:" 15 60 4 \ + $(for i in "${!model_files[@]}"; do echo "$((i+1))" "$(basename "${model_files[$i]}")"; done) \ + 2>&1 1>&3) +exit_status=$? +exec 3>&- + +# Check whether user has selected 'Cancel' +if [ $exit_status = 1 ]; then + return +fi + +# Set path to the selected model +model_path=${model_files[$((model_choice-1))]} +} + + + +multimodal_model_selection() { + # User selects a file or folder + exec 3>&1 + mmproj_path=$(dialog --backtitle "Multimodal Model" \ + --title "Select Model File or Folder" \ + --fselect "$HOME/" 14 60 \ + 2>&1 1>&3) + exit_status=$? + exec 3>&- + + # Check whether user has selected 'Cancel' + if [ $exit_status = 1 ]; then + return + fi + + # If a folder has been selected, search for *.bin files + if [ -d "$mmproj_path" ]; then + multi_modal_files=($(find "$mmproj_path" -name "*.bin" 2>/dev/null)) + elif [ -f "$mmproj_path" ]; then + multi_modal_files=("$mmproj_path") + else + dialog --backtitle "Multimodal Model" \ + --title "Invalid Selection" \ + --msgbox "The selected path is not valid." 7 50 + return + fi + +# Selection menu for models found +exec 3>&1 +multi_modal_choice=$(dialog --backtitle "Multimodal Model" \ + --title "Select a Model File" \ + --menu "Choose one of the found models:" 15 60 4 \ + $(for i in "${!multi_modal_files[@]}"; do echo "$((i+1))" "$(basename "${multi_modal_files[$i]}")"; done) \ + 2>&1 1>&3) +exit_status=$? +exec 3>&- + +# Check whether user has selected 'Cancel' +if [ $exit_status = 1 ]; then + return +fi + +# Set path to the selected model +mmproj_path=${multi_modal_files[$((multi_modal_choice-1))]} +} + + + +options() { + # Show form for entering the options + exec 3>&1 + form_values=$(dialog --backtitle "Options Configuration" \ + --title "Set Options" \ + --form "Enter the values for the following options:" \ + 15 50 0 \ + "Number of Threads (-t):" 1 1 "$threads" 1 25 25 5 \ + "Context Size (-c):" 2 1 "$ctx_size" 2 25 25 5 \ + "Batch Size (-b):" 3 1 "$batch_size" 3 25 25 5 \ + "GPU Layers (-ngl):" 4 1 "$n_gpu_layers" 4 25 25 5 \ + 2>&1 1>&3) + exit_status=$? + exec 3>&- + + # Check whether user has selected 'Cancel' + if [ $exit_status = 1 ]; then + return + fi + + # Save the entered values in the corresponding variables + IFS=$'\n' read -r threads ctx_size batch_size n_gpu_layers <<< "$form_values" +} + + + +further_options() { + # Initial values for the checkboxes based on current settings + cb_value=$([ "$cont_batching" = "on" ] && echo "on" || echo "off") + mlock_value=$([ "$mlock" = "on" ] && echo "on" || echo "off") + no_mmap_value=$([ "$no_mmap" = "on" ] && echo "on" || echo "off") + + # Show dialog for setting options + exec 3>&1 + choices=$(dialog --backtitle "Further Options" \ + --title "Boolean Options" \ + --checklist "Select options:" 15 60 3 \ + "1" "Continuous Batching (-cb)" $cb_value \ + "2" "Memory Lock (--mlock)" $mlock_value \ + "3" "No Memory Map (--no-mmap)" $no_mmap_value \ + 2>&1 1>&3) + exit_status=$? + exec 3>&- + + # Check whether user has selected 'Cancel' + if [ $exit_status = 1 ]; then + return + fi + + # Set options based on user selection + cont_batching="off" + mlock="off" + no_mmap="off" + for choice in $choices; do + case $choice in + 1) cont_batching="on" ;; + 2) mlock="on" ;; + 3) no_mmap="on" ;; + esac + done +} + + + +advanced_options() { + # Input fields for Advanced Options + exec 3>&1 + advanced_values=$(dialog --backtitle "Advanced Options" \ + --title "Advanced Server Configuration" \ + --form "Enter the advanced configuration options:" \ + 15 60 0 \ + "Host IP:" 1 1 "$host" 1 15 15 0 \ + "Port:" 2 1 "$port" 2 15 5 0 \ + "Additional Options:" 3 1 "$advanced_options" 3 15 30 0 \ + 2>&1 1>&3) + exit_status=$? + exec 3>&- + + # Check whether user has selected 'Cancel' + if [ $exit_status = 1 ]; then + return + fi + + # Read the entries and save them in the corresponding variables + read -r host port advanced_options <<< "$advanced_values" +} + + + +start_server() { + # Compiling the command with the selected options + cmd="./server" + [ -n "$model_path" ] && cmd+=" -m $model_path" + [ -n "$mmproj_path" ] && cmd+=" --mmproj $mmproj_path" + [ "$threads" -ne 4 ] && cmd+=" -t $threads" + [ "$ctx_size" -ne 512 ] && cmd+=" -c $ctx_size" + [ "$batch_size" -ne 512 ] && cmd+=" -b $batch_size" + [ "$n_gpu_layers" -ne 0 ] && cmd+=" -ngl $n_gpu_layers" + [ "$cont_batching" = "on" ] && cmd+=" -cb" + [ "$mlock" = "on" ] && cmd+=" --mlock" + [ "$no_mmap" = "off" ] && cmd+=" --no-mmap" + [ -n "$host" ] && cmd+=" --host $host" + [ -n "$port" ] && cmd+=" --port $port" + [ -n "$advanced_options" ] && cmd+=" $advanced_options" + + eval "$cmd" + read -p 'Do not forget to quit the server later with Ctrl+C as soon as you are finished. Press Enter to continue...' +} + + + +# Function to save the current configuration +save_config() { + exec 3>&1 + config_file=$(dialog --backtitle "Save Configuration" \ + --title "Save Configuration File" \ + --fselect "$HOME/" 14 60 \ + 2>&1 1>&3) + exit_status=$? + exec 3>&- + + # Check whether user has selected 'Cancel' + if [ $exit_status = 1 ]; then + return + fi + + # Saving the configuration to the file + cat > "$config_file" << EOF +model_path=$model_path +mmproj_path=$mmproj_path +threads=$threads +ctx_size=$ctx_size +batch_size=$batch_size +n_gpu_layers=$n_gpu_layers +cont_batching=$cont_batching +mlock=$mlock +no_mmap=$no_mmap +host=$host +port=$port +advanced_options=$advanced_options +EOF + + dialog --backtitle "Save Configuration" \ + --title "Configuration Saved" \ + --msgbox "Configuration has been saved to $config_file" 7 50 +} + + + +# Function for loading the configuration from a file +load_config() { + exec 3>&1 + config_file=$(dialog --backtitle "Load Configuration" \ + --title "Load Configuration File" \ + --fselect "$HOME/" 14 60 \ + 2>&1 1>&3) + exit_status=$? + exec 3>&- + + # Check whether user has selected 'Cancel' + if [ $exit_status = 1 ]; then + return + fi + + # Check whether the configuration file exists + if [ ! -f "$config_file" ]; then + dialog --backtitle "Load Configuration" \ + --title "File Not Found" \ + --msgbox "The file $config_file was not found." 7 50 + return + fi + + # Load configuration from the file + source "$config_file" + + dialog --backtitle "Load Configuration" \ + --title "Configuration Loaded" \ + --msgbox "Configuration has been loaded from $config_file" 7 50 +} + + + +# Function to show the main menu +show_main_menu() { + while true; do + exec 3>&1 + selection=$(dialog \ + --backtitle "Server Configuration" \ + --title "Main Menu" \ + --clear \ + --cancel-label "Exit" \ + --menu "Please select:" 15 50 6 \ + "1" "Model Selection" \ + "2" "Multimodal Model Selection" \ + "3" "Options" \ + "4" "Further Options" \ + "5" "Advanced Options" \ + "6" "Save Config" \ + "7" "Load Config" \ + "8" "Start Server" \ + 2>&1 1>&3) + exit_status=$? + exec 3>&- + + # Check whether user has selected 'Exit' + if [ $exit_status = 1 ]; then + clear + exit + fi + + # Call up the corresponding function based on the selection + case $selection in + 1) model_selection ;; + 2) multimodal_model_selection ;; + 3) options ;; + 4) further_options ;; + 5) advanced_options ;; + 6) save_config ;; + 7) load_config ;; + 8) start_server ;; + *) clear ;; + esac + done +} + + + +# Show main menu +show_main_menu diff --git a/sh-server-zenity.sh b/sh-server-zenity.sh new file mode 100755 index 000000000..5415dcfda --- /dev/null +++ b/sh-server-zenity.sh @@ -0,0 +1,294 @@ +#!/bin/bash + +# Set default values +model_path="./models/" +mmproj_path="" +threads=4 +ctx_size=512 +batch_size=512 +n_gpu_layers=0 +cont_batching="off" +mlock="off" +no_mmap="off" +host="127.0.0.1" +port="8080" +advanced_options="" + + + +# Function to install Zenity +install_zenity() { + echo "Try to install Zenity with $1..." + if ! $1 install zenity -y; then + echo "Error: Zenity could not be installed." + exit 1 + fi + echo "Zenity was successfully installed." +} + +# Check whether Zenity is already installed +if ! command -v zenity &> /dev/null; then + # Zenity is not installed, try to find the package manager + PACKAGE_MANAGERS=(brew apt apt-get yum pacman) + for manager in "${PACKAGE_MANAGERS[@]}"; do + if command -v $manager &> /dev/null; then + # Package manager found, ask the user for permission + read -p "Zenity is not installed. Would you like to install Zenity with $manager? (y/N) " response + if [[ "$response" =~ ^[Yy]$ ]]; then + # User has agreed, install Zenity + install_zenity $manager + break + else + echo "Installation canceled." + exit 1 + fi + fi + done + if ! command -v zenity &> /dev/null; then + echo "No supported package manager found or Zenity could not be installed. Please install Zenity manually." + exit 1 + fi +fi + + + +model_selection() { + # User selects a file or folder + model_path=$(zenity --file-selection --title="Select Model File or Folder" --filename="$HOME/" --file-filter="*.gguf" --file-filter="*" --width=300 --height=400) + exit_status=$? + + # Check whether user has selected 'Cancel' + if [ $exit_status = 1 ]; then + return + fi + + # If a folder has been selected, search for *.gguf files + if [ -d "$model_path" ]; then + model_files=($(find "$model_path" -name "*.gguf" 2>/dev/null)) + elif [ -f "$model_path" ]; then + model_files=("$model_path") + else + zenity --error --title="Invalid Selection" --text="The selected path is not valid." + return + fi + + # Selection menu for models found + model_choice=$(zenity --list --title="Select a Model File" --column="Index" --column="Model File" $(for i in "${!model_files[@]}"; do echo "$((i+1))" "$(basename "${model_files[$i]}")"; done) --width=300 --height=400) + exit_status=$? + + # Check whether user has selected 'Cancel' + if [ $exit_status = 1 ]; then + return + fi + + # Set path to the selected model + model_path=${model_files[$((model_choice-1))]} +} + + + +multimodal_model_selection() { + # User selects a file or folder + mmproj_path=$(zenity --file-selection --title="Select Multimodal Model File or Folder" --filename="$HOME/" --file-filter="*.bin" --file-filter="*" --width=300 --height=400) + exit_status=$? + + # Check whether user has selected 'Cancel' + if [ $exit_status = 1 ]; then + return + fi + + # If a folder has been selected, search for *.bin files + if [ -d "$mmproj_path" ]; then + multi_modal_files=($(find "$mmproj_path" -name "*.bin" 2>/dev/null)) + elif [ -f "$mmproj_path" ]; then + multi_modal_files=("$mmproj_path") + else + zenity --error --title="Invalid Selection" --text="The selected path is not valid." + return + fi + + # Selection menu for models found + multi_modal_choice=$(zenity --list --title="Select a Multimodal Model File" --column="Index" --column="Model File" $(for i in "${!multi_modal_files[@]}"; do echo "$((i+1))" "$(basename "${multi_modal_files[$i]}")"; done) --width=300 --height=400) + exit_status=$? + + # Check whether user has selected 'Cancel' + if [ $exit_status = 1 ]; then + return + fi + + # Set path to the selected model + mmproj_path=${multi_modal_files[$((multi_modal_choice-1))]} +} + + + +options() { + # Show form for entering the options + form_values=$(zenity --forms --title="Set Options" --text="Enter the values for the following options:" --add-entry="Number of Threads (-t):" --add-entry="Context Size (-c):" --add-entry="Batch Size (-b):" --add-entry="GPU Layers (-ngl):" --separator="|" --width=300 --height=400) + exit_status=$? + + # Check whether user has selected 'Cancel' + if [ $exit_status = 1 ]; then + return + fi + + # Save the entered values in the corresponding variables + IFS="|" read -r threads ctx_size batch_size n_gpu_layers <<< "$form_values" +} + + + +further_options() { + # Initial values for the checkboxes based on current settings + cb_value=$([ "$cont_batching" = "on" ] && echo "TRUE" || echo "FALSE") + mlock_value=$([ "$mlock" = "on" ] && echo "TRUE" || echo "FALSE") + no_mmap_value=$([ "$no_mmap" = "on" ] && echo "TRUE" || echo "FALSE") + + # Show dialog for setting options + choices=$(zenity --list --title="Boolean Options" --text="Select options:" --checklist --column="Select" --column="Option" TRUE "Continuous Batching (-cb)" FALSE "Memory Lock (--mlock)" FALSE "No Memory Map (--no-mmap)" --width=300 --height=400) + exit_status=$? + + # Check whether user has selected 'Cancel' + if [ $exit_status = 1 ]; then + return + fi + + # Set options based on user selection + cont_batching="off" + mlock="off" + no_mmap="off" + for choice in $choices; do + case $choice in + "Continuous Batching (-cb)") cont_batching="on" ;; + "Memory Lock (--mlock)") mlock="on" ;; + "No Memory Map (--no-mmap)") no_mmap="on" ;; + esac + done +} + + + +advanced_options() { + # Input fields for Advanced Options + advanced_values=$(zenity --forms --title="Advanced Server Configuration" --text="Enter the advanced configuration options:" --add-entry="Host IP:" --add-entry="Port:" --add-entry="Additional Options:" --separator="|" --width=300 --height=400) + exit_status=$? + + # Check whether user has selected 'Cancel' + if [ $exit_status = 1 ]; then + return + fi + + # Read the entries and save them in the corresponding variables + IFS="|" read -r host port advanced_options <<< "$advanced_values" +} + + + +start_server() { + # Compiling the command with the selected options + cmd="./server" + [ -n "$model_path" ] && cmd+=" -m $model_path" + [ -n "$mmproj_path" ] && cmd+=" --mmproj $mmproj_path" + [ "$threads" -ne 4 ] && cmd+=" -t $threads" + [ "$ctx_size" -ne 512 ] && cmd+=" -c $ctx_size" + [ "$batch_size" -ne 512 ] && cmd+=" -b $batch_size" + [ "$n_gpu_layers" -ne 0 ] && cmd+=" -ngl $n_gpu_layers" + [ "$cont_batching" = "on" ] && cmd+=" -cb" + [ "$mlock" = "on" ] && cmd+=" --mlock" + [ "$no_mmap" = "off" ] && cmd+=" --no-mmap" + [ -n "$host" ] && cmd+=" --host $host" + [ -n "$port" ] && cmd+=" --port $port" + [ -n "$advanced_options" ] && cmd+=" $advanced_options" + + eval "$cmd" + read -p 'Press Enter to continue...' +} + + + +# Function to save the current configuration +save_config() { + config_file=$(zenity --file-selection --title="Save Configuration File" --filename="$HOME/" --width=300 --height=400) + exit_status=$? + + # Check whether user has selected 'Cancel' + if [ $exit_status = 1 ]; then + return + fi + + # Saving the configuration to the file + cat > "$config_file" << EOF +model_path=$model_path +mmproj_path=$mmproj_path +threads=$threads +ctx_size=$ctx_size +batch_size=$batch_size +n_gpu_layers=$n_gpu_layers +cont_batching=$cont_batching +mlock=$mlock +no_mmap=$no_mmap +host=$host +port=$port +advanced_options=$advanced_options +EOF + + zenity --info --title="Configuration Saved" --text="Configuration has been saved to $config_file" --width=300 --height=400 +} + + + +# Function for loading the configuration from a file +load_config() { + config_file=$(zenity --file-selection --title="Load Configuration File" --filename="$HOME/" --width=300 --height=400) + exit_status=$? + + # Check whether user has selected 'Cancel' + if [ $exit_status = 1 ]; then + return + fi + + # Check whether the configuration file exists + if [ ! -f "$config_file" ]; then + zenity --error --title="File Not Found" --text="The file $config_file was not found." --width=300 --height=400 + return + fi + + # Load configuration from the file + source "$config_file" + + zenity --info --title="Configuration Loaded" --text="Configuration has been loaded from $config_file" --width=300 --height=400 +} + + + +# Function to show the main menu +show_main_menu() { + while true; do + selection=$(zenity --list --title="Main Menu" --text="Please select:" --cancel-label="Exit" --column="Index" --column="Option" 1 "Model Selection" 2 "Multimodal Model Selection" 3 "Options" 4 "Further Options" 5 "Advanced Options" 6 "Save Config" 7 "Load Config" 8 "Start Server" --width=300 --height=400) + exit_status=$? + + # Check whether user has selected 'Exit' + if [ $exit_status = 1 ]; then + clear + exit + fi + + # Call up the corresponding function based on the selection + case $selection in + 1) model_selection ;; + 2) multimodal_model_selection ;; + 3) options ;; + 4) further_options ;; + 5) advanced_options ;; + 6) save_config ;; + 7) load_config ;; + 8) start_server ;; + *) clear ;; + esac + done +} + + + +# Show main menu +show_main_menu diff --git a/start-dia-server.desktop b/start-dia-server.desktop new file mode 100644 index 000000000..c926d925f --- /dev/null +++ b/start-dia-server.desktop @@ -0,0 +1,6 @@ + [Desktop Entry] + Name=llama.cpp Server + Exec=sh-server-dialog.sh + Icon=./media/llama-server-icon.png + Terminal=false + Type=Application diff --git a/start-zen-server.desktop b/start-zen-server.desktop new file mode 100644 index 000000000..1513bf6c1 --- /dev/null +++ b/start-zen-server.desktop @@ -0,0 +1,6 @@ + [Desktop Entry] + Name=llama.cpp Server + Exec=sh-server-zenity.sh + Icon=./media/llama-server-icon.png + Terminal=false + Type=Application