Skip to content

Commit

Permalink
Merge pull request #162 from hoomano/kroussel/fix_singletons
Browse files Browse the repository at this point in the history
fix existing singletons
  • Loading branch information
xbasset authored Jul 8, 2024
2 parents ae2071a + e2489c3 commit 6915d14
Show file tree
Hide file tree
Showing 9 changed files with 53 additions and 32 deletions.
6 changes: 2 additions & 4 deletions backend/app/models/assistant/chat_assistant.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from mojodex_core.llm_engine.providers.openai_vision_llm import VisionMessagesData
from abc import ABC, abstractmethod
from mojodex_core.llm_engine.providers.model_loader import ModelLoader

from mojodex_core.user_storage_manager.user_images_file_manager import UserImagesFileManager

class ChatAssistant(ABC):

Expand Down Expand Up @@ -66,10 +66,8 @@ def _call_llm(self, conversation_list, user_id, session_id, user_task_execution_
def __call_vision_llm(self, conversation_list, temperature, max_tokens, user_id, session_id,
user_task_execution_pk, task_name_for_system):
try:
from mojodex_core.user_storage_manager.user_images_file_manager import UserImagesFileManager
user_image_file_manager = UserImagesFileManager()
initial_system_message_data = [VisionMessagesData(role="system", text=self._mpt.prompt, images_path=[
user_image_file_manager.get_image_file_path(image, user_id, session_id)
UserImagesFileManager().get_image_file_path(image, user_id, session_id)
for image in self.input_images])]
conversation_messages_data = [
VisionMessagesData(role=message["role"], text=message["content"], images_path=[]) for message in
Expand Down
7 changes: 2 additions & 5 deletions backend/app/models/user_task_execution_inputs_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,6 @@ class UserTaskExecutionInputsManager:
image_type = "image"
multiple_images_type = "multiple_images"

def __init__(self):
self.user_image_file_manager = UserImagesFileManager()

def construct_inputs_from_request(self, user_task_execution_json_input_values, inputs, files, user_id, session_id):
try:
# ensure inputs is a list of dicts and each dict has the required fields (input_name and input_value)
Expand Down Expand Up @@ -43,13 +40,13 @@ def construct_inputs_from_request(self, user_task_execution_json_input_values, i
if input["type"] == self.image_type:
if input["input_name"] == image_input:
filename = input["value"]
self.user_image_file_manager.store_image_file(files[image_input], filename, user_id, session_id)
UserImagesFileManager().store_image_file(files[image_input], filename, user_id, session_id)
if input["type"] == self.multiple_images_type:
image_name = "_".join(image_input.split("_")[:-1])
image_index = int(image_input.split("_")[-1])
if input["input_name"] == image_name:
filename = input["value"][image_index]
self.user_image_file_manager.store_image_file(files[image_input], filename, user_id, session_id)
UserImagesFileManager().store_image_file(files[image_input], filename, user_id, session_id)

return user_task_execution_json_input_values
except Exception as e:
Expand Down
3 changes: 1 addition & 2 deletions backend/app/routes/image.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
class Image(Resource):
def __init__(self):
Image.method_decorators = [authenticate()]
self.user_image_file_manager = UserImagesFileManager()

def get(self, user_id):

Expand All @@ -25,7 +24,7 @@ def get(self, user_id):

# Logic
try:
images_storage = self.user_image_file_manager.get_images_storage_path(user_id, session_id)
images_storage = UserImagesFileManager().get_images_storage_path(user_id, session_id)
filepath = os.path.join(images_storage, filename)

if not os.path.isfile(filepath):
Expand Down
16 changes: 10 additions & 6 deletions mojodex_core/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,24 @@

class MojodexCoreDB:
_instance = None
_initialized = False

def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(MojodexCoreDB, cls).__new__(
cls, *args, **kwargs)
cls._instance._initialized = False
return cls._instance

def __init__(self) -> None:

try:
connection_string = f"postgresql+psycopg2://{os.environ['DBUSER']}:{os.environ['DBPASS']}@{os.environ['DBHOST']}:5432/{os.environ['DBNAME']}"
self.engine = create_engine(connection_string)
except Exception as e:
logging.warning(f"Error initializing db_session :: {e}")
if not self.__class__._initialized:
try:
connection_string = f"postgresql+psycopg2://{os.environ['DBUSER']}:{os.environ['DBPASS']}@{os.environ['DBHOST']}:5432/{os.environ['DBNAME']}"
self.engine = create_engine(connection_string)
except Exception as e:
logging.warning(f"Error initializing db_session :: {e}")
self.__class__._initialized = True




Expand Down
15 changes: 9 additions & 6 deletions mojodex_core/email_sender/email_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

class EmailService: # Singleton
_instance = None
_initialized = False

admin_email_receivers = os.environ["ADMIN_EMAIL_RECEIVERS"].split(",") if "ADMIN_EMAIL_RECEIVERS" in os.environ else []
technical_email_receivers = os.environ["TECHNICAL_EMAIL_RECEIVERS"].split(",") if "TECHNICAL_EMAIL_RECEIVERS" in os.environ else []
Expand All @@ -16,15 +17,17 @@ def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(EmailService, cls).__new__(
cls, *args, **kwargs)
cls._instance._initialized = False
return cls._instance

def __init__(self):
self.email_service_logger = MojodexCoreLogger("email_service_logger")
try:
self._email_sender: EmailSender = self._configure_email_sender()
except Exception as e:
self.email_service_logger.error(f"Error initializing email service :: {e}")

if not self.__class__._initialized:
self.email_service_logger = MojodexCoreLogger("email_service_logger")
try:
self._email_sender: EmailSender = self._configure_email_sender()
except Exception as e:
self.email_service_logger.error(f"Error initializing email service :: {e}")
self.__class__._initialized = True

@property
def configured(self):
Expand Down
2 changes: 2 additions & 0 deletions mojodex_core/knowledge_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
class KnowledgeManager:

_instance = None
_initialized = False

def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(KnowledgeManager, cls).__new__(
cls, *args, **kwargs)
cls._instance._initialized = False
return cls._instance

@property
Expand Down
12 changes: 8 additions & 4 deletions mojodex_core/llm_engine/providers/model_loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,22 @@
class ModelLoader:
llm_conf_filename = "models.conf"
_instance = None
_initialized = False

def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(ModelLoader, cls).__new__(
cls, *args, **kwargs)
cls._instance._initialized = False
return cls._instance

def __init__(self):
self.providers = self._get_providers()
self.main_llm: LLM = self.get_main_llm_provider()
self.main_vision_llm: LLM = self.get_main_vision_llm_provider()
self.embedding_provider: EmbeddingProvider = self._get_embedding_provider()
if not self.__class__._initialized:
self.providers = self._get_providers()
self.main_llm: LLM = self.get_main_llm_provider()
self.main_vision_llm: LLM = self.get_main_vision_llm_provider()
self.embedding_provider: EmbeddingProvider = self._get_embedding_provider()
self.__class__._initialized = True

def get_main_llm_provider(self):
"""
Expand Down
14 changes: 9 additions & 5 deletions mojodex_core/push_notification/push_notification_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,23 @@

class PushNotificationService: # Singleton
_instance = None
_initialized = False

def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(PushNotificationService, cls).__new__(
cls, *args, **kwargs)
cls._instance._initialized = False
return cls._instance

def __init__(self):
try:
self.push_notification_logger = MojodexCoreLogger("push_notification_logger")
self._push_notification_sender: PushNotificationSender = self._configure_push_notification_sender()
except Exception as e:
self.push_notification_logger.error(f"Error initializing push notification client :: {e}")
if not self.__class__._initialized:
try:
self.push_notification_logger = MojodexCoreLogger("push_notification_logger")
self._push_notification_sender: PushNotificationSender = self._configure_push_notification_sender()
except Exception as e:
self.push_notification_logger.error(f"Error initializing push notification client :: {e}")
self.__class__._initialized = True

@property
def configured(self):
Expand Down
10 changes: 10 additions & 0 deletions mojodex_core/user_storage_manager/user_images_file_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,16 @@


class UserImagesFileManager(UserStorageManager):
_instance = None
_initialized = False

def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(UserImagesFileManager, cls).__new__(
cls, *args, **kwargs)
cls._instance._initialized = False
return cls._instance


def get_images_storage_path(self, user_id, session_id):
try:
Expand Down

0 comments on commit 6915d14

Please sign in to comment.