lollms-webui/lollms_webui.py

160 lines
5.2 KiB
Python
Raw Normal View History

2024-01-01 03:18:49 +00:00
"""
File: lollms_web_ui.py
Author: ParisNeo
Description: Singleton class for the LoLLMS web UI.
This class provides a singleton instance of the LoLLMS web UI, allowing access to its functionality and data across multiple endpoints.
"""
2024-01-04 02:57:42 +00:00
from lollms.server.elf_server import LOLLMSElfServer
2024-01-01 03:18:49 +00:00
from lollms.main_config import LOLLMSConfig
2024-01-05 02:40:55 +00:00
from lollms.helpers import trace_exception
2024-01-01 03:18:49 +00:00
from lollms.paths import LollmsPaths
2024-01-05 02:40:55 +00:00
from ascii_colors import ASCIIColors
from datetime import datetime
from api.db import DiscussionsDB, Discussion
from pathlib import Path
try:
from lollms.media import WebcamImageSender, AudioRecorder
Media_on=True
except:
ASCIIColors.warning("Couldn't load media library.\nYou will not be able to perform any of the media linked operations. please verify the logs and install any required installations")
Media_on=False
2024-01-01 03:18:49 +00:00
2024-01-04 02:57:42 +00:00
class LOLLMSWebUI(LOLLMSElfServer):
2024-01-05 02:40:55 +00:00
__instance = None
@staticmethod
def build_instance(
config: LOLLMSConfig,
lollms_paths: LollmsPaths,
load_binding=True,
load_model=True,
load_voice_service=True,
load_sd_service=True,
try_select_binding=False,
try_select_model=False,
callback=None,
socketio = None
):
if LOLLMSWebUI.__instance is None:
LOLLMSWebUI(
config,
lollms_paths,
load_binding=load_binding,
load_model=load_model,
load_sd_service=load_sd_service,
load_voice_service=load_voice_service,
try_select_binding=try_select_binding,
try_select_model=try_select_model,
callback=callback,
socketio=socketio
)
return LOLLMSWebUI.__instance
2024-01-01 03:18:49 +00:00
def __init__(
self,
config: LOLLMSConfig,
lollms_paths: LollmsPaths,
load_binding=True,
load_model=True,
2024-01-04 02:57:42 +00:00
load_voice_service=True,
load_sd_service=True,
2024-01-01 03:18:49 +00:00
try_select_binding=False,
try_select_model=False,
callback=None,
socketio=None
) -> None:
super().__init__(
config,
lollms_paths,
load_binding=load_binding,
load_model=load_model,
2024-01-04 02:57:42 +00:00
load_sd_service=load_sd_service,
load_voice_service=load_voice_service,
2024-01-01 03:18:49 +00:00
try_select_binding=try_select_binding,
try_select_model=try_select_model,
callback=callback,
socketio=socketio
)
2024-01-04 02:57:42 +00:00
self.app_name = "LOLLMSWebUI"
2024-01-01 03:18:49 +00:00
2024-01-05 02:40:55 +00:00
self.busy = False
self.nb_received_tokens = 0
self.config_file_path = config.file_path
self.cancel_gen = False
# Keeping track of current discussion and message
self._current_user_message_id = 0
self._current_ai_message_id = 0
self._message_id = 0
self.db_path = config["db_path"]
if Path(self.db_path).is_absolute():
# Create database object
self.db = DiscussionsDB(self.db_path)
else:
# Create database object
self.db = DiscussionsDB(self.lollms_paths.personal_databases_path/self.db_path)
# If the database is empty, populate it with tables
ASCIIColors.info("Checking discussions database... ",end="")
self.db.create_tables()
self.db.add_missing_columns()
ASCIIColors.success("ok")
# prepare vectorization
if self.config.data_vectorization_activate and self.config.use_discussions_history:
try:
ASCIIColors.yellow("Loading long term memory")
folder = self.lollms_paths.personal_databases_path/"vectorized_dbs"
folder.mkdir(parents=True, exist_ok=True)
self.build_long_term_skills_memory()
ASCIIColors.yellow("Ready")
except Exception as ex:
trace_exception(ex)
self.long_term_memory = None
else:
self.long_term_memory = None
# This is used to keep track of messages
self.download_infos={}
self.connections = {
0:{
"current_discussion":None,
"generated_text":"",
"cancel_generation": False,
"generation_thread": None,
"processing":False,
"schedule_for_deletion":False,
"continuing": False,
"first_chunk": True,
}
}
if Media_on:
try:
self.webcam = WebcamImageSender(socketio,lollmsCom=self)
except:
self.webcam = None
try:
self.rec_output_folder = lollms_paths.personal_outputs_path/"audio_rec"
self.rec_output_folder.mkdir(exist_ok=True, parents=True)
self.summoned = False
self.audio_cap = AudioRecorder(socketio,self.rec_output_folder/"rt.wav", callback=self.audio_callback,lollmsCom=self)
except:
self.audio_cap = None
self.rec_output_folder = None
else:
self.webcam = None
self.rec_output_folder = None
2024-01-01 03:18:49 +00:00
# Other methods and properties of the LoLLMSWebUI singleton class