From 8b2a8415f47a2152aaebd5e9ac5d8388092e51a6 Mon Sep 17 00:00:00 2001 From: ParisNeo Date: Sat, 6 May 2023 00:28:17 +0200 Subject: [PATCH] added backend installation --- add_backend.bat | 55 ----------------------------- installations/add_backend.bat | 3 ++ installations/backendlist.yaml | 1 + installations/install_backend.py | 60 ++++++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+), 55 deletions(-) delete mode 100644 add_backend.bat create mode 100644 installations/add_backend.bat create mode 100644 installations/backendlist.yaml create mode 100644 installations/install_backend.py diff --git a/add_backend.bat b/add_backend.bat deleted file mode 100644 index 096bd676..00000000 --- a/add_backend.bat +++ /dev/null @@ -1,55 +0,0 @@ -@echo off -setlocal enabledelayedexpansion - -REM Clone the repository to a tmp folder -set "REPO_URL=https://github.com/ParisNeo/PyAIPersonality.git" -set "TMP_FOLDER=%temp%\PyAIPersonality" -git clone %REPO_URL% %TMP_FOLDER% - -REM List the available languages and prompt user to select one -set "LANGUAGES_FOLDER=%TMP_FOLDER%\personalities_zoo" -set "LANGUAGE_INDEX=0" -for /d %%d in ("%LANGUAGES_FOLDER%\*") do ( - set /a "LANGUAGE_INDEX+=1" - set "LANGUAGES[!LANGUAGE_INDEX!]=%%~nxd" - echo !LANGUAGE_INDEX!. %%~nxd -) -set /p "SELECTED_LANGUAGE=Enter the number of the desired language: " -set "LANGUAGE_FOLDER=%LANGUAGES_FOLDER%\!LANGUAGES[%SELECTED_LANGUAGE%]!" - -REM List the available categories and prompt user to select one -set "CATEGORIES_FOLDER=%LANGUAGE_FOLDER%" -set "CATEGORY_INDEX=0" -for /d %%d in ("%CATEGORIES_FOLDER%\*") do ( - set /a "CATEGORY_INDEX+=1" - set "CATEGORIES[!CATEGORY_INDEX!]=%%~nxd" - echo !CATEGORY_INDEX!. %%~nxd -) -set /p "SELECTED_CATEGORY=Enter the number of the desired category: " -set "CATEGORY_FOLDER=%CATEGORIES_FOLDER%\!CATEGORIES[%SELECTED_CATEGORY%]!" - -REM List the available personalities and prompt user to select one -set "PERSONALITIES_FOLDER=%CATEGORY_FOLDER%" -set "PERSONALITY_INDEX=0" -for /d %%d in ("%PERSONALITIES_FOLDER%\*") do ( - set /a "PERSONALITY_INDEX+=1" - set "PERSONALITIES[!PERSONALITY_INDEX!]=%%~nxd" - echo !PERSONALITY_INDEX!. %%~nxd -) -set /p "SELECTED_PERSONALITY=Enter the number of the desired personality: " -set "PERSONALITY_FOLDER=%PERSONALITIES_FOLDER%\!PERSONALITIES[%SELECTED_PERSONALITY%]!" - -REM Copy the selected personality folder to personalities/language/category folder -set "OUTPUT_FOLDER=%CD%\personalities\!LANGUAGES[%SELECTED_LANGUAGE%]!\!CATEGORIES[%SELECTED_CATEGORY%]!\!PERSONALITIES[%SELECTED_PERSONALITY%]!" -if not exist "%OUTPUT_FOLDER%" mkdir "%OUTPUT_FOLDER%" -xcopy /e /y "%PERSONALITY_FOLDER%" "%OUTPUT_FOLDER%" - -REM cleaning -if exist "./tmp" ( -echo Cleaning tmp folder -rd /s /q "./tmp" -) -REM Remove the tmp folder -rd /s /q "%TMP_FOLDER%" -echo Done -pause \ No newline at end of file diff --git a/installations/add_backend.bat b/installations/add_backend.bat new file mode 100644 index 00000000..5eae0e5c --- /dev/null +++ b/installations/add_backend.bat @@ -0,0 +1,3 @@ +call ../env/Scripts/activate.bat +python install_backend.py %* +pause \ No newline at end of file diff --git a/installations/backendlist.yaml b/installations/backendlist.yaml new file mode 100644 index 00000000..735880c2 --- /dev/null +++ b/installations/backendlist.yaml @@ -0,0 +1 @@ +GPT4All_GPTJ_backend : https://github.com/ParisNeo/GPT4All_GPTJ_backend \ No newline at end of file diff --git a/installations/install_backend.py b/installations/install_backend.py new file mode 100644 index 00000000..49feec66 --- /dev/null +++ b/installations/install_backend.py @@ -0,0 +1,60 @@ +import argparse +import subprocess +import shutil +import yaml +from pathlib import Path + + +def install_backend(backend_name): + # Load the list of available backends from backendlist.yaml + with open('backendlist.yaml', 'r') as f: + backend_list = yaml.safe_load(f) + + # Get the Github repository URL for the selected backend + try: + backend_url = backend_list[backend_name] + except KeyError: + print(f"Backend '{backend_name}' not found in backendlist.yaml") + return + + # Clone the Github repository to a tmp folder + tmp_folder = Path('tmp') + if tmp_folder.exists(): + shutil.rmtree(tmp_folder) + subprocess.run(['git', 'clone', backend_url, tmp_folder]) + + # Install the requirements.txt from the cloned project + requirements_file = tmp_folder / 'requirements.txt' + subprocess.run(['pip', 'install', '-r', str(requirements_file)]) + + # Copy the folder found inside the binding to ../backends + folders = [f for f in tmp_folder.iterdir() if f.is_dir() and not f.stem.startswith(".")] + src_folder = folders[0] + dst_folder = Path('../backends') / src_folder.stem + print(f"coipying from {src_folder} to {dst_folder}") + # Delete the destination directory if it already exists + if dst_folder.exists(): + shutil.rmtree(dst_folder) + + shutil.copytree(src_folder, dst_folder) + + # Create an empty folder in ../models with the same name + models_folder = Path('../models') + models_folder.mkdir(exist_ok=True) + (models_folder / backend_name).mkdir(exist_ok=True, parents=True) + if tmp_folder.exists(): + shutil.rmtree(tmp_folder) + + +if __name__ == '__main__': + # Load the list of available backends from backendlist.yaml + with open('backendlist.yaml', 'r') as f: + backend_list = yaml.safe_load(f) + + # Print the list of available backends and prompt the user to select one + print("Available backends:") + for backend_id, backend_name in enumerate(backend_list): + print(f" {backend_id} - {backend_name}") + backend_id = int(input("Select a backend to install: ")) + + install_backend(list(backend_list.keys())[backend_id])