Added personality localization

This commit is contained in:
Saifeddine ALOUI 2023-08-21 02:04:54 +02:00
parent 67abfab9c5
commit 41dd0cbe31
5 changed files with 84 additions and 10 deletions

View File

@ -58,6 +58,7 @@ class LollmsApplication:
else:
if load_binding:
try:
ASCIIColors.info(f">Loading binding {self.config.binding_name}. Please wait ...")
self.binding = self.load_binding()
except Exception as ex:
ASCIIColors.error(f"Failed to load binding.\nReturned exception: {ex}")
@ -74,7 +75,11 @@ class LollmsApplication:
if self.config.model_name is not None:
try:
ASCIIColors.info(f">Loading model {self.config.model_name}. Please wait ...")
self.model = self.load_model()
if self.model is not None:
ASCIIColors.success(f"Model {self.config.model_name} loaded successfully.")
except Exception as ex:
ASCIIColors.error(f"Failed to load model.\nReturned exception: {ex}")
trace_exception(ex)
@ -125,8 +130,10 @@ class LollmsApplication:
self.n_cond_tk = len(self.cond_tk)
ASCIIColors.success(f"Personality {personality.name} mounted successfully")
else:
ASCIIColors.success(f"Personality {personality.name} mounted successfully but no model is selected")
if personality.selected_language is not None:
ASCIIColors.success(f"Personality {personality.name} : {personality.selected_language} mounted successfully but no model is selected")
else:
ASCIIColors.success(f"Personality {personality.name} mounted successfully but no model is selected")
except Exception as ex:
ASCIIColors.error(f"Couldn't load personality. Please verify your configuration file at {self.lollms_paths.personal_configuration_path} or use the next menu to select a valid personality")
ASCIIColors.error(f"Binding returned this exception : {ex}")
@ -178,7 +185,7 @@ class LollmsApplication:
def select_personality(self, id:int):
if id<len(self.config.personalities):
self.config.active_personality_id = id
self.personality = self.mount_personalities[id]
self.personality = self.mounted_personalities[id]
self.config.save_config()
return True
else:

View File

@ -319,6 +319,8 @@ def main():
ASCIIColors.success("Couldn't reset LOLLMS configuration")
if args.show_time_elapsed:
show_time_elapsed = True
else:
show_time_elapsed = False
# Parse the command-line arguments
args = parser.parse_args()

View File

@ -44,9 +44,7 @@ def install_package(package_name):
class AIPersonality:
# Extra
# Extra
def __init__(
self,
personality_package_path: str|Path,
@ -54,6 +52,7 @@ class AIPersonality:
config:LOLLMSConfig,
model:LLMBinding=None,
run_scripts=True,
selected_language=None,
is_relative_path=True,
installation_option:InstallOption=InstallOption.INSTALL_IF_NECESSARY,
callback: Callable[[str, int, dict], bool]=None
@ -87,6 +86,8 @@ class AIPersonality:
self._name: str = "lollms"
self._user_name: str = "user"
self._category: str = "General"
self._supported_languages: str = []
self._selected_language: str = selected_language
# Conditionning
self._personality_description: str = "This personality is a helpful and Kind AI ready to help you solve your problems"
@ -194,6 +195,19 @@ Date: {{date}}
else:
self._secret_cfg = None
languages = package_path / "languages"
if languages.exists():
self._supported_languages = []
for lang in [l for l in languages.iterdir()]:
self._supported_languages.append(lang.stem)
if self._selected_language is not None and self._selected_language in self._supported_languages:
config_file = languages / (self._selected_language+".yaml")
with open(config_file, "r", encoding='utf-8') as f:
config = yaml.safe_load(f)
# Load parameters from the configuration file
self._version = config.get("version", self._version)
@ -201,6 +215,7 @@ Date: {{date}}
self._name = config.get("name", self._name)
self._user_name = config.get("user_name", self._user_name)
self._category = config.get("category", self._category)
self._personality_description = config.get("personality_description", self._personality_description)
self._personality_conditioning = config.get("personality_conditioning", self._personality_conditioning)
self._welcome_message = config.get("welcome_message", self._welcome_message)
@ -293,6 +308,8 @@ Date: {{date}}
"name": self._name,
"user_name": self._user_name,
"category": self._category,
"supported_languages": self._supported_languages,
"selected_language": self._selected_language,
"personality_description": self._personality_description,
"personality_conditioning": self._personality_conditioning,
"welcome_message": self._welcome_message,
@ -332,6 +349,8 @@ Date: {{date}}
"name": self._name,
"user_name": self._user_name,
"category": self._category,
"supported_languages": self._supported_languages,
"selected_language": self._selected_language,
"personality_description": self._personality_description,
"personality_conditioning": self._personality_conditioning,
"welcome_message": self._welcome_message,
@ -424,6 +443,28 @@ Date: {{date}}
"""Set the category."""
self._category = value
@property
def supported_languages(self) -> str:
"""Get the supported_languages."""
return self._supported_languages
@supported_languages.setter
def supported_languages(self, value: str):
"""Set the supported_languages."""
self._supported_languages = value
@property
def selected_language(self) -> str:
"""Get the selected_language."""
return self._selected_language
@selected_language.setter
def selected_language(self, value: str):
"""Set the selected_language."""
self._selected_language = value
@property
def personality_description(self) -> str:
"""
@ -1371,22 +1412,33 @@ class PersonalityBuilder:
else:
if id>len(self.config["personalities"]):
id = len(self.config["personalities"])-1
if ":" in self.config["personalities"][id]:
elements = self.config["personalities"][id].split(":")
personality_folder = elements[0]
personality_language = elements[1]
else:
personality_folder = self.config["personalities"][id]
personality_language = None
if len(self.config["personalities"][id].split("/"))==2:
self.personality = AIPersonality(
self.lollms_paths.personalities_zoo_path / self.config["personalities"][id],
self.lollms_paths.personalities_zoo_path / personality_folder,
self.lollms_paths,
self.config,
self.model,
selected_language=personality_language,
installation_option=self.installation_option,
callback=self.callback
)
else:
self.personality = AIPersonality(
self.config["personalities"][id],
personality_folder,
self.lollms_paths,
self.config,
self.model,
is_relative_path=False,
selected_language=personality_language,
installation_option=self.installation_option,
callback=self.callback
)

View File

@ -310,7 +310,18 @@ class MainMenu(Menu):
if 1 <= choice <= len(personality_names)-1:
name = personality_names[choice - 1]
print(f"You selected personality: {ASCIIColors.color_green}{name}{ASCIIColors.color_reset}")
self.lollms_app.config["personalities"].append(f"{category}/{name}")
langs_dir = self.lollms_app.lollms_paths.personalities_zoo_path/category/name/"languages"
if langs_dir.exists():
langs = [f.stem for f in langs_dir.iterdir()]
print("Select language")
choice = self.show_menu(langs)
if 1 <= choice <= len(langs):
lang = langs[choice - 1]
self.lollms_app.config["personalities"].append(f"{category}/{name}:{lang}")
else:
print("Invalid choice!")
else:
self.lollms_app.config["personalities"].append(f"{category}/{name}")
self.lollms_app.mount_personality(len(self.lollms_app.config["personalities"])-1, callback = self.callback)
self.lollms_app.config.save_config()
print("Personality mounted successfully!")
@ -351,8 +362,10 @@ class MainMenu(Menu):
choice = int(self.show_menu(entries, self.lollms_app.config['active_personality_id']))-1
if choice<len(entries)-1:
self.lollms_app.select_personality(choice)
ASCIIColors.success(f"Selected personality: {self.personality.name}")
except Exception as ex:
ASCIIColors.error(f"Couldn't set personality.\nGot this exception:{ex}")
trace_exception(ex)
def reinstall_binding(self):
lollms_app = self.lollms_app

View File

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