from .base_engine import BaseEngine BACKENDS = [ "mlx", "vllm", "transformers", "llama_cpp", # "llava_llama_cpp", "debug", "sealmmm_transformers", ] ENGINE_LOADED = False def load_multipurpose_chatbot_engine(backend: str): # ! lazy import other engines global ENGINE_LOADED assert backend in BACKENDS, f'{backend} not in {BACKENDS}' if ENGINE_LOADED: raise RuntimeError(f'{ENGINE_LOADED=} this means load_multipurpose_chatbot_engine has already been called! Check your codes.') print(f'Load model from {backend}') if backend == "mlx": from .mlx_engine import MlxEngine model_engine = MlxEngine() elif backend == 'vllm': from .vllm_engine import VllmEngine model_engine = VllmEngine() elif backend == 'transformers': from .transformers_engine import TransformersEngine model_engine = TransformersEngine() elif backend == 'llama_cpp': from .llama_cpp_engine import LlamaCppEngine model_engine = LlamaCppEngine() # ! llava_llama_cpp currently not done due to bugs # elif backend == 'llava_llama_cpp': # from .llava_llama_cpp_engine import LlavaLlamaCppEngine # model_engine = LlavaLlamaCppEngine() elif backend == 'debug': from .debug_engine import DebugEngine model_engine = DebugEngine() elif backend == 'sealmmm_transformers': from .sealmmm_engine import SeaLMMMv0Engine model_engine = SeaLMMMv0Engine() else: raise ValueError(f'backend invalid: {BACKENDS} vs {backend}') model_engine.load_model() ENGINE_LOADED = True return model_engine # ! add more llama.cpp engine here.