updated lollms core and lollms-settings

This commit is contained in:
Saifeddine ALOUI 2023-10-29 21:36:10 +01:00
parent 239955db8b
commit 3edd29f948
6 changed files with 180 additions and 6 deletions

View File

@ -0,0 +1,95 @@
# lollms-settings
The lollms-settings app is used to configure multiple aspects of the lollms project. Lollms is a multi bindings LLM service that serves multiple LLM models that can generate text out of a prompt.
## Usage
To use the lollms-settings app, you need to provide command-line arguments. Here are the available arguments:
### `--configuration_path`
- Description: Path to the configuration file.
- Default: None
### `--reset_personal_path`
- Description: Reset the personal path.
- Action: Store True
### `--reset_config`
- Description: Reset the configurations.
- Action: Store True
### `--reset_installs`
- Description: Reset all installation status.
- Action: Store True
### `--default_cfg_path`
- Description: Reset all installation status.
- Type: String
- Default: None
### `--tool_prefix`
- Description: A prefix to define what tool is being used.
- Type: String
- Default: "lollms_server_"
### `--set_personal_folder_path`
- Description: Forces installing and selecting a specific binding.
- Type: String
- Default: None
### `--install_binding`
- Description: Forces installing and selecting a specific binding.
- Type: String
- Default: None
### `--install_model`
- Description: Forces installing and selecting a specific model.
- Type: String
- Default: None
### `--select_model`
- Description: Forces selecting a specific model.
- Type: String
- Default: None
### `--mount_personalities`
- Description: Forces mounting a list of personas.
- Type: List of Strings
- Default: None
### `--set_personal_foldrer`
- Description: Forces setting personal folder to a specific value.
- Type: String
- Default: None
### `--silent`
- Description: This will operate in silent mode, no menu will be shown.
- Action: Store True
## Example
To run the lollms-settings app with specific configurations, you can use the command-line arguments. Here's an example:
```bash
python lollms-settings.py --configuration_path /path/to/configuration/file --reset_personal_path --install_binding binding_name
```
In this example, the `--configuration_path` argument is used to specify the path to the configuration file. The `--reset_personal_path` argument is used to reset the personal path, and the `--install_binding` argument is used to force installing and selecting a specific binding.
## Additional Notes
- Make sure to provide the necessary permissions and access rights to the configuration file and any other files or directories required by the lollms-settings app.
- Refer to the lollms documentation for more information on configuring and using the lollms project.

View File

@ -7,11 +7,15 @@ import argparse
from lollms.app import LollmsApplication from lollms.app import LollmsApplication
from typing import Callable from typing import Callable
from lollms.config import BaseConfig
from lollms.binding import BindingBuilder, InstallOption
from tqdm import tqdm
class Settings(LollmsApplication): class Settings(LollmsApplication):
def __init__( def __init__(
self, self,
lollms_paths:LollmsPaths=None,
configuration_path:str|Path=None, configuration_path:str|Path=None,
show_logo:bool=True, show_logo:bool=True,
show_commands_list:bool=False, show_commands_list:bool=False,
@ -21,7 +25,8 @@ class Settings(LollmsApplication):
): ):
# get paths # get paths
lollms_paths = LollmsPaths.find_paths(force_local=False, tool_prefix="lollms_server_") if lollms_paths is None:
lollms_paths = LollmsPaths.find_paths(force_local=False, tool_prefix="lollms_server_")
# Load maoin configuration # Load maoin configuration
config = LOLLMSConfig.autoload(lollms_paths) config = LOLLMSConfig.autoload(lollms_paths)
@ -49,6 +54,7 @@ class Settings(LollmsApplication):
except: except:
pass pass
def start(self):
self.menu.main_menu() self.menu.main_menu()
def ask_override_file(self): def ask_override_file(self):
@ -151,6 +157,7 @@ Participating personalities:
return string return string
def main(): def main():
tool_prefix = "lollms_server_"
# Create the argument parser # Create the argument parser
parser = argparse.ArgumentParser(description='App Description') parser = argparse.ArgumentParser(description='App Description')
@ -164,10 +171,20 @@ def main():
parser.add_argument('--default_cfg_path', type=str, default=None, help='Reset all installation status') parser.add_argument('--default_cfg_path', type=str, default=None, help='Reset all installation status')
parser.add_argument('--tool_prefix', type=str, default="lollms_server_", help='A prefix to define what tool is being used (default lollms_server)')
parser.add_argument('--set_personal_folder_path', type=str, default=None, help='Forces installing and selecting a specific binding')
parser.add_argument('--install_binding', type=str, default=None, help='Forces installing and selecting a specific binding')
parser.add_argument('--install_model', type=str, default=None, help='Forces installing and selecting a specific model')
parser.add_argument('--select_model', type=str, default=None, help='Forces selecting a specific model')
parser.add_argument('--mount_personalities', nargs='+', type=str, default=None, help='Forces mounting a list of personas')
parser.add_argument('--set_personal_foldrer', type=str, default=None, help='Forces setting personal folder to a specific value')
parser.add_argument('--silent', action='store_true', help='This will operate in scilent mode, no menu will be shown')
# Parse the command-line arguments # Parse the command-line arguments
args = parser.parse_args() args = parser.parse_args()
if args.reset_installs: if args.reset_installs:
LollmsApplication.reset_all_installs() LollmsApplication.reset_all_installs()
@ -175,17 +192,70 @@ def main():
LollmsPaths.reset_configs() LollmsPaths.reset_configs()
if args.reset_config: if args.reset_config:
lollms_paths = LollmsPaths.find_paths(custom_default_cfg_path=args.default_cfg_path, tool_prefix="lollms_server_") lollms_paths = LollmsPaths.find_paths(custom_default_cfg_path=args.default_cfg_path, tool_prefix=tool_prefix)
cfg_path = lollms_paths.personal_configuration_path / f"{lollms_paths.tool_prefix}local_config.yaml" cfg_path = lollms_paths.personal_configuration_path / f"{lollms_paths.tool_prefix}local_config.yaml"
try: try:
cfg_path.unlink() cfg_path.unlink()
ASCIIColors.success("LOLLMS configuration reset successfully") ASCIIColors.success("LOLLMS configuration reset successfully")
except: except:
ASCIIColors.success("Couldn't reset LOLLMS configuration") ASCIIColors.success("Couldn't reset LOLLMS configuration")
else:
lollms_paths = LollmsPaths.find_paths(force_local=False, tool_prefix=tool_prefix)
configuration_path = args.configuration_path configuration_path = args.configuration_path
Settings(configuration_path=configuration_path, show_commands_list=True) if args.set_personal_folder_path:
cfg = BaseConfig(config={
"lollms_path":str(Path(__file__).parent),
"lollms_personal_path":args.set_personal_folder_path
})
ASCIIColors.green(f"Selected personal path: {cfg.lollms_personal_path}")
pp= Path(cfg.lollms_personal_path)
if not pp.exists():
try:
pp.mkdir(parents=True)
ASCIIColors.green(f"Personal path set to {pp}")
except:
print(f"{ASCIIColors.color_red}It seams there is an error in the path you rovided{ASCIIColors.color_reset}")
global_paths_cfg_path = Path.home()/f"{tool_prefix}global_paths_cfg.yaml"
lollms_paths = LollmsPaths.find_paths(force_local=False, custom_global_paths_cfg_path=global_paths_cfg_path, tool_prefix=tool_prefix)
cfg.save_config(global_paths_cfg_path)
settings_app = Settings(configuration_path=configuration_path, lollms_paths=lollms_paths, show_commands_list=True)
if args.install_binding:
settings_app.config.binding_name= args.install_binding
settings_app.binding = BindingBuilder().build_binding(settings_app.config, settings_app.lollms_paths,InstallOption.FORCE_INSTALL)
settings_app.config.save_config()
if args.install_model:
if not settings_app.binding:
settings_app.binding = BindingBuilder().build_binding(settings_app.config, settings_app.lollms_paths,InstallOption.FORCE_INSTALL)
def progress_callback(blocks, block_size, total_size):
tqdm_bar.total=total_size
tqdm_bar.update(block_size)
# Usage example
with tqdm(total=100, unit="%", desc="Download Progress", ncols=80) as tqdm_bar:
settings_app.config.download_model(args.install_model,settings_app.binding, progress_callback)
settings_app.model = settings_app.binding.build_model()
settings_app.config.save_config()
if args.select_model:
settings_app.config.model_name = args.select_model
if not settings_app.binding:
settings_app.binding = BindingBuilder().build_binding(settings_app.config, settings_app.lollms_paths,InstallOption.FORCE_INSTALL)
settings_app.model = settings_app.binding.build_model()
settings_app.config.save_config()
if not args.silent:
settings_app.start()
if __name__ == "__main__": if __name__ == "__main__":

View File

@ -94,6 +94,12 @@ class LLMBinding:
for models_folder in self.models_folders: for models_folder in self.models_folders:
models_folder.mkdir(parents=True, exist_ok=True) models_folder.mkdir(parents=True, exist_ok=True)
def settings_updated(self):
"""
To be implemented by the bindings
"""
pass
def handle_request(self, data: Dict[str, Any]) -> Dict[str, Any]: def handle_request(self, data: Dict[str, Any]) -> Dict[str, Any]:
""" """
Handle client requests. Handle client requests.

View File

@ -57,12 +57,13 @@ class LollmsPaths:
self.execution_path = Path(os.getcwd()) self.execution_path = Path(os.getcwd())
ASCIIColors.yellow(f"Execution path : {self.execution_path}") ASCIIColors.yellow(f"Execution path : {self.execution_path}")
if (self.execution_path/"zoos").exists(): if (self.execution_path/"zoos").exists():
ASCIIColors.green("Local zoos folder found")
self.bindings_zoo_path = self.execution_path/"zoos" / "bindings_zoo" self.bindings_zoo_path = self.execution_path/"zoos" / "bindings_zoo"
self.personalities_zoo_path = self.execution_path/"zoos" / "personalities_zoo" self.personalities_zoo_path = self.execution_path/"zoos" / "personalities_zoo"
self.extensions_zoo_path = self.execution_path/"zoos" / "extensions_zoo" self.extensions_zoo_path = self.execution_path/"zoos" / "extensions_zoo"
self.models_zoo_path = self.execution_path/"zoos" / "models_zoo" self.models_zoo_path = self.execution_path/"zoos" / "models_zoo"
else: else:
ASCIIColors.orange("local zoos folder not found")
self.bindings_zoo_path = self.personal_path / "bindings_zoo" self.bindings_zoo_path = self.personal_path / "bindings_zoo"
self.personalities_zoo_path = self.personal_path / "personalities_zoo" self.personalities_zoo_path = self.personal_path / "personalities_zoo"
self.extensions_zoo_path = self.personal_path / "extensions_zoo" self.extensions_zoo_path = self.personal_path / "extensions_zoo"
@ -214,6 +215,8 @@ class LollmsPaths:
global_paths_cfg_path = Path(f"./{tool_prefix}global_paths_cfg.yaml") global_paths_cfg_path = Path(f"./{tool_prefix}global_paths_cfg.yaml")
else: else:
global_paths_cfg_path = Path(custom_global_paths_cfg_path) global_paths_cfg_path = Path(custom_global_paths_cfg_path)
ASCIIColors.cyan(f"Trying to use Configuration at :{global_paths_cfg_path}")
if global_paths_cfg_path.exists(): if global_paths_cfg_path.exists():
try: try:
cfg = BaseConfig() cfg = BaseConfig()

View File

@ -436,7 +436,7 @@ class MainMenu(Menu):
elif choice <= len(bindings_list): elif choice <= len(bindings_list):
return return
else: else:
print("Invalid choice!") print("Invalid choice!")

View File

@ -26,7 +26,7 @@ def get_all_files(path):
setuptools.setup( setuptools.setup(
name="lollms", name="lollms",
version="5.9.0", version="5.9.3",
author="Saifeddine ALOUI", author="Saifeddine ALOUI",
author_email="aloui.saifeddine@gmail.com", author_email="aloui.saifeddine@gmail.com",
description="A python library for AI personality definition", description="A python library for AI personality definition",