diff --git a/lollms/app.py b/lollms/app.py index a358db3..a8ac76a 100644 --- a/lollms/app.py +++ b/lollms/app.py @@ -52,6 +52,13 @@ class LollmsApplication(LoLLMsCom): super().__init__(sio) self.app_name = app_name self.config = config + ASCIIColors.warning(f"Configuration fix ") + try: + config.personalities = [p.split(":")[0] for p in config.personalities] + config.save_config() + except Exception as ex: + trace_exception(ex) + self.lollms_paths = lollms_paths # TODO : implement @@ -691,10 +698,7 @@ class LollmsApplication(LoLLMsCom): self.n_cond_tk = len(self.cond_tk) ASCIIColors.success(f"Personality {personality.name} mounted successfully") else: - 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") + 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}") @@ -913,7 +917,7 @@ class LollmsApplication(LoLLMsCom): default_language = self.personality.language.lower().strip().split()[0] current_language = self.config.current_language.lower().strip().split()[0] - if self.config.current_language and current_language!= default_language: + if current_language and current_language!= self.personality.language: language_path = self.lollms_paths.personal_configuration_path/"personalities"/self.personality.name/f"languages_{current_language}.yaml" if not language_path.exists(): self.info(f"This is the first time this personality speaks {current_language}\nLollms is reconditionning the persona in that language.\nThis will be done just once. Next time, the personality will speak {current_language} out of the box") @@ -926,7 +930,7 @@ class LollmsApplication(LoLLMsCom): else: with open(language_path,"r",encoding="utf-8", errors="ignore") as f: language_pack = yaml.safe_load(f) - conditionning = language_pack["personality_conditioning"] + conditionning = language_pack.get("personality_conditioning", language_pack.get("conditionning", self.personality.personality_conditioning)) else: conditionning = self.personality._personality_conditioning diff --git a/lollms/personality.py b/lollms/personality.py index c69167a..951f05d 100644 --- a/lollms/personality.py +++ b/lollms/personality.py @@ -1094,6 +1094,7 @@ Use this structure: # Load parameters from the configuration file self._version = config.get("version", self._version) self._author = config.get("author", self._author) + self._language = config.get("language", self._author) self._name = config.get("name", self._name) self._creation_date = config.get("creation_date", self._creation_date) self._last_update_date = config.get("last_update_date", self._last_update_date) @@ -1110,6 +1111,16 @@ Use this structure: self._personality_description = config.get("personality_description", self._personality_description) self._personality_conditioning = config.get("personality_conditioning", self._personality_conditioning) self._prompts_list = config.get("prompts_list", self._prompts_list) + try: + personality_folder = self.lollms_paths.personal_configuration_path/"personalities"/self.name + personality_folder.mkdir(exist_ok=True, parents=True) + custom_prompts = personality_folder/"custom_prompts.yaml" + if custom_prompts.exists(): + with open(custom_prompts,"r") as f: + data = yaml.safe_load(f) + self._prompts_list.append(data["custom_prompts"]) + except Exception as ex: + trace_exception(ex) self._welcome_message = config.get("welcome_message", self._welcome_message) self._include_welcome_message_in_discussion = config.get("include_welcome_message_in_discussion", self._include_welcome_message_in_discussion) @@ -1129,7 +1140,53 @@ Use this structure: # Script parameters (for example keys to connect to search engine or any other usage) self._processor_cfg = config.get("processor_cfg", self._processor_cfg) + def add_prompt(self, prompt): + try: + personality_folder = self.lollms_paths.personal_configuration_path/"personalities"/self.name + personality_folder.mkdir(exist_ok=True, parents=True) + custom_prompts = personality_folder/"custom_prompts.yaml" + if custom_prompts.exists(): + with open(custom_prompts,"r") as f: + data = yaml.safe_load(f) + data["custom_prompts"].append(prompt) + else: + data = { + "custom_prompts":[prompt] + } + with open(custom_prompts,"w") as f: + yaml.dump(data, f) + except Exception as ex: + trace_exception(ex) + + def delete_prompt(self, prompt): + try: + personality_folder = self.lollms_paths.personal_configuration_path/"personalities"/self.name + personality_folder.mkdir(exist_ok=True, parents=True) + custom_prompts = personality_folder/"custom_prompts.yaml" + if custom_prompts.exists(): + with open(custom_prompts,"r") as f: + data = yaml.safe_load(f) + index = data["custom_prompts"].index(prompt) + if index>=0: + del data["custom_prompts"][index] + with open(custom_prompts,"w") as f: + yaml.dump(data, f) + except Exception as ex: + trace_exception(ex) + def set_language(self, language): + if self.default_language==language: + package_path = self.personality_package_path + + # Verify that there is at least a configuration file + config_file = package_path / "config.yaml" + if not config_file.exists(): + raise ValueError(f"The provided folder {package_path} does not exist.") + + with open(config_file, "r", encoding='utf-8') as f: + config = yaml.safe_load(f) + self.set_config(config) + return if self.language.lower().strip() and self.language.lower().strip()!= language: language_path = self.app.lollms_paths.personal_configuration_path/"personalities"/self.name/f"languages_{language}.yaml" if not language_path.exists(): @@ -1154,12 +1211,13 @@ Use this structure: raise ValueError(f"The provided folder {package_path} does not exist.") with open(config_file, "r", encoding='utf-8') as f: - default_config = f.read() + default_config = yaml.safe_load(f) # Translating - new_config = self.generate_code(f"Translate the following yaml file values to {language}.\n```yaml\n{default_config}```\n") + new_config = self.generate_code(f"Translate the following json file values to {language}. Use double quotes for the keys and strings. Do not translate the keys, just the values\n```json\n{default_config}```\n", max_continues=1) + json_cfg = json.loads(new_config) with open(language_path,"w",encoding="utf-8", errors="ignore") as f: - f.write(new_config) + yaml.dump(json_cfg, f) with open(language_path,"r",encoding="utf-8", errors="ignore") as f: new_config = yaml.safe_load(f) self.set_config(new_config) @@ -1170,9 +1228,12 @@ Use this structure: self.InfoMessage(f"Couldn't translate personality to {language}.\nThe model you are using may be unable to do this task. We'll switch to conditionning language insertion mode.") else: - with open(language_path,"r",encoding="utf-8", errors="ignore") as f: - config = yaml.safe_load(f) - self.set_config(config, False) + try: + with open(language_path,"r",encoding="utf-8", errors="ignore") as f: + config = yaml.safe_load(f) + self.set_config(config, False) + except Exception as ex: + trace_exception(ex) else: pass @@ -1215,7 +1276,7 @@ Use this structure: else: default_language = 'english' - current_language = self.config.current_language.lower().strip().split()[0] + current_language = self.selected_language.lower().strip().split()[0] if current_language and current_language!= default_language: language_path = self.app.lollms_paths.personal_configuration_path/"personalities"/config["name"]/f"languages_{current_language}.yaml" @@ -1438,12 +1499,15 @@ Use this structure: if process: if self.vectorizer is None: if self.config.rag_vectorizer == "semantic": + self.ShowBlockingMessage("Processing file\nPlease wait ...\nUsing semantic vectorizer") from lollmsvectordb.lollms_vectorizers.semantic_vectorizer import SemanticVectorizer v = SemanticVectorizer(self.config.rag_vectorizer_model) elif self.config.rag_vectorizer == "tfidf": + self.ShowBlockingMessage("Processing file\nPlease wait ...\nUsing tfidf vectorizer") from lollmsvectordb.lollms_vectorizers.tfidf_vectorizer import TFIDFVectorizer v = TFIDFVectorizer() elif self.config.rag_vectorizer == "openai": + self.ShowBlockingMessage("Processing file\nPlease wait ...\nUsing open ai vectorizer") from lollmsvectordb.lollms_vectorizers.openai_vectorizer import OpenAIVectorizer v = OpenAIVectorizer() @@ -1455,6 +1519,8 @@ Use this structure: overlap=self.config.rag_overlap ) data = TextDocumentsLoader.read_file(path) + if self.config.debug: + self.print_prompt(data) self.vectorizer.add_document(path.stem, data, path, True) self.vectorizer.build_index() if callback is not None: @@ -1463,8 +1529,10 @@ Use this structure: return True except Exception as e: trace_exception(e) - self.InfoMessage(f"Unsupported file format or empty file.\nSupported formats are {GenericDataLoader.get_supported_file_types()}",client_id=client.client_id) + self.InfoMessage(f"Unsupported file format or empty file.\nSupported formats are {TextDocumentsLoader.get_supported_file_types()}",client_id=client.client_id) return False + + def save_personality(self, package_path=None): """ Save the personality parameters to a YAML configuration file. @@ -1494,8 +1562,7 @@ Use this structure: "last_update_date": self._last_update_date, "user_name": self._user_name, "category": self._category, - "language": self._language, - "default_language": self._default_language, + "language": self._default_language, "supported_languages": self._supported_languages, "selected_language": self._selected_language, "ignore_discussion_documents_rag": self._ignore_discussion_documents_rag, @@ -5145,13 +5212,7 @@ class PersonalityBuilder: 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 + personality_folder = self.config["personalities"][id] if len(self.config["personalities"][id].split("/"))==2: self.personality = AIPersonality( @@ -5160,7 +5221,7 @@ class PersonalityBuilder: self.config, self.model, app=self.app, - selected_language=personality_language, + selected_language=self.config.current_language, installation_option=self.installation_option, callback=self.callback ) @@ -5172,7 +5233,7 @@ class PersonalityBuilder: self.model, app=self.app, is_relative_path=False, - selected_language=personality_language, + selected_language=self.config.current_language, installation_option=self.installation_option, callback=self.callback ) diff --git a/lollms/server/endpoints/lollms_personalities_infos.py b/lollms/server/endpoints/lollms_personalities_infos.py index 32488c8..bc195a6 100644 --- a/lollms/server/endpoints/lollms_personalities_infos.py +++ b/lollms/server/endpoints/lollms_personalities_infos.py @@ -61,6 +61,68 @@ def list_personalities(category:str): ASCIIColors.error(f"No personalities found. Using default one {ex}") return personalities + +@router.get("/get_personality") +def get_personality(): + ASCIIColors.yellow("Getting current personality") + personality = lollmsElfServer.personality + + real_assets_path = lollmsElfServer.lollms_paths.personalities_zoo_path / personality.category / personality.name / 'assets' + assets_path = Path("personalities") / personality.category / personality.name / 'assets' + gif_logo_path = assets_path / 'logo.gif' + webp_logo_path = assets_path / 'logo.webp' + png_logo_path = assets_path / 'logo.png' + jpg_logo_path = assets_path / 'logo.jpg' + jpeg_logo_path = assets_path / 'logo.jpeg' + svg_logo_path = assets_path / 'logo.svg' + bmp_logo_path = assets_path / 'logo.bmp' + + gif_logo_path_ = real_assets_path / 'logo.gif' + webp_logo_path_ = real_assets_path / 'logo.webp' + png_logo_path_ = real_assets_path / 'logo.png' + jpg_logo_path_ = real_assets_path / 'logo.jpg' + jpeg_logo_path_ = real_assets_path / 'logo.jpeg' + svg_logo_path_ = real_assets_path / 'logo.svg' + bmp_logo_path_ = real_assets_path / 'logo.bmp' + + has_logo = png_logo_path.is_file() or gif_logo_path.is_file() + + if gif_logo_path_.exists(): + avatar = str(gif_logo_path).replace("\\","/") + elif webp_logo_path_.exists(): + avatar = str(webp_logo_path).replace("\\","/") + elif png_logo_path_.exists(): + avatar = str(png_logo_path).replace("\\","/") + elif jpg_logo_path_.exists(): + avatar = str(jpg_logo_path).replace("\\","/") + elif jpeg_logo_path_.exists(): + avatar = str(jpeg_logo_path).replace("\\","/") + elif svg_logo_path_.exists(): + avatar = str(svg_logo_path).replace("\\","/") + elif bmp_logo_path_.exists(): + avatar = str(bmp_logo_path).replace("\\","/") + else: + avatar = "" + personality = { + "folder":personality.personality_folder_name, + "has_scripts":personality.processor is not None, + "name":personality.name, + "description":personality.personality_description, + "disclaimer":personality.disclaimer, + "author":personality.author, + "language":personality.language, + "version":personality.version, + "creation_date":personality.creation_date, + "last_update_date":personality.last_update_date, + "installed":True, + "help":personality.help, + "commands":personality.commands, + "prompts_list":personality.prompts_list, + "avatar":avatar, + "has_logo":has_logo + } + return personality + @router.get("/get_all_personalities") def get_all_personalities(): ASCIIColors.yellow("Listing all personalities") @@ -73,82 +135,142 @@ def get_all_personalities(): personalities[cat if category_folder!=lollmsElfServer.lollms_paths.custom_personalities_path else "custom_personalities"] = [] for personality_folder in category_folder.iterdir(): pers = personality_folder.stem - if personality_folder.is_dir() and not personality_folder.stem.startswith('.'): - personality_info = {"folder":personality_folder.stem} - config_path = personality_folder / 'config.yaml' - if not config_path.exists(): - """ + if lollmsElfServer.personality.personality_folder_name==pers: + personality = lollmsElfServer.personality + + real_assets_path = lollmsElfServer.lollms_paths.personalities_zoo_path / personality.category / personality.name / 'assets' + assets_path = Path("personalities") / personality.category / personality.name / 'assets' + gif_logo_path = assets_path / 'logo.gif' + webp_logo_path = assets_path / 'logo.webp' + png_logo_path = assets_path / 'logo.png' + jpg_logo_path = assets_path / 'logo.jpg' + jpeg_logo_path = assets_path / 'logo.jpeg' + svg_logo_path = assets_path / 'logo.svg' + bmp_logo_path = assets_path / 'logo.bmp' + + gif_logo_path_ = real_assets_path / 'logo.gif' + webp_logo_path_ = real_assets_path / 'logo.webp' + png_logo_path_ = real_assets_path / 'logo.png' + jpg_logo_path_ = real_assets_path / 'logo.jpg' + jpeg_logo_path_ = real_assets_path / 'logo.jpeg' + svg_logo_path_ = real_assets_path / 'logo.svg' + bmp_logo_path_ = real_assets_path / 'logo.bmp' + + has_logo = png_logo_path.is_file() or gif_logo_path.is_file() + + if gif_logo_path_.exists(): + avatar = str(gif_logo_path).replace("\\","/") + elif webp_logo_path_.exists(): + avatar = str(webp_logo_path).replace("\\","/") + elif png_logo_path_.exists(): + avatar = str(png_logo_path).replace("\\","/") + elif jpg_logo_path_.exists(): + avatar = str(jpg_logo_path).replace("\\","/") + elif jpeg_logo_path_.exists(): + avatar = str(jpeg_logo_path).replace("\\","/") + elif svg_logo_path_.exists(): + avatar = str(svg_logo_path).replace("\\","/") + elif bmp_logo_path_.exists(): + avatar = str(bmp_logo_path).replace("\\","/") + else: + avatar = "" + personality = { + "folder":personality.personality_folder_name, + "has_scripts":personality.processor is not None, + "name":personality.name, + "description":personality.personality_description, + "disclaimer":personality.disclaimer, + "author":personality.author, + "language":personality.language, + "version":personality.version, + "creation_date":personality.creation_date, + "last_update_date":personality.last_update_date, + "installed":True, + "help":personality.help, + "commands":personality.commands, + "prompts_list":personality.prompts_list, + "avatar":avatar, + "has_logo":has_logo + } + personalities[cat if category_folder!=lollmsElfServer.lollms_paths.custom_personalities_path else "custom_personalities"].append(personality) + else: + if personality_folder.is_dir() and not personality_folder.stem.startswith('.'): + personality_info = {"folder":personality_folder.stem} + config_path = personality_folder / 'config.yaml' + if not config_path.exists(): + """ + try: + shutil.rmtree(str(config_path.parent)) + ASCIIColors.warning(f"Deleted useless personality: {config_path.parent}") + except Exception as ex: + ASCIIColors.warning(f"Couldn't delete personality ({ex})") + """ + continue try: - shutil.rmtree(str(config_path.parent)) - ASCIIColors.warning(f"Deleted useless personality: {config_path.parent}") - except Exception as ex: - ASCIIColors.warning(f"Couldn't delete personality ({ex})") - """ - continue - try: - scripts_path = personality_folder / 'scripts' - personality_info['has_scripts'] = scripts_path.exists() - with open(config_path, "r", encoding="utf8") as config_file: - config_data = yaml.load(config_file, Loader=yaml.FullLoader) - personality_info['name'] = config_data.get('name',"No Name") - personality_info['description'] = config_data.get('personality_description',"") - personality_info['disclaimer'] = config_data.get('disclaimer',"") - personality_info['author'] = config_data.get('author', 'ParisNeo') - personality_info['version'] = config_data.get('version', '1.0.0') - personality_info['creation_date'] = config_data.get("creation_date",None) - personality_info['last_update_date'] = config_data.get("last_update_date",None) - personality_info['installed'] = (lollmsElfServer.lollms_paths.personal_configuration_path/f"personality_{personality_folder.stem}.yaml").exists() or personality_info['has_scripts'] - personality_info['help'] = config_data.get('help', '') - personality_info['commands'] = config_data.get('commands', '') - personality_info['prompts_list'] = config_data.get('prompts_list', []) - languages_path = personality_folder/ 'languages' + scripts_path = personality_folder / 'scripts' + personality_info['has_scripts'] = scripts_path.exists() + with open(config_path, "r", encoding="utf8") as config_file: + config_data = yaml.load(config_file, Loader=yaml.FullLoader) + personality_info['name'] = config_data.get('name',"No Name") + personality_info['description'] = config_data.get('personality_description',"") + personality_info['disclaimer'] = config_data.get('disclaimer',"") + personality_info['author'] = config_data.get('author', 'ParisNeo') + personality_info['language'] = config_data.get('language', 'english') + personality_info['version'] = config_data.get('version', '1.0.0') + personality_info['creation_date'] = config_data.get("creation_date",None) + personality_info['last_update_date'] = config_data.get("last_update_date",None) + personality_info['installed'] = (lollmsElfServer.lollms_paths.personal_configuration_path/f"personality_{personality_folder.stem}.yaml").exists() or personality_info['has_scripts'] + personality_info['help'] = config_data.get('help', '') + personality_info['commands'] = config_data.get('commands', '') + personality_info['prompts_list'] = config_data.get('prompts_list', []) + languages_path = personality_folder/ 'languages' - real_assets_path = personality_folder/ 'assets' - assets_path = Path("personalities") / cat / pers / 'assets' - gif_logo_path = assets_path / 'logo.gif' - webp_logo_path = assets_path / 'logo.webp' - png_logo_path = assets_path / 'logo.png' - jpg_logo_path = assets_path / 'logo.jpg' - jpeg_logo_path = assets_path / 'logo.jpeg' - svg_logo_path = assets_path / 'logo.svg' - bmp_logo_path = assets_path / 'logo.bmp' + real_assets_path = personality_folder/ 'assets' + assets_path = Path("personalities") / cat / pers / 'assets' + gif_logo_path = assets_path / 'logo.gif' + webp_logo_path = assets_path / 'logo.webp' + png_logo_path = assets_path / 'logo.png' + jpg_logo_path = assets_path / 'logo.jpg' + jpeg_logo_path = assets_path / 'logo.jpeg' + svg_logo_path = assets_path / 'logo.svg' + bmp_logo_path = assets_path / 'logo.bmp' - gif_logo_path_ = real_assets_path / 'logo.gif' - webp_logo_path_ = real_assets_path / 'logo.webp' - png_logo_path_ = real_assets_path / 'logo.png' - jpg_logo_path_ = real_assets_path / 'logo.jpg' - jpeg_logo_path_ = real_assets_path / 'logo.jpeg' - svg_logo_path_ = real_assets_path / 'logo.svg' - bmp_logo_path_ = real_assets_path / 'logo.bmp' + gif_logo_path_ = real_assets_path / 'logo.gif' + webp_logo_path_ = real_assets_path / 'logo.webp' + png_logo_path_ = real_assets_path / 'logo.png' + jpg_logo_path_ = real_assets_path / 'logo.jpg' + jpeg_logo_path_ = real_assets_path / 'logo.jpeg' + svg_logo_path_ = real_assets_path / 'logo.svg' + bmp_logo_path_ = real_assets_path / 'logo.bmp' - if languages_path.exists(): - personality_info['languages']= [""]+[f.stem for f in languages_path.iterdir() if f.suffix==".yaml"] - else: - personality_info['languages']=None + if languages_path.exists(): + personality_info['languages']= [""]+[f.stem for f in languages_path.iterdir() if f.suffix==".yaml"] + else: + personality_info['languages']=None + + personality_info['has_logo'] = png_logo_path.is_file() or gif_logo_path.is_file() - personality_info['has_logo'] = png_logo_path.is_file() or gif_logo_path.is_file() - - if gif_logo_path_.exists(): - personality_info['avatar'] = str(gif_logo_path).replace("\\","/") - elif webp_logo_path_.exists(): - personality_info['avatar'] = str(webp_logo_path).replace("\\","/") - elif png_logo_path_.exists(): - personality_info['avatar'] = str(png_logo_path).replace("\\","/") - elif jpg_logo_path_.exists(): - personality_info['avatar'] = str(jpg_logo_path).replace("\\","/") - elif jpeg_logo_path_.exists(): - personality_info['avatar'] = str(jpeg_logo_path).replace("\\","/") - elif svg_logo_path_.exists(): - personality_info['avatar'] = str(svg_logo_path).replace("\\","/") - elif bmp_logo_path_.exists(): - personality_info['avatar'] = str(bmp_logo_path).replace("\\","/") - else: - personality_info['avatar'] = "" - - personalities[cat if category_folder!=lollmsElfServer.lollms_paths.custom_personalities_path else "custom_personalities"].append(personality_info) - except Exception as ex: - ASCIIColors.warning(f"Couldn't load personality from {personality_folder} [{ex}]") - trace_exception(ex) + if gif_logo_path_.exists(): + personality_info['avatar'] = str(gif_logo_path).replace("\\","/") + elif webp_logo_path_.exists(): + personality_info['avatar'] = str(webp_logo_path).replace("\\","/") + elif png_logo_path_.exists(): + personality_info['avatar'] = str(png_logo_path).replace("\\","/") + elif jpg_logo_path_.exists(): + personality_info['avatar'] = str(jpg_logo_path).replace("\\","/") + elif jpeg_logo_path_.exists(): + personality_info['avatar'] = str(jpeg_logo_path).replace("\\","/") + elif svg_logo_path_.exists(): + personality_info['avatar'] = str(svg_logo_path).replace("\\","/") + elif bmp_logo_path_.exists(): + personality_info['avatar'] = str(bmp_logo_path).replace("\\","/") + else: + personality_info['avatar'] = "" + + personalities[cat if category_folder!=lollmsElfServer.lollms_paths.custom_personalities_path else "custom_personalities"].append(personality_info) + except Exception as ex: + ASCIIColors.warning(f"Couldn't load personality from {personality_folder} [{ex}]") + trace_exception(ex) ASCIIColors.green("OK") return personalities @@ -395,7 +517,6 @@ def mount_personality(data:PersonalityMountingInfos): print("- Mounting personality") category = sanitize_path(data.category) name = sanitize_path(data.folder) - language = data.language #.get('language', None) if category=="": return {"status":False, "error":"category must not be empty."} @@ -407,8 +528,6 @@ def mount_personality(data:PersonalityMountingInfos): config_file = package_full_path / "config.yaml" if config_file.exists(): - if language: - package_path += ":" + language """ if package_path in lollmsElfServer.config["personalities"]: ASCIIColors.error("Can't mount exact same personality twice") @@ -513,7 +632,7 @@ def unmount_personality(data:PersonalityMountingInfos): return {"status":False, "error":"category must not be empty."} try: - personality_id = f"{category}/{name}" if language is None or language=="" else f"{category}/{name}:{language}" + personality_id = f"{category}/{name}" if language is None or language=="" else f"{category}/{name}" index = lollmsElfServer.config["personalities"].index(personality_id) lollmsElfServer.config["personalities"].remove(personality_id) if lollmsElfServer.config["active_personality_id"]>=index: @@ -540,7 +659,7 @@ def unmount_personality(data:PersonalityMountingInfos): except Exception as ex: trace_exception(ex) if language: - ASCIIColors.error(f"nok : Personality not found @ {category}/{name}:{language}") + ASCIIColors.error(f"nok : Personality not found @ {category}/{name}") else: ASCIIColors.error(f"nok : Personality not found @ {category}/{name}") diff --git a/lollms/terminal.py b/lollms/terminal.py index 7c6ce51..7044a23 100644 --- a/lollms/terminal.py +++ b/lollms/terminal.py @@ -342,7 +342,7 @@ class MainMenu(Menu): choice = self.show_menu(languages) if 1 <= choice <= len(languages): language = languages[choice - 1] - self.lollms_app.config["personalities"].append(f"{category}/{name}:{language}") + self.lollms_app.config["personalities"].append(f"{category}/{name}") else: print("Invalid choice!") else: