diff --git a/app.py b/app.py index 3d198891..32149eeb 100644 --- a/app.py +++ b/app.py @@ -36,6 +36,7 @@ from flask import ( from flask_socketio import SocketIO, emit from pathlib import Path import gc +import yaml from geventwebsocket.handler import WebSocketHandler from gevent.pywsgi import WSGIServer import requests @@ -205,6 +206,10 @@ class Gpt4AllWebUI(GPT4AllAPI): ) + self.add_endpoint( + "/get_all_personalities", "get_all_personalities", self.get_all_personalities, methods=["GET"] + ) + def save_settings(self): save_config(self.config, self.config_file_path) @@ -218,8 +223,38 @@ class Gpt4AllWebUI(GPT4AllAPI): def get_current_personality(self): return jsonify({"personality":self.personality.as_dict()}) - + def get_all_personalities(self): + personalities_folder = Path("./personalities") + personalities = {} + for language_folder in personalities_folder.iterdir(): + if language_folder.is_dir(): + personalities[language_folder.name] = {} + for category_folder in language_folder.iterdir(): + if category_folder.is_dir(): + personalities[language_folder.name][category_folder.name] = [] + for personality_folder in category_folder.iterdir(): + if personality_folder.is_dir(): + personality_info = {} + config_path = personality_folder / 'config.yaml' + with open(config_path) as config_file: + config_data = yaml.load(config_file, Loader=yaml.FullLoader) + personality_info['name'] = personality_folder.name + personality_info['description'] = config_data['description'] + personality_info['author'] = config_data['creator'] + personality_info['version'] = config_data['version'] + scripts_path = personality_folder / 'scripts' + personality_info['has_scripts'] = scripts_path.is_dir() + assets_path = personality_folder / 'assets' + logo_path = assets_path / 'logo.png' + gif_logo_path = assets_path / 'logo.gif' + personality_info['has_logo'] = logo_path.is_file() or gif_logo_path.is_file() + if logo_path.is_file(): + personality_info['icon_file'] = 'logo.png' + elif gif_logo_path.is_file(): + personality_info['icon_file'] = 'logo.gif' + personalities[language_folder.name][category_folder.name].append(personality_info) + return json.dumps(personalities) # Settings (data: {"setting_name":,"setting_value":}) def update_setting(self): data = request.get_json() @@ -468,8 +503,7 @@ class Gpt4AllWebUI(GPT4AllAPI): else: self.current_discussion = self.db.create_discussion() messages = self.current_discussion.get_messages() - #for message in messages: - # message["content"] = markdown.markdown(message["content"]) + return jsonify(messages), {'Content-Type': 'application/json; charset=utf-8'} diff --git a/backends/gpt_4all/requirements.txt b/backends/gpt_4all/requirements.txt index e97837d1..461121c3 100644 --- a/backends/gpt_4all/requirements.txt +++ b/backends/gpt_4all/requirements.txt @@ -1 +1 @@ -gpt4all>=0.2.3 \ No newline at end of file +gpt4all \ No newline at end of file diff --git a/backends/py_llama_cpp/requirements.txt b/backends/py_llama_cpp/requirements.txt index 4017323b..aa3c1719 100644 --- a/backends/py_llama_cpp/requirements.txt +++ b/backends/py_llama_cpp/requirements.txt @@ -1 +1 @@ -pyllamacpp>=2.1.3 \ No newline at end of file +pyllamacpp \ No newline at end of file diff --git a/web/src/components/Message.vue b/web/src/components/Message.vue index 1c67560a..543d3bb7 100644 --- a/web/src/components/Message.vue +++ b/web/src/components/Message.vue @@ -144,6 +144,7 @@ export default { return userImgPlaceholder; } + if this.message. return botImgPlaceholder; }